From 92b3cbfabeadf40f4c0fa3ac93aed9e6507c9bb4 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 12 Feb 2026 23:04:19 +1300 Subject: [PATCH 01/52] Bump version to 2026.3.0-dev --- data/version.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/version.yaml b/data/version.yaml index 05c0a85549..e5909bedef 100644 --- a/data/version.yaml +++ b/data/version.yaml @@ -1,2 +1,2 @@ -release: 2026.1.0b2 -version: '2026.1' +release: 2026.3.0-dev +version: '2026.3' From 286b08846f10bbf8cee8c795503999165a12e950 Mon Sep 17 00:00:00 2001 From: schrob <83939986+schdro@users.noreply.github.com> Date: Thu, 12 Feb 2026 13:26:18 +0100 Subject: [PATCH 02/52] [mipi_spi] Add Waveshare 1.83 v2 panel (#6019) --- content/components/display/mipi_spi.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/content/components/display/mipi_spi.md b/content/components/display/mipi_spi.md index 9ee4ebc1fa..0444a1d556 100644 --- a/content/components/display/mipi_spi.md +++ b/content/components/display/mipi_spi.md @@ -48,6 +48,7 @@ using an octal SPI bus, so references here to parallel and octal SPI are equival | ILI9488 | 320x480 | | ILI9488_A | 320x480 | | ST7796 | 320x480 | +| ST7789P | 240x320 | | ST7789V | 240x320 | | GC9A01A | 240x240 | | GC9D01N | 240x240 | @@ -56,6 +57,15 @@ using an octal SPI bus, so references here to parallel and octal SPI are equival | CO5300 | 466x466 | | CUSTOM | Customisable | +### Display panels + +These models represent display panels with known dimensions, but without a microcontroller. The configuration will require +the pins used to interface to the display to be specified. + +| Panel | Manufacturer | Product Description | +| ------------------------------------ | ------------ | ----------------------------------------------------------------- | +| WAVESHARE-1.83-V2 | Waveshare | | + ### Boards with integrated displays | Model | Manufacturer | Product Description | From 28e42db238fe1c86558be6b50e5b3e990f009b00 Mon Sep 17 00:00:00 2001 From: Darren Griffin Date: Fri, 13 Feb 2026 19:46:57 +0000 Subject: [PATCH 03/52] Hugo to Starlight migration (#6037) --- .claude/instructions.md | 330 +- .devcontainer/devcontainer.json | 46 +- .github/PULL_REQUEST_TEMPLATE.md | 22 +- .github/copilot-instructions.md | 137 +- .github/workflows/ci.yml | 41 +- .gitignore | 47 +- .markdownlintignore | 1 + Makefile | 59 - README.md | 413 +- all_automations.json | 522 -- astro.config.mjs | 305 + build_automations_pages.py | 45 - content/_index.md | 136 - content/changelog/2021.10.0.md | 426 - content/changelog/2021.11.0.md | 292 - content/changelog/2021.12.0.md | 252 - content/changelog/2021.8.0.md | 263 - content/changelog/2021.9.0.md | 210 - content/changelog/2022.1.0.md | 241 - content/changelog/2022.10.0.md | 103 - content/changelog/2022.11.0.md | 234 - content/changelog/2022.12.0.md | 216 - content/changelog/2022.2.0.md | 265 - content/changelog/2022.3.0.md | 135 - content/changelog/2022.4.0.md | 194 - content/changelog/2022.5.0.md | 151 - content/changelog/2022.6.0.md | 203 - content/changelog/2022.8.0.md | 173 - content/changelog/2022.9.0.md | 159 - content/changelog/2023.10.0.md | 173 - content/changelog/2023.11.0.md | 266 - content/changelog/2023.12.0.md | 307 - content/changelog/2023.2.0.md | 234 - content/changelog/2023.3.0.md | 190 - content/changelog/2023.4.0.md | 222 - content/changelog/2023.5.0.md | 195 - content/changelog/2023.6.0.md | 218 - content/changelog/2023.7.0.md | 178 - content/changelog/2023.8.0.md | 174 - content/changelog/2023.9.0.md | 233 - content/changelog/2024.10.0.md | 188 - content/changelog/2024.11.0.md | 242 - content/changelog/2024.12.0.md | 207 - content/changelog/2024.2.0.md | 230 - content/changelog/2024.3.0.md | 252 - content/changelog/2024.4.0.md | 178 - content/changelog/2024.5.0.md | 265 - content/changelog/2024.6.0.md | 405 - content/changelog/2024.7.0.md | 174 - content/changelog/2024.8.0.md | 261 - content/changelog/2024.9.0.md | 182 - content/changelog/2025.2.0.md | 397 - content/changelog/2025.3.0.md | 146 - content/changelog/2025.4.0.md | 158 - content/changelog/2025.5.0.md | 411 - content/changelog/2025.6.0.md | 463 - content/changelog/2025.7.0.md | 802 -- content/changelog/2025.8.0.md | 702 -- content/changelog/_index.md | 6 - content/changelog/v1.10.0.md | 242 - content/changelog/v1.11.0.md | 283 - content/changelog/v1.12.0.md | 189 - content/changelog/v1.13.0.md | 290 - content/changelog/v1.14.0.md | 563 -- content/changelog/v1.15.0.md | 618 -- content/changelog/v1.16.0.md | 387 - content/changelog/v1.17.0.md | 219 - content/changelog/v1.18.0.md | 172 - content/changelog/v1.19.0.md | 254 - content/changelog/v1.20.0.md | 219 - content/changelog/v1.8.0.md | 243 - content/changelog/v1.9.0.md | 326 - content/components/_index.md | 1121 --- content/components/button/safe_mode.md | 35 - content/components/display/max7219.md | 185 - content/components/light/binary.md | 34 - content/components/light/monochromatic.md | 43 - content/components/packet_transport/sx126x.md | 58 - content/components/packet_transport/sx127x.md | 54 - content/components/packet_transport/uart.md | 45 - content/components/packet_transport/udp.md | 42 - content/components/sensor/filter/multiply.md | 8 - content/components/sensor/hdc2010.md | 51 - content/components/sensor/hlw8012.md | 262 - content/components/switch/restart.md | 33 - content/components/switch/safe_mode.md | 34 - content/images/_index.md | 16 - content/projects/_index.md | 16 - hugo.yaml | 192 - lint.mjs | 447 + netlify.toml | 38 +- package-lock.json | 7697 +++++++++++++++++ package.json | 34 + pagefind/fragment/en-us_433ff7f.pf_fragment | Bin 0 -> 187 bytes pagefind/index/en-us_d8685b2.pf_index | Bin 0 -> 175 bytes pagefind/pagefind-entry.json | 1 + pagefind/pagefind-highlight.js | 1069 +++ pagefind/pagefind-modular-ui.css | 214 + pagefind/pagefind-modular-ui.js | 8 + pagefind/pagefind-ui.css | 1 + pagefind/pagefind-ui.js | 2 + pagefind/pagefind.en-us_48573bd275bba.pf_meta | Bin 0 -> 86 bytes pagefind/pagefind.js | 9 + pagefind/wasm.en-us.pagefind | Bin 0 -> 70873 bytes pagefind/wasm.unknown.pagefind | Bin 0 -> 67201 bytes {static => public}/favicon-128x128.png | Bin {static => public}/favicon-16x16.png | Bin {static => public}/favicon-192x192.png | Bin {static => public}/favicon-256x256.png | Bin {static => public}/favicon-32x32.png | Bin {static => public}/favicon-512x512.png | Bin {static => public}/favicon.ico | Bin {static => public}/images/6897d.jpg | Bin {static => public}/images/EE895.png | Bin {static => public}/images/HTE501.png | Bin {static => public}/images/TEE501.png | Bin {static => public}/images/a01nyub.jpg | Bin {static => public}/images/a02yyuw.jpg | Bin {static => public}/images/ac_dimmer.svg | 0 {static => public}/images/adc128s102.png | Bin .../images/addressable_light.jpg | Bin {static => public}/images/ade7880.svg | 0 {static => public}/images/ade7953.svg | 0 {static => public}/images/ads1115.jpg | Bin {static => public}/images/ads1118.jpg | Bin {static => public}/images/ags10.jpg | Bin {static => public}/images/aht10.jpg | Bin {static => public}/images/aic3204.svg | 0 .../images/air-conditioner-ir.svg | 0 {static => public}/images/air-conditioner.svg | 0 {static => public}/images/airthings_logo.png | Bin {static => public}/images/alarm-panel.svg | 0 {static => public}/images/alpha3.jpg | Bin {static => public}/images/am2315c.jpg | Bin {static => public}/images/am2320.jpg | Bin {static => public}/images/am43.jpg | Bin .../images/analog_threshold.svg | 0 {static => public}/images/anova.png | Bin {static => public}/images/apa102.jpg | Bin {static => public}/images/apds9306.png | Bin {static => public}/images/apds9960.jpg | Bin {static => public}/images/aqi.svg | 0 {static => public}/images/arduino_logo.svg | 0 {static => public}/images/as3935.jpg | Bin {static => public}/images/as5600.jpg | Bin {static => public}/images/as7341.jpg | Bin {static => public}/images/at581x.png | Bin {static => public}/images/atm90e26.jpg | Bin {static => public}/images/atm90e32.jpg | Bin {static => public}/images/audio_adc.svg | 0 {static => public}/images/audio_dac.svg | 0 {static => public}/images/auto-fix.svg | 0 {static => public}/images/axs15231.svg | 0 {static => public}/images/b_parasite.jpg | Bin {static => public}/images/bedjet.png | Bin {static => public}/images/bh1750.jpg | Bin .../images/bh1900nux-evk-001.png | Bin .../images/binary_sensor_map.jpg | Bin {static => public}/images/bk72xx.svg | 0 {static => public}/images/bl0906.png | Bin {static => public}/images/bl0939.png | Bin {static => public}/images/bl0940.png | Bin {static => public}/images/bl0942.png | Bin {static => public}/images/bluetooth.svg | 0 {static => public}/images/bm8563.svg | 0 {static => public}/images/bme280.jpg | Bin {static => public}/images/bme680.jpg | Bin {static => public}/images/bmi160.jpg | Bin {static => public}/images/bmp180.jpg | Bin {static => public}/images/bmp280.jpg | Bin {static => public}/images/bmp388.jpg | Bin {static => public}/images/bmp581.jpg | Bin {static => public}/images/bp1658cj.svg | 0 {static => public}/images/bp5758d.svg | 0 .../images/breakable-header.jpg | Bin .../images/brightness-medium.svg | 0 {static => public}/images/bug-report.svg | 0 {static => public}/images/buzzer.jpg | Bin {static => public}/images/camera.svg | 0 {static => public}/images/canbus.svg | 0 {static => public}/images/cap1188.jpg | Bin .../images/captive_portal-ui.png | Bin {static => public}/images/cc1101.webp | Bin {static => public}/images/ccs811.jpg | Bin {static => public}/images/cd74hc4067.jpg | Bin {static => public}/images/ch422g.svg | 0 {static => public}/images/ch423.png | Bin {static => public}/images/chart-line.svg | 0 {static => public}/images/chsc6x.png | Bin {static => public}/images/clock-outline.svg | 0 {static => public}/images/cloud-circle.svg | 0 {static => public}/images/cm1106.png | Bin {static => public}/images/color_lens.svg | 0 {static => public}/images/connection.svg | 0 {static => public}/images/content-copy.svg | 0 .../images/cookbook-sonoff-fishpond-pump.jpg | Bin {static => public}/images/crosshairs-gps.svg | 0 {static => public}/images/cs5460a.png | Bin {static => public}/images/cse7761.svg | 0 {static => public}/images/cse7766.svg | 0 {static => public}/images/cst816.jpg | Bin {static => public}/images/ct_clamp.jpg | Bin {static => public}/images/dac.svg | 0 {static => public}/images/dac7678.svg | 0 {static => public}/images/dallas.jpg | Bin {static => public}/images/daly_bms.jpg | Bin {static => public}/images/description.svg | 0 {static => public}/images/dfplayer.svg | 0 {static => public}/images/dfrobot_sen0395.jpg | Bin {static => public}/images/dht.jpg | Bin {static => public}/images/dht12.jpg | Bin .../images/display_time_temp_oled_2.jpg | Bin {static => public}/images/dlms_meter.jpg | Bin {static => public}/images/dps310.jpg | Bin {static => public}/images/ds2484.svg | 0 {static => public}/images/dsmr.svg | 0 {static => public}/images/ehmtx.jpg | Bin {static => public}/images/ektf2232.svg | 0 {static => public}/images/electric-switch.svg | 0 {static => public}/images/emc2101.jpg | Bin {static => public}/images/ens160.jpg | Bin {static => public}/images/ens210.jpg | Bin {static => public}/images/epaper.svg | 0 {static => public}/images/es7210.svg | 0 {static => public}/images/es7243e.svg | 0 {static => public}/images/es8156.svg | 0 {static => public}/images/es8311.svg | 0 {static => public}/images/es8388.svg | 0 {static => public}/images/esp-now.svg | 0 .../images/esp32-s3-korvo-2-lcd.png | Bin {static => public}/images/esp32.svg | 0 {static => public}/images/esp32_s3_box_3.png | Bin {static => public}/images/esp8266.svg | 0 {static => public}/images/ethernet.svg | 0 .../images/exposure_notifications.png | Bin {static => public}/images/external-link.svg | 0 .../images/external_components.svg | 0 {static => public}/images/ezo-ph-circuit.png | Bin {static => public}/images/ezo-pmp.jpg | Bin {static => public}/images/face.svg | 0 {content => public}/images/factory-rst-ui.png | Bin {static => public}/images/fan.svg | 0 {static => public}/images/feedback_cover.svg | 0 .../images/file-document-box.svg | 0 {static => public}/images/fingerprint.svg | 0 {static => public}/images/flash.svg | 0 {static => public}/images/folder-open.svg | 0 {static => public}/images/format-font.svg | 0 {static => public}/images/fs3000.jpg | Bin {static => public}/images/function.svg | 0 .../images/garage-variant.svg | 0 {static => public}/images/gcja5.svg | 0 {static => public}/images/gdk101.jpg | Bin {static => public}/images/gl_r01.jpg | Bin {static => public}/images/gp2y1010au0f.png | Bin {static => public}/images/gp8403.svg | 0 {content => public}/images/gpio-ui.png | Bin {static => public}/images/gpio.svg | 0 .../images/graphical_display_menu.png | Bin {static => public}/images/grove-gas-mc-v2.png | Bin {static => public}/images/grove_tb6612fng.jpg | Bin {static => public}/images/growatt.jpg | Bin {content => public}/images/haier-climate.jpg | Bin {static => public}/images/haier.svg | 0 .../images/havellsgti5000d_s.jpg | Bin {static => public}/images/hbridge-relay.jpg | Bin {static => public}/images/hc8.png | Bin {static => public}/images/hdc1080.jpg | Bin {static => public}/images/hdc2010.png | Bin {static => public}/images/he60r.jpg | Bin .../images/head-lightbulb-outline.svg | 0 {static => public}/images/hero.png | Bin .../images/high-voltage-warning.svg | 0 {static => public}/images/hlw8012.svg | 0 {static => public}/images/hlw8032.png | Bin {static => public}/images/hm3301.jpg | Bin {static => public}/images/hmc5883l.jpg | Bin {static => public}/images/home-assistant.svg | 0 {static => public}/images/honeywellabp.jpg | Bin {static => public}/images/honeywellhih.jpg | Bin {static => public}/images/host.svg | 0 {static => public}/images/hotel.svg | 0 .../images/hrxl_maxsonar_wr.jpg | Bin {static => public}/images/http.svg | 0 {static => public}/images/htu21d.jpg | Bin {static => public}/images/htu31d.jpg | Bin {static => public}/images/hub75.svg | 0 {static => public}/images/hx711.jpg | Bin {static => public}/images/hydreon_rg9.jpg | Bin {static => public}/images/hyt271.jpg | Bin {static => public}/images/i2c.svg | 0 {static => public}/images/i2s_audio.svg | 0 {static => public}/images/iaqcore.jpg | Bin {static => public}/images/icons/bolt.svg | 0 {static => public}/images/icons/briefcase.svg | 0 {static => public}/images/icons/code.svg | 0 {static => public}/images/icons/comments.svg | 0 {static => public}/images/icons/compass.svg | 0 {static => public}/images/icons/computer.svg | 0 {static => public}/images/icons/discord.svg | 0 {static => public}/images/icons/edit.svg | 0 {static => public}/images/icons/github.svg | 0 {static => public}/images/icons/history.svg | 0 .../images/icons/home-assistant.svg | 0 {static => public}/images/icons/home.svg | 0 {static => public}/images/icons/industry.svg | 0 .../images/icons/kitchen-set.svg | 0 {static => public}/images/icons/list.svg | 0 {static => public}/images/icons/magic.svg | 0 {static => public}/images/icons/microchip.svg | 0 .../icons/netlify-badge-color-accent.svg | 0 .../images/icons/ohf-logo-on-dark.svg | 0 .../images/icons/ohf-logo-on-light.svg | 0 {static => public}/images/icons/print.svg | 0 .../images/icons/puzzle-piece.svg | 0 .../images/icons/raspberry-pi.svg | 0 .../images/icons/shield-alt.svg | 0 {static => public}/images/icons/terminal.svg | 0 {static => public}/images/icons/user-cog.svg | 0 {static => public}/images/icons/wifi.svg | 0 {static => public}/images/ili9341.jpg | Bin .../components => public}/images/ili9341.svg | 0 .../components => public}/images/ili9342.svg | 0 .../components => public}/images/ili9481.svg | 0 {static => public}/images/ili9488.svg | 0 .../images/image-multiple-outline.svg | 0 {static => public}/images/image-outline.svg | 0 .../images/image-sync-outline.svg | 0 {static => public}/images/improv-social.png | Bin {static => public}/images/improv.svg | 0 {static => public}/images/ina219.jpg | Bin {static => public}/images/ina226.jpg | Bin {static => public}/images/ina228.jpg | Bin {static => public}/images/ina260.jpg | Bin {static => public}/images/ina2xx.jpg | Bin {static => public}/images/ina3221.jpg | Bin {static => public}/images/indicator.jpg | Bin .../images/inkbird_isbth1_mini.jpg | Bin {static => public}/images/inkplate6.jpg | Bin {static => public}/images/jsn-sr04t-v3.jpg | Bin .../components => public}/images/json.svg | 0 {static => public}/images/jumper-wires.jpg | Bin {static => public}/images/kamstrup_kmp.jpg | Bin {static => public}/images/kmeteriso.jpg | Bin {static => public}/images/kuntze.jpg | Bin {static => public}/images/language-cpp.svg | 0 {static => public}/images/lc709203f.jpg | Bin {static => public}/images/lcd.jpg | Bin {static => public}/images/lcd_menu.png | Bin {static => public}/images/ld2410.jpg | Bin {static => public}/images/ld2412.jpg | Bin {static => public}/images/ld2420.jpg | Bin {static => public}/images/ld2450.png | Bin {static => public}/images/ldo.svg | 0 .../leak-detector-m5stickC_main_index.jpg | Bin {static => public}/images/led-on.svg | 0 {static => public}/images/libretiny.svg | 0 {static => public}/images/lightbulb.svg | 0 .../images/lilygo_t5_47_touch.jpg | Bin {static => public}/images/link.svg | 0 {static => public}/images/lm75b.jpg | Bin {static => public}/images/ln882x.svg | 0 {static => public}/images/logo-docs.svg | 0 .../images/logo-text-on-dark.svg | 0 {static => public}/images/logo-text.svg | 0 {static => public}/images/logo.png | Bin {static => public}/images/logo.svg | 0 {static => public}/images/lps22.webp | Bin {static => public}/images/ltr-ps.jpg | Bin {static => public}/images/ltr303.jpg | Bin {static => public}/images/ltr329.jpg | Bin {static => public}/images/ltr390.jpg | Bin {static => public}/images/ltr501.jpg | Bin {content => public}/images/lvgl-hello.png | Bin {static => public}/images/lvgl.png | Bin {static => public}/images/lvgl_c_bns.png | Bin {static => public}/images/lvgl_c_lig.png | Bin {static => public}/images/lvgl_c_num.png | Bin {static => public}/images/lvgl_c_sel.png | Bin {static => public}/images/lvgl_c_swi.png | Bin {static => public}/images/lvgl_c_txt.png | Bin .../images/lvgl_cook_volume.png | Bin {static => public}/images/lvgl_switch.png | Bin {static => public}/images/m5stack_8angle.png | Bin .../made-for-esphome-black-on-transparent.png | Bin .../made-for-esphome-black-on-transparent.svg | 0 .../made-for-esphome-black-on-white.png | Bin .../made-for-esphome-black-on-white.svg | 0 .../made-for-esphome-white-on-black.png | Bin .../made-for-esphome-white-on-black.svg | 0 .../made-for-esphome-white-on-transparent.png | Bin .../made-for-esphome-white-on-transparent.svg | 0 {static => public}/images/mapping.svg | 0 {static => public}/images/matrix_keypad.jpg | Bin {static => public}/images/max17043.jpg | Bin {static => public}/images/max31855.jpg | Bin {static => public}/images/max31856.jpg | Bin {static => public}/images/max31865.jpg | Bin {static => public}/images/max44009.svg | 0 {static => public}/images/max6675.jpg | Bin {static => public}/images/max6956.jpg | Bin {static => public}/images/max7219.jpg | Bin {static => public}/images/max7219digit.jpg | Bin {static => public}/images/max9611.jpg | Bin {static => public}/images/mcp230xx.svg | 0 .../components => public}/images/mcp23sxx.svg | 0 .../components => public}/images/mcp2515.svg | 0 {static => public}/images/mcp3008.jpg | Bin {static => public}/images/mcp3204.jpg | Bin {static => public}/images/mcp3221.png | Bin {static => public}/images/mcp4461.jpg | Bin {static => public}/images/mcp4725.jpg | Bin {static => public}/images/mcp4728.jpg | Bin {static => public}/images/mcp47a1.svg | 0 {static => public}/images/mcp9600.jpg | Bin {static => public}/images/mcp9808.jpg | Bin {static => public}/images/mhz19.jpg | Bin {static => public}/images/micronova.svg | 0 {static => public}/images/microphone.svg | 0 {static => public}/images/mics_4514.jpg | Bin {static => public}/images/midea.svg | 0 {static => public}/images/mixer.svg | 0 {static => public}/images/mlx90393.jpg | Bin {static => public}/images/mlx90614.jpg | Bin {static => public}/images/mmc5603.jpg | Bin {static => public}/images/mmc5983.jpg | Bin {static => public}/images/modbus.png | Bin .../images/mopeka_pro_check.jpg | Bin .../images/mopeka_std_check.jpg | Bin {static => public}/images/motor.png | Bin {static => public}/images/mpl3115a2.jpg | Bin {static => public}/images/mpr121.jpg | Bin {static => public}/images/mpu6050.jpg | Bin {static => public}/images/mpu6886.jpg | Bin {static => public}/images/mqtt.png | Bin {static => public}/images/ms5611.jpg | Bin {static => public}/images/ms8607.jpg | Bin {static => public}/images/msa301.jpg | Bin {static => public}/images/msa311.jpg | Bin {static => public}/images/my9231.svg | 0 {static => public}/images/nau7802.jpg | Bin {static => public}/images/network-wifi.svg | 0 {static => public}/images/new-box.svg | 0 {static => public}/images/nextion.jpg | Bin {static => public}/images/nfc.png | Bin {static => public}/images/npi19.jpg | Bin {static => public}/images/nrf52.svg | 0 {static => public}/images/ntc.jpg | Bin {static => public}/images/omega.svg | 0 {static => public}/images/one-wire.svg | 0 {static => public}/images/opentherm.png | Bin {static => public}/images/openthread.png | Bin {static => public}/images/opt3001.jpg | Bin {content => public}/images/output-ui.png | Bin .../images/packet_transport.svg | 0 {static => public}/images/pca6416a.svg | 0 {static => public}/images/pca9554a.jpg | Bin {static => public}/images/pca9685.jpg | Bin {static => public}/images/pcd8544.jpg | Bin {static => public}/images/pcf8574.jpg | Bin {static => public}/images/percent.svg | 0 {static => public}/images/pipsolar.jpg | Bin {static => public}/images/pm1006.jpg | Bin {static => public}/images/pm2005.png | Bin {static => public}/images/pmsa003i.jpg | Bin {static => public}/images/pmsx003.svg | 0 {static => public}/images/pmwcs3.jpg | Bin {static => public}/images/pn532.jpg | Bin {static => public}/images/pn7150.jpg | Bin {static => public}/images/pn716x.jpg | Bin {static => public}/images/power.svg | 0 {static => public}/images/power_meter.jpg | Bin {static => public}/images/power_settings.svg | 0 {static => public}/images/prometheus.svg | 0 {static => public}/images/psram.svg | 0 {static => public}/images/pulse.svg | 0 {static => public}/images/pulses.png | Bin {static => public}/images/pwm.png | Bin {static => public}/images/pylontech.jpg | Bin {static => public}/images/pzem-ac.jpg | Bin {static => public}/images/pzem-dc.jpg | Bin {static => public}/images/pzem004t.svg | 0 {static => public}/images/qmc5883l.jpg | Bin {static => public}/images/qmp6988_env3.png | Bin {static => public}/images/qr-code.svg | 0 {static => public}/images/qwiic_pir.jpg | Bin {static => public}/images/radio-tower.svg | 0 {static => public}/images/radon_eye_logo.png | Bin {static => public}/images/rc522.jpg | Bin {static => public}/images/rd03d.webp | Bin {static => public}/images/rdm6300.jpg | Bin {static => public}/images/remote.svg | 0 .../images/resol_deltasol_bs_plus.jpg | Bin {static => public}/images/restart-alert.svg | 0 {static => public}/images/restart.svg | 0 {static => public}/images/rf_bridge.jpg | Bin {static => public}/images/rgb.png | Bin {static => public}/images/rgbw.png | Bin {static => public}/images/rotary_encoder.jpg | Bin {static => public}/images/rp2040.svg | 0 {static => public}/images/rs485.jpg | Bin {static => public}/images/rtl87xx.svg | 0 {static => public}/images/ruuvitag.jpg | Bin {content => public}/images/safemode-ui.png | Bin {static => public}/images/scd30.jpg | Bin {static => public}/images/scd4x.jpg | Bin {static => public}/images/sdl.png | Bin {static => public}/images/sdm220m.jpg | Bin {static => public}/images/sdp31.jpg | Bin {static => public}/images/sds011.jpg | Bin {static => public}/images/seeed-mr24hpc1.jpg | Bin {static => public}/images/seeed_mr60bha2.jpg | Bin {static => public}/images/seeed_mr60fda2.jpg | Bin {static => public}/images/seg00.svg | 0 {static => public}/images/seg01.svg | 0 {static => public}/images/seg02.svg | 0 {static => public}/images/seg05.svg | 0 {static => public}/images/seg06.svg | 0 {static => public}/images/seg07.svg | 0 {static => public}/images/seg08.svg | 0 {static => public}/images/seg09.svg | 0 {static => public}/images/seg0D.svg | 0 {static => public}/images/seg0E.svg | 0 {static => public}/images/seg10.svg | 0 {static => public}/images/seg15.svg | 0 {static => public}/images/seg17.svg | 0 {static => public}/images/seg1C.svg | 0 {static => public}/images/seg1D.svg | 0 {static => public}/images/seg1F.svg | 0 {static => public}/images/seg20.svg | 0 {static => public}/images/seg22.svg | 0 {static => public}/images/seg27.svg | 0 {static => public}/images/seg30.svg | 0 {static => public}/images/seg31.svg | 0 {static => public}/images/seg33.svg | 0 {static => public}/images/seg37.svg | 0 {static => public}/images/seg3C.svg | 0 {static => public}/images/seg3D.svg | 0 {static => public}/images/seg3E.svg | 0 {static => public}/images/seg3F.svg | 0 {static => public}/images/seg40.svg | 0 {static => public}/images/seg47.svg | 0 {static => public}/images/seg48.svg | 0 {static => public}/images/seg49.svg | 0 {static => public}/images/seg4E.svg | 0 {static => public}/images/seg4F.svg | 0 {static => public}/images/seg58.svg | 0 {static => public}/images/seg5B.svg | 0 {static => public}/images/seg5E.svg | 0 {static => public}/images/seg5F.svg | 0 {static => public}/images/seg65.svg | 0 {static => public}/images/seg67.svg | 0 {static => public}/images/seg6D.svg | 0 {static => public}/images/seg6F.svg | 0 {static => public}/images/seg70.svg | 0 {static => public}/images/seg73.svg | 0 {static => public}/images/seg77.svg | 0 {static => public}/images/seg78.svg | 0 {static => public}/images/seg79.svg | 0 {static => public}/images/seg7E.svg | 0 {static => public}/images/seg7F.svg | 0 {static => public}/images/seg80.svg | 0 {static => public}/images/seg8E.svg | 0 {static => public}/images/segB0.svg | 0 {static => public}/images/segFE.svg | 0 .../images/selec_meter_em2m.jpg | Bin {static => public}/images/sen0321.jpg | Bin {static => public}/images/sen21231.png | Bin {static => public}/images/sen54.jpg | Bin {static => public}/images/senseair_s8.jpg | Bin .../images/sensor_filter_calibrate_linear.png | Bin {static => public}/images/server-network.svg | 0 {static => public}/images/servo.svg | 0 {static => public}/images/settings.svg | 0 {static => public}/images/sfa30.jpg | Bin {static => public}/images/sgp30.jpg | Bin {static => public}/images/sgp40.jpg | Bin {static => public}/images/shellydimmer2.jpg | Bin {static => public}/images/sht3xd.jpg | Bin {static => public}/images/sht4x.jpg | Bin {static => public}/images/shtc3.jpg | Bin {content => public}/images/shutdown-ui.png | Bin {static => public}/images/sigma-delta.svg | 0 {static => public}/images/sigma.svg | 0 {static => public}/images/sim800l.jpg | Bin {static => public}/images/sm16716.svg | 0 {static => public}/images/sm2135.svg | 0 {static => public}/images/sm2235.svg | 0 {static => public}/images/sm2335.svg | 0 {static => public}/images/sm300d2.jpg | Bin {static => public}/images/sml.svg | 0 {static => public}/images/smt100.jpg | Bin {static => public}/images/sn74hc595.jpg | Bin {static => public}/images/sonoff_d1.jpg | Bin {static => public}/images/speaker.svg | 0 {static => public}/images/spi.svg | 0 .../images/sprinkler-variant.svg | 0 {static => public}/images/sps30.jpg | Bin {static => public}/images/ssd1306.jpg | Bin {static => public}/images/ssd1322.jpg | Bin {static => public}/images/ssd1325.jpg | Bin {static => public}/images/ssd1327.jpg | Bin {static => public}/images/ssd1331.jpg | Bin {static => public}/images/ssd1351.jpg | Bin {static => public}/images/st7567.jpg | Bin {static => public}/images/st7735.jpg | Bin {static => public}/images/st7789v.jpg | Bin .../components => public}/images/st7796.svg | 0 {static => public}/images/st7920.jpg | Bin {static => public}/images/stepper.svg | 0 {static => public}/images/sts3x.jpg | Bin {static => public}/images/stts22h.jpg | Bin {static => public}/images/sun_1000g2.png | Bin {static => public}/images/sx126x.png | Bin {static => public}/images/sx127x.png | Bin {static => public}/images/sx1509.jpg | Bin {static => public}/images/sy6970.jpg | Bin {static => public}/images/system-update.svg | 0 {static => public}/images/t4-s3.jpg | Bin {static => public}/images/t6615.jpg | Bin {static => public}/images/tab5.jpg | Bin {static => public}/images/tc74.jpg | Bin {static => public}/images/tca9548a.jpg | Bin {static => public}/images/tca9555.svg | 0 {static => public}/images/tcs34725.jpg | Bin {static => public}/images/teleinfo.jpg | Bin {static => public}/images/tem3200.jpg | Bin {static => public}/images/thermometer.svg | 0 {static => public}/images/thermopro_tp357.jpg | Bin .../images/timer-play-outline.svg | 0 {static => public}/images/timer.svg | 0 {static => public}/images/tlc59208f.jpg | Bin {static => public}/images/tlc5947.jpg | Bin {static => public}/images/tlc5971.jpg | Bin {static => public}/images/tm1621.jpg | Bin {static => public}/images/tm1637.jpg | Bin {static => public}/images/tm1638.jpg | Bin .../images/tm1651_battery_display.jpg | Bin {static => public}/images/tmp102.jpg | Bin {static => public}/images/tmp1075.jpg | Bin {static => public}/images/tmp117.jpg | Bin {static => public}/images/tof10120.jpg | Bin {static => public}/images/tormatic.png | Bin {static => public}/images/touch.svg | 0 {static => public}/images/tsl2561.jpg | Bin {static => public}/images/tsl2591.jpg | Bin {static => public}/images/ttp229.jpg | Bin {static => public}/images/tuya.png | Bin {static => public}/images/tx20.jpg | Bin {static => public}/images/uart.svg | 0 {static => public}/images/udp.svg | 0 {static => public}/images/ufire_ec.png | Bin {static => public}/images/ufire_ise.png | Bin {static => public}/images/ultrasonic.jpg | Bin {static => public}/images/upload.svg | 0 {static => public}/images/uponor.svg | 0 {static => public}/images/usb.svg | 0 {static => public}/images/veml3235.jpg | Bin {static => public}/images/veml6030.jpg | Bin {static => public}/images/veml7700.jpg | Bin {static => public}/images/vl53l0x.jpg | Bin {static => public}/images/voice-assistant.svg | 0 {static => public}/images/water-drop.svg | 0 {static => public}/images/water_heater.svg | 0 {static => public}/images/waveform.svg | 0 .../images/waveshare_epaper.jpg | Bin .../images/waveshare_touch-s3.jpg | Bin {static => public}/images/weather-sunny.svg | 0 {static => public}/images/wiegand.jpg | Bin .../images/wifi-strength-alert-outline.svg | 0 .../images/wireguard_custom_logo.svg | 0 {static => public}/images/wk2168.jpg | Bin {static => public}/images/wt32-sc01.png | Bin {static => public}/images/wts01.png | Bin {static => public}/images/x9c.jpg | Bin {static => public}/images/xiaomi_cgg1.jpg | Bin .../images/xiaomi_hhccjcy01.jpg | Bin .../images/xiaomi_hhccjcy10.jpg | Bin {static => public}/images/xiaomi_lywsd02.jpg | Bin .../images/xiaomi_lywsd03mmc.jpg | Bin {static => public}/images/xiaomi_lywsdcgq.jpg | Bin .../images/xiaomi_mijia_logo.jpg | Bin {static => public}/images/xiaomi_miscale.jpg | Bin .../images/xiaomi_rtcgq02lm.jpg | Bin {static => public}/images/xl9535.svg | 0 {static => public}/images/xpt2046.jpg | Bin {static => public}/images/xxtea.svg | 0 {static => public}/images/z-wave.svg | 0 {static => public}/images/zgm053.jpg | Bin {static => public}/images/zigbee.svg | 0 {static => public}/images/zio_ultrasonic.jpg | Bin .../bluetooth-proxy/esp32_generic.png | Bin .../projects/bluetooth-proxy/gl-s10.png | Bin .../projects/bluetooth-proxy/header.png | Bin .../bluetooth-proxy/lilygo-eth-poe.png | Bin .../bluetooth-proxy/m5stack_atom_lite.png | Bin .../bluetooth-proxy/olimex_esp32_poe_iso.png | Bin .../bluetooth-proxy/seeed-esp32-poe.png | Bin .../projects/bluetooth-proxy/wt32-eth01.png | Bin .../projects/empty/espressif.png | Bin {static => public}/projects/empty/pico-w.png | Bin .../projects/irrf-proxy/xiao-ir-mate.png | Bin .../projects/media-player/atom_echo.png | Bin .../media-player/atom_speaker_kit.png | Bin .../projects/media-player/esp_muse_luxe.png | Bin .../projects/media-player/esp_muse_proto.png | Bin .../voice-assistant/esp32-s3-box-3.png | Bin .../voice-assistant/home-assistant-voice.png | Bin public/robots.txt | 29 + script/check_urls.mjs | 112 + script/convert-pr.sh | 27 - script/convert_rst_to_md.py | 2094 ----- script/fix_markdown.py | 686 -- script/migrate.sh | 44 - script/release_notes_template.md | 21 +- script/seo_audit.mjs | 323 + script/seo_report.mjs | 237 + script/test-next-migrate.sh | 44 - script/test-release-migrate.sh | 45 - src/assets/hero.png | Bin 0 -> 67563 bytes src/assets/logo-dark.svg | 23 + src/assets/logo-light.svg | 23 + src/components/APIClass.astro | 32 + src/components/APIKeyGenerator.astro | 86 + src/components/APIRef.astro | 38 + src/components/APIStruct.astro | 32 + src/components/FeatureGrid.astro | 41 + src/components/Figure.astro | 58 + src/components/FilterList.astro | 24 + src/components/Footer.astro | 151 + src/components/GettingStartedGrid.astro | 58 + src/components/HLW8012Calculator.astro | 204 + src/components/ImgTable.astro | 70 + src/content.config.ts | 7 + src/content/docs/404.mdx | 10 + .../content/docs/automations/actions.mdx | 77 +- .../content/docs/automations/all_actions.mdx | 8 +- .../docs/automations/all_conditions.mdx | 4 +- .../content/docs/automations/index.mdx | 16 +- .../content/docs/automations/templates.mdx | 16 +- src/content/docs/changelog/2021.10.0.mdx | 422 + src/content/docs/changelog/2021.11.0.mdx | 293 + src/content/docs/changelog/2021.12.0.mdx | 248 + src/content/docs/changelog/2021.8.0.mdx | 260 + src/content/docs/changelog/2021.9.0.mdx | 206 + src/content/docs/changelog/2022.1.0.mdx | 238 + src/content/docs/changelog/2022.10.0.mdx | 100 + src/content/docs/changelog/2022.11.0.mdx | 230 + src/content/docs/changelog/2022.12.0.mdx | 213 + src/content/docs/changelog/2022.2.0.mdx | 261 + src/content/docs/changelog/2022.3.0.mdx | 131 + src/content/docs/changelog/2022.4.0.mdx | 190 + src/content/docs/changelog/2022.5.0.mdx | 147 + src/content/docs/changelog/2022.6.0.mdx | 200 + src/content/docs/changelog/2022.8.0.mdx | 169 + src/content/docs/changelog/2022.9.0.mdx | 155 + src/content/docs/changelog/2023.10.0.mdx | 170 + src/content/docs/changelog/2023.11.0.mdx | 262 + src/content/docs/changelog/2023.12.0.mdx | 303 + src/content/docs/changelog/2023.2.0.mdx | 230 + src/content/docs/changelog/2023.3.0.mdx | 186 + src/content/docs/changelog/2023.4.0.mdx | 218 + src/content/docs/changelog/2023.5.0.mdx | 191 + src/content/docs/changelog/2023.6.0.mdx | 214 + src/content/docs/changelog/2023.7.0.mdx | 174 + src/content/docs/changelog/2023.8.0.mdx | 170 + src/content/docs/changelog/2023.9.0.mdx | 229 + src/content/docs/changelog/2024.10.0.mdx | 184 + src/content/docs/changelog/2024.11.0.mdx | 239 + src/content/docs/changelog/2024.12.0.mdx | 203 + src/content/docs/changelog/2024.2.0.mdx | 226 + src/content/docs/changelog/2024.3.0.mdx | 248 + src/content/docs/changelog/2024.4.0.mdx | 174 + src/content/docs/changelog/2024.5.0.mdx | 261 + src/content/docs/changelog/2024.6.0.mdx | 401 + src/content/docs/changelog/2024.7.0.mdx | 169 + src/content/docs/changelog/2024.8.0.mdx | 257 + src/content/docs/changelog/2024.9.0.mdx | 178 + .../content/docs/changelog/2025.10.0.mdx | 68 +- .../content/docs/changelog/2025.11.0.mdx | 278 +- .../content/docs/changelog/2025.12.0.mdx | 186 +- src/content/docs/changelog/2025.2.0.mdx | 394 + src/content/docs/changelog/2025.3.0.mdx | 143 + src/content/docs/changelog/2025.4.0.mdx | 163 + src/content/docs/changelog/2025.5.0.mdx | 419 + src/content/docs/changelog/2025.6.0.mdx | 483 ++ src/content/docs/changelog/2025.7.0.mdx | 826 ++ src/content/docs/changelog/2025.8.0.mdx | 698 ++ .../content/docs/changelog/2025.9.0.mdx | 30 +- .../content/docs/changelog/2026.1.0.mdx | 239 +- .../content/docs/changelog/2026.2.0.mdx | 31 +- .../changelog/images/changelog-1.10.0.png | Bin .../changelog/images/changelog-1.11.0.png | Bin .../changelog/images/changelog-1.12.0.png | Bin .../changelog/images/changelog-1.13.0.png | Bin .../changelog/images/changelog-1.14.0.png | Bin .../changelog/images/changelog-1.15.0.png | Bin .../changelog/images/changelog-1.16.0.png | Bin .../changelog/images/changelog-1.17.0.png | Bin .../changelog/images/changelog-1.18.0.png | Bin .../changelog/images/changelog-1.19.0.png | Bin .../changelog/images/changelog-1.20.0.png | Bin .../changelog/images/changelog-1.9.0.png | Bin .../changelog/images/changelog-2021.10.0.png | Bin .../changelog/images/changelog-2021.11.0.png | Bin .../changelog/images/changelog-2021.12.0.png | Bin .../changelog/images/changelog-2021.8.0.png | Bin .../changelog/images/changelog-2021.9.0.png | Bin .../changelog/images/changelog-2022.1.0.png | Bin .../changelog/images/changelog-2022.10.0.png | Bin .../changelog/images/changelog-2022.11.0.png | Bin .../changelog/images/changelog-2022.12.0.png | Bin .../changelog/images/changelog-2022.2.0.png | Bin .../changelog/images/changelog-2022.3.0.png | Bin .../changelog/images/changelog-2022.4.0.png | Bin .../changelog/images/changelog-2022.5.0.png | Bin .../changelog/images/changelog-2022.6.0.png | Bin .../changelog/images/changelog-2022.8.0.png | Bin .../changelog/images/changelog-2022.9.0.png | Bin .../changelog/images/changelog-2023.10.0.png | Bin .../changelog/images/changelog-2023.11.0.png | Bin .../changelog/images/changelog-2023.12.0.png | Bin .../changelog/images/changelog-2023.2.0.png | Bin .../changelog/images/changelog-2023.3.0.png | Bin .../changelog/images/changelog-2023.4.0.png | Bin .../changelog/images/changelog-2023.5.0.png | Bin .../changelog/images/changelog-2023.6.0.png | Bin .../changelog/images/changelog-2023.7.0.png | Bin .../changelog/images/changelog-2023.8.0.png | Bin .../changelog/images/changelog-2023.9.0.png | Bin .../changelog/images/changelog-2024.10.0.png | Bin .../changelog/images/changelog-2024.11.0.png | Bin .../changelog/images/changelog-2024.12.0.png | Bin .../changelog/images/changelog-2024.2.0.png | Bin .../changelog/images/changelog-2024.3.0.png | Bin .../changelog/images/changelog-2024.4.0.png | Bin .../changelog/images/changelog-2024.5.0.png | Bin .../changelog/images/changelog-2024.6.0.png | Bin .../changelog/images/changelog-2024.8.0.png | Bin .../changelog/images/changelog-2024.9.0.png | Bin .../changelog/images/changelog-2025.10.0.png | Bin .../changelog/images/changelog-2025.11.0.png | Bin .../changelog/images/changelog-2025.2.0.png | Bin .../changelog/images/changelog-2025.3.0.png | Bin .../changelog/images/changelog-2025.4.0.png | Bin .../changelog/images/changelog-2025.5.0.png | Bin .../changelog/images/changelog-2025.6.0.png | Bin .../changelog/images/changelog-2025.7.0.png | Bin .../changelog/images/changelog-2025.8.0.png | Bin .../changelog/images/changelog-2025.9.0.png | Bin .../changelog/images/configuration-url.png | Bin .../docs}/changelog/images/creation.svg | 0 .../changelog/images/github-1000-stars.png | Bin .../changelog/images/live-validation.png | Bin .../docs}/changelog/images/mcp23017.svg | 0 .../changelog/images/online-indicator.png | Bin .../docs}/changelog/images/tracer-an.jpg | Bin .../changelog/images/visual-studio-code.svg | 0 .../changelog/images/vscode-validation.png | Bin .../changelog/images/xiaomi_miscale2.jpg | Bin src/content/docs/changelog/index.mdx | 7 + src/content/docs/changelog/v1.10.0.mdx | 241 + src/content/docs/changelog/v1.11.0.mdx | 282 + src/content/docs/changelog/v1.12.0.mdx | 188 + src/content/docs/changelog/v1.13.0.mdx | 292 + src/content/docs/changelog/v1.14.0.mdx | 566 ++ src/content/docs/changelog/v1.15.0.mdx | 617 ++ src/content/docs/changelog/v1.16.0.mdx | 386 + src/content/docs/changelog/v1.17.0.mdx | 218 + src/content/docs/changelog/v1.18.0.mdx | 171 + src/content/docs/changelog/v1.19.0.mdx | 253 + src/content/docs/changelog/v1.20.0.mdx | 221 + .../content/docs/changelog/v1.7.0.mdx | 64 +- src/content/docs/changelog/v1.8.0.mdx | 243 + src/content/docs/changelog/v1.9.0.mdx | 325 + .../components/alarm_control_panel/index.mdx | 52 +- .../alarm_control_panel/template.mdx | 17 +- .../content/docs/components/animation.mdx | 2 +- .../content/docs/components/api.mdx | 31 +- .../content/docs/components/at581x.mdx | 40 +- .../docs/components/audio_adc/es7210.mdx | 14 +- .../docs/components/audio_adc/es7243e.mdx | 14 +- .../docs/components/audio_adc/index.mdx | 12 +- .../docs/components/audio_dac/aic3204.mdx | 16 +- .../docs/components/audio_dac/es8156.mdx | 18 +- .../docs/components/audio_dac/es8311.mdx | 18 +- .../docs/components/audio_dac/es8388.mdx | 22 +- .../docs/components/audio_dac/index.mdx | 14 +- .../binary_sensor/analog_threshold.mdx | 14 +- .../components/binary_sensor/ble_presence.mdx | 26 +- .../docs/components/binary_sensor/cap1188.mdx | 20 +- .../components/binary_sensor/esp32_touch.mdx | 27 +- .../docs/components/binary_sensor/gpio.mdx | 15 +- .../docs/components/binary_sensor/haier.mdx | 10 +- .../binary_sensor/homeassistant.mdx | 10 +- .../components/binary_sensor/hydreon_rgxx.mdx | 10 +- .../binary_sensor/images/cap1188-full.jpg | Bin .../binary_sensor/images/esp32_ble-ui.png | Bin .../images/esp32_touch-finding_thresholds.png | Bin .../binary_sensor/images/esp32_touch-ui.png | Bin .../binary_sensor/images/mpr121-full.jpg | Bin .../binary_sensor/images/pn532-full.jpg | Bin .../binary_sensor/images/pn532-spi.jpg | Bin .../binary_sensor/images/rc522-full.jpg | Bin .../binary_sensor/images/rdm6300-full.jpg | Bin .../binary_sensor/images/rdm6300-ui.png | Bin .../binary_sensor/images/status-ui.png | Bin .../binary_sensor/images/ttp229-full.jpg | Bin .../docs/components/binary_sensor/index.mdx | 40 +- .../docs/components/binary_sensor/lvgl.mdx | 22 +- .../binary_sensor/modbus_controller.mdx | 30 +- .../docs/components/binary_sensor/mpr121.mdx | 20 +- .../docs/components/binary_sensor/nextion.mdx | 32 +- .../docs/components/binary_sensor/nfc.mdx | 28 +- .../binary_sensor/packet_transport.mdx | 8 +- .../docs/components/binary_sensor/pn532.mdx | 45 +- .../components/binary_sensor/qwiic_pir.mdx | 23 +- .../docs/components/binary_sensor/rc522.mdx | 28 +- .../docs/components/binary_sensor/rdm6300.mdx | 27 +- .../docs/components/binary_sensor/sdl.mdx | 5 +- .../docs/components/binary_sensor/status.mdx | 18 +- .../docs/components/binary_sensor/switch.mdx | 11 +- .../components/binary_sensor/template.mdx | 14 +- .../docs/components/binary_sensor/ttp229.mdx | 20 +- .../docs/components/binary_sensor/tuya.mdx | 13 +- .../content/docs/components/ble_client.mdx | 44 +- .../content/docs/components/ble_nus.mdx | 6 +- .../docs/components/bluetooth_proxy.mdx | 12 +- .../docs/components/button/factory_reset.mdx | 25 +- .../content/docs/components/button/haier.mdx | 6 +- .../components/button/images/generic-ui.png | Bin .../content/docs/components/button/index.mdx | 24 +- .../content/docs/components/button/output.mdx | 16 +- .../docs/components/button/restart.mdx | 18 +- .../docs/components/button/safe_mode.mdx | 34 + .../docs/components/button/shutdown.mdx | 21 +- .../docs/components/button/template.mdx | 8 +- .../content/docs/components/button/uart.mdx | 12 +- .../docs/components/button/wake_on_lan.mdx | 10 +- .../docs/components/camera/camera_encoder.mdx | 10 +- .../content/docs/components/camera/index.mdx | 18 +- .../docs/components/canbus/esp32_can.mdx | 21 +- .../canbus/images/canbus_esp32_3v3.png | Bin .../canbus/images/canbus_esp32_5v.png | Bin .../canbus/images/canbus_mcp2515_resistor.png | Bin .../canbus/images/canbus_mcp2515_txs0108e.png | Bin .../content/docs/components/canbus/index.mdx | 16 +- .../docs/components/canbus/mcp2515.mdx | 19 +- .../docs/components/captive_portal.mdx | 21 +- .../content/docs/components/cc1101.mdx | 4 +- .../content/docs/components/ch422g.mdx | 14 +- .../content/docs/components/ch423.mdx | 15 +- .../content/docs/components/climate/anova.mdx | 14 +- .../docs/components/climate/bang_bang.mdx | 26 +- .../docs/components/climate/bedjet.mdx | 18 +- .../docs/components/climate/climate_ir.mdx | 86 +- .../content/docs/components/climate/haier.mdx | 44 +- .../components/climate/images/climate-ui.png | Bin .../components/climate/images/deadband1.png | Bin .../components/climate/images/deadband2.png | Bin .../climate/images/haier_pinout.jpg | Bin .../components/climate/images/usb_pinout.png | Bin .../content/docs/components/climate/index.mdx | 32 +- .../content/docs/components/climate/midea.mdx | 36 +- .../content/docs/components/climate/pid.mdx | 33 +- .../docs/components/climate/thermostat.mdx | 34 +- .../content/docs/components/climate/tuya.mdx | 20 +- .../content/docs/components/copy.mdx | 8 +- .../content/docs/components/cover/am43.mdx | 15 +- .../docs/components/cover/current_based.mdx | 27 +- .../content/docs/components/cover/endstop.mdx | 14 +- .../docs/components/cover/feedback.mdx | 23 +- .../content/docs/components/cover/he60r.mdx | 13 +- .../components/cover/images/cover-ui.png | Bin .../components/cover/images/he60r-sch.jpg | Bin .../components/cover/images/more-info-ui.png | Bin .../components/cover/images/shelly2.5.png | Bin .../content/docs/components/cover/index.mdx | 48 +- .../docs/components/cover/template.mdx | 18 +- .../docs/components/cover/time_based.mdx | 14 +- .../docs/components/cover/tormatic.mdx | 23 +- .../content/docs/components/cover/tuya.mdx | 13 +- .../docs/components/datetime/index.mdx | 50 +- .../docs/components/datetime/template.mdx | 8 +- .../content/docs/components/debug.mdx | 22 +- .../content/docs/components/deep_sleep.mdx | 20 +- .../content/docs/components/demo.mdx | 12 +- .../content/docs/components/dfplayer.mdx | 18 +- .../docs/components/dfrobot_sen0395.mdx | 43 +- .../components/display/addressable_light.mdx | 50 +- .../docs/components/display/epaper_spi.mdx | 30 +- .../content/docs/components/display/hub75.mdx | 14 +- .../docs/components/display/ili9xxx.mdx | 24 +- .../addressable_light_pixel_map_8x32.png | Bin .../addressable_light_pixel_map_default.png | Bin .../images/display_rendering_colors.png | Bin .../display/images/display_rendering_line.png | Bin .../images/display_rendering_shapes.png | Bin .../display/images/display_rendering_text.png | Bin .../display/images/ili9341-full.jpg | Bin .../display/images/lcd-hello_world.jpg | Bin .../components/display/images/lcd-pcf8574.jpg | Bin .../components/display/images/lcd_gpio.svg | 0 .../display/images/max7219-full.jpg | Bin .../display/images/max7219digit.png | Bin .../display/images/nextion-full.jpg | Bin .../display/images/pcd8544-full.jpg | Bin .../display/images/ssd1306-full.jpg | Bin .../display/images/ssd1322-full.jpg | Bin .../display/images/ssd1325-full.jpg | Bin .../display/images/ssd1327-full.jpg | Bin .../display/images/ssd1331-full.jpg | Bin .../display/images/ssd1351-full.jpg | Bin .../components/display/images/st7567-full.jpg | Bin .../display/images/st7789v-full.jpg | Bin .../components/display/images/st7920-full.jpg | Bin .../display/images/t-display-amoled.jpg | Bin .../display/images/tab5-version-label.jpg | Bin .../components/display/images/test_card.jpg | Bin .../components/display/images/tm1621-full.jpg | Bin .../components/display/images/tm1637-full.jpg | Bin .../display/images/tm1637_2devices.png | Bin .../display/images/tm1637_3plus_devices.png | Bin .../display/images/tm1637_key_connections.png | Bin .../components/display/images/tm1638-full.jpg | Bin .../display/images/waveshare_epaper-full.jpg | Bin .../display/images/waveshare_epaper-pins.jpg | Bin .../waveshare_epaper_7color_acep-full.jpg | Bin .../content/docs/components/display/index.mdx | 78 +- .../docs/components/display/inkplate.mdx | 22 +- .../docs/components/display/lcd_display.mdx | 43 +- .../docs/components/display/max7219.mdx | 191 + .../docs/components/display/max7219digit.mdx | 26 +- .../docs/components/display/mipi_dsi.mdx | 56 +- .../docs/components/display/mipi_rgb.mdx | 41 +- .../docs/components/display/mipi_spi.mdx | 72 +- .../docs/components/display/nextion.mdx | 68 +- .../docs/components/display/pcd8544.mdx | 24 +- .../components/display/pvvx_mithermometer.mdx | 29 +- .../docs/components/display/qspi_dbi.mdx | 35 +- .../docs/components/display/rpi_dpi_rgb.mdx | 25 +- .../content/docs/components/display/sdl.mdx | 16 +- .../docs/components/display/ssd1306.mdx | 31 +- .../docs/components/display/ssd1322.mdx | 22 +- .../docs/components/display/ssd1325.mdx | 22 +- .../docs/components/display/ssd1327.mdx | 31 +- .../docs/components/display/ssd1331.mdx | 22 +- .../docs/components/display/ssd1351.mdx | 22 +- .../docs/components/display/st7567.mdx | 26 +- .../docs/components/display/st7701s.mdx | 25 +- .../docs/components/display/st7735.mdx | 23 +- .../docs/components/display/st7789v.mdx | 26 +- .../docs/components/display/st7920.mdx | 22 +- .../docs/components/display/tm1621.mdx | 22 +- .../docs/components/display/tm1637.mdx | 46 +- .../docs/components/display/tm1638.mdx | 30 +- .../components/display/waveshare_epaper.mdx | 31 +- .../display_menu/graphical_display_menu.mdx | 19 +- .../docs/components/display_menu/index.mdx | 36 +- .../docs/components/display_menu/lcd_menu.mdx | 17 +- .../content/docs/components/emc2101.mdx | 36 +- .../content/docs/components/esp32.mdx | 22 +- .../content/docs/components/esp32_ble.mdx | 22 +- .../docs/components/esp32_ble_beacon.mdx | 29 +- .../docs/components/esp32_ble_server.mdx | 26 +- .../docs/components/esp32_ble_tracker.mdx | 43 +- .../content/docs/components/esp32_camera.mdx | 17 +- .../components/esp32_camera_web_server.mdx | 8 +- .../content/docs/components/esp32_hosted.mdx | 16 +- .../content/docs/components/esp32_improv.mdx | 34 +- .../content/docs/components/esp8266.mdx | 12 +- .../content/docs/components/esp_ldo.mdx | 7 +- .../content/docs/components/esphome.mdx | 46 +- .../content/docs/components/espnow.mdx | 33 +- .../content/docs/components/ethernet.mdx | 14 +- .../content/docs/components/event/index.mdx | 20 +- .../docs/components/event/template.mdx | 8 +- .../content/docs/components/event/uart.mdx | 10 +- .../components/exposure_notifications.mdx | 15 +- .../docs/components/external_components.mdx | 11 +- .../content/docs/components/ezo_pmp.mdx | 57 +- .../content/docs/components/factory_reset.mdx | 23 +- .../content/docs/components/fan/binary.mdx | 24 +- .../content/docs/components/fan/hbridge.mdx | 37 +- .../components/fan/images/L298N_module.jpg | Bin .../docs}/components/fan/images/fan-ui.png | Bin .../docs}/components/fan/images/tuyafan.jpg | Bin .../content/docs/components/fan/index.mdx | 44 +- .../content/docs/components/fan/speed.mdx | 30 +- .../content/docs/components/fan/template.mdx | 14 +- .../content/docs/components/fan/tuya.mdx | 26 +- .../docs/components/fingerprint_grow.mdx | 51 +- .../content/docs/components/font.mdx | 24 +- .../content/docs/components/globals.mdx | 7 +- .../content/docs/components/gps.mdx | 20 +- .../content/docs/components/graph.mdx | 11 +- .../docs/components/grove_tb6612fng.mdx | 12 +- .../content/docs/components/hlk_fm22x.mdx | 62 +- .../content/docs/components/host.mdx | 10 +- .../content/docs/components/http_request.mdx | 25 +- .../content/docs/components/i2c.mdx | 16 +- .../content/docs/components/i2c_device.mdx | 8 +- .../content/docs/components/i2s_audio.mdx | 14 +- .../content/docs/components/image.mdx | 10 +- .../docs}/components/images/DFR0627.jpg | Bin .../content/docs}/components/images/debug.png | Bin .../docs}/components/images/demo-ui.png | Bin .../docs}/components/images/dfplayer-full.jpg | Bin .../images/dfrobot_sen0395-full.jpg | Bin .../images/display_rendering_graph.png | Bin .../images/display_time_temp_oled_2.jpg | Bin 0 -> 10104 bytes .../docs}/components/images/emc2101-full.png | Bin .../images/esp32_ble_beacon-ibeacon.png | Bin .../fingeprint_grow-sleep_mode_wiring.jpg | Bin .../docs}/components/images/fontmetrics.png | Bin .../docs/components/images/garage-variant.svg | 1 + .../docs}/components/images/gps-full.jpg | Bin .../images/head-lightbulb-outline.svg | 1 + .../docs}/components/images/hlk-fm223.jpg | Bin .../docs}/components/images/hlk-fm225.jpg | Bin .../docs/components/images/ili9341.svg | 1 + .../docs/components/images/ili9342.svg | 1 + .../docs/components/images/ili9481.svg | 1 + .../images/image-multiple-outline.svg | 1 + src/content/docs/components/images/json.svg | 1 + .../docs}/components/images/key_collector.svg | 0 .../leak-detector-m5stickC_main_index.jpg | Bin .../docs}/components/images/lightwaverf.jpg | Bin .../docs}/components/images/ltr559.jpg | Bin .../docs/components/images/mcp23sxx.svg | 1 + .../docs/components/images/mcp2515.svg | 1 + .../images/micronova_optocouplers.png | Bin .../components/images/micronova_serial.png | Bin .../images/micronova_serial_layout.png | Bin .../components/images/mqtt-availability.png | Bin .../number-slider-popup-input-field.png | Bin .../components/images/number-slider-popup.png | Bin .../components/images/opentherm-shield.png | Bin .../docs}/components/images/pcf8574-full.jpg | Bin .../docs}/components/images/pn7150-full.jpg | Bin .../docs}/components/images/pn716x-full.jpg | Bin .../components/images/power_supply-atx.jpg | Bin .../docs}/components/images/r307-full.jpg | Bin .../docs}/components/images/r503-full.jpg | Bin .../images/resol_vbus_adapter_schematic.png | Bin .../components/images/rf_bridge-full.jpg | Bin .../docs}/components/images/rj45_pinout.jpg | Bin .../components/images/seeed-mr24hpc1-card.png | Bin .../images/seeed-mr24hpc1-mmwave-kit.png | Bin .../images/sensor-history-graph.png | Bin .../docs}/components/images/sim800l-full.jpg | Bin .../docs}/components/images/sml-log.png | Bin .../components/images/sn74hc595-full.jpg | Bin .../docs}/components/images/sprinkler-ui.jpg | Bin .../docs}/components/images/sprinkler.png | Bin src/content/docs/components/images/st7796.svg | 1 + .../docs}/components/images/sun-sensor-ui.png | Bin .../components/images/sun-text_sensor-ui.png | Bin .../images/sun_gtil2_controller_board.png | Bin .../images/sun_gtil2_display_board.png | Bin .../components/images/sun_gtil2_schematic.png | Bin .../docs}/components/images/sx126x-full.png | Bin .../docs}/components/images/sx127x-full.png | Bin .../docs}/components/images/sx1509-full.jpg | Bin .../docs}/components/images/sx1509-keypad.jpg | Bin .../images/tab-header-expand-cloapsed.png | Bin .../tab-header-expand-controls-expanded.png | Bin .../tab-header-expand-logs-expanded.png | Bin .../images/tm1651-battery-display.jpg | Bin .../images/vbus_serial_optocoupler.png | Bin .../docs}/components/images/web_server-v2.png | Bin .../docs}/components/images/web_server-v3.png | Bin .../docs}/components/images/web_server.png | Bin .../components/images/xiaomi_miscale1&2.jpg | Bin .../content/docs/components/improv_serial.mdx | 14 +- src/content/docs/components/index.mdx | 1120 +++ .../docs/components/infrared/index.mdx | 14 +- .../content/docs/components/interval.mdx | 5 +- .../content/docs/components/ir_rf_proxy.mdx | 8 +- .../content/docs/components/json.mdx | 10 +- .../content/docs/components/key_collector.mdx | 13 +- .../content/docs/components/libretiny.mdx | 30 +- .../components/light/beken_spi_led_strip.mdx | 12 +- src/content/docs/components/light/binary.mdx | 34 + .../components/light/color_temperature.mdx | 38 +- .../content/docs/components/light/cwww.mdx | 40 +- .../components/light/esp32_rmt_led_strip.mdx | 14 +- .../content/docs/components/light/fastled.mdx | 39 +- .../content/docs/components/light/hbridge.mdx | 22 +- .../components/light/images/binary-ui.png | Bin .../light/images/fastled_clockless-ui.png | Bin .../light/images/fastled_spi-ui.png | Bin .../components/light/images/hbridge-ui.png | Bin .../light/images/kitchen-lights.png | Bin .../light/images/monochromatic-detail.jpg | Bin .../light/images/monochromatic-strip.jpg | Bin .../components/light/images/rgb-detail.jpg | Bin .../components/light/images/rgb-strip.jpg | Bin .../docs}/components/light/images/rgb-ui.png | Bin .../light/images/sonoff_d1_gpio0.jpg | Bin .../light/images/sonoff_d1_serial.jpg | Bin .../content/docs/components/light/index.mdx | 52 +- .../content/docs/components/light/lvgl.mdx | 22 +- .../docs/components/light/monochromatic.mdx | 51 + .../docs/components/light/neopixelbus.mdx | 20 +- .../docs/components/light/partition.mdx | 16 +- .../content/docs/components/light/rgb.mdx | 56 +- .../content/docs/components/light/rgbct.mdx | 44 +- .../content/docs/components/light/rgbw.mdx | 48 +- .../content/docs/components/light/rgbww.mdx | 42 +- .../components/light/rp2040_pio_led_strip.mdx | 8 +- .../docs/components/light/shelly_dimmer.mdx | 15 +- .../docs/components/light/sonoff_d1.mdx | 44 +- .../docs/components/light/spi_led_strip.mdx | 28 +- .../docs/components/light/status_led.mdx | 22 +- .../content/docs/components/light/tuya.mdx | 14 +- .../content/docs/components/lightwaverf.mdx | 11 +- .../content/docs/components/lock/index.mdx | 28 +- .../content/docs/components/lock/output.mdx | 13 +- .../content/docs/components/lock/template.mdx | 16 +- .../content/docs/components/logger.mdx | 28 +- .../docs}/components/lvgl/images/canvas.png | Bin .../components/lvgl/images/lvgl_align.png | Bin .../components/lvgl/images/lvgl_animimg.gif | Bin .../docs}/components/lvgl/images/lvgl_arc.png | Bin .../docs}/components/lvgl/images/lvgl_bar.png | Bin .../components/lvgl/images/lvgl_baseobj.png | Bin .../components/lvgl/images/lvgl_boxmodel.png | Bin .../components/lvgl/images/lvgl_button.png | Bin .../lvgl/images/lvgl_buttonmatrix.png | Bin .../components/lvgl/images/lvgl_checkbox.png | Bin .../components/lvgl/images/lvgl_dropdown.png | Bin .../lvgl/images/lvgl_grid_layout.png | Bin .../components/lvgl/images/lvgl_image.png | Bin .../components/lvgl/images/lvgl_keyboard.png | Bin .../components/lvgl/images/lvgl_label.png | Bin .../docs}/components/lvgl/images/lvgl_led.png | Bin .../components/lvgl/images/lvgl_line.png | Bin .../lvgl/images/lvgl_main_screenshot.png | Bin .../components/lvgl/images/lvgl_meter.png | Bin .../components/lvgl/images/lvgl_msgbox.png | Bin .../components/lvgl/images/lvgl_roller.png | Bin .../components/lvgl/images/lvgl_slider.png | Bin .../components/lvgl/images/lvgl_spinbox.png | Bin .../components/lvgl/images/lvgl_spinner.gif | Bin .../components/lvgl/images/lvgl_symbols.png | Bin .../components/lvgl/images/lvgl_tabview.png | Bin .../components/lvgl/images/lvgl_textarea.png | Bin .../content/docs/components/lvgl/index.mdx | 133 +- .../content/docs/components/lvgl/layouts.mdx | 7 +- .../content/docs/components/lvgl/widgets.mdx | 189 +- .../content/docs/components/mapping.mdx | 5 +- .../content/docs/components/matrix_keypad.mdx | 13 +- .../content/docs/components/max6956.mdx | 29 +- .../content/docs/components/mcp230xx.mdx | 22 +- .../content/docs/components/mcp23Sxx.mdx | 18 +- .../content/docs/components/mdns.mdx | 8 +- .../components/media_player/i2s_audio.mdx | 10 +- .../docs/components/media_player/index.mdx | 60 +- .../docs/components/media_player/speaker.mdx | 36 +- .../docs/components/micro_wake_word.mdx | 12 +- .../content/docs/components/micronova.mdx | 20 +- .../docs/components/microphone/i2s_audio.mdx | 10 +- .../docs/components/microphone/index.mdx | 34 +- .../content/docs/components/modbus.mdx | 25 +- .../docs/components/modbus_controller.mdx | 46 +- .../content/docs/components/mqtt.mdx | 46 +- .../content/docs/components/network.mdx | 10 +- .../content/docs/components/nrf52.mdx | 6 +- .../docs/components/number/homeassistant.mdx | 8 +- .../content/docs/components/number/index.mdx | 41 +- .../content/docs/components/number/lvgl.mdx | 22 +- .../components/number/modbus_controller.mdx | 25 +- .../docs/components/number/template.mdx | 8 +- .../content/docs/components/number/tuya.mdx | 14 +- .../docs/components/one_wire/ds2484.mdx | 15 +- .../content/docs/components/one_wire/gpio.mdx | 13 +- .../components/one_wire/images/dallas-log.png | Bin .../docs/components/one_wire/index.mdx | 15 +- .../content/docs/components/online_image.mdx | 22 +- .../content/docs/components/opentherm.mdx | 37 +- .../content/docs/components/openthread.mdx | 22 +- .../content/docs/components/ota/esphome.mdx | 20 +- .../docs/components/ota/http_request.mdx | 21 +- .../content/docs/components/ota/index.mdx | 28 +- .../docs/components/ota/web_server.mdx | 23 +- .../docs/components/output/ac_dimmer.mdx | 22 +- .../docs/components/output/ble_client.mdx | 12 +- .../docs/components/output/bp1658cj.mdx | 21 +- .../docs/components/output/bp5758d.mdx | 21 +- .../docs/components/output/dac7678.mdx | 10 +- .../docs/components/output/esp32_dac.mdx | 24 +- .../docs/components/output/esp8266_pwm.mdx | 22 +- .../content/docs/components/output/gp8403.mdx | 10 +- .../content/docs/components/output/gpio.mdx | 26 +- .../components/output/images/pca9685-full.jpg | Bin .../output/images/robotdyn_dimmer.jpg | Bin .../output/images/sigma-delta-example.png | Bin .../output/images/tlc59208f-full.jpg | Bin .../content/docs/components/output/index.mdx | 63 +- .../content/docs/components/output/ledc.mdx | 22 +- .../docs/components/output/libretiny_pwm.mdx | 20 +- .../docs/components/output/mcp4461.mdx | 14 +- .../docs/components/output/mcp4725.mdx | 8 +- .../docs/components/output/mcp4728.mdx | 14 +- .../docs/components/output/mcp47a1.mdx | 10 +- .../components/output/modbus_controller.mdx | 25 +- .../content/docs/components/output/my9231.mdx | 24 +- .../docs/components/output/pca9685.mdx | 34 +- .../components/output/sigma_delta_output.mdx | 37 +- .../docs/components/output/slow_pwm.mdx | 29 +- .../docs/components/output/sm16716.mdx | 24 +- .../content/docs/components/output/sm2135.mdx | 25 +- .../content/docs/components/output/sm2235.mdx | 27 +- .../content/docs/components/output/sm2335.mdx | 23 +- .../docs/components/output/template.mdx | 12 +- .../docs/components/output/tlc59208f.mdx | 36 +- .../docs/components/output/tlc5947.mdx | 29 +- .../docs/components/output/tlc5971.mdx | 29 +- .../content/docs/components/output/x9c.mdx | 21 +- .../content/docs/components/packages.mdx | 17 +- .../components/packet_transport/espnow.mdx | 20 +- .../components/packet_transport/index.mdx | 20 +- .../components/packet_transport/sx126x.mdx | 56 + .../components/packet_transport/sx127x.mdx | 52 + .../docs/components/packet_transport/uart.mdx | 43 + .../docs/components/packet_transport/udp.mdx | 40 + .../content/docs/components/pca6416a.mdx | 14 +- .../content/docs/components/pca9554.mdx | 25 +- .../content/docs/components/pcf8574.mdx | 24 +- .../content/docs/components/pi4ioe5v6408.mdx | 13 +- .../content/docs/components/pipsolar.mdx | 18 +- .../content/docs/components/pn7150.mdx | 61 +- .../content/docs/components/pn7160.mdx | 65 +- .../content/docs/components/power_supply.mdx | 16 +- .../content/docs/components/prometheus.mdx | 16 +- .../content/docs/components/psram.mdx | 6 - .../content/docs/components/pylontech.mdx | 28 +- .../content/docs/components/qr_code.mdx | 6 +- .../docs/components/remote_receiver.mdx | 85 +- .../docs/components/remote_transmitter.mdx | 95 +- .../content/docs/components/rf_bridge.mdx | 50 +- .../content/docs/components/rp2040.mdx | 6 +- .../content/docs/components/rtttl.mdx | 19 +- .../content/docs/components/runtime_stats.mdx | 12 +- .../content/docs/components/safe_mode.mdx | 22 +- .../content/docs/components/script.mdx | 15 +- .../docs/components/seeed_mr24hpc1.mdx | 44 +- .../docs/components/seeed_mr60bha2.mdx | 21 +- .../docs/components/seeed_mr60fda2.mdx | 21 +- .../content/docs/components/select/index.mdx | 37 +- .../content/docs/components/select/logger.mdx | 6 +- .../content/docs/components/select/lvgl.mdx | 22 +- .../components/select/modbus_controller.mdx | 25 +- .../docs/components/select/template.mdx | 8 +- .../content/docs/components/select/tuya.mdx | 12 +- .../docs/components/sensor/a01nyub.mdx | 18 +- .../docs/components/sensor/a02yyuw.mdx | 18 +- .../components/sensor/absolute_humidity.mdx | 8 +- .../content/docs/components/sensor/adc.mdx | 24 +- .../docs/components/sensor/adc128s102.mdx | 13 +- .../docs/components/sensor/ade7880.mdx | 7 +- .../docs/components/sensor/ade7953.mdx | 10 +- .../docs/components/sensor/ads1115.mdx | 33 +- .../docs/components/sensor/ads1118.mdx | 26 +- .../content/docs/components/sensor/ags10.mdx | 23 +- .../content/docs/components/sensor/aht10.mdx | 25 +- .../docs/components/sensor/airthings_ble.mdx | 16 +- .../content/docs/components/sensor/alpha3.mdx | 12 +- .../docs/components/sensor/am2315c.mdx | 31 +- .../content/docs/components/sensor/am2320.mdx | 38 +- .../content/docs/components/sensor/am43.mdx | 19 +- .../docs/components/sensor/apds9306.mdx | 23 +- .../docs/components/sensor/apds9960.mdx | 24 +- .../content/docs/components/sensor/aqi.mdx | 25 +- .../content/docs/components/sensor/as3935.mdx | 19 +- .../content/docs/components/sensor/as5600.mdx | 45 +- .../content/docs/components/sensor/as7341.mdx | 25 +- .../docs/components/sensor/atm90e26.mdx | 8 +- .../docs/components/sensor/atm90e32.mdx | 36 +- .../docs/components/sensor/b_parasite.mdx | 12 +- .../content/docs/components/sensor/bh1750.mdx | 29 +- .../docs/components/sensor/bh1900nux.mdx | 14 +- .../components/sensor/binary_sensor_map.mdx | 20 +- .../content/docs/components/sensor/bl0906.mdx | 32 +- .../content/docs/components/sensor/bl0939.mdx | 12 +- .../content/docs/components/sensor/bl0940.mdx | 8 +- .../content/docs/components/sensor/bl0942.mdx | 10 +- .../docs/components/sensor/ble_client.mdx | 22 +- .../docs/components/sensor/ble_rssi.mdx | 14 +- .../content/docs/components/sensor/bme280.mdx | 26 +- .../content/docs/components/sensor/bme680.mdx | 31 +- .../docs/components/sensor/bme680_bsec.mdx | 30 +- .../docs/components/sensor/bme68x_bsec2.mdx | 32 +- .../content/docs/components/sensor/bmi160.mdx | 27 +- .../content/docs/components/sensor/bmp085.mdx | 25 +- .../content/docs/components/sensor/bmp280.mdx | 33 +- .../content/docs/components/sensor/bmp3xx.mdx | 29 +- .../content/docs/components/sensor/bmp581.mdx | 30 +- .../content/docs/components/sensor/ccs811.mdx | 20 +- .../docs/components/sensor/cd74hc4067.mdx | 16 +- .../content/docs/components/sensor/cm1106.mdx | 21 +- .../docs/components/sensor/combination.mdx | 9 +- .../docs/components/sensor/cs5460a.mdx | 21 +- .../docs/components/sensor/cse7761.mdx | 8 +- .../docs/components/sensor/cse7766.mdx | 8 +- .../docs/components/sensor/ct_clamp.mdx | 22 +- .../docs/components/sensor/dallas_temp.mdx | 15 +- .../docs/components/sensor/daly_bms.mdx | 21 +- .../content/docs/components/sensor/dht.mdx | 31 +- .../content/docs/components/sensor/dht12.mdx | 31 +- .../docs/components/sensor/dlms_meter.mdx | 13 +- .../content/docs/components/sensor/dps310.mdx | 24 +- .../content/docs/components/sensor/dsmr.mdx | 16 +- .../docs/components/sensor/duty_cycle.mdx | 12 +- .../docs/components/sensor/duty_time.mdx | 20 +- .../content/docs/components/sensor/ee895.mdx | 19 +- .../content/docs/components/sensor/ens160.mdx | 22 +- .../content/docs/components/sensor/ens210.mdx | 24 +- .../content/docs/components/sensor/ezo.mdx | 13 +- .../sensor/filter/calibrate_linear.mdx | 10 +- .../sensor/filter/calibrate_polynomial.mdx | 8 +- .../docs/components/sensor/filter/clamp.mdx | 6 +- .../components/sensor/filter/debounce.mdx | 6 +- .../docs/components/sensor/filter/delta.mdx | 8 +- .../filter/exponential_moving_average.mdx | 6 +- .../components/sensor/filter/filter_out.mdx | 6 +- .../components/sensor/filter/heartbeat.mdx | 6 +- .../docs/components/sensor/filter/lambda.mdx | 6 +- .../docs/components/sensor/filter/max.mdx | 6 +- .../docs/components/sensor/filter/median.mdx | 6 +- .../docs/components/sensor/filter/min.mdx | 6 +- .../components/sensor/filter/multiply.mdx | 10 + .../docs/components/sensor/filter/offset.mdx | 6 +- .../docs/components/sensor/filter/or.mdx | 6 +- .../components/sensor/filter/quantile.mdx | 6 +- .../docs/components/sensor/filter/round.mdx | 6 +- .../sensor/filter/round_to_multiple_of.mdx | 6 +- .../components/sensor/filter/skip_initial.mdx | 6 +- .../filter/sliding_window_moving_average.mdx | 8 +- .../components/sensor/filter/throttle.mdx | 6 +- .../sensor/filter/throttle_average.mdx | 6 +- .../sensor/filter/throttle_with_priority.mdx | 6 +- .../docs/components/sensor/filter/timeout.mdx | 6 +- .../sensor/filter/to_ntc_resistance.mdx | 8 +- .../sensor/filter/to_ntc_temperature.mdx | 6 +- .../content/docs/components/sensor/fs3000.mdx | 19 +- .../content/docs/components/sensor/gcja5.mdx | 10 +- .../content/docs/components/sensor/gdk101.mdx | 19 +- .../content/docs/components/sensor/gl_r01.mdx | 17 +- .../docs/components/sensor/gp2y1010au0f.mdx | 16 +- .../components/sensor/grove_gas_mc_v2.mdx | 21 +- .../docs/components/sensor/growatt_solar.mdx | 16 +- .../content/docs/components/sensor/haier.mdx | 10 +- .../docs/components/sensor/havells_solar.mdx | 15 +- .../content/docs/components/sensor/hc8.mdx | 20 +- .../docs/components/sensor/hdc1080.mdx | 31 +- .../docs/components/sensor/hdc2010.mdx | 58 + .../docs/components/sensor/hlw8012.mdx | 185 + .../docs/components/sensor/hlw8032.mdx | 16 +- .../content/docs/components/sensor/hm3301.mdx | 12 +- .../docs/components/sensor/hmc5883l.mdx | 23 +- .../docs/components/sensor/homeassistant.mdx | 12 +- .../components/sensor/honeywell_hih_i2c.mdx | 8 +- .../docs/components/sensor/honeywellabp.mdx | 19 +- .../components/sensor/honeywellabp2_i2c.mdx | 19 +- .../components/sensor/hrxl_maxsonar_wr.mdx | 20 +- .../content/docs/components/sensor/hte501.mdx | 21 +- .../content/docs/components/sensor/htu21d.mdx | 31 +- .../content/docs/components/sensor/htu31d.mdx | 34 +- .../content/docs/components/sensor/hx711.mdx | 20 +- .../docs/components/sensor/hydreon_rgxx.mdx | 17 +- .../content/docs/components/sensor/hyt271.mdx | 8 +- .../docs/components/sensor/iaqcore.mdx | 18 +- .../images/LC709203f_battery_markings.jpg | Bin .../images/LC709203f_battery_profiles.jpg | Bin .../LC709203f_feather_product_image.jpg | Bin .../sensor/images/LC709203f_product_image.jpg | Bin .../LC709203f_thermistor_connection.jpg | Bin .../components/sensor/images/LC709203f_ui.jpg | Bin .../components/sensor/images/a01nyub-full.jpg | Bin .../components/sensor/images/a02yyuw-full.jpg | Bin .../docs}/components/sensor/images/adc-ui.png | Bin .../components/sensor/images/ads1115-full.jpg | Bin .../components/sensor/images/ads1115-ui.png | Bin .../components/sensor/images/ads1118-full.jpg | Bin .../components/sensor/images/aht10-full.jpg | Bin .../sensor/images/airthings_wave_mini.jpg | Bin .../sensor/images/airthings_wave_plus.jpg | Bin .../sensor/images/airthings_wave_radon.jpg | Bin .../components/sensor/images/am2315c-full.jpg | Bin .../components/sensor/images/am2320-full.jpg | Bin .../sensor/images/apds9960-full.jpg | Bin .../components/sensor/images/as5600-full.jpg | Bin .../sensor/images/as5600-magnet-position.png | Bin .../sensor/images/as5600-ui-derived.jpg | Bin .../components/sensor/images/as5600-ui.jpg | Bin .../components/sensor/images/as7341-full.jpg | Bin .../components/sensor/images/athom-em2.png | Bin .../components/sensor/images/athom-em6.png | Bin .../sensor/images/atm90e32-cs-2chan-full.jpg | Bin .../sensor/images/atm90e32-cs-6chan-full.jpg | Bin .../components/sensor/images/bh1750-full.jpg | Bin .../components/sensor/images/bh1750-ui.png | Bin .../sensor/images/bh1900nux-evk-001.png | Bin .../components/sensor/images/bl0940-cal.png | Bin .../components/sensor/images/bme280-full.jpg | Bin .../sensor/images/bme680-bsec-ui.png | Bin .../components/sensor/images/bme680-full.jpg | Bin .../components/sensor/images/bme680-ui.png | Bin .../components/sensor/images/bmi160-full.jpg | Bin .../components/sensor/images/bmi160-ui.png | Bin .../components/sensor/images/bmp180-full.jpg | Bin .../components/sensor/images/bmp280-full.jpg | Bin .../components/sensor/images/ccs811-full.jpg | Bin .../components/sensor/images/ct_clamp-ui.png | Bin .../sensor/images/daly_bms_example.png | Bin .../sensor/images/daly_bms_pinout.png | Bin .../components/sensor/images/dht-full.jpg | Bin .../components/sensor/images/dht12-full.jpg | Bin .../components/sensor/images/dps310-full.jpg | Bin .../dsmr-request-pin-circuit-example.png | Bin .../sensor/images/duty_cycle-ui.png | Bin .../components/sensor/images/eco2-tvoc.png | Bin .../sensor/images/havellsgti5000d.jpg | Bin .../components/sensor/images/hc8-full.png | Bin .../components/sensor/images/hdc1080-full.jpg | Bin .../components/sensor/images/hdc2010-full.png | Bin .../components/sensor/images/hlw8032.png | Bin .../sensor/images/hrxl_maxsonar_wr-full.jpg | Bin .../components/sensor/images/htu21d-full.jpg | Bin .../components/sensor/images/hx711-full.jpg | Bin .../sensor/images/hydreon_rg9_full.jpg | Bin .../sensor/images/ikea-vindriktning.jpg | Bin .../components/sensor/images/ina219-full.jpg | Bin .../components/sensor/images/ina219-ui.png | Bin .../components/sensor/images/ina226-full.jpg | Bin .../components/sensor/images/ina228-full.jpg | Bin .../components/sensor/images/ina260-full.png | Bin .../components/sensor/images/ina3221-full.jpg | Bin .../components/sensor/images/ina3221-pins.jpg | Bin .../components/sensor/images/ina3221-ui.png | Bin .../images/inkbird_isbth1_mini-full.jpg | Bin .../sensor/images/inkbird_isbth1_mini-ui.png | Bin .../sensor/images/internal_temperature-ui.png | Bin .../images/jsn-sr04t-v3-mode-select-pads.jpg | Bin .../components/sensor/images/jst6pin.png | Bin .../sensor/images/kamstrup_kmp_holder.svg | 0 .../sensor/images/kamstrup_kmp_sch.svg | 0 .../components/sensor/images/ld2410-card.png | Bin .../docs}/components/sensor/images/ld2412.png | Bin .../components/sensor/images/ltr303-full.jpg | Bin .../sensor/images/ltr303-spectral.png | Bin .../components/sensor/images/ltr303-ui.png | Bin .../components/sensor/images/ltr390-full.jpg | Bin .../components/sensor/images/ltr501-full.jpg | Bin .../components/sensor/images/ltr501-ui.png | Bin .../sensor/images/m5stack_8angle.jpg | Bin .../sensor/images/max31856-full.jpg | Bin .../sensor/images/max31865-full.jpg | Bin .../components/sensor/images/max6675-full.jpg | Bin .../components/sensor/images/mcp3221.png | Bin .../components/sensor/images/mcp9808-full.jpg | Bin .../components/sensor/images/mhz19-full.jpg | Bin .../components/sensor/images/mhz19-pins.jpg | Bin .../sensor/images/mlx90393-full.jpg | Bin .../sensor/images/mlx90393-resolution.svg | 0 .../images/mopeka_pro_check_lippert.jpg | Bin .../sensor/images/mpl3115a2-full.jpg | Bin .../components/sensor/images/mpu6050-full.jpg | Bin .../components/sensor/images/mpu6050-ui.png | Bin .../components/sensor/images/mpu6886-ui.png | Bin .../components/sensor/images/ms5611-full.jpg | Bin .../components/sensor/images/ms5611-ui.png | Bin .../components/sensor/images/ms8607-full.jpg | Bin .../components/sensor/images/msa311-full.jpg | Bin .../components/sensor/images/msa3xx-ui.png | Bin .../components/sensor/images/nau7802.png | Bin .../components/sensor/images/opt3001-full.jpg | Bin .../sensor/images/pmsa003i-full.jpg | Bin .../sensor/images/pulse-counter.png | Bin .../images/pulse-counter_vs_pulse-meter.png | Bin .../components/sensor/images/pzem-ac.png | Bin .../components/sensor/images/pzem-dc.png | Bin .../sensor/images/radon_eye_rd200.jpg | Bin .../sensor/images/resistance-downstream.png | Bin .../sensor/images/rotary_encoder-ui.png | Bin .../sensor/images/ruuvitag-full.jpg | Bin .../components/sensor/images/ruuvitag-ui.jpg | Bin .../components/sensor/images/sdm220m-full.png | Bin .../components/sensor/images/sds011-full.jpg | Bin .../components/sensor/images/sen54-web.png | Bin .../sensor/images/senseair_s8-full.jpg | Bin .../sensor/images/senseair_s8-pins.jpg | Bin .../components/sensor/images/sensirion-pm.png | Bin .../components/sensor/images/sht4x-full.jpg | Bin .../components/sensor/images/sm300d2-full.jpg | Bin .../components/sensor/images/sm300d2-pins.jpg | Bin .../components/sensor/images/sm300d2-ui.png | Bin .../components/sensor/images/sps30-wiring.png | Bin .../components/sensor/images/stts22h.png | Bin .../components/sensor/images/t6615-pins.png | Bin .../docs}/components/sensor/images/t6615.png | Bin .../components/sensor/images/tc74-full.jpg | Bin .../sensor/images/tcs34725-full.jpg | Bin .../components/sensor/images/tcs34725-ui.png | Bin .../sensor/images/teleinfo-full.jpg | Bin .../sensor/images/teleinfo-historical.jpg | Bin .../sensor/images/teleinfo-standard.jpg | Bin .../sensor/images/telink_flasher.jpg | Bin .../sensor/images/temperature-humidity.png | Bin .../sensor/images/temperature-pressure.png | Bin .../components/sensor/images/temperature.png | Bin .../sensor/images/thermopro_tp357-full.jpg | Bin .../components/sensor/images/tmp102-full.jpg | Bin .../sensor/images/tof10120-full.jpg | Bin .../components/sensor/images/tof10120-ui.png | Bin .../components/sensor/images/tsl2561-full.jpg | Bin .../components/sensor/images/tsl2561-ui.png | Bin .../components/sensor/images/tsl2591-ui.jpg | Bin .../sensor/images/ultrasonic-full.jpg | Bin .../sensor/images/ultrasonic-ui.png | Bin .../sensor/images/veml7700-full.jpg | Bin .../sensor/images/veml7700-spectral.png | Bin .../components/sensor/images/veml7700-ui.png | Bin .../components/sensor/images/vl53l0x-full.jpg | Bin .../components/sensor/images/vl53l0x-ui.png | Bin .../components/sensor/images/vl53l0x.png | Bin .../sensor/images/wifi_signal-ui.png | Bin .../components/sensor/images/wts01-full.png | Bin .../components/sensor/images/xiaomi_cgd1.jpg | Bin .../components/sensor/images/xiaomi_cgdk2.jpg | Bin .../components/sensor/images/xiaomi_cgpr1.png | Bin .../sensor/images/xiaomi_gcls002.jpg | Bin .../sensor/images/xiaomi_hhccpot002.jpg | Bin .../sensor/images/xiaomi_jqjcy01ym.jpg | Bin .../sensor/images/xiaomi_mhoc303.jpg | Bin .../sensor/images/xiaomi_mhoc401.jpg | Bin .../sensor/images/xiaomi_mjyd02yla.jpg | Bin .../sensor/images/xiaomi_mue4094rt.jpg | Bin .../sensor/images/xiaomi_wx08zm.jpg | Bin .../sensor/images/xiaomi_xmwsdj04mmc.png | Bin .../sensor/images/zgm053-connection.jpg | Bin .../components/sensor/images/zgm053-full.jpg | Bin .../content/docs/components/sensor/ina219.mdx | 23 +- .../content/docs/components/sensor/ina226.mdx | 22 +- .../content/docs/components/sensor/ina260.mdx | 24 +- .../content/docs/components/sensor/ina2xx.mdx | 24 +- .../docs/components/sensor/ina3221.mdx | 31 +- .../content/docs/components/sensor/index.mdx | 140 +- .../components/sensor/inkbird_ibsth1_mini.mdx | 29 +- .../docs/components/sensor/integration.mdx | 16 +- .../sensor/internal_temperature.mdx | 9 +- .../docs/components/sensor/jsn_sr04t.mdx | 27 +- .../docs/components/sensor/kamstrup_kmp.mdx | 29 +- .../docs/components/sensor/kmeteriso.mdx | 21 +- .../content/docs/components/sensor/kuntze.mdx | 20 +- .../docs/components/sensor/lc709203f.mdx | 30 +- .../content/docs/components/sensor/ld2410.mdx | 58 +- .../content/docs/components/sensor/ld2412.mdx | 32 +- .../content/docs/components/sensor/ld2420.mdx | 28 +- .../content/docs/components/sensor/ld2450.mdx | 67 +- .../content/docs/components/sensor/lm75b.mdx | 19 +- .../content/docs/components/sensor/lps22.mdx | 10 +- .../content/docs/components/sensor/ltr390.mdx | 32 +- .../content/docs/components/sensor/ltr501.mdx | 28 +- .../docs/components/sensor/ltr_als_ps.mdx | 36 +- .../content/docs/components/sensor/lvgl.mdx | 22 +- .../docs/components/sensor/m5stack_8angle.mdx | 24 +- .../docs/components/sensor/max17043.mdx | 20 +- .../docs/components/sensor/max31855.mdx | 20 +- .../docs/components/sensor/max31856.mdx | 28 +- .../docs/components/sensor/max31865.mdx | 28 +- .../docs/components/sensor/max44009.mdx | 6 +- .../docs/components/sensor/max6675.mdx | 27 +- .../docs/components/sensor/max9611.mdx | 16 +- .../docs/components/sensor/mcp3008.mdx | 13 +- .../docs/components/sensor/mcp3204.mdx | 13 +- .../docs/components/sensor/mcp3221.mdx | 12 +- .../docs/components/sensor/mcp9600.mdx | 19 +- .../docs/components/sensor/mcp9808.mdx | 28 +- .../content/docs/components/sensor/mhz19.mdx | 34 +- .../docs/components/sensor/mics_4514.mdx | 8 +- .../docs/components/sensor/mlx90393.mdx | 23 +- .../docs/components/sensor/mlx90614.mdx | 19 +- .../docs/components/sensor/mmc5603.mdx | 23 +- .../docs/components/sensor/mmc5983.mdx | 23 +- .../components/sensor/modbus_controller.mdx | 24 +- .../components/sensor/mopeka_pro_check.mdx | 41 +- .../components/sensor/mopeka_std_check.mdx | 27 +- .../docs/components/sensor/mpl3115a2.mdx | 26 +- .../docs/components/sensor/mpu6050.mdx | 27 +- .../docs/components/sensor/mpu6886.mdx | 16 +- .../docs/components/sensor/mqtt_subscribe.mdx | 8 +- .../content/docs/components/sensor/ms5611.mdx | 27 +- .../content/docs/components/sensor/ms8607.mdx | 18 +- .../content/docs/components/sensor/msa3xx.mdx | 28 +- .../docs/components/sensor/nau7802.mdx | 20 +- .../docs/components/sensor/nextion.mdx | 32 +- .../content/docs/components/sensor/npi19.mdx | 18 +- .../content/docs/components/sensor/ntc.mdx | 14 +- .../docs/components/sensor/opt3001.mdx | 26 +- .../components/sensor/packet_transport.mdx | 10 +- .../content/docs/components/sensor/pm1006.mdx | 22 +- .../content/docs/components/sensor/pm2005.mdx | 21 +- .../docs/components/sensor/pmsa003i.mdx | 20 +- .../docs/components/sensor/pmsx003.mdx | 12 +- .../content/docs/components/sensor/pmwcs3.mdx | 25 +- .../docs/components/sensor/pulse_counter.mdx | 18 +- .../docs/components/sensor/pulse_meter.mdx | 20 +- .../docs/components/sensor/pulse_width.mdx | 8 +- .../docs/components/sensor/pzem004t.mdx | 14 +- .../content/docs/components/sensor/pzemac.mdx | 26 +- .../content/docs/components/sensor/pzemdc.mdx | 24 +- .../docs/components/sensor/qmc5883l.mdx | 21 +- .../docs/components/sensor/qmp6988.mdx | 20 +- .../docs/components/sensor/radon_eye_ble.mdx | 8 +- .../content/docs/components/sensor/rd03d.mdx | 19 +- .../docs/components/sensor/resistance.mdx | 26 +- .../docs/components/sensor/rotary_encoder.mdx | 30 +- .../docs/components/sensor/ruuvitag.mdx | 29 +- .../content/docs/components/sensor/scd30.mdx | 21 +- .../content/docs/components/sensor/scd4x.mdx | 19 +- .../docs/components/sensor/sdm_meter.mdx | 18 +- .../content/docs/components/sensor/sdp3x.mdx | 19 +- .../content/docs/components/sensor/sds011.mdx | 22 +- .../docs/components/sensor/selec_meter.mdx | 16 +- .../docs/components/sensor/sen0321.mdx | 19 +- .../docs/components/sensor/sen21231.mdx | 23 +- .../content/docs/components/sensor/sen5x.mdx | 31 +- .../docs/components/sensor/senseair.mdx | 36 +- .../content/docs/components/sensor/sfa30.mdx | 13 +- .../content/docs/components/sensor/sgp30.mdx | 24 +- .../content/docs/components/sensor/sgp4x.mdx | 23 +- .../content/docs/components/sensor/sht3xd.mdx | 22 +- .../content/docs/components/sensor/sht4x.mdx | 18 +- .../content/docs/components/sensor/shtcx.mdx | 24 +- .../docs/components/sensor/sm300d2.mdx | 33 +- .../content/docs/components/sensor/smt100.mdx | 13 +- .../docs/components/sensor/sound_level.mdx | 16 +- .../content/docs/components/sensor/sps30.mdx | 27 +- .../content/docs/components/sensor/sts3x.mdx | 22 +- .../docs/components/sensor/stts22h.mdx | 16 +- .../content/docs/components/sensor/sy6970.mdx | 16 +- .../content/docs/components/sensor/t6615.mdx | 26 +- .../content/docs/components/sensor/tc74.mdx | 30 +- .../docs/components/sensor/tcs34725.mdx | 21 +- .../content/docs/components/sensor/tee501.mdx | 19 +- .../docs/components/sensor/teleinfo.mdx | 34 +- .../docs/components/sensor/tem3200.mdx | 18 +- .../docs/components/sensor/template.mdx | 10 +- .../docs/components/sensor/thermopro_ble.mdx | 24 +- .../content/docs/components/sensor/tmp102.mdx | 31 +- .../docs/components/sensor/tmp1075.mdx | 18 +- .../content/docs/components/sensor/tmp117.mdx | 18 +- .../docs/components/sensor/tof10120.mdx | 21 +- .../components/sensor/total_daily_energy.mdx | 28 +- .../docs/components/sensor/tsl2561.mdx | 29 +- .../docs/components/sensor/tsl2591.mdx | 35 +- .../content/docs/components/sensor/tuya.mdx | 14 +- .../content/docs/components/sensor/tx20.mdx | 21 +- .../docs/components/sensor/ufire_ec.mdx | 15 +- .../docs/components/sensor/ufire_ise.mdx | 17 +- .../docs/components/sensor/ultrasonic.mdx | 23 +- .../content/docs/components/sensor/uptime.mdx | 12 +- .../docs/components/sensor/veml3235.mdx | 25 +- .../docs/components/sensor/veml7700.mdx | 58 +- .../docs/components/sensor/vl53l0x.mdx | 24 +- .../docs/components/sensor/wifi_signal.mdx | 18 +- .../content/docs/components/sensor/wts01.mdx | 16 +- .../docs/components/sensor/xgzp68xx.mdx | 21 +- .../docs/components/sensor/xiaomi_ble.mdx | 84 +- .../components/sensor/xiaomi_hhccjcy01.mdx | 0 .../components/sensor/xiaomi_hhccjcy10.mdx | 10 +- .../components/sensor/xiaomi_lywsdcgq.mdx | 0 .../docs/components/sensor/xiaomi_miscale.mdx | 14 +- .../components/sensor/xiaomi_miscale2.mdx | 2 +- .../docs/components/sensor/zio_ultrasonic.mdx | 22 +- .../content/docs/components/sensor/zyaura.mdx | 30 +- .../content/docs/components/servo.mdx | 18 +- .../content/docs/components/sim800l.mdx | 26 +- .../content/docs/components/sml.mdx | 22 +- .../content/docs/components/sn74hc165.mdx | 11 +- .../content/docs/components/sn74hc595.mdx | 21 +- .../docs/components/speaker/i2s_audio.mdx | 10 +- .../content/docs/components/speaker/index.mdx | 36 +- .../content/docs/components/speaker/mixer.mdx | 16 +- .../docs/components/speaker/resampler.mdx | 12 +- .../content/docs/components/spi.mdx | 13 +- .../content/docs/components/sprinkler.mdx | 114 +- .../content/docs/components/statsd.mdx | 9 +- .../content/docs/components/status_led.mdx | 12 +- .../content/docs/components/stepper/index.mdx | 26 +- .../content/docs/components/substitutions.mdx | 17 +- .../content/docs/components/sun.mdx | 17 +- .../content/docs/components/sun_gtil2.mdx | 41 +- .../docs/components/switch/ble_client.mdx | 14 +- .../docs/components/switch/factory_reset.mdx | 25 +- .../content/docs/components/switch/gpio.mdx | 24 +- .../content/docs/components/switch/haier.mdx | 6 +- .../docs/components/switch/hbridge.mdx | 22 +- .../docs/components/switch/homeassistant.mdx | 10 +- .../switch/images/gate-remote-ui.png | Bin .../switch/images/hbridge-relay.png | Bin .../components/switch/images/restart-ui.png | Bin .../content/docs/components/switch/index.mdx | 38 +- .../content/docs/components/switch/lvgl.mdx | 24 +- .../components/switch/modbus_controller.mdx | 29 +- .../docs/components/switch/nextion.mdx | 32 +- .../content/docs/components/switch/output.mdx | 13 +- .../docs/components/switch/restart.mdx | 33 + .../docs/components/switch/safe_mode.mdx | 33 + .../docs/components/switch/shutdown.mdx | 21 +- .../docs/components/switch/template.mdx | 16 +- .../content/docs/components/switch/tuya.mdx | 12 +- .../content/docs/components/switch/uart.mdx | 12 +- .../content/docs/components/sx126x.mdx | 17 +- .../content/docs/components/sx127x.mdx | 31 +- .../content/docs/components/sx1509.mdx | 34 +- .../content/docs/components/syslog.mdx | 5 +- .../content/docs/components/tca9548a.mdx | 18 +- .../content/docs/components/tca9555.mdx | 13 +- .../content/docs/components/text/index.mdx | 23 +- .../content/docs/components/text/lvgl.mdx | 22 +- .../content/docs/components/text/template.mdx | 8 +- .../components/text_sensor/ble_client.mdx | 16 +- .../components/text_sensor/ble_scanner.mdx | 16 +- .../components/text_sensor/ethernet_info.mdx | 10 +- .../docs/components/text_sensor/haier.mdx | 6 +- .../components/text_sensor/homeassistant.mdx | 10 +- .../text_sensor/images/version-ui.png | Bin .../docs/components/text_sensor/index.mdx | 26 +- .../components/text_sensor/key_collector.mdx | 13 +- .../docs/components/text_sensor/libretiny.mdx | 10 +- .../docs/components/text_sensor/lvgl.mdx | 22 +- .../text_sensor/modbus_controller.mdx | 27 +- .../components/text_sensor/mqtt_subscribe.mdx | 8 +- .../docs/components/text_sensor/nextion.mdx | 32 +- .../text_sensor/openthread_info.mdx | 12 +- .../docs/components/text_sensor/template.mdx | 12 +- .../docs/components/text_sensor/tuya.mdx | 14 +- .../docs/components/text_sensor/uptime.mdx | 10 +- .../docs/components/text_sensor/version.mdx | 12 +- .../docs/components/text_sensor/wifi_info.mdx | 12 +- .../docs/components/text_sensor/wl_134.mdx | 8 +- .../content/docs/components/time/bm8563.mdx | 16 +- .../content/docs/components/time/ds1307.mdx | 10 +- .../content/docs/components/time/gps.mdx | 4 +- .../docs/components/time/homeassistant.mdx | 4 +- .../content/docs/components/time/host.mdx | 2 +- .../content/docs/components/time/index.mdx | 18 +- .../content/docs/components/time/pcf85063.mdx | 10 +- .../content/docs/components/time/pcf8563.mdx | 10 +- .../content/docs/components/time/rx8130.mdx | 10 +- .../content/docs/components/time/sntp.mdx | 2 - .../content/docs/components/time/zigbee.mdx | 8 +- .../content/docs/components/tinyusb.mdx | 10 +- .../content/docs/components/tm1651.mdx | 25 +- .../docs/components/touchscreen/axs15231.mdx | 8 +- .../docs/components/touchscreen/chsc6x.mdx | 19 +- .../docs/components/touchscreen/cst226.mdx | 19 +- .../docs/components/touchscreen/cst816.mdx | 19 +- .../docs/components/touchscreen/ektf2232.mdx | 14 +- .../docs/components/touchscreen/ft5x06.mdx | 19 +- .../docs/components/touchscreen/ft63x6.mdx | 10 +- .../docs/components/touchscreen/gt911.mdx | 21 +- .../touchscreen/images/esp32-s3-box.png | Bin .../touchscreen/images/esp32-s3-korvo-2.png | Bin .../touchscreen/images/xpt2046-full.jpg | Bin .../docs/components/touchscreen/index.mdx | 47 +- .../components/touchscreen/lilygo_t5_47.mdx | 10 +- .../docs/components/touchscreen/sdl.mdx | 9 +- .../docs/components/touchscreen/tt21100.mdx | 28 +- .../docs/components/touchscreen/xpt2046.mdx | 20 +- .../content/docs/components/tuya.mdx | 34 +- .../content/docs/components/uart.mdx | 24 +- .../content/docs/components/udp.mdx | 16 +- .../docs/components/update/esp32_hosted.mdx | 12 +- .../docs/components/update/http_request.mdx | 30 +- .../content/docs/components/update/index.mdx | 20 +- .../docs/components/uponor_smatrix.mdx | 11 +- .../content/docs/components/usb_cdc_acm.mdx | 12 +- .../content/docs/components/usb_host.mdx | 12 +- .../content/docs/components/usb_uart.mdx | 14 +- .../components/valve/images/valve-ui.png | Bin .../content/docs/components/valve/index.mdx | 36 +- .../docs/components/valve/template.mdx | 18 +- .../content/docs/components/vbus.mdx | 24 +- .../docs/components/voice_assistant.mdx | 37 +- .../docs/components/water_heater/index.mdx | 20 +- .../docs/components/water_heater/template.mdx | 12 +- .../content/docs/components/web_server.mdx | 84 +- .../content/docs/components/weikai.mdx | 16 +- .../content/docs/components/wiegand.mdx | 18 +- .../content/docs/components/wifi.mdx | 54 +- .../content/docs/components/wireguard.mdx | 39 +- .../content/docs/components/xl9535.mdx | 14 +- .../content/docs/components/xxtea.mdx | 8 +- .../content/docs/components/zigbee.mdx | 4 - .../content/docs/components/zwave_proxy.mdx | 20 +- .../docs/cookbook/arduino_port_extender.mdx | 11 +- .../docs/cookbook/bme280_environment.mdx | 27 +- .../docs/cookbook/display_time_temp_oled.mdx | 21 +- .../content/docs/cookbook/ehmtx.mdx | 10 +- .../content/docs/cookbook/garage-door.mdx | 10 +- .../cookbook/images/arduino_pro_mini.jpg | Bin .../docs}/cookbook/images/bme280-header.jpg | Bin .../images/display_time_temp_oled_1.jpg | Bin .../cookbook/images/infostrip-detail.jpg | Bin .../cookbook/images/infostrip-lights-ui.png | Bin .../leak-detector-m5stickC-ha_interface.jpg | Bin .../leak-detector-m5stickC-m5stickC.png | Bin .../leak-detector-m5stickC_LeakDetected.gif | Bin .../images/leak-detector-m5stickC_dry.jpg | Bin 0 -> 12322 bytes .../images/leak-detector-m5stickC_grove1.jpg | Bin .../images/leak-detector-m5stickC_grove2.jpg | Bin .../leak-detector-m5stickC_overview1.jpg | Bin .../leak-detector-m5stickC_overview2.jpg | Bin .../images/leak-detector-m5stickC_pinout.jpg | Bin .../images/leak-detector-m5stickC_probe.jpg | Bin .../images/leak-detector-m5stickC_wet.jpg | Bin .../images/lvgl_cook_animimg_batt.gif | Bin .../cookbook/images/lvgl_cook_climate.png | Bin .../docs}/cookbook/images/lvgl_cook_clock.png | Bin .../docs}/cookbook/images/lvgl_cook_cover.png | Bin .../cookbook/images/lvgl_cook_flex_layout.png | Bin .../cookbook/images/lvgl_cook_font_batt.png | Bin .../images/lvgl_cook_font_binstat.png | Bin .../images/lvgl_cook_font_roboto_mdi.png | Bin .../docs}/cookbook/images/lvgl_cook_gauge.png | Bin .../images/lvgl_cook_gradient_styles.png | Bin .../cookbook/images/lvgl_cook_keypad.png | Bin .../cookbook/images/lvgl_cook_pagenav.png | Bin .../cookbook/images/lvgl_cook_remligbut.png | Bin .../cookbook/images/lvgl_cook_statico.png | Bin .../cookbook/images/lvgl_cook_thermometer.png | Bin .../images/lvgl_cook_thermometer_gauge.png | Bin .../cookbook/images/lvgl_cook_titlebar.png | Bin .../cookbook/images/lvgl_cook_weather.png | Bin .../cookbook/images/power_meter-header.jpg | Bin .../sonoff-fishpond-pump-1-programming.jpg | Bin .../sonoff-fishpond-pump-and-sensor.jpg | Bin .../images/sonoff-fishpond-pump-gpio14.jpg | Bin .../images/sonoff-fishpond-pump-installed.jpg | Bin .../docs}/cookbook/images/sonoff-fishpond.jpg | Bin .../docs}/cookbook/images/window-open.svg | 0 .../content/docs/cookbook/index.mdx | 0 .../content/docs/cookbook/infostrip.mdx | 32 +- .../content/docs/cookbook/lambda_magic.mdx | 20 +- .../docs/cookbook/leak-detector-m5stickC.mdx | 46 +- .../content/docs/cookbook/lvgl.mdx | 128 +- .../content/docs/cookbook/power_meter.mdx | 21 +- .../content/docs/cookbook/pulse-catcher.mdx | 10 +- .../docs/cookbook/sonoff-fishpond-pump.mdx | 21 +- .../docs/guides/audio_clips_for_i2s.mdx | 11 +- .../content/docs/guides/changelog.mdx | 2 - .../cli.md => src/content/docs/guides/cli.mdx | 196 +- .../docs/guides/configuration-types.mdx | 20 +- .../content/docs/guides/creators.mdx | 11 +- .../docs/guides/devboard_as_flasher.mdx | 24 +- .../diy.md => src/content/docs/guides/diy.mdx | 163 +- .../docs/guides/esp32_arduino_to_idf.mdx | 22 +- .../faq.md => src/content/docs/guides/faq.mdx | 52 +- .../guides/getting_started_command_line.mdx | 41 +- .../docs/guides/getting_started_hassio.mdx | 45 +- .../content/docs}/guides/images/addon.png | Bin .../content/docs}/guides/images/console.svg | 0 .../dashboard-install-manual-modern.png | Bin .../images/dashboard-install-manual.png | Bin .../docs}/guides/images/dashboard-install.png | Bin .../docs}/guides/images/dashboard_empty.png | Bin .../docs}/guides/images/dashboard_states.png | Bin .../guides/images/devboard-as-flasher.png | Bin .../docs}/guides/images/download_binary.png | Bin .../content/docs}/guides/images/earth.svg | 0 .../content/docs}/guides/images/espeasy.svg | 0 .../docs}/guides/images/espeasy_ota.png | Bin .../content/docs}/guides/images/espurna.svg | 0 .../docs}/guides/images/espurna_ota.png | Bin .../docs}/guides/images/espurna_upload.png | Bin .../content/docs}/guides/images/flux.jpg | Bin .../guides/images/module-only-programming.jpg | Bin .../docs}/guides/images/nodemcu_esp8266.jpg | Bin .../guides/images/programming-bare-chip.jpg | Bin .../images/programming-header-filled.jpg | Bin .../images/programming-header-populated.jpg | Bin .../images/programming-header-unpopulated.jpg | Bin .../guides/images/python-win-installer.png | Bin .../docs}/guides/images/question_answer.svg | 0 .../docs}/guides/images/save_as_wav.png | Bin .../content/docs}/guides/images/solder.jpg | Bin .../docs}/guides/images/soldering-iron.jpg | Bin .../content/docs}/guides/images/strippers.jpg | Bin .../content/docs}/guides/images/tasmota.svg | 0 .../docs}/guides/images/tasmota_main.png | Bin .../docs}/guides/images/tasmota_ota.png | Bin .../docs}/guides/images/tasmota_upload.png | Bin .../content/docs}/guides/images/usb-cable.jpg | Bin .../guides/images/usb-serial-adapter.jpg | Bin .../docs}/guides/images/wire-cutters.jpg | Bin .../content/docs/guides/index.mdx | 0 .../docs/guides/installing_esphome.mdx | 12 +- .../content/docs/guides/made_for_esphome.mdx | 90 +- .../content/docs/guides/migrate_espeasy.mdx | 20 +- .../content/docs/guides/migrate_espurna.mdx | 23 +- .../docs/guides/migrate_sonoff_tasmota.mdx | 34 +- .../guides/physical_device_connection.mdx | 106 +- .../docs/guides/security_best_practices.mdx | 4 - .../docs/guides/setting_up_rmt_devices.mdx | 12 +- .../content/docs/guides/supporters.mdx | 0 .../content/docs/guides/troubleshooting.mdx | 28 +- .../content/docs/guides/yaml.mdx | 26 +- src/content/docs/index.mdx | 80 + src/content/docs/projects/index.mdx | 618 ++ .../docs}/web-api/images/event-source.png | Bin .../docs}/web-api/images/logo-text.svg | 0 .../content/docs/web-api/index.mdx | 29 +- src/env.d.ts | 2 + src/lib/breakpoints.ts | 8 + src/styles/custom.css | 267 + themes/esphome-theme/assets/css/chroma.css | 70 - themes/esphome-theme/assets/css/main.css | 1594 ---- themes/esphome-theme/assets/css/tables.css | 104 - .../esphome-theme/assets/js/lazysizes.min.js | 3 - themes/esphome-theme/assets/js/main.js | 303 - themes/esphome-theme/assets/js/menu.js | 189 - themes/esphome-theme/assets/js/search.js | 206 - .../_markup/render-blockquote-alert.html | 19 - .../_markup/render-blockquote-regular.html | 3 - .../_default/_markup/render-codeblock.html | 18 - .../_default/_markup/render-heading.html | 4 - .../_default/_markup/render-passthrough.html | 18 - .../layouts/_default/baseof.html | 274 - .../esphome-theme/layouts/_default/list.html | 47 - .../layouts/_default/projects.html | 914 -- .../layouts/_default/single.html | 24 - .../layouts/index.componentsjson | 52 - themes/esphome-theme/layouts/index.html | 23 - .../esphome-theme/layouts/partials/asset.html | 26 - .../layouts/partials/automations-menu.html | 13 - .../layouts/partials/changelog-menu.html | 13 - .../layouts/partials/components-menu.html | 13 - .../layouts/partials/guides-menu.html | 13 - .../esphome-theme/layouts/partials/image.html | 112 - .../layouts/partials/linkify.html | 37 - .../layouts/partials/render-automations.html | 34 - .../layouts/partials/sidebar.html | 128 - .../layouts/partials/site-verification.html | 2 - .../layouts/partials/toc_secondary_list.html | 15 - .../layouts/shortcodes/anchor.html | 11 - .../layouts/shortcodes/api-key-input.html | 115 - .../layouts/shortcodes/apiclass.html | 36 - .../layouts/shortcodes/apiref.html | 39 - .../layouts/shortcodes/apistruct.html | 36 - .../layouts/shortcodes/break.html | 5 - .../layouts/shortcodes/changelogs.html | 52 - .../layouts/shortcodes/collapse.html | 29 - .../layouts/shortcodes/docref.html | 121 - .../layouts/shortcodes/feature-grid.html | 17 - .../shortcodes/getting-started-grid.html | 27 - .../layouts/shortcodes/ghuser.html | 9 - .../layouts/shortcodes/html_file.html | 22 - .../esphome-theme/layouts/shortcodes/img.html | 34 - .../layouts/shortcodes/imgtable.html | 61 - .../layouts/shortcodes/include.html | 18 - .../layouts/shortcodes/math.html | 18 - .../layouts/shortcodes/option.html | 16 - .../esphome-theme/layouts/shortcodes/pr.html | 9 - .../layouts/shortcodes/redirect.html | 8 - .../shortcodes/render-automations.html | 1 - .../esphome-theme/layouts/shortcodes/seo.html | 41 - themes/esphome-theme/theme.yaml | 13 - tsconfig.json | 9 + 2073 files changed, 39379 insertions(+), 34962 deletions(-) delete mode 100644 Makefile delete mode 100644 all_automations.json create mode 100644 astro.config.mjs delete mode 100644 build_automations_pages.py delete mode 100644 content/_index.md delete mode 100644 content/changelog/2021.10.0.md delete mode 100644 content/changelog/2021.11.0.md delete mode 100644 content/changelog/2021.12.0.md delete mode 100644 content/changelog/2021.8.0.md delete mode 100644 content/changelog/2021.9.0.md delete mode 100644 content/changelog/2022.1.0.md delete mode 100644 content/changelog/2022.10.0.md delete mode 100644 content/changelog/2022.11.0.md delete mode 100644 content/changelog/2022.12.0.md delete mode 100644 content/changelog/2022.2.0.md delete mode 100644 content/changelog/2022.3.0.md delete mode 100644 content/changelog/2022.4.0.md delete mode 100644 content/changelog/2022.5.0.md delete mode 100644 content/changelog/2022.6.0.md delete mode 100644 content/changelog/2022.8.0.md delete mode 100644 content/changelog/2022.9.0.md delete mode 100644 content/changelog/2023.10.0.md delete mode 100644 content/changelog/2023.11.0.md delete mode 100644 content/changelog/2023.12.0.md delete mode 100644 content/changelog/2023.2.0.md delete mode 100644 content/changelog/2023.3.0.md delete mode 100644 content/changelog/2023.4.0.md delete mode 100644 content/changelog/2023.5.0.md delete mode 100644 content/changelog/2023.6.0.md delete mode 100644 content/changelog/2023.7.0.md delete mode 100644 content/changelog/2023.8.0.md delete mode 100644 content/changelog/2023.9.0.md delete mode 100644 content/changelog/2024.10.0.md delete mode 100644 content/changelog/2024.11.0.md delete mode 100644 content/changelog/2024.12.0.md delete mode 100644 content/changelog/2024.2.0.md delete mode 100644 content/changelog/2024.3.0.md delete mode 100644 content/changelog/2024.4.0.md delete mode 100644 content/changelog/2024.5.0.md delete mode 100644 content/changelog/2024.6.0.md delete mode 100644 content/changelog/2024.7.0.md delete mode 100644 content/changelog/2024.8.0.md delete mode 100644 content/changelog/2024.9.0.md delete mode 100644 content/changelog/2025.2.0.md delete mode 100644 content/changelog/2025.3.0.md delete mode 100644 content/changelog/2025.4.0.md delete mode 100644 content/changelog/2025.5.0.md delete mode 100644 content/changelog/2025.6.0.md delete mode 100644 content/changelog/2025.7.0.md delete mode 100644 content/changelog/2025.8.0.md delete mode 100644 content/changelog/_index.md delete mode 100644 content/changelog/v1.10.0.md delete mode 100644 content/changelog/v1.11.0.md delete mode 100644 content/changelog/v1.12.0.md delete mode 100644 content/changelog/v1.13.0.md delete mode 100644 content/changelog/v1.14.0.md delete mode 100644 content/changelog/v1.15.0.md delete mode 100644 content/changelog/v1.16.0.md delete mode 100644 content/changelog/v1.17.0.md delete mode 100644 content/changelog/v1.18.0.md delete mode 100644 content/changelog/v1.19.0.md delete mode 100644 content/changelog/v1.20.0.md delete mode 100644 content/changelog/v1.8.0.md delete mode 100644 content/changelog/v1.9.0.md delete mode 100644 content/components/_index.md delete mode 100644 content/components/button/safe_mode.md delete mode 100644 content/components/display/max7219.md delete mode 100644 content/components/light/binary.md delete mode 100644 content/components/light/monochromatic.md delete mode 100644 content/components/packet_transport/sx126x.md delete mode 100644 content/components/packet_transport/sx127x.md delete mode 100644 content/components/packet_transport/uart.md delete mode 100644 content/components/packet_transport/udp.md delete mode 100644 content/components/sensor/filter/multiply.md delete mode 100644 content/components/sensor/hdc2010.md delete mode 100644 content/components/sensor/hlw8012.md delete mode 100644 content/components/switch/restart.md delete mode 100644 content/components/switch/safe_mode.md delete mode 100644 content/images/_index.md delete mode 100644 content/projects/_index.md delete mode 100644 hugo.yaml create mode 100755 lint.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pagefind/fragment/en-us_433ff7f.pf_fragment create mode 100644 pagefind/index/en-us_d8685b2.pf_index create mode 100644 pagefind/pagefind-entry.json create mode 100644 pagefind/pagefind-highlight.js create mode 100644 pagefind/pagefind-modular-ui.css create mode 100644 pagefind/pagefind-modular-ui.js create mode 100644 pagefind/pagefind-ui.css create mode 100644 pagefind/pagefind-ui.js create mode 100644 pagefind/pagefind.en-us_48573bd275bba.pf_meta create mode 100644 pagefind/pagefind.js create mode 100644 pagefind/wasm.en-us.pagefind create mode 100644 pagefind/wasm.unknown.pagefind rename {static => public}/favicon-128x128.png (100%) rename {static => public}/favicon-16x16.png (100%) rename {static => public}/favicon-192x192.png (100%) rename {static => public}/favicon-256x256.png (100%) rename {static => public}/favicon-32x32.png (100%) rename {static => public}/favicon-512x512.png (100%) rename {static => public}/favicon.ico (100%) rename {static => public}/images/6897d.jpg (100%) rename {static => public}/images/EE895.png (100%) rename {static => public}/images/HTE501.png (100%) rename {static => public}/images/TEE501.png (100%) rename {static => public}/images/a01nyub.jpg (100%) rename {static => public}/images/a02yyuw.jpg (100%) rename {static => public}/images/ac_dimmer.svg (100%) rename {static => public}/images/adc128s102.png (100%) rename {static => public}/images/addressable_light.jpg (100%) rename {static => public}/images/ade7880.svg (100%) rename {static => public}/images/ade7953.svg (100%) rename {static => public}/images/ads1115.jpg (100%) rename {static => public}/images/ads1118.jpg (100%) rename {static => public}/images/ags10.jpg (100%) rename {static => public}/images/aht10.jpg (100%) rename {static => public}/images/aic3204.svg (100%) rename {static => public}/images/air-conditioner-ir.svg (100%) rename {static => public}/images/air-conditioner.svg (100%) rename {static => public}/images/airthings_logo.png (100%) rename {static => public}/images/alarm-panel.svg (100%) rename {static => public}/images/alpha3.jpg (100%) rename {static => public}/images/am2315c.jpg (100%) rename {static => public}/images/am2320.jpg (100%) rename {static => public}/images/am43.jpg (100%) rename {static => public}/images/analog_threshold.svg (100%) rename {static => public}/images/anova.png (100%) rename {static => public}/images/apa102.jpg (100%) rename {static => public}/images/apds9306.png (100%) rename {static => public}/images/apds9960.jpg (100%) rename {static => public}/images/aqi.svg (100%) rename {static => public}/images/arduino_logo.svg (100%) rename {static => public}/images/as3935.jpg (100%) rename {static => public}/images/as5600.jpg (100%) rename {static => public}/images/as7341.jpg (100%) rename {static => public}/images/at581x.png (100%) rename {static => public}/images/atm90e26.jpg (100%) rename {static => public}/images/atm90e32.jpg (100%) rename {static => public}/images/audio_adc.svg (100%) rename {static => public}/images/audio_dac.svg (100%) rename {static => public}/images/auto-fix.svg (100%) rename {static => public}/images/axs15231.svg (100%) rename {static => public}/images/b_parasite.jpg (100%) rename {static => public}/images/bedjet.png (100%) rename {static => public}/images/bh1750.jpg (100%) rename {static => public}/images/bh1900nux-evk-001.png (100%) rename {static => public}/images/binary_sensor_map.jpg (100%) rename {static => public}/images/bk72xx.svg (100%) rename {static => public}/images/bl0906.png (100%) rename {static => public}/images/bl0939.png (100%) rename {static => public}/images/bl0940.png (100%) rename {static => public}/images/bl0942.png (100%) rename {static => public}/images/bluetooth.svg (100%) rename {static => public}/images/bm8563.svg (100%) rename {static => public}/images/bme280.jpg (100%) rename {static => public}/images/bme680.jpg (100%) rename {static => public}/images/bmi160.jpg (100%) rename {static => public}/images/bmp180.jpg (100%) rename {static => public}/images/bmp280.jpg (100%) rename {static => public}/images/bmp388.jpg (100%) rename {static => public}/images/bmp581.jpg (100%) rename {static => public}/images/bp1658cj.svg (100%) rename {static => public}/images/bp5758d.svg (100%) rename {static => public}/images/breakable-header.jpg (100%) rename {static => public}/images/brightness-medium.svg (100%) rename {static => public}/images/bug-report.svg (100%) rename {static => public}/images/buzzer.jpg (100%) rename {static => public}/images/camera.svg (100%) rename {static => public}/images/canbus.svg (100%) rename {static => public}/images/cap1188.jpg (100%) rename {content => public}/images/captive_portal-ui.png (100%) rename {static => public}/images/cc1101.webp (100%) rename {static => public}/images/ccs811.jpg (100%) rename {static => public}/images/cd74hc4067.jpg (100%) rename {static => public}/images/ch422g.svg (100%) rename {static => public}/images/ch423.png (100%) rename {static => public}/images/chart-line.svg (100%) rename {static => public}/images/chsc6x.png (100%) rename {static => public}/images/clock-outline.svg (100%) rename {static => public}/images/cloud-circle.svg (100%) rename {static => public}/images/cm1106.png (100%) rename {static => public}/images/color_lens.svg (100%) rename {static => public}/images/connection.svg (100%) rename {static => public}/images/content-copy.svg (100%) rename {static => public}/images/cookbook-sonoff-fishpond-pump.jpg (100%) rename {static => public}/images/crosshairs-gps.svg (100%) rename {static => public}/images/cs5460a.png (100%) rename {static => public}/images/cse7761.svg (100%) rename {static => public}/images/cse7766.svg (100%) rename {static => public}/images/cst816.jpg (100%) rename {static => public}/images/ct_clamp.jpg (100%) rename {static => public}/images/dac.svg (100%) rename {static => public}/images/dac7678.svg (100%) rename {static => public}/images/dallas.jpg (100%) rename {static => public}/images/daly_bms.jpg (100%) rename {static => public}/images/description.svg (100%) rename {static => public}/images/dfplayer.svg (100%) rename {static => public}/images/dfrobot_sen0395.jpg (100%) rename {static => public}/images/dht.jpg (100%) rename {static => public}/images/dht12.jpg (100%) rename {content/components => public}/images/display_time_temp_oled_2.jpg (100%) rename {static => public}/images/dlms_meter.jpg (100%) rename {static => public}/images/dps310.jpg (100%) rename {static => public}/images/ds2484.svg (100%) rename {static => public}/images/dsmr.svg (100%) rename {static => public}/images/ehmtx.jpg (100%) rename {static => public}/images/ektf2232.svg (100%) rename {static => public}/images/electric-switch.svg (100%) rename {static => public}/images/emc2101.jpg (100%) rename {static => public}/images/ens160.jpg (100%) rename {static => public}/images/ens210.jpg (100%) rename {static => public}/images/epaper.svg (100%) rename {static => public}/images/es7210.svg (100%) rename {static => public}/images/es7243e.svg (100%) rename {static => public}/images/es8156.svg (100%) rename {static => public}/images/es8311.svg (100%) rename {static => public}/images/es8388.svg (100%) rename {static => public}/images/esp-now.svg (100%) rename {static => public}/images/esp32-s3-korvo-2-lcd.png (100%) rename {static => public}/images/esp32.svg (100%) rename {static => public}/images/esp32_s3_box_3.png (100%) rename {static => public}/images/esp8266.svg (100%) rename {static => public}/images/ethernet.svg (100%) rename {static => public}/images/exposure_notifications.png (100%) rename {static => public}/images/external-link.svg (100%) rename {static => public}/images/external_components.svg (100%) rename {static => public}/images/ezo-ph-circuit.png (100%) rename {static => public}/images/ezo-pmp.jpg (100%) rename {static => public}/images/face.svg (100%) rename {content => public}/images/factory-rst-ui.png (100%) rename {static => public}/images/fan.svg (100%) rename {static => public}/images/feedback_cover.svg (100%) rename {static => public}/images/file-document-box.svg (100%) rename {static => public}/images/fingerprint.svg (100%) rename {static => public}/images/flash.svg (100%) rename {static => public}/images/folder-open.svg (100%) rename {static => public}/images/format-font.svg (100%) rename {static => public}/images/fs3000.jpg (100%) rename {static => public}/images/function.svg (100%) rename {content/components => public}/images/garage-variant.svg (100%) rename {static => public}/images/gcja5.svg (100%) rename {static => public}/images/gdk101.jpg (100%) rename {static => public}/images/gl_r01.jpg (100%) rename {static => public}/images/gp2y1010au0f.png (100%) rename {static => public}/images/gp8403.svg (100%) rename {content => public}/images/gpio-ui.png (100%) rename {static => public}/images/gpio.svg (100%) rename {static => public}/images/graphical_display_menu.png (100%) rename {static => public}/images/grove-gas-mc-v2.png (100%) rename {static => public}/images/grove_tb6612fng.jpg (100%) rename {static => public}/images/growatt.jpg (100%) rename {content => public}/images/haier-climate.jpg (100%) rename {static => public}/images/haier.svg (100%) rename {static => public}/images/havellsgti5000d_s.jpg (100%) rename {static => public}/images/hbridge-relay.jpg (100%) rename {static => public}/images/hc8.png (100%) rename {static => public}/images/hdc1080.jpg (100%) rename {static => public}/images/hdc2010.png (100%) rename {static => public}/images/he60r.jpg (100%) rename {content/components => public}/images/head-lightbulb-outline.svg (100%) rename {static => public}/images/hero.png (100%) rename {static => public}/images/high-voltage-warning.svg (100%) rename {static => public}/images/hlw8012.svg (100%) rename {static => public}/images/hlw8032.png (100%) rename {static => public}/images/hm3301.jpg (100%) rename {static => public}/images/hmc5883l.jpg (100%) rename {static => public}/images/home-assistant.svg (100%) rename {static => public}/images/honeywellabp.jpg (100%) rename {static => public}/images/honeywellhih.jpg (100%) rename {static => public}/images/host.svg (100%) rename {static => public}/images/hotel.svg (100%) rename {static => public}/images/hrxl_maxsonar_wr.jpg (100%) rename {static => public}/images/http.svg (100%) rename {static => public}/images/htu21d.jpg (100%) rename {static => public}/images/htu31d.jpg (100%) rename {static => public}/images/hub75.svg (100%) rename {static => public}/images/hx711.jpg (100%) rename {static => public}/images/hydreon_rg9.jpg (100%) rename {static => public}/images/hyt271.jpg (100%) rename {static => public}/images/i2c.svg (100%) rename {static => public}/images/i2s_audio.svg (100%) rename {static => public}/images/iaqcore.jpg (100%) rename {static => public}/images/icons/bolt.svg (100%) rename {static => public}/images/icons/briefcase.svg (100%) rename {static => public}/images/icons/code.svg (100%) rename {static => public}/images/icons/comments.svg (100%) rename {static => public}/images/icons/compass.svg (100%) rename {static => public}/images/icons/computer.svg (100%) rename {static => public}/images/icons/discord.svg (100%) rename {static => public}/images/icons/edit.svg (100%) rename {static => public}/images/icons/github.svg (100%) rename {static => public}/images/icons/history.svg (100%) rename {static => public}/images/icons/home-assistant.svg (100%) rename {static => public}/images/icons/home.svg (100%) rename {static => public}/images/icons/industry.svg (100%) rename {static => public}/images/icons/kitchen-set.svg (100%) rename {static => public}/images/icons/list.svg (100%) rename {static => public}/images/icons/magic.svg (100%) rename {static => public}/images/icons/microchip.svg (100%) rename {static => public}/images/icons/netlify-badge-color-accent.svg (100%) rename {static => public}/images/icons/ohf-logo-on-dark.svg (100%) rename {static => public}/images/icons/ohf-logo-on-light.svg (100%) rename {static => public}/images/icons/print.svg (100%) rename {static => public}/images/icons/puzzle-piece.svg (100%) rename {static => public}/images/icons/raspberry-pi.svg (100%) rename {static => public}/images/icons/shield-alt.svg (100%) rename {static => public}/images/icons/terminal.svg (100%) rename {static => public}/images/icons/user-cog.svg (100%) rename {static => public}/images/icons/wifi.svg (100%) rename {static => public}/images/ili9341.jpg (100%) rename {content/components => public}/images/ili9341.svg (100%) rename {content/components => public}/images/ili9342.svg (100%) rename {content/components => public}/images/ili9481.svg (100%) rename {static => public}/images/ili9488.svg (100%) rename {content/components => public}/images/image-multiple-outline.svg (100%) rename {static => public}/images/image-outline.svg (100%) rename {static => public}/images/image-sync-outline.svg (100%) rename {static => public}/images/improv-social.png (100%) rename {static => public}/images/improv.svg (100%) rename {static => public}/images/ina219.jpg (100%) rename {static => public}/images/ina226.jpg (100%) rename {static => public}/images/ina228.jpg (100%) rename {static => public}/images/ina260.jpg (100%) rename {static => public}/images/ina2xx.jpg (100%) rename {static => public}/images/ina3221.jpg (100%) rename {static => public}/images/indicator.jpg (100%) rename {static => public}/images/inkbird_isbth1_mini.jpg (100%) rename {static => public}/images/inkplate6.jpg (100%) rename {static => public}/images/jsn-sr04t-v3.jpg (100%) rename {content/components => public}/images/json.svg (100%) rename {static => public}/images/jumper-wires.jpg (100%) rename {static => public}/images/kamstrup_kmp.jpg (100%) rename {static => public}/images/kmeteriso.jpg (100%) rename {static => public}/images/kuntze.jpg (100%) rename {static => public}/images/language-cpp.svg (100%) rename {static => public}/images/lc709203f.jpg (100%) rename {static => public}/images/lcd.jpg (100%) rename {static => public}/images/lcd_menu.png (100%) rename {static => public}/images/ld2410.jpg (100%) rename {static => public}/images/ld2412.jpg (100%) rename {static => public}/images/ld2420.jpg (100%) rename {static => public}/images/ld2450.png (100%) rename {static => public}/images/ldo.svg (100%) rename {content/components => public}/images/leak-detector-m5stickC_main_index.jpg (100%) rename {static => public}/images/led-on.svg (100%) rename {static => public}/images/libretiny.svg (100%) rename {static => public}/images/lightbulb.svg (100%) rename {static => public}/images/lilygo_t5_47_touch.jpg (100%) rename {static => public}/images/link.svg (100%) rename {static => public}/images/lm75b.jpg (100%) rename {static => public}/images/ln882x.svg (100%) rename {static => public}/images/logo-docs.svg (100%) rename {static => public}/images/logo-text-on-dark.svg (100%) rename {static => public}/images/logo-text.svg (100%) rename {static => public}/images/logo.png (100%) rename {static => public}/images/logo.svg (100%) rename {static => public}/images/lps22.webp (100%) rename {static => public}/images/ltr-ps.jpg (100%) rename {static => public}/images/ltr303.jpg (100%) rename {static => public}/images/ltr329.jpg (100%) rename {static => public}/images/ltr390.jpg (100%) rename {static => public}/images/ltr501.jpg (100%) rename {content => public}/images/lvgl-hello.png (100%) rename {static => public}/images/lvgl.png (100%) rename {static => public}/images/lvgl_c_bns.png (100%) rename {static => public}/images/lvgl_c_lig.png (100%) rename {static => public}/images/lvgl_c_num.png (100%) rename {static => public}/images/lvgl_c_sel.png (100%) rename {static => public}/images/lvgl_c_swi.png (100%) rename {static => public}/images/lvgl_c_txt.png (100%) rename {static => public}/images/lvgl_cook_volume.png (100%) rename {static => public}/images/lvgl_switch.png (100%) rename {static => public}/images/m5stack_8angle.png (100%) rename {static => public}/images/made-for-esphome-black-on-transparent.png (100%) rename {static => public}/images/made-for-esphome-black-on-transparent.svg (100%) rename {static => public}/images/made-for-esphome-black-on-white.png (100%) rename {static => public}/images/made-for-esphome-black-on-white.svg (100%) rename {static => public}/images/made-for-esphome-white-on-black.png (100%) rename {static => public}/images/made-for-esphome-white-on-black.svg (100%) rename {static => public}/images/made-for-esphome-white-on-transparent.png (100%) rename {static => public}/images/made-for-esphome-white-on-transparent.svg (100%) rename {static => public}/images/mapping.svg (100%) rename {static => public}/images/matrix_keypad.jpg (100%) rename {static => public}/images/max17043.jpg (100%) rename {static => public}/images/max31855.jpg (100%) rename {static => public}/images/max31856.jpg (100%) rename {static => public}/images/max31865.jpg (100%) rename {static => public}/images/max44009.svg (100%) rename {static => public}/images/max6675.jpg (100%) rename {static => public}/images/max6956.jpg (100%) rename {static => public}/images/max7219.jpg (100%) rename {static => public}/images/max7219digit.jpg (100%) rename {static => public}/images/max9611.jpg (100%) rename {static => public}/images/mcp230xx.svg (100%) rename {content/components => public}/images/mcp23sxx.svg (100%) rename {content/components => public}/images/mcp2515.svg (100%) rename {static => public}/images/mcp3008.jpg (100%) rename {static => public}/images/mcp3204.jpg (100%) rename {static => public}/images/mcp3221.png (100%) rename {static => public}/images/mcp4461.jpg (100%) rename {static => public}/images/mcp4725.jpg (100%) rename {static => public}/images/mcp4728.jpg (100%) rename {static => public}/images/mcp47a1.svg (100%) rename {static => public}/images/mcp9600.jpg (100%) rename {static => public}/images/mcp9808.jpg (100%) rename {static => public}/images/mhz19.jpg (100%) rename {static => public}/images/micronova.svg (100%) rename {static => public}/images/microphone.svg (100%) rename {static => public}/images/mics_4514.jpg (100%) rename {static => public}/images/midea.svg (100%) rename {static => public}/images/mixer.svg (100%) rename {static => public}/images/mlx90393.jpg (100%) rename {static => public}/images/mlx90614.jpg (100%) rename {static => public}/images/mmc5603.jpg (100%) rename {static => public}/images/mmc5983.jpg (100%) rename {static => public}/images/modbus.png (100%) rename {static => public}/images/mopeka_pro_check.jpg (100%) rename {static => public}/images/mopeka_std_check.jpg (100%) rename {static => public}/images/motor.png (100%) rename {static => public}/images/mpl3115a2.jpg (100%) rename {static => public}/images/mpr121.jpg (100%) rename {static => public}/images/mpu6050.jpg (100%) rename {static => public}/images/mpu6886.jpg (100%) rename {static => public}/images/mqtt.png (100%) rename {static => public}/images/ms5611.jpg (100%) rename {static => public}/images/ms8607.jpg (100%) rename {static => public}/images/msa301.jpg (100%) rename {static => public}/images/msa311.jpg (100%) rename {static => public}/images/my9231.svg (100%) rename {static => public}/images/nau7802.jpg (100%) rename {static => public}/images/network-wifi.svg (100%) rename {static => public}/images/new-box.svg (100%) rename {static => public}/images/nextion.jpg (100%) rename {static => public}/images/nfc.png (100%) rename {static => public}/images/npi19.jpg (100%) rename {static => public}/images/nrf52.svg (100%) rename {static => public}/images/ntc.jpg (100%) rename {static => public}/images/omega.svg (100%) rename {static => public}/images/one-wire.svg (100%) rename {static => public}/images/opentherm.png (100%) rename {static => public}/images/openthread.png (100%) rename {static => public}/images/opt3001.jpg (100%) rename {content => public}/images/output-ui.png (100%) rename {static => public}/images/packet_transport.svg (100%) rename {static => public}/images/pca6416a.svg (100%) rename {static => public}/images/pca9554a.jpg (100%) rename {static => public}/images/pca9685.jpg (100%) rename {static => public}/images/pcd8544.jpg (100%) rename {static => public}/images/pcf8574.jpg (100%) rename {static => public}/images/percent.svg (100%) rename {static => public}/images/pipsolar.jpg (100%) rename {static => public}/images/pm1006.jpg (100%) rename {static => public}/images/pm2005.png (100%) rename {static => public}/images/pmsa003i.jpg (100%) rename {static => public}/images/pmsx003.svg (100%) rename {static => public}/images/pmwcs3.jpg (100%) rename {static => public}/images/pn532.jpg (100%) rename {static => public}/images/pn7150.jpg (100%) rename {static => public}/images/pn716x.jpg (100%) rename {static => public}/images/power.svg (100%) rename {static => public}/images/power_meter.jpg (100%) rename {static => public}/images/power_settings.svg (100%) rename {static => public}/images/prometheus.svg (100%) rename {static => public}/images/psram.svg (100%) rename {static => public}/images/pulse.svg (100%) rename {static => public}/images/pulses.png (100%) rename {static => public}/images/pwm.png (100%) rename {static => public}/images/pylontech.jpg (100%) rename {static => public}/images/pzem-ac.jpg (100%) rename {static => public}/images/pzem-dc.jpg (100%) rename {static => public}/images/pzem004t.svg (100%) rename {static => public}/images/qmc5883l.jpg (100%) rename {static => public}/images/qmp6988_env3.png (100%) rename {static => public}/images/qr-code.svg (100%) rename {static => public}/images/qwiic_pir.jpg (100%) rename {static => public}/images/radio-tower.svg (100%) rename {static => public}/images/radon_eye_logo.png (100%) rename {static => public}/images/rc522.jpg (100%) rename {static => public}/images/rd03d.webp (100%) rename {static => public}/images/rdm6300.jpg (100%) rename {static => public}/images/remote.svg (100%) rename {static => public}/images/resol_deltasol_bs_plus.jpg (100%) rename {static => public}/images/restart-alert.svg (100%) rename {static => public}/images/restart.svg (100%) rename {static => public}/images/rf_bridge.jpg (100%) rename {static => public}/images/rgb.png (100%) rename {static => public}/images/rgbw.png (100%) rename {static => public}/images/rotary_encoder.jpg (100%) rename {static => public}/images/rp2040.svg (100%) rename {static => public}/images/rs485.jpg (100%) rename {static => public}/images/rtl87xx.svg (100%) rename {static => public}/images/ruuvitag.jpg (100%) rename {content => public}/images/safemode-ui.png (100%) rename {static => public}/images/scd30.jpg (100%) rename {static => public}/images/scd4x.jpg (100%) rename {static => public}/images/sdl.png (100%) rename {static => public}/images/sdm220m.jpg (100%) rename {static => public}/images/sdp31.jpg (100%) rename {static => public}/images/sds011.jpg (100%) rename {static => public}/images/seeed-mr24hpc1.jpg (100%) rename {static => public}/images/seeed_mr60bha2.jpg (100%) rename {static => public}/images/seeed_mr60fda2.jpg (100%) rename {static => public}/images/seg00.svg (100%) rename {static => public}/images/seg01.svg (100%) rename {static => public}/images/seg02.svg (100%) rename {static => public}/images/seg05.svg (100%) rename {static => public}/images/seg06.svg (100%) rename {static => public}/images/seg07.svg (100%) rename {static => public}/images/seg08.svg (100%) rename {static => public}/images/seg09.svg (100%) rename {static => public}/images/seg0D.svg (100%) rename {static => public}/images/seg0E.svg (100%) rename {static => public}/images/seg10.svg (100%) rename {static => public}/images/seg15.svg (100%) rename {static => public}/images/seg17.svg (100%) rename {static => public}/images/seg1C.svg (100%) rename {static => public}/images/seg1D.svg (100%) rename {static => public}/images/seg1F.svg (100%) rename {static => public}/images/seg20.svg (100%) rename {static => public}/images/seg22.svg (100%) rename {static => public}/images/seg27.svg (100%) rename {static => public}/images/seg30.svg (100%) rename {static => public}/images/seg31.svg (100%) rename {static => public}/images/seg33.svg (100%) rename {static => public}/images/seg37.svg (100%) rename {static => public}/images/seg3C.svg (100%) rename {static => public}/images/seg3D.svg (100%) rename {static => public}/images/seg3E.svg (100%) rename {static => public}/images/seg3F.svg (100%) rename {static => public}/images/seg40.svg (100%) rename {static => public}/images/seg47.svg (100%) rename {static => public}/images/seg48.svg (100%) rename {static => public}/images/seg49.svg (100%) rename {static => public}/images/seg4E.svg (100%) rename {static => public}/images/seg4F.svg (100%) rename {static => public}/images/seg58.svg (100%) rename {static => public}/images/seg5B.svg (100%) rename {static => public}/images/seg5E.svg (100%) rename {static => public}/images/seg5F.svg (100%) rename {static => public}/images/seg65.svg (100%) rename {static => public}/images/seg67.svg (100%) rename {static => public}/images/seg6D.svg (100%) rename {static => public}/images/seg6F.svg (100%) rename {static => public}/images/seg70.svg (100%) rename {static => public}/images/seg73.svg (100%) rename {static => public}/images/seg77.svg (100%) rename {static => public}/images/seg78.svg (100%) rename {static => public}/images/seg79.svg (100%) rename {static => public}/images/seg7E.svg (100%) rename {static => public}/images/seg7F.svg (100%) rename {static => public}/images/seg80.svg (100%) rename {static => public}/images/seg8E.svg (100%) rename {static => public}/images/segB0.svg (100%) rename {static => public}/images/segFE.svg (100%) rename {static => public}/images/selec_meter_em2m.jpg (100%) rename {static => public}/images/sen0321.jpg (100%) rename {static => public}/images/sen21231.png (100%) rename {static => public}/images/sen54.jpg (100%) rename {static => public}/images/senseair_s8.jpg (100%) rename {content => public}/images/sensor_filter_calibrate_linear.png (100%) rename {static => public}/images/server-network.svg (100%) rename {static => public}/images/servo.svg (100%) rename {static => public}/images/settings.svg (100%) rename {static => public}/images/sfa30.jpg (100%) rename {static => public}/images/sgp30.jpg (100%) rename {static => public}/images/sgp40.jpg (100%) rename {static => public}/images/shellydimmer2.jpg (100%) rename {static => public}/images/sht3xd.jpg (100%) rename {static => public}/images/sht4x.jpg (100%) rename {static => public}/images/shtc3.jpg (100%) rename {content => public}/images/shutdown-ui.png (100%) rename {static => public}/images/sigma-delta.svg (100%) rename {static => public}/images/sigma.svg (100%) rename {static => public}/images/sim800l.jpg (100%) rename {static => public}/images/sm16716.svg (100%) rename {static => public}/images/sm2135.svg (100%) rename {static => public}/images/sm2235.svg (100%) rename {static => public}/images/sm2335.svg (100%) rename {static => public}/images/sm300d2.jpg (100%) rename {static => public}/images/sml.svg (100%) rename {static => public}/images/smt100.jpg (100%) rename {static => public}/images/sn74hc595.jpg (100%) rename {static => public}/images/sonoff_d1.jpg (100%) rename {static => public}/images/speaker.svg (100%) rename {static => public}/images/spi.svg (100%) rename {static => public}/images/sprinkler-variant.svg (100%) rename {static => public}/images/sps30.jpg (100%) rename {static => public}/images/ssd1306.jpg (100%) rename {static => public}/images/ssd1322.jpg (100%) rename {static => public}/images/ssd1325.jpg (100%) rename {static => public}/images/ssd1327.jpg (100%) rename {static => public}/images/ssd1331.jpg (100%) rename {static => public}/images/ssd1351.jpg (100%) rename {static => public}/images/st7567.jpg (100%) rename {static => public}/images/st7735.jpg (100%) rename {static => public}/images/st7789v.jpg (100%) rename {content/components => public}/images/st7796.svg (100%) rename {static => public}/images/st7920.jpg (100%) rename {static => public}/images/stepper.svg (100%) rename {static => public}/images/sts3x.jpg (100%) rename {static => public}/images/stts22h.jpg (100%) rename {static => public}/images/sun_1000g2.png (100%) rename {static => public}/images/sx126x.png (100%) rename {static => public}/images/sx127x.png (100%) rename {static => public}/images/sx1509.jpg (100%) rename {static => public}/images/sy6970.jpg (100%) rename {static => public}/images/system-update.svg (100%) rename {static => public}/images/t4-s3.jpg (100%) rename {static => public}/images/t6615.jpg (100%) rename {static => public}/images/tab5.jpg (100%) rename {static => public}/images/tc74.jpg (100%) rename {static => public}/images/tca9548a.jpg (100%) rename {static => public}/images/tca9555.svg (100%) rename {static => public}/images/tcs34725.jpg (100%) rename {static => public}/images/teleinfo.jpg (100%) rename {static => public}/images/tem3200.jpg (100%) rename {static => public}/images/thermometer.svg (100%) rename {static => public}/images/thermopro_tp357.jpg (100%) rename {static => public}/images/timer-play-outline.svg (100%) rename {static => public}/images/timer.svg (100%) rename {static => public}/images/tlc59208f.jpg (100%) rename {static => public}/images/tlc5947.jpg (100%) rename {static => public}/images/tlc5971.jpg (100%) rename {static => public}/images/tm1621.jpg (100%) rename {static => public}/images/tm1637.jpg (100%) rename {static => public}/images/tm1638.jpg (100%) rename {static => public}/images/tm1651_battery_display.jpg (100%) rename {static => public}/images/tmp102.jpg (100%) rename {static => public}/images/tmp1075.jpg (100%) rename {static => public}/images/tmp117.jpg (100%) rename {static => public}/images/tof10120.jpg (100%) rename {static => public}/images/tormatic.png (100%) rename {static => public}/images/touch.svg (100%) rename {static => public}/images/tsl2561.jpg (100%) rename {static => public}/images/tsl2591.jpg (100%) rename {static => public}/images/ttp229.jpg (100%) rename {static => public}/images/tuya.png (100%) rename {static => public}/images/tx20.jpg (100%) rename {static => public}/images/uart.svg (100%) rename {static => public}/images/udp.svg (100%) rename {static => public}/images/ufire_ec.png (100%) rename {static => public}/images/ufire_ise.png (100%) rename {static => public}/images/ultrasonic.jpg (100%) rename {static => public}/images/upload.svg (100%) rename {static => public}/images/uponor.svg (100%) rename {static => public}/images/usb.svg (100%) rename {static => public}/images/veml3235.jpg (100%) rename {static => public}/images/veml6030.jpg (100%) rename {static => public}/images/veml7700.jpg (100%) rename {static => public}/images/vl53l0x.jpg (100%) rename {static => public}/images/voice-assistant.svg (100%) rename {static => public}/images/water-drop.svg (100%) rename {static => public}/images/water_heater.svg (100%) rename {static => public}/images/waveform.svg (100%) rename {static => public}/images/waveshare_epaper.jpg (100%) rename {static => public}/images/waveshare_touch-s3.jpg (100%) rename {static => public}/images/weather-sunny.svg (100%) rename {static => public}/images/wiegand.jpg (100%) rename {static => public}/images/wifi-strength-alert-outline.svg (100%) rename {static => public}/images/wireguard_custom_logo.svg (100%) rename {static => public}/images/wk2168.jpg (100%) rename {static => public}/images/wt32-sc01.png (100%) rename {static => public}/images/wts01.png (100%) rename {static => public}/images/x9c.jpg (100%) rename {static => public}/images/xiaomi_cgg1.jpg (100%) rename {static => public}/images/xiaomi_hhccjcy01.jpg (100%) rename {static => public}/images/xiaomi_hhccjcy10.jpg (100%) rename {static => public}/images/xiaomi_lywsd02.jpg (100%) rename {static => public}/images/xiaomi_lywsd03mmc.jpg (100%) rename {static => public}/images/xiaomi_lywsdcgq.jpg (100%) rename {static => public}/images/xiaomi_mijia_logo.jpg (100%) rename {static => public}/images/xiaomi_miscale.jpg (100%) rename {static => public}/images/xiaomi_rtcgq02lm.jpg (100%) rename {static => public}/images/xl9535.svg (100%) rename {static => public}/images/xpt2046.jpg (100%) rename {static => public}/images/xxtea.svg (100%) rename {static => public}/images/z-wave.svg (100%) rename {static => public}/images/zgm053.jpg (100%) rename {static => public}/images/zigbee.svg (100%) rename {static => public}/images/zio_ultrasonic.jpg (100%) rename {static => public}/projects/bluetooth-proxy/esp32_generic.png (100%) rename {static => public}/projects/bluetooth-proxy/gl-s10.png (100%) rename {static => public}/projects/bluetooth-proxy/header.png (100%) rename {static => public}/projects/bluetooth-proxy/lilygo-eth-poe.png (100%) rename {static => public}/projects/bluetooth-proxy/m5stack_atom_lite.png (100%) rename {static => public}/projects/bluetooth-proxy/olimex_esp32_poe_iso.png (100%) rename {static => public}/projects/bluetooth-proxy/seeed-esp32-poe.png (100%) rename {static => public}/projects/bluetooth-proxy/wt32-eth01.png (100%) rename {static => public}/projects/empty/espressif.png (100%) rename {static => public}/projects/empty/pico-w.png (100%) rename {static => public}/projects/irrf-proxy/xiao-ir-mate.png (100%) rename {static => public}/projects/media-player/atom_echo.png (100%) rename {static => public}/projects/media-player/atom_speaker_kit.png (100%) rename {static => public}/projects/media-player/esp_muse_luxe.png (100%) rename {static => public}/projects/media-player/esp_muse_proto.png (100%) rename {static => public}/projects/voice-assistant/esp32-s3-box-3.png (100%) rename {static => public}/projects/voice-assistant/home-assistant-voice.png (100%) create mode 100644 public/robots.txt create mode 100644 script/check_urls.mjs delete mode 100755 script/convert-pr.sh delete mode 100755 script/convert_rst_to_md.py delete mode 100644 script/fix_markdown.py delete mode 100755 script/migrate.sh create mode 100644 script/seo_audit.mjs create mode 100644 script/seo_report.mjs delete mode 100755 script/test-next-migrate.sh delete mode 100755 script/test-release-migrate.sh create mode 100644 src/assets/hero.png create mode 100644 src/assets/logo-dark.svg create mode 100644 src/assets/logo-light.svg create mode 100644 src/components/APIClass.astro create mode 100644 src/components/APIKeyGenerator.astro create mode 100644 src/components/APIRef.astro create mode 100644 src/components/APIStruct.astro create mode 100644 src/components/FeatureGrid.astro create mode 100644 src/components/Figure.astro create mode 100644 src/components/FilterList.astro create mode 100644 src/components/Footer.astro create mode 100644 src/components/GettingStartedGrid.astro create mode 100644 src/components/HLW8012Calculator.astro create mode 100644 src/components/ImgTable.astro create mode 100644 src/content.config.ts create mode 100644 src/content/docs/404.mdx rename content/automations/actions.md => src/content/docs/automations/actions.mdx (92%) rename content/automations/all_actions.md => src/content/docs/automations/all_actions.mdx (97%) rename content/automations/all_conditions.md => src/content/docs/automations/all_conditions.mdx (93%) rename content/automations/_index.md => src/content/docs/automations/index.mdx (68%) rename content/automations/templates.md => src/content/docs/automations/templates.mdx (92%) create mode 100644 src/content/docs/changelog/2021.10.0.mdx create mode 100644 src/content/docs/changelog/2021.11.0.mdx create mode 100644 src/content/docs/changelog/2021.12.0.mdx create mode 100644 src/content/docs/changelog/2021.8.0.mdx create mode 100644 src/content/docs/changelog/2021.9.0.mdx create mode 100644 src/content/docs/changelog/2022.1.0.mdx create mode 100644 src/content/docs/changelog/2022.10.0.mdx create mode 100644 src/content/docs/changelog/2022.11.0.mdx create mode 100644 src/content/docs/changelog/2022.12.0.mdx create mode 100644 src/content/docs/changelog/2022.2.0.mdx create mode 100644 src/content/docs/changelog/2022.3.0.mdx create mode 100644 src/content/docs/changelog/2022.4.0.mdx create mode 100644 src/content/docs/changelog/2022.5.0.mdx create mode 100644 src/content/docs/changelog/2022.6.0.mdx create mode 100644 src/content/docs/changelog/2022.8.0.mdx create mode 100644 src/content/docs/changelog/2022.9.0.mdx create mode 100644 src/content/docs/changelog/2023.10.0.mdx create mode 100644 src/content/docs/changelog/2023.11.0.mdx create mode 100644 src/content/docs/changelog/2023.12.0.mdx create mode 100644 src/content/docs/changelog/2023.2.0.mdx create mode 100644 src/content/docs/changelog/2023.3.0.mdx create mode 100644 src/content/docs/changelog/2023.4.0.mdx create mode 100644 src/content/docs/changelog/2023.5.0.mdx create mode 100644 src/content/docs/changelog/2023.6.0.mdx create mode 100644 src/content/docs/changelog/2023.7.0.mdx create mode 100644 src/content/docs/changelog/2023.8.0.mdx create mode 100644 src/content/docs/changelog/2023.9.0.mdx create mode 100644 src/content/docs/changelog/2024.10.0.mdx create mode 100644 src/content/docs/changelog/2024.11.0.mdx create mode 100644 src/content/docs/changelog/2024.12.0.mdx create mode 100644 src/content/docs/changelog/2024.2.0.mdx create mode 100644 src/content/docs/changelog/2024.3.0.mdx create mode 100644 src/content/docs/changelog/2024.4.0.mdx create mode 100644 src/content/docs/changelog/2024.5.0.mdx create mode 100644 src/content/docs/changelog/2024.6.0.mdx create mode 100644 src/content/docs/changelog/2024.7.0.mdx create mode 100644 src/content/docs/changelog/2024.8.0.mdx create mode 100644 src/content/docs/changelog/2024.9.0.mdx rename content/changelog/2025.10.0.md => src/content/docs/changelog/2025.10.0.mdx (97%) rename content/changelog/2025.11.0.md => src/content/docs/changelog/2025.11.0.mdx (88%) rename content/changelog/2025.12.0.md => src/content/docs/changelog/2025.12.0.mdx (90%) create mode 100644 src/content/docs/changelog/2025.2.0.mdx create mode 100644 src/content/docs/changelog/2025.3.0.mdx create mode 100644 src/content/docs/changelog/2025.4.0.mdx create mode 100644 src/content/docs/changelog/2025.5.0.mdx create mode 100644 src/content/docs/changelog/2025.6.0.mdx create mode 100644 src/content/docs/changelog/2025.7.0.mdx create mode 100644 src/content/docs/changelog/2025.8.0.mdx rename content/changelog/2025.9.0.md => src/content/docs/changelog/2025.9.0.mdx (98%) rename content/changelog/2026.1.0.md => src/content/docs/changelog/2026.1.0.mdx (90%) rename content/changelog/2026.2.0.md => src/content/docs/changelog/2026.2.0.mdx (99%) rename {content => src/content/docs}/changelog/images/changelog-1.10.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.11.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.12.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.13.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.14.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.15.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.16.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.17.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.18.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.19.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.20.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-1.9.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2021.10.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2021.11.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2021.12.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2021.8.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2021.9.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.1.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.10.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.11.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.12.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.2.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.3.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.4.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.5.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.6.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.8.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2022.9.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.10.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.11.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.12.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.2.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.3.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.4.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.5.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.6.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.7.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.8.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2023.9.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.10.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.11.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.12.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.2.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.3.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.4.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.5.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.6.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.8.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2024.9.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.10.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.11.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.2.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.3.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.4.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.5.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.6.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.7.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.8.0.png (100%) rename {content => src/content/docs}/changelog/images/changelog-2025.9.0.png (100%) rename {content => src/content/docs}/changelog/images/configuration-url.png (100%) rename {content => src/content/docs}/changelog/images/creation.svg (100%) rename {content => src/content/docs}/changelog/images/github-1000-stars.png (100%) rename {content => src/content/docs}/changelog/images/live-validation.png (100%) rename {content => src/content/docs}/changelog/images/mcp23017.svg (100%) rename {content => src/content/docs}/changelog/images/online-indicator.png (100%) rename {content => src/content/docs}/changelog/images/tracer-an.jpg (100%) rename {content => src/content/docs}/changelog/images/visual-studio-code.svg (100%) rename {content => src/content/docs}/changelog/images/vscode-validation.png (100%) rename {content => src/content/docs}/changelog/images/xiaomi_miscale2.jpg (100%) create mode 100644 src/content/docs/changelog/index.mdx create mode 100644 src/content/docs/changelog/v1.10.0.mdx create mode 100644 src/content/docs/changelog/v1.11.0.mdx create mode 100644 src/content/docs/changelog/v1.12.0.mdx create mode 100644 src/content/docs/changelog/v1.13.0.mdx create mode 100644 src/content/docs/changelog/v1.14.0.mdx create mode 100644 src/content/docs/changelog/v1.15.0.mdx create mode 100644 src/content/docs/changelog/v1.16.0.mdx create mode 100644 src/content/docs/changelog/v1.17.0.mdx create mode 100644 src/content/docs/changelog/v1.18.0.mdx create mode 100644 src/content/docs/changelog/v1.19.0.mdx create mode 100644 src/content/docs/changelog/v1.20.0.mdx rename content/changelog/v1.7.0.md => src/content/docs/changelog/v1.7.0.mdx (75%) create mode 100644 src/content/docs/changelog/v1.8.0.mdx create mode 100644 src/content/docs/changelog/v1.9.0.mdx rename content/components/alarm_control_panel/_index.md => src/content/docs/components/alarm_control_panel/index.mdx (85%) rename content/components/alarm_control_panel/template.md => src/content/docs/components/alarm_control_panel/template.mdx (94%) rename content/components/animation.md => src/content/docs/components/animation.mdx (99%) rename content/components/api.md => src/content/docs/components/api.mdx (97%) rename content/components/at581x.md => src/content/docs/components/at581x.mdx (85%) rename content/components/audio_adc/es7210.md => src/content/docs/components/audio_adc/es7210.mdx (85%) rename content/components/audio_adc/es7243e.md => src/content/docs/components/audio_adc/es7243e.mdx (84%) rename content/components/audio_adc/_index.md => src/content/docs/components/audio_adc/index.mdx (81%) rename content/components/audio_dac/aic3204.md => src/content/docs/components/audio_dac/aic3204.mdx (79%) rename content/components/audio_dac/es8156.md => src/content/docs/components/audio_dac/es8156.mdx (77%) rename content/components/audio_dac/es8311.md => src/content/docs/components/audio_dac/es8311.mdx (83%) rename content/components/audio_dac/es8388.md => src/content/docs/components/audio_dac/es8388.mdx (82%) rename content/components/audio_dac/_index.md => src/content/docs/components/audio_dac/index.mdx (80%) rename content/components/binary_sensor/analog_threshold.md => src/content/docs/components/binary_sensor/analog_threshold.mdx (86%) rename content/components/binary_sensor/ble_presence.md => src/content/docs/components/binary_sensor/ble_presence.mdx (87%) rename content/components/binary_sensor/cap1188.md => src/content/docs/components/binary_sensor/cap1188.mdx (85%) rename content/components/binary_sensor/esp32_touch.md => src/content/docs/components/binary_sensor/esp32_touch.mdx (94%) rename content/components/binary_sensor/gpio.md => src/content/docs/components/binary_sensor/gpio.mdx (93%) rename content/components/binary_sensor/haier.md => src/content/docs/components/binary_sensor/haier.mdx (87%) rename content/components/binary_sensor/homeassistant.md => src/content/docs/components/binary_sensor/homeassistant.mdx (77%) rename content/components/binary_sensor/hydreon_rgxx.md => src/content/docs/components/binary_sensor/hydreon_rgxx.mdx (81%) rename {content => src/content/docs}/components/binary_sensor/images/cap1188-full.jpg (100%) rename {content => src/content/docs}/components/binary_sensor/images/esp32_ble-ui.png (100%) rename {content => src/content/docs}/components/binary_sensor/images/esp32_touch-finding_thresholds.png (100%) rename {content => src/content/docs}/components/binary_sensor/images/esp32_touch-ui.png (100%) rename {content => src/content/docs}/components/binary_sensor/images/mpr121-full.jpg (100%) rename {content => src/content/docs}/components/binary_sensor/images/pn532-full.jpg (100%) rename {content => src/content/docs}/components/binary_sensor/images/pn532-spi.jpg (100%) rename {content => src/content/docs}/components/binary_sensor/images/rc522-full.jpg (100%) rename {content => src/content/docs}/components/binary_sensor/images/rdm6300-full.jpg (100%) rename {content => src/content/docs}/components/binary_sensor/images/rdm6300-ui.png (100%) rename {content => src/content/docs}/components/binary_sensor/images/status-ui.png (100%) rename {content => src/content/docs}/components/binary_sensor/images/ttp229-full.jpg (100%) rename content/components/binary_sensor/_index.md => src/content/docs/components/binary_sensor/index.mdx (94%) rename content/components/binary_sensor/lvgl.md => src/content/docs/components/binary_sensor/lvgl.mdx (60%) rename content/components/binary_sensor/modbus_controller.md => src/content/docs/components/binary_sensor/modbus_controller.mdx (82%) rename content/components/binary_sensor/mpr121.md => src/content/docs/components/binary_sensor/mpr121.mdx (90%) rename content/components/binary_sensor/nextion.md => src/content/docs/components/binary_sensor/nextion.mdx (89%) rename content/components/binary_sensor/nfc.md => src/content/docs/components/binary_sensor/nfc.mdx (79%) rename content/components/binary_sensor/packet_transport.md => src/content/docs/components/binary_sensor/packet_transport.mdx (91%) rename content/components/binary_sensor/pn532.md => src/content/docs/components/binary_sensor/pn532.mdx (90%) rename content/components/binary_sensor/qwiic_pir.md => src/content/docs/components/binary_sensor/qwiic_pir.mdx (84%) rename content/components/binary_sensor/rc522.md => src/content/docs/components/binary_sensor/rc522.mdx (92%) rename content/components/binary_sensor/rdm6300.md => src/content/docs/components/binary_sensor/rdm6300.mdx (84%) rename content/components/binary_sensor/sdl.md => src/content/docs/components/binary_sensor/sdl.mdx (81%) rename content/components/binary_sensor/status.md => src/content/docs/components/binary_sensor/status.mdx (54%) rename content/components/binary_sensor/switch.md => src/content/docs/components/binary_sensor/switch.mdx (69%) rename content/components/binary_sensor/template.md => src/content/docs/components/binary_sensor/template.mdx (88%) rename content/components/binary_sensor/ttp229.md => src/content/docs/components/binary_sensor/ttp229.mdx (82%) rename content/components/binary_sensor/tuya.md => src/content/docs/components/binary_sensor/tuya.mdx (61%) rename content/components/ble_client.md => src/content/docs/components/ble_client.mdx (92%) rename content/components/ble_nus.md => src/content/docs/components/ble_nus.mdx (73%) rename content/components/bluetooth_proxy.md => src/content/docs/components/bluetooth_proxy.mdx (96%) rename content/components/button/factory_reset.md => src/content/docs/components/button/factory_reset.mdx (65%) rename content/components/button/haier.md => src/content/docs/components/button/haier.mdx (82%) rename {content => src/content/docs}/components/button/images/generic-ui.png (100%) rename content/components/button/_index.md => src/content/docs/components/button/index.mdx (85%) rename content/components/button/output.md => src/content/docs/components/button/output.mdx (68%) rename content/components/button/restart.md => src/content/docs/components/button/restart.mdx (52%) create mode 100644 src/content/docs/components/button/safe_mode.mdx rename content/components/button/shutdown.md => src/content/docs/components/button/shutdown.mdx (55%) rename content/components/button/template.md => src/content/docs/components/button/template.mdx (73%) rename content/components/button/uart.md => src/content/docs/components/button/uart.mdx (70%) rename content/components/button/wake_on_lan.md => src/content/docs/components/button/wake_on_lan.mdx (71%) rename content/components/camera/camera_encoder.md => src/content/docs/components/camera/camera_encoder.mdx (86%) rename content/components/camera/_index.md => src/content/docs/components/camera/index.mdx (64%) rename content/components/canbus/esp32_can.md => src/content/docs/components/canbus/esp32_can.mdx (90%) rename {content => src/content/docs}/components/canbus/images/canbus_esp32_3v3.png (100%) rename {content => src/content/docs}/components/canbus/images/canbus_esp32_5v.png (100%) rename {content => src/content/docs}/components/canbus/images/canbus_mcp2515_resistor.png (100%) rename {content => src/content/docs}/components/canbus/images/canbus_mcp2515_txs0108e.png (100%) rename content/components/canbus/_index.md => src/content/docs/components/canbus/index.mdx (97%) rename content/components/canbus/mcp2515.md => src/content/docs/components/canbus/mcp2515.mdx (83%) rename content/components/captive_portal.md => src/content/docs/components/captive_portal.mdx (73%) rename content/components/cc1101.md => src/content/docs/components/cc1101.mdx (98%) rename content/components/ch422g.md => src/content/docs/components/ch422g.mdx (88%) rename content/components/ch423.md => src/content/docs/components/ch423.mdx (88%) rename content/components/climate/anova.md => src/content/docs/components/climate/anova.mdx (85%) rename content/components/climate/bang_bang.md => src/content/docs/components/climate/bang_bang.mdx (91%) rename content/components/climate/bedjet.md => src/content/docs/components/climate/bedjet.mdx (92%) rename content/components/climate/climate_ir.md => src/content/docs/components/climate/climate_ir.mdx (89%) rename content/components/climate/haier.md => src/content/docs/components/climate/haier.mdx (92%) rename {content => src/content/docs}/components/climate/images/climate-ui.png (100%) rename {content => src/content/docs}/components/climate/images/deadband1.png (100%) rename {content => src/content/docs}/components/climate/images/deadband2.png (100%) rename {content => src/content/docs}/components/climate/images/haier_pinout.jpg (100%) rename {content => src/content/docs}/components/climate/images/usb_pinout.png (100%) rename content/components/climate/_index.md => src/content/docs/components/climate/index.mdx (94%) rename content/components/climate/midea.md => src/content/docs/components/climate/midea.mdx (89%) rename content/components/climate/pid.md => src/content/docs/components/climate/pid.mdx (94%) rename content/components/climate/thermostat.md => src/content/docs/components/climate/thermostat.mdx (97%) rename content/components/climate/tuya.md => src/content/docs/components/climate/tuya.mdx (93%) rename content/components/copy.md => src/content/docs/components/copy.mdx (96%) rename content/components/cover/am43.md => src/content/docs/components/cover/am43.mdx (86%) rename content/components/cover/current_based.md => src/content/docs/components/cover/current_based.mdx (91%) rename content/components/cover/endstop.md => src/content/docs/components/cover/endstop.mdx (90%) rename content/components/cover/feedback.md => src/content/docs/components/cover/feedback.mdx (93%) rename content/components/cover/he60r.md => src/content/docs/components/cover/he60r.mdx (91%) rename {content => src/content/docs}/components/cover/images/cover-ui.png (100%) rename {content => src/content/docs}/components/cover/images/he60r-sch.jpg (100%) rename {content => src/content/docs}/components/cover/images/more-info-ui.png (100%) rename {content => src/content/docs}/components/cover/images/shelly2.5.png (100%) rename content/components/cover/_index.md => src/content/docs/components/cover/index.mdx (90%) rename content/components/cover/template.md => src/content/docs/components/cover/template.mdx (92%) rename content/components/cover/time_based.md => src/content/docs/components/cover/time_based.mdx (92%) rename content/components/cover/tormatic.md => src/content/docs/components/cover/tormatic.mdx (90%) rename content/components/cover/tuya.md => src/content/docs/components/cover/tuya.mdx (91%) rename content/components/datetime/_index.md => src/content/docs/components/datetime/index.mdx (87%) rename content/components/datetime/template.md => src/content/docs/components/datetime/template.mdx (93%) rename content/components/debug.md => src/content/docs/components/debug.mdx (87%) rename content/components/deep_sleep.md => src/content/docs/components/deep_sleep.mdx (95%) rename content/components/demo.md => src/content/docs/components/demo.mdx (59%) rename content/components/dfplayer.md => src/content/docs/components/dfplayer.mdx (96%) rename content/components/dfrobot_sen0395.md => src/content/docs/components/dfrobot_sen0395.mdx (86%) rename content/components/display/addressable_light.md => src/content/docs/components/display/addressable_light.mdx (76%) rename content/components/display/epaper_spi.md => src/content/docs/components/display/epaper_spi.mdx (80%) rename content/components/display/hub75.md => src/content/docs/components/display/hub75.mdx (97%) rename content/components/display/ili9xxx.md => src/content/docs/components/display/ili9xxx.mdx (95%) rename {content => src/content/docs}/components/display/images/addressable_light_pixel_map_8x32.png (100%) rename {content => src/content/docs}/components/display/images/addressable_light_pixel_map_default.png (100%) rename {content => src/content/docs}/components/display/images/display_rendering_colors.png (100%) rename {content => src/content/docs}/components/display/images/display_rendering_line.png (100%) rename {content => src/content/docs}/components/display/images/display_rendering_shapes.png (100%) rename {content => src/content/docs}/components/display/images/display_rendering_text.png (100%) rename {content => src/content/docs}/components/display/images/ili9341-full.jpg (100%) rename {content => src/content/docs}/components/display/images/lcd-hello_world.jpg (100%) rename {content => src/content/docs}/components/display/images/lcd-pcf8574.jpg (100%) rename {content => src/content/docs}/components/display/images/lcd_gpio.svg (100%) rename {content => src/content/docs}/components/display/images/max7219-full.jpg (100%) rename {content => src/content/docs}/components/display/images/max7219digit.png (100%) rename {content => src/content/docs}/components/display/images/nextion-full.jpg (100%) rename {content => src/content/docs}/components/display/images/pcd8544-full.jpg (100%) rename {content => src/content/docs}/components/display/images/ssd1306-full.jpg (100%) rename {content => src/content/docs}/components/display/images/ssd1322-full.jpg (100%) rename {content => src/content/docs}/components/display/images/ssd1325-full.jpg (100%) rename {content => src/content/docs}/components/display/images/ssd1327-full.jpg (100%) rename {content => src/content/docs}/components/display/images/ssd1331-full.jpg (100%) rename {content => src/content/docs}/components/display/images/ssd1351-full.jpg (100%) rename {content => src/content/docs}/components/display/images/st7567-full.jpg (100%) rename {content => src/content/docs}/components/display/images/st7789v-full.jpg (100%) rename {content => src/content/docs}/components/display/images/st7920-full.jpg (100%) rename {content => src/content/docs}/components/display/images/t-display-amoled.jpg (100%) rename {content => src/content/docs}/components/display/images/tab5-version-label.jpg (100%) rename {content => src/content/docs}/components/display/images/test_card.jpg (100%) rename {content => src/content/docs}/components/display/images/tm1621-full.jpg (100%) rename {content => src/content/docs}/components/display/images/tm1637-full.jpg (100%) rename {content => src/content/docs}/components/display/images/tm1637_2devices.png (100%) rename {content => src/content/docs}/components/display/images/tm1637_3plus_devices.png (100%) rename {content => src/content/docs}/components/display/images/tm1637_key_connections.png (100%) rename {content => src/content/docs}/components/display/images/tm1638-full.jpg (100%) rename {content => src/content/docs}/components/display/images/waveshare_epaper-full.jpg (100%) rename {content => src/content/docs}/components/display/images/waveshare_epaper-pins.jpg (100%) rename {content => src/content/docs}/components/display/images/waveshare_epaper_7color_acep-full.jpg (100%) rename content/components/display/_index.md => src/content/docs/components/display/index.mdx (90%) rename content/components/display/inkplate.md => src/content/docs/components/display/inkplate.mdx (97%) rename content/components/display/lcd_display.md => src/content/docs/components/display/lcd_display.mdx (91%) create mode 100644 src/content/docs/components/display/max7219.mdx rename content/components/display/max7219digit.md => src/content/docs/components/display/max7219digit.mdx (93%) rename content/components/display/mipi_dsi.md => src/content/docs/components/display/mipi_dsi.mdx (76%) rename content/components/display/mipi_rgb.md => src/content/docs/components/display/mipi_rgb.mdx (82%) rename content/components/display/mipi_spi.md => src/content/docs/components/display/mipi_spi.mdx (75%) rename content/components/display/nextion.md => src/content/docs/components/display/nextion.mdx (91%) rename content/components/display/pcd8544.md => src/content/docs/components/display/pcd8544.mdx (80%) rename content/components/display/pvvx_mithermometer.md => src/content/docs/components/display/pvvx_mithermometer.mdx (92%) rename content/components/display/qspi_dbi.md => src/content/docs/components/display/qspi_dbi.mdx (90%) rename content/components/display/rpi_dpi_rgb.md => src/content/docs/components/display/rpi_dpi_rgb.mdx (93%) rename content/components/display/sdl.md => src/content/docs/components/display/sdl.mdx (90%) rename content/components/display/ssd1306.md => src/content/docs/components/display/ssd1306.mdx (93%) rename content/components/display/ssd1322.md => src/content/docs/components/display/ssd1322.mdx (82%) rename content/components/display/ssd1325.md => src/content/docs/components/display/ssd1325.mdx (90%) rename content/components/display/ssd1327.md => src/content/docs/components/display/ssd1327.mdx (92%) rename content/components/display/ssd1331.md => src/content/docs/components/display/ssd1331.mdx (85%) rename content/components/display/ssd1351.md => src/content/docs/components/display/ssd1351.mdx (87%) rename content/components/display/st7567.md => src/content/docs/components/display/st7567.mdx (93%) rename content/components/display/st7701s.md => src/content/docs/components/display/st7701s.mdx (94%) rename content/components/display/st7735.md => src/content/docs/components/display/st7735.mdx (86%) rename content/components/display/st7789v.md => src/content/docs/components/display/st7789v.mdx (95%) rename content/components/display/st7920.md => src/content/docs/components/display/st7920.mdx (83%) rename content/components/display/tm1621.md => src/content/docs/components/display/tm1621.mdx (88%) rename content/components/display/tm1637.md => src/content/docs/components/display/tm1637.mdx (86%) rename content/components/display/tm1638.md => src/content/docs/components/display/tm1638.mdx (87%) rename content/components/display/waveshare_epaper.md => src/content/docs/components/display/waveshare_epaper.mdx (90%) rename content/components/display_menu/graphical_display_menu.md => src/content/docs/components/display_menu/graphical_display_menu.mdx (92%) rename content/components/display_menu/_index.md => src/content/docs/components/display_menu/index.mdx (96%) rename content/components/display_menu/lcd_menu.md => src/content/docs/components/display_menu/lcd_menu.mdx (91%) rename content/components/emc2101.md => src/content/docs/components/emc2101.mdx (81%) rename content/components/esp32.md => src/content/docs/components/esp32.mdx (96%) rename content/components/esp32_ble.md => src/content/docs/components/esp32_ble.mdx (87%) rename content/components/esp32_ble_beacon.md => src/content/docs/components/esp32_ble_beacon.mdx (83%) rename content/components/esp32_ble_server.md => src/content/docs/components/esp32_ble_server.mdx (94%) rename content/components/esp32_ble_tracker.md => src/content/docs/components/esp32_ble_tracker.mdx (88%) rename content/components/esp32_camera.md => src/content/docs/components/esp32_camera.mdx (95%) rename content/components/esp32_camera_web_server.md => src/content/docs/components/esp32_camera_web_server.mdx (80%) rename content/components/esp32_hosted.md => src/content/docs/components/esp32_hosted.mdx (86%) rename content/components/esp32_improv.md => src/content/docs/components/esp32_improv.mdx (84%) rename content/components/esp8266.md => src/content/docs/components/esp8266.mdx (94%) rename content/components/esp_ldo.md => src/content/docs/components/esp_ldo.mdx (89%) rename content/components/esphome.md => src/content/docs/components/esphome.mdx (93%) rename content/components/espnow.md => src/content/docs/components/espnow.mdx (90%) rename content/components/ethernet.md => src/content/docs/components/ethernet.mdx (96%) rename content/components/event/_index.md => src/content/docs/components/event/index.mdx (90%) rename content/components/event/template.md => src/content/docs/components/event/template.mdx (80%) rename content/components/event/uart.md => src/content/docs/components/event/uart.mdx (84%) rename content/components/exposure_notifications.md => src/content/docs/components/exposure_notifications.mdx (79%) rename content/components/external_components.md => src/content/docs/components/external_components.mdx (96%) rename content/components/ezo_pmp.md => src/content/docs/components/ezo_pmp.mdx (91%) rename content/components/factory_reset.md => src/content/docs/components/factory_reset.mdx (80%) rename content/components/fan/binary.md => src/content/docs/components/fan/binary.mdx (54%) rename content/components/fan/hbridge.md => src/content/docs/components/fan/hbridge.mdx (64%) rename {content => src/content/docs}/components/fan/images/L298N_module.jpg (100%) rename {content => src/content/docs}/components/fan/images/fan-ui.png (100%) rename {content => src/content/docs}/components/fan/images/tuyafan.jpg (100%) rename content/components/fan/_index.md => src/content/docs/components/fan/index.mdx (92%) rename content/components/fan/speed.md => src/content/docs/components/fan/speed.mdx (57%) rename content/components/fan/template.md => src/content/docs/components/fan/template.mdx (76%) rename content/components/fan/tuya.md => src/content/docs/components/fan/tuya.mdx (74%) rename content/components/fingerprint_grow.md => src/content/docs/components/fingerprint_grow.mdx (91%) rename content/components/font.md => src/content/docs/components/font.mdx (95%) rename content/components/globals.md => src/content/docs/components/globals.mdx (95%) rename content/components/gps.md => src/content/docs/components/gps.mdx (82%) rename content/components/graph.md => src/content/docs/components/graph.mdx (96%) rename content/components/grove_tb6612fng.md => src/content/docs/components/grove_tb6612fng.mdx (90%) rename content/components/hlk_fm22x.md => src/content/docs/components/hlk_fm22x.mdx (71%) rename content/components/host.md => src/content/docs/components/host.mdx (87%) rename content/components/http_request.md => src/content/docs/components/http_request.mdx (95%) rename content/components/i2c.md => src/content/docs/components/i2c.mdx (90%) rename content/components/i2c_device.md => src/content/docs/components/i2c_device.mdx (79%) rename content/components/i2s_audio.md => src/content/docs/components/i2s_audio.mdx (82%) rename content/components/image.md => src/content/docs/components/image.mdx (94%) rename {content => src/content/docs}/components/images/DFR0627.jpg (100%) rename {content => src/content/docs}/components/images/debug.png (100%) rename {content => src/content/docs}/components/images/demo-ui.png (100%) rename {content => src/content/docs}/components/images/dfplayer-full.jpg (100%) rename {content => src/content/docs}/components/images/dfrobot_sen0395-full.jpg (100%) rename {content => src/content/docs}/components/images/display_rendering_graph.png (100%) create mode 100644 src/content/docs/components/images/display_time_temp_oled_2.jpg rename {content => src/content/docs}/components/images/emc2101-full.png (100%) rename {content => src/content/docs}/components/images/esp32_ble_beacon-ibeacon.png (100%) rename {content => src/content/docs}/components/images/fingeprint_grow-sleep_mode_wiring.jpg (100%) rename {content => src/content/docs}/components/images/fontmetrics.png (100%) create mode 100644 src/content/docs/components/images/garage-variant.svg rename {content => src/content/docs}/components/images/gps-full.jpg (100%) create mode 100644 src/content/docs/components/images/head-lightbulb-outline.svg rename {content => src/content/docs}/components/images/hlk-fm223.jpg (100%) rename {content => src/content/docs}/components/images/hlk-fm225.jpg (100%) create mode 100644 src/content/docs/components/images/ili9341.svg create mode 100644 src/content/docs/components/images/ili9342.svg create mode 100644 src/content/docs/components/images/ili9481.svg create mode 100644 src/content/docs/components/images/image-multiple-outline.svg create mode 100644 src/content/docs/components/images/json.svg rename {content => src/content/docs}/components/images/key_collector.svg (100%) rename content/cookbook/images/leak-detector-m5stickC_dry.jpg => src/content/docs/components/images/leak-detector-m5stickC_main_index.jpg (100%) rename {content => src/content/docs}/components/images/lightwaverf.jpg (100%) rename {content => src/content/docs}/components/images/ltr559.jpg (100%) create mode 100644 src/content/docs/components/images/mcp23sxx.svg create mode 100644 src/content/docs/components/images/mcp2515.svg rename {content => src/content/docs}/components/images/micronova_optocouplers.png (100%) rename {content => src/content/docs}/components/images/micronova_serial.png (100%) rename {content => src/content/docs}/components/images/micronova_serial_layout.png (100%) rename {content => src/content/docs}/components/images/mqtt-availability.png (100%) rename {content => src/content/docs}/components/images/number-slider-popup-input-field.png (100%) rename {content => src/content/docs}/components/images/number-slider-popup.png (100%) rename {content => src/content/docs}/components/images/opentherm-shield.png (100%) rename {content => src/content/docs}/components/images/pcf8574-full.jpg (100%) rename {content => src/content/docs}/components/images/pn7150-full.jpg (100%) rename {content => src/content/docs}/components/images/pn716x-full.jpg (100%) rename {content => src/content/docs}/components/images/power_supply-atx.jpg (100%) rename {content => src/content/docs}/components/images/r307-full.jpg (100%) rename {content => src/content/docs}/components/images/r503-full.jpg (100%) rename {content => src/content/docs}/components/images/resol_vbus_adapter_schematic.png (100%) rename {content => src/content/docs}/components/images/rf_bridge-full.jpg (100%) rename {content => src/content/docs}/components/images/rj45_pinout.jpg (100%) rename {content => src/content/docs}/components/images/seeed-mr24hpc1-card.png (100%) rename {content => src/content/docs}/components/images/seeed-mr24hpc1-mmwave-kit.png (100%) rename {content => src/content/docs}/components/images/sensor-history-graph.png (100%) rename {content => src/content/docs}/components/images/sim800l-full.jpg (100%) rename {content => src/content/docs}/components/images/sml-log.png (100%) rename {content => src/content/docs}/components/images/sn74hc595-full.jpg (100%) rename {content => src/content/docs}/components/images/sprinkler-ui.jpg (100%) rename {content => src/content/docs}/components/images/sprinkler.png (100%) create mode 100644 src/content/docs/components/images/st7796.svg rename {content => src/content/docs}/components/images/sun-sensor-ui.png (100%) rename {content => src/content/docs}/components/images/sun-text_sensor-ui.png (100%) rename {content => src/content/docs}/components/images/sun_gtil2_controller_board.png (100%) rename {content => src/content/docs}/components/images/sun_gtil2_display_board.png (100%) rename {content => src/content/docs}/components/images/sun_gtil2_schematic.png (100%) rename {content => src/content/docs}/components/images/sx126x-full.png (100%) rename {content => src/content/docs}/components/images/sx127x-full.png (100%) rename {content => src/content/docs}/components/images/sx1509-full.jpg (100%) rename {content => src/content/docs}/components/images/sx1509-keypad.jpg (100%) rename {content => src/content/docs}/components/images/tab-header-expand-cloapsed.png (100%) rename {content => src/content/docs}/components/images/tab-header-expand-controls-expanded.png (100%) rename {content => src/content/docs}/components/images/tab-header-expand-logs-expanded.png (100%) rename {content => src/content/docs}/components/images/tm1651-battery-display.jpg (100%) rename {content => src/content/docs}/components/images/vbus_serial_optocoupler.png (100%) rename {content => src/content/docs}/components/images/web_server-v2.png (100%) rename {content => src/content/docs}/components/images/web_server-v3.png (100%) rename {content => src/content/docs}/components/images/web_server.png (100%) rename {content => src/content/docs}/components/images/xiaomi_miscale1&2.jpg (100%) rename content/components/improv_serial.md => src/content/docs/components/improv_serial.mdx (82%) create mode 100644 src/content/docs/components/index.mdx rename content/components/infrared/_index.md => src/content/docs/components/infrared/index.mdx (92%) rename content/components/interval.md => src/content/docs/components/interval.mdx (90%) rename content/components/ir_rf_proxy.md => src/content/docs/components/ir_rf_proxy.mdx (96%) rename content/components/json.md => src/content/docs/components/json.mdx (93%) rename content/components/key_collector.md => src/content/docs/components/key_collector.mdx (94%) rename content/components/libretiny.md => src/content/docs/components/libretiny.mdx (88%) rename content/components/light/beken_spi_led_strip.md => src/content/docs/components/light/beken_spi_led_strip.mdx (81%) create mode 100644 src/content/docs/components/light/binary.mdx rename content/components/light/color_temperature.md => src/content/docs/components/light/color_temperature.mdx (55%) rename content/components/light/cwww.md => src/content/docs/components/light/cwww.mdx (70%) rename content/components/light/esp32_rmt_led_strip.md => src/content/docs/components/light/esp32_rmt_led_strip.mdx (91%) rename content/components/light/fastled.md => src/content/docs/components/light/fastled.mdx (78%) rename content/components/light/hbridge.md => src/content/docs/components/light/hbridge.mdx (74%) rename {content => src/content/docs}/components/light/images/binary-ui.png (100%) rename {content => src/content/docs}/components/light/images/fastled_clockless-ui.png (100%) rename {content => src/content/docs}/components/light/images/fastled_spi-ui.png (100%) rename {content => src/content/docs}/components/light/images/hbridge-ui.png (100%) rename {content => src/content/docs}/components/light/images/kitchen-lights.png (100%) rename {content => src/content/docs}/components/light/images/monochromatic-detail.jpg (100%) rename {content => src/content/docs}/components/light/images/monochromatic-strip.jpg (100%) rename {content => src/content/docs}/components/light/images/rgb-detail.jpg (100%) rename {content => src/content/docs}/components/light/images/rgb-strip.jpg (100%) rename {content => src/content/docs}/components/light/images/rgb-ui.png (100%) rename {content => src/content/docs}/components/light/images/sonoff_d1_gpio0.jpg (100%) rename {content => src/content/docs}/components/light/images/sonoff_d1_serial.jpg (100%) rename content/components/light/_index.md => src/content/docs/components/light/index.mdx (96%) rename content/components/light/lvgl.md => src/content/docs/components/light/lvgl.mdx (60%) create mode 100644 src/content/docs/components/light/monochromatic.mdx rename content/components/light/neopixelbus.md => src/content/docs/components/light/neopixelbus.mdx (91%) rename content/components/light/partition.md => src/content/docs/components/light/partition.mdx (88%) rename content/components/light/rgb.md => src/content/docs/components/light/rgb.mdx (52%) rename content/components/light/rgbct.md => src/content/docs/components/light/rgbct.mdx (62%) rename content/components/light/rgbw.md => src/content/docs/components/light/rgbw.mdx (67%) rename content/components/light/rgbww.md => src/content/docs/components/light/rgbww.mdx (79%) rename content/components/light/rp2040_pio_led_strip.md => src/content/docs/components/light/rp2040_pio_led_strip.mdx (88%) rename content/components/light/shelly_dimmer.md => src/content/docs/components/light/shelly_dimmer.mdx (90%) rename content/components/light/sonoff_d1.md => src/content/docs/components/light/sonoff_d1.mdx (75%) rename content/components/light/spi_led_strip.md => src/content/docs/components/light/spi_led_strip.mdx (69%) rename content/components/light/status_led.md => src/content/docs/components/light/status_led.mdx (68%) rename content/components/light/tuya.md => src/content/docs/components/light/tuya.mdx (91%) rename content/components/lightwaverf.md => src/content/docs/components/lightwaverf.mdx (89%) rename content/components/lock/_index.md => src/content/docs/components/lock/index.mdx (87%) rename content/components/lock/output.md => src/content/docs/components/lock/output.mdx (64%) rename content/components/lock/template.md => src/content/docs/components/lock/template.mdx (89%) rename content/components/logger.md => src/content/docs/components/logger.mdx (94%) rename {content => src/content/docs}/components/lvgl/images/canvas.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_align.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_animimg.gif (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_arc.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_bar.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_baseobj.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_boxmodel.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_button.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_buttonmatrix.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_checkbox.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_dropdown.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_grid_layout.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_image.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_keyboard.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_label.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_led.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_line.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_main_screenshot.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_meter.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_msgbox.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_roller.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_slider.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_spinbox.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_spinner.gif (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_symbols.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_tabview.png (100%) rename {content => src/content/docs}/components/lvgl/images/lvgl_textarea.png (100%) rename content/components/lvgl/_index.md => src/content/docs/components/lvgl/index.mdx (88%) rename content/components/lvgl/layouts.md => src/content/docs/components/lvgl/layouts.mdx (98%) rename content/components/lvgl/widgets.md => src/content/docs/components/lvgl/widgets.mdx (94%) rename content/components/mapping.md => src/content/docs/components/mapping.mdx (93%) rename content/components/matrix_keypad.md => src/content/docs/components/matrix_keypad.mdx (90%) rename content/components/max6956.md => src/content/docs/components/max6956.mdx (90%) rename content/components/mcp230xx.md => src/content/docs/components/mcp230xx.mdx (91%) rename content/components/mcp23Sxx.md => src/content/docs/components/mcp23Sxx.mdx (90%) rename content/components/mdns.md => src/content/docs/components/mdns.mdx (87%) rename content/components/media_player/i2s_audio.md => src/content/docs/components/media_player/i2s_audio.mdx (87%) rename content/components/media_player/_index.md => src/content/docs/components/media_player/index.mdx (84%) rename content/components/media_player/speaker.md => src/content/docs/components/media_player/speaker.mdx (85%) rename content/components/micro_wake_word.md => src/content/docs/components/micro_wake_word.mdx (94%) rename content/components/micronova.md => src/content/docs/components/micronova.mdx (93%) rename content/components/microphone/i2s_audio.md => src/content/docs/components/microphone/i2s_audio.mdx (95%) rename content/components/microphone/_index.md => src/content/docs/components/microphone/index.mdx (82%) rename content/components/modbus.md => src/content/docs/components/modbus.mdx (79%) rename content/components/modbus_controller.md => src/content/docs/components/modbus_controller.mdx (95%) rename content/components/mqtt.md => src/content/docs/components/mqtt.mdx (96%) rename content/components/network.md => src/content/docs/components/network.mdx (92%) rename content/components/nrf52.md => src/content/docs/components/nrf52.mdx (97%) rename content/components/number/homeassistant.md => src/content/docs/components/number/homeassistant.mdx (84%) rename content/components/number/_index.md => src/content/docs/components/number/index.mdx (89%) rename content/components/number/lvgl.md => src/content/docs/components/number/lvgl.mdx (76%) rename content/components/number/modbus_controller.md => src/content/docs/components/number/modbus_controller.mdx (87%) rename content/components/number/template.md => src/content/docs/components/number/template.mdx (91%) rename content/components/number/tuya.md => src/content/docs/components/number/tuya.mdx (90%) rename content/components/one_wire/ds2484.md => src/content/docs/components/one_wire/ds2484.mdx (75%) rename content/components/one_wire/gpio.md => src/content/docs/components/one_wire/gpio.mdx (77%) rename {content => src/content/docs}/components/one_wire/images/dallas-log.png (100%) rename content/components/one_wire/_index.md => src/content/docs/components/one_wire/index.mdx (80%) rename content/components/online_image.md => src/content/docs/components/online_image.mdx (91%) rename content/components/opentherm.md => src/content/docs/components/opentherm.mdx (93%) rename content/components/openthread.md => src/content/docs/components/openthread.mdx (86%) rename content/components/ota/esphome.md => src/content/docs/components/ota/esphome.mdx (85%) rename content/components/ota/http_request.md => src/content/docs/components/ota/http_request.mdx (87%) rename content/components/ota/_index.md => src/content/docs/components/ota/index.mdx (90%) rename content/components/ota/web_server.md => src/content/docs/components/ota/web_server.mdx (82%) rename content/components/output/ac_dimmer.md => src/content/docs/components/output/ac_dimmer.mdx (83%) rename content/components/output/ble_client.md => src/content/docs/components/output/ble_client.mdx (79%) rename content/components/output/bp1658cj.md => src/content/docs/components/output/bp1658cj.mdx (88%) rename content/components/output/bp5758d.md => src/content/docs/components/output/bp5758d.mdx (84%) rename content/components/output/dac7678.md => src/content/docs/components/output/dac7678.mdx (93%) rename content/components/output/esp32_dac.md => src/content/docs/components/output/esp32_dac.mdx (75%) rename content/components/output/esp8266_pwm.md => src/content/docs/components/output/esp8266_pwm.mdx (78%) rename content/components/output/gp8403.md => src/content/docs/components/output/gp8403.mdx (84%) rename content/components/output/gpio.md => src/content/docs/components/output/gpio.mdx (59%) rename {content => src/content/docs}/components/output/images/pca9685-full.jpg (100%) rename {content => src/content/docs}/components/output/images/robotdyn_dimmer.jpg (100%) rename {content => src/content/docs}/components/output/images/sigma-delta-example.png (100%) rename {content => src/content/docs}/components/output/images/tlc59208f-full.jpg (100%) rename content/components/output/_index.md => src/content/docs/components/output/index.mdx (67%) rename content/components/output/ledc.md => src/content/docs/components/output/ledc.mdx (89%) rename content/components/output/libretiny_pwm.md => src/content/docs/components/output/libretiny_pwm.mdx (78%) rename content/components/output/mcp4461.md => src/content/docs/components/output/mcp4461.mdx (92%) rename content/components/output/mcp4725.md => src/content/docs/components/output/mcp4725.mdx (87%) rename content/components/output/mcp4728.md => src/content/docs/components/output/mcp4728.mdx (91%) rename content/components/output/mcp47a1.md => src/content/docs/components/output/mcp47a1.mdx (79%) rename content/components/output/modbus_controller.md => src/content/docs/components/output/modbus_controller.mdx (86%) rename content/components/output/my9231.md => src/content/docs/components/output/my9231.mdx (90%) rename content/components/output/pca9685.md => src/content/docs/components/output/pca9685.mdx (84%) rename content/components/output/sigma_delta_output.md => src/content/docs/components/output/sigma_delta_output.mdx (73%) rename content/components/output/slow_pwm.md => src/content/docs/components/output/slow_pwm.mdx (79%) rename content/components/output/sm16716.md => src/content/docs/components/output/sm16716.mdx (91%) rename content/components/output/sm2135.md => src/content/docs/components/output/sm2135.mdx (86%) rename content/components/output/sm2235.md => src/content/docs/components/output/sm2235.mdx (85%) rename content/components/output/sm2335.md => src/content/docs/components/output/sm2335.mdx (87%) rename content/components/output/template.md => src/content/docs/components/output/template.mdx (84%) rename content/components/output/tlc59208f.md => src/content/docs/components/output/tlc59208f.mdx (76%) rename content/components/output/tlc5947.md => src/content/docs/components/output/tlc5947.mdx (80%) rename content/components/output/tlc5971.md => src/content/docs/components/output/tlc5971.mdx (78%) rename content/components/output/x9c.md => src/content/docs/components/output/x9c.mdx (81%) rename content/components/packages.md => src/content/docs/components/packages.mdx (95%) rename content/components/packet_transport/espnow.md => src/content/docs/components/packet_transport/espnow.mdx (89%) rename content/components/packet_transport/_index.md => src/content/docs/components/packet_transport/index.mdx (94%) create mode 100644 src/content/docs/components/packet_transport/sx126x.mdx create mode 100644 src/content/docs/components/packet_transport/sx127x.mdx create mode 100644 src/content/docs/components/packet_transport/uart.mdx create mode 100644 src/content/docs/components/packet_transport/udp.mdx rename content/components/pca6416a.md => src/content/docs/components/pca6416a.mdx (90%) rename content/components/pca9554.md => src/content/docs/components/pca9554.mdx (88%) rename content/components/pcf8574.md => src/content/docs/components/pcf8574.mdx (82%) rename content/components/pi4ioe5v6408.md => src/content/docs/components/pi4ioe5v6408.mdx (92%) rename content/components/pipsolar.md => src/content/docs/components/pipsolar.mdx (97%) rename content/components/pn7150.md => src/content/docs/components/pn7150.mdx (87%) rename content/components/pn7160.md => src/content/docs/components/pn7160.mdx (89%) rename content/components/power_supply.md => src/content/docs/components/power_supply.mdx (87%) rename content/components/prometheus.md => src/content/docs/components/prometheus.mdx (96%) rename content/components/psram.md => src/content/docs/components/psram.mdx (95%) rename content/components/pylontech.md => src/content/docs/components/pylontech.mdx (92%) rename content/components/qr_code.md => src/content/docs/components/qr_code.mdx (92%) rename content/components/remote_receiver.md => src/content/docs/components/remote_receiver.mdx (88%) rename content/components/remote_transmitter.md => src/content/docs/components/remote_transmitter.mdx (94%) rename content/components/rf_bridge.md => src/content/docs/components/rf_bridge.mdx (92%) rename content/components/rp2040.md => src/content/docs/components/rp2040.mdx (92%) rename content/components/rtttl.md => src/content/docs/components/rtttl.mdx (95%) rename content/components/runtime_stats.md => src/content/docs/components/runtime_stats.mdx (93%) rename content/components/safe_mode.md => src/content/docs/components/safe_mode.mdx (72%) rename content/components/script.md => src/content/docs/components/script.mdx (94%) rename content/components/seeed_mr24hpc1.md => src/content/docs/components/seeed_mr24hpc1.mdx (94%) rename content/components/seeed_mr60bha2.md => src/content/docs/components/seeed_mr60bha2.mdx (84%) rename content/components/seeed_mr60fda2.md => src/content/docs/components/seeed_mr60fda2.mdx (88%) rename content/components/select/_index.md => src/content/docs/components/select/index.mdx (93%) rename content/components/select/logger.md => src/content/docs/components/select/logger.mdx (77%) rename content/components/select/lvgl.md => src/content/docs/components/select/lvgl.mdx (68%) rename content/components/select/modbus_controller.md => src/content/docs/components/select/modbus_controller.mdx (86%) rename content/components/select/template.md => src/content/docs/components/select/template.mdx (91%) rename content/components/select/tuya.md => src/content/docs/components/select/tuya.mdx (89%) rename content/components/sensor/a01nyub.md => src/content/docs/components/sensor/a01nyub.mdx (76%) rename content/components/sensor/a02yyuw.md => src/content/docs/components/sensor/a02yyuw.mdx (78%) rename content/components/sensor/absolute_humidity.md => src/content/docs/components/sensor/absolute_humidity.mdx (91%) rename content/components/sensor/adc.md => src/content/docs/components/sensor/adc.mdx (94%) rename content/components/sensor/adc128s102.md => src/content/docs/components/sensor/adc128s102.mdx (85%) rename content/components/sensor/ade7880.md => src/content/docs/components/sensor/ade7880.mdx (98%) rename content/components/sensor/ade7953.md => src/content/docs/components/sensor/ade7953.mdx (97%) rename content/components/sensor/ads1115.md => src/content/docs/components/sensor/ads1115.mdx (86%) rename content/components/sensor/ads1118.md => src/content/docs/components/sensor/ads1118.mdx (85%) rename content/components/sensor/ags10.md => src/content/docs/components/sensor/ags10.mdx (87%) rename content/components/sensor/aht10.md => src/content/docs/components/sensor/aht10.mdx (75%) rename content/components/sensor/airthings_ble.md => src/content/docs/components/sensor/airthings_ble.mdx (91%) rename content/components/sensor/alpha3.md => src/content/docs/components/sensor/alpha3.mdx (89%) rename content/components/sensor/am2315c.md => src/content/docs/components/sensor/am2315c.mdx (52%) rename content/components/sensor/am2320.md => src/content/docs/components/sensor/am2320.mdx (57%) rename content/components/sensor/am43.md => src/content/docs/components/sensor/am43.mdx (77%) rename content/components/sensor/apds9306.md => src/content/docs/components/sensor/apds9306.mdx (77%) rename content/components/sensor/apds9960.md => src/content/docs/components/sensor/apds9960.mdx (82%) rename content/components/sensor/aqi.md => src/content/docs/components/sensor/aqi.mdx (77%) rename content/components/sensor/as3935.md => src/content/docs/components/sensor/as3935.mdx (96%) rename content/components/sensor/as5600.md => src/content/docs/components/sensor/as5600.mdx (90%) rename content/components/sensor/as7341.md => src/content/docs/components/sensor/as7341.mdx (87%) rename content/components/sensor/atm90e26.md => src/content/docs/components/sensor/atm90e26.mdx (98%) rename content/components/sensor/atm90e32.md => src/content/docs/components/sensor/atm90e32.mdx (97%) rename content/components/sensor/b_parasite.md => src/content/docs/components/sensor/b_parasite.mdx (85%) rename content/components/sensor/bh1750.md => src/content/docs/components/sensor/bh1750.mdx (64%) rename content/components/sensor/bh1900nux.md => src/content/docs/components/sensor/bh1900nux.mdx (83%) rename content/components/sensor/binary_sensor_map.md => src/content/docs/components/sensor/binary_sensor_map.mdx (85%) rename content/components/sensor/bl0906.md => src/content/docs/components/sensor/bl0906.mdx (89%) rename content/components/sensor/bl0939.md => src/content/docs/components/sensor/bl0939.mdx (92%) rename content/components/sensor/bl0940.md => src/content/docs/components/sensor/bl0940.mdx (98%) rename content/components/sensor/bl0942.md => src/content/docs/components/sensor/bl0942.mdx (97%) rename content/components/sensor/ble_client.md => src/content/docs/components/sensor/ble_client.mdx (85%) rename content/components/sensor/ble_rssi.md => src/content/docs/components/sensor/ble_rssi.mdx (88%) rename content/components/sensor/bme280.md => src/content/docs/components/sensor/bme280.mdx (84%) rename content/components/sensor/bme680.md => src/content/docs/components/sensor/bme680.mdx (86%) rename content/components/sensor/bme680_bsec.md => src/content/docs/components/sensor/bme680_bsec.mdx (94%) rename content/components/sensor/bme68x_bsec2.md => src/content/docs/components/sensor/bme68x_bsec2.mdx (93%) rename content/components/sensor/bmi160.md => src/content/docs/components/sensor/bmi160.mdx (81%) rename content/components/sensor/bmp085.md => src/content/docs/components/sensor/bmp085.mdx (70%) rename content/components/sensor/bmp280.md => src/content/docs/components/sensor/bmp280.mdx (77%) rename content/components/sensor/bmp3xx.md => src/content/docs/components/sensor/bmp3xx.mdx (85%) rename content/components/sensor/bmp581.md => src/content/docs/components/sensor/bmp581.mdx (86%) rename content/components/sensor/ccs811.md => src/content/docs/components/sensor/ccs811.mdx (89%) rename content/components/sensor/cd74hc4067.md => src/content/docs/components/sensor/cd74hc4067.mdx (85%) rename content/components/sensor/cm1106.md => src/content/docs/components/sensor/cm1106.mdx (86%) rename content/components/sensor/combination.md => src/content/docs/components/sensor/combination.mdx (95%) rename content/components/sensor/cs5460a.md => src/content/docs/components/sensor/cs5460a.mdx (95%) rename content/components/sensor/cse7761.md => src/content/docs/components/sensor/cse7761.mdx (92%) rename content/components/sensor/cse7766.md => src/content/docs/components/sensor/cse7766.mdx (94%) rename content/components/sensor/ct_clamp.md => src/content/docs/components/sensor/ct_clamp.mdx (76%) rename content/components/sensor/dallas_temp.md => src/content/docs/components/sensor/dallas_temp.mdx (80%) rename content/components/sensor/daly_bms.md => src/content/docs/components/sensor/daly_bms.mdx (95%) rename content/components/sensor/dht.md => src/content/docs/components/sensor/dht.mdx (79%) rename content/components/sensor/dht12.md => src/content/docs/components/sensor/dht12.mdx (58%) rename content/components/sensor/dlms_meter.md => src/content/docs/components/sensor/dlms_meter.mdx (91%) rename content/components/sensor/dps310.md => src/content/docs/components/sensor/dps310.mdx (66%) rename content/components/sensor/dsmr.md => src/content/docs/components/sensor/dsmr.mdx (98%) rename content/components/sensor/duty_cycle.md => src/content/docs/components/sensor/duty_cycle.mdx (77%) rename content/components/sensor/duty_time.md => src/content/docs/components/sensor/duty_time.mdx (87%) rename content/components/sensor/ee895.md => src/content/docs/components/sensor/ee895.mdx (75%) rename content/components/sensor/ens160.md => src/content/docs/components/sensor/ens160.mdx (88%) rename content/components/sensor/ens210.md => src/content/docs/components/sensor/ens210.mdx (68%) rename content/components/sensor/ezo.md => src/content/docs/components/sensor/ezo.mdx (94%) rename content/components/sensor/filter/calibrate_linear.md => src/content/docs/components/sensor/filter/calibrate_linear.mdx (82%) rename content/components/sensor/filter/calibrate_polynomial.md => src/content/docs/components/sensor/filter/calibrate_polynomial.mdx (80%) rename content/components/sensor/filter/clamp.md => src/content/docs/components/sensor/filter/clamp.mdx (93%) rename content/components/sensor/filter/debounce.md => src/content/docs/components/sensor/filter/debounce.mdx (76%) rename content/components/sensor/filter/delta.md => src/content/docs/components/sensor/filter/delta.mdx (96%) rename content/components/sensor/filter/exponential_moving_average.md => src/content/docs/components/sensor/filter/exponential_moving_average.mdx (86%) rename content/components/sensor/filter/filter_out.md => src/content/docs/components/sensor/filter/filter_out.mdx (80%) rename content/components/sensor/filter/heartbeat.md => src/content/docs/components/sensor/filter/heartbeat.mdx (92%) rename content/components/sensor/filter/lambda.md => src/content/docs/components/sensor/filter/lambda.mdx (86%) rename content/components/sensor/filter/max.md => src/content/docs/components/sensor/filter/max.mdx (90%) rename content/components/sensor/filter/median.md => src/content/docs/components/sensor/filter/median.mdx (93%) rename content/components/sensor/filter/min.md => src/content/docs/components/sensor/filter/min.mdx (92%) create mode 100644 src/content/docs/components/sensor/filter/multiply.mdx rename content/components/sensor/filter/offset.md => src/content/docs/components/sensor/filter/offset.mdx (72%) rename content/components/sensor/filter/or.md => src/content/docs/components/sensor/filter/or.mdx (79%) rename content/components/sensor/filter/quantile.md => src/content/docs/components/sensor/filter/quantile.mdx (93%) rename content/components/sensor/filter/round.md => src/content/docs/components/sensor/filter/round.mdx (64%) rename content/components/sensor/filter/round_to_multiple_of.md => src/content/docs/components/sensor/filter/round_to_multiple_of.mdx (72%) rename content/components/sensor/filter/skip_initial.md => src/content/docs/components/sensor/filter/skip_initial.mdx (76%) rename content/components/sensor/filter/sliding_window_moving_average.md => src/content/docs/components/sensor/filter/sliding_window_moving_average.mdx (83%) rename content/components/sensor/filter/throttle.md => src/content/docs/components/sensor/filter/throttle.mdx (77%) rename content/components/sensor/filter/throttle_average.md => src/content/docs/components/sensor/filter/throttle_average.mdx (90%) rename content/components/sensor/filter/throttle_with_priority.md => src/content/docs/components/sensor/filter/throttle_with_priority.mdx (81%) rename content/components/sensor/filter/timeout.md => src/content/docs/components/sensor/filter/timeout.mdx (90%) rename content/components/sensor/filter/to_ntc_resistance.md => src/content/docs/components/sensor/filter/to_ntc_resistance.mdx (92%) rename content/components/sensor/filter/to_ntc_temperature.md => src/content/docs/components/sensor/filter/to_ntc_temperature.mdx (93%) rename content/components/sensor/fs3000.md => src/content/docs/components/sensor/fs3000.mdx (79%) rename content/components/sensor/gcja5.md => src/content/docs/components/sensor/gcja5.mdx (92%) rename content/components/sensor/gdk101.md => src/content/docs/components/sensor/gdk101.mdx (93%) rename content/components/sensor/gl_r01.md => src/content/docs/components/sensor/gl_r01.mdx (78%) rename content/components/sensor/gp2y1010au0f.md => src/content/docs/components/sensor/gp2y1010au0f.mdx (71%) rename content/components/sensor/grove_gas_mc_v2.md => src/content/docs/components/sensor/grove_gas_mc_v2.mdx (86%) rename content/components/sensor/growatt_solar.md => src/content/docs/components/sensor/growatt_solar.mdx (95%) rename content/components/sensor/haier.md => src/content/docs/components/sensor/haier.mdx (92%) rename content/components/sensor/havells_solar.md => src/content/docs/components/sensor/havells_solar.mdx (96%) rename content/components/sensor/hc8.md => src/content/docs/components/sensor/hc8.mdx (87%) rename content/components/sensor/hdc1080.md => src/content/docs/components/sensor/hdc1080.mdx (67%) create mode 100644 src/content/docs/components/sensor/hdc2010.mdx create mode 100644 src/content/docs/components/sensor/hlw8012.mdx rename content/components/sensor/hlw8032.md => src/content/docs/components/sensor/hlw8032.mdx (90%) rename content/components/sensor/hm3301.md => src/content/docs/components/sensor/hm3301.mdx (92%) rename content/components/sensor/hmc5883l.md => src/content/docs/components/sensor/hmc5883l.mdx (87%) rename content/components/sensor/homeassistant.md => src/content/docs/components/sensor/homeassistant.mdx (79%) rename content/components/sensor/honeywell_hih_i2c.md => src/content/docs/components/sensor/honeywell_hih_i2c.mdx (84%) rename content/components/sensor/honeywellabp.md => src/content/docs/components/sensor/honeywellabp.mdx (86%) rename content/components/sensor/honeywellabp2_i2c.md => src/content/docs/components/sensor/honeywellabp2_i2c.mdx (85%) rename content/components/sensor/hrxl_maxsonar_wr.md => src/content/docs/components/sensor/hrxl_maxsonar_wr.mdx (73%) rename content/components/sensor/hte501.md => src/content/docs/components/sensor/hte501.mdx (70%) rename content/components/sensor/htu21d.md => src/content/docs/components/sensor/htu21d.mdx (66%) rename content/components/sensor/htu31d.md => src/content/docs/components/sensor/htu31d.mdx (54%) rename content/components/sensor/hx711.md => src/content/docs/components/sensor/hx711.mdx (81%) rename content/components/sensor/hydreon_rgxx.md => src/content/docs/components/sensor/hydreon_rgxx.mdx (90%) rename content/components/sensor/hyt271.md => src/content/docs/components/sensor/hyt271.mdx (85%) rename content/components/sensor/iaqcore.md => src/content/docs/components/sensor/iaqcore.mdx (82%) rename {content => src/content/docs}/components/sensor/images/LC709203f_battery_markings.jpg (100%) rename {content => src/content/docs}/components/sensor/images/LC709203f_battery_profiles.jpg (100%) rename {content => src/content/docs}/components/sensor/images/LC709203f_feather_product_image.jpg (100%) rename {content => src/content/docs}/components/sensor/images/LC709203f_product_image.jpg (100%) rename {content => src/content/docs}/components/sensor/images/LC709203f_thermistor_connection.jpg (100%) rename {content => src/content/docs}/components/sensor/images/LC709203f_ui.jpg (100%) rename {content => src/content/docs}/components/sensor/images/a01nyub-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/a02yyuw-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/adc-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ads1115-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ads1115-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ads1118-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/aht10-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/airthings_wave_mini.jpg (100%) rename {content => src/content/docs}/components/sensor/images/airthings_wave_plus.jpg (100%) rename {content => src/content/docs}/components/sensor/images/airthings_wave_radon.jpg (100%) rename {content => src/content/docs}/components/sensor/images/am2315c-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/am2320-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/apds9960-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/as5600-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/as5600-magnet-position.png (100%) rename {content => src/content/docs}/components/sensor/images/as5600-ui-derived.jpg (100%) rename {content => src/content/docs}/components/sensor/images/as5600-ui.jpg (100%) rename {content => src/content/docs}/components/sensor/images/as7341-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/athom-em2.png (100%) rename {content => src/content/docs}/components/sensor/images/athom-em6.png (100%) rename {content => src/content/docs}/components/sensor/images/atm90e32-cs-2chan-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/atm90e32-cs-6chan-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/bh1750-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/bh1750-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/bh1900nux-evk-001.png (100%) rename {content => src/content/docs}/components/sensor/images/bl0940-cal.png (100%) rename {content => src/content/docs}/components/sensor/images/bme280-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/bme680-bsec-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/bme680-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/bme680-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/bmi160-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/bmi160-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/bmp180-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/bmp280-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ccs811-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ct_clamp-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/daly_bms_example.png (100%) rename {content => src/content/docs}/components/sensor/images/daly_bms_pinout.png (100%) rename {content => src/content/docs}/components/sensor/images/dht-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/dht12-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/dps310-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/dsmr-request-pin-circuit-example.png (100%) rename {content => src/content/docs}/components/sensor/images/duty_cycle-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/eco2-tvoc.png (100%) rename {content => src/content/docs}/components/sensor/images/havellsgti5000d.jpg (100%) rename {content => src/content/docs}/components/sensor/images/hc8-full.png (100%) rename {content => src/content/docs}/components/sensor/images/hdc1080-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/hdc2010-full.png (100%) rename {content => src/content/docs}/components/sensor/images/hlw8032.png (100%) rename {content => src/content/docs}/components/sensor/images/hrxl_maxsonar_wr-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/htu21d-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/hx711-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/hydreon_rg9_full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ikea-vindriktning.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ina219-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ina219-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ina226-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ina228-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ina260-full.png (100%) rename {content => src/content/docs}/components/sensor/images/ina3221-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ina3221-pins.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ina3221-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/inkbird_isbth1_mini-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/inkbird_isbth1_mini-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/internal_temperature-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/jsn-sr04t-v3-mode-select-pads.jpg (100%) rename {content => src/content/docs}/components/sensor/images/jst6pin.png (100%) rename {content => src/content/docs}/components/sensor/images/kamstrup_kmp_holder.svg (100%) rename {content => src/content/docs}/components/sensor/images/kamstrup_kmp_sch.svg (100%) rename {content => src/content/docs}/components/sensor/images/ld2410-card.png (100%) rename {content => src/content/docs}/components/sensor/images/ld2412.png (100%) rename {content => src/content/docs}/components/sensor/images/ltr303-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ltr303-spectral.png (100%) rename {content => src/content/docs}/components/sensor/images/ltr303-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ltr390-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ltr501-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ltr501-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/m5stack_8angle.jpg (100%) rename {content => src/content/docs}/components/sensor/images/max31856-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/max31865-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/max6675-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mcp3221.png (100%) rename {content => src/content/docs}/components/sensor/images/mcp9808-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mhz19-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mhz19-pins.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mlx90393-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mlx90393-resolution.svg (100%) rename {content => src/content/docs}/components/sensor/images/mopeka_pro_check_lippert.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mpl3115a2-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mpu6050-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/mpu6050-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/mpu6886-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ms5611-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ms5611-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ms8607-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/msa311-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/msa3xx-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/nau7802.png (100%) rename {content => src/content/docs}/components/sensor/images/opt3001-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/pmsa003i-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/pulse-counter.png (100%) rename {content => src/content/docs}/components/sensor/images/pulse-counter_vs_pulse-meter.png (100%) rename {content => src/content/docs}/components/sensor/images/pzem-ac.png (100%) rename {content => src/content/docs}/components/sensor/images/pzem-dc.png (100%) rename {content => src/content/docs}/components/sensor/images/radon_eye_rd200.jpg (100%) rename {content => src/content/docs}/components/sensor/images/resistance-downstream.png (100%) rename {content => src/content/docs}/components/sensor/images/rotary_encoder-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/ruuvitag-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ruuvitag-ui.jpg (100%) rename {content => src/content/docs}/components/sensor/images/sdm220m-full.png (100%) rename {content => src/content/docs}/components/sensor/images/sds011-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/sen54-web.png (100%) rename {content => src/content/docs}/components/sensor/images/senseair_s8-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/senseair_s8-pins.jpg (100%) rename {content => src/content/docs}/components/sensor/images/sensirion-pm.png (100%) rename {content => src/content/docs}/components/sensor/images/sht4x-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/sm300d2-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/sm300d2-pins.jpg (100%) rename {content => src/content/docs}/components/sensor/images/sm300d2-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/sps30-wiring.png (100%) rename {content => src/content/docs}/components/sensor/images/stts22h.png (100%) rename {content => src/content/docs}/components/sensor/images/t6615-pins.png (100%) rename {content => src/content/docs}/components/sensor/images/t6615.png (100%) rename {content => src/content/docs}/components/sensor/images/tc74-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/tcs34725-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/tcs34725-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/teleinfo-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/teleinfo-historical.jpg (100%) rename {content => src/content/docs}/components/sensor/images/teleinfo-standard.jpg (100%) rename {content => src/content/docs}/components/sensor/images/telink_flasher.jpg (100%) rename {content => src/content/docs}/components/sensor/images/temperature-humidity.png (100%) rename {content => src/content/docs}/components/sensor/images/temperature-pressure.png (100%) rename {content => src/content/docs}/components/sensor/images/temperature.png (100%) rename {content => src/content/docs}/components/sensor/images/thermopro_tp357-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/tmp102-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/tof10120-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/tof10120-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/tsl2561-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/tsl2561-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/tsl2591-ui.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ultrasonic-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/ultrasonic-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/veml7700-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/veml7700-spectral.png (100%) rename {content => src/content/docs}/components/sensor/images/veml7700-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/vl53l0x-full.jpg (100%) rename {content => src/content/docs}/components/sensor/images/vl53l0x-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/vl53l0x.png (100%) rename {content => src/content/docs}/components/sensor/images/wifi_signal-ui.png (100%) rename {content => src/content/docs}/components/sensor/images/wts01-full.png (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_cgd1.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_cgdk2.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_cgpr1.png (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_gcls002.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_hhccpot002.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_jqjcy01ym.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_mhoc303.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_mhoc401.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_mjyd02yla.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_mue4094rt.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_wx08zm.jpg (100%) rename {content => src/content/docs}/components/sensor/images/xiaomi_xmwsdj04mmc.png (100%) rename {content => src/content/docs}/components/sensor/images/zgm053-connection.jpg (100%) rename {content => src/content/docs}/components/sensor/images/zgm053-full.jpg (100%) rename content/components/sensor/ina219.md => src/content/docs/components/sensor/ina219.mdx (81%) rename content/components/sensor/ina226.md => src/content/docs/components/sensor/ina226.mdx (86%) rename content/components/sensor/ina260.md => src/content/docs/components/sensor/ina260.mdx (73%) rename content/components/sensor/ina2xx.md => src/content/docs/components/sensor/ina2xx.mdx (94%) rename content/components/sensor/ina3221.md => src/content/docs/components/sensor/ina3221.mdx (75%) rename content/components/sensor/_index.md => src/content/docs/components/sensor/index.mdx (82%) rename content/components/sensor/inkbird_ibsth1_mini.md => src/content/docs/components/sensor/inkbird_ibsth1_mini.mdx (78%) rename content/components/sensor/integration.md => src/content/docs/components/sensor/integration.mdx (79%) rename content/components/sensor/internal_temperature.md => src/content/docs/components/sensor/internal_temperature.mdx (78%) rename content/components/sensor/jsn_sr04t.md => src/content/docs/components/sensor/jsn_sr04t.mdx (78%) rename content/components/sensor/kamstrup_kmp.md => src/content/docs/components/sensor/kamstrup_kmp.mdx (88%) rename content/components/sensor/kmeteriso.md => src/content/docs/components/sensor/kmeteriso.mdx (75%) rename content/components/sensor/kuntze.md => src/content/docs/components/sensor/kuntze.mdx (86%) rename content/components/sensor/lc709203f.md => src/content/docs/components/sensor/lc709203f.mdx (76%) rename content/components/sensor/ld2410.md => src/content/docs/components/sensor/ld2410.mdx (92%) rename content/components/sensor/ld2412.md => src/content/docs/components/sensor/ld2412.mdx (95%) rename content/components/sensor/ld2420.md => src/content/docs/components/sensor/ld2420.mdx (94%) rename content/components/sensor/ld2450.md => src/content/docs/components/sensor/ld2450.mdx (90%) rename content/components/sensor/lm75b.md => src/content/docs/components/sensor/lm75b.mdx (79%) rename content/components/sensor/lps22.md => src/content/docs/components/sensor/lps22.mdx (87%) rename content/components/sensor/ltr390.md => src/content/docs/components/sensor/ltr390.mdx (87%) rename content/components/sensor/ltr501.md => src/content/docs/components/sensor/ltr501.mdx (94%) rename content/components/sensor/ltr_als_ps.md => src/content/docs/components/sensor/ltr_als_ps.mdx (91%) rename content/components/sensor/lvgl.md => src/content/docs/components/sensor/lvgl.mdx (70%) rename content/components/sensor/m5stack_8angle.md => src/content/docs/components/sensor/m5stack_8angle.mdx (88%) rename content/components/sensor/max17043.md => src/content/docs/components/sensor/max17043.mdx (92%) rename content/components/sensor/max31855.md => src/content/docs/components/sensor/max31855.mdx (76%) rename content/components/sensor/max31856.md => src/content/docs/components/sensor/max31856.mdx (72%) rename content/components/sensor/max31865.md => src/content/docs/components/sensor/max31865.mdx (75%) rename content/components/sensor/max44009.md => src/content/docs/components/sensor/max44009.mdx (92%) rename content/components/sensor/max6675.md => src/content/docs/components/sensor/max6675.mdx (71%) rename content/components/sensor/max9611.md => src/content/docs/components/sensor/max9611.mdx (88%) rename content/components/sensor/mcp3008.md => src/content/docs/components/sensor/mcp3008.mdx (90%) rename content/components/sensor/mcp3204.md => src/content/docs/components/sensor/mcp3204.mdx (92%) rename content/components/sensor/mcp3221.md => src/content/docs/components/sensor/mcp3221.mdx (83%) rename content/components/sensor/mcp9600.md => src/content/docs/components/sensor/mcp9600.mdx (85%) rename content/components/sensor/mcp9808.md => src/content/docs/components/sensor/mcp9808.mdx (58%) rename content/components/sensor/mhz19.md => src/content/docs/components/sensor/mhz19.mdx (86%) rename content/components/sensor/mics_4514.md => src/content/docs/components/sensor/mics_4514.mdx (90%) rename content/components/sensor/mlx90393.md => src/content/docs/components/sensor/mlx90393.mdx (92%) rename content/components/sensor/mlx90614.md => src/content/docs/components/sensor/mlx90614.mdx (83%) rename content/components/sensor/mmc5603.md => src/content/docs/components/sensor/mmc5603.mdx (84%) rename content/components/sensor/mmc5983.md => src/content/docs/components/sensor/mmc5983.mdx (79%) rename content/components/sensor/modbus_controller.md => src/content/docs/components/sensor/modbus_controller.mdx (90%) rename content/components/sensor/mopeka_pro_check.md => src/content/docs/components/sensor/mopeka_pro_check.mdx (86%) rename content/components/sensor/mopeka_std_check.md => src/content/docs/components/sensor/mopeka_std_check.mdx (86%) rename content/components/sensor/mpl3115a2.md => src/content/docs/components/sensor/mpl3115a2.mdx (69%) rename content/components/sensor/mpu6050.md => src/content/docs/components/sensor/mpu6050.mdx (80%) rename content/components/sensor/mpu6886.md => src/content/docs/components/sensor/mpu6886.mdx (88%) rename content/components/sensor/mqtt_subscribe.md => src/content/docs/components/sensor/mqtt_subscribe.mdx (82%) rename content/components/sensor/ms5611.md => src/content/docs/components/sensor/ms5611.mdx (68%) rename content/components/sensor/ms8607.md => src/content/docs/components/sensor/ms8607.mdx (86%) rename content/components/sensor/msa3xx.md => src/content/docs/components/sensor/msa3xx.mdx (91%) rename content/components/sensor/nau7802.md => src/content/docs/components/sensor/nau7802.mdx (89%) rename content/components/sensor/nextion.md => src/content/docs/components/sensor/nextion.mdx (90%) rename content/components/sensor/npi19.md => src/content/docs/components/sensor/npi19.mdx (92%) rename content/components/sensor/ntc.md => src/content/docs/components/sensor/ntc.mdx (92%) rename content/components/sensor/opt3001.md => src/content/docs/components/sensor/opt3001.mdx (70%) rename content/components/sensor/packet_transport.md => src/content/docs/components/sensor/packet_transport.mdx (87%) rename content/components/sensor/pm1006.md => src/content/docs/components/sensor/pm1006.mdx (79%) rename content/components/sensor/pm2005.md => src/content/docs/components/sensor/pm2005.mdx (76%) rename content/components/sensor/pmsa003i.md => src/content/docs/components/sensor/pmsa003i.mdx (86%) rename content/components/sensor/pmsx003.md => src/content/docs/components/sensor/pmsx003.mdx (97%) rename content/components/sensor/pmwcs3.md => src/content/docs/components/sensor/pmwcs3.mdx (86%) rename content/components/sensor/pulse_counter.md => src/content/docs/components/sensor/pulse_counter.mdx (90%) rename content/components/sensor/pulse_meter.md => src/content/docs/components/sensor/pulse_meter.mdx (88%) rename content/components/sensor/pulse_width.md => src/content/docs/components/sensor/pulse_width.mdx (86%) rename content/components/sensor/pzem004t.md => src/content/docs/components/sensor/pzem004t.mdx (90%) rename content/components/sensor/pzemac.md => src/content/docs/components/sensor/pzemac.mdx (88%) rename content/components/sensor/pzemdc.md => src/content/docs/components/sensor/pzemdc.mdx (81%) rename content/components/sensor/qmc5883l.md => src/content/docs/components/sensor/qmc5883l.mdx (90%) rename content/components/sensor/qmp6988.md => src/content/docs/components/sensor/qmp6988.mdx (85%) rename content/components/sensor/radon_eye_ble.md => src/content/docs/components/sensor/radon_eye_ble.mdx (92%) rename content/components/sensor/rd03d.md => src/content/docs/components/sensor/rd03d.mdx (94%) rename content/components/sensor/resistance.md => src/content/docs/components/sensor/resistance.mdx (72%) rename content/components/sensor/rotary_encoder.md => src/content/docs/components/sensor/rotary_encoder.mdx (85%) rename content/components/sensor/ruuvitag.md => src/content/docs/components/sensor/ruuvitag.mdx (84%) rename content/components/sensor/scd30.md => src/content/docs/components/sensor/scd30.mdx (83%) rename content/components/sensor/scd4x.md => src/content/docs/components/sensor/scd4x.mdx (93%) rename content/components/sensor/sdm_meter.md => src/content/docs/components/sensor/sdm_meter.mdx (93%) rename content/components/sensor/sdp3x.md => src/content/docs/components/sensor/sdp3x.mdx (75%) rename content/components/sensor/sds011.md => src/content/docs/components/sensor/sds011.mdx (85%) rename content/components/sensor/selec_meter.md => src/content/docs/components/sensor/selec_meter.mdx (95%) rename content/components/sensor/sen0321.md => src/content/docs/components/sensor/sen0321.mdx (79%) rename content/components/sensor/sen21231.md => src/content/docs/components/sensor/sen21231.mdx (57%) rename content/components/sensor/sen5x.md => src/content/docs/components/sensor/sen5x.mdx (91%) rename content/components/sensor/senseair.md => src/content/docs/components/sensor/senseair.mdx (79%) rename content/components/sensor/sfa30.md => src/content/docs/components/sensor/sfa30.mdx (83%) rename content/components/sensor/sgp30.md => src/content/docs/components/sensor/sgp30.mdx (88%) rename content/components/sensor/sgp4x.md => src/content/docs/components/sensor/sgp4x.mdx (89%) rename content/components/sensor/sht3xd.md => src/content/docs/components/sensor/sht3xd.mdx (81%) rename content/components/sensor/sht4x.md => src/content/docs/components/sensor/sht4x.mdx (83%) rename content/components/sensor/shtcx.md => src/content/docs/components/sensor/shtcx.mdx (67%) rename content/components/sensor/sm300d2.md => src/content/docs/components/sensor/sm300d2.mdx (84%) rename content/components/sensor/smt100.md => src/content/docs/components/sensor/smt100.mdx (88%) rename content/components/sensor/sound_level.md => src/content/docs/components/sensor/sound_level.mdx (76%) rename content/components/sensor/sps30.md => src/content/docs/components/sensor/sps30.mdx (90%) rename content/components/sensor/sts3x.md => src/content/docs/components/sensor/sts3x.mdx (63%) rename content/components/sensor/stts22h.md => src/content/docs/components/sensor/stts22h.mdx (84%) rename content/components/sensor/sy6970.md => src/content/docs/components/sensor/sy6970.mdx (97%) rename content/components/sensor/t6615.md => src/content/docs/components/sensor/t6615.mdx (77%) rename content/components/sensor/tc74.md => src/content/docs/components/sensor/tc74.mdx (59%) rename content/components/sensor/tcs34725.md => src/content/docs/components/sensor/tcs34725.mdx (90%) rename content/components/sensor/tee501.md => src/content/docs/components/sensor/tee501.mdx (67%) rename content/components/sensor/teleinfo.md => src/content/docs/components/sensor/teleinfo.mdx (79%) rename content/components/sensor/tem3200.md => src/content/docs/components/sensor/tem3200.mdx (92%) rename content/components/sensor/template.md => src/content/docs/components/sensor/template.mdx (92%) rename content/components/sensor/thermopro_ble.md => src/content/docs/components/sensor/thermopro_ble.mdx (85%) rename content/components/sensor/tmp102.md => src/content/docs/components/sensor/tmp102.mdx (54%) rename content/components/sensor/tmp1075.md => src/content/docs/components/sensor/tmp1075.mdx (87%) rename content/components/sensor/tmp117.md => src/content/docs/components/sensor/tmp117.mdx (83%) rename content/components/sensor/tof10120.md => src/content/docs/components/sensor/tof10120.mdx (71%) rename content/components/sensor/total_daily_energy.md => src/content/docs/components/sensor/total_daily_energy.mdx (68%) rename content/components/sensor/tsl2561.md => src/content/docs/components/sensor/tsl2561.mdx (71%) rename content/components/sensor/tsl2591.md => src/content/docs/components/sensor/tsl2591.mdx (93%) rename content/components/sensor/tuya.md => src/content/docs/components/sensor/tuya.mdx (78%) rename content/components/sensor/tx20.md => src/content/docs/components/sensor/tx20.mdx (86%) rename content/components/sensor/ufire_ec.md => src/content/docs/components/sensor/ufire_ec.mdx (88%) rename content/components/sensor/ufire_ise.md => src/content/docs/components/sensor/ufire_ise.mdx (88%) rename content/components/sensor/ultrasonic.md => src/content/docs/components/sensor/ultrasonic.mdx (79%) rename content/components/sensor/uptime.md => src/content/docs/components/sensor/uptime.mdx (74%) rename content/components/sensor/veml3235.md => src/content/docs/components/sensor/veml3235.mdx (89%) rename content/components/sensor/veml7700.md => src/content/docs/components/sensor/veml7700.mdx (86%) rename content/components/sensor/vl53l0x.md => src/content/docs/components/sensor/vl53l0x.mdx (87%) rename content/components/sensor/wifi_signal.md => src/content/docs/components/sensor/wifi_signal.mdx (78%) rename content/components/sensor/wts01.md => src/content/docs/components/sensor/wts01.mdx (73%) rename content/components/sensor/xgzp68xx.md => src/content/docs/components/sensor/xgzp68xx.mdx (87%) rename content/components/sensor/xiaomi_ble.md => src/content/docs/components/sensor/xiaomi_ble.mdx (84%) rename content/components/sensor/xiaomi_hhccjcy01.md => src/content/docs/components/sensor/xiaomi_hhccjcy01.mdx (100%) rename content/components/sensor/xiaomi_hhccjcy10.md => src/content/docs/components/sensor/xiaomi_hhccjcy10.mdx (83%) rename content/components/sensor/xiaomi_lywsdcgq.md => src/content/docs/components/sensor/xiaomi_lywsdcgq.mdx (100%) rename content/components/sensor/xiaomi_miscale.md => src/content/docs/components/sensor/xiaomi_miscale.mdx (83%) rename content/components/sensor/xiaomi_miscale2.md => src/content/docs/components/sensor/xiaomi_miscale2.mdx (69%) rename content/components/sensor/zio_ultrasonic.md => src/content/docs/components/sensor/zio_ultrasonic.mdx (62%) rename content/components/sensor/zyaura.md => src/content/docs/components/sensor/zyaura.mdx (72%) rename content/components/servo.md => src/content/docs/components/servo.mdx (92%) rename content/components/sim800l.md => src/content/docs/components/sim800l.mdx (92%) rename content/components/sml.md => src/content/docs/components/sml.mdx (95%) rename content/components/sn74hc165.md => src/content/docs/components/sn74hc165.mdx (90%) rename content/components/sn74hc595.md => src/content/docs/components/sn74hc595.mdx (88%) rename content/components/speaker/i2s_audio.md => src/content/docs/components/speaker/i2s_audio.mdx (94%) rename content/components/speaker/_index.md => src/content/docs/components/speaker/index.mdx (82%) rename content/components/speaker/mixer.md => src/content/docs/components/speaker/mixer.mdx (83%) rename content/components/speaker/resampler.md => src/content/docs/components/speaker/resampler.mdx (86%) rename content/components/spi.md => src/content/docs/components/spi.mdx (97%) rename content/components/sprinkler.md => src/content/docs/components/sprinkler.mdx (92%) rename content/components/statsd.md => src/content/docs/components/statsd.mdx (90%) rename content/components/status_led.md => src/content/docs/components/status_led.mdx (81%) rename content/components/stepper/_index.md => src/content/docs/components/stepper/index.mdx (95%) rename content/components/substitutions.md => src/content/docs/components/substitutions.mdx (94%) rename content/components/sun.md => src/content/docs/components/sun.mdx (88%) rename content/components/sun_gtil2.md => src/content/docs/components/sun_gtil2.mdx (82%) rename content/components/switch/ble_client.md => src/content/docs/components/switch/ble_client.mdx (69%) rename content/components/switch/factory_reset.md => src/content/docs/components/switch/factory_reset.mdx (65%) rename content/components/switch/gpio.md => src/content/docs/components/switch/gpio.mdx (85%) rename content/components/switch/haier.md => src/content/docs/components/switch/haier.mdx (87%) rename content/components/switch/hbridge.md => src/content/docs/components/switch/hbridge.mdx (75%) rename content/components/switch/homeassistant.md => src/content/docs/components/switch/homeassistant.mdx (77%) rename {content => src/content/docs}/components/switch/images/gate-remote-ui.png (100%) rename {content => src/content/docs}/components/switch/images/hbridge-relay.png (100%) rename {content => src/content/docs}/components/switch/images/restart-ui.png (100%) rename content/components/switch/_index.md => src/content/docs/components/switch/index.mdx (89%) rename content/components/switch/lvgl.md => src/content/docs/components/switch/lvgl.mdx (63%) rename content/components/switch/modbus_controller.md => src/content/docs/components/switch/modbus_controller.mdx (87%) rename content/components/switch/nextion.md => src/content/docs/components/switch/nextion.mdx (88%) rename content/components/switch/output.md => src/content/docs/components/switch/output.mdx (64%) create mode 100644 src/content/docs/components/switch/restart.mdx create mode 100644 src/content/docs/components/switch/safe_mode.mdx rename content/components/switch/shutdown.md => src/content/docs/components/switch/shutdown.mdx (55%) rename content/components/switch/template.md => src/content/docs/components/switch/template.mdx (87%) rename content/components/switch/tuya.md => src/content/docs/components/switch/tuya.mdx (80%) rename content/components/switch/uart.md => src/content/docs/components/switch/uart.mdx (80%) rename content/components/sx126x.md => src/content/docs/components/sx126x.mdx (96%) rename content/components/sx127x.md => src/content/docs/components/sx127x.mdx (93%) rename content/components/sx1509.md => src/content/docs/components/sx1509.mdx (88%) rename content/components/syslog.md => src/content/docs/components/syslog.mdx (84%) rename content/components/tca9548a.md => src/content/docs/components/tca9548a.mdx (85%) rename content/components/tca9555.md => src/content/docs/components/tca9555.mdx (88%) rename content/components/text/_index.md => src/content/docs/components/text/index.mdx (88%) rename content/components/text/lvgl.md => src/content/docs/components/text/lvgl.mdx (64%) rename content/components/text/template.md => src/content/docs/components/text/template.mdx (90%) rename content/components/text_sensor/ble_client.md => src/content/docs/components/text_sensor/ble_client.mdx (83%) rename content/components/text_sensor/ble_scanner.md => src/content/docs/components/text_sensor/ble_scanner.mdx (70%) rename content/components/text_sensor/ethernet_info.md => src/content/docs/components/text_sensor/ethernet_info.mdx (85%) rename content/components/text_sensor/haier.md => src/content/docs/components/text_sensor/haier.mdx (86%) rename content/components/text_sensor/homeassistant.md => src/content/docs/components/text_sensor/homeassistant.mdx (77%) rename {content => src/content/docs}/components/text_sensor/images/version-ui.png (100%) rename content/components/text_sensor/_index.md => src/content/docs/components/text_sensor/index.mdx (92%) rename content/components/text_sensor/key_collector.md => src/content/docs/components/text_sensor/key_collector.mdx (72%) rename content/components/text_sensor/libretiny.md => src/content/docs/components/text_sensor/libretiny.mdx (70%) rename content/components/text_sensor/lvgl.md => src/content/docs/components/text_sensor/lvgl.mdx (66%) rename content/components/text_sensor/modbus_controller.md => src/content/docs/components/text_sensor/modbus_controller.mdx (85%) rename content/components/text_sensor/mqtt_subscribe.md => src/content/docs/components/text_sensor/mqtt_subscribe.mdx (82%) rename content/components/text_sensor/nextion.md => src/content/docs/components/text_sensor/nextion.mdx (86%) rename content/components/text_sensor/openthread_info.md => src/content/docs/components/text_sensor/openthread_info.mdx (90%) rename content/components/text_sensor/template.md => src/content/docs/components/text_sensor/template.mdx (90%) rename content/components/text_sensor/tuya.md => src/content/docs/components/text_sensor/tuya.mdx (61%) rename content/components/text_sensor/uptime.md => src/content/docs/components/text_sensor/uptime.mdx (89%) rename content/components/text_sensor/version.md => src/content/docs/components/text_sensor/version.mdx (76%) rename content/components/text_sensor/wifi_info.md => src/content/docs/components/text_sensor/wifi_info.mdx (89%) rename content/components/text_sensor/wl_134.md => src/content/docs/components/text_sensor/wl_134.mdx (76%) rename content/components/time/bm8563.md => src/content/docs/components/time/bm8563.mdx (87%) rename content/components/time/ds1307.md => src/content/docs/components/time/ds1307.mdx (91%) rename content/components/time/gps.md => src/content/docs/components/time/gps.mdx (73%) rename content/components/time/homeassistant.md => src/content/docs/components/time/homeassistant.mdx (87%) rename content/components/time/host.md => src/content/docs/components/time/host.mdx (89%) rename content/components/time/_index.md => src/content/docs/components/time/index.mdx (97%) rename content/components/time/pcf85063.md => src/content/docs/components/time/pcf85063.mdx (91%) rename content/components/time/pcf8563.md => src/content/docs/components/time/pcf8563.mdx (91%) rename content/components/time/rx8130.md => src/content/docs/components/time/rx8130.mdx (91%) rename content/components/time/sntp.md => src/content/docs/components/time/sntp.mdx (98%) rename content/components/time/zigbee.md => src/content/docs/components/time/zigbee.mdx (65%) rename content/components/tinyusb.md => src/content/docs/components/tinyusb.mdx (88%) rename content/components/tm1651.md => src/content/docs/components/tm1651.mdx (87%) rename content/components/touchscreen/axs15231.md => src/content/docs/components/touchscreen/axs15231.mdx (81%) rename content/components/touchscreen/chsc6x.md => src/content/docs/components/touchscreen/chsc6x.mdx (78%) rename content/components/touchscreen/cst226.md => src/content/docs/components/touchscreen/cst226.mdx (82%) rename content/components/touchscreen/cst816.md => src/content/docs/components/touchscreen/cst816.mdx (84%) rename content/components/touchscreen/ektf2232.md => src/content/docs/components/touchscreen/ektf2232.mdx (70%) rename content/components/touchscreen/ft5x06.md => src/content/docs/components/touchscreen/ft5x06.mdx (76%) rename content/components/touchscreen/ft63x6.md => src/content/docs/components/touchscreen/ft63x6.mdx (82%) rename content/components/touchscreen/gt911.md => src/content/docs/components/touchscreen/gt911.mdx (81%) rename {content => src/content/docs}/components/touchscreen/images/esp32-s3-box.png (100%) rename {content => src/content/docs}/components/touchscreen/images/esp32-s3-korvo-2.png (100%) rename {content => src/content/docs}/components/touchscreen/images/xpt2046-full.jpg (100%) rename content/components/touchscreen/_index.md => src/content/docs/components/touchscreen/index.mdx (89%) rename content/components/touchscreen/lilygo_t5_47.md => src/content/docs/components/touchscreen/lilygo_t5_47.mdx (73%) rename content/components/touchscreen/sdl.md => src/content/docs/components/touchscreen/sdl.mdx (76%) rename content/components/touchscreen/tt21100.md => src/content/docs/components/touchscreen/tt21100.mdx (79%) rename content/components/touchscreen/xpt2046.md => src/content/docs/components/touchscreen/xpt2046.mdx (88%) rename content/components/tuya.md => src/content/docs/components/tuya.mdx (85%) rename content/components/uart.md => src/content/docs/components/uart.mdx (96%) rename content/components/udp.md => src/content/docs/components/udp.mdx (92%) rename content/components/update/esp32_hosted.md => src/content/docs/components/update/esp32_hosted.mdx (92%) rename content/components/update/http_request.md => src/content/docs/components/update/http_request.mdx (71%) rename content/components/update/_index.md => src/content/docs/components/update/index.mdx (81%) rename content/components/uponor_smatrix.md => src/content/docs/components/uponor_smatrix.mdx (94%) rename content/components/usb_cdc_acm.md => src/content/docs/components/usb_cdc_acm.mdx (87%) rename content/components/usb_host.md => src/content/docs/components/usb_host.mdx (90%) rename content/components/usb_uart.md => src/content/docs/components/usb_uart.mdx (91%) rename {content => src/content/docs}/components/valve/images/valve-ui.png (100%) rename content/components/valve/_index.md => src/content/docs/components/valve/index.mdx (87%) rename content/components/valve/template.md => src/content/docs/components/valve/template.mdx (92%) rename content/components/vbus.md => src/content/docs/components/vbus.mdx (93%) rename content/components/voice_assistant.md => src/content/docs/components/voice_assistant.mdx (87%) rename content/components/water_heater/_index.md => src/content/docs/components/water_heater/index.mdx (88%) rename content/components/water_heater/template.md => src/content/docs/components/water_heater/template.mdx (94%) rename content/components/web_server.md => src/content/docs/components/web_server.mdx (79%) rename content/components/weikai.md => src/content/docs/components/weikai.mdx (96%) rename content/components/wiegand.md => src/content/docs/components/wiegand.mdx (88%) rename content/components/wifi.md => src/content/docs/components/wifi.mdx (94%) rename content/components/wireguard.md => src/content/docs/components/wireguard.mdx (88%) rename content/components/xl9535.md => src/content/docs/components/xl9535.mdx (86%) rename content/components/xxtea.md => src/content/docs/components/xxtea.mdx (80%) rename content/components/zigbee.md => src/content/docs/components/zigbee.mdx (98%) rename content/components/zwave_proxy.md => src/content/docs/components/zwave_proxy.mdx (87%) rename content/cookbook/arduino_port_extender.md => src/content/docs/cookbook/arduino_port_extender.mdx (97%) rename content/cookbook/bme280_environment.md => src/content/docs/cookbook/bme280_environment.mdx (80%) rename content/cookbook/display_time_temp_oled.md => src/content/docs/cookbook/display_time_temp_oled.mdx (88%) rename content/cookbook/ehmtx.md => src/content/docs/cookbook/ehmtx.mdx (86%) rename content/cookbook/garage-door.md => src/content/docs/cookbook/garage-door.mdx (82%) rename {content => src/content/docs}/cookbook/images/arduino_pro_mini.jpg (100%) rename {content => src/content/docs}/cookbook/images/bme280-header.jpg (100%) rename {content => src/content/docs}/cookbook/images/display_time_temp_oled_1.jpg (100%) rename {content => src/content/docs}/cookbook/images/infostrip-detail.jpg (100%) rename {content => src/content/docs}/cookbook/images/infostrip-lights-ui.png (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC-ha_interface.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC-m5stickC.png (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_LeakDetected.gif (100%) create mode 100644 src/content/docs/cookbook/images/leak-detector-m5stickC_dry.jpg rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_grove1.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_grove2.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_overview1.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_overview2.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_pinout.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_probe.jpg (100%) rename {content => src/content/docs}/cookbook/images/leak-detector-m5stickC_wet.jpg (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_animimg_batt.gif (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_climate.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_clock.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_cover.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_flex_layout.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_font_batt.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_font_binstat.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_font_roboto_mdi.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_gauge.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_gradient_styles.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_keypad.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_pagenav.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_remligbut.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_statico.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_thermometer.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_thermometer_gauge.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_titlebar.png (100%) rename {content => src/content/docs}/cookbook/images/lvgl_cook_weather.png (100%) rename {content => src/content/docs}/cookbook/images/power_meter-header.jpg (100%) rename {content => src/content/docs}/cookbook/images/sonoff-fishpond-pump-1-programming.jpg (100%) rename {content => src/content/docs}/cookbook/images/sonoff-fishpond-pump-and-sensor.jpg (100%) rename {content => src/content/docs}/cookbook/images/sonoff-fishpond-pump-gpio14.jpg (100%) rename {content => src/content/docs}/cookbook/images/sonoff-fishpond-pump-installed.jpg (100%) rename {content => src/content/docs}/cookbook/images/sonoff-fishpond.jpg (100%) rename {content => src/content/docs}/cookbook/images/window-open.svg (100%) rename content/cookbook/_index.md => src/content/docs/cookbook/index.mdx (100%) rename content/cookbook/infostrip.md => src/content/docs/cookbook/infostrip.mdx (82%) rename content/cookbook/lambda_magic.md => src/content/docs/cookbook/lambda_magic.mdx (91%) rename content/cookbook/leak-detector-m5stickC.md => src/content/docs/cookbook/leak-detector-m5stickC.mdx (77%) rename content/cookbook/lvgl.md => src/content/docs/cookbook/lvgl.mdx (94%) rename content/cookbook/power_meter.md => src/content/docs/cookbook/power_meter.mdx (90%) rename content/cookbook/pulse-catcher.md => src/content/docs/cookbook/pulse-catcher.mdx (70%) rename content/cookbook/sonoff-fishpond-pump.md => src/content/docs/cookbook/sonoff-fishpond-pump.mdx (86%) rename content/guides/audio_clips_for_i2s.md => src/content/docs/guides/audio_clips_for_i2s.mdx (82%) rename content/guides/changelog.md => src/content/docs/guides/changelog.mdx (53%) rename content/guides/cli.md => src/content/docs/guides/cli.mdx (62%) rename content/guides/configuration-types.md => src/content/docs/guides/configuration-types.mdx (93%) rename content/guides/creators.md => src/content/docs/guides/creators.mdx (91%) rename content/guides/devboard_as_flasher.md => src/content/docs/guides/devboard_as_flasher.mdx (85%) rename content/guides/diy.md => src/content/docs/guides/diy.mdx (66%) rename content/guides/esp32_arduino_to_idf.md => src/content/docs/guides/esp32_arduino_to_idf.mdx (85%) rename content/guides/faq.md => src/content/docs/guides/faq.mdx (93%) rename content/guides/getting_started_command_line.md => src/content/docs/guides/getting_started_command_line.mdx (86%) rename content/guides/getting_started_hassio.md => src/content/docs/guides/getting_started_hassio.mdx (85%) rename {content => src/content/docs}/guides/images/addon.png (100%) rename {content => src/content/docs}/guides/images/console.svg (100%) rename {content => src/content/docs}/guides/images/dashboard-install-manual-modern.png (100%) rename {content => src/content/docs}/guides/images/dashboard-install-manual.png (100%) rename {content => src/content/docs}/guides/images/dashboard-install.png (100%) rename {content => src/content/docs}/guides/images/dashboard_empty.png (100%) rename {content => src/content/docs}/guides/images/dashboard_states.png (100%) rename {content => src/content/docs}/guides/images/devboard-as-flasher.png (100%) rename {content => src/content/docs}/guides/images/download_binary.png (100%) rename {content => src/content/docs}/guides/images/earth.svg (100%) rename {content => src/content/docs}/guides/images/espeasy.svg (100%) rename {content => src/content/docs}/guides/images/espeasy_ota.png (100%) rename {content => src/content/docs}/guides/images/espurna.svg (100%) rename {content => src/content/docs}/guides/images/espurna_ota.png (100%) rename {content => src/content/docs}/guides/images/espurna_upload.png (100%) rename {content => src/content/docs}/guides/images/flux.jpg (100%) rename {content => src/content/docs}/guides/images/module-only-programming.jpg (100%) rename {content => src/content/docs}/guides/images/nodemcu_esp8266.jpg (100%) rename {content => src/content/docs}/guides/images/programming-bare-chip.jpg (100%) rename {content => src/content/docs}/guides/images/programming-header-filled.jpg (100%) rename {content => src/content/docs}/guides/images/programming-header-populated.jpg (100%) rename {content => src/content/docs}/guides/images/programming-header-unpopulated.jpg (100%) rename {content => src/content/docs}/guides/images/python-win-installer.png (100%) rename {content => src/content/docs}/guides/images/question_answer.svg (100%) rename {content => src/content/docs}/guides/images/save_as_wav.png (100%) rename {content => src/content/docs}/guides/images/solder.jpg (100%) rename {content => src/content/docs}/guides/images/soldering-iron.jpg (100%) rename {content => src/content/docs}/guides/images/strippers.jpg (100%) rename {content => src/content/docs}/guides/images/tasmota.svg (100%) rename {content => src/content/docs}/guides/images/tasmota_main.png (100%) rename {content => src/content/docs}/guides/images/tasmota_ota.png (100%) rename {content => src/content/docs}/guides/images/tasmota_upload.png (100%) rename {content => src/content/docs}/guides/images/usb-cable.jpg (100%) rename {content => src/content/docs}/guides/images/usb-serial-adapter.jpg (100%) rename {content => src/content/docs}/guides/images/wire-cutters.jpg (100%) rename content/guides/_index.md => src/content/docs/guides/index.mdx (100%) rename content/guides/installing_esphome.md => src/content/docs/guides/installing_esphome.mdx (93%) rename content/guides/made_for_esphome.md => src/content/docs/guides/made_for_esphome.mdx (56%) rename content/guides/migrate_espeasy.md => src/content/docs/guides/migrate_espeasy.mdx (74%) rename content/guides/migrate_espurna.md => src/content/docs/guides/migrate_espurna.mdx (70%) rename content/guides/migrate_sonoff_tasmota.md => src/content/docs/guides/migrate_sonoff_tasmota.mdx (74%) rename content/guides/physical_device_connection.md => src/content/docs/guides/physical_device_connection.mdx (61%) rename content/guides/security_best_practices.md => src/content/docs/guides/security_best_practices.mdx (99%) rename content/guides/setting_up_rmt_devices.md => src/content/docs/guides/setting_up_rmt_devices.mdx (95%) rename content/guides/supporters.md => src/content/docs/guides/supporters.mdx (100%) rename content/guides/troubleshooting.md => src/content/docs/guides/troubleshooting.mdx (85%) rename content/guides/yaml.md => src/content/docs/guides/yaml.mdx (95%) create mode 100644 src/content/docs/index.mdx create mode 100644 src/content/docs/projects/index.mdx rename {content => src/content/docs}/web-api/images/event-source.png (100%) rename {content => src/content/docs}/web-api/images/logo-text.svg (100%) rename content/web-api/_index.md => src/content/docs/web-api/index.mdx (96%) create mode 100644 src/env.d.ts create mode 100644 src/lib/breakpoints.ts create mode 100644 src/styles/custom.css delete mode 100644 themes/esphome-theme/assets/css/chroma.css delete mode 100644 themes/esphome-theme/assets/css/main.css delete mode 100644 themes/esphome-theme/assets/css/tables.css delete mode 100644 themes/esphome-theme/assets/js/lazysizes.min.js delete mode 100644 themes/esphome-theme/assets/js/main.js delete mode 100644 themes/esphome-theme/assets/js/menu.js delete mode 100644 themes/esphome-theme/assets/js/search.js delete mode 100644 themes/esphome-theme/layouts/_default/_markup/render-blockquote-alert.html delete mode 100644 themes/esphome-theme/layouts/_default/_markup/render-blockquote-regular.html delete mode 100644 themes/esphome-theme/layouts/_default/_markup/render-codeblock.html delete mode 100644 themes/esphome-theme/layouts/_default/_markup/render-heading.html delete mode 100644 themes/esphome-theme/layouts/_default/_markup/render-passthrough.html delete mode 100644 themes/esphome-theme/layouts/_default/baseof.html delete mode 100644 themes/esphome-theme/layouts/_default/list.html delete mode 100644 themes/esphome-theme/layouts/_default/projects.html delete mode 100644 themes/esphome-theme/layouts/_default/single.html delete mode 100644 themes/esphome-theme/layouts/index.componentsjson delete mode 100644 themes/esphome-theme/layouts/index.html delete mode 100644 themes/esphome-theme/layouts/partials/asset.html delete mode 100644 themes/esphome-theme/layouts/partials/automations-menu.html delete mode 100644 themes/esphome-theme/layouts/partials/changelog-menu.html delete mode 100644 themes/esphome-theme/layouts/partials/components-menu.html delete mode 100644 themes/esphome-theme/layouts/partials/guides-menu.html delete mode 100644 themes/esphome-theme/layouts/partials/image.html delete mode 100644 themes/esphome-theme/layouts/partials/linkify.html delete mode 100644 themes/esphome-theme/layouts/partials/render-automations.html delete mode 100644 themes/esphome-theme/layouts/partials/sidebar.html delete mode 100644 themes/esphome-theme/layouts/partials/site-verification.html delete mode 100644 themes/esphome-theme/layouts/partials/toc_secondary_list.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/anchor.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/api-key-input.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/apiclass.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/apiref.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/apistruct.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/break.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/changelogs.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/collapse.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/docref.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/feature-grid.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/getting-started-grid.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/ghuser.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/html_file.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/img.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/imgtable.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/include.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/math.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/option.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/pr.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/redirect.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/render-automations.html delete mode 100644 themes/esphome-theme/layouts/shortcodes/seo.html delete mode 100644 themes/esphome-theme/theme.yaml create mode 100644 tsconfig.json diff --git a/.claude/instructions.md b/.claude/instructions.md index f271f016cf..a339cac227 100644 --- a/.claude/instructions.md +++ b/.claude/instructions.md @@ -3,6 +3,7 @@ ## Documentation Style & Formatting ### Language and Text Formatting + - **Always use English** for all documentation - **Section titles**: Use Title Case formatting (e.g., "Configuration Variables", "Getting Started") - **Line length**: Wrap lines at **maximum 120 characters** for readability @@ -11,6 +12,7 @@ ### Content Guidelines #### Component Documentation + - Provide **minimal examples** that exclude optional configuration variables - Examples should focus on the essential configuration only - When components have dependencies: @@ -19,6 +21,7 @@ - Do NOT include the dependent component's configuration in the example #### Pin References + - **ALWAYS use the literal string `GPIOXX`** in documentation examples - The `XX` is literal - do NOT replace with actual numbers like `GPIO16` - **Exception**: Only use specific pin numbers when documenting hardware with fixed pins @@ -27,25 +30,30 @@ ## File Structure & Format ### Frontmatter Requirements + Every documentation page **must** start with YAML frontmatter: ```yaml --- -title: Component Name -description: Brief description of the component +title: "Component Name" +description: "Brief description of the component" --- ``` **Important**: + - The `title` field becomes the H1 heading automatically - **Do NOT** repeat the title as a `# Heading` in the markdown content - The description should be concise (1-2 sentences) +- Both title and description should be quoted strings ### Heading Hierarchy + - **Start with H2 (`##`)** for main sections - Never use H1 (`#`) in the content (it's generated from frontmatter) - Use proper nesting: H2 → H3 → H4 - Examples: + ```markdown ## Configuration Variables @@ -54,15 +62,22 @@ description: Brief description of the component #### Advanced Settings ``` -## Markdown Syntax Standards +## MDX Syntax Standards + +### File Format + +- Files use **MDX format** (`.mdx` extension) which allows JSX components in Markdown +- Import required components at the top of the file after frontmatter ### Code Formatting #### Inline Code + - Use single backticks for inline code: `variable_name`, `sensor`, `GPIOXX` - Use for: component names, variable names, short code snippets, pin numbers #### Code Blocks + - Use triple backticks with language identifier: ```yaml @@ -84,6 +99,7 @@ Use special formatting to indicate parameter requirements: - *Optional* label: Italics Example: + ```markdown - **pin** (**Required**, Pin): The pin where the sensor is connected. - **update_interval** (*Optional*, Time): The interval to check the sensor. Defaults to `60s`. @@ -92,83 +108,105 @@ Example: ### Links #### External Links + Standard markdown syntax: + ```markdown [ESP32 Datasheet](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf) ``` #### Internal Documentation Links + Use **relative paths** starting with `/`: + ```markdown -- See [WiFi](/components/wifi) for WiFi configuration -- Configure [I²C](/components/i2c) first -- Check out the [Deep Sleep](/components/deep_sleep) component +- See [WiFi](/components/wifi/) for WiFi configuration +- Configure [I²C](/components/i2c/) first +- Check out the [Deep Sleep](/components/deep_sleep/) component ``` -#### Custom Anchors -Use Hugo shortcodes for custom anchor points: +**Important**: Always include trailing slash `/` for internal links. + +#### Anchors + +Headings automatically create anchors using their slugified form. To link to a specific section: + ```markdown -{{< anchor "custom-section-name" >}} +See [Configuration Variables](#configuration-variables) for details. ``` -Reference them with: +Wherever possible, use automatic anchors generated from headings. Only when it is not feasible to use automatic anchors should you use HTML: + ```markdown -See [this section](#custom-section-name) for details. + ``` ### Visual Elements #### Images -**Optimization Requirements:** -- **ALWAYS optimize images** before adding (use TinyPNG/TinyJPG) -- **Maximum size**: ~1000x800 pixels -- All images must be as small as possible to minimize page load times +**Directory Structure and Import Strategy:** -**Directory Structure:** -- **Component images**: Store in section-specific directories: - - General components: `content/components/images/` - - Sensor components: `content/components/sensor/images/` - - Display components: `content/components/display/images/` - - Binary sensors: `content/components/binary_sensor/images/` - - Guides: `content/guides/images/` - - Cookbook: `content/cookbook/images/` - - And so on for each major section -- **Global/shared images and thumbnails**: Store in `static/images/` +1. **Single-use images** (used in only one file): -**Referencing Images:** + - Store in a local `images/` directory next to the MDX file + - Import at the top of the file + - Use imported image reference -**Default**: Use standard markdown syntax: -```markdown -![Alt text](filename.png) -``` + ```mdx + import { Image } from 'astro:assets'; + import myImageImg from './images/my-image.jpg'; -The filename (no path) references the image in the section's images directory. + Description + ``` -**When shortcode features are needed**: Use Hugo `img` shortcode for captions, width control, or alignment: -```markdown -{{< img src="filename.png" alt="Image description" caption="Optional caption text" width="75%" class="align-center" >}} -``` +1. **Multi-use images** (used in multiple files): -Shortcode parameters: -- `src`: Just the filename (no path) - looks in the section's images directory -- `alt`: Alternative text for accessibility -- `caption`: Descriptive caption (only available in shortcode) -- `width`: Percentage control like "75%", "50%" (only available in shortcode) -- `class`: Usually "align-center" for centering (only available in shortcode) + - Store in `/public/images/` + - Reference using absolute path -Examples: -```markdown -![Debug output](debug.png) + ```mdx + Description + ``` + +1. **ImgTable images** (component index pages): + + - **MUST** be in `/public/images/` + - ImgTable component resolves to `/images/filename.png` + +**Image Optimization:** + +- **ALWAYS optimize images** before adding (use TinyPNG/TinyJPG) +- **Maximum size**: ~1000x800 pixels +- All images must be as small as possible to minimize page load times +- Variable names follow camelCase with `Img` suffix (e.g., `myImageImg`) + +**Image Attributes:** + +- `src`: Either imported variable or absolute path +- `alt`: Alternative text for accessibility (required) +- `layout`: Use `"constrained"` for responsive images +- `width` and `height`: Optional pixel values (not percentages) + +**Styling Images:** -{{< img src="debug.png" alt="Debug component output" caption="Example debug component output." class="align-center" >}} +Use inline styles for sizing: + +```mdx +Description ``` #### Component Thumbnails + - **Aspect ratio**: 8:10 or 10:8 (portrait or landscape orientation) - **Format**: SVG (heavily compressed) or JPG (max 300x300px) -- **Location**: `static/images/` directory -- **Reference**: Use `/images/filename` path in frontmatter or links +- **Location**: `/public/images/` directory +- **Reference**: Use `/images/filename` path in ImgTable - Used in component listings and cards ### Alerts and Callouts @@ -179,27 +217,138 @@ Use GitHub-style alert syntax: > [!NOTE] > This is an informational note for users. -> [!WARNING] -> This warns users about potential issues or breaking changes. +> [!IMPORTANT] +> This provides important information that should be emphasized. > [!TIP] > This provides helpful tips and best practices. + +> [!WARNING] +> This warns users about potential issues or breaking changes. + +> [!CAUTION] +> This warns about critical issues that could cause damage. ``` **When to use**: + - `NOTE`: General information, clarifications, important context -- `WARNING`: Potential issues, breaking changes, compatibility notes +- `IMPORTANT`: Important information that needs emphasis - `TIP`: Optimization suggestions, best practices, pro tips +- `WARNING`: Potential issues, breaking changes, compatibility notes +- `CAUTION`: Critical warnings that could cause damage or data loss + +### Mathematical Expressions + +Use LaTeX syntax with KaTeX for equations: + +**Inline math:** + +```markdown +The formula is $E = mc^2$ where... +``` + +**Block equations:** + +```markdown +$$ +\text{formula} = \frac{a}{b} +$$ +``` + +### Custom Components + +#### APIRef Component + +Link to C++ API documentation: + +```mdx +import APIRef from '@components/APIRef.astro'; + + +``` + +#### ImgTable Component + +Create grids of component cards: + +```mdx + +``` + +**Important**: All ImgTable images must be in `/public/images/`. + +#### Figure Component + +Add captions to images using the Figure component: + +**Simple text caption (using caption prop):** + +```mdx +import Figure from '@components/Figure.astro'; +import myImageImg from './images/my-image.jpg'; + +
+``` + +**Caption with markdown links (using caption slot):** + +```mdx +import Figure from '@components/Figure.astro'; + +
+

+ Download: [svg](/images/badge.svg), [png](/images/badge.png) +

+
+``` + +**With absolute path for multi-use images:** + +```mdx +
+``` + +**Props:** + +- `src`: Either imported variable or absolute path (required) +- `alt`: Alternative text for accessibility (required) +- `caption`: Optional caption text for simple captions (string) +- `layout`: Use `"constrained"` for responsive images (default) +- `style`: Optional inline CSS styles +- `width`, `height`: Optional pixel values + +**Slots:** + +- `caption`: For captions with markdown/links (use `` with markdown content) ## Git Workflow ### Branch Strategy + - **Bug fixes and documentation corrections**: Target the `current` branch - **New features and new component docs**: Target the `next` branch - **Create separate branches** for each pull request (one PR per feature/fix) -- **Always branch from the target branch**: Use `git checkout -b current` or `git checkout -b next` to ensure you're branching from the correct base, not whatever branch is currently checked out +- **Always branch from the target branch**: Use `git checkout -b current` or `git checkout -b next` to ensure you're branching from the correct base ### Commit Messages + - Use clear, descriptive commit messages - Format: `[component] Brief description of change` - Examples: @@ -208,47 +357,69 @@ Use GitHub-style alert syntax: - `[docs] Update contributing guidelines` ### Pull Request Process + 1. Ensure all changes are committed to the feature branch -2. Push to origin: `git push -u origin ` -3. Create the PR using the `.github/PULL_REQUEST_TEMPLATE.md` template - fill out all sections completely without removing any parts of the template -4. All automated tests must pass before review -5. Follow retry logic for network failures (exponential backoff: 2s, 4s, 8s, 16s) +1. Push to origin: `git push -u origin ` +1. Create the PR using the `.github/PULL_REQUEST_TEMPLATE.md` template - fill out all sections completely +1. All automated tests must pass before review +1. For new components, update `/src/content/docs/components/index.mdx` ## Testing and Preview -### Local Preview with Docker +### Local Preview + To preview documentation locally: + ```bash -docker run --rm -v "${PWD}/":/workspaces/esphome-docs -p 8000:8000 -it ghcr.io/esphome/esphome-docs +npm install +npm run dev ``` -Then access the preview at `http://:8000` +Then access the preview at `http://localhost:4321/` + +### Building for Production + +```bash +npm run build +``` ### Before Submitting -- [ ] Check that all links work (internal and external) + +- [ ] Check that all links work (internal and external with trailing slashes) - [ ] Verify code examples are syntactically correct - [ ] Ensure images are optimized and properly sized - [ ] Confirm line length is ≤120 characters - [ ] Validate YAML frontmatter is present and correct - [ ] Test that headings follow proper hierarchy (H2→H3→H4) - [ ] Verify no H1 headings in content (title comes from frontmatter) +- [ ] Verify images are imported correctly (single-use) or in /public/images/ (multi-use) +- [ ] Check that ImgTable images are in /public/images/ ## Common Patterns ### Component Page Structure + A typical component page should follow this structure: -```markdown +```mdx --- -title: Component Name -description: One-line description of what the component does +title: "Component Name" +description: "One-line description of what the component does" --- +import { Image } from 'astro:assets'; +import myImageImg from './images/my-image.jpg'; +import APIRef from '@components/APIRef.astro'; + Brief introduction paragraph explaining what the component is and what it does. +Component image + ## Configuration -Minimal configuration example here. +```yaml +# Minimal configuration example here +``` ## Configuration Variables @@ -260,12 +431,14 @@ Additional examples showing common use cases. ## See Also -- Related components and guides -``` +- [Related Component](/components/related/) + +Note: APIRef component would be used here but cannot be shown in markdown example. ### Writing Configuration Examples **Good example** (minimal, focused): + ```yaml sensor: - platform: dht @@ -275,6 +448,7 @@ sensor: ``` **Bad example** (includes unnecessary optional parameters): + ```yaml sensor: - platform: dht @@ -290,13 +464,19 @@ sensor: ## Key Reminders -1. **Never duplicate the title** - it's automatically generated from frontmatter -2. **Start with H2**, not H1 -3. **Wrap at 120 characters** maximum -4. **Use Title Case** for section headings -5. **Optimize images** before adding them -6. **Keep examples minimal** - only essential configuration -7. **Use literal `GPIOXX`** - the XX is literal, don't replace with numbers (unless fixed hardware) -8. **Link to dependencies** instead of including their config -9. **Target correct branch** (current vs next) -10. **GitHub CLI not available** - ask user for GitHub information if needed +- **Files use MDX format** (`.mdx` extension) +- **Import components** at the top after frontmatter +- **Never duplicate the title** - it's automatically generated from frontmatter +- **Start with H2**, not H1 +- **Wrap at 120 characters** maximum +- **Use Title Case** for section headings +- **Optimize images** before adding them +- **Single-use images**: Import from `./images/` +- **Multi-use images**: Absolute path from `/public/images/` +- **ImgTable images**: Must be in `/public/images/` +- **Keep examples minimal** - only essential configuration +- **Use literal `GPIOXX`** - the XX is literal, don't replace with numbers (unless fixed hardware) +- **Link to dependencies** instead of including their config +- **Target correct branch** (current vs next) +- **Internal links**: Include trailing slash (e.g., `/components/wifi/`) +- **GitHub CLI not available** - ask user for GitHub information if needed diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c4c51b5875..35a6afc97f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,19 +1,45 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.177.0/containers/typescript-node { - "name": "ESPHome - docs", - "image": "mcr.microsoft.com/devcontainers/python:3.13", - "postCreateCommand": ".devcontainer/postCreate.sh", - "postAttachCommand": "make live-html", + "name": "ESPHome Astro Dev Container", + "image": "mcr.microsoft.com/devcontainers/typescript-node:22-bookworm", "forwardPorts": [ - 8000 + 4321 ], - "features": { - "ghcr.io/devcontainers/features/github-cli:1": {} + "portsAttributes": { + "4321": { + "label": "Preview" + } }, + // Add the IDs of extensions you want installed when the container is created. "customizations": { "vscode": { "extensions": [ - "ms-python.python" - ] + "astro-build.astro-vscode", + "vunguyentuan.vscode-css-variables", + "esbenp.prettier-vscode", + "yzhang.markdown-all-in-one", + "davidanson.vscode-markdownlint", + "jock.svg" + ], + "settings": { + "files.eol": "\n", + "editor.tabSize": 2, + "editor.formatOnPaste": false, + "editor.formatOnSave": true, + "editor.formatOnType": true, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "files.trimTrailingWhitespace": true + } } - } + }, + "postCreateCommand": "npm install", + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "node" + // moved settings under customizations.vscode.settings } diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4c6a177a7b..8322a7bc68 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,19 +1,20 @@ -## Description: + +## Description **Related issue (if applicable):** fixes -**Pull request in [esphome](https://github.com/esphome/esphome) with YAML changes (if applicable):** +**Pull request in [esphome](https://github.com/esphome/esphome) with YAML changes (if applicable):** - esphome/esphome# -## Checklist: +## Checklist - - [ ] I am merging into `next` because this is new documentation that has a matching pull-request in [esphome](https://github.com/esphome/esphome) as linked above. - or - - [ ] I am merging into `current` because this is a fix, change and/or adjustment in the current documentation and is not for a new component or feature. +- [ ] I am merging into `next` because this is new documentation that has a matching pull-request in [esphome](https://github.com/esphome/esphome) as linked above. + or +- [ ] I am merging into `current` because this is a fix, change and/or adjustment in the current documentation and is not for a new component or feature. - - [ ] Link added in `/components/_index.md` when creating new documents for new components or cookbook. +- [ ] Link added in `/src/content/docs/components/index.mdx` when creating new documents for new components or cookbook.
New Component Images @@ -30,13 +31,16 @@ If you are adding a new component to ESPHome, you can automatically generate a s 2. The ESPHome bot will respond with a downloadable ZIP file containing the SVG image. -3. Extract the SVG file and place it in the `/static/images/` folder of this repository. +3. Extract the SVG file and place it in the `/public/images/` folder of this repository. -4. Use the image in your component's index table entry in `/components/_index.md`. +4. Use the image in your component's index table entry in `/src/content/docs/components/index.mdx`. **Example:** For a component called "DHT22 Temperature Sensor", use: + ``` @esphomebot generate image dht22 ``` +**Note:** All images used in ImgTable components must be placed in `/public/images/` as the component resolves them to absolute paths. +
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index ac90a66818..8bf4695113 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -5,31 +5,49 @@ Adhering to these guidelines will promote consistency and content quality. ## Project Overview & Purpose -* **Primary Goal:** ESPHome is a system to configure microcontrollers (like ESP32, ESP8266, RP2040, and LibreTiny-based chips) - using simple yet powerful YAML configuration files. It generates C++ firmware that can be compiled and flashed to - these devices, allowing users to control them remotely through home automation systems. +- **Primary Goal:** ESPHome is a system to configure microcontrollers (like ESP32, ESP8266, RP2040, and LibreTiny-based chips) + using simple yet powerful YAML configuration files. It generates C++ firmware that can be compiled and flashed to + these devices, allowing users to control them remotely through home automation systems. - This repo is the source for the primary documentation for users of ESPHome, published on [esphome.io](https://esphome.io). -* **Business Domain:** Internet of Things (IoT), Home Automation. + This repo is the source for the primary documentation for users of ESPHome, published on [esphome.io](https://esphome.io). +- **Business Domain:** Internet of Things (IoT), Home Automation. ## Core Technologies & Stack -* **Languages:** HTML, CSS, Markdown, Go templates -* **Frameworks & Runtimes:** Hugo and Pagefind -* **Key Libraries/Dependencies:** - * **Hugo:** For building the static site. - * **Pagefind:** For client-side text searching +- **Languages:** TypeScript, MDX (Markdown with JSX), CSS, JavaScript +- **Frameworks & Runtimes:** Astro, Starlight, Node.js +- **Key Libraries/Dependencies:** + - **Astro:** Static site generator with component-based architecture + - **Starlight:** Documentation framework built on Astro + - **Pagefind:** Client-side text searching + - **KaTeX:** Mathematical equation rendering + - **remark-github-blockquote-alert:** GitHub-flavored alert boxes ## Architectural Patterns -See the README.md file. +See the README.md file for detailed information about: + +- Project structure (Astro/Starlight conventions) +- Image handling (local imports vs. absolute paths) +- MDX format and component usage +- Custom Astro components + +## Content Format + +- **File Format:** MDX (`.mdx` files in `src/content/docs/`) +- **Frontmatter:** Required YAML frontmatter with `title` and `description` +- **Images:** + - Single-use images: Import locally from `./images/` directory + - Multi-use images: Use absolute paths from `/public/images/` + - ImgTable images: Must be in `/public/images/` +- **Components:** Import Astro components using `@components/` alias ## Branches -* **Current** +- **Current** The `current` branch represents the published documentation in sync with the latest ESPHome release. PRs may be raised against this where they contain documentation revisions only. -* **Next** +- **Next** The `next` branch is where changes are made via PR corresponding to new features in the ESPHome code repo (esphome/esphome). When a release is made this branch is merged into current. @@ -37,23 +55,88 @@ See the README.md file. See the README.md file +Quick start: + +1. Install dependencies: `npm install` +1. Run dev server: `npm run dev` +1. View at: `http://localhost:4321/` + ## Contribution Workflow (Pull Request Process) -1. **Fork:** Fork the repository. -1. **Branch:** Create a new branch in your fork from the appropriate base branch (`current` or `next`.) -1. **Make Changes:** Adhere to all coding conventions and patterns. -1. **Test:** Use the `make live-html` command to invoke hugo in server mode for instant preview. -1. **Commit:** Commit your changes. There is no strict format for commit messages. -1. **Pull Request:** Submit a PR against the base branch. The Pull Request title should have a prefix of the component being worked on (e.g., `[display] Add new examples`, `[abc123] Add new component`). Pull requests should always be made with the PULL_REQUEST_TEMPLATE.md template filled out correctly. -## Guidelines for AI generated reviews and PR summaries +1. **Fork:** Fork the repository. +1. **Branch:** Create a new branch in your fork from the appropriate base branch (`current` or `next`.) +1. **Make Changes:** Adhere to all coding conventions and patterns. +1. **Test:** Use `npm run dev` to run the development server for instant preview. +1. **Commit:** Commit your changes. There is no strict format for commit messages. +1. **Pull Request:** Submit a PR against the base branch. The Pull Request title should have a prefix of the component being worked on (e.g., `[display] Add new examples`, `[abc123] Add new component`). Pull requests should always be made with the PULL_REQUEST_TEMPLATE.md template filled out correctly. + +## MDX Writing Guidelines + +### Images + +**Single-use images (used in one file only):** + +```mdx +import { Image } from 'astro:assets'; +import myImageImg from './images/my-image.jpg'; + +Description +``` + +**Multi-use images (used in multiple files):** + +```mdx +Description +``` + +**Important:** All images used in ImgTable components MUST be in `/public/images/` with absolute paths. + +### Alert Boxes + +Use GitHub-flavored alert syntax: + +```markdown +> [!NOTE] +> Important information -Avoid the use of flowery language and weasel-words that add no useful content; Keep comments concise and technically +> [!WARNING] +> Warning message + +> [!TIP] +> Helpful tip +``` + +### Components + +Import custom components: + +```mdx +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; +import myImageImg from './images/my-image.jpg'; + + + +
+``` + +### Mathematical Expressions + +Use LaTeX syntax with KaTeX: + +```markdown +Inline: $E = mc^2$ + +Block: +$$ +\text{formula} = \frac{a}{b} +$$ +``` + +## Guidelines for AI Generated Reviews and PR Summaries + +Avoid the use of flowery language and weasel-words that add no useful content. Keep comments concise and technically accurate - you are not writing a press release. + For example instead of "Created comprehensive documentation with configuration examples and setup instructions" it is sufficient to say "Created documentation with examples and instructions". - -## Legacy Hugo Shortcodes - -The following Hugo shortcodes are legacy and should be replaced when encountered: -* `{{< docref >}}`: use standard Markdown links instead -* `{{< img >}}`: use standard Markdown image syntax instead diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 723cfa6c09..9c998b97fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,30 +16,20 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - name: Install pagefind - uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0 - with: - repo: cloudcannon/pagefind - - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Set up Hugo - uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f # v3.0.0 + - name: Set up Node.js + uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: - hugo-version: 'latest' - extended: true + node-version: '20' + cache: 'npm' - - name: Set up Python 3.12 - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 - with: - python-version: 3.12 + - name: Install dependencies + run: npm ci - - name: Install Python dependencies - run: pip install -r requirements_test.txt - - - name: Run production build - run: make production + - name: Build + run: npm run build lint: name: Lint runs-on: ubuntu-latest @@ -47,17 +37,14 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Set up Python 3.12 - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + - name: Set up Node.js + uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: - python-version: 3.12 + node-version: '20' + cache: 'npm' - name: Install dependencies - run: pip install -r requirements_test.txt - - - name: Register problem matchers - run: | - echo "::add-matcher::.github/workflows/matchers/ci-custom.json" + run: npm ci - name: markdownlint-cli uses: nosborn/github-action-markdown-cli@508d6cefd8f0cc99eab5d2d4685b1d5f470042c1 # v3.5.0 @@ -66,4 +53,4 @@ jobs: files: . - name: Lint - run: python lint.py + run: npm run lint diff --git a/.gitignore b/.gitignore index 9355b18c5b..b060bfa808 100644 --- a/.gitignore +++ b/.gitignore @@ -1,33 +1,34 @@ -public/ -esphome-docs -.hugo_build.lock -.idea -/node_modules/ -/pagefind/ -/data/repo.yaml -/data/anchors.json -/data/automations -my-secrets -resources/_gen +# Astro build output +dist/ +.astro/ -_build +# Node +node_modules/ + +# IDE +.idea/ +*.swp .DS_Store -.cache/ -.python-version +# OS +*.DS_Store + +# Python (for scripts) __pycache__/ *.py[cod] *$py.class +venv/ +.python-version -# Release notes generator cache (persistent PR cache + version-specific data) +# Cache +.cache/ script/cache/ -venv - -*.DS_Store -/.idea/ - -_pagefind/ +# Environment +my-secrets +.env +.env.* -# Vim -*.swp +# Misc +_build +esphome-docs diff --git a/.markdownlintignore b/.markdownlintignore index 0e4b780ed1..c4be24e2a4 100644 --- a/.markdownlintignore +++ b/.markdownlintignore @@ -1 +1,2 @@ LICENSE.md +node_modules/ diff --git a/Makefile b/Makefile deleted file mode 100644 index 0cd097391b..0000000000 --- a/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -.PHONY: clean live-html check-links anchors production convert-from-rst convert-branch-in-place directories netlify repo-data all - -SHELL := bash -.SHELLFLAGS := -euo pipefail -c - - -PAGEFIND=$(shell command -v pagefind >/dev/null 2>&1 && echo "pagefind" || echo "npx --yes pagefind@1.3.0") - -export HUGO_PARAMS_COMMIT_HASH=$(shell git rev-parse --short HEAD) -export HUGO_PARAMS_COMMIT_TITLE=$(shell git log -1 --pretty=%s) -export HUGO_PARAMS_BRANCH=$(shell git branch --show-current) -export HUGO_PARAMS_REPO_URL=$(shell git config --get remote.origin.url) - -all: production - -production: anchors - hugo --minify - $(PAGEFIND) - hugo --minify - -directories: - mkdir -p data public pagefind content static - -check-links: anchors - hugo --environment production - -anchors: repo-data - $(PAGEFIND) -s pagefind-bootstrap - hugo --environment anchors - -repo-data: directories - mkdir -p data/automations - curl -s -S https://data.esphome.io/release/automations.json | script/collate_automations.sh > data/automations/current.json - curl -s -S https://data.esphome.io/beta/automations.json | script/collate_automations.sh > data/automations/beta.json - curl -s -S https://data.esphome.io/dev/automations.json | script/collate_automations.sh > data/automations/next.json - -live-html: anchors - $(PAGEFIND) - hugo server --bind 0.0.0.0 --port 8000 --baseURL http://localhost:8000 - -clean: - rm -rf public/* - rm -rf pagefind/* - rm -rf data/automations/ - rm -rf data/repo.yaml - rm -rf resources/_gen - hugo mod clean - -convert-branch-in-place: - sh script/migrate.sh - - -netlify: repo-data - $(PAGEFIND) -s pagefind-bootstrap - hugo --environment anchors - hugo --minify - $(PAGEFIND) - # rerun hugo to incorporate generated index - hugo --minify diff --git a/README.md b/README.md index 9ffa063b10..c6dc19e008 100644 --- a/README.md +++ b/README.md @@ -18,372 +18,194 @@ -This repository contains source for the documentation site for ESPHome. +This repository contains the source for the documentation site for ESPHome, built with [Astro](https://astro.build/) and [Starlight](https://starlight.astro.build/). ## Project Structure -The project follows a standard directory structure: +The project follows the Astro/Starlight directory structure: -``` text +```text esphome-docs/ -├── archetypes/ # Content templates -├── assets/ # Source files for CSS, JS, etc. -├── content/ # Markdown content files -├── data/ # Data files for templates -├── layouts/ # HTML templates -├── static/ # Static files -│ └── images/ # Image files -├── themes/ # Custom theme for ESPHome -│ └── esphome-theme/ # The ESPHome custom theme -├── hugo.yaml # Hugo configuration -└── README.md # This file +├── src/ +│ ├── assets/ # Static assets (logos, etc.) +│ ├── components/ # Astro components +│ ├── content/ +│ │ └── docs/ # MDX documentation files +│ ├── lib/ # Utility functions +│ └── styles/ # CSS files +├── public/ +│ └── images/ # Shared images (multi-use, ImgTable) +├── astro.config.mjs # Astro configuration +├── tsconfig.json # TypeScript configuration +└── package.json # Node.js dependencies ``` ## Image File Resolution -Images in the Hugo site referred to in `img` shortcodes are handled using a specific search strategy: +Images in the Astro/Starlight site are handled in two ways: -### Relative paths +### Imported Local Images (Single-use images) -- When using relative paths in the `img` shortcode (e.g., `{{< img src="dht22.jpg" >}}`), - Hugo will first look in a local `images/` subdirectory. - For example, an image referenced in `content/components/sensor/dht.md` will first be - searched for in `content/components/sensor/images/`. +For images used in only one document: -- If the image is not found in the local directory, Hugo will then look in the global `/static/images/` directory. +```jsx +import { Image } from 'astro:assets'; +import myImageImg from './images/my-image.jpg'; -### Absolute paths - -When using absolute paths (starting with `/`), Hugo will look directly in the specified location -relative to the `/static/` directory. - -This strategy allows component documentation to have its own images while also supporting shared images across the site. - -## Custom Theme - -The site uses a custom theme called `esphome-theme` which is designed to match the look and feel of the original -ESPHome documentation. The theme includes: - -- Responsive design for mobile and desktop -- Dark mode support -- Custom shortcodes for documentation features -- Navigation sidebar -- Search functionality - -## Markdown - -Hugo uses Markdown files as input. The Markdown processor in use is Goldmark. - -## Hugo Template System - -Hugo uses a templating system to generate HTML from Markdown content. Understanding the following concepts is helpful -when working with or modifying the theme: - -### Templates - -Templates are HTML files with Go templating syntax that define the structure and layout of pages. Hugo uses different -types of templates: - -- **Base Templates**: Define the overall structure of the site (found in `layouts/_default/baseof.html`) -- **List Templates**: Used for section pages that list multiple content items -- **Single Templates**: Used for individual content pages -- **Home Template**: Specifically for the homepage - -Templates use blocks (like `{{ block "main" . }}{{ end }}`) that can be overridden by other templates. - -### Partials - -Partials are reusable template components that can be included in other templates. They help maintain DRY (Don't Repeat -Yourself) code by extracting common elements: - -``` text -{{ partial "header.html" . }} -``` - -The dot (`.`) passes the current context to the partial. Partials are stored in the `layouts/partials/` directory. - -### Shortcodes - -Shortcodes are special tags you can use within Markdown content to insert complex elements or custom HTML. -They bridge the gap between the simplicity of Markdown and the need for more complex formatting. - -``` text -{{< shortcode-name param1="value" param2="value" >}} -``` - -Shortcodes can be self-closing or can wrap content: - -``` text -{{< shortcode-name >}} - Content to be processed -{{< /shortcode-name >}} +Description ``` -Shortcode templates are stored in the `layouts/shortcodes/` directory. +- Images are stored in a local `images/` directory next to the MDX file +- They are imported at the top of the file +- Astro automatically optimizes these images during build +- Variable names follow camelCase convention with `Img` suffix -## Shortcodes +### Absolute Paths (Multi-use images and ImgTable) -Hugo has a number of [built-in shortcodes](https://gohugo.io/content-management/shortcodes/) and the ESPHome theme -also defines several custom shortcodes: +For images used in multiple documents or in ImgTable components: -### `anchor` - -Creates an HTML anchor point that can be linked to with fragment identifiers. - -``` text -{{< anchor "my-anchor-id" >}} -``` - -NOTE: Headings automatically create anchors, so it is not necessary to insert `anchor` shortcodes for them. - -### `collapse` - -Creates a collapsible section with a title that can be clicked to show/hide content. - -``` text -{{< collapse true >}} -This content will be hidden by default and can be expanded by clicking the header. -You can include any Markdown content here, including lists, code blocks, etc. -the parameter, if present and set to true, will have the content initially opened. Note that False is a truthy string, not a boolean -{{< /collapse >}} -``` - -### `docref` - -Creates a link to another page in the documentation with proper handling of anchors. - -``` text -{{< docref "/components/sensor/dht" >}} -{{< docref "/components/sensor/dht" "DHT Sensor Guide" >}} -{{< docref "/components/sensor/dht#configuration" >}} -``` - -### `img` - -Displays an image with optional caption, width, height, and CSS class. - -``` text -{{< img src="example.jpg" alt="Example image" caption="This is an example" width="500" class="center" >}} +```jsx +Description ``` -### `imgtable` - -Creates a component card with an image, title, and optional description that links to another page. - -``` text - {{< imgtable >}} - Title 1, path/to/page1, image1.png - Title 1, path/to/page1, image1.png, "sub-caption" - Title 2, path/to/page2, image2.png, dark-invert - Title 2, path/to/page2, image2.png, "sub-caption", dark-invert - {{< /imgtable >}} - -``` +- Images are stored in `/public/images/` +- Referenced using absolute paths starting with `/images/` +- **Important**: All images used in ImgTable components MUST remain in `/public/images/` -### `seo` +### ImgTable Component -Adds SEO metadata tags to the page for better search engine optimization and social media sharing. +The ImgTable component creates grids of component cards (commonly used on index pages): -``` text -{{< seo description="Detailed guide for setting up the DHT sensor with ESPHome" image="dht-sensor.jpg" >}} +```jsx + ``` -### `apiref` +All images referenced in ImgTable **must** be in `/public/images/` as the component resolves them to `/images/filename.png`. -Creates a link to a C++ API header file. +## Starlight Framework -``` text -{{< apiref "Component" "esphome/core/component.h" >}} -``` - -### `apiclass` +The site uses [Starlight](https://starlight.astro.build/), a documentation framework built on Astro. Key features include: -Creates a link specifically to a C++ class in the API documentation. +- Built-in responsive design +- Automatic dark mode support +- Search functionality via Pagefind +- Sidebar navigation +- Right-hand table of contents +- SEO optimization +- Accessibility features -``` text -{{< apiclass "ClimateDevice" "esphome::climate::ClimateDevice" >}} -{{< apiclass "WiFiComponent" "esphome::wifi::WiFiComponent" >}} -``` +## MDX Format -### `apistruct` +Content is written in [MDX](https://mdxjs.com/), which allows you to use JSX components within Markdown: -Creates a link specifically to a C++ struct in the API documentation. +```mdx +--- +title: "My Page Title" +description: "Page description for SEO" +--- -``` text -{{< apistruct "SensorStateClass" "esphome::sensor::SensorStateClass" >}} -{{< apistruct "GPIOOutputPin" "esphome::output::GPIOOutputPin" >}} -``` +import { Image } from 'astro:assets'; +import myImageImg from './images/my-image.jpg'; -### `api-key-input` +# Heading -Creates an input field with a randomly generated API key and a copy button. +Regular Markdown content here. -``` text -{{< api-key-input >}} +Description ``` -### `ghuser` +## Custom Components -Creates a link to a GitHub user profile. +### Astro Components -``` text -{{< ghuser name="octocat" >}} -{{< ghuser name="octocat" text="GitHub" >}} -``` +Custom components are located in `src/components/` and can be imported into MDX files: -### `html_file` +- **APIRef**: Links to C++ API documentation +- **ImgTable**: Grid of component cards with images +- **Figure**: Images with optional captions +- **Footer**: Custom footer component -Reads a file from the static directory and inserts it as HTML. +### Using Components -``` text -{{< html_file file="example.html" class="example-class" >}} -``` +Import and use components in MDX files: -### `option` +```jsx +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; +import myImageImg from './images/my-image.jpg'; -Creates an option block for documenting command-line options or configuration parameters. + -``` text -{{< option "--help|-h" >}} -This is the help option. -{{< /option >}} +
``` -### `pr` +## Alert Boxes -Creates a link to a GitHub pull request. - -``` text -{{< pr number="123" >}} -{{< pr number="123" repo="esphome-docs" >}} -``` - -### `redirect` - -Creates a page that automatically redirects to another URL. - -``` text -{{< redirect url="/some/path" >}} -``` - -## Markdown features - -### `note` - -Creates a note blockquote/alert box to highlight important information. - -> [!NOTE] -> This is important information that the reader should pay attention to. -> You can include **Markdown** formatting within the block. +Use GitHub-flavored alert syntax for callouts: ```markdown > [!NOTE] -> This is important information that the reader should pay attention to. -> You can include **Markdown** formatting within the block. -``` +> This is important information that readers should pay attention to. -### `important` - -Creates an important blockquote/alert box to highlight helpful information. - -> [!IMPORTANT] -> This is helpful information that the reader should be aware of. -> You can include **Markdown** formatting within the block. - -```markdown > [!IMPORTANT] -> This is helpful information that the reader should be aware of. -> You can include **Markdown** formatting within the block. -``` +> This is helpful information that readers should be aware of. -### `tip` - -Creates a tip blockquote/alert box to highlight helpful advice or best practices. - -> [!TIP] -> For best results, place the sensor away from heat sources. -> You can include **Markdown** formatting within the block. - -```markdown > [!TIP] -> For best results, place the sensor away from heat sources. -> You can include **Markdown** formatting within the block. -``` +> Helpful advice or best practices. -### `warning` - -Creates a warning blockquote/alert box to highlight important warnings or potential issues. - -> [!WARNING] -> Incorrect wiring may damage your device. Double-check connections before powering on. -> You can include **Markdown** formatting within the block. - -```markdown > [!WARNING] -> Incorrect wiring may damage your device. Double-check connections before powering on. -> You can include **Markdown** formatting within the block. -``` +> Important warnings or potential issues. -### `caution` - -Creates a caution blockquote/alert box to highlight important cautions or potential issues. - -> [!CAUTION] -> Incorrect wiring may damage your device. Double-check connections before powering on. -> You can include **Markdown** formatting within the block. - -```markdown > [!CAUTION] -> Incorrect wiring may damage your device. Double-check connections before powering on. -> You can include **Markdown** formatting within the block. +> Critical cautions that could cause damage. ``` -## Conversion Scripts +## Mathematical Expressions -A Python script is included to help with the conversion process from RST: +LaTeX equations are supported using KaTeX: -`script/convert_rst_to_md.py` - Converts Sphinx RST files to Hugo Markdown format -Available options for convert_rst_to_md.py: +Inline math: `$E = mc^2$` -``` text -positional arguments: - input_dir Input directory containing RST files - output_dir Output directory for Markdown files +Block equations: -optional arguments: - --single FILENAME Process a single file (relative to input_dir) - --no-images Skip image processing +```markdown +$$ +\text{formula} = \frac{a}{b} +$$ ``` -The script performs the following operations: - -- Builds an anchor map to maintain internal links -- Converts RST formatting to Markdown -- Processes special directives like notes, warnings, and tips -- Converts RST tables to Markdown format -- Handles image references and copies images to appropriate locations -- Processes inline markup and references - -### Converting a PR that was written with RST - -See the `script/convert-pr.sh` script for converting a PR that was written with RST. - ## Development To run the site locally: -1. Install Hugo: -1. Install NodeJS (simplest way to run pagefind) +1. Install Node.js (v18 or later recommended) 1. Clone this repository -1. Navigate to the repository directory -1. Run `make live-html` -1. Open your browser to +1. Install dependencies: `npm install` +1. Run development server: `npm run dev` +1. Open your browser to `http://localhost:4321/` + +### Available Commands + +```bash +npm run dev # Start development server +npm run build # Build for production +npm run preview # Preview production build locally +npm run astro # Run Astro CLI commands +``` ## Building for Production -See the GitHub workflows in `.github/workflows` +```bash +npm run build +``` + +The built site will be in the `dist/` directory. -The built site will be in the `public` directory. +See the GitHub workflows in `.github/workflows` for CI/CD configuration. ## Contributing @@ -391,9 +213,18 @@ Contributions to improve the documentation are welcome! Please follow these step 1. Fork the repository 1. Create a new branch for your changes -1. Make your changes +1. Make your changes following the conventions described above +1. Test your changes locally with `npm run dev` 1. Submit a pull request +### Image Guidelines + +- Use local imported images for single-use images (one file only) +- Keep multi-use images in `/public/images/` with absolute paths +- All ImgTable images must remain in `/public/images/` +- Use descriptive alt text for accessibility +- Include `layout="constrained"` for responsive images + ## License The ESPHome documentation is licensed under the diff --git a/all_automations.json b/all_automations.json deleted file mode 100644 index a2337ea599..0000000000 --- a/all_automations.json +++ /dev/null @@ -1,522 +0,0 @@ -{ - "actions": [ - "ags10.new_i2c_address", - "ags10.set_zero_point", - "aic3204.set_auto_mute_mode", - "alarm_control_panel.arm_away", - "alarm_control_panel.arm_home", - "alarm_control_panel.arm_night", - "alarm_control_panel.chime", - "alarm_control_panel.disarm", - "alarm_control_panel.pending", - "alarm_control_panel.ready", - "alarm_control_panel.triggered", - "animation.next_frame", - "animation.prev_frame", - "animation.set_frame", - "at581x.reset", - "at581x.settings", - "audio_adc.set_mic_gain", - "audio_dac.mute_off", - "audio_dac.mute_on", - "audio_dac.set_volume", - "binary_sensor.nextion.publish", - "binary_sensor.template.publish", - "bl0906.reset_energy", - "ble.disable", - "ble.enable", - "ble_client.ble_write", - "ble_client.connect", - "ble_client.disconnect", - "ble_client.numeric_comparison_reply", - "ble_client.passkey_reply", - "ble_client.remove_bond", - "ble_server.characteristic.notify", - "ble_server.characteristic.set_value", - "ble_server.descriptor.set_value", - "bluetooth_password.set", - "button.press", - "canbus.send", - "climate.control", - "climate.haier.beeper_off", - "climate.haier.beeper_on", - "climate.haier.display_off", - "climate.haier.display_on", - "climate.haier.health_off", - "climate.haier.health_on", - "climate.haier.power_off", - "climate.haier.power_on", - "climate.haier.power_toggle", - "climate.haier.set_horizontal_airflow", - "climate.haier.set_vertical_airflow", - "climate.haier.start_self_cleaning", - "climate.haier.start_steri_cleaning", - "climate.pid.autotune", - "climate.pid.reset_integral_term", - "climate.pid.set_control_parameters", - "component.resume", - "component.suspend", - "component.update", - "cover.close", - "cover.control", - "cover.open", - "cover.stop", - "cover.template.publish", - "cover.toggle", - "cs5460a.restart", - "datetime.date.set", - "datetime.datetime.set", - "datetime.time.set", - "deep_sleep.allow", - "deep_sleep.enter", - "deep_sleep.prevent", - "delay", - "dfplayer.pause", - "dfplayer.play", - "dfplayer.play_folder", - "dfplayer.play_mp3", - "dfplayer.play_next", - "dfplayer.play_previous", - "dfplayer.random", - "dfplayer.reset", - "dfplayer.set_device", - "dfplayer.set_eq", - "dfplayer.set_volume", - "dfplayer.sleep", - "dfplayer.start", - "dfplayer.stop", - "dfplayer.volume_down", - "dfplayer.volume_up", - "dfrobot_sen0395.reset", - "dfrobot_sen0395.settings", - "display.nextion.set_brightness", - "display.page.show", - "display.page.show_next", - "display.page.show_previous", - "display_menu.down", - "display_menu.enter", - "display_menu.hide", - "display_menu.left", - "display_menu.right", - "display_menu.show", - "display_menu.show_main", - "display_menu.up", - "ds1307.read_time", - "ds1307.write_time", - "esp32_ble_tracker.start_scan", - "esp32_ble_tracker.stop_scan", - "event.trigger", - "ezo_pmp.arbitrary_command", - "ezo_pmp.change_i2c_address", - "ezo_pmp.clear_calibration", - "ezo_pmp.clear_total_volume_dosed", - "ezo_pmp.dose_continuously", - "ezo_pmp.dose_volume", - "ezo_pmp.dose_volume_over_time", - "ezo_pmp.dose_with_constant_flow_rate", - "ezo_pmp.find", - "ezo_pmp.pause_dosing", - "ezo_pmp.set_calibration_volume", - "ezo_pmp.stop_dosing", - "fan.cycle_speed", - "fan.hbridge.brake", - "fan.toggle", - "fan.turn_off", - "fan.turn_on", - "fingerprint_grow.aura_led_control", - "fingerprint_grow.cancel_enroll", - "fingerprint_grow.delete", - "fingerprint_grow.delete_all", - "fingerprint_grow.enroll", - "fingerprint_grow.led_control", - "globals.set", - "grove_tb6612fng.break", - "grove_tb6612fng.change_address", - "grove_tb6612fng.no_standby", - "grove_tb6612fng.run", - "grove_tb6612fng.standby", - "grove_tb6612fng.stop", - "hc8.calibrate", - "homeassistant.action", - "homeassistant.event", - "homeassistant.service", - "homeassistant.tag_scanned", - "http_request.get", - "http_request.post", - "http_request.send", - "htu21d.set_heater", - "htu21d.set_heater_level", - "if", - "lambda", - "light.addressable_set", - "light.control", - "light.dim_relative", - "light.toggle", - "light.turn_off", - "light.turn_on", - "lightwaverf.send_raw", - "lock.lock", - "lock.open", - "lock.template.publish", - "lock.unlock", - "logger.log", - "logger.set_level", - "lvgl.animimg.start", - "lvgl.animimg.stop", - "lvgl.animimg.update", - "lvgl.arc.update", - "lvgl.bar.update", - "lvgl.button.update", - "lvgl.buttonmatrix.update", - "lvgl.canvas.draw_arc", - "lvgl.canvas.draw_image", - "lvgl.canvas.draw_line", - "lvgl.canvas.draw_polygon", - "lvgl.canvas.draw_rectangle", - "lvgl.canvas.draw_text", - "lvgl.canvas.fill", - "lvgl.canvas.set_pixels", - "lvgl.canvas.update", - "lvgl.checkbox.update", - "lvgl.dropdown.update", - "lvgl.image.update", - "lvgl.indicator.update", - "lvgl.keyboard.update", - "lvgl.label.update", - "lvgl.led.update", - "lvgl.line.update", - "lvgl.matrix.button.update", - "lvgl.meter.update", - "lvgl.obj.update", - "lvgl.page.next", - "lvgl.page.previous", - "lvgl.page.show", - "lvgl.pause", - "lvgl.qrcode.update", - "lvgl.resume", - "lvgl.roller.update", - "lvgl.slider.update", - "lvgl.spinbox.decrement", - "lvgl.spinbox.increment", - "lvgl.spinbox.update", - "lvgl.spinner.update", - "lvgl.style.update", - "lvgl.switch.update", - "lvgl.tabview.select", - "lvgl.tabview.update", - "lvgl.textarea.update", - "lvgl.tileview.select", - "lvgl.tileview.update", - "lvgl.update", - "lvgl.widget.disable", - "lvgl.widget.enable", - "lvgl.widget.focus", - "lvgl.widget.hide", - "lvgl.widget.redraw", - "lvgl.widget.show", - "lvgl.widget.update", - "max17043.sleep_mode", - "max6956.set_brightness_global", - "max6956.set_brightness_mode", - "media_player.pause", - "media_player.play", - "media_player.play_media", - "media_player.speaker.play_on_device_media_file", - "media_player.stop", - "media_player.toggle", - "media_player.volume_down", - "media_player.volume_set", - "media_player.volume_up", - "mhz19.abc_disable", - "mhz19.abc_enable", - "mhz19.calibrate_zero", - "micro_wake_word.start", - "micro_wake_word.stop", - "microphone.capture", - "microphone.stop_capture", - "midea_ac.beeper_off", - "midea_ac.beeper_on", - "midea_ac.display_toggle", - "midea_ac.follow_me", - "midea_ac.power_off", - "midea_ac.power_on", - "midea_ac.power_toggle", - "midea_ac.swing_step", - "mixer_speaker.apply_ducking", - "mqtt.disable", - "mqtt.enable", - "mqtt.publish", - "mqtt.publish_json", - "nau7802.calibrate_external_offset", - "nau7802.calibrate_gain", - "nau7802.calibrate_internal_offset", - "number.decrement", - "number.increment", - "number.operation", - "number.set", - "number.to_max", - "number.to_min", - "online_image.release", - "online_image.set_url", - "ota.http_request.flash", - "output.esp8266_pwm.set_frequency", - "output.ledc.set_frequency", - "output.libretiny_pwm.set_frequency", - "output.pipsolar.set_level", - "output.rp2040_pwm.set_frequency", - "output.set_level", - "output.turn_off", - "output.turn_on", - "pcf85063.read_time", - "pcf85063.write_time", - "pcf8563.read_time", - "pcf8563.write_time", - "pmwcs3.air_calibration", - "pmwcs3.new_i2c_address", - "pmwcs3.water_calibration", - "pulse_counter.set_total_pulses", - "pulse_meter.set_total_pulses", - "pzemac.reset_energy", - "pzemdc.reset_energy", - "remote_transmitter.transmit_abbwelcome", - "remote_transmitter.transmit_aeha", - "remote_transmitter.transmit_beo4", - "remote_transmitter.transmit_byronsx", - "remote_transmitter.transmit_canalsat", - "remote_transmitter.transmit_canalsatld", - "remote_transmitter.transmit_coolix", - "remote_transmitter.transmit_dish", - "remote_transmitter.transmit_dooya", - "remote_transmitter.transmit_drayton", - "remote_transmitter.transmit_dyson", - "remote_transmitter.transmit_haier", - "remote_transmitter.transmit_jvc", - "remote_transmitter.transmit_keeloq", - "remote_transmitter.transmit_lg", - "remote_transmitter.transmit_magiquest", - "remote_transmitter.transmit_midea", - "remote_transmitter.transmit_mirage", - "remote_transmitter.transmit_nec", - "remote_transmitter.transmit_nexa", - "remote_transmitter.transmit_panasonic", - "remote_transmitter.transmit_pioneer", - "remote_transmitter.transmit_pronto", - "remote_transmitter.transmit_raw", - "remote_transmitter.transmit_rc5", - "remote_transmitter.transmit_rc6", - "remote_transmitter.transmit_rc_switch_raw", - "remote_transmitter.transmit_rc_switch_type_a", - "remote_transmitter.transmit_rc_switch_type_b", - "remote_transmitter.transmit_rc_switch_type_c", - "remote_transmitter.transmit_rc_switch_type_d", - "remote_transmitter.transmit_roomba", - "remote_transmitter.transmit_samsung", - "remote_transmitter.transmit_samsung36", - "remote_transmitter.transmit_sony", - "remote_transmitter.transmit_toshiba_ac", - "remote_transmitter.transmit_toto", - "repeat", - "rf_bridge.beep", - "rf_bridge.learn", - "rf_bridge.send_advanced_code", - "rf_bridge.send_code", - "rf_bridge.send_raw", - "rf_bridge.start_advanced_sniffing", - "rf_bridge.start_bucket_sniffing", - "rf_bridge.stop_advanced_sniffing", - "rtttl.play", - "rtttl.stop", - "scd30.force_recalibration_with_reference", - "scd4x.factory_reset", - "scd4x.perform_forced_calibration", - "script.execute", - "script.stop", - "script.wait", - "select.first", - "select.last", - "select.next", - "select.operation", - "select.previous", - "select.set", - "select.set_index", - "sen5x.start_fan_autoclean", - "senseair.abc_disable", - "senseair.abc_enable", - "senseair.abc_get_period", - "senseair.background_calibration", - "senseair.background_calibration_result", - "sensor.duty_time.reset", - "sensor.duty_time.start", - "sensor.duty_time.stop", - "sensor.integration.reset", - "sensor.nextion.publish", - "sensor.rotary_encoder.set_value", - "sensor.template.publish", - "servo.detach", - "servo.write", - "sim800l.connect", - "sim800l.dial", - "sim800l.disconnect", - "sim800l.send_sms", - "sim800l.send_ussd", - "speaker.finish", - "speaker.mute_off", - "speaker.mute_on", - "speaker.play", - "speaker.stop", - "speaker.volume_set", - "sprinkler.clear_queued_valves", - "sprinkler.next_valve", - "sprinkler.pause", - "sprinkler.previous_valve", - "sprinkler.queue_valve", - "sprinkler.resume", - "sprinkler.resume_or_start_full_cycle", - "sprinkler.set_divider", - "sprinkler.set_multiplier", - "sprinkler.set_repeat", - "sprinkler.set_valve_run_duration", - "sprinkler.shutdown", - "sprinkler.start_from_queue", - "sprinkler.start_full_cycle", - "sprinkler.start_single_valve", - "sps30.start_fan_autoclean", - "stepper.report_position", - "stepper.set_acceleration", - "stepper.set_deceleration", - "stepper.set_speed", - "stepper.set_target", - "switch.nextion.publish", - "switch.template.publish", - "switch.toggle", - "switch.turn_off", - "switch.turn_on", - "tag.emulation_off", - "tag.emulation_on", - "tag.polling_off", - "tag.polling_on", - "tag.set_clean_mode", - "tag.set_emulation_message", - "tag.set_format_mode", - "tag.set_read_mode", - "tag.set_write_message", - "tag.set_write_mode", - "text.set", - "text_sensor.nextion.publish", - "text_sensor.template.publish", - "tm1651.set_brightness", - "tm1651.set_level", - "tm1651.set_level_percent", - "tm1651.turn_off", - "tm1651.turn_on", - "uart.write", - "ufire_ec.calibrate_probe", - "ufire_ec.reset", - "ufire_ise.calibrate_probe_high", - "ufire_ise.calibrate_probe_low", - "ufire_ise.reset", - "update.perform", - "valve.close", - "valve.control", - "valve.open", - "valve.stop", - "valve.template.publish", - "valve.toggle", - "voice_assistant.start", - "voice_assistant.start_continuous", - "voice_assistant.stop", - "wait_until", - "while", - "wifi.configure", - "wifi.disable", - "wifi.enable", - "wireguard.disable", - "wireguard.enable" - ], - "conditions": [ - "alarm_control_panel.is_armed", - "alarm_control_panel.ready", - "all", - "and", - "any", - "api.connected", - "binary_sensor.is_off", - "binary_sensor.is_on", - "ble.enabled", - "dfplayer.is_playing", - "display.is_displaying_page", - "display_menu.is_active", - "fan.is_off", - "fan.is_on", - "for", - "lambda", - "light.is_off", - "light.is_on", - "lock.is_locked", - "lock.is_unlocked", - "lvgl.is_idle", - "lvgl.is_paused", - "lvgl.page.is_showing", - "media_player.is_announcing", - "media_player.is_idle", - "media_player.is_paused", - "media_player.is_playing", - "micro_wake_word.is_running", - "microphone.is_capturing", - "mqtt.connected", - "not", - "number.in_range", - "or", - "pn532.is_writing", - "pn7150.is_writing", - "pn7160.is_writing", - "rtttl.is_playing", - "script.is_running", - "sensor.duty_time.is_not_running", - "sensor.duty_time.is_running", - "sensor.in_range", - "speaker.is_playing", - "speaker.is_stopped", - "sun.is_above_horizon", - "sun.is_below_horizon", - "switch.is_off", - "switch.is_on", - "text_sensor.state", - "time.has_time", - "update.is_available", - "voice_assistant.connected", - "voice_assistant.is_running", - "wifi.connected", - "wifi.enabled", - "wireguard.enabled", - "wireguard.peer_online", - "xor" - ], - "pin_providers": [ - "bk72xx", - "ch422g", - "ch423", - "esp32", - "esp8266", - "host", - "ln882x", - "max6956", - "mcp23016", - "mcp23xxx", - "mpr121", - "pca6416a", - "pca9554", - "pcf8574", - "rp2040", - "rtl87xx", - "sn74hc165", - "sn74hc595", - "sx1509", - "tca9555", - "wk2168_i2c", - "wk2168_spi", - "wk2212_i2c", - "wk2212_spi", - "xl9535" - ] -} diff --git a/astro.config.mjs b/astro.config.mjs new file mode 100644 index 0000000000..31f5d5bffe --- /dev/null +++ b/astro.config.mjs @@ -0,0 +1,305 @@ +import { defineConfig } from "astro/config"; +import starlight from "@astrojs/starlight"; +import sitemap from "@astrojs/sitemap"; +import starlightBlog from "starlight-blog"; +import { fileURLToPath } from "url"; +import path from "path"; +import fs from "fs"; +import { imageBreakpoints } from "./src/lib/breakpoints.ts"; +import { remarkAlert } from "remark-github-blockquote-alert"; +import remarkMath from "remark-math"; +import rehypeKatex from "rehype-katex"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// Generate changelog sidebar items sorted newest to oldest +function getChangelogItems() { + const changelogDir = path.join(__dirname, "src/content/docs/changelog"); + const files = fs.readdirSync(changelogDir).filter((f) => f.endsWith(".mdx")); + + const versions = files + .map((f) => { + const filePath = path.join(changelogDir, f); + const content = fs.readFileSync(filePath, "utf-8"); + const titleMatch = content.match(/^title:\s*["']?([^"'\n]+)["']?/m); + const label = titleMatch ? titleMatch[1] : f.replace(".mdx", ""); + + // v1.x.x format + const match = f.match(/^v(\d+)\.(\d+)\.(\d+)\.mdx$/); + if (match) { + const [, major, minor, patch] = match; + const sortValue = + parseInt(major) * 10000 + parseInt(minor) * 100 + parseInt(patch); + const slug = `v${major}.${minor}.${patch}`; + return { label, slug, sortValue }; + } + // 2021.x.x format + const match2 = f.match(/^(\d{4})\.(\d+)\.(\d+)\.mdx$/); + if (match2) { + const [, year, month, patch] = match2; + const sortValue = + parseInt(year) * 10000 + parseInt(month) * 100 + parseInt(patch); + const slug = `${year}.${month}.${patch}`; + return { label, slug, sortValue }; + } + return null; + }) + .filter(Boolean); + + // Sort descending (newest first) + versions.sort((a, b) => b.sortValue - a.sortValue); + + return versions.map((v) => ({ + label: v.label, + link: `/changelog/${v.slug}/`, + })); +} + +// Get the latest changelog version for redirects +function getLatestChangelog() { + const changelogDir = path.join(__dirname, "src/content/docs/changelog"); + const files = fs + .readdirSync(changelogDir) + .filter((f) => f.endsWith(".mdx") && f !== "index.mdx"); + + let latest = { sortValue: 0, slug: "" }; + for (const f of files) { + const match = f.match(/^(\d{4})\.(\d+)\.(\d+)\.mdx$/); + if (match) { + const [, year, month, patch] = match; + const sortValue = + parseInt(year) * 10000 + parseInt(month) * 100 + parseInt(patch); + if (sortValue > latest.sortValue) { + latest = { sortValue, slug: `${year}.${month}.${patch}` }; + } + } + } + return latest.slug; +} + +// Generate component sidebar items with proper labels +function getComponentItems() { + const componentsDir = path.join(__dirname, "src/content/docs/components"); + const entries = fs.readdirSync(componentsDir, { withFileTypes: true }); + const items = []; + + for (const entry of entries) { + if (entry.name === "images" || entry.name === "index.mdx") continue; + + if (entry.isFile() && entry.name.endsWith(".mdx")) { + const filePath = path.join(componentsDir, entry.name); + const content = fs.readFileSync(filePath, "utf-8"); + const titleMatch = content.match(/^title:\s*["']?([^"'\n]+)["']?/m); + const label = titleMatch ? titleMatch[1] : entry.name.replace(".mdx", ""); + const slug = entry.name.replace(".mdx", ""); + items.push({ + label, + link: `/components/${slug}/`, + sort: label.toLowerCase(), + }); + } else if (entry.isDirectory()) { + const dirPath = path.join(componentsDir, entry.name); + const indexPath = path.join(dirPath, "index.mdx"); + + let groupLabel = entry.name + .replace(/_/g, " ") + .replace(/\b\w/g, (c) => c.toUpperCase()); + if (fs.existsSync(indexPath)) { + const content = fs.readFileSync(indexPath, "utf-8"); + const titleMatch = content.match(/^title:\s*["']?([^"'\n]+)["']?/m); + if (titleMatch) groupLabel = titleMatch[1]; + } + + const subFiles = fs + .readdirSync(dirPath) + .filter((f) => f.endsWith(".mdx")); + const subItems = []; + for (const f of subFiles) { + const subPath = path.join(dirPath, f); + const content = fs.readFileSync(subPath, "utf-8"); + const titleMatch = content.match(/^title:\s*["']?([^"'\n]+)["']?/m); + const label = titleMatch ? titleMatch[1] : f.replace(".mdx", ""); + const slug = f === "index.mdx" ? "" : f.replace(".mdx", "") + "/"; + const item = { label, link: `/components/${entry.name}/${slug}` }; + if (f === "index.mdx") { + subItems.unshift(item); + } else { + subItems.push(item); + } + } + + items.push({ + label: groupLabel, + collapsed: true, + items: subItems, + sort: groupLabel.toLowerCase(), + }); + } + } + + items.sort((a, b) => a.sort.localeCompare(b.sort)); + return items.map(({ sort, ...item }) => item); +} + +const latestChangelog = getLatestChangelog(); + +export default defineConfig({ + site: "https://esphome.io", + redirects: { + "/changelog/": `/changelog/${latestChangelog}/`, + "/changelog/index/": `/changelog/${latestChangelog}/`, + }, + vite: { + resolve: { + alias: { + "@components": path.resolve(__dirname, "./src/components"), + }, + }, + }, + image: { + breakpoints: imageBreakpoints, + responsiveStyles: true, + }, + markdown: { + remarkPlugins: [remarkAlert, remarkMath], + rehypePlugins: [rehypeKatex], + }, + integrations: [ + starlight({ + title: "ESPHome - Smart Home Made Simple", + titleDelimiter: "-", + favicon: "/favicon.ico", + pagination: false, + plugins: [ + //starlightBlog({ + // title: 'Blog', + //}), + ], + logo: { + light: "./src/assets/logo-dark.svg", + dark: "./src/assets/logo-light.svg", + replacesTitle: true, + }, + social: [ + { + icon: "github", + label: "GitHub", + href: "https://github.com/esphome/esphome", + }, + { + icon: "discord", + label: "Discord", + href: "https://discord.gg/KhAMKrd", + }, + ], + editLink: { + baseUrl: "https://github.com/esphome/esphome-docs/edit/current/", + }, + components: { + Footer: "./src/components/Footer.astro", + }, + customCss: ["./src/styles/custom.css", "katex/dist/katex.min.css"], + sidebar: [ + { + label: "Getting Started", + items: [ + { + label: "From Home Assistant", + link: "/guides/getting_started_hassio/", + }, + { + label: "Using Command Line", + link: "/guides/getting_started_command_line/", + }, + { label: "Ready-Made Projects", link: "/projects/" }, + { + label: "Migrate from Tasmota", + link: "/guides/migrate_sonoff_tasmota/", + }, + { label: "FAQ and Tips", link: "/guides/faq/" }, + ], + }, + { label: "Components", link: "/components/" }, + { + label: "All Components", + collapsed: true, + items: getComponentItems(), + }, + { + label: "Automations", + collapsed: true, + autogenerate: { directory: "automations" }, + }, + { + label: "Guides", + collapsed: true, + autogenerate: { directory: "guides" }, + }, + { + label: "Cookbook", + collapsed: true, + autogenerate: { directory: "cookbook" }, + }, + { + label: "Keeping Up", + items: [ + //{ label: "Blog", link: "/blog/" }, + { label: "Changelog", link: "/changelog/" }, + { label: "Discord", link: "https://discord.gg/KhAMKrd" }, + { + label: "Forums", + link: "https://community.home-assistant.io/c/esphome/", + }, + { label: "Development", link: "https://developers.esphome.io" }, + { label: "Supporters", link: "/guides/supporters/" }, + ], + }, + { + label: "Changelog", + collapsed: true, + items: getChangelogItems(), + }, + ], + head: [ + { + tag: "link", + attrs: { + rel: "icon", + href: "/favicon.ico", + }, + }, + { + tag: "script", + content: `document.addEventListener('keydown', function(e) { + if (e.key === '/' && !['INPUT', 'TEXTAREA', 'SELECT'].includes(document.activeElement?.tagName)) { + e.preventDefault(); + document.querySelector('button[data-open-modal]')?.click(); + } + });`, + }, + { + tag: "meta", + attrs: { + property: "og:image", + content: "https://esphome.io/images/logo.svg", + }, + }, + { + tag: "meta", + attrs: { + name: "twitter:image", + content: "https://esphome.io/images/logo.svg", + }, + }, + { + tag: "meta", + attrs: { + name: "twitter:card", + content: "summary_large_image", + }, + }, + ], + }), + sitemap(), + ], +}); diff --git a/build_automations_pages.py b/build_automations_pages.py deleted file mode 100644 index 150deb3b43..0000000000 --- a/build_automations_pages.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import json - -if __name__ == "__main__": - file_name = "all_automations.json" - arg_choices = ["actions", "conditions", "pin_providers"] - - parser = argparse.ArgumentParser() - parser.add_argument( - "-t", - "--type", - choices=arg_choices, - help="Automation type to extract ('actions', 'conditions', 'pin_providers')", - ) - args = parser.parse_args() - - with open(file_name) as json_file: - raw_json = json.load(json_file) - - if args.type not in arg_choices: - print("Unrecognized automation type") - exit() - - automation_list = raw_json[args.type] - - component_dict = {} - - for item in automation_list: - parts = item.split(".") - if len(parts) == 2: - if parts[0] not in component_dict: - component_dict[parts[0]] = [] - component_dict[parts[0]].append(parts[1]) - - out_str = "" - - for comp, autos in component_dict.items(): - out_str += f"- **{comp}:** " - for item in autos: - out_str += f"``{item}``, " - out_str = out_str[:-2] + "\n" - - print(out_str) diff --git a/content/_index.md b/content/_index.md deleted file mode 100644 index e333fbb688..0000000000 --- a/content/_index.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -description: "Smart Home Made Simple. ESPHome turns ESP32, ESP8266, and RP2040 microcontrollers into fully-featured smart home devices." -title: "ESPHome - Smart Home Made Simple" -params: - seo: - description: ESPHome - Smart Home Made Simple. ESPHome turns ESP32, ESP8266, and RP2040 microcontrollers into fully-featured smart home devices. - image: logo.svg ---- - -## What is ESPHome? - -ESPHome is an open-source firmware framework that simplifies the process of creating custom firmware for popular -WiFi-enabled microcontrollers. With ESPHome, you can: - -* **Create custom smart home devices** using simple YAML configuration files -* **Integrate seamlessly with Home Assistant** for a unified smart home experience -* **Control and monitor** your devices through multiple interfaces (web, API, MQTT) -* **Automate your home** with powerful on-device automations -* **Update your devices wirelessly** "Over The Air" (OTA) updates without physical access - -ESPHome takes care of the complex parts of firmware development, allowing you to focus on what matters - building your -smart home exactly how you want it. - -{{< feature-grid >}} -[ - { - "icon": "code", - "title": "No Coding Required", - "description": "Simple YAML configuration files instead of complex C++ code" - }, - { - "icon": "wifi", - "title": "Wireless Updates", - "description": "Update your devices over-the-air without physical access" - }, - { - "icon": "puzzle-piece", - "title": "Modular Design", - "description": "Support for hundreds of sensors, displays, and other components" - }, - { - "icon": "shield-alt", - "title": "Local Control", - "description": "Devices work locally without cloud dependencies" - } -] -{{< /feature-grid >}} -{{< anchor "who-uses-esphome" >}} - -## Who Uses ESPHome? - -{{< feature-grid >}} -[ - { - "icon": "user-cog", - "title": "DIY Enthusiasts", - "description": "Create custom sensors, switches, and displays tailored to specific needs" - }, - { - "icon": "home", - "title": "Smart Home Hobbyists", - "description": "Extend their home automation systems with affordable custom devices" - }, - { - "icon": "briefcase", - "title": "Professional Integrators", - "description": "Deploy reliable, locally-controlled smart devices for clients" - }, - { - "icon": "industry", - "title": "Manufacturers", - "description": "Create [Made for ESPHome](/guides/made_for_esphome) certified products with standardized firmware" - } -] -{{< /feature-grid >}} - -## Which microcontrollers does ESPHome support? - -{{< feature-grid >}} -[ - { - "icon": "microchip", - "title": "Espressif ESP32 and ESP8266", - "description": "Wide support for ESP32 and ESP8266 microcontrollers, the heart of many IoT projects." - }, - { - "icon": "raspberry-pi", - "title": "RP2040", - "description": "Support for Raspberry Pi's RP2040 microcontroller." - }, - { - "icon": "bolt", - "title": "Others", - "description": "Nordic Semiconductor nRF52, Realtek RTL87xx, and Beken BK72xx chips are supported." - }, - { - "icon": "computer", - "title": "Desktop", - "description": "Many ESPHome components can be run on a desktop computer using the *host* platform!" - } -] -{{< /feature-grid >}} -{{< anchor "getting-started" >}} - -## Getting Started - -Getting started with ESPHome is easy. Choose the method that works best for you: - -{{< getting-started-grid >}} -[ - { - "icon": "home-assistant", - "title": "From Home Assistant", - "description": "The easiest way to get started with ESPHome is through the Home Assistant add-on.", - "steps": [], - "url": "/guides/getting_started_hassio/", - "button_text": "Home Assistant Guide" - }, - { - "icon": "terminal", - "title": "Command Line", - "description": "For advanced users who prefer working with the command line.", - "steps": [], - "url": "/guides/getting_started_command_line/", - "button_text": "Command Line Guide" - }, - { - "icon": "puzzle-piece", - "title": "Ready-Made Projects", - "description": "Start with a pre-configured project for common use cases.", - "steps": [], - "url": "/projects/", - "button_text": "Browse Projects" - } -] -{{< /getting-started-grid >}} diff --git a/content/changelog/2021.10.0.md b/content/changelog/2021.10.0.md deleted file mode 100644 index 3b615e7c7c..0000000000 --- a/content/changelog/2021.10.0.md +++ /dev/null @@ -1,426 +0,0 @@ ---- -description: "Changelog for ESPHome 2021.10.0." -title: "ESPHome 2021.10.0 - 20th October 2021" -params: - seo: - description: Changelog for ESPHome 2021.10.0. - image: /_static/changelog-2021.10.0.png ---- - -{{< imgtable >}} -"AirThings Wave Mini","components/sensor/airthings_ble","airthings_logo.png","" -"Current-Based Cover","components/cover/current_based","flash.svg","dark-invert" -"Daly BMS","components/sensor/daly_bms","daly_bms.jpg","" -"EPEVER Tracer","cookbook/tracer-an","tracer-an.jpg","" -"LTR390","components/sensor/ltr390","ltr390.jpg","" -"Modbus Controller","components/modbus_controller","modbus.png","" -"Safe Mode Switch","components/switch/safe_mode","restart-alert.svg","dark-invert" -"SCD4X","components/sensor/scd4x","scd4x.jpg","" -"Tuya Cover","components/cover/tuya","tuya.png","" -{{< /imgtable >}} - -Learn from the creators about the new encryption, support for any ESP32 variant and how Otto came up with ESPHome - - - - -## ESP-IDF - -A huge effort has been put into reorganising, restructuring and rewriting a whole lot of code -to allow ESP32 based boards to be compiled using ESP-IDF as the framework instead of Arduino. -This allows ESPHome to keep up with new features and support for new ESP32 based chips -that Espressif add to the ESP-IDF, such as the ESP32-C3 that a lot of people had been asking about. - -There are known issues and specific components that are missing support for ESP-IDF as those ones rely -on an Arduino library and need more time to be rewritten in a compatible way. - -The new documentation is here at {{< docref "/components/esp32" >}}. - -If you come across an issue while switching to ESP-IDF, please file an -[issue on GitHub](https://github.com/esphome/esphome/issues/new/choose) -using the `ESP32-IDF` option as the platform. - -## Dashboard Node Import - -If you intend on creating and distributing devices preinstalled with ESPHome, check out {{< docref "/guides/creators" >}} -for more information and the best ways to give the end users the best experience. - -The newest feature of this set is the importing of devices found on the network. If the device is running -ESPHome 2021.10 or newer, it can be configured to broadcast a url via mDNS and the ESPHome dashboard will pick this up -and prompt the user to import the device and create a minimal configuration for it. - -## Modbus Controller - -Support for generic modbus device data has been added. This allows you as a user -to get data and control a modbus device without a native ESPHome component. Although a -native component is still better and preferred if it exists. - -- {{< docref "/components/modbus_controller" "Modbus Controller" >}} -- {{< docref "/components/sensor/modbus_controller" "Sensors" >}} -- {{< docref "/components/binary_sensor/modbus_controller" "Binary Sensors" >}} -- {{< docref "/components/text_sensor/modbus_controller" "Text Sensors" >}} -- {{< docref "/components/number/modbus_controller" "Numbers" >}} -- {{< docref "/components/switch/modbus_controller" "Switches" >}} -- {{< docref "/components/output/modbus_controller" "Outputs" >}} - -## Text Sensor filters - -`text_sensors` now have `filters` that allow you to do string manipulation before the value is -given to the frontend. Check out the [docs here](/components/text_sensor#text_sensor-filters). - -## Lighting - -The Tuya light platform now supports RGB and HSV datapoints for those TuyaMCU based lights. - -Partitions now support adding non-addressable lights into the sequence. As an example you -could build a "fake" addressable light from regular rgb leds. - -## Graphs - -There is new [Graph](/components/graph#display-graphs) building functions for displays that will allow you to -draw the history of sensors over time. See the docs for examples and images on what this looks like. - -## `wait_until` - -The `wait_until` action now has an optional `timeout` option that lets you continue or cancel (using an -if action afterwards) your automations if the condition does not become true after a period of time. - -## Combination of MiScale 1 & 2 - -{{< pr number="2266" repo="esphome" >}} combines the two miscale platforms into one as the code was mostly the -same and autodetection could be done to detemine which one you are using. - -## Float Output state changes - -When using a float output with both invert and min/max values, prevously -the end resut value was being calculated incorrectly. {{< pr number="2368" repo="esphome" >}} fixed this. - - - -## Release 2021.10.1 - October 21 - -- Fix MDNS for ESP8266 devices {{< pr number="2571" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix ESP8266 GPIO0 Pullup Validation {{< pr number="2572" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix wifi ble coexistence check {{< pr number="2573" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Arduino global delay/millis/... symbols workaround {{< pr number="2575" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix ESP8266 OTA adds unnecessary Update library {{< pr number="2579" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix ESP8266 dallas GPIO16 INPUT_PULLUP {{< pr number="2581" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix platformio version in Dockerfile doesn't match requirements {{< pr number="2582" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix platformio_install_deps no longer installing all lib_deps {{< pr number="2584" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} - -## Release 2021.10.2 - October 22 - -- Fix HeatpumpIR pin {{< pr number="2585" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix PlatformIO version for latest Arduino framework {{< pr number="2590" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix pin/component switchup in SX1509 pin configuration {{< pr number="2593" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix old-style `arduino_version` on ESP8266 and with magic values {{< pr number="2591" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump esphome-dashboard from 20211021.0 to 20211021.1 {{< pr number="2594" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix validation of addressable light IDs {{< pr number="2588" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix socket connection closed not detected {{< pr number="2587" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump noise-c from 0.1.3 to 0.1.4 {{< pr number="2602" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add OTA upload compression for ESP8266 {{< pr number="2601" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Re-raise keyboardinterrupt {{< pr number="2603" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add owner to all libraries used {{< pr number="2604" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix compiler warnings and update platformio line filter {{< pr number="2607" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix ESP8266 OTA compression only starting framework v2.7.0 {{< pr number="2610" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bugfix tca9548a and idf refactor anh {{< pr number="2612" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} - -## Release 2021.10.3 - October 27 - -- fixed dependency for pca9685 component {{< pr number="2614" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} -- Bump platform-espressif8266 from 2.6.2 to 2.6.3 {{< pr number="2620" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Autodetect flash size {{< pr number="2615" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Teleinfo ptec {{< pr number="2599" repo="esphome" >}} by {{< ghuser name="0hax" >}} -- Fix glue code missing micros() {{< pr number="2623" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Remove power and energy from sensors that are not true power {{< pr number="2628" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix modbus output {{< pr number="2630" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix pin number validation for sn74hc595 {{< pr number="2621" repo="esphome" >}} by {{< ghuser name="sairon" >}} -- Fix select.set using lambda {{< pr number="2633" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- Added graphing component {{< pr number="2109" repo="esphome" >}} by {{< ghuser name="synco" >}} (new-integration) (new-feature) -- Add deep sleep wakeup from touch (#1238) {{< pr number="2281" repo="esphome" >}} by {{< ghuser name="chrta" >}} (new-feature) -- Allow non-addressable lights in light partitions {{< pr number="2256" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (new-feature) -- Add support for Waveshare 7.5 inch (C) bichromatic display (black-and-white only for now) {{< pr number="1844" repo="esphome" >}} by {{< ghuser name="pixelspark" >}} (new-feature) -- Wifi scan results {{< pr number="1605" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} (new-feature) -- Add SSD1305 support to SSD1306 integration along with few new options {{< pr number="1902" repo="esphome" >}} by {{< ghuser name="zhangjingye03" >}} (new-feature) (breaking-change) -- Adds light sensor support for b-parasites {{< pr number="2391" repo="esphome" >}} by {{< ghuser name="rbaron" >}} (new-feature) -- Tuya rgb support {{< pr number="2278" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} (new-feature) -- add fan.cycle_speed action {{< pr number="2329" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (new-feature) -- Add cover toggle support {{< pr number="1809" repo="esphome" >}} by {{< ghuser name="dtmuller" >}} (new-feature) -- Support HSV-based color support on tuya light {{< pr number="2400" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} (new-feature) -- String manipulation filters for text sensors! {{< pr number="2393" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (new-feature) -- Add optional timeout for wait_until action {{< pr number="2282" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Added graphing component {{< pr number="2109" repo="esphome" >}} by {{< ghuser name="synco" >}} (new-integration) (new-feature) -- Configurable Flash Write Interval {{< pr number="2119" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} (new-integration) -- Add support for Daly Smart BMS {{< pr number="2156" repo="esphome" >}} by {{< ghuser name="s1lvi0" >}} (new-integration) -- Add support for LTR390 {{< pr number="1505" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- Modbus controller {{< pr number="1779" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Dashboard node import and render in browser {{< pr number="2374" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- Add Current based cover {{< pr number="1439" repo="esphome" >}} by {{< ghuser name="djwmarcx" >}} (new-integration) -- Add support for SCD4X {{< pr number="2217" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- Add support for Airthing Wave Mini {{< pr number="2440" repo="esphome" >}} by {{< ghuser name="ncareau" >}} (new-integration) -- Add Safe Mode Restart Switch {{< pr number="2437" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (new-integration) -- Added heatpumpir support {{< pr number="1343" repo="esphome" >}} by {{< ghuser name="rob-deutsch" >}} (new-integration) -- OTA firmware MD5 check + password support for esp-idf {{< pr number="2507" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-integration) - -### Breaking Changes - -- Combine code of xiaomi_miscale and xiaomi_miscale2 {{< pr number="2266" repo="esphome" >}} by {{< ghuser name="edenhaus" >}} (breaking-change) -- Correctly invert the float output state {{< pr number="2368" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add SSD1305 support to SSD1306 integration along with few new options {{< pr number="1902" repo="esphome" >}} by {{< ghuser name="zhangjingye03" >}} (new-feature) (breaking-change) -- Disable dependency finder on ESP32 {{< pr number="2435" repo="esphome" >}} by {{< ghuser name="agners" >}} (breaking-change) - -### Beta Fixes - -- Fix light state remaining on after turn off with transition {{< pr number="2509" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix: Light flash not restoring previous LightState {{< pr number="2383" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Disallow using UART2 for logger on ESP-32 variants that lack it {{< pr number="2510" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix BME680_BSEC compilation issue with ESP32 {{< pr number="2516" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- add missing include in sgp30 {{< pr number="2517" repo="esphome" >}} by {{< ghuser name="dmitriy5181" >}} -- Fix: Color modes not being correctly used in light partitions {{< pr number="2513" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Add pressure compensation during runtime {{< pr number="2493" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Don't define UART_SELECTION_UART2 when UART2 is unavailable {{< pr number="2512" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove BME680_BSEC test {{< pr number="2518" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Fix Nextion HTTPClient error for ESP32 {{< pr number="2524" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix bug in register name definition {{< pr number="2526" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- OTA firmware MD5 check + password support for esp-idf {{< pr number="2507" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-integration) -- Replace framework version_hint with source option {{< pr number="2529" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix bitshift on read in ADE7953 {{< pr number="2537" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Allow downloading all bin files from backend in dashboard {{< pr number="2514" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump dashboard to 20211015.0 {{< pr number="2525" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Only show timestamp for dashboard access logs {{< pr number="2540" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix const used for IDF recommended version {{< pr number="2542" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix Bluetooth setup_priorities {{< pr number="2458" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Autodetect ESP32 variant {{< pr number="2530" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump dashboard to 20211019.0 {{< pr number="2549" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix ADC pin validation on ESP32-C3 {{< pr number="2551" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- ignore exception when not waiting for a response {{< pr number="2552" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Bump dashboard to 20211020.0 {{< pr number="2556" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix HA addon so it does not have logout button {{< pr number="2558" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211020.1 {{< pr number="2559" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- A few esp32_ble_server/improv fixes {{< pr number="2562" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211021.0 {{< pr number="2564" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move running process log line to debug level {{< pr number="2565" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Revert nextion clang-tidy changes {{< pr number="2566" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} - -### All changes - -- Drop obsolete comments from CONTRIBUTING.md {{< pr number="2271" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Support inverting color temperature on tuya lights {{< pr number="2277" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} -- Untangle core headers (part 1) {{< pr number="2276" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Compatibility with clang-tidy v14 {{< pr number="2272" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Store strings only used for logging in flash {{< pr number="2274" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Expose select on Frontend `web_server:` {{< pr number="2245" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Fix devcontainer scripts on Windows {{< pr number="2239" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} -- Fix SM300D2 sensor component routines so they correctly read the sensor output {{< pr number="2159" repo="esphome" >}} by {{< ghuser name="jamesbraid" >}} -- Bump tzlocal from 2.1 to 3.0 {{< pr number="2154" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Activate owning-memory clang-tidy check {{< pr number="1891" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix issue #2054. PZEM004T Component doesn't set the module address. {{< pr number="1784" repo="esphome" >}} by {{< ghuser name="0x3333" >}} -- Convert st7735.h to use LF line endings {{< pr number="2287" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add esphal.h include to inkplate6 component {{< pr number="2286" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Revert "Bump tzlocal from 2.1 to 3.0 (#2154)" {{< pr number="2289" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Run clang-tidy against ESP32 {{< pr number="2147" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Run clang-tidy against Arduino 3 {{< pr number="2146" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump click from 7.1.2 to 8.0.1 {{< pr number="1824" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add stale/lock bots {{< pr number="2299" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Use standard version of make_unique when available {{< pr number="2292" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bug fix of NFC message & records becoming inaccessible in on_tag lambdas {{< pr number="2309" repo="esphome" >}} by {{< ghuser name="JonasEr" >}} -- Dsmr updates {{< pr number="2157" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Support direct relay state feedback for tuya climate component {{< pr number="1668" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- ac_dimmer increase gate time for robotdyn {{< pr number="1708" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Bump aioesphomeapi from 9.0.0 to 9.1.0 {{< pr number="2306" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 21.8b0 to 21.9b0 {{< pr number="2305" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add namespace to all PlatformIO library references {{< pr number="2296" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Allow transforms and flashes to not update remote_values {{< pr number="2313" repo="esphome" >}} by {{< ghuser name="matthewmazzanti" >}} -- Reduce stale/lock gh actions interval {{< pr number="2341" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add `esp8266_disable_ssl_support:` config option {{< pr number="2236" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Bump pylint from 2.10.2 to 2.11.1 {{< pr number="2334" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add eco mode to tuya climate component {{< pr number="1860" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Fix SPIDevice::write_byte16 to actually take a 16 bit argument {{< pr number="2345" repo="esphome" >}} by {{< ghuser name="lgugelmann" >}} -- Redo docker build system with buildkit+multi-stage and cache pio packages {{< pr number="2338" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Calculating the AC only component of the samples {{< pr number="1906" repo="esphome" >}} by {{< ghuser name="synco" >}} -- Fix error reporting for DHT bit read loop {{< pr number="2344" repo="esphome" >}} by {{< ghuser name="besteru" >}} -- Also run docker CI when requirements change {{< pr number="2347" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Added graphing component {{< pr number="2109" repo="esphome" >}} by {{< ghuser name="synco" >}} (new-integration) (new-feature) -- Properly calculate negative temperatures in sm300d2 {{< pr number="2335" repo="esphome" >}} by {{< ghuser name="poptix" >}} -- Fix docker release deploy push flag {{< pr number="2348" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add invert_colors option for st7735 {{< pr number="2327" repo="esphome" >}} by {{< ghuser name="g5pw" >}} -- Add deep sleep wakeup from touch (#1238) {{< pr number="2281" repo="esphome" >}} by {{< ghuser name="chrta" >}} (new-feature) -- Add ESPHOME_VERSION_CODE define {{< pr number="2324" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Install python requirements after apt ones for better caching {{< pr number="2349" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Introduce call_dump_config() indirection {{< pr number="2325" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- ESP-IDF support and generic target platforms {{< pr number="2303" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- CI cache only restore from direct matches {{< pr number="2351" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- fixes compilation error in rtttl {{< pr number="2357" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix MDNS not registered {{< pr number="2359" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix src_filter in platformio.ini after src_dir change {{< pr number="2353" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix duplicate defines and restore alphabetical order {{< pr number="2352" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Configurable Flash Write Interval {{< pr number="2119" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} (new-integration) -- Fix OTA password mismatch error. {{< pr number="2363" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Allow compilation against IDF from repository {{< pr number="2355" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix ESP8266 preferences not set up {{< pr number="2362" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix ESP8266 preference loading {{< pr number="2367" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Allow non-addressable lights in light partitions {{< pr number="2256" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (new-feature) -- add = to default font glpyh list {{< pr number="2361" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} -- Fix docker pio settings not applied {{< pr number="2370" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix OTA crash during reading of new bin file. {{< pr number="2366" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix Dallas parent not being set {{< pr number="2369" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Discard SenseAir S8 commands echoes & fix calibration result check {{< pr number="2358" repo="esphome" >}} by {{< ghuser name="nmaggioni" >}} -- Add support for Daly Smart BMS {{< pr number="2156" repo="esphome" >}} by {{< ghuser name="s1lvi0" >}} (new-integration) -- Combine code of xiaomi_miscale and xiaomi_miscale2 {{< pr number="2266" repo="esphome" >}} by {{< ghuser name="edenhaus" >}} (breaking-change) -- Add support for Waveshare 7.5 inch (C) bichromatic display (black-and-white only for now) {{< pr number="1844" repo="esphome" >}} by {{< ghuser name="pixelspark" >}} (new-feature) -- ili9341: use larger SPI transfers {{< pr number="1628" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- Correctly invert the float output state {{< pr number="2368" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add support for LTR390 {{< pr number="1505" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- Allow sloppy Tuya datapoint message length {{< pr number="1982" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Mqtt topics to support numeric fan speed {{< pr number="1859" repo="esphome" >}} by {{< ghuser name="wifwucite" >}} -- Wifi scan results {{< pr number="1605" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} (new-feature) -- Add SSD1305 support to SSD1306 integration along with few new options {{< pr number="1902" repo="esphome" >}} by {{< ghuser name="zhangjingye03" >}} (new-feature) (breaking-change) -- Fix broken compilation due to conflict between #1237 and IDF changes {{< pr number="2372" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Don't generate IDs with the name of loaded integrations {{< pr number="2373" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- fix i2c scanning eror for Arduino {{< pr number="2364" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Bump tzlocal from 2.1 to 3.0 {{< pr number="2294" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- ledc: do not try to write_state to an uninitialized output {{< pr number="1732" repo="esphome" >}} by {{< ghuser name="toelke" >}} -- Fix two i2c error code return errors {{< pr number="2375" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix ir_climate on ESP32-C3 {{< pr number="2314" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Fix ESP8266 ADC {{< pr number="2376" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Fix: Pin flags code generation returning FLAG_NONE {{< pr number="2377" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Add missing MockObj operators {{< pr number="2378" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix esp-idf pinmask bit-shift overflow {{< pr number="2380" repo="esphome" >}} by {{< ghuser name="chrta" >}} -- Add i2c bus recovery during initialization {{< pr number="2379" repo="esphome" >}} by {{< ghuser name="chrta" >}} -- Bump voluptuous from 0.12.1 to 0.12.2 {{< pr number="2381" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Read unencrypted DSMR telegrams in chunks {{< pr number="2382" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix clang-tidy header filter {{< pr number="2385" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix InterruptLock on ESP-IDF {{< pr number="2388" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix some issues with wifi driver after IDF refactor {{< pr number="2387" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix arduino esp32 wifi v2 {{< pr number="2389" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Misc fixes for esp-idf {{< pr number="2386" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Adds light sensor support for b-parasites {{< pr number="2391" repo="esphome" >}} by {{< ghuser name="rbaron" >}} (new-feature) -- fix: Setting Tuya string DP value {{< pr number="2394" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} -- Tuya rgb support {{< pr number="2278" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} (new-feature) -- add fan.cycle_speed action {{< pr number="2329" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (new-feature) -- Modbus controller {{< pr number="1779" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Extend nfc ndef records with Text {{< pr number="2191" repo="esphome" >}} by {{< ghuser name="JonasEr" >}} -- Fix NDEF URI casing {{< pr number="2397" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dashboard node import and render in browser {{< pr number="2374" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- ccs811: Skip reading data if it is not available/ready {{< pr number="2404" repo="esphome" >}} by {{< ghuser name="chrta" >}} -- Add missing include for component bme680_bsec {{< pr number="2403" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- fix: stop tuya light state getting reset {{< pr number="2401" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} -- Add Current based cover {{< pr number="1439" repo="esphome" >}} by {{< ghuser name="djwmarcx" >}} (new-integration) -- Add cover toggle support {{< pr number="1809" repo="esphome" >}} by {{< ghuser name="dtmuller" >}} (new-feature) -- Fix handling of timestamps in Teleinfo component. {{< pr number="2392" repo="esphome" >}} by {{< ghuser name="0hax" >}} -- bump dashboard to 20210927.0 {{< pr number="2405" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Add str_sprintf function that returns std::string {{< pr number="2408" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix lint issues in web_server_base {{< pr number="2409" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix uninitialised use of ESPPreferenceObject.backend {{< pr number="2411" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Add support for SCD4X {{< pr number="2217" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- Support HSV-based color support on tuya light {{< pr number="2400" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} (new-feature) -- Tuya: add cover component {{< pr number="2279" repo="esphome" >}} by {{< ghuser name="marmarek" >}} -- Fix tuya cover lint checks {{< pr number="2414" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump debian base to 5.1.0 / 20210902 {{< pr number="2413" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Remove default initializations from tuya cover {{< pr number="2415" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move #ifdef to after header include {{< pr number="2417" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- String manipulation filters for text sensors! {{< pr number="2393" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (new-feature) -- Update web_server.cpp {{< pr number="2419" repo="esphome" >}} by {{< ghuser name="arallsopp" >}} -- Fix default environment for clang-tidy {{< pr number="2420" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Replace std::move() with const references where possible {{< pr number="2421" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix line endings normalization {{< pr number="2407" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Option to ignore CRC for EFuse MAC address {{< pr number="2399" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix attach_interrupt(...) for esp-idf framework {{< pr number="2416" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix I2C recovery on Arduino {{< pr number="2412" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix ESP32 esp-idf OTA updates {{< pr number="2424" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Add local MAC address to WiFi info {{< pr number="2428" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- Thermostat publish state fix {{< pr number="2427" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Convert time to use tzdata {{< pr number="2425" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Hotfix for ESP8266 OTA issue: ERROR Error binary size {{< pr number="2432" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Disable dependency finder on ESP32 {{< pr number="2435" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Use size_t to fix comparision using RISC-V toolchain {{< pr number="2436" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Fix I2C recovery ESP32 esp-idf {{< pr number="2438" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix esp32 no longer has Hash internal lib {{< pr number="2441" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix restoring globals {{< pr number="2442" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Always upload using esptool {{< pr number="2433" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add support for Airthing Wave Mini {{< pr number="2440" repo="esphome" >}} by {{< ghuser name="ncareau" >}} (new-integration) -- Improved validation for Addressable Light Partition Segments {{< pr number="2439" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Bump pytest-cov from 2.12.1 to 3.0.0 {{< pr number="2444" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix compilation error for shutdown component {{< pr number="2447" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Bump aioesphomeapi from 9.1.4 to 9.1.5 {{< pr number="2449" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Only ping once every two seconds {{< pr number="2448" repo="esphome" >}} by {{< ghuser name="alexiri" >}} -- Bump esphome-dashboard to 20211006.0 {{< pr number="2451" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- I2C re-introduce very verbose logging {{< pr number="2446" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add Safe Mode Restart Switch {{< pr number="2437" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (new-integration) -- Add id() for restoring global {{< pr number="2454" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add timestamp to ESPHome dashboard/cli logs {{< pr number="2455" repo="esphome" >}} by {{< ghuser name="alexiri" >}} -- I2c fix {{< pr number="2460" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Correct I2C read() return val check in bh1750 component. {{< pr number="2465" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- atm90e32: make the total_increasing class sensors actually be increasing totals. {{< pr number="2459" repo="esphome" >}} by {{< ghuser name="davidmonro" >}} -- Use enum for Tuya fan direction datapoint {{< pr number="2471" repo="esphome" >}} by {{< ghuser name="rmounce" >}} -- Fix MQTT cover state when position is supported {{< pr number="2468" repo="esphome" >}} by {{< ghuser name="definitio" >}} -- Sgp40 fix {{< pr number="2462" repo="esphome" >}} by {{< ghuser name="natelust" >}} -- EntityBase Refactor {{< pr number="2418" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Fix below freezing temperature for Inkbird sensors {{< pr number="2466" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Add configuration for cover topics {{< pr number="2472" repo="esphome" >}} by {{< ghuser name="definitio" >}} -- Add configuration for climate topics {{< pr number="2473" repo="esphome" >}} by {{< ghuser name="definitio" >}} -- Use arduino btStart for arduino framework {{< pr number="2457" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump click from 8.0.1 to 8.0.3 {{< pr number="2481" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump flake8 from 3.9.2 to 4.0.1 {{< pr number="2483" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump platformio from 5.2.0 to 5.2.1 {{< pr number="2482" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esphome-dashboard from 20211006.0 to 20211011.1 {{< pr number="2484" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Replace deprecated COLOR_BLACK constant {{< pr number="2487" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Fix color temperature persistence on CWWW lights {{< pr number="2486" repo="esphome" >}} by {{< ghuser name="sairon" >}} -- Fix reset on http_request without network connection {{< pr number="2474" repo="esphome" >}} by {{< ghuser name="niklasweber" >}} -- Consolidate CONF_RAW_DATA_ID to const.py {{< pr number="2491" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Update Airthings BLE {{< pr number="2453" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add on_open and on_closed triggers to cover {{< pr number="2488" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Fix LoadProhibited crash for logger baud_rate 0 on esp-idf {{< pr number="2498" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Added heatpumpir support {{< pr number="1343" repo="esphome" >}} by {{< ghuser name="rob-deutsch" >}} (new-integration) -- Reduce IRAM usage in test3 {{< pr number="2499" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add optional timeout for wait_until action {{< pr number="2282" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Improves ct_clamp component accuracy {{< pr number="2283" repo="esphome" >}} by {{< ghuser name="skasi7" >}} -- Allow multiple pn532_spi entries {{< pr number="2489" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add throttle_average sensor filter {{< pr number="2485" repo="esphome" >}} by {{< ghuser name="sermayoral" >}} -- Fix light state remaining on after turn off with transition {{< pr number="2509" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix: Light flash not restoring previous LightState {{< pr number="2383" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Disallow using UART2 for logger on ESP-32 variants that lack it {{< pr number="2510" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix BME680_BSEC compilation issue with ESP32 {{< pr number="2516" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- add missing include in sgp30 {{< pr number="2517" repo="esphome" >}} by {{< ghuser name="dmitriy5181" >}} -- Fix: Color modes not being correctly used in light partitions {{< pr number="2513" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Add pressure compensation during runtime {{< pr number="2493" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Don't define UART_SELECTION_UART2 when UART2 is unavailable {{< pr number="2512" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove BME680_BSEC test {{< pr number="2518" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Fix Nextion HTTPClient error for ESP32 {{< pr number="2524" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix bug in register name definition {{< pr number="2526" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- OTA firmware MD5 check + password support for esp-idf {{< pr number="2507" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-integration) -- Replace framework version_hint with source option {{< pr number="2529" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix bitshift on read in ADE7953 {{< pr number="2537" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Allow downloading all bin files from backend in dashboard {{< pr number="2514" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump dashboard to 20211015.0 {{< pr number="2525" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Only show timestamp for dashboard access logs {{< pr number="2540" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix const used for IDF recommended version {{< pr number="2542" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix Bluetooth setup_priorities {{< pr number="2458" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Autodetect ESP32 variant {{< pr number="2530" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump dashboard to 20211019.0 {{< pr number="2549" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix ADC pin validation on ESP32-C3 {{< pr number="2551" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- ignore exception when not waiting for a response {{< pr number="2552" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Bump dashboard to 20211020.0 {{< pr number="2556" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix HA addon so it does not have logout button {{< pr number="2558" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211020.1 {{< pr number="2559" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- A few esp32_ble_server/improv fixes {{< pr number="2562" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211021.0 {{< pr number="2564" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move running process log line to debug level {{< pr number="2565" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Revert nextion clang-tidy changes {{< pr number="2566" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2021.11.0.md b/content/changelog/2021.11.0.md deleted file mode 100644 index a7495a1a3d..0000000000 --- a/content/changelog/2021.11.0.md +++ /dev/null @@ -1,292 +0,0 @@ ---- -description: "Changelog for ESPHome 2021.11.0." -title: "ESPHome 2021.11.0 - 17th November 2021" -params: - seo: - description: Changelog for ESPHome 2021.11.0. - image: /_static/changelog-2021.11.0.png ---- - -{{< imgtable >}} -"CSE7761","components/sensor/cse7761","cse7761.svg","" -"CAP1188 Capacitive Touch Sensor","components/binary_sensor/cap1188","cap1188.jpg","" -"ESP32 Camera Web Server","components/esp32_camera_web_server","camera.svg","dark-invert" -"Improv via Serial","components/improv_serial","improv.svg","dark-invert" -{{< /imgtable >}} - -## State of the Open Smart Home - -Mark your calendar for the [State of the Open Smart Home](https://www.home-assistant.io/state-of-the-open-home/) -hosted by Nabu Casa, Home Assistant & ESPHome and we'll be joined by our friends from WLED and Z-Wave JS to talk -about our work on making this vision a reality. - -Where: YouTube - -When: Saturday, December 11, at 11am PST / 8pm CET - - - - -## Improv via Serial - - - - - The demo does not work in your browser. Use Google Chrome or Microsoft Edge. - - - -After we created {{< docref "/components/esp32_improv" >}}, we thought it might be a good idea to implement the same -for serial connections. See the docs here for {{< docref "/components/improv_serial" "Improv via Serial" >}} and the -[website documentation](https://www.improv-wifi.com/serial/) for implementing a client or implementing improv in -other firmware. - -## Entity Categories for Home Assistant - -Home Assistant 2021.11 added support for [Entity Categories](https://www.home-assistant.io/blog/2021/11/03/release-202111/#entity-categorization) -and with this release certain ESPHome entites such as the restart switch and uptime sensors will have the config and -diagnostic categories set respectively. -The category can be overridden by the user in the yaml configuration. - -## Configuration URL - -Another feature added to Home Assistant 2021.11 is the configuration URL. This allows for ESPHome devices to notify -Home Assistant when the `web_server` is enabled and there will be a button in the Home Assistant device page to -link directly to the `web_server` UI for your ESPHome device. - -{{< img src="configuration-url.png" alt="Image" width="50.0%" class="align-center" >}} - -## Repeat Action - -{{< ghuser name="oxan" >}} has implemented a `repeat` action for those that want to execute a list of actions x number -of times without just copying and pasting them. - -## Device name length - -The maximum length of the device name has been limited to 31 characters to fall in line with standards and you will get -an error if you try to set a device name longer than that. - -## BLE Sensor UUID changes - -A bug was introduced in 2021.9 with the UUIDs for the `ble_client` sensors being reversed incorrectly. This release -flips them to be the correct way around and you will need to reverse them in your YAML configuration. - -## BH1750 - -When using the default resolution of 0.5 for the BH1750, the result is now divided by 2 as per the finidings of -the community. - -## Binary sensor device classes - -{{< pr number="2703" repo="esphome" >}} removed the `update` `device_class` for binary sensors incorrectly in 2021.11.0. -{{< ghuser name="frenck" >}} noticed this and has added it back again in 2021.11.1. - - - -## Release 2021.11.1 - November 17 - -- Fix AQI index calculator {{< pr number="2739" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- Re-instate device class update for binary sensors {{< pr number="2743" repo="esphome" >}} by {{< ghuser name="frenck" >}} - -## Release 2021.11.2 - November 26 - -- Allow UART debug configuration with no after: definition {{< pr number="2753" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix gif frame scaling #2717 {{< pr number="2750" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- esp32_camera_web_server: Improve support for MotionEye {{< pr number="2777" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Remove floating point ops from the ISR {{< pr number="2751" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix parsing numbers from null-terminated buffers {{< pr number="2755" repo="esphome" >}} by {{< ghuser name="oxan" >}} - -## Release 2021.11.3 - November 27 - -- Fix restoring preferences for ESP32 {{< pr number="2805" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} - -## Release 2021.11.4 - November 29 - -- Fix parsing numbers in Anova {{< pr number="2816" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix parsing of multiple values in EZO sensor {{< pr number="2814" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix compilation error for WPA enterprise in ESP-IDF {{< pr number="2815" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Correct bitmask for third color (blue) scaling. {{< pr number="2817" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Add delay to improve stability {{< pr number="2793" repo="esphome" >}} by {{< ghuser name="Conclusio" >}} - -## Full list of changes - -### New Features - -- Make per-loop display clearing optional {{< pr number="2626" repo="esphome" >}} by {{< ghuser name="timn" >}} (new-feature) -- Add Entity categories for Home Assistant {{< pr number="2636" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Add repeat action for automations {{< pr number="2538" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-feature) -- Neopixelbus redo method definitions {{< pr number="2616" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-feature) (breaking-change) - -### New Components - -- Feature/sensor cse7761 {{< pr number="2546" repo="esphome" >}} by {{< ghuser name="berfenger" >}} (new-integration) -- Add `esp32_camera_web_server:` to expose mjpg/jpg images {{< pr number="2237" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- CAP1188 Capacitive Touch Sensor Support {{< pr number="2653" repo="esphome" >}} by {{< ghuser name="MrEditor97" >}} (new-integration) -- Implement Improv via Serial component {{< pr number="2423" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- TCS34725 BugFix and GA factor {{< pr number="2445" repo="esphome" >}} by {{< ghuser name="razorback16" >}} (breaking-change) -- Limit hostnames to 31 characters {{< pr number="2531" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Move default build path to .esphome directory {{< pr number="2586" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- ESP8266 disable PIO LDF {{< pr number="2608" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- Remove autoload of xiaomi_ble and ruuvi_ble {{< pr number="2617" repo="esphome" >}} by {{< ghuser name="spbrogan" >}} (breaking-change) -- BH1750: Fix a too high default H-res2 mode value {{< pr number="2536" repo="esphome" >}} by {{< ghuser name="kixtarter" >}} (breaking-change) -- Add option to use MQTT abbreviations {{< pr number="2641" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (breaking-change) -- Add restore_mode to rotary_encoder {{< pr number="2643" repo="esphome" >}} by {{< ghuser name="niklasweber" >}} (breaking-change) -- Neopixelbus redo method definitions {{< pr number="2616" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-feature) (breaking-change) -- Update device classes for binary sensors {{< pr number="2703" repo="esphome" >}} by {{< ghuser name="lcavalli" >}} (breaking-change) -- BLE_Sensor: Use as_reversed_hex_array to properly parse UUIDs after #1627 {{< pr number="2737" repo="esphome" >}} by {{< ghuser name="tekmaven" >}} (breaking-change) - -### Beta Fixes - -- Fix template number initial value being NaN {{< pr number="2692" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [remote_transmitter] accurate pulse timing for ESP8266 {{< pr number="2476" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Uart debugging support {{< pr number="2478" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Enable addressable light power supply based on raw values {{< pr number="2690" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove my.ha links from improv {{< pr number="2695" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Only allow prometheus when using arduino {{< pr number="2697" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update device classes for binary sensors {{< pr number="2703" repo="esphome" >}} by {{< ghuser name="lcavalli" >}} (breaking-change) -- Bump ESPAsyncWebServer to 2.1.0 {{< pr number="2686" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow setting custom command_topic for Select and Number components {{< pr number="2714" repo="esphome" >}} by {{< ghuser name="kbialek" >}} -- Restore InterruptLock on wifi-less ESP8266 {{< pr number="2712" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Feed WDT between doing ESP32 touchpad measurements {{< pr number="2720" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- RemoteTransmitter fix. Bug from version 2021.10. Some changes. {{< pr number="2706" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fix indentation of write_lambda for modbus_controller number {{< pr number="2722" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove unnecessary duplicate touch_pad_filter_start {{< pr number="2724" repo="esphome" >}} by {{< ghuser name="Maelstrom96" >}} -- Add zeroconf as a direct dependency and lock the version {{< pr number="2729" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improv serial/checksum changes {{< pr number="2731" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix zeroconf time comparisons {{< pr number="2733" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- BLE_Sensor: Use as_reversed_hex_array to properly parse UUIDs after #1627 {{< pr number="2737" repo="esphome" >}} by {{< ghuser name="tekmaven" >}} (breaking-change) -- Fix senseair component uart read timeout {{< pr number="2658" repo="esphome" >}} by {{< ghuser name="rotarykite" >}} - -### All changes - -- TCS34725 BugFix and GA factor {{< pr number="2445" repo="esphome" >}} by {{< ghuser name="razorback16" >}} (breaking-change) -- Change millis() to faster micros() for 3ms check in feed_wdt {{< pr number="2492" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Add ESP32 IDF as a test env for PRs {{< pr number="2494" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- use no hold master mode for si7021/htu21d {{< pr number="2528" repo="esphome" >}} by {{< ghuser name="dmitriy5181" >}} -- Bump pyyaml from 5.4.1 to 6.0 {{< pr number="2521" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Clarify statement at the cmd wizard tool, for new users {{< pr number="2519" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Continue ethernet setup if hostname fails {{< pr number="2430" repo="esphome" >}} by {{< ghuser name="Tommatheussen" >}} -- Bump aioesphomeapi from 9.1.5 to 10.0.0 {{< pr number="2508" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Move TemplatableValue helper class to automation.h {{< pr number="2511" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- [esp-idf fix] increase FreeRTOS ticker loop from 100Hz to 1kHz {{< pr number="2527" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Bump pytest-asyncio from 0.15.1 to 0.16.0 {{< pr number="2547" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [ESP32] ADC auto-range setting {{< pr number="2541" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Bump paho-mqtt from 1.5.1 to 1.6.0 {{< pr number="2568" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix ESP8266 dallas GPIO16 INPUT_PULLUP {{< pr number="2581" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix platformio version in Dockerfile doesn't match requirements {{< pr number="2582" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix platformio_install_deps no longer installing all lib_deps {{< pr number="2584" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- ESP32 ADC use factory calibration data {{< pr number="2574" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add mDNS config dump {{< pr number="2576" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix mDNS ESP8266 log not included {{< pr number="2589" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump platformio from 5.2.1 to 5.2.2 {{< pr number="2569" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update docker base images {{< pr number="2583" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump paho-mqtt from 1.6.0 to 1.6.1 {{< pr number="2596" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Logging a proper url allows terminals to make it clickable {{< pr number="2554" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 10.0.0 to 10.0.3 {{< pr number="2595" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tzlocal from 3.0 to 4.0.1 {{< pr number="2553" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add IDF support to dallas {{< pr number="2578" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Limit hostnames to 31 characters {{< pr number="2531" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Add EntityBase properties to ESP32 Camera {{< pr number="2600" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Move default build path to .esphome directory {{< pr number="2586" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- ESP8266 disable PIO LDF {{< pr number="2608" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- Switch issue-close-app to GH Actions and workflow cleanup {{< pr number="2624" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- relax max entities checking {{< pr number="2629" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Allow setting URL as platform_version {{< pr number="2598" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Constrain GH Actions workflows permissions {{< pr number="2625" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump tzlocal from 4.0.1 to 4.0.2 {{< pr number="2631" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esptool from 3.1 to 3.2 {{< pr number="2632" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add publish_initial_value option to rotary encoder {{< pr number="2503" repo="esphome" >}} by {{< ghuser name="niklasweber" >}} -- Remove autoload of xiaomi_ble and ruuvi_ble {{< pr number="2617" repo="esphome" >}} by {{< ghuser name="spbrogan" >}} (breaking-change) -- Bump aioesphomeapi from 10.0.3 to 10.1.0 {{< pr number="2638" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Expose web_server port via the API {{< pr number="2467" repo="esphome" >}} by {{< ghuser name="alexiri" >}} -- Allow cloning/fetching Github PR branches in external_components {{< pr number="2639" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- use update_interval for sntp synchronization {{< pr number="2563" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Feature/sensor cse7761 {{< pr number="2546" repo="esphome" >}} by {{< ghuser name="berfenger" >}} (new-integration) -- Bump aioesphomeapi from 10.1.0 to 10.2.0 {{< pr number="2642" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- BH1750: Fix a too high default H-res2 mode value {{< pr number="2536" repo="esphome" >}} by {{< ghuser name="kixtarter" >}} (breaking-change) -- Bump tzlocal from 4.0.2 to 4.1 {{< pr number="2645" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- convert SCD30 into Component, polls dataready register {{< pr number="2308" repo="esphome" >}} by {{< ghuser name="geoffrey-vl" >}} -- Add option to use MQTT abbreviations {{< pr number="2641" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (breaking-change) -- Fix deep sleep invert_wakeup mode {{< pr number="2644" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Expose webserver_port to the native API {{< pr number="2640" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix for noise in pulse_counter and duty_cycle components {{< pr number="2646" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Bump black from 21.9b0 to 21.10b0 {{< pr number="2650" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add restore_mode to rotary_encoder {{< pr number="2643" repo="esphome" >}} by {{< ghuser name="niklasweber" >}} (breaking-change) -- Make per-loop display clearing optional {{< pr number="2626" repo="esphome" >}} by {{< ghuser name="timn" >}} (new-feature) -- Allow esp8266 to compile with no wifi {{< pr number="2664" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix CRC error during DSMR chunked message reading {{< pr number="2622" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Add Entity categories for Home Assistant {{< pr number="2636" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Add SPI lib for ESP8266 and only add lib for ESP32 when using Arduino {{< pr number="2677" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Hotfix for encrypted DSMR regression {{< pr number="2679" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Add HA Entity Category support to MQTT {{< pr number="2678" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Fix gpio validation for esp32 variants {{< pr number="2609" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix when package url has no branch/ref {{< pr number="2683" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SSD1306_base -> Add support for 64x32 size and fix typo for flip functions {{< pr number="2682" repo="esphome" >}} by {{< ghuser name="ychieux" >}} -- Fix dashboard imports for adoption {{< pr number="2684" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add `esp32_camera_web_server:` to expose mjpg/jpg images {{< pr number="2237" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- fix esp32 rmt receiver item array length {{< pr number="2671" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Remote base add pronto protocol {{< pr number="2619" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- Set up output_switch at priority DATA instead of HARDWARE. {{< pr number="2648" repo="esphome" >}} by {{< ghuser name="duncf" >}} -- fix rc switch protocol 6 {{< pr number="2672" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Remove "delay_microseconds_accurate()" and improve systemwide delayMicroseconds() {{< pr number="2497" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- modbus_controller: remove hard coded register size {{< pr number="2654" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- CAP1188 Capacitive Touch Sensor Support {{< pr number="2653" repo="esphome" >}} by {{< ghuser name="MrEditor97" >}} (new-integration) -- Add missing hal.h include in esp32_camera_web_server {{< pr number="2689" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- [ESP32 ADC] Add option for raw uncalibrated output {{< pr number="2663" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Introduce parse_number() helper function {{< pr number="2659" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add repeat action for automations {{< pr number="2538" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-feature) -- Neopixelbus redo method definitions {{< pr number="2616" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-feature) (breaking-change) -- Introduce byteswap helpers {{< pr number="2661" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Max7219digit multiline {{< pr number="1622" repo="esphome" >}} by {{< ghuser name="TVDLoewe" >}} -- Clean-up string sanitization helpers {{< pr number="2660" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Introduce encode_value/decode_value() template functions {{< pr number="2662" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Make OTA function switchable in web_server component {{< pr number="2685" repo="esphome" >}} by {{< ghuser name="lazlyhu" >}} -- Implement Improv via Serial component {{< pr number="2423" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- [ms5611]: Re-implement conversion from ADC readings to sensor values {{< pr number="2665" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Fix template number initial value being NaN {{< pr number="2692" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [remote_transmitter] accurate pulse timing for ESP8266 {{< pr number="2476" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Uart debugging support {{< pr number="2478" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Enable addressable light power supply based on raw values {{< pr number="2690" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove my.ha links from improv {{< pr number="2695" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Only allow prometheus when using arduino {{< pr number="2697" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update device classes for binary sensors {{< pr number="2703" repo="esphome" >}} by {{< ghuser name="lcavalli" >}} (breaking-change) -- Bump ESPAsyncWebServer to 2.1.0 {{< pr number="2686" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow setting custom command_topic for Select and Number components {{< pr number="2714" repo="esphome" >}} by {{< ghuser name="kbialek" >}} -- Restore InterruptLock on wifi-less ESP8266 {{< pr number="2712" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Feed WDT between doing ESP32 touchpad measurements {{< pr number="2720" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- RemoteTransmitter fix. Bug from version 2021.10. Some changes. {{< pr number="2706" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fix indentation of write_lambda for modbus_controller number {{< pr number="2722" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove unnecessary duplicate touch_pad_filter_start {{< pr number="2724" repo="esphome" >}} by {{< ghuser name="Maelstrom96" >}} -- Add zeroconf as a direct dependency and lock the version {{< pr number="2729" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improv serial/checksum changes {{< pr number="2731" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix zeroconf time comparisons {{< pr number="2733" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- BLE_Sensor: Use as_reversed_hex_array to properly parse UUIDs after #1627 {{< pr number="2737" repo="esphome" >}} by {{< ghuser name="tekmaven" >}} (breaking-change) -- Fix senseair component uart read timeout {{< pr number="2658" repo="esphome" >}} by {{< ghuser name="rotarykite" >}} -- Fix AQI index calculator {{< pr number="2739" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- Re-instate device class update for binary sensors {{< pr number="2743" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Allow UART debug configuration with no after: definition {{< pr number="2753" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix gif frame scaling #2717 {{< pr number="2750" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- esp32_camera_web_server: Improve support for MotionEye {{< pr number="2777" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Remove floating point ops from the ISR {{< pr number="2751" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix parsing numbers from null-terminated buffers {{< pr number="2755" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix restoring preferences for ESP32 {{< pr number="2805" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix parsing numbers in Anova {{< pr number="2816" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix parsing of multiple values in EZO sensor {{< pr number="2814" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix compilation error for WPA enterprise in ESP-IDF {{< pr number="2815" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Correct bitmask for third color (blue) scaling. {{< pr number="2817" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Add delay to improve stability {{< pr number="2793" repo="esphome" >}} by {{< ghuser name="Conclusio" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2021.12.0.md b/content/changelog/2021.12.0.md deleted file mode 100644 index 9ae14b0a28..0000000000 --- a/content/changelog/2021.12.0.md +++ /dev/null @@ -1,252 +0,0 @@ ---- -description: "Changelog for ESPHome 2021.12.0." -title: "ESPHome 2021.12.0 - 11th December 2021" -params: - seo: - description: Changelog for ESPHome 2021.12.0. - image: /_static/changelog-2021.12.0.png ---- - -{{< imgtable >}} -"Button Core","components/button/index","folder-open.svg","dark-invert" -"Template Button","components/button/template","description.svg","dark-invert" -"Restart Button","components/button/restart","restart.svg","dark-invert" -"BLE Binary Output","components/output/ble_client","bluetooth.svg","dark-invert" -"Tuya Text Sensor","components/text_sensor/tuya","tuya.png","" -"SDP800 Series","components/sensor/sdp3x","sdp31.jpg","Pressure" -{{< /imgtable >}} - -## State of the Open Smart Home - -Today is the [State of the Open Smart Home](https://www.home-assistant.io/state-of-the-open-home/) hosted by Nabu -Casa, Home Assistant & ESPHome and we'll be joined by our friends from WLED, Z-Wave JS, Stanford's OVAL lab and -Northeastern University to talk about our work on making this vision a reality. - -Where: YouTube - -When: Today, Saturday, December 11, at 11am PST / 8pm CET - - - - -## Buttons - -This release brings {{< docref "/components/button/index" "buttons" >}} from Home Assistant. Many times there have -been questions on how to simply trigger automations from the Home Assistant frontend with a button so here you go. -Here is a very simple example: - -```yaml -button: - - platform: template - name: Test Button - on_press: - then: - - logger.log: "The button was pressed!!!" -``` - -## Multiple WiFi networks with static IP - -This release has a fix that allows using multiple networks each with their own static IP address configuration. -When using these options, you **must** also set `wifi` -> `use_address` when installing new firmware as ESPHome -cannot know which IP address to use automatically. - -## The Dashboard and secrets - -The ESPHome Dashboard will now save the wifi credentials as secrets (`wifi_ssid` / `wifi_password` ) for future use. -If you are already using these secrets, then the dashboard will not ask for credentials and will configure using -them for you. - -The dashboard also now can view the logs straight from a serial connected device via the web browser. It will -show up as an option when choosing the method to view them. - -## NEC remote protocol - -In this version, the order of transferring bits was corrected from MSB to LSB in accordance with the NEC standard. -Therefore, if the configuration file has come from an earlier version of ESPhome, it is necessary to reverse -the order of the address and command bits when moving to 2021.12 or above. -For example, address: `0x84ED`, command: `0x13EC` becomes `0xB721` and `0x37C8` respectively. - -## Tuya Covers - -{{< pr number="2637" repo="esphome" >}} adds new functionality to the Tuya cover component, but at the same time -removes the "soft" inversion of the direction. Instead, it seems that most if not all tuya covers have a "hidden" -datapoint that sets the direction on the secondary MCU. See the {{< docref "/components/cover/tuya" "documentation" >}} -for the new configuration options. - - - -## Release 2021.12.1 - December 15 - -- Set text sensor state property to filter output {{< pr number="2893" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Allow button POST on press from web server {{< pr number="2913" repo="esphome" >}} by {{< ghuser name="wilberforce" >}} - -## Release 2021.12.2 - December 21 - -- Don't disable idle task WDT when it's not enabled {{< pr number="2856" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix MQTT button press action {{< pr number="2917" repo="esphome" >}} by {{< ghuser name="oxan" >}} - -## Release 2021.12.3 - December 30 - -- Require arduino in webserver for better validation {{< pr number="2941" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Only allow internal pins for dht sensor {{< pr number="2940" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Workaround installing as editable package not working {{< pr number="2936" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove -e for hassio images {{< pr number="2964" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- pmsx003: add support for new PMS5003S device {{< pr number="2710" repo="esphome" >}} by {{< ghuser name="NeoAcheron" >}} (new-feature) -- Add climate on_state trigger {{< pr number="2707" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-feature) -- Add greeyac protocol to IR Climate / HeatpumpIR {{< pr number="2694" repo="esphome" >}} by {{< ghuser name="cmroche" >}} (new-feature) -- Provide an option to select unique_id generator {{< pr number="2701" repo="esphome" >}} by {{< ghuser name="kbialek" >}} (new-feature) -- Ignore secrets yaml on command line {{< pr number="2715" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} (new-feature) -- Add max_telegram_length option to dsmr {{< pr number="2674" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-feature) -- Relax the icon validator to allow non-mdi icons {{< pr number="2764" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (new-feature) -- Add support for P1 Data Request pin control {{< pr number="2676" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-feature) -- Add support for sdp8xx {{< pr number="2779" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-feature) -- Add map filter for text sensors {{< pr number="2761" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-feature) -- Optionally show internal components on the web server {{< pr number="2627" repo="esphome" >}} by {{< ghuser name="mechanarchy" >}} (new-feature) -- cse7766: add energy sensor {{< pr number="2822" repo="esphome" >}} by {{< ghuser name="ianchi" >}} (new-feature) -- Allow Git credentials to be loaded from secrets {{< pr number="2825" repo="esphome" >}} by {{< ghuser name="mechanarchy" >}} (new-feature) -- Expand uart invert feature to ESP8266 {{< pr number="1727" repo="esphome" >}} by {{< ghuser name="Lewn" >}} (new-feature) - -### New Components - -- Add ble_client binary_output {{< pr number="2200" repo="esphome" >}} by {{< ghuser name="tekmaven" >}} (new-integration) -- Add support for button entities {{< pr number="2824" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- Fix NEC protocol implementation {{< pr number="2534" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- Tuya Cover improvements {{< pr number="2637" repo="esphome" >}} by {{< ghuser name="pauln" >}} (breaking-change) - -### Beta Changes - -- Feed watchdog during OTA {{< pr number="2852" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump esphome-dashboard to 20211206.0 {{< pr number="2870" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- tlc59208f : fix compilation error {{< pr number="2867" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- ADC: Turn verbose the debugging "got voltage" {{< pr number="2863" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- SPS30 : fix i2c read size {{< pr number="2866" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix MCP23x17 not disabling pullup after config change {{< pr number="2855" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Ignore already stopped dhcp for ethernet {{< pr number="2862" repo="esphome" >}} by {{< ghuser name="madron" >}} -- Add endpoint to fetch secrets keys {{< pr number="2873" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Adopt using wifi secrets that should exist at this point {{< pr number="2874" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow wizard to specify secrets {{< pr number="2875" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Feed watchdog when no component loops {{< pr number="2857" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump esphome-dashboard to 20211207.0 {{< pr number="2877" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Feed watchdog while setting up OTA {{< pr number="2876" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Use new platform component config blocks for wizard {{< pr number="2885" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211208.0 {{< pr number="2887" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix published state for modbus number {{< pr number="2894" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Modbus number/output use write single {{< pr number="2896" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix for two points setting when fan_only_cooling is disabled {{< pr number="2903" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump esphome-dashboard to 20211211.0 {{< pr number="2904" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Defines tidy {{< pr number="2696" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- pmsx003: add support for new PMS5003S device {{< pr number="2710" repo="esphome" >}} by {{< ghuser name="NeoAcheron" >}} (new-feature) -- Add climate on_state trigger {{< pr number="2707" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-feature) -- Add greeyac protocol to IR Climate / HeatpumpIR {{< pr number="2694" repo="esphome" >}} by {{< ghuser name="cmroche" >}} (new-feature) -- Fix rom/rtc.h deprecation compile warning for debug component {{< pr number="2520" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Drop unused constants from const.py {{< pr number="2718" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Install test requirements in lint Docker image {{< pr number="2719" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Clean-up MAC address helpers {{< pr number="2713" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Provide an option to select unique_id generator {{< pr number="2701" repo="esphome" >}} by {{< ghuser name="kbialek" >}} (new-feature) -- Ignore secrets yaml on command line {{< pr number="2715" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} (new-feature) -- Allow for subsecond sampling of hmc5883l {{< pr number="2735" repo="esphome" >}} by {{< ghuser name="jaharkes" >}} -- Change log level from DEBUG to INFO for sniffing services of `rf_bridge` {{< pr number="2736" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- Add ble_client binary_output {{< pr number="2200" repo="esphome" >}} by {{< ghuser name="tekmaven" >}} (new-integration) -- Remove duplicated const data in esp8266 boards {{< pr number="2740" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move to use improv lib from platformio {{< pr number="2741" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add max_telegram_length option to dsmr {{< pr number="2674" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-feature) -- Changed LUT for DKE epaper on ttgo t5 2.13inch to improve partial rfresh {{< pr number="2475" repo="esphome" >}} by {{< ghuser name="spattinson" >}} -- Fix NEC protocol implementation {{< pr number="2534" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- Remove arduino dependency from hm3301 {{< pr number="2745" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Add retry handler {{< pr number="2721" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Introduce str_snprintf helper function {{< pr number="2780" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Prettier date time display after time sync {{< pr number="2778" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- Fix distorted gif frames when resizing {{< pr number="2774" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- fixed wrong setup-usage tc9548a {{< pr number="2766" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} -- Relax the icon validator to allow non-mdi icons {{< pr number="2764" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} (new-feature) -- Bump black from 21.10b0 to 21.11b1 {{< pr number="2760" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update aht10.cpp to address issue #1635 {{< pr number="2675" repo="esphome" >}} by {{< ghuser name="krunkel" >}} -- Add support for P1 Data Request pin control {{< pr number="2676" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (new-feature) -- Allow specifying the dashboard bind address {{< pr number="2787" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- remove LEDC_HIGH_SPEED_MODE for C3, S2, S3 {{< pr number="2791" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix LEDC resolution calculation on ESP32-C3/S2/S3 {{< pr number="2794" repo="esphome" >}} by {{< ghuser name="rsumner" >}} -- Add support for sdp8xx {{< pr number="2779" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-feature) -- Allow empty UART debug: option, logging in hex format by default {{< pr number="2771" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Bump pylint from 2.11.1 to 2.12.1 {{< pr number="2798" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix CI cache key for test3.yaml compile {{< pr number="2757" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Drop obsolete comment from CI workflow file {{< pr number="2758" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Cache virtualenv instead of pip cache between CI runs {{< pr number="2759" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add map filter for text sensors {{< pr number="2761" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-feature) -- Only match GCC warnings from ESPHome source files in CI {{< pr number="2756" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Correct constant for dynamic I2S bus in NeoPixelBus {{< pr number="2797" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Consistently format errors in CI scripts {{< pr number="2762" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Cancel previous workflows for PRs and branches {{< pr number="2800" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- total_daily_energy: allow to disable restore mode {{< pr number="2795" repo="esphome" >}} by {{< ghuser name="ianchi" >}} -- Modbus_controller: Add custom command. {{< pr number="2680" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix usage of deprecated climate method in anova {{< pr number="2801" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Make clang-tidy suggest stdint.h int types {{< pr number="2820" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fixed data type inside fast_random_8() routine {{< pr number="2818" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Improve DSMR read timeout handling {{< pr number="2699" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Optionally show internal components on the web server {{< pr number="2627" repo="esphome" >}} by {{< ghuser name="mechanarchy" >}} (new-feature) -- Fix custom mode_state_topic {{< pr number="2827" repo="esphome" >}} by {{< ghuser name="definitio" >}} -- Add support for button entities {{< pr number="2824" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Tuya text_sensor and raw data usage {{< pr number="1812" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Fix 8266 SPI Clock Polarity Setting {{< pr number="2836" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix too-broad matcher for custom CI script {{< pr number="2829" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- cse7766: add energy sensor {{< pr number="2822" repo="esphome" >}} by {{< ghuser name="ianchi" >}} (new-feature) -- Burst read for BME280, to reduce spurious spikes {{< pr number="2809" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Bump aioesphomeapi from 10.2.0 to 10.6.0 {{< pr number="2840" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Button device class {{< pr number="2835" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Implement unit_of_measurement for number component {{< pr number="2804" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- Number mode {{< pr number="2838" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211201.0 {{< pr number="2842" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow Git credentials to be loaded from secrets {{< pr number="2825" repo="esphome" >}} by {{< ghuser name="mechanarchy" >}} (new-feature) -- Fix compile warning in Tuya automations {{< pr number="2837" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add problem matcher for Python formatting errors {{< pr number="2833" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix CI check for Windows line endings {{< pr number="2831" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Don't enable namespace comment clang-tidy check twice {{< pr number="2830" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- ESP32 Deep Sleep: correct level value {{< pr number="2812" repo="esphome" >}} by {{< ghuser name="jhamhader" >}} -- Fix OTA updates on esp8266 by declaring arch_get_cpu_cycle_count IRAM_ATTR and HOT {{< pr number="2843" repo="esphome" >}} by {{< ghuser name="Doridian" >}} -- Fix compilation using subprocesses {{< pr number="2834" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Expand uart invert feature to ESP8266 {{< pr number="1727" repo="esphome" >}} by {{< ghuser name="Lewn" >}} (new-feature) -- Support setting manual_ip under networks option {{< pr number="2839" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Enable a bunch of clang-tidy checks {{< pr number="2149" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Set ESP32 watchdog to loop task {{< pr number="2846" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Tuya Cover improvements {{< pr number="2637" repo="esphome" >}} by {{< ghuser name="pauln" >}} (breaking-change) -- Fix wifi not working with manual_ip using esp-idf {{< pr number="2849" repo="esphome" >}} by {{< ghuser name="Maelstrom96" >}} -- modbus_controller: bugfix: enable overriding calculated register size {{< pr number="2845" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Feed watchdog during OTA {{< pr number="2852" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump esphome-dashboard to 20211206.0 {{< pr number="2870" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- tlc59208f : fix compilation error {{< pr number="2867" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- ADC: Turn verbose the debugging "got voltage" {{< pr number="2863" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- SPS30 : fix i2c read size {{< pr number="2866" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix MCP23x17 not disabling pullup after config change {{< pr number="2855" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Ignore already stopped dhcp for ethernet {{< pr number="2862" repo="esphome" >}} by {{< ghuser name="madron" >}} -- Add endpoint to fetch secrets keys {{< pr number="2873" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Adopt using wifi secrets that should exist at this point {{< pr number="2874" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow wizard to specify secrets {{< pr number="2875" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Feed watchdog when no component loops {{< pr number="2857" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump esphome-dashboard to 20211207.0 {{< pr number="2877" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Feed watchdog while setting up OTA {{< pr number="2876" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Use new platform component config blocks for wizard {{< pr number="2885" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20211208.0 {{< pr number="2887" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix published state for modbus number {{< pr number="2894" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Modbus number/output use write single {{< pr number="2896" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix for two points setting when fan_only_cooling is disabled {{< pr number="2903" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump esphome-dashboard to 20211211.0 {{< pr number="2904" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2021.8.0.md b/content/changelog/2021.8.0.md deleted file mode 100644 index e5640dc264..0000000000 --- a/content/changelog/2021.8.0.md +++ /dev/null @@ -1,263 +0,0 @@ ---- -description: "Changelog for ESPHome 2021.8.0." -title: "ESPHome 2021.8.0 - 18th August 2021" -params: - seo: - description: Changelog for ESPHome 2021.8.0. - image: /_static/changelog-2021.8.0.png ---- - -{{< imgtable >}} -"AM43","components/sensor/am43","am43.jpg","" -"AM43 Cover","components/cover/am43","am43.jpg","" -"Color Temperature Light","components/light/color_temperature","brightness-medium.svg","dark-invert" -"Demo","components/demo","description.svg","dark-invert" -"DSMR","components/sensor/dsmr","dsmr.svg","" -"HRXL MaxSonar WR","components/sensor/hrxl_maxsonar_wr","hrxl_maxsonar_wr.jpg","" -"PipSolar - compatible PV Inverter","components/pipsolar","pipsolar.jpg","" -"PM1006 Sensor","components/sensor/pm1006","pm1006.jpg","" -"PMSA003I","components/sensor/pmsa003i","pmsa003i.jpg","" -"RGBCT Light","components/light/rgbct","rgbw.png","" -"SDP3x","components/sensor/sdp3x","sdp31.jpg","" -"Selec Meter","components/sensor/selec_meter","selec_meter_em2m.jpg","" -"T6613/15","components/sensor/t6615","t6615.jpg","" -"TLC5947","components/output/tlc5947","tlc5947.jpg","" -"Select Core","components/select/index","folder-open.svg","dark-invert" -"Template Select","components/select/template","description.svg","dark-invert" -"TSL2591","components/sensor/tsl2591","tsl2591.jpg","" -{{< /imgtable >}} -Since starting monthly cycles, it just made sense to make this release, **ESPHome 2021.8.0**. From now ESPHome will -be versioned according to the year and month of the release. We hope that this will not confuse everyone too much =). - -There are a bunch of new integrations this release as seen above and a few breaking changes below. Hopefully nothing -has been missed out. - -Also, look at that nice sorted and categorized home page of sensors. Thanks to {{< ghuser name="patfelst" >}} for -doing this. - -## Select Entities - -ESPHome devices can now create {{< docref "/components/select/index" "Select" >}} entities in Home Assistant. -This allows you to not have to create `input_select` from HA and then import the current option into ESPHome. -The chosen option can be updated from both sides and will be reflected accordingly. - -## Light Color Modes - -{{< ghuser name="oxan" >}} has been at it working hard on getting the all of the light code up to scratch and working -really well with the latest changes to Home Assistant. This is mostly an internal change, but ESPHome has -been updated to properly support Home Assistant's color modes for lights. For the most part it mainly -fixes issues that have come up with the color mode on Home Assistant not doing what people expected in ESPHome. - -## DSMR - -{{< ghuser name="glmnet" >}} and {{< ghuser name="zuidwijk" >}} have worked together to bring DSMR support to ESPHome. -This platform allows you to read your DSMR smart meter via the P1 port. Check out the -[repo](https://github.com/zuidwijk/dsmr) with more info on the hardware required for this. - -## Thermostat Breaking changes - -{{< ghuser name="kbx81" >}} Has made a few changes to the {{< docref "/components/climate/thermostat" "thermostat" >}} -climate platform in {{< pr number="2032" repo="esphome" >}}, {{< pr number="2073" repo="esphome" >}} and -{{< pr number="2114" repo="esphome" >}} to allow for the many different use cases that everyone has. -Unfortunately this means you might need to make some changes to your YAML configuration to utilize the new code. - -- `hysteresis` has been replaced with `cool_deadband`, `cool_overrun`, `heat_deadband` and `heat_overrun`. -- Climate action timers now govern how quickly climate actions may be called: - -- `min_idle_time` is required for all configurations. -- `min_cooling_off_time` and `min_cooling_run_time` are required where cool_action or dry_action is used. -- `min_heating_off_time` and `min_heating_run_time` are required where heat_action is used. -- `min_fanning_off_time` and `min_fanning_run_time` are required where fan_only_action is used. -- `min_fan_mode_switching_time` is required where any `fan_mode` actions (ex.: `fan_mode_auto_action`, - `fan_mode_on_action` ) are used. - -## Anova Souve - -There is a change with the {{< docref "/components/climate/anova" "Anova BLE Souve" >}} climate platform -that has a new **required** config option: `unit_of_measurement`. - -## Home Assistant Add-on - -For a while there has been an option in the Add-on to allow specifying the `esphome_version` -which would allow the addon to download a specific version to use. This has been removed -in this release as it causes more issues than it solves. It may be added back to the `development` addon -**only** in the future if there is demand, but the stable add-ons should stay stable. If you -need to downgrade the esphome version because a new version does not work the way you expect, then you -should be using the snapshot/backup feature built into Home Assistant Supervisor to rollback. - - - -## Release 2021.8.1 - August 24 - -- Fix pypi download url {{< pr number="2177" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Light: include ON_OFF capability to BRIGHTNESS ColorMode {{< pr number="2186" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- Fix addressable light control without transitions & effects with transitions {{< pr number="2187" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- mqtt_light: remove legacy API config that is not compatible with HA 2021.8 {{< pr number="2183" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- Tuya fan component uses enum datapoint type for speed instead of integer {{< pr number="2182" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Fix template select lambda {{< pr number="2198" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Send Celsius temperature unit in MQTT discovery message {{< pr number="1840" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} - -## Release 2021.8.2 - August 25 - -- Revert "Light: include ON_OFF capability to BRIGHTNESS ColorMode" {{< pr number="2202" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- Allow entities to be disabled by default in HA {{< pr number="2113" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Added support for pvvx_mithermometer sensor {{< pr number="1546" repo="esphome" >}} by {{< ghuser name="pasiz" >}} (new-integration) -- Added support for Selec Energy Meter {{< pr number="1993" repo="esphome" >}} by {{< ghuser name="sourabhjaiswal" >}} (new-integration) -- pm1006: add rx-only support {{< pr number="2038" repo="esphome" >}} by {{< ghuser name="Habbie" >}} (new-integration) -- Add SDP3x sensor {{< pr number="2064" repo="esphome" >}} by {{< ghuser name="Azimath" >}} (new-integration) -- Add support for the TLC5947 24-Channel, 12-Bit PWM LED Driver {{< pr number="2066" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- Add T6615 {{< pr number="1170" repo="esphome" >}} by {{< ghuser name="tylermenezes" >}} (new-integration) -- Add support for the HRXL MaxSonar WR series sensors {{< pr number="2020" repo="esphome" >}} by {{< ghuser name="netmikey" >}} (new-integration) -- Add demo integration {{< pr number="2085" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- Add select entities and implement template select {{< pr number="2067" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) (notable-change) -- Added support for Hitachi AC424 remote type {{< pr number="2101" repo="esphome" >}} by {{< ghuser name="sourabhjaiswal" >}} (new-integration) -- Adds CGPR1 - Qingping Motion & Ambient light sensor support {{< pr number="1675" repo="esphome" >}} by {{< ghuser name="Tommatheussen" >}} (new-integration) -- Dsmr component {{< pr number="1881" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- Support component tsl2591 {{< pr number="2131" repo="esphome" >}} by {{< ghuser name="wjcarpenter" >}} (new-integration) -- Add support for PMSA003i {{< pr number="1501" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- Add rgbct and color_temperature light platforms {{< pr number="2138" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Feature pipsolar anh {{< pr number="1664" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} (new-integration) -- Support for AM43 BLE blind motors {{< pr number="1744" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (new-integration) - -### Breaking Changes - -- Merge build flags from platformio_options {{< pr number="1651" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} (breaking-change) -- Color mode implementation {{< pr number="2012" repo="esphome" >}} by {{< ghuser name="oxan" >}} (notable-change) (breaking-change) -- Fix parity bit calculation for ESP8266SoftwareSerial {{< pr number="1873" repo="esphome" >}} by {{< ghuser name="esev" >}} (breaking-change) -- Dont force 0 state instead of min_power unless explicit config set {{< pr number="2107" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Anova fahrenheit support {{< pr number="2126" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (breaking-change) -- Tidy HA addon {{< pr number="1937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Thermostat enhancements 2 {{< pr number="2114" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) - -### Beta Fixes - -- Always send all light state values in API {{< pr number="2150" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Let sensors announce their state_class via mqtt {{< pr number="2155" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- Thermostat delayed fan mode fix {{< pr number="2158" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix native API log level enum values {{< pr number="2151" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Initialize color temperature to value within range if possible {{< pr number="2168" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add a dummy color temp {{< pr number="2161" repo="esphome" >}} by {{< ghuser name="DotNetDann" >}} -- Add Gas device class to DSMR component {{< pr number="2169" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Send dirty states when screen wakes up {{< pr number="2167" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove specified accuracy_decimals from total_daily_energy {{< pr number="2174" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add new total_increasing state-class for Home Assistant 2021.9+ {{< pr number="2166" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### Notable Changes - -- Color mode implementation {{< pr number="2012" repo="esphome" >}} by {{< ghuser name="oxan" >}} (notable-change) (breaking-change) -- Add select entities and implement template select {{< pr number="2067" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) (notable-change) - -### All changes - -- Always tick mdns in ethernet component {{< pr number="2018" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} -- Bump black from 21.6b0 to 21.7b0 {{< pr number="2031" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Convert Arduino boolean to bool {{< pr number="2042" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix ESP32-C3 using v2.0.0-alpha1 support {{< pr number="2035" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Bump pylint from 2.8.2 to 2.9.4 {{< pr number="2047" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.9.4 to 2.9.5 {{< pr number="2050" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Thermostat fixes+updates 1 {{< pr number="2032" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add test5 back to CI {{< pr number="2052" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Added support for pvvx_mithermometer sensor {{< pr number="1546" repo="esphome" >}} by {{< ghuser name="pasiz" >}} (new-integration) -- Added support for Selec Energy Meter {{< pr number="1993" repo="esphome" >}} by {{< ghuser name="sourabhjaiswal" >}} (new-integration) -- Add TAG to all compile units {{< pr number="2060" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Fix minor build issues with Arduino ESP32 2.0.0-rc1 {{< pr number="2057" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Fix clang-format script behaviour without -i + code cleanup {{< pr number="2002" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Merge build flags from platformio_options {{< pr number="1651" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} (breaking-change) -- Print BLE 128-bit UUIDs according to spec {{< pr number="2061" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Support library override using named library with repository {{< pr number="2056" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Initial ESP32-C3-DevKitM-1 board support {{< pr number="2062" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Fix a bunch of typos {{< pr number="2058" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- pm1006: add rx-only support {{< pr number="2038" repo="esphome" >}} by {{< ghuser name="Habbie" >}} (new-integration) -- Add sensor monetary device_class {{< pr number="2083" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Make light.addressable_set color parameters behave as documented & consistent with elsewhere {{< pr number="2009" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump pylint from 2.9.5 to 2.9.6 {{< pr number="2087" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ESPAsyncWebServer-esphome to 1.3.0 {{< pr number="2075" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Add SDP3x sensor {{< pr number="2064" repo="esphome" >}} by {{< ghuser name="Azimath" >}} (new-integration) -- Add support for the TLC5947 24-Channel, 12-Bit PWM LED Driver {{< pr number="2066" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- Add T6615 {{< pr number="1170" repo="esphome" >}} by {{< ghuser name="tylermenezes" >}} (new-integration) -- Add support for the HRXL MaxSonar WR series sensors {{< pr number="2020" repo="esphome" >}} by {{< ghuser name="netmikey" >}} (new-integration) -- Pull ESP32 Wifi fixes from arduino-esp32 {{< pr number="2069" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add demo integration {{< pr number="2085" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- Add device class support to MQTT cover {{< pr number="2092" repo="esphome" >}} by {{< ghuser name="krconv" >}} -- Color mode implementation {{< pr number="2012" repo="esphome" >}} by {{< ghuser name="oxan" >}} (notable-change) (breaking-change) -- Convert more code to async-def syntax {{< pr number="2095" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix parity bit calculation for ESP8266SoftwareSerial {{< pr number="1873" repo="esphome" >}} by {{< ghuser name="esev" >}} (breaking-change) -- Convert sensor_schema to use kwargs {{< pr number="2094" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix MQTT light include {{< pr number="2104" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix missing include in light_traits.h {{< pr number="2105" repo="esphome" >}} by {{< ghuser name="jkl1337" >}} -- Add select entities and implement template select {{< pr number="2067" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) (notable-change) -- pmsx003: add standard particle, particle counts {{< pr number="1694" repo="esphome" >}} by {{< ghuser name="warthog9" >}} -- Dont force 0 state instead of min_power unless explicit config set {{< pr number="2107" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix import {{< pr number="2108" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Thermostat enhancements and code clean-up {{< pr number="2073" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump esptool from 2.8 to 3.1 {{< pr number="1839" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add min_save_interval to total_energy/integration for memory wear {{< pr number="1665" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} -- Add support for Waveshare E-Paper 4.2" B V2 {{< pr number="1610" repo="esphome" >}} by {{< ghuser name="brettp" >}} -- Add SM16703 to supported FastLED chipsets {{< pr number="1751" repo="esphome" >}} by {{< ghuser name="robgridley" >}} -- Migrate COLOR constants to Color class & disallow implicit conversions to Color {{< pr number="2093" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add version argument to ESPDEPRECATED macro {{< pr number="2116" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix mixup between ColorMode and ColorCapability {{< pr number="2121" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Various follow-up fixes to color mode changes {{< pr number="2118" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix crash when using addressable_set with out-of-range indices {{< pr number="2120" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add state classes to pvvx_mithermometer {{< pr number="2125" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for ESP8266 Arduino v3.0.1 {{< pr number="2128" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Drop legacy esphomeyaml command wrapper code {{< pr number="2130" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Allow multiple unnamed libraries {{< pr number="2132" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Don't stop effects if brightness goes to zero {{< pr number="2134" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Added support for Hitachi AC424 remote type {{< pr number="2101" repo="esphome" >}} by {{< ghuser name="sourabhjaiswal" >}} (new-integration) -- Anova fahrenheit support {{< pr number="2126" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (breaking-change) -- Tidy HA addon {{< pr number="1937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Removed unused arguments from rgbww code {{< pr number="2137" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Only compile protobuf dumping when very verbose logging is enabled {{< pr number="2139" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Refactor clang-tidy script to use actual compiler flags and includes {{< pr number="2133" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add Toshiba AC generic IR remote protocol {{< pr number="2019" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add new Toshiba AC unit protocol {{< pr number="1987" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add Dish Network protocol {{< pr number="2117" repo="esphome" >}} by {{< ghuser name="ianchi" >}} -- Fix some issues with deprecated argv syntax detection {{< pr number="2127" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Don't discard cold/warm white brightness in constant brightness mode {{< pr number="2136" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Allow entities to be disabled by default in HA {{< pr number="2113" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Adds CGPR1 - Qingping Motion & Ambient light sensor support {{< pr number="1675" repo="esphome" >}} by {{< ghuser name="Tommatheussen" >}} (new-integration) -- Don't mark COLOR_* constants as static in header {{< pr number="2141" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- RFC: status_led: allow to share single light {{< pr number="1974" repo="esphome" >}} by {{< ghuser name="ianchi" >}} -- waveshare_epaper: add support for ttgo t5 b74 variant display {{< pr number="1869" repo="esphome" >}} by {{< ghuser name="osresearch" >}} -- Thermostat enhancements 2 {{< pr number="2114" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Dsmr component {{< pr number="1881" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- Always abort on allocation when out-of-memory {{< pr number="2129" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Support component tsl2591 {{< pr number="2131" repo="esphome" >}} by {{< ghuser name="wjcarpenter" >}} (new-integration) -- Add support for PMSA003i {{< pr number="1501" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- Increase task wdt timeout for ESP32/ESP32-C3 {{< pr number="2096" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Format dev temp idedata {{< pr number="2142" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add rgbct and color_temperature light platforms {{< pr number="2138" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Warn if underscore character is used in hostname {{< pr number="2079" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Break the Tuya set_datapoint_value method into separate methods per datapoint type {{< pr number="2059" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Feature pipsolar anh {{< pr number="1664" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} (new-integration) -- Add deassert_rts_dtr option to force RTS/DTR low when using miniterm {{< pr number="2089" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Support for AM43 BLE blind motors {{< pr number="1744" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (new-integration) -- Fix format warning in Tuya component {{< pr number="1954" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Modular light transformers {{< pr number="2124" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Support for the DKE screen version of LilyGo-TTGO-T5 V2.3 {{< pr number="1969" repo="esphome" >}} by {{< ghuser name="blambov" >}} -- Support multiple configuration directories for update-all subcommand {{< pr number="1925" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Always send all light state values in API {{< pr number="2150" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Let sensors announce their state_class via mqtt {{< pr number="2155" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- Thermostat delayed fan mode fix {{< pr number="2158" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix native API log level enum values {{< pr number="2151" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Initialize color temperature to value within range if possible {{< pr number="2168" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add a dummy color temp {{< pr number="2161" repo="esphome" >}} by {{< ghuser name="DotNetDann" >}} -- Add Gas device class to DSMR component {{< pr number="2169" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Send dirty states when screen wakes up {{< pr number="2167" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove specified accuracy_decimals from total_daily_energy {{< pr number="2174" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add new total_increasing state-class for Home Assistant 2021.9+ {{< pr number="2166" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2021.9.0.md b/content/changelog/2021.9.0.md deleted file mode 100644 index 1396e87b06..0000000000 --- a/content/changelog/2021.9.0.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -description: "Changelog for ESPHome 2021.9.0." -title: "ESPHome 2021.9.0 - 15th September 2021" -params: - seo: - description: Changelog for ESPHome 2021.9.0. - image: /_static/changelog-2021.9.0.png ---- - -{{< imgtable >}} -"AirThings BLE","components/sensor/airthings_ble","airthings_logo.png","" -"H-bridge Fan","components/fan/hbridge","fan.svg","dark-invert" -"ST7920","components/display/st7920","st7920.jpg","" -{{< /imgtable >}} - -## Web Server Vulnerability - -It was brought to our attention by {{< ghuser name="andir" >}} that the {{< docref "/components/web_server" >}} -had a vulnerability in that the OTA form could be POST'd to without the basic auth credentials set in the `web_server` -configuration. If you use the `web_server` and rely on the credentials for security, then you need to upgrade -to 2021.9.2 or disable the `web_server` completely. The [Security Advisory on GitHub](https://github.com/esphome/esphome/security/advisories/GHSA-48mj-p7x2-5jfm) -has been given `CVE-2021-41104`. - -## [Home Assistant Yellow](https://home-assistant.io/yellow) - -You get the most out of your ESPHome devices when you combine it with Home Assistant, -which offers a seamless and local integration to control and manage all your ESPHome devices. -Today Home Assistant launched a crowdfunding campaign for the [Home Assistant Yellow](https://home-assistant.io/yellow), -the easiest way to get started with Home Assistant and a privacy focused smart home. - -## API Encryption - -{{< ghuser name="OttoWinter" >}} has been hard at work adding a layer of encryption to the API which utilises the -`noise` protocol. This releases adds the capabilities to ESPHome devices, but Home Assistant (or other clients) -will need to upgrade their client libraries (e.g. `aioesphomeapi` ) before they can connect and communicate to -devices with encryption. This is scheduled to be available in Home Assistant 2021.10. - -## Git Packages - -[Packages](/components/packages#config-git_packages) have been extended to allow loading (multiple) YAML file(s) from a git repo. -Take a look at the examples to see how to use them. - -## Midea AC - -`platform: midea_ac` has been changed to `platform: midea` in this release and has -quite a few upgrades. Check the docs for the new features. {{< docref "/components/climate/midea" >}} - -## SDM Meters - -{{< docref "/components/sensor/sdm_meter" "SDM Meters" >}} have been fixed to use kWh instead of Wh -as the energy unit of measurement. - -## Template Select/Number/Switch - -The template selects, numbers and switches now have more validations on them preventing weird usage. -If you do not set a `lambda` then you are required to make them either `optimistic: true`, or -utilise the `set_action` (select/number) / `turn_on_trigger` (switch). - - - -## Release 2021.9.1 - September 20 - -- Fix MQTT discovery for sensor state_class {{< pr number="2331" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Light transition fixes {{< pr number="2320" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Cease using deprecated Cover methods in automations {{< pr number="2326" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Apply color brightness to addressable light effects {{< pr number="2321" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add readv and writev for more efficient API packets {{< pr number="2342" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Clean-up sensor integration {{< pr number="2275" repo="esphome" >}} by {{< ghuser name="oxan" >}} - -## Release 2021.9.2 - September 28 - -- Bump aioesphomeapi to 9.1.1 {{< pr number="2350" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Midea fix {{< pr number="2395" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Move web_server auth to web_server_base [be965a6](https://github.com/esphome/esphome/commit/be965a60eba6bb769e2a5afdbc8eed132f077a59) by {{< ghuser name="OttoWinter" >}} -- Fix lint issues in web_server_base {{< pr number="2409" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2021.9.3 - October 7 - -- Re-enable TCP nodelay for ESP32 {{< pr number="2390" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump aioesphomeapi from 9.1.1 to 9.1.2 {{< pr number="2426" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix socket abstraction for ESP-IDF v4 {{< pr number="2434" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Bump aioesphomeapi from 9.1.2 to 9.1.4 {{< pr number="2443" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add log line to show if API encryption is being used {{< pr number="2450" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- API encryption switch to libsodium backend {{< pr number="2456" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} - -## Full list of changes - -### New Features - -- Add H-Bridge fan component {{< pr number="2212" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (new-feature) -- Allow using a git source for a package {{< pr number="2193" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Add st7920 display, {{< pr number="1440" repo="esphome" >}} by {{< ghuser name="marsjan155" >}} (new-integration) -- Support for the AirThings Wave Plus {{< pr number="1656" repo="esphome" >}} by {{< ghuser name="jeromelaban" >}} (new-integration) - -### Breaking Changes - -- Fix SDM energy units to be KILO... {{< pr number="2206" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Reject template select/number/switches that don't handle user input {{< pr number="2230" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Remove last_reset_type and convert all those sensors to TOTAL_INCREASING {{< pr number="2233" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Midea support v2 {{< pr number="2188" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) - -### Beta Fixes - -- Fix a few ESP32-C3 compiler issues {{< pr number="2265" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- sm300d2: Accept (undocumented) 0x80 checksum offset. {{< pr number="2263" repo="esphome" >}} by {{< ghuser name="poptix" >}} -- Disable automatic usage of SNTP servers from DHCP {{< pr number="2273" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Only try compat parsing after regular parsing fails {{< pr number="2269" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Suppress excessive warnings about deprecated Fan interfaces {{< pr number="2270" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- t6615: tolerate sensor dropping commands {{< pr number="2255" repo="esphome" >}} by {{< ghuser name="jasstrong" >}} -- Fix API socket issues {{< pr number="2288" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump platformio to 5.2.0 {{< pr number="2291" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- API Noise logging {{< pr number="2298" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix api noise explicit reject {{< pr number="2297" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Allow simple hostname for sntp servers {{< pr number="2300" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix binary strobe {{< pr number="2301" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix unit of measurement fields for DSMR power consumed/delivered fields {{< pr number="2304" repo="esphome" >}} by {{< ghuser name="jsuanet" >}} -- Simple time.sleep in place of threading wait due to upgraded zeroconf {{< pr number="2307" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix aioesphomeapi API logger with explicit API port config {{< pr number="2310" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Start a wifi scan after saving station details {{< pr number="2315" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Minor code cleanup in light components {{< pr number="2162" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Add device class update to binary sensor {{< pr number="2170" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Total daily energy methods {{< pr number="2163" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Set SDM voltage state class to measurement {{< pr number="2181" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add macros header with more usable Arduino version defines {{< pr number="2145" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Clean-up constant definitions {{< pr number="2148" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove double scheduling from addressable lights {{< pr number="1963" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Reduce static RAM usage {{< pr number="2140" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix template select log message mentioning number {{< pr number="2194" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add deprecated attribute to some deprecated types/methods {{< pr number="2185" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Store source package in Component for debugging {{< pr number="2070" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- ST7789V: Make backlight_pin optional {{< pr number="2180" repo="esphome" >}} by {{< ghuser name="speijnik" >}} -- Fix SDM energy units to be KILO... {{< pr number="2206" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Optionally set direction on fan.turn_on action {{< pr number="2171" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} -- Add st7920 display, {{< pr number="1440" repo="esphome" >}} by {{< ghuser name="marsjan155" >}} (new-integration) -- Fix css/js file loading for webserver when esphome not executed form config directory {{< pr number="2207" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- cs_pin made optional for ili9341 {{< pr number="2219" repo="esphome" >}} by {{< ghuser name="a13ssandr0" >}} -- Fix Packages when using MQTT {{< pr number="2210" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Update known boards {{< pr number="2190" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump dashboard to 20210826.0 {{< pr number="2211" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove footer validation for fujitsu_general {{< pr number="2196" repo="esphome" >}} by {{< ghuser name="marciogranzotto" >}} -- Glmnet schema 202105 {{< pr number="2220" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Add H-Bridge fan component {{< pr number="2212" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (new-feature) -- Bump black from 21.7b0 to 21.8b0 {{< pr number="2222" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 6.2.4 to 6.2.5 {{< pr number="2223" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Support for the AirThings Wave Plus {{< pr number="1656" repo="esphome" >}} by {{< ghuser name="jeromelaban" >}} (new-integration) -- Fix some lint errors in pylint 2.10.2 {{< pr number="2226" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add transitions to light flash {{< pr number="2201" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} -- iBeacon support for ble_presence {{< pr number="1627" repo="esphome" >}} by {{< ghuser name="ignisf" >}} -- Cleanup flash transitions {{< pr number="2227" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} -- Add is_on and is_off conditions for the fan component {{< pr number="2225" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Bump pylint from 2.9.6 to 2.10.2 {{< pr number="2197" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- mqtt_sensor: properly send state_class via MQTT {{< pr number="2228" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Change uptime's state_class to total_increasing (esphome/issues#2337) {{< pr number="2205" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Expose WHITE/CWWW/RGBCT color modes over MQTT {{< pr number="2231" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Reject template select/number/switches that don't handle user input {{< pr number="2230" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Fix UARTComponent hardware vs software UART0 conflict {{< pr number="2229" repo="esphome" >}} by {{< ghuser name="ferbar" >}} -- Move to use zeroconf library instead of inline copy {{< pr number="2192" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow using a git source for a package {{< pr number="2193" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Remove last_reset_type and convert all those sensors to TOTAL_INCREASING {{< pr number="2233" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Dont dump legacy fields {{< pr number="2241" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix encoding bug {{< pr number="2242" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Light: include ON_OFF capability to BRIGHTNESS ColorMode {{< pr number="2204" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- LOG_UPDATE_INTERVAL: correctly report "never" {{< pr number="2240" repo="esphome" >}} by {{< ghuser name="Habbie" >}} -- Fix runtime exception due to dict typing {{< pr number="2243" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} -- template: select: fix initial_value cannot be used with lambda {{< pr number="2244" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Add device classes new in HA 2021.9 {{< pr number="2248" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Logger prevent recursive logging {{< pr number="2251" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add new trigger to fan component `on_speed_set` {{< pr number="2246" repo="esphome" >}} by {{< ghuser name="dgtal1" >}} -- Fix fan speed restore issue on boot {{< pr number="1867" repo="esphome" >}} by {{< ghuser name="wifwucite" >}} -- Template sensors always publish on update interval {{< pr number="2224" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Socket component {{< pr number="2250" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Allow .yml files in dashboard {{< pr number="2257" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump dashboard to 20210908.0 and fix card names for yml {{< pr number="2258" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix socket not setting callbacks early enough {{< pr number="2260" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Convert API to use sockets {{< pr number="2253" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Midea support v2 {{< pr number="2188" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- ccs811: publish firmware version; log bootloader and HW version; fix a bug {{< pr number="2006" repo="esphome" >}} by {{< ghuser name="Habbie" >}} -- API encryption {{< pr number="2254" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Revert "Dont dump legacy fields" {{< pr number="2259" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- pm1006: add support for sending a measurement request {{< pr number="2214" repo="esphome" >}} by {{< ghuser name="Habbie" >}} -- SGP40 sensor start-up fix {{< pr number="2178" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- PMSA003i Update state_class and async {{< pr number="2216" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} -- Fix a few ESP32-C3 compiler issues {{< pr number="2265" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- sm300d2: Accept (undocumented) 0x80 checksum offset. {{< pr number="2263" repo="esphome" >}} by {{< ghuser name="poptix" >}} -- Disable automatic usage of SNTP servers from DHCP {{< pr number="2273" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Only try compat parsing after regular parsing fails {{< pr number="2269" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Suppress excessive warnings about deprecated Fan interfaces {{< pr number="2270" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- t6615: tolerate sensor dropping commands {{< pr number="2255" repo="esphome" >}} by {{< ghuser name="jasstrong" >}} -- Fix API socket issues {{< pr number="2288" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump platformio to 5.2.0 {{< pr number="2291" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- API Noise logging {{< pr number="2298" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix api noise explicit reject {{< pr number="2297" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Allow simple hostname for sntp servers {{< pr number="2300" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix binary strobe {{< pr number="2301" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix unit of measurement fields for DSMR power consumed/delivered fields {{< pr number="2304" repo="esphome" >}} by {{< ghuser name="jsuanet" >}} -- Simple time.sleep in place of threading wait due to upgraded zeroconf {{< pr number="2307" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix aioesphomeapi API logger with explicit API port config {{< pr number="2310" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Start a wifi scan after saving station details {{< pr number="2315" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.1.0.md b/content/changelog/2022.1.0.md deleted file mode 100644 index a2e2cfe2aa..0000000000 --- a/content/changelog/2022.1.0.md +++ /dev/null @@ -1,241 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.1.0." -title: "ESPHome 2022.1.0 - 19th January 2022" -params: - seo: - description: Changelog for ESPHome 2022.1.0. - image: /_static/changelog-2022.1.0.png ---- - -{{< imgtable >}} -"BL0940","components/sensor/bl0940","bl0940.png","" -"BMP388 and BMP390","components/sensor/bmp3xx","bmp388.jpg","" -"CD74HC4067","components/sensor/cd74hc4067","cd74hc4067.jpg","" -"ESP32 Native CAN Bus","components/canbus","canbus.svg","" -"Growatt Solar","components/sensor/growatt_solar","growatt.jpg","" -"INA260","components/sensor/ina260","ina260.jpg","" -"Inkplate 10","components/display/inkplate6","inkplate6.jpg","" -"Kalman Combinator","components/sensor/kalman_combinator","function.svg","dark-invert" -"MCP3204","components/sensor/mcp3204","mcp3204.jpg","" -"MCP47A1","components/output/mcp47a1","mcp47a1.svg","" -"Midea IR Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Safe Mode Button","components/button/safe_mode","restart-alert.svg","dark-invert" -"Shutdown Button","components/button/shutdown","power_settings.svg","dark-invert" -"Tuya Number","components/number/tuya","tuya.png","" -{{< /imgtable >}} -HAPPY NEW YEAR!! - -There are a few more new components this release than I expected, yay!!! - -## ESPHome Web - -Today we're launching a new variant of the ESPHome dashboard: ESPHome Web – . - -The biggest challenge to getting started with ESPHome is the initial installation of ESPHome on your device. -This installation needs be done by attaching the device to your computer via a cable. Once installed, updates can -be installed over-the-air. - -Last year we added support to the ESPHome dashboard to do the initial installation via the browser. Browsers -security require the website to be served over HTTPS to allow device installation. Most people browse it from - or other local addresses so only users that manually configured external access or -using Home Assistant Cloud could benefit. - -With ESPHome Web we took the installation bits of the ESPHome dashboard and made them available on a website served -over HTTPS. It works 100% in your browser without a backend or data leaving your computer. Now anyone can easily -install ESPHome on their devices to get started. - -[Visit ESPHome Web](https://web.esphome.io) - -## JSON - -We upgraded the ArduinoJson library used to parse and build JSON strings to the latest version. -All of the internal code has been updated to work with the changes, but any custom code or even -`lambda` might need updating now. - -The most noticeble change is that the `&` reference modifier on the `JsonObject` that are -created in lambdas are no longer required. - -Example: - -```cpp -JsonObject &blah = root.createNestedObject("blah"); - -// This should now be: - -JsonObject blah = root.createNestedObject("blah"); -``` - - - -## Release 2022.1.1 - January 20 - -- Add `*.py.script` files to distributions {{< pr number="3074" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.1.2 - January 25 - -- [modbus_controller] fix incorrect start address for number write {{< pr number="3073" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Set the wrapped single light in light partition to internal {{< pr number="3092" repo="esphome" >}} by {{< ghuser name="placidorevilla" >}} - -## Release 2022.1.3 - February 2 - -- Fix backwards string case helpers {{< pr number="3126" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -## Release 2022.1.4 - February 9 - -- Enable mDNS during OTA safe mode {{< pr number="3146" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Try fix canbus config validation {{< pr number="3173" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- Support different run duration for non-timer wakeup {{< pr number="2861" repo="esphome" >}} by {{< ghuser name="jhamhader" >}} (new-feature) -- Add light.on_state trigger {{< pr number="2868" repo="esphome" >}} by {{< ghuser name="tony-fav" >}} (new-feature) -- Support inkplate10 {{< pr number="2937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Add growatt modbus sensor {{< pr number="2922" repo="esphome" >}} by {{< ghuser name="leeuwte" >}} (new-integration) -- Add Tuya Number support {{< pr number="2765" repo="esphome" >}} by {{< ghuser name="frankiboy1" >}} (new-integration) -- Add shutdown and safe_mode button {{< pr number="2918" repo="esphome" >}} by {{< ghuser name="jsuanet" >}} (new-integration) -- INA260 Current and Power Sensor support {{< pr number="2788" repo="esphome" >}} by {{< ghuser name="MrEditor97" >}} (new-integration) -- Improve PSRAM support {{< pr number="2884" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-integration) -- Add bl0940 component used by e.g. tuya devices {{< pr number="1904" repo="esphome" >}} by {{< ghuser name="tobias-" >}} (new-integration) -- Add support for BMP388 / BMP 390 pressure and temperature sensor {{< pr number="2716" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Add MCP47A1 DAC output {{< pr number="3014" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Create new kalman_combinator component {{< pr number="2965" repo="esphome" >}} by {{< ghuser name="Cat-Ion" >}} (new-integration) -- New Midea IR component, improvements and fixes {{< pr number="2847" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-integration) -- MCP3204 4-channel 12-bit ADC component {{< pr number="2895" repo="esphome" >}} by {{< ghuser name="rsumner" >}} (new-integration) -- Add cd74hc4067 multiplexer {{< pr number="2431" repo="esphome" >}} by {{< ghuser name="asoehlke" >}} (new-integration) -- Native ESP32 CAN support {{< pr number="1629" repo="esphome" >}} by {{< ghuser name="Sympatron" >}} (new-integration) - -### Breaking Changes - -- Modbus: use multiply for publishing number {{< pr number="2916" repo="esphome" >}} by {{< ghuser name="martgras" >}} (breaking-change) -- Upgrade ArduinoJson to 6.18.5 and migrate code {{< pr number="2844" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix backwards string case helpers {{< pr number="3126" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- Add factory to download name {{< pr number="3040" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump dashboard to 20220113.2 {{< pr number="3041" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Disable caching for binary download {{< pr number="3054" repo="esphome" >}} by {{< ghuser name="lutzky" >}} -- Rename post_build scripts to fix codeowners script {{< pr number="3057" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove deprecated attribute from virtual entity methods {{< pr number="3056" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add number setting to web_server/rest_api {{< pr number="3055" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- bump dashboard to 20220116.0 {{< pr number="3061" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- [modbus_controller] add missing skip_updates {{< pr number="3063" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fail hard if no random bytes available for encryption {{< pr number="3067" repo="esphome" >}} by {{< ghuser name="oxan" >}} - -### All changes - -- Add a simple helper to remap values {{< pr number="2850" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pylint from 2.12.1 to 2.12.2 {{< pr number="2858" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Support different run duration for non-timer wakeup {{< pr number="2861" repo="esphome" >}} by {{< ghuser name="jhamhader" >}} (new-feature) -- Drop len parameter from parse_number() {{< pr number="2883" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Drop unused xSemaphoreWait define {{< pr number="2888" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Move i2c scan to setup {{< pr number="2869" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Introduce hex parsing & formatting helper functions {{< pr number="2882" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add light.on_state trigger {{< pr number="2868" repo="esphome" >}} by {{< ghuser name="tony-fav" >}} (new-feature) -- Reduce timing noise in duty_cycle {{< pr number="2881" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Turn verbose a debug statement in bme280 {{< pr number="2906" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Add reset_duration option for waveshare epaper HAT rev 2.1 {{< pr number="1481" repo="esphome" >}} by {{< ghuser name="owenb321" >}} -- Log the actual value in modbus number {{< pr number="2901" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add gpio 12 to strapping pin list {{< pr number="2902" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Added access to ble_scan_result_evt_param as get_scan_result {{< pr number="2854" repo="esphome" >}} by {{< ghuser name="myhomeiot" >}} -- fix multi-line comment warning/error {{< pr number="2891" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Bump black from 21.11b1 to 21.12b0 {{< pr number="2879" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Adding Pascal unit to constants {{< pr number="2914" repo="esphome" >}} by {{< ghuser name="jddonovan" >}} -- quantile filter support {{< pr number="2900" repo="esphome" >}} by {{< ghuser name="konikvranik" >}} -- ESP32 CAM add Automatic Exposure Control option {{< pr number="2892" repo="esphome" >}} by {{< ghuser name="sveip" >}} -- Modbus: use multiply for publishing number {{< pr number="2916" repo="esphome" >}} by {{< ghuser name="martgras" >}} (breaking-change) -- Add growatt modbus sensor {{< pr number="2922" repo="esphome" >}} by {{< ghuser name="leeuwte" >}} (new-integration) -- Add Tuya Number support {{< pr number="2765" repo="esphome" >}} by {{< ghuser name="frankiboy1" >}} (new-integration) -- Support inverted tm1637 display {{< pr number="2878" repo="esphome" >}} by {{< ghuser name="jlsjonas" >}} -- Fix tm1637 bootloop {{< pr number="2929" repo="esphome" >}} by {{< ghuser name="jlsjonas" >}} -- Add shutdown and safe_mode button {{< pr number="2918" repo="esphome" >}} by {{< ghuser name="jsuanet" >}} (new-integration) -- Support inkplate10 {{< pr number="2937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- bang_bang: respect set cool- and heat-only modes {{< pr number="2926" repo="esphome" >}} by {{< ghuser name="sairon" >}} -- Update curl package version in docker {{< pr number="2939" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Change HDC1080 init instruction failure from error to warning {{< pr number="2927" repo="esphome" >}} by {{< ghuser name="grob6000" >}} -- Add option to load docker image when building {{< pr number="2938" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Disable nightly dev build {{< pr number="2943" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Revert "Disable nightly dev build" {{< pr number="2944" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove Content-Length header from camera snapshot response {{< pr number="2860" repo="esphome" >}} by {{< ghuser name="DotNetDann" >}} -- ST7920 ESP32 fix {{< pr number="2962" repo="esphome" >}} by {{< ghuser name="marsjan155" >}} -- Fix switch log state if inverted {{< pr number="2960" repo="esphome" >}} by {{< ghuser name="hobbyquaker" >}} -- Add pin aliases for featheresp32-s2 {{< pr number="2970" repo="esphome" >}} by {{< ghuser name="arunderwood" >}} -- INA260 Current and Power Sensor support {{< pr number="2788" repo="esphome" >}} by {{< ghuser name="MrEditor97" >}} (new-integration) -- Upgrade ArduinoJson to 6.18.5 and migrate code {{< pr number="2844" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Don't use pyproject.toml for esphome build {{< pr number="2980" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Explicitly use overloaded begin() for I2C master initialization {{< pr number="2978" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Use template path {{< pr number="2961" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Fix compile error for idf projects with ArduinoJson 6 {{< pr number="2979" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Modbus: fix response parsing error for coil write {{< pr number="2986" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Change unset ESPHOME_LOG_LEVEL fallback to NONE {{< pr number="2982" repo="esphome" >}} by {{< ghuser name="dbuezas" >}} -- Add SH1107_128x64 to the ssd1306 component {{< pr number="2967" repo="esphome" >}} by {{< ghuser name="arunderwood" >}} -- Add logging for some Nextion errors that didn't have any {{< pr number="2957" repo="esphome" >}} by {{< ghuser name="masto" >}} -- Fix HTTPRequestComponent::get_string return value {{< pr number="2987" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Improve PSRAM support {{< pr number="2884" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-integration) -- Support ISR based pulse counter on ESP32-C3 {{< pr number="2983" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Use to_string() from STL when available {{< pr number="2992" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Set UTF-8 encoding and version for prometheus /metrics {{< pr number="2993" repo="esphome" >}} by {{< ghuser name="MyIgel" >}} -- Introduce bit_cast() backport {{< pr number="2991" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Apply --no-use-pep517 for docker images {{< pr number="2985" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont validate baud_rate for sim800l platform {{< pr number="2945" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Modbus: add binary output {{< pr number="2931" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Add bl0940 component used by e.g. tuya devices {{< pr number="1904" repo="esphome" >}} by {{< ghuser name="tobias-" >}} (new-integration) -- Honor user set values for col/row start for INITR_MINI_160X80. {{< pr number="2976" repo="esphome" >}} by {{< ghuser name="gonzalop" >}} -- Fix clang-tidy with multiple ESP32 toolchains installed {{< pr number="2998" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Set correct include_dir in platformio.ini {{< pr number="2999" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- SGP40 - Reduce delay in measurement {{< pr number="2996" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- atc mithermometer: Add possibility to report signal strength {{< pr number="3000" repo="esphome" >}} by {{< ghuser name="mknjc" >}} -- Support clang-tidy for ESP32 variants {{< pr number="3001" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix SlowPWM output switch at the end of period {{< pr number="2984" repo="esphome" >}} by {{< ghuser name="Chupaka" >}} -- Add support for BMP388 / BMP 390 pressure and temperature sensor {{< pr number="2716" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Clean-up reverse_bits helpers {{< pr number="3011" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Convert clamp() helper to backport of std::clamp() {{< pr number="3010" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Introduce str_lower_case() and str_upper_case() helpers {{< pr number="3008" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Drop uint{32,64}_to_string() helper functions {{< pr number="3009" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump PlatformIO to 5.2.4 and zeroconf to 0.37.0 {{< pr number="3007" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Offset bugfix in Modbus Text Sensor {{< pr number="3006" repo="esphome" >}} by {{< ghuser name="stegm" >}} -- Add MCP47A1 DAC output {{< pr number="3014" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Bump docker dependencies {{< pr number="3019" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix register ranges in modbus controller {{< pr number="2981" repo="esphome" >}} by {{< ghuser name="stegm" >}} -- Add restore_mode to output switch {{< pr number="3016" repo="esphome" >}} by {{< ghuser name="joshuaspence" >}} -- Add turn_on/off trigger to slow_pwm {{< pr number="2921" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Convert is_callable to a backport of std::is_invocable {{< pr number="3023" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Create new kalman_combinator component {{< pr number="2965" repo="esphome" >}} by {{< ghuser name="Cat-Ion" >}} (new-integration) -- New Midea IR component, improvements and fixes {{< pr number="2847" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-integration) -- Extend esp32_camera with requester to improve performance {{< pr number="2813" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- MCP3204 4-channel 12-bit ADC component {{< pr number="2895" repo="esphome" >}} by {{< ghuser name="rsumner" >}} (new-integration) -- Adding sdm_meter ability to report total power {{< pr number="2959" repo="esphome" >}} by {{< ghuser name="MiKuBB" >}} -- [Modbus_controller] Fix binary sensor lambda {{< pr number="3020" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Clean-up random helper functions {{< pr number="3022" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix display picture for nextion display {{< pr number="3018" repo="esphome" >}} by {{< ghuser name="lhoracek" >}} -- Fix heatpumpir codegen min/max temperatures {{< pr number="3025" repo="esphome" >}} by {{< ghuser name="jeffborg" >}} -- Add an action for pzemac to reset the total energy {{< pr number="2480" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Nexa 433MHz RF protocol {{< pr number="2037" repo="esphome" >}} by {{< ghuser name="GruffyPuffy" >}} -- Deprecate virtual methods to set entity properties {{< pr number="3021" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Run post scripts for factory binaries for flashing {{< pr number="3003" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add cd74hc4067 multiplexer {{< pr number="2431" repo="esphome" >}} by {{< ghuser name="asoehlke" >}} (new-integration) -- Native ESP32 CAN support {{< pr number="1629" repo="esphome" >}} by {{< ghuser name="Sympatron" >}} (new-integration) -- [Modbus_controller] Fix duplicate cmd check {{< pr number="3031" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Introduce big- and little-endian integer types {{< pr number="2997" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Generate basic config for esphome-web devices {{< pr number="3036" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20220113.1 {{< pr number="3038" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add factory to download name {{< pr number="3040" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump dashboard to 20220113.2 {{< pr number="3041" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Disable caching for binary download {{< pr number="3054" repo="esphome" >}} by {{< ghuser name="lutzky" >}} -- Rename post_build scripts to fix codeowners script {{< pr number="3057" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Remove deprecated attribute from virtual entity methods {{< pr number="3056" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add number setting to web_server/rest_api {{< pr number="3055" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- bump dashboard to 20220116.0 {{< pr number="3061" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- [modbus_controller] add missing skip_updates {{< pr number="3063" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fail hard if no random bytes available for encryption {{< pr number="3067" repo="esphome" >}} by {{< ghuser name="oxan" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.10.0.md b/content/changelog/2022.10.0.md deleted file mode 100644 index 577fe12bbc..0000000000 --- a/content/changelog/2022.10.0.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.10.0." -title: "ESPHome 2022.10.0 - 19th October 2022" -params: - seo: - description: Changelog for ESPHome 2022.10.0. - image: /_static/changelog-2022.10.0.png ---- - -{{< imgtable >}} -"BLE Client RSSI Sensor","components/sensor/ble_client","bluetooth.svg","dark-invert" -"ZHLT01 IR Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -{{< /imgtable >}} -This month we have been busy upgrading the Bluetooth Proxy support for Home Assistant. -This meant there are many PRs awaiting reviews for new components that were unable to be -reviewed and merged in time. We will be trying to pack the next release. - -## Python Version 3.9 - -ESPHome now requires Python 3.9 or newer. This is taken care of if you use the Home Assistant addon -or docker image. If using pip, you will need to upgrade your Python version manually before ESPHome will -upgrade. - -## BLE Client Sensors - -Due to adding a new RSSI sensor to the `ble_client` sensor platform, a new `type` configuration variable. -You will get a validation error when you try to install and you have not added a `type` to your -existing configurations. - -## XPT2046 Touchscreen - -The `xpt2046` touchscreen component has been updated to be a platform of `touchscreen` instead of a -top level component. This requires a small change to your configuration, see -{{< docref "/components/touchscreen/xpt2046" >}} for the new way to configure. - - - -## Release 2022.10.1 - October 26 - -- Update bluetooth proxy limit as soon as connection requested {{< pr number="3935" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add water & precipitation_intensity sensor device classes {{< pr number="3940" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Fixed touch release issue using the interrupt pin {{< pr number="3925" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Add wind_speed sensor device class {{< pr number="3941" repo="esphome" >}} by {{< ghuser name="frenck" >}} - -## Release 2022.10.2 - November 1 - -- Fix bluetooth_proxy not connecting {{< pr number="3967" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### Breaking Changes - -- Thermostat remove deprecated config {{< pr number="3643" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} (breaking-change) -- Bump python min to 3.9 {{< pr number="3871" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Refactor xpt2046 to be a touchscreen platform {{< pr number="3793" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (breaking-change) -- Add ble RSSI sensor for connected devices {{< pr number="3860" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} (breaking-change) - -### Beta Changes - -- fix never calling preset change trigger {{< pr number="3864" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Modbus QWORD fix {{< pr number="3856" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Send true and not RSSI in ble_presence {{< pr number="3904" repo="esphome" >}} by {{< ghuser name="fjouault" >}} -- Remove address type map from bluetooth proxy {{< pr number="3905" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Update mcp23s17.cpp {{< pr number="3797" repo="esphome" >}} by {{< ghuser name="pawel3410" >}} -- Allow CORS for web_server {{< pr number="3819" repo="esphome" >}} by {{< ghuser name="zhzhzhy" >}} -- Dont fail fast on CI for docker {{< pr number="3832" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Thermostat remove deprecated config {{< pr number="3643" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} (breaking-change) -- Add support for parsing the short local name in the tracker {{< pr number="3854" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add display GPIO setup instruction for Aliexpress display {{< pr number="3851" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- fix dump preset string type {{< pr number="3863" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Bump CI to python 3.9 {{< pr number="3869" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add cg.with_local_variable {{< pr number="3577" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Fix time/automation (cron) wdt crash when time jumps ahead too much {{< pr number="3844" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Bump pyupgrade from 2.37.3 to 3.0.0 {{< pr number="3867" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add min_version to esphome config {{< pr number="3866" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump python min to 3.9 {{< pr number="3871" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Bump pylint from 2.15.2 to 2.15.3 {{< pr number="3870" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add new sensor device classes {{< pr number="3895" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Refactor xpt2046 to be a touchscreen platform {{< pr number="3793" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (breaking-change) -- Proxy friendly host url resolution for `use_address` with path. {{< pr number="3653" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Update webserver index file {{< pr number="3896" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Correctly set ble_write UUIDs based on their lengths. {{< pr number="3885" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Fix default unit for ble_rssi sensor {{< pr number="3874" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Exposing coordinates from touchscreen binary sensor {{< pr number="3891" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} -- Fix type annotation on `extract_registry_entry_config` {{< pr number="3623" repo="esphome" >}} by {{< ghuser name="quentinmit" >}} -- Add ble RSSI sensor for connected devices {{< pr number="3860" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} (breaking-change) -- Fix pulse_meter filter logic {{< pr number="3321" repo="esphome" >}} by {{< ghuser name="cstaahl" >}} -- Add support for ZHLT01 heatpump IR protocol {{< pr number="3655" repo="esphome" >}} by {{< ghuser name="cfeenstra1024" >}} -- Send GATT error events to HA {{< pr number="3884" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Do not require CS pin for ST7789V {{< pr number="3888" repo="esphome" >}} by {{< ghuser name="definitio" >}} -- fix never calling preset change trigger {{< pr number="3864" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Modbus QWORD fix {{< pr number="3856" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Send true and not RSSI in ble_presence {{< pr number="3904" repo="esphome" >}} by {{< ghuser name="fjouault" >}} -- Remove address type map from bluetooth proxy {{< pr number="3905" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.11.0.md b/content/changelog/2022.11.0.md deleted file mode 100644 index cbc3e9a7bb..0000000000 --- a/content/changelog/2022.11.0.md +++ /dev/null @@ -1,234 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.11.0." -title: "ESPHome 2022.11.0 - 16th November 2022" -params: - seo: - description: Changelog for ESPHome 2022.11.0. - image: /_static/changelog-2022.11.0.png ---- - -{{< imgtable >}} -"RP2040","components/rp2040","rp2040.svg","" -"WL-134 Pet Tag Sensor","components/text_sensor/wl_134","fingerprint.svg","dark-invert" -"Ethernet Info","components/text_sensor/ethernet_info","ethernet.svg","dark-invert" -"Atlas Scientific Peristaltic Pump","components/ezo_pmp","ezo-pmp.jpg","" -"ADC128S102","components/sensor/adc128s102","adc128s102.png","" -"Daikin BRC","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Display Menu Core","components/display_menu/index","folder-open.svg","dark-invert" -"LCD Menu","components/display_menu/lcd_menu","lcd_menu.png","" -{{< /imgtable >}} - -## Raspberry Pi Pico-W - -What can I say... I (Jesse) started working on making ESPHome run on the original Raspberry Pi -Pico one random weekend just for fun with no real intention of taking it further myself. -Little did I know there would be a Raspberry Pi Pico-W released earlier this year which sparked -up interest in continuing that PR and almost fully implementing RP2040 and the Pico-W as -a supported platform in ESPHome. - -There are things that have not been tested, and most likely things that will not work, so -please [create or search for an issue](https://github.com/esphome/esphome/issues) if this is the case. - -Looking forward to seeing peoples projects built on these boards running ESPHome. - -## Script Parameters - -Thanks {{< ghuser name="jimtng" >}} for taking the time to implement a feature requested by many people over time. -Parameters on scripts are now a thing. - -```yaml -script: - - id: push_button - parameters: - button: int - then: - - logger.log: - format: "Button %d pressed" - args: [ button ] - -on_...: - - script.execute: - id: push_button - button: 1 - -on_...: - - script.execute: - id: push_button - button: 2 -``` - -## LCD Menu - -Another great feature added this release is the LCD Menu. This allows a user to build a simple (or complex) -menu system on an lcd display within ESPHome YAML, with support for switches, numbers, selects etc. -Thanks {{< ghuser name="numo68" >}}. - -## Preserving User WiFi Credentials - -If you purchase a device, or install ESPHome on a device that does not have Wi-Fi credentials pre-configured from YAML, -ESPHome will now preserve any credentials entered via the {{< docref "/components/captive_portal" >}}, -{{< docref "/components/improv_serial" >}} or {{< docref "/components/esp32_improv" >}} components after an OTA -update of the firmeware is done. It is possible they can survive flashing via serial, but only if the flash was -not erased first, which it is in the case of using ESPHome to flash. - -Products that use [ESP Web Tools](https://esphome.github.io/esp-web-tools) are able to specify in the manifest -that the flash should not be erased when installing the firmware and this is a way to provide updates for a device -that was sold. - -## Running ESPHome on lower powered machines - -People have noticed that trying to compile their projects on machine such as the Raspberry Pi 3 would crash either -the whole machine or the ESPHome add-on, or Home Assistant. This is due to having less RAM and CPU power available -to run all of the things at the same time. A new config option has been added as per the example below that should -help to allow compiling on machines such as Raspberry Pi 3. By default ESPHome tries to compile using all of the -processor cores, and this allows you to limit it to a lower amount. - -```yaml -esphome: - ... - compile_process_limit: 1 -``` - - - -## Release 2022.11.1 - November 17 - -- Support ADC on RP2040 {{< pr number="4040" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.11.2 - November 23 - -- Fix rp2040 pwm to use pico-sdk, not mbed {{< pr number="4059" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update web_server index {{< pr number="4060" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- rp2040_pwm frequency is per pair of pins {{< pr number="4061" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Avoid 128bit uuid loop for 16/32 bit uuids {{< pr number="4068" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Avoid creating a new espbt::ESPBTUUID each loop when registering for notify {{< pr number="4069" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2022.11.3 - November 24 - -- fix missing library {{< pr number="4051" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix units for refresh: never {{< pr number="4048" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} -- Don't convert climate temperature step {{< pr number="4082" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.11.4 - December 1 - -- current-based cover fix copy paste mistake {{< pr number="4124" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dashboard fix relative url after login {{< pr number="4103" repo="esphome" >}} by {{< ghuser name="ngraziano" >}} -- Fix queuing scripts not compiling {{< pr number="4077" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.11.5 - December 6 - -- Fix board pin alias lookup {{< pr number="4147" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- Allow preserving WiFi credentials entered with captive_portal {{< pr number="3813" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} (new-feature) - -### New Components - -- Add support for wl-134 {{< pr number="3569" repo="esphome" >}} by {{< ghuser name="hobbypunk90" >}} (new-integration) -- New platform ethernet_info from component text_sensor {{< pr number="3811" repo="esphome" >}} by {{< ghuser name="gtjadsonsantos" >}} (new-integration) -- Implementation for Atlas Scientific Peristaltic Pump {{< pr number="3528" repo="esphome" >}} by {{< ghuser name="carlos-sarmiento" >}} (new-integration) -- Add adc128s102 sensor {{< pr number="3822" repo="esphome" >}} by {{< ghuser name="DeerMaximum" >}} (new-integration) -- Added component Daikin BRC to support ceiling cassette heatpumps {{< pr number="3743" repo="esphome" >}} by {{< ghuser name="hagak" >}} (new-integration) -- Initial Support for RP2040 platform {{< pr number="3284" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Implement a simple LCD menu {{< pr number="3406" repo="esphome" >}} by {{< ghuser name="numo68" >}} (new-integration) - -### Breaking Changes - -- Don't Use Base Network Manual IP for WiFi AP {{< pr number="3902" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} (breaking-change) - -### Beta Changes - -- Update set-output to use new GITHUB_OUTPUT {{< pr number="4008" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add cover toggle support to current based cover {{< pr number="3950" repo="esphome" >}} by {{< ghuser name="maringeph" >}} -- Add option for dashboard command to only generate the project and supporting files {{< pr number="3981" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix local webserver based on esphome/esphome-webserver#17 {{< pr number="3958" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- fix to_lower filter {{< pr number="4015" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Mark webserver and captive portal as not available on rp2040 {{< pr number="4023" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix time components on rp2040 {{< pr number="4024" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Mark mqtt as unavailable on rp2040 {{< pr number="4025" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update_interval less that 1 second in QMC5883L integration {{< pr number="4031" repo="esphome" >}} by {{< ghuser name="2mikrobi" >}} -- Always save user wifi credentials if non in config {{< pr number="4036" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- bump nginx-light 1.18.0-6.1+deb11u2 to 1.18.0-6.1+deb11u3 {{< pr number="4034" repo="esphome" >}} by {{< ghuser name="johnmoxley" >}} - -### All changes - -- Update the ibeacon code {{< pr number="3859" repo="esphome" >}} by {{< ghuser name="fhriley" >}} -- Don't Use Base Network Manual IP for WiFi AP {{< pr number="3902" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} (breaking-change) -- Allow preserving WiFi credentials entered with captive_portal {{< pr number="3813" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} (new-feature) -- Add support for wl-134 {{< pr number="3569" repo="esphome" >}} by {{< ghuser name="hobbypunk90" >}} (new-integration) -- New platform ethernet_info from component text_sensor {{< pr number="3811" repo="esphome" >}} by {{< ghuser name="gtjadsonsantos" >}} (new-integration) -- Implementation for Atlas Scientific Peristaltic Pump {{< pr number="3528" repo="esphome" >}} by {{< ghuser name="carlos-sarmiento" >}} (new-integration) -- Add adc128s102 sensor {{< pr number="3822" repo="esphome" >}} by {{< ghuser name="DeerMaximum" >}} (new-integration) -- Added component Daikin BRC to support ceiling cassette heatpumps {{< pr number="3743" repo="esphome" >}} by {{< ghuser name="hagak" >}} (new-integration) -- Bump platformio from 6.0.2 to 6.1.4 {{< pr number="3711" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add API interface to request a complete device config as JSON. {{< pr number="3911" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Initial Support for RP2040 platform {{< pr number="3284" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Bump esphome-dashboard to 20221020.0 {{< pr number="3920" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missing dependencies for heatpumpir {{< pr number="3933" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update the PR template {{< pr number="3934" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix error with require_framework_version and rp2040 {{< pr number="3923" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make mDNS on rp2040 work {{< pr number="3936" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Send manufacturer name via API {{< pr number="3938" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update base platformio board for rp2040 {{< pr number="3937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Implement different random for rp2040 {{< pr number="3939" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add proper device class to uptime {{< pr number="3928" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- Show local mac when scanning wifi {{< pr number="3635" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- Prefix devcontainer image with ghcr.io {{< pr number="3942" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Implement InterruptLock for RP2040 {{< pr number="3945" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Implement RP2040 preferences {{< pr number="3946" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix filesystem size for RP2040 OTA {{< pr number="3947" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome/Improv to 1.2.3 {{< pr number="3948" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add core config option to limit compile process count {{< pr number="3952" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Some RP2040 wifi changes for AP mode {{< pr number="3953" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update rp2040 to latest framework release from GitHub {{< pr number="3954" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [SM300D2] Reduce log severity for successful reads {{< pr number="3955" repo="esphome" >}} by {{< ghuser name="pauln" >}} -- Fix imports for rp2040 with no wifi {{< pr number="3956" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow using LED pin on rpi pico-w {{< pr number="3957" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix RP2040 SPISettings {{< pr number="3960" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make some minor changes to I²C so rp2040 works {{< pr number="3959" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump tornado from 6.1 to 6.2 {{< pr number="3620" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-cov from 3.0.0 to 4.0.0 {{< pr number="3922" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Remove gitpod {{< pr number="3964" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump pyupgrade from 3.0.0 to 3.2.0 {{< pr number="3973" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.1.3 to 7.2.0 {{< pr number="3966" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/stale from 5 to 6 {{< pr number="3841" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.15.3 to 2.15.5 {{< pr number="3978" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-mock from 3.8.2 to 3.10.0 {{< pr number="3877" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow multiple bluetooth proxy connections {{< pr number="3971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Always use gh releases in base platformio file for rp2040 {{< pr number="3988" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow the use of multiple RDM6300 devices {{< pr number="3989" repo="esphome" >}} by {{< ghuser name="mbardeen" >}} -- Bump aioesphomeapi from 10.13.0 to 11.4.2 {{< pr number="3987" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- rp2040: Set watchdog to reboot properly {{< pr number="3991" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- RP2040 uart support {{< pr number="3990" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add uart number to LOGCONFIG {{< pr number="3996" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Implement a simple LCD menu {{< pr number="3406" repo="esphome" >}} by {{< ghuser name="numo68" >}} (new-integration) -- Lint updates {{< pr number="3992" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump zeroconf from 0.39.1 to 0.39.4 {{< pr number="3979" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 22.8.0 to 22.10.0 {{< pr number="3986" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Skip validation of defined pins {{< pr number="3999" repo="esphome" >}} by {{< ghuser name="jenscski" >}} -- Bump pytest-asyncio from 0.19.0 to 0.20.1 {{< pr number="4003" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 11.4.2 to 11.4.3 {{< pr number="4002" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump platformio from 6.1.4 to 6.1.5 {{< pr number="4004" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Enable calibration, callbacks and custom commands for EZO sensors {{< pr number="3910" repo="esphome" >}} by {{< ghuser name="gvdhoven" >}} -- Bump esphome-dashboard to 20221109.0 {{< pr number="4006" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for parameters in scripts {{< pr number="3538" repo="esphome" >}} by {{< ghuser name="jimtng" >}} -- Update set-output to use new GITHUB_OUTPUT {{< pr number="4008" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add cover toggle support to current based cover {{< pr number="3950" repo="esphome" >}} by {{< ghuser name="maringeph" >}} -- Add option for dashboard command to only generate the project and supporting files {{< pr number="3981" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix local webserver based on esphome/esphome-webserver#17 {{< pr number="3958" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- fix to_lower filter {{< pr number="4015" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Mark webserver and captive portal as not available on rp2040 {{< pr number="4023" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix time components on rp2040 {{< pr number="4024" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Mark mqtt as unavailable on rp2040 {{< pr number="4025" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update_interval less that 1 second in QMC5883L integration {{< pr number="4031" repo="esphome" >}} by {{< ghuser name="2mikrobi" >}} -- Always save user wifi credentials if non in config {{< pr number="4036" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- bump nginx-light 1.18.0-6.1+deb11u2 to 1.18.0-6.1+deb11u3 {{< pr number="4034" repo="esphome" >}} by {{< ghuser name="johnmoxley" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.12.0.md b/content/changelog/2022.12.0.md deleted file mode 100644 index 84ced3158f..0000000000 --- a/content/changelog/2022.12.0.md +++ /dev/null @@ -1,216 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.12.0." -title: "ESPHome 2022.12.0 - 14th December 2022" -params: - seo: - description: Changelog for ESPHome 2022.12.0. - image: /_static/changelog-2022.12.0.png ---- - -{{< imgtable >}} -"ESP32","components/esp32","esp32.svg","" -"Bluetooth Proxy","components/bluetooth_proxy","bluetooth.svg","dark-invert" -"SN74HC165 I/O Expander","components/sn74hc165","sn74hc595.jpg","" -{{< /imgtable >}} -The festive holidays are coming early and bring you an ESPHome release 1 week earlier than normal. -This release does not bring a bunch of new components like most releases, but instead the focus -has been on upgrading the core Arduino and ESP-IDF versions used for the ESP32 based devices. - -## Ethernet - -Because these core upgrade have aligned the version of ESP-IDF under the hood, `ethernet` -is now able to be used when specifying ESP-IDF as your framework of choice. - -## Bluetooth Proxy - -The Bluetooth Proxy has also had a whole lot of work done by {{< ghuser name="bdraco" >}} under the hood to -improve the stability, speed and reliability between Home Assistant and the bluetooth devices -that get proxied through. Along with some of these bluetooth changes is a change to the -underlying flash partition table that ESPHome uses. OTA will work, but to fully take advantage -of the performance increases for bluetooth, it is best to at least one serial flash with ESPHome -2022.12.0 or later. - -## Container images - -> [!NOTE] -> This breaking change only affects you if you use docker containers directly and specify the suffix -> in your image. - -2022.12.6 changes the way the container images are built and published. This is due to something -breaking somewhere that we could not explain. It has to do with the `docker manifest` command -which has been around for a while but always been marked as `experimental` so we cannot really -complain. - -From now on there will be no builds with tags for the `-armv7` / `-amd64` / `aarch64` suffixes, -but the main images (`ghcr.io/esphome/esphome:` ) will be multi-arch capable and work on the -3 supported architectures. - - - -## Release 2022.12.1 - December 16 - -- Support non-multiarch toolchains on 32-bit ARM {{< pr number="4191" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Mark ESP32-S2 as not having Bluetooth {{< pr number="4194" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix i2s_audio media_player compiling for esp32-s2 {{< pr number="4195" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.12.2 - December 20 - -- Fix import_full_config for adoption configs {{< pr number="4197" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Handle zero padding anywhere in the combined adv data {{< pr number="4208" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2022.12.3 - December 20 - -- Fix ESP32 GPIO when using INPUT PULLUP mode {{< pr number="4213" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.12.4 - January 20 - -- Fix gpio pin mode for ISR pins {{< pr number="4216" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Always send the MTU request for BLE v3 cached connections {{< pr number="4322" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2022.12.5 - January 23 - -- Bump nano version in lint docker image {{< pr number="4218" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.12.6 - January 24 - -- Move from docker manifest command to buildx with platforms {{< pr number="4320" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -## Release 2022.12.7 - January 26 - -- Add "content" to deploy-ha-addon-repo dispatch {{< pr number="4349" repo="esphome" >}} by {{< ghuser name="ludeeus" >}} -- fix stepper jump back with small steps {{< pr number="4339" repo="esphome" >}} by {{< ghuser name="0xDRRB" >}} -- rename esp32 CAN to TWAI, so it compiles again {{< pr number="4334" repo="esphome" >}} by {{< ghuser name="designer2k2" >}} -- Fix BME280 initialization before wifi setup {{< pr number="4190" repo="esphome" >}} by {{< ghuser name="pxe-la" >}} -- Add a soft reset in setup() for bmp280 {{< pr number="4329" repo="esphome" >}} by {{< ghuser name="melyux" >}} - -## Release 2022.12.8 - January 27 - -- Upgrades add-on base image to 6.2.0 {{< pr number="4310" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Migrate old-style S6 scripts to s6-rc.d {{< pr number="4311" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Refactor NGINX configuration of Home Assistant Add-on {{< pr number="4312" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Add Home Assistant integration discovery {{< pr number="4328" repo="esphome" >}} by {{< ghuser name="frenck" >}} - -## Full list of changes - -### New Features - -- PID Climate - deadband and output sampling {{< pr number="3254" repo="esphome" >}} by {{< ghuser name="patrickcollins12" >}} (new-feature) - -### New Components - -- Add sn74hc165 input shift register {{< pr number="4151" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- Update esp32 arduino and platform versions {{< pr number="3564" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) (breaking-change) - -### Beta Changes - -- Fix ble parsing with zero padded advertisements {{< pr number="4162" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Increase watchdog timeout when starting OTA {{< pr number="4172" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20221213.0 {{< pr number="4176" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove internal pin restriction from cd74hc4067 {{< pr number="4179" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Speed up bluetooth proxy connections when using esp-idf {{< pr number="4171" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (notable-change) -- Remove warnings when falling through switch cases on purpose {{< pr number="4181" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Revert camera config change for esp-idf {{< pr number="4182" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### Notable Changes - -- Update esp32 arduino and platform versions {{< pr number="3564" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) (breaking-change) -- Update ESP-IDF and platform version {{< pr number="3565" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) -- Speed up bluetooth proxy connections when using esp-idf {{< pr number="4171" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (notable-change) - -### All changes - -- Bump colorama from 0.4.5 to 0.4.6 {{< pr number="4010" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump frenck/action-yamllint from 1.3.0 to 1.3.1 {{< pr number="4011" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- add two new icons {{< pr number="3963" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- Move CONF_INTERRUPT_PIN to const.py {{< pr number="4014" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pyupgrade from 3.2.0 to 3.2.2 {{< pr number="4017" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add reset_reason text sensor to debug component {{< pr number="3814" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- remove unused variable last_save in total_daily_energy {{< pr number="4039" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} -- Bump base image versions to latest {{< pr number="4016" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add number device class support {{< pr number="4042" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Update esp32 arduino and platform versions {{< pr number="3564" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) (breaking-change) -- Update esp32 boards list {{< pr number="4056" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add Lolin S2 Mini board {{< pr number="3264" repo="esphome" >}} by {{< ghuser name="jhamhader" >}} -- Add pin aliases for upesy boards {{< pr number="3794" repo="esphome" >}} by {{< ghuser name="uPesy" >}} -- Bump pylint from 2.15.5 to 2.15.6 {{< pr number="4058" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- fix display_menu recursive schema gen {{< pr number="4045" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Remove manual handling of ethernet power pin {{< pr number="4062" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 11.4.3 to 12.0.0 {{< pr number="4070" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update ESP-IDF and platform version {{< pr number="3565" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) -- Always use brackets around single log macros {{< pr number="4072" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Midea ir templatable code {{< pr number="4053" repo="esphome" >}} by {{< ghuser name="reidprojects" >}} -- Boards: Adafruit QT Py ESP32 Pico/C3/S2 {{< pr number="4064" repo="esphome" >}} by {{< ghuser name="jenscski" >}} -- Dont set esp32 pin drive strength unless pin is set for output {{< pr number="4075" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Don't allow debug component if you don't have at least debug logging level {{< pr number="4076" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove a bunch of unnecessary pylint disabling {{< pr number="4079" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update ESP32-audioI2S library {{< pr number="4073" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add vector includes {{< pr number="4080" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow manually specifying binary file to OTA {{< pr number="4054" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix regressed 'esphome run' {{< pr number="4094" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Make parse_characteristics and parse_descriptors lazy to reduce memory pressure {{< pr number="4063" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Speed up BLE connections {{< pr number="4093" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Align BLE service logging {{< pr number="4095" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Suppress logging unhandled ESP_BLE_AD_TYPE_INT_RANGE {{< pr number="4096" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Make sure all BLE address strings are uppercase {{< pr number="4097" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add logging for BLE connection slots {{< pr number="4098" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix registering for gatt notify when characteristic only support indicate {{< pr number="4092" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix descriptors not being deleted {{< pr number="4104" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Improve reliability of bluetooth active connections {{< pr number="4049" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Always use generated api options from aioesphomeapi {{< pr number="4116" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix bluetooth_gatt_write_descriptor never getting a response {{< pr number="4112" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Combine the scanner failure check so we only stop the scanner once {{< pr number="4111" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce memory needed to send the services list {{< pr number="4110" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Avoid parsing characteristics and descriptors to reduce memory pressure {{< pr number="4109" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Send device address type alongside ble advertisements {{< pr number="4115" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove uuid lookups from BLE read/write/notify characteristics {{< pr number="4102" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Active BLE connection v3 {{< pr number="4113" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- preprocess out proto_enum_to_string if not needed {{< pr number="4119" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 12.0.0 to 12.2.0 {{< pr number="4120" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Avoid parsing services with v3 connections without cache {{< pr number="4117" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- FIX: Unnecessary flash writes by ModbusSwitch component {{< pr number="3648" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Speed up uuid parsing when fetching the service list {{< pr number="4121" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- modbus_switch: honor switch:restore_mode {{< pr number="4122" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- PID Climate - deadband and output sampling {{< pr number="3254" repo="esphome" >}} by {{< ghuser name="patrickcollins12" >}} (new-feature) -- Allow auto setting of ble client id if there is only 1 in config {{< pr number="4125" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix RESTORE_INVERTED switch:restore_mode {{< pr number="4129" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Bump pylint from 2.15.6 to 2.15.7 {{< pr number="4127" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow global setting of compile process limit {{< pr number="4081" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump flake8 from 5.0.4 to 6.0.0 {{< pr number="4084" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump arduino pico and update wifi methods {{< pr number="4144" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 12.2.0 to 12.2.1 {{< pr number="4133" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esptool from 3.3.1 to 4.4 {{< pr number="4071" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix mismatched flake8 version in pre-commit {{< pr number="4145" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Detect BLE stack unrecoverable state {{< pr number="4128" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump pylint from 2.15.7 to 2.15.8 {{< pr number="4148" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix crash with bluetooth tracker and esp-idf {{< pr number="4140" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use ENTITY_CATEGORY_CONFIG for sprinkler config switches. {{< pr number="4141" repo="esphome" >}} by {{< ghuser name="schinckel" >}} -- fix switch initialization {{< pr number="4153" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Change 4 chip limit on sn74hc595 to 256 {{< pr number="4108" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add reports fahrenheit to tuya climate {{< pr number="4032" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow dashboard import to pull complete file from github {{< pr number="3982" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Invalid config for waveshare models with no full_update_every {{< pr number="4066" repo="esphome" >}} by {{< ghuser name="Nizzle" >}} -- Add sn74hc165 input shift register {{< pr number="4151" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Fixed deep sleep for ESP32C3 {{< pr number="4143" repo="esphome" >}} by {{< ghuser name="pistifonok" >}} -- ESP32 IDF: Override toolchain-esp32ulp with espressifs own published version {{< pr number="4155" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add API for dashboard to get boards list {{< pr number="4154" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pytest-asyncio from 0.20.1 to 0.20.2 {{< pr number="4019" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.2.2 to 3.3.0 {{< pr number="4137" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump dessant/lock-threads from 3 to 4 {{< pr number="4150" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 12.2.1 to 13.0.1 {{< pr number="4149" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esphome-dashboard to 20221207.0 {{< pr number="4156" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix ble parsing with zero padded advertisements {{< pr number="4162" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Increase watchdog timeout when starting OTA {{< pr number="4172" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20221213.0 {{< pr number="4176" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove internal pin restriction from cd74hc4067 {{< pr number="4179" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Speed up bluetooth proxy connections when using esp-idf {{< pr number="4171" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (notable-change) -- Remove warnings when falling through switch cases on purpose {{< pr number="4181" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Revert camera config change for esp-idf {{< pr number="4182" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.2.0.md b/content/changelog/2022.2.0.md deleted file mode 100644 index a98b1ee90d..0000000000 --- a/content/changelog/2022.2.0.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.2.0." -title: "ESPHome 2022.2.0 - 16th February 2022" -params: - seo: - description: Changelog for ESPHome 2022.2.0. - image: /_static/changelog-2022.2.0.png ---- - -{{< imgtable >}} -"Lock Core","components/lock/index","folder-open.svg","dark-invert" -"Generic Output Lock","components/lock/output","upload.svg","dark-invert" -"Template Lock","components/lock/template","description.svg","dark-invert" -"QR Code","components/display/index","qr-code.svg","" -"Touchscreen Core","components/touchscreen/index","folder-open.svg","dark-invert" -"EKTF2232","components/touchscreen/ektf2232","ektf2232.svg","" -"Lilygo T5 4.7""","components/touchscreen/lilygo_t5_47","lilygo_t5_47_touch.jpg","" -"MLX90393","components/sensor/mlx90393","mlx90393.jpg","" -"Wake-on-LAN Button","components/button/wake_on_lan","power_settings.svg","dark-invert" -"Generic Output Button","components/button/output","upload.svg","dark-invert" -"Xiaomi MHOC303","components/sensor/xiaomi_ble","xiaomi_mijia_logo.jpg","" -"RadonEye BLE","components/sensor/radon_eye_ble","radon_eye_logo.png","" -"Modbus Select","components/select/modbus_controller","modbus.png","" -"MAX9611","components/sensor/max9611","max9611.jpg","" -"Inkplate 6 Plus","components/display/inkplate6","inkplate6.jpg","" -{{< /imgtable >}} - -## Home Assistant Addon Repo - -In a future Supervisor version, the [ESPHome Home Assistant addon repository](https://github.com/esphome/home-assistant-addon) -will be added by default to new Home Assistant installations. -We have decided that we will deprecate the ESPHome addon inside the -[Community Addons](https://github.com/hassio-addons/repository) -and everyone should move to the ESPHome repo. It is safe to delete the -ESPHome addon as your configuration YAML files are stored in the Home -Assistant configuration folder. - -You can add the ESPHome addon here: - -[![Open your Home Assistant instance and show the dashboard of an add-on.][my-badge]][my-url] - -[my-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg -[my-url]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon - -## Locks - -Lock Entities have been added to ESPHome. These will be available after Home Assistant 2022.3 is released. -Thanks {{< ghuser name="kbickar" >}}. - -## ESP8266 recommended framework bump - -The recommended (and therefore default) version of Arduino for ESP8266 devices -has been bumped to 3.0.2 from 2.7.4. This brings many underlying changes to the -ESP8266 SDK. The 3.0.2 release has been out since July 2021 but ESPHome just -did not bump the default until now. - -## FastLED - -Due to the Arduino bump, the FastLED library suffers issues when running on ESP8266 -on Arduino 3+. Because of this there is now a restriction on the `fastled_clockless` -and `fastled_spi` components to only allow using them if you change the arduino version -back to 2.7.4 or lower. This will be in place until the library can update and fix the -issues. See the {{< docref "/components/light/fastled" "documentation" >}} for information on how -to continue using the lights. - -## Improv serial Wi-Fi scan - -Improv serial has been updated to be able to start a Wi-Fi scan and send the results -back to the improv client so the user can select the network SSID instead of having to type it in. - -## Tuya Multi multi-datapoint - -Some work was done on the tuya component to support devices that send all of their -datapoints in a single message. This allows for more devices to be supported and should -not cause issues with existing devices but please create an issue if it does. - -## Debug Sensors Breaking change - -The sub-sensors of the `debug` have been moved to their respective component platforms. -Please see the {{< docref "/components/debug" "documentation" >}} page for the new way to configure them. - - - -## Release 2022.2.1 - February 17 - -- Fix missed ARDUINO_VERSION_CODE to USE_ARDUINO_VERSION_CODE changes {{< pr number="3206" repo="esphome" >}} by {{< ghuser name="stewiem2000" >}} - -## Release 2022.2.2 - February 18 - -- Set entity-category to diagnostic for debug component {{< pr number="3209" repo="esphome" >}} by {{< ghuser name="stewiem2000" >}} -- Fix platformio docker version mismstch {{< pr number="3215" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add LONG LONG flag for arduinojson {{< pr number="3212" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.2.3 - February 18 - -- Bump platformio from 5.2.4 to 5.2.5 {{< pr number="3188" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - -## Release 2022.2.4 - February 21 - -- Publish NAN when dallas conversion failed {{< pr number="3227" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix ESP8266 climate memaccess warning {{< pr number="3226" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Improve ESP8266 iram usage {{< pr number="3223" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- ESP32-C3 deep sleep fix {{< pr number="3066" repo="esphome" >}} by {{< ghuser name="Troublebrewing" >}} -- Fix lilygo touchscreen rotation {{< pr number="3221" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix fatal erroring in addon startup script {{< pr number="3244" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.2.5 - February 23 - -- Respect ESPHOME_USE_SUBPROCESS in esp32 post_build script {{< pr number="3246" repo="esphome" >}} by {{< ghuser name="mweinelt" >}} -- Fix regression caused by TSL2591 auto gain {{< pr number="3249" repo="esphome" >}} by {{< ghuser name="Azimath" >}} - -## Release 2022.2.6 - March 2 - -- Only get free memory size from internal {{< pr number="3259" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- Add initial_run to regular lambda light effect {{< pr number="3059" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Support simple transparent pngs for display {{< pr number="3035" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Add restore_mode to fan component {{< pr number="3051" repo="esphome" >}} by {{< ghuser name="joshuaspence" >}} (new-feature) -- slow_pwm: allow to restart a cycle on state change {{< pr number="3004" repo="esphome" >}} by {{< ghuser name="Chupaka" >}} (new-feature) -- Command retain option for MQTT component {{< pr number="3078" repo="esphome" >}} by {{< ghuser name="VitaliyKurokhtin" >}} (new-feature) -- Esp32cam full control {{< pr number="3090" repo="esphome" >}} by {{< ghuser name="dav-id-org" >}} (new-feature) -- Configurable HTTP redirect following {{< pr number="3100" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (new-feature) -- Add IPv6 for esp-idf framework {{< pr number="2953" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (new-feature) -- Improv_serial scan and send wifi networks list {{< pr number="3116" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Inkplate 6 PLUS {{< pr number="3013" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Add ektf2232 touchscreen support {{< pr number="3027" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Wake-on-LAN button {{< pr number="3030" repo="esphome" >}} by {{< ghuser name="willwill2will54" >}} (new-integration) -- Implement output button {{< pr number="3109" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-integration) -- Create base touchscreen component and refactor ektf2232 {{< pr number="3083" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add qr code support for displays {{< pr number="2952" repo="esphome" >}} by {{< ghuser name="wjtje" >}} (new-integration) -- Add Xiaomi MHOC303 sensor e-ink clock {{< pr number="3115" repo="esphome" >}} by {{< ghuser name="drug123" >}} (new-integration) -- Add new Lock core component {{< pr number="2958" repo="esphome" >}} by {{< ghuser name="kbickar" >}} (new-integration) -- Added RadonEye RD200 Component {{< pr number="3119" repo="esphome" >}} by {{< ghuser name="jeffeb3" >}} (new-integration) -- MLX90393 three-axis magnetometer {{< pr number="2770" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (new-integration) -- Add Lilygo t5 4.7 Touchscreen {{< pr number="3084" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add Select for modbus {{< pr number="3032" repo="esphome" >}} by {{< ghuser name="stegm" >}} (new-integration) -- Add max9611 High Side Current Shunt ADC {{< pr number="2705" repo="esphome" >}} by {{< ghuser name="mckaymatthew" >}} (new-integration) - -### Breaking Changes - -- [TCS34725] remove duplicated endian conversion {{< pr number="3037" repo="esphome" >}} by {{< ghuser name="martgras" >}} (breaking-change) -- TSL2591 automatic gain control {{< pr number="3071" repo="esphome" >}} by {{< ghuser name="Azimath" >}} (breaking-change) -- [debug] Refactor debug sensors to use the normal sensor model. {{< pr number="3162" repo="esphome" >}} by {{< ghuser name="mknjc" >}} (breaking-change) -- Allow framework version validator to be maximum version {{< pr number="3197" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Notable Changes - -- ESP8266 Set recommended framework to 3.0.2 {{< pr number="2606" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (notable-change) -- Handle Tuya multi-datapoint messages {{< pr number="3159" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (notable-change) - -### Beta Changes - -- Enable mDNS during OTA safe mode {{< pr number="3146" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Try fix canbus config validation {{< pr number="3173" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 10.8.1 to 10.8.2 {{< pr number="3182" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Clamp rotary_encoder restored value to min and max {{< pr number="3184" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make generating combined binary output verbose {{< pr number="3127" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Allow framework version validator to be maximum version {{< pr number="3197" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix strlcpy() uses to make long SSIDs and passwords work {{< pr number="3199" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Update HA addon token {{< pr number="3200" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Bump pytest-asyncio from 0.16.0 to 0.17.0 {{< pr number="3047" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix argument order in gitpod config file {{< pr number="3058" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump pytest-asyncio from 0.17.0 to 0.17.2 {{< pr number="3064" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix calibration parameter for bme680 humidity calculation {{< pr number="3069" repo="esphome" >}} by {{< ghuser name="cwitting" >}} -- Bump improv library version {{< pr number="3072" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- API: Expect a name for connections {{< pr number="2533" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- AM43: autoload "sensor" to avoid compile errors {{< pr number="3077" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- Add initial_run to regular lambda light effect {{< pr number="3059" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Support simple transparent pngs for display {{< pr number="3035" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Bump aioesphomeapi from 10.6.0 to 10.8.0 {{< pr number="3081" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add ektf2232 touchscreen support {{< pr number="3027" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Implement IPv6 sockets for lwIP {{< pr number="3015" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Allow multiple configs for cd74hc4067 {{< pr number="3085" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Wake-on-LAN button {{< pr number="3030" repo="esphome" >}} by {{< ghuser name="willwill2will54" >}} (new-integration) -- Add restore_mode to fan component {{< pr number="3051" repo="esphome" >}} by {{< ghuser name="joshuaspence" >}} (new-feature) -- slow_pwm: allow to restart a cycle on state change {{< pr number="3004" repo="esphome" >}} by {{< ghuser name="Chupaka" >}} (new-feature) -- Enable readability-const-return-type check {{< pr number="3099" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Enable readability-qualified-auto check {{< pr number="3095" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Enable readability-redundant-member-init check {{< pr number="3097" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Enable readability-named-parameter check {{< pr number="3098" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Enable readability-redundant-access-specifiers check {{< pr number="3096" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Command retain option for MQTT component {{< pr number="3078" repo="esphome" >}} by {{< ghuser name="VitaliyKurokhtin" >}} (new-feature) -- Refactor fan platform to resemble climate/cover platforms {{< pr number="2848" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Rename WEBSERVER_PORT define to USE_WEBSERVER_PORT {{< pr number="3102" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix path to extra_scripts in platformio.ini {{< pr number="3093" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Generate ARDUINO_VERSION_CODE in Python code {{< pr number="3101" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add cv.require_esphome_version helper {{< pr number="3103" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump aioesphomeapi from 10.8.0 to 10.8.1 {{< pr number="3110" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Remove unused polling_component_schema from modbus number {{< pr number="3108" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Force braces around multi-line statements {{< pr number="3094" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Make CallbackManager invocable {{< pr number="3089" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Implement output button {{< pr number="3109" repo="esphome" >}} by {{< ghuser name="oxan" >}} (new-integration) -- Add increment_day function to ESPTime {{< pr number="2955" repo="esphome" >}} by {{< ghuser name="RebbePod" >}} -- [TCS34725] remove duplicated endian conversion {{< pr number="3037" repo="esphome" >}} by {{< ghuser name="martgras" >}} (breaking-change) -- Perform merges when substituting dict keys {{< pr number="3062" repo="esphome" >}} by {{< ghuser name="joshuaspence" >}} -- Esp32cam full control {{< pr number="3090" repo="esphome" >}} by {{< ghuser name="dav-id-org" >}} (new-feature) -- Fix config merging with null {{< pr number="3113" repo="esphome" >}} by {{< ghuser name="joshuaspence" >}} -- Configurable HTTP redirect following {{< pr number="3100" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (new-feature) -- Add IPv6 for esp-idf framework {{< pr number="2953" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (new-feature) -- Add support for additional colors on GROW R503 {{< pr number="3087" repo="esphome" >}} by {{< ghuser name="Zebble" >}} -- Add Heap Sensors - free/max block/fragmentation {{< pr number="1578" repo="esphome" >}} by {{< ghuser name="micronen" >}} -- Create base touchscreen component and refactor ektf2232 {{< pr number="3083" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add qr code support for displays {{< pr number="2952" repo="esphome" >}} by {{< ghuser name="wjtje" >}} (new-integration) -- ESP8266 Set recommended framework to 3.0.2 {{< pr number="2606" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (notable-change) -- TSL2591 automatic gain control {{< pr number="3071" repo="esphome" >}} by {{< ghuser name="Azimath" >}} (breaking-change) -- set adc width to 13 bits for esp32-s2 {{< pr number="3117" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Fix lint for TSL2591 {{< pr number="3118" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add Xiaomi MHOC303 sensor e-ink clock {{< pr number="3115" repo="esphome" >}} by {{< ghuser name="drug123" >}} (new-integration) -- Logically group and document helper functions {{< pr number="3112" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add support for Waveshare 7.5in-bv2 {{< pr number="3121" repo="esphome" >}} by {{< ghuser name="Eriner" >}} -- Bump docker dependencies {{< pr number="3131" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump pytest-mock from 3.6.1 to 3.7.0 {{< pr number="3128" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Improv_serial scan and send wifi networks list {{< pr number="3116" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Disable platformio ldf for build {{< pr number="3130" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump esp-idf framework version from 4.3.0 to 4.3.2 {{< pr number="3120" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump pre-commit flake8 from 3.8.4 to 4.0.1 {{< pr number="3149" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump black from 21.12b0 to 22.1.0 {{< pr number="3147" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix ESP32C3 toolchain requires stdarg import in helpers {{< pr number="3151" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add new Lock core component {{< pr number="2958" repo="esphome" >}} by {{< ghuser name="kbickar" >}} (new-integration) -- Add device class support to Switch {{< pr number="3012" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- Handle Tuya multi-datapoint messages {{< pr number="3159" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (notable-change) -- Bump improv library to 1.2.1 {{< pr number="3160" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix copy_file_if_changed src permissions copied too {{< pr number="3161" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- [debug] Refactor debug sensors to use the normal sensor model. {{< pr number="3162" repo="esphome" >}} by {{< ghuser name="mknjc" >}} (breaking-change) -- Added RadonEye RD200 Component {{< pr number="3119" repo="esphome" >}} by {{< ghuser name="jeffeb3" >}} (new-integration) -- Text sensor schema generator similar to sensor {{< pr number="3172" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- wifi_info, reduce polling interval {{< pr number="3165" repo="esphome" >}} by {{< ghuser name="jbergler" >}} -- MLX90393 three-axis magnetometer {{< pr number="2770" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (new-integration) -- Enable mDNS during OTA safe mode {{< pr number="3146" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Dont warn on nonnull comparisons {{< pr number="3123" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add require response option for BLE binary output {{< pr number="3091" repo="esphome" >}} by {{< ghuser name="AshtonKem" >}} -- Add Lilygo t5 4.7 Touchscreen {{< pr number="3084" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add Select for modbus {{< pr number="3032" repo="esphome" >}} by {{< ghuser name="stegm" >}} (new-integration) -- Add max9611 High Side Current Shunt ADC {{< pr number="2705" repo="esphome" >}} by {{< ghuser name="mckaymatthew" >}} (new-integration) -- Inkplate 6 PLUS {{< pr number="3013" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Implement MQTT discovery object_id generator {{< pr number="3114" repo="esphome" >}} by {{< ghuser name="akomelj" >}} -- Fix files CI after merging {{< pr number="3175" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Try fix canbus config validation {{< pr number="3173" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pytest from 6.2.5 to 7.0.0 {{< pr number="3163" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.17.2 to 0.18.0 {{< pr number="3168" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow to set manufacturer data for BLEAdvertising {{< pr number="3179" repo="esphome" >}} by {{< ghuser name="ashald" >}} -- Change most references from hassio to ha-addon {{< pr number="3178" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 10.8.1 to 10.8.2 {{< pr number="3182" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Clamp rotary_encoder restored value to min and max {{< pr number="3184" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make generating combined binary output verbose {{< pr number="3127" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Allow framework version validator to be maximum version {{< pr number="3197" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix strlcpy() uses to make long SSIDs and passwords work {{< pr number="3199" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Update HA addon token {{< pr number="3200" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missed ARDUINO_VERSION_CODE to USE_ARDUINO_VERSION_CODE changes {{< pr number="3206" repo="esphome" >}} by {{< ghuser name="stewiem2000" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.3.0.md b/content/changelog/2022.3.0.md deleted file mode 100644 index 0061bbcfd5..0000000000 --- a/content/changelog/2022.3.0.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.3.0." -title: "ESPHome 2022.3.0 - 16th March 2022" -params: - seo: - description: Changelog for ESPHome 2022.3.0. - image: /_static/changelog-2022.3.0.png ---- - -{{< imgtable >}} -"Analog Threshold","components/binary_sensor/analog_threshold","analog_threshold.svg","dark-invert" -"MAX44009","components/sensor/max44009","max44009.svg","" -"Copy","components/copy","content-copy.svg","dark-invert" -"MPU6886","components/sensor/mpu6886","mpu6886.jpg","" -"MCP4728","components/output/mcp4728","mcp4728.jpg","" -"Honeywell ABP","components/sensor/honeywellabp","honeywellabp.jpg","" -"Mopeka Pro Check LP","components/sensor/mopeka_pro_check","mopeka_pro_check.jpg","" -{{< /imgtable >}} - -## Python 3.8 Minimum - -This release sets the minimum Python version to 3.8. Please upgrade your local python if you are unable -to update further. - -## Webserver - -Thanks to {{< ghuser name="wilberforce" >}} for doing a massive bunch of work on giving new life to the frontend of -the {{< docref "/components/web_server" "webserver" >}}. - - - -## Release 2022.3.1 - March 23 - -- Fix WDT reset during dallas search algorithm {{< pr number="3293" repo="esphome" >}} by {{< ghuser name="wysiwyng" >}} -- Webserver utilize Component Iterator to not overload eventstream {{< pr number="3310" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Reserve less memory for json {{< pr number="3289" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add small delay before setting up app in safe mode {{< pr number="3323" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.3.2 - March 30 - -- Actually increase request memory for json parsing {{< pr number="3331" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- support for waveshare 7.50in-hd-b {{< pr number="3239" repo="esphome" >}} by {{< ghuser name="Michanord" >}} (new-feature) -- Add optional display page for touchscreen binary sensors {{< pr number="3247" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Analog threshold {{< pr number="3190" repo="esphome" >}} by {{< ghuser name="ianchi" >}} (new-integration) -- Add sensor support: MAX44009 {{< pr number="3125" repo="esphome" >}} by {{< ghuser name="berfenger" >}} (new-integration) -- Add copy integration {{< pr number="3241" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- Add support for MPU-6886 {{< pr number="3183" repo="esphome" >}} by {{< ghuser name="fabaff" >}} (new-integration) -- Add device support: MCP4728 {{< pr number="3174" repo="esphome" >}} by {{< ghuser name="berfenger" >}} (new-integration) -- Add sensor support: Honeywell ABP (SPI version) {{< pr number="3164" repo="esphome" >}} by {{< ghuser name="RubyBailey" >}} (new-integration) -- Add Mopeka BLE and Mopeka Pro Check BLE Sensor {{< pr number="2618" repo="esphome" >}} by {{< ghuser name="spbrogan" >}} (new-integration) - -### Breaking Changes - -- Raise minimum python version to 3.8 {{< pr number="3176" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add class as first positional arg to sensor_schema {{< pr number="3216" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- BH1750 dynamically calculate options {{< pr number="3214" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) - -### Beta Changes - -- Add optimistic config flag to modbus select. {{< pr number="3267" repo="esphome" >}} by {{< ghuser name="stegm" >}} -- Add helper overloads for hex print 16-bit {{< pr number="3297" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow custom register type for modbus number {{< pr number="3202" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### Notable Changes - -- Webserver v2 {{< pr number="2688" repo="esphome" >}} by {{< ghuser name="wilberforce" >}} (notable-change) - -### All changes - -- Remove unused obj attribute from AssignmentExpression {{< pr number="3145" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Remove spurious Zeroconf instance from api client {{< pr number="3143" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Raise minimum python version to 3.8 {{< pr number="3176" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Improve dallas timing {{< pr number="3181" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump pytest-asyncio from 0.18.0 to 0.18.1 {{< pr number="3187" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.0.0 to 7.0.1 {{< pr number="3189" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- add sim800l diagnostics {{< pr number="3136" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Docker move deps install into base {{< pr number="3207" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Remove redundant name from binary_sensor constructor {{< pr number="3213" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP8266 early init for pins {{< pr number="3144" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- CAN bus: read all queued messages {{< pr number="3194" repo="esphome" >}} by {{< ghuser name="felixstorm" >}} -- CAN bus: support bit mask for on_frame can_id {{< pr number="3196" repo="esphome" >}} by {{< ghuser name="felixstorm" >}} -- Simplify captive portal to compressed single page {{< pr number="2872" repo="esphome" >}} by {{< ghuser name="wilberforce" >}} -- HttpRequestComponent::get_string - avoid copy {{< pr number="2988" repo="esphome" >}} by {{< ghuser name="roitagar" >}} -- Docker ha-addon switch to nginx-light {{< pr number="3218" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Analog threshold {{< pr number="3190" repo="esphome" >}} by {{< ghuser name="ianchi" >}} (new-integration) -- Fix pm1006 polling component definition {{< pr number="3210" repo="esphome" >}} by {{< ghuser name="mipa87" >}} -- Add class as first positional arg to sensor_schema {{< pr number="3216" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Binary Sensor codegen tidyup {{< pr number="3217" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Read all cell voltages from DalyBMS {{< pr number="3203" repo="esphome" >}} by {{< ghuser name="zigman79" >}} -- Remote magiquest protocol {{< pr number="2963" repo="esphome" >}} by {{< ghuser name="ImSorryButWho" >}} -- Implement text_sensor based on ble_client {{< pr number="3079" repo="esphome" >}} by {{< ghuser name="ashald" >}} -- Add sensor support: MAX44009 {{< pr number="3125" repo="esphome" >}} by {{< ghuser name="berfenger" >}} (new-integration) -- Fix for api disconnect detection. {{< pr number="2909" repo="esphome" >}} by {{< ghuser name="peter-valkov" >}} -- [miscale] Add flag to clear last impedance reading if the newly received reading only contains weight {{< pr number="3132" repo="esphome" >}} by {{< ghuser name="mknjc" >}} -- Add ESP32 variant config validator function {{< pr number="3088" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix warning in test1.yaml {{< pr number="3228" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Lint trailing whitespace {{< pr number="3230" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add ESP32C3 and ESP32S2 support to dashboard {{< pr number="3152" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- BH1750 dynamically calculate options {{< pr number="3214" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- Bump esphome-dashboard from 20220209.0 to 20220219.0 {{< pr number="3231" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add copy integration {{< pr number="3241" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- Button code cleanup {{< pr number="3242" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Pulse meter internal filter mode {{< pr number="3082" repo="esphome" >}} by {{< ghuser name="cstaahl" >}} -- Add support for MPU-6886 {{< pr number="3183" repo="esphome" >}} by {{< ghuser name="fabaff" >}} (new-integration) -- light: add RESTORE_AND_OFF/RESTORE_AND_ON LightRestoreMode {{< pr number="3238" repo="esphome" >}} by {{< ghuser name="Niorix" >}} -- Implement send_first_at for exponential_moving_average {{< pr number="3240" repo="esphome" >}} by {{< ghuser name="EdJoPaTo" >}} -- Add device support: MCP4728 {{< pr number="3174" repo="esphome" >}} by {{< ghuser name="berfenger" >}} (new-integration) -- support for waveshare 7.50in-hd-b {{< pr number="3239" repo="esphome" >}} by {{< ghuser name="Michanord" >}} (new-feature) -- Fix template button after abstract press_action {{< pr number="3250" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Store platform as uppercase {{< pr number="3251" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add sensor support: Honeywell ABP (SPI version) {{< pr number="3164" repo="esphome" >}} by {{< ghuser name="RubyBailey" >}} (new-integration) -- Add optional display page for touchscreen binary sensors {{< pr number="3247" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Add Mopeka BLE and Mopeka Pro Check BLE Sensor {{< pr number="2618" repo="esphome" >}} by {{< ghuser name="spbrogan" >}} (new-integration) -- Remove stray define {{< pr number="3260" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Webserver v2 {{< pr number="2688" repo="esphome" >}} by {{< ghuser name="wilberforce" >}} (notable-change) -- Add entity_category_diagnostics to SGP30 baseline sensors {{< pr number="3272" repo="esphome" >}} by {{< ghuser name="JasperPlant" >}} -- Bump esphome-dashboard to 20220309.0 {{< pr number="3277" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add visual step/min/max for webserver climate {{< pr number="3275" repo="esphome" >}} by {{< ghuser name="wilberforce" >}} -- Add optimistic config flag to modbus select. {{< pr number="3267" repo="esphome" >}} by {{< ghuser name="stegm" >}} -- Add helper overloads for hex print 16-bit {{< pr number="3297" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow custom register type for modbus number {{< pr number="3202" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.4.0.md b/content/changelog/2022.4.0.md deleted file mode 100644 index 6cc0733783..0000000000 --- a/content/changelog/2022.4.0.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.4.0." -title: "ESPHome 2022.4.0 - 20th April 2022" -params: - seo: - description: Changelog for ESPHome 2022.4.0. - image: /_static/changelog-2022.4.0.png ---- - -{{< imgtable >}} -"QMP6988","components/sensor/qmp6988","qmp6988_env3.png" -"Hydreon Rain Sensor","components/binary_sensor/hydreon_rgxx","hydreon_rg9.jpg" -"Mi Motion Sensor 2","components/sensor/xiaomi_ble","xiaomi_rtcgq02lm.jpg" -"Sonoff D1 Dimmer","components/light/sonoff_d1","sonoff_d1.jpg" -"MCP3208","components/sensor/mcp3204","mcp3204.jpg" -"Shelly Dimmer","components/light/shelly_dimmer","shellydimmer2.jpg" -{{< /imgtable >}} - -## Home Assistant Addon Repo - -This is a repeat from the 2022.2 release notes. - -The [ESPHome Home Assistant addon repository](https://github.com/esphome/home-assistant-addon) -is added by default to new Home Assistant installations. Because of this, we have decided that we would -deprecate the ESPHome addon inside the [Community Addons](https://github.com/hassio-addons/repository) -and everyone should move to the ESPHome repo. It is safe to delete the Community ESPHome addon as -your configuration YAML files are stored in the Home Assistant configuration folder. - -You can add the ESPHome addon here: - -[![Open your Home Assistant instance and show the dashboard of an add-on.][my-badge]][my-url] - -[my-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg -[my-url]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon - -## Python 3.8 Minimum - -A friendly reminder that 2022.3 set the minimum Python version to 3.8. -Please upgrade your local python if you are unable to update ESPHome further. -This is taken care of automatically if you are using the Home Assistant Add-on, or the -ESPHome docker container. - -## Shelly Dimmer 2 - -Support for the STM32 chip of the Shelly Dimmer has been added in this release. The component also supports -flashing custom firmware to the stm32 via ESPHome which is required to use the component. See the -{{< docref "/components/light/shelly_dimmer" "documentation" >}} for more details. - -## Google Fonts - -{{< ghuser name="OttoWinter" >}} has given everyone a way to use Google Fonts in their YAML and displays without -having to manually download TTF font files. The example below will automatically download and cache the Roboto -TTF font file required so you can utilise it. See the [Font Renderer Component](/components/font#display-fonts) documentation -for more details. - -```yaml -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 -``` - -## Deep sleep wakeup time - -Deep sleep for ESP32 has had a new feature added. - -```yaml -on_...: - - deep_sleep.enter: - until: "14:00:00" - time_id: ... -``` - -This will automatically calculate the time required to deep sleep to ensure that the device will -wake up at "14:00:00". The time format here is local time to match the timezone you have configured and -this requires a time component to be configured. - -## Sensors imported from Home Assistant - -In this release there is a breaking change on the sensors that are imported from homeassistant, -`platform: homeassistant`. They will now default to being internal to ESPHome and will not be re-exported back -to Home Assistant, MQTT or the web server. This change makes sense as it was just extra sensors and network traffic. -You are able to add these back as non internal by adding `internal: false` to the YAML for each of the sensors. - -## Full list of changes - - - -### New Features - -- Allow to set user defined characters on LCD {{< pr number="3322" repo="esphome" >}} by {{< ghuser name="numo68" >}} (new-feature) -- Font allow using google fonts directly {{< pr number="3243" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-feature) (notable-change) -- Add mqtt for idf {{< pr number="2930" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-feature) -- Extend mcp3204 to support 8 channels (mcp3208 variant) {{< pr number="3332" repo="esphome" >}} by {{< ghuser name="RadekHvizdos" >}} (new-feature) -- Add cover toggle support to endstop cover {{< pr number="3358" repo="esphome" >}} by {{< ghuser name="rrooggiieerr" >}} (new-feature) -- Remote base pronto receive {{< pr number="2826" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} (new-feature) -- Allow specifying deep sleep wakup clock time {{< pr number="3312" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Add support for QMP6988 Pressure sensor {{< pr number="3192" repo="esphome" >}} by {{< ghuser name="andrewpc" >}} (new-integration) -- Add integration hydreon_rgxx for rain sensors by Hydreon {{< pr number="2711" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (new-integration) -- Add Xiaomi RTCGQ02LM - Mi Motion Sensor 2 {{< pr number="3186" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add Sonoff D1 Dimmer support {{< pr number="2775" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} (new-integration) -- Refactor Sensirion Sensors {{< pr number="3374" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Add support for Shelly Dimmer 2 {{< pr number="2954" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) - -### Breaking Changes - -- Make home_assistant imported sensors internal by default {{< pr number="3372" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- Actually increase request memory for json parsing {{< pr number="3331" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Actually increase request memory for json parsing {{< pr number="3331" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Changes accuracy of single cell voltage {{< pr number="3387" repo="esphome" >}} by {{< ghuser name="matthias882" >}} -- Add support for Shelly Dimmer 2 {{< pr number="2954" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- Allocate smaller amount of buffer for JSON {{< pr number="3384" repo="esphome" >}} by {{< ghuser name="dz0ny" >}} -- Fix power_delivered/produced_phase sensor deviceclass in DSMR {{< pr number="3395" repo="esphome" >}} by {{< ghuser name="mvdwetering" >}} -- Shelly Dimmer: Delete obsolete LICENSE.txt {{< pr number="3394" repo="esphome" >}} by {{< ghuser name="rnauber" >}} -- Dont require empty object for wifi ap with defaults {{< pr number="3404" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### Notable Changes - -- Font allow using google fonts directly {{< pr number="3243" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-feature) (notable-change) - -### All changes - -- Bump pytest-asyncio from 0.18.1 to 0.18.2 {{< pr number="3262" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.38.3 to 0.38.4 {{< pr number="3257" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump click from 8.0.3 to 8.0.4 {{< pr number="3248" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker dependencies {{< pr number="3281" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fixed wrong comment {{< pr number="3286" repo="esphome" >}} by {{< ghuser name="Rai-Rai" >}} -- Add support for QMP6988 Pressure sensor {{< pr number="3192" repo="esphome" >}} by {{< ghuser name="andrewpc" >}} (new-integration) -- Adds support for b-parasite's v2 BLE protocol {{< pr number="3290" repo="esphome" >}} by {{< ghuser name="rbaron" >}} -- increase delay for Ethernet module warm up Safe Mode {{< pr number="3326" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- Bump esptool from 3.2 to 3.3 {{< pr number="3327" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow to set user defined characters on LCD {{< pr number="3322" repo="esphome" >}} by {{< ghuser name="numo68" >}} (new-feature) -- Font allow using google fonts directly {{< pr number="3243" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-feature) (notable-change) -- Actually increase request memory for json parsing {{< pr number="3331" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Actually increase request memory for json parsing {{< pr number="3331" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Change beginning of file comments to avoid creating doxygen tag for `esphome` namespace {{< pr number="3314" repo="esphome" >}} by {{< ghuser name="e28eta" >}} -- Publish custom data when modbus number lambda fills vector {{< pr number="3295" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Define touchscreen support when in use. {{< pr number="3296" repo="esphome" >}} by {{< ghuser name="geiseri" >}} -- New vscode schema gen {{< pr number="3336" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- protobuf: fix incomplete 64 bits implementation {{< pr number="3341" repo="esphome" >}} by {{< ghuser name="ianchi" >}} -- feat: support ble_client that use security w/o pin codes {{< pr number="3320" repo="esphome" >}} by {{< ghuser name="ammmze" >}} -- Add mqtt for idf {{< pr number="2930" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-feature) -- Added a function to load custom characters in LCD display {{< pr number="3279" repo="esphome" >}} by {{< ghuser name="andrewjswan" >}} -- CAN bus: support remote transmission request flag for canbus.send {{< pr number="3193" repo="esphome" >}} by {{< ghuser name="felixstorm" >}} -- Tm1637 binarysensor {{< pr number="2792" repo="esphome" >}} by {{< ghuser name="mvturnho" >}} -- Bump click from 8.0.4 to 8.1.2 {{< pr number="3351" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.12.2 to 2.13.4 {{< pr number="3348" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.18.2 to 0.18.3 {{< pr number="3335" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.0.1 to 7.1.1 {{< pr number="3313" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker dependencies {{< pr number="3354" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump voluptuous from 0.12.2 to 0.13.0 {{< pr number="3355" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tzlocal from 4.1 to 4.2 {{< pr number="3356" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 2.31.0 to 2.31.1 {{< pr number="3292" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 22.1.0 to 22.3.0 {{< pr number="3357" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow on_value_range for sensor and number to be templated {{< pr number="3359" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for Electrolux heatpump and bump arduino-heatpumpir version {{< pr number="3353" repo="esphome" >}} by {{< ghuser name="ikilledmypc" >}} -- Implement newer RTU protocol of Growatt inverters {{< pr number="3315" repo="esphome" >}} by {{< ghuser name="djwlindenaar" >}} -- Add parameter to control i2c stop signal at endTransmission {{< pr number="3370" repo="esphome" >}} by {{< ghuser name="kbickar" >}} -- Fix SHTC3 sensor detection {{< pr number="3365" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Extend mcp3204 to support 8 channels (mcp3208 variant) {{< pr number="3332" repo="esphome" >}} by {{< ghuser name="RadekHvizdos" >}} (new-feature) -- Bump pyupgrade from 2.31.1 to 2.32.0 {{< pr number="3366" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump voluptuous from 0.13.0 to 0.13.1 {{< pr number="3364" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.13.4 to 2.13.5 {{< pr number="3363" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix HM3301 AQI int8 overflow {{< pr number="3361" repo="esphome" >}} by {{< ghuser name="calco88" >}} -- Add cover toggle support to endstop cover {{< pr number="3358" repo="esphome" >}} by {{< ghuser name="rrooggiieerr" >}} (new-feature) -- Make home_assistant imported sensors internal by default {{< pr number="3372" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add integration hydreon_rgxx for rain sensors by Hydreon {{< pr number="2711" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (new-integration) -- Addition of Deep Sleep RTC pin definition for ESP32-S2 {{< pr number="3303" repo="esphome" >}} by {{< ghuser name="andrewpc" >}} -- Add Xiaomi RTCGQ02LM - Mi Motion Sensor 2 {{< pr number="3186" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add Sonoff D1 Dimmer support {{< pr number="2775" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} (new-integration) -- Remote base pronto receive {{< pr number="2826" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} (new-feature) -- Use correct http defines {{< pr number="3378" repo="esphome" >}} by {{< ghuser name="dz0ny" >}} -- Refactor Sensirion Sensors {{< pr number="3374" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Fix silent config errors {{< pr number="3380" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move PN532OnTagTrigger to nfc::NfcOnTagTrigger {{< pr number="3379" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow specifying deep sleep wakup clock time {{< pr number="3312" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Changes accuracy of single cell voltage {{< pr number="3387" repo="esphome" >}} by {{< ghuser name="matthias882" >}} -- Add support for Shelly Dimmer 2 {{< pr number="2954" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- Allocate smaller amount of buffer for JSON {{< pr number="3384" repo="esphome" >}} by {{< ghuser name="dz0ny" >}} -- Fix power_delivered/produced_phase sensor deviceclass in DSMR {{< pr number="3395" repo="esphome" >}} by {{< ghuser name="mvdwetering" >}} -- Shelly Dimmer: Delete obsolete LICENSE.txt {{< pr number="3394" repo="esphome" >}} by {{< ghuser name="rnauber" >}} -- Dont require empty object for wifi ap with defaults {{< pr number="3404" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.5.0.md b/content/changelog/2022.5.0.md deleted file mode 100644 index 143327734d..0000000000 --- a/content/changelog/2022.5.0.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.5.0." -title: "ESPHome 2022.5.0 - 18th May 2022" -params: - seo: - description: Changelog for ESPHome 2022.5.0. - image: /_static/changelog-2022.5.0.png ---- - -{{< imgtable >}} -"BedJet Climate System","components/climate/bedjet","bedjet.png","" -"BL0939","components/sensor/bl0939","bl0939.png","" -"ENS210","components/sensor/ens210","ens210.jpg","" -"SEN5x","components/sensor/sen5x","sen54.jpg","" -"SML","components/sml","sml.svg","" -"Delonghi Penguino PAC W120HP","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -{{< /imgtable >}} - -## Rename - -ESPHome now offers a way for people to rename their devices automatically. This is done by creating a new YAML file -with the new filename, changing the `name` inside the YAML, and then OTA uploading to the device to its -existing hostname. If all is successful, the old YAML file will be removed and you can continue configuring your -newly named device. - -This is particularly useful if you have received a pre-installed device, or are installing pre-configured ESPHome -from a website for example. - -## API Transport Encryption - -API transport encryption is now enabled by default when you create a new device in ESPHome. This will -autogenerate a random encryption key in the device YAML file -that you will need to retrieve when you attempt to add the device to Home Assistant. Simply remove the -encryption key lines from your YAML should you choose to not use encryption. - -## Select & Number changes - -The `select` component has had a bunch of new features and actions added. -`select.first`, `select.last`, `select.next`, and `select.previous`. - -Alongside these new changes were some removals of internal (but public) functions on `select` and `number` -components that might break `external_components` or `lambdas` that might have been using them. See -{{< pr number="3457" repo="esphome" >}} and {{< pr number="3458" repo="esphome" >}} for more details. - - - -## Release 2022.5.1 - May 24 - -- Update bedjet_const.h to remove blank spaces before speed steps, fixes Unknown Error when using climate.set_fan_mode in HA {{< pr number="3476" repo="esphome" >}} by {{< ghuser name="user897943" >}} -- Add missing import to bedjet {{< pr number="3490" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esp32: fix NVS {{< pr number="3497" repo="esphome" >}} by {{< ghuser name="martgras" >}} - -## Full list of changes - -### New Components - -- Add support for Shelly Dimmer 2 {{< pr number="2954" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- Add BedJet BLE climate component {{< pr number="2452" repo="esphome" >}} by {{< ghuser name="jhansche" >}} (new-integration) -- Add support for BL0939 (Sonoff Dual R3 V2 powermeter) {{< pr number="3300" repo="esphome" >}} by {{< ghuser name="ziceva" >}} (new-integration) -- Add ENS210 Humidity & Temperature sensor component {{< pr number="2942" repo="esphome" >}} by {{< ghuser name="itn3rd77" >}} (new-integration) -- add support for Sen5x sensor series {{< pr number="3383" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Add SML (Smart Message Language) platform for energy meters {{< pr number="2396" repo="esphome" >}} by {{< ghuser name="alengwenus" >}} (new-integration) -- Delonghi Penguino PAC W120HP ir support {{< pr number="3124" repo="esphome" >}} by {{< ghuser name="grob6000" >}} (new-integration) - -### Breaking Changes - -- Code cleanup fixes for the select component {{< pr number="3457" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (breaking-change) -- Code cleanup fixes for the number component {{< pr number="3458" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (breaking-change) - -### Beta Changes - -- Restore RealTimeClock's local TZ after epoch sync {{< pr number="3462" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Shelly dimmer: Use unique_ptr to handle the lifetime of stm32_t {{< pr number="3400" repo="esphome" >}} by {{< ghuser name="edge90" >}} -- Use heat mode for heat. Move EXT HT to custom presets. {{< pr number="3437" repo="esphome" >}} by {{< ghuser name="jgissend10" >}} -- Make custom_fan and custom_preset templatable as per documentation {{< pr number="3330" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} -- Update captive portal canHandle function {{< pr number="3360" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} -- Increase JSON buffer size on overflow {{< pr number="3475" repo="esphome" >}} by {{< ghuser name="pyos" >}} -- Mark improv_serial and ESP-IDF usb based serial on c3/s2/s3 unsupported {{< pr number="3477" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP32: Only save to NVS if data was changed {{< pr number="3479" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Retry Tuya init commands {{< pr number="3482" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - -### Notable Changes - -- Enable api transport encryption for new projects {{< pr number="3142" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (notable-change) - -### All changes - -- Add default object_id_generator for mqtt {{< pr number="3389" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add BedJet BLE climate component {{< pr number="2452" repo="esphome" >}} by {{< ghuser name="jhansche" >}} (new-integration) -- Multi conf for Teleinfo component {{< pr number="3401" repo="esphome" >}} by {{< ghuser name="parats15" >}} -- Add support for Mopeka Pro+ Residential sensor {{< pr number="3393" repo="esphome" >}} by {{< ghuser name="jamesduke" >}} -- Add support for BL0939 (Sonoff Dual R3 V2 powermeter) {{< pr number="3300" repo="esphome" >}} by {{< ghuser name="ziceva" >}} (new-integration) -- Add "esphome rename" command {{< pr number="3403" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SPS30: Add fan action {{< pr number="3410" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- feat: add openssh-client on docker image (#1681) {{< pr number="3319" repo="esphome" >}} by {{< ghuser name="quentin9696" >}} -- Add duration device class for sensors {{< pr number="3421" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Missing `f` prefix on f-strings fix {{< pr number="3415" repo="esphome" >}} by {{< ghuser name="code-review-doctor" >}} -- Queue sensor publishes so we don't block for too long {{< pr number="3422" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- added RGB565 image type {{< pr number="3229" repo="esphome" >}} by {{< ghuser name="lubeda" >}} -- Allow wifi output_power down to 8.5dB {{< pr number="3405" repo="esphome" >}} by {{< ghuser name="e28eta" >}} -- Add help text to rename command {{< pr number="3442" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add rename command handler {{< pr number="3443" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Support for Arduino 2 and serial port on ESP32-S2 and ESP32-C3 {{< pr number="3436" repo="esphome" >}} by {{< ghuser name="jenscski" >}} -- Bump dashboard to 20220508.0 {{< pr number="3448" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Waveshare epaper 7in5 v2alt {{< pr number="3276" repo="esphome" >}} by {{< ghuser name="patvdleer" >}} -- Early pin init {{< pr number="3439" repo="esphome" >}} by {{< ghuser name="rainero84" >}} -- Add ENS210 Humidity & Temperature sensor component {{< pr number="2942" repo="esphome" >}} by {{< ghuser name="itn3rd77" >}} (new-integration) -- Also rename yaml filename with rename command {{< pr number="3447" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump click from 8.1.2 to 8.1.3 {{< pr number="3426" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix spi transfer with miso pin defined on espidf {{< pr number="3450" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Force using name substitution when adopting a device {{< pr number="3451" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pyupgrade from 2.32.0 to 2.32.1 {{< pr number="3452" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.13.5 to 2.13.8 {{< pr number="3432" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Esp32c3 deepsleep fix {{< pr number="3433" repo="esphome" >}} by {{< ghuser name="MFlasskamp" >}} -- Add SERIAL_JTAG/CDC logger option for ESP-IDF platform for ESP32-S2/S3/C3 {{< pr number="3105" repo="esphome" >}} by {{< ghuser name="unaiur" >}} -- Select enhancement {{< pr number="3423" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Number enhancement {{< pr number="3429" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- mask deprecated adc_gpio_init() for esp32-s2 {{< pr number="3445" repo="esphome" >}} by {{< ghuser name="MFlasskamp" >}} -- tca9548a fix channel selection {{< pr number="3417" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- add support for Sen5x sensor series {{< pr number="3383" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) -- Add SML (Smart Message Language) platform for energy meters {{< pr number="2396" repo="esphome" >}} by {{< ghuser name="alengwenus" >}} (new-integration) -- Delonghi Penguino PAC W120HP ir support {{< pr number="3124" repo="esphome" >}} by {{< ghuser name="grob6000" >}} (new-integration) -- extend scd4x {{< pr number="3409" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- PMSX003: Add support for specifying the update interval and spinning down {{< pr number="3053" repo="esphome" >}} by {{< ghuser name="mjg59" >}} -- CAN bus: on_frame remote_transmission_request {{< pr number="3376" repo="esphome" >}} by {{< ghuser name="felixstorm" >}} -- Fix cover set position by force pushing position_id datapoint (simila… {{< pr number="3435" repo="esphome" >}} by {{< ghuser name="dennisvbussel" >}} -- added prev_frame for animation {{< pr number="3427" repo="esphome" >}} by {{< ghuser name="lubeda" >}} -- Fix tests {{< pr number="3455" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix BME280 setup() when the sensor is marked as failed. {{< pr number="3396" repo="esphome" >}} by {{< ghuser name="ctrix" >}} -- Esp32c3 deepsleep fix {{< pr number="3454" repo="esphome" >}} by {{< ghuser name="MFlasskamp" >}} -- Make retry scheduler efficient {{< pr number="3225" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Code cleanup fixes for the select component {{< pr number="3457" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (breaking-change) -- Code cleanup fixes for the number component {{< pr number="3458" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} (breaking-change) -- Enable api transport encryption for new projects {{< pr number="3142" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (notable-change) -- Implement allow_deep_sleep {{< pr number="3282" repo="esphome" >}} by {{< ghuser name="rubdos" >}} -- Add deep_sleep.allow YAML action {{< pr number="3459" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Restore RealTimeClock's local TZ after epoch sync {{< pr number="3462" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Shelly dimmer: Use unique_ptr to handle the lifetime of stm32_t {{< pr number="3400" repo="esphome" >}} by {{< ghuser name="edge90" >}} -- Use heat mode for heat. Move EXT HT to custom presets. {{< pr number="3437" repo="esphome" >}} by {{< ghuser name="jgissend10" >}} -- Make custom_fan and custom_preset templatable as per documentation {{< pr number="3330" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} -- Update captive portal canHandle function {{< pr number="3360" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} -- Increase JSON buffer size on overflow {{< pr number="3475" repo="esphome" >}} by {{< ghuser name="pyos" >}} -- Mark improv_serial and ESP-IDF usb based serial on c3/s2/s3 unsupported {{< pr number="3477" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP32: Only save to NVS if data was changed {{< pr number="3479" repo="esphome" >}} by {{< ghuser name="martgras" >}} -- Retry Tuya init commands {{< pr number="3482" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.6.0.md b/content/changelog/2022.6.0.md deleted file mode 100644 index 822853ef8e..0000000000 --- a/content/changelog/2022.6.0.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.6.0." -title: "ESPHome 2022.6.0 - 15th June 2022" -params: - seo: - description: Changelog for ESPHome 2022.6.0. - image: /_static/changelog-2022.6.0.png ---- - -{{< imgtable >}} -"Tuya Select","components/select/tuya","tuya.png","" -"SGP41","components/sensor/sgp4x","sgp40.jpg","" -"Media Player Core","components/media_player/index","folder-open.svg","dark-invert" -"I2S Audio","components/media_player/i2s_audio","i2s_audio.svg","" -{{< /imgtable >}} -We are almost half way through 2022 already! My, how fast time flies when we -are having fun with ESPHome. This release is kind of small, but packs some big features. -There will be no 2022.7.0 (July) release next month as I ({{< ghuser name="jesserockz" >}}) will be away -around that time. So lets hope we can make 2022.8.0 worth the wait. - -## 🎶🎶🎶 Media Players - -ESPHome can now become a media player target for Home Assistant. This allows users to buy or build -ESP32 based speakers and place them around the house. - -We made a small website showing you a few tested [Media Players](https://esphome.github.io/media-players) and you can -install ESPHome directly to them via the browser using ESP Web Tools. - -Join us in a live stream all about Audio in the Open Home! - -When: Thursday, June 16, at 7pm UTC / 12pm PST / 9pm CET - - - - -## Includes with vars - -{{< ghuser name="jimtng" >}} is a newcomer to ESPHome. While migrating everything from a certain other -firmware, they found that they had to duplicate lots of yaml configuration for their many devices. -Basically, they decided to upgrade the `!include` yaml "directive" to allow variables. - -```yaml -# device.yaml -binary_sensor: - - <<: !include - file: bin-sensor.yaml - vars: - pin: GPIO1 - name: "Binary Sensor 1" - switch: my_switch_1_id - delay: 10s - - <<: !include - file: bin-sensor.yaml - vars: - pin: GPIO1 - name: "Binary Sensor 2" - switch: my_switch_2_id - delay: 60s - -# bin-sensor.yaml -platform: gpio -pin: ${pin} -name: ${name} -on_press: - - switch.turn_on: ${switch} - - delay: ${delay} - - switch.turn_off: ${switch} -``` - -Now while this is probably not the best example, the variables act as `substitutions` -and can be used anywhere in the underlying yaml file and can very much DRY out your configurations. - - - -## Release 2022.6.1 - June 18 - -- Setup the mute pin if configured {{< pr number="3568" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bugfix for ExternalRAMAllocator copy constructor {{< pr number="3571" repo="esphome" >}} by {{< ghuser name="bnw" >}} -- Media Player: added triggers {{< pr number="3576" repo="esphome" >}} by {{< ghuser name="dudanov" >}} - -## Release 2022.6.2 - June 23 - -- Move gas mbus config option being a define to being a build flag {{< pr number="3575" repo="esphome" >}} by {{< ghuser name="lkomurcu" >}} -- Fix: Make MQTT over TLS actually work {{< pr number="3580" repo="esphome" >}} by {{< ghuser name="ShellAddicted" >}} -- Fix wrong type for voc_state*_ in sgp4x component {{< pr number="3581" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Media Player: added play_media action {{< pr number="3579" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fix 2 small issues in BLEClient {{< pr number="3544" repo="esphome" >}} by {{< ghuser name="jhansche" >}} - -## Release 2022.6.3 - August 8 - -- FIX: Modbus queue deduplicator deleting custom commands {{< pr number="3650" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Update inkbird_ibsth1_mini.cpp {{< pr number="3664" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add CO device class to binary_sensor {{< pr number="3656" repo="esphome" >}} by {{< ghuser name="berg" >}} -- Use application/json instead of text/json {{< pr number="3671" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Use correct struct members. {{< pr number="3672" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - -## Breaking Changes - -### TCS34725 integration time - -The sampling settings for the TCS34725 have had a new option `auto` added and set as the default. This allows for better accuracy. -You are able to set it back to the previous default value by specifying `integration_time: 2.4ms` in your configuration. - -### SGP40 moved - -While adding support for the SGP41 chip, the SGP40 was moved and they were both combined into a new `sgp4x` component. - -### MQTT fan speeds - -{{< pr number="3397" repo="esphome" >}} removes deprecated MQTT fan speed state and speed command topics. -These were replaced with speed level state and command topics in ESPHome 2021.10.0. - -### AC Dimmer - -Due to an output power calculation the perceived power might vary slightly specially in the lower and upper regions. - -### DisplayBuffer - -A new virtual method was added to the DisplayBuffer class for specifying the display type. This change only affects `external_components`. -See {{< pr number="3430" repo="esphome" >}} for more details. - -## Full list of changes - -### New Components - -- Add Tuya select {{< pr number="3469" repo="esphome" >}} by {{< ghuser name="bearpawmaxim" >}} (new-integration) -- Add support for SGP41 {{< pr number="3382" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) (breaking-change) -- Implement Media Player and I2S Media player {{< pr number="3487" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- Tcs34725 automatic sampling settings for improved dynamics and accuracy {{< pr number="3258" repo="esphome" >}} by {{< ghuser name="swifty99" >}} (breaking-change) -- Add support for SGP41 {{< pr number="3382" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) (breaking-change) -- Remove deprecated fan speeds {{< pr number="3397" repo="esphome" >}} by {{< ghuser name="kbickar" >}} (breaking-change) -- Output a true RMS voltage % {{< pr number="3494" repo="esphome" >}} by {{< ghuser name="josephdouce" >}} (breaking-change) -- Add display_type property to DisplayBuffer {{< pr number="3430" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (breaking-change) - -### Beta Changes - -- publish fan speed count for discovery {{< pr number="3537" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Nextion brightness setting requires an assignment {{< pr number="3533" repo="esphome" >}} by {{< ghuser name="nagyv" >}} -- Implement media player volume actions {{< pr number="3551" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix compilation with ESP32-S3 {{< pr number="3543" repo="esphome" >}} by {{< ghuser name="misery" >}} -- Bm3xx: Fix typo {{< pr number="3559" repo="esphome" >}} by {{< ghuser name="martgras" >}} - -### Notable Changes - -- Add variable substitutions for !include {{< pr number="3510" repo="esphome" >}} by {{< ghuser name="jimtng" >}} (notable-change) - -### All changes - -- Tcs34725 automatic sampling settings for improved dynamics and accuracy {{< pr number="3258" repo="esphome" >}} by {{< ghuser name="swifty99" >}} (breaking-change) -- Remove duplicate convert_to_8bit_color function. {{< pr number="2469" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Bump esptool from 3.3 to 3.3.1 {{< pr number="3468" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.13.8 to 2.13.9 {{< pr number="3470" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Tuya status gpio support {{< pr number="3466" repo="esphome" >}} by {{< ghuser name="bearpawmaxim" >}} -- Add Tuya select {{< pr number="3469" repo="esphome" >}} by {{< ghuser name="bearpawmaxim" >}} (new-integration) -- MQTT cover: send state even if position is available {{< pr number="3473" repo="esphome" >}} by {{< ghuser name="pyos" >}} -- Ili9341 8bit indexed mode pt1 {{< pr number="2490" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- feat: esp32-camera add stream event {{< pr number="3285" repo="esphome" >}} by {{< ghuser name="myml" >}} -- Add support for SGP41 {{< pr number="3382" repo="esphome" >}} by {{< ghuser name="martgras" >}} (new-integration) (breaking-change) -- add support user-defined modbus functions {{< pr number="3461" repo="esphome" >}} by {{< ghuser name="gazoodle" >}} -- Remove deprecated fan speeds {{< pr number="3397" repo="esphome" >}} by {{< ghuser name="kbickar" >}} (breaking-change) -- Fix compile issues on windows {{< pr number="3491" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- midea: New power_toggle action. Auto-use remote transmitter. {{< pr number="3496" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Output a true RMS voltage % {{< pr number="3494" repo="esphome" >}} by {{< ghuser name="josephdouce" >}} (breaking-change) -- [scd4x] Fix not passing arguments to templatable value for perform_forced_calibration {{< pr number="3495" repo="esphome" >}} by {{< ghuser name="Wumpf" >}} -- Thermostat preset with modes {{< pr number="3298" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} -- Allow Prometheus component to export internal components {{< pr number="3508" repo="esphome" >}} by {{< ghuser name="jangrewe" >}} -- [BedJet] Add configurable heating strategy {{< pr number="3519" repo="esphome" >}} by {{< ghuser name="jhansche" >}} -- Add variable substitutions for !include {{< pr number="3510" repo="esphome" >}} by {{< ghuser name="jimtng" >}} (notable-change) -- Change rain intensity sensor string {{< pr number="3511" repo="esphome" >}} by {{< ghuser name="wtremmel" >}} -- Implement Media Player and I2S Media player {{< pr number="3487" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add mqtt.on_connect and mqtt.on_disconnect triggers {{< pr number="3520" repo="esphome" >}} by {{< ghuser name="jimtng" >}} -- Refactor clock syncing {{< pr number="3503" repo="esphome" >}} by {{< ghuser name="jhansche" >}} -- Added RC6 protocol support {{< pr number="3514" repo="esphome" >}} by {{< ghuser name="Emrvb" >}} -- Add display_type property to DisplayBuffer {{< pr number="3430" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (breaking-change) -- Correct ADC auto-range for ESP32-S2 variant (13 bit adc) {{< pr number="3158" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Suppress first rotary encoder event {{< pr number="3532" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix endless 'WiFi Unknown connection status 0' loop {{< pr number="3530" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- support rotated ILI9341 (ILI9342) {{< pr number="3526" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix sdp3x error checking {{< pr number="3531" repo="esphome" >}} by {{< ghuser name="Azimath" >}} -- Fix percentage validation for wrong data type input {{< pr number="3524" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Block Tuya light from reacting to dp changes if transitioning {{< pr number="3076" repo="esphome" >}} by {{< ghuser name="VitaliyKurokhtin" >}} -- Cleanup deprecated EntityBase::hash_base() {{< pr number="3525" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix bogus reading on no communication with MAX31865 {{< pr number="3505" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Implement the media player actions {{< pr number="3534" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- RG15 data is float/double, not int {{< pr number="3512" repo="esphome" >}} by {{< ghuser name="wtremmel" >}} -- publish fan speed count for discovery {{< pr number="3537" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Nextion brightness setting requires an assignment {{< pr number="3533" repo="esphome" >}} by {{< ghuser name="nagyv" >}} -- Implement media player volume actions {{< pr number="3551" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix compilation with ESP32-S3 {{< pr number="3543" repo="esphome" >}} by {{< ghuser name="misery" >}} -- Bm3xx: Fix typo {{< pr number="3559" repo="esphome" >}} by {{< ghuser name="martgras" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.8.0.md b/content/changelog/2022.8.0.md deleted file mode 100644 index f361198e50..0000000000 --- a/content/changelog/2022.8.0.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.8.0." -title: "ESPHome 2022.8.0 - 17th August 2022" -params: - seo: - description: Changelog for ESPHome 2022.8.0. - image: /_static/changelog-2022.8.0.png ---- - -{{< imgtable >}} -"DAC7678","components/output/dac7678","dac7678.svg","" -"Sprinkler","components/sprinkler","sprinkler-variant.svg","dark-invert" -"Feedback Cover","components/cover/feedback","feedback_cover.svg","dark-invert" -"SMT100","components/sensor/smt100","smt100.jpg","Moisture & Temperature" -"Whynter IR Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Bluetooth Proxy","components/bluetooth_proxy","bluetooth.svg","dark-invert" -{{< /imgtable >}} - -## Bluetooth Proxy - -ESPHome 2022.8.2 brings a new feature that allows you to use your ESP32 devices as Bluetooth Proxies for Home Assistant. -They will forward the BLE Advertisements to Home Assistant which will then trigger a discovery and allow you to set up -an integration for the found devices. This allows you to set up multiple ESP32 Bluetooth Proxies around the area to make -sure all advertisements are received reliably. - -We have created a few examples that are ready to flash directly from your browser for some specific devices: - - -## Sprinkler controller - -{{< ghuser name="kbx81" >}} has written a beast of a sprinkler controller to help organise and schedule all of your -sprinkler valves and keep those plants and veggies thriving. Check out the docs at -{{< docref "/components/sprinkler" >}}. - -## ST7789V - -The {{< docref "/components/display/st7789v" >}} display platform has had an update which adds a `model` configuration -option. With this comes custom width and heights to allow you to use this with any display using this driver now. - -## Breaking Changes - -There are a few breaking changes this release, including removing `min_save_interval` from -the {{< docref "/components/sensor/integration" >}} and {{< docref "/components/sensor/total_daily_energy" >}}. -The BedJet climate introduced recently has also undergone a refactoring to allow different -platforms to extend the functionality available from ESPHome. - - - -## Release 2022.8.1 - September 1 - -- fix grow password setting {{< pr number="3722" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix SPI HW selection for ESP32 variants {{< pr number="3728" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2022.8.2 - September 6 - -- Initial bluetooth_proxy support {{< pr number="3736" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Ignore NaN states in the integration component {{< pr number="3767" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Update modbus_controller.cpp {{< pr number="3768" repo="esphome" >}} by {{< ghuser name="Avirsaam" >}} - -## Release 2022.8.3 - September 6 - -- Fix HA addon auth using HA credentials {{< pr number="3758" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- DAC7678 support {{< pr number="3441" repo="esphome" >}} by {{< ghuser name="NickB1" >}} (new-integration) -- Add support for SMT100 Soil Moisture Sensor {{< pr number="3654" repo="esphome" >}} by {{< ghuser name="piechade" >}} (new-integration) -- Adding support for Whynter ARC-14S/SH Air Conditioners {{< pr number="3641" repo="esphome" >}} by {{< ghuser name="aeonsablaze" >}} (new-integration) -- Sprinkler controller component {{< pr number="2249" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Create feedback cover component {{< pr number="3253" repo="esphome" >}} by {{< ghuser name="ianchi" >}} (new-integration) - -### Breaking Changes - -- Remove min_save_interval from intergration and total_daily_energy {{< pr number="3498" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Rework NaN handling in sensor filters {{< pr number="3610" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} (breaking-change) -- Extend ST7789V component to support additional displays {{< pr number="3651" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Refactor BedJet climate into Hub component {{< pr number="3522" repo="esphome" >}} by {{< ghuser name="jhansche" >}} (breaking-change) - -### Beta Changes - -- Improve Web view for Climate components {{< pr number="3706" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Add vector include {{< pr number="3707" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add state_class total {{< pr number="3608" repo="esphome" >}} by {{< ghuser name="peterg79" >}} -- add gradient color V2.0 {{< pr number="3709" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Webui small fixes {{< pr number="3713" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Only trigger ble_client on_connect after discovering services {{< pr number="3710" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- Fixes BLE remote address type when connecting {{< pr number="3702" repo="esphome" >}} by {{< ghuser name="rbaron" >}} -- Makes ble_client.ble_write's action value templatable {{< pr number="3715" repo="esphome" >}} by {{< ghuser name="rbaron" >}} - -### All changes - -- Refactor vl53l0x to remove code from header. {{< pr number="3536" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Fix modbus user-defined function handling {{< pr number="3527" repo="esphome" >}} by {{< ghuser name="gazoodle" >}} -- Language schema 202204 {{< pr number="3492" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix / Reverse order shutdown {{< pr number="3585" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- RestoringGlobalsComponent: Store value on shutdown {{< pr number="3586" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Map LOLIN C3 mini board pins {{< pr number="3587" repo="esphome" >}} by {{< ghuser name="mateusdemboski" >}} -- Bump platformio to 6.0.2 {{< pr number="3566" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pylint from 2.13.9 to 2.14.3 {{< pr number="3589" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- DAC7678 support {{< pr number="3441" repo="esphome" >}} by {{< ghuser name="NickB1" >}} (new-integration) -- Correcting ESP32 flash save/load key calculation algorithm {{< pr number="3416" repo="esphome" >}} by {{< ghuser name="cinadr" >}} -- Bump aioesphomeapi from 10.8.2 to 10.10.0 {{< pr number="3590" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Do two substitutions passes to allow substitutions inside substitutions {{< pr number="3583" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update actions {{< pr number="3592" repo="esphome" >}} by {{< ghuser name="wrt54g" >}} -- Add github-actions to dependabot {{< pr number="3595" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix some typos found by codespell {{< pr number="3598" repo="esphome" >}} by {{< ghuser name="misery" >}} -- #3358 Correct temperature validity detection issue in some conditions of pu… {{< pr number="3545" repo="esphome" >}} by {{< ghuser name="Benoit3" >}} -- Remove min_save_interval from intergration and total_daily_energy {{< pr number="3498" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Bump zeroconf from 0.38.4 to 0.38.7 {{< pr number="3562" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- fix EDict to dict mapping in helpers.py {{< pr number="3599" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Fix slow_pwm output glitch {{< pr number="3601" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- Bump pyupgrade from 2.32.1 to 2.34.0 {{< pr number="3591" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 22.3.0 to 22.6.0 {{< pr number="3613" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump colorama from 0.4.4 to 0.4.5 {{< pr number="3614" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.14.3 to 2.14.4 {{< pr number="3617" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-mock from 3.7.0 to 3.8.1 {{< pr number="3616" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update dfplayer condition function name {{< pr number="3619" repo="esphome" >}} by {{< ghuser name="dab0g" >}} -- Added more sensor device classes {{< pr number="3624" repo="esphome" >}} by {{< ghuser name="lal12" >}} -- Improvement pipsolar crc {{< pr number="3316" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} -- Fix configuration constants in core. {{< pr number="3652" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- FIX: NVS preferences being written even if unchanged {{< pr number="3647" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Add 'set_total_pulses' action to 'pulse_counter' sensor. {{< pr number="3640" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- add option to publish initial state of binary sensors {{< pr number="3636" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- update packages: nginx-light-1.18.0-6.1+deb11u2 nano-5.4-2+deb11u1 {{< pr number="3631" repo="esphome" >}} by {{< ghuser name="peterg79" >}} -- Add support for SMT100 Soil Moisture Sensor {{< pr number="3654" repo="esphome" >}} by {{< ghuser name="piechade" >}} (new-integration) -- Rework NaN handling in sensor filters {{< pr number="3610" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} (breaking-change) -- Remove deprecated adc init call. {{< pr number="3667" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- List webserver service on MDNS if enabled. {{< pr number="3662" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Show changes from python linting {{< pr number="3677" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- dalybms: support changing the address {{< pr number="3676" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Upgrade rweather/Crypto from 0.2.0 to 0.4.0 {{< pr number="3593" repo="esphome" >}} by {{< ghuser name="sybrenstuvel" >}} -- Allow GPIO20 for ESP32 {{< pr number="3680" repo="esphome" >}} by {{< ghuser name="ashald" >}} -- Remove old unused code in mcp23xxx_base {{< pr number="3685" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Adding option to report signal strength on pvvx_mithermometer {{< pr number="3688" repo="esphome" >}} by {{< ghuser name="doolbneerg" >}} -- Pass optional args to 'new_Pvariable' when creating new entities {{< pr number="3690" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- fix sx1509 use of pullup and pulldown {{< pr number="3689" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add a soft reset in setup() for bme280. {{< pr number="3615" repo="esphome" >}} by {{< ghuser name="dbaarda" >}} -- Add get_ap() method to WiFi {{< pr number="3684" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Extend ST7789V component to support additional displays {{< pr number="3651" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Fix panic abort when BLEClient reconnects {{< pr number="3594" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Introduces ble_client.ble_write Action {{< pr number="3398" repo="esphome" >}} by {{< ghuser name="rbaron" >}} -- Add helpers to switch python for schema and codegen {{< pr number="3693" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Refactor BedJet climate into Hub component {{< pr number="3522" repo="esphome" >}} by {{< ghuser name="jhansche" >}} (breaking-change) -- Added support for setting the current animation frame {{< pr number="3681" repo="esphome" >}} by {{< ghuser name="davestubbs" >}} -- Adding support for Whynter ARC-14S/SH Air Conditioners {{< pr number="3641" repo="esphome" >}} by {{< ghuser name="aeonsablaze" >}} (new-integration) -- Sprinkler controller component {{< pr number="2249" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- add gradient color {{< pr number="3687" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [Nextion] Add on_page trigger {{< pr number="3673" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Bump pyupgrade from 2.34.0 to 2.37.3 {{< pr number="3670" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 10.10.0 to 10.11.0 {{< pr number="3669" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Create feedback cover component {{< pr number="3253" repo="esphome" >}} by {{< ghuser name="ianchi" >}} (new-integration) -- Bump pytest-asyncio from 0.18.3 to 0.19.0 {{< pr number="3695" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.38.7 to 0.39.0 {{< pr number="3694" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-mock from 3.8.1 to 3.8.2 {{< pr number="3622" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump flake8 from 4.0.1 to 5.0.4 {{< pr number="3703" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.14.4 to 2.14.5 {{< pr number="3697" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add priority to on_shutdown trigger {{< pr number="3644" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Improve Web view for Climate components {{< pr number="3706" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Add vector include {{< pr number="3707" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add state_class total {{< pr number="3608" repo="esphome" >}} by {{< ghuser name="peterg79" >}} -- add gradient color V2.0 {{< pr number="3709" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Webui small fixes {{< pr number="3713" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Only trigger ble_client on_connect after discovering services {{< pr number="3710" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- Fixes BLE remote address type when connecting {{< pr number="3702" repo="esphome" >}} by {{< ghuser name="rbaron" >}} -- Makes ble_client.ble_write's action value templatable {{< pr number="3715" repo="esphome" >}} by {{< ghuser name="rbaron" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2022.9.0.md b/content/changelog/2022.9.0.md deleted file mode 100644 index cf16100ed5..0000000000 --- a/content/changelog/2022.9.0.md +++ /dev/null @@ -1,159 +0,0 @@ ---- -description: "Changelog for ESPHome 2022.9.0." -title: "ESPHome 2022.9.0 - 21st September 2022" -params: - seo: - description: Changelog for ESPHome 2022.9.0. - image: /_static/changelog-2022.9.0.png ---- - -{{< imgtable >}} -"DPS310","components/sensor/dps310","dps310.jpg","" -"MCP9600","components/sensor/mcp9600","mcp9600.jpg","" -"TM1621","components/display/tm1621","tm1621.jpg","" -"MPL3115A2","components/sensor/mpl3115a2","mpl3115a2.jpg","" -"uFire EC sensor","components/sensor/ufire_ec","ufire_ec.png","" -"uFire ISE sensor","components/sensor/ufire_ise","ufire_ise.png","" -"Factory Reset Switch","components/switch/factory_reset","restart-alert.svg","dark-invert" -"Factory Reset Button","components/button/factory_reset","restart-alert.svg","dark-invert" -"TM1638","components/display/tm1638","tm1638.jpg","" -"BL0942","components/sensor/bl0942","bl0942.png","" -{{< /imgtable >}} - -## ESPHome Editor - -The editor used in ESPHome has been swapped out for Monaco thanks to {{< ghuser name="glmnet" >}}. He has -been working hard to make the experience of writing your YAML configurations easier and it now -supports auto completion with popups to show you more information. - -## Factory Reset - -A new Factory Reset switch and button has been added this release, allowing resetting of information such -as counters, restored values, and more importantly, the wifi credentials of a device that has been set up -using the captive portal such as pre-flashed devices you would have purchased. - -## Bluetooth Active Connections - -ESPHome 2022.9.3 adds active connections to the `bluetooth_proxy` component allowing Home Assistant -to connect to and control supported devices. - - - -## Release 2022.9.1 - September 22 - -- Revert "fix spi timing issues" {{< pr number="3838" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.9.2 - September 29 - -- Bump dashboard to 20220925.0 {{< pr number="3846" repo="esphome" >}} by {{< ghuser name="glmnet" >}} - -## Release 2022.9.3 - October 6 - -- Bluetooth Proxy active connections {{< pr number="3817" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2022.9.4 - October 7 - -- Add network type to mdns service message {{< pr number="3880" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20221007.0 {{< pr number="3881" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont add wifi block to yaml if discovered device uses ethernet {{< pr number="3882" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add dps310 sensor support {{< pr number="3704" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Support for MCP9600 Thermocouple Amplifier {{< pr number="3700" repo="esphome" >}} by {{< ghuser name="MrEditor97" >}} (new-integration) -- Add support to tm1621 display {{< pr number="3737" repo="esphome" >}} by {{< ghuser name="Philippe12" >}} (new-integration) -- u-fire EC sensor {{< pr number="3774" repo="esphome" >}} by {{< ghuser name="pvizeli" >}} (new-integration) -- Add support for MPL3115A2 Pressure/Altitude and Temperature Sensor {{< pr number="3371" repo="esphome" >}} by {{< ghuser name="kbickar" >}} (new-integration) -- Add support for BL0942 voltage, current, energy and power Sensor {{< pr number="3777" repo="esphome" >}} by {{< ghuser name="dbuezas" >}} (new-integration) -- Add Factory Reset button and switch {{< pr number="3724" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} (new-integration) -- Add support for TM1638 Led and Key component {{< pr number="3340" repo="esphome" >}} by {{< ghuser name="skykingjwc" >}} (new-integration) -- Add uFire ISE sensor {{< pr number="3789" repo="esphome" >}} by {{< ghuser name="pvizeli" >}} (new-integration) - -### Beta Changes - -- null initialize total sensor for pulse counter {{< pr number="3803" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Sim800l add calls, multiline sms and ussd {{< pr number="3630" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Unify 'nullptr' initalization of class members; {{< pr number="3805" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Initialize all child sensors to nullptr {{< pr number="3808" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove floating point calculation from ac_dimmer ISR {{< pr number="3770" repo="esphome" >}} by {{< ghuser name="Azimath" >}} -- split pronto codes if they are too long {{< pr number="3812" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [BME280] raise standby time {{< pr number="3804" repo="esphome" >}} by {{< ghuser name="h3ndrik" >}} -- Make sprinkler reset_resume() method public {{< pr number="3824" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump dashboard to 20220919.1 {{< pr number="3828" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Fix-esphome-validation-line-number {{< pr number="3815" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Bump dashboard to 20220920.0 {{< pr number="3831" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump dashboard to 20220920.1 {{< pr number="3834" repo="esphome" >}} by {{< ghuser name="glmnet" >}} - -### All changes - -- support modifying the apds9960 settings {{< pr number="3708" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add support for pvvx mithermometer display via ble client {{< pr number="3333" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- Improve OTA error messages adding return codes {{< pr number="3698" repo="esphome" >}} by {{< ghuser name="IgnacioHR" >}} -- Send CR also for commands for sim800l {{< pr number="3719" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- hydreon_rgxx: Support lens_bad, em_sat and temperature {{< pr number="3642" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- wifi: support 802.11k and 802.11v {{< pr number="3600" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Add final validate for i2c with mix/max frequency {{< pr number="3727" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add dps310 sensor support {{< pr number="3704" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Let favicon be cached {{< pr number="3729" repo="esphome" >}} by {{< ghuser name="slovdahl" >}} -- Add bitmap font support {{< pr number="3573" repo="esphome" >}} by {{< ghuser name="justfalter" >}} -- add log messages for bad pronto codes {{< pr number="3738" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- add color compare operator's {{< pr number="3730" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Support for MCP9600 Thermocouple Amplifier {{< pr number="3700" repo="esphome" >}} by {{< ghuser name="MrEditor97" >}} (new-integration) -- Support high update rates and fix several bugs in the cse7766 component. {{< pr number="3675" repo="esphome" >}} by {{< ghuser name="fhriley" >}} -- Add Prometheus metrics relabeling {{< pr number="3734" repo="esphome" >}} by {{< ghuser name="jangrewe" >}} -- mcp23017: read output latch registers during setup {{< pr number="3744" repo="esphome" >}} by {{< ghuser name="andyboeh" >}} -- Captive portal show nearby WiFi with no ssid configured {{< pr number="3748" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} -- Remove unnecessary schema extension on template button {{< pr number="3753" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Tidy up switch schemas {{< pr number="3754" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add IP101 support to Ethernet component {{< pr number="3751" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add BedJet Fan child component {{< pr number="3735" repo="esphome" >}} by {{< ghuser name="jhansche" >}} -- ibeacon support for the ble_rssi sensor {{< pr number="3745" repo="esphome" >}} by {{< ghuser name="wjtje" >}} -- Add AEHA IR Protocol {{< pr number="3726" repo="esphome" >}} by {{< ghuser name="hazi" >}} -- Add sum type to binary_sensor_map {{< pr number="3541" repo="esphome" >}} by {{< ghuser name="fbrthld" >}} -- Bump aioesphomeapi from 10.11.0 to 10.13.0 {{< pr number="3740" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.14.5 to 2.15.0 {{< pr number="3746" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Esp32 pulsecounter optional pcnt {{< pr number="3691" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Bump black from 22.6.0 to 22.8.0 {{< pr number="3760" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Various ili9341 fixes {{< pr number="3756" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Add the same docker tags as used in HA {{< pr number="3752" repo="esphome" >}} by {{< ghuser name="andrey-yantsen" >}} -- Bump pytest from 7.1.1 to 7.1.3 {{< pr number="3766" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Remove unneeded line (spi component adds it) {{< pr number="3778" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move crc16 to helpers {{< pr number="3780" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- YAML linting {{< pr number="3779" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support to tm1621 display {{< pr number="3737" repo="esphome" >}} by {{< ghuser name="Philippe12" >}} (new-integration) -- u-fire EC sensor {{< pr number="3774" repo="esphome" >}} by {{< ghuser name="pvizeli" >}} (new-integration) -- Add support for MPL3115A2 Pressure/Altitude and Temperature Sensor {{< pr number="3371" repo="esphome" >}} by {{< ghuser name="kbickar" >}} (new-integration) -- Add support for BL0942 voltage, current, energy and power Sensor {{< pr number="3777" repo="esphome" >}} by {{< ghuser name="dbuezas" >}} (new-integration) -- Bump pylint from 2.15.0 to 2.15.2 {{< pr number="3785" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add Factory Reset button and switch {{< pr number="3724" repo="esphome" >}} by {{< ghuser name="anatoly-savchenkov" >}} (new-integration) -- [MPU6050] Support devices with WHOAMI 0x98 {{< pr number="3784" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Bump zeroconf from 0.39.0 to 0.39.1 {{< pr number="3782" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add support for TM1638 Led and Key component {{< pr number="3340" repo="esphome" >}} by {{< ghuser name="skykingjwc" >}} (new-integration) -- Remove status_set_error from ufire_ec {{< pr number="3792" repo="esphome" >}} by {{< ghuser name="pvizeli" >}} -- Bump frenck/action-yamllint from 1.2.0 to 1.3.0 {{< pr number="3798" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esp32_ble_tracker continuous and one shot scanning modes {{< pr number="3649" repo="esphome" >}} by {{< ghuser name="jonofmac" >}} -- Add stop action for ble scanning {{< pr number="3799" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add Prometheus Service Discovery for online devices {{< pr number="3788" repo="esphome" >}} by {{< ghuser name="cznewt" >}} -- Allow ble tracker to subscribe to ota start and stop the scanning {{< pr number="3800" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add uFire ISE sensor {{< pr number="3789" repo="esphome" >}} by {{< ghuser name="pvizeli" >}} (new-integration) -- fix spi timing issues {{< pr number="3763" repo="esphome" >}} by {{< ghuser name="IgnacioHR" >}} -- null initialize total sensor for pulse counter {{< pr number="3803" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Sim800l add calls, multiline sms and ussd {{< pr number="3630" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Unify 'nullptr' initalization of class members; {{< pr number="3805" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Initialize all child sensors to nullptr {{< pr number="3808" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove floating point calculation from ac_dimmer ISR {{< pr number="3770" repo="esphome" >}} by {{< ghuser name="Azimath" >}} -- split pronto codes if they are too long {{< pr number="3812" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [BME280] raise standby time {{< pr number="3804" repo="esphome" >}} by {{< ghuser name="h3ndrik" >}} -- Make sprinkler reset_resume() method public {{< pr number="3824" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump dashboard to 20220919.1 {{< pr number="3828" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Fix-esphome-validation-line-number {{< pr number="3815" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Bump dashboard to 20220920.0 {{< pr number="3831" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump dashboard to 20220920.1 {{< pr number="3834" repo="esphome" >}} by {{< ghuser name="glmnet" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.10.0.md b/content/changelog/2023.10.0.md deleted file mode 100644 index 6035b2167a..0000000000 --- a/content/changelog/2023.10.0.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.10.0." -title: "ESPHome 2023.10.0 - 18th October 2023" -params: - seo: - description: Changelog for ESPHome 2023.10.0. - image: /_static/changelog-2023.10.0.png ---- - -{{< imgtable >}} -"MMC5983","components/sensor/mmc5983","mmc5983.jpg" -{{< /imgtable >}} -This release is quite small as myself ({{< ghuser name="jesserockz" >}}) and {{< ghuser name="kbx81" >}} have been -focusing on `voice_assistant` updates and preparations for the Year of the Voice - Chapter 4. - -Check out the stream replay here: - - - - -## XOR Condition - -A new `xor` condition has been added to the automation engine. This condition will only be true -when a single condition in the list is true. - - - -## Release 2023.10.1 - October 19 - -- Fix voice_assistant without a speaker {{< pr number="5558" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esp32_improv add timeout {{< pr number="5556" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Create IPv4 sockets if ipv6 is not enabled {{< pr number="5565" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Incorrect ESP32 Strapping PIN Defined {{< pr number="5563" repo="esphome" >}} by {{< ghuser name="descipher" >}} - -## Release 2023.10.2 - October 24 - -- Fix XOR condition {{< pr number="5567" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improv Serial support via USB CDC and JTAG {{< pr number="5559" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Publish the `pulse_meter` total when setting the total {{< pr number="5475" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- Remove explicit cast for IPAddress {{< pr number="5574" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Set addr type when copy from ip4_addr_t {{< pr number="5583" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- fix canbus send config {{< pr number="5585" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Allow set climate preset to NONE {{< pr number="5588" repo="esphome" >}} by {{< ghuser name="dentra" >}} - -## Release 2023.10.3 - October 24 - -- Set IP address `type` only when IPv4 and IPv6 are both enabled {{< pr number="5595" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2023.10.4 - October 30 - -- Update current_based_cover bugfix {{< pr number="5587" repo="esphome" >}} by {{< ghuser name="rogerbusser" >}} -- Fixes ip include on arduino 2.7.4 {{< pr number="5620" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Fix bug when requesting italic gfonts {{< pr number="5623" repo="esphome" >}} by {{< ghuser name="dewet22" >}} -- Handle enum type in tuya text_sensor {{< pr number="5626" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.10.5 - November 1 - -- Add connection triggers to api {{< pr number="5628" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add on_client_connected and disconnected to voice assistant {{< pr number="5629" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Ensure that all uses of strncpy in wifi component are safe. {{< pr number="5636" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Remove some explicit IPAddress casts {{< pr number="5639" repo="esphome" >}} by {{< ghuser name="HeMan" >}} - -## Release 2023.10.6 - November 3 - -- Revert "Ensure that all uses of strncpy in wifi component are safe." {{< pr number="5662" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Breaking changes - -The SHT3x had a `heater_enabled` config option added in the 2023.9.0 release with a default value of `true`. -This has been flipped this release to be `false` as it started causing issues with various sensors. - -The SPS30 number concentration sensors had their units fixed to be `#/cm³` instead of `#/m³`. - -## Full list of changes - -### New Components - -- Implement sensor component for MMC5983 {{< pr number="5361" repo="esphome" >}} by {{< ghuser name="agoode" >}} (new-integration) - -### Breaking Changes - -- Do not enable SHT3x heater by default. Fixes #4886. {{< pr number="5445" repo="esphome" >}} by {{< ghuser name="jkl1337" >}} (breaking-change) -- Fix units for SPS30 number concentration sensors {{< pr number="5452" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) - -### Beta Changes - -- Update htu21d.cpp, fix publishing of heater level {{< pr number="5520" repo="esphome" >}} by {{< ghuser name="Nippey" >}} -- BD5758D - Add delays and ACKs {{< pr number="5524" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Update Improv BLE component {{< pr number="5518" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SM10BIT_BASE - Add delays and ACKs, clear all channels before sleeping. {{< pr number="5526" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- BP1658CJ - Clear all channels before sleeping. {{< pr number="5525" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Prometheus fix for esp-idf and fix newlines {{< pr number="5536" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make IPAddress's operator!= compare values, not memory addresses. {{< pr number="5537" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- Add change i2c address and allow multi conf for TB6612FNG {{< pr number="5492" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Add stream start and end events {{< pr number="5545" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix esp32_improv authorizer with no binary sensors in config {{< pr number="5546" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- More voice assistant fixes {{< pr number="5547" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix default libretiny manufacturer reported to HA {{< pr number="5549" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SML: fix incomplete sign extension for abbreviated transmissions {{< pr number="5544" repo="esphome" >}} by {{< ghuser name="fblaese" >}} -- esp32_improv advertise capabilities and state in ble service data {{< pr number="5553" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### Notable Changes - -- Add xor automation condition {{< pr number="5453" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (notable-change) - -### All changes - -- SX1509 component {{< pr number="5385" repo="esphome" >}} by {{< ghuser name="vr6racer" >}} -- Ci find YAML tests dynamically {{< pr number="5399" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Make ESPHome data dir configurable {{< pr number="5417" repo="esphome" >}} by {{< ghuser name="werdnum" >}} -- Bump actions/checkout from 4.0.0 to 4.1.0 {{< pr number="5420" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix typo in documentation {{< pr number="5425" repo="esphome" >}} by {{< ghuser name="kapily" >}} -- Bump pylint from 2.17.5 to 2.17.6 {{< pr number="5429" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Refactor ip address representation {{< pr number="5252" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Fix .esphome path when not using envvar {{< pr number="5440" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [BP1658CJ] Missing clock line delays and ack bit {{< pr number="5448" repo="esphome" >}} by {{< ghuser name="leoshusar" >}} -- [ssd1351] fix: wait for the component to be at least in setup phase b… {{< pr number="5454" repo="esphome" >}} by {{< ghuser name="xdecock" >}} -- Do not enable SHT3x heater by default. Fixes #4886. {{< pr number="5445" repo="esphome" >}} by {{< ghuser name="jkl1337" >}} (breaking-change) -- Add testcases for multiple SPI buses on ESP32 Arduino {{< pr number="5457" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- Feat/component poller suspend {{< pr number="5423" repo="esphome" >}} by {{< ghuser name="xdecock" >}} -- Bump actions/setup-python from 4.7.0 to 4.7.1 {{< pr number="5467" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add xor automation condition {{< pr number="5453" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (notable-change) -- Fix units for SPS30 number concentration sensors {{< pr number="5452" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) -- ST7789v - Allow predefined backlight pin to be disabled. {{< pr number="5476" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- MAX7219 - Update intensity {{< pr number="5477" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- St7789v and SPI data rate {{< pr number="5472" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Move CONF_IRQ_PIN into const.py {{< pr number="5488" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Initial ESP32-H2 Support {{< pr number="5498" repo="esphome" >}} by {{< ghuser name="vidplace7" >}} -- Increased debug message precision {{< pr number="5496" repo="esphome" >}} by {{< ghuser name="lukeansell" >}} -- Support for Haier IR protocol added {{< pr number="5403" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- add USE_SPI define {{< pr number="5500" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- Implement sensor component for MMC5983 {{< pr number="5361" repo="esphome" >}} by {{< ghuser name="agoode" >}} (new-integration) -- Bump docker dependencies {{< pr number="5501" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move to Pillow 10.x {{< pr number="5489" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- [Sprinkler] Initialize timers early to avoid crash {{< pr number="5499" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- Deep sleep is only available on esp32 and esp8266 {{< pr number="5507" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use platform consts {{< pr number="5508" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fixed precision for Nextion sensor with float values {{< pr number="5497" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} -- Remote wake word support for voice assistant {{< pr number="5229" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Don't allow entity category "CONFIG" for sensors {{< pr number="5505" repo="esphome" >}} by {{< ghuser name="edenhaus" >}} -- Prepare protobuf for ESP-IDF >= 5 {{< pr number="5510" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- fix build lang schema for spi and i2c {{< pr number="5509" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Added Nextion display error handling during setup {{< pr number="5493" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} -- Fix e131 and voice_assistant sockets {{< pr number="5502" repo="esphome" >}} by {{< ghuser name="justdaniel-gh" >}} -- Allow manual set "Invert_display" {{< pr number="5494" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- As3935 calibration {{< pr number="5366" repo="esphome" >}} by {{< ghuser name="mveinot" >}} -- Small fixes for voice assistant {{< pr number="5513" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Add detail param to allow listing of select options in WebServer REST API {{< pr number="5503" repo="esphome" >}} by {{< ghuser name="DanielBaulig" >}} -- Bump curl to 7.74.0-1.3+deb11u10 {{< pr number="5517" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update htu21d.cpp, fix publishing of heater level {{< pr number="5520" repo="esphome" >}} by {{< ghuser name="Nippey" >}} -- BD5758D - Add delays and ACKs {{< pr number="5524" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Update Improv BLE component {{< pr number="5518" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SM10BIT_BASE - Add delays and ACKs, clear all channels before sleeping. {{< pr number="5526" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- BP1658CJ - Clear all channels before sleeping. {{< pr number="5525" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Prometheus fix for esp-idf and fix newlines {{< pr number="5536" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make IPAddress's operator!= compare values, not memory addresses. {{< pr number="5537" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- Add change i2c address and allow multi conf for TB6612FNG {{< pr number="5492" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Add stream start and end events {{< pr number="5545" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix esp32_improv authorizer with no binary sensors in config {{< pr number="5546" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- More voice assistant fixes {{< pr number="5547" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix default libretiny manufacturer reported to HA {{< pr number="5549" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SML: fix incomplete sign extension for abbreviated transmissions {{< pr number="5544" repo="esphome" >}} by {{< ghuser name="fblaese" >}} -- esp32_improv advertise capabilities and state in ble service data {{< pr number="5553" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.11.0.md b/content/changelog/2023.11.0.md deleted file mode 100644 index 48c082a41c..0000000000 --- a/content/changelog/2023.11.0.md +++ /dev/null @@ -1,266 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.11.0." -title: "ESPHome 2023.11.0 - 15th November 2023" -params: - seo: - description: Changelog for ESPHome 2023.11.0. - image: /_static/changelog-2023.11.0.png ---- - -{{< imgtable >}} -"Text Core","components/text/index","folder-open.svg","dark-invert" -"Template Text","components/text/template","description.svg","dark-invert" -"UART Button","components/button/uart","uart.svg","" -"GREE Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"DFRobot mmWave Radar","components/dfrobot_sen0395","dfrobot_sen0395.jpg","" -"LD2420","components/sensor/ld2420","ld2420.jpg","" -"Qwiic PIR Motion","components/binary_sensor/qwiic_pir","qwiic_pir.jpg","" -"Noblex Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Honeywell ABP2","components/sensor/honeywellabp2_i2c","honeywellabp.jpg","" -"iAQ-Core","components/sensor/iaqcore","iaqcore.jpg","" -"SFA30","components/sensor/sfa30","sfa30.jpg","" -"ZH/LT-01 Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"EMC2101","components/emc2101","emc2101.jpg","" -"MicroNova pellet stove","components/micronova","micronova.svg","" -"XGZP68xx Series","components/sensor/xgzp68xx","6897d.jpg","" -{{< /imgtable >}} - -## Text Components - -We finally have implemented the {{< docref "/components/text/index" "Text" >}} Components. -Many people have been using "Text Input Helpers" to get user entered text into -ESPHome for various reasons. Now ESPHome can expose text entities -directly to Home Assistant. These require Home Assistant 2023.11 or above to use. - -## Various Automations - -- BLE have had `ble.enable` and `ble.disable` actions added to turn on and off when not needed, - as well as a new condition `ble.enabled` to check the state. - -- Wi-Fi has new triggers for `on_connect` and `on_disconnect`. - -- `api` has new triggers `on_client_connected` and `on_client_disconnected` which were - released in the 2023.10.5 patch version due to requiring that specific PR to not cause merge - conflicts later. - -## Areas - -When you add a new ESPHome device to Home Assistant, you assign that device to an area. -From Home Assistant 2023.12, you will be able to specify the suggested area that Home Assistant -pre-populates when you connect the device. - -```yaml -esphome: - name: living-room-light - friendly_name: Living Room Light - area: Living Room -``` - - - -## Release 2023.11.1 - November 16 - -- Add more VA triggers {{< pr number="5762" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix MY9231 flicker {{< pr number="5765" repo="esphome" >}} by {{< ghuser name="Mat931" >}} - -## Release 2023.11.2 - November 18 - -- Bump aioesphomeapi from 18.4.0 to 18.4.1 {{< pr number="5767" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 18.4.1 to 18.5.2 {{< pr number="5780" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- fix 32-bit arm {{< pr number="5781" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add 2MB option for partitions.csv generation and restore use of user-defined partitions {{< pr number="5779" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2023.11.3 - November 22 - -- include payload_open when a lock supports OPEN {{< pr number="5809" repo="esphome" >}} by {{< ghuser name="ccutrer" >}} -- dashboard: Fix online status when api is disabled {{< pr number="5791" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- fix: compile errors with fonts {{< pr number="5808" repo="esphome" >}} by {{< ghuser name="cvandesande" >}} -- Early return when there are no wifi scan results {{< pr number="5797" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add some additional VA triggers, part 2 {{< pr number="5811" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2023.11.4 - November 24 - -- Allow images to be downloaded from URLs {{< pr number="5214" repo="esphome" >}} by {{< ghuser name="landonr" >}} - -## Release 2023.11.5 - November 28 - -- Voice Assistant improvements {{< pr number="5827" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missing include in remote_base {{< pr number="5843" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add 'voice_assistant.connected' condition {{< pr number="5845" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.11.6 - November 28 - -- Fix write_speaker without speaker in config {{< pr number="5847" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add Support for Sensirion SFA30 sensor {{< pr number="5519" repo="esphome" >}} by {{< ghuser name="ghsensdev" >}} (new-integration) -- add uart button {{< pr number="5540" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Add ZH/LT-01 climate component with IR receiver option {{< pr number="4333" repo="esphome" >}} by {{< ghuser name="cfeenstra1024" >}} (new-integration) -- Feat: Add GREE climateir component {{< pr number="4464" repo="esphome" >}} by {{< ghuser name="PiuPiuson" >}} (new-integration) -- AMS iAQ Core CO2 sensor component {{< pr number="5192" repo="esphome" >}} by {{< ghuser name="yozik04" >}} (new-integration) -- Add IR Noblex climate component {{< pr number="4913" repo="esphome" >}} by {{< ghuser name="AGalfra" >}} (new-integration) -- Add text component {{< pr number="5336" repo="esphome" >}} by {{< ghuser name="EternityForest" >}} (new-integration) -- Add support for honeywellabp2 pressure sensor {{< pr number="5422" repo="esphome" >}} by {{< ghuser name="jpfaff" >}} (new-integration) -- Add Emc2101 {{< pr number="4491" repo="esphome" >}} by {{< ghuser name="ellull" >}} (new-integration) -- Add support for Qwiic PIR binary sensor {{< pr number="5194" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add dfrobot_sen0395 mmwave radar component {{< pr number="4203" repo="esphome" >}} by {{< ghuser name="niklasweber" >}} (new-integration) -- Add HLK-LD2420 mmWave Radar module component. {{< pr number="4847" repo="esphome" >}} by {{< ghuser name="descipher" >}} (new-integration) -- Add Micronova component {{< pr number="4760" repo="esphome" >}} by {{< ghuser name="Jorre05" >}} (new-integration) -- Add differential pressure sensor support for CFSensor XGZP68xxD devices {{< pr number="5562" repo="esphome" >}} by {{< ghuser name="gcormier" >}} (new-integration) -- Add spi support for ade7953 {{< pr number="5439" repo="esphome" >}} by {{< ghuser name="angelnu" >}} (new-integration) -- Add resistance_sampler interface for config validation {{< pr number="5718" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- Hydreon updates {{< pr number="5424" repo="esphome" >}} by {{< ghuser name="jj-uk" >}} (breaking-change) -- Fix esp32_rmt_led_strip custom timing units {{< pr number="5696" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- Handle nanoseconds in config {{< pr number="5695" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix esp32_rmt_led_strip custom timing units {{< pr number="5696" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix static assets cache logic {{< pr number="5700" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use piwheels for armv7 docker image builds {{< pr number="5703" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- fix: Fix broken bluetooth_proxy and ble_clients after BLE enable/disable {{< pr number="5704" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- Bump aioesphomeapi to 18.2.7 {{< pr number="5706" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update Dockerfile to use piwheels for armv7 {{< pr number="5709" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump zeroconf from 0.120.0 to 0.122.3 {{< pr number="5715" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add resistance_sampler interface for config validation {{< pr number="5718" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Fix zeroconf name resolution refactoring error {{< pr number="5725" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Missed ifdefs {{< pr number="5727" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- Bump aioesphomeapi from 18.2.7 to 18.4.0 {{< pr number="5735" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Migrate to using aioesphomeapi for the log runner to fix multiple issues {{< pr number="5733" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump zeroconf to 0.123.0 {{< pr number="5736" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Handle wake word not set up internally {{< pr number="5738" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- dashboard: remove usage of codecs module {{< pr number="5741" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Run get_serial_ports in the executor {{< pr number="5740" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Generate partitions.csv based on flash size {{< pr number="5697" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Allow setup to continue past mqtt if network/wifi is disabled {{< pr number="5754" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont dump wifi info when disabled {{< pr number="5755" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Splits FastLed test scripts out of test1.yaml {{< pr number="5522" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Add round sensor filter {{< pr number="5532" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add Support for Sensirion SFA30 sensor {{< pr number="5519" repo="esphome" >}} by {{< ghuser name="ghsensdev" >}} (new-integration) -- Change UART source clock to `UART_SCLK_DEFAULT` when IDF >=v5 {{< pr number="5533" repo="esphome" >}} by {{< ghuser name="leoshusar" >}} -- add uart button {{< pr number="5540" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- add on/off options for uart switch {{< pr number="5539" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Update docker base and packages + docker python 3.11 {{< pr number="5473" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- IDF 5 fixes for various components from test1.yaml {{< pr number="5451" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump aioesphomeapi from 15.0.0 to 18.0.6 {{< pr number="5557" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.115.1 to 0.119.0 {{< pr number="5560" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add config to allow suppression of warnings about use of strapping pins {{< pr number="5287" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Hydreon updates {{< pr number="5424" repo="esphome" >}} by {{< ghuser name="jj-uk" >}} (breaking-change) -- Bump actions/checkout from 4.1.0 to 4.1.1 {{< pr number="5551" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.10.1 to 3.13.0 {{< pr number="5428" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tzlocal from 5.0.1 to 5.1 {{< pr number="5480" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.9.1 to 23.10.0 {{< pr number="5561" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fan no off cycle action {{< pr number="5564" repo="esphome" >}} by {{< ghuser name="skykingjwc" >}} -- Bump aioesphomeapi from 18.0.6 to 18.0.7 {{< pr number="5573" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Remove unnecessary checks in Nextion component {{< pr number="5578" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- update storage version from mdns {{< pr number="5584" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- set Nextion protocol reparse mode {{< pr number="5484" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add address text sensor to WireGuard {{< pr number="5576" repo="esphome" >}} by {{< ghuser name="droscy" >}} -- Add LibreTiny hardwares to PR Template {{< pr number="5575" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump pytest-mock from 3.11.1 to 3.12.0 {{< pr number="5571" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.13.0 to 3.15.0 {{< pr number="5570" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add ZH/LT-01 climate component with IR receiver option {{< pr number="4333" repo="esphome" >}} by {{< ghuser name="cfeenstra1024" >}} (new-integration) -- Feat: Add GREE climateir component {{< pr number="4464" repo="esphome" >}} by {{< ghuser name="PiuPiuson" >}} (new-integration) -- AMS iAQ Core CO2 sensor component {{< pr number="5192" repo="esphome" >}} by {{< ghuser name="yozik04" >}} (new-integration) -- Add IR Noblex climate component {{< pr number="4913" repo="esphome" >}} by {{< ghuser name="AGalfra" >}} (new-integration) -- Bump aioesphomeapi from 18.0.7 to 18.0.12 {{< pr number="5597" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add text component {{< pr number="5336" repo="esphome" >}} by {{< ghuser name="EternityForest" >}} (new-integration) -- Fix exception handling when loading packages {{< pr number="5569" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Add support for honeywellabp2 pressure sensor {{< pr number="5422" repo="esphome" >}} by {{< ghuser name="jpfaff" >}} (new-integration) -- Add Emc2101 {{< pr number="4491" repo="esphome" >}} by {{< ghuser name="ellull" >}} (new-integration) -- Fix: Incorporate unique serial number in preference's hash for multiple Sensirion sensors {{< pr number="5479" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Add support for Qwiic PIR binary sensor {{< pr number="5194" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add ignore out of range option for clamp filter {{< pr number="5455" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Print text mqtt command topic {{< pr number="5601" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Correctly allow mqtt topics to be none so ESPHome does not sub/pub to them {{< pr number="5213" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SX1509 output debounce fix (resolves esphome/issues#4402) {{< pr number="4672" repo="esphome" >}} by {{< ghuser name="tracestep" >}} -- Add details when error loading package {{< pr number="5603" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Fallback to main secrets.yaml for packages {{< pr number="5604" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Add area (zone) to esphome core config to be suggested through API and MQTT. {{< pr number="5602" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Devcontainer: allow pip install and dont warn about root user {{< pr number="5608" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Validate test files before compiling {{< pr number="5611" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Minor defines.h updates {{< pr number="5610" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- timeout filter: return value {{< pr number="5612" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add dfrobot_sen0395 mmwave radar component {{< pr number="4203" repo="esphome" >}} by {{< ghuser name="niklasweber" >}} (new-integration) -- refactor mcp4728 component {{< pr number="5609" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix HA error related to incorrect state class {{< pr number="5605" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- Fix xpt2046 for IDF 5 {{< pr number="5614" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- IDF 5 fixes for various components from test4.yaml {{< pr number="5622" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- IDF 5 fixes for various components from test2.yaml {{< pr number="5621" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix armv7 docker builds {{< pr number="5630" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi from 18.0.12 to 18.2.0 {{< pr number="5606" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add needs-docs workflow to fail CI {{< pr number="5643" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for PCA9535 16 bit I/O expander {{< pr number="5634" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix nextion waveform sending for multiple waveforms {{< pr number="4408" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} -- Allow validation of pins based on hub config {{< pr number="5647" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 18.2.0 to 18.2.1 {{< pr number="5653" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Validate sn74hc595 pin number are within range {{< pr number="5655" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update PCA9554 pin checks to new facility {{< pr number="5656" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Update mDNS component to 1.2.2 {{< pr number="5654" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Fix return value of run_external_command {{< pr number="5657" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update RTTTL component to allow I2S {{< pr number="5177" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Bump flake8 version in pre-commit to match requirements file {{< pr number="5658" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pytest from 7.4.2 to 7.4.3 {{< pr number="5599" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tzlocal from 5.1 to 5.2 {{< pr number="5594" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.10.0 to 23.10.1 {{< pr number="5593" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add Healthcheck to Dockerfile {{< pr number="5651" repo="esphome" >}} by {{< ghuser name="JcMinarro" >}} -- Add HLK-LD2420 mmWave Radar module component. {{< pr number="4847" repo="esphome" >}} by {{< ghuser name="descipher" >}} (new-integration) -- Add Micronova component {{< pr number="4760" repo="esphome" >}} by {{< ghuser name="Jorre05" >}} (new-integration) -- Add basic shell autocompletion using argcomplete {{< pr number="5618" repo="esphome" >}} by {{< ghuser name="Nardol" >}} -- Fixed int variables for user defined service in case of ESP32-C3 {{< pr number="5675" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Add callback for raw sml messages {{< pr number="5668" repo="esphome" >}} by {{< ghuser name="micw" >}} -- Fix compile with latest esp-idf on esp32c6 {{< pr number="5677" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Null topic_prefix disables MQTT publishing/subscription unless topic is explicitly configured {{< pr number="5644" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- feat: Add ESP32 BLE enable/disable automations {{< pr number="5616" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- ble_client rssi sensor fix when not connected {{< pr number="5632" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add Byron Doorbell RF protocol {{< pr number="4718" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- Refactor dashboard zeroconf support {{< pr number="5681" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Allow static assets to be cached if not in debug mode {{< pr number="5684" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove extra code in old sgp40 {{< pr number="5685" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow pulse light effect to have separate on and off transition lengths {{< pr number="5659" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add differential pressure sensor support for CFSensor XGZP68xxD devices {{< pr number="5562" repo="esphome" >}} by {{< ghuser name="gcormier" >}} (new-integration) -- Bump zeroconf from 0.119.0 to 0.120.0 {{< pr number="5682" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add spi support for ade7953 {{< pr number="5439" repo="esphome" >}} by {{< ghuser name="angelnu" >}} (new-integration) -- Remove page jump on Nextion startup {{< pr number="5673" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [web_server] Adds the ability to handle Private Network Access preflight requests {{< pr number="5669" repo="esphome" >}} by {{< ghuser name="DanielBaulig" >}} -- Update esphome-dashboard to version 20231107.0 {{< pr number="5686" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add wifi.on_connect and wifi.on_disconnect triggers {{< pr number="3639" repo="esphome" >}} by {{< ghuser name="ChemicalXandco" >}} -- Implement a memory cache for dashboard entries to avoid frequent disk reads {{< pr number="5687" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- support spi for sn74hc595 {{< pr number="5491" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- Handle on_disconnect when Wi-Fi is disabled {{< pr number="5691" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump aioesphomeapi from 18.2.1 to 18.2.4 {{< pr number="5692" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Handle nanoseconds in config {{< pr number="5695" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix esp32_rmt_led_strip custom timing units {{< pr number="5696" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix static assets cache logic {{< pr number="5700" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use piwheels for armv7 docker image builds {{< pr number="5703" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- fix: Fix broken bluetooth_proxy and ble_clients after BLE enable/disable {{< pr number="5704" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- Bump aioesphomeapi to 18.2.7 {{< pr number="5706" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update Dockerfile to use piwheels for armv7 {{< pr number="5709" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump zeroconf from 0.120.0 to 0.122.3 {{< pr number="5715" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add resistance_sampler interface for config validation {{< pr number="5718" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Fix zeroconf name resolution refactoring error {{< pr number="5725" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Missed ifdefs {{< pr number="5727" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- Bump aioesphomeapi from 18.2.7 to 18.4.0 {{< pr number="5735" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Migrate to using aioesphomeapi for the log runner to fix multiple issues {{< pr number="5733" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump zeroconf to 0.123.0 {{< pr number="5736" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Handle wake word not set up internally {{< pr number="5738" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- dashboard: remove usage of codecs module {{< pr number="5741" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Run get_serial_ports in the executor {{< pr number="5740" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Generate partitions.csv based on flash size {{< pr number="5697" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Allow setup to continue past mqtt if network/wifi is disabled {{< pr number="5754" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont dump wifi info when disabled {{< pr number="5755" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.12.0.md b/content/changelog/2023.12.0.md deleted file mode 100644 index 7ff4c1912a..0000000000 --- a/content/changelog/2023.12.0.md +++ /dev/null @@ -1,307 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.12.0." -title: "ESPHome 2023.12.0 - 20th December 2023" -params: - seo: - description: Changelog for ESPHome 2023.12.0. - image: /_static/changelog-2023.12.0.png ---- - -{{< imgtable >}} -"ENS160","components/sensor/ens160","ens160.jpg","CO2 & Air Quality" -"GT911","components/touchscreen/gt911","esp32_s3_box_3.png","" -"Pylontech Batteries","components/pylontech","pylontech.jpg","" -"HE60R Cover","components/cover/he60r","he60r.jpg","" -"Graphical Display Menu","components/display_menu/graphical_display_menu","graphical_display_menu.png","" -"FT63X6","components/touchscreen/ft63x6","wt32-sc01.png","" -"A02YYUW","components/sensor/a02yyuw","a02yyuw.jpg","" -"PN7150","components/pn7150","pn7150.jpg","" -"PN716X","components/pn7160","pn716x.jpg","" -{{< /imgtable >}} - -## Graphical Menu - -Following on from the previous {{< docref "/components/display_menu/lcd_menu" >}} that was only for LCD displays, -there is now a new {{< docref "/components/display_menu/graphical_display_menu" >}} that can be used with any -graphical/pixel based display. - -## Pin Reuse validation - -There is a new validation performed on configurations to ensure that pins are not reused unintentionally. -This is a common source of issues and generally a pin does not need to be reused across multiple components -in a single configuration. Pins should only be reused in a very limited set of circumstances and seeing the -error will generally mean that you need to reorganise your configuration to not reuse the pins. -The error can be bypassed by specifically adding another config item to all of the -duplicate pin definitions. See the [Pin Schema](/guides/configuration-types#pin-schema) for details. - -## Touchscreen internal changes - -The touchscreen component code has had a big overhaul which breaks any external components or open PRs for -new touchscreens. See {{< pr number="4596" repo="esphome" >}} for details if this affects you. - -## MCP3008 breaking changes - -The MCP3008 has had a restructure of the code and at the same time the default update interval has been changed -to 60 seconds, the units, device class and state class default have also been set to sane defaults expected for -a voltage sensor. - - - -## Release 2023.12.1 - December 21 - -- Fix replaced - in allowed characters during object_id sanitizing {{< pr number="5983" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.12.2 - December 22 - -- ESP32-S3 and ESP-IDF don't play well with USB_CDC and need USB_SERIAL_JTAG {{< pr number="5929" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Update libtiff6 {{< pr number="5985" repo="esphome" >}} by {{< ghuser name="cvandesande" >}} -- Override GPIOs 12 and 13 on the airm2m (LuatOS) board {{< pr number="5982" repo="esphome" >}} by {{< ghuser name="davidmonro" >}} -- Add workaround for crash in Arduino 2.0.9 when CDC is configured {{< pr number="5987" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- web_server.py: return empty content when file doesn't exist {{< pr number="5980" repo="esphome" >}} by {{< ghuser name="jessicah" >}} - -## Release 2023.12.3 - December 22 - -- Fix unexpected disconnects when outgoing buffer is full during keepalive {{< pr number="5988" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Regenerate api_pb2 after manual changes were added incorrectly in #5732 {{< pr number="5990" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improved sensor readings in htu21d component. {{< pr number="5839" repo="esphome" >}} by {{< ghuser name="matzman666" >}} -- Fix dashboard logs when api is disabled and using MQTT {{< pr number="5992" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix broken configs with non-existent components {{< pr number="5993" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.12.4 - December 25 - -- dashboard: Only ping when polling is active {{< pr number="6001" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- tt21100: restore init read {{< pr number="6008" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- dashboard: Fix file writes on Windows {{< pr number="6013" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Display: fix class inherence in Python script {{< pr number="6009" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} - -## Release 2023.12.5 - December 25 - -- Fix docker builds {{< pr number="6012" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2023.12.6 - January 15 - -- Fix device not requesting Home Assistant time at the update interval {{< pr number="6022" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- fix compilation error for libretiny {{< pr number="6064" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- pylontech: Fix parsing error with US2000 {{< pr number="6061" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- Support full (>460 char) dumps of Pronto IR commands {{< pr number="6040" repo="esphome" >}} by {{< ghuser name="rpaskowitz" >}} -- ESP32-C3 USB_CDC fixes {{< pr number="6069" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Improv Serial -- don't wait for incoming bytes {{< pr number="6089" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- add STATE_CLASS_TOTAL_INCREASING to bl0940 and bl0942 {{< pr number="6090" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Fallback to pure-python loader for better error when YAML loading fails {{< pr number="6081" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2023.12.7 - January 17 - -- Fix RMT timing clock base {{< pr number="6101" repo="esphome" >}} by {{< ghuser name="majkrzak" >}} -- Create RingBuffer for VoiceAssistant {{< pr number="6102" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Inkplate6: Fix crash with initial set of greyscale {{< pr number="6038" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -## Release 2023.12.8 - January 19 - -- Let show_*_page actions depend on "Display" {{< pr number="6092" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Fix some Voice Assistant bugs {{< pr number="6121" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.12.9 - January 22 - -- fix sen5x negative temperature {{< pr number="6082" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- negative values for all DHT22 variants {{< pr number="6074" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix negative temperature for pmsx003 {{< pr number="6083" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix: negative temperatures on PMS5003T sensors {{< pr number="6100" repo="esphome" >}} by {{< ghuser name="aschmitz" >}} - -## Full list of changes - -### New Components - -- Add ENS160 Sensor {{< pr number="4243" repo="esphome" >}} by {{< ghuser name="vincentscode" >}} (new-integration) -- Create GT911 Touchscreen component {{< pr number="4027" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Pylontech integration (solar battery bank) {{< pr number="4688" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (new-integration) -- Add Chamberlain/HomEntry HE60R garage door opener {{< pr number="5834" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Add graphical display menu {{< pr number="4105" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} (new-integration) -- Updating the touchscreen interface structure {{< pr number="4596" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) -- Added the A02YYUW distance sensor {{< pr number="5729" repo="esphome" >}} by {{< ghuser name="TH-Braemer" >}} (new-integration) -- Add support for PN7160 {{< pr number="5486" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Add support for PN7150 {{< pr number="5487" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) - -### Breaking Changes - -- Add proper support for SH1107 to SSD1306 component {{< pr number="5166" repo="esphome" >}} by {{< ghuser name="nikitakuklev" >}} (breaking-change) -- sen5x fix temperature compensation and gas tuning {{< pr number="4901" repo="esphome" >}} by {{< ghuser name="matt7aylor" >}} (breaking-change) -- Ensure names containing characters other than `a-z` `A-Z` `0-9` or `_` are unique {{< pr number="5810" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- mcp3008: Tidy up and fix auto load bug {{< pr number="5842" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Nextion colors parameters {{< pr number="5699" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (breaking-change) -- Checks for pins used in multiple places {{< pr number="5666" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Updating the touchscreen interface structure {{< pr number="4596" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) - -### Beta Changes - -- Allow use of CDC/JTAG loggers on esp32 variants with Arduino {{< pr number="4658" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [Logger] ESP32 S3 serial logger {{< pr number="4853" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Support toggle action for template cover {{< pr number="5917" repo="esphome" >}} by {{< ghuser name="jochenvg" >}} -- Fix SplitDefault with variants {{< pr number="5928" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update ENS160 TVOC device_class and AQI units to match required by HA {{< pr number="5939" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- Bump zeroconf from 0.128.4 to 0.130.0 {{< pr number="5950" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- UARTComponent inline doc {{< pr number="5930" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix - Tuya Fan - Allow integer speed datapoint {{< pr number="5948" repo="esphome" >}} by {{< ghuser name="cram42" >}} -- i2s_audio: Set player_task's prio to 1 {{< pr number="5945" repo="esphome" >}} by {{< ghuser name="gaaf" >}} -- esp32_camera: Set framebuffer task prio to 1 {{< pr number="5943" repo="esphome" >}} by {{< ghuser name="gaaf" >}} -- web_server_idf: fix call with hardcoded http code {{< pr number="5942" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Revert pure virtual functions in UART component from #5920 {{< pr number="5932" repo="esphome" >}} by {{< ghuser name="DrCoolzic" >}} -- Use the correct UART/`Serial` when CDC is enabled {{< pr number="5957" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- rename `set_raw_touch_position_` to `add_raw_touch_position_` {{< pr number="5962" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix build issue with UART component when building with Arduino and CDC {{< pr number="5964" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix `I2CBus::write()` bug and add i2c documentation {{< pr number="5947" repo="esphome" >}} by {{< ghuser name="DrCoolzic" >}} -- Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 {{< pr number="5961" repo="esphome" >}} by {{< ghuser name="mathieu-mp" >}} -- Speed up writing protobuf strings/bytes {{< pr number="5828" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi to 21.0.1 {{< pr number="5969" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- image: allow the image to by auto-loaded by animation {{< pr number="5139" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Fix pin reuse error with pin expanders {{< pr number="5973" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Nextion support to `esp-idf` {{< pr number="5667" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- fix pin range for xl9535 {{< pr number="5722" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Bump black from 23.10.1 to 23.11.0 {{< pr number="5702" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Speed up YAML by using YAML C loader when available {{< pr number="5721" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump Arduino Pico Framework to 3.6.0 and Platform to 1.10.0 {{< pr number="5731" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Correct url for Arduino platform {{< pr number="5744" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- remote_base: added helper class and schemas {{< pr number="5169" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Bump zeroconf from 0.123.0 to 0.126.0 {{< pr number="5748" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Make precommit checks happy {{< pr number="5751" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- dashboard: Use mdns cache when available if device connection is OTA {{< pr number="5724" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Speed up OTAs {{< pr number="5720" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: convert ping thread to use asyncio {{< pr number="5749" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Break apart dashboard into separate modules {{< pr number="5764" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: split dashboard web server code into its own module {{< pr number="5770" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump zeroconf from 0.126.0 to 0.127.0 {{< pr number="5768" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- dashboard: fix subprocesses blocking the event loop {{< pr number="5772" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: use fastest available yaml loader in the dashboard {{< pr number="5771" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Centralize dashboard entries into DashboardEntries class {{< pr number="5774" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Pass the name to the log runner when available {{< pr number="5759" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add proper support for SH1107 to SSD1306 component {{< pr number="5166" repo="esphome" >}} by {{< ghuser name="nikitakuklev" >}} (breaking-change) -- Split release workflow jobs per system arch {{< pr number="5723" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi to 18.5.3 {{< pr number="5785" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor log api client to let aioesphomeapi manage zeroconf {{< pr number="5783" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Add support for firing events {{< pr number="5775" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Ensure disk I/O happens in the executor {{< pr number="5789" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Add lookup by name to entries {{< pr number="5790" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor StorageJSON to keep loaded_integrations a set until its converted to JSON {{< pr number="5793" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- wifi: Don't build SoftAP/DHCPS support unless 'ap' is in config. {{< pr number="5649" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- ssd1306: handle V_COM differently for SH1106 {{< pr number="5796" repo="esphome" >}} by {{< ghuser name="papillon81" >}} -- Bump aioesphomeapi from 18.5.3 to 18.5.5 {{< pr number="5804" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- dashboard: Fix online status when api is disabled {{< pr number="5792" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Haier component updated to support new protocol variations {{< pr number="5713" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- sen5x fix temperature compensation and gas tuning {{< pr number="4901" repo="esphome" >}} by {{< ghuser name="matt7aylor" >}} (breaking-change) -- Add startup_delay to interval. {{< pr number="5327" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Pillow: bump to 10.1.0 {{< pr number="5815" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- dashboard: set nodelay on the websocket to avoid a delay seeing log messages {{< pr number="5802" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi from 18.5.5 to 18.5.7 {{< pr number="5822" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Ensure names containing characters other than `a-z` `A-Z` `0-9` or `_` are unique {{< pr number="5810" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Add ENS160 Sensor {{< pr number="4243" repo="esphome" >}} by {{< ghuser name="vincentscode" >}} (new-integration) -- Bump actions/github-script from 6.4.1 to 7.0.1 {{< pr number="5803" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Run all tests when local testing. {{< pr number="5717" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Bump aioesphomeapi from 18.5.7 to 18.5.9 {{< pr number="5830" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow split uart pin inversion for ESP-IDF {{< pr number="5831" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add `is_detected()` for Nextion displays {{< pr number="5825" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Pull PollingComponent up from individual display drivers to Display. {{< pr number="5444" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Implement variable length single word SPI writes. {{< pr number="5678" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add 'enable_on_boot' feature to power_supply {{< pr number="5826" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- mcp3008: Tidy up and fix auto load bug {{< pr number="5842" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Create GT911 Touchscreen component {{< pr number="4027" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Bump aioesphomeapi from 18.5.9 to 19.1.2 {{< pr number="5844" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Nextion - Standardizing log messages {{< pr number="5837" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- dashboard: Small cleanups to dashboard {{< pr number="5841" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Pylontech integration (solar battery bank) {{< pr number="4688" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (new-integration) -- Implement deep sleep and clear screen on Waveshare 7.5in B V3 {{< pr number="5239" repo="esphome" >}} by {{< ghuser name="lucasprim" >}} -- Fix ESP-IDF uart initialisation sequence to match Espressif docs. {{< pr number="5838" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Nextion - Align strings on `dump_config` {{< pr number="5824" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Speed up (and fix) ili9xxx display component. {{< pr number="5406" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix regex for 'byte' custom CI check {{< pr number="5851" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Pass through additional arguments to create number {{< pr number="5849" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Nextion `on_touch` trigger {{< pr number="5833" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Nextion colors parameters {{< pr number="5699" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (breaking-change) -- dashboard: fix supervisor auth doing I/O in the event loop {{< pr number="5807" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Improve reliability of Nextion TFT uploads (Arduino) {{< pr number="5683" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add Pro Check Universal sensor support. {{< pr number="5798" repo="esphome" >}} by {{< ghuser name="spbrogan" >}} -- Bump aioesphomeapi from 19.1.2 to 19.1.7 {{< pr number="5859" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Pn532 non blocking scan {{< pr number="5191" repo="esphome" >}} by {{< ghuser name="sharkydog" >}} -- Add Chamberlain/HomEntry HE60R garage door opener {{< pr number="5834" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Bump aioesphomeapi from 19.1.7 to 19.2.1 {{< pr number="5863" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tornado from 6.3.3 to 6.4 {{< pr number="5862" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- add missing ifdef to pvvx_mithermometer {{< pr number="5880" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix un-initialized version string {{< pr number="5865" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- fix a01nyub data reading {{< pr number="5882" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Bump pytest-asyncio from 0.21.1 to 0.23.2 {{< pr number="5888" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.127.0 to 0.128.0 {{< pr number="5889" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.17.6 to 3.0.2 {{< pr number="5592" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump voluptuous from 0.13.1 to 0.14.1 {{< pr number="5784" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Security improvement: Support wifi ap_timeout=0s (disable) {{< pr number="5887" repo="esphome" >}} by {{< ghuser name="fornellas" >}} -- Suppress full config output of "esphome config" when -q option is used. {{< pr number="5852" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Checks for pins used in multiple places {{< pr number="5666" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Nextion support to idf with `cinttypes` {{< pr number="5876" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix test4.yaml after #5666 {{< pr number="5890" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix template text component length check {{< pr number="5881" repo="esphome" >}} by {{< ghuser name="fornellas" >}} -- RC522 - Fix error counter error {{< pr number="5873" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- feat(packages): support removing components {{< pr number="5821" repo="esphome" >}} by {{< ghuser name="TMaYaD" >}} -- dashboard: Add some basic tests for the dashboard {{< pr number="5870" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Nextion exit reparse mode on startup {{< pr number="5868" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Bump aioesphomeapi from 19.2.1 to 19.3.0 {{< pr number="5895" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add framework info to Nextion log tags {{< pr number="5864" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Handle case where using enetity level name: None with MQTT {{< pr number="5897" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} -- Bump actions/setup-python from 4.7.1 to 5.0.0 {{< pr number="5896" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.128.0 to 0.128.4 {{< pr number="5906" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix 18 bit displays. {{< pr number="5908" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix RGBW Mode on RP2040 {{< pr number="5907" repo="esphome" >}} by {{< ghuser name="firegore" >}} -- Add graphical display menu {{< pr number="4105" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} (new-integration) -- Added on_image callback to ESP32 Cam {{< pr number="4860" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- Bump actions/stale from 8.0.0 to 9.0.0 {{< pr number="5899" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 3.0.2 to 3.0.3 {{< pr number="5905" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump frenck/action-yamllint from 1.4.1 to 1.4.2 {{< pr number="5716" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump dessant/lock-threads from 4.0.1 to 5.0.1 {{< pr number="5820" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add support for fan preset modes {{< pr number="5694" repo="esphome" >}} by {{< ghuser name="mill1000" >}} -- Fix uninitialized climate target temperature {{< pr number="5795" repo="esphome" >}} by {{< ghuser name="ckoca" >}} -- Bump aioesphomeapi from 19.3.0 to 20.0.0 {{< pr number="5911" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.11.0 to 23.12.0 {{< pr number="5912" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Updating the touchscreen interface structure {{< pr number="4596" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) -- Added the A02YYUW distance sensor {{< pr number="5729" repo="esphome" >}} by {{< ghuser name="TH-Braemer" >}} (new-integration) -- Fix AHT10 / AHT20 communication {{< pr number="5198" repo="esphome" >}} by {{< ghuser name="flaminggoat" >}} -- Fix crash when handling pin_check error {{< pr number="5915" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump aioesphomeapi to 20.1.0 {{< pr number="5914" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove setpoint-change from error when calculating derivative in pid controller {{< pr number="4737" repo="esphome" >}} by {{< ghuser name="Newspaperman57" >}} -- ir_transmitter: add support for repeated commands in NEC protocol {{< pr number="4995" repo="esphome" >}} by {{< ghuser name="ngilles" >}} -- BP1658CJ - Fix timing for all platforms, now consistent with other drivers {{< pr number="5799" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Add humidity support to climate {{< pr number="5732" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Remove lingering note {{< pr number="5916" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix typo added in esp32 post_build filename {{< pr number="5918" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Copy esp32 custom partition files to build folder {{< pr number="5919" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- UART change at runtime {{< pr number="5909" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Bump aioesphomeapi from 20.1.0 to 21.0.0 {{< pr number="5922" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix the initial run of lambda light effects {{< pr number="5921" repo="esphome" >}} by {{< ghuser name="smithjacobj" >}} -- Exposes `load_settings` to `UARTComponent` class {{< pr number="5920" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add support for PN7160 {{< pr number="5486" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Add support for PN7150 {{< pr number="5487" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Allow use of CDC/JTAG loggers on esp32 variants with Arduino {{< pr number="4658" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [Logger] ESP32 S3 serial logger {{< pr number="4853" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Support toggle action for template cover {{< pr number="5917" repo="esphome" >}} by {{< ghuser name="jochenvg" >}} -- Fix SplitDefault with variants {{< pr number="5928" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update ENS160 TVOC device_class and AQI units to match required by HA {{< pr number="5939" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- Bump zeroconf from 0.128.4 to 0.130.0 {{< pr number="5950" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- UARTComponent inline doc {{< pr number="5930" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix - Tuya Fan - Allow integer speed datapoint {{< pr number="5948" repo="esphome" >}} by {{< ghuser name="cram42" >}} -- i2s_audio: Set player_task's prio to 1 {{< pr number="5945" repo="esphome" >}} by {{< ghuser name="gaaf" >}} -- esp32_camera: Set framebuffer task prio to 1 {{< pr number="5943" repo="esphome" >}} by {{< ghuser name="gaaf" >}} -- web_server_idf: fix call with hardcoded http code {{< pr number="5942" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Revert pure virtual functions in UART component from #5920 {{< pr number="5932" repo="esphome" >}} by {{< ghuser name="DrCoolzic" >}} -- Use the correct UART/`Serial` when CDC is enabled {{< pr number="5957" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- rename `set_raw_touch_position_` to `add_raw_touch_position_` {{< pr number="5962" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix build issue with UART component when building with Arduino and CDC {{< pr number="5964" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix I2CBus::write() bug and add i2c documentation {{< pr number="5947" repo="esphome" >}} by {{< ghuser name="DrCoolzic" >}} -- Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 {{< pr number="5961" repo="esphome" >}} by {{< ghuser name="mathieu-mp" >}} -- Speed up writing protobuf strings/bytes {{< pr number="5828" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi to 21.0.1 {{< pr number="5969" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- image: allow the image to by auto-loaded by animation {{< pr number="5139" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Fix pin reuse error with pin expanders {{< pr number="5973" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.2.0.md b/content/changelog/2023.2.0.md deleted file mode 100644 index 4b9addf1a5..0000000000 --- a/content/changelog/2023.2.0.md +++ /dev/null @@ -1,234 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.2.0." -title: "ESPHome 2023.2.0 - 15th February 2023" -params: - seo: - description: Changelog for ESPHome 2023.2.0. - image: /_static/changelog-2023.2.0.png ---- - -{{< imgtable >}} -"PCA9554 I/O Expander","components/pca9554","pca9554a.jpg","" -"BP1658CJ","components/output/bp1658cj","bp1658cj.svg","" -"BP5758D","components/output/bp5758d","bp5758d.svg","" -"SM2235","components/output/sm2235","sm2235.svg","" -"SM2335","components/output/sm2335","sm2335.svg","" -"PCF85063 RTC","components/time/pcf85063","clock-outline.svg","dark-invert" -"Matrix Keypad","components/matrix_keypad","matrix_keypad.jpg","" -"X9C Potentiometer","components/output/x9c","x9c.jpg","" -"EE895","components/sensor/ee895","EE895.png","" -"HTE501","components/sensor/hte501","HTE501.png","" -"TEE501","components/sensor/tee501","TEE501.png","" -"Sigma-Delta Output","components/output/sigma_delta_output","sigma-delta.svg","dark-invert" -"Wiegand Reader","components/wiegand","wiegand.jpg","" -"MiCS-4514","components/sensor/mics_4514","mics_4514.jpg","" -"LD2410","components/sensor/ld2410","ld2410.jpg","" -"Resol VBus","components/vbus","resol_deltasol_bs_plus.jpg","" -{{< /imgtable >}} - -## Friendly Name - -ESPHome now supports setting a `friendly_name` which is sent to Home Assistant. This name will be used for the config entry, -the device name, and will be automatically prefixed to all of the entities where needed by Home Assistant. - -> [!NOTE] -> If you opt to use this new friendly name, take note that you should remove any friendly name (substitition) that -> you currently prepend onto entity `name` in YAML. - -```yaml -esphome: - name: living-room - friendly_name: Living Room - -sensor: - - platform: dht - pin: GPIO5 - name: Temperature -``` - -## ESPHome Update Entities in Home Assistant - -Home Assistant has offered "read-only" update entities since 2023.2.0 for ESPHome devices. This release of ESPHome -added a new API required so that those update entities can now trigger a build and install of the new firmware "over -the air" to your devices. - - - -## Release 2023.2.1 - February 16 - -- Add ESPHome version to generated platformio.ini {{< pr number="4443" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.2.2 - February 17 - -- Fix adoption of variants and pico-w {{< pr number="4455" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.2.3 - February 20 - -- Fix MQTT discovery for climate after preset implementation {{< pr number="4451" repo="esphome" >}} by {{< ghuser name="jmichiel" >}} -- Update distribution manifest {{< pr number="4459" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.2.4 - February 23 - -- BL0939 state_class set for energy sensors {{< pr number="4463" repo="esphome" >}} by {{< ghuser name="konsulten" >}} -- fix wiegand tag parity {{< pr number="4476" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix multiple remote_receivers with triggers {{< pr number="4477" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add Pca9554 component {{< pr number="4192" repo="esphome" >}} by {{< ghuser name="hwstar" >}} (new-integration) -- Add support for BP5758D LED driver {{< pr number="4021" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (new-integration) -- Add support for BP1658CJ LED driver {{< pr number="4020" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (new-integration) -- Add support for SM2235 and SM2335 LED drivers {{< pr number="3924" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (new-integration) -- PCF85063 RTC chip {{< pr number="3873" repo="esphome" >}} by {{< ghuser name="brogon" >}} (new-integration) -- Add support for matrix keypads {{< pr number="4241" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Add X9C Potentiometer component {{< pr number="4183" repo="esphome" >}} by {{< ghuser name="EtienneMD" >}} (new-integration) -- add key collector component {{< pr number="4242" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Add support for EE895 {{< pr number="3771" repo="esphome" >}} by {{< ghuser name="Stock-M" >}} (new-integration) -- Add support for HTE501 {{< pr number="3772" repo="esphome" >}} by {{< ghuser name="Stock-M" >}} (new-integration) -- Add support for TEE501 {{< pr number="3773" repo="esphome" >}} by {{< ghuser name="Stock-M" >}} (new-integration) -- Implement a slow sigma-delta modulation based output {{< pr number="4132" repo="esphome" >}} by {{< ghuser name="Cat-Ion" >}} (new-integration) -- add Wiegand reader component {{< pr number="4288" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Add MICS-4514 gas sensor {{< pr number="4316" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add Ld2410 Support {{< pr number="3919" repo="esphome" >}} by {{< ghuser name="sebcaps" >}} (new-integration) -- add Resol VBus support {{< pr number="3976" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) - -### Breaking Changes - -- Use NAN values for TSL2591 saturation {{< pr number="3931" repo="esphome" >}} by {{< ghuser name="mdonoughe" >}} (breaking-change) -- set_retry: add retries remaining parameter to the provided function {{< pr number="4251" repo="esphome" >}} by {{< ghuser name="e28eta" >}} (breaking-change) - -### Beta Changes - -- Bump curl version in docker {{< pr number="4403" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix release workflow {{< pr number="4405" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Climate PID Autotune Logging fixes {{< pr number="4136" repo="esphome" >}} by {{< ghuser name="patrickcollins12" >}} -- Add Clipping to displaybuffer {{< pr number="4271" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix check for empty clipping array {{< pr number="4421" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Ledc fix {{< pr number="4338" repo="esphome" >}} by {{< ghuser name="xvil" >}} -- Add version api endpoint {{< pr number="4429" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Handle uart.write in json-config endpoint {{< pr number="4430" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20230214.0 {{< pr number="4431" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix setting wrong traits on midea climate component {{< pr number="4425" repo="esphome" >}} by {{< ghuser name="dudanov" >}} - -### All changes - -- Expose lambda action to reset a cycle in `slow_pwm` {{< pr number="4158" repo="esphome" >}} by {{< ghuser name="johndbritton" >}} -- climate: Add features to generic Toshiba model {{< pr number="3912" repo="esphome" >}} by {{< ghuser name="zagor" >}} -- Fix UUID displaying incorrectly in BLE Tracker logs {{< pr number="4187" repo="esphome" >}} by {{< ghuser name="deunlee" >}} -- Bump actions/stale from 6 to 7 {{< pr number="4217" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add Pca9554 component {{< pr number="4192" repo="esphome" >}} by {{< ghuser name="hwstar" >}} (new-integration) -- Bump aioesphomeapi from 13.0.1 to 13.0.2 {{< pr number="4188" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.20.2 to 0.20.3 {{< pr number="4164" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Handle deprecated sdkconfig option {{< pr number="4204" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- feat: set a wider range for jpeg quality {{< pr number="3872" repo="esphome" >}} by {{< ghuser name="sisco0" >}} -- Bump black from 22.10.0 to 22.12.0 {{< pr number="4167" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Use NAN values for TSL2591 saturation {{< pr number="3931" repo="esphome" >}} by {{< ghuser name="mdonoughe" >}} (breaking-change) -- Ili9341 8bit indexed mode pt2 {{< pr number="2502" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Allow ignoring of failed Modbus response CRC {{< pr number="3930" repo="esphome" >}} by {{< ghuser name="jangrewe" >}} -- calc LEDC PWM Resolution with LEDC_TIMER_BIT_MAX {{< pr number="3820" repo="esphome" >}} by {{< ghuser name="MFlasskamp" >}} -- Component::set_retry updates {{< pr number="3305" repo="esphome" >}} by {{< ghuser name="e28eta" >}} -- Fix race condition in web_server scheduler on ESP32 {{< pr number="3951" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Fix saving light state for restore modes LIGHT_RESTORE_AND_OFF/ON {{< pr number="4131" repo="esphome" >}} by {{< ghuser name="myhomeiot" >}} -- Add precipitation device class {{< pr number="4219" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for BP5758D LED driver {{< pr number="4021" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (new-integration) -- Add support for BP1658CJ LED driver {{< pr number="4020" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (new-integration) -- Add support for SM2235 and SM2335 LED drivers {{< pr number="3924" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (new-integration) -- Fix broken PULSE_METER {{< pr number="4199" repo="esphome" >}} by {{< ghuser name="cstaahl" >}} -- PCF85063 RTC chip {{< pr number="3873" repo="esphome" >}} by {{< ghuser name="brogon" >}} (new-integration) -- Add API for dashboard to get boards list by platform {{< pr number="4168" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Bump dashboard to 20221231.0 {{< pr number="4248" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump zeroconf to 0.47.1 {{< pr number="4268" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Don't match words containing "id" {{< pr number="4265" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add support for matrix keypads {{< pr number="4241" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Fix Template Switch restore_mode support {{< pr number="4280" repo="esphome" >}} by {{< ghuser name="SharpEdgeMarshall" >}} -- Correct decimals in Growatt energy reporting {{< pr number="4277" repo="esphome" >}} by {{< ghuser name="rfpronk" >}} -- Bump pylint from 2.15.8 to 2.15.10 {{< pr number="4278" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix frequency limit for MCP9600 {{< pr number="4276" repo="esphome" >}} by {{< ghuser name="jowgn" >}} -- fix: json compilation error on rp2040 {{< pr number="4273" repo="esphome" >}} by {{< ghuser name="kellertk" >}} -- http_request: add request duration logging {{< pr number="4272" repo="esphome" >}} by {{< ghuser name="stas-sl" >}} -- Fix HttpRequestResponseTrigger {{< pr number="4270" repo="esphome" >}} by {{< ghuser name="gmbuell" >}} -- Fix HttpRequestResponseTrigger again {{< pr number="4285" repo="esphome" >}} by {{< ghuser name="gmbuell" >}} -- Add X9C Potentiometer component {{< pr number="4183" repo="esphome" >}} by {{< ghuser name="EtienneMD" >}} (new-integration) -- small DisplayBuffer images and font update {{< pr number="4044" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix use of dangling pointers in esp-idf MQTT backend {{< pr number="4239" repo="esphome" >}} by {{< ghuser name="aaliddell" >}} -- Ensure we never write zero bytes {{< pr number="4284" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix off-by-one bedjet fan speed (#3873) {{< pr number="4292" repo="esphome" >}} by {{< ghuser name="jhansche" >}} -- Clean up dashboard ping result post-rename/delete {{< pr number="4170" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Calculate PWM wrap dynamically whenever the frequency is changed {{< pr number="4294" repo="esphome" >}} by {{< ghuser name="tradeJmark" >}} -- Remove baud check in tuya dump_config {{< pr number="4298" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add friendly_name to device {{< pr number="4296" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- allow multiple dsmr {{< pr number="4299" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Bump pytest from 7.2.0 to 7.2.1 {{< pr number="4300" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 13.0.2 to 13.1.0 {{< pr number="4301" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Display the configured esphome:comment on the WebServer {{< pr number="4246" repo="esphome" >}} by {{< ghuser name="grillp" >}} -- Allow 0xA8 ID for APDS9960 {{< pr number="4287" repo="esphome" >}} by {{< ghuser name="reubn" >}} -- Dont default CORE.friendly_name {{< pr number="4305" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add key collector component {{< pr number="4242" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Tsl2591 gain publish {{< pr number="4291" repo="esphome" >}} by {{< ghuser name="z3liff" >}} -- Add support for EE895 {{< pr number="3771" repo="esphome" >}} by {{< ghuser name="Stock-M" >}} (new-integration) -- Add support for HTE501 {{< pr number="3772" repo="esphome" >}} by {{< ghuser name="Stock-M" >}} (new-integration) -- Add support for TEE501 {{< pr number="3773" repo="esphome" >}} by {{< ghuser name="Stock-M" >}} (new-integration) -- PCA9685, fix reset device and add option EXTCLK {{< pr number="3845" repo="esphome" >}} by {{< ghuser name="standahabich" >}} -- Implement a slow sigma-delta modulation based output {{< pr number="4132" repo="esphome" >}} by {{< ghuser name="Cat-Ion" >}} (new-integration) -- set_retry: add retries remaining parameter to the provided function {{< pr number="4251" repo="esphome" >}} by {{< ghuser name="e28eta" >}} (breaking-change) -- add Wiegand reader component {{< pr number="4288" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Format docker/build.py {{< pr number="4313" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add macro for sub sensor defining {{< pr number="4315" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add friendly name in MDNS records if it is not empty {{< pr number="4317" repo="esphome" >}} by {{< ghuser name="catalin2402" >}} -- Add upload dashboard api {{< pr number="4318" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump esphome-dashboard to 20230120.0 {{< pr number="4319" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Hydreon: Use new device classes water and precipitation_intensity {{< pr number="3993" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- Dont fail workflows if lint building fails {{< pr number="4336" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add MICS-4514 gas sensor {{< pr number="4316" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Refactor esp32_ble_tracker to use esp32_ble core ble setup code {{< pr number="4173" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add next_url to improv serial component config {{< pr number="4343" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Remove state class from uptime sensor {{< pr number="4345" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix esp32_ble_tracker setup priority {{< pr number="4346" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix in ble client base address parsing {{< pr number="4347" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Added support for ADS1015 {{< pr number="4281" repo="esphome" >}} by {{< ghuser name="xvil" >}} -- Fix "BLE server / advertising always on" {{< pr number="4353" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Dump full parsed config to json-config api call {{< pr number="4373" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix pressure compensation in SCD4X {{< pr number="4357" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Allow mdns services to be exposed by config {{< pr number="4202" repo="esphome" >}} by {{< ghuser name="elupus" >}} -- Allow final validate of uart stop bits and parity {{< pr number="4376" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update sim800l.cpp {{< pr number="4223" repo="esphome" >}} by {{< ghuser name="fbeek" >}} -- SCD30 Added support for manual calibration {{< pr number="4362" repo="esphome" >}} by {{< ghuser name="ftrueck" >}} -- Add Ld2410 Support {{< pr number="3919" repo="esphome" >}} by {{< ghuser name="sebcaps" >}} (new-integration) -- add Resol VBus support {{< pr number="3976" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Allow dashboard import to specify if api encryption key should be generated {{< pr number="4393" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- modify SGP4X integration to report device_class as air quality index {{< pr number="4327" repo="esphome" >}} by {{< ghuser name="alexd321" >}} -- Remove unneeded validation for esp32 gpio pins {{< pr number="4394" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix shelly dimmer current sensor device class {{< pr number="4385" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Added Ethernet Component for ESP IDF with JL1101 PHY driver {{< pr number="4009" repo="esphome" >}} by {{< ghuser name="mobrembski" >}} -- adds gpio INPUT_OUTPUT_OPEN_DRAIN {{< pr number="4360" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Merge components in packages {{< pr number="3555" repo="esphome" >}} by {{< ghuser name="quentinmit" >}} -- Update ld2410 logging {{< pr number="4395" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update log for mics4514 to state 3 minute start time. {{< pr number="4396" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- mDNS updates {{< pr number="4399" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont keep logging on improv start {{< pr number="4401" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for Lippert LP sensors in mopeka_pro_check component {{< pr number="4118" repo="esphome" >}} by {{< ghuser name="rperciaccante" >}} -- climate: add support for quiet fan mode {{< pr number="3609" repo="esphome" >}} by {{< ghuser name="MichaelMure" >}} -- add MQTT preset support for Climate components {{< pr number="4379" repo="esphome" >}} by {{< ghuser name="jmichiel" >}} -- Added CanalSat and CanalSatLD protocol support {{< pr number="3513" repo="esphome" >}} by {{< ghuser name="Emrvb" >}} -- Remove unused manifest handler {{< pr number="4169" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Use the github-script action to call the workflow {{< pr number="4400" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Convert secrets constant to a tuple {{< pr number="4245" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Verify rel_path output is relative {{< pr number="4247" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Bump curl version in docker {{< pr number="4403" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix release workflow {{< pr number="4405" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Climate PID Autotune Logging fixes {{< pr number="4136" repo="esphome" >}} by {{< ghuser name="patrickcollins12" >}} -- Add Clipping to displaybuffer {{< pr number="4271" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix check for empty clipping array {{< pr number="4421" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Ledc fix {{< pr number="4338" repo="esphome" >}} by {{< ghuser name="xvil" >}} -- Add version api endpoint {{< pr number="4429" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Handle uart.write in json-config endpoint {{< pr number="4430" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20230214.0 {{< pr number="4431" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix setting wrong traits on midea climate component {{< pr number="4425" repo="esphome" >}} by {{< ghuser name="dudanov" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.3.0.md b/content/changelog/2023.3.0.md deleted file mode 100644 index 12be1c30c0..0000000000 --- a/content/changelog/2023.3.0.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.3.0." -title: "ESPHome 2023.3.0 - 15th March 2023" -params: - seo: - description: Changelog for ESPHome 2023.3.0. - image: /_static/changelog-2023.3.0.png ---- - -{{< imgtable >}} -"Internal Temperature","components/sensor/internal_temperature","thermometer.svg","dark-invert" -"Mopeka Standard Check LP","components/sensor/mopeka_std_check","mopeka_std_check.jpg","" -"Person Sensor (SEN21231)","components/sensor/sen21231","sen21231.png","" -"Haier Climate","components/climate/haier","haier.svg","" -"FS3000","components/sensor/fs3000","fs3000.jpg","" -"Absolute Humidity","components/sensor/absolute_humidity","water-drop.svg","dark-invert" -"AS7341","components/sensor/as7341","as7341.jpg","Spectral Color Sensor" -{{< /imgtable >}} - -## Sprinkler updates - -The sprinkler component has had a big update thanks to {{< ghuser name="kbx81" >}}. -The method `time_remaining()` has been renamed to `time_remaining_active_valve()` for clarity. -If you use this to display time remaining, simply update the name of the method in your code/lambda(s). - -## Tuya lights - -Tuya Lights have had a configuration change and replaced `rgb_datapoint` and `hsv_datapoint` with a new -combination of `color_datapoint` and `color_type`. See the updated documentation -({{< docref "/components/light/tuya" >}}) for more information. - -## SN74HC165 - -The pin/bit order has been reversed per shift register so that `pin 0` is now `input A`. - - - -## Release 2023.3.1 - March 22 - -- climate: brown paper bag fix for on_configure {{< pr number="4573" repo="esphome" >}} by {{< ghuser name="nwf" >}} -- rp2040: Use fake Mutex lock {{< pr number="4602" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.3.2 - March 27 - -- Fix compile error on pzemdc.h {{< pr number="4583" repo="esphome" >}} by {{< ghuser name="KG3RK3N" >}} -- Swap curly brackets for round on LockGuard {{< pr number="4610" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix animation resizing {{< pr number="4608" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- SX1509 minimum loop period (fixes esphome/issues#4325) {{< pr number="4613" repo="esphome" >}} by {{< ghuser name="tracestep" >}} - -## Full list of changes - -### New Components - -- Add internal_temperature component {{< pr number="4330" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- Support Mopeka Standard LPG tank bluetooth sensor {{< pr number="4351" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} (new-integration) -- add person sensor (SEN21231) from usefulsensors {{< pr number="4454" repo="esphome" >}} by {{< ghuser name="shreyaskarnik" >}} (new-integration) -- add kuntze component {{< pr number="4411" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Add Haier climate component {{< pr number="4001" repo="esphome" >}} by {{< ghuser name="Yarikx" >}} (new-integration) -- FS3000 sensor {{< pr number="4502" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add absolute humidity component {{< pr number="4519" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} (new-integration) -- Add AS7341 spectral color sensor {{< pr number="4331" repo="esphome" >}} by {{< ghuser name="mrgnr" >}} (new-integration) -- Renaming and extending the ili9341 to the ili9xxx component {{< pr number="4275" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) - -### Breaking Changes - -- Add configurable color datapoint {{< pr number="4383" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} (breaking-change) -- Sprinkler "v2" updates {{< pr number="4159" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- sn74hc165 fixes {{< pr number="4457" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Renaming and extending the ili9341 to the ili9xxx component {{< pr number="4275" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) - -### Beta Changes - -- Fix ethernet clk_mode for GPIO0_OUT {{< pr number="4307" repo="esphome" >}} by {{< ghuser name="jorticus" >}} -- Add ESP32-S3 support in NeoPixelBus component {{< pr number="4114" repo="esphome" >}} by {{< ghuser name="rcloran" >}} -- Renaming and extending the ili9341 to the ili9xxx component {{< pr number="4275" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) -- Drop unused, broken logging macros {{< pr number="4534" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Revert storing Font glyphs in manually-allocated memory {{< pr number="4516" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Correct BME680 gas calculation and heater_off {{< pr number="4498" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Add support for new mpu6050 clones responding with 0x70 address {{< pr number="4546" repo="esphome" >}} by {{< ghuser name="jakehdk" >}} -- Add carbon dioxide device class to scd30 sensor schema. {{< pr number="4547" repo="esphome" >}} by {{< ghuser name="murrayma" >}} -- Feat: add support for hex color in color component {{< pr number="4493" repo="esphome" >}} by {{< ghuser name="dorianim" >}} -- Allow AUTO_LOAD to be a function {{< pr number="4550" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- On the ILI9xxx display's enable the psram on esp32 and allow big screen {{< pr number="4551" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Map gpio pins for touch on esp32-s2/s3 {{< pr number="4552" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- pipsolar component. Correct the sscanf format for QPIG command parsin… {{< pr number="4165" repo="esphome" >}} by {{< ghuser name="eroldan" >}} -- Add state class back to uptime sensor {{< pr number="4557" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Added response for Tuya RSSI command {{< pr number="4549" repo="esphome" >}} by {{< ghuser name="catalin2402" >}} -- Remove switch actions during config; bump setup priority {{< pr number="4563" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Mark esp32_touch supported only on standard esp32 variant {{< pr number="4562" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fixing `shrink` and `extend` functions of the displaybuffer's Rect class {{< pr number="4565" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} - -### All changes - -- socket: Format IPv4-mapped IPv6 addresses as regular IPv4 address {{< pr number="4382" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump frenck/action-yamllint from 1.3.1 to 1.4.0 {{< pr number="4289" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.3.0 to 3.3.1 {{< pr number="4160" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 22.12.0 to 23.1.0 {{< pr number="4375" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Improve tuya network status command {{< pr number="4415" repo="esphome" >}} by {{< ghuser name="Rjevski" >}} -- Gracefully reject vacuum map upload requests {{< pr number="4414" repo="esphome" >}} by {{< ghuser name="Rjevski" >}} -- Fixed PlatformIO Build on DEV {{< pr number="4422" repo="esphome" >}} by {{< ghuser name="Expaso" >}} -- Bump platformio from 6.1.5 to 6.1.6 {{< pr number="4341" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.15.10 to 2.16.2 {{< pr number="4426" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 13.1.0 to 13.3.1 {{< pr number="4427" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add concurrency limit to ci-docker {{< pr number="4407" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add final job so branch protection can require matrix ci steps {{< pr number="4432" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Deep Sleep capable ports for ESP32S3 {{< pr number="4230" repo="esphome" >}} by {{< ghuser name="LeDominik" >}} -- Initialize all fields in ESPTime in PCF85063 {{< pr number="4439" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump zeroconf from 0.47.1 to 0.47.3 {{< pr number="4437" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Automate syncing device classes with HA {{< pr number="4438" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- NeoPixel - Add support for ESP32-S3 {{< pr number="4435" repo="esphome" >}} by {{< ghuser name="ajacques" >}} -- add SUB_BINARY_SENSOR macro to binary sensor {{< pr number="4447" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- add SUB_TEXT_SENSOR macro to text sensor {{< pr number="4448" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- Simplify sensor schema generation {{< pr number="4462" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- add SUB_NUMBER macro and schema to number {{< pr number="4449" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- add SUB_BUTTON macro and ability to button schema to define the class {{< pr number="4450" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- Simplify number_schema function {{< pr number="4467" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Simplify button_schema function {{< pr number="4468" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Simplify binary_sensor_schema function {{< pr number="4469" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add configurable color datapoint {{< pr number="4383" repo="esphome" >}} by {{< ghuser name="irtimaled" >}} (breaking-change) -- Add internal_temperature component {{< pr number="4330" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- Move remaining SENSOR_SCHEMA to use sensor_schema() {{< pr number="4471" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow specifying target and current visual steps for climate {{< pr number="4440" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 13.3.1 to 13.4.0 {{< pr number="4472" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- toshiba: add support for quiet fan mode {{< pr number="4283" repo="esphome" >}} by {{< ghuser name="MichaelMure" >}} -- Bump esptool from 4.4 to 4.5 {{< pr number="4428" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Support Mopeka Standard LPG tank bluetooth sensor {{< pr number="4351" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} (new-integration) -- fix library override logic {{< pr number="4474" repo="esphome" >}} by {{< ghuser name="mzakharo" >}} -- Sprinkler "v2" updates {{< pr number="4159" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- add person sensor (SEN21231) from usefulsensors {{< pr number="4454" repo="esphome" >}} by {{< ghuser name="shreyaskarnik" >}} (new-integration) -- Initial stab at importing idf components {{< pr number="4000" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add kuntze component {{< pr number="4411" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- Add Haier climate component {{< pr number="4001" repo="esphome" >}} by {{< ghuser name="Yarikx" >}} (new-integration) -- Bump esp-idf to 4.4.3 via platformio/espressif32 @ 5.3.0 {{< pr number="4254" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add energy to pzemdc {{< pr number="3626" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} -- Update esp32 esp-idf dev and latest version numbers {{< pr number="4479" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ExternalRAMAllocator] Use same `heap_caps_malloc` parameter as `ps_malloc`. {{< pr number="4484" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Lock scheduler items while modifying them {{< pr number="4410" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Move Font glyphs to SPI RAM. {{< pr number="4485" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Run CI on merge group {{< pr number="4489" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix parallel invocations of repeat action {{< pr number="4480" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Make test3 use huge_app {{< pr number="4488" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Change variable "skip_updates" and "skip_updates_counter" type from "uint8_t" to "uint16_t" {{< pr number="4487" repo="esphome" >}} by {{< ghuser name="GitforZhangXL" >}} -- Fix copy-pasta mistake {{< pr number="4492" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add int16 to codegen {{< pr number="4507" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update __init__.py {{< pr number="4514" repo="esphome" >}} by {{< ghuser name="dashkhaneh" >}} -- Remove idf components before checking if any in config {{< pr number="4506" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- substitutions: Don't warn when passwords look like a substitution {{< pr number="4161" repo="esphome" >}} by {{< ghuser name="tljuniper" >}} -- Fix typo {{< pr number="4515" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- implement pairing for bluetooth proxy {{< pr number="4475" repo="esphome" >}} by {{< ghuser name="jagheterfredrik" >}} -- Bump docker dependencies {{< pr number="4526" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 13.4.0 to 13.5.0 {{< pr number="4525" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Ensure component is ready before update. {{< pr number="4523" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- climate: add on_control callbacks {{< pr number="4511" repo="esphome" >}} by {{< ghuser name="nwf" >}} -- FS3000 sensor {{< pr number="4502" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Bump esptool from 4.5 to 4.5.1 {{< pr number="4497" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add support for multiple devices in bme680_bsec {{< pr number="3550" repo="esphome" >}} by {{< ghuser name="bisbastuner" >}} -- Bump pytest from 7.2.1 to 7.2.2 {{< pr number="4505" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.16.2 to 2.16.4 {{< pr number="4524" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add absolute humidity component {{< pr number="4519" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} (new-integration) -- Add ability to await safe mode in codegen {{< pr number="4529" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- sn74hc165 fixes {{< pr number="4457" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add AS7341 spectral color sensor {{< pr number="4331" repo="esphome" >}} by {{< ghuser name="mrgnr" >}} (new-integration) -- Fix ethernet driver setting gpio 5 high when no power pin defined {{< pr number="4531" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use PSRam for BLE scan results. {{< pr number="4486" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Bump esp-idf to 4.4.4 {{< pr number="4528" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Added pzemdc reset energy action {{< pr number="4481" repo="esphome" >}} by {{< ghuser name="KG3RK3N" >}} -- Fix ethernet clk_mode for GPIO0_OUT {{< pr number="4307" repo="esphome" >}} by {{< ghuser name="jorticus" >}} -- Add ESP32-S3 support in NeoPixelBus component {{< pr number="4114" repo="esphome" >}} by {{< ghuser name="rcloran" >}} -- Renaming and extending the ili9341 to the ili9xxx component {{< pr number="4275" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-integration) (breaking-change) -- Drop unused, broken logging macros {{< pr number="4534" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Revert storing Font glyphs in manually-allocated memory {{< pr number="4516" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Correct BME680 gas calculation and heater_off {{< pr number="4498" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Add support for new mpu6050 clones responding with 0x70 address {{< pr number="4546" repo="esphome" >}} by {{< ghuser name="jakehdk" >}} -- Add carbon dioxide device class to scd30 sensor schema. {{< pr number="4547" repo="esphome" >}} by {{< ghuser name="murrayma" >}} -- Feat: add support for hex color in color component {{< pr number="4493" repo="esphome" >}} by {{< ghuser name="dorianim" >}} -- Allow AUTO_LOAD to be a function {{< pr number="4550" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- On the ILI9xxx display's enable the psram on esp32 and allow big screen {{< pr number="4551" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Map gpio pins for touch on esp32-s2/s3 {{< pr number="4552" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- pipsolar component. Correct the sscanf format for QPIG command parsin… {{< pr number="4165" repo="esphome" >}} by {{< ghuser name="eroldan" >}} -- Add state class back to uptime sensor {{< pr number="4557" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Added response for Tuya RSSI command {{< pr number="4549" repo="esphome" >}} by {{< ghuser name="catalin2402" >}} -- Remove switch actions during config; bump setup priority {{< pr number="4563" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Mark esp32_touch supported only on standard esp32 variant {{< pr number="4562" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fixing `shrink` and `extend` functions of the displaybuffer's Rect class {{< pr number="4565" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.4.0.md b/content/changelog/2023.4.0.md deleted file mode 100644 index 184a5e0213..0000000000 --- a/content/changelog/2023.4.0.md +++ /dev/null @@ -1,222 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.4.0." -title: "ESPHome 2023.4.0 - 19th April 2023" -params: - seo: - description: Changelog for ESPHome 2023.4.0. - image: /_static/changelog-2023.4.0.png ---- - -{{< imgtable >}} -"Voice Assistant","components/voice_assistant","voice-assistant.svg","dark-invert" -"Microphone Core","components/microphone/index","microphone.svg","dark-invert" -"I2S Microphone","components/microphone/i2s_audio","i2s_audio.svg","" -"MMC5603","components/sensor/mmc5603","mmc5603.jpg","" -"KSZ8081 Ethernet","components/ethernet","ethernet.svg","dark-invert" -{{< /imgtable >}} - -## Voice Assistant - -This year is the Year of the Voice for Home Assistant, and ESPHome is charging ahead with this in mind. -We've added a new {{< docref "/components/voice_assistant" >}} component that allows you to use ESPHome devices -as an input for [assist](https://www.home-assistant.io/voice_control/) in Home Assistant **2023.5 or later**. - -With this also comes preliminary {{< docref "/components/microphone/index" "microphone" >}} support, which has been -built in a way that multiple components, like `voice_assistant` can request start / stop of the microphone and get -the data. We hope this leads to more interesting use cases for the microphone in the future. - -Home Assistant is hosting a live stream all about the Year of the Voice - Chapter 2. - - - - -## Keith joins Nabu Casa - -Nabu Casa is pleased to announce that long time contributor Keith Burzinski ({{< ghuser name="kbx81" >}}) is joining the -team as a full time developer to help out on ESPHome. Keith created the {{< docref "/components/sprinkler" >}}, -{{< docref "/components/climate/thermostat" >}}, a bunch of the `ssd` display components and a few other components -as well as fixing many bug along the way. I expect his house climate and garden area are kept well in line. - -Looking forward to working with you Keith. - - - -## Release 2023.4.1 - April 24 - -- fix flip_x {{< pr number="4727" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Use proper schema for delta filter {{< pr number="4723" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.4.2 - April 27 - -- I2c scan recovery reset fix {{< pr number="4724" repo="esphome" >}} by {{< ghuser name="gcopeland" >}} -- Debug component doesn't work on RP2040 {{< pr number="4728" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Only request VA port from first client that is subscribed {{< pr number="4747" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Don't allow fingerprint_grow enroll cancellation when no enrollment started {{< pr number="4745" repo="esphome" >}} by {{< ghuser name="itpeters" >}} - -## Release 2023.4.3 - May 2 - -- Fix sprinkler switch restore_mode {{< pr number="4756" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix i2s media player on devices with no internal DAC {{< pr number="4768" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.4.4 - May 4 - -- Fixes for Arduino 2.7.4 (for FastLED) {{< pr number="4777" repo="esphome" >}} by {{< ghuser name="timn" >}} - -## Breaking Changes - -### I²S Media Player - -With the introduction of the {{< docref "/components/microphone/i2s_audio" >}}, the media player platform has some -required breaking changes to the YAML configuration. This involves moving the `i2s_lrclk_pin` and -`i2s_bclk_pin` to a new {{< docref "/components/i2s_audio" >}} component. - -```yaml -# Before -media_player: - - platform: i2s_audio - name: ESPHome I2S Media Player - dac_type: external - i2s_lrclk_pin: GPIO33 - i2s_bclk_pin: GPIO19 - i2s_dout_pin: GPIO22 - mode: mono - -# After -i2s_audio: - i2s_lrclk_pin: GPIO33 - i2s_bclk_pin: GPIO19 - -media_player: - - platform: i2s_audio - name: ESPHome I2S Media Player - dac_type: external - i2s_dout_pin: GPIO22 - mode: mono -``` - -### Default restore mode for Switches, Fans and Lights - -The default `restore_mode` for switches, fans and lights has been changed -from `RESTORE_DEFAULT_OFF` to `ALWAYS_OFF` with the intention that restoring values -from flash should be manually specified by a user if desired in their YAML configuration. - -### Number `step` - -The `number` components have always internally set a `step` required in config, -but allowed it to be not specified at all. This caused issues on the Home Assistant side -of things. This is only a breaking change for external components that have a `number` platform. - -### UART ids - -Due to `uart0` / `uart1` / `uart2` being defined in some of the platform code ESPHome uses, -ESPHome will now disallow these ids from being used in the config. You can simply change them to -`uart_0` to continue using. - -## Full list of changes - -### New Components - -- Added in mmc5603 code {{< pr number="4175" repo="esphome" >}} by {{< ghuser name="benhoff" >}} (new-integration) -- Add push to talk voice assistant {{< pr number="4648" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- Disallow uart0/1/2 as ids in config {{< pr number="4446" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Require step to be set when calling register_number {{< pr number="4622" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Fix restore {{< pr number="4655" repo="esphome" >}} by {{< ghuser name="spacemanspiff2007" >}} (breaking-change) - -### Beta Changes - -- debug component, allow without debug logging {{< pr number="4685" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fixed dns2 for ethernet {{< pr number="4698" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Add timeout to i2c write error logs {{< pr number="4697" repo="esphome" >}} by {{< ghuser name="Szewcson" >}} -- Add event triggers to voice_assistant {{< pr number="4699" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Call on_error if no api client connected that handles voice {{< pr number="4709" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add ethernet powerdown (fixes esphome/issues#4420) {{< pr number="4706" repo="esphome" >}} by {{< ghuser name="tracestep" >}} -- Bump arduino platform version to 5.3.0 {{< pr number="4713" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Mark unique_id() virtual method as deprecated {{< pr number="4538" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Drop deprecated entity property base methods {{< pr number="4539" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Format test files {{< pr number="4541" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- EntityBase: Icon string can stay in flash. {{< pr number="4566" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Update the delta filter to be able to take a percentage change {{< pr number="4391" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- Added missing PM_1_0 and PM_10_0 for PMS5003T and PMS5003ST {{< pr number="4560" repo="esphome" >}} by {{< ghuser name="genestealer" >}} -- Add an option to force SPI into software mode {{< pr number="4556" repo="esphome" >}} by {{< ghuser name="wupeka" >}} -- allow using a binary output for the status led {{< pr number="4532" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add option flip_x {{< pr number="4555" repo="esphome" >}} by {{< ghuser name="rafal83" >}} -- Bump aioesphomeapi from 13.5.0 to 13.5.1 {{< pr number="4572" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Verbose output of define. {{< pr number="4576" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Add support for ESP32 CAM 3MP and 5MP resolutions and arbitrary camera clock. {{< pr number="4580" repo="esphome" >}} by {{< ghuser name="peterhalicky" >}} -- Add a simple 'skip_initial' filter {{< pr number="4582" repo="esphome" >}} by {{< ghuser name="sybrenstuvel" >}} -- Fix outdated filter string in platformio_api {{< pr number="4587" repo="esphome" >}} by {{< ghuser name="LordMike" >}} -- Split test3.yaml {{< pr number="4591" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Disallow uart0/1/2 as ids in config {{< pr number="4446" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Upgrade clang-format to v13 {{< pr number="4535" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- B/W support for GooDisplay GDEY029T94 (as used on Adafruit MagTag) {{< pr number="4222" repo="esphome" >}} by {{< ghuser name="AaronJackson" >}} -- Fix negative sqrt root in ct_clamp_sensor.cpp {{< pr number="4236" repo="esphome" >}} by {{< ghuser name="jerome992" >}} -- Wrap ipv6 code a bit more {{< pr number="4574" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove EntityBase from sprinkler {{< pr number="4606" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix wrong port multiplexer name in dump GPIO function of sx1509 {{< pr number="4592" repo="esphome" >}} by {{< ghuser name="skaldo" >}} -- Bump zeroconf from 0.47.3 to 0.47.4 {{< pr number="4597" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.20.3 to 0.21.0 {{< pr number="4599" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Limit range on filter time period for remote_receiver {{< pr number="4604" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- add select_schema to select component {{< pr number="4545" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- Add ability to clear the gatt cache {{< pr number="4621" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump actions/stale from 7 to 8 {{< pr number="4615" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Require step to be set when calling register_number {{< pr number="4622" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Lower range of CONF_FREQUENCY {{< pr number="4619" repo="esphome" >}} by {{< ghuser name="berendhaan" >}} -- Allow entity names to be set to None {{< pr number="4607" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix platform restriction for bme680_bsec {{< pr number="4616" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix EzoCommandType enum {{< pr number="4593" repo="esphome" >}} by {{< ghuser name="alfredopironti" >}} -- `EntityBase` Name can stay in flash. {{< pr number="4594" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- feat: Add support to unsubscribe from BLE advertisements {{< pr number="4620" repo="esphome" >}} by {{< ghuser name="richardhopton" >}} -- EntityBase: Move ObjectId to Flash {{< pr number="4569" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Add workflow to sync device classes with HA dev {{< pr number="4629" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="4633" repo="esphome" >}} by {{< ghuser name="github-actions[bot]" >}} -- Remove AUTO_LOAD from as3935 {{< pr number="4630" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add ifdef to new bt proxy unsubscribe {{< pr number="4634" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add bluetooth mac address in dump_config() {{< pr number="4628" repo="esphome" >}} by {{< ghuser name="felixlungu" >}} -- Binary map bugfixes {{< pr number="4636" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- entity_base avoid padding bytes. {{< pr number="4637" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Avoid sensor padding. {{< pr number="4638" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Support advanced UART customization {{< pr number="4465" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Log calibration results at level INFO {{< pr number="4240" repo="esphome" >}} by {{< ghuser name="Duckle29" >}} -- Number step not optional {{< pr number="4649" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- VSCode / devcontainer updates {{< pr number="4647" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Retry PN532_COMMAND_VERSION_DATA on setup() (fixes esphome/issues#3823) {{< pr number="4651" repo="esphome" >}} by {{< ghuser name="tracestep" >}} -- Bump pylint from 2.16.4 to 2.17.2 {{< pr number="4650" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.1.0 to 23.3.0 {{< pr number="4635" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Added in mmc5603 code {{< pr number="4175" repo="esphome" >}} by {{< ghuser name="benhoff" >}} (new-integration) -- fix compilation with latest esp-idf {{< pr number="4671" repo="esphome" >}} by {{< ghuser name="Mic92" >}} -- Bump zeroconf from 0.47.4 to 0.56.0 {{< pr number="4674" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.2.2 to 7.3.0 {{< pr number="4673" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add push to talk voice assistant {{< pr number="4648" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Fix ESP32 SPI hardware assignment in Arduino fw {{< pr number="4669" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix some NFC/PN532 crashes {{< pr number="4678" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add support for SSD1306 72x40 displays {{< pr number="4659" repo="esphome" >}} by {{< ghuser name="johnsto" >}} -- Fix pin schema for i2s microphone {{< pr number="4680" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix BedJet setup priority [fixes esphome/issues#3807] {{< pr number="4677" repo="esphome" >}} by {{< ghuser name="jhansche" >}} -- Add always trigger stop {{< pr number="4249" repo="esphome" >}} by {{< ghuser name="X-Ryl669" >}} -- Fix graph limits for negative values and other corner cases {{< pr number="4253" repo="esphome" >}} by {{< ghuser name="unhold" >}} -- Fix cut-off on 2.13" waveshare/ttgo epaper displays {{< pr number="4255" repo="esphome" >}} by {{< ghuser name="unhold" >}} -- [Ethernet] Add PHY KSZ8081 support {{< pr number="4668" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Fix restore {{< pr number="4655" repo="esphome" >}} by {{< ghuser name="spacemanspiff2007" >}} (breaking-change) -- debug component, allow without debug logging {{< pr number="4685" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fixed dns2 for ethernet {{< pr number="4698" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Add timeout to i2c write error logs {{< pr number="4697" repo="esphome" >}} by {{< ghuser name="Szewcson" >}} -- Add event triggers to voice_assistant {{< pr number="4699" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Call on_error if no api client connected that handles voice {{< pr number="4709" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add ethernet powerdown (fixes esphome/issues#4420) {{< pr number="4706" repo="esphome" >}} by {{< ghuser name="tracestep" >}} -- Bump arduino platform version to 5.3.0 {{< pr number="4713" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.5.0.md b/content/changelog/2023.5.0.md deleted file mode 100644 index 7948f5a752..0000000000 --- a/content/changelog/2023.5.0.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.5.0." -title: "ESPHome 2023.5.0 - 17th May 2023" -params: - seo: - description: Changelog for ESPHome 2023.5.0. - image: /_static/changelog-2023.5.0.png ---- - -{{< imgtable >}} -"Speaker Core","components/speaker/index","speaker.svg","dark-invert" -"I2S Speaker","components/speaker/i2s_audio","i2s_audio.svg","" -"MLX90614","components/sensor/mlx90614","mlx90614.jpg","" -"MAX6956 I/O expander - I²C Bus","components/max6956","max6956.jpg","" -"PCA6416A I/O Expander","components/pca6416a","pca6416a.svg","" -"HYT271","components/sensor/hyt271","hyt271.jpg","" -"GP8403","components/output/gp8403","gp8403.svg","" -"ESP32 RMT LED Strip","components/light/esp32_rmt_led_strip","color_lens.svg","" -{{< /imgtable >}} - -## Speakers - -Following on from last months release adding {{< docref "/components/microphone/index" "microphones" >}}, -this release adds {{< docref "/components/speaker/index" "speaker" >}} support! - -These new changes allows the {{< docref "/components/voice_assistant" >}} to request the raw audio -stream response from Home Assistant to playback without using a full {{< docref "/components/media_player" >}}. -This has much lower latency and allows for a much more responsive voice assistant experience. - -## More Microphones - -This release also adds a bit more configuration for the i2s_audio microphone components. -There is a breaking-change that requires new configuration fields to be added in YAML. -See the {{< docref "/components/microphone/i2s_audio" "microphone documentation" >}} for the configuration details, -but below is a small example for the M5Stack Atom Echo. - -```yaml -# Old -microphone: - platform: i2s_audio - i2s_din_pin: GPIO23 - id: my_microphone - -# New -microphone: - platform: i2s_audio - i2s_din_pin: GPIO23 - adc_type: external - pdm: false -``` - - - -## Release 2023.5.1 - May 18 - -- Remove i2c dependency from ttp229_bsf {{< pr number="4851" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Sprinkler fixes {{< pr number="4816" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2023.5.2 - May 22 - -- Fix i2s_audio media_player mutex acquisition {{< pr number="4867" repo="esphome" >}} by {{< ghuser name="kroimon" >}} - -## Release 2023.5.3 - May 22 - -- Allow microphone channel to be specified in config {{< pr number="4871" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [PSRam] Change log unit to KB to minimize rounding error. {{< pr number="4872" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} - -## Release 2023.5.4 - May 24 - -- [internal_temperature] ESP32-S3 needs ESP IDF V4.4.3 or higher {{< pr number="4873" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Update cover.h for compile errors with stop() {{< pr number="4879" repo="esphome" >}} by {{< ghuser name="Davrosx" >}} -- Print ESPHome version when running commands {{< pr number="4883" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix modbus sending FP32_R values {{< pr number="4882" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix esp32_rmt_led_strip color modes {{< pr number="4886" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.5.5 - May 29 - -- Fix version printing not breaking yaml parsing {{< pr number="4904" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add mlx90614 sensors {{< pr number="3749" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add PCA6416A Support {{< pr number="4681" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- Add support for hyt271 {{< pr number="4282" repo="esphome" >}} by {{< ghuser name="Philippe12" >}} (new-integration) -- Max6956 support added {{< pr number="3764" repo="esphome" >}} by {{< ghuser name="looping40" >}} (new-integration) -- Speaker support {{< pr number="4743" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add gp8403 output component {{< pr number="4495" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Create esp32 rmt addressable light driver {{< pr number="4708" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add host target platform {{< pr number="4783" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) - -### Breaking Changes - -- Remove climate legacy away flags {{< pr number="4744" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Revert "Template sensors always publish on update interval (#2224)" {{< pr number="4774" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} (breaking-change) - -### Beta Changes - -- Fixed access point for ESP32 IDF platform {{< pr number="4784" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Remove AUTO_LOAD from apds9960 {{< pr number="4746" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Supposed to fix #4069, by changing the default value to 0s (timeunit … {{< pr number="4806" repo="esphome" >}} by {{< ghuser name="Alex1602" >}} -- Wording {{< pr number="4805" repo="esphome" >}} by {{< ghuser name="fgsch" >}} -- Tuya: Prevent loop when setting colors on case-sensitive dps {{< pr number="4809" repo="esphome" >}} by {{< ghuser name="richardhopton" >}} -- Fix i2s media player volume control {{< pr number="4813" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont try stop if not actually started {{< pr number="4814" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missing stop trait in send_cover_info {{< pr number="4826" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Bump aioesphomeapi from 13.7.2 to 13.7.5 {{< pr number="4830" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update PulseLightEffect with range brightness {{< pr number="4820" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Bump esphome-dashboard to 20230516.0 {{< pr number="4831" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix time period validation for the auto cleaning interval {{< pr number="4811" repo="esphome" >}} by {{< ghuser name="fgsch" >}} -- Bump tzlocal from 4.2 to 5.0.1 {{< pr number="4829" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 {{< pr number="4762" repo="esphome" >}} by {{< ghuser name="spectrumjade" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="4825" repo="esphome" >}} by {{< ghuser name="github-actions[bot]" >}} -- support sending keys to the collector {{< pr number="4838" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- handle Wiegand 8-bit keys {{< pr number="4837" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - -### All changes - -- Only allow 5 jobs from each CI run to be in parallel {{< pr number="4682" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add Bayesian type for binary_sensor_map component {{< pr number="4640" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Bump aioesphomeapi from 13.5.1 to 13.7.0 {{< pr number="4676" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 4 to 5 {{< pr number="4661" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 3 to 4 {{< pr number="4367" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Keep Device Class in Flash. {{< pr number="4639" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Add support for passive WiFi scanning {{< pr number="4666" repo="esphome" >}} by {{< ghuser name="BellaCoola" >}} -- Initial attempt at supporting ESP-IDF 5.0.0 {{< pr number="4364" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Get Sunrise & Sunset for a Specific Date {{< pr number="4712" repo="esphome" >}} by {{< ghuser name="RebbePod" >}} -- Add `supports_stop` trait to Cover {{< pr number="3897" repo="esphome" >}} by {{< ghuser name="amomchilov" >}} -- Bump aioesphomeapi from 13.7.0 to 13.7.1 {{< pr number="4725" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add on_tag_removed trigger for RC522 {{< pr number="4742" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix 'blutooth' typo in esp32_ble component {{< pr number="4738" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Bump pylint from 2.17.2 to 2.17.3 {{< pr number="4740" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tornado from 6.2 to 6.3.1 {{< pr number="4741" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.3.0 to 7.3.1 {{< pr number="4686" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Expand the platformio dep installer to also install platforms and tools {{< pr number="4716" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove climate legacy away flags {{< pr number="4744" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add mlx90614 sensors {{< pr number="3749" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Move am43 sensor code and remove auto load on cover {{< pr number="4631" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix assumed_state switch webserver {{< pr number="4259" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Bump aioesphomeapi from 13.7.1 to 13.7.2 {{< pr number="4753" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump git version in Dockerfile {{< pr number="4763" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Power down PN532 before deep sleep {{< pr number="4707" repo="esphome" >}} by {{< ghuser name="tracestep" >}} -- Switch ESPAsyncTCP-esphome to esphome fork {{< pr number="4764" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pyupgrade from 3.3.1 to 3.3.2 {{< pr number="4751" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Only pre-install libraries in docker images {{< pr number="4766" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add PCA6416A Support {{< pr number="4681" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- play_folder bugfix and addition of play_mp3 {{< pr number="4758" repo="esphome" >}} by {{< ghuser name="llluis" >}} -- RF Codec for Drayton Digistat heating controller {{< pr number="4494" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- Add support for hyt271 {{< pr number="4282" repo="esphome" >}} by {{< ghuser name="Philippe12" >}} (new-integration) -- Add support for BLE passkey authentication {{< pr number="4258" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Add support for V2 of the waveshare 5.83in e-paper display. {{< pr number="3660" repo="esphome" >}} by {{< ghuser name="cooki35" >}} -- Max6956 support added {{< pr number="3764" repo="esphome" >}} by {{< ghuser name="looping40" >}} (new-integration) -- Bump zeroconf from 0.56.0 to 0.60.0 {{< pr number="4767" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Revert "Template sensors always publish on update interval (#2224)" {{< pr number="4774" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} (breaking-change) -- update schema gen to 2023.4.0 {{< pr number="4772" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Speaker support {{< pr number="4743" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add gp8403 output component {{< pr number="4495" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Create esp32 rmt addressable light driver {{< pr number="4708" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Bump ESP32-audioI2s to 2.0.7 {{< pr number="4796" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- SM2135 Add optional current configuration, avoid communication failures. {{< pr number="3850" repo="esphome" >}} by {{< ghuser name="BoukeHaarsma23" >}} -- Fix ezo parsing {{< pr number="4792" repo="esphome" >}} by {{< ghuser name="alfredopironti" >}} -- [ili9xxx] Improve fill operation performance {{< pr number="4702" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Add host target platform {{< pr number="4783" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add more envs to root platformio {{< pr number="4799" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Keep Unit of Measurement in Flash. {{< pr number="4719" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- [display] Small display print performance improvement {{< pr number="4788" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Fixed calculation of start and end dhcp range {{< pr number="4785" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Add more configuration for microphones - i2s/pdm/adc {{< pr number="4775" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Wrap VA code {{< pr number="4800" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make i2s_audio bclk_pin optional {{< pr number="4801" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Validate project details are set for dashboard_import {{< pr number="4802" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fixed access point for ESP32 IDF platform {{< pr number="4784" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Remove AUTO_LOAD from apds9960 {{< pr number="4746" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Supposed to fix #4069, by changing the default value to 0s (timeunit … {{< pr number="4806" repo="esphome" >}} by {{< ghuser name="Alex1602" >}} -- Wording {{< pr number="4805" repo="esphome" >}} by {{< ghuser name="fgsch" >}} -- Tuya: Prevent loop when setting colors on case-sensitive dps {{< pr number="4809" repo="esphome" >}} by {{< ghuser name="richardhopton" >}} -- Fix i2s media player volume control {{< pr number="4813" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont try stop if not actually started {{< pr number="4814" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missing stop trait in send_cover_info {{< pr number="4826" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Bump aioesphomeapi from 13.7.2 to 13.7.5 {{< pr number="4830" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update PulseLightEffect with range brightness {{< pr number="4820" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Bump esphome-dashboard to 20230516.0 {{< pr number="4831" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix time period validation for the auto cleaning interval {{< pr number="4811" repo="esphome" >}} by {{< ghuser name="fgsch" >}} -- Bump tzlocal from 4.2 to 5.0.1 {{< pr number="4829" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 {{< pr number="4762" repo="esphome" >}} by {{< ghuser name="spectrumjade" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="4825" repo="esphome" >}} by {{< ghuser name="github-actions[bot]" >}} -- support sending keys to the collector {{< pr number="4838" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- handle Wiegand 8-bit keys {{< pr number="4837" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.6.0.md b/content/changelog/2023.6.0.md deleted file mode 100644 index 42114bcd23..0000000000 --- a/content/changelog/2023.6.0.md +++ /dev/null @@ -1,218 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.6.0." -title: "ESPHome 2023.6.0 - 21st June 2023" -params: - seo: - description: Changelog for ESPHome 2023.6.0. - image: /_static/changelog-2023.6.0.png ---- - -{{< imgtable >}} -"Alarm Control Panel Core","components/alarm_control_panel/index","alarm-panel.svg","dark-invert" -"Template Alarm Control Panel","components/alarm_control_panel/template","description.svg","dark-invert" -"RP2040 PIO LED Strip","components/light/rp2040_pio_led_strip","color_lens.svg","dark-invert" -"TMP1075","components/sensor/tmp1075","tmp1075.jpg","" -{{< /imgtable >}} - -## Dark Mode 😎 - -Thanks to {{< ghuser name="grahambrown11" >}} for implement a dark mode for the ESPHome dashboard! -It will take the preference of your browser and is not configurable at this time. - -## Alarm Control Panel - -{{< ghuser name="grahambrown11" >}} also has contributed the base alarm control panel code and a template alarm -control panel. This is available to use now in ESPHome, but will require Home Assistant 2023.7 or newer for the entity -to show up and be control from that side. - -## MDI icons - -You can now specify MDI icons as ESPHome images using the `mdi:` prefix, for example: - -```yaml -image: - - file: "my_image.png" - id: my_image - - file: "mdi:chip" - resize: 32x32 - id: chip_icon -``` - -## Wi-Fi enable and disable - -Wi-Fi can now be enabled and disabled on demand using the `wifi.enable` and `wifi.disable` actions. -It can also be set to not enable on bootup. See the {{< docref "/components/wifi" "Wi-Fi documentation" >}} -for more details. - - - -## Release 2023.6.1 - June 23 - -- Make ethernet_info work with esp-idf framework {{< pr number="4976" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- display: fix white screen on binary displays {{< pr number="4991" repo="esphome" >}} by {{< ghuser name="ayufan" >}} - -## Release 2023.6.2 - June 23 - -- remove unused static declarations {{< pr number="4993" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix rp2040 pio tool download {{< pr number="4994" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.6.3 - June 28 - -- Update webserver to 56d73b5 {{< pr number="5007" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="5018" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Fixes compressed downloads {{< pr number="5014" repo="esphome" >}} by {{< ghuser name="fdcastel" >}} -- Add CONFIG_BT_BLE_42_FEATURES_SUPPORTED for ble {{< pr number="5008" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.6.4 - July 4 - -- [SCD30] Disable negative temperature offset {{< pr number="4850" repo="esphome" >}} by {{< ghuser name="ardichoke" >}} -- fix template binary_sensor publish_initial_state option {{< pr number="5033" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add alarm to reserved ids {{< pr number="5042" repo="esphome" >}} by {{< ghuser name="grahambrown11" >}} -- Advertise noise is enabled {{< pr number="5034" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update webserver to ea86d81 {{< pr number="5023" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.6.5 - July 10 - -- Fix bulk and single Bluetooth parser coexistence {{< pr number="5073" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- binary_sensor: Validate max_length for on_click/on_double_click {{< pr number="5068" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} - -## Breaking Changes - -### VOC sensors - -Some VOC sensors have had their default device class changed from `volatile_organic_compounds` to `volatile_organic_compounds_parts` -to better align with what they are returning. - -### Microphone - -The `on_data` trigger (and the internal callback) for the microphone now provides `std::vector` instead of a `std::vector`. - -### Header files moved - -There are a couple of breaking changes for users who publish `external_components` and may use the internal APIs. -See the list below for the pull requests that have been marked as breaking changes. - -## Full list of changes - -### New Components - -- Rp2040 pio ledstrip {{< pr number="4818" repo="esphome" >}} by {{< ghuser name="Papa-DMan" >}} (new-integration) -- Add support for TMP1075 temperature sensor {{< pr number="4776" repo="esphome" >}} by {{< ghuser name="sybrenstuvel" >}} (new-integration) -- Add Alarm Control Panel {{< pr number="4770" repo="esphome" >}} by {{< ghuser name="grahambrown11" >}} (new-integration) - -### Breaking Changes - -- Add transparency support to all image types {{< pr number="4600" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (breaking-change) -- Allow i2s microphone bits per sample to be configured {{< pr number="4884" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Move ESPTime into core esphome namespace {{< pr number="4926" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- display: add `BaseImage` and provide only `Image::get_pixel` method {{< pr number="4932" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (breaking-change) -- Migrate VOC sensors that use ppb to use volatile_organic_compounds_parts device class {{< pr number="4982" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) - -### Beta Changes - -- Add support in vbus component for Deltasol BS 2009 {{< pr number="4943" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix vbus sensor offsets {{< pr number="4952" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add support for ESP32-S3-BOX-Lite displays {{< pr number="4941" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Split display_buffer sub-components into own files {{< pr number="4950" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Add support for S3 box display {{< pr number="4942" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- display: allow to align image with `ImageAlign` {{< pr number="4933" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Use HW SPI for rp2040 {{< pr number="4955" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix for Fujitsu AC not having Quiet Fan Mode {{< pr number="4962" repo="esphome" >}} by {{< ghuser name="TaruDesigns" >}} -- Store app comment and compilation_time in flash {{< pr number="4945" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Construct web_server assets at build time instead of run time {{< pr number="4944" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update pca9685_output.cpp {{< pr number="4929" repo="esphome" >}} by {{< ghuser name="standahabich" >}} -- Apply configured IIR filter setting in generated BMP280 code {{< pr number="4975" repo="esphome" >}} by {{< ghuser name="murrayma" >}} -- airthings_wave: refactor to eliminate code duplication {{< pr number="4910" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} (new-integration) -- Make growatt play nicer with other modbus components. {{< pr number="4947" repo="esphome" >}} by {{< ghuser name="onnlucky" >}} -- Bump esphome-dashboard to 20230621.0 {{< pr number="4980" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix pypi release {{< pr number="4983" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add configuration option to disable the log UI. {{< pr number="4419" repo="esphome" >}} by {{< ghuser name="dd32" >}} -- Update webserver and captive portal pages to 67c48ee9 {{< pr number="4986" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Migrate VOC sensors that use ppb to use volatile_organic_compounds_parts device class {{< pr number="4982" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- dashboard: Adds "compressed=1" to /download.bin endpoint. (...) {{< pr number="4966" repo="esphome" >}} by {{< ghuser name="fdcastel" >}} - -### All changes - -- Add minimum RSSI check to ble presence {{< pr number="4646" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Run black over tests folder {{< pr number="4824" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use token so PR checks are run {{< pr number="4834" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix stale bot ignoring not-stale {{< pr number="4836" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Rework CI into multiple dependent jobs {{< pr number="4823" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add DNS to Text info {{< pr number="4821" repo="esphome" >}} by {{< ghuser name="max246" >}} -- allow to use MQTT for discovery of IPs if mDNS is no option {{< pr number="3887" repo="esphome" >}} by {{< ghuser name="Links2004" >}} -- Move some I2C logic out of header file {{< pr number="4839" repo="esphome" >}} by {{< ghuser name="CarsonF" >}} -- Allow substitutions to be valid names {{< pr number="4726" repo="esphome" >}} by {{< ghuser name="jgoguen" >}} -- Insert Europe Tank Types from mopeka_std_check {{< pr number="4757" repo="esphome" >}} by {{< ghuser name="lukasl96" >}} -- Bump tornado from 6.3.1 to 6.3.2 {{< pr number="4841" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.17.3 to 2.17.4 {{< pr number="4843" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.60.0 to 0.62.0 {{< pr number="4781" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.3.2 to 3.4.0 {{< pr number="4842" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump platformio from 6.1.6 to 6.1.7 {{< pr number="4795" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Migrate e131 to use socket instead of WiFiUDP arduino library {{< pr number="4832" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add transparency support to all image types {{< pr number="4600" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (breaking-change) -- Run YAML test 8 during CI and fix board used {{< pr number="4862" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Rp2040 pio ledstrip {{< pr number="4818" repo="esphome" >}} by {{< ghuser name="Papa-DMan" >}} (new-integration) -- [ILI9xxx] Update ili9xxx_init.h code for the ILI9488 display for correct white balance {{< pr number="4849" repo="esphome" >}} by {{< ghuser name="lucasreiners" >}} -- Update codeowners {{< pr number="4875" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- Fix rp2040_pio_led_strip color modes {{< pr number="4887" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add i2s mclk {{< pr number="4885" repo="esphome" >}} by {{< ghuser name="rpatel3001" >}} -- Allow partially looping animations {{< pr number="4693" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Allow i2s microphone bits per sample to be configured {{< pr number="4884" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add support for TMP1075 temperature sensor {{< pr number="4776" repo="esphome" >}} by {{< ghuser name="sybrenstuvel" >}} (new-integration) -- move pio tools to LED component {{< pr number="4903" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- add SUB_SELECT macro {{< pr number="4897" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- add SUB_SWITCH macro {{< pr number="4898" repo="esphome" >}} by {{< ghuser name="regevbr" >}} -- esp32_rmt_led_strip: fix compile with ESP-IDF >= 5 {{< pr number="4856" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Bump aioesphomeapi from 13.7.5 to 13.9.0 {{< pr number="4907" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- ota: fix compile with ESP-IDF >= 5 {{< pr number="4857" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- ota: fix TWDT with ESP-IDF >= 5 {{< pr number="4858" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- light: fix compile with ESP-IDF >= 5 {{< pr number="4855" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Continuous voice_assistant and silence detection {{< pr number="4892" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow WIFI to be disabled and enabled {{< pr number="4810" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump frenck/action-yamllint from 1.4.0 to 1.4.1 {{< pr number="4876" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-cov from 4.0.0 to 4.1.0 {{< pr number="4888" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.62.0 to 0.63.0 {{< pr number="4890" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esptool from 4.5.1 to 4.6 {{< pr number="4906" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- prometheus: fix compilation with EntityBase {{< pr number="4895" repo="esphome" >}} by {{< ghuser name="mischief" >}} -- Support for Adafruit ESP32-S2 TFT Feather {{< pr number="4912" repo="esphome" >}} by {{< ghuser name="PlainTechEnthusiast" >}} -- Add support for mdi images {{< pr number="4654" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Increase SNTP setup priority {{< pr number="4917" repo="esphome" >}} by {{< ghuser name="droscy" >}} -- Bump aioesphomeapi from 13.9.0 to 14.0.0 {{< pr number="4925" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bluetooth Proxy: Raw bundled advertisements {{< pr number="4924" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move ESPTime into core esphome namespace {{< pr number="4926" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Allow multiple MAC addresses for 'on_ble_advertise' filter {{< pr number="4773" repo="esphome" >}} by {{< ghuser name="RoboMagus" >}} -- Add SVG image support {{< pr number="4922" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Add !extend to devcontainer's customTags {{< pr number="4749" repo="esphome" >}} by {{< ghuser name="jimtng" >}} -- [max7219digit] fix 270° rotation {{< pr number="4930" repo="esphome" >}} by {{< ghuser name="spezifisch" >}} -- proto generation updates {{< pr number="4653" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- I2S media player allow setting communication format for external DACs {{< pr number="4918" repo="esphome" >}} by {{< ghuser name="ccorderor" >}} -- Add MULTI_CONF to pn53_i2c {{< pr number="4938" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- display: Improve Image rendering by removing usage of virtual functions {{< pr number="4931" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- display: add `BaseImage` and provide only `Image::get_pixel` method {{< pr number="4932" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (breaking-change) -- Add Alarm Control Panel {{< pr number="4770" repo="esphome" >}} by {{< ghuser name="grahambrown11" >}} (new-integration) -- Add support in vbus component for Deltasol BS 2009 {{< pr number="4943" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix vbus sensor offsets {{< pr number="4952" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add support for ESP32-S3-BOX-Lite displays {{< pr number="4941" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Split display_buffer sub-components into own files {{< pr number="4950" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Add support for S3 box display {{< pr number="4942" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- display: allow to align image with `ImageAlign` {{< pr number="4933" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Use HW SPI for rp2040 {{< pr number="4955" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix for Fujitsu AC not having Quiet Fan Mode {{< pr number="4962" repo="esphome" >}} by {{< ghuser name="TaruDesigns" >}} -- Store app comment and compilation_time in flash {{< pr number="4945" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Construct web_server assets at build time instead of run time {{< pr number="4944" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update pca9685_output.cpp {{< pr number="4929" repo="esphome" >}} by {{< ghuser name="standahabich" >}} -- Apply configured IIR filter setting in generated BMP280 code {{< pr number="4975" repo="esphome" >}} by {{< ghuser name="murrayma" >}} -- airthings_wave: refactor to eliminate code duplication {{< pr number="4910" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} (new-integration) -- Make growatt play nicer with other modbus components. {{< pr number="4947" repo="esphome" >}} by {{< ghuser name="onnlucky" >}} -- Bump esphome-dashboard to 20230621.0 {{< pr number="4980" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix pypi release {{< pr number="4983" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add configuration option to disable the log UI. {{< pr number="4419" repo="esphome" >}} by {{< ghuser name="dd32" >}} -- Update webserver and captive portal pages to 67c48ee9 {{< pr number="4986" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Migrate VOC sensors that use ppb to use volatile_organic_compounds_parts device class {{< pr number="4982" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- dashboard: Adds "compressed=1" to /download.bin endpoint. (...) {{< pr number="4966" repo="esphome" >}} by {{< ghuser name="fdcastel" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.7.0.md b/content/changelog/2023.7.0.md deleted file mode 100644 index 8c05da10e3..0000000000 --- a/content/changelog/2023.7.0.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.7.0." -title: "ESPHome 2023.7.0 - 19th July 2023" -params: - seo: - description: Changelog for ESPHome 2023.7.0. - image: /_static/changelog-2023.7.0.png ---- - -{{< imgtable >}} -"XL9535 I/O Expander","components/xl9535","xl9535.svg","" -"Zio Ultrasonic Sensor","components/sensor/zio_ultrasonic","zio_ultrasonic.jpg","" -"Alpha3","components/sensor/alpha3","alpha3.jpg","" -"PCF8563 RTC","components/time/pcf8563","clock-outline.svg","dark-invert" -"TT21100","components/touchscreen/tt21100","esp32-s3-korvo-2-lcd.png","" -"Grove TB6612FNG","components/grove_tb6612fng","motor.png","" -"ATM90E26","components/sensor/atm90e26","atm90e26.jpg","" -"Duty Time","components/sensor/duty_time","timer-play-outline.svg","dark-invert" -{{< /imgtable >}} - -## Webserver with ESP-IDF - -This releases adds support for the {{< docref "/components/web_server" "Webserver" >}} and -{{< docref "/components/captive_portal" >}} when using the `esp-idf` framework on ESP32 boards. - -## Display components - -This release adds a few changes to the display core code to optimise and allow for future -improvements which are already in progress. This also may bring breaking changes to the internal APIs that -`external_components` may be relying on. - -## A new warning in the logs - -```text -[00:00:00][W][component:204]: Component xxxxxx took a long time for an operation (x.xx s). -[00:00:00][W][component:205]: Components should block for at most 20-30ms. -``` - -These 2 log lines may show up in the most recent version of ESPHome due to the log level being changed from -`verbose` to `warning`. I made this change because changing the device log level to verbose just to see if these -lines show up significantly slowed down the device due to all the extra logging it had to do. - -Please do not report new issues for this, but [comment on this issue](https://github.com/esphome/issues/issues/4717) -if someone has not already commented for that specific component. - -## Full list of changes - - - -### New Components - -- XL9535 I/O Expander {{< pr number="4899" repo="esphome" >}} by {{< ghuser name="mreditor97" >}} (new-integration) -- Add Zio Ultrasonic Distance Sensor Component {{< pr number="5059" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add Alpha3 pump component {{< pr number="3787" repo="esphome" >}} by {{< ghuser name="jan-hofmeier" >}} (new-integration) -- RTC implementation of pcf8563 {{< pr number="4998" repo="esphome" >}} by {{< ghuser name="KoenBreeman" >}} (new-integration) -- web server esp idf support {{< pr number="3500" repo="esphome" >}} by {{< ghuser name="dentra" >}} (new-integration) -- Add TT21100 touchscreen component {{< pr number="4793" repo="esphome" >}} by {{< ghuser name="kroimon" >}} (new-integration) -- Add support for Grove tb6612 fng {{< pr number="4797" repo="esphome" >}} by {{< ghuser name="max246" >}} (new-integration) -- Add support for ATM90E26 {{< pr number="4366" repo="esphome" >}} by {{< ghuser name="danieltwagner" >}} (new-integration) -- New 'Duty Time' sensor component {{< pr number="5069" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-integration) - -### Breaking Changes - -- display: add `BaseFont` and introduce `Font::draw` methods {{< pr number="4963" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (breaking-change) -- display: Rename `display.DisplayBufferRef` to `display.DisplayRef` used by lambda {{< pr number="5002" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (breaking-change) -- Remove template switch restore_state {{< pr number="5106" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- Dont do mqtt ip lookup if `use_address` has ip address {{< pr number="5096" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP32 enable ADC2 when wifi is disabled {{< pr number="4381" repo="esphome" >}} by {{< ghuser name="pciavald" >}} -- [Sprinkler] Resume fixes {{< pr number="5100" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- Remove template switch restore_state {{< pr number="5106" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add timeout filter {{< pr number="5104" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- P1 values for capacity tariff in Belgium {{< pr number="5081" repo="esphome" >}} by {{< ghuser name="bwynants" >}} -- airthings_wave: Silence compiler warnings {{< pr number="5098" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Sigma delta fix {{< pr number="4911" repo="esphome" >}} by {{< ghuser name="PlainTechEnthusiast" >}} -- [LD2410] Remove baud_rate check {{< pr number="5112" repo="esphome" >}} by {{< ghuser name="voed" >}} -- Fix silence detection flag on voice assistant {{< pr number="5120" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.7.1 - August 1 - -- Dashboard: use Popen() on Windows {{< pr number="5110" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Swap ADC back to use 'int' because C3 {{< pr number="5151" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- wifi: handle WIFI_REASON_ROAMING reason in event {{< pr number="5153" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Slightly lower template switch setup priority {{< pr number="5163" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- update "Can't convert" warning to match others in homeassistant_sensor {{< pr number="5162" repo="esphome" >}} by {{< ghuser name="PlainTechEnthusiast" >}} -- Increase maximum number of BLE notifications {{< pr number="5155" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- invert min_rssi check {{< pr number="5150" repo="esphome" >}} by {{< ghuser name="Jorre05" >}} -- Fix graininess & streaks for 7.50inV2alt Waveshare e-paper {{< pr number="5168" repo="esphome" >}} by {{< ghuser name="Egglestron" >}} - -### All changes - -- Upgraded Haier climate component implementation {{< pr number="4521" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- display: add `BaseFont` and introduce `Font::draw` methods {{< pr number="4963" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (breaking-change) -- display/font: optimise font rendering by about 25% {{< pr number="4956" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- display: move `Rect` into `rect.cpp/.h` {{< pr number="4957" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Bump pytest from 7.3.1 to 7.3.2 {{< pr number="4936" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add read/write for 16bit registers {{< pr number="4844" repo="esphome" >}} by {{< ghuser name="CarsonF" >}} -- XL9535 I/O Expander {{< pr number="4899" repo="esphome" >}} by {{< ghuser name="mreditor97" >}} (new-integration) -- Fix python venv restoring {{< pr number="4965" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Preprocess away unused code when IPv6 is disabled {{< pr number="4973" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump aioesphomeapi from 14.0.0 to 14.1.0 {{< pr number="4972" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add actions to animation {{< pr number="4959" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Bump zeroconf from 0.63.0 to 0.69.0 {{< pr number="4970" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- mqtt: add ESP-IDF >= 5.0 support {{< pr number="4854" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- display: move `Image`, `Font` and `Animation` code into components {{< pr number="4967" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- support empty schemas and one platform components {{< pr number="4999" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- update dsmr to 0.7 {{< pr number="5011" repo="esphome" >}} by {{< ghuser name="Pvlerick" >}} -- add water delivered to dsmr component {{< pr number="4237" repo="esphome" >}} by {{< ghuser name="jerome992" >}} -- Update sync workflow {{< pr number="5017" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump aioesphomeapi from 14.1.0 to 15.0.0 {{< pr number="5012" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.4.0 to 3.7.0 {{< pr number="4971" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.3.2 to 7.4.0 {{< pr number="5000" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Attempt to fix script parameters {{< pr number="4627" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove yaml test cache {{< pr number="5019" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esptool from 4.6 to 4.6.2 {{< pr number="4949" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-mock from 3.10.0 to 3.11.1 {{< pr number="4977" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- binary_sensor removed unused filter {{< pr number="5039" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- binary_sensor filters templatable delays {{< pr number="5029" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Improve the gamma settings for the S3-Box-lite display {{< pr number="5046" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Prepare ethernet to work with esp idf 5.0 {{< pr number="5037" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Prepare debug and logger component to work with idf 5.0 {{< pr number="5036" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Mopeka std fixes {{< pr number="5041" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Adjust signature for on_disconnect {{< pr number="5009" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Log component long time message at warning level {{< pr number="5048" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Log start of i2c setup {{< pr number="5049" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Initial debug component support for rp2040 {{< pr number="5056" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Fix when idf component has broken symlinks {{< pr number="5058" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Some tests wasn't running (locally) {{< pr number="5050" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- [ILI9xxx] Add ili9488_a (alternative gamma configuration for ILI9488) {{< pr number="5027" repo="esphome" >}} by {{< ghuser name="lnicolas83" >}} -- [ili9xxx] Allow config of spi data rate. {{< pr number="4701" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Make scheduler debuging work with idf >= 5 {{< pr number="5052" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Adds 1.54" e-ink display (gdew0154m09) support to waveshare_epaper component {{< pr number="4939" repo="esphome" >}} by {{< ghuser name="tobiasoort" >}} -- display: split `DisplayBuffer` and `Display` {{< pr number="5001" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Fixed ili9xxx_display update() method {{< pr number="5013" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [Ethernet] ksz8081rna support {{< pr number="4739" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Improve BME680 BSEC sensor device classes {{< pr number="4859" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Update RP2040 Aruino framwork and platform to latest {{< pr number="5025" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Allow pillow versions over 10 {{< pr number="5071" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- display: Rename `display.DisplayBufferRef` to `display.DisplayRef` used by lambda {{< pr number="5002" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (breaking-change) -- Add Zio Ultrasonic Distance Sensor Component {{< pr number="5059" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add Alpha3 pump component {{< pr number="3787" repo="esphome" >}} by {{< ghuser name="jan-hofmeier" >}} (new-integration) -- RTC implementation of pcf8563 {{< pr number="4998" repo="esphome" >}} by {{< ghuser name="KoenBreeman" >}} (new-integration) -- web server esp idf support {{< pr number="3500" repo="esphome" >}} by {{< ghuser name="dentra" >}} (new-integration) -- Add TT21100 touchscreen component {{< pr number="4793" repo="esphome" >}} by {{< ghuser name="kroimon" >}} (new-integration) -- tuya_light: fix float->int conversion while setting color temperature {{< pr number="5067" repo="esphome" >}} by {{< ghuser name="kswt" >}} -- Fix typo in mpu6050.cpp {{< pr number="5086" repo="esphome" >}} by {{< ghuser name="stefanklug" >}} -- airthings_wave: Battery level reporting {{< pr number="4979" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Add support for Grove tb6612 fng {{< pr number="4797" repo="esphome" >}} by {{< ghuser name="max246" >}} (new-integration) -- Add MCP2515 12MHz xtal support {{< pr number="5089" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Correct message for standard transmission. {{< pr number="5088" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Restrict pillow to versions before 10.0.0 {{< pr number="5090" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20230711.0 {{< pr number="5085" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- added uart final validate data bits {{< pr number="5079" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add support for ATM90E26 {{< pr number="4366" repo="esphome" >}} by {{< ghuser name="danieltwagner" >}} (new-integration) -- Grove amend name {{< pr number="5093" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Fixing colon for tm1637 display if inverted set true {{< pr number="5072" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Fix use of `optional` {{< pr number="5091" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- New 'Duty Time' sensor component {{< pr number="5069" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-integration) -- Fix PIDController::in_deadband() to give correct result when error is zero {{< pr number="5078" repo="esphome" >}} by {{< ghuser name="lewissbaker" >}} -- Edit error message for pillow install to add version restrictions {{< pr number="5094" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Dont do mqtt ip lookup if `use_address` has ip address {{< pr number="5096" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP32 enable ADC2 when wifi is disabled {{< pr number="4381" repo="esphome" >}} by {{< ghuser name="pciavald" >}} -- [Sprinkler] Resume fixes {{< pr number="5100" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- Remove template switch restore_state {{< pr number="5106" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add timeout filter {{< pr number="5104" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- P1 values for capacity tariff in Belgium {{< pr number="5081" repo="esphome" >}} by {{< ghuser name="bwynants" >}} -- airthings_wave: Silence compiler warnings {{< pr number="5098" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Sigma delta fix {{< pr number="4911" repo="esphome" >}} by {{< ghuser name="PlainTechEnthusiast" >}} -- [LD2410] Remove baud_rate check {{< pr number="5112" repo="esphome" >}} by {{< ghuser name="voed" >}} -- Fix silence detection flag on voice assistant {{< pr number="5120" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.8.0.md b/content/changelog/2023.8.0.md deleted file mode 100644 index 3c2ddd374f..0000000000 --- a/content/changelog/2023.8.0.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.8.0." -title: "ESPHome 2023.8.0 - 16th August 2023" -params: - seo: - description: Changelog for ESPHome 2023.8.0. - image: /_static/changelog-2023.8.0.png ---- - -{{< imgtable >}} -"A01NYUB","components/sensor/a01nyub","a01nyub.jpg" -"KMeterISO","components/sensor/kmeteriso","kmeteriso.jpg" -"BMP581","components/sensor/bmp581","bmp581.jpg" -"GCJA5","components/sensor/gcja5","gcja5.svg" -{{< /imgtable >}} - -## LD2410 - -The LD2410 component has had a massive upgrade thanks to {{< ghuser name="regevbr" >}}! -It now supports settings most if not all configuration parameters via `switches` / `numbers` and `selects` -and exposes more data via various `sensors`. -This includes breaking changes that mean the existing gate configuration options have been moved to the -`number` platform. - - - -## Release 2023.8.1 - August 18 - -- Fix checksum calculation for sml {{< pr number="5271" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Change haier from AUTO to HEAT_COOL {{< pr number="5267" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -## Release 2023.8.2 - August 21 - -- Move libcairo to all architectures in docker {{< pr number="5276" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Resolve offline ESPs in dashboard when using ESPHOME_DASHBOARD_USE_PING=true {{< pr number="5281" repo="esphome" >}} by {{< ghuser name="mwolter805" >}} -- Align SPI data rates in C++ code with Python {{< pr number="5284" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Change htu21d sensors from required to optional {{< pr number="5285" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Reserve keyword "clock" {{< pr number="5279" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -## Release 2023.8.3 - September 6 - -- Introduce cv.temperature_delta and fix problematic thermostat configuration behavior {{< pr number="5297" repo="esphome" >}} by {{< ghuser name="sebastianrasor" >}} -- fix to PR # 3887 MQTT connection not using discovery: false {{< pr number="5275" repo="esphome" >}} by {{< ghuser name="luka6000" >}} -- Attempt to fix secret blurring {{< pr number="5326" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bugfix: disable channels after IO if multiple tca9548a I2C multiplexers are configured {{< pr number="5317" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Fix checksum calculation for pipsolar {{< pr number="5299" repo="esphome" >}} by {{< ghuser name="Mat931" >}} - -## Full list of changes - -### New Components - -- Add support for a01nyub {{< pr number="4863" repo="esphome" >}} by {{< ghuser name="MrSuicideParrot" >}} (new-integration) -- Add KMeterISO component. {{< pr number="5170" repo="esphome" >}} by {{< ghuser name="Rudd-O" >}} (new-integration) -- New component: Add support for bmp581 pressure and temperature sensors {{< pr number="4657" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- New PM sensor Panasonic SN-GCJA5 {{< pr number="4988" repo="esphome" >}} by {{< ghuser name="gcormier" >}} (new-integration) -- Add configuration flow abilites to the ld2410 component {{< pr number="4434" repo="esphome" >}} by {{< ghuser name="regevbr" >}} (new-integration) (notable-change) (breaking-change) - -### Breaking Changes - -- Coolix IR protocol improvements {{< pr number="5105" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- Speaker return bytes written and do not wait for queue {{< pr number="5182" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Change device name in MQTT discovery messages to friendly names {{< pr number="5205" repo="esphome" >}} by {{< ghuser name="pidpawel" >}} (breaking-change) -- Add configuration flow abilites to the ld2410 component {{< pr number="4434" repo="esphome" >}} by {{< ghuser name="regevbr" >}} (new-integration) (notable-change) (breaking-change) - -### Beta Changes - -- Read string of bool env and match against well known values {{< pr number="5232" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix aeha data template {{< pr number="5231" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Expose start to speaker interface {{< pr number="5228" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- New features added for Haier integration {{< pr number="5196" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- pca9554 cache reads {{< pr number="5137" repo="esphome" >}} by {{< ghuser name="hwstar" >}} -- fix midea: undo approved PR#4053 {{< pr number="5233" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fixing smartair2 protocol implementation if no Wi-Fi {{< pr number="5238" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- tuya: add time sync callback only once to prevent memleak {{< pr number="5234" repo="esphome" >}} by {{< ghuser name="afflux" >}} -- Fix duplicate tuya time warning {{< pr number="5243" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Change XL9535 `setup_priority` to IO {{< pr number="5246" repo="esphome" >}} by {{< ghuser name="mreditor97" >}} -- rmt_base additional minor changes {{< pr number="5245" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fix 24 bit signed integer parsing in sml parser {{< pr number="5250" repo="esphome" >}} by {{< ghuser name="mulder-fbi" >}} -- Fix IDFI2CBus::writev ignoring stop parameter {{< pr number="4840" repo="esphome" >}} by {{< ghuser name="CarsonF" >}} -- Add configuration flow abilites to the ld2410 component {{< pr number="4434" repo="esphome" >}} by {{< ghuser name="regevbr" >}} (new-integration) (notable-change) (breaking-change) - -### Notable Changes - -- Change MQTT client for ESP32 Arduino {{< pr number="5157" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (notable-change) -- Add configuration flow abilites to the ld2410 component {{< pr number="4434" repo="esphome" >}} by {{< ghuser name="regevbr" >}} (new-integration) (notable-change) (breaking-change) - -### All changes - -- Mk2 to prepare color.h for idf >= 5 {{< pr number="5070" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- display: Add helper methods to `Display::clip` and `Display::clamp_x/y_` {{< pr number="5003" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- Mark repo as safe directory to git config {{< pr number="5102" repo="esphome" >}} by {{< ghuser name="davet2001" >}} -- Bump click from 8.1.3 to 8.1.5 {{< pr number="5099" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyyaml from 6.0 to 6.0.1 {{< pr number="5117" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- ignore components folder in root {{< pr number="5130" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add size getter to CallbackManager {{< pr number="5129" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Make docker use pip installed pillow {{< pr number="5074" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Change datatype in e131 addressable light {{< pr number="5127" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Streamer mode {{< pr number="5119" repo="esphome" >}} by {{< ghuser name="grahambrown11" >}} -- Version bump for ESP32 IDF and Arduino {{< pr number="5035" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="5136" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Update known boards to 5.4.0 {{< pr number="5134" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Init colorama in ESPHome main {{< pr number="5111" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Coolix IR protocol improvements {{< pr number="5105" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- Allow esp32 idf components to specify submodules and specific components {{< pr number="5128" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="5147" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Prepare some components for IDF >= 5 {{< pr number="5061" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump clang-tidy from 11 to 14 {{< pr number="5160" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- climate triggers Climate and ClimateCall references {{< pr number="5028" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- remote_base changes {{< pr number="5124" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add 'map_linear' and 'clamp' sensor filters {{< pr number="5040" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Adding Inkplate 6 v2 model variant {{< pr number="5165" repo="esphome" >}} by {{< ghuser name="mullerdavid" >}} -- duty_time: fix build without binary_sensor. Parented in automations. {{< pr number="5156" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add standardized CRC helper functions {{< pr number="4798" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Enable IPv6 for ESP32 Arduino, wifi and ethernet {{< pr number="4865" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump zeroconf from 0.69.0 to 0.71.4 {{< pr number="5148" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.3.0 to 23.7.0 {{< pr number="5126" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.17.4 to 2.17.5 {{< pr number="5172" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.7.0 to 3.9.0 {{< pr number="5083" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Vertical and horizontal airflow actions fix for Haier climate {{< pr number="5164" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Microphone add is_stopped {{< pr number="5183" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add get_board function to esp32 module {{< pr number="5184" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Speaker return bytes written and do not wait for queue {{< pr number="5182" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Update components "if x in config" {{< pr number="5181" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump click from 8.1.5 to 8.1.6 {{< pr number="5179" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- PWM Output on RP2040 for high frequencies {{< pr number="5204" repo="esphome" >}} by {{< ghuser name="matemaciek" >}} -- Fix some configs after #5181 {{< pr number="5209" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improved compensation sgp30 {{< pr number="5208" repo="esphome" >}} by {{< ghuser name="arno1801" >}} -- Add support for a01nyub {{< pr number="4863" repo="esphome" >}} by {{< ghuser name="MrSuicideParrot" >}} (new-integration) -- Change device name in MQTT discovery messages to friendly names {{< pr number="5205" repo="esphome" >}} by {{< ghuser name="pidpawel" >}} (breaking-change) -- Add ESP32-S2/S3 capacitive touch support {{< pr number="5116" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump zeroconf from 0.71.4 to 0.74.0 {{< pr number="5199" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Implemented Waveshare 7.5in B V3 {{< pr number="5210" repo="esphome" >}} by {{< ghuser name="lucasprim" >}} -- Refactor `pulse_meter` to better handle higher frequencies {{< pr number="4231" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- Change MQTT client for ESP32 Arduino {{< pr number="5157" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (notable-change) -- Add read interface to microphone {{< pr number="5131" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- i2c: fix build on ESP-IDF >= 5.1 {{< pr number="5200" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Add socket define for rp2040 dev {{< pr number="4968" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- core: read ESP32 MAC address from eFuse if IEEE802.15.4 is supported {{< pr number="5176" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- esp32_ble_beacon: enable CONFIG_BT_BLE_42_FEATURES_SUPPORTED {{< pr number="5211" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Bump pytest-asyncio from 0.21.0 to 0.21.1 {{< pr number="5187" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- ledc: check SOC_LEDC_SUPPORT_APB_CLOCK {{< pr number="5212" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Add arm night to alarm control panel {{< pr number="5186" repo="esphome" >}} by {{< ghuser name="primeroz" >}} -- Bump pyupgrade from 3.9.0 to 3.10.1 {{< pr number="5189" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add KMeterISO component. {{< pr number="5170" repo="esphome" >}} by {{< ghuser name="Rudd-O" >}} (new-integration) -- Bump platformio from 6.1.7 to 6.1.9 {{< pr number="5066" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- New component: Add support for bmp581 pressure and temperature sensors {{< pr number="4657" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- New PM sensor Panasonic SN-GCJA5 {{< pr number="4988" repo="esphome" >}} by {{< ghuser name="gcormier" >}} (new-integration) -- Daly BMS improvements {{< pr number="3388" repo="esphome" >}} by {{< ghuser name="matthias882" >}} -- Add missing `on_(arming|pending|armed_home|armed_night|armed_away|disarmed)` triggers to alarm_control_panel {{< pr number="5219" repo="esphome" >}} by {{< ghuser name="primeroz" >}} -- add value option to timeout filter {{< pr number="5222" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Tweak Color init because IDF 5+ {{< pr number="5221" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Read string of bool env and match against well known values {{< pr number="5232" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix aeha data template {{< pr number="5231" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Expose start to speaker interface {{< pr number="5228" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- New features added for Haier integration {{< pr number="5196" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- pca9554 cache reads {{< pr number="5137" repo="esphome" >}} by {{< ghuser name="hwstar" >}} -- fix midea: undo approved PR#4053 {{< pr number="5233" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fixing smartair2 protocol implementation if no Wi-Fi {{< pr number="5238" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- tuya: add time sync callback only once to prevent memleak {{< pr number="5234" repo="esphome" >}} by {{< ghuser name="afflux" >}} -- Fix duplicate tuya time warning {{< pr number="5243" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Change XL9535 `setup_priority` to IO {{< pr number="5246" repo="esphome" >}} by {{< ghuser name="mreditor97" >}} -- rmt_base additional minor changes {{< pr number="5245" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fix 24 bit signed integer parsing in sml parser {{< pr number="5250" repo="esphome" >}} by {{< ghuser name="mulder-fbi" >}} -- Fix IDFI2CBus::writev ignoring stop parameter {{< pr number="4840" repo="esphome" >}} by {{< ghuser name="CarsonF" >}} -- Add configuration flow abilites to the ld2410 component {{< pr number="4434" repo="esphome" >}} by {{< ghuser name="regevbr" >}} (new-integration) (notable-change) (breaking-change) -- Add `libfreetype-dev` Debian package for armv7 Docker builds {{< pr number="5262" repo="esphome" >}} by {{< ghuser name="pierlon" >}} -- Add delay before enabling ipv6 {{< pr number="5256" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump zeroconf from 0.74.0 to 0.80.0 {{< pr number="5260" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2023.9.0.md b/content/changelog/2023.9.0.md deleted file mode 100644 index e6a0dc7ac2..0000000000 --- a/content/changelog/2023.9.0.md +++ /dev/null @@ -1,233 +0,0 @@ ---- -description: "Changelog for ESPHome 2023.9.0." -title: "ESPHome 2023.9.0 - 27th September 2023" -params: - seo: - description: Changelog for ESPHome 2023.9.0. - image: /_static/changelog-2023.9.0.png ---- - -{{< imgtable >}} -"BK72xx","components/libretiny","bk72xx.svg","" -"RTL87xx","components/libretiny","rtl87xx.svg","" -"WireGuard","components/wireguard","wireguard_custom_logo.svg","dark-invert" -"PMWCS3","components/sensor/pmwcs3","pmwcs3.jpg","" -"SEN0321","components/sensor/sen0321","sen0321.jpg","" -"LightWaveRF","components/lightwaverf","brightness-medium.svg","dark-invert" -"BMI160","components/sensor/bmi160","bmi160.jpg","" -"SPI LED Strips","components/light/spi_led_strip","apa102.jpg","" -{{< /imgtable >}} - -## LibreTiny - -{{< docref "/components/libretiny" "LibreTiny" >}} is a platform for the RTL87xx and BK72xx family of chips. ESPHome -leverages this platform and brings the powerful yet simple YAML configuration to these chips. - -It has been months in the making, and many back and forwards with {{< ghuser name="kuba2k2" >}} -(and all of the contributors to LibreTiny), but we finally got there and merged it in. - -## Wireguard - -{{< docref "/components/wireguard" "WireGuard" >}} is a new component that allows you to connect to a WireGuard® Peer. - -## LED Strips - -Following on from the previously added {{< docref "/components/light/esp32_rmt_led_strip" >}}, we now have -{{< docref "/components/light/spi_led_strip" "SPI LED Strips" >}}. These are replacement components for -{{< docref "/components/light/neopixelbus" >}} and {{< docref "/components/light/fastled" >}} that -do not rely on the Arduino framework. - - - -## Release 2023.9.1 - September 28 - -- Tuya Number Scaling {{< pr number="5108" repo="esphome" >}} by {{< ghuser name="InvncibiltyCloak" >}} -- Migrate dashboard json files to /data folder instead of wiping out {{< pr number="5441" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.9.2 - October 2 - -- SPI fixes for buggy components {{< pr number="5446" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix an Issue with IR Remote Climate and Whirlpool protocol toggle {{< pr number="5447" repo="esphome" >}} by {{< ghuser name="the-mentor" >}} -- Fix SPI support for second bus on 2023.9.1 {{< pr number="5456" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- Ensure esphome directory exists on addon startup {{< pr number="5464" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2023.9.3 - October 3 - -- Bump zeroconf from 0.112.0 to 0.115.0 {{< pr number="5432" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- add pin config for denky_d4 {{< pr number="5471" repo="esphome" >}} by {{< ghuser name="alucryd" >}} -- Support RP2040 hardware SPI {{< pr number="5466" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump zeroconf from 0.115.0 to 0.115.1 {{< pr number="5470" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Sleep mode fix for BP5758D driver {{< pr number="5461" repo="esphome" >}} by {{< ghuser name="dwildstr" >}} -- Tuya Number: split "multiply" to a separate option {{< pr number="5458" repo="esphome" >}} by {{< ghuser name="paravoid" >}} - -## Breaking Changes - -### Home Assistant Add-on - -The `/config/esphome/.esphome` folder has been removed and replaced with `/data` when running ESPHome as a Home Assistant add-on. -This was done because it is exactly what the add-on `/data` folder was made for and there were many files in the `.esphome` folder -that were making the Home Assistant Backup larger for no reason at all. All files in there are generated or sourced from online based -on your configurations files which have not been touched. - -> [!NOTE] -> 2023.9.1 makes a further small change that moves the `json` files used by the dashboard into the new `/data` folder. -> If you had already updated to 2023.9.0 though, the files would have already been removed and they will be re-generated -> next time you install each device. - -### Enum device class - -The `enum` device class was removed from ESPHome to keep in sync with Home Assistant. The class was already not able to be used by -any of the built in components and only potentially used by `external_components`. - -## Full list of changes - -### New Components - -- Add pmwcs3 capacitive soil moisture & temperature sensor component {{< pr number="4624" repo="esphome" >}} by {{< ghuser name="SeByDocKy" >}} (new-integration) -- Support for LibreTiny platform (RTL8710, BK7231 & other modules) {{< pr number="3509" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} (new-integration) -- Adding DFRobot Ozone Sensor Support (sen0321) {{< pr number="4782" repo="esphome" >}} by {{< ghuser name="notjj" >}} (new-integration) -- Integration LightwaveRF switches {{< pr number="4812" repo="esphome" >}} by {{< ghuser name="max246" >}} (new-integration) -- Refactor SPI code; Add ESP-IDF hardware support {{< pr number="5311" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Add BMI160 support {{< pr number="5143" repo="esphome" >}} by {{< ghuser name="flaviut" >}} (new-integration) -- Native SPI RGB LED component {{< pr number="5288" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Wireguard component {{< pr number="4256" repo="esphome" >}} by {{< ghuser name="lhoracek" >}} (new-integration) - -### Breaking Changes - -- Synchronise Device Classes from Home Assistant {{< pr number="5328" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} (breaking-change) -- Use /data directory for .esphome folder when running as HA add-on {{< pr number="5374" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- Add patch to apt install {{< pr number="5389" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Fix Waveshare 7.5v2 epaper screens are always powered on {{< pr number="5283" repo="esphome" >}} by {{< ghuser name="phoenixswiss" >}} -- Update radon_eye_listener.cpp {{< pr number="5401" repo="esphome" >}} by {{< ghuser name="rmmacias" >}} -- Add shelly-dimmer-stm32 51.7 to known versions {{< pr number="5400" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Add E-Trailer Gaslevel support to Mopeka Std Check {{< pr number="5397" repo="esphome" >}} by {{< ghuser name="Phhere" >}} -- fix disabled wifi power on 8266 {{< pr number="5409" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix handling of web server version {{< pr number="5405" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Climate preset fix {{< pr number="5407" repo="esphome" >}} by {{< ghuser name="Jorre05" >}} -- Remove Wi-Fi dependency from Midea component {{< pr number="5394" repo="esphome" >}} by {{< ghuser name="AnthonyMaiorani" >}} -- http_request: Cleanups and safety improvements {{< pr number="5360" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Make the pulse meter timeout on startup when no pulses are received {{< pr number="5388" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- Wizard: fix colored text in input prompts {{< pr number="5313" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- support keypads with pulldowns {{< pr number="5404" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix SPI inverted clock on ESP8266 {{< pr number="5416" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [RP2040W] Fix WiFi bootloop upon LibreTiny support {{< pr number="5414" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- dallas: limit addresses to 64 bits {{< pr number="5413" repo="esphome" >}} by {{< ghuser name="oddstr13" >}} -- Bump zeroconf from 0.108.0 to 0.112.0 {{< pr number="5392" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- LibreTiny: enable MQTT, bump to v1.4.1 {{< pr number="5419" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Wireguard keepalive remove uint16 type {{< pr number="5430" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix #4896 and #4903 {{< pr number="5433" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -### All changes - -- Updated my username in Code Owners {{< pr number="5247" repo="esphome" >}} by {{< ghuser name="mreditor97" >}} -- remote_base: change dumpers log level {{< pr number="5253" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add `libfreetype-dev` Debian package for armv7 Docker builds {{< pr number="5262" repo="esphome" >}} by {{< ghuser name="pierlon" >}} -- Add delay before enabling ipv6 {{< pr number="5256" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump zeroconf from 0.74.0 to 0.80.0 {{< pr number="5260" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump click from 8.1.6 to 8.1.7 {{< pr number="5272" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Remove support for ESP-IDF version < 4 {{< pr number="5261" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Add pmwcs3 capacitive soil moisture & temperature sensor component {{< pr number="4624" repo="esphome" >}} by {{< ghuser name="SeByDocKy" >}} (new-integration) -- Add manufacturer data config to BLE server {{< pr number="5251" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add support for ESP32-{S2,S3,C3} to debug component {{< pr number="4731" repo="esphome" >}} by {{< ghuser name="jayme-github" >}} -- Support for ESP32-C2 & ESP32-C6 {{< pr number="4377" repo="esphome" >}} by {{< ghuser name="vidplace7" >}} -- Bump arduino-heatpumpir to v1.0.23 {{< pr number="5269" repo="esphome" >}} by {{< ghuser name="rob-deutsch" >}} -- Fix equality check when setting current-based cover position {{< pr number="5167" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Bump platformio from 6.1.9 to 6.1.10 {{< pr number="5237" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add Invert method for SSD1306 {{< pr number="5292" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Update PSRAM config params for IDF4+ {{< pr number="5298" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix legacy zeroconf record update method {{< pr number="5294" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump zeroconf from 0.80.0 to 0.86.0 {{< pr number="5308" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add PSRAM mode and speed config {{< pr number="5312" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add extra SLPOUT for waking up some ST7789 chips {{< pr number="5319" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- 7789 controller fixes take 2 {{< pr number="5320" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump Arduino Pico to 3.4.0 {{< pr number="5321" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Use gzip compression for the web server component's static resources {{< pr number="5291" repo="esphome" >}} by {{< ghuser name="EternityForest" >}} -- Bump zeroconf from 0.86.0 to 0.88.0 {{< pr number="5315" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Adding heating coil and fan icons, enum device_class {{< pr number="5325" repo="esphome" >}} by {{< ghuser name="barndawgie" >}} -- Add dashboard API to get firmware binaries {{< pr number="4675" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Make uart error message go away {{< pr number="5329" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- add heating functionality to SI7021 {{< pr number="4828" repo="esphome" >}} by {{< ghuser name="max246" >}} -- Bump esphome-dashboard to 20230904.0 {{< pr number="5339" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Added Handling for Nack "file not found" {{< pr number="5338" repo="esphome" >}} by {{< ghuser name="croessi" >}} -- Prepare api and time for ESP-IDF >= 5 {{< pr number="5332" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Tweak Improv serial to build in IDF 5 {{< pr number="5331" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Support for LibreTiny platform (RTL8710, BK7231 & other modules) {{< pr number="3509" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} (new-integration) -- Extend ESP32 CAN bit rates /bus speed support {{< pr number="5280" repo="esphome" >}} by {{< ghuser name="mkaiser" >}} -- Debug component: add free PSRAM sensor {{< pr number="5334" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- libretiny: fix uart_port framework config {{< pr number="5343" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump actions/checkout from 3 to 4 {{< pr number="5341" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add Lilygo T-Embed to st7789v display config. {{< pr number="5337" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Disable IPv6 when config explicitly says false {{< pr number="5310" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Add defines.h to ethernet_component.h for ENABLE_IPV6 {{< pr number="5344" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="5328" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} (breaking-change) -- Bump pytest from 7.4.0 to 7.4.1 {{< pr number="5342" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fixed default temperature step values for haier climate {{< pr number="5330" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Add debug component to all tests {{< pr number="5333" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Support MaxBotix XL in addition to HRXL {{< pr number="4510" repo="esphome" >}} by {{< ghuser name="notjj" >}} -- Adding DFRobot Ozone Sensor Support (sen0321) {{< pr number="4782" repo="esphome" >}} by {{< ghuser name="notjj" >}} (new-integration) -- mdns: bump IDF mdns component to 1.2.0 {{< pr number="5217" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Integration LightwaveRF switches {{< pr number="4812" repo="esphome" >}} by {{< ghuser name="max246" >}} (new-integration) -- Bump flake8 from 6.0.0 to 6.1.0 {{< pr number="5171" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tornado from 6.3.2 to 6.3.3 {{< pr number="5236" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump platformio from 6.1.10 to 6.1.11 {{< pr number="5323" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Only run ci-docker when ci-docker workflow changes {{< pr number="5347" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esp32: Extra build customization {{< pr number="5322" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow upload command to flash file via serial {{< pr number="5274" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow "--device SERIAL" on cli to flash only via serial {{< pr number="5351" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix PN532 for IDF 5 and ultralight enhancements {{< pr number="5352" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix cpu_ll_get_cycle_count() deprecated warning {{< pr number="5353" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Refactor SPI code; Add ESP-IDF hardware support {{< pr number="5311" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Bump actions/cache from 3.3.1 to 3.3.2 {{< pr number="5367" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.88.0 to 0.102.0 {{< pr number="5368" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix repeat.count = 0 case {{< pr number="5364" repo="esphome" >}} by {{< ghuser name="Xmister" >}} -- Fix dashboard download for ESP32 variants {{< pr number="5355" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Bump pytest from 7.4.1 to 7.4.2 {{< pr number="5357" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [ADC] Support measuring VCC on Raspberry Pico (W) {{< pr number="5335" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- Move CONF_PHASE_A/B/C constants to const.py. {{< pr number="5304" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Add BMI160 support {{< pr number="5143" repo="esphome" >}} by {{< ghuser name="flaviut" >}} (new-integration) -- Use black-pre-commit-mirror to speed up pre-commit runs. {{< pr number="5372" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Native SPI RGB LED component {{< pr number="5288" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Wireguard component {{< pr number="4256" repo="esphome" >}} by {{< ghuser name="lhoracek" >}} (new-integration) -- Bump LibreTiny version to 1.4.0 {{< pr number="5375" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- time: Make std::string version of strftime() avoid runaway memory allocations {{< pr number="5348" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Fix disabled wifi crash on boot {{< pr number="5370" repo="esphome" >}} by {{< ghuser name="Xmister" >}} -- debug: add ESP32-C6 support {{< pr number="5354" repo="esphome" >}} by {{< ghuser name="stintel" >}} -- Make string globals persist-able using fixed size allocations {{< pr number="5296" repo="esphome" >}} by {{< ghuser name="EternityForest" >}} -- Use /data directory for .esphome folder when running as HA add-on {{< pr number="5374" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Bump zeroconf from 0.102.0 to 0.108.0 {{< pr number="5376" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.7.0 to 23.9.1 {{< pr number="5377" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Attempt to fix rp2040 adc with vcc {{< pr number="5378" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Enable IPv6 for ESP8266 and Raspberry pi pico w (RP2040) {{< pr number="4759" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Workflow updates {{< pr number="5384" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Modbus Controller added some features {{< pr number="5318" repo="esphome" >}} by {{< ghuser name="0x3333" >}} -- Force heater off on setup {{< pr number="5161" repo="esphome" >}} by {{< ghuser name="rufuswilson" >}} -- Add IDF 5 test yaml, add adc to IDF tests, fix adc for IDF 5 {{< pr number="5379" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add patch to apt install {{< pr number="5389" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Fix Waveshare 7.5v2 epaper screens are always powered on {{< pr number="5283" repo="esphome" >}} by {{< ghuser name="phoenixswiss" >}} -- Update radon_eye_listener.cpp {{< pr number="5401" repo="esphome" >}} by {{< ghuser name="rmmacias" >}} -- Add shelly-dimmer-stm32 51.7 to known versions {{< pr number="5400" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Add E-Trailer Gaslevel support to Mopeka Std Check {{< pr number="5397" repo="esphome" >}} by {{< ghuser name="Phhere" >}} -- fix disabled wifi power on 8266 {{< pr number="5409" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix handling of web server version {{< pr number="5405" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Climate preset fix {{< pr number="5407" repo="esphome" >}} by {{< ghuser name="Jorre05" >}} -- Remove Wi-Fi dependency from Midea component {{< pr number="5394" repo="esphome" >}} by {{< ghuser name="AnthonyMaiorani" >}} -- http_request: Cleanups and safety improvements {{< pr number="5360" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Make the pulse meter timeout on startup when no pulses are received {{< pr number="5388" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- Wizard: fix colored text in input prompts {{< pr number="5313" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- support keypads with pulldowns {{< pr number="5404" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix SPI inverted clock on ESP8266 {{< pr number="5416" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [RP2040W] Fix WiFi bootloop upon LibreTiny support {{< pr number="5414" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- dallas: limit addresses to 64 bits {{< pr number="5413" repo="esphome" >}} by {{< ghuser name="oddstr13" >}} -- Bump zeroconf from 0.108.0 to 0.112.0 {{< pr number="5392" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- LibreTiny: enable MQTT, bump to v1.4.1 {{< pr number="5419" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Wireguard keepalive remove uint16 type {{< pr number="5430" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix #4896 and #4903 {{< pr number="5433" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.10.0.md b/content/changelog/2024.10.0.md deleted file mode 100644 index a3ff48dc35..0000000000 --- a/content/changelog/2024.10.0.md +++ /dev/null @@ -1,188 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.10.0." -title: "ESPHome 2024.10.0 - 16th October 2024" -params: - seo: - description: Changelog for ESPHome 2024.10.0. - image: /_static/changelog-2024.10.0.png ---- - -{{< imgtable >}} -"Audio DAC Core","components/audio_dac/index","audio_dac.svg" -"AIC3204","components/audio_dac/aic3204","aic3204.svg" -"GP2Y1010AU0F","components/sensor/gp2y1010au0f","gp2y1010au0f.png" -"Grove Gas V2","components/sensor/grove_gas_mc_v2","grove-gas-mc-v2.png" -"NAU7802","components/sensor/nau7802","nau7802.jpg" -"NPI-19","components/sensor/npi19","npi19.jpg" -"TCA9555","components/tca9555","tca9555.svg" -"TE-M3200","components/sensor/tem3200","tem3200.jpg" -{{< /imgtable >}} - -## Web Server Grouping - -For those that use the {{< docref "/components/web_server" >}} with version 3, there is a new -grouping feature that allows for custom/user defined groups of entities. - -This is also a breaking change as the previous `web_server_sorting_weight` has been moved into a new -`web_server` -> `sorting_weight` configuration entry for the entity. - -Please see [Entity sorting](/components/web_server#config-webserver-sorting) for the latest documentation on these features. - -## ESP32 Advanced MAC Address Configuration - -ESPHome now supports reading a custom MAC address from the ESP32 eFuse blocks and will read and use it by default if -there is data burned into the eFuses. If you would like to disable this, or the eFuse has data burned that is not a -MAC address into those eFuses, then you can add `ignore_efuse_custom_mac: true` to your ESP32 `advanced` -configuration. See [ESP32 Advanced Configuration](/components/esp32#esp32-advanced_configuration) for more details. - -## CSE7766 Breaking Changes - -The {{< docref "/components/sensor/cse7766" >}} now requires even parity in configuration. There are some chips that -work without `EVEN`, but the majority of newer chips seem to require it and the older ones work fine with it set as -well so to make it consistent across all devices the component now requires it. - - - -## Release 2024.10.1 - October 22 - -- [config] Fix crash with empty substitutions block {{< pr number="7612" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix broken ibeacon_uuid config in ble_rssi {{< pr number="7640" repo="esphome" >}} by {{< ghuser name="lennart-k" >}} -- auto-load preferences {{< pr number="7642" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [wifi] Support custom MAC on Arduino, too {{< pr number="7644" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [config] Ensure user-supplied build flags don't get silently overwritten {{< pr number="7622" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Remove states from style definitions (Bugfix) {{< pr number="7645" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Move setting global voice assistant to constructor {{< pr number="7630" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} - -## Release 2024.10.2 - October 24 - -- Humanized the missing MQTT log topic error message {{< pr number="7634" repo="esphome" >}} by {{< ghuser name="solarkennedy" >}} -- [lvgl] Some properties were not templatable (Bugfix) {{< pr number="7655" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [voice_assistant] Bugfix: Fix crash on start {{< pr number="7662" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} - -## Release 2024.10.3 - November 8 - -- [rpi_dpi_rgb] Fix get_width and height (Bugfix) {{< pr number="7675" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fixes modbus timing error {{< pr number="7674" repo="esphome" >}} by {{< ghuser name="exciton" >}} -- [lvgl] Ensure images are configured before using them. (Bugfix) {{< pr number="7721" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -## Full list of changes - -### New Components - -- Add tca9555 GPIO driver {{< pr number="7146" repo="esphome" >}} by {{< ghuser name="mobrembski" >}} (new-integration) -- Add support for Sharp GP2Y1010AU0F PM2.5 sensor {{< pr number="6007" repo="esphome" >}} by {{< ghuser name="zry98" >}} (new-integration) -- [audio_dac] [aic3204] Add new component + platform {{< pr number="7505" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Feature/add seeed grove gmxxx multichannel gas support {{< pr number="4304" repo="esphome" >}} by {{< ghuser name="YorkshireIoT" >}} (new-integration) -- Add Initial TE-M3200 pressure sensor support {{< pr number="6862" repo="esphome" >}} by {{< ghuser name="bakerkj" >}} (new-integration) -- Add Initial NPI-19 pressure sensor support {{< pr number="7181" repo="esphome" >}} by {{< ghuser name="bakerkj" >}} (new-integration) -- nau7802: new component {{< pr number="6291" repo="esphome" >}} by {{< ghuser name="cujomalainey" >}} (new-integration) - -### New Platforms - -- Haier climate integration update {{< pr number="7416" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (breaking-change) (new-platform) - -### Breaking Changes - -- Haier climate integration update {{< pr number="7416" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (breaking-change) (new-platform) -- [ch422g] Add support for pins 8-11; make input work. {{< pr number="7467" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- CSE7766 needs even parity {{< pr number="7549" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) -- [web_server] v3 entity grouping {{< pr number="6833" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} (breaking-change) - -### Beta Changes - -- fix uart settings check {{< pr number="7573" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [web_server] Event component grouping {{< pr number="7586" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- [touchscreen] Fix coordinates when using rotation {{< pr number="7591" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix update sequence when update is set to false (#5225) {{< pr number="7407" repo="esphome" >}} by {{< ghuser name="edge90" >}} - -### All changes - -- Bump peter-evans/create-pull-request from 7.0.0 to 7.0.2 {{< pr number="7437" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump recommended ESP-IDF to 4.4.8 {{< pr number="7349" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [tm1638] Fix linting and formatting issues {{< pr number="7443" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [image] Fix linting and formatting issues {{< pr number="7440" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [animation] Fix linting and formatting issues {{< pr number="7439" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [thermostat] Fix linting and formatting issues {{< pr number="7442" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add OpenTherm component (part 1: communication layer and hub) {{< pr number="6645" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} (new-integration) -- [st7701s] Make use of IDF5.x to speed up display operations {{< pr number="7447" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [modbus_controller] Fix linting and formatting issues {{< pr number="7441" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pylint from 3.1.0 to 3.2.7 {{< pr number="7438" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump peter-evans/create-pull-request from 7.0.2 to 7.0.3 {{< pr number="7457" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- openeth ethernet / qemu support {{< pr number="7020" repo="esphome" >}} by {{< ghuser name="apbodrov" >}} -- [nextion] Optionally skip connection handshake {{< pr number="6905" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Haier climate integration update {{< pr number="7416" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (breaking-change) (new-platform) -- Added i2s_comm_fmt parameter to i2s speaker component {{< pr number="7449" repo="esphome" >}} by {{< ghuser name="PxPert" >}} -- [lvgl] Enhancements {{< pr number="7453" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add tca9555 GPIO driver {{< pr number="7146" repo="esphome" >}} by {{< ghuser name="mobrembski" >}} (new-integration) -- [st7701s] Fix initialisation race {{< pr number="7462" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- add "fan_mode" and "swing_mode" to REST API {{< pr number="7476" repo="esphome" >}} by {{< ghuser name="Tarik2142" >}} -- [esp32_improv] Add triggers for various states {{< pr number="7461" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [micro_wake_word] Workaround for failing IDF 5+ tests {{< pr number="7484" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump peter-evans/create-pull-request from 7.0.3 to 7.0.5 {{< pr number="7469" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add CSE7766 reactive power {{< pr number="7301" repo="esphome" >}} by {{< ghuser name="nkinnan" >}} -- Support inkplate 5 and 5 V2 {{< pr number="7448" repo="esphome" >}} by {{< ghuser name="DavidSichau" >}} -- Add remote transmitter triggers {{< pr number="7483" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- tcs34725: fix color/clear channel percentage calculations on long exposures {{< pr number="7493" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- tcs34725: Add check for Division by Zero {{< pr number="7485" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [core] add ring buffer destructor {{< pr number="7500" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [ch422g] Add support for pins 8-11; make input work. {{< pr number="7467" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Add clean_session as configurable option to the MQTT component {{< pr number="7501" repo="esphome" >}} by {{< ghuser name="victorclaessen" >}} -- [wifi] Use custom MAC address if programmed {{< pr number="7498" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add support for Sharp GP2Y1010AU0F PM2.5 sensor {{< pr number="6007" repo="esphome" >}} by {{< ghuser name="zry98" >}} (new-integration) -- Make time dependency optional {{< pr number="7425" repo="esphome" >}} by {{< ghuser name="nkinnan" >}} -- Add OHF logo to README {{< pr number="7509" repo="esphome" >}} by {{< ghuser name="mrdarrengriffin" >}} -- Bump pypa/gh-action-pypi-publish from 1.10.1 to 1.10.2 {{< pr number="7487" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- tcs34725: optimize fetch time with burst read for RGB and clear values {{< pr number="7494" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- tcs34725: Remove IR compensation and improve illuminance and color temperature handling in extreme conditions {{< pr number="7492" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [CI] Remove `sorted` from library include dirs {{< pr number="7526" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [wifi] Fix error message when no custom MAC is set {{< pr number="7515" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32] Add `ignore_efuse_custom_mac` config var {{< pr number="7527" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [mics_4514] Move consts to consts.py {{< pr number="7528" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix parsing of µs time periods in config {{< pr number="7495" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [web_server] Expose detail=all on all components {{< pr number="7531" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- [CI] Use a list when reading idedata for includes {{< pr number="7535" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Use "puremagic" instead of "magic" python module {{< pr number="7536" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [lvgl] Remap image to img in "set_style_*" {{< pr number="7546" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- CSE7766 needs even parity {{< pr number="7549" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) -- Allow use of all pulse count unit channels if needed. {{< pr number="7550" repo="esphome" >}} by {{< ghuser name="ToSa27" >}} -- [bang-bang] Remove `assert()` {{< pr number="7533" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [thermostat] Remove `assert()` {{< pr number="7544" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [bedjet_codec] Remove `assert()` {{< pr number="7543" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [audio_dac] [aic3204] Add new component + platform {{< pr number="7505" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [wifi] Replace `USE_ESP32_IGNORE_EFUSE_MAC_CRC` with IDF's `CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR` {{< pr number="7502" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump docker/setup-buildx-action from 3.6.1 to 3.7.1 in the docker-actions group across 1 directory {{< pr number="7542" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pypa/gh-action-pypi-publish from 1.10.2 to 1.10.3 {{< pr number="7541" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.7.0 to 6.9.0 in /.github/actions/build-image {{< pr number="7511" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [code-quality] fix clang-tidy md5 and hmac_md5 {{< pr number="7325" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy api {{< pr number="7279" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [lvgl] Bugfixes #3 {{< pr number="7472" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Feature/add seeed grove gmxxx multichannel gas support {{< pr number="4304" repo="esphome" >}} by {{< ghuser name="YorkshireIoT" >}} (new-integration) -- [lvgl] Fix: allow full range of styles on dropdown list. {{< pr number="7552" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [web_server] v3 entity grouping {{< pr number="6833" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} (breaking-change) -- Add Initial TE-M3200 pressure sensor support {{< pr number="6862" repo="esphome" >}} by {{< ghuser name="bakerkj" >}} (new-integration) -- Add Initial NPI-19 pressure sensor support {{< pr number="7181" repo="esphome" >}} by {{< ghuser name="bakerkj" >}} (new-integration) -- nau7802: new component {{< pr number="6291" repo="esphome" >}} by {{< ghuser name="cujomalainey" >}} (new-integration) -- Update webserver local assets to 20241007-025551 {{< pr number="7553" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [online_image] Bugfix: Use std::string instead of const char * {{< pr number="7556" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ili9xxx] Put display into sleep mode on shutdown. {{< pr number="7555" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump actions/upload-artifact from 4.4.0 to 4.4.1 {{< pr number="7559" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.0.2 to 4.1.0 in /.github/actions/restore-python {{< pr number="7560" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.0.2 to 4.1.0 {{< pr number="7558" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update radon_eye_listener.cpp for more possible variants {{< pr number="7567" repo="esphome" >}} by {{< ghuser name="baldisos" >}} -- [cst816] Allow skipping i2c probe {{< pr number="7557" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix text component {{< pr number="7563" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [template/binary_sensor] Implement `condition:` option as alternative to lambda. {{< pr number="7561" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump actions/upload-artifact from 4.4.1 to 4.4.2 {{< pr number="7569" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.1.0 to 4.1.1 {{< pr number="7570" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.1.0 to 4.1.1 in /.github/actions/restore-python {{< pr number="7571" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- fix uart settings check {{< pr number="7573" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [CI] failures when installing using apt-get. {{< pr number="7593" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [web_server] Event component grouping {{< pr number="7586" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- [touchscreen] Fix coordinates when using rotation {{< pr number="7591" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix update sequence when update is set to false (#5225) {{< pr number="7407" repo="esphome" >}} by {{< ghuser name="edge90" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.11.0.md b/content/changelog/2024.11.0.md deleted file mode 100644 index 203f566c93..0000000000 --- a/content/changelog/2024.11.0.md +++ /dev/null @@ -1,242 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.11.0." -title: "ESPHome 2024.11.0 - 20th November 2024" -params: - seo: - description: Changelog for ESPHome 2024.11.0. - image: /_static/changelog-2024.11.0.png ---- - -{{< imgtable >}} -"AXS15231","components/touchscreen/axs15231","axs15231.svg" -"ES8311","components/audio_dac/es8311","es8311.svg" -"i2c_device","components/i2c_device","i2c.svg" -"MAX17043","components/sensor/max17043","max17043.jpg" -"OpenTherm","components/opentherm","opentherm.png" -"TC74","components/sensor/tc74","tc74.jpg" -{{< /imgtable >}} -ESPHome has grown over time and become more friendly for vendors to create and pre-install ESPHome onto devices -they sell / give away / provide. We are seeing more devices with ESPHome pre-installed, and we are so happy to -see how accessible it is becoming for regular Home Assistant users (not just developers or tech-savvy people) to -get their hands on a device that; A, works out of the box, B, works locally, and C can be fully customized by -the person who bought it if they choose to do so. -Because there are now more devices you can buy and do not have to install ESPHome onto yourself, we have made some -updates to allow ignoring these discovered devices from the ESPHome Dashboard as for most of these devices, you -don't actually need to **take control** and write and manage your own firmware for them. - -Further to this, we have slightly changed the identity of ESPHome as an add-on in Home Assistant. It is now called -**ESPHome Device Compiler**, because that is what it does, and most people do not need it if they are not going to -actually compile anything. - -## OpenTherm - -This release brings {{< docref "/components/opentherm" >}} support to ESPHome. Please see the -{{< docref "/components/opentherm" "documentation" >}} for detailed information about it and how to use it. - -## ESPHome `armv7` Docker Support - -We will be retiring ESPHome's Docker support for `armv7` hardware in the February 2025 release. - -This is due to both waning support as it relates to tooling and performance reasons. We strongly recommend moving to a -more modern architecture, especially if you're using the ESPHome Device Compiler to build/compile firmware for your -devices. - - - -## Release 2024.11.1 - November 22 - -- [http_request] Fix within context with parameters. (Bugfix) {{< pr number="7790" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [rtttl] Clamp gain between 0 and 1 {{< pr number="7793" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [speaker] Add missing auto-load for `audio` {{< pr number="7794" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [qspi_dbi] Fix garbled graphics on RM690B0 {{< pr number="7795" repo="esphome" >}} by {{< ghuser name="manuelkasper" >}} -- Check for min_version earlier in validation {{< pr number="7797" repo="esphome" >}} by {{< ghuser name="spuder" >}} -- Fix for OTA mode not activating in safe_mode when OTA section has an on_xxxx action {{< pr number="7796" repo="esphome" >}} by {{< ghuser name="Dilbert66" >}} -- Ensure storage I/O for ignored devices runs in the executor {{< pr number="7792" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2024.11.2 - November 27 - -- [lvgl] Bugfixes {{< pr number="7803" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [docker] Leave run-time required libraries installed. {{< pr number="7804" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [qspi_dbi] Fix init sequences (Bugfix) {{< pr number="7805" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix modbus crashing when bad data returned {{< pr number="7810" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [Modbus Controller] Fix issue #6477. Online automation triggering Offline {{< pr number="7801" repo="esphome" >}} by {{< ghuser name="0x3333" >}} -- [fix] Status sensor does not check if required network component is missing {{< pr number="7734" repo="esphome" >}} by {{< ghuser name="rvalitov" >}} -- keypad binary sensors should be initially off {{< pr number="7808" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix 32 char SSIDs {{< pr number="7834" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [honeywell] use warning instead of failing {{< pr number="7862" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - -## Release 2024.11.3 - December 6 - -- [opentherm] Fix out of memory errors on ESP8266 {{< pr number="7835" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} -- fix local time timestamp calculation {{< pr number="7807" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [online_image]Don't access decoder if not initialized {{< pr number="7882" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Add IRAM_ATTR to all functions used during interrupts on esp8266 chips. {{< pr number="7840" repo="esphome" >}} by {{< ghuser name="FreeBear-nc" >}} -- [st7920] Remove unnecessary warning when drawing outside display bounds {{< pr number="7868" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix recalc_timestamp_utc {{< pr number="7894" repo="esphome" >}} by {{< ghuser name="RouNNdeL" >}} -- Cast port to int for ota pushing {{< pr number="7888" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Bugfixes {{< pr number="7896" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix msgbox content {{< pr number="7912" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32] Fix crash with empty `platformio_options:` value {{< pr number="7920" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -## Full list of changes - -### New Features - -- Support ignoring discovered devices from the dashboard {{< pr number="7665" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- [media_player] Add new media player conditions {{< pr number="7667" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-feature) - -### New Components - -- Add TC74 temperature sensor {{< pr number="7460" repo="esphome" >}} by {{< ghuser name="sethgirvan" >}} (new-integration) -- Add support for Analog Devices MAX17043 battery fuel gauge {{< pr number="7522" repo="esphome" >}} by {{< ghuser name="blacknell" >}} (new-integration) -- [speaker, i2s_audio] I2S Speaker implementation using a ring buffer {{< pr number="7605" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [axs15231] Touchscreen driver {{< pr number="7592" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- i2c_device {{< pr number="7641" repo="esphome" >}} by {{< ghuser name="gabest11" >}} (new-integration) -- [es8311] Add es8311 dac component {{< pr number="7693" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add OpenTherm component (part 3: rest of the sensors) {{< pr number="7676" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} (new-integration) - -### New Platforms - -- [qspi_dbi] Rename from qspi_amoled, add features {{< pr number="7594" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) (new-platform) -- Add OpenTherm component (part 2.1: sensor platform) {{< pr number="7529" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} (new-platform) - -### Breaking Changes - -- [qspi_dbi] Rename from qspi_amoled, add features {{< pr number="7594" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) (new-platform) -- [lvgl] light schema should require `widget:` not `led:` (Bugfix) {{< pr number="7649" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [http_request] Always return defined server response status {{< pr number="7689" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [touchscreen] Calibration fixes {{< pr number="7704" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [spi_device] rename mode to spi_mode {{< pr number="7724" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Update UNIT_VOLT_AMPS_REACTIVE = "var" (Currently 'VAR') {{< pr number="7643" repo="esphome" >}} by {{< ghuser name="Roving-Ronin" >}} (breaking-change) - -### Beta Changes - -- Fix temperature and humidity for bme680 with bsec2 {{< pr number="7728" repo="esphome" >}} by {{< ghuser name="luar123" >}} -- [i2s_audio] Bugfix: Adjust I2S speaker setup priority {{< pr number="7759" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Update UNIT_VOLT_AMPS_REACTIVE = "var" (Currently 'VAR') {{< pr number="7643" repo="esphome" >}} by {{< ghuser name="Roving-Ronin" >}} (breaking-change) -- Fix reactive power unit of measurement from VAR to var {{< pr number="7757" repo="esphome" >}} by {{< ghuser name="felipecrs" >}} -- Disable bluetooth proxy during update {{< pr number="7695" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- ld2420: fix typo in log message {{< pr number="7758" repo="esphome" >}} by {{< ghuser name="bfabio" >}} -- TuyaFan control should use oscillation_type {{< pr number="7776" repo="esphome" >}} by {{< ghuser name="pethans" >}} -- Bump esphome-dashboard to 20241118.0 {{< pr number="7782" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [http_request] Feed watchdog timeout around http request functions {{< pr number="7786" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20241120.0 {{< pr number="7787" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Update `pillow` to 10.4.0 {{< pr number="7566" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- Bump actions/upload-artifact from 4.4.2 to 4.4.3 {{< pr number="7575" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [fix] ESP32-C6 Reset Reasons {{< pr number="7578" repo="esphome" >}} by {{< ghuser name="rvalitov" >}} -- [light] Add `initial_state` configuration {{< pr number="7577" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] failures when installing using apt-get. {{< pr number="7593" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [web_server] expose event compoent to REST {{< pr number="7587" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- Update test_build_components {{< pr number="7597" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [fix] ESP32-C6: internal temperature reporting {{< pr number="7579" repo="esphome" >}} by {{< ghuser name="rvalitov" >}} -- [code-quality] statsd component {{< pr number="7603" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [automation] Implement all and any condition shortcuts {{< pr number="7565" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add TC74 temperature sensor {{< pr number="7460" repo="esphome" >}} by {{< ghuser name="sethgirvan" >}} (new-integration) -- [display] filled_ring and filled_gauge methods added {{< pr number="7420" repo="esphome" >}} by {{< ghuser name="artemyevav" >}} -- [fix] deprecated functions warnings for logger component with ESP IDF version 5.3.0+ {{< pr number="7600" repo="esphome" >}} by {{< ghuser name="rvalitov" >}} -- [lvgl] Implement better software rotation {{< pr number="7595" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [qspi_dbi] Rename from qspi_amoled, add features {{< pr number="7594" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) (new-platform) -- Add support for Analog Devices MAX17043 battery fuel gauge {{< pr number="7522" repo="esphome" >}} by {{< ghuser name="blacknell" >}} (new-integration) -- chore: bump pyyaml to 6.0.2 to support py3.13 build {{< pr number="7610" repo="esphome" >}} by {{< ghuser name="chenrui333" >}} -- chore: bump platformio to 6.1.16 to support py3.13 build {{< pr number="7590" repo="esphome" >}} by {{< ghuser name="chenrui333" >}} -- [speaker, i2s_audio] I2S Speaker implementation using a ring buffer {{< pr number="7605" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Bump arduino-mlx90393 to 1.0.2 {{< pr number="7618" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- [fix] ESP32-C6 BLE compile error {{< pr number="7580" repo="esphome" >}} by {{< ghuser name="rvalitov" >}} -- [axs15231] Touchscreen driver {{< pr number="7592" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [lvgl] Roller and Dropdown enhancements; {{< pr number="7608" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [code-quality] udp component {{< pr number="7602" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [lvgl] Revise code generation to allow early widget creation {{< pr number="7611" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Allow esphome::Image in lambda to update image source directly {{< pr number="7624" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Bump bme68x_bsec2 version to 1.8.2610 {{< pr number="7626" repo="esphome" >}} by {{< ghuser name="shvmm" >}} -- Update Pull request template {{< pr number="7620" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Defer display rotation reset until setup(). (Bugfix) {{< pr number="7627" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] light schema should require `widget:` not `led:` (Bugfix) {{< pr number="7649" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [image] Fix compile time problem with host image not using lvgl {{< pr number="7654" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix rotation code for 90deg (Bugfix) {{< pr number="7653" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Allow strings to be interpreted as integers (Bugfix) {{< pr number="7652" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [rtttl] Add `get_gain()` {{< pr number="7647" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- feat(MQTT): Add subscribe QoS to discovery {{< pr number="7648" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- i2c_device {{< pr number="7641" repo="esphome" >}} by {{< ghuser name="gabest11" >}} (new-integration) -- Bump actions/cache from 4.1.1 to 4.1.2 in /.github/actions/restore-python {{< pr number="7659" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.1.1 to 4.1.2 {{< pr number="7660" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [speaker, i2s_audio] Support audio_dac component, mute actions, and improved logging {{< pr number="7664" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- unified way how all platforms handle copy_files {{< pr number="7614" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- updating ESP32 board definitions {{< pr number="7650" repo="esphome" >}} by {{< ghuser name="asolochek" >}} -- Support ignoring discovered devices from the dashboard {{< pr number="7665" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Bump esphome-dashboard to 20241025.0 {{< pr number="7669" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- unified way how all platforms handle get_download_types {{< pr number="7617" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [media_player] Add new media player conditions {{< pr number="7667" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-feature) -- [code-quality] weikai.h {{< pr number="7601" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump actions/setup-python from 5.2.0 to 5.3.0 in /.github/actions/restore-python {{< pr number="7671" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.2.0 to 5.3.0 {{< pr number="7670" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [image][online_image][animation] Fix transparency in RGB565 {{< pr number="7631" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add OpenTherm component (part 2.1: sensor platform) {{< pr number="7529" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} (new-platform) -- gp8403 : Add the possibility to use substitution for channel selection {{< pr number="7681" repo="esphome" >}} by {{< ghuser name="SeByDocKy" >}} -- [lvgl] Implement qrcode {{< pr number="7623" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [bytebuffer] Rework ByteBuffer using templates {{< pr number="7638" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [http_request] Always return defined server response status {{< pr number="7689" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [font] Fix failure with bitmap fonts {{< pr number="7691" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [http_request] Add enum for status codes {{< pr number="7690" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Support W5500 SPI-Ethernet polling mode if framework is supported {{< pr number="7503" repo="esphome" >}} by {{< ghuser name="slakichi" >}} -- Add asdf to gitignore (and dockerignore) {{< pr number="7686" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- Add more prometheus metrics {{< pr number="7683" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- Mopeka Pro Check improvement to allow user to configure the sensor reporting for lower quality readings {{< pr number="7475" repo="esphome" >}} by {{< ghuser name="spbrogan" >}} -- fix(WiFi): Fix strncpy missing NULL terminator [-Werror=stringop-truncation] {{< pr number="7668" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- let make new platform implementation in external components {{< pr number="7615" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- remove use of delay {{< pr number="7680" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix build error {{< pr number="7694" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- fix: [climate] Allow substitutions in `visual.temperature_step.{target_temperature,current_temperature}` {{< pr number="7679" repo="esphome" >}} by {{< ghuser name="hostcc" >}} -- Add in area and device to the prometheus labels {{< pr number="7692" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- [http_request] Implement `on_error` trigger for requests {{< pr number="7696" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0 {{< pr number="7700" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [es8311] Add es8311 dac component {{< pr number="7693" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [sdl] Allow window to be resized. {{< pr number="7698" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add config for current temperature precision {{< pr number="7699" repo="esphome" >}} by {{< ghuser name="JasonN3" >}} -- [spi] Add mosi pin checks for displays {{< pr number="7702" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [CI] Fix webserver defines to be present based on platform, not just framework {{< pr number="7703" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [touchscreen] Calibration fixes {{< pr number="7704" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [font] Add support for "glyphsets" {{< pr number="7429" repo="esphome" >}} by {{< ghuser name="paravoid" >}} -- [lvlg] fix tests {{< pr number="7708" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32_ble] Add disconnect as a virtual function to `ESPBTClient` {{< pr number="7705" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- handle bad pin schemas {{< pr number="7711" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- datetime fix build_language_schema {{< pr number="7710" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [lvgl] Don't just throw key error if someone types a bad layout type {{< pr number="7722" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [spi_device] rename mode to spi_mode {{< pr number="7724" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- feat(MQTT): Add `enable`, `disable` and `enable_on_boot` {{< pr number="7716" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- [lvgl] Allow multiple LVGL instances {{< pr number="7712" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [fix] deprecated legacy driver tsens {{< pr number="7658" repo="esphome" >}} by {{< ghuser name="rvalitov" >}} -- [lvgl] Fix id config for the lvgl component (Bugfix) {{< pr number="7731" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.2 {{< pr number="7730" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- OTA: Fix IPv6 and multiple address support {{< pr number="7414" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Fix dashboard ip resolving {{< pr number="7747" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [docker] Bump curl, iputils-ping and libssl-dev {{< pr number="7748" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove the choice for MQTT logging if it is disabled {{< pr number="7723" repo="esphome" >}} by {{< ghuser name="solarkennedy" >}} -- [sensor] Make some values templatable {{< pr number="7735" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Implement keypads {{< pr number="7719" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [midea] Add temperature validation in do_follow_me method (bugfix) {{< pr number="7736" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- Add OpenTherm component (part 3: rest of the sensors) {{< pr number="7676" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} (new-integration) -- [i2s_audio] I2S speaker improvements {{< pr number="7749" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [opentherm] Message to string extend {{< pr number="7755" repo="esphome" >}} by {{< ghuser name="FreeBear-nc" >}} -- [sun] Implements `is_above_horizon()` {{< pr number="7754" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [core] Ring buffer write functions use const pointer parameter {{< pr number="7750" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [Modbus Controller] Added `on_online` and `on_offline` automation {{< pr number="7417" repo="esphome" >}} by {{< ghuser name="0x3333" >}} -- Updated dfplayer logging to be more user-friendly {{< pr number="7740" repo="esphome" >}} by {{< ghuser name="solarkennedy" >}} -- Fix temperature and humidity for bme680 with bsec2 {{< pr number="7728" repo="esphome" >}} by {{< ghuser name="luar123" >}} -- [i2s_audio] Bugfix: Adjust I2S speaker setup priority {{< pr number="7759" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Update UNIT_VOLT_AMPS_REACTIVE = "var" (Currently 'VAR') {{< pr number="7643" repo="esphome" >}} by {{< ghuser name="Roving-Ronin" >}} (breaking-change) -- Fix reactive power unit of measurement from VAR to var {{< pr number="7757" repo="esphome" >}} by {{< ghuser name="felipecrs" >}} -- Disable bluetooth proxy during update {{< pr number="7695" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- ld2420: fix typo in log message {{< pr number="7758" repo="esphome" >}} by {{< ghuser name="bfabio" >}} -- TuyaFan control should use oscillation_type {{< pr number="7776" repo="esphome" >}} by {{< ghuser name="pethans" >}} -- Bump esphome-dashboard to 20241118.0 {{< pr number="7782" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [http_request] Feed watchdog timeout around http request functions {{< pr number="7786" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20241120.0 {{< pr number="7787" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.12.0.md b/content/changelog/2024.12.0.md deleted file mode 100644 index d33dd803db..0000000000 --- a/content/changelog/2024.12.0.md +++ /dev/null @@ -1,207 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.12.0." -title: "ESPHome 2024.12.0 - 18th December 2024" -params: - seo: - description: Changelog for ESPHome 2024.12.0. - image: /_static/changelog-2024.12.0.png ---- - -{{< imgtable >}} -"Seeed Studio MR60BHA2 mmWave","components/seeed_mr60bha2","seeed_mr60bha2.jpg","" -"Seeed Studio MR60FDA2 mmWave","components/seeed_mr60fda2","seeed_mr60fda2.jpg","" -"H-bridge Switch","components/switch/hbridge","hbridge-relay.jpg","" -"Switch Binary Sensor","components/binary_sensor/switch","electric-switch.svg","dark-invert" -{{< /imgtable >}} - -## ESP-IDF - -ESPHome has now updated the core ESP32 code to use [ESP-IDF](https://github.com/espressif/esp-idf/) 5.1.5. -This is a major upgrade and should bring more features, chip support (Most notably the ESP32-C6 that people -keep raving on about) and in general more stability. - -To accommodate this change, ESPHome has moved away from the "official" platformio provided ESP32 platform, -and is now using a community fork [pioarduino/platform-espressif32](https://github.com/pioarduino/platform-espressif32) -as platformio has decided to stop providing ESP-IDF updates to their platform for Espressif chips. As a user, -you should not notice any difference. - -As we are unable to test every single component and board, there might be issues with specific configurations. -Please report these in the [ESPHome issue tracker](https://github.com/esphome/esphome/issues) on GitHub. - -## ESPHome `armv7` Docker Support - -We will be retiring ESPHome's Docker support for `armv7` hardware in the February 2025 release. - -This is due to both waning support as it relates to tooling and performance reasons. We strongly recommend moving to a -more modern architecture, especially if you're using the ESPHome Device Compiler to build/compile firmware for your -devices. - - - -## Release 2024.12.1 - December 19 - -- [core] Bugfix: Implement ring buffer with xRingbuffer {{< pr number="7973" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} - -## Release 2024.12.2 - December 20 - -- [esp32] Fix flash size warning when using IDF {{< pr number="7983" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_ble] Fix for Improv {{< pr number="7984" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2024.12.3 - January 17 - -- Fixed libretiny preference wrongly detecting change in the data to store {{< pr number="7990" repo="esphome" >}} by {{< ghuser name="szupi-ipuzs" >}} -- [http_request] Bugfix: run update function in a task {{< pr number="8018" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} - -## Release 2024.12.4 - January 17 - -- Bump python3-setuptools to 66.1.1-1+deb12u1 {{< pr number="8074" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add: Seeed Studio mr60fda2 mmwave sensor {{< pr number="7576" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-integration) -- Add: Seeed Studio MR60BHA2 mmWave Sensor {{< pr number="7589" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-integration) - -### New Platforms - -- binary_sensor for switch state {{< pr number="7819" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-platform) -- Add H-Bridge switch component {{< pr number="7421" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} (new-platform) - -### Breaking Changes - -- Fix entity name validation to allow "Off" and "On" {{< pr number="7821" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- MQTT sensors handling of publishing NaN values {{< pr number="7768" repo="esphome" >}} by {{< ghuser name="kbullet" >}} (breaking-change) -- Synchronise esp32 boards with platform version 51.03.07 {{< pr number="7945" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [sgp30] Set default update interval to 60s {{< pr number="7952" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- [const] Add RMT CONF variables to const.py {{< pr number="7953" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [sgp30] Set default update interval to 60s {{< pr number="7952" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [dallas_temp] Move delay_microseconds_safe to iram {{< pr number="7957" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [i2s_audio] Bugfix: Correctly set ring buffer size {{< pr number="7959" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [adc] Restore missing LIBRETINY code in a separated file {{< pr number="7955" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [font] cleanly handle font file format exception (Bugfix) {{< pr number="7970" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [dashboard] Accept basic auth header {{< pr number="7965" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20241217.1 {{< pr number="7971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32_ble] Use RAMAllocator to avoid panic abort from `new` {{< pr number="7936" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Bump codecov/codecov-action from 4 to 5 {{< pr number="7771" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [remote_base] Fix extra comma in dump raw {{< pr number="7774" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [nextion] New trigger `on_buffer_overflow` {{< pr number="7772" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- enable rp2040 for online_image {{< pr number="7769" repo="esphome" >}} by {{< ghuser name="afflux" >}} -- [nextion] Add publish actions {{< pr number="7646" repo="esphome" >}} by {{< ghuser name="pkejval" >}} -- [wifi] Make wifi_channel_() public {{< pr number="7818" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- feat(WiFi): Add wifi.configure action {{< pr number="7335" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- allow multiple graphical menus {{< pr number="7809" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Move `CONF_NAME_ADD_MAC_SUFFIX` to `const.py` {{< pr number="7820" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- binary_sensor for switch state {{< pr number="7819" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-platform) -- [nextion] Remove assignment within `if` {{< pr number="7824" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ota] `void` functions should return nothing {{< pr number="7825" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [safe_mode] Remove unused capture {{< pr number="7826" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [stepper] Remove unnecessary `#include` {{< pr number="7827" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sx1509] Fix up includes {{< pr number="7828" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [uart] `void` functions should return nothing {{< pr number="7829" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [audio] Header modernization {{< pr number="7832" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [opentherm] Follow variable naming convention {{< pr number="7833" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [opentherm] Add nolint for 8266 static global {{< pr number="7837" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [helpers] Add NOLINT for Mutex private field `handle_` {{< pr number="7838" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add waveshare 1 45 in v2 b support {{< pr number="7052" repo="esphome" >}} by {{< ghuser name="programmingbgloDE" >}} -- added Waveshare BWR Mode for the 7.5in Display {{< pr number="7687" repo="esphome" >}} by {{< ghuser name="JonasB2497" >}} -- [homeassistant.number] Return when value not set {{< pr number="7839" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Add/update some system include paths {{< pr number="7831" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- add on_key trigger to matrix_keypad {{< pr number="7830" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add: Seeed Studio mr60fda2 mmwave sensor {{< pr number="7576" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-integration) -- [lvgl] clang-tidy fixes for #7822 {{< pr number="7843" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [xiaomi_ble] clang-tidy fixes for #7822 {{< pr number="7860" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [wireguard] clang-tidy fixes for #7822 {{< pr number="7859" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [dsmr] clang-tidy fixes for #7822 {{< pr number="7848" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix entity name validation to allow "Off" and "On" {{< pr number="7821" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [camera_web_server] Add `NOLINT` due to naming {{< pr number="7823" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [display_menu_base] clang-tidy fixes for #7822 {{< pr number="7847" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nextion] clang-tidy fixes for #7822 {{< pr number="7852" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [shelly_dimmer] clang-tidy fixes for #7822 {{< pr number="7844" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sim800l] clang-tidy fixes for #7822 {{< pr number="7856" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nfc, pn532, pn7150, pn7160] clang-tidy fixes for #7822 {{< pr number="7853" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [output] clang-tidy fixes for #7822 {{< pr number="7854" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sun_gtil2] clang-tidy fixes for #7822 {{< pr number="7858" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [pipsolar] clang-tidy fixes for #7822 {{< pr number="7855" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ltr501] clang-tidy fixes for #7822 {{< pr number="7850" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [cse7766] clang-tidy fixes for #7822 {{< pr number="7846" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [alarm_control_panel] clang-tidy fixes for #7822 {{< pr number="7845" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sprinkler] clang-tidy fixes for #7822 {{< pr number="7857" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [haier] clang-tidy fixes for #7822 {{< pr number="7849" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [mqtt] clang-tidy fixes for #7822 {{< pr number="7851" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [helpers, optional] clang-tidy fixes for #7822 {{< pr number="7841" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Move `USE_CAPTIVE_PORTAL` into all define groups it can be used with {{< pr number="7863" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump docker/build-push-action from 6.9.0 to 6.10.0 in /.github/actions/build-image {{< pr number="7866" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- python lint for platform components {{< pr number="7864" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [max31865] clang-tidy fixes for #7822 {{< pr number="7876" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_ble] clang-tidy fixes for #7822 {{< pr number="7883" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [mqtt] clang-tidy fixes for #7822 {{< pr number="7877" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [uln2003] clang-tidy fixes for #7822 {{< pr number="7881" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [rotary_encoder] clang-tidy fixes for #7822 {{< pr number="7880" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [pca6416a, pca9554] clang-tidy fixes for #7822 {{< pr number="7879" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nextion] clang-tidy fixes for #7822 {{< pr number="7878" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [various] clang-tidy fixes for #7822 {{< pr number="7874" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [logger] clang-tidy fixes for #7822 {{< pr number="7875" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ezo] clang-tidy fixes for #7822 {{< pr number="7873" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [apds9306] clang-tidy fixes for #7822 {{< pr number="7872" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [dht] clang-tidy fixes for #7822 {{< pr number="7871" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [network] clang-tidy fixes for #7822 {{< pr number="7870" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [lvgl] Make image update via lambda work {{< pr number="7886" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [deep_sleep] fix deep_sleep not keeping awake when sleep_duration is defined {{< pr number="7885" repo="esphome" >}} by {{< ghuser name="makstech" >}} -- [hx711] clang-tidy fixes for #7822 {{< pr number="7900" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [modbus_controller] Clang fixes {{< pr number="7899" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add H-Bridge switch component {{< pr number="7421" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} (new-platform) -- [CI] Bump GHA runners to `ubuntu-24.04` {{< pr number="7905" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [font et. al.] Remove explicit check for pillow installed. {{< pr number="7891" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [CI] Update clang-tidy to 18.1.3 {{< pr number="7822" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- MQTT sensors handling of publishing NaN values {{< pr number="7768" repo="esphome" >}} by {{< ghuser name="kbullet" >}} (breaking-change) -- [ble] Allow setting shorter name for ble advertisements {{< pr number="7867" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [font] Restore correct default glyphs for bitmap fonts {{< pr number="7907" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [helpers] clang-tidy fix for #7706 {{< pr number="7909" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [docker] Fix clang-tidy installation {{< pr number="7910" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sntp] Resolve warnings from ESP-IDF 5.x {{< pr number="7913" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add strftime variant with background color {{< pr number="7714" repo="esphome" >}} by {{< ghuser name="mikosoft83" >}} -- [i2s_audio] Bugfix: Follow configured bits per sample {{< pr number="7916" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Haier AC quiet mode switch fix {{< pr number="7902" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- [CI] Update clang-tidy to 18.1.8 {{< pr number="7915" repo="esphome" >}} by {{< ghuser name="syssi" >}} -- [i2s_audio] Speaker type fix {{< pr number="7919" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_rmt_led_strip] Add `COMPONENT_SCHEMA` extending {{< pr number="7918" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32] Use pioarduino + IDF 5.1.5 as default for IDF builds {{< pr number="7706" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump actions/cache from 4.1.2 to 4.2.0 {{< pr number="7926" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.1.2 to 4.2.0 in /.github/actions/restore-python {{< pr number="7925" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add OCI Image Labels {{< pr number="7924" repo="esphome" >}} by {{< ghuser name="Passific" >}} -- Move docker oci labels to correct image {{< pr number="7927" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update project description {{< pr number="7928" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [modbus] More clean-up {{< pr number="7921" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add: Seeed Studio MR60BHA2 mmWave Sensor {{< pr number="7589" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-integration) -- Optimize QMC5883L reads {{< pr number="7889" repo="esphome" >}} by {{< ghuser name="dnschneid" >}} -- [display] Fix strftime overload ignoring alignment {{< pr number="7937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add font anti-aliasing for grayscale display {{< pr number="7934" repo="esphome" >}} by {{< ghuser name="koreapyj" >}} -- Bump pypa/gh-action-pypi-publish from 1.12.2 to 1.12.3 {{< pr number="7941" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [adc] Split files by platform {{< pr number="7940" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [const] Move `CONF_TEMPERATURE_COMPENSATION` to common const.py {{< pr number="7943" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Fix image `mode` property (Bugfix) {{< pr number="7938" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Add `on_change` event {{< pr number="7939" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Synchronise esp32 boards with platform version 51.03.07 {{< pr number="7945" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [i2c] Use correct macro to determine number of i2c peripherals for idf {{< pr number="7947" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [const] Add RMT CONF variables to const.py {{< pr number="7953" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [sgp30] Set default update interval to 60s {{< pr number="7952" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [dallas_temp] Move delay_microseconds_safe to iram {{< pr number="7957" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [i2s_audio] Bugfix: Correctly set ring buffer size {{< pr number="7959" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [adc] Restore missing LIBRETINY code in a separated file {{< pr number="7955" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [font] cleanly handle font file format exception (Bugfix) {{< pr number="7970" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [dashboard] Accept basic auth header {{< pr number="7965" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20241217.1 {{< pr number="7971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32_ble] Use RAMAllocator to avoid panic abort from `new` {{< pr number="7936" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.2.0.md b/content/changelog/2024.2.0.md deleted file mode 100644 index d9415b7967..0000000000 --- a/content/changelog/2024.2.0.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.2.0." -title: "ESPHome 2024.2.0 - 21st February 2024" -params: - seo: - description: Changelog for ESPHome 2024.2.0. - image: /_static/changelog-2024.2.0.png ---- - -{{< imgtable >}} -"micro Wake Word","components/micro_wake_word","voice-assistant.svg","dark-invert" -"AS5600","components/sensor/as5600","as5600.jpg","" -"ST7567","components/display/st7567","st7567.jpg","" -"BME280 SPI","components/sensor/bme280","bme280.jpg","" -"VEML3235","components/sensor/veml3235","veml3235.jpg","" -"Honeywell HIH I2C","components/sensor/honeywell_hih_i2c","honeywellhih.jpg","" -"Combination","components/sensor/combination","function.svg","dark-invert" -{{< /imgtable >}} - -## micro Wake Word - -ESPHome implements an on-device wake word detection framework from [microWakeWord](https://github.com/kahrendt/microWakeWord). -See the {{< docref "/components/micro_wake_word" "component documentation" >}} for details on how to use it. - -Check out the live stream replay below for more details about how it works and came to be. - - - - -## BME280 changes - -{{< ghuser name="apbodrov" >}} has added support for the BME280 sensor over SPI. This change is a breaking change -for any existing configurations using the BME280 over I2C as the platform name has been changed from -`bme280` to `bme280_i2c`. There are no other configuration changes required to continue using the BME280 over I2C. -See the {{< docref "/components/sensor/bme280" "component documentation" >}} for the latest configuration variables. - -## CSE7766 changes - -{{< ghuser name="ssieb" >}} has changed the CSE7766 sensor from appearing to be a polling component. -It has a high update rate, so if you don't want to send a lot of data to HA, you can -add the [throttle_average](/components/sensor#sensor-filters) filter -with the time period you were using for the update interval (the default is 60s) to each -sensor. The example in the sensor doc page has been updated to show this. - - - -## Release 2024.2.1 - February 26 - -- Add missing timeout to "async_request" {{< pr number="6267" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump zeroconf timeout to 3000 {{< pr number="6270" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- web_server: Add a position property for cover entities that have the supports position trait {{< pr number="6269" repo="esphome" >}} by {{< ghuser name="DanielBaulig" >}} -- allow multiple emc2101 {{< pr number="6272" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix RP2040 SPI pin validation {{< pr number="6277" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- dashboard: move storage json update to a background task in edit save {{< pr number="6280" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- make output optional for speed fan {{< pr number="6274" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix throttle average nan handling {{< pr number="6275" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix thermostat supplemental actions {{< pr number="6282" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2024.2.2 - March 6 - -- CSE7766: Fix energy calculation {{< pr number="6286" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- handling with the negative temperature in the sensor tmp102 {{< pr number="6316" repo="esphome" >}} by {{< ghuser name="FlyingFeng2021" >}} -- fix tmp102 negative calculation {{< pr number="6320" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- auto load output for now {{< pr number="6309" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add wake word phrase to voice assistant start command {{< pr number="6290" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- feat: add AS5600 component/sensor {{< pr number="5174" repo="esphome" >}} by {{< ghuser name="ammmze" >}} (new-integration) -- Support for ST7567 display 128x64 (I2C, SPI) {{< pr number="5952" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- BME280 SPI {{< pr number="5538" repo="esphome" >}} by {{< ghuser name="apbodrov" >}} (new-integration) (breaking-change) -- Add support for VEML3235 lux sensor {{< pr number="5959" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Add support of Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensor {{< pr number="5730" repo="esphome" >}} by {{< ghuser name="Benichou34" >}} (new-integration) -- Add combination sensor and remove absorbed kalman_combinator component {{< pr number="5438" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) (breaking-change) -- Add micro_wake_word component {{< pr number="6136" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) - -### Breaking Changes - -- PMSx003 add relevant device and state classes to default config {{< pr number="5633" repo="esphome" >}} by {{< ghuser name="wheimbigner" >}} (breaking-change) -- BME280 SPI {{< pr number="5538" repo="esphome" >}} by {{< ghuser name="apbodrov" >}} (new-integration) (breaking-change) -- convert cse7766 to non-polling {{< pr number="6095" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) -- Add combination sensor and remove absorbed kalman_combinator component {{< pr number="5438" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) (breaking-change) - -### Beta Changes - -- AUTO_LOAD `sensor` for `shelly_dimmer` {{< pr number="6223" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add more debugging logs to microWakeWord {{< pr number="6238" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Fix to RF receiver for Drayton Digistat heating controller {{< pr number="6235" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- WRGB Use correct multiplier {{< pr number="6237" repo="esphome" >}} by {{< ghuser name="mhetzi" >}} -- Add optional minimum esphome version to microWakeWord manifest {{< pr number="6240" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix xl9535 pin reads {{< pr number="6242" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- hold interrupt disable for dallas one-wire {{< pr number="6244" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix tm1651 enum {{< pr number="6248" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Clear UART read buffer before sending next command {{< pr number="6200" repo="esphome" >}} by {{< ghuser name="fototakas" >}} -- Voice Assistant: add on_idle trigger and fix nevermind {{< pr number="6141" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Tuya Fan component fix to handle enum datapoint type {{< pr number="6135" repo="esphome" >}} by {{< ghuser name="sibowler" >}} - -### All changes - -- Bump esptool from 4.6.2 to 4.7.0 {{< pr number="5935" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/download-artifact from 3.0.2 to 4.0.0 {{< pr number="5936" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump build-image action versions {{< pr number="5954" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Revert "Bump build-image action versions" {{< pr number="5955" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Revert "Bump actions/download-artifact from 3.0.2 to 4.0.0" {{< pr number="5956" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump zeroconf from 0.130.0 to 0.131.0 {{< pr number="5967" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add ability to lock to set mode {{< pr number="5924" repo="esphome" >}} by {{< ghuser name="ysmilda" >}} -- feat: add AS5600 component/sensor {{< pr number="5174" repo="esphome" >}} by {{< ghuser name="ammmze" >}} (new-integration) -- Add default substitutions for package includes {{< pr number="5752" repo="esphome" >}} by {{< ghuser name="mknjc" >}} -- Add gradient option to addressable color wipe effect {{< pr number="5689" repo="esphome" >}} by {{< ghuser name="lifeisafractal" >}} -- Added alarm processing for Haier component (hOn protocol) {{< pr number="5965" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Allow haier remote protocol to use lambdas {{< pr number="5898" repo="esphome" >}} by {{< ghuser name="catlee" >}} -- PMSx003 add relevant device and state classes to default config {{< pr number="5633" repo="esphome" >}} by {{< ghuser name="wheimbigner" >}} (breaking-change) -- Add waveshare 2.7in V2 model {{< pr number="5903" repo="esphome" >}} by {{< ghuser name="gumulka" >}} -- Add support for waveshare 2.9in B V3 version {{< pr number="5902" repo="esphome" >}} by {{< ghuser name="gumulka" >}} -- Fix pin reuse in test1 {{< pr number="5978" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add Waveshare 1.47in 172x320 to ST7789v component {{< pr number="5884" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- (fingerprint_grow) Added on_finger_scan_invalid automation. {{< pr number="5885" repo="esphome" >}} by {{< ghuser name="RubenNL" >}} -- Alarm panel: Add changes to support enhanced features {{< pr number="5671" repo="esphome" >}} by {{< ghuser name="hwstar" >}} -- support default pins for adafruit esp32 feather v2 {{< pr number="5482" repo="esphome" >}} by {{< ghuser name="sbrudenell" >}} -- Bug: Unwanted change resistance in x9c component {{< pr number="5483" repo="esphome" >}} by {{< ghuser name="fizista" >}} -- Improvements to RF receiver for Drayton Digistat heating controller {{< pr number="5504" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- Reduce memory usage with StringRef in MQTT Components {{< pr number="5719" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Nextion allow underscore on names {{< pr number="5979" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add Keeloq RF protocol {{< pr number="5511" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- Add a Binary Sensor Filter for state settling {{< pr number="5900" repo="esphome" >}} by {{< ghuser name="cottsay" >}} -- Lint the script folder files {{< pr number="5991" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- web_server support for home assistant like styling {{< pr number="5854" repo="esphome" >}} by {{< ghuser name="afarago" >}} -- [Touchscreen] Add expire of touch record. {{< pr number="5986" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- Support for ST7567 display 128x64 (I2C, SPI) {{< pr number="5952" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Add constants used by multiple display drivers to global const.py {{< pr number="6033" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Nextion queue size {{< pr number="6029" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Ble client additions and fixes {{< pr number="5277" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- HaierProtocol library updated to 0.9.25 to fix the answer_timeout bug {{< pr number="6015" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- GT911 touchscreen: Fix bug causing touch button release to fail {{< pr number="6042" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Display: Introduce `draw_pixels_at()` method for fast block display rendering {{< pr number="6034" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- clang-format and clang-tidy scripts: More robust algorithm to find correct executable {{< pr number="6041" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Don't crash with invalid adc pin {{< pr number="6059" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add questionmark to default glyphs. {{< pr number="6053" repo="esphome" >}} by {{< ghuser name="RubenNL" >}} -- pylontech: fix voltage_low and voltage_high wrong unit {{< pr number="6060" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- Bump flake8 from 6.1.0 to 7.0.0 {{< pr number="6058" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Nextion enable upload from https when using esp-idf {{< pr number="6051" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Extends UART change at runtime to ESP8266 {{< pr number="6019" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Nextion draw QR code at runtime {{< pr number="6027" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Extend i2s config options {{< pr number="6056" repo="esphome" >}} by {{< ghuser name="Hadatko" >}} -- Add getter for image data_start {{< pr number="6036" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump hypothesis to 6.92.1 {{< pr number="6011" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump recommended ESP32 IDF to 4.4.6 {{< pr number="6048" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump pytest from 7.4.3 to 7.4.4 {{< pr number="6046" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- dashboard: refactor ping implementation to be more efficient {{< pr number="6002" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump pytest-asyncio from 0.23.2 to 0.23.3 {{< pr number="6047" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 23.12.0 to 23.12.1 {{< pr number="6018" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Run python tests on windows and macos {{< pr number="6010" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- BME280 SPI {{< pr number="5538" repo="esphome" >}} by {{< ghuser name="apbodrov" >}} (new-integration) (breaking-change) -- Actions to enable and disable WireGuard connection {{< pr number="5690" repo="esphome" >}} by {{< ghuser name="droscy" >}} -- hydreon_rgxx - fix missing cg.add(var.set_model(...)) {{< pr number="6065" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- Bump pillow to 10.2.0. {{< pr number="6091" repo="esphome" >}} by {{< ghuser name="pfrenssen" >}} -- convert cse7766 to non-polling {{< pr number="6095" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) -- Use touch state from ft63x6 driver. {{< pr number="6055" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- update script/setup so it works fine on windows {{< pr number="6087" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- add Pico-ResTouch-LCD-3.5 {{< pr number="6078" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Revert "add Pico-ResTouch-LCD-3.5" {{< pr number="6098" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Add triangle shapes to display component {{< pr number="6096" repo="esphome" >}} by {{< ghuser name="mathieu-mp" >}} -- Fingerprint_grow: Trigger on finger scan start and on finger scan misplaced {{< pr number="6003" repo="esphome" >}} by {{< ghuser name="alexborro" >}} -- Add continuous option to the graph {{< pr number="6093" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add NFC binary sensor platform {{< pr number="6068" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Socket: Add recvfrom method to receive UDP with source address. {{< pr number="6103" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add support for VEML3235 lux sensor {{< pr number="5959" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- CV: tidy up Schema wrapper {{< pr number="6105" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support X.509 client certificates for MQTT. {{< pr number="5778" repo="esphome" >}} by {{< ghuser name="h2zero" >}} -- Fix color observation for triangle outline in display component {{< pr number="6107" repo="esphome" >}} by {{< ghuser name="mathieu-mp" >}} -- Add support of Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensor {{< pr number="5730" repo="esphome" >}} by {{< ghuser name="Benichou34" >}} (new-integration) -- Proposal: Test yaml for each component {{< pr number="5398" repo="esphome" >}} by {{< ghuser name="Fabian-Schmidt" >}} -- WiFi fast_connect: save/load BSSID and channel for faster connect from sleep {{< pr number="5931" repo="esphome" >}} by {{< ghuser name="rguca" >}} -- Fixes Waveshare 7.5in B V2 and V3 {{< pr number="6079" repo="esphome" >}} by {{< ghuser name="Pofilo" >}} -- Add combination sensor and remove absorbed kalman_combinator component {{< pr number="5438" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) (breaking-change) -- Bump platformio from 6.1.11 to 6.1.13 {{< pr number="6086" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 3.3.2 to 4.0.0 {{< pr number="6110" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Enable networking and some other components on host platform {{< pr number="6114" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix time component for host platform {{< pr number="6118" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add quad spi features {{< pr number="5925" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- add AM2120 device type {{< pr number="6115" repo="esphome" >}} by {{< ghuser name="alexbuit" >}} -- Add support for Waveshare EPD 2.13" V3 {{< pr number="5363" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- OTA 2 which confirm each written chunk {{< pr number="6066" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Remove optional<> for pointer types {{< pr number="6120" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Improve temperature precision in BME280 and BMP280 {{< pr number="6124" repo="esphome" >}} by {{< ghuser name="jxl77" >}} -- Nextion TFT upload IDF memory optimization {{< pr number="6128" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add support for Pico-ResTouch-LCD-3.5 to ili9xxx driver {{< pr number="6129" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Ensure filename is shown when YAML raises an error {{< pr number="6139" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- ILI9XXX: Restore offset usage in set_addr_window {{< pr number="6147" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Minimum 1 for full_update_every to prevent IntegerDivideByZero. {{< pr number="6150" repo="esphome" >}} by {{< ghuser name="RubenNL" >}} -- Support tri-color waveshare eink displays 2.7inch B and B V2 {{< pr number="4238" repo="esphome" >}} by {{< ghuser name="rnauber" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="6158" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- dfrobot_sen0395: Use setLatency instead of outputLatency {{< pr number="5665" repo="esphome" >}} by {{< ghuser name="jfroy" >}} -- Add some components to the new testing framework (A part 1) {{< pr number="6142" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- WRGB or RGBW? WS2814 {{< pr number="6164" repo="esphome" >}} by {{< ghuser name="mhetzi" >}} -- Add some components to the new testing framework (A part 2) {{< pr number="6162" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump aioesphomeapi to 21.0.2 {{< pr number="6188" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add some components to the new testing framework (B) {{< pr number="6173" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add "transformer_active" flag for use in effects. {{< pr number="6157" repo="esphome" >}} by {{< ghuser name="TikiBill" >}} -- CSE7766: fix power and current measurements at low loads {{< pr number="6180" repo="esphome" >}} by {{< ghuser name="twasilczyk" >}} -- host platform: improvements and bugfixes {{< pr number="6137" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- WLED Sync fix and BK72XX support {{< pr number="6190" repo="esphome" >}} by {{< ghuser name="ChuckMash" >}} -- Add missing vector.h for lightwaverf {{< pr number="6196" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (C) {{< pr number="6174" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- update docstrings in cpp_generator.py {{< pr number="6212" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fixed group mask logic for WLED Sync fix {{< pr number="6193" repo="esphome" >}} by {{< ghuser name="ChuckMash" >}} -- Add micro_wake_word component {{< pr number="6136" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- AUTO_LOAD `sensor` for `shelly_dimmer` {{< pr number="6223" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add more debugging logs to microWakeWord {{< pr number="6238" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Fix to RF receiver for Drayton Digistat heating controller {{< pr number="6235" repo="esphome" >}} by {{< ghuser name="marshn" >}} -- WRGB Use correct multiplier {{< pr number="6237" repo="esphome" >}} by {{< ghuser name="mhetzi" >}} -- Add optional minimum esphome version to microWakeWord manifest {{< pr number="6240" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix xl9535 pin reads {{< pr number="6242" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- hold interrupt disable for dallas one-wire {{< pr number="6244" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Fix tm1651 enum {{< pr number="6248" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Clear UART read buffer before sending next command {{< pr number="6200" repo="esphome" >}} by {{< ghuser name="fototakas" >}} -- Voice Assistant: add on_idle trigger and fix nevermind {{< pr number="6141" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Tuya Fan component fix to handle enum datapoint type {{< pr number="6135" repo="esphome" >}} by {{< ghuser name="sibowler" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.3.0.md b/content/changelog/2024.3.0.md deleted file mode 100644 index aecbfa39d5..0000000000 --- a/content/changelog/2024.3.0.md +++ /dev/null @@ -1,252 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.3.0." -title: "ESPHome 2024.3.0 - 20th March 2024" -params: - seo: - description: Changelog for ESPHome 2024.3.0. - image: /_static/changelog-2024.3.0.png ---- - -{{< imgtable >}} -"Datetime Core","components/datetime/index","clock-outline.svg","dark-invert" -"Template Datetime","components/datetime/template","description.svg","dark-invert" -"AM2315C","components/sensor/am2315c","am2315c.jpg","" -"HTU31D","components/sensor/htu31d","htu31d.jpg","" -"MS8607","components/sensor/ms8607","ms8607.jpg","" -"AGS10","components/sensor/ags10","ags10.jpg","" -"VEML6030","components/sensor/veml7700","veml6030.jpg","" -"VEML7700","components/sensor/veml7700","veml7700.jpg","" -"MR24HPC1 mmWave","components/seeed_mr24hpc1","seeed-mr24hpc1.jpg","" -"ADS1118","components/sensor/ads1118","ads1118.jpg","" -"CST816","components/touchscreen/cst816","cst816.jpg","" -"CST226","components/touchscreen/cst226","t4-s3.jpg","" -"RPI_DPI_RGB","components/display/rpi_dpi_rgb","waveshare_touch-s3.jpg","" -"Quad SPI AMOLED","components/display/qspi_amoled","t4-s3.jpg","" -"ST7701S","components/display/st7701s","indicator.jpg","" -"ADE7880","components/sensor/ade7880","ade7880.svg","" -"Emmeti","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Uponor Smatrix","components/uponor_smatrix","uponor.svg","" -"Kamstrup KMP","components/sensor/kamstrup_kmp","kamstrup_kmp.jpg","" -"Template Fan","components/fan/template","description.svg","dark-invert" -{{< /imgtable >}} - -## Dates - -ESPHome now has support for `date` entities that can be set from the frontend (like Home Assistant) for -you to check against and execute automations in the future. - -ESPHome Dates require Home Assistant 2024.4 or later. - -## IPv6 - -ESPHome is now prepared for the future! The future that is the old IPv6 that is. -Dualstack is added and it could now have up to 5 ip addresses of any type, and communication with Home assistant, -MQTT and NTP works with IPv6. ESPHome still depends on IPv4, but the crystal ball shows sign of IPv6-only networks. - -If you are building an {{< docref "/components/external_components" >}} or you use -`network::get_ip_address()`, `wifi::global_wifi_component->get_ip_address()` or -`ethernet::global_eth_component->get_ip_address()`, these functions have been renamed to -`::get_ip_addresses()` respectively and now return a list of all IP addresses. - - - -## Release 2024.3.1 - March 27 - -- AHT10: Fix bug {{< pr number="6409" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- microWakeWord: Fix model path joining {{< pr number="6426" repo="esphome" >}} by {{< ghuser name="ebw44" >}} -- Don't compile strptime unless its required {{< pr number="6424" repo="esphome" >}} by {{< ghuser name="gabest11" >}} -- Fix editor live validation {{< pr number="6431" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Release 2024.3.2 - April 4 - -- Fix logger compile error on ESP32-C6 {{< pr number="6323" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Add missing ethernet types {{< pr number="6444" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- fix: changing the content source when playing is paused blocks the player {{< pr number="6454" repo="esphome" >}} by {{< ghuser name="NewoPL" >}} - -## Thank you for your support - -We would like to thank all Home Assistant Cloud subscribers for their support. It allows [Nabu Casa](https://nabucasa.com/) to -employ two developers to maintain and further develop the ESPHome project. - -## Full list of changes - -### New Components - -- New component: ADE7880 voltage/current/power/energy sensor {{< pr number="5242" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} (new-integration) -- Add Uponor Smatrix component {{< pr number="5769" repo="esphome" >}} by {{< ghuser name="kroimon" >}} (new-integration) -- Support for MS8607 PHT (Pressure Humidity Temperature) sensor {{< pr number="3307" repo="esphome" >}} by {{< ghuser name="e28eta" >}} (new-integration) -- Add datetime date entities {{< pr number="6191" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} (new-integration) -- Add AGS10 Sensor {{< pr number="6070" repo="esphome" >}} by {{< ghuser name="mak-42" >}} (new-integration) -- ads1118 component {{< pr number="5711" repo="esphome" >}} by {{< ghuser name="solomondg1" >}} (new-integration) -- Add CST816 touchscreen driver {{< pr number="5941" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- AM2315C Temperature + Humidity Sensor {{< pr number="6266" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- Touchscreen: add support for CST226 controller chip {{< pr number="6151" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Drivers for RGB 16 bit parallel displays {{< pr number="5872" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- VEML7700 and VEML6030 light sensors {{< pr number="6067" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Add Seeed Studio mmWave Kit MR24HPC1 {{< pr number="5761" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-integration) -- Add driver for quad SPI AMOLED displays {{< pr number="6354" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- feat: Add HTU31D Support {{< pr number="5805" repo="esphome" >}} by {{< ghuser name="betterengineering" >}} (new-integration) -- Emmeti infrared climate support {{< pr number="5197" repo="esphome" >}} by {{< ghuser name="E440QF" >}} (new-integration) -- Added Kamstrup Multical 40x component {{< pr number="4200" repo="esphome" >}} by {{< ghuser name="cfeenstra1024" >}} (new-integration) - -### New Platforms - -- Additional sensors and binary sensors support for Haier Climate {{< pr number="6257" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (breaking-change) (new-platform) -- add template fan {{< pr number="6310" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) (new-platform) - -### Breaking Changes - -- LTR390 - Multiple bugfixes {{< pr number="6161" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (breaking-change) -- Touchscreen component and driver fixes {{< pr number="5997" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (breaking-change) -- Additional sensors and binary sensors support for Haier Climate {{< pr number="6257" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (breaking-change) (new-platform) -- add template fan {{< pr number="6310" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) (new-platform) - -### Beta Changes - -- SPI: Revert clk_pin to standard output pin schema {{< pr number="6368" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Allow actions in web_server to be executed via GET method {{< pr number="5938" repo="esphome" >}} by {{< ghuser name="afarago" >}} -- fix servo restore {{< pr number="6370" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Don't try to get IPv6 addresses when disabled {{< pr number="6366" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Use AQI device class {{< pr number="6376" repo="esphome" >}} by {{< ghuser name="fgsch" >}} -- Fix list-components when PR is not targeting dev {{< pr number="6375" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- allow negative ppm for sensair {{< pr number="6385" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- microWakeWord - add new ops and small improvements {{< pr number="6360" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Fix compilation for uponor_smatrix without time component {{< pr number="6389" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Shows component operation time in `ms` {{< pr number="6388" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- IPv6 can't be enabled for libretiny {{< pr number="6387" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Replace name and friendly name in full adopted configs {{< pr number="4456" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix bug in `remote_base` conditional {{< pr number="6281" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix sending packets to uponor_smatrix devices {{< pr number="6392" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Fix wrong initialization of vectors in ade7953_i2c {{< pr number="6393" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- ld2420: Firmware v1.5.4+ bug workaround {{< pr number="6168" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- Require xsrf/csrf when using a password {{< pr number="6396" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- AHT10: Use state machine to avoid blocking delay {{< pr number="6401" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Show component warnings and errors in the log; {{< pr number="6400" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- web_server support for v3 {{< pr number="6203" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} - -### All changes - -- Bump openssh-client to 1:9.2p1-2+deb12u2 {{< pr number="6216" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for 1.8V-powered devices {{< pr number="6234" repo="esphome" >}} by {{< ghuser name="bisbastuner" >}} -- Adjust HeatpumpIR dependency {{< pr number="6222" repo="esphome" >}} by {{< ghuser name="ivankravets" >}} -- INA226 - fixed improper work with signed values, added configurable ADC parameters {{< pr number="6172" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- Prevent network config on rpipico board {{< pr number="5832" repo="esphome" >}} by {{< ghuser name="carlosV2" >}} -- Bump pytest-asyncio from 0.23.3 to 0.23.5 {{< pr number="6201" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- New component: ADE7880 voltage/current/power/energy sensor {{< pr number="5242" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} (new-integration) -- Add some components to the new testing framework (D) {{< pr number="6175" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Provide example devcontainer config for mdns and USB passthrough {{< pr number="6094" repo="esphome" >}} by {{< ghuser name="linkedupbits" >}} -- Bump black from 23.12.1 to 24.2.0 {{< pr number="6221" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 7.4.4 to 8.0.1 {{< pr number="6246" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump codecov/codecov-action from 3 to 4 {{< pr number="6160" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 5.0.2 to 6.0.0 {{< pr number="6159" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump frenck/action-yamllint from 1.4.2 to 1.5.0 {{< pr number="6236" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump voluptuous from 0.14.1 to 0.14.2 {{< pr number="6181" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.15.0 to 3.15.1 {{< pr number="6247" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- LTR390 - Multiple bugfixes {{< pr number="6161" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (breaking-change) -- Fix yamllint {{< pr number="6253" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improve the error message on OTA version mismatch {{< pr number="6259" repo="esphome" >}} by {{< ghuser name="sybrenstuvel" >}} -- Bump aioesphomeapi from 21.0.2 to 22.0.0 {{< pr number="6263" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow ESP8266 to use multiple i2c busses {{< pr number="6145" repo="esphome" >}} by {{< ghuser name="LouDou" >}} -- Add Uponor Smatrix component {{< pr number="5769" repo="esphome" >}} by {{< ghuser name="kroimon" >}} (new-integration) -- Fix test_build_components for macOS sed {{< pr number="6278" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Allow to specify global build directory {{< pr number="6276" repo="esphome" >}} by {{< ghuser name="werwolfby" >}} -- Add device class support to text sensor {{< pr number="6202" repo="esphome" >}} by {{< ghuser name="dougiteixeira" >}} -- Bump pytest from 8.0.1 to 8.0.2 {{< pr number="6288" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Improve dualstack and IPv6 support {{< pr number="5449" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Waveshare e-ink 2IN9_V2 - fix full and partial update based on vendor… {{< pr number="5481" repo="esphome" >}} by {{< ghuser name="darianndd" >}} -- Add RTTTL volume control. {{< pr number="5968" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Touchscreen component and driver fixes {{< pr number="5997" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (breaking-change) -- Add `on_update` trigger for Project versions {{< pr number="6298" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump peter-evans/create-pull-request from 6.0.0 to 6.0.1 {{< pr number="6302" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- CSE7766 Apparent Power & Power Factor calculations {{< pr number="6292" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Adding W5500 support to ethernet component {{< pr number="4424" repo="esphome" >}} by {{< ghuser name="JeroenVanOort" >}} -- Fix numbering of ip_address sensors {{< pr number="6305" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump aioesphomeapi from 22.0.0 to 23.0.0 {{< pr number="6293" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add regular polygon shapes to display component {{< pr number="6108" repo="esphome" >}} by {{< ghuser name="mathieu-mp" >}} -- Fix return value in `core/automation.h` {{< pr number="6314" repo="esphome" >}} by {{< ghuser name="FlyingFeng2021" >}} -- aht10: Added new CMD and renamed existing CMD to match datasheet {{< pr number="6303" repo="esphome" >}} by {{< ghuser name="cptskippy" >}} -- handling with the negative temperature in the sensor tmp102 {{< pr number="6316" repo="esphome" >}} by {{< ghuser name="FlyingFeng2021" >}} -- x9c: fix off by 1 error {{< pr number="6318" repo="esphome" >}} by {{< ghuser name="andynumber2" >}} -- Support for MS8607 PHT (Pressure Humidity Temperature) sensor {{< pr number="3307" repo="esphome" >}} by {{< ghuser name="e28eta" >}} (new-integration) -- Separate logger implementations for each hardware platform into different files {{< pr number="6167" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Additional sensors and binary sensors support for Haier Climate {{< pr number="6257" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (breaking-change) (new-platform) -- Add toggle command to cover web_server endpoint {{< pr number="6319" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Improv: support connecting to hidden networks {{< pr number="6322" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update mDNS for IDF >= 5.0 {{< pr number="6328" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- DFPlayer: refix Bug created with PR 4758 {{< pr number="5861" repo="esphome" >}} by {{< ghuser name="sandronidi" >}} -- Fix build failures on host platform caused by #6167 {{< pr number="6338" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Update bang_bang to log two decimal places in config dump {{< pr number="6304" repo="esphome" >}} by {{< ghuser name="rafalw1277" >}} -- Add datetime date entities {{< pr number="6191" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} (new-integration) -- Add AGS10 Sensor {{< pr number="6070" repo="esphome" >}} by {{< ghuser name="mak-42" >}} (new-integration) -- Bump aioesphomeapi from 23.0.0 to 23.1.0 {{< pr number="6332" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.23.5 to 0.23.5.post1 {{< pr number="6334" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-buildx-action from 3.0.0 to 3.1.0 {{< pr number="6295" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Set dependabot to look at composite actions versions {{< pr number="6343" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ads1118 component {{< pr number="5711" repo="esphome" >}} by {{< ghuser name="solomondg1" >}} (new-integration) -- Bump actions/cache from 4.0.0 to 4.0.1 {{< pr number="6306" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 5.0.0 to 5.2.0 in /.github/actions/build-image {{< pr number="6347" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- fix: modbus_textsensor response is too long in some cases {{< pr number="6333" repo="esphome" >}} by {{< ghuser name="NewoPL" >}} -- add template fan {{< pr number="6310" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (breaking-change) (new-platform) -- dump config after logging CDC port is opened by host {{< pr number="6169" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add IRK support to allow tracking of devices with random MAC addresses {{< pr number="6335" repo="esphome" >}} by {{< ghuser name="chbmuc" >}} -- [Fingerprint_grow] Implements Sleep Mode feature {{< pr number="6116" repo="esphome" >}} by {{< ghuser name="alexborro" >}} -- cleanup ili9xxx component by removing data rate define {{< pr number="6350" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- web_server_idf: support x-www-form-urlencoded POST requests {{< pr number="6037" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- feat(MQTT): Add QoS option for each MQTT component {{< pr number="6279" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- Check permissions {{< pr number="6255" repo="esphome" >}} by {{< ghuser name="OdileVidrine" >}} -- Add CST816 touchscreen driver {{< pr number="5941" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- ILI9XXX: Lazily allocate buffer {{< pr number="6352" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- AM2315C Temperature + Humidity Sensor {{< pr number="6266" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- Add ble_presence binary sensor timeout config value. {{< pr number="6024" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add state listeners to `rotary_encoder` {{< pr number="6035" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- ili9xxx: Add support for GC9A01A display {{< pr number="6351" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Touchscreen: add support for CST226 controller chip {{< pr number="6151" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- font: add anti-aliasing and other features {{< pr number="6198" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Mhz19 warmup {{< pr number="6214" repo="esphome" >}} by {{< ghuser name="fornellas" >}} -- Refactor ATM90E32 to reduce blocking time and improve accuracy. {{< pr number="5670" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- Bump aioesphomeapi from 23.1.0 to 23.1.1 {{< pr number="6348" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 8.0.2 to 8.1.1 {{< pr number="6346" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add support for Waveshare 2.13" V2 display {{< pr number="6337" repo="esphome" >}} by {{< ghuser name="manuelkasper" >}} -- Mitsubishi Climate updates {{< pr number="3886" repo="esphome" >}} by {{< ghuser name="RubyBailey" >}} -- Drivers for RGB 16 bit parallel displays {{< pr number="5872" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- hydreon_rgxx - add resolution option {{< pr number="6077" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- SPI schema now uses typed_schema with `type` key {{< pr number="6353" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- VEML7700 and VEML6030 light sensors {{< pr number="6067" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Add Seeed Studio mmWave Kit MR24HPC1 {{< pr number="5761" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-integration) -- Add getter for font glyph data {{< pr number="6355" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Require reset_pin for certain waveshare_epaper models in YAML validation {{< pr number="6357" repo="esphome" >}} by {{< ghuser name="manuelkasper" >}} -- touchscreen driver fixes {{< pr number="6356" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Make USE_HOST compilable on msys2 {{< pr number="6359" repo="esphome" >}} by {{< ghuser name="maruel" >}} -- download font from url on build {{< pr number="5254" repo="esphome" >}} by {{< ghuser name="landonr" >}} -- Add driver for quad SPI AMOLED displays {{< pr number="6354" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- ADE7953: Add the ability to use accumulating energy registers, more precise power reporting {{< pr number="6311" repo="esphome" >}} by {{< ghuser name="isorin" >}} -- feat: Add HTU31D Support {{< pr number="5805" repo="esphome" >}} by {{< ghuser name="betterengineering" >}} (new-integration) -- Emmeti infrared climate support {{< pr number="5197" repo="esphome" >}} by {{< ghuser name="E440QF" >}} (new-integration) -- Added Kamstrup Multical 40x component {{< pr number="4200" repo="esphome" >}} by {{< ghuser name="cfeenstra1024" >}} (new-integration) -- add possibility to provide different conversion times for Bus Voltage… {{< pr number="6327" repo="esphome" >}} by {{< ghuser name="kev300" >}} -- SPI: Revert clk_pin to standard output pin schema {{< pr number="6368" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Allow actions in web_server to be executed via GET method {{< pr number="5938" repo="esphome" >}} by {{< ghuser name="afarago" >}} -- fix servo restore {{< pr number="6370" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Don't try to get IPv6 addresses when disabled {{< pr number="6366" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Use AQI device class {{< pr number="6376" repo="esphome" >}} by {{< ghuser name="fgsch" >}} -- Fix list-components when PR is not targeting dev {{< pr number="6375" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- allow negative ppm for sensair {{< pr number="6385" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- microWakeWord - add new ops and small improvements {{< pr number="6360" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Fix compilation for uponor_smatrix without time component {{< pr number="6389" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Shows component operation time in `ms` {{< pr number="6388" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- IPv6 can't be enabled for libretiny {{< pr number="6387" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Replace name and friendly name in full adopted configs {{< pr number="4456" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix bug in `remote_base` conditional {{< pr number="6281" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix sending packets to uponor_smatrix devices {{< pr number="6392" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Fix wrong initialization of vectors in ade7953_i2c {{< pr number="6393" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- ld2420: Firmware v1.5.4+ bug workaround {{< pr number="6168" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- Require xsrf/csrf when using a password {{< pr number="6396" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- AHT10: Use state machine to avoid blocking delay {{< pr number="6401" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Show component warnings and errors in the log; {{< pr number="6400" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- web_server support for v3 {{< pr number="6203" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.4.0.md b/content/changelog/2024.4.0.md deleted file mode 100644 index 386ac10454..0000000000 --- a/content/changelog/2024.4.0.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.4.0." -title: "ESPHome 2024.4.0 - 17th April 2024" -params: - seo: - description: Changelog for ESPHome 2024.4.0. - image: /_static/changelog-2024.4.0.png ---- - -{{< imgtable >}} -"Template Datetime Time","components/datetime/template","description.svg","dark-invert" -"SUN-GTIL2 inverter","components/sun_gtil2","sun_1000g2.png","" -"AT581X","components/at581x","at581x.png","" -"JSN-SR04T","components/sensor/jsn_sr04t","jsn-sr04t-v3.jpg","" -"Daikin ARC","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"HHCCJCY10 (MiFlora Pink)","components/sensor/xiaomi_hhccjcy10","xiaomi_hhccjcy10.jpg","" -"TLC5971","components/output/tlc5971","tlc5971.jpg","" -"Dooya","components/remote_transmitter","remote.svg","" -{{< /imgtable >}} - -## Time Entities - -ESPHome now has support for `time` entities that can be set from the frontend (like Home Assistant). -This allows you to set a timer to execute future automations on device. - -ESPHome Dates require Home Assistant 2024.4 or later. - -## Voice Assistant Audio - -This release adds support for sending and receiving audio to/from voice assistants via the API. Currently ESPHome -sends and receives the Voice Assistant audio bytes via a UDP socket which can be unreliable and insecure. -Beginning with Home Assistant 2024.5, both sides will automatically recognise that they both support API Audio and will -use that route instead. This is more reliable because the ESPHome API uses a TCP socket, so packet order and -delivery is guaranteed, and if you use API Encryption, your audio will also be encrypted in transit. - - - -## Release 2024.4.1 - April 23 - -- [Tuya Climate] Fix compilation error caused by codegen {{< pr number="6568" repo="esphome" >}} by {{< ghuser name="zry98" >}} -- wifi: fix reconnect issue due to enablement of fast connect {{< pr number="6598" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Calibrate Beken internal temperature {{< pr number="6599" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- fix streaming logs from MQTT for ESP32 devices using TLS {{< pr number="6605" repo="esphome" >}} by {{< ghuser name="ccutrer" >}} -- Disallow variant/family override for known boards {{< pr number="6512" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- esp32_ble: Consider ESP_BT_STATUS_DONE a successful state {{< pr number="6493" repo="esphome" >}} by {{< ghuser name="polyfloyd" >}} -- Fix or filter {{< pr number="6574" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} - -## Release 2024.4.2 - April 30 - -- Fix SHT3xd fails sometimes in 2024.4.0 {{< pr number="6592" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- allow defaults with no include vars {{< pr number="6613" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Revert #6458 {{< pr number="6650" repo="esphome" >}} by {{< ghuser name="tronikos" >}} -- [i2s_audio.microphone] Fixing adc bug {{< pr number="6654" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add sun_gtil2 component (for SUN-1000G2 / SUN-2000G2 grid tie inverters) {{< pr number="4958" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- Add support for AT581x component {{< pr number="6297" repo="esphome" >}} by {{< ghuser name="X-Ryl669" >}} (new-integration) -- Add new Component: Ultrasonic Distance Sensor JSN-SR04T {{< pr number="6023" repo="esphome" >}} by {{< ghuser name="Mafus1" >}} (new-integration) -- feat: Add Daikin ARC (tested on Daikin ARC472A62) {{< pr number="6429" repo="esphome" >}} by {{< ghuser name="magicbear" >}} (new-integration) -- add support for Tuya pink version of miflora {{< pr number="5402" repo="esphome" >}} by {{< ghuser name="fariouche" >}} (new-integration) -- Implemented support for the TLC5971 as an output component {{< pr number="6494" repo="esphome" >}} by {{< ghuser name="IJIJI" >}} (new-integration) - -### Breaking Changes - -- Add support for new modes in Tuya Climate {{< pr number="5159" repo="esphome" >}} by {{< ghuser name="moriahmorgan" >}} (breaking-change) -- IPv6 string representation follows RFC5952 {{< pr number="6449" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (breaking-change) - -### Beta Changes - -- Add dooya remote transmitter test {{< pr number="6508" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ads1115: remove auto-load and split sensor into platform folder {{< pr number="5981" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-platform) -- Bump esphome-dashboard to 20240412.0 {{< pr number="6517" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missing ifdefs in voice assistant {{< pr number="6520" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix project version longer than 30 characters breaking compilation {{< pr number="6535" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix no-release bug on ft6x36 {{< pr number="6527" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -### All changes - -- Bump docker/login-action from 3.0.0 to 3.1.0 {{< pr number="6367" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 6.0.1 to 6.0.2 {{< pr number="6361" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 5.2.0 to 5.3.0 in /.github/actions/build-image {{< pr number="6373" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-buildx-action from 3.1.0 to 3.2.0 {{< pr number="6372" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix deep_sleep for ESP32-C6 {{< pr number="6377" repo="esphome" >}} by {{< ghuser name="ferrets6" >}} -- Fix keeloq for IDF 5+ {{< pr number="6382" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix Nextion set_component_picture call {{< pr number="6378" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add line_at_angle method to Display component {{< pr number="6381" repo="esphome" >}} by {{< ghuser name="deisterhold" >}} -- Check generated proto files are as expected if any are modified in PRs {{< pr number="6254" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ld2420: fix energy mode documentation {{< pr number="6225" repo="esphome" >}} by {{< ghuser name="andresv" >}} -- Add actions for component tests A, B and C {{< pr number="6256" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (V) {{< pr number="6231" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (X,Y,Z) {{< pr number="6233" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (E) {{< pr number="6176" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Make SPI compile with IDF >= 5.0 {{< pr number="6383" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Fix esp32-camera test yaml {{< pr number="6398" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump pytest-asyncio from 0.23.5.post1 to 0.23.6 {{< pr number="6402" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.0.1 to 4.0.2 in /.github/actions/restore-python {{< pr number="6403" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.0.1 to 4.0.2 {{< pr number="6404" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ESP8266 Arduino versions {{< pr number="5359" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Allow accept/reject delta to be specified. {{< pr number="5060" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- Allow setting htop for ledc {{< pr number="6340" repo="esphome" >}} by {{< ghuser name="Gagootron" >}} -- sm2135: add separate_modes option to support different chip variants {{< pr number="6152" repo="esphome" >}} by {{< ghuser name="jasperro" >}} -- AHT10: fix temperature-only operation; add warning/error messages {{< pr number="6405" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add support for new modes in Tuya Climate {{< pr number="5159" repo="esphome" >}} by {{< ghuser name="moriahmorgan" >}} (breaking-change) -- Add sun_gtil2 component (for SUN-1000G2 / SUN-2000G2 grid tie inverters) {{< pr number="4958" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- SPI: Make some validation failures give more useful messages. {{< pr number="6413" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump aioesphomeapi from 23.1.1 to 23.2.0 {{< pr number="6412" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add check for use of GPIOXX in config {{< pr number="6419" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- WireGuard for esp8266 {{< pr number="6365" repo="esphome" >}} by {{< ghuser name="droscy" >}} -- setup.cfg: drop duplicate, underintended trove classifier {{< pr number="6421" repo="esphome" >}} by {{< ghuser name="mweinelt" >}} -- Store preferences in disk file on host platform {{< pr number="6428" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add support for AT581x component {{< pr number="6297" repo="esphome" >}} by {{< ghuser name="X-Ryl669" >}} (new-integration) -- Add some components to the new testing framework (F) {{< pr number="6177" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add get_contrast() and get_brightness() to SSD1306 class to get protected variables {{< pr number="6435" repo="esphome" >}} by {{< ghuser name="benediktkr" >}} -- Add new Component: Ultrasonic Distance Sensor JSN-SR04T {{< pr number="6023" repo="esphome" >}} by {{< ghuser name="Mafus1" >}} (new-integration) -- Add some components to the new testing framework (G) {{< pr number="6178" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (K) {{< pr number="6186" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (N) {{< pr number="6210" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (Q) {{< pr number="6218" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (U) {{< pr number="6230" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix spacing in new test yaml {{< pr number="6441" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (W) {{< pr number="6232" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (L) {{< pr number="6195" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- feat: Add Daikin ARC (tested on Daikin ARC472A62) {{< pr number="6429" repo="esphome" >}} by {{< ghuser name="magicbear" >}} (new-integration) -- Disable truthy yamllint rule {{< pr number="6442" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add get_size method to QR Code header {{< pr number="6430" repo="esphome" >}} by {{< ghuser name="deisterhold" >}} -- Minor change to support sht85 sensor {{< pr number="6415" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- IPv6 string representation follows RFC5952 {{< pr number="6449" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (breaking-change) -- Bump actions/setup-python from 5.0.0 to 5.1.0 {{< pr number="6437" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.0.0 to 5.1.0 in /.github/actions/restore-python {{< pr number="6438" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Optimize QMC5883L: Read registers only for enabled sensors {{< pr number="6458" repo="esphome" >}} by {{< ghuser name="tronikos" >}} -- minor refactor to allow commit hash as ref value. {{< pr number="6446" repo="esphome" >}} by {{< ghuser name="LelandSindt" >}} -- TMP117 fix polling period config {{< pr number="6452" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- Bump Arduino Pico Framework to 3.7.2 and Platform to 1.12.0 {{< pr number="6386" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Display menu: Allow "left" key to exit current menu if not editing {{< pr number="6460" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix NOLINT on inclusive-language check {{< pr number="6464" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add yamllint to dev requirements {{< pr number="6466" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add temperature for QMC5883L {{< pr number="6456" repo="esphome" >}} by {{< ghuser name="tronikos" >}} -- web_server: Return early if no clients connected {{< pr number="6467" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP32 Arduino WiFi: misc bug fixes {{< pr number="6470" repo="esphome" >}} by {{< ghuser name="paravoid" >}} -- Replace std::regex with sscanf calls {{< pr number="6468" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Include "Failed" status in config log. {{< pr number="6482" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix Microphone IsCapturingCondition {{< pr number="6490" repo="esphome" >}} by {{< ghuser name="RaymiiOrg" >}} -- Remove misleading tag/line in messages {{< pr number="6495" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Send/Receive Voice Assistant audio via API {{< pr number="6471" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Datetime date initial value fix {{< pr number="6483" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- If the loop() took more than the required time, don't delay further {{< pr number="6496" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump LibreTiny version to 1.5.1 {{< pr number="6500" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- Internal temperature: Support Beken platform {{< pr number="6491" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Bump docker/setup-buildx-action from 3.2.0 to 3.3.0 {{< pr number="6502" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- add support for Tuya pink version of miflora {{< pr number="5402" repo="esphome" >}} by {{< ghuser name="fariouche" >}} (new-integration) -- Add MAC address to WiFi config reply {{< pr number="6489" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- Adds i2c timeout config {{< pr number="4614" repo="esphome" >}} by {{< ghuser name="tracestep" >}} -- Add ABB-Welcome / Busch-Welcome Door Intercom Protocol {{< pr number="4689" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Add support for time entities {{< pr number="6399" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix Match by IRK {{< pr number="6499" repo="esphome" >}} by {{< ghuser name="MRemy2" >}} -- Add rmt_channel to remote_transmitter and remote_receiver {{< pr number="6497" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Rework tlc5947 to remove AUTO_LOAD {{< pr number="6503" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- UART: ignore require_tx/rx if not a native uart implementation {{< pr number="6504" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esp32_rmt_led_strip bugfixes {{< pr number="6506" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Implemented support for the TLC5971 as an output component {{< pr number="6494" repo="esphome" >}} by {{< ghuser name="IJIJI" >}} (new-integration) -- Add Dooya protocol to remote_base {{< pr number="6488" repo="esphome" >}} by {{< ghuser name="bukureckid" >}} -- Only give error for connected sensors at startup {{< pr number="6474" repo="esphome" >}} by {{< ghuser name="leejoow" >}} -- Webserver float to string fix {{< pr number="6507" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- Add dooya remote transmitter test {{< pr number="6508" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ads1115: remove auto-load and split sensor into platform folder {{< pr number="5981" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-platform) -- Bump esphome-dashboard to 20240412.0 {{< pr number="6517" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix missing ifdefs in voice assistant {{< pr number="6520" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix project version longer than 30 characters breaking compilation {{< pr number="6535" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix no-release bug on ft6x36 {{< pr number="6527" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.5.0.md b/content/changelog/2024.5.0.md deleted file mode 100644 index a4bca3e0ca..0000000000 --- a/content/changelog/2024.5.0.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.5.0." -title: "ESPHome 2024.5.0 - 15th May 2024" -params: - seo: - description: Changelog for ESPHome 2024.5.0. - image: /_static/changelog-2024.5.0.png ---- - -{{< imgtable >}} -"Valve Core","components/valve/index","folder-open.svg","dark-invert" -"Template Valve","components/valve/template","description.svg","dark-invert" -"Event Core","components/event/index","folder-open.svg","dark-invert" -"Template Event","components/event/template","description.svg","dark-invert" -"Template Time","components/datetime/template","description.svg","dark-invert" -"Template Datetime","components/datetime/template","description.svg","dark-invert" -"WeiKai SPI/I²C UART/IO Expander","components/weikai","wk2168.jpg","" -{{< /imgtable >}} - -## Valves, Events, and More - -This release brings a new `Valve` component, which can be used to control valves. -A `Valve` can be opened, closed, or a specific position set if supported. - -`Event` entities were added to Home Assistant in [2023.8](https://www.home-assistant.io/blog/2023/08/02/release-20238/#introducing-the-event-entity). -They allow better structure and also history and logging of the events sent from ESPHome to Home Assistant compared -to just using publishing events onto the Home Assistant event bus with the `homeassistant.event` action. - -The `datetime` component has also been extended with `DateTime` and `Time` entity types this release. - -## ESP32 ADC Attenuation - -The attenuation configuration option for ESP32 `adc` sensors has had a deprecation in the underlying ESP-IDF -framework with the `11dB` option. The value to replace `11dB` with is `12dB`. There are no functionality changes -otherwise. There will be a warning in the logs when installing if you are using `11dB` and it will be -removed in **2024.8.0**. - -## Remote Receiver tolerance - -The `tolerance` option in the `remote_receiver` component has been extended to allow time values, but at the -same time the validation is now more strict. -If you were using a raw value with no unit before 2024.5.0, for example `25`, you will need to change it to `25%`. - - - -## Release 2024.5.1 - May 20 - -- Add device_class to valve core config {{< pr number="6765" repo="esphome" >}} by {{< ghuser name="acshef" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="6768" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Fix Upload from Dashboard with MQTT discovery. {{< pr number="6774" repo="esphome" >}} by {{< ghuser name="Links2004" >}} -- Fix MQTT dashboard discovery (Exception in MqttStatusThread). {{< pr number="6775" repo="esphome" >}} by {{< ghuser name="Links2004" >}} - -## Release 2024.5.2 - May 21 - -- Revert "Fix MQTT dashboard discovery (Exception in MqttStatusThread)." {{< pr number="6782" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix DashboardEntries.all() call {{< pr number="6783" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [remote_receiver] Add better error message for tolerance breaking change {{< pr number="6784" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update webserver local assets to 20240519-215627 {{< pr number="6779" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} - -## Release 2024.5.3 - May 25 - -- [voice_assistant] Don't allocate buffers until starting the microphone for the first time {{< pr number="6800" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2024.5.4 - May 28 - -- [web_server_base] Bump ESPAsyncWebServer-esphome to 3.2.2 {{< pr number="6797" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [helpers] Move Base64 string to cpp {{< pr number="6819" repo="esphome" >}} by {{< ghuser name="gabest11" >}} - -## Release 2024.5.5 - June 5 - -- [voice_assistant] Half the microphone ringbuffer size {{< pr number="6830" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [i2s_speaker] Add buffer allocation failure checks {{< pr number="6829" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [improv_serial] Fix for IDF 4.4.7 {{< pr number="6855" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Full list of changes - -### New Components - -- Add valve component {{< pr number="6447" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Add the WeiKai SPI/I2C UART/IO Expander components to esphome {{< pr number="5218" repo="esphome" >}} by {{< ghuser name="DrCoolzic" >}} (new-integration) -- Event entity support {{< pr number="6451" repo="esphome" >}} by {{< ghuser name="nohat" >}} (new-integration) -- SPI and I2C for BMP390 and BMP380 {{< pr number="6652" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) (breaking-change) - -### Breaking Changes - -- Add DNS sensor and simplify format {{< pr number="6450" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (breaking-change) -- SM2135 - Use standard channel ordering. {{< pr number="6573" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (breaking-change) -- [sn74hc595] Enforce type field to distinguish gpio vs spi mode {{< pr number="6609" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Add datetime entities {{< pr number="6513" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- SPI and I2C for BMP390 and BMP380 {{< pr number="6652" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) (breaking-change) - -### Beta Changes - -- [github] Upgrade to actions/[upload,download]-artifact v4 {{< pr number="6698" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nextion] Replace flags to `USE_ARDUINO` {{< pr number="6700" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [remote_receiver, remote_transmitter] Improve error messages on the ESP32 {{< pr number="6701" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- [ethernet] Use constexpr instead of inline define for KSZ80XX_PC2R_REG_ADDR {{< pr number="6705" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add PHY register writes to enable external clock on Ethernet with RTL8201 {{< pr number="6704" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Bump recommended ESP-IDF to 4.4.7 {{< pr number="6703" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Ensure that a generated ID name is distinct from its type. {{< pr number="6706" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [color] Fix crash when hex color parses as int, improve error reporting. {{< pr number="6707" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [github] Fix digest artifact name {{< pr number="6710" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix(ltr390): stuck ALS values when configured for ALS+UV readings {{< pr number="6723" repo="esphome" >}} by {{< ghuser name="CodeInPolish" >}} -- Set FEATURE_API_AUDIO flag also if the speaker component is not used {{< pr number="6712" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- Bump platformio from 6.1.13 to 6.1.15 {{< pr number="6634" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix ESPHOME_PROJECT_VERSION_30 {{< pr number="6731" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Voice-Assistant: Start-order change for VAD disabled: start va-pipeline when microphon… {{< pr number="6391" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- Add ANNOUNCING state to media_player. {{< pr number="6691" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [adc] Fix 11db deprecation warning {{< pr number="6749" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) - -### Notable Changes - -- [adc] Fix 11db deprecation warning {{< pr number="6749" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) - -### All changes - -- Add some components to the new testing framework (H) {{< pr number="6179" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Added Htu21d model option {{< pr number="6511" repo="esphome" >}} by {{< ghuser name="MRemy2" >}} -- Add bk72xx base test file {{< pr number="6522" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add "log" alias for "logs" command {{< pr number="6519" repo="esphome" >}} by {{< ghuser name="pzich" >}} -- Add DNS sensor and simplify format {{< pr number="6450" repo="esphome" >}} by {{< ghuser name="HeMan" >}} (breaking-change) -- Add all missing `remote_receiver` `on_...` tests {{< pr number="6524" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add actions to http_request tests {{< pr number="6529" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Update homeassistant component tests with actions {{< pr number="6528" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Define `USE_PSRAM` {{< pr number="6526" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Bump black from 24.2.0 to 24.4.0 {{< pr number="6539" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 6.0.2 to 6.0.3 {{< pr number="6525" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump python version in sync-device-classes workflow to 3.12 for HA {{< pr number="6541" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pylint from 3.0.3 to 3.1.0 {{< pr number="6287" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 23.2.0 to 24.0.0 {{< pr number="6544" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.15.1 to 3.15.2 {{< pr number="6543" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add enum option to typed_schema {{< pr number="6546" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move esphome-fork startup script to main repo. {{< pr number="6523" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Call workflow for addon with dev version {{< pr number="6549" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use trusted publishing token for pypi {{< pr number="6545" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix uart to work with new enum definition in esp-idf-v5.2.1 {{< pr number="6487" repo="esphome" >}} by {{< ghuser name="luar123" >}} -- Housecleaning: Use walrus operator in datetime {{< pr number="6552" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in text {{< pr number="6560" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in light {{< pr number="6556" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in select {{< pr number="6557" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in number {{< pr number="6561" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in cover {{< pr number="6562" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in climate {{< pr number="6551" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in fan {{< pr number="6555" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in text_sensor {{< pr number="6559" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump zeroconf to 0.132.2 {{< pr number="6548" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Housecleaning: Use walrus operator in switch {{< pr number="6558" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in lock {{< pr number="6554" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Housecleaning: Use walrus operator in sensor {{< pr number="6553" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pytest-mock from 3.12.0 to 3.14.0 {{< pr number="6572" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 6.0.3 to 6.0.4 {{< pr number="6569" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Nextion - Review set_protocol_reparse_mode() {{< pr number="6567" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Allow component final_validate {{< pr number="6475" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- SM2135 - Use standard channel ordering. {{< pr number="6573" repo="esphome" >}} by {{< ghuser name="Cossid" >}} (breaking-change) -- Nextion - Do not refresh sensors while updating {{< pr number="6566" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Nextion - Review types {{< pr number="6565" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- On failure, dump the output of preceding jobs in CI status {{< pr number="6564" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Nextion `send_command` method {{< pr number="6540" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix some printf formats for size_t. {{< pr number="6542" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- remove delay from tmp102 {{< pr number="6577" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Create `component_dir` substitution for local files to be included in… {{< pr number="6575" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Define `USE_ESP32_BLE` {{< pr number="6585" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Bump aioesphomeapi from 24.0.0 to 24.3.0 {{< pr number="6602" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Add yamllint and clang-format to pre-commit hooks {{< pr number="6578" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Use clang-format version from requirements_dev file {{< pr number="6606" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add some components to the new testing framework (P) {{< pr number="6213" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (M part 1) {{< pr number="6207" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (M part 2) {{< pr number="6208" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (O) {{< pr number="6211" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [mopeka_std_check] Fix test file indentation {{< pr number="6610" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add valve component {{< pr number="6447" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- Add some components to the new testing framework (R) {{< pr number="6219" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sn74hc595] Enforce type field to distinguish gpio vs spi mode {{< pr number="6609" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [tests] Run yaml tests in groups if over 100 to run {{< pr number="6612" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add some components to the new testing framework (I) {{< pr number="6185" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (T) {{< pr number="6229" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (S part 1) {{< pr number="6224" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add some components to the new testing framework (S part 2) {{< pr number="6227" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- `graphical_display_menu` requires a Display, not DisplayBuffer {{< pr number="6614" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add null GPIO pin {{< pr number="6611" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Allow UART to be AUTO LOADed {{< pr number="6617" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add the WeiKai SPI/I2C UART/IO Expander components to esphome {{< pr number="5218" repo="esphome" >}} by {{< ghuser name="DrCoolzic" >}} (new-integration) -- Sort mqtt_const alphabetically {{< pr number="6619" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Limit Rx wait loop time to 3 seconds. {{< pr number="6594" repo="esphome" >}} by {{< ghuser name="descipher" >}} -- Event entity support {{< pr number="6451" repo="esphome" >}} by {{< ghuser name="nohat" >}} (new-integration) -- Only check c/c++ files with clang-format {{< pr number="6620" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Added base64 helper {{< pr number="4866" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- Add Roomba IR protocol {{< pr number="4595" repo="esphome" >}} by {{< ghuser name="rforro" >}} -- Fix issue when setting cw/ww brightness via temperature {{< pr number="5976" repo="esphome" >}} by {{< ghuser name="patagonaa" >}} -- Add get/set color temperature functions in Kelvin {{< pr number="5006" repo="esphome" >}} by {{< ghuser name="danielkent-net" >}} -- Move CONF_PLATFORM_VERSION to global const.py {{< pr number="6629" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Ble client fixes for proxy {{< pr number="6596" repo="esphome" >}} by {{< ghuser name="elupus" >}} -- Fix for #6614- use background_color, improve anti-aliasing {{< pr number="6618" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix graph hangs when y <= 0 {{< pr number="6593" repo="esphome" >}} by {{< ghuser name="chiahsing" >}} -- Feature add last_operation to time based cover {{< pr number="6084" repo="esphome" >}} by {{< ghuser name="xprofiler" >}} -- Add `event`, `text_sensor` and `valve` device classes to sync script {{< pr number="6624" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add datetime entities {{< pr number="6513" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Multiple Daly-BMS support {{< pr number="6615" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- Remove text_sensor from sync-device-class job {{< pr number="6637" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="6638" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Display: add diagnostic test_card option {{< pr number="6608" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- waveshare_epaper: Add 2.90in-dke {{< pr number="6492" repo="esphome" >}} by {{< ghuser name="polyfloyd" >}} -- Extract core comments from #6241 {{< pr number="6643" repo="esphome" >}} by {{< ghuser name="javawizard" >}} -- [hm3301] Updated the AQI based on the airnow document {{< pr number="6004" repo="esphome" >}} by {{< ghuser name="optimusprimespace" >}} -- Fix command line substitutions without any yaml substitutions {{< pr number="6644" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Allow platform dependencies {{< pr number="6623" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [light] Add transition_length to strobe effect. {{< pr number="6595" repo="esphome" >}} by {{< ghuser name="lhartmann" >}} -- Fixed the issue that graph draws out of the boundary. {{< pr number="6651" repo="esphome" >}} by {{< ghuser name="chiahsing" >}} -- Fix upload command. MQTT user and password is missing from configuration. #5093 {{< pr number="5766" repo="esphome" >}} by {{< ghuser name="dylan09" >}} -- patch esphome cli to skip mqtt based device discovery if --device option is specified {{< pr number="6371" repo="esphome" >}} by {{< ghuser name="quigleymd" >}} -- Fix for #4866 - inconsistent arguments {{< pr number="6639" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [template/text] Fix lambda config {{< pr number="6655" repo="esphome" >}} by {{< ghuser name="asergunov" >}} -- web_server: Add support for v3 local server_index {{< pr number="6563" repo="esphome" >}} by {{< ghuser name="pzich" >}} -- Update webserver local assets to 20240429-211523 {{< pr number="6657" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [nextion] Exit reparse before update TFT {{< pr number="6589" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [nextion] Set alternative TFT update baud rate {{< pr number="6587" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [TM1637] Let turn off the display {{< pr number="6656" repo="esphome" >}} by {{< ghuser name="asergunov" >}} -- [nextion] Use persistent http connection for TFT upload (Arduino) {{< pr number="6582" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Extend MQTT tests {{< pr number="6648" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Extend and consolidate `script` tests {{< pr number="6663" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nextion] Use persistent http connection for TFT upload (ESP-IDF) {{< pr number="6576" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add a function to return the loop_interval {{< pr number="6666" repo="esphome" >}} by {{< ghuser name="tronikos" >}} -- Remote receiver improvements {{< pr number="4642" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- Make fast update intervals in qmc5883l work {{< pr number="6647" repo="esphome" >}} by {{< ghuser name="tronikos" >}} -- SPI and I2C for BMP390 and BMP380 {{< pr number="6652" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) (breaking-change) -- Set `CONF_` CI counter to fail on 3 or more definitions {{< pr number="6668" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Rename ALWAYS_INLINE to ESPHOME_ALWAYS_INLINE {{< pr number="6636" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- print task name if logger is called from other than main thread {{< pr number="6630" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Fix recent definitions into `defines.h` {{< pr number="6667" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Add fast update to HMC5883L {{< pr number="6669" repo="esphome" >}} by {{< ghuser name="mkmer" >}} -- Minor tidy up of BME280 code {{< pr number="6672" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- External components: optional configurable path for git source {{< pr number="6677" repo="esphome" >}} by {{< ghuser name="twasilczyk" >}} -- Use clang-apply-replacements when clang-apply-replacements-14 does not exist {{< pr number="6684" repo="esphome" >}} by {{< ghuser name="Links2004" >}} -- fix conflict with EMPTY macro in zephyr {{< pr number="6679" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump actions/checkout from 4.1.1 to 4.1.5 {{< pr number="6685" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix Datetime-Datetime compiler error {{< pr number="6686" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- Bump esphome/ESPAsyncWebServer-esphome to 3.2.0 {{< pr number="6687" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix date_time validation {{< pr number="6688" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- proceed if AP mode is set up {{< pr number="6631" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Migrate some constants to core code {{< pr number="6692" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Consolidate test files where all tests are identical {{< pr number="6690" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Make `pulse_meter` PULSE filter report the pulse as soon as it can {{< pr number="6014" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- Update webserver local assets to 20240507-231331 {{< pr number="6696" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [github] Upgrade to actions/[upload,download]-artifact v4 {{< pr number="6698" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nextion] Replace flags to `USE_ARDUINO` {{< pr number="6700" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [remote_receiver, remote_transmitter] Improve error messages on the ESP32 {{< pr number="6701" repo="esphome" >}} by {{< ghuser name="Mat931" >}} -- [ethernet] Use constexpr instead of inline define for KSZ80XX_PC2R_REG_ADDR {{< pr number="6705" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add PHY register writes to enable external clock on Ethernet with RTL8201 {{< pr number="6704" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Bump recommended ESP-IDF to 4.4.7 {{< pr number="6703" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Ensure that a generated ID name is distinct from its type. {{< pr number="6706" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [color] Fix crash when hex color parses as int, improve error reporting. {{< pr number="6707" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [github] Fix digest artifact name {{< pr number="6710" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix(ltr390): stuck ALS values when configured for ALS+UV readings {{< pr number="6723" repo="esphome" >}} by {{< ghuser name="CodeInPolish" >}} -- Set FEATURE_API_AUDIO flag also if the speaker component is not used {{< pr number="6712" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- Bump platformio from 6.1.13 to 6.1.15 {{< pr number="6634" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix ESPHOME_PROJECT_VERSION_30 {{< pr number="6731" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Voice-Assistant: Start-order change for VAD disabled: start va-pipeline when microphon… {{< pr number="6391" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- Add ANNOUNCING state to media_player. {{< pr number="6691" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [adc] Fix 11db deprecation warning {{< pr number="6749" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (notable-change) - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.6.0.md b/content/changelog/2024.6.0.md deleted file mode 100644 index 63af64e4a7..0000000000 --- a/content/changelog/2024.6.0.md +++ /dev/null @@ -1,405 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.6.0." -title: "ESPHome 2024.6.0 - 19th June 2024" -params: - seo: - description: Changelog for ESPHome 2024.6.0. - image: /_static/changelog-2024.6.0.png ---- - -{{< imgtable >}} -"ESPHome OTA Updates","components/ota","system-update.svg","dark-invert" -"HTTP Request OTA Updates","components/ota_http_request","system-update.svg","dark-invert" -"Managed Updates","components/update/http_request","system-update.svg","dark-invert" -"1-Wire","components/one_wire/index","one-wire.svg","" -"GDK101","components/sensor/gdk101","gdk101.jpg","" -"Beken SPI","components/light/beken_spi_led_strip","color_lens.svg","dark-invert" -"INA2XX","components/sensor/ina2xx","ina2xx.jpg","" -"LTR Light & Proximity Sensors","components/sensor/ltr_als_ps","ltr329.jpg","" -"Host SDL2 display","components/display/sdl","sdl.png","" -{{< /imgtable >}} - -## An update on updates - -So we have a few updates to update you on this ~~update~~ release. -Please do read these release notes carefully as there are quite a few breaking changes that -we know will affect a large portion of users. - -Join us for the ESPHome Release Party for the 2024.6.0 release! We'll talk about the hard work put into -ESPHome over the past few months, its new home under the Open Home Foundation, and share with you the new logo! - - - - -Jesse - -### ESPHome branding - -In April, Nabu Casa donated ESPHome to the newly found Open Home Foundation. This foundation, -which also owns Home Assistant, fights for the rights of privacy, choice, and sustainability -of the smart home - and everyone that lives in one. This was done to create a bulwark against -surveillance capitalism, the risk of buyout, and open-source projects becoming abandonware. -To an extent, this protection extends even against our future selves—so that smart home users -can continue to benefit for years, if not decades, no matter what comes. - -As part of this new governance, we decided to align the branding of Home Assistant and ESPHome, -the two consumer-facing projects of the foundation, to communicate that we share a common vision. - -This change will not have any impact on the day-to- day running of ESPHome. -Both Keith and I will remain full-time employees at Nabu Casa, a commercial partner of -the Open Home Foundation, to further develop ESPHome as the best way for anyone to create -smart home devices. To support our work, -[subscribe to Home Assistant Cloud by Nabu Casa](https://www.nabucasa.com/). -[Learn more about the Open Home Foundation](https://www.openhomefoundation.org/blog/announcing-the-open-home-foundation/) - -### Update Entities - -So, we created `update` entities. These are similar to the ones that Home Assistant shows now when -you have the ESPHome Add-on installed in Home Assistant OS, except those ones show you an update to the -version of the ESPHome Add-on and in the background will compile and upload new firmware to your device. - -These new `update` entities are a bit different. If you have acquired a device that was pre-installed -with ESPHome, the vendor you acquired the device from is now able to compile the firmware and host it -on a website along with a description of the firmware the device can read and present that there is an -update available for this device. You do not need to adopt the device into the ESPHome dashboard, and -you don't actually need the ESPHome dashboard installed. Using the new `http_request` OTA platform, -the device will be able to download the firmware and update itself. - -> [!NOTE] -> Update Entities require at least Home Assistant 2024.7 to show up and be controlled in the Home Assistant UI. - -### Voice Assistant Timers - -Home Assistant 2024.6 added support for starting, pausing, resuming, cancelling timers via Assist devices. -In this ESPHome release, we added new triggers to the {{< docref "/components/voice_assistant" "Voice Assistant" >}} -component to take advantage of these. Timers are only in memory, do not represent entities and are only available -on the device that started the timer. - -### OTA Platforms - -With the above mentioned `http_request` OTA platform, we made the decision to split out the current -`ota` server to its own platform to make the code more managable and to allow for more flexibility going forward. - -Because of this, all configurations that currently have `ota:` in them will fail to validate after -updating to this release. - -You will need to change the configuration by adding a new line as below: - -```yaml -# Old -ota: - -# New -ota: - platform: esphome -``` - -If you have a password set, it may look like the following: - -```yaml -# Old -ota: - password: "xxxx" - -# New -ota: - platform: esphome - password: "xxxx" -``` - -As part of this change also, {{< docref "/components/safe_mode" "safe_mode" >}} has been pulled out into its own -top level component. It is automatically included in any configuration that has an `ota` configuration block, -so there is nothing you need to do unless you were overriding some of the safe mode specific configurations. - -### 1-Wire - -Up until now, the `dallas` sensor platform contained the only 1-wire implementation in ESPHome. -There had been requests to add support for other 1-wire based components, so {{< ghuser name="ssieb" >}} has -made a new top level {{< docref "/components/one_wire/index" "1-wire" >}} component that will allow for this. -In doing so, the `dallas` sensor platform has been removed, and replaced with `dallas_temp` -to allow for other Dallas sensors to be implemented that are not temperature sensors. - -```yaml -# Old -dallas: - - pin: GPIOXX - -sensor: - - platform: dallas - address: 0x1234567890abcdef - name: "My Sensor" - -# New -one_wire: - - platform: gpio - pin: GPIOXX - -sensor: - - platform: dallas_temp - address: 0x1234567890abcdef - name: "My Sensor" -``` - -### HTTP(s) Requests - -The {{< docref "/components/http_request" "http_request" >}} platform has been rewritten in this release to -add support when using ESP-IDF or when using the {{< docref "/components/rp2040" "rp2040" >}} platform. This will -also allow other ESPHome components to make HTTP(s) requests which includes the new `http_request` OTA platform and the -`update` entities. - -As part of this, the configuration has been changed quite a bit so please read the documentation for the latest -configuration options. - -### JSON parsing - -An internal helper component `json` has had some minor, but breaking changes that now require the parsing -callback function to return a boolean value, representing whether the parsing was successful or not. -This is mostly an internal change, but could be used by -{{< docref "/components/external_components" "external components" >}} or lambdas in YAML. - - - -## Release 2024.6.1 - June 20 - -- debug_libretiny - Fix typo {{< pr number="6942" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- Bump esphome-dashboard to 20240620.0 {{< pr number="6944" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2024.6.2 - June 25 - -- [core] Fix package merging with lists of primitives {{< pr number="6952" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [update] Set entity_category to config & Publish state to logs {{< pr number="6954" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix infinite loop in http_request for ESP-IDF. {{< pr number="6963" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- ESP-IDF 4.x expects seconds for esp_task_wdt_init(), not milliseconds. {{< pr number="6964" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Onewire {{< pr number="6967" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [http_request] memory leak fix {{< pr number="6973" repo="esphome" >}} by {{< ghuser name="gabest11" >}} -- Await cg.get_variable in Update component {{< pr number="6974" repo="esphome" >}} by {{< ghuser name="bkaufx" >}} -- [one-wire] fix potential hang {{< pr number="6976" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [midea] fix fan speed compatibility with some models {{< pr number="6978" repo="esphome" >}} by {{< ghuser name="dudanov" >}} - -## Release 2024.6.3 - June 26 - -- [safe_mode] Set safe mode core data in disabled cases {{< pr number="6983" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ota-esphome] Validate for multiple esphome ota instances {{< pr number="6984" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Improve 'body' handling in http_request on_response triggers {{< pr number="6968" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- [ds1307] Initialize uninitialized struct members {{< pr number="6985" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- Fix float encoding in modbus server {{< pr number="6986" repo="esphome" >}} by {{< ghuser name="Petapton" >}} -- [dallas_temp] fix ds18s20 temp calc {{< pr number="6988" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [modbus-text-sensor] fix potential buffer overflow {{< pr number="6993" repo="esphome" >}} by {{< ghuser name="dudanov" >}} - -## Release 2024.6.4 - June 27 - -- [ota-esphome] Merge configurations by port {{< pr number="7001" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix LEDC 100% is not 100% duty with ESP32 IDF {{< pr number="6997" repo="esphome" >}} by {{< ghuser name="Links2004" >}} - -## Release 2024.6.5 - July 3 - -- [mpr121] await register parented {{< pr number="7014" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move some consts for #4585 {{< pr number="7023" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [wifi] Only set default ttls phase 2 on esp-idf {{< pr number="7033" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2024.6.6 - July 3 - -- Bump dockerfile dependencies {{< pr number="7017" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [docker] Bump versions inside armv7 block {{< pr number="7022" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [docker] Fix docker build error fall through {{< pr number="7021" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- Add ADC multisampling {{< pr number="6330" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-feature) -- [voice_assistant] Timers {{< pr number="6821" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- GDK101 support {{< pr number="4703" repo="esphome" >}} by {{< ghuser name="Szewcson" >}} (new-integration) -- Add beken_spi_led_strip component {{< pr number="6515" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- Separate `OTABackend` from OTA component {{< pr number="6459" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) (breaking-change) -- SPI and I2C for ENS160 {{< pr number="6369" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) (breaking-change) -- INA228/INA229, INA238/INA239, INA237 power/energy/charge monitor (I2C, SPI) {{< pr number="6138" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- [haier] `text_sensor` and `button` platforms {{< pr number="6780" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (new-integration) -- LTR-303, LTR-329, LTR-553, LTR-556, LTR-559, LTR-659 Series of Lite-On Light (ALS) and Proximity(PS) sensors {{< pr number="6076" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Add host time platform; remove host support from sntp. {{< pr number="6854" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [ota] http_request update platform {{< pr number="5586" repo="esphome" >}} by {{< ghuser name="oarcher" >}} (new-integration) -- [core] Update Entities {{< pr number="6885" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- New 1-wire component {{< pr number="6860" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) (breaking-change) -- [display] SDL2 display driver for host platform {{< pr number="6825" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) - -### New Platforms - -- BedJet: expose the outlet temperature on the climate and as a sensor {{< pr number="6633" repo="esphome" >}} by {{< ghuser name="javawizard" >}} (new-platform) -- mpr121: Add GPIO support {{< pr number="6776" repo="esphome" >}} by {{< ghuser name="polyfloyd" >}} (new-platform) - -### Breaking Changes - -- Separate `OTABackend` from OTA component {{< pr number="6459" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) (breaking-change) -- SPI and I2C for ENS160 {{< pr number="6369" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) (breaking-change) -- Uncouple safe_mode from OTA {{< pr number="6759" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Fix incorrect naming of the AdaFruit MagTag display. {{< pr number="6810" repo="esphome" >}} by {{< ghuser name="sasodoma" >}} (breaking-change) -- [http_request] Add esp-idf and rp2040 support {{< pr number="3256" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Allow parse_json to return a boolean result {{< pr number="6884" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- New 1-wire component {{< pr number="6860" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) (breaking-change) - -### Beta Changes - -- [CI] Fix for sdl {{< pr number="6892" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add operation_speed option to X9C component {{< pr number="6890" repo="esphome" >}} by {{< ghuser name="oliverhihn" >}} -- [host] Execute host program when using run command {{< pr number="6897" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20240613.0 {{< pr number="6901" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="6904" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [ili9xxx] Fix init for GC9A01A {{< pr number="6913" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [mqtt] Fix datetime copy pasta {{< pr number="6914" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix(dallas): make recovery time for 1-bit equal to that of 0-bit {{< pr number="6763" repo="esphome" >}} by {{< ghuser name="muggenhor" >}} -- [wifi] Fix some access point bugs related to esp-idf 4.4.7 {{< pr number="6928" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Rename legacy/modern to ota/factory {{< pr number="6922" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 {{< pr number="6926" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 5.4.0 to 6.0.0 in /.github/actions/build-image {{< pr number="6927" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.0.0 to 6.0.1 in /.github/actions/build-image {{< pr number="6934" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [network] Default ipv6 to false to always set the flags {{< pr number="6937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- Add IRK support to ble_rssi {{< pr number="6422" repo="esphome" >}} by {{< ghuser name="chbmuc" >}} -- Add new Error type to skip prepending path {{< pr number="6716" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [github] Only save platformio cache for dev branch {{< pr number="6711" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Only cache docker images on dev branch {{< pr number="6714" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add pylint to git pre-commit hooks {{< pr number="6726" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- separate debug component for each platform in different file {{< pr number="6715" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- GDK101 support {{< pr number="4703" repo="esphome" >}} by {{< ghuser name="Szewcson" >}} (new-integration) -- Typing hint and doc fixes {{< pr number="6729" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- time_based_cover.cpp with manual control fix {{< pr number="6719" repo="esphome" >}} by {{< ghuser name="Jorge-Crespo-Celdran" >}} -- [CST816] Add support for Hynitron Microelectronics CST826 capacitive touch {{< pr number="6682" repo="esphome" >}} by {{< ghuser name="lboue" >}} -- Bump pytest from 8.1.1 to 8.2.0 {{< pr number="6732" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [web_server] Minor python formatting {{< pr number="6735" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32_ble] Fix compilation error on esp32c6 {{< pr number="6734" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Fix minor formatting issues {{< pr number="6738" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [config] Improve error reporting {{< pr number="6736" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [tests] `test2.yaml` has become too large {{< pr number="6750" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump esphome-dashboard from 20240412.0 to 20240429.1 {{< pr number="6743" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- BedJet: expose the outlet temperature on the climate and as a sensor {{< pr number="6633" repo="esphome" >}} by {{< ghuser name="javawizard" >}} (new-platform) -- Add beken_spi_led_strip component {{< pr number="6515" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-integration) -- i2c: fix format string specifiers {{< pr number="6746" repo="esphome" >}} by {{< ghuser name="ius" >}} -- Allow one timing to cancel others {{< pr number="6744" repo="esphome" >}} by {{< ghuser name="lbilger" >}} -- fix rp2040_pio_led flicker and proper multi-strip support {{< pr number="6194" repo="esphome" >}} by {{< ghuser name="Papa-DMan" >}} -- Mirage remote receiver & transmitter {{< pr number="6479" repo="esphome" >}} by {{< ghuser name="heggi" >}} -- WPA2 Enterprise - Explicitly set TTLS Phase 2 {{< pr number="6436" repo="esphome" >}} by {{< ghuser name="shxshxshxshx" >}} -- Fix Prometheus Output to Match Spec {{< pr number="6032" repo="esphome" >}} by {{< ghuser name="sdwilsh" >}} -- Skip gpio validation {{< pr number="5615" repo="esphome" >}} by {{< ghuser name="amcfague" >}} -- [core] Migrate to pyproject.toml {{< pr number="6737" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Move pytest config into pyproject.toml {{< pr number="6740" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Move pylint config into pyproject.toml {{< pr number="6739" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Fix running pylint via pre-commit from GUI apps {{< pr number="6754" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Separate `OTABackend` from OTA component {{< pr number="6459" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) (breaking-change) -- Add ADC multisampling {{< pr number="6330" repo="esphome" >}} by {{< ghuser name="Mat931" >}} (new-feature) -- [core] Fix some extends cases {{< pr number="6748" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Port wifi_component_esp32_arduino from tcpip_adapter to esp_netif {{< pr number="6476" repo="esphome" >}} by {{< ghuser name="paravoid" >}} -- SPI and I2C for ENS160 {{< pr number="6369" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) (breaking-change) -- Fix wifi compile error on IDF 5.1+ {{< pr number="6756" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [core] Update some coroutine priorities {{< pr number="6755" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- INA228/INA229, INA238/INA239, INA237 power/energy/charge monitor (I2C, SPI) {{< pr number="6138" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- [nextion] Fix type on sprintf for IDF v5 {{< pr number="6758" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [core] Remove references to deleted setup.py {{< pr number="6757" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix pip3 install {{< pr number="6771" repo="esphome" >}} by {{< ghuser name="syssi" >}} -- [tests] make test_build_components work with venv without installing esphome {{< pr number="6761" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- separate deep_sleep component for each platform in different file {{< pr number="6762" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump actions/checkout from 4.1.5 to 4.1.6 {{< pr number="6764" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- add rp2040 support to the wizard {{< pr number="6239" repo="esphome" >}} by {{< ghuser name="fodfodfod" >}} -- [ili9xxx] Add 18bit mode selection and custom init sequence {{< pr number="6745" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Tiny fix in automation.h - unused return value removed {{< pr number="6760" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- Uncouple safe_mode from OTA {{< pr number="6759" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Add support for acting as Modbus server {{< pr number="4874" repo="esphome" >}} by {{< ghuser name="JeroenVanOort" >}} -- Add on_safe_mode trigger {{< pr number="6790" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sx1509] Output open drain pin mode {{< pr number="6788" repo="esphome" >}} by {{< ghuser name="Swamp-Ig" >}} -- [ledc] Change some logging lines from debug to verbose {{< pr number="6796" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [haier] `text_sensor` and `button` platforms {{< pr number="6780" repo="esphome" >}} by {{< ghuser name="paveldn" >}} (new-integration) -- mpr121: Add GPIO support {{< pr number="6776" repo="esphome" >}} by {{< ghuser name="polyfloyd" >}} (new-platform) -- [nextion] Add basic functions to Intelligent series {{< pr number="6791" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix incorrect naming of the AdaFruit MagTag display. {{< pr number="6810" repo="esphome" >}} by {{< ghuser name="sasodoma" >}} (breaking-change) -- [tuya] add support for extended services {{< pr number="6808" repo="esphome" >}} by {{< ghuser name="augs" >}} -- fix libretiny regression from #6715 {{< pr number="6806" repo="esphome" >}} by {{< ghuser name="augs" >}} -- Make i2s_audio compatible with IDF 5+ {{< pr number="6534" repo="esphome" >}} by {{< ghuser name="pimdo" >}} -- Fix compile errors on ESP32-C6 with latest ESP-IDF {{< pr number="6822" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Use uint8_t instead of uint32_t for 8-bit values on mitsubishi {{< pr number="6824" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- Make SPI Ethernet (W5500) compatible with ESP-IDF v5 {{< pr number="6778" repo="esphome" >}} by {{< ghuser name="fightforlife" >}} -- [wake_on_lan] Make component platform independent {{< pr number="6815" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix a bunch of components for IDF 5 compatibility and #6802 {{< pr number="6805" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump docker/login-action from 3.1.0 to 3.2.0 {{< pr number="6823" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-cov from 4.1.0 to 5.0.0 {{< pr number="6580" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 6.0.4 to 6.0.5 {{< pr number="6635" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump black from 24.4.0 to 24.4.2 {{< pr number="6646" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [voice_assistant] Timers {{< pr number="6821" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- [web_server] add entity sorting for v3 {{< pr number="6445" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- [micro_wake_word] Ensure model string is Path {{< pr number="6826" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Fix DHT reading timing for SI7021 on ESP32 {{< pr number="6604" repo="esphome" >}} by {{< ghuser name="erdembey" >}} -- [core] Const-ify some Component fields {{< pr number="6831" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- LTR-303, LTR-329, LTR-553, LTR-556, LTR-559, LTR-659 Series of Lite-On Light (ALS) and Proximity(PS) sensors {{< pr number="6076" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Update const.py added missing millimeter {{< pr number="6834" repo="esphome" >}} by {{< ghuser name="NonaSuomy" >}} -- Fix log message in VA for IDF 5 {{< pr number="6839" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Replace random non-ascii-print characters with standard substitutes {{< pr number="6840" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- Wireguard support for bk72 microcontrollers {{< pr number="6842" repo="esphome" >}} by {{< ghuser name="droscy" >}} -- Add messages when WiFi and Ethernet components set 'warning' flag. {{< pr number="6850" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- [sntp] fix for ESP-IDF > 5.0 {{< pr number="6769" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Avoid unsafe git error when container user and file config volume permissions don't match {{< pr number="6843" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- Add Ethernet MAC address to ethernet_info {{< pr number="6835" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- Add host time platform; remove host support from sntp. {{< pr number="6854" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [wireguard] Implement workaround for crash on IDF 5+ {{< pr number="6846" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ft5x06] Interrupt pin and code quality improvements {{< pr number="6851" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ethernet] Add config option to set arbitrary PHY register values {{< pr number="6836" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Add carrier_frequency option to remote_transmitter.transmit_aeha {{< pr number="6792" repo="esphome" >}} by {{< ghuser name="svxa" >}} -- Add `invert_position_report` to `tuya.cover` {{< pr number="6020" repo="esphome" >}} by {{< ghuser name="wrouesnel" >}} -- [Tuya Climate] Support both datapoint and pins for active state {{< pr number="6789" repo="esphome" >}} by {{< ghuser name="zry98" >}} -- [config] Allow file: scheme for git external components {{< pr number="6844" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ota] http_request update platform {{< pr number="5586" repo="esphome" >}} by {{< ghuser name="oarcher" >}} (new-integration) -- [logger] Fix defines for development {{< pr number="6870" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [docker] Avoid unsafe git error when container user and file config volume permissions don't match {{< pr number="6873" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- [datetime] Add logs on DateCall perform {{< pr number="6868" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- fix: arduino media player sets wrong state for announcements {{< pr number="6849" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [datetime] datetime-datetime strptime support value string without seconds {{< pr number="6867" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- Update webserver local assets to 20240608-093147 {{< pr number="6874" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- fix: arduino media player still sets wrong state. {{< pr number="6875" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [http_request] Add esp-idf and rp2040 support {{< pr number="3256" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [i2s_speaker] A few fixes {{< pr number="6872" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [voice_assistant] Write less data to speaker each loop {{< pr number="6877" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump docker/build-push-action from 5.3.0 to 5.4.0 in /.github/actions/build-image {{< pr number="6883" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow parse_json to return a boolean result {{< pr number="6884" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Update webserver local assets to 20240610-230854 {{< pr number="6886" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [core] Update Entities {{< pr number="6885" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- [Dockerfile] Sync platformio version with requirements.txt {{< pr number="6888" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- [Deep sleep] Compilation error with IDF >= 5.* {{< pr number="6879" repo="esphome" >}} by {{< ghuser name="asergunov" >}} -- [animation] Allow loading external url at build time {{< pr number="6876" repo="esphome" >}} by {{< ghuser name="landonr" >}} -- [waveshare_epaper] Add support for 13.3in-k {{< pr number="6443" repo="esphome" >}} by {{< ghuser name="pgericson" >}} -- Climate IR LG - Support fan only mode and all "on" commands {{< pr number="3712" repo="esphome" >}} by {{< ghuser name="danieldabate" >}} -- [safe_mode] Allow user-defined interval for successful boot {{< pr number="6882" repo="esphome" >}} by {{< ghuser name="NMartin354" >}} -- New 1-wire component {{< pr number="6860" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) (breaking-change) -- [he60r] Don't publish state unless it has changed. [BUGFIX] {{< pr number="6869" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [image] Make PIL import local {{< pr number="6864" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [config] Retain path information in validated configuration {{< pr number="6785" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- WebSocket overrides check_origin for reverse proxy configuration {{< pr number="6845" repo="esphome" >}} by {{< ghuser name="gabest11" >}} -- [config] Early termination of validation steps on error {{< pr number="6837" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix media_player.volume_set when media player is not started {{< pr number="6859" repo="esphome" >}} by {{< ghuser name="tetele" >}} -- [display] SDL2 display driver for host platform {{< pr number="6825" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [ili9xxx] Implement st7735 support {{< pr number="6838" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [CI] Fix for sdl {{< pr number="6892" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add operation_speed option to X9C component {{< pr number="6890" repo="esphome" >}} by {{< ghuser name="oliverhihn" >}} -- [host] Execute host program when using run command {{< pr number="6897" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20240613.0 {{< pr number="6901" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="6904" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [ili9xxx] Fix init for GC9A01A {{< pr number="6913" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [mqtt] Fix datetime copy pasta {{< pr number="6914" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- fix(dallas): make recovery time for 1-bit equal to that of 0-bit {{< pr number="6763" repo="esphome" >}} by {{< ghuser name="muggenhor" >}} -- [wifi] Fix some access point bugs related to esp-idf 4.4.7 {{< pr number="6928" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Rename legacy/modern to ota/factory {{< pr number="6922" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 {{< pr number="6926" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 5.4.0 to 6.0.0 in /.github/actions/build-image {{< pr number="6927" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.0.0 to 6.0.1 in /.github/actions/build-image {{< pr number="6934" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [network] Default ipv6 to false to always set the flags {{< pr number="6937" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.7.0.md b/content/changelog/2024.7.0.md deleted file mode 100644 index 7f5ae903a3..0000000000 --- a/content/changelog/2024.7.0.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.7.0." -title: "ESPHome 2024.7.0 - 17th July 2024" -params: - seo: - description: Changelog for ESPHome 2024.7.0. ---- - -## microWakeWord - -The `micro_wake_word` component has been updated to "version 2". -This brings the capability to configure multiple models per device and has a `vad` model for -voice activity detection. - -The configuration has a breaking change to support these new features. - -```yaml -micro_wake_word: - model: okay_nabu -``` - -needs to be changed to the following: - -```yaml -micro_wake_word: - models: - - okay_nabu -``` - -Please see the {{< docref "/components/micro_wake_word" "Documentation" >}} for the full configuration. - - - -## Release 2024.7.1 - July 22 - -- Prevent rename from deleting new config {{< pr number="7104" repo="esphome" >}} by {{< ghuser name="acortelyou" >}} -- [i2s_microphone] Partially revert #7092 so microphone volume doesn't change {{< pr number="7109" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [heatpumpir] Fix BK72XX Compile error with IRremoteESP8266 {{< pr number="6955" repo="esphome" >}} by {{< ghuser name="dianlight" >}} -- [http_request] allow basic auth for idf {{< pr number="7086" repo="esphome" >}} by {{< ghuser name="oarcher" >}} -- Fixes sml parser to process extended length lists with a number of items that is dividable by 16 {{< pr number="6148" repo="esphome" >}} by {{< ghuser name="irgendwienet" >}} - -## Release 2024.7.2 - July 25 - -- [http_request] Change default timeout to 4.5s {{< pr number="7123" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [http_request] Fix ESP-IDF follow redirect {{< pr number="7101" repo="esphome" >}} by {{< ghuser name="dentra" >}} - -## Release 2024.7.3 - August 1 - -- [pmwcs3] Add delay after sending REG_READ_START {{< pr number="7130" repo="esphome" >}} by {{< ghuser name="thevogoncoder" >}} -- Fix for Mitsubishi units that only support cooling {{< pr number="7143" repo="esphome" >}} by {{< ghuser name="RubyBailey" >}} -- [micro_wake_word] Fix VAD detection and modify detection computation {{< pr number="7164" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} - -## Full list of changes - -### New Features - -- [uptime] Add new timestamp type for uptime sensor {{< pr number="7029" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### Breaking Changes - -- [dooya] Flip bit timings {{< pr number="6947" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [modbus_text_sensor] new default ANSI encoding type {{< pr number="6975" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- [micro_wake_word] Version 2 {{< pr number="7032" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) - -### Beta Changes - -- helpers.cpp: Fix GLIBCXX_RELEASE check < 8 {{< pr number="7062" repo="esphome" >}} by {{< ghuser name="ferbar" >}} -- Fix pmsa003i cold boot marked as failed on ESP32 et al {{< pr number="7064" repo="esphome" >}} by {{< ghuser name="z3liff" >}} -- [http_request] Fix follow_redirects on arduino {{< pr number="7054" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [ethernet] Fix compile warning for IPv6 {{< pr number="7048" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Update webserver local assets to 20240704-081526 {{< pr number="7041" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Add braces to if statement to avoid compiler warning. {{< pr number="7036" repo="esphome" >}} by {{< ghuser name="colmbuckley" >}} -- [mitsubishi] Fix current temperature {{< pr number="6909" repo="esphome" >}} by {{< ghuser name="ttaborda" >}} -- [climate] fix dump output of unsupported features {{< pr number="7005" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- [climate-traits] improved performance {{< pr number="7006" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add default icon to restart button {{< pr number="7076" repo="esphome" >}} by {{< ghuser name="leejoow" >}} -- Add support for the Gree YAC1FB9 in climate_ir {{< pr number="7056" repo="esphome" >}} by {{< ghuser name="topeju" >}} -- add ESP32-C6 support to esp32_can {{< pr number="7063" repo="esphome" >}} by {{< ghuser name="Adminius" >}} -- Fix voice assistant crash when no speaker configured {{< pr number="7075" repo="esphome" >}} by {{< ghuser name="kevdliu" >}} -- Bump HeatpumpIR, add protocols, remove IRremoteESP8266 {{< pr number="6996" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- LTR390 separate ALS and UV gain and resolution {{< pr number="7026" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- [improv_serial] Fix linker error created in #6998 {{< pr number="7082" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [i2s_audio] Allow config for primary/secondary i2s mode {{< pr number="7092" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [micro_wake_word] Allow simpler model config {{< pr number="7094" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ota] Print Arduino update errors {{< pr number="7096" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -### All changes - -- [CI] Update device class sync script for update entities {{< pr number="6895" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- X9c operation speed {{< pr number="6898" repo="esphome" >}} by {{< ghuser name="oliverhihn" >}} -- Bump actions/checkout from 4.1.6 to 4.1.7 {{< pr number="6900" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [CI] Allow clang-tidy to see IDF components {{< pr number="6903" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_camera] Use newer library version (for #6802) {{< pr number="6809" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [micro_wake_word] Pin to esp-tflite-micro v1.3.1 {{< pr number="6906" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- VEML7700 Fix GCC build warnings {{< pr number="6881" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- IDF 5 fixes for #6802 {{< pr number="6911" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI-ethernet] Add/fix/organize/clean up ethernet component tests {{< pr number="6916" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI-a01nyub] Consolidate test files {{< pr number="6917" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI-api] Test fix for IDF 5+ {{< pr number="6918" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI-http_request] Test fix for IDF 5+ {{< pr number="6919" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI-wireguard] Test file consolidation {{< pr number="6920" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI-esp32_hall] Remove IDF test {{< pr number="6921" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Introduce testing for IDF 5 (and other arbitrary framework versions) {{< pr number="6802" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- uart: allow setting the UART id in final_validate_device_schema {{< pr number="6923" repo="esphome" >}} by {{< ghuser name="paravoid" >}} -- Bump peter-evans/create-pull-request from 6.0.5 to 6.1.0 {{< pr number="6935" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix garbled graphics on LILYGO T4-S3 display {{< pr number="6910" repo="esphome" >}} by {{< ghuser name="manuelkasper" >}} -- Update cover.h for open() and close() compiler warnings {{< pr number="6936" repo="esphome" >}} by {{< ghuser name="peter--s" >}} -- [CI] Add debug component test for LibreTiny {{< pr number="6945" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [dooya] Flip bit timings {{< pr number="6947" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [qspi_amoled] Fix display remaining blank after update() before setup completion {{< pr number="6958" repo="esphome" >}} by {{< ghuser name="manuelkasper" >}} -- Bump docker/build-push-action from 6.0.1 to 6.1.0 in /.github/actions/build-image {{< pr number="6962" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="6966" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [qspi_amoled] Fix clear/fill with rotation {{< pr number="6960" repo="esphome" >}} by {{< ghuser name="manuelkasper" >}} -- [script] allow template parameters {{< pr number="6972" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [haier] climate ID auto generation {{< pr number="6949" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- [core] Add script to extract actions, conditions, and pin_providers {{< pr number="6929" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [external_files] Move common `download_content` function to `external_files.py` {{< pr number="6982" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Do not build mDNS when mDNS is disabled via yaml {{< pr number="6979" repo="esphome" >}} by {{< ghuser name="Links2004" >}} -- Bump HeatpumpIR and IRremoteESP8266 {{< pr number="6948" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- [CI] Add more mdns and safe_mode tests {{< pr number="6990" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Remove old test yamls from CI runs {{< pr number="6991" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Update tests to run against IDF 5.1 {{< pr number="6992" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump docker/build-push-action from 6.1.0 to 6.2.0 in /.github/actions/build-image {{< pr number="6999" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [tuya] implement command 0x22 - datapoint-async {{< pr number="6980" repo="esphome" >}} by {{< ghuser name="christiaanderidder" >}} -- Allow wireguard to bind to PPP interface {{< pr number="6989" repo="esphome" >}} by {{< ghuser name="droscy" >}} -- [modbus_text_sensor] new default ANSI encoding type {{< pr number="6975" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (breaking-change) -- [CI] Remove old test yaml files {{< pr number="7002" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Revert "[CI] Update tests to run against IDF 5.1" {{< pr number="7003" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Enable devcontainer linters {{< pr number="7019" repo="esphome" >}} by {{< ghuser name="orland0m" >}} -- 'uart' and 'improv_serial' need to understand non-UART logger configurations {{< pr number="6998" repo="esphome" >}} by {{< ghuser name="kpfleming" >}} -- Make crc8 const-correct {{< pr number="7027" repo="esphome" >}} by {{< ghuser name="nattgris" >}} -- [CI] Run all tests when a base test changes {{< pr number="7010" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Update tests to run against IDF 5.1 {{< pr number="7011" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [uptime] Add new timestamp type for uptime sensor {{< pr number="7029" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Fix compile errors on ESP32-C6 with W5500 SPI ethernet {{< pr number="7030" repo="esphome" >}} by {{< ghuser name="LeeHanYeong" >}} -- Bump docker/setup-buildx-action from 3.3.0 to 3.4.0 {{< pr number="7043" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.2.0 to 6.3.0 in /.github/actions/build-image {{< pr number="7038" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-qemu-action from 3.0.0 to 3.1.0 {{< pr number="7039" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/upload-artifact from 4.3.3 to 4.3.4 {{< pr number="7047" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/download-artifact from 4.1.7 to 4.1.8 {{< pr number="7046" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix display of update state in webinterfae {{< pr number="7045" repo="esphome" >}} by {{< ghuser name="leejoow" >}} -- Haier component update to support more protocol variations {{< pr number="7040" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Don't test for IPv6 addresses when min_ipv6_addr_count is 0 {{< pr number="7037" repo="esphome" >}} by {{< ghuser name="colmbuckley" >}} -- [CI] Allow running specific target test(s) only {{< pr number="7051" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump actions/setup-python from 5.1.0 to 5.1.1 in /.github/actions/restore-python {{< pr number="7071" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix RC Switch protocol not transmitting correctly via IR {{< pr number="5411" repo="esphome" >}} by {{< ghuser name="michd" >}} -- [micro_wake_word] Version 2 {{< pr number="7032" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) -- UART component support added for host platform {{< pr number="6912" repo="esphome" >}} by {{< ghuser name="paveldn" >}} -- Configure ap ip for RP2040 {{< pr number="7065" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- helpers.cpp: Fix GLIBCXX_RELEASE check < 8 {{< pr number="7062" repo="esphome" >}} by {{< ghuser name="ferbar" >}} -- Fix pmsa003i cold boot marked as failed on ESP32 et al {{< pr number="7064" repo="esphome" >}} by {{< ghuser name="z3liff" >}} -- [http_request] Fix follow_redirects on arduino {{< pr number="7054" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [ethernet] Fix compile warning for IPv6 {{< pr number="7048" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Update webserver local assets to 20240704-081526 {{< pr number="7041" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Add braces to if statement to avoid compiler warning. {{< pr number="7036" repo="esphome" >}} by {{< ghuser name="colmbuckley" >}} -- [mitsubishi] Fix current temperature {{< pr number="6909" repo="esphome" >}} by {{< ghuser name="ttaborda" >}} -- [climate] fix dump output of unsupported features {{< pr number="7005" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- [climate-traits] improved performance {{< pr number="7006" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Add default icon to restart button {{< pr number="7076" repo="esphome" >}} by {{< ghuser name="leejoow" >}} -- Add support for the Gree YAC1FB9 in climate_ir {{< pr number="7056" repo="esphome" >}} by {{< ghuser name="topeju" >}} -- add ESP32-C6 support to esp32_can {{< pr number="7063" repo="esphome" >}} by {{< ghuser name="Adminius" >}} -- Fix voice assistant crash when no speaker configured {{< pr number="7075" repo="esphome" >}} by {{< ghuser name="kevdliu" >}} -- Bump HeatpumpIR, add protocols, remove IRremoteESP8266 {{< pr number="6996" repo="esphome" >}} by {{< ghuser name="nagyrobi" >}} -- LTR390 separate ALS and UV gain and resolution {{< pr number="7026" repo="esphome" >}} by {{< ghuser name="latonita" >}} -- [improv_serial] Fix linker error created in #6998 {{< pr number="7082" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [i2s_audio] Allow config for primary/secondary i2s mode {{< pr number="7092" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [micro_wake_word] Allow simpler model config {{< pr number="7094" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ota] Print Arduino update errors {{< pr number="7096" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.8.0.md b/content/changelog/2024.8.0.md deleted file mode 100644 index daa33f5854..0000000000 --- a/content/changelog/2024.8.0.md +++ /dev/null @@ -1,261 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.8.0." -title: "ESPHome 2024.8.0 - 21st August 2024" -params: - seo: - description: Changelog for ESPHome 2024.8.0. - image: /_static/changelog-2024.8.0.png ---- - -{{< imgtable >}} -"LVGL Graphics","components/lvgl/index","lvgl.png","" -"Online Image","components/online_image","image-sync-outline.svg","dark-invert" -"APDS9306","components/sensor/apds9306","apds9306.png","" -"Home Assistant Number","components/number/homeassistant","home-assistant.svg","dark-invert" -"Home Assistant Switch","components/switch/homeassistant","home-assistant.svg","dark-invert" -"BME68x via BSEC2","components/sensor/bme68x_bsec2","bme680.jpg","" -"M5Stack Unit 8 Angle","components/sensor/m5stack_8angle","m5stack_8angle.png","" -"LYWSD02MMC","components/sensor/xiaomi_ble.html#lywsd02mmc","xiaomi_mijia_logo.jpg","" -{{< /imgtable >}} - -## Light and Versatile Embedded Graphics Library - -Or LVGL for short, has been worked on by {{< ghuser name="clydebarrow" >}} (and multiple other users doing testing -and documentation etc) for quite some time now and is finally ready for releasing this month. It is a very powerful -graphics library that is able to be configured almost completely in YAML (There are some places that will require -lambdas/c++). The {{< docref "/components/lvgl/index" "documentation" >}} is very extensive and hopefully we see -some awesome dashboards being made with it. - -## Online Image - -{{< ghuser name="guillempages" >}} created a new {{< docref "/components/online_image" "online_image" >}} component -that allows your ESPHome device to download images from the internet while it is running and show them on your display. -This can also be combined with the new LVGL component to show dynamic images for your dashboard. - -## Home Assistant Switch & Number - -New platforms have been added for `switch` and `number` to allow importing of state and controlling -of switches and numbers that exist in Home Assistant (or another device via Home Assistant). -This greatly simplifies controlling remote entities and will hopefully be extended to other platforms. - -## Thank you for your support - -We would like to thank all Home Assistant Cloud subscribers for their support. It allows -[Nabu Casa](https://nabucasa.com/) to employ two developers to maintain and further develop the ESPHome project. - - - -## Release 2024.8.1 - August 28 - -- [lvgl] Bug fixes {{< pr number="7338" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [core] Clean build if the loaded integrations changed {{< pr number="7344" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix race condition involving numbers, switches etc. {{< pr number="7345" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [api] Fix sending the `once` flag on ha entity subscription {{< pr number="7357" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2024.8.2 - September 3 - -- [datetime] Fix templated args {{< pr number="7368" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Enable IPv6 when manual IPv4 is enabled {{< pr number="7381" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- [core] Only clean build files with esp-idf {{< pr number="7388" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2024.8.3 - September 3 - -- Bump Dockerfile dependencies {{< pr number="7386" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Features - -- [update] Implement `update.perform` action and `update.is_available` condition {{< pr number="7165" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- Feature/m5angle8: Add support for m5angle8 input device {{< pr number="6799" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- APDS9306 Ambient Light Sensor {{< pr number="6709" repo="esphome" >}} by {{< ghuser name="aodrenah" >}} (new-integration) -- [lvgl] base implementation {{< pr number="7116" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Add runtime online image support {{< pr number="4710" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (new-integration) -- [bme68x_bsec2_i2c] BME68X Temperature+Pressure+Humidity+Gas Sensor via BSEC2 {{< pr number="4585" repo="esphome" >}} by {{< ghuser name="neffs" >}} (new-integration) -- Add support for LYWSD02MMC Xiaomi device {{< pr number="7080" repo="esphome" >}} by {{< ghuser name="juanluss31" >}} (new-integration) - -### New Platforms - -- [homeassistant] Native switch entity import and control {{< pr number="7018" repo="esphome" >}} by {{< ghuser name="Links2004" >}} (new-platform) -- [homeassistant] Native number entity import and control {{< pr number="6455" repo="esphome" >}} by {{< ghuser name="landonr" >}} (new-platform) -- Correct offset calibration {{< pr number="7228" repo="esphome" >}} by {{< ghuser name="descipher" >}} (new-platform) - -### Breaking Changes - -- Remove deprecated argument parser {{< pr number="7151" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -### Beta Changes - -- remove extra number from pronto {{< pr number="7263" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [api] Bump noise-c library version {{< pr number="7288" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix some small rtttl issues {{< pr number="6817" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix overflow in ESPColorCorrection object {{< pr number="7268" repo="esphome" >}} by {{< ghuser name="g-kiss" >}} -- [validation] Allow `maybe_simple_value` to not have default key in complex value {{< pr number="7294" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [network] Always allow `enable_ipv6: false` {{< pr number="7291" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Revert "[validation] Allow `maybe_simple_value` to not have default key in complex value" {{< pr number="7305" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Bug fixes {{< pr number="7300" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [speaker] Fix header includes {{< pr number="7304" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [microphone] Fix header includes {{< pr number="7310" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix RP2040 Neopixel flickering issue {{< pr number="7307" repo="esphome" >}} by {{< ghuser name="deCodeIt" >}} -- add the ability to add more idf components to an existing setup {{< pr number="7302" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix waveshare 2.13" epaper stride calculation error {{< pr number="7303" repo="esphome" >}} by {{< ghuser name="serialx" >}} -- [rtttl] fix STOPPED state {{< pr number="7323" repo="esphome" >}} by {{< ghuser name="NewoPL" >}} - -### All changes - -- [wifi] Fix EAP for IDF 5.1+, add test {{< pr number="7061" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- jsn_sr04t component: AJ_SR04M compatibility mode in checksum calculation {{< pr number="7044" repo="esphome" >}} by {{< ghuser name="soeffi" >}} -- [CI] compile entire web_server during tests {{< pr number="7084" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [CI] Add more `improv_serial` tests {{< pr number="7081" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump docker/build-push-action from 6.3.0 to 6.4.0 in /.github/actions/build-image {{< pr number="7089" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [CI] add web_server v1 test {{< pr number="7090" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [wifi] Hostname may not be set as expected on Arduino platform {{< pr number="7050" repo="esphome" >}} by {{< ghuser name="NewoPL" >}} -- Add host uart support for MacOS {{< pr number="7095" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump docker/build-push-action from 6.4.0 to 6.4.1 in /.github/actions/build-image {{< pr number="7102" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [code-quality] Add some ruff configuration {{< pr number="7103" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [web_server] move v1 code to separate file {{< pr number="7091" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [validation] Add `host` to `require_framework_version` {{< pr number="7107" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Tidy up some duplicate CONFIG_SCHEMA assignments {{< pr number="7106" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Move MQTT ip discovery to deticated config option. {{< pr number="6673" repo="esphome" >}} by {{< ghuser name="Links2004" >}} -- Feature/m5angle8: Add support for m5angle8 input device {{< pr number="6799" repo="esphome" >}} by {{< ghuser name="rnauber" >}} (new-integration) -- use cache to build tests for compoenents {{< pr number="7059" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [modbus_controller] Add on_command_sent trigger {{< pr number="7078" repo="esphome" >}} by {{< ghuser name="leejoow" >}} -- [ili9xxx] Rework delay handling {{< pr number="7115" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Inherit `esp32_ble_beacon` from `esp32_ble` {{< pr number="6908" repo="esphome" >}} by {{< ghuser name="jpbede" >}} -- APDS9306 Ambient Light Sensor {{< pr number="6709" repo="esphome" >}} by {{< ghuser name="aodrenah" >}} (new-integration) -- Bump docker/build-push-action from 6.4.1 to 6.5.0 in /.github/actions/build-image {{< pr number="7119" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-qemu-action from 3.1.0 to 3.2.0 {{< pr number="7120" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/login-action from 3.2.0 to 3.3.0 {{< pr number="7121" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-buildx-action from 3.4.0 to 3.5.0 {{< pr number="7122" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [fan] fix initial FanCall to properly set speed {{< pr number="7113" repo="esphome" >}} by {{< ghuser name="kr0ner" >}} -- Added ruff to pre-commit hooks {{< pr number="7124" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Update webserver local assets to 20240724-013115 {{< pr number="7126" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- [http_request] Allow configure buffer size on ESP-IDF {{< pr number="7125" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Give more info on import errors. {{< pr number="7128" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] base implementation {{< pr number="7116" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Bump aioesphomeapi to 24.6.2 and cryptography to 43.0.0 {{< pr number="7131" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [dependabot] Group docker action bumps into single PR {{< pr number="7133" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add `--version` handler to cli {{< pr number="7150" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Organise ethernet related imports {{< pr number="7152" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Organise wifi related imports {{< pr number="7153" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Organise core imports {{< pr number="7149" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Remove deprecated argument parser {{< pr number="7151" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Move `CONF_ON_ERROR` to const.py {{< pr number="7156" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Organise esp32 imports {{< pr number="7154" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add microAmp and milliAmp to defined units {{< pr number="7157" repo="esphome" >}} by {{< ghuser name="FreeBear-nc" >}} -- Bump docker/setup-buildx-action from 3.5.0 to 3.6.1 in the docker-actions group {{< pr number="7159" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- LVGL stage 2 {{< pr number="7129" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [pid] Add get_min_integral() and get_max_integral() {{< pr number="7162" repo="esphome" >}} by {{< ghuser name="FreeBear-nc" >}} -- [code-quality] Organise bluetooth related imports {{< pr number="7155" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- http_request watchdog as a component {{< pr number="7161" repo="esphome" >}} by {{< ghuser name="oarcher" >}} -- [touchscreen] Allow binary sensor to have multiple pages in config {{< pr number="7112" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [matrix_keypad] Add `pin->setup()` to rows and cols {{< pr number="7163" repo="esphome" >}} by {{< ghuser name="AAllport" >}} -- [update] Implement `update.perform` action and `update.is_available` condition {{< pr number="7165" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- [lvgl] PR stage 3 {{< pr number="7160" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [api] `homeassistant.action` replaces `homeassistant.service` {{< pr number="7171" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ade7953_spi wrong size specified in read_array call {{< pr number="7172" repo="esphome" >}} by {{< ghuser name="SimoPk" >}} -- Bump improv library to 1.2.4 {{< pr number="7174" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Implement 'round to nearest multiple' filter {{< pr number="7142" repo="esphome" >}} by {{< ghuser name="MrEbbinghaus" >}} -- git ignore managed_components {{< pr number="7180" repo="esphome" >}} by {{< ghuser name="oarcher" >}} -- [core] Eliminate nuisance messages from `build_codeowners` {{< pr number="7185" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [code-quality] More portable shebangs {{< pr number="7189" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for doing update entity refresh/check via API. {{< pr number="7190" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Stage 4 {{< pr number="7166" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32_improv] Update Improv library to reference new repo/version {{< pr number="7195" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- hydreon_rgxx: Fix parsing of data line {{< pr number="7192" repo="esphome" >}} by {{< ghuser name="domob1812" >}} -- Remove outdated version block {{< pr number="7177" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [lvgl] Stage 5 {{< pr number="7191" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- socket: socket::set_sockaddr() for IPv4 addresses in IPv6 builds {{< pr number="7196" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Adds MQTT component to Alarm Control panel component {{< pr number="7188" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- [lvgl] Final stage {{< pr number="7184" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Move `CONF_BACKGROUND_COLOR` and `CONF_FOREGROUND_COLOR` to const.py {{< pr number="7202" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [helpers] Set default flags of ExternalRAMAllocator to ALLOW_FAILURE {{< pr number="7201" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add runtime online image support {{< pr number="4710" repo="esphome" >}} by {{< ghuser name="guillempages" >}} (new-integration) -- Update i2s_audio_speaker.cppi2s_audio/speaker: Fix fallthrough compiler warning {{< pr number="7167" repo="esphome" >}} by {{< ghuser name="Mimoja" >}} -- Move CONF_ITEMS/CONF_FONT/CONF_TEXT to const.py {{< pr number="7204" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Fix compile error when using encoder with buttons only. {{< pr number="7203" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Revert "Add null GPIO pin " {{< pr number="6621" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [remote_transmitter] Change default carrier_frequency to valid value {{< pr number="7176" repo="esphome" >}} by {{< ghuser name="iannisimo" >}} -- [code-quality] Organise script imports {{< pr number="7198" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [max31856] Use cv.frequency as validator {{< pr number="7212" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Organise base entities imports {{< pr number="7208" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [spi] Remove `SPIDelegateDummy` {{< pr number="7215" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [code-quality] Apply ruff linting suggestions {{< pr number="7206" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] Organise logger imports {{< pr number="7205" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] Apply ruff linting suggestions to core {{< pr number="7207" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy sprinkler {{< pr number="7222" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] __attribute__((packed)) {{< pr number="7221" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- hx711: Check for DOUT going high after a reading {{< pr number="7214" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [mqtt] Add extended device info {{< pr number="7194" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- [code-quality] NOLINT readability-identifier-naming {{< pr number="7220" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] Organise time imports {{< pr number="7219" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [lvgl] Fix set state on updates {{< pr number="7227" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- add missing override {{< pr number="7231" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add text_align_to_string {{< pr number="7243" repo="esphome" >}} by {{< ghuser name="MrMDavidson" >}} -- [sml] Fixed crashing sml parser {{< pr number="7235" repo="esphome" >}} by {{< ghuser name="eNBeWe" >}} -- Allow project name and version as improv_serial identity {{< pr number="7248" repo="esphome" >}} by {{< ghuser name="AzonInc" >}} -- [lvgl] Implement default group for encoders {{< pr number="7242" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [bme68x_bsec2_i2c] BME68X Temperature+Pressure+Humidity+Gas Sensor via BSEC2 {{< pr number="4585" repo="esphome" >}} by {{< ghuser name="neffs" >}} (new-integration) -- [code-quality] clang-tidy media_player {{< pr number="7238" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump docker/build-push-action from 6.5.0 to 6.6.1 in /.github/actions/build-image {{< pr number="7232" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- fix build error {{< pr number="7229" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- adjust to new python pre-commit hooks {{< pr number="7178" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- add windows script/setup.bat {{< pr number="7140" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [code-quality] add NOLINT haier_base {{< pr number="7236" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] clang-tidy bedjet {{< pr number="7251" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- fix name conflict with zephyr macro {{< pr number="7252" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] Apply ruff linting suggestions {{< pr number="7239" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add support for LYWSD02MMC Xiaomi device {{< pr number="7080" repo="esphome" >}} by {{< ghuser name="juanluss31" >}} (new-integration) -- [code-quality] fix clang-tidy web server {{< pr number="7230" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [test][web_server] Rejig test for v3 {{< pr number="7110" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- [api] Error log when NONE Update command is sent {{< pr number="7247" repo="esphome" >}} by {{< ghuser name="oarcher" >}} -- [api] Add new flag to request state/attribute once from HA only {{< pr number="7258" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [homeassistant] Add `HOME_ASSISTANT_IMPORT_CONTROL_SCHEMA` {{< pr number="7259" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [const] Add some units for future use and adjust case {{< pr number="7260" repo="esphome" >}} by {{< ghuser name="nkinnan" >}} -- [online_image] add option to show placeholder while downloading {{< pr number="7083" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [lvgl] Add initial_focus for encoders {{< pr number="7256" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [code-quality] fix order in esphome/const.py {{< pr number="7267" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy network {{< pr number="7266" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy core optional {{< pr number="7265" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] Fix variable naming in base_light_effects {{< pr number="7237" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy mqtt {{< pr number="7253" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy wifi related {{< pr number="7254" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump docker/build-push-action from 6.6.1 to 6.7.0 in /.github/actions/build-image {{< pr number="7269" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [CI] Dont run full CI on `build-image` action changes {{< pr number="7270" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Implement ByteBuffer {{< pr number="6878" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add min and max brightness parameters for Light dim_relative Action {{< pr number="6971" repo="esphome" >}} by {{< ghuser name="PaoloTK" >}} -- [homeassistant] Native switch entity import and control {{< pr number="7018" repo="esphome" >}} by {{< ghuser name="Links2004" >}} (new-platform) -- [homeassistant] Native number entity import and control {{< pr number="6455" repo="esphome" >}} by {{< ghuser name="landonr" >}} (new-platform) -- [lvgl] Rework events to avoid feedback loops {{< pr number="7262" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add `color_filter_opa` style property {{< pr number="7276" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [code-quality] fix clang-tidy wake_on_lan {{< pr number="7275" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix readability-braces-around-statements {{< pr number="7273" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [mqtt] fix missing initializer in MQTTClientComponent::disable_discovery {{< pr number="7271" repo="esphome" >}} by {{< ghuser name="oarcher" >}} -- [code-quality] fix readability-named-parameter {{< pr number="7272" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- support illuminance for airthings wave plus device {{< pr number="5203" repo="esphome" >}} by {{< ghuser name="MadMonkey87" >}} -- [micro_wake_word] Bump ESPMicroSpeechFeatures version to 1.1.0 {{< pr number="7249" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Implement the finish() method and action. implement the is_stopped condition {{< pr number="7255" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Correct offset calibration {{< pr number="7228" repo="esphome" >}} by {{< ghuser name="descipher" >}} (new-platform) -- remove extra number from pronto {{< pr number="7263" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [api] Bump noise-c library version {{< pr number="7288" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix some small rtttl issues {{< pr number="6817" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix overflow in ESPColorCorrection object {{< pr number="7268" repo="esphome" >}} by {{< ghuser name="g-kiss" >}} -- [validation] Allow `maybe_simple_value` to not have default key in complex value {{< pr number="7294" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [network] Always allow `enable_ipv6: false` {{< pr number="7291" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Revert "[validation] Allow `maybe_simple_value` to not have default key in complex value" {{< pr number="7305" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Bug fixes {{< pr number="7300" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [speaker] Fix header includes {{< pr number="7304" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [microphone] Fix header includes {{< pr number="7310" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix RP2040 Neopixel flickering issue {{< pr number="7307" repo="esphome" >}} by {{< ghuser name="deCodeIt" >}} -- add the ability to add more idf components to an existing setup {{< pr number="7302" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fix waveshare 2.13" epaper stride calculation error {{< pr number="7303" repo="esphome" >}} by {{< ghuser name="serialx" >}} -- [rtttl] fix STOPPED state {{< pr number="7323" repo="esphome" >}} by {{< ghuser name="NewoPL" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2024.9.0.md b/content/changelog/2024.9.0.md deleted file mode 100644 index 28aee92837..0000000000 --- a/content/changelog/2024.9.0.md +++ /dev/null @@ -1,182 +0,0 @@ ---- -description: "Changelog for ESPHome 2024.9.0." -title: "ESPHome 2024.9.0 - 18th September 2024" -params: - seo: - description: Changelog for ESPHome 2024.9.0. - image: /_static/changelog-2024.9.0.png ---- - -{{< imgtable >}} -"UDP","components/udp","udp.svg" -"StatsD","components/statsd","connection.svg" -"BL0906","components/sensor/bl0906","bl0906.png" -"CH422G","components/ch422g","ch422g.svg" -"BMP280 SPI","components/sensor/bmp280","bmp280.jpg" -"LTR501 & LTR301 & LTR558","components/sensor/ltr501","ltr501.jpg" -{{< /imgtable >}} - -## UDP & StatsD Components - -This release brings two new data driven components to ESPHome. - -The first is the {{< docref "/components/udp" "UDP Component" >}} which allows direct communication between ESPHome -devices over the local network. To start off, only sensor and binary sensor data can be transmitted, and -hopefully more entity types will be supported in the future. - -Next is the {{< docref "/components/statsd" "StatsD Component" >}} which allows you to send sensor data -directly to a statsd server for monitoring. - -## Breaking Changes - -There are a few breaking changes this release that will require changes in YAML if you are -using the affected components. Please make sure to check the list below for details about each one. -The documentation is always the best place to find the most up-to-date information on configuration for -any given component found in ESPHome. - -## Thank you for your support - -Did you know that Jesse and Keith both are employed at [Nabu Casa](https://nabucasa.com/) to work full-time on ESPHome? -Yep, that's possible thanks to everyone who subscribes to Home Assistant Cloud. Thank you! - - - -## Release 2024.9.1 - September 23 - -- Copy active wake words to message {{< pr number="7481" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} - -## Release 2024.9.2 - October 1 - -- fix bl0906 reset energy action {{< pr number="7488" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [config_validation] Fix bug with extras on schemas {{< pr number="7497" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Prevent rp2040 randomly breaking the build {{< pr number="7507" repo="esphome" >}} by {{< ghuser name="nkinnan" >}} -- [rp2040] Always use maxgerhardt platform fork {{< pr number="7514" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add support for BL0906 energy meter {{< pr number="7339" repo="esphome" >}} by {{< ghuser name="tarontop" >}} (new-integration) -- [udp] Implement UDP sensor broadcast {{< pr number="6865" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- CH422G support {{< pr number="7356" repo="esphome" >}} by {{< ghuser name="jesterret" >}} (new-integration) -- Add StatsD component {{< pr number="6642" repo="esphome" >}} by {{< ghuser name="Links2004" >}} (new-integration) -- Add support for using BMP280 with SPI {{< pr number="7053" repo="esphome" >}} by {{< ghuser name="ademuri" >}} (new-integration) (breaking-change) -- LTR-501, LTR-301, LTR-558 Series of Lite-On Light (ALS) and Proximity(PS) sensors {{< pr number="6262" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) - -### Breaking Changes - -- [ili9xxx] Make `invert_colors` required {{< pr number="7292" repo="esphome" >}} by {{< ghuser name="gvdhoven" >}} (breaking-change) -- Add support for using BMP280 with SPI {{< pr number="7053" repo="esphome" >}} by {{< ghuser name="ademuri" >}} (new-integration) (breaking-change) -- Move I2S config settings the the base i2sAudio files. Phase 1 {{< pr number="7183" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (breaking-change) -- [i2s_audio] Add more options to speakers and microphones {{< pr number="7306" repo="esphome" >}} by {{< ghuser name="pyos" >}} (breaking-change) - -### Beta Changes - -- [voice-assistant] Dont error on `no_wake_word` timeout error with streaming wake word {{< pr number="7435" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improve manufacturer data tracing to identify BLE devices a bit easie… {{< pr number="7332" repo="esphome" >}} by {{< ghuser name="tomer-w" >}} -- Add sample_bytes to media player supported format {{< pr number="7451" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- [docker] Bump git from 1:2.39.2-1.1 to 1:2.39.5-0+deb12u1 {{< pr number="7452" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add voice assistant configuration messages {{< pr number="7445" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Dont replace project name spaces with underlines {{< pr number="7455" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add voice assistant methods for configuration {{< pr number="7459" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} - -### All changes - -- [code-quality] fix performance-unnecessary-value-param {{< pr number="7274" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy prometheus {{< pr number="7284" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy ota {{< pr number="7282" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy e131 {{< pr number="7281" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy wireguard {{< pr number="7287" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy improv_serial {{< pr number="7283" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy captive_portal {{< pr number="7280" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add HMAC-MD5 support for authenticating OTA updates {{< pr number="7200" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} (new-integration) -- [const] Add UNIT_LITRE {{< pr number="7317" repo="esphome" >}} by {{< ghuser name="Roving-Ronin" >}} -- [code-quality] fix clang-tidy socket {{< pr number="7285" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code-quality] fix clang-tidy cstddef {{< pr number="7324" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add output source priority "hybrid" {{< pr number="7322" repo="esphome" >}} by {{< ghuser name="syssi" >}} -- Enable verbose mode from env ESPHOME_VERBOSE or --verbose {{< pr number="6987" repo="esphome" >}} by {{< ghuser name="ptr727" >}} -- Tuya Number: allow to set hidden datapoints {{< pr number="7024" repo="esphome" >}} by {{< ghuser name="szupi-ipuzs" >}} -- feat: Expand ByteBuffer {{< pr number="7316" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- [ledc] Tweak fix in #6997 {{< pr number="7336" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ledc] Fix maximum brightness on ESP-IDF 5.1 {{< pr number="7342" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Bug fixes: {{< pr number="7341" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [const] Move `CONF_LINE_FREQUENCY` to const.py {{< pr number="7351" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- bl0942: Fix init sequence, add address and line_frequency options {{< pr number="7250" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Add supported formats to media player {{< pr number="7318" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Add reset to esp32_rmt_led_strip {{< pr number="7354" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- [ili9xxx] Make `invert_colors` required {{< pr number="7292" repo="esphome" >}} by {{< ghuser name="gvdhoven" >}} (breaking-change) -- Add WS2811 to esp32_rmt_led_strip {{< pr number="7353" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- [lvgl] Add lvgl.widget.focus action and related triggers. {{< pr number="7315" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- esp32_can: suppress compiler warning {{< pr number="7372" repo="esphome" >}} by {{< ghuser name="mrk-its" >}} -- Add support for BL0906 energy meter {{< pr number="7339" repo="esphome" >}} by {{< ghuser name="tarontop" >}} (new-integration) -- [platformio] Add environments for ESP-IDF 5.3 for development {{< pr number="7371" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Bug fixes {{< pr number="7370" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [bytebuffer] Use existing bit_cast operations. {{< pr number="7374" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump actions/setup-python from 5.1.0 to 5.2.0 {{< pr number="7375" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.1.1 to 5.2.0 in /.github/actions/restore-python {{< pr number="7376" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [gt911] Add reset pin config {{< pr number="7373" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [st7701s] Add delay feature in init sequences {{< pr number="7343" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add now required `invert_colors` option to test files referencing ili9xxx {{< pr number="7367" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- esp32_can: make queue lengths configurable {{< pr number="7361" repo="esphome" >}} by {{< ghuser name="mrk-its" >}} -- [code-quality] fix clang-tidy web_server and web_server_base {{< pr number="7286" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Update MiCS Values {{< pr number="7173" repo="esphome" >}} by {{< ghuser name="TrevorSchirmer" >}} -- Tuya Number: allow restoring value of hidden datapoints {{< pr number="7346" repo="esphome" >}} by {{< ghuser name="szupi-ipuzs" >}} -- [udp] Implement UDP sensor broadcast {{< pr number="6865" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- update logs for bluetooth proxy {{< pr number="7382" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [font] Make display an auto-load, not a dependency {{< pr number="7366" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- CH422G support {{< pr number="7356" repo="esphome" >}} by {{< ghuser name="jesterret" >}} (new-integration) -- [rpi_dpi_rgb] Add enable_pin and reset_display method to driver {{< pr number="7383" repo="esphome" >}} by {{< ghuser name="lboue" >}} -- Bump actions/upload-artifact from 4.3.4 to 4.4.0 {{< pr number="7379" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix build for esp32h2 using esp-idf 5.3 {{< pr number="7393" repo="esphome" >}} by {{< ghuser name="mrene" >}} -- Bump mDNS and follow ruff's suggestions {{< pr number="7308" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Bump rp2040 Arduino platform and framework {{< pr number="7134" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- [gree] Add support for YX1FF remote {{< pr number="7298" repo="esphome" >}} by {{< ghuser name="dangreco" >}} -- [modbus_controller] Allow duplicate command config {{< pr number="7311" repo="esphome" >}} by {{< ghuser name="0x3333" >}} -- Better support for task blocking ring buffer reads and writes {{< pr number="7390" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.0 {{< pr number="7395" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [api] Remove id from `MediaPlayerSupportedFormat` {{< pr number="7406" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Drop max BLE client connections limitation {{< pr number="7088" repo="esphome" >}} by {{< ghuser name="syssi" >}} -- [bl0942] loop and overflow cleanup {{< pr number="7358" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Bump peter-evans/create-pull-request from 6.1.0 to 7.0.0 {{< pr number="7405" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pypa/gh-action-pypi-publish from 1.10.0 to 1.10.1 {{< pr number="7404" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Voice assist improvement - configurable conversation_id timeout {{< pr number="7385" repo="esphome" >}} by {{< ghuser name="jeffc" >}} -- Support BL0942 calibration {{< pr number="7299" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [micro_wake_word] Remove duplicated download code {{< pr number="7401" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add StatsD component {{< pr number="6642" repo="esphome" >}} by {{< ghuser name="Links2004" >}} (new-integration) -- [homeassistant-switch] Support different entity domains {{< pr number="7331" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for using BMP280 with SPI {{< pr number="7053" repo="esphome" >}} by {{< ghuser name="ademuri" >}} (new-integration) (breaking-change) -- Add voice assistant announce {{< pr number="7377" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- [lvgl] Msgbox fixes and enhancements {{< pr number="7380" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- libretiny: Allow specifying version of explicitly imported sources {{< pr number="7408" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [libretiny] Report version 1.7.0 for 'dev' and 'latest' {{< pr number="7415" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- LTR-501, LTR-301, LTR-558 Series of Lite-On Light (ALS) and Proximity(PS) sensors {{< pr number="6262" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Fix armv7 container builds {{< pr number="7426" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [gh-actions] Don't produce docker build summaries {{< pr number="7430" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add BK72xx support to require_framework_version() {{< pr number="7409" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Switch IPv6 platform check to use require_framework_version() {{< pr number="7410" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [bl0942] Improve energy reporting {{< pr number="7428" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [rpi_dpi_rgb] Add bounce_buffer config for ESP-IDF 5.x {{< pr number="7423" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [LVGL] Add color gradients {{< pr number="7427" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [dsmr] Add internal 'telegram' text_sensor to support bridging {{< pr number="6841" repo="esphome" >}} by {{< ghuser name="marcovaneck" >}} -- Pull in new AsyncTCP for IPv6 on BK72xx {{< pr number="7431" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Bump LibreTiny recommended version to 1.7.0 {{< pr number="7432" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Enable IPv6 support for BK72xx {{< pr number="7398" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Move I2S config settings the the base i2sAudio files. Phase 1 {{< pr number="7183" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (breaking-change) -- Implement all supported thermocouple types for MAX31856 {{< pr number="7218" repo="esphome" >}} by {{< ghuser name="ArkanStasarik" >}} -- [i2s_audio] Add more options to speakers and microphones {{< pr number="7306" repo="esphome" >}} by {{< ghuser name="pyos" >}} (breaking-change) -- [uponor_smatrix] Modifies sending algorithm {{< pr number="7326" repo="esphome" >}} by {{< ghuser name="skasi7" >}} -- User configurable frame buffer. {{< pr number="7360" repo="esphome" >}} by {{< ghuser name="ajwahab" >}} -- [Modbus Controller] Added preference to change command retries {{< pr number="7312" repo="esphome" >}} by {{< ghuser name="0x3333" >}} -- [voice-assistant] Dont error on `no_wake_word` timeout error with streaming wake word {{< pr number="7435" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improve manufacturer data tracing to identify BLE devices a bit easie… {{< pr number="7332" repo="esphome" >}} by {{< ghuser name="tomer-w" >}} -- Add sample_bytes to media player supported format {{< pr number="7451" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- [docker] Bump git from 1:2.39.2-1.1 to 1:2.39.5-0+deb12u1 {{< pr number="7452" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add voice assistant configuration messages {{< pr number="7445" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Dont replace project name spaces with underlines {{< pr number="7455" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add voice assistant methods for configuration {{< pr number="7459" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.2.0.md b/content/changelog/2025.2.0.md deleted file mode 100644 index d6f520ea62..0000000000 --- a/content/changelog/2025.2.0.md +++ /dev/null @@ -1,397 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.2.0." -title: "ESPHome 2025.2.0 - 19th February 2025" -params: - seo: - description: Changelog for ESPHome 2025.2.0. - image: /_static/changelog-2025.2.0.png ---- - -{{< imgtable >}} -"Audio ADC Core","components/audio_adc/index","audio_adc.svg","" -"XXTEA","components/xxtea","xxtea.svg","" -"Host SDL2 Keyboard","components/binary_sensor/sdl","sdl.png","" -"ES7210","components/audio_adc/es7210","es7210.svg","" -"ES7243E","components/audio_adc/es7243e","es7243e.svg","" -"ES8156","components/audio_dac/es8156","es8156.svg","" -"Speaker Media Player","components/media_player/speaker","speaker.svg","dark-invert" -"Mixer Speaker","components/speaker/mixer","mixer.svg","" -"Resampler Speaker","components/speaker/resampler","waveform.svg","dark-invert" -{{< /imgtable >}} -**🎉 Happy New Year! 🎉** - -We're kicking off 2025 with a number of updates, several of which are focused on removing old code. Unfortunately, -this means we have a few breaking changes, but this work helps keep ESPHome more maintainable in the long-run. - -Join us below for the ESPHome New Year Release Party. - - - - -## Removal of "old style" Platform Configuration - -[Three years ago](https://github.com/esphome/esphome/pull/2303), we added support for using -[ESP-IDF](https://github.com/espressif/esp-idf/) directly (as an alternative to Arduino). This brought about a -number of benefits and a new syntax was introduced to facilitate greater flexibility when specifying and configuring -your microcontroller/board. - -In this release, we've removed support for the "old style" of configuring your microcontroller/board. If you're still -using it, you'll need to update your configurations to use the new style. A brief explanation is -[in this pull request](https://github.com/esphome/esphome/pull/8118), but for more detail, please see the -[documentation for your microcontroller platform](/components#devices). - -## Removal of Custom Components - -Custom components were deprecated over a year ago and, as promised, support for them was removed in this release. We -encourage all developers to migrate their custom components to {{< docref "/components/external_components" >}}. -Please see [a note about custom components](https://developers.esphome.io/blog/2025/02/19/about-the-removal-of-support-for-custom-components/) -for a detailed explanation and next steps. - -## Removal of `armv7` support - -ESPHome no longer supports the 32-bit `armv7` architecture. This is due to both waning support as it relates to -tooling and performance reasons. We strongly recommend moving to a more modern architecture, especially if you're using -the ESPHome Device Builder to build/compile firmware for your devices. - -- The toolchains required for compiling ESPHome are dropping support for armv7, so if the toolchain is not available, - ESPHome can't do the compile. - -- Building on armv7 is very slow and is likely to crash due to lack of RAM, which is not a good user experience. -- ESPHome can be installed anywhere you can run Docker or Python pip, which will provide a better experience with - much faster compiling. - -## `esp32_rmt` Updates - -Components which utilize the RMT hardware found on the ESP32 and its variants have been updated to use the new -interface available in [ESP-IDF](https://github.com/espressif/esp-idf/) versions 5 and above. This eliminates -related warnings seen in the compiler logs while building ESPHome configurations. In most cases, you won't notice any -difference, but this change could result in some issues, particularly for -{{< docref "/components/external_components" >}}. You may need to make a minor change or two in your device -configurations; the configuration validator will tell you if this is necessary as you update your devices. - -## Audio Components - -This release includes support for a number of new audio-related components/hardware. These are primarily aimed at -supporting hardware found in Espressif's S3-Box series of products, eliminating the need to use the -[ESP-ADF](https://github.com/espressif/esp-adf/) and thus offering better integration with ESPHome in general. If -you're using an S3-Box (or one of the variants), we strongly recommend updating your device either OTA or by using our -{{< docref "/projects" >}} web installer. If you have "taken control" of or "adopted" your S3-Box, we strongly recommend -updating your device's local configuration based on our updated configuration files found at -. - -In addition, new `speaker` components have been introduced to provide more advanced functionality when using -{{< docref "/components/voice_assistant" >}}. These components extend our work to help you create the ultimate -personal voice assistant hardware. - -The new {{< docref "/components/media_player/speaker" "speaker media player" >}} component adds several features -for building a well-rounded audio device. It supports playing two different streams of audio: one for announcements -and another for music. - -The new {{< docref "/components/speaker/mixer" "mixer speaker" >}} component lets you combine the two streams. The mixer -even supports audio ducking, so you can lower the volume of the music while your announcement plays! - -## Image Components - -This release adds support for alpha-blending images when using LVGL. To facilitate this, the `use_transparency` -configuration variable in {{< docref "/components/image" >}} and related components was renamed to `transparency` -and changed from a boolean to an enum; in addition, the `type` configuration variable is now mandatory. See the -{{< docref "/components/image" >}} documentation for more detail. - -The default presentation for binary images has changed in part due to the new transparency support. This may result -in images appearing to have inverted colors for example on e-ink displays. There is a new configuration variable, -`invert_alpha`, which can be used to switch black and white pixels if necessary to restore the previous behaviour. - -Finally, the {{< docref "/components/online_image" >}} was updated to add support for both BMP and JPEG image formats. - -## ILI9XXX Display Component - -There are two changes to the {{< docref "/components/display/ili9xxx" >}} component. Previously the component -automatically loaded the `psram` component - this has been removed, and you must now explicitly include the -`psram` component in your configuration if your display requires it. The bit-depth defaults to 16 bit as before, but -there is no attempt to automatically fallback to 8 bit if insufficient memory is available. You must now explicitly -select 8-bit mode with the `color_palette` configuration variable if required. - -The symptoms caused by these changes are likely to be a blank screen or a screen that is not displaying correctly. Check -the runtime logs for any errors or warnings that may indicate the cause of the issue, specifically memory allocation -failures. - - - -## Release 2025.2.1 - February 26 - -- Bump aioesphomeapi to 29.1.1 {{< pr number="8274" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix BLE max notifications with ESP-IDF 5.x {{< pr number="8301" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update webserver local assets to 20250224-195901 {{< pr number="8312" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Fix bluetooth race when disconnect called while still connecting {{< pr number="8297" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_touch] Fix variants, add tests for variants {{< pr number="8320" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2025.2.2 - March 3 - -- Fix `end_of_scan_` not being called while disconnecting {{< pr number="8328" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [audio] Determine http timeout based on duration since last successful read {{< pr number="8341" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Bump aioesphomeapi to 29.3.2 {{< pr number="8353" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ltr390] Move calculation to allow dynamic setting of gain and resolution {{< pr number="8343" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- [es7210] add support for es7210 ADC {{< pr number="8007" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [audio_adc] Add new `audio_adc` component {{< pr number="8094" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [es8156] Add support for ES8156 audio DAC {{< pr number="8085" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [es7243e] Add support for ES7243E audio ADC {{< pr number="8098" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [esp32_ble_server] Create custom services, characteristics and descriptors {{< pr number="7009" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} (new-integration) -- [resampler] Media Player Components PR7 {{< pr number="8169" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [mixer] Media Player Components PR8 {{< pr number="8170" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [xxtea] Extract encryption functions to separate component {{< pr number="8183" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [logger] Add runtime level select {{< pr number="8222" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [speaker] Media Player Components PR9 {{< pr number="8171" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) - -### New Platforms - -- [uptime] Add text_sensor {{< pr number="8028" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-platform) -- Add: Human Presence and Target Count to the Seeed Studio MR60BHA2 {{< pr number="8010" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-platform) -- [sdl] Implement binary sensors from keystrokes {{< pr number="8207" repo="esphome" >}} by {{< ghuser name="bdm310" >}} (new-platform) - -### Breaking Changes - -- [esp32_rmt] Updates for IDF 5+ {{< pr number="7770" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [lvgl] remove default state {{< pr number="8038" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [nextion] Brightness control tweaks {{< pr number="8027" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- [image] Transparency changes; code refactor {{< pr number="7908" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [ili9xxx] psram and 8 bit changes {{< pr number="8084" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [core] Remove old style platform configuration {{< pr number="8118" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [custom] Remove platforms {{< pr number="8119" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Remove arm/v7 container image support {{< pr number="8194" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [esp32_rmt] Set pull-up and open-drain modes based on pin schema {{< pr number="8178" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [scd30] Increase minimal CONF_UPDATE_INTERVAL from 1 to 2 seconds {{< pr number="8256" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} (breaking-change) - -### Beta Changes - -- [online_image]Fix reset if buffer not allocated {{< pr number="8236" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [core] Ignore dot-prefixed config entries when looking for target platform {{< pr number="8240" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump zeroconf to 0.144.1 {{< pr number="8238" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Fix `config_dir` for dashboard {{< pr number="8242" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [cse7766] Remove `stream` dependency {{< pr number="7720" repo="esphome" >}} by {{< ghuser name="gabest11" >}} -- [graph] Remove `stream` dependency {{< pr number="8243" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [modbus_controller] Remove `stream` dependency {{< pr number="8244" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [logger] Fix bug causing global log level to be overwritten {{< pr number="8248" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Add support for the DAC on the S2 {{< pr number="8030" repo="esphome" >}} by {{< ghuser name="maraid" >}} -- Fix crash when storage file doesnt exist yet {{< pr number="8249" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- don't crash on null pages {{< pr number="8254" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [scd30] Increase minimal CONF_UPDATE_INTERVAL from 1 to 2 seconds {{< pr number="8256" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} (breaking-change) -- Bump zeroconf to 0.144.3 {{< pr number="8253" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- DHT platform now supports modules with inbuilt external resistor {{< pr number="8257" repo="esphome" >}} by {{< ghuser name="deCodeIt" >}} -- Replace glyphsets with esphome_glyphsets {{< pr number="8261" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi to 29.1.0 {{< pr number="8105" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump openssh-client to 1:9.2p1-2+deb12u4 to fix docker builds {{< pr number="8269" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Increase default repeat delay for Toto remote transmitter protocol {{< pr number="8265" repo="esphome" >}} by {{< ghuser name="G-Two" >}} -- Bump zeroconf to 0.145.1 {{< pr number="8267" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -### All changes - -- [rotary_encoder] Fix volatile increment/decrement deprecation warnings {{< pr number="7958" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [pulse_counter] Fix volatile increment/decrement deprecation warnings {{< pr number="7954" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [nextion] Publishes `is_connected()` {{< pr number="7961" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix adc channel for ESP32-H2 {{< pr number="7964" repo="esphome" >}} by {{< ghuser name="luar123" >}} -- [nextion] Remove `_internal` from non-protected functions {{< pr number="7656" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [opentherm] Message ordering, on-the-fly message editing, code improvements {{< pr number="7903" repo="esphome" >}} by {{< ghuser name="olegtarasov" >}} -- [debug] Detailed reset reason {{< pr number="7729" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [uart] Use `SOC_UART_NUM` as number of uarts instead of `UART_NUM_MAX` {{< pr number="7967" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ci] Dont run main ci suite on docker files {{< pr number="7966" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump docker/setup-buildx-action from 3.7.1 to 3.8.0 in the docker-actions group {{< pr number="7969" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [core] Add c6 and h2 to split default {{< pr number="7974" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [midea] Add Fahrenheit support to `midea_ac.follow_me` action {{< pr number="7762" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- [esp32_rmt] Updates for IDF 5+ {{< pr number="7770" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [qspi_dbi] Bugfix and new features {{< pr number="7979" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [helpers] Provide calls to get free heap and largest available block. {{< pr number="7978" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump actions/upload-artifact from 4.4.3 to 4.5.0 {{< pr number="7981" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [esp32_ble] do not skip events if queue is blocked {{< pr number="7960" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [ble_client, bluetooth_proxy, esp32_ble_client, esp32_ble_tracker] fix ble proxy stop working {{< pr number="7901" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [esp32_rmt] IDF 5+ update fixes {{< pr number="8002" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Initialize esp32_rmt_led_strip buffer {{< pr number="8036" repo="esphome" >}} by {{< ghuser name="pzich" >}} -- [addressable_light] Remove rmt channel from idf tests {{< pr number="7987" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Remove rmt channel from idf tests {{< pr number="8054" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fixed comment typo in light_color_values.h {{< pr number="8050" repo="esphome" >}} by {{< ghuser name="samunemeth" >}} -- Fix braceless else statements {{< pr number="7799" repo="esphome" >}} by {{< ghuser name="pzich" >}} -- Enable udp to work (on ipv4) when ipv6 is enabled {{< pr number="8060" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Update sprinkler.cpp {{< pr number="7996" repo="esphome" >}} by {{< ghuser name="jotaj91" >}} -- [lvgl] remove default state {{< pr number="8038" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [lvgl] fix bg_image_src {{< pr number="8005" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lgvl] disp_bg_image and disp_bg_opa changes {{< pr number="8025" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [spi_led_strip] Fix priority {{< pr number="8021" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [config] Early check for required version {{< pr number="8000" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Implement `lvgl.page.is_showing:` condition {{< pr number="8055" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [display] auto_clear_enabled defaults {{< pr number="7986" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Convert IPAddress to use Pythonmodule ipaddress {{< pr number="8072" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Add log level env var {{< pr number="7604" repo="esphome" >}} by {{< ghuser name="briancw" >}} -- [spi] relay on KEY_TARGET_PLATFORM as the other platforms does {{< pr number="8066" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Bump actions/upload-artifact from 4.5.0 to 4.6.0 {{< pr number="8058" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6 {{< pr number="8024" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-qemu-action from 3.2.0 to 3.3.0 in the docker-actions group {{< pr number="8052" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.10.0 to 6.11.0 in /.github/actions/build-image {{< pr number="8053" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Allow CONF_RMT_CHANNEL parameter for IDF 4.X {{< pr number="8035" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [esp32] Fix arch_get_cpu_freq_hz {{< pr number="8047" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix Waveshare 7in5bv3bwr image quality in BWR mode {{< pr number="8043" repo="esphome" >}} by {{< ghuser name="zbikmarc" >}} -- [json] use correct formatting {{< pr number="8039" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [nextion] Brightness control tweaks {{< pr number="8027" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- [image] Transparency changes; code refactor {{< pr number="7908" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Added VERY_VERBOSE dfplayer printing {{< pr number="8026" repo="esphome" >}} by {{< ghuser name="solarkennedy" >}} -- [core] fix comment for crc8 function in helpers.h {{< pr number="8016" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- [debug] Add framework type to debug info {{< pr number="8013" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [debug] Add ESP32 partition table logging to `dump_config` {{< pr number="8012" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [psram] Improve total PSRAM display in logs by using rounded KB values {{< pr number="8008" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Use ESPHome logo on readme page according to theme (light/dark) {{< pr number="7992" repo="esphome" >}} by {{< ghuser name="dougiteixeira" >}} -- Fix compile errors with pioarduino/platform-espressif32: wifi_component_esp32_arduino.cpp {{< pr number="7998" repo="esphome" >}} by {{< ghuser name="bitflippersanonymous" >}} -- Include esp_mac.h and C++20 str_startswith/str_ends {{< pr number="7999" repo="esphome" >}} by {{< ghuser name="bitflippersanonymous" >}} -- [esp32_wifi] Enhance WiFi component with TCPIP core locking. {{< pr number="7997" repo="esphome" >}} by {{< ghuser name="bitflippersanonymous" >}} -- add missing include in base_automation.h {{< pr number="8001" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- Fixed topic when mac is used {{< pr number="7988" repo="esphome" >}} by {{< ghuser name="Hadatko" >}} -- web_server: Adds REST API POST endpoints to arm and disarm {{< pr number="7985" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- [lvgl] fix tests {{< pr number="8075" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Allow external libraries to use ESP_LOGx macros {{< pr number="8078" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- [uptime] Add text_sensor {{< pr number="8028" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-platform) -- [image] Fix mdi images {{< pr number="8082" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ili9xxx] psram and 8 bit changes {{< pr number="8084" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [spi] Restore `SPIDelegateDummy` {{< pr number="8019" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] fix lvgl.widget.update and friends {{< pr number="8087" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix(web_server/fan): send speed update values even when fan is off {{< pr number="8086" repo="esphome" >}} by {{< ghuser name="distante" >}} -- [es7210] add support for es7210 ADC {{< pr number="8007" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [event] Store `last_event_type` in class {{< pr number="8088" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [prometheus] Select, media_player, and number prometheus metrics {{< pr number="7895" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- Bump docker/build-push-action from 6.11.0 to 6.12.0 in /.github/actions/build-image {{< pr number="8090" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Revert "Add resistance_sampler interface for config validation" {{< pr number="8093" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix running pre-commit on Windows {{< pr number="8095" repo="esphome" >}} by {{< ghuser name="stellar-aria" >}} -- Remove black-formatter from pre-commit hooks {{< pr number="8097" repo="esphome" >}} by {{< ghuser name="stellar-aria" >}} -- Increase Daly-BMS coltage cells from 16 to 18 cells {{< pr number="8057" repo="esphome" >}} by {{< ghuser name="j-sepul" >}} -- [image]Rename option "use_transparency" {{< pr number="8113" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [online_image] Use RAMAllocator {{< pr number="8114" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Fixed incorrect display dimension {{< pr number="8110" repo="esphome" >}} by {{< ghuser name="Duckle29" >}} -- Update defines.h for esp-idf 5.1.5 {{< pr number="8117" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [audio_adc] Add new `audio_adc` component {{< pr number="8094" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [uptime] Cosmetic improvements for uptime text_sensor {{< pr number="8101" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [es8156] Add support for ES8156 audio DAC {{< pr number="8085" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [esp32_touch] Fix deprecated warning {{< pr number="8092" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [core] Remove old style platform configuration {{< pr number="8118" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Bump actions/stale from 9.0.0 to 9.1.0 {{< pr number="8120" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [custom] Remove platforms {{< pr number="8119" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- Add: Human Presence and Target Count to the Seeed Studio MR60BHA2 {{< pr number="8010" repo="esphome" >}} by {{< ghuser name="limengdu" >}} (new-platform) -- [es7243e] Add support for ES7243E audio ADC {{< pr number="8098" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- [debug] fix debug_esp32 printf for partition size and address {{< pr number="8122" repo="esphome" >}} by {{< ghuser name="fightforlife" >}} -- [esp32] Set logger default interface for C6 {{< pr number="8126" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [core] add support for custom platform {{< pr number="7616" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add verbose logging for pulse width calculation in pulse_meter {{< pr number="8124" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- [ads1115] Add sample rate control {{< pr number="8102" repo="esphome" >}} by {{< ghuser name="brambo123" >}} -- Fix mqtt climate step rounding {{< pr number="8121" repo="esphome" >}} by {{< ghuser name="olemmela" >}} -- [spi] Fix data type in bitbash transfer_() {{< pr number="8125" repo="esphome" >}} by {{< ghuser name="oliv3r" >}} -- [online_image] Add binary bmp support {{< pr number="8116" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [online_image] Code Improvements {{< pr number="8130" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- Update mdns for ESP-IDF {{< pr number="8145" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Include Bluetooth connection slot allocations in connections free message {{< pr number="8148" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_server] Create custom services, characteristics and descriptors {{< pr number="7009" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} (new-integration) -- [online_image] Add JPEG support to online_image {{< pr number="8127" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [logger] Ensure PRIu32 and friends are available {{< pr number="8155" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix forgotten uses of use_transparency {{< pr number="8115" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Add multicast support to udp component {{< pr number="8051" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- [display] Properly handle case of auto_clear_enabled: false {{< pr number="8156" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32_rmt] Increase default symbols in led strip and remove IRAM config {{< pr number="8133" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [climate] Accept °K as intended {{< pr number="8134" repo="esphome" >}} by {{< ghuser name="oliv3r" >}} -- Bump docker/build-push-action from 6.12.0 to 6.13.0 in /.github/actions/build-image {{< pr number="8136" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pypa/gh-action-pypi-publish from 1.12.3 to 1.12.4 {{< pr number="8137" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.3.0 to 5.4.0 {{< pr number="8154" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.3.0 to 5.4.0 in /.github/actions/restore-python {{< pr number="8153" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [remote_transmitter] Fix issues with 32bit rollover on esp8266 and libretiny {{< pr number="8056" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Use abspath for config path dir {{< pr number="8044" repo="esphome" >}} by {{< ghuser name="NicoIIT" >}} -- [remote_base] Add default value for offset in is_valid {{< pr number="8159" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- feat(core): Add support for <...> includes {{< pr number="8132" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- Bump zeroconf to 0.143.0 {{< pr number="8104" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [i2s_audio] Media Player Components PR1 {{< pr number="8163" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [audio, i2s_audio, speaker] Media Player Components PR2 {{< pr number="8164" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [audio] Media Player Components PR3 {{< pr number="8165" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Add virtual get_flags() to GPIOPin and implementation in InternalGPIOPin derivatives {{< pr number="8151" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- Make get_flags() in GPIOPin mandatory {{< pr number="8182" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- [audio] Media Player Components PR4 {{< pr number="8166" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [audio] Media Player Components PR5 {{< pr number="8167" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [audio] Media Player Components PR6 {{< pr number="8168" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Remove arm/v7 container image support {{< pr number="8194" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [resampler] Media Player Components PR7 {{< pr number="8169" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [mixer] Media Player Components PR8 {{< pr number="8170" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [CI] Consolidate some tests (A) {{< pr number="8184" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (B) {{< pr number="8185" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (C) {{< pr number="8186" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (D) {{< pr number="8189" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (E) {{< pr number="8191" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (F) {{< pr number="8195" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (G) {{< pr number="8196" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (H) {{< pr number="8198" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (K, L) {{< pr number="8201" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (M) {{< pr number="8202" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (I, J) {{< pr number="8200" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [i2c] Workaround for i2c on s2 {{< pr number="8188" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [lvgl] add triggers for swipe gestures {{< pr number="8190" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [xxtea] Extract encryption functions to separate component {{< pr number="8183" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [lvgl] Make layouts work properly on base display {{< pr number="8193" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [preferences] Better handling of flash_write_interval {{< pr number="8199" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [CI] Consolidate some tests (N, O, P) {{< pr number="8204" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (Q, R) {{< pr number="8205" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [prometheus] Add update entity to prometheus metrics {{< pr number="8173" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- [uponor_smatrix] add target temperature as sensor {{< pr number="7745" repo="esphome" >}} by {{< ghuser name="janschroeter" >}} -- [sdl] Implement binary sensors from keystrokes {{< pr number="8207" repo="esphome" >}} by {{< ghuser name="bdm310" >}} (new-platform) -- Bump the docker-actions group with 2 updates {{< pr number="8215" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [esp32_rmt] Set pull-up and open-drain modes based on pin schema {{< pr number="8178" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- Add Toto protocol to remote receiver and transmitter {{< pr number="8177" repo="esphome" >}} by {{< ghuser name="G-Two" >}} -- Markdown tweaks/updates {{< pr number="8211" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (S) {{< pr number="8206" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (U, V, W, X, Y, Z) {{< pr number="8210" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [CI] Consolidate some tests (T) {{< pr number="8208" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [online_image]Pin specific version of JPEG library {{< pr number="8217" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [logger] Add runtime level select {{< pr number="8222" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [online_image] Set Accept header {{< pr number="8216" repo="esphome" >}} by {{< ghuser name="candrews" >}} -- [waveshare_epaper] Rationalise and complete tests {{< pr number="8221" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix pref conflict of WiFi creds and fast_connect {{< pr number="8219" repo="esphome" >}} by {{< ghuser name="QRPp" >}} -- Don't activate venv in devcontainer {{< pr number="8128" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Add ADC sampling method option {{< pr number="8131" repo="esphome" >}} by {{< ghuser name="blind-oracle" >}} -- [ota] Increase socket timeout earlier in OTA script {{< pr number="8129" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [speaker] Media Player Components PR9 {{< pr number="8171" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- Add partial update of GDEW029T5 e-paper display {{< pr number="8162" repo="esphome" >}} by {{< ghuser name="mystster" >}} -- Add waveshare 2.9inch e-Paper HAT (D) {{< pr number="7906" repo="esphome" >}} by {{< ghuser name="TataGEEK" >}} -- [http_request]Use std::string for headers {{< pr number="8225" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [online_image] Improve error handling {{< pr number="8212" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [speaker] Bugfix: Ensure all audio is played after completely decoding a file {{< pr number="8231" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [voice_assistant] Add announce support {{< pr number="8232" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [prometheus] Adding valve entity metrics {{< pr number="8223" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- Added Waveshare e-paper display model "7.50inv2p" to the waveshare_epaper component. {{< pr number="7751" repo="esphome" >}} by {{< ghuser name="tmpeh" >}} -- added Waveshare BWR Mode for the 4.2in Display {{< pr number="7995" repo="esphome" >}} by {{< ghuser name="itpcc" >}} -- Add GDEY029T94 support {{< pr number="7931" repo="esphome" >}} by {{< ghuser name="danielkoek" >}} -- GDEY042T81 e-paper displays support {{< pr number="8061" repo="esphome" >}} by {{< ghuser name="mgruener" >}} -- Add support for Waveshare 7.3" ACeP 7-Color display {{< pr number="6380" repo="esphome" >}} by {{< ghuser name="NeilSCGH" >}} -- Bump esphome-dashboard to 20250212.0 {{< pr number="8235" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [online_image]Fix reset if buffer not allocated {{< pr number="8236" repo="esphome" >}} by {{< ghuser name="guillempages" >}} -- [core] Ignore dot-prefixed config entries when looking for target platform {{< pr number="8240" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump zeroconf to 0.144.1 {{< pr number="8238" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Fix `config_dir` for dashboard {{< pr number="8242" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [cse7766] Remove `stream` dependency {{< pr number="7720" repo="esphome" >}} by {{< ghuser name="gabest11" >}} -- [graph] Remove `stream` dependency {{< pr number="8243" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [modbus_controller] Remove `stream` dependency {{< pr number="8244" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [logger] Fix bug causing global log level to be overwritten {{< pr number="8248" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Add support for the DAC on the S2 {{< pr number="8030" repo="esphome" >}} by {{< ghuser name="maraid" >}} -- Fix crash when storage file doesnt exist yet {{< pr number="8249" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- don't crash on null pages {{< pr number="8254" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [scd30] Increase minimal CONF_UPDATE_INTERVAL from 1 to 2 seconds {{< pr number="8256" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} (breaking-change) -- Bump zeroconf to 0.144.3 {{< pr number="8253" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- DHT platform now supports modules with inbuilt external resistor {{< pr number="8257" repo="esphome" >}} by {{< ghuser name="deCodeIt" >}} -- Replace glyphsets with esphome_glyphsets {{< pr number="8261" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi to 29.1.0 {{< pr number="8105" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump openssh-client to 1:9.2p1-2+deb12u4 to fix docker builds {{< pr number="8269" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Increase default repeat delay for Toto remote transmitter protocol {{< pr number="8265" repo="esphome" >}} by {{< ghuser name="G-Two" >}} -- Bump zeroconf to 0.145.1 {{< pr number="8267" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.3.0.md b/content/changelog/2025.3.0.md deleted file mode 100644 index 924ac04b8d..0000000000 --- a/content/changelog/2025.3.0.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.3.0." -title: "ESPHome 2025.3.0 - 19th March 2025" -params: - seo: - description: Changelog for ESPHome 2025.3.0. - image: /_static/changelog-2025.3.0.png ---- - -{{< imgtable >}} -"CHSC6X","components/touchscreen/chsc6x","chsc6x.png" -"LD2450","components/sensor/ld2450","ld2450.png" -"MSA301/MSA311","components/sensor/msa3xx","msa301.jpg" -"Tormatic/Novoferm","components/cover/tormatic","tormatic.png" -{{< /imgtable >}} -Our second release of 2025 is a bit smaller -- Jesse is away, so we are a bit short-staffed. 😅 - -Even so, we do still have a few new additions (as above), so we thought we'd proceed with a release just the same. -Of note, the long-awaited {{< docref "/components/sensor/ld2450" >}} has landed; as there are now a few products -available with this sensor, it seemed about time to get it baked in. That said, I'll keep it short. Happy hacking! - - - -## Release 2025.3.1 - March 22 - -- [ft63x6] Get correct dimensions from display {{< pr number="8417" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Set correct buffer size {{< pr number="8442" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Ensure non-zero screen dimensions during init {{< pr number="8444" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -## Release 2025.3.2 - March 25 - -- [gt911][cst226][ektf2232] Swap x and y calibration values {{< pr number="8450" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [font] More robust handling of fixed font sizes. {{< pr number="8443" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix 1bpp rendering {{< pr number="8463" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [media_player] Don't reset enqueue command {{< pr number="8465" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [speaker] Bugfix: Fix rapidly adding items to playlist {{< pr number="8466" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [ld2450] Fix bluetooth state not reported correctly {{< pr number="8458" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -## Release 2025.3.3 - March 31 - -- [display] Don't assume glyph x_offset is zero. {{< pr number="8473" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump ESP mdns to 1.8.2 {{< pr number="8482" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [speaker] Bugfix: Media player always unpauses when receiving a stop command {{< pr number="8474" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [lvgl] Implement switch restore {{< pr number="8481" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [speaker] Bugfixes: two pause state issues {{< pr number="8488" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} - -## Full list of changes - -### New Components - -- [ld2450] Add new component {{< pr number="5674" repo="esphome" >}} by {{< ghuser name="hareeshmu" >}} (new-integration) -- Adding support for chsc6x touch controller {{< pr number="8258" repo="esphome" >}} by {{< ghuser name="kkosik20" >}} (new-integration) -- MSA311 and MSA301 accelerometer support {{< pr number="6795" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Cover component for Tormatic and Novoferm garage doors {{< pr number="5933" repo="esphome" >}} by {{< ghuser name="ti-mo" >}} (new-integration) - -### Breaking Changes - -- [mlx90393] Fix inverted gain and resolution. Expose temperature_compensation and hallconf. {{< pr number="7635" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (breaking-change) -- [touchscreen] Axis swap bugfix {{< pr number="8376" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [cst816] Remove binary sensor {{< pr number="8377" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) - -### Beta Changes - -- Bump mdns library to 1.8.0 {{< pr number="8378" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [audio, mixer] Memory and CPU performance improvements {{< pr number="8387" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [speaker, resampler, mixer] Make volume and mute getters virtual {{< pr number="8391" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [core] add reallocation support to RAMAllocator {{< pr number="8390" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [api] add voice assistant announce to the api {{< pr number="8395" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Bump aioesphomeapi to 29.6.0 {{< pr number="8396" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Rework pyproject.toml to make it parseable by dependabot {{< pr number="8397" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump cryptography to 44.0.2 {{< pr number="8399" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump tornado from 6.4 to 6.4.2 {{< pr number="8398" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [font] Fix issues with bitmap fonts {{< pr number="8407" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Added getters for graphs ymin and ymax {{< pr number="8112" repo="esphome" >}} by {{< ghuser name="Duckle29" >}} -- [docker] Bump curl, git, openssh-client, libopenjp2-7, nginx-light {{< pr number="8419" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [docker] Bump libfreetype {{< pr number="8426" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [core] Handle mis-typed platform name more cleanly {{< pr number="8424" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [audio] Bugfix: fix flac decoding glitches by using esp-audio-libs v1.1.3 {{< pr number="8431" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} - -### All changes - -- [modbus_controller] Extend tests {{< pr number="8245" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Switch to native arm runners for docker CI {{< pr number="8262" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use the process CPU count to determine how many children to create {{< pr number="8268" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump actions/cache from 4.2.0 to 4.2.1 in /.github/actions/restore-python {{< pr number="8273" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.2.0 to 4.2.1 {{< pr number="8271" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Ruff format for CI {{< pr number="8276" repo="esphome" >}} by {{< ghuser name="stellar-aria" >}} -- [ld2450] Add new component {{< pr number="5674" repo="esphome" >}} by {{< ghuser name="hareeshmu" >}} (new-integration) -- Bump docker/build-push-action from 6.13.0 to 6.14.0 in /.github/actions/build-image {{< pr number="8281" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Finish up transition from black-format to ruff {{< pr number="8294" repo="esphome" >}} by {{< ghuser name="stellar-aria" >}} -- [core, dashboard] load external component to get get_download_types {{< pr number="8139" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [ota] set USE_OTA_VERSION 2 in defines {{< pr number="8299" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [socket] add connect method {{< pr number="8308" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7 {{< pr number="8314" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/upload-artifact from 4.6.0 to 4.6.1 {{< pr number="8295" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [api] ensure fair network sharing + prevent lost state changes via deferred publish at high event load {{< pr number="7547" repo="esphome" >}} by {{< ghuser name="nkinnan" >}} -- ili9xxx: Add support for GC9D01N circle display {{< pr number="8302" repo="esphome" >}} by {{< ghuser name="rforro" >}} -- web_server: ensure fair network sharing + prevent lost state changes via deferred publish at high event load {{< pr number="7538" repo="esphome" >}} by {{< ghuser name="nkinnan" >}} -- [i2c] python code style {{< pr number="8311" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Adding support for chsc6x touch controller {{< pr number="8258" repo="esphome" >}} by {{< ghuser name="kkosik20" >}} (new-integration) -- [core] make upload_program more generic {{< pr number="8321" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [i2c] Fix i2c issue on idf 5.3 {{< pr number="8283" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [core] SplitDefault unit test {{< pr number="8324" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add option to include vars in remote packages {{< pr number="7606" repo="esphome" >}} by {{< ghuser name="pszafer" >}} -- [ld2450] Fix for "unknown" sensor states {{< pr number="8305" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Update arduino-heatpumpir and add new protocol for Panasonic AC {{< pr number="8309" repo="esphome" >}} by {{< ghuser name="barchasse38" >}} -- MSA311 and MSA301 accelerometer support {{< pr number="6795" repo="esphome" >}} by {{< ghuser name="latonita" >}} (new-integration) -- Include the bluetooth mac address in the device info when proxy is enabled {{< pr number="8203" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- dashboard: Implement automatic ping fallback {{< pr number="8263" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ld2450] Fix misplaced `ifdef` and related logic {{< pr number="8335" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Bump the docker-actions group with 2 updates {{< pr number="8330" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/download-artifact from 4.1.8 to 4.1.9 {{< pr number="8331" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.14.0 to 6.15.0 in /.github/actions/build-image {{< pr number="8332" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [mlx90393] Fix inverted gain and resolution. Expose temperature_compensation and hallconf. {{< pr number="7635" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} (breaking-change) -- [font] Use freetype instead of Pillow for font rendering {{< pr number="8300" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump actions/cache from 4.2.1 to 4.2.2 {{< pr number="8336" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.2.1 to 4.2.2 in /.github/actions/restore-python {{< pr number="8337" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [zeroconf] Ruff formatting {{< pr number="8338" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nrf52, core] unified way how all platforms handle SplitDefault {{< pr number="7715" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Cover component for Tormatic and Novoferm garage doors {{< pr number="5933" repo="esphome" >}} by {{< ghuser name="ti-mo" >}} (new-integration) -- [io_bus] Initial implementation {{< pr number="8227" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [tmp1075] fix component for TMP1075N {{< pr number="8317" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Bump docker/setup-qemu-action from 3.5.0 to 3.6.0 in the docker-actions group {{< pr number="8346" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [dashboard] Rename trash/delete to archive {{< pr number="8357" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [helpers] Allow RAMAllocator to be told the size of the object manually {{< pr number="8356" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ld2450] fix null exception & zone target_count not published {{< pr number="8348" repo="esphome" >}} by {{< ghuser name="mistic100" >}} -- [bmp085] Fix error in read of pressure {{< pr number="8359" repo="esphome" >}} by {{< ghuser name="gusdleon" >}} -- [udp] fix clang tidy {{< pr number="8351" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [i2s_audio] Bugfix: Speaker incorrectly delays when sending data {{< pr number="8361" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Initialise h-bridge switch to requested initial state {{< pr number="8363" repo="esphome" >}} by {{< ghuser name="AnyOldName3" >}} -- [lvgl] Fix initialisation race condition (Bugfix) {{< pr number="8369" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [time] fix recalc_timestamp_local {{< pr number="8239" repo="esphome" >}} by {{< ghuser name="qraynaud" >}} -- allow touchscreen buttons outside of display dimensions {{< pr number="8296" repo="esphome" >}} by {{< ghuser name="zendes" >}} -- [touchscreen] Axis swap bugfix {{< pr number="8376" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [cst816] Remove binary sensor {{< pr number="8377" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Revert "[io_bus] Initial implementation" {{< pr number="8384" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump aioesphomeapi to 29.5.1 {{< pr number="8364" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump esptool to 4.8.1latest {{< pr number="8367" repo="esphome" >}} by {{< ghuser name="shvmm" >}} -- Bump zeroconf to 0.146.1 {{< pr number="8365" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- mcp2515: Add missing CFG1 assignment to be able to use 50kbps with a 16MHz crystal. {{< pr number="8375" repo="esphome" >}} by {{< ghuser name="djasper-ha" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.4.0.md b/content/changelog/2025.4.0.md deleted file mode 100644 index 563a7cf5be..0000000000 --- a/content/changelog/2025.4.0.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.4.0." -title: "ESPHome 2025.4.0 - 16th April 2025" -params: - seo: - description: Changelog for ESPHome 2025.4.0. - image: /_static/changelog-2025.4.0.png ---- - -{{< imgtable >}} -"MCP4661","components/output/mcp4461","mcp4461.jpg" -{{< /imgtable >}} -Another small release out this month. I (Jesse) will be back full-time next week and so hopefully we can -get the project picking up some steam again. - - - -## Release 2025.4.1 - April 29 - -- Fix psram below idf 5 {{< pr number="8584" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Ensure pages are created on the correct display {{< pr number="8596" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix BLE connection loop caused by timeout and pending disconnect race {{< pr number="8597" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [online_image] Fix printf format; comment fixes {{< pr number="8607" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [watchdog] Fix for variants with single core {{< pr number="8602" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Fix setting of log level/verbose {{< pr number="8600" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Update ens160_base.cpp – fix wrong double negative {{< pr number="8639" repo="esphome" >}} by {{< ghuser name="steffenbanhardt" >}} - -## Release 2025.4.2 - May 12 - -- Fix unexpected widget update behavior {{< pr number="8260" repo="esphome" >}} by {{< ghuser name="bdm310" >}} -- [esp32_ble] Remove explicit and now incorrect ble override for esp32-c6 {{< pr number="8643" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [media_player] Fix actions with id as value {{< pr number="8654" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix typo preventing tt21100 from autosetting the touchscreen res. {{< pr number="8662" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- Fix HLW8012 sensor not returning values if change_mode_every is set to never {{< pr number="8456" repo="esphome" >}} by {{< ghuser name="SuperPlusUser" >}} -- [display] Fix Rect::inside {{< pr number="8679" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [as3935_i2c] Remove redundant includes {{< pr number="8677" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Allow padding to be negative {{< pr number="8671" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix image property processing {{< pr number="8691" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} - -## Full list of changes - -### New Components - -- Add support for MCP4461 quad i2c digipot/rheostat {{< pr number="8180" repo="esphome" >}} by {{< ghuser name="p1ngb4ck" >}} (new-integration) - -### Breaking Changes - -- Rework max connections for BLE to avoid exceeding the hard limit {{< pr number="8303" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) - -### Beta Changes - -- [lvgl] Fix use of image without canvas (Bugfix) {{< pr number="8540" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Include MAC address in noise hello {{< pr number="8551" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [axs15231] Don't overwrite manual dimensions {{< pr number="8553" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix initial focus on roller {{< pr number="8547" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Add restore_value to select and number {{< pr number="8494" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Speaker-Media-Player: Fix potential deadlock in audio pipeline {{< pr number="8548" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [lvgl] Ensure captured lambdas are in correct order {{< pr number="8560" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump aioesphomeapi from 29.9.0 to 29.10.0 {{< pr number="8562" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.146.3 to 0.146.4 {{< pr number="8563" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esphome-dashboard to 20250415.0 {{< pr number="8565" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix '--device MQTT' for devices with static IP {{< pr number="8535" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [am2315c] Use warning not fail during update {{< pr number="8499" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Bump zeroconf from 0.146.4 to 0.146.5 {{< pr number="8569" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix vscode validation not showing error squiggles {{< pr number="8500" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- SML runtime optimizations {{< pr number="8571" repo="esphome" >}} by {{< ghuser name="mariusgreuel" >}} - -### All changes - -{{< collapse true >}} - -- [esp32] Allow pioarduino versions 5.3.2 and 5.4.0 {{< pr number="8440" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [cli] Add `--reset` and `--upload_speed` options {{< pr number="8380" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [core] Fix 5.4.0 build issue {{< pr number="8455" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [core] Fix s2 build after crc header fix {{< pr number="8459" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [esp32_can] Configurable enqueue timeout {{< pr number="8453" repo="esphome" >}} by {{< ghuser name="patagonaa" >}} -- [scheduler] Properly handle millis() overflow {{< pr number="8197" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32] Allow pioarduino version 5.4.1 {{< pr number="8480" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [psram] 120MHz does not work in octal mode {{< pr number="8477" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Move CONF_DEFAULT to const.py {{< pr number="8497" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [lvgl] Add some defines {{< pr number="8501" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Add support for MCP4461 quad i2c digipot/rheostat {{< pr number="8180" repo="esphome" >}} by {{< ghuser name="p1ngb4ck" >}} (new-integration) -- Bump platformio to 6.1.18 {{< pr number="8430" repo="esphome" >}} by {{< ghuser name="shvmm" >}} -- Update emails from nabucasa to OHF {{< pr number="8508" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nau7802] fix bad blocking code (#6395) {{< pr number="8070" repo="esphome" >}} by {{< ghuser name="cujomalainey" >}} -- [core, qspi_dbi] Clang tidy fixes for 5.3.2 {{< pr number="8509" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [CI] Clang tidy fixes for 5.3.2 {{< pr number="8510" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [ethernet_info] return actual ethernet MAC address {{< pr number="8492" repo="esphome" >}} by {{< ghuser name="victorclaessen" >}} -- Rework max connections for BLE to avoid exceeding the hard limit {{< pr number="8303" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [component] Show error message for failed component {{< pr number="8478" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [psram] Allow use of experimental 120MHz octal mode {{< pr number="8519" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Ensure plaintext responds with bad indicator byte before dropping the connection {{< pr number="8521" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi to 29.9.0 {{< pr number="8522" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [lvgl] add on_boot trigger {{< pr number="8498" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Make line points templatable {{< pr number="8502" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [spi] Implement octal mode {{< pr number="8386" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- real_time_clock: Apply timezone immediately in set_timezone() {{< pr number="8531" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [lvgl] Implement canvas widget {{< pr number="8504" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix use of image without canvas (Bugfix) {{< pr number="8540" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Include MAC address in noise hello {{< pr number="8551" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [axs15231] Don't overwrite manual dimensions {{< pr number="8553" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Fix initial focus on roller {{< pr number="8547" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Add restore_value to select and number {{< pr number="8494" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Speaker-Media-Player: Fix potential deadlock in audio pipeline {{< pr number="8548" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [lvgl] Ensure captured lambdas are in correct order {{< pr number="8560" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump esphome-dashboard to 20250415.0 {{< pr number="8565" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix '--device MQTT' for devices with static IP {{< pr number="8535" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- [am2315c] Use warning not fail during update {{< pr number="8499" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix vscode validation not showing error squiggles {{< pr number="8500" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- SML runtime optimizations {{< pr number="8571" repo="esphome" >}} by {{< ghuser name="mariusgreuel" >}} - -{{< /collapse >}} - -### Dependency Changes - -{{< collapse >}} - -- Bump setuptools from 69.2.0 to 76.0.0 {{< pr number="8405" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump puremagic from 1.27 to 1.28 {{< pr number="8406" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esphome-glyphsets from 0.1.0 to 0.2.0 {{< pr number="8403" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.2.2 to 4.2.3 in /.github/actions/restore-python {{< pr number="8437" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.2.2 to 4.2.3 {{< pr number="8433" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.9.2 to 0.11.0 {{< pr number="8409" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 3.2.7 to 3.3.6 {{< pr number="8441" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update wheel requirement from ~=0.43.0 to >=0.43,<0.46 {{< pr number="8421" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tzlocal from 5.2 to 5.3.1 {{< pr number="8423" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 29.6.0 to 29.7.0 {{< pr number="8448" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.23.6 to 0.25.3 {{< pr number="8447" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.0 to 0.11.2 {{< pr number="8461" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.4.0 to 5.5.0 {{< pr number="8468" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.4.0 to 5.5.0 in /.github/actions/restore-python {{< pr number="8467" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-cov from 5.0.0 to 6.0.0 {{< pr number="8462" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.25.3 to 0.26.0 {{< pr number="8490" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump async-timeout from 4.0.3 to 5.0.1 {{< pr number="8491" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump platformio from 6.1.16 to 6.1.18 {{< pr number="8449" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump peter-evans/create-pull-request from 7.0.7 to 7.0.8 {{< pr number="8362" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/login-action from 3.3.0 to 3.4.0 in the docker-actions group {{< pr number="8408" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/download-artifact from 4.1.9 to 4.2.1 {{< pr number="8434" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/upload-artifact from 4.6.1 to 4.6.2 {{< pr number="8435" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruamel-yaml from 0.18.6 to 0.18.10 {{< pr number="8446" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump yamllint from 1.35.1 to 1.37.0 {{< pr number="8495" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.15.2 to 3.19.1 {{< pr number="8496" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump voluptuous from 0.14.2 to 0.15.2 {{< pr number="8506" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.146.1 to 0.146.3 {{< pr number="8507" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 76.0.0 to 78.1.0 {{< pr number="8512" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump flake8 from 7.0.0 to 7.2.0 {{< pr number="8493" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 8.2.0 to 8.3.5 {{< pr number="8528" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 29.9.0 to 29.10.0 {{< pr number="8562" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.146.3 to 0.146.4 {{< pr number="8563" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.146.4 to 0.146.5 {{< pr number="8569" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - -{{< /collapse >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.5.0.md b/content/changelog/2025.5.0.md deleted file mode 100644 index f3dd2e9ebb..0000000000 --- a/content/changelog/2025.5.0.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.5.0." -title: "ESPHome 2025.5.0 - 21st May 2025" -params: - seo: - description: Changelog for ESPHome 2025.5.0. - image: /_static/changelog-2025.5.0.png ---- - -{{< imgtable >}} -"PM2005 Sensor","components/sensor/pm2005","pm2005.png","" -"Mapping","components/mapping","mapping.svg","dark-invert" -"Packet Transport","components/packet_transport/index","packet_transport.svg","dark-invert" -"Syslog","components/syslog","file-document-box.svg","dark-invert" -"Sound Level","components/sensor/sound_level","waveform.svg","dark-invert" -"MIPI SPI Displays","components/display/mipi_spi","t4-s3.jpg","" -{{< /imgtable >}} - -## Voice Assistant - -raw:: html -Home Assistant Voice Preview Edition is -Home Assistant's first official voice assistant hardware. -It was designed from the ground up to give the best experience possible with Assist, -Home Assistant's built-in voice assistant software. With advanced mics and audio processing, -it can run fully locally in the home. Voice Preview Edition was built to run ESPHome, -and like any ESPHome device, can be fully customized. - -We have implemented all of the new features developed for the Voice Preview Edition! -The voice assistant component supports starting conversations from Home Assistant and -continuing conversations without needing to reactivate the wake word. -Additionally, microWakeWord supports enabling and disabling models via yaml actions. -The voice assistant component, through Home Assistant, can also change the active -on-device wake word. If you use our prebuilt voice assistant firmwares, then you -will receive an update notification automatically in Home Assistant adding support -for these new features! - -If you have taken control or created your own voice assistant configuration, you may -need to adjust them to support these new features. Please see the newly updated -examples in our wake word voice assistant firmware repository to get started. - -If you have taken control of your Home Assistant Voice PE and want to get all of the -new changes and don't want to continue managing your own YAML file, you can re-install -the latest firmware from the raw:: html -web installer. We also provide -OTA updates for the device that you can directly install from within Home Assistant. - -It is now easier to configure and use microphones. Multiple components can -simultaneously read from one microphone. Each individual component using a microphone -can also set their own specific gain level or specify which microphone channel to use. -Microphone settings are validated at compilation, and most settings are converted, -if necessary, without any extra configuration. Your existing YAML files should still -build without any adjustments. However, if your microphone was previously configured -to use 32 bits per sample, then you should add a gain factor of 4 to match -ESPHome's previous behavior. For example: - -```yaml -voice_assistant: - microphone: - microphone: echo_microphone - gain_factor: 4 -``` - -## Packet Transport - -The {{< docref "/components/packet_transport" >}} has been added to allow ESPHome devices to directly communicate -with each other. There are two platforms available in this release: {{< docref "/components/packet_transport/uart" >}} -and {{< docref "/components/packet_transport/udp" >}}. - -## HTTP Request - -The {{< docref "/components/http_request" >}} actions have had the `headers` config variable renamed to -`request_headers` in order to differentiate it from the new `collect_headers` config variable allowing you to collect -and access the response headers in automations. - -## ATM90E32 - -For energy meters that use the {{< docref "/components/sensor/atm90e32" "atm90e32" >}} energy metering chip, like -from CircuitSetup, and Gelidus Research, support was added for semi-automatic gain & offset calibration, and status -messages for each phase & frequency. An apparent power sensor was also added. - - - -## Release 2025.5.1 - May 27 - -- [core] Add some missing includes {{< pr number="8864" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [tuya_select] - Fix datapoint config error. {{< pr number="8871" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- [online_image] Allocate pngle manually to potentially use psram {{< pr number="8354" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Improve error messages from text validation {{< pr number="8872" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [micro_wake_word] avoid duplicated detections from same event {{< pr number="8877" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [speaker] ensure the pipeline returns an error state before returning its stopped {{< pr number="8878" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [logger] Fix options in select {{< pr number="8875" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32] Fix building on IDF 4 {{< pr number="8892" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [api] Fix crash with gcc compiler on host {{< pr number="8902" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [web_server] Fix download list where external_components has a substitution value {{< pr number="8911" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 2025.5.2 - June 3 - -- [i2s-audio] ensure mic task isn't pinned to a core {{< pr number="8879" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [rp2040] use low-level control for ISR gpio and add IRAM_ATTR {{< pr number="8950" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [esp8266] fix isr pin {{< pr number="8981" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [debug] Make sensors work without logger debug level {{< pr number="8980" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix logger stack overflow {{< pr number="8988" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -## Full list of changes - -### New Components - -- Add CUBIC PM2005/PM2105 Laser Particle Sensor Module {{< pr number="8292" repo="esphome" >}} by {{< ghuser name="andrewjswan" >}} (new-integration) -- [mapping] Implement yaml-configured maps {{< pr number="8333" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [const] Create component-level const repository {{< pr number="8385" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [packet_transport] Extract packet encoding functionality {{< pr number="8187" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) (breaking-change) -- [uart] Add packet_transport platform {{< pr number="8214" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [syslog] Implement logging via syslog {{< pr number="8637" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [sound_level] Add a new sound level sensor {{< pr number="8737" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [mipi_spi] New display driver for MIPI DBI devices {{< pr number="8383" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) - -### New Platforms - -- [cst226] Add support for cst226 binary sensor {{< pr number="8381" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-platform) -- ATM90E32 Semi-automatic calibration & Status fields {{< pr number="8529" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} (new-platform) (breaking-change) - -### Breaking Changes - -- [http_request] Ability to get response headers {{< pr number="8224" repo="esphome" >}} by {{< ghuser name="candrews" >}} (breaking-change) -- [i2s_audio, microphone, micro_wake_word, voice_assistant] Use microphone source to process incoming audio {{< pr number="8645" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) -- [packet_transport] Extract packet encoding functionality {{< pr number="8187" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) (breaking-change) -- ATM90E32 Semi-automatic calibration & Status fields {{< pr number="8529" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} (new-integration) (breaking-change) - -### Beta Changes - -{{< collapse >}} - -- [media_player] Deprecate `MEDIA_PLAYER_SCHEMA` {{< pr number="8784" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [schema] Get component name if available for deprecation warning {{< pr number="8785" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [fan] Update components to use `fan_schema(...)` {{< pr number="8786" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improve batching of BLE advertisements for better airtime efficiency {{< pr number="8778" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix release to pypi {{< pr number="8789" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [climate] Update components to use `climate_schema(...)` {{< pr number="8788" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20250514.0 {{< pr number="8790" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Avoid protobuf message construction when tx buffer is full {{< pr number="8787" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update some sensor schemas to be Optional {{< pr number="8803" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use fixed buffer for plaintext protocol like noise protocol {{< pr number="8800" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize protobuf varint decoder for ESPHome use case {{< pr number="8791" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Logger Recursion Guard per Task on ESP32 {{< pr number="8765" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [log] improve/refactor `log` {{< pr number="8708" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [gps] update lib, improve code/tests/config {{< pr number="8768" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Fix ESP32 Camera class inheritance {{< pr number="8811" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [sen5x] Fix validation for values read from hardware {{< pr number="8769" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix the case of single error {{< pr number="8824" repo="esphome" >}} by {{< ghuser name="asergunov" >}} -- Revert "[binary_sensor] initial state refactor" {{< pr number="8828" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix misspelling of climate in climate_ir.climate_ir_with_receiver_schema {{< pr number="8829" repo="esphome" >}} by {{< ghuser name="warthog618" >}} -- Fix ESP32 console logging corruption and message loss in multi-task {{< pr number="8806" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce number of calls to fetch time in the main loop {{< pr number="8804" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor API frame helpers to enable buffer reuse {{< pr number="8825" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump docker/build-push-action from 6.16.0 to 6.17.0 in /.github/actions/build-image {{< pr number="8810" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Update esp32-camera library version {{< pr number="8832" repo="esphome" >}} by {{< ghuser name="Fexiven" >}} -- Fix api doc homepage {{< pr number="8836" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Deploy doxygen docs to netlify {{< pr number="8837" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [release] Fix output value {{< pr number="8839" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [release] Don't wait for docker to be finished before deploying schema {{< pr number="8838" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix API connection sending ping too early after connection establishment {{< pr number="8840" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix ethernet connection timeout issue caused by incorrect time value during setup {{< pr number="8841" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [docker] Update pip on build {{< pr number="8835" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api-docs] Run using netlify builders {{< pr number="8842" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix #ifdefs {{< pr number="8853" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [at581x] Fix issue with methods not being public {{< pr number="8852" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} -- [api-docs] Move netlify.toml to root {{< pr number="8861" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -{{< /collapse >}} - -### All changes - -{{< collapse true >}} - -- [esp32] Allow pioarduino version 5.3.3 and 5.5.0 {{< pr number="8526" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Update setup to make .temp directory {{< pr number="8558" repo="esphome" >}} by {{< ghuser name="calumapplepie" >}} -- [core] make require_framework_version generic {{< pr number="8412" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Add support for Waveshare 5.65" ACeP 7-Color display {{< pr number="8557" repo="esphome" >}} by {{< ghuser name="nhjschulz" >}} -- [ci] Pin codecov action to v5.4.0 {{< pr number="8564" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Small buffers in internal RAM {{< pr number="8523" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Use python3 in place of python, as some systems don't emulate the former {{< pr number="8568" repo="esphome" >}} by {{< ghuser name="calumapplepie" >}} -- Add typing to protobuf code generator {{< pr number="8541" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- fix typo `USE_ESP32_VARIANT_ESP32H6` {{< pr number="8580" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [prometheus] Add climate metrics {{< pr number="8247" repo="esphome" >}} by {{< ghuser name="jzucker2" >}} -- [api] Allow noise encryption key to be set at runtime {{< pr number="7296" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_rmt_led_strip] Add use_dma option {{< pr number="8270" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Add CUBIC PM2005/PM2105 Laser Particle Sensor Module {{< pr number="8292" repo="esphome" >}} by {{< ghuser name="andrewjswan" >}} (new-integration) -- [uptime] Add format config for text_sensor {{< pr number="8304" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [mapping] Implement yaml-configured maps {{< pr number="8333" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [analog_threshold] Make thresholds templatable {{< pr number="8452" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [internal_temperature] Add p4 ifdefs {{< pr number="8484" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Sort resolved IP addresses for dashboard {{< pr number="8536" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Remove duplicate co2 and pressure constants {{< pr number="8583" repo="esphome" >}} by {{< ghuser name="mgiacomelli" >}} -- [remote_receiver] Filtering fixes {{< pr number="7777" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [psram] Add version check to fix 5.3.2 {{< pr number="8588" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Bump esp-idf to 5.1.6 {{< pr number="8566" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update const.py - Add UNIT_MEGAJOULE = "MJ" {{< pr number="8594" repo="esphome" >}} by {{< ghuser name="Roving-Ronin" >}} -- Implement `min_power` for component `ac_dimmer` using method `trailing` {{< pr number="8472" repo="esphome" >}} by {{< ghuser name="VasilKalchev" >}} -- Rewrite BLE scanner to use a state machine {{< pr number="8601" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [http_request] Ability to get response headers {{< pr number="8224" repo="esphome" >}} by {{< ghuser name="candrews" >}} (breaking-change) -- [sht4x] Reduce warn spam, added communication check in setup {{< pr number="8250" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- Schema gen action {{< pr number="8593" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- [i2s_audio, i2s_audio_microphone, i2s_audio_speaker] Add basic support for new esp-idf 5.x.x i2s driver. {{< pr number="8181" repo="esphome" >}} by {{< ghuser name="luar123" >}} -- fix schema-gen-ci failures {{< pr number="8621" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- replace `http` with `https` {{< pr number="8628" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [docker] Use new base container image {{< pr number="8582" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [i2s_audio] Microphone reads in loop for callbacks shouldn't ever delay {{< pr number="8625" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [micro_wake_word] Use microphone callback and avoid unnecessary allocation attempts {{< pr number="8626" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [voice_assisant] support start/continue conversation and deallocate buffers {{< pr number="8610" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [voice_assistant] Use mic callback and remove esp_adf code {{< pr number="8627" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [const] Create component-level const repository {{< pr number="8385" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [http_request] Implement for host platform {{< pr number="8040" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Take advantage of clipping to speed image drawing. {{< pr number="8630" repo="esphome" >}} by {{< ghuser name="lhartmann" >}} -- [touchscreen] Clear interrupt flag before reading touch data. {{< pr number="8632" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- [mdns] Support templatable config options for MDNS extra services {{< pr number="8606" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Fix support for ESP32-H2 in deep_sleep {{< pr number="8290" repo="esphome" >}} by {{< ghuser name="baal86" >}} -- [const] Move CONF_GAIN_FACTOR to const.py {{< pr number="8646" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [http_request] Fix request headers {{< pr number="8644" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- add beo4_protocol to remote_base component {{< pr number="8307" repo="esphome" >}} by {{< ghuser name="aanban" >}} -- Ensure new const file stays in order {{< pr number="8642" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [audio, microphone] Add MicrophoneSource helper class {{< pr number="8641" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [pmsx003] Refactor Imports, Extract Constants, Improve Data Handling & Logging {{< pr number="8344" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Add code to send/receive GoBox infrared control messages. {{< pr number="7554" repo="esphome" >}} by {{< ghuser name="cvwillegen" >}} -- [bluetooth_proxy] Allow changing active/passive via api {{< pr number="8649" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [pmsa003i] code improvements {{< pr number="8485" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [adc] sort variants and add links to reference implementations {{< pr number="8327" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [i2s_audio, microphone, micro_wake_word, voice_assistant] Use microphone source to process incoming audio {{< pr number="8645" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) -- [debug] Fix compile errors when using the ESP32-C2 {{< pr number="7474" repo="esphome" >}} by {{< ghuser name="d51x" >}} -- [canbus] Add callback for use by other components {{< pr number="8578" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [i2s_audio] Move microphone reads into a task {{< pr number="8651" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Only warn if the component blocked for a longer time than the last time {{< pr number="8064" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- [micro_wake_word] add new VPE features {{< pr number="8655" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [microphone] Bugfix: protect against starting mic if already started {{< pr number="8656" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Bump FastLed version to 3.9.16 {{< pr number="8402" repo="esphome" >}} by {{< ghuser name="andrewjswan" >}} -- [gree] Add support for YAG remotes {{< pr number="7418" repo="esphome" >}} by {{< ghuser name="sarthurdev" >}} -- Add a function to return the I2C address from an I2CDevice object {{< pr number="8454" repo="esphome" >}} by {{< ghuser name="ilikecake" >}} -- Fix second scrolling run ussue {{< pr number="8347" repo="esphome" >}} by {{< ghuser name="asergunov" >}} -- [alarm_control_panel] Allow sensor to trigger when alarm disarmed {{< pr number="7746" repo="esphome" >}} by {{< ghuser name="nworbneb" >}} -- Component pca9685 - phase_begin always set to zero {{< pr number="8379" repo="esphome" >}} by {{< ghuser name="uae007" >}} -- [remote_base] Fix compile error on IDF {{< pr number="8664" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [defines] Fix USE_MICRO_WAKE_WORD position {{< pr number="8663" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Adding timing budget support for vl53l0x {{< pr number="7991" repo="esphome" >}} by {{< ghuser name="lastradanet" >}} -- Daikin IR Climate Remote Target Temperature and Fan Modes {{< pr number="7946" repo="esphome" >}} by {{< ghuser name="bcpearce" >}} -- [i2c] Allow buffers in PSRAM {{< pr number="8640" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix CONFIG_LWIP_TCP_RCV_SCALE and CONFIG_TCP_WND_DEFAULT {{< pr number="8425" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- support self-signed cert in mqtt {{< pr number="8650" repo="esphome" >}} by {{< ghuser name="scaiper" >}} -- [binary_sensor] initial state refactor {{< pr number="8648" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- Add to_ntc_resistance|temperature sensor filter (esphome/feature-requests#2967) {{< pr number="7898" repo="esphome" >}} by {{< ghuser name="rhabacker" >}} -- [esp32, debug] Add `cpu_frequency` config option and debug sensor {{< pr number="8542" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [voice_assistant] voice assistant can configure enabled wake words {{< pr number="8657" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [mlx90393] Add verification for register contents {{< pr number="8279" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- Check for missed pulse_meter ISRs in the main loop {{< pr number="6126" repo="esphome" >}} by {{< ghuser name="TrentHouliston" >}} -- [debug] add missing header {{< pr number="8666" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [microphone] Add software mute and fix wrong type for automations {{< pr number="8667" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [micro_wake_word] Clarify spectrogram features calculation {{< pr number="8669" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Add UNIT_MILLIVOLT {{< pr number="8665" repo="esphome" >}} by {{< ghuser name="DJTerentjev" >}} -- Added Banking support to tca9555, fixed input bug {{< pr number="8003" repo="esphome" >}} by {{< ghuser name="mobrembski" >}} -- Add GDEY0583T81 support {{< pr number="8668" repo="esphome" >}} by {{< ghuser name="myllyja" >}} -- [climate] Fix typo and use `this->` {{< pr number="8678" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Add CONF_CONTINUOUS to const.py {{< pr number="8682" repo="esphome" >}} by {{< ghuser name="ilikecake" >}} -- unify lowercase `x` in hexadecimal values {{< pr number="8686" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [climate_ir_lg] use `this->` {{< pr number="8687" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [packet_transport] Extract packet encoding functionality {{< pr number="8187" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) (breaking-change) -- [esp32_ble_server] Add appearance advertising field {{< pr number="8672" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [packages] Allow list instead of dict for packages {{< pr number="8688" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Add refresh action to re-evaluate initial widget properties {{< pr number="8675" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [image] Support the other Pictogrammers icon sets `memory:` and `mdil:` {{< pr number="8676" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [uart] Add packet_transport platform {{< pr number="8214" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [debug] Show source of last software reboot {{< pr number="8595" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [syslog] Implement logging via syslog {{< pr number="8637" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [cst226] Add support for cst226 binary sensor {{< pr number="8381" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-platform) -- [nextion] Adds a command pacer with `command_spacing` attribute {{< pr number="7948" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [arduino] Always include Arduino.h for Arduino {{< pr number="8693" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [audio, microphone] Quantization Improvements {{< pr number="8695" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [micro_wake_word] Experimental cutoff adjustments and uses mic sample rate {{< pr number="8702" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [mics_4514] Add default device class to CO sensor {{< pr number="8710" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [i2s_audio, mixer, resampler, speaker] Simplify duration played callback {{< pr number="8703" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [packet_transport] Make some arguments const {{< pr number="8700" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Reserve buffer space to avoid frequent realloc when generating protobuf messages {{< pr number="8707" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Preallocate Buffer Space for ESP32-CAM {{< pr number="8712" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Correct Protobuf Wire Type for `encode_fixed64` {{< pr number="8713" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Avoid Reallocation When Sending Logging Messages {{< pr number="8714" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reserve space in the frame helper when we know in advance how much we need {{< pr number="8716" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Require reserve_size in create_buffer to reduce realloc overhead {{< pr number="8715" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [key_collector] enable/disable {{< pr number="8718" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Increase zeroconf timeout to 10 seconds {{< pr number="8670" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Consolidate `write_raw_` implementation to reduce code duplication {{< pr number="8717" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Improve BLE Connection Reliability by Enabling Software Coexistence {{< pr number="8683" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize bluetooth_proxy memory copy and reduce reallocs {{< pr number="8723" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- ATM90E32 Semi-automatic calibration & Status fields {{< pr number="8529" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} (new-integration) (breaking-change) -- [api] Synchronise api.proto between repos {{< pr number="8720" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [valve] Tidy up template publish action location {{< pr number="8731" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [valve] Move to use `valve_schema(..)` instead of `VALVE_SCHEMA` {{< pr number="8730" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lock] Tidy up template publish action and lockstate locations {{< pr number="8729" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [update] Move to use `update_schema(..)` instead of `UPDATE_SCHEMA` {{< pr number="8726" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [text] Move to use `text_schema(..)` instead of `TEXT_SCHEMA` {{< pr number="8727" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lock] Move to use `lock_schema(..)` instead of `LOCK_SCHEMA` {{< pr number="8728" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [config] Use `cv.UNDEFINED` instead of adhoc `_UNDEF` objects {{< pr number="8725" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [audio, microphone] - Allow MicrophoneSource to passively capture/optimization {{< pr number="8732" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [audio] Bump esp-audio-libs to version 1.1.4 for speed optimizations {{< pr number="8739" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [i2s_audio] Fix: Slot bit-width for ESP32 variant {{< pr number="8738" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [voice_assistant] Bugfix: Properly detect states where mic is running {{< pr number="8745" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [sound_level] Add a new sound level sensor {{< pr number="8737" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (new-integration) -- [one_wire][dallas_temp] adjust timings and reduce disabled interrupts {{< pr number="8744" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- MQTT: fan direction control added {{< pr number="8022" repo="esphome" >}} by {{< ghuser name="mbronk" >}} -- [config] Add entity schema consts with deprecation log {{< pr number="8747" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix ESP32 API Disconnects Caused by Concurrent Logger Writes {{< pr number="8736" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [vscode] provide version to editor {{< pr number="8752" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- [i2s_audio] Correct a microphone with a DC offset signal {{< pr number="8751" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [config] Deprecate other `*_SCHEMA` constants {{< pr number="8748" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [opentherm] Update to use schema methods {{< pr number="8756" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [factory_reset] Use switch_schema method {{< pr number="8757" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [sprinkler] Use number_schema method {{< pr number="8759" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [tm1638] Use switch_schema method {{< pr number="8758" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [airthings] Remove unnecessary schema {{< pr number="8760" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ble_client] Use text_sensor_schema method {{< pr number="8761" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [sml] Use text_sensor_schema method {{< pr number="8762" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [udp, syslog] fix clang tidy {{< pr number="8755" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Avoid iterating clients twice in the api_server loop {{< pr number="8733" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [clang] clang tidy support with zephyr {{< pr number="8352" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- Fix missing recursion guard release on ESP8266 {{< pr number="8766" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [schema] Deploy schema after release workflow finished {{< pr number="8767" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [config] Deprecate more `*_SCHEMA` constants {{< pr number="8763" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [gps] Add hdop sensor {{< pr number="8680" repo="esphome" >}} by {{< ghuser name="realzoulou" >}} -- In case of proto-diff show changes and archive generated {{< pr number="8698" repo="esphome" >}} by {{< ghuser name="dala318" >}} -- [climate] Fix climate_schema {{< pr number="8772" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Tuya Select - Add int_datapoint option {{< pr number="8393" repo="esphome" >}} by {{< ghuser name="Cossid" >}} -- [select] Tidy schema generation {{< pr number="8775" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [demo] Clean up schema deprecations, add test {{< pr number="8771" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [template] Use alarm_control_panel_schema method {{< pr number="8764" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [cover] Update components to use `cover_schema(...)` {{< pr number="8770" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [switch] Fix schema generation {{< pr number="8774" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32] improve `gpio` {{< pr number="8709" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [text_sensor] Fix schema generation {{< pr number="8773" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [audio] Fix: Decoder stops unnecessarily after a potential failure is detected. {{< pr number="8776" repo="esphome" >}} by {{< ghuser name="gnumpi" >}} -- [esp32][esp8266] use low-level pin control for ISR gpio {{< pr number="8743" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [online_image] Support 24 bit bmp images {{< pr number="8612" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [mipi_spi] New display driver for MIPI DBI devices {{< pr number="8383" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- [media_player] Deprecate `MEDIA_PLAYER_SCHEMA` {{< pr number="8784" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [schema] Get component name if available for deprecation warning {{< pr number="8785" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [fan] Update components to use `fan_schema(...)` {{< pr number="8786" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improve batching of BLE advertisements for better airtime efficiency {{< pr number="8778" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix release to pypi {{< pr number="8789" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [climate] Update components to use `climate_schema(...)` {{< pr number="8788" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump esphome-dashboard to 20250514.0 {{< pr number="8790" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Avoid protobuf message construction when tx buffer is full {{< pr number="8787" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update some sensor schemas to be Optional {{< pr number="8803" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use fixed buffer for plaintext protocol like noise protocol {{< pr number="8800" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize protobuf varint decoder for ESPHome use case {{< pr number="8791" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Logger Recursion Guard per Task on ESP32 {{< pr number="8765" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [log] improve/refactor `log` {{< pr number="8708" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [gps] update lib, improve code/tests/config {{< pr number="8768" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Fix ESP32 Camera class inheritance {{< pr number="8811" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [sen5x] Fix validation for values read from hardware {{< pr number="8769" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix the case of single error {{< pr number="8824" repo="esphome" >}} by {{< ghuser name="asergunov" >}} -- Revert "[binary_sensor] initial state refactor" {{< pr number="8828" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix misspelling of climate in climate_ir.climate_ir_with_receiver_schema {{< pr number="8829" repo="esphome" >}} by {{< ghuser name="warthog618" >}} -- Fix ESP32 console logging corruption and message loss in multi-task {{< pr number="8806" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce number of calls to fetch time in the main loop {{< pr number="8804" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor API frame helpers to enable buffer reuse {{< pr number="8825" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update esp32-camera library version {{< pr number="8832" repo="esphome" >}} by {{< ghuser name="Fexiven" >}} -- Fix api doc homepage {{< pr number="8836" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Deploy doxygen docs to netlify {{< pr number="8837" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [release] Fix output value {{< pr number="8839" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [release] Don't wait for docker to be finished before deploying schema {{< pr number="8838" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix API connection sending ping too early after connection establishment {{< pr number="8840" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix ethernet connection timeout issue caused by incorrect time value during setup {{< pr number="8841" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [docker] Update pip on build {{< pr number="8835" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api-docs] Run using netlify builders {{< pr number="8842" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix #ifdefs {{< pr number="8853" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [at581x] Fix issue with methods not being public {{< pr number="8852" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} -- [api-docs] Move netlify.toml to root {{< pr number="8861" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -{{< /collapse >}} - -### Dependency Changes - -{{< collapse >}} - -- Bump ruff from 0.11.2 to 0.11.4 {{< pr number="8538" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-cov from 6.0.0 to 6.1.1 {{< pr number="8537" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.4 to 0.11.5 {{< pr number="8546" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump codecov/codecov-action from 5.4.0 to 5.4.2 {{< pr number="8572" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 29.10.0 to 30.0.1 {{< pr number="8579" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.5 to 0.11.6 {{< pr number="8587" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/download-artifact from 4.2.1 to 4.3.0 {{< pr number="8617" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.15.0 to 6.16.0 in /.github/actions/build-image {{< pr number="8619" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.6 to 0.11.7 {{< pr number="8615" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 78.1.0 to 79.0.1 {{< pr number="8614" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.5.0 to 5.6.0 {{< pr number="8618" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/setup-python from 5.5.0 to 5.6.0 in /.github/actions/restore-python {{< pr number="8616" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 79.0.1 to 80.3.1 {{< pr number="8696" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 30.0.1 to 30.1.0 {{< pr number="8652" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 3.3.6 to 3.3.7 {{< pr number="8706" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump yamllint from 1.37.0 to 1.37.1 {{< pr number="8705" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.7 to 0.11.8 {{< pr number="8721" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump puremagic from 1.28 to 1.29 {{< pr number="8722" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 30.1.0 to 30.2.0 {{< pr number="8734" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.8 to 0.11.9 {{< pr number="8735" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump zeroconf from 0.146.5 to 0.147.0 {{< pr number="8754" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 80.3.1 to 80.4.0 {{< pr number="8753" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.16.0 to 6.17.0 in /.github/actions/build-image {{< pr number="8810" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - -{{< /collapse >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.6.0.md b/content/changelog/2025.6.0.md deleted file mode 100644 index 2fc477b1a9..0000000000 --- a/content/changelog/2025.6.0.md +++ /dev/null @@ -1,463 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.6.0." -title: "ESPHome 2025.6.0 - 18th June 2025" -params: - seo: - description: Changelog for ESPHome 2025.6.0. - image: /_static/changelog-2025.6.0.png ---- - -{{< imgtable >}} -"OpenThread","components/openthread","openthread.png","" -"USB Host","components/usb_host","usb.svg","dark-invert" -"USB UART","components/usb_uart","usb.svg","dark-invert" -"CM1106","components/sensor/cm1106","cm1106.png","" -"ES8388","components/audio_dac/es8388","es8388.svg","" -"LC709203F","components/sensor/lc709203f","lc709203f.jpg","" -"ESP32-P4 LDO regulator","components/esp_ldo","ldo.svg","dark-invert" -{{< /imgtable >}} - -## ESP-IDF Updates - -### New Version: 5.3.2 - -In this release, we have updated the ESP-IDF framework to version 5.3.2. This version has been thoroughly tested -in the background by our development team and is now the default for all configurations using ESP-IDF as the framework. - -This version bump brings expanded microcontroller support. ESPHome now officially supports the following ESP32 variants: - -- **ESP32** - The original ESP32 with dual-core Xtensa LX6 -- **ESP32-C3** - Single-core RISC-V with Wi-Fi and Bluetooth 5 (LE) -- **ESP32-C6** - Single-core RISC-V with Wi-Fi 6, Bluetooth 5 (LE), and Thread/Zigbee *(new)* -- **ESP32-H2** - Single-core RISC-V with Bluetooth 5 (LE) and Thread/Zigbee *(new)* -- **ESP32-S2** - Single-core Xtensa LX7 with Wi-Fi -- **ESP32-S3** - Dual-core Xtensa LX7 with Wi-Fi and Bluetooth 5 (LE) -- **ESP32-P4** - Dual-core RISC-V high-performance variant *(new)* - -> [!NOTE] -> The newly supported variants (ESP32-C6, ESP32-H2, ESP32-P4) are still being refined. Some components may not yet -> be fully compatible with these chips. Additional component updates are planned for ESPHome 2025.7.0. -> -> They also currently only support using the ESP-IDF framework, and do not work with the Arduino framework in this -> release. -> -> Please check our [Pull Requests](https://github.com/esphome/esphome/pulls) for the latest compatibility status -> before reporting issues with these new variants. - -### ESP-IDF 4.x Support - -This release is the last release which will support ESP-IDF 4.x versions; in the July release (2025.7.0) we will bump -the default Arduino version to 3.1.3, which is now built on IDF 5.x and, as such, ESPHome will no longer require -ESP-IDF 4.x support to maintain compatibility with Arduino. Please see -[our developer blog](https://developers.esphome.io/blog/2025/06/18/sunsetting-support-for-idf-4x/) for more details. - -> [!WARNING] -> Device configurations held back on ESP-IDF 4.x are unlikely to compile with the next ESPHome release (2025.7.0). -> -> You can continue to use older versions of ESPHome, but you'll need to ensure your device configurations are using -> IDF 5.x if you wish to upgrade to 2025.7.0 or later releases of ESPHome. - -## OpenThread - -With the ESP-IDF 5.3.2 update, we've introduced basic OpenThread support for ESP-IDF based configurations. -This exciting addition enables ESP32-C6 and ESP32-H2 devices to join Thread networks, expanding your connectivity -options beyond traditional Wi-Fi and Ethernet. - -### Thread Network Integration - -Your ESPHome devices can now connect to Thread networks and communicate with Home Assistant through the -{{< docref "/components/api" "Native API" >}}, provided you have: - -- Thread support enabled in Home Assistant -- An OpenThread border router configured and running on your network - -### Important Considerations - -Thread is designed as a low-power, low-bandwidth networking protocol. It's specifically optimized for: - -- IoT devices with minimal data transmission needs -- Battery-powered or energy-efficient applications -- Mesh networking scenarios - -### Current Limitations - -- ESPHome does not yet support Thread "Sleepy End Device" mode (low-power sleep functionality) -- Not recommended for applications requiring high-frequency sensor data transmission -- Best suited for simple control and monitoring use cases - -Think of Thread support as providing you with a third networking option alongside Wi-Fi and Ethernet, -particularly valuable for ESP32-C6 and ESP32-H2 deployments in mesh network environments. - -## Python 3.10 Requirement - -Starting with ESPHome 2025.6.0, **Python 3.10 or higher is required** to run ESPHome. This change enables us to: - -- Utilize modern Python features and improvements -- Remove legacy compatibility code that was needed for older Python versions -- Maintain a more secure and efficient codebase - -### Why This Change? - -Python 3.9 reaches its [end of life in October 2025](https://devguide.python.org/versions/), making this -upgrade both timely and necessary for long-term security and maintainability. - -### What You Need to Do - -| Installation Method | Action Required | -| ------------------------- | ------------------------------------------------------------------------ | -| Home Assistant Add-on | **No action needed** - Already uses Python 3.12 | -| Container Images (Docker) | **No action needed** - Already uses Python 3.12 | -| Direct Installation (pip) | Ensure Python 3.10+ is installed before running `pip install -U esphome` | - -> [!WARNING] -> If you're running ESPHome directly on your machine with Python 3.9 or older, running `pip install -U esphome` -> will not upgrade beyond version 2025.5.2. You must upgrade your Python installation first. - -## Performance Optimizations - -This release includes extensive performance improvements across multiple areas of ESPHome. Our optimization efforts -focus on three key areas: - -1. Native API Speed - Enhanced {{< docref "/components/api" "Native API" >}} performance for faster communication between ESPHome devices - and Home Assistant. - -1. Memory Footprint Reduction - Significant RAM usage optimizations to improve stability and allow for more complex configurations, - especially on memory-constrained devices. - -1. Flash Storage Efficiency - Reduced compiled firmware size, leaving more flash storage available for your applications and OTA updates. - -These optimizations are part of an ongoing effort to make ESPHome more efficient and reliable. More performance -improvements are planned for future releases. - -## BME68x BSEC2 Arduino Independence - -Great news for Bosch {{< docref "/components/sensor/bme68x_bsec2" "BME68x BSEC2 sensor" >}} users! Bosch has merged -and released a community contribution to their [BSEC2 library](https://github.com/boschsensortec/Bosch-BSEC2-Library) -that removes the Arduino framework dependency. This improvement means: - -- **Better ESP-IDF compatibility** - BME68x sensors now work seamlessly with ESP-IDF based configurations -- **Reduced dependencies** - Cleaner builds without unnecessary Arduino components -- **Improved reliability** - More stable sensor operation across different ESP32 variants - -This change makes the BME68x environmental sensors more versatile and easier to integrate into ESP-IDF projects, -continuing ESPHome's move toward framework flexibility. - -> [!NOTE] -> This change applies *only* to the {{< docref "/components/sensor/bme68x_bsec2" "BME68x BSEC2 sensor component" >}}. -> It does not apply to the older, now-outdated {{< docref "/components/sensor/bme680_bsec" "BME680 BSEC sensor component" >}}. - - - -## Release 2025.6.1 - June 23 - -{{< collapse true >}} - -- Eliminate memory fragmentation with BLE event pool {{< pr number="9101" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [nextion] Fix command spacing double timing and response blocking issues {{< pr number="9134" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix missing BLE GAP events causing RSSI sensor and beacon failures {{< pr number="9138" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [config validation] Add more ip address / network validators {{< pr number="9181" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fixes for setup of OpenThread either using TLV or entering Credentials directly {{< pr number="9157" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- Restore access to BLEScanResult as get_scan_result {{< pr number="9148" repo="esphome" >}} by {{< ghuser name="myhomeiot" >}} - -{{< /collapse >}} - -## Release 2025.6.2 - June 27 - -{{< collapse true >}} - -- [lvgl] Fix dangling pointer issue with qrcode {{< pr number="9190" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [audio] Bugfix: improve timeout handling {{< pr number="9221" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [speaker] bugfix: continue to block tasks if stop flag is set {{< pr number="9222" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [voice_assistant] Support streaming TTS responses and fixes crash for long responses {{< pr number="9224" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [esp32] Change `enable_lwip_mdns_queries` default to `True` {{< pr number="9188" repo="esphome" >}} by {{< ghuser name="scaiper" >}} -- [i2c] Disable i2c scan on certain idf versions {{< pr number="9237" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [mcp23xxx_base] fix pin interrupts {{< pr number="9244" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - -{{< /collapse >}} - -## Release 2025.6.3 - July 3 - -{{< collapse true >}} - -- [uart] fix: missing uart_config_t struct initialisation {{< pr number="9235" repo="esphome" >}} by {{< ghuser name="Rezoran" >}} -- Fix api log client crashing when api encryption is dynamic {{< pr number="9245" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix crash when event last_event_type is null in web_server {{< pr number="9266" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [http_request] allow retrieval of more than just the first header {{< pr number="9242" repo="esphome" >}} by {{< ghuser name="candrews" >}} - -{{< /collapse >}} - -## Full list of changes - -### New Components - -- Add CUBIC CM1106 Single Beam NDIR CO2 Sensor Module {{< pr number="8293" repo="esphome" >}} by {{< ghuser name="andrewjswan" >}} (new-integration) -- [usb_uart] Implement USB Host mode UART {{< pr number="8334" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Add es8388 audio_dac {{< pr number="8342" repo="esphome" >}} by {{< ghuser name="P4uLT" >}} (new-integration) -- [lc709203f] Add battery monitor {{< pr number="8037" repo="esphome" >}} by {{< ghuser name="ilikecake" >}} (new-integration) -- [esp_ldo] Implement support for ESP32-P4 LDO {{< pr number="9009" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Add OpenThread support on ESP-IDF {{< pr number="7506" repo="esphome" >}} by {{< ghuser name="mrene" >}} (new-integration) - -### Breaking Changes - -- update minimal python version to 3.10 {{< pr number="8850" repo="esphome" >}} by {{< ghuser name="ximex" >}} (breaking-change) -- Add LWIP optimization options to reduce flash usage {{< pr number="8946" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Replace API deferred queue with efficient message batching system {{< pr number="9012" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize Component and Application state storage from uint32_t to uint8_t {{< pr number="9082" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Reduce entity memory usage by eliminating field shadowing and bit-packing {{< pr number="9076" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize Application `area_` from `std::string` to `const char*` {{< pr number="9085" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) - -### Beta Changes - -{{< collapse >}} - -- Fix dashboard logging being escaped before parser {{< pr number="9054" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Always perform select() when loop duration exceeds interval {{< pr number="9058" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [nextion] Remove upload flags reset from success path to prevent TFT corruption {{< pr number="9064" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix BYPASS_AUTO feature to work with or without an arming delay {{< pr number="9051" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Fix misleading comment in API {{< pr number="9069" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [prometheus] Remove `cv.only_with_arduino` {{< pr number="9061" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32] Dynamically set default framework based on variant {{< pr number="9060" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix `captive_portal` loading entire `web_server` {{< pr number="9066" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Make ParseOnOffState enum uint8_t {{< pr number="9083" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize Component and Application state storage from uint32_t to uint8_t {{< pr number="9082" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Small optimizations to api buffer helper {{< pr number="9071" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce entity memory usage by eliminating field shadowing and bit-packing {{< pr number="9076" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize memory usage by lazy-allocating raw callbacks in sensors {{< pr number="9077" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix API message encoding to return actual size instead of calculated size {{< pr number="9073" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize Application `area_` from `std::string` to `const char*` {{< pr number="9085" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Fix unbound BLE event queue growth and reduce memory usage {{< pr number="9052" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Bump aioesphomeapi from 32.2.1 to 32.2.3 {{< pr number="9091" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- [fan] fix initial FanCall to properly set speed {{< pr number="8277" repo="esphome" >}} by {{< ghuser name="dhewg" >}} -- Implement a lock free ring buffer for BLEScanResult to avoid drops {{< pr number="9087" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Make BLE queue lock free {{< pr number="9088" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix protobuf encoding size mismatch by passing force parameter in encode_string {{< pr number="9074" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [i2s_audio] Check for a nullptr before disabling and deleting channel {{< pr number="9062" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Ensure we can send batches where the first message exceeds MAX_PACKET_SIZE {{< pr number="9068" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add common base classes for entity protobuf messages to reduce duplicate code {{< pr number="9090" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce Component blocking threshold memory usage by 2 bytes per component {{< pr number="9081" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove `std::` prefix as not all platforms have access yet. {{< pr number="9095" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [i2s_audio] Add `dump_config` methods, shorten log messages {{< pr number="9099" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [i2s_audio] Bugfix: crashes when unlocking i2s bus multiple times {{< pr number="9100" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [spi] Cater for non-word-aligned buffers on esp8266 {{< pr number="9108" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Optimize LightState memory layout {{< pr number="9113" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce Switch component memory usage by 8 bytes per instance {{< pr number="9112" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -{{< /collapse >}} - -### Notable Changes - -- [bme68x_bsec2_i2c] Remove arduino dependency {{< pr number="7815" repo="esphome" >}} by {{< ghuser name="luar123" >}} (notable-change) - -### All changes - -{{< collapse true >}} - -- add actions to the MAX7219Component {{< pr number="6462" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [api] Update api proto to add legacy value {{< pr number="8802" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [script] Use local import for zephyr {{< pr number="8822" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Bump cryptography to 45.0.1 {{< pr number="8826" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- unify and add missing metric suffixes {{< pr number="8816" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Improve stability for a test that crashes intermittently in CI {{< pr number="8699" repo="esphome" >}} by {{< ghuser name="dala318" >}} -- update ruff version to `0.11.10` in `.pre-commit-config.yaml` {{< pr number="8851" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- add python 3.13 to ci pipeline {{< pr number="8855" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [esp32] Use IDF 5.3.2 as default for IDF builds {{< pr number="8464" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- update minimal python version to 3.10 {{< pr number="8850" repo="esphome" >}} by {{< ghuser name="ximex" >}} (breaking-change) -- [esp32, logger] Add initial P4 support {{< pr number="8439" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Add CUBIC CM1106 Single Beam NDIR CO2 Sensor Module {{< pr number="8293" repo="esphome" >}} by {{< ghuser name="andrewjswan" >}} (new-integration) -- Updates for development environment {{< pr number="8801" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [sync] Update and fix sync workflow {{< pr number="8873" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [lvgl] Try to allocate smaller buffer on failure {{< pr number="8814" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Add content styling to tabview {{< pr number="8823" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [usb_uart] Implement USB Host mode UART {{< pr number="8334" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- OTA: Close and clean up client when setsockopt fails {{< pr number="8865" repo="esphome" >}} by {{< ghuser name="luuoaoa" >}} -- Add const DEVICE_CLASS_WIND_DIRECTION {{< pr number="8870" repo="esphome" >}} by {{< ghuser name="Pi57" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="8874" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Optimize API frame helper buffer management {{< pr number="8805" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use UINT16_MAX instead of hard coded 65535 in api {{< pr number="8884" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- feat: `wifi.configure` now emits error after reconnecting to old AP {{< pr number="8653" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- [modbus_controller] Add assumed_state to switch {{< pr number="8880" repo="esphome" >}} by {{< ghuser name="gotnone" >}} -- [const] Move `CONF_RESET` to const.py {{< pr number="8889" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [bme68x_bsec2_i2c] Remove arduino dependency {{< pr number="7815" repo="esphome" >}} by {{< ghuser name="luar123" >}} (notable-change) -- [i2s_audio] Add basic support for esp32-p4 {{< pr number="8887" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32, logger, core] Add initial c5 support {{< pr number="8895" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Resolve regex library warnings {{< pr number="8890" repo="esphome" >}} by {{< ghuser name="emmanuel-ferdman" >}} -- Add integration tests for host {{< pr number="8912" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix flakey tests {{< pr number="8914" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [sx1509] add support for keys {{< pr number="8413" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add es8388 audio_dac {{< pr number="8342" repo="esphome" >}} by {{< ghuser name="P4uLT" >}} (new-integration) -- [online_image] Last-Modified-Date and ETag response caching {{< pr number="8782" repo="esphome" >}} by {{< ghuser name="candrews" >}} -- [aht10] Various optimizations/clean-up {{< pr number="8921" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [rtttl] Various optimizations/clean-up {{< pr number="8923" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ledc] Various optimizations/clean-up {{< pr number="8922" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (a, b) {{< pr number="8924" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (c, d) {{< pr number="8925" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (e, f) {{< pr number="8926" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (g, h, i) {{< pr number="8927" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (k, l, m) {{< pr number="8928" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (n, o, p, q, r) {{< pr number="8929" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Streamline setup() logging (s, t, u, v, w, x, y, z) {{< pr number="8930" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [speaker mediaplayer] Yaml config initial volume (on first boot) {{< pr number="8898" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- [i2s_audio] Bump esphome/ESP32-audioI2S to 2.2.0 {{< pr number="8920" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add more demo platforms {{< pr number="8903" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Migrate wifi component to use App.get_loop_component_start_time {{< pr number="8931" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize socket operations by checking readiness in the main loop {{< pr number="8918" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Improve logging in integration tests when port does not open {{< pr number="8932" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [pmwcs3] Optimize logging {{< pr number="8936" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [tmp102] Remove `setup()`, optimize logging {{< pr number="8937" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Optimize plaintext API header reading to reduce system calls {{< pr number="8941" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [gcja5] Remove unused `setup()` method {{< pr number="8935" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [alarm_control_panel] BYPASS_AUTO option for Template Alarm Control Panel sensors left open when armed {{< pr number="8795" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Fix select() logging flood in very verbose mode {{< pr number="8942" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- particle matter improvements {{< pr number="8846" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Fix colors in update all {{< pr number="8854" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Add flip X and Y on inkplate6 component {{< pr number="7904" repo="esphome" >}} by {{< ghuser name="Leicas" >}} -- [modbus] [modbus_controller] Fix server role read coil 0x1 crc {{< pr number="8859" repo="esphome" >}} by {{< ghuser name="gotnone" >}} -- [rp2040] Allow changing watchdog timeout {{< pr number="8868" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} -- [esp32] Regenerate boards from recommended platform version {{< pr number="8938" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Introduce "communication failed" log macro {{< pr number="8939" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [demo] FIx some of the entities {{< pr number="8943" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Redundant Log Messages Cleanup {{< pr number="8944" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [dht] Clean-up, shorten some log messages {{< pr number="8949" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Have ESPHome's YAML dumper comply with its own yamllint rules {{< pr number="8957" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Allow Weikai to pass data_bit validation {{< pr number="8917" repo="esphome" >}} by {{< ghuser name="timdaman" >}} -- [max9611] Remove redundant "max9611" from log messages {{< pr number="8967" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nextion] Allocate NextionQueue in PSRAM (if available) {{< pr number="8979" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [esp32c6] Add test base file and platformio env {{< pr number="8973" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add missing icons and device classes to BME680 sensors {{< pr number="8960" repo="esphome" >}} by {{< ghuser name="tronikos" >}} -- [preferences] Shorten log messages {{< pr number="8982" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [lc709203f] Add battery monitor {{< pr number="8037" repo="esphome" >}} by {{< ghuser name="ilikecake" >}} (new-integration) -- [mdns] Set up only after API is set up {{< pr number="9000" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [const] Move CONF_X and CONF_Y to const.py {{< pr number="8999" repo="esphome" >}} by {{< ghuser name="Hannah-GBS" >}} -- [core] Update defines.h esp-idf version {{< pr number="8974" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [spi] Remove redundant "SPI" from log messages {{< pr number="8970" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sdp3x] Remove redundant "sdp3x" from log messages {{< pr number="8969" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ethernet] Remove redundant "ethernet" from log messages {{< pr number="8966" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [bmp3xx] Remove redundant "bmp3xx" from log messages {{< pr number="8965" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Remove unnecessary ellipsis {{< pr number="8964" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [wireguard] Remove redundant "wireguard" from log messages {{< pr number="8963" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [dashboard] Fix logging colors {{< pr number="8984" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [sps30] Shorten log messages {{< pr number="8971" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [bmp581] Shorten some log messages {{< pr number="8948" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [api] Streamline some log strings {{< pr number="8962" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [mqtt] Remove redundant "mqtt" from log messages {{< pr number="8968" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ci, nrf52] make zephyr clang mandatory {{< pr number="8992" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [sdl] Add config for SDL window flags {{< pr number="8998" repo="esphome" >}} by {{< ghuser name="Hannah-GBS" >}} -- [nextion] Add optional `max_queue_size` limit to prevent queue overflows {{< pr number="8976" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Move CONF_REQUEST_HEADERS to const.py {{< pr number="9002" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- [api] Fix build error in IDF 5.5 {{< pr number="9007" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [list-components.py] Only add platforms that are actually platforms. {{< pr number="9005" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [qwiic_pir] Clean-up, shorten some log messages {{< pr number="8951" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32] Add config vars for compiler {{< pr number="9023" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Implement proper API connection teardown before deep sleep/reboot {{< pr number="9008" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [config] Clean build on ESP-IDF when component/platform combos change {{< pr number="9028" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Disable ruff rule UP038 {{< pr number="9029" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update webserver local assets to 20250608-225410 {{< pr number="9030" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Reduce ESP_LOGCONFIG calls {{< pr number="9026" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Force socket ready when high frequency looping {{< pr number="9032" repo="esphome" >}} by {{< ghuser name="juanboro" >}} -- [psram] Add P4 support {{< pr number="8545" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [nextion] Use safe restart to properly handle globals and restart logging {{< pr number="9010" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [max7219digit, servo, tsl2591] ESP_LOGCONFIG call reduction (Extend #9026) {{< pr number="9033" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [tsl2561, tsl2591] Shorten log messages {{< pr number="9034" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Change RP2040 PIO SK6812 timings {{< pr number="9020" repo="esphome" >}} by {{< ghuser name="pseud0sphere" >}} -- Add LWIP optimization options to reduce flash usage {{< pr number="8946" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [globals] Prevent redundant oversized string checks in loop {{< pr number="9001" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [nextion] Optimize log messages to reduce memory usage {{< pr number="9039" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [nextion] Add configurable limit for commands processed per loop {{< pr number="8972" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [lvgl] Fix templated argument to `lvgl.is_idle` {{< pr number="9014" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Replace API deferred queue with efficient message batching system {{< pr number="9012" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Reduce Bluetooth overhead by disabling unused logging categories {{< pr number="8945" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [inkplate] Remove arduino dependency {{< pr number="9031" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Include esp_mac.h on Arduino too {{< pr number="9040" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Use a `define` for log message constants {{< pr number="8952" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp_ldo] Implement support for ESP32-P4 LDO {{< pr number="9009" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-integration) -- Fix: Seeed Studio MR60FDA2 threshold height could not be set {{< pr number="9011" repo="esphome" >}} by {{< ghuser name="limengdu" >}} -- [esp32] Use release zip from pioarduino/platform-espressif32 instead of git tag {{< pr number="8975" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32_rmt] Add variant validation for use_dma {{< pr number="8897" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Ensure components only powerdown after teardown {{< pr number="9044" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- use `encode_uintXX` {{< pr number="8847" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Add OpenThread support on ESP-IDF {{< pr number="7506" repo="esphome" >}} by {{< ghuser name="mrene" >}} (new-integration) -- [shtcx] Shorten log messages {{< pr number="9046" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [application] Fix build error on some IDF versions {{< pr number="9045" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [spi] Restrict octal spi to S3/S2/P4 {{< pr number="9041" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Reserve memory for component and platform vectors {{< pr number="9042" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Improve shutdown reliability when tx buffer is full {{< pr number="9043" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add support for custom request headers in online_image component {{< pr number="8985" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- Openthread code updates {{< pr number="9047" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [sgp4x] Shorten log messages, various clean-up {{< pr number="9048" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Fix dashboard logging being escaped before parser {{< pr number="9054" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Always perform select() when loop duration exceeds interval {{< pr number="9058" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [nextion] Remove upload flags reset from success path to prevent TFT corruption {{< pr number="9064" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix BYPASS_AUTO feature to work with or without an arming delay {{< pr number="9051" repo="esphome" >}} by {{< ghuser name="heythisisnate" >}} -- Fix misleading comment in API {{< pr number="9069" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [prometheus] Remove `cv.only_with_arduino` {{< pr number="9061" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32] Dynamically set default framework based on variant {{< pr number="9060" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix `captive_portal` loading entire `web_server` {{< pr number="9066" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Make ParseOnOffState enum uint8_t {{< pr number="9083" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize Component and Application state storage from uint32_t to uint8_t {{< pr number="9082" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Small optimizations to api buffer helper {{< pr number="9071" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce entity memory usage by eliminating field shadowing and bit-packing {{< pr number="9076" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize memory usage by lazy-allocating raw callbacks in sensors {{< pr number="9077" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix API message encoding to return actual size instead of calculated size {{< pr number="9073" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize Application `area_` from `std::string` to `const char*` {{< pr number="9085" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Fix unbound BLE event queue growth and reduce memory usage {{< pr number="9052" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [fan] fix initial FanCall to properly set speed {{< pr number="8277" repo="esphome" >}} by {{< ghuser name="dhewg" >}} -- Implement a lock free ring buffer for BLEScanResult to avoid drops {{< pr number="9087" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Make BLE queue lock free {{< pr number="9088" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix protobuf encoding size mismatch by passing force parameter in encode_string {{< pr number="9074" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [i2s_audio] Check for a nullptr before disabling and deleting channel {{< pr number="9062" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Ensure we can send batches where the first message exceeds MAX_PACKET_SIZE {{< pr number="9068" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add common base classes for entity protobuf messages to reduce duplicate code {{< pr number="9090" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce Component blocking threshold memory usage by 2 bytes per component {{< pr number="9081" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove `std::` prefix as not all platforms have access yet. {{< pr number="9095" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [i2s_audio] Add `dump_config` methods, shorten log messages {{< pr number="9099" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [i2s_audio] Bugfix: crashes when unlocking i2s bus multiple times {{< pr number="9100" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [spi] Cater for non-word-aligned buffers on esp8266 {{< pr number="9108" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Optimize LightState memory layout {{< pr number="9113" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce Switch component memory usage by 8 bytes per instance {{< pr number="9112" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -{{< /collapse >}} - -### Dependency Changes - -{{< collapse >}} - -- Bump aioesphomeapi from 30.2.0 to 31.0.0 {{< pr number="8779" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump cairosvg from 2.7.1 to 2.8.0 {{< pr number="8780" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump cairosvg from 2.8.0 to 2.8.1 {{< pr number="8799" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 31.0.0 to 31.0.1 {{< pr number="8809" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 80.4.0 to 80.7.1 {{< pr number="8808" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.9 to 0.11.10 {{< pr number="8818" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump cairosvg from 2.8.1 to 2.8.2 {{< pr number="8817" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump codecov/codecov-action from 5.4.2 to 5.4.3 {{< pr number="8820" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 31.0.1 to 31.1.0 {{< pr number="8849" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 80.7.1 to 80.8.0 {{< pr number="8858" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tornado from 6.4.2 to 6.5.1 {{< pr number="8882" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.10 to 0.11.11 {{< pr number="8883" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pyupgrade from 3.19.1 to 3.20.0 {{< pr number="8891" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/checkout from 4.1.7 to 4.2.2 {{< pr number="8904" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump ruamel-yaml from 0.18.10 to 0.18.11 {{< pr number="8910" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-mock from 3.14.0 to 3.14.1 {{< pr number="8909" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump setuptools from 80.8.0 to 80.9.0 {{< pr number="8915" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-xdist from 3.6.1 to 3.7.0 {{< pr number="8916" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/build-push-action from 6.17.0 to 6.18.0 in /.github/actions/build-image {{< pr number="8919" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 8.3.5 to 8.4.0 {{< pr number="8993" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruamel-yaml from 0.18.11 to 0.18.12 {{< pr number="8977" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 31.1.0 to 32.0.0 {{< pr number="9004" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.11 to 0.11.13 {{< pr number="9017" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruamel-yaml from 0.18.12 to 0.18.13 {{< pr number="9018" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 32.0.0 to 32.1.0 {{< pr number="9024" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 32.1.0 to 32.2.0 {{< pr number="9025" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 32.2.0 to 32.2.1 {{< pr number="9038" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruamel-yaml from 0.18.13 to 0.18.14 {{< pr number="9037" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 32.2.1 to 32.2.3 {{< pr number="9091" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - -{{< /collapse >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.7.0.md b/content/changelog/2025.7.0.md deleted file mode 100644 index 6d780864dc..0000000000 --- a/content/changelog/2025.7.0.md +++ /dev/null @@ -1,802 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.7.0." -title: "ESPHome 2025.7.0 - 16th July 2025" -params: - seo: - description: Changelog for ESPHome 2025.7.0. - image: /_static/changelog-2025.7.0.png ---- - -{{< imgtable >}} -"DS2484","components/one_wire/ds2484","ds2484.svg","" -"ESP32 Hosted","components/esp32_hosted","network-wifi.svg","dark-invert" -"GL-R01","components/sensor/gl_r01","gl_r01.jpg","" -"LN882x","components/libretiny","ln882x.svg","" -"LPS22","components/sensor/lps22","lps22.webp","" -"OPT3001","components/sensor/opt3001","opt3001.jpg","" -"PI4IOE5V6408","components/pi4ioe5v6408","pca9554a.jpg","" -"SX126x","components/sx126x","sx126x.png","" -"SX127x","components/sx127x","sx127x.png","" -"XMWSDJ04MMC","components/sensor/xiaomi_ble","xiaomi_mijia_logo.jpg","" -{{< /imgtable >}} - -## Release Overview - -ESPHome 2025.7.0 is a major release featuring significant architectural improvements, new hardware support, -and important platform updates. This release modernizes the codebase while expanding hardware compatibility -and introducing powerful new features for advanced users. - -**Major Changes:** - -- **Web Server OTA** moved to dedicated platform (breaking change - migration required) -- **ESP-IDF 4.x support removed** - ESP-IDF 5.3.2+ now required -- **ESP32 Arduino updated to 3.1.3** for better compatibility and performance -- **Sub-device support** for logical entity grouping in Home Assistant -- **Jinja2 template expressions** for dynamic configuration generation - -**New Hardware:** - -- LoRa communication (SX126x/SX127x), ESP32 Hosted WiFi, LN882X SoCs -- New sensors: OPT3001 light, LPS22 pressure, GL-R01 ToF, Xiaomi BLE - -**Performance:** - -- Extensive memory optimizations (up to 40% reduction in component memory usage) -- Enhanced performance through C++20 support and optimized algorithms -- Improved interrupt handling and scheduler efficiency - -## Web Server OTA Platform - -> [!WARNING] -> **Breaking Change:** Read this carefully! If your only OTA method is `web_server` and you don't have it explicitly -> enabled, you will lose the ability to update devices OTA after updating to 2025.7.0. You must add the `web_server` -> OTA platform to your configuration to maintain OTA functionality. - -The {{< docref "/components/web_server" >}} component has undergone a significant architectural change. Previously, -OTA functionality was built directly into the web server component. This has now been extracted into a dedicated -OTA platform: {{< docref "/components/ota/web_server" >}}. - -**Migration Required:** - -If you were relying on the web server's built-in OTA functionality, you now need to explicitly configure the web -server OTA platform: - -```yaml -# Before (implicit OTA in web server) -web_server: - port: 80 - -# After (explicit OTA platform required) -web_server: - port: 80 - -ota: - - platform: esphome # Your existing OTA method - - platform: web_server # Add this for web-based OTA uploads -``` - -**Benefits of this change:** - -- **Cleaner separation of concerns** - Web server focuses on serving content, OTA platform handles updates -- **More flexible OTA configuration** - Better control over OTA methods and security -- **Improved maintainability** - Dedicated OTA platform allows for better features and bug fixes - -## ESP-IDF 4.x End of Life - -> [!IMPORTANT] -> **Major Platform Change:** This release completely removes support for ESP-IDF 4.x versions, marking the end of life -> for these older framework versions. - -ESPHome 2025.7.0 removes all support for ESP-IDF 4.x versions as part of our commitment to supporting modern, -secure, and well-maintained development frameworks. Please see our -[developer blog post](https://developers.esphome.io/blog/2025/06/18/sunsetting-support-for-idf-4x/) for detailed -background and technical reasons behind this decision. - -**What this means for users:** - -- **Most users are unaffected** - We automatically set the recommended ESP-IDF version (currently 5.3.2) as the default -- **Explicit version users must update** - If you're explicitly setting the ESP-IDF version in your configuration, - you must update to version 5.3.2 or later - -- **Legacy projects may need updates** - Older projects might require minor configuration adjustments - -**Required action if you explicitly set ESP-IDF version:** - -```yaml -# Remove or update old explicit versions -esp32: - board: esp32dev - framework: - type: esp-idf - version: 4.4.7 # ❌ No longer supported - -# Update to supported version -esp32: - board: esp32dev - framework: - type: esp-idf - version: 5.3.2 # ✅ Supported (or omit for latest recommended) -``` - -**Benefits of ESP-IDF 5.x:** - -- **Enhanced security** - Latest security patches and improvements -- **Better performance** - Optimized code generation and runtime performance -- **Modern C++ support** - Full C++20 support with improved standard library -- **Expanded hardware support** - Better support for newer ESP32 variants (S2, S3, C3, C6, H2) -- **Active maintenance** - Continued updates and bug fixes from Espressif - -## ESP32 Arduino Framework 3.x - -> [!NOTE] -> **Framework Update:** Arduino for ESP32 has been upgraded to version 3.1.3, bringing significant improvements -> and maintaining compatibility with ESP-IDF 5.3.2. - -To maintain alignment and compatibility with the current ESP-IDF version of 5.3.2, the Arduino framework for ESP32 -has been updated to version 3.1.3. This represents a major version jump from Arduino 2.x. - -**Key improvements in Arduino 3.1.3:** - -- **ESP-IDF 5.3.2 compatibility** - Full integration with the latest ESP-IDF features -- **Improved stability** - Better memory management and reduced crashes -- **Enhanced WiFi performance** - More reliable connections and better power management -- **Updated libraries** - Latest versions of core Arduino libraries -- **Bug fixes** - Numerous fixes for issues present in earlier versions - -**Potential compatibility considerations:** - -- Some third-party Arduino libraries may need updates for Arduino 3.x compatibility -- Timing-sensitive code might behave slightly differently due to framework optimizations -- Memory usage patterns may change slightly due to framework improvements - -> [!NOTE] -> **Flash Usage Warning:** Arduino 3.x can use more flash memory than Arduino 2.x, which may cause some projects -> with many components to exceed available flash space. If you encounter flash size issues, consider: -> -> - Switching to ESP-IDF framework (recommended for large projects) -> - Reducing the number of enabled components -> - Using a board with more flash memory - -Most users will see this as a transparent improvement with better performance and reliability. - -## Sub-Device Support - -> [!NOTE] -> **New Feature:** Entities can now be organized into logical sub-devices, enabling better organization -> and area management in Home Assistant. - -ESPHome now supports **sub-devices**, a powerful new feature that allows you to logically group entities from a single -physical ESPHome device into multiple virtual devices within Home Assistant. This is particularly useful for complex -setups where one ESP32 controls sensors or actuators in different areas of your home. - -**Use cases and benefits:** - -- **Multi-room sensors** - One ESP32 with temperature sensors in different rooms can appear as separate devices per room -- **Complex automation hubs** - A single ESP32 controlling lights, fans, and sensors across multiple areas -- **Better Home Assistant organization** - Entities automatically appear in the correct areas and can be managed - independently - -- **Cleaner dashboards** - Related entities are grouped together logically rather than by physical device - -**How it works:** - -You can assign entities to sub-devices using the new `device_id` configuration option. First, define your devices -in the `devices` section under `esphome:`, then reference them in individual entities. - -**Example configuration:** - -```yaml -esphome: - name: multi_room_controller - - # Define areas (optional) - areas: - - id: living_room_area - name: "Living Room" - - id: bedroom_area - name: "Bedroom" - - # Define devices - devices: - - id: living_room_device - name: "Living Room Sensors" - area_id: living_room_area - - id: bedroom_device - name: "Bedroom Sensors" - area_id: bedroom_area - -# Assign sensors to different devices -sensor: - - platform: dht - pin: GPIO4 - temperature: - name: "Living Room Temperature" - device_id: living_room_device - humidity: - name: "Living Room Humidity" - device_id: living_room_device - - - platform: dht - pin: GPIO5 - temperature: - name: "Bedroom Temperature" - device_id: bedroom_device - humidity: - name: "Bedroom Humidity" - device_id: bedroom_device -``` - -In this example, Home Assistant will see two separate sensor devices (one for living room, one for bedroom) -even though they're controlled by a single ESPHome device. - -This feature enhances the logical organization of your smart home while maintaining the efficiency of -centralized ESPHome device management. - -## New Hardware Support Highlights - -This release brings support for exciting new hardware platforms and components: - -**New Wireless Communication:** - -- **SX126x & SX127x LoRa modules** - Long-range, low-power communication for remote sensors and IoT applications -- **ESP32 Hosted WiFi** - Use an ESP32 as a WiFi adapter for other microcontrollers, expanding connectivity options - -**New Sensors & Measurement:** - -- **OPT3001** - High-precision ambient light sensor with excellent low-light sensitivity -- **LPS22** - Accurate barometric pressure sensor for weather monitoring and altitude measurement -- **GL-R01** - Time-of-flight distance sensor for precise proximity and ranging applications -- **Xiaomi XMWSDJ04MMC** - Support for popular Xiaomi Bluetooth temperature/humidity sensors - -**Expanded Platform Support:** - -- **LN882X SoC Family** - New LibreTiny support extends ESPHome to additional low-cost WiFi microcontrollers -- **PI4IOE5V6408** - New I2C GPIO expander for applications requiring additional digital I/O pins - -**Infrastructure Improvements:** - -- **DS2484** - Advanced 1-Wire bus master for improved reliability in complex 1-Wire networks -- **Enhanced Camera Framework** - New base camera class enables support for alternative camera implementations - -## Memory and Performance Optimizations - -ESPHome 2025.7.0 includes extensive memory and performance optimizations, particularly beneficial for -resource-constrained devices: - -**Memory Usage Reductions:** - -- **Component memory reduced** (8 bytes per component) - Significant savings for devices with many components -- **Sensor entities optimized** - Reduced memory footprint for devices with numerous sensors -- **API and networking optimizations** - Lower RAM usage for WiFi and API communication -- **Color constant storage optimization** - More efficient handling of color data in displays and lighting - -**Performance Improvements:** - -- **Faster loop processing** - Components can now disable their loop() method when not needed, reducing CPU overhead -- **Optimized API communication** - Improved batching and reduced redundant operations -- **Enhanced logging performance** - More efficient message processing and reduced CPU impact -- **Bluetooth proxy optimizations** - Better performance for ESP32 devices acting as Bluetooth proxies - -**Code Quality Enhancements:** - -- **C++20 support** - Modern C++ features for better performance and developer experience -- **Improved interrupt handling** - More reliable GPIO interrupt processing -- **Enhanced scheduler** - Better task management with comprehensive test coverage - -## Jinja2 Template Expressions in Substitutions - -> [!NOTE] -> **New Feature:** ESPHome now supports Jinja2 template expressions within substitutions, -> enabling more advanced and dynamic value generation. - -ESPHome 2025.7.0 introduces support for Jinja2 template expressions within the existing substitutions system. -This enhancement extends the current `${ }` substitution syntax to support Jinja2 expressions, allowing for -more sophisticated value calculations and transformations. - -**Enhanced substitution capabilities:** - -- **Mathematical operations** - Perform calculations using substitution variables -- **Conditional expressions** - Use ternary operators and conditional logic -- **String formatting** - Advanced string manipulation and formatting -- **Type conversions** - Convert between strings, numbers, and other types -- **Filter operations** - Apply Jinja2 filters for data transformation - -**Example usage:** - -```yaml -substitutions: - device_name: living_room_sensors - num_sensors: 3 - base_pin: 4 - offset_voltage: 3.3 - enable_debugging: false - sensor_config: - update_interval: 60s - accuracy_decimals: 2 - -sensor: - - platform: adc - pin: GPIO${base_pin} - name: "${device_name} voltage" - update_interval: ${sensor_config.update_interval} - accuracy_decimals: ${sensor_config.accuracy_decimals} - filters: - # Convert ADC reading to actual voltage - - multiply: ${offset_voltage / 4095} - - - platform: adc - pin: GPIO${base_pin + 1} - name: "${device_name} sensor ${num_sensors > 1 and 'secondary' or 'primary'}" - accuracy_decimals: ${1 if num_sensors <= 2 else 2} - update_interval: ${sensor_config.update_interval} - -binary_sensor: - - platform: gpio - pin: GPIO${base_pin + 2} - name: "${device_name} status ${enable_debugging and '(debug)' or ''}" -``` - -**Key features:** - -- **Works within existing substitutions** - Uses the familiar `${ }` syntax you already know -- **Access to substitution variables** - All defined substitutions are available as Jinja variables -- **Dictionary and list access** - Use dot notation (`device.name` ) or indexing (`pins[0]` ) -- **Mathematical functions** - Access to Python's math library (`math.sqrt`, `math.pi`, etc.) -- **Conditional logic** - Ternary operators and boolean expressions for dynamic values - -**Benefits:** - -- **More powerful substitutions** - Calculate complex values instead of just simple replacements -- **Reduced duplication** - Generate values programmatically based on other substitutions -- **Better maintainability** - Change base values and have dependent values update automatically -- **Enhanced flexibility** - Support for conditional values and complex transformations - -This feature builds upon ESPHome's existing substitutions system, making it more powerful while maintaining -backward compatibility. It's particularly useful for responsive designs, calculated pin assignments, -and configurations that need to adapt based on device capabilities or user preferences. - -For complete documentation and more examples, see the {{< docref "/components/substitutions" >}} guide. - -## ArduinoJson Library 7.x - -> [!WARNING] -> **Breaking Change:** The ArduinoJson library has been upgraded from version 6.x to 7.2.0, introducing -> breaking changes that may affect custom components and external integrations. - -ESPHome 2025.7.0 upgrades the ArduinoJson library to version 7.2.0, bringing performance improvements and -reduced memory usage. Most users will not be affected as all standard ESPHome components have been updated. -However, if you have external components, or lambdas that directly use ArduinoJson, you may need -to update your code. - -For detailed migration information, see the [ArduinoJson migration guide](https://arduinojson.org/v7/how-to/upgrade-from-v6/). - - - -## Release 2025.7.1 - July 17 - -{{< collapse true >}} - -- [lvgl]: fix missing await keyword in meter tick_style width processing {{< pr number="9538" repo="esphome" >}} by {{< ghuser name="theshut" >}} -- Fix compilation error when using string lambdas with homeassistant services {{< pr number="9543" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix format string warnings in Web Server OTA component {{< pr number="9569" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add helpful error message when ESP32+Arduino runs out of flash space {{< pr number="9580" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Allow disabling OTA for web_server while keeping it enabled for captive_portal {{< pr number="9583" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Add missing include for helpers {{< pr number="9579" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix lwIP thread safety assertion failures on ESP32 {{< pr number="9570" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -{{< /collapse >}} - -## Release 2025.7.2 - July 19 - -{{< collapse true >}} - -- Fix template event web_server crash {{< pr number="9618" repo="esphome" >}} by {{< ghuser name="AzonInc" >}} -- [api] Fix compilation error with char* lambdas in HomeAssistant services {{< pr number="9638" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wireguard] Fix boot loop when CONFIG_LWIP_TCPIP_CORE_LOCKING is enabled {{< pr number="9637" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [scheduler] Fix cancellation of timers with empty string names {{< pr number="9641" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [logger] fix on_message {{< pr number="9642" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esp32_camera: deprecate i2c_pins; throw error if combined with i2c: block {{< pr number="9615" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [scheduler] Fix DelayAction cancellation in restart mode scripts {{< pr number="9646" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [lvgl] Fix meter rotation {{< pr number="9605" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [libretiny] Remove unsupported lock-free queue and event pool implementations {{< pr number="9653" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [lvgl] Prevent keyerror on min/max value widgets with no default {{< pr number="9660" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix AsyncTCP version mismatch between platformio.ini and async_tcp component {{< pr number="9676" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [speaker] Media player's pipeline properly returns playing state near end of file {{< pr number="9668" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [voice_assistant] Use media player callbacks to track TTS response status {{< pr number="9670" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [gpio] Disable interrupt mode by default for LibreTiny platforms {{< pr number="9687" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -{{< /collapse >}} - -## Release 2025.7.3 - July 23 - -{{< collapse true >}} - -- [gpio] Auto-disable interrupts for shared GPIO pins in binary sensors {{< pr number="9701" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix format string error in ota_web_server.cpp {{< pr number="9711" repo="esphome" >}} by {{< ghuser name="tmpeh" >}} -- [sdl][mipi_spi] Respect clipping when drawing {{< pr number="9722" repo="esphome" >}} by {{< ghuser name="JonasB2497" >}} -- [esp32_touch] Fix setup mode in v1 driver {{< pr number="9725" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [tuya] Update use of fan_schema {{< pr number="9762" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [config_validation] Add support for suggesting alternate component/platform {{< pr number="9757" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [core] Process pending loop enables during setup blocking phase {{< pr number="9787" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [fastled_clockless, fastled_spi] Add suggested alternate when using IDF {{< pr number="9784" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [neopixelbus] Add suggested alternate when using IDF {{< pr number="9783" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [bme680_bsec] Add suggested alternate when using IDF {{< pr number="9785" repo="esphome" >}} by {{< ghuser name="kbx81" >}} - -{{< /collapse >}} - -## Release 2025.7.4 - July 28 - -{{< collapse true >}} - -- [remote_receiver] Fix idle validation {{< pr number="9819" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [gt911] i2c fixes {{< pr number="9822" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- fix: non-optional x/y target calculation for ld2450 {{< pr number="9849" repo="esphome" >}} by {{< ghuser name="Hofferic" >}} -- [logger] Don't allow `logger.log` actions without configuring the `logger` {{< pr number="9821" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add seed flag when running setup with uv present {{< pr number="9932" repo="esphome" >}} by {{< ghuser name="cryptk" >}} -- Fail with old lerp {{< pr number="9914" repo="esphome" >}} by {{< ghuser name="HeMan" >}} - -{{< /collapse >}} - -## Release 2025.7.5 - August 5 - -{{< collapse true >}} - -- [lvgl] Bugfix for tileview {{< pr number="9938" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [api] Fix OTA progress updates not being sent when main loop is blocked {{< pr number="10049" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [font] Catch file load exception {{< pr number="10058" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [i2s_audio] Use high-pass filter for dc offset correction {{< pr number="10005" repo="esphome" >}} by {{< ghuser name="doobry" >}} - -{{< /collapse >}} - -## Full list of changes - -### New Components - -- Add support for Xiaomi XMWSDJ04MMC {{< pr number="8591" repo="esphome" >}} by {{< ghuser name="medusalix" >}} (new-integration) -- [opt3001] New component {{< pr number="6625" repo="esphome" >}} by {{< ghuser name="ccutrer" >}} (new-integration) -- [esp32_hosted] Add support for remote wifi {{< pr number="8833" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- [pi4ioe5v6408] Add new IO Expander {{< pr number="8888" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Add support for LN882X Family (with LibreTiny) {{< pr number="8954" repo="esphome" >}} by {{< ghuser name="lamauny" >}} (new-integration) (notable-change) -- Replace custom OTA implementation in web_server_base {{< pr number="9274" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-integration) (breaking-change) -- [ds2484] New component {{< pr number="9147" repo="esphome" >}} by {{< ghuser name="mrk-its" >}} (new-integration) -- [sx127x] Add sx127x component {{< pr number="7490" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- Introduce base Camera class to support alternative camera implementations {{< pr number="9285" repo="esphome" >}} by {{< ghuser name="DT-art1" >}} (new-integration) -- [sx126x] Add sx126x component {{< pr number="8516" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- lps22: add a component {{< pr number="7540" repo="esphome" >}} by {{< ghuser name="nagisa" >}} (new-integration) -- Add support for GL-R01 I2C - Time of Flight sensor {{< pr number="8329" repo="esphome" >}} by {{< ghuser name="pkejval" >}} (new-integration) - -### Breaking Changes - -- [binary_sensor] Add action to invalidate state and pass to HA {{< pr number="8961" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- [esp32_hall] Remove esp32_hall {{< pr number="9117" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [web_server] Upgrade ESPAsync libraries {{< pr number="8867" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} (breaking-change) -- Bump ESP32 Arduino version to 3.1.3 {{< pr number="8604" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [mqtt] Don't wait for connection unless configured to {{< pr number="8933" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [API] Sub devices and areas {{< pr number="8544" repo="esphome" >}} by {{< ghuser name="dala318" >}} (breaking-change) -- Reduce memory required for sensor entities {{< pr number="9201" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize TemplatableValue memory {{< pr number="9202" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize Application class memory layout and reduce loop_interval size {{< pr number="9208" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [pins] Update `internal_gpio_pin_number` to work directly like `internal_gpio_output_pin_number` {{< pr number="9270" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [smt100] Rename `dielectric_constant` to `permittivity` {{< pr number="9175" repo="esphome" >}} by {{< ghuser name="piechade" >}} (breaking-change) -- Fix entity hash collisions by enforcing unique names across devices per platform {{< pr number="9276" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [esp32] Remove IDF 4 support and clean up code {{< pr number="9145" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- Replace custom OTA implementation in web_server_base {{< pr number="9274" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-integration) (breaking-change) -- Reduce RAM usage by optimizing Color constant storage {{< pr number="9339" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize logger callback API by including message length parameter {{< pr number="9368" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Conditionally compile API user services to save 4.3KB flash (follow-up to #9262) {{< pr number="9451" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [json] Bump ArduinoJson library to 7.4.2 {{< pr number="8857" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) - -### Notable Changes - -- Add support for LN882X Family (with LibreTiny) {{< pr number="8954" repo="esphome" >}} by {{< ghuser name="lamauny" >}} (new-integration) (notable-change) -- Jinja expressions in configs (Take #3) {{< pr number="8955" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} (notable-change) - -### All changes - -{{< collapse >}} - -- [core/pins] improve pins types {{< pr number="8848" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [binary_sensor] Add action to invalidate state and pass to HA {{< pr number="8961" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (breaking-change) -- ina219: powerdown the sensor on shutdown {{< pr number="9053" repo="esphome" >}} by {{< ghuser name="youknow0" >}} -- Build with C++17 {{< pr number="8603" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Move some consts to `const.py` {{< pr number="9084" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Reduce Component memory usage by 20 bytes per component {{< pr number="9080" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ruff] Apply various ruff suggestions {{< pr number="8947" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump LibreTiny recommended version to 1.9.1 {{< pr number="9110" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [esp32_hall] Remove esp32_hall {{< pr number="9117" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- Resolve esphome::optional vs std::optional ambiguity in code generation {{< pr number="9119" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add intent progress event to voice assistant enum {{< pr number="9103" repo="esphome" >}} by {{< ghuser name="synesthesiam" >}} -- Pin libretiny to 1.9.1 {{< pr number="9118" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Bump ruff in pre-commit to 0.12.0 {{< pr number="9121" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [heatpumpir] Bump HeatpumpIR to 1.0.35 {{< pr number="9123" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [i2s_audio] Bump esphome/ESP32-audioI2S to 2.3.0 {{< pr number="9124" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Reduce CPU overhead by allowing components to disable their loop() {{< pr number="9089" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add support for Xiaomi XMWSDJ04MMC {{< pr number="8591" repo="esphome" >}} by {{< ghuser name="medusalix" >}} (new-integration) -- [web_server] Upgrade ESPAsync libraries {{< pr number="8867" repo="esphome" >}} by {{< ghuser name="kuba2k2" >}} (breaking-change) -- Bump ESP32 Arduino version to 3.1.3 {{< pr number="8604" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- Remove empty generated protobuf methods {{< pr number="9098" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce code duplication in auto-generated API protocol code {{< pr number="9097" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use smaller atomic types for ESP32 BLE Tracker ring buffer indices {{< pr number="9106" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize API server performance by using cached loop time {{< pr number="9104" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize API component memory usage by reordering class members to reduce padding {{< pr number="9111" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize bluetooth_proxy memory usage on ESP32 {{< pr number="9114" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add enable_loop_soon_any_context() for thread and ISR-safe loop enabling {{< pr number="9127" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize OTA loop to avoid unnecessary stack allocations {{< pr number="9129" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [i2c] Expose internal i2c bus port number {{< pr number="9136" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Disable Ethernet loop polling when connected and stable {{< pr number="9102" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Clean up RAMAllocators in audio related code {{< pr number="9140" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Clean up RAMAllocators in http_request code {{< pr number="9143" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Clean up RAMAllocators in display related code {{< pr number="9141" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [i2c] Make `get_port()` public {{< pr number="9146" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32_camera] Allow sharing i2c bus {{< pr number="9137" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nextion] Add command queuing to prevent command loss when spacing is active {{< pr number="9139" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [nextion] Cached timing optimization {{< pr number="9150" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [wifi, wifi_info] Tidy up/shorten more log messages {{< pr number="9151" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [bh1750] Remove redundant platform name from logging {{< pr number="9153" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add option to enable support for USB Hubs {{< pr number="9154" repo="esphome" >}} by {{< ghuser name="RoganDawes" >}} -- [spi] Enable >6 devices with ESP-IDF {{< pr number="9128" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Clean up RAMAllocators in light related code {{< pr number="9142" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nextion] Extract common `upload_end_` function to shared file {{< pr number="9155" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Improve on C++17 {{< pr number="9170" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- [nextion] Revert to `millis()` on `recv_ret_string_` {{< pr number="9168" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [const] Move `CONF_DEVICES` to `const.py` {{< pr number="9179" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Reduce Logger memory usage by optimizing variable sizes {{< pr number="9161" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix slow noise handshake by reading multiple messages per loop {{< pr number="9130" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce RAM usage for scheduled tasks {{< pr number="9180" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Pre-reserve looping components vector to reduce memory allocations {{< pr number="9177" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [lvgl] Add start_value to bar; make values templatable and updateable {{< pr number="9056" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Use styles instead of object properties for themes {{< pr number="9116" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Feature fontmetrics {{< pr number="8978" repo="esphome" >}} by {{< ghuser name="JonasB2497" >}} -- Image should not update when setting URL {{< pr number="8885" repo="esphome" >}} by {{< ghuser name="gpambrozio" >}} -- [opt3001] New component {{< pr number="6625" repo="esphome" >}} by {{< ghuser name="ccutrer" >}} (new-integration) -- [mqtt] Don't wait for connection unless configured to {{< pr number="8933" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [modbus_controller] Fix modbus read_lambda precision for non-floats or large integers {{< pr number="9159" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- [helpers] Add `format_mac_address_pretty` function, migrate components {{< pr number="9193" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2450] Use `App.get_loop_component_start_time()`, shorten log messages {{< pr number="9192" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2420] Shorten log messages + other clean-up {{< pr number="9200" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2410] Use `App.get_loop_component_start_time()`, shorten log messages {{< pr number="9194" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_hall] Add dummy component {{< pr number="9125" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- fix(MQTT): Call disconnect callback on DNS error {{< pr number="9016" repo="esphome" >}} by {{< ghuser name="Rapsssito" >}} -- Rename kVARh/VARh to kvarh/varh {{< pr number="9191" repo="esphome" >}} by {{< ghuser name="Drafteed" >}} -- [API] Sub devices and areas {{< pr number="8544" repo="esphome" >}} by {{< ghuser name="dala318" >}} (breaking-change) -- [binary_sensor] Add timeout filter {{< pr number="9198" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] Allow linear positioning of grid cells {{< pr number="9196" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Reduce memory required for sensor entities {{< pr number="9201" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Reduce logger CPU usage by disabling loop when buffer is empty {{< pr number="9160" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize API connection loop performance {{< pr number="9184" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize TemplatableValue memory {{< pr number="9202" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize API connection memory with tagged pointers {{< pr number="9203" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix missing protobuf message dump for batched messages with very verbose logging {{< pr number="9206" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize Application class memory layout and reduce loop_interval size {{< pr number="9208" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Use shared workflow for locking {{< pr number="9211" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32] Improve and simplify IDF component support {{< pr number="9163" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [ld2450] More optimizing, fix copypasta {{< pr number="9210" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ci] Lint lock.yml {{< pr number="9214" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [script] Add exec bit to run-in-env {{< pr number="9212" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ld2410] More optimizations {{< pr number="9209" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2450] Move consts to cpp file, optimize memory use {{< pr number="9215" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [tests] Remove extra newline {{< pr number="9213" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Optimize SafeModeComponent memory layout to reduce padding {{< pr number="9228" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_hosted] Add support for remote wifi {{< pr number="8833" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- use c++17 `[[fallthrough]];` {{< pr number="9149" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [esp32] Update IDF components to use the registry {{< pr number="9223" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [wifi] Reduce memory usage {{< pr number="9232" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ethernet] Reduce memory usage by 8 bytes {{< pr number="9231" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [gpio] Reduce ESP32 memory usage by optimizing struct padding {{< pr number="9230" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce component_iterator memory usage {{< pr number="9205" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Upgrade to use C++20 {{< pr number="9135" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- [mcp23xxx_base] fix pin interrupts {{< pr number="9244" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [i2c] Disable i2c scan on certain idf versions {{< pr number="9237" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Reduce libretiny logconfig messages {{< pr number="9239" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Disable dynamic log level control for ESP32 ESP-IDF builds {{< pr number="9233" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Silence protobuf compatibility warnings when importing aioesphomeapi {{< pr number="9236" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Allow 5.4.2 {{< pr number="9243" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Remove backports of `std` {{< pr number="9246" repo="esphome" >}} by {{< ghuser name="HeMan" >}} -- Fix buffer corruption in API message encoding with very verbose logging {{< pr number="9249" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Extract lock-free queue and event pool to core helpers {{< pr number="9238" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Replace ping retry timer with batch queue fallback {{< pr number="9207" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [thermostat] Memory optimizations {{< pr number="9259" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [adc] Memory optimizations {{< pr number="9247" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [light] Memory optimizations {{< pr number="9260" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Reduce web_server code duplication by extracting detail parameter parsing {{< pr number="9257" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove redundant get_setup_priority() overrides returning default value {{< pr number="9253" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix MQTT blocking main loop for multiple seconds at a time {{< pr number="8325" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Remove single-use send_*_info wrappers in API connection {{< pr number="9255" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce API memory footprint through bitfield consolidation and type sizing {{< pr number="9252" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce flash usage by making add_message_object non-template {{< pr number="9258" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove unused return value from read_message and fix ifdef placement in generated API code {{< pr number="9256" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce web_server RAM usage by 96 bytes with conditional sorting compilation {{< pr number="9227" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add interrupt support to GPIO binary sensors {{< pr number="9115" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [pi4ioe5v6408] Add new IO Expander {{< pr number="8888" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- Reduce loop enable/disable log spam by using very verbose level {{< pr number="9267" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix thread-safe cleanup of event source connections in ESP-IDF web server {{< pr number="9268" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce API component memory usage with conditional compilation {{< pr number="9262" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize scheduler string storage to eliminate heap allocations {{< pr number="9251" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize web_server UrlMatch to avoid heap allocations {{< pr number="9263" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add support for LN882X Family (with LibreTiny) {{< pr number="8954" repo="esphome" >}} by {{< ghuser name="lamauny" >}} (new-integration) (notable-change) -- Support DM9051 SPI ethernet device {{< pr number="6861" repo="esphome" >}} by {{< ghuser name="bmork" >}} -- [light] Fix transitions with `lerp` {{< pr number="9269" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [remote_base] Fix dumper base class and enable schema extension {{< pr number="9218" repo="esphome" >}} by {{< ghuser name="gabest11" >}} -- [ld2420] Move consts to cpp file, optimize memory use {{< pr number="9216" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Update libsodium to 1.0.20 {{< pr number="9240" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fixes for async MQTT {{< pr number="9273" repo="esphome" >}} by {{< ghuser name="dwmw2" >}} -- Fix flaky test_api_conditional_memory by waiting for all required states {{< pr number="9271" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [pins] Update `internal_gpio_pin_number` to work directly like `internal_gpio_output_pin_number` {{< pr number="9270" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- [http_request.update] Fix `size_t` printing {{< pr number="9144" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [smt100] Rename `dielectric_constant` to `permittivity` {{< pr number="9175" repo="esphome" >}} by {{< ghuser name="piechade" >}} (breaking-change) -- [ethernet] P4 changes and 5.3.0 deprecated warnings {{< pr number="8457" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix - Pass thread TLVs down to openthread if they are defined {{< pr number="9182" repo="esphome" >}} by {{< ghuser name="mrene" >}} -- Fix entity hash collisions by enforcing unique names across devices per platform {{< pr number="9276" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [host] Disable platformio ldf {{< pr number="9277" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Jinja expressions in configs (Take #3) {{< pr number="8955" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} (notable-change) -- Use interrupt based approach for esp32_touch {{< pr number="9059" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add OTA support to ESP-IDF webserver {{< pr number="9264" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [modbus] Modbus server role: write holding registers {{< pr number="9156" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- [esp32] Remove IDF 4 support and clean up code {{< pr number="9145" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- Fix regression: BK7231N devices not returning entities via API {{< pr number="9283" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_rmt_led_strip] Reduce memory usage by 32x with IDF 5.3 {{< pr number="8388" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [api] Dump bytes fields as hex instead of unreadable string {{< pr number="9288" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Reduce Component memory usage by 40% (8 bytes per component) {{< pr number="9278" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Replace custom OTA implementation in web_server_base {{< pr number="9274" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-integration) (breaking-change) -- pulse_meter total {{< pr number="9282" repo="esphome" >}} by {{< ghuser name="prchal" >}} -- Mmc5603 fix for devices that don't retrieve chip_id {{< pr number="8959" repo="esphome" >}} by {{< ghuser name="jsb2092" >}} -- made qr_code elements optional {{< pr number="8896" repo="esphome" >}} by {{< ghuser name="JonasB2497" >}} -- [nextion] memory optimization {{< pr number="9164" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Use encode_bytes() for protobuf bytes fields {{< pr number="9289" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Deleting CMakeCache.txt for fast recompilation with ESP-IDF {{< pr number="8750" repo="esphome" >}} by {{< ghuser name="zkoalexey" >}} -- [heatpumpir] Add Support for PHS32 HeatPump {{< pr number="7378" repo="esphome" >}} by {{< ghuser name="mrtntome" >}} -- OpenThread - add Device Type {{< pr number="9272" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- Don't compile `state_to_string()` unless debugging. {{< pr number="7473" repo="esphome" >}} by {{< ghuser name="colmbuckley" >}} -- [time] Add `USE_TIME_TIMEZONE` define {{< pr number="9290" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [time] fix clang-tidy {{< pr number="9292" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [esp32_touch] Fix threshold {{< pr number="9291" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ds2484] New component {{< pr number="9147" repo="esphome" >}} by {{< ghuser name="mrk-its" >}} (new-integration) -- Fix missing ifdef guards in API protobuf generator {{< pr number="9296" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Save flash and RAM by conditionally compiling unused API password code {{< pr number="9297" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [Packet transport] Ping timeout sensor {{< pr number="8694" repo="esphome" >}} by {{< ghuser name="dala318" >}} -- Allow disabling API batch delay for real-time state updates {{< pr number="9298" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Packages: optional base path for remote git packages {{< pr number="9279" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- [sx127x] Add sx127x component {{< pr number="7490" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- [microphone] simplify mute handling to avoid unnecessary copies {{< pr number="9303" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Add device_id to entity state messages for sub-device support {{< pr number="9304" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix web_server URL parsing lifetime issue {{< pr number="9309" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce web_server loop overhead on ESP32 by avoiding unnecessary semaphore operations {{< pr number="9308" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix compiler warning in tsl2591 component {{< pr number="9310" repo="esphome" >}} by {{< ghuser name="mikelawrence" >}} -- Fix web_server busy loop with ungracefully disconnected clients {{< pr number="9312" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add const char overload for Component::defer() {{< pr number="9324" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [rtttl] trim extraneous whitespace in "ac_dimmer" in "PWM_BAD" list {{< pr number="9318" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Mark ESPTime comparison operators as const {{< pr number="9335" repo="esphome" >}} by {{< ghuser name="freundTech" >}} -- [ld2450] Reduce CPU usage, eliminate redundant sensor updates {{< pr number="9334" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [nextion] Memory optimization {{< pr number="9338" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Reduce RAM usage by optimizing Color constant storage {{< pr number="9339" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Eliminate API component guard variable to save 8 bytes RAM {{< pr number="9341" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Eliminate web_server_idf guard variable to save 8 bytes RAM {{< pr number="9344" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [scd4x] Optimize logging + minor code clean-up {{< pr number="9347" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2410] Reduce RAM usage, general clean-up {{< pr number="9346" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sx127x] Improve error handling {{< pr number="9351" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Fix defer() thread safety issues on multi-core platforms {{< pr number="9317" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [update, http_request_update] Implement update available trigger {{< pr number="9174" repo="esphome" >}} by {{< ghuser name="jhbruhn" >}} -- Split LockFreeQueue into base and notifying variants to reduce memory usage {{< pr number="9330" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix bluetooth proxy busy loop when disconnecting pending BLE connections {{< pr number="9332" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use std::span to eliminate heap allocation for single-packet API transmissions {{< pr number="9313" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [sx127x] Fix shaping print in dump_config and preallocate packet {{< pr number="9357" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Introduce base Camera class to support alternative camera implementations {{< pr number="9285" repo="esphome" >}} by {{< ghuser name="DT-art1" >}} (new-integration) -- [scd4x] Memory optimization {{< pr number="9358" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nextion] Replace boolean flags with bitfields to optimize memory usage {{< pr number="9359" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [inkplate6] Require 240mhz cpu frequency {{< pr number="9356" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [sx126x] Add sx126x component {{< pr number="8516" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-integration) -- [nextion] Optimize settings memory usage with compile-time defines {{< pr number="9350" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [ld2450] Clean-up for consistency, reduce CPU usage when idle {{< pr number="9363" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [nextion] Review `touch_sleep_timeout` {{< pr number="9345" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [core] Move platform helper implementations into their own file {{< pr number="9361" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nextion] Add optional device info storage configuration {{< pr number="9366" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Optimize Bluetooth proxy batching and increase scan buffer capacity {{< pr number="9328" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix scheduler race conditions and add comprehensive test suite {{< pr number="9348" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce LightCall memory usage by 50 bytes per call {{< pr number="9333" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize entity icon memory usage with USE_ENTITY_ICON flag {{< pr number="9337" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce core RAM usage by 40 bytes with static initialization optimizations {{< pr number="9340" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix flaky test_api_conditional_memory by disabling API batch delay {{< pr number="9360" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix format specifier warnings in QuantileFilter logging {{< pr number="9364" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize logger performance by eliminating redundant strlen calls {{< pr number="9369" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Replace deprecated sprintf with snprintf in API protobuf code generation {{< pr number="9365" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor duplicate socket read error handling in API frame helper {{< pr number="9370" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor entity lookup methods with macros in preparation for device_id support {{< pr number="9371" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor API entity update dispatch to reduce code duplication {{< pr number="9372" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Don't compile unnecessary platform files (e.g. ESP8266 files on ESP32) {{< pr number="9354" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor voice assistant API methods to reduce code duplication {{< pr number="9374" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Eliminate bluetooth_proxy guard variable to save 8 bytes RAM {{< pr number="9343" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [nextion] Optimize component memory usage with bitfield state management {{< pr number="9373" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Fix brightness setting not working on SSD1305 128x32 OLEDs {{< pr number="9376" repo="esphome" >}} by {{< ghuser name="DooMMasteR" >}} -- Optimize logger callback API by including message length parameter {{< pr number="9368" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Run integration tests only on Python 3.13 to reduce CI resource usage {{< pr number="9377" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix flaky test_api_conditional_memory and improve integration test patterns {{< pr number="9379" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [helpers] Improve `format_hex_pretty` {{< pr number="9380" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- hydreon_rgxx: remove precipitation_intensity from RG9 {{< pr number="9367" repo="esphome" >}} by {{< ghuser name="functionpointer" >}} -- [image] Add byte order option and unit tests {{< pr number="9326" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix integration test race condition by isolating PlatformIO directories {{< pr number="9383" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix format string error in waveshare_epaper.cpp {{< pr number="9322" repo="esphome" >}} by {{< ghuser name="tmpeh" >}} -- Fix race condition in scheduler string lifetime integration test {{< pr number="9382" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- lps22: add a component {{< pr number="7540" repo="esphome" >}} by {{< ghuser name="nagisa" >}} (new-integration) -- [nfc] Update code to use `format_hex_pretty` {{< pr number="9384" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [helpers] Fix `format_hex_pretty` resize without separator {{< pr number="9389" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add support for GL-R01 I2C - Time of Flight sensor {{< pr number="8329" repo="esphome" >}} by {{< ghuser name="pkejval" >}} (new-integration) -- [esp32] Improve flexibility of `only_on_variant` {{< pr number="9390" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- ESP_EXT1_WAKEUP_ANY_LOW is for s2/s3/c6/h2; ESP_EXT1_WAKEUP_ALL_LOW otherwise {{< pr number="9387" repo="esphome" >}} by {{< ghuser name="candrews" >}} -- [apds9960] Add 0x9E ID {{< pr number="9392" repo="esphome" >}} by {{< ghuser name="Merikei" >}} -- Fix another race in the string lifetime scheduler test {{< pr number="9399" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_touch] Fix touch v1 {{< pr number="9414" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Set lib_compat_mode to strict {{< pr number="9408" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- debug: bufferoverflow mitigation in DebugComponent::on_shutdown() {{< pr number="9422" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- Exclude internal entities from name uniqueness validation {{< pr number="9410" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Handle ESP32 chunked MQTT messages missing topic on non-first chunks, causing panic {{< pr number="5786" repo="esphome" >}} by {{< ghuser name="aaliddell" >}} -- Replace remaining instances of USE_ESP32_CAMERA with USE_CAMERA {{< pr number="9401" repo="esphome" >}} by {{< ghuser name="DT-art1" >}} -- Sync api.proto from aioesphomeapi {{< pr number="9393" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix scheduler crash when cancelling items with NULL names {{< pr number="9444" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wizard] use lowercase to match {{< pr number="9448" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Optimize API flash usage by storing message size at compile time {{< pr number="9447" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize API proto size calculations by removing redundant force parameter {{< pr number="9449" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ld2410] Remove redundant `delay()` calls, minor optimizations {{< pr number="9453" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2420] Memory optimization, code clean-up {{< pr number="9426" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Reduce API flash usage by eliminating unnecessary template instantiations {{< pr number="9452" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Conditionally compile API user services to save 4.3KB flash (follow-up to #9262) {{< pr number="9451" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [packet_transport] Don't run update if ping_pong not enabled. {{< pr number="9434" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [sx127x, sx126x] Fix preamble_size default and validation {{< pr number="9454" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Apply existing protobuf buffer optimization to nested message encoding (~2.3x speed up) {{< pr number="9458" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Only generate protobuf encode/decode methods for the message direction they're used {{< pr number="9461" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [usb_uart] Be flexible about descriptor layout for CDC-ACM devices {{< pr number="9425" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [libretiny] Set lib_compat_mode to soft for libretiny {{< pr number="9439" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- (Maybe?) fix I2S speaker internal DAC mode {{< pr number="9435" repo="esphome" >}} by {{< ghuser name="pzich" >}} -- [lvgl] Post-process size arguments in meter config {{< pr number="9466" repo="esphome" >}} by {{< ghuser name="pzich" >}} -- Automatically disable interrupts for ESP8266 GPIO16 binary sensors {{< pr number="9467" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [substitutions] Fix #7189 {{< pr number="9469" repo="esphome" >}} by {{< ghuser name="jpeletier" >}} -- Fix pre-commit CI failures by skipping local hooks that require virtual environment {{< pr number="9476" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp_ldo] Component schema; default priority {{< pr number="9479" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Follow logging best practices by removing redundant component prefix {{< pr number="9481" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix dormant bug in RAMAllocator::reallocate() manual_size calculation {{< pr number="9482" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Suppress spurious volatile and Python syntax warnings during builds {{< pr number="9488" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [online_image] Support `byte_order` {{< pr number="9502" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [json] Bump ArduinoJson library to 7.4.2 {{< pr number="8857" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} (breaking-change) -- [fan] Do not save state for fan if configured as NO_RESTORE {{< pr number="9472" repo="esphome" >}} by {{< ghuser name="skyegecko" >}} -- Fix LibreTiny compilation error by updating ESPAsyncWebServer and dependencies {{< pr number="9492" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [captive_portal] Add test case for libretiny {{< pr number="9457" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [opentherm.output] Fix `lerp` {{< pr number="9506" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [servo] Fix `lerp` {{< pr number="9507" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add missing clang-tidy NOLINT comments for ArduinoJson v7 in IDF webserver {{< pr number="9508" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Don't issue -Wno-volatile for host platform {{< pr number="9511" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [component] Fix `is_ready` flag when loop disabled {{< pr number="9501" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ms8607] Fix humidity calc {{< pr number="9499" repo="esphome" >}} by {{< ghuser name="LorbusChris" >}} -- Fix timing overflow when components disable themselves during loop {{< pr number="9529" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [as3935_spi] remove unnecessary includes {{< pr number="9528" repo="esphome" >}} by {{< ghuser name="ssieb" >}} - -{{< /collapse >}} - -### Dependency Changes - -{{< collapse >}} - -- Bump pytest-cov from 6.1.1 to 6.2.1 {{< pr number="9063" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.26.0 to 1.0.0 {{< pr number="9067" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-buildx-action from 3.10.0 to 3.11.0 in the docker-actions group {{< pr number="9105" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.11.13 to 0.12.0 {{< pr number="9120" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/setup-buildx-action from 3.11.0 to 3.11.1 in the docker-actions group {{< pr number="9133" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 32.2.3 to 32.2.4 {{< pr number="9132" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 8.4.0 to 8.4.1 {{< pr number="9131" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esptool from 4.8.1 to 4.9.0 {{< pr number="9158" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 32.2.4 to 33.1.0 {{< pr number="9173" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump flake8 from 7.2.0 to 7.3.0 {{< pr number="9172" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 33.1.0 to 33.1.1 {{< pr number="9187" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.12.0 to 0.12.1 {{< pr number="9241" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 33.1.1 to 34.0.0 {{< pr number="9265" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 34.0.0 to 34.1.0 {{< pr number="9301" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.12.1 to 0.12.2 {{< pr number="9311" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump puremagic from 1.29 to 1.30 {{< pr number="9320" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 34.1.0 to 34.2.0 {{< pr number="9391" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 34.2.0 to 34.2.1 {{< pr number="9460" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - -{{< /collapse >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/2025.8.0.md b/content/changelog/2025.8.0.md deleted file mode 100644 index 8112578bb6..0000000000 --- a/content/changelog/2025.8.0.md +++ /dev/null @@ -1,702 +0,0 @@ ---- -description: "Changelog for ESPHome 2025.8.0." -title: "ESPHome 2025.8.0 - 20th August 2025" -params: - seo: - description: Changelog for ESPHome 2025.8.0. - image: /_static/changelog-2025.8.0.png ---- - -{{< imgtable >}} -"NRF52","components/nrf52","nrf52.svg","" -"ESP-NOW","components/espnow","esp-now.svg","" -"MIPI DSI Displays","components/display/mipi_dsi","tab5.jpg","" -"LD2412","components/sensor/ld2412","ld2412.jpg","" -"Runtime Stats","components/runtime_stats","pulse.svg","dark-invert" -{{< /imgtable >}} - -## Release Overview - -ESPHome 2025.8.0 expands platform support with the introduction of Nordic nRF52 devices, -adds mesh communication capabilities, and delivers significant performance improvements. This release -focuses on architectural innovation and memory optimization while introducing new hardware possibilities. - -**Key Highlights:** - -- **New nRF52 platform** based on Zephyr RTOS opens Nordic semiconductor ecosystem -- **ESP-NOW mesh communication** enables direct device-to-device connectivity -- **High-performance MIPI DSI displays** for ESP32-P4 professional applications -- **Extensive memory optimizations** with up to 10x performance improvements in key areas -- **Python 3.11+ requirement** (breaking change - Python 3.10 support dropped) - -## NRF52 Platform Support - -ESPHome 2025.8.0 introduces basic support for Nordic nRF52 series microcontrollers through the new -{{< docref "/components/nrf52" >}} platform. This implementation is built on the Zephyr RTOS, providing a robust -foundation for Nordic semiconductor devices. - -**Key Features:** - -- **Complete platform integration** with ESPHome's component ecosystem -- **ADC support** for analog sensor reading with configurable resolution -- **GPIO functionality** with interrupt support and pin configuration -- **Zephyr debug component** for advanced debugging and development - -The nRF52 platform opens up new possibilities for low-power, Bluetooth-enabled devices while maintaining -the familiar ESPHome configuration syntax and component compatibility. - -## ESP-NOW Communication - -The new {{< docref "/components/espnow" >}} component brings device-to-device communication to ESP32 platforms without -requiring WiFi infrastructure. ESP-NOW enables direct communication between ESP32 devices using the 2.4GHz -band with minimal power consumption. - -**Applications:** - -- **Mesh sensor networks** - Sensors can communicate directly without WiFi routers -- **Remote control systems** - Direct device control with low latency -- **Backup communication** - Fallback when WiFi is unavailable -- **Battery-powered devices** - Efficient communication for power-constrained applications - -This protocol is particularly valuable for distributed sensor networks and scenarios where traditional -WiFi infrastructure is impractical or unavailable. - -## MIPI DSI Display Support - -ESPHome now supports high-performance MIPI DSI displays through the new {{< docref "/components/display/mipi_dsi" >}} -component, specifically designed for ESP32-P4 processors with DSI interfaces. - -**Benefits:** - -- **High-resolution displays** with excellent performance -- **Hardware acceleration** through dedicated DSI controllers -- **Reduced CPU overhead** compared to traditional SPI displays -- **Professional display quality** for advanced applications - -This addition significantly expands ESPHome's display capabilities, enabling professional-grade user interfaces -and high-resolution graphics applications. - -## Memory & Performance Optimizations - -ESPHome 2025.8.0 includes extensive optimizations focused on reducing memory usage and improving performance: - -**Flash Memory Savings:** - -- Conditional compilation removes unused API features (thousands of bytes saved) -- Optimized protobuf implementations with zero-copy techniques -- Reduced code duplication across components -- Streamlined error handling and logging systems - -**Runtime Performance:** - -- 10x faster string encoding with optimized memcpy operations -- Enhanced scheduler with reduced millis() calls -- Improved BLE scanning with batched processing -- Zero-copy protobuf fields for reduced memory allocations - -## Python 3.11+ Requirement - -Starting with ESPHome 2025.8.0, **Python 3.11 or higher is required** to run ESPHome. This change enables us to: - -- Utilize modern Python features and improvements -- Remove legacy compatibility code that was needed for older Python versions -- Maintain a more secure and efficient codebase - -### Why This Change? - -Python 3.10 reaches its [end of life in October 2026](https://devguide.python.org/versions/). This -upgrade is necessary for the project to move forward with modern development practices and maintain -long-term security and maintainability. - -### What You Need to Do - -| Installation Method | Action Required | -| ------------------------- | --------------------------------------------------- | -| Home Assistant Add-on | **No action needed** - Already uses Python 3.12 | -| Container Images (Docker) | **No action needed** - Already uses Python 3.12 | -| Direct Installation (pip) | **Upgrade Python to 3.11+** before updating ESPHome | - -> [!warning] -> If you're running ESPHome directly on your machine with Python 3.10 or older, running `pip install -U esphome` -> will not upgrade beyond version 2025.7.x. You must upgrade your Python installation first. - -## Breaking Changes - -ESPHome 2025.8.0 includes several breaking changes that may require action on your part: - -### Bluetooth and BLE Changes - -- Bluetooth Proxy: Parsed advertisement support and V1 connection support removed to save memory -- BLE: Conditional compilation for advertising and service classes may reduce available features if not - explicitly enabled - -- May affect older components using deprecated Bluetooth features - -### API Optimizations - -- Deprecated protobuf fields removed (reduces flash usage) -- Conditional compilation for Home Assistant state/service subscriptions -- May affect custom API clients using deprecated fields - -### Component Filter Changes - -- {{< docref "/components/sensor/ld2410" "LD2410" >}} and {{< docref "/components/sensor/ld2450" "LD2450" >}} - components now use native filters instead of `throttle` - -- See the component documentation for updated filter configuration - -### ESP32 Touch Sensor - -- Workaround implemented for ESP-IDF v5.4 regression -- May affect touch sensor behavior on newer ESP-IDF versions - -Most of these changes are automatic optimizations that shouldn't affect typical usage, but custom components -or advanced configurations may need updates. - - - -## Release 2025.8.1 - August 25 - -
- - -- [api] Add zero-copy StringRef methods for compilation_time and effect_name [esphome#10257](https://github.com/esphome/esphome/pull/10257) by [@bdraco](https://github.com/bdraco) -- [esp32_ble_client] Add log helper functions to reduce flash usage by 120 bytes [esphome#10243](https://github.com/esphome/esphome/pull/10243) by [@bdraco](https://github.com/bdraco) -- [api] Add `USE_API_HOMEASSISTANT_SERVICES` if using `tag_scanned` action [esphome#10316](https://github.com/esphome/esphome/pull/10316) by [@jesserockz](https://github.com/jesserockz) -- [http_request] Fix for host after ArduinoJson library bump [esphome#10348](https://github.com/esphome/esphome/pull/10348) by [@clydebarrow](https://github.com/clydebarrow) -- [core] Improve error reporting for entity name conflicts with non-ASCII characters [esphome#10329](https://github.com/esphome/esphome/pull/10329) by [@bdraco](https://github.com/bdraco) -- [pvvx_mithermometer] Fix race condition with BLE authentication [esphome#10327](https://github.com/esphome/esphome/pull/10327) by [@bdraco](https://github.com/bdraco) -- [esp32_ble_client] Optimize BLE connection parameters for different connection types [esphome#10356](https://github.com/esphome/esphome/pull/10356) by [@bdraco](https://github.com/bdraco) -- [esp32_ble] Increase GATT connection retry count to use full timeout window [esphome#10376](https://github.com/esphome/esphome/pull/10376) by [@bdraco](https://github.com/bdraco) -- [script] Fix parallel mode scripts with delays cancelling each other [esphome#10324](https://github.com/esphome/esphome/pull/10324) by [@bdraco](https://github.com/bdraco) -- [deep_sleep] Fix ESP32-C6 compilation error with gpio_deep_sleep_hold_en() [esphome#10345](https://github.com/esphome/esphome/pull/10345) by [@bdraco](https://github.com/bdraco) -- [esp32_ble_client] Reduce log level for harmless BLE timeout race conditions [esphome#10339](https://github.com/esphome/esphome/pull/10339) by [@bdraco](https://github.com/bdraco) -- [lvgl] Fix meter rotation [esphome#10342](https://github.com/esphome/esphome/pull/10342) by [@clydebarrow](https://github.com/clydebarrow) -- [esp32_ble_tracker] Fix on_scan_end trigger compilation without USE_ESP32_BLE_DEVICE [esphome#10399](https://github.com/esphome/esphome/pull/10399) by [@bdraco](https://github.com/bdraco) -- [test] Add integration test for light effect memory corruption fix [esphome#10417](https://github.com/esphome/esphome/pull/10417) by [@bdraco](https://github.com/bdraco) -- [web_server] Use oi.esphome.io for css and js assets [esphome#10296](https://github.com/esphome/esphome/pull/10296) by [@clydebarrow](https://github.com/clydebarrow) - -
- -## Release 2025.8.2 - August 29 - -
- - -- [wifi] Fix reconnection failures after adapter restart by not clearing netif pointers [esphome#10458](https://github.com/esphome/esphome/pull/10458) by [@bdraco](https://github.com/bdraco) -- [mipi_spi] Fix dimensions [esphome#10443](https://github.com/esphome/esphome/pull/10443) by [@clydebarrow](https://github.com/clydebarrow) -- [i2c] Perform register reads as single transactions [esphome#10389](https://github.com/esphome/esphome/pull/10389) by [@clydebarrow](https://github.com/clydebarrow) -- [wifi] Fix retry with hidden networks. [esphome#10445](https://github.com/esphome/esphome/pull/10445) by [@clydebarrow](https://github.com/clydebarrow) -- Fix AttributeError when uploading OTA to offline OpenThread devices [esphome#10459](https://github.com/esphome/esphome/pull/10459) by [@bdraco](https://github.com/bdraco) -- [rtttl] Fix RTTTL for speakers [esphome#10381](https://github.com/esphome/esphome/pull/10381) by [@fortuna](https://github.com/fortuna) -- [esphome] Fix OTA watchdog resets by validating all magic bytes before blocking [esphome#10401](https://github.com/esphome/esphome/pull/10401) by [@bdraco](https://github.com/bdraco) - -
- -## Release 2025.8.3 - September 4 - -
- - -- [mcp4461] Fix reading level [esphome#10479](https://github.com/esphome/esphome/pull/10479) by [@p1ngb4ck](https://github.com/p1ngb4ck) -- Fix incorrect entity count due to undefined execution order with globals [esphome#10497](https://github.com/esphome/esphome/pull/10497) by [@bdraco](https://github.com/bdraco) -- [mipi_dsi] Fix config for Guition screen [esphome#10464](https://github.com/esphome/esphome/pull/10464) by [@clydebarrow](https://github.com/clydebarrow) -- [mcp4461] Fix read transaction [esphome#10465](https://github.com/esphome/esphome/pull/10465) by [@clydebarrow](https://github.com/clydebarrow) -- [esp32] Rebuild when idf_component.yml changes [esphome#10540](https://github.com/esphome/esphome/pull/10540) by [@swoboda1337](https://github.com/swoboda1337) -- [i2c] Fix bug in write_register16 [esphome#10547](https://github.com/esphome/esphome/pull/10547) by [@latonita](https://github.com/latonita) -- [esp32] Clear IDF environment variables [esphome#10527](https://github.com/esphome/esphome/pull/10527) by [@swoboda1337](https://github.com/swoboda1337) -- [api] Fix VERY_VERBOSE logging compilation error with bool arrays [esphome#10539](https://github.com/esphome/esphome/pull/10539) by [@bdraco](https://github.com/bdraco) - -
- -## Release 2025.8.4 - September 10 - -
- - -- [sen5x] Fix initialization [esphome#10603](https://github.com/esphome/esphome/pull/10603) by [@kbx81](https://github.com/kbx81) -- [kmeteriso] Fix i2c call [esphome#10618](https://github.com/esphome/esphome/pull/10618) by [@clydebarrow](https://github.com/clydebarrow) -- [light] add missing header [esphome#10590](https://github.com/esphome/esphome/pull/10590) by [@tomaszduda23](https://github.com/tomaszduda23) - -
- -## Full list of changes - -### New Features - -- [output] Add `set_min_power` & `set_max_power` actions for `FloatOutput` {{< pr number="8934" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} (new-feature) -- [nrf52] add adc {{< pr number="9321" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} (new-feature) -- [espnow] Basic communication between ESP32 devices {{< pr number="9582" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-component) (new-feature) -- [esp32] Add config option to execute from PSRAM {{< pr number="9907" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-feature) -- [color][lvgl] Allow Color to be used for lv_color_t {{< pr number="10016" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-feature) -- [esp32] Add framework migration warning for upcoming ESP-IDF default change {{< pr number="10030" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-feature) -- Add CO5300 display support {{< pr number="9739" repo="esphome" >}} by {{< ghuser name="mschnaubelt" >}} (new-feature) -- [remote_transmitter] Add digital_write automation {{< pr number="10069" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-feature) -- Support multiple --device arguments for address fallback {{< pr number="10003" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-feature) -- Add device class absolute_humidity to the absolute humidity component {{< pr number="10100" repo="esphome" >}} by {{< ghuser name="mbo18" >}} (new-feature) -- [switch] Add `switch.control` automation action {{< pr number="10105" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (new-feature) -- [switch] Add `control()` method to API {{< pr number="10118" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (new-feature) -- [switch] Add trigger `on_state` {{< pr number="10108" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (new-feature) -- [nrf52, zephyr_debug] add zephyr debug component {{< pr number="8319" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} (new-feature) -- [sensor] Extend timeout filter with option to return last value received {{< pr number="10115" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-feature) -- [substitutions] Add some safe built-in functions to jinja parsing {{< pr number="10178" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- [ld2412] New component {{< pr number="9075" repo="esphome" >}} by {{< ghuser name="Rihan9" >}} (new-component) (new-feature) (new-platform) -- [entity] Allow `device_id` to be blank on entities {{< pr number="10217" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -### New Components - -- [nrf52, core] nrf52 core based on zephyr {{< pr number="7049" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} (new-component) -- Add runtime_stats component for performance debugging and analysis {{< pr number="9386" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-component) -- [mipi] Refactor constants and functions {{< pr number="9853" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-component) -- [mipi_dsi] New display driver for P4 DSI {{< pr number="9403" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-component) (new-platform) -- [espnow] Basic communication between ESP32 devices {{< pr number="9582" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-component) (new-feature) -- [ld2412] New component {{< pr number="9075" repo="esphome" >}} by {{< ghuser name="Rihan9" >}} (new-component) (new-feature) (new-platform) - -### New Platforms - -- [mipi_dsi] New display driver for P4 DSI {{< pr number="9403" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-component) (new-platform) -- [ld2412] New component {{< pr number="9075" repo="esphome" >}} by {{< ghuser name="Rihan9" >}} (new-component) (new-feature) (new-platform) - -### Breaking Changes - -- Remove parsed advertisement support from bluetooth_proxy to save memory {{< pr number="9489" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Drop Python 3.10 support, require Python 3.11+ {{< pr number="9522" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Remove legacy unique_id field from entities {{< pr number="9022" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [api] Remove deprecated protobuf fields to reduce flash usage {{< pr number="9679" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [api] Add conditional compilation for Home Assistant state subscriptions {{< pr number="9898" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [api] Add conditional compilation for Home Assistant service subscriptions {{< pr number="9900" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [esp32_touch] Work around ESP-IDF v5.4 regression in `touch_pad_read_filtered` {{< pr number="9957" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [ld2410] Replace `throttle` with native filters {{< pr number="10019" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- [esp32_ble] Conditionally compile BLE advertising to reduce flash usage {{< pr number="10099" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [esp32_ble_client] Conditionally compile BLE service classes to reduce flash usage {{< pr number="10114" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [bluetooth_proxy] Remove V1 connection support {{< pr number="10107" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [esp32] Add IDF log_level option {{< pr number="10134" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [ld2450] Replace `throttle` with native filters {{< pr number="10196" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) - -### All changes - -
- - -- [web_server] fix `Arudino` typo {{< pr number="9404" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Speed up clang-tidy CI by 80%+ with incremental checking {{< pr number="9396" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix PlatformIO cache in CI by adding platformio.ini hash to cache key {{< pr number="9411" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix clang-tidy triggering full scan on Python-only core file changes {{< pr number="9412" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Implement shared PlatformIO cache for integration tests {{< pr number="9413" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix Python cache for all pytest CI jobs {{< pr number="9415" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix Python cache key mismatch for all pytest jobs {{< pr number="9417" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Adding support for Airthings Wave Gen2 {{< pr number="8460" repo="esphome" >}} by {{< ghuser name="precurse" >}} -- Fix Windows virtual environment activation in CI workflows {{< pr number="9420" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix clang-tidy not finding changed files on squash-merge commits {{< pr number="9421" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [config] Add bitrate validator {{< pr number="9423" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32] remove debug log {{< pr number="9424" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- CI: Centralize test determination logic to reduce unnecessary job runners {{< pr number="9432" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Disable WiFi when using Ethernet to save memory {{< pr number="9456" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix pre-commit CI failures by skipping local hooks that require virtual environment {{< pr number="9476" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix clang-tidy skipping when Python linters are skipped {{< pr number="9463" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor format_hex_pretty functions to eliminate code duplication {{< pr number="9480" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix pre-commit CI issues by switching to lite mode {{< pr number="9484" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Refactor WebServer request handling for improved maintainability {{< pr number="9470" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix WebServer routes constant naming convention {{< pr number="9497" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove redundant pyupgrade CI job (follow-up to #9484) {{< pr number="9493" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add pre-commit hooks to fix common formatting issues causing CI failures {{< pr number="9494" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove yamllint job from CI since its now handled by pre-commit job {{< pr number="9500" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix blocked CI cancellation caused by always() in clang-tidy workflow {{< pr number="9503" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Include entire platformio.ini in clang-tidy hash calculation {{< pr number="9509" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Enable issue tracking {{< pr number="9515" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [repo] Fix issue template config.yml {{< pr number="9516" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ms8607] Fix humidity calc {{< pr number="9499" repo="esphome" >}} by {{< ghuser name="LorbusChris" >}} -- [nrf52, core] nrf52 core based on zephyr {{< pr number="7049" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} (new-component) -- remove duplication from component_iterator {{< pr number="7210" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [adc] Use new library with ESP-IDF v5 {{< pr number="9021" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- [mipi_spi] Template code, partial buffer support {{< pr number="9314" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Remove dead code: 64-bit protobuf types never used in 7 years {{< pr number="9471" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add runtime_stats component for performance debugging and analysis {{< pr number="9386" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-component) -- Make API ConnectRequest optional for passwordless connections {{< pr number="9445" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Improve API protobuf decode method readability and reduce code size {{< pr number="9455" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce API component flash usage by consolidating error logging {{< pr number="9468" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove parsed advertisement support from bluetooth_proxy to save memory {{< pr number="9489" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Drop Python 3.10 support, require Python 3.11+ {{< pr number="9522" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Optimize MedianFilter memory allocation by adding vector reserve {{< pr number="9531" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [i2c] Use new driver with IDF 5.4.2+ {{< pr number="8483" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Optimize scheduler timing by reducing millis() calls {{< pr number="9524" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize API component LOGCONFIG usage for flash memory savings {{< pr number="9526" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Skip API log message calls for unsubscribed log levels {{< pr number="9514" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize API connection batch priority message handling to reduce flash usage {{< pr number="9510" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce flash usage by replacing ProtoSize template with specialized methods {{< pr number="9487" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ssd1306_base] fix typo `brighrness` {{< pr number="9491" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- Fix CI failures from merge collisions {{< pr number="9535" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Remove legacy unique_id field from entities {{< pr number="9022" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- Reduce binary size with field-level conditional compilation for protobuf messages {{< pr number="9473" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [adc] Test platforms on IDF {{< pr number="9536" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Refactor API connection entity encoding to reduce code duplication {{< pr number="9505" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Reduce API proto vtable overhead by splitting decode functionality {{< pr number="9541" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add ability to have same entity names on different sub devices {{< pr number="9355" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Synchronise Device Classes from Home Assistant {{< pr number="9513" repo="esphome" >}} by {{< ghuser name="esphomebot" >}} -- Update script/helpers.py to use ESPHome YAML parser for integration fixtures {{< pr number="9544" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [adc] Add ESP32-C5 support {{< pr number="9486" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} -- Move CONF_ALTITUDE_COMPENSATION to const.py {{< pr number="9563" repo="esphome" >}} by {{< ghuser name="mikelawrence" >}} -- Revert "Bump ESP32 IDF version to 5.4.2 and Arduino version to 3.2.1" {{< pr number="9574" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Workflow to auto label PRs based on changes {{< pr number="9585" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [dependabot] Use specific labels for github-actions updates {{< pr number="9586" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Add `by-code-owner` labelling {{< pr number="9589" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Add `needs-docs` labelling {{< pr number="9591" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Skip compilation of web_server_v1.cpp when not using version 1 {{< pr number="9590" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Update Issues / Feature Requests links in Readme {{< pr number="9600" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- Add some AI instructions {{< pr number="9606" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update Issues / Feature Requests links {{< pr number="9607" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [ci] Implement external component PR workflow {{< pr number="9595" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ci] attempt to fix permission for workflow {{< pr number="9610" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Refactor API send_message from template to non-template implementation {{< pr number="9561" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix scheduler rollover detection with concurrent task calls {{< pr number="9624" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- adds nRF52840 to PR templates {{< pr number="9631" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [code quality] move const to esphome/const.py {{< pr number="9632" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [esp32] Allow variant in place of board {{< pr number="9427" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [scheduler] Fix LibreTiny compilation error due to missing atomic operations {{< pr number="9643" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Fix bluetooth_proxy heap allocations during BLE scanning {{< pr number="9633" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- core/schedule: fixup out of sync code comment {{< pr number="9649" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [CI] New workflow to mention codeowners on issues {{< pr number="9658" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Add codeowners mention workflow {{< pr number="9651" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Fix by-code-owner labelling {{< pr number="9661" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [scheduler] Add integration tests for set_retry functionality {{< pr number="9644" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Use message_source_map consistently in proto generation {{< pr number="9542" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- esp32cam: add fb location config option {{< pr number="9630" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [i2s_audio] Bugfix: cast adc_channel_t to adc1_channel_t {{< pr number="9688" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- Add core team as codeowner of .github folder {{< pr number="9663" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Fix clang-tidy not running when platformio.ini changes {{< pr number="9678" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Fix missing ifdef guards for field_ifdef fields in protobuf base classes {{< pr number="9693" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [const] Move CONF_FLIP_X and CONF_FLIP_Y to `const.py` {{< pr number="9741" repo="esphome" >}} by {{< ghuser name="DT-art1" >}} -- core/scheduler: Make `millis_64_` rollover monotonic on SMP {{< pr number="9716" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [bluetooth_proxy] Fix service discovery on disconnect and refactor connection handling {{< pr number="9697" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Batch BLE advertisement processing to reduce overhead {{< pr number="9699" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Memory optimizations for API frame helper buffering {{< pr number="9724" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Eliminate heap allocation in `process_batch_` using stack-allocated PacketInfo array {{< pr number="9703" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Remove deprecated protobuf fields to reduce flash usage {{< pr number="9679" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [CI] Only mention codeowners once {{< pr number="9727" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api] Consolidate error handling and remove unused code {{< pr number="9726" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Fix missing ifdef guards for AreaInfo and DeviceInfo messages {{< pr number="9730" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Refactor scheduler to eliminate hidden side effects in `empty_` {{< pr number="9743" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Reduce memory usage by eliminating duplicate client info strings {{< pr number="9740" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [CI] Label PR too-big if it has more than 1000 lines changed {{< pr number="9744" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Keep original labels when PR has too many lines {{< pr number="9745" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Fetch platform components and target platforms from hosted json file {{< pr number="9747" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Add url and dismiss reviews once conditions are met {{< pr number="9748" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api] Split frame helper implementation into protocol-specific files {{< pr number="9746" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [CI] Fix codeowner workflow requesting the same multiple times {{< pr number="9750" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Use comment marker in too-big reviews {{< pr number="9751" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Dont create new review if existing and dont count tests {{< pr number="9753" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api] Sync uses_password field_ifdef optimization from aioesphomeapi {{< pr number="9756" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [tests] Fix flaky scheduler retry test timing {{< pr number="9760" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Optimize service discovery with in-place construction {{< pr number="9765" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Factor PlatformIO buildgen out of writer.py {{< pr number="9378" repo="esphome" >}} by {{< ghuser name="stellar-aria" >}} -- [api] Implement zero-copy for all protobuf bytes fields {{< pr number="9761" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Optimize string encoding with memcpy for 10x performance improvement {{< pr number="9778" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Optimize noise handshake with memcpy for faster connection setup {{< pr number="9779" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [nrf52] Add missing CoreModel define for scheduler {{< pr number="9777" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Write require feature defines after all clients are registered {{< pr number="9780" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api] Optimize protobuf memory usage with fixed-size arrays for Bluetooth UUIDs {{< pr number="9782" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Implement zero-copy string optimization for outgoing protobuf messages {{< pr number="9790" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [schema-gen] fix referenced schemas when schema in component platform {{< pr number="9755" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- [audio] fix typo `gneneral` and `divison` {{< pr number="9808" repo="esphome" >}} by {{< ghuser name="ximex" >}} -- [sgp4x] Fix build {{< pr number="9794" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [http_request] set correct duration_ms for failed requests {{< pr number="9789" repo="esphome" >}} by {{< ghuser name="stas-sl" >}} -- [udp] Move `on_receive` to const {{< pr number="9811" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump ESP32 IDF version to 5.4.2 and Arduino version to 3.2.1 {{< pr number="9770" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Workflow - check all comments to find previous bot comment {{< pr number="9815" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [core] Match LockFreeQueue initialization order {{< pr number="9813" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Paginate codeowner comments to make sure we find it {{< pr number="9817" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Paginate codeowner comments to make sure we find it {{< pr number="9818" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Initialize `looping_components_` before setup blocking phase {{< pr number="9820" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [i2c] Use `i2c_master_probe` to scan i2c bus {{< pr number="9831" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Restore COMPONENT_STATE_LOOP_DONE check in calculate_looping_components {{< pr number="9832" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ci] Support C++17 nested namespace syntax in linter {{< pr number="9826" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [modem] network component change {{< pr number="9801" repo="esphome" >}} by {{< ghuser name="oarcher" >}} -- [interval] Fix startup behaviour {{< pr number="9793" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [mipi] Refactor constants and functions {{< pr number="9853" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-component) -- Update post_build.py.script to Fix #7137 {{< pr number="9578" repo="esphome" >}} by {{< ghuser name="Maeur1" >}} -- [helpers] Add "unknown" value handling to `Deduplicator` {{< pr number="9855" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ld2450] Set `accuracy_decimals=0` as default for "target" entities {{< pr number="9842" repo="esphome" >}} by {{< ghuser name="bharvey88" >}} -- [logger] remove unnecessary call to setTxTimeoutMs {{< pr number="9854" repo="esphome" >}} by {{< ghuser name="tjhorner" >}} -- [i2s_audio] Speaker improvements: CPU core agnostic and more accurate timestamps {{< pr number="9800" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [esp32] Fix threading model for single-core variants (S2, C3, C6, H2) {{< pr number="9851" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Replace magic numbers with MESSAGE_TYPE constants in protobuf switch cases {{< pr number="9776" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Simplify generated authentication check code {{< pr number="9806" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Reduce code duplication in protobuf dump methods with helper functions {{< pr number="9809" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Use emplace_back for TemplatableKeyValuePair construction in HomeAssistant services {{< pr number="9804" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Fix component state documentation and add state helper method {{< pr number="9824" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] [esp32_ble_tracker] [esp32_ble] Use C++17 nested namespace syntax {{< pr number="9825" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ld2410] Use `Deduplicator` for sensors {{< pr number="9584" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [api] Use C++17 nested namespace syntax {{< pr number="9856" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [mipi] Keep models from different drivers separate {{< pr number="9865" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ld2450] Use `Deduplicator` for sensors {{< pr number="9863" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [core] Revert #9851 and rename ESPHOME_CORES to ESPHOME_THREAD {{< pr number="9862" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [CI] Refactor auto-label workflow: modular architecture, CODEOWNERS automation, and performance improvements {{< pr number="9860" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [factory_reset] Allow factory reset by rapid power cycle {{< pr number="9749" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [gps] Patches to build on IDF, other optimizations {{< pr number="9728" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [sound_level] fix spelling mistake {{< pr number="9843" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- rc522: fix buffer overflow in UID/buffer formatting helpers {{< pr number="9375" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [platformio.ini] Move GPS to common lib_deps {{< pr number="9883" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [ruff] Enable SIM rules and fix code simplification violations {{< pr number="9872" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [platformio.ini] Add GPS to nrf52-zephyr lib_deps {{< pr number="9884" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Remove redundant platformio environments {{< pr number="9886" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Better mega-pr label handling {{< pr number="9888" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [CI] Fix auto-label workflow - codeowners & listFiles {{< pr number="9890" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [mqtt] Don’t log state topic subscription for buttons {{< pr number="9887" repo="esphome" >}} by {{< ghuser name="GilDev" >}} -- [scheduler] Fix retry race condition on cancellation {{< pr number="9788" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ruff] Enable PERF rules and fix all violations {{< pr number="9874" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [scheduler] Fix null pointer crash {{< pr number="9893" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [core] Centralize component setup logging to reduce flash usage {{< pr number="9885" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [mipi_dsi] New display driver for P4 DSI {{< pr number="9403" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-component) (new-platform) -- [api] Add missing USE_API_PASSWORD guards to reduce flash usage {{< pr number="9899" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Add conditional compilation for Home Assistant state subscriptions {{< pr number="9898" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [i2c] Fix logging level for bus scan results in dump_config {{< pr number="9904" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ruff] Enable FURB rules for code modernization {{< pr number="9896" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Fix format error in log printf {{< pr number="9911" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [logger] Use C++17 nested namespace syntax {{< pr number="9916" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wifi] Allow config to use PSRAM {{< pr number="9866" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [ci-custom] Report actual changes needed for absolute import {{< pr number="9919" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [light] Reduce flash memory usage by optimizing validation and color mode logic {{< pr number="9921" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [power_supply] Optimize logging, reduce flash footprint {{< pr number="9923" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [wifi] Disallow psram config with arduino {{< pr number="9922" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [core] Use nullptr defaults in status_set_error/warning to reduce flash usage {{< pr number="9931" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [light] Reduce flash usage by 832 bytes through code optimization {{< pr number="9924" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Reduce code duplication in send_noise_encryption_set_key_response {{< pr number="9918" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- replace os.getlogin() with getpass.getuser() {{< pr number="9928" repo="esphome" >}} by {{< ghuser name="cmaxl" >}} -- [packages] add example from documentation to component tests {{< pr number="9891" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [api] Add conditional compilation for Home Assistant service subscriptions {{< pr number="9900" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [api] Fix string lifetime issue in Home Assistant service calls with templated values {{< pr number="9909" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Fix service discovery cache pollution and descriptor count parameter bug {{< pr number="9902" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [config_validation] extend should combine extra validations {{< pr number="9939" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [scheduler] Eliminate more runtime string allocations from retry {{< pr number="9930" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Remove unnecessary string copies from optional access {{< pr number="9897" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [heatpumpir] Bump library to 1.0.37 {{< pr number="9944" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api] Optimize protobuf empty message handling to reduce flash and runtime overhead {{< pr number="9908" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Align ProtoSize API design with ProtoWriteBuffer pattern {{< pr number="9920" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Enable LWIP core locking on ESP-IDF to reduce socket operation overhead {{< pr number="9857" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [sensor] Add support for default filters {{< pr number="9934" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [binary_sensor] Add support for default filters {{< pr number="9935" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [text_sensor] Add support for default filters {{< pr number="9936" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [heatpumpir] Fix issue with IRremoteESP8266 being included on ESP32 {{< pr number="9950" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Openthread add Teardown {{< pr number="9275" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- [gps] Fix slow parsing {{< pr number="9953" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [output] Add `set_min_power` & `set_max_power` actions for `FloatOutput` {{< pr number="8934" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} (new-feature) -- [esp32] Bump platform to 54.03.21-1 and add support for tagged releases {{< pr number="9926" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [adc] Enable ADC on ESP32-P4 {{< pr number="9954" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [esp32] Fix post build {{< pr number="9951" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [component] Revert setup messages to LOG_CONFIG level {{< pr number="9956" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Media player API enumeration alignment and feature flags {{< pr number="9949" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- [mipi_dsi] Add dependencies {{< pr number="9952" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- Fix WiFi to prefer strongest AP when multiple APs have same SSID {{< pr number="9963" repo="esphome" >}} by {{< ghuser name="dayowe" >}} -- [api] Eliminate heap allocations when populating repeated fields from containers {{< pr number="9948" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wifi] add more disconnect reason descriptions {{< pr number="9955" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [sensor] Add new filter: `throttle_with_priority` {{< pr number="9937" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [template] Add tests for more sensor filters {{< pr number="9973" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [esp32_ble_client] Fix connection failures with short discovery timeout devices and speed up BLE connections {{< pr number="9971" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- media_player add off on capability {{< pr number="9294" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- [core] Fix regex for lambda id() replacement {{< pr number="9975" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [CI] Add labels for checkboxes {{< pr number="9991" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [api] Bump APIVersion to 1.11 {{< pr number="9990" repo="esphome" >}} by {{< ghuser name="rwrozelle" >}} -- [api] Reduce flash usage through targeted optimizations {{< pr number="9979" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_touch] Work around ESP-IDF v5.4 regression in `touch_pad_read_filtered` {{< pr number="9957" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [esp32_ble] Fix spurious BLE 5.0 event warnings on ESP32-S3 {{< pr number="9969" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [tm1651] Remove dependency on Arduino Library {{< pr number="9645" repo="esphome" >}} by {{< ghuser name="mrtoy-me" >}} -- [wifi] Allow fast_connect with multiple networks {{< pr number="9947" repo="esphome" >}} by {{< ghuser name="GilDev" >}} -- [esp32_ble_client] Fix BLE connection stability for WiFi-based proxies {{< pr number="9993" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Batch BLE service discovery messages for 67% reduction in API traffic {{< pr number="9992" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Optimize UUID transmission with efficient short_uuid field {{< pr number="9995" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Bump ESP32 platform to 54.03.21-2 {{< pr number="10000" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [esp32] Fix strapping pin validation for P4 and H2 {{< pr number="9980" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [bluetooth_proxy] Implement dynamic service batching based on MTU constraints {{< pr number="10001" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [midea] Use c++17 constexpr and inline static in IrFollowMeData {{< pr number="10002" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- [image] Improve schemas {{< pr number="9791" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [nrf52] add adc {{< pr number="9321" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} (new-feature) -- [ruff] Enable RET and fix all violations {{< pr number="9929" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [sensor] Fix bug in percentage based delta filter {{< pr number="8157" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [sensor] A little bit of filter clean-up {{< pr number="9986" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- [espnow] Basic communication between ESP32 devices {{< pr number="9582" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} (new-component) (new-feature) -- [nrf52, debug] debug component for nrf52 {{< pr number="8315" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [nrf52, gpio] check different port notation {{< pr number="9737" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} -- [esp32] Add config option to execute from PSRAM {{< pr number="9907" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-feature) -- [wifi] Fix crash during WiFi reconnection on ESP32 with poor signal quality {{< pr number="9989" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [CI] Allow multiple grep options for clang-tidy {{< pr number="10004" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [bluetooth_proxy] Eliminate heap allocations in connection state reporting {{< pr number="10010" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Convert entity vectors to static allocation for reduced memory usage {{< pr number="10018" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [syslog] Fix RFC3164 timestamp compliance for single-digit days {{< pr number="10034" repo="esphome" >}} by {{< ghuser name="Copilot" >}} -- [core] Fix compilation errors when platform sections have no entities {{< pr number="10023" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [config] Fix reversion of excessive yaml output after error {{< pr number="10043" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [color][lvgl] Allow Color to be used for lv_color_t {{< pr number="10016" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} (new-feature) -- Update esp32-camera library version to 2.1.0 {{< pr number="9527" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [core] Replace std::find and std::max_element with simple loops to reduce binary size {{< pr number="10044" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Convert components, devices, and areas vectors to static allocation {{< pr number="10020" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Replace std::stable_sort with insertion sort to save 3.5KB flash {{< pr number="10035" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [web_server_idf] Replace std::find_if with simple loop to reduce binary size {{< pr number="10042" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Optimize Application::pre_setup() to reduce duplicate MAC address operations {{< pr number="10039" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [web_server] Reduce binary size by using EntityBase and minimizing template instantiations {{< pr number="10033" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [web_server] Conditionally compile authentication code to save flash memory {{< pr number="10022" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Update to esptool 5.0+ command syntax {{< pr number="10011" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wifi] Replace std::stable_sort with insertion sort to save 2.4KB flash {{< pr number="10037" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Add framework migration warning for upcoming ESP-IDF default change {{< pr number="10030" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-feature) -- [api] Use static allocation for areas and devices in DeviceInfoResponse {{< pr number="10038" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [AI] Add note about the defines.h file needing to include all new defines added {{< pr number="10054" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nfc] Rename `binary_sensor` source files {{< pr number="10053" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Move docs url generator to helpers.py {{< pr number="10056" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [esp32_ble_tracker] Remove unnecessary STOPPED scanner state to reduce latency {{< pr number="10055" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Use FAST connection parameters for all v3 connections {{< pr number="10052" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Connect immediately on READY_TO_CONNECT to reduce latency {{< pr number="10051" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble] Fix BLE connection slot waste by aligning ESP-IDF timeout with client timeout {{< pr number="10013" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [gt911] Use timeout instead of delay, shortened log msg {{< pr number="10024" repo="esphome" >}} by {{< ghuser name="DjordjeMandic" >}} -- [espnow, web_server_idf] Fix IDF 5.5 compile issues {{< pr number="10068" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- Add CO5300 display support {{< pr number="9739" repo="esphome" >}} by {{< ghuser name="mschnaubelt" >}} (new-feature) -- [api] Add helpful compile-time errors for Custom API Device methods {{< pr number="10076" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Warn about BLE connection timeout mismatch on Arduino framework {{< pr number="10063" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Start MTU negotiation earlier following ESP-IDF examples {{< pr number="10062" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Optimize connection by promoting client immediately after scan stop trigger {{< pr number="10061" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Eliminate redundant ring buffer for lower latency {{< pr number="10057" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Fix connection parameter timing by setting preferences before connection {{< pr number="10059" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [tests] Add datetime entities to host_mode_many_entities integration test {{< pr number="10032" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Optimize memory usage with fixed-size array and const string references {{< pr number="10015" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_dac] Always use esp-idf APIs {{< pr number="9833" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [core] Allow extra args on cli and just ignore them {{< pr number="9814" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [gpio_expander] Fix bank caching {{< pr number="10077" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [remote_transmitter] Add digital_write automation {{< pr number="10069" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (new-feature) -- Support multiple --device arguments for address fallback {{< pr number="10003" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (new-feature) -- [core] Update core component codeowners to `@esphome/core` {{< pr number="10082" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add myself to multiple bluetooth codeowners {{< pr number="10083" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [speaker] Media player fixes for IDF5.4 {{< pr number="10088" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [espnow] Small changes and fixes {{< pr number="10014" repo="esphome" >}} by {{< ghuser name="nielsnl68" >}} -- [select] Fix new_select() not forwarding constructor args while preserving keyword-only options parameter {{< pr number="10036" repo="esphome" >}} by {{< ghuser name="Copilot" >}} -- [mcp23xxx] Use CachedGpioExpander {{< pr number="10078" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- update espressif's esp32-camera library to 2.1.1 {{< pr number="10090" repo="esphome" >}} by {{< ghuser name="RubenKelevra" >}} -- [esp32_ble_tracker] Add missing `USE_ESP32_BLE_DEVICE` guard for `already_discovered_` member {{< pr number="10085" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Refactor loop() method for improved readability and performance {{< pr number="10074" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_rmt_led_strip] Work around IDFGH-16195 {{< pr number="10093" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [bme680] Eliminate warnings due to unused functions {{< pr number="9735" repo="esphome" >}} by {{< ghuser name="pgolawsk" >}} -- [light] Allow light effect schema to be a schema object already {{< pr number="10091" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [bluetooth_proxy] Reduce flash usage by consolidating duplicate logging {{< pr number="10094" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Simplify state machine guards with helper functions {{< pr number="10092" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [deep_sleep] enable sleep pull up/down for wakeup pin {{< pr number="9395" repo="esphome" >}} by {{< ghuser name="candrews" >}} -- [esp32_ble] Make BLE notification limit configurable to fix ESP_GATT_NO_RESOURCES errors {{< pr number="10098" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Replace std::find with simple loop for small fixed array {{< pr number="10102" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ld2410] Replace `throttle` with native filters {{< pr number="10019" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- [esp32_ble_client] Convert to C++17 nested namespace syntax {{< pr number="10111" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble] Conditionally compile BLE advertising to reduce flash usage {{< pr number="10099" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [bluetooth_proxy] Consolidate dump_config() log calls {{< pr number="10103" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy][esp32_ble_tracker][esp32_ble_client] Consolidate duplicate logging code to reduce flash usage {{< pr number="10097" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Remove unnecessary heap allocation for response object {{< pr number="10104" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Add device class absolute_humidity to the absolute humidity component {{< pr number="10100" repo="esphome" >}} by {{< ghuser name="mbo18" >}} (new-feature) -- [esp32_touch] Restore get_value() for ESP32-S2/S3 variants {{< pr number="10112" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Avoid iterating empty services vector for bluetooth_proxy connections {{< pr number="10110" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_tracker] Optimize member variable ordering to reduce memory padding {{< pr number="10113" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Conditionally compile BLE service classes to reduce flash usage {{< pr number="10114" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [bluetooth_proxy] Remove V1 connection support {{< pr number="10107" repo="esphome" >}} by {{< ghuser name="bdraco" >}} (breaking-change) -- [switch] Add `switch.control` automation action {{< pr number="10105" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (new-feature) -- [mdns] Conditionally compile extra services to reduce flash usage {{< pr number="10129" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble_client] Reduce flash usage by optimizing logging strings {{< pr number="10119" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wifi] Reduce flash usage by optimizing logging {{< pr number="10127" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [cover] Reduce flash usage by optimizing validation messages {{< pr number="10130" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Optimize connection loop to reduce CPU usage {{< pr number="10133" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [switch] Add `control()` method to API {{< pr number="10118" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (new-feature) -- [switch] Add trigger `on_state` {{< pr number="10108" repo="esphome" >}} by {{< ghuser name="edwardtfn" >}} (new-feature) -- [esp32_ble_tracker] Fix false reboots when event loop is blocked {{< pr number="10144" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Add IDF log_level option {{< pr number="10134" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} (breaking-change) -- [dashboard] Fix port fallback regression when device is offline {{< pr number="10135" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [web_server] Reduce flash usage by consolidating parameter parsing {{< pr number="10154" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [ade7880] Fix duplicate sensor name validation error {{< pr number="10155" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- Optimize subprocess performance with close_fds=False {{< pr number="10145" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [CI] Print more info for when consts are duplicated {{< pr number="10166" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [neopixelbus] Fix neopixelbus on esp32 {{< pr number="10123" repo="esphome" >}} by {{< ghuser name="swoboda1337" >}} -- [lvgl] Various validation fixes {{< pr number="10141" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [lvgl] fix allocation of reduced size buffer with rotation {{< pr number="10147" repo="esphome" >}} by {{< ghuser name="clydebarrow" >}} -- [nrf52, zephyr_debug] add zephyr debug component {{< pr number="8319" repo="esphome" >}} by {{< ghuser name="tomaszduda23" >}} (new-feature) -- [display] Disallow `show_test_card: true` and `update_interval: never` {{< pr number="9927" repo="esphome" >}} by {{< ghuser name="ChadMatsalla" >}} -- [sensor] Extend timeout filter with option to return last value received {{< pr number="10115" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-feature) -- [esphome] Fix OTA watchdog resets during port scanning and network delays {{< pr number="10152" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Optimize single vector writes to use write() instead of writev() {{< pr number="10193" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Replace dynamic vector with fixed array for BLE advertisements {{< pr number="10174" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [substitutions] Add some safe built-in functions to jinja parsing {{< pr number="10178" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- [core] Improve entity duplicate validation error messages {{< pr number="10184" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [api] Add constexpr optimizations to protobuf encoding {{< pr number="10192" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [wifi] Remove restriction from using NONE power saving mode with BLE {{< pr number="10181" repo="esphome" >}} by {{< ghuser name="kahrendt" >}} -- [const] Add CONF_POWER_MODE {{< pr number="10173" repo="esphome" >}} by {{< ghuser name="joshuasing" >}} -- [core] Reset pin registry after target platform validations {{< pr number="10199" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [ld2412] New component {{< pr number="9075" repo="esphome" >}} by {{< ghuser name="Rihan9" >}} (new-component) (new-feature) (new-platform) -- [atm90e32] energy meter calibration log output enhancements & software SPI fix {{< pr number="10143" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} -- [ld2450] Replace `throttle` with native filters {{< pr number="10196" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (breaking-change) -- [bme280_base, bmp280_base] add reasons to the fails, clean up logging {{< pr number="10209" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [bluetooth_proxy] Remove ESPBTUUID dependency to save 296 bytes of flash {{< pr number="10213" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [CI] Fix CI job failures for PRs with >300 changed files {{< pr number="10215" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [entity] Allow `device_id` to be blank on entities {{< pr number="10217" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- [espnow] Set state to enabled before adding initial peers {{< pr number="10225" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [psram] allow disabling {{< pr number="10224" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- [esp32_ble] Add `USE_ESP32_BLE_UUID` when advertising is desired {{< pr number="10230" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Improve error reporting for add_library {{< pr number="10226" repo="esphome" >}} by {{< ghuser name="stellar-aria" >}} -- [wifi] Automatically disable Enterprise WiFi support when EAP is not configured {{< pr number="10242" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [core] Trigger clean build when components are removed from configuration {{< pr number="10235" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [bluetooth_proxy] Remove redundant connection type check after V1 removal {{< pr number="10208" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32_ble] Optimize BLE event memory usage by eliminating std::vector overhead {{< pr number="10247" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [web_server] fix cover_all_json_generator wrong detail {{< pr number="10252" repo="esphome" >}} by {{< ghuser name="RFDarter" >}} -- [esp32_ble] Store GATTC/GATTS param and small data inline to nearly eliminate heap allocations {{< pr number="10249" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [senseair] Discard 0 ppm readings with "Out Of Range" bit set. {{< pr number="10275" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- [core] Fix post-OTA logs display when using esphome run and MQTT {{< pr number="10274" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- [core] Fix scheduler race condition where cancelled items still execute {{< pr number="10268" repo="esphome" >}} by {{< ghuser name="bdraco" >}} -- [esp32] Write variant to sdkconfig file {{< pr number="10267" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- [nextion] Don't include terminating NUL in nextion text_sensor states {{< pr number="10273" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- [atm90e32] Only read 1 register per SPI transaction per datasheet. {{< pr number="10258" repo="esphome" >}} by {{< ghuser name="raineth" >}} -- [pipsolar] fix faults_present, fix update interval {{< pr number="10289" repo="esphome" >}} by {{< ghuser name="patagonaa" >}} -- [bluetooth_proxy] Fix connection slot race by deferring slot release until GATT close {{< pr number="10303" repo="esphome" >}} by {{< ghuser name="bdraco" >}} - -
- -### Dependency Changes - -
- - -- Bump ruff from 0.12.2 to 0.12.3 {{< pr number="9446" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 34.2.1 to 35.0.1 {{< pr number="9474" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 35.0.1 to 36.0.0 {{< pr number="9567" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 1.0.0 to 1.1.0 {{< pr number="9588" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-xdist from 3.7.0 to 3.8.0 {{< pr number="9287" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.12.3 to 0.12.4 {{< pr number="9634" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 36.0.0 to 36.0.1 {{< pr number="9636" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 36.0.1 to 37.0.0 {{< pr number="9677" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.0.0 to 37.0.1 {{< pr number="9685" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.0.1 to 37.0.2 {{< pr number="9738" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.0.2 to 37.0.3 {{< pr number="9754" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.0.3 to 37.0.4 {{< pr number="9764" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.12.4 to 0.12.5 {{< pr number="9871" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.0.4 to 37.1.0 {{< pr number="9905" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.1.0 to 37.1.2 {{< pr number="9910" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.1.2 to 37.1.3 {{< pr number="9943" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.1.3 to 37.1.4 {{< pr number="9964" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.1.4 to 37.1.5 {{< pr number="9977" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.12.5 to 0.12.7 {{< pr number="9976" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.1.5 to 37.1.6 {{< pr number="9988" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.1.6 to 37.2.0 {{< pr number="9996" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.2.0 to 37.2.1 {{< pr number="9998" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.2.1 to 37.2.2 {{< pr number="10009" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esptool from 4.9.0 to 5.0.2 {{< pr number="9983" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.2.2 to 37.2.3 {{< pr number="10012" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.2.3 to 37.2.4 {{< pr number="10050" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.2.4 to 37.2.5 {{< pr number="10080" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump docker/login-action from 3.4.0 to 3.5.0 in the docker-actions group {{< pr number="10081" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 37.2.5 to 38.0.0 {{< pr number="10109" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/download-artifact from 4.3.0 to 5.0.0 {{< pr number="10106" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.2.3 to 4.2.4 in /.github/actions/restore-python {{< pr number="10125" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/cache from 4.2.3 to 4.2.4 {{< pr number="10128" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump ruff from 0.12.7 to 0.12.8 {{< pr number="10126" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump tornado from 6.5.1 to 6.5.2 {{< pr number="10142" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 38.0.0 to 38.1.0 {{< pr number="10176" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 3.3.7 to 3.3.8 {{< pr number="10177" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 38.1.0 to 38.2.1 {{< pr number="10197" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump actions/checkout from 4 to 5 {{< pr number="10198" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump aioesphomeapi from 38.2.1 to 39.0.0 {{< pr number="10222" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump esphome-dashboard from 20250514.0 to 20250814.0 {{< pr number="10227" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} - -
- - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/_index.md b/content/changelog/_index.md deleted file mode 100644 index b0e5297d84..0000000000 --- a/content/changelog/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -description: "Changelog" -title: "Changelog" ---- - -{{< redirect url="/changelog/2026.2.0.html" >}} diff --git a/content/changelog/v1.10.0.md b/content/changelog/v1.10.0.md deleted file mode 100644 index 45b834a523..0000000000 --- a/content/changelog/v1.10.0.md +++ /dev/null @@ -1,242 +0,0 @@ ---- -description: "Changelog for esphomelib version 1.10.0." -title: "Changelog - Version 1.10.0" -params: - seo: - description: Changelog for esphomelib version 1.10.0. - image: /_static/changelog-1.10.0.png ---- - - -{{< imgtable >}} -"Native API","components/api","server-network.svg","dark-invert" -"Dashboard+Hass.io Add-On Updates","guides/getting_started_hassio","home-assistant.svg","dark-invert" -"Better Custom Components","components/sensor/custom","language-cpp.svg","dark-invert" -"APDS9960","components/sensor/apds9960","apds9960.jpg","" -"MAX31855","components/sensor/max31855","max31855.jpg","" -"ULN2003","components/stepper/index","stepper.svg","" -"NeoPixelBus Light","components/light/neopixelbus","color_lens.svg","dark-invert" -"ESP32 Ethernet","components/ethernet","ethernet.svg","dark-invert" -"Home Assistant Sensor","components/sensor/homeassistant","home-assistant.svg","dark-invert" -{{< /imgtable >}} - -## Native API - -This release brings with it lots of goodies, but most important is the {{< docref "/components/api" "native API" >}}. -MQTT has been the only way this project communicated with Home Assistant for a while now. And MQTT is a great protocol -to get started, but it always had problems: - -- Another service to install - Users would need to install an MQTT broker in order to get started. -- MQTT Discovery - Home Assistant's MQTT discovery has been great, but always had problems like retained messages etc. -- Inefficient - A typical MQTT message for sending a binary sensor state is about 70 bytes long, and the MQTT library - we used was quite inefficient with runtime memory allocation too. - -So I decided to do something against that: ESPHome now features a native protocol (based on TCP+protocol buffers) -that addresses these issues and has a -[component on the Home Assistant](https://rc--home-assistant-docs.netlify.com/components/esphome/) -side too. - -**Does this mean MQTT will be removed?** - -No! MQTT is an awesome protocol with easy integration for many tools like Node-RED and custom MQTT clients. -This native API is only for replacing communications with Home Assistant, so *if* anything gets removed it's -MQTT auto discovery for Home Assistant. Of course both can be used together at the same time too. - -**Should I switch to the native API immediately?** - -You definitely can, but a word of warning first: The MQTT implementation has seen tons of fixes for small quirks -in how the ESP SDK works. From my own testing, the native API seems to be quite stable - but I'm sure it'll take a bit -of time to find+fix some final bugs. - -**How do I migrate from MQTT?** - -First, make sure you run at least Home Assistant 0.85.0 (currently a -[beta release](https://www.home-assistant.io/docs/installation/updating/#run-the-beta-version)). -Then, go through the migration guide here (removed). - -## Python 3 Compatibility - -PlatformIO has finally implemented [python 3 support](https://github.com/platformio/platformio-core/issues/895) -after some quick changes, ESPHome is now also compatible with python 3.5+. So with this new release -you can try ESPHome with Python 3 already. Just make sure to install the development version of platformio first: - -```bash -pip3 install -U https://github.com/platformio/platformio-core/archive/develop.zip -``` - -I don't particularly like python 2, and in a year's time support for it will officially be ended. So the plan for -ESPHome is to drop python 2 as soon as possible. Once platformio releases version 4.0 (with python 3 support), I -will go through and check everything still works. Maybe ESPHome will support python 2 for 1 or 2 releases after that -but really I want to drop support for python 2 as soon as possible. - -## Dashboard & Hass.io Addon Updates - -The dashboard and Hass.io addon have seen a lot of ❤️ in this release: The dashboard has seen tons of small -changes to make the user experience better and the Hass.io addon has been completely re-written with the -[Hass.io Community Addon Images](https://github.com/hassio-addons) as the base. - -- The dashboard now features a built-in YAML editor. -- Configuration wizard now shows a list of boards directly, so you just have to choose them from a dropdown. -- Hass.io Addon: You can log in using your Home Assistant credentials now. -- And many more changes (colored logs, auto-scroll, node status, update notifications, ...) - -## Rename: esphome{lib, yaml} -> ESPHome - -The name esphomelib and esphomeyaml were too technical, and this project has changed a lot since the first -published release (the yaml part didn't even exist back then). So ... the project is being re-branded slightly: - -- esphomeyaml -> ESPHome -- esphomelib -> ESPHome Core -- esphomedocs -> ESPHome Docs - -As you see, the yaml project is now getting the "fancy" name, because that's by far the best way to use this framework. -As part of this change, using the *core* framework directly from code (without YAML) is being deprecated, the API docs -have long been inaccurate now and users should really switch over to ESPHome through YAML - -Of course that doesn't mean you won't be able to write custom code. In fact, this release also contains lots of -new guides and changes to make creating custom components much easier. The goal is to have a project where users -can use YAML for the boring boilerplate code but can completely customize everything with custom components. - -This migration is of course huge - almost every single file in the code+docs base has esphome{lib, yaml} somewhere -in it, so it will take time until the next release for this to be finished. - -## Breaking Changes - -- Previously, esphomelib would by default only publish every 15th sensor value in order to provide averaged values. - However, that often confused users and I now decided to remove it **and** set the default update interval of - all components to `60s` instead of the previous `15s`. You can get back the old behavior by setting - -```yaml - sensor: - - platform: ... # enter platform here - # other settings - update_interval: 15s - filters: - - sliding_window_moving_average: {} -``` - -- The fastled effects have been renamed to `addressable_` for the new - {{< docref "/components/light/neopixelbus" "Neopixelbus" >}} integration. See the validation error message - for more info. - -## Other notable changes - -- You can now configured multiple WiFi networks to connect to. The best one will be chosen automatically. - This is along with a *complete* rewrite of the WiFi component which now interacts directly with the ESP SDK. - ([Connecting to Multiple Networks](/components/wifi#wifi-networks)) - -- GPIO Switches have a new option `restore_mode` to configure how their values should be restored on boot. - ({{< docref "/components/switch/gpio" >}}) - -- Added {{< docref "/components/substitutions" >}} to reduce repeating across configs. -- Validation error messages are now displayed even better. Now all errors are shown with the exact context - where the error appeared. Try it, it's so much better. Next step will be to upgrade to a better YAML reader - to provide better error messages when the YAML syntax is invalid. - -- Added a bunch of guides (and helpers) for creating custom components. Also new: `esphomeyaml.libraries`, - `esphomeyaml.includes` and `esphomeyaml.platformio_options` ({{< docref "/components/esphome" >}}) - -- Saved a lot of flash space on ESP8266 boards. Previously, platformio would allocate about 1/4 of flash for SPIFFS, - but esphomelib doesn't use that so now you have that as extra storage. Thanks `@brandond ` - -- You can now use Home Assistant to get time in ESPHome, so no more need for SNTP. See {{< docref "/components/time" >}}. - -## Release 1.10.1 - January 13 - -- docs: Fix substitutions example & api intro text {{< pr number="117" repo="esphome-docs" >}} by {{< ghuser name="thubot" >}} -- lib: Fix while action not resetting is_running {{< pr number="378" repo="esphome-core" >}} -- lib: Fix remote transmitter ESP32 repeat wait {{< pr number="376" repo="esphome-core" >}} -- lib: Fix addressable lights {{< pr number="375" repo="esphome-core" >}} -- yaml: Fix ESP32 not decoding stacktrace on broken PC {{< pr number="330" repo="esphome" >}} -- docs: Fixed missing link to BME cookbook {{< pr number="120" repo="esphome-docs" >}} by {{< ghuser name="Mynasru" >}} -- lib: Fix addressable flicker effect {{< pr number="383" repo="esphome-core" >}} -- lib: NeoPixelBus: fix handling of white color component {{< pr number="384" repo="esphome-core" >}} by {{< ghuser name="badbadc0ffee" >}} -- lib: Fix trigger not being optional {{< pr number="381" repo="esphome-core" >}} -- docs: Add WiFi fast connect {{< pr number="121" repo="esphome-docs" >}} -- yaml: Fix AsyncTCP compilation on ESP32 with Arduino breaking change {{< pr number="334" repo="esphome" >}} -- yaml: Fix show logs with MQTT and dashboard {{< pr number="332" repo="esphome" >}} -- lib: Add WiFi fast connect mode {{< pr number="385" repo="esphome-core" >}} -- lib: Fix API Server has deep sleep {{< pr number="386" repo="esphome-core" >}} -- yaml: Introduce wifi fast connect mode {{< pr number="333" repo="esphome" >}} -- lib: Fix GPIO Switch not handling inverted {{< pr number="387" repo="esphome-core" >}} -- lib: Expose NeoPixelBus Controller {{< pr number="388" repo="esphome-core" >}} -- yaml: Pin platformio platforms {{< pr number="335" repo="esphome" >}} -- lib: Fix ble tracker compile error {{< pr number="390" repo="esphome-core" >}} - -## All changes - -- docs: CSE7766 Update Interval {{< pr number="91" repo="esphome-docs" >}} -- docs: add baud_rate; typo on sensor type {{< pr number="90" repo="esphome-docs" >}} by {{< ghuser name="drewp" >}} -- docs: Fix docs for LCD display strftime {{< pr number="95" repo="esphome-docs" >}} -- lib: Make CSE7766 a polling sensor {{< pr number="305" repo="esphome-core" >}} -- lib: Supply clang-format file for contributors {{< pr number="290" repo="esphome-core" >}} -- yaml: Time SNTP validate server format {{< pr number="254" repo="esphome" >}} -- yaml: Fix GPIO input schema validator {{< pr number="253" repo="esphome" >}} -- lib: Implement custom sensor platform {{< pr number="274" repo="esphome-core" >}} -- lib: Only compile code stuff if necessary {{< pr number="309" repo="esphome-core" >}} -- yaml: [Huge] Util Refactor, Dashboard Improvements, Hass.io Auth API, Better Validation Errors, Conditions, Custom Platforms, Substitutions {{< pr number="234" repo="esphome" >}} -- docs: Fix copy paste error {{< pr number="100" repo="esphome-docs" >}} by {{< ghuser name="oscar-b" >}} -- lib: Fix large JSON payloads being cut off {{< pr number="323" repo="esphome-core" >}} by {{< ghuser name="quazzie" >}} -- docs: Add Wikipedia link to tz database zones list {{< pr number="105" repo="esphome-docs" >}} by {{< ghuser name="apeeters" >}} -- docs: Add pins for Shelly 2 {{< pr number="103" repo="esphome-docs" >}} by {{< ghuser name="oscar-b" >}} -- lib: Native Esphomelib API {{< pr number="322" repo="esphome-core" >}} -- yaml: Add native ESPHome API {{< pr number="265" repo="esphome" >}} -- lib: Add support for MAX31855 sensor {{< pr number="310" repo="esphome-core" >}} by {{< ghuser name="sherbang" >}} -- docs: Documentation for MAX31855 sensor {{< pr number="97" repo="esphome-docs" >}} by {{< ghuser name="sherbang" >}} -- lib: Fix typo in Output Switch {{< pr number="307" repo="esphome-core" >}} -- lib: Fix PCA9685 with many channels {{< pr number="304" repo="esphome-core" >}} -- docs: Fixed typo in Sonoff R2 Cover example {{< pr number="112" repo="esphome-docs" >}} by {{< ghuser name="voicevon" >}} -- lib: Dump native API Server config on boot {{< pr number="338" repo="esphome-core" >}} by {{< ghuser name="voicevon" >}} -- lib: Split Automation headers from implementation {{< pr number="349" repo="esphome-core" >}} -- lib: Travis update {{< pr number="350" repo="esphome-core" >}} -- lib: Fix API Server logs {{< pr number="347" repo="esphome-core" >}} -- lib: WiFi Better logging for ESP8266 {{< pr number="346" repo="esphome-core" >}} -- lib: API Server Watchdog {{< pr number="345" repo="esphome-core" >}} -- lib: GPIO Switch Restore Mode {{< pr number="344" repo="esphome-core" >}} -- lib: Fix Remote Receiver Overflow for ESP8266 {{< pr number="348" repo="esphome-core" >}} -- yaml: Api fixes {{< pr number="289" repo="esphome" >}} -- yaml: Fix host network {{< pr number="280" repo="esphome" >}} -- yaml: Fix ESP8266 verbose logging {{< pr number="291" repo="esphome" >}} -- yaml: API Server Watchdog {{< pr number="290" repo="esphome" >}} -- lib: Implement Addressable Lights Base {{< pr number="243" repo="esphome-core" >}} -- yaml: Disable SPIFFS to save flash space {{< pr number="288" repo="esphome" >}} -- yaml: Fix MQTT message trigger {{< pr number="282" repo="esphome" >}} -- yaml: GPIO Switch Restore Mode {{< pr number="287" repo="esphome" >}} -- yaml: Addressable Lights {{< pr number="294" repo="esphome" >}} -- yaml: Toggle Auto-Update Check With Environment Variable {{< pr number="292" repo="esphome" >}} -- yaml: Make compatible with python 3 {{< pr number="281" repo="esphome" >}} -- docs: Fix copy/paste error in turn_off_action {{< pr number="113" repo="esphome-docs" >}} by {{< ghuser name="wutr" >}} -- yaml: GPIO Switch Fix restore_mode validator {{< pr number="296" repo="esphome" >}} by {{< ghuser name="yottatsa" >}} -- yaml: Fixes for Python 3 Compatibility {{< pr number="297" repo="esphome" >}} -- lib: Stop old template action when new one is started {{< pr number="354" repo="esphome-core" >}} -- lib: Add APDS-9960 support {{< pr number="286" repo="esphome-core" >}} -- lib: Change default update interval to 60 seconds {{< pr number="356" repo="esphome-core" >}} -- lib: ESP32 Ethernet support {{< pr number="288" repo="esphome-core" >}} -- lib: Add ULN2003 support {{< pr number="301" repo="esphome-core" >}} -- lib: Add clean discovery option to simplify transition to native API {{< pr number="357" repo="esphome-core" >}} -- yaml: Add clean MQTT discovery option for native API {{< pr number="302" repo="esphome" >}} -- yaml: Add APDS9960 Support {{< pr number="300" repo="esphome" >}} -- lib: Add neopixelbus component {{< pr number="352" repo="esphome-core" >}} -- yaml: Add neopixelbus component {{< pr number="303" repo="esphome" >}} -- yaml: Add support for MAX31855 sensor {{< pr number="258" repo="esphome" >}} by {{< ghuser name="sherbang" >}} -- yaml: ULN2003 Support {{< pr number="304" repo="esphome" >}} -- yaml: Add ESP32 Ethernet Support {{< pr number="301" repo="esphome" >}} -- docs: total_daily_energy doesn't have pin option {{< pr number="114" repo="esphome-docs" >}} by {{< ghuser name="oscar-b" >}} -- docs: Getting started HassIO - USD device discovery {{< pr number="110" repo="esphome-docs" >}} by {{< ghuser name="DavidDeSloovere" >}} -- docs: Mismatch in example and text {{< pr number="109" repo="esphome-docs" >}} by {{< ghuser name="wellsi" >}} -- docs: BME280 environment cookbook entry {{< pr number="107" repo="esphome-docs" >}} by {{< ghuser name="Mynasru" >}} -- docs: Update getting_started_command_line.rst {{< pr number="102" repo="esphome-docs" >}} by {{< ghuser name="doskoi" >}} -- docs: Updated the multi click example code block {{< pr number="92" repo="esphome-docs" >}} by {{< ghuser name="cooljimy84" >}} -- docs: Add step to setting up devices {{< pr number="101" repo="esphome-docs" >}} by {{< ghuser name="magnusoverli" >}} -- yaml: Update beta config {{< pr number="305" repo="esphome" >}} -- yaml: Fix component.update action {{< pr number="308" repo="esphome" >}} -- yaml: OTA don't error when upgrading from no password to password mode {{< pr number="309" repo="esphome" >}} -- yaml: use full space on small devices {{< pr number="310" repo="esphome" >}} by {{< ghuser name="escoand" >}} -- lib: Fix interval compilation error {{< pr number="364" repo="esphome-core" >}} -- yaml: Fix interval trigger {{< pr number="313" repo="esphome" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.11.0.md b/content/changelog/v1.11.0.md deleted file mode 100644 index ebb7f5b301..0000000000 --- a/content/changelog/v1.11.0.md +++ /dev/null @@ -1,283 +0,0 @@ ---- -description: "Changelog for esphomelib version 1.11.0." -title: "Changelog - Version 1.11.0" -params: - seo: - description: Changelog for esphomelib version 1.11.0. - image: /_static/changelog-1.11.0.png ---- - - -{{< imgtable >}} -"Completed Rename","index","logo.svg","dark-invert" -"Home Assistant Binary Sensor","components/binary_sensor/homeassistant","home-assistant.svg","dark-invert" -"Light Partition","components/light/partition","color_lens.svg","dark-invert" -{{< /imgtable >}} -Release 1.11.0 is here, and it has been a busy few weeks :) - -First of all, thank you all for the amazing support on discord, twitter, twitch, etc. -Seeing how much people can accomplish with this tool is really inspiring! - -## ESPHome Rename Completed - -Back in 1.10.0, it was decided to rename the project from esphomelib to ESPHome. This release -has seen **massive** refactors to allow this rename. Literally thousands of files had -to be changed, often with lots of manual action required. Now a rename might not seem -too exciting for you the user, but consider this: Lots of ancient code got revised and cleaned up, -the ESPHome source got moved to a [dedicated Github Organization](https://github.com/esphome) -and many other organizational changes were made which will enable faster feature development. - -As an example, ESPHome's documentation now gets built and served by [Netlify](https://www.netlify.com/), -so all documentation contributions will now get a preview of the changes on a preview website. - -## Installation Methods Changed - -Because of this rename, ESPHome's installation methods have also changed (breaking change!). - -- **Hass.io**: The Hass.io addon repository has moved to [https://github.com/esphome/hassio](https://github.com/esphome/hassio), - please remove the old addon repository and add the new repository. - -- **pip-based installs**: The new installation command is `pip install esphome` and - the `esphomeyaml` command now is called `esphome`. - -- **docker-based installs**: The docker image has moved to `esphome/esphome`. So now you need - to use `docker run --rm -it esphome/esphome livingroom.yaml run`. The dashboard view - now uses mDNS to show online/offline status of ESPs, so you need to add `--net=host` for - that to work. - -All old installation methods will no longer receive updates (and potentially be removed -in the future). - -## Local mDNS Responder - -Up until now, many users had to set static IPs for all ESP nodes in order to be able to connect to -them. That was not a good user experience and this project is committed to providing the best -possible user experience. So now ESPHome bundles its own mDNS responder so static IPs are no -longer necessary (ref: {{< pr number="386" repo="esphome" >}})! 🎉 - -## Faster Release Cycle - -One of the big things that needs to be changed with this project is the release cycle. -For one thing there's all contributions by you the users that potentially have to wait -before users can use it. But it also makes releasing small tweaks or fixes much more difficult. - -I know I've said this before, but I want to move ESPHome to a quicker and more regular release -interval. As a start, I've set my personal due date for the next release to be in two weeks. -Going forward, I want to have a regular release interval of 3 weeks (remind me of this if I forget :) - -Also, you might have seen me post a picture of an ESP32 camera integration for ESPHome. Don't worry, -I've made that a top priority for the next release, but I've hit some road blocks that would have -prevented it from working in a stable way for this release (and I needed to finally get this darn -release out). - -## Release 1.11.2 - February 26 - -- docs: Fix units on the valid frequency values {{< pr number="170" repo="esphome-docs" >}} by {{< ghuser name="kwdavidson" >}} -- esphome: Allow non-pullup pins for dallas {{< pr number="456" repo="esphome" >}} -- core: Turn off light at 0% brightness :corepr:`526` -- core: HLW8012 don't count a single pulse as power :corepr:`527` -- core: Set initial brightness to 0 when turning light on :corepr:`528` -- core: Allow white value of addressable lights to be controlled independently of brightness :corepr:`529` -- core: Fix WiFi not connecting to open networks :corepr:`531` -- esphome: Remove automatic update check {{< pr number="457" repo="esphome" >}} -- esphome: Fix mDNS library added only with OTA {{< pr number="451" repo="esphome" >}} -- docs: Merge dallas component {{< pr number="179" repo="esphome-docs" >}} by {{< ghuser name="FrengerH" >}} -- docs: Correct ultrasonic filter_nan example {{< pr number="159" repo="esphome-docs" >}} by {{< ghuser name="apeeters" >}} -- docs: Cookbook entry for Display component {{< pr number="173" repo="esphome-docs" >}} by {{< ghuser name="ahd71" >}} -- core: Fix light partition src offset :corepr:`525` - -## Release 1.11.1 - February 23 - -- core: Fix addressable not updating light :corepr:`521` -- docs: Add Ethernet pin config for olimex esp32-poe board {{< pr number="166" repo="esphome-docs" >}} by {{< ghuser name="setola" >}} -- docs: FAQ: Add description for mDNS support on different subnets {{< pr number="169" repo="esphome-docs" >}} by {{< ghuser name="Taigar2015" >}} - -## Breaking Changes - -- Template Switches no longer restore their state by default :corepr:`503` -- Removed heartbeat filter from binary sensors :corepr:`454` -- `optimistic` mode for template platforms has been split off into `optimistic` and - `assumed_state` options :corepr:`455` - -- `run_cycles` has been removed from deep_sleep {{< pr number="353" repo="esphome" >}} - -## Other notable changes - -- Added GPIO Switch interlocking :corepr:`482` -- Added light partition platform which allows you to split an addressable light into partitions - and combine them :corepr:`501` - -- Added `wait_until` action :corepr:`508` -- Added template publish actions, which allow you to manually push a state to a template - platform :corepr:`453` - -- Added support for SI7021 sensors (found in Sonoff TH modules) {{< pr number="375" repo="esphome" >}} -- MQTT is no longer compiled into firmwares that do no use it, should save a bit of space - :corepr:`430`, :corepr:`409` - -- Added `use_address` option to `wifi:` which overrides the address ESPHome connects to :corepr:`484` -- Added display pages, which allow you to have a display that periodically switches between - different pages of content :corepr:`507` - -- Added two new IR codecs: IR5 and JVC :corepr:`502`, :corepr:`493` -- Added option to use alternative hardware UART interfaces for logging :corepr:`483` -- All log strings are stored in flash now, so that saves a few kb of IRAM on ESP8266s :corepr:`432` -- Fixed ESP8266s with CSE7766 rebooting often -- Fixed using MQTT and native API at the same time -- Personal information is now automatically redacted from dashboard logs :corepr:`488` - -## Beta Fixes - -- esphome: Fix custom components not registered {{< pr number="441" repo="esphome" >}} -- core: Add empty nameable constructors :corepr:`509` -- core: Fix Nextion "Received unknown filler end bytes" :corepr:`510` -- core: Fix functional attachInterrupt placed in flash :corepr:`511` -- esphome: Remove duplicate scrollbar & move scrollbar {{< pr number="443" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} -- esphome: Remove unnecessary wrapper {{< pr number="444" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} -- core: Refactor addressable light and fix partition issue :corepr:`512` -- esphome: Fix MQTT log topic level {{< pr number="445" repo="esphome" >}} -- core: Fix ESP8266 functional interrupts :corepr:`515` -- esphome: Allow i2c on non-pullup pins {{< pr number="447" repo="esphome" >}} -- esphome: Allow use of arduino core v2.5.0 on ESP8266 {{< pr number="446" repo="esphome" >}} - -## All changes - -- core: Attempt to fix the addressable flicker effect :corepr:`392` by {{< ghuser name="RomRider" >}} -- esphome: typing is only required for python < 3.5 {{< pr number="341" repo="esphome" >}} by {{< ghuser name="dotlambda" >}} -- esphome: Fix install pillow in docker image {{< pr number="338" repo="esphome" >}} -- esphome: Allow IPv4 addresses for SNTP servers {{< pr number="340" repo="esphome" >}} -- docs: Fix esp8266_pwm example, IDs cannot have hyphens {{< pr number="123" repo="esphome-docs" >}} by {{< ghuser name="rabbadab" >}} -- esphome: Add pyserial to install_requires {{< pr number="348" repo="esphome" >}} by {{< ghuser name="dotlambda" >}} -- docs: Added explanation how to change the password {{< pr number="124" repo="esphome-docs" >}} by {{< ghuser name="WoLpH" >}} -- docs: Update light lambda effect example {{< pr number="125" repo="esphome-docs" >}} by {{< ghuser name="jdads1" >}} -- core: Improve handling of MQTT birth message :corepr:`410` -- core: Fix WiFi apply hostname too early :corepr:`399` -- core: Fix pulse counter filtering for ESP8266 :corepr:`397` -- esphome: Warn if expire_after used without MQTT {{< pr number="354" repo="esphome" >}} -- esphome: Use strict string mode for WiFi password {{< pr number="351" repo="esphome" >}} -- docs: Add ESP8266 advanced info {{< pr number="128" repo="esphome-docs" >}} -- docs: Cookbook Entry for Sonoff Basic Fish Pond Pump {{< pr number="122" repo="esphome-docs" >}} by {{< ghuser name="meijerwynand" >}} -- docs: Add Arilux LC02 pinout {{< pr number="130" repo="esphome-docs" >}} by {{< ghuser name="pixiandreas" >}} -- docs: Dallas: Update for default update_interval {{< pr number="131" repo="esphome-docs" >}} by {{< ghuser name="balk77" >}} -- core: Fix Light Color Temperature for native API :corepr:`398` -- core: Throttle filter doesn't work for quick firing sensors :corepr:`408` by {{< ghuser name="AlexDanault" >}} -- core: Improve Preferences Log Output :corepr:`414` -- core: Fix GPIO switch restoring inverted :corepr:`415` -- core: Default expire after to 0 with deep sleep :corepr:`417` -- core: Improve DHT error message :corepr:`424` -- esphome: Fix Non-ASCII characters being escaped if in wrong locale {{< pr number="369" repo="esphome" >}} -- esphome: Upgrade HassIO Ubuntu Base to 2.2.1 {{< pr number="368" repo="esphome" >}} -- esphome: Fix ESP32 BLE tracker scan interval in seconds {{< pr number="367" repo="esphome" >}} -- esphome: ESP8266 Better Exception Code Names {{< pr number="358" repo="esphome" >}} -- esphome: Remove DNS1,DNS2 inclusive {{< pr number="357" repo="esphome" >}} -- esphome: Remove deep sleep run_cycles {{< pr number="353" repo="esphome" >}} -- esphome: Fix custom output requiring type {{< pr number="344" repo="esphome" >}} -- core: Don't duplicate binary sensor events :corepr:`411` -- esphome: Add ability to run commands using subprocess, instead of in-process {{< pr number="359" repo="esphome" >}} by {{< ghuser name="dotlambda" >}} -- core: Fix on_press / on_release being triggered on initial state :corepr:`425` -- core: Remove hard dependencies in library.json :corepr:`409` -- esphome: Upgrade espressif32 package to 1.6.0 {{< pr number="355" repo="esphome" >}} -- esphome: Fix dashboard password with python 3 {{< pr number="339" repo="esphome" >}} -- esphome: Fix nginx closing WebSocket connection after 60 seconds {{< pr number="370" repo="esphome" >}} -- esphome: Disable platformio LDF {{< pr number="352" repo="esphome" >}} -- core: Store log strings in flash for ESP8266 :corepr:`432` -- core: Adding DHT model SI7021 to DHT sensor :corepr:`433` by {{< ghuser name="grea09" >}} -- esphome: Adding SI7021 sensor to config validation {{< pr number="375" repo="esphome" >}} by {{< ghuser name="grea09" >}} -- core: Add logging to NeoPixelBus :corepr:`438` by {{< ghuser name="badbadc0ffee" >}} -- esphome: Includes should be relative to the src directory, not main.cpp file {{< pr number="390" repo="esphome" >}} by {{< ghuser name="yawor" >}} -- esphome: Generate variable for each custom component id {{< pr number="382" repo="esphome" >}} by {{< ghuser name="yawor" >}} -- esphome: Fix Custom Components No Name {{< pr number="395" repo="esphome" >}} -- core: Split off assumed state from optimistic mode :corepr:`455` -- esphome: Remove Heartbeat Binary Sensor Filter {{< pr number="393" repo="esphome" >}} -- core: Disable MQTT if not used :corepr:`430` -- esphome: Disable MQTT if not used {{< pr number="373" repo="esphome" >}} -- core: Store raw remote codes in flash :corepr:`456` -- core: Deduplicate values before sending :corepr:`454` -- core: Rewrite native API client for increased reliability :corepr:`426` -- docs: Fix Typo in BME280 Environment Cookbook {{< pr number="145" repo="esphome-docs" >}} by {{< ghuser name="hajdbo" >}} -- docs: Updating Repo URLs in Contribution Guide {{< pr number="143" repo="esphome-docs" >}} by {{< ghuser name="badbadc0ffee" >}} -- core: Update sony.cpp to fix incorrectly formed Sony IR code (extra bit) :corepr:`458` by {{< ghuser name="chris-jennings" >}} -- docs: Extra example in cookbook / flashing DOIT ESP32 {{< pr number="138" repo="esphome-docs" >}} by {{< ghuser name="DavidDeSloovere" >}} -- docs: Adding the SI7021 to docs {{< pr number="147" repo="esphome-docs" >}} by {{< ghuser name="grea09" >}} -- esphome: Validate neopixelbus method {{< pr number="398" repo="esphome" >}} -- core: Fix PMSx003 payload length calculation :corepr:`471` by {{< ghuser name="hajdbo" >}} -- docs: Netlify {{< pr number="153" repo="esphome-docs" >}} -- docs: Remove duplicate "includes" line {{< pr number="154" repo="esphome-docs" >}} by {{< ghuser name="notgwj" >}} -- core: Remove 'flash' property from MQTT Light discovery JSON. :corepr:`478` by {{< ghuser name="brandond" >}} -- docs: Improve docker build instructions {{< pr number="155" repo="esphome-docs" >}} by {{< ghuser name="DavidDeSloovere" >}} -- core: Add Homeassistant Binary Sensor :corepr:`480` (cherry-picked) -- core: GPIO Switch Interlocking :corepr:`482` (cherry-picked) -- esphome: Print error when mqtt.publish used without MQTT enabled {{< pr number="408" repo="esphome" >}} (cherry-picked) -- esphome: Add Homeassistant Binary Sensor {{< pr number="409" repo="esphome" >}} (cherry-picked) -- esphome: Allow pins 9&10 for PWM {{< pr number="410" repo="esphome" >}} (cherry-picked) -- docs: Homeassistant binary sensor {{< pr number="156" repo="esphome-docs" >}} -- esphome: Store Raw Remote Codes in PROGMEM {{< pr number="392" repo="esphome" >}} (cherry-picked) -- core: Better error messages for OTA :corepr:`486` -- esphome: Better error messages for OTA {{< pr number="418" repo="esphome" >}} -- core: Synchronize homeassistant time periodically :corepr:`485` -- core: ESP8266 Arduino 2.5.0 Compatibility :corepr:`481` (cherry-picked) -- esphome: Add Switch Interlocking {{< pr number="411" repo="esphome" >}} (cherry-picked) -- esphome: Add local mDNS responder for .local {{< pr number="386" repo="esphome" >}} (cherry-picked) -- core: Auto-Redact private information from logs :corepr:`488` -- esphome: Auto-Redact private information from logs in dashboard {{< pr number="421" repo="esphome" >}} -- esphome: Replace optimistic with Assumed State {{< pr number="394" repo="esphome" >}} (cherry-picked) -- core: Add Template Publish Action :corepr:`453` (cherry-picked) -- esphome: Add template publish actions and switch triggers {{< pr number="391" repo="esphome" >}} (cherry-picked) -- core: Rework hostname (replaced by use_address) :corepr:`484` -- esphome: Add use_address {{< pr number="417" repo="esphome" >}} -- core: Fixes I2C SH1106 repeats the first 8 lines of the display. :corepr:`492` by {{< ghuser name="n0bel" >}} -- docs: Link Home Assistant's include system in FAQ {{< pr number="157" repo="esphome-docs" >}} by {{< ghuser name="TheHackmeister" >}} -- core: Rework UART component for fixes :corepr:`487` -- esphome: Rework UART component for fixes {{< pr number="419" repo="esphome" >}} -- esphome: Make dout the default flash mode {{< pr number="420" repo="esphome" >}} -- core: Revert espressif32 package upgrade :corepr:`490` -- esphome: Revert "Upgrade espressif32 package to 1.6.0 (#355)" {{< pr number="422" repo="esphome" >}} -- core: Add support for JVC remote transmitting and receiving :corepr:`493` by {{< ghuser name="jesserockz" >}} -- esphome: Add support for JVC remote transmitting and receiving {{< pr number="423" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Add docs for JVC remote transmitting and receiving {{< pr number="160" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: H801 LED controller (remade) {{< pr number="158" repo="esphome-docs" >}} by {{< ghuser name="erazor666" >}} -- core: Enable use of alternate hardware UARTs for logging :corepr:`483` by {{< ghuser name="brandond" >}} -- esphome: Enable use of alternate hardware UARTs for logging {{< pr number="427" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- docs: Enable use of alternate hardware UARTs for logging {{< pr number="161" repo="esphome-docs" >}} by {{< ghuser name="brandond" >}} -- core: Rename esphomelib to esphome-core :corepr:`494` -- esphome: Rename esphomeyaml to esphome {{< pr number="426" repo="esphome" >}} -- esphome: Include common components for compiles {{< pr number="431" repo="esphome" >}} -- core: Add light partition platform :corepr:`501` -- core: Add RC5 IR code support :corepr:`502` -- core: Template switch do not restore state by default :corepr:`503` -- core: Fix ethernet initialization order :corepr:`504` -- esphome: Add RC5 IR code support {{< pr number="432" repo="esphome" >}} -- core: Tweak BLE tracker settings :corepr:`505` -- esphome: Add text_sensor.template.publish action {{< pr number="433" repo="esphome" >}} -- esphome: Add light partition platform {{< pr number="434" repo="esphome" >}} -- core: Add 'hidden' option to wifi networks :corepr:`506` -- esphome: Add hidden option to wifi networks {{< pr number="436" repo="esphome" >}} -- core: Add display pages abstraction :corepr:`507` -- esphome: Add display page abstraction {{< pr number="435" repo="esphome" >}} -- esphome: Fix dashboard style issues {{< pr number="437" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} -- esphome: Include tapTarget html element only when needed {{< pr number="439" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} -- core: Add wait_until action :corepr:`508` -- esphome: Add wait_until action {{< pr number="440" repo="esphome" >}} -- docs: Document addressable_lambda light effect {{< pr number="163" repo="esphome-docs" >}} -- esphome: Fix custom components not registered {{< pr number="441" repo="esphome" >}} (cherry-picked) -- docs: Custom Binary Sensor: Add missing ";" and fix indentation in YAML {{< pr number="164" repo="esphome-docs" >}} by {{< ghuser name="mjoshd" >}} -- core: Add empty nameable constructors :corepr:`509` (cherry-picked) -- core: Fix Nextion "Received unknown filler end bytes" :corepr:`510` (cherry-picked) -- core: Fix functional attachInterrupt placed in flash :corepr:`511` (cherry-picked) -- docs: Add Sonoff T1 LED pin {{< pr number="165" repo="esphome-docs" >}} by {{< ghuser name="lwis" >}} -- esphome: Remove duplicate scrollbar & move scrollbar {{< pr number="443" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} (cherry-picked) -- esphome: Remove unnecessary wrapper {{< pr number="444" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} (cherry-picked) -- core: Refactor addressable light and fix partition issue :corepr:`512` (cherry-picked) -- esphome: Fix MQTT log topic level {{< pr number="445" repo="esphome" >}} (cherry-picked) -- core: Fix ESP8266 functional interrupts :corepr:`515` (cherry-picked) -- esphome: Allow i2c on non-pullup pins {{< pr number="447" repo="esphome" >}} (cherry-picked) -- esphome: Allow use of arduino core v2.5.0 on ESP8266 {{< pr number="446" repo="esphome" >}} (cherry-picked) -- core: Fix feed_wdt :corepr:`520` -- core: Speed up waveshare Epaper :corepr:`518` -- esphome: Improve dashboard setup wizard {{< pr number="450" repo="esphome" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.12.0.md b/content/changelog/v1.12.0.md deleted file mode 100644 index 836ebec9bf..0000000000 --- a/content/changelog/v1.12.0.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.12.0." -title: "Changelog - Version 1.12.0" -params: - seo: - description: Changelog for ESPHome version 1.12.0. - image: /_static/changelog-1.12.0.png ---- - - -{{< imgtable >}} -"User-Defined Services","components/api.html#user-defined-services","home-assistant.svg","dark-invert" -"ESP32 Camera","components/esp32_camera","camera.svg","dark-invert" -"MPR121","components/binary_sensor/mpr121","mpr121.jpg","" -"SDS011","components/sensor/sds011","sds011.jpg","" -"MCP23017","components/mcp230xx","mcp23017.svg","" -"Servo","components/servo","servo.svg","" -"WiFi Info","components/text_sensor/wifi_info","network-wifi.svg","dark-invert" -{{< /imgtable >}} -It's release day! 🎉 Today I'm happy to release ESPHome 1.12.0. What's new? A lot of awesome -stuff got added! Let me walk you through it: - -Before 1.12, it was only possible to transfer data from ESPHome to Home Assistant (with the -`homeassistant.service` call). With 1.12 you get [User-defined services](/components/api#api-device-actions), -just define a service in your ESPHome file and call it like any other service from HA. All the -rest (like variables, data validation, etc) are handled automatically! - -{{< docref "/components/esp32_camera" "ESP32 Camera Support" >}}: This is huge. When integrating cameras -into your smart home you'd always have to weigh between security and price; cheap cameras often -are very insecure (and sometimes even exposed on the web). And even the pricier ones would -sometimes phone back to the manufacturer and upload your data. With ESPHome, everything's 100% -local and communicates *directly* with Home Assistant. It took a bit longer than I initially -anticipated to iron out most stability issues, but with 1.12.0 it's finally here :) - -And thanks very much to {{< ghuser name="puuu" >}} for the {{< docref "/components/sensor/sds011" "SDS011 Particulate Matter integration" >}} and -{{< ghuser name="mvturnho" >}} for the newly added -{{< docref "/components/binary_sensor/mpr121" "MPR121 Capacitive Touch sensor" >}} support! - -And as always, this release contains tons of small adjustments (like automatically providing -suggestions for validation errors) and bug fixes to make your life easier. - -## Breaking Changes - -- The `timeout_meter` and `timeout_time` options of the ultrasonic sensor - have been merged into `timeout`. ({{< docref "/components/sensor/ultrasonic" >}}) - -- Ultrasonic Sensor no longer works with GPIO16 as echo pin on ESP8266s because - the implementation switched to an asynchronous interrupt mode. - -## Other notable changes - -- Added `calibrate_linear` sensor filter for easier calibration of sensors - ([sensor-filter-calibrate_linear](/components/sensor/filter/multiply#sensor-filter-calibrate_linear)) - -- Added `for` parameter to [binary_sensor.is_on](/components/binary_sensor#binary_sensor-is_on_condition) condition. -- Added `streamer_mode`, `status_use_ping` and `relative_url` options to the Hass.io addon - (see addon description). - -- Improved validation. For small typos for config variables similar keys are automatically - suggested. - -- Added `esp8266_restore_from_flash` to {{< docref "/components/esphome" "esphome section" >}} which - enables restoring state from flash instead of RTC memory - this allows recovering relay state - even after a power cycle. - -- Added ability -- `!secret` values are now hidden for config validation. -- Rotary Encoders have a new `min_value` and `max_value` option. ({{< docref "/components/sensor/rotary_encoder" >}}) -- Fixed OTA not working for ESP32 when BLE enabled. -- Added a "delete" button in the dashboard interface to delete configuration files. -- Reworked GPIO interrupts, this will fix a bunch of issues with components that use interrupts - (rotary encoder, software uart, remote receiver, ...) - -- Allowed the use of newest Arduino Core version for ESP8266: `2.5.0` (not default yet, - please try it out on non-critical devices and report if there are no wifi issues) - -## Release 1.12.1 - March 20 - -- core: Fix homeassistant mqtt discovery for light components :corepr:`553` by {{< ghuser name="puuu" >}} -- esphome: Fix filter_out: nan filer {{< pr number="486" repo="esphome" >}} -- docs: Sonoff S20 yaml fix {{< pr number="200" repo="esphome-docs" >}} by {{< ghuser name="BananaPukeh" >}} -- core: Fix WiFi Info Text Sensor :corepr:`554` -- core: Fix addressable lights starting white at boot :corepr:`556` -- esphome: Fix IPAddress in validate secret {{< pr number="488" repo="esphome" >}} - -## Release 1.12.2 - March 31 - -- esphome: Better symlink support under Windows {{< pr number="487" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- core: Fix WiFi Info sensor for ESP32 :corepr:`561` -- core: Revert ultrasonic sensor to non-interrupt mode :corepr:`562` -- core: Fix web_server for text_sensors :corepr:`567` -- core: Fix ESP8266 cannot OTA after failed OTA attempt :corepr:`564` -- core: ESP8266 SDK Core 2.3.0 compat :corepr:`563` -- esphome: ESP8266 SDK 2.3.0 compat {{< pr number="490" repo="esphome" >}} -- docs: Expand USB flashing, clarify how to report a bug. {{< pr number="204" repo="esphome-docs" >}} by {{< ghuser name="balloob" >}} -- core: Fix dallas on GPIO0 :corepr:`568` -- docs: Fix api homeassistant.service docs {{< pr number="209" repo="esphome-docs" >}} by {{< ghuser name="davericher" >}} -- esphome: Upgrade ESPAsyncTCP to 1.2.0 {{< pr number="497" repo="esphome" >}} -- core: Upgrade espasynctcp :corepr:`576` -- esphome: Fix dashboard wizard unicode {{< pr number="494" repo="esphome" >}} -- esphome: Fix text sensor MQTT settings {{< pr number="495" repo="esphome" >}} -- core: Split up WiFi ESP32 and ESP8266 implementation :corepr:`572` -- core: Fix MCP23017 to work on OUTPUT mode. :corepr:`571` by {{< ghuser name="puerari" >}} -- core: Disable wifi interface on shutdown :corepr:`566` -- core: Fix light flashes :corepr:`578` -- core: Rewrite PN532 to fix some lowvbat issues :corepr:`575` -- core: cse7766 fix :corepr:`558` by {{< ghuser name="brianrjones69" >}} -- esphome: Upgrade docker base image to 1.4.3 {{< pr number="499" repo="esphome" >}} -- core: Fix neopixelbus logging causes section type conflict :corepr:`579` - -## All changes - -- core: Fix feed_wdt :corepr:`520` -- core: Speed up waveshare Epaper :corepr:`518` -- esphome: Improve dashboard setup wizard {{< pr number="450" repo="esphome" >}} -- core: Add MPR121 support for esphome-core :corepr:`517` by {{< ghuser name="mvturnho" >}} -- esphome: Add MPR121 Capacitive Touch Sensor {{< pr number="449" repo="esphome" >}} by {{< ghuser name="mvturnho" >}} -- core: Add restore state from flash option :corepr:`530` -- esphome: Add restore state from flash option {{< pr number="459" repo="esphome" >}} -- docs: Add restore state from flash option {{< pr number="181" repo="esphome-docs" >}} -- esphome: Automatically hide secrets in validation {{< pr number="455" repo="esphome" >}} -- core: Add nextion commands :corepr:`523` -- core: Add logic in Output for minimum power setting :corepr:`516` by {{< ghuser name="mtl010957" >}} -- esphome: Add handling for min power output setting {{< pr number="448" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} -- docs: Update output documentation for min_power configuration {{< pr number="167" repo="esphome-docs" >}} by {{< ghuser name="mtl010957" >}} -- esphome: Recommend similar keys for spelling errors {{< pr number="458" repo="esphome" >}} -- core: Convert Automation engine to variadic templates :corepr:`519` -- core: Add linear calibration filter :corepr:`524` -- esphome: Convert automation engine to use variadic templates {{< pr number="452" repo="esphome" >}} -- docs: Add linear calibration filter {{< pr number="180" repo="esphome-docs" >}} -- core: Add native API User-Defined services :corepr:`522` -- esphome: Add native API User-Defined services {{< pr number="453" repo="esphome" >}} -- esphome: Add linear calibration sensor filter {{< pr number="454" repo="esphome" >}} -- docs: Component reshuffle {{< pr number="183" repo="esphome-docs" >}} by {{< ghuser name="FrengerH" >}} -- docs: Add MPR121 support {{< pr number="176" repo="esphome-docs" >}} by {{< ghuser name="mvturnho" >}} -- esphome: Fix os.symlink on Windows {{< pr number="460" repo="esphome" >}} -- esphome: Enable i2c scanning by default {{< pr number="462" repo="esphome" >}} -- core: Add rotary encoder min/max value :corepr:`534` -- esphome: Add rotary encoder min/max value {{< pr number="463" repo="esphome" >}} -- esphome: Fix gain setting for ADS1115 {{< pr number="468" repo="esphome" >}} by {{< ghuser name="Melkor82" >}} -- core: Use clang-format and clang-tidy in CI :corepr:`540` -- core: Add GPIO interrupt abstraction :corepr:`535` -- core: Add MCP23017 :corepr:`537` -- core: Add WiFi/MQTT/API connected condition :corepr:`536` -- core: Fix debug statement in ESP32 Hall Sensor :corepr:`533` by {{< ghuser name="emwap" >}} -- core: Remove light mqtt_json warning :corepr:`532` -- esphome: Add WiFi/MQTT/API connected condition {{< pr number="465" repo="esphome" >}} -- esphome: Rewrite interrupt components {{< pr number="464" repo="esphome" >}} -- esphome: Add relative_url, streamer_mode, status_use_ping dashboard options {{< pr number="461" repo="esphome" >}} -- esphome: Add MCP23017 {{< pr number="466" repo="esphome" >}} -- esphome: Allow Arduino Core 2.5.0 for ESP8266 {{< pr number="469" repo="esphome" >}} -- core: Add copy output platform :corepr:`542` -- core: Add 'for' to binary sensor conditions :corepr:`541` -- esphome: Upgrade ESP32 core to 1.0.1 {{< pr number="470" repo="esphome" >}} -- core: Add WiFi Info Text Sensor :corepr:`543` -- esphome: Add for to binary sensor conditions {{< pr number="471" repo="esphome" >}} -- esphome: Add connected condition {{< pr number="474" repo="esphome" >}} -- esphome: Add copy output platform {{< pr number="472" repo="esphome" >}} -- esphome: Add Wifi info text sensor {{< pr number="473" repo="esphome" >}} -- docs: Add text-based sensor example to OLED cookbook entry {{< pr number="190" repo="esphome-docs" >}} by {{< ghuser name="tubalainen" >}} -- docs: H801 Cookbook Edit Language about holding GPIOs during flashing {{< pr number="189" repo="esphome-docs" >}} by {{< ghuser name="2016for" >}} -- docs: Adding manual for Sonoff T1 UK 3 Gang V1.1 {{< pr number="182" repo="esphome-docs" >}} by {{< ghuser name="nnmalex" >}} -- core: Add SDS011 :corepr:`538` by {{< ghuser name="puuu" >}} -- esphome: Support SDS011 component. {{< pr number="467" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- docs: Document SDS011 component {{< pr number="185" repo="esphome-docs" >}} by {{< ghuser name="puuu" >}} -- docs: Add Teckin SP20 (US) example to 'Generic Sonoff' page {{< pr number="191" repo="esphome-docs" >}} by {{< ghuser name="mjoshd" >}} -- esphome: Add color to login error for better visibility {{< pr number="478" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} -- core: Fixed: Waveshare 4.2in display timing problem due to high speed SPI u… :corepr:`546` by {{< ghuser name="dirkj" >}} -- docs: Update information on flashing OTA to old ip {{< pr number="193" repo="esphome-docs" >}} by {{< ghuser name="tubalainen" >}} -- docs: NeopixelBus Light: Fix GPIO2 not GPIO3 for uart1 method {{< pr number="194" repo="esphome-docs" >}} by {{< ghuser name="Bierchermuesli" >}} -- docs: Cookbook Guide for Mirabella Genio Smart Bulbs {{< pr number="184" repo="esphome-docs" >}} by {{< ghuser name="cryptelli" >}} -- docs: Improve bme280_environment cookbook for stable climates {{< pr number="149" repo="esphome-docs" >}} by {{< ghuser name="hajdbo" >}} -- core: SDS011: change type of update_interval_min to uint8_t :corepr:`545` by {{< ghuser name="puuu" >}} -- core: Add ESP32 camera support :corepr:`544` -- docs: Cookbook Guide for Brilliant / Mirabella Genio Smart Plugs {{< pr number="195" repo="esphome-docs" >}} by {{< ghuser name="cryptelli" >}} -- esphome: Add ESP32 Camera {{< pr number="475" repo="esphome" >}} -- docs: Add native API User-Defined services {{< pr number="171" repo="esphome-docs" >}} (cherry-picked) -- docs: BME280 environment micrograms -> grams {{< pr number="198" repo="esphome-docs" >}} by {{< ghuser name="hajdbo" >}} -- esphome: Changes for 1.12 {{< pr number="482" repo="esphome" >}} (cherry-picked) -- core: Fixes for 1.12 :corepr:`551` (cherry-picked) -- core: More changes for 1.12 :corepr:`552` -- esphome: More changes for 1.12 {{< pr number="483" repo="esphome" >}} -- esphome: Update Hassio base image to 1.4.1 {{< pr number="484" repo="esphome" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.13.0.md b/content/changelog/v1.13.0.md deleted file mode 100644 index 480a185a53..0000000000 --- a/content/changelog/v1.13.0.md +++ /dev/null @@ -1,290 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.13.0." -title: "Changelog - Version 1.13.0 - May 30th 2019" -params: - seo: - description: Changelog for ESPHome version 1.13.0. - image: /_static/changelog-1.13.0.png ---- - - -{{< imgtable >}} -"Climate Devices","components/climate/index","folder-open.svg","dark-invert" -"Endstop Cover","components/cover/endstop","electric-switch.svg","dark-invert" -"Time-Based Cover","components/cover/time_based","timer.svg","dark-invert" -"Bang Bang Controller","components/climate/bang_bang","air-conditioner.svg","dark-invert" -"AM2320","components/sensor/am2320","am2320.jpg","" -"CCS811","components/sensor/ccs811","ccs811.jpg","" -"Integration","components/sensor/integration","sigma.svg","dark-invert" -"Pulse Width","components/sensor/pulse_width","pulse.svg","dark-invert" -"Resistance Sensor","components/sensor/resistance","omega.svg","dark-invert" -"NTC Thermistor","components/sensor/ntc","ntc.jpg","" -"CT Clamp","components/sensor/ct_clamp","ct_clamp.jpg","" -"Binary Sensor Map","components/sensor/binary_sensor_map","binary_sensor_map.jpg","" -"TTP229","components/binary_sensor/ttp229","ttp229.jpg","" -"Coolix IR Remote","components/climate/climate_ir","air-conditioner.svg","dark-invert" -"Tcl112 IR Remote","components/climate/climate_ir","air-conditioner.svg","dark-invert" -"Sun","components/sun","weather-sunny.svg","dark-invert" -"GPS Time Source","components/gps","crosshairs-gps.svg","dark-invert" -"Custom Light","components/light/custom","language-cpp.svg","dark-invert" -"Custom Cover","components/cover/custom","language-cpp.svg","dark-invert" -"Custom Climate","components/climate/custom","language-cpp.svg","dark-invert" -{{< /imgtable >}} -Oh hi there! - -It's been a while since the last release (once again 😅). But I hope you'll be excited -to hear what's new in this latest release of ESPHome: 1.13.0! - -First of all, as you can see in the table above, a *ton* of new components have been added. Some to -highlight are: - -- **Cover Updates**: Covers now support setting arbitrary position (and the new time-based and endstop covers - make full use of it). - -- **Climate Support**: ESPHome now has a full climate abstraction - with the "bang bang" climate device - you can automate thermostats directly on the ESP. - -- **Sun, GPS** etc - This release brings a lot of helper components too of course. - -But... the biggest change in this version has yet to be mentioned here: A complete refactor of the -ESPHome codebase. Remember the project rename in 1.11? It's nothing compared to the latest and greatest -[code refactor](https://github.com/esphome/esphome/pull/504). ESPHome has gotten a completely new -directory structure, and the codebase has been simplified a lot. - -**What does this mean for you?** - -Well, you'll be happy to hear that this refactor improves **compile times** by around **2x**. -Additionally, these changes will make contributing a lot easier, because now the code is much more -modular. - -**But it doesn't stop there!** - -This release also brings another awesome new feature: Live validation! If you use the editor in the -ESPHome dashboard, your configuration will be validated on-the-fly and any validation errors -are shown directly in the editor in less than half a second! - -{{< img src="live-validation.png" alt="Image" width="70.0%" class="align-center" >}} - -I also want to give special shout outs to these awesome people who have contributed a lot of -features in this version: - -- {{< ghuser name="gitolicious" >}} for his awesome work on improving the dashboard! -- {{< ghuser name="mvturnho" >}} for the new TTP219 and binary sensor map additions! -- {{< ghuser name="glmnet" >}} for adding the TCL112 and Coolix climate platforms, as well {{< ghuser name="puuu" >}} - for pushing ahead with the climate component! - -- Everyone who has been supporting me financially over [Patreon](https://www.patreon.com/ottowinter)! -- Everybody who reported bugs, contributed documentation and fixed things! - -If you like this version, please consider starring the [ESPHome repository](https://github.com/esphome/esphome) -on Github 💫! - -## Other notable changes - -- Hass.io Ingress - ESPHome now supports showing the dashboard directly in the Home Assistant frontend - via the Hass.io Ingress feature. - -- The i2c variant of the ttp229 device is now also supported. -- Covers now support position & tilt - you can use these with the new {{< docref "/components/cover/endstop" "endstop" >}} - and {{< docref "/components/cover/time_based" "time-based" >}} cover platforms. - -- ESPHome has received support for climate devices, you can now let your ESP control heaters/coolers - directly on the ESP. Great for building a DIY thermostat or making an existing one IoT-enabled. - -- {{< docref "/components/light/index" "Lights" >}} now have some new actions: `light.dim_relative` and - `light.addressable_set`. Addressable lights now also support a new range syntax (`.range()` and `.all()` ) - functions to allow easier effect creation. - -- Added a new custom component mechanism and contribution guidelines have been updated. -- {{< docref "/components/binary_sensor/rdm6300" "RDM6300" >}} now also has an `on_tag` trigger like the PN532. -- {{< docref "/components/remote_transmitter" "Remote Transmitter" >}} and {{< docref "/components/remote_receiver" "Remote Receiver" >}} - have gotten some new features: custom triggers and actions with templatable values. - -- Added `output.esp8266_pwm.set_frequency` action for dynamically changing the frequency of the ESP8266 - PWM output (for example for active buzzers). - -- Added `servo.detach` action to disable a servo - this prevents it from moving around once it's in position. -- Added `stepper.set_speed` to dynamically change a stepper's speed at runtime. -- Added `text_sensor.state` condition for checking a text sensor's state against a fixed value. -- Added [globals.set](/components/globals#globals-set_action) action, - [script.is_running](/components/script#script-is_running_condition) condition, - [for](/automations/actions#for_condition) condition. - -- Custom components can now access ESPHome's global variables. -- Added `restore_mode` for lights and [light.is_on/off](/components/light#light-is_on_condition). - -## Breaking Changes - -All of these are also documented in validation - just view the validation output and it should tell -you what has changed. - -- `esphome_core_version` has been removed - ESPHome is no longer split up in the core and python repository. -- The `esp32_ble_tracker` binary sensor platform (not the global hub) has been renamed to `ble_presence`. -- The remote transmitter switch has been removed and a template switch with the new actions should be used. - See validation output. - -- `esphome_core_version` has been removed - ESPHome is no longer split up in the core and python repository. -- Because of some internal changes, some ID names are used internally and can no longer be used. - See validation errors. - -## Release 1.13.1 - May 30 - -- esphome: Fix validation TypeError {{< pr number="574" repo="esphome" >}} -- esphome: Fix Sun Trigger {{< pr number="572" repo="esphome" >}} -- esphome: Dashboard work around Hass.io bug {{< pr number="575" repo="esphome" >}} -- esphome: Fix waveshare 7.5in model {{< pr number="576" repo="esphome" >}} - -## Release 1.13.2 - May 31 - -- esphome: Fix remote_receiver binary_sensor schema {{< pr number="578" repo="esphome" >}} -- esphome: Fix MQTT client_id changed {{< pr number="579" repo="esphome" >}} -- esphome: Fix Rotary Encoder {{< pr number="580" repo="esphome" >}} -- esphome: Fix travis build {{< pr number="582" repo="esphome" >}} -- esphome: Fix MQTT on_message trigger {{< pr number="583" repo="esphome" >}} -- esphome: Fix light partition {{< pr number="584" repo="esphome" >}} -- esphome: Fix i2c setup priority {{< pr number="585" repo="esphome" >}} -- docs: add note for asynchronously update of adc {{< pr number="259" repo="esphome-docs" >}} by {{< ghuser name="escoand" >}} - -## Release 1.13.3 - June 1 - -- esphome: List the correct boards when building for ESP32 {{< pr number="589" repo="esphome" >}} by {{< ghuser name="macourteau" >}} -- esphome: Fix addressable effects {{< pr number="590" repo="esphome" >}} -- esphome: Fix scripts circular dependency {{< pr number="591" repo="esphome" >}} -- esphome: Fix timezone detection for timezones without daylight savings time {{< pr number="586" repo="esphome" >}} -- esphome: Fix remote_receiver binary_sensor {{< pr number="592" repo="esphome" >}} -- docs: Add missing filter name for ct_clamp {{< pr number="258" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Fix flicker light effect turning itself off {{< pr number="594" repo="esphome" >}} -- esphome: Fix medium fan speed {{< pr number="595" repo="esphome" >}} -- esphome: Fix dashboard for Py3 installs {{< pr number="596" repo="esphome" >}} - -## Release 1.13.4 - June 3 - -- esphome: Add better esphomeyaml migration path {{< pr number="600" repo="esphome" >}} -- esphome: Allow old remote_transmitter repeat schema {{< pr number="601" repo="esphome" >}} -- esphome: Fix color wipe effect {{< pr number="599" repo="esphome" >}} -- docs: Update integration.rst {{< pr number="263" repo="esphome-docs" >}} by {{< ghuser name="balk77" >}} -- esphome: Fix hx711 {{< pr number="602" repo="esphome" >}} -- esphome: Fix validation infinite loop with empty platform block {{< pr number="598" repo="esphome" >}} -- esphome: Fix ADS1115 calculation {{< pr number="606" repo="esphome" >}} -- esphome: ESP8266 connect fixes {{< pr number="605" repo="esphome" >}} - -## Release 1.13.5 - June 8 - -- esphome: Move ESPHome version define {{< pr number="607" repo="esphome" >}} -- esphome: Fix ForCondition time duration check {{< pr number="610" repo="esphome" >}} by {{< ghuser name="ptatrai" >}} -- docs: Add timezone mapping to Docker compose. {{< pr number="266" repo="esphome-docs" >}} by {{< ghuser name="jeff-h" >}} -- esphome: DHT22 ignore invalid values {{< pr number="614" repo="esphome" >}} -- esphome: Template Cover don't auto-set current_operation {{< pr number="612" repo="esphome" >}} -- esphome: Fix Hass.io addon SSL {{< pr number="613" repo="esphome" >}} -- esphome: Fix remote_receiver always shows sony {{< pr number="617" repo="esphome" >}} -- esphome: Make ForCondition a component {{< pr number="616" repo="esphome" >}} -- esphome: Update docker base image to 1.8.0 {{< pr number="618" repo="esphome" >}} -- esphome: Fix integration sensor, add test {{< pr number="619" repo="esphome" >}} -- esphome: Fix sun default elevation {{< pr number="620" repo="esphome" >}} -- esphome: Update base image to 1.8.3 {{< pr number="625" repo="esphome" >}} -- esphome: Fix status binary sensor for MQTT {{< pr number="628" repo="esphome" >}} -- esphome: Work around ESP32 BLE issue {{< pr number="626" repo="esphome" >}} -- esphome: Work around ESP32 core WiFi Bug {{< pr number="627" repo="esphome" >}} - -## Release 1.13.6 - June 14 - -- docs: Lambas won't just work with the short name {{< pr number="269" repo="esphome-docs" >}} by {{< ghuser name="ryannazaretian" >}} -- esphome: Fix ESP32 RCSwitch Dump Stack Smash Protection {{< pr number="636" repo="esphome" >}} -- esphome: Fix russia timezone detection {{< pr number="637" repo="esphome" >}} -- esphome: Fix esp8266_restore_from_flash {{< pr number="638" repo="esphome" >}} -- esphome: Fix globals.set {{< pr number="635" repo="esphome" >}} -- esphome: Fix version.h file {{< pr number="630" repo="esphome" >}} -- esphome: Fix remote_receiver raw binary sensor {{< pr number="639" repo="esphome" >}} -- esphome: Re-add CustomMQTTDevice class {{< pr number="640" repo="esphome" >}} - -## All changes - -- docs: Extend the documentation of esp8266_restore_from_flash to include pla… {{< pr number="203" repo="esphome-docs" >}} by {{< ghuser name="placidorevilla" >}} -- esphome: TTP229-LSF i2c device support {{< pr number="489" repo="esphome" >}} by {{< ghuser name="mvturnho" >}} -- docs: TTP229-LSF i2c device support {{< pr number="205" repo="esphome-docs" >}} by {{< ghuser name="mvturnho" >}} -- docs: Remove deprecated filter_nan: option {{< pr number="214" repo="esphome-docs" >}} by {{< ghuser name="davericher" >}} -- docs: Minor Gramatical fix {{< pr number="220" repo="esphome-docs" >}} by {{< ghuser name="meichthys" >}} -- esphome: Add cover position/tilt support {{< pr number="496" repo="esphome" >}} -- esphome: Add climate support {{< pr number="502" repo="esphome" >}} -- esphome: Add 'at' time trigger {{< pr number="493" repo="esphome" >}} -- docs: Stepper combine lambda docs {{< pr number="223" repo="esphome-docs" >}} by {{< ghuser name="AalianKhan" >}} -- esphome: Simplify coroutine syntax {{< pr number="503" repo="esphome" >}} -- docs: Added a section for all lambda calls {{< pr number="222" repo="esphome-docs" >}} by {{< ghuser name="AalianKhan" >}} -- docs: Typo in ESP32 Touch Component {{< pr number="216" repo="esphome-docs" >}} by {{< ghuser name="jcullen86" >}} -- docs: MQTT clean-mqtt: Document for docker {{< pr number="210" repo="esphome-docs" >}} by {{< ghuser name="bphermansson" >}} -- esphome: Wio_link and wio_node pinout improvements {{< pr number="505" repo="esphome" >}} by {{< ghuser name="sethcohn" >}} -- docs: Voltage range of ADC is at the chip pin {{< pr number="224" repo="esphome-docs" >}} by {{< ghuser name="kimonm" >}} -- esphome: Escape double quotes and backslashes in ssid and psk {{< pr number="507" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- docs: Added Gitpod documentation {{< pr number="225" repo="esphome-docs" >}} by {{< ghuser name="gitolicious" >}} -- docs: Fixed lint and ref errors {{< pr number="228" repo="esphome-docs" >}} by {{< ghuser name="gitolicious" >}} -- esphome: 🏗 Merge C++ into python codebase {{< pr number="504" repo="esphome" >}} -- docs: Create .gitpod.yml {{< pr number="226" repo="esphome-docs" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Cleanup dashboard JS {{< pr number="491" repo="esphome" >}} -- docs: Add esp32_camera ttgo-camera example {{< pr number="231" repo="esphome-docs" >}} by {{< ghuser name="Naesstrom" >}} -- esphome: Hass.io Ingress {{< pr number="519" repo="esphome" >}} -- docs: Fix config name for showing previous page {{< pr number="238" repo="esphome-docs" >}} by {{< ghuser name="kevinior" >}} -- docs: fixed copy paste error {{< pr number="237" repo="esphome-docs" >}} by {{< ghuser name="norges" >}} -- docs: Update switch/index.rst lambda section {{< pr number="236" repo="esphome-docs" >}} by {{< ghuser name="EmmanuelLM" >}} -- docs: Update h801 cookbook {{< pr number="235" repo="esphome-docs" >}} by {{< ghuser name="Eenoo" >}} -- esphome: Create .gitpod.yml {{< pr number="508" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Fix MQTT Not Working in dev branch {{< pr number="527" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} -- esphome: Fix custom_sensor codegen {{< pr number="526" repo="esphome" >}} by {{< ghuser name="emwap" >}} -- esphome: Fix compilation of automations {{< pr number="525" repo="esphome" >}} by {{< ghuser name="envy" >}} -- esphome: Add Custom Component tests {{< pr number="529" repo="esphome" >}} by {{< ghuser name="emwap" >}} -- esphome: Create .editorconfig {{< pr number="524" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- docs: Fix minor typo in ESP32 camera docs {{< pr number="241" repo="esphome-docs" >}} by {{< ghuser name="richrd" >}} -- esphome: Added save & validate button in editor window {{< pr number="511" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Fix compilation of my9231 component {{< pr number="533" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- esphome: Allow rx_only mode of sds011 component {{< pr number="534" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- esphome: MPU6050 fix temperature reading (wrong datatype) {{< pr number="532" repo="esphome" >}} by {{< ghuser name="norges" >}} -- esphome: Check lambdas for return statement {{< pr number="539" repo="esphome" >}} -- esphome: Auto-Generate esphome.h {{< pr number="538" repo="esphome" >}} -- esphome: Revert HLW8012 to use pulse counter {{< pr number="537" repo="esphome" >}} -- esphome: Use int_range validator {{< pr number="542" repo="esphome" >}} -- esphome: Dashboard editor live validation {{< pr number="540" repo="esphome" >}} -- esphome: Sun support {{< pr number="531" repo="esphome" >}} -- esphome: Update CI linter {{< pr number="544" repo="esphome" >}} -- esphome: Updates for 1.13 {{< pr number="546" repo="esphome" >}} -- esphome: Make Climate component work over mqtt {{< pr number="535" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- esphome: CCS811 support {{< pr number="536" repo="esphome" >}} -- esphome: GPS time source {{< pr number="543" repo="esphome" >}} -- esphome: TTP229 BSF support {{< pr number="547" repo="esphome" >}} -- docs: Update links {{< pr number="243" repo="esphome-docs" >}} by {{< ghuser name="oscar-b" >}} -- esphome: Bme680 pressure value fix {{< pr number="550" repo="esphome" >}} by {{< ghuser name="plopp" >}} -- docs: Fix typo in docs mi flora {{< pr number="250" repo="esphome-docs" >}} by {{< ghuser name="seuros" >}} -- docs: Stepper component: fix typo in doc {{< pr number="254" repo="esphome-docs" >}} by {{< ghuser name="Johboh" >}} -- esphome: Suggested fix for empty domain {{< pr number="555" repo="esphome" >}} by {{< ghuser name="ASMfreaK" >}} -- docs: Sensor: correct example for on_raw_value {{< pr number="255" repo="esphome-docs" >}} by {{< ghuser name="Johboh" >}} -- docs: Update bh1750.rst (fix incorrect link text) {{< pr number="246" repo="esphome-docs" >}} by {{< ghuser name="richrd" >}} -- esphome: Don't fall back to the global availability topic if it is empty {{< pr number="553" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- esphome: Add examples to Nextion page {{< pr number="548" repo="esphome" >}} by {{< ghuser name="AalianKhan" >}} -- esphome: Support for AM2320 temperature and humidity sensor {{< pr number="554" repo="esphome" >}} by {{< ghuser name="T3m3z" >}} -- docs: Documentation for AM2320 component {{< pr number="249" repo="esphome-docs" >}} by {{< ghuser name="T3m3z" >}} -- esphome: Add TCL112 climate {{< pr number="523" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Add Coolix Tcl112 Climate {{< pr number="247" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add coolix climate ❄ 🔥 {{< pr number="521" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: added link from dashboard to web server, if configured {{< pr number="556" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} (cherry-picked) -- esphome: Add NTC and resistance sensor {{< pr number="560" repo="esphome" >}} (cherry-picked) -- esphome: Waveshare enter deep sleep mode on shutdown {{< pr number="561" repo="esphome" >}} (cherry-picked) -- docs: extended mpr121 docs with debounce and thresholds config {{< pr number="245" repo="esphome-docs" >}} by {{< ghuser name="mvturnho" >}} (cherry-picked) -- esphome: Mpr121 added debounce and thresholds config {{< pr number="558" repo="esphome" >}} by {{< ghuser name="mvturnho" >}} (cherry-picked) -- docs: Documentation for binary_sensor_map {{< pr number="199" repo="esphome-docs" >}} by {{< ghuser name="mvturnho" >}} (cherry-picked) -- esphome: Binary sensor map implementation {{< pr number="551" repo="esphome" >}} by {{< ghuser name="mvturnho" >}} (cherry-picked) -- esphome: Fix CWWW/RGBWW lights {{< pr number="562" repo="esphome" >}} (cherry-picked) -- esphome: added download, edit and retry buttons to upload modal {{< pr number="557" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} (cherry-picked) -- esphome: Renamed upload button {{< pr number="563" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Warn if a component does long-running work in loop thread {{< pr number="565" repo="esphome" >}} -- esphome: Add CT Clamp component {{< pr number="559" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Add docs for CT Clamp {{< pr number="256" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Put 'MAC_ADDRESS' instead of MAC_ADDRESS {{< pr number="239" repo="esphome-docs" >}} by {{< ghuser name="tiagofreire-pt" >}} -- esphome: Fix TSL2561 invalid default {{< pr number="566" repo="esphome" >}} -- esphome: Use copy for custom includes {{< pr number="568" repo="esphome" >}} -- esphome: Add uart.write action {{< pr number="567" repo="esphome" >}} -- esphome: Correctly set warm white variables {{< pr number="569" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Register light conditions {{< pr number="570" repo="esphome" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.14.0.md b/content/changelog/v1.14.0.md deleted file mode 100644 index bb61b66296..0000000000 --- a/content/changelog/v1.14.0.md +++ /dev/null @@ -1,563 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.14.0." -title: "Changelog - Version 1.14.0 - November 1" -params: - seo: - description: Changelog for ESPHome version 1.14.0. - image: /_static/changelog-1.14.0.png ---- - - -{{< imgtable >}} -"Captive Portal","components/captive_portal","wifi-strength-alert-outline.svg","dark-invert" -"Visual Studio Code Plugin","https -//marketplace.visualstudio.com/items?itemName=ESPHome.esphome-vscode","visual-studio-code.svg","dark-invert" -"SIM800L","components/sim800l","sim800l.jpg","" -"DFPlayer","components/dfplayer","dfplayer.svg","dark-invert" -"AS3935","components/sensor/as3935","as3935.jpg","" -"ATM90E32","components/sensor/atm90e32","atm90e32.jpg","" -"PZEM004T","components/sensor/pzem004t","pzem004t.svg","" -"PZEM AC","components/sensor/pzemac","pzem-ac.jpg","" -"PZEM DC","components/sensor/pzemdc","pzem-dc.jpg","" -"ADE7953","components/sensor/ade7953","ade7953.svg","" -"SenseAir","components/sensor/senseair","senseair_s8.jpg","" -"SCD30","components/sensor/scd30","scd30.jpg","" -"SHTCx","components/sensor/shtcx","shtc3.jpg","" -"STS3X","components/sensor/sts3x","sts3x.jpg","" -"SGP30","components/sensor/sgp30","sgp30.jpg","" -"Tx20","components/sensor/tx20","tx20.jpg","" -"VL53L0x","components/sensor/vl53l0x","vl53l0x.jpg","" -"Xiaomi CGG1","components/sensor/xiaomi_ble","xiaomi_cgg1.jpg","" -"Xiaomi LYWSD02","components/sensor/xiaomi_ble","xiaomi_lywsd02.jpg","" -"ZyAura","components/sensor/zyaura","zgm053.jpg","" -"TLC59208F","components/output/tlc59208f","tlc59208f.jpg","" -"SM16716","components/output/sm16716","sm16716.svg","" -"Tuya Dimmer","components/light/tuya","brightness-medium.svg","dark-invert" -"SSD1325","components/display/ssd1325","ssd1325.jpg","" -"Yashima IR Remote","components/climate/climate_ir","air-conditioner.svg","dark-invert" -"MCP23008 I/O Expander","components/mcp230xx","mcp230xx.svg","" -"SX1509 I/O Expander","components/sx1509","sx1509.jpg","" -{{< /imgtable >}} -So... it's been a while since the last release... - -But today - november 1 - the wait has finally ended! We're proud to announce ESPHome 1.14, -a release with the most features additions to date thanks to a ton of contributors! - -## Captive Portal - -First, we've heard your feedback in the feature request tracker. One of the highest requested -features has been to add a WiFi captive portal (also called "WiFiManager") capability to ESPHome. - -{{< img src="captive_portal-ui.png" alt="Image" width="60.0%" class="align-center" >}} - -With the new {{< docref "/components/captive_portal" "captive portal" >}} component you can set up a fallback -WiFi hotspot that gets created if the ESP fails to connect to the WiFi network. If you're creating -a new device this is automatically enabled. To add this feature existing devices check out the -{{< docref "/components/captive_portal" "captive portal example" >}}. - -## VSCode Plugin & New Integrations - -{{< ghuser name="glmnet" >}} has been very active in the ESPHome community - he not only managed a ton -of bug reports and feature requests, he also implemented some very interesting features: - -- ESPHome now has a working VSCode plugin with live config validation support! - Check out the [ESPHome plugin on the VSCode marketplace](https://marketplace.visualstudio.com/items?itemName=ESPHome.esphome-vscode). - -- The new {{< docref "/components/sim800l" "SIM800L integration" >}} lets you send SMS and - with {{< docref "/components/dfplayer" "DF-Player" >}} you can play some music from your ESP 🎵 - -{{< img src="vscode-validation.png" alt="Image" width="60.0%" class="align-center" >}} - -Thank you {{< ghuser name="glmnet" >}} for your work! - -## New Sensors - -As you can see in the grid at the top of this page, there's been no shortage of sensors either! -There are all kinds of new sensor types here: from {{< docref "/components/sensor/as3935" "lightning detectors ⚡️" >}}, -the laser distance measuring {{< docref "/components/sensor/vl53l0x" "vl53l0x" >}} to various environmental -sensors (thanks {{< ghuser name="TheEggi" >}}, {{< ghuser name="valordk" >}}!). - -In list of supported power measuring chips has grown a lot with the 3-channel {{< docref "/components/sensor/atm90e32" "ATM90E32" >}}, -various PZEM-004Ts and the power monitoring chip in the {{< docref "/components/sensor/ade7953" "Shelly 2.5" >}} -(thanks {{< ghuser name="thompsa" >}} {{< ghuser name="tsunglung" >}}!). - -Of course there's a lot more features in this release that didn't fit here anymore. -Just to name a few: new Xiaomi BLE devices are supported, the -{{< docref "/components/light/tuya" "Tuya MCU protocol" >}} (thanks {{< ghuser name="ssieb" >}} and {{< ghuser name="brandond" >}}!) has been added and major -architectural parts of the ESPHome native API have changed to allow for faster -development. - -Oh, and before we forget: ESPHome has reached 1.000 stars on GitHub! - -{{< img src="github-1000-stars.png" alt="Image" width="75.0%" class="align-center" >}} - -As always, thanks to all contributors, bug reporters and patrons! Without you this would not -be possible! - -### Breaking Changes - -- We have deprecated support for Python 2 installs. 1.14.x will still work with Python 2, - but will print a warning. Starting with 1.15.0, ESPHome will require at least Python 3.6. - Note: The Docker/Hass.io addon images already use Python 3 ({{< pr number="784" repo="esphome" >}}, {{< pr number="774" repo="esphome" >}}). - -- The `xiaomi_` BLE platforms have been renamed to match their model numbers ({{< pr number="755" repo="esphome" >}}). - - - `xiaomi_mijia` -> {{< docref "/components/sensor/xiaomi_lywsdcgq" "xiaomi_lywsdcgq" >}} - - `xiaomi_miflora` -> {{< docref "/components/sensor/xiaomi_hhccjcy01" "xiaomi_hhccjcy01" >}} - -- As part of the addition of the captive portal component, the default `reboot_timeout` for - `wifi` has been increased to 15 minutes from the previous 5 minutes ({{< pr number="624" repo="esphome" >}}). - -- The ESP32 LEDC `bit_depth` option has been removed. The best bit depth is now dynamically - calculated ({{< pr number="754" repo="esphome" >}}, {{< docref "/components/output/ledc" "docs" >}}). - -- For {{< docref "/components/pcf8574" "pcf8574" >}}, the `INPUT_PULLUP` option has been removed and replaced - with `INPUT` ({{< pr number="828" repo="esphome" >}}, {{< docref "/components/pcf8574" "docs" >}}). - -### Release 1.14.1 - November 2 - -- docs: DIY Examples page {{< pr number="395" repo="esphome-docs" >}} -- esphome: refactored xiaomi ble data parsing {{< pr number="823" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} -- docs: Document UART stop_bits {{< pr number="396" repo="esphome-docs" >}} -- esphome: Fix wizard mkdir {{< pr number="824" repo="esphome" >}} -- esphome: Move native API enums to new namespace {{< pr number="825" repo="esphome" >}} -- esphome: Fix update-all input in dashboard {{< pr number="826" repo="esphome" >}} -- esphome: Remove PCF8574 input_pullup mode and cleanup {{< pr number="828" repo="esphome" >}} -- esphome: Add servo missing restore option to codegen {{< pr number="829" repo="esphome" >}} -- docs: Document missing servo restore option {{< pr number="398" repo="esphome-docs" >}} - -### Release 1.14.2 - November 3 - -- esphome: Fix weird ESP8266 wifi crashes {{< pr number="831" repo="esphome" >}} - -### Release 1.14.3 - November 17 - -- docs: Fix typo: as3935 sensor docs {{< pr number="401" repo="esphome-docs" >}} by {{< ghuser name="TheJulianJES" >}} -- docs: Remove references to scan_interval {{< pr number="400" repo="esphome-docs" >}} by {{< ghuser name="marrold" >}} -- esphome: ESP8266 remove default opmode check {{< pr number="835" repo="esphome" >}} -- esphome: WiFi AP apply manual ip settings {{< pr number="836" repo="esphome" >}} -- esphome: Fix ESP32 rotary encoder {{< pr number="834" repo="esphome" >}} -- esphome: Fix homeassistant.service schema lambda {{< pr number="833" repo="esphome" >}} -- esphome: Update platformio libraries {{< pr number="837" repo="esphome" >}} -- docs: Update brilliant-mirabella-genio-smart-plugs.rst - Added Gosund… {{< pr number="402" repo="esphome-docs" >}} by {{< ghuser name="Taigar2015" >}} -- esphome: Update variable in scheduler {{< pr number="838" repo="esphome" >}} -- esphome: Fix sun calculations for negative sun declination {{< pr number="839" repo="esphome" >}} -- docs: Update diy.rst {{< pr number="404" repo="esphome-docs" >}} by {{< ghuser name="kvvoff" >}} -- docs: DIY Examples : add Custom ESPHome for Wofea Alarm {{< pr number="405" repo="esphome-docs" >}} by {{< ghuser name="nbergont" >}} -- docs: Update Mirabella Genio red LED GPIO {{< pr number="406" repo="esphome-docs" >}} by {{< ghuser name="ankycooper" >}} -- esphome: fix missing checks of is_playing condition {{< pr number="844" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Update lcd_display.rst {{< pr number="411" repo="esphome-docs" >}} by {{< ghuser name="Destix" >}} -- esphome: Add wifi output_power setting {{< pr number="853" repo="esphome" >}} -- esphome: Add missing state attribute {{< pr number="851" repo="esphome" >}} -- esphome: Fix neopixelbus missing method pins {{< pr number="848" repo="esphome" >}} -- esphome: Fix sensor force_update native API {{< pr number="847" repo="esphome" >}} -- esphome: Web server CORS headers {{< pr number="840" repo="esphome" >}} -- esphome: Check DHT sensor exists before publishing {{< pr number="850" repo="esphome" >}} -- esphome: Adjust some units {{< pr number="852" repo="esphome" >}} -- esphome: Fix PZEM004T v2 {{< pr number="846" repo="esphome" >}} -- esphome: Mark python 3.5 support deprecated {{< pr number="849" repo="esphome" >}} -- docs: document the new has_position parameter for the template cover {{< pr number="410" repo="esphome-docs" >}} by {{< ghuser name="ssieb" >}} -- esphome: add position reporting to the template cover {{< pr number="821" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esphome: Atm90e32 pf fix {{< pr number="841" repo="esphome" >}} by {{< ghuser name="Diramu" >}} -- esphome: Switch to 115200 baud upload if 460800 fails {{< pr number="856" repo="esphome" >}} -- esphome: Fix logger uart conflict check {{< pr number="858" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- esphome: Tuya: Fix init sequence and handle wifi test command {{< pr number="820" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- docs: add Topersun smart plug {{< pr number="413" repo="esphome-docs" >}} by {{< ghuser name="hmoffatt" >}} -- esphome: Improve WiFi disconnect messages {{< pr number="857" repo="esphome" >}} -- esphome: Fix MQTT python 3 stringify IPAddress Type {{< pr number="864" repo="esphome" >}} -- esphome: Revert ESP32 BLE Tracker defaults {{< pr number="863" repo="esphome" >}} -- esphome: Change ESP8266 default wifi output power {{< pr number="862" repo="esphome" >}} - -### Release 1.14.4 - June 5 - -- docs: Added Android Beacon MQTT app {{< pr number="417" repo="esphome-docs" >}} by {{< ghuser name="turbo-lab" >}} -- esphome: fix the problem of missing part of advertising packet when activ… {{< pr number="868" repo="esphome" >}} by {{< ghuser name="warpzone" >}} -- docs: dfplayer updates {{< pr number="421" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Fix time id conflict {{< pr number="418" repo="esphome-docs" >}} by {{< ghuser name="guiguid" >}} -- docs: Cookbook for Sonoff Light Switches {{< pr number="407" repo="esphome-docs" >}} by {{< ghuser name="bensuffolk" >}} -- esphome: fix climate_ir on receive optional {{< pr number="897" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix MQTT logs Int or String expected Python 3 {{< pr number="898" repo="esphome" >}} -- esphome: web_server call setup_controller {{< pr number="899" repo="esphome" >}} -- esphome: Ignore ESP32 Camera unknown framesizes {{< pr number="901" repo="esphome" >}} -- esphome: Update ESP32 BLE ADV parse to match BLE spec {{< pr number="904" repo="esphome" >}} -- esphome: Add ESP8266 core v2.6.2 {{< pr number="905" repo="esphome" >}} -- docs: Add doc for color correction of rgb* lights {{< pr number="431" repo="esphome-docs" >}} by {{< ghuser name="nickw444" >}} -- docs: Use .timestamp instead of .time in time docs {{< pr number="435" repo="esphome-docs" >}} by {{< ghuser name="davidjb" >}} -- docs: DIY Examples : Added SW420 Vibration Sensor with Remote Notifications {{< pr number="436" repo="esphome-docs" >}} by {{< ghuser name="rmooreID" >}} -- docs: Fix broken link {{< pr number="437" repo="esphome-docs" >}} by {{< ghuser name="richrd" >}} -- docs: Update getting_started_command_line.rst {{< pr number="461" repo="esphome-docs" >}} by {{< ghuser name="CyanoFresh" >}} -- docs: Added degree symbol output on ~ for MAX7219 {{< pr number="376" repo="esphome-docs" >}} by {{< ghuser name="cyberplant" >}} -- docs: change "tracker" to "presence" {{< pr number="465" repo="esphome-docs" >}} by {{< ghuser name="spattinson" >}} -- docs: On_sunrise was listed twice in description. {{< pr number="464" repo="esphome-docs" >}} by {{< ghuser name="Mechotronic" >}} -- docs: Patch 3 {{< pr number="460" repo="esphome-docs" >}} by {{< ghuser name="Valcob" >}} -- docs: fixed non working example {{< pr number="381" repo="esphome-docs" >}} by {{< ghuser name="danibjor" >}} -- docs: Added my custom component, now with correct syntax {{< pr number="454" repo="esphome-docs" >}} by {{< ghuser name="nldroid" >}} -- docs: faq reboot_timeout {{< pr number="472" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: my9231->bit_depth: parameter name and sonoff B1 {{< pr number="489" repo="esphome-docs" >}} by {{< ghuser name="anduchs" >}} -- docs: New DIY project about Cat Feeder {{< pr number="439" repo="esphome-docs" >}} by {{< ghuser name="rubengargar" >}} -- docs: Update diy.rst {{< pr number="493" repo="esphome-docs" >}} by {{< ghuser name="brianhanifin" >}} -- docs: Add my ESPHome configs {{< pr number="492" repo="esphome-docs" >}} by {{< ghuser name="nuttytree" >}} -- docs: Brightness feature not included in doc. {{< pr number="445" repo="esphome-docs" >}} by {{< ghuser name="tubalainen" >}} -- docs: remove apostrophe {{< pr number="504" repo="esphome-docs" >}} by {{< ghuser name="perjury" >}} -- docs: Add UART-based Mitsibishi HeatPump Component {{< pr number="506" repo="esphome-docs" >}} by {{< ghuser name="geoffdavis" >}} -- docs: Update pzemac.rst {{< pr number="495" repo="esphome-docs" >}} by {{< ghuser name="Francisk0" >}} -- docs: Fix link syntax {{< pr number="507" repo="esphome-docs" >}} by {{< ghuser name="geoffdavis" >}} -- docs: Typo fix {{< pr number="498" repo="esphome-docs" >}} by {{< ghuser name="napieraj" >}} -- docs: Fix some typos in Sonoff basic light switch {{< pr number="480" repo="esphome-docs" >}} by {{< ghuser name="kaykayehnn" >}} -- docs: Wrong IC {{< pr number="499" repo="esphome-docs" >}} by {{< ghuser name="Tuckie" >}} -- docs: small mistype fix {{< pr number="477" repo="esphome-docs" >}} by {{< ghuser name="trylika" >}} -- docs: Update sonoff.rst {{< pr number="470" repo="esphome-docs" >}} by {{< ghuser name="TBobsin" >}} -- docs: Update sonoff-t1-3.rst {{< pr number="497" repo="esphome-docs" >}} by {{< ghuser name="RockBomber" >}} -- docs: remove uppercase allowed in names {{< pr number="487" repo="esphome-docs" >}} by {{< ghuser name="truglodite" >}} -- docs: Update ssd1306.rst {{< pr number="481" repo="esphome-docs" >}} by {{< ghuser name="Valcob" >}} -- docs: Update board for Sonoff and link to Tasmota {{< pr number="484" repo="esphome-docs" >}} by {{< ghuser name="sillyfrog" >}} -- docs: Update migrate_sonoff_tasmota.rst {{< pr number="483" repo="esphome-docs" >}} by {{< ghuser name="jasonehines" >}} -- docs: added rgbww light using pwm driver {{< pr number="482" repo="esphome-docs" >}} by {{< ghuser name="morph027" >}} -- docs: add a note about the log level of dump: all {{< pr number="475" repo="esphome-docs" >}} by {{< ghuser name="drewp" >}} -- docs: ifan02 cookbook {{< pr number="218" repo="esphome-docs" >}} by {{< ghuser name="quazzie" >}} -- docs: Add documentation for cwww and rgbww constant_brightness variables. {{< pr number="530" repo="esphome-docs" >}} by {{< ghuser name="kroimon" >}} -- docs: remove link to Adafruit {{< pr number="531" repo="esphome-docs" >}} by {{< ghuser name="ebaschiera" >}} -- docs: Revert "Add documentation for cwww and rgbww constant_brightness vari… {{< pr number="539" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Add Stepper Motor blinds to diy examples {{< pr number="534" repo="esphome-docs" >}} by {{< ghuser name="icarome" >}} -- docs: Update sonoff.rst {{< pr number="549" repo="esphome-docs" >}} by {{< ghuser name="MrZetor" >}} -- docs: Improve LEDC documentation {{< pr number="557" repo="esphome-docs" >}} by {{< ghuser name="Skaronator" >}} -- docs: Update wifi.rst {{< pr number="562" repo="esphome-docs" >}} by {{< ghuser name="kbouchard111" >}} -- docs: Add unit_of_measurement to make graphing happens {{< pr number="569" repo="esphome-docs" >}} by {{< ghuser name="deftdawg" >}} -- docs: Simple grammar change. {{< pr number="578" repo="esphome-docs" >}} by {{< ghuser name="mnaz" >}} -- docs: Fix typos {{< pr number="561" repo="esphome-docs" >}} by {{< ghuser name="mje-nz" >}} -- docs: Adding example of how to use a buzzer {{< pr number="570" repo="esphome-docs" >}} by {{< ghuser name="declanshanaghy" >}} -- docs: Deleted Warning because the component is already tested {{< pr number="615" repo="esphome-docs" >}} by {{< ghuser name="deltazerorsan" >}} -- docs: Update datasheet URL on SHTCX page {{< pr number="598" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update datagram URL on TX20 page {{< pr number="599" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update datasheet URL on SCD30 page {{< pr number="600" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update datasheet URL on STS3X page {{< pr number="602" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update datasheet URL on SGP30 page {{< pr number="601" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update Home Assistant custom component URL on contributing guide page {{< pr number="603" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update WaveShare E-Paper URL on WaveShare E-Paper page {{< pr number="597" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Fix copy/paste error {{< pr number="574" repo="esphome-docs" >}} by {{< ghuser name="mniess" >}} -- docs: Update pulse_counter.rst {{< pr number="609" repo="esphome-docs" >}} by {{< ghuser name="m1ch" >}} -- docs: Add smart intercom blogpost {{< pr number="621" repo="esphome-docs" >}} by {{< ghuser name="frog32" >}} -- docs: Minor spelling {{< pr number="622" repo="esphome-docs" >}} by {{< ghuser name="AalianKhan" >}} -- docs: Added NEO Coolcam {{< pr number="496" repo="esphome-docs" >}} by {{< ghuser name="nldroid" >}} -- docs: pzemac energy support {{< pr number="514" repo="esphome-docs" >}} by {{< ghuser name="rradar" >}} -- docs: Revert "pzemac energy support" {{< pr number="623" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Changed miflora platforms {{< pr number="586" repo="esphome-docs" >}} by {{< ghuser name="Guyohms" >}} -- docs: Update docs to reflect ssd1327 support {{< pr number="500" repo="esphome-docs" >}} by {{< ghuser name="igg" >}} -- docs: Typo: NEC -> Sony {{< pr number="624" repo="esphome-docs" >}} by {{< ghuser name="gitolicious" >}} -- docs: Not every nodeMCU board supports 12V {{< pr number="626" repo="esphome-docs" >}} by {{< ghuser name="Laess3r" >}} -- docs: Revert "Update docs to reflect ssd1327 support" {{< pr number="634" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} - -### Notable Changes & New Features - -- Dashboard Interface: Add an "Update all" button ({{< pr number="615" repo="esphome" >}}). -- Uploads over USB are now about 4 times faster ({{< pr number="761" repo="esphome" >}}). -- [ESPHome-Flasher v1.2.0](https://github.com/esphome/esphome-flasher/releases/tag/v1.2.0) has been - released with fixes for ESP32s and faster uploads. - -- All {{< docref "/components/api" "native API" >}} communication stubs are now automatically - generated using automated scripts. This is a big step towards making the API more flexible, for - example cross-device communication ({{< pr number="633" repo="esphome" >}}). - -- New class {{< apiclass "api::CustomAPIDevice" "api::CustomAPIDevice" >}} to declare user-defined services straight from custom components. - See the updated custom component guide. - -- [Sensors](/components/sensor) have a new `force_update` option ({{< pr number="783" repo="esphome" >}}). -- Add GPIO Switch [interlock_wait_time](/components/switch/gpio#switch-gpio-interlocking) ({{< pr number="777" repo="esphome" >}}). -- Add a configurable priority for WiFi network selection ({{< pr number="658" repo="esphome" >}}, {{< docref "/components/wifi" "docs" >}}). -- Add [script.wait](/components/script#script-wait_action) action ({{< pr number="778" repo="esphome" >}}). -- Dashboard Interface: Add an interface for editing `secrets.yaml` ({{< pr number="672" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}}). -- Dashboard Interface: Authorization by username and password for non-Hass.io installs - ({{< pr number="668" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}}). - -- Dashboard Interface: The material icons font is now shipped with ESPHome - ({{< pr number="703" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}}). - -- Add [output.ledc.set_frequency](/components/output/ledc#output-ledc-set_frequency_action) action ({{< pr number="754" repo="esphome" >}}). -- Changing from an effect to a static color for addressable light now - has per-LED transitions ({{< pr number="750" repo="esphome" >}}). - -- Add [rotary_encoder.set_value](/components/sensor/rotary_encoder#sensor-rotary_encoder-set_value_action) action ({{< pr number="747" repo="esphome" >}}). -- You can now specify per-device descriptions in the dashboard interface - ({{< pr number="707" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}}, {{< docref "/components/esphome" "docs" >}}). - -- The {{< docref "/components/spi" "SPI bus" >}} now sends data over the hardware SPI bus if possible. - This can result in significant speedups for displays ({{< pr number="623" repo="esphome" >}}). - -- Add `delayed_on_off` binary_sensor filter ({{< pr number="700" repo="esphome" >}} by {{< ghuser name="kepten" >}}, - [docs](/components/sensor#sensor-filters)). - -- Implement `median` sensor filter ({{< pr number="697" repo="esphome" >}} by {{< ghuser name="jvanderneutstulen" >}}, - [docs](/components/sensor#sensor-filters)). - -- A function scheduler now handles all of ESPHome's timeout/interval calls, replacing the - previous per-component implementation ({{< pr number="609" repo="esphome" >}}). - -- Add support for calibrating MH-Z19 sensors ({{< pr number="683" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}}, {{< docref "/components/sensor/mhz19" "docs" >}}). -- Add BLE scan parameters for improving BLE detection percentage - ({{< pr number="769" repo="esphome" >}}, {{< docref "/components/esp32_ble_tracker" "docs" >}}). - -- Add configurable ignore bits to rc_switch_raw codes ({{< pr number="650" repo="esphome" >}} by {{< ghuser name="mtl010957" >}}, - {{< docref "/components/remote_receiver" "docs" >}}). - -- New `restore` option has been added to {{< docref "/components/servo" "servos" >}} ({{< pr number="829" repo="esphome" >}}). -- Add IR receiver support for coolix climate devices ({{< pr number="645" repo="esphome" >}} by {{< ghuser name="glmnet" >}}, {{< docref "/components/climate/climate_ir" "docs" >}}). -- Add [calibrate_polynomial](/components/sensor/filter/calibrate_polynomial#sensor-filter-calibrate_polynomial) sensor filter ({{< pr number="642" repo="esphome" >}}). -- Allow setting the initial mode of HLW8012 sensors ({{< pr number="611" repo="esphome" >}} by {{< ghuser name="brandond" >}}, {{< docref "/components/sensor/hlw8012" "docs" >}}). -- Add tilt actions to {{< docref "/components/cover/template" "template cover" >}} ({{< pr number="577" repo="esphome" >}} by {{< ghuser name="mtl010957" >}}). -- Add backlight handling for lcd_pcf8574 ({{< pr number="573" repo="esphome" >}} by {{< ghuser name="adarazs" >}}, {{< docref "/components/display/lcd_display" "docs" >}}). - -### All changes - -- esphome: CLI show version better {{< pr number="581" repo="esphome" >}} -- esphome: SM16716 support {{< pr number="541" repo="esphome" >}} -- docs: Add documentation for SM16716 output component. {{< pr number="217" repo="esphome-docs" >}} by {{< ghuser name="kll" >}} -- docs: Document the backlight control for lcd_pcf8574 {{< pr number="261" repo="esphome-docs" >}} by {{< ghuser name="adarazs" >}} -- esphome: Add backlight handling for lcd_pcf8574 {{< pr number="573" repo="esphome" >}} by {{< ghuser name="adarazs" >}} (new-feature) -- esphome: clear and disable editor while fetching contents {{< pr number="603" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Scan length for AddressableScanEffect {{< pr number="608" repo="esphome" >}} by {{< ghuser name="majorpeter" >}} (new-feature) -- docs: Scaneffectlength {{< pr number="264" repo="esphome-docs" >}} by {{< ghuser name="majorpeter" >}} -- esphome: Fix ForCondition time duration check {{< pr number="610" repo="esphome" >}} by {{< ghuser name="ptatrai" >}} (cherry-picked) -- esphome: DHT22 ignore invalid values {{< pr number="614" repo="esphome" >}} (cherry-picked) -- esphome: Template Cover don't auto-set current_operation {{< pr number="612" repo="esphome" >}} (cherry-picked) -- esphome: Fix Hass.io addon SSL {{< pr number="613" repo="esphome" >}} (cherry-picked) -- esphome: Fix remote_receiver always shows sony {{< pr number="617" repo="esphome" >}} (cherry-picked) -- esphome: Make ForCondition a component {{< pr number="616" repo="esphome" >}} (cherry-picked) -- esphome: Update docker base image to 1.8.0 {{< pr number="618" repo="esphome" >}} (cherry-picked) -- esphome: Fix integration sensor, add test {{< pr number="619" repo="esphome" >}} (cherry-picked) -- esphome: Fix sun default elevation {{< pr number="620" repo="esphome" >}} (cherry-picked) -- esphome: Allow setting the initial mode of HLW8012 sensors {{< pr number="611" repo="esphome" >}} by {{< ghuser name="brandond" >}} (new-feature) -- docs: Allow setting the initial mode of HLW8012 sensors {{< pr number="268" repo="esphome-docs" >}} by {{< ghuser name="brandond" >}} -- esphome: Add more efficient SPI implementation {{< pr number="622" repo="esphome" >}} -- esphome: Allow id() syntax for custom code {{< pr number="621" repo="esphome" >}} -- esphome: Dashboard Update all button {{< pr number="615" repo="esphome" >}} (new-feature) -- esphome: Add central function scheduler {{< pr number="609" repo="esphome" >}} -- esphome: Update base image to 1.8.3 {{< pr number="625" repo="esphome" >}} (cherry-picked) -- esphome: Fix status binary sensor for MQTT {{< pr number="628" repo="esphome" >}} (cherry-picked) -- esphome: Work around ESP32 BLE issue {{< pr number="626" repo="esphome" >}} (cherry-picked) -- esphome: Work around ESP32 core WiFi Bug {{< pr number="627" repo="esphome" >}} (cherry-picked) -- esphome: Add HW SPI support {{< pr number="623" repo="esphome" >}} (new-feature) -- esphome: Captive Portal {{< pr number="624" repo="esphome" >}} (breaking-change) -- esphome: Fix ESP32 RCSwitch Dump Stack Smash Protection {{< pr number="636" repo="esphome" >}} (cherry-picked) -- esphome: Fix russia timezone detection {{< pr number="637" repo="esphome" >}} (cherry-picked) -- esphome: Fix globals.set {{< pr number="635" repo="esphome" >}} (cherry-picked) -- esphome: Fix version.h file {{< pr number="630" repo="esphome" >}} (cherry-picked) -- esphome: Fix remote_receiver raw binary sensor {{< pr number="639" repo="esphome" >}} (cherry-picked) -- esphome: Re-add CustomMQTTDevice class {{< pr number="640" repo="esphome" >}} (cherry-picked) -- esphome: Yashima climate new component {{< pr number="634" repo="esphome" >}} by {{< ghuser name="diraimondo" >}} -- docs: Add Yashima Climate component docs {{< pr number="275" repo="esphome-docs" >}} by {{< ghuser name="diraimondo" >}} -- esphome: Fix home assistant binary sensor initial state {{< pr number="632" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Atmel M90E32AS Energy Metering IC. Found in CircuitSetup 2chan and 6chan energy meterss {{< pr number="629" repo="esphome" >}} by {{< ghuser name="thompsa" >}} -- docs: Add docs for atm90e32 sensor {{< pr number="271" repo="esphome-docs" >}} by {{< ghuser name="thompsa" >}} -- esphome: Add set_threshold and get_value methods to ESP32TouchBinarySensor. {{< pr number="631" repo="esphome" >}} by {{< ghuser name="rnauber" >}} -- esphome: Make logger string memory usage more efficient {{< pr number="641" repo="esphome" >}} -- docs: Add SIM800L docs {{< pr number="257" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: SMS Sender / Receiver {{< pr number="522" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Create Protobuf Plugin for automatically generating native API stubs {{< pr number="633" repo="esphome" >}} -- esphome: Template tilt cover {{< pr number="577" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} (new-feature) -- esphome: Provide the lights current color to the addressable_lambda_effect. {{< pr number="646" repo="esphome" >}} by {{< ghuser name="rnauber" >}} -- docs: Update sun.rst {{< pr number="278" repo="esphome-docs" >}} by {{< ghuser name="pove" >}} -- esphome: Fixed rc_switch dump off by one bit {{< pr number="652" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} -- esphome: Adding ignore bits to narrow compare of received codes {{< pr number="650" repo="esphome" >}} by {{< ghuser name="mtl010957" >}} (new-feature) -- esphome: Fix remote_transmitter wait time unit {{< pr number="654" repo="esphome" >}} -- esphome: Update dependencies {{< pr number="653" repo="esphome" >}} -- esphome: CT Clamp ADS1115 Improvements {{< pr number="647" repo="esphome" >}} -- esphome: Add calibrate_polynomial sensor filter {{< pr number="642" repo="esphome" >}} (new-feature) -- esphome: WIP: ESP8266 work on connection issues {{< pr number="648" repo="esphome" >}} -- docs: Added docs for ignore bit setting on rc_switch_raw and fixed ref links {{< pr number="279" repo="esphome-docs" >}} by {{< ghuser name="mtl010957" >}} -- docs: Absolute humidity calculation description {{< pr number="283" repo="esphome-docs" >}} by {{< ghuser name="tomlut" >}} -- docs: ZyAura CO2 / Temperature / Humidity Sensor {{< pr number="281" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: ZyAura CO2 / Temperature / Humidity Sensor {{< pr number="656" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Fix deep sleep on_shutdown hooks {{< pr number="660" repo="esphome" >}} -- esphome: ESP32 Use NVS directly {{< pr number="659" repo="esphome" >}} -- docs: Added TX20/TX23 sensor documentation {{< pr number="150" repo="esphome-docs" >}} by {{< ghuser name="TheEggi" >}} -- esphome: added tx20 wind speed sensor {{< pr number="275" repo="esphome" >}} by {{< ghuser name="TheEggi" >}} -- docs: Added docs for tilt capability in template cover {{< pr number="260" repo="esphome-docs" >}} by {{< ghuser name="mtl010957" >}} -- docs: Add description next to title {{< pr number="227" repo="esphome-docs" >}} by {{< ghuser name="jjok" >}} -- esphome: WiFi networks priority {{< pr number="658" repo="esphome" >}} (new-feature) -- esphome: Change ESP32 default power_save_mode to light {{< pr number="661" repo="esphome" >}} -- docs: Added TTGO T-Journal {{< pr number="289" repo="esphome-docs" >}} by {{< ghuser name="bwente" >}} -- docs: Updated confusing deep_sleep.prevent documentation {{< pr number="287" repo="esphome-docs" >}} by {{< ghuser name="ofalvai" >}} -- docs: Fix typo in transmit_sony documentation {{< pr number="299" repo="esphome-docs" >}} by {{< ghuser name="davericher" >}} -- esphome: Restore sending "None" effect type {{< pr number="667" repo="esphome" >}} by {{< ghuser name="tribut" >}} -- esphome: fix missing schedule call {{< pr number="690" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Update logger.rst {{< pr number="313" repo="esphome-docs" >}} by {{< ghuser name="srg74" >}} -- esphome: Remove double publish_state in ultrasonic sensor {{< pr number="696" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- esphome: Local Material Icons {{< pr number="703" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Corrected ESP32 hardware UART pins {{< pr number="701" repo="esphome" >}} by {{< ghuser name="jwozny" >}} -- esphome: Fix mqtt_text_sensor to honor unique_id when set. {{< pr number="698" repo="esphome" >}} by {{< ghuser name="middelink" >}} -- docs: Minor changes to the setup steps {{< pr number="327" repo="esphome-docs" >}} by {{< ghuser name="fabaff" >}} -- esphome: Fix duplicate set_update_interval() calls on same component {{< pr number="693" repo="esphome" >}} by {{< ghuser name="middelink" >}} -- esphome: MH-Z19 calibration support {{< pr number="683" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (new-feature) -- esphome: Implement median filter {{< pr number="697" repo="esphome" >}} by {{< ghuser name="jvanderneutstulen" >}} (new-feature) -- docs: Median filter {{< pr number="319" repo="esphome-docs" >}} by {{< ghuser name="jvanderneutstulen" >}} -- docs: MH-Z19 calibration support {{< pr number="312" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Update names {{< pr number="326" repo="esphome-docs" >}} by {{< ghuser name="fabaff" >}} -- docs: Fix header level {{< pr number="325" repo="esphome-docs" >}} by {{< ghuser name="fabaff" >}} -- docs: 7.50in waveshare e-paper works {{< pr number="321" repo="esphome-docs" >}} by {{< ghuser name="rafl" >}} -- docs: Fix api.proto url {{< pr number="310" repo="esphome-docs" >}} by {{< ghuser name="pstuifzand" >}} -- esphome: add xiaomi BLE Thermometer lywsd02 model support {{< pr number="664" repo="esphome" >}} by {{< ghuser name="junnikokuki" >}} -- docs: Add Sonoff Mini to 'Generic Sonoff' page {{< pr number="320" repo="esphome-docs" >}} by {{< ghuser name="Infinitte" >}} -- esphome: Fix GPS time source. {{< pr number="704" repo="esphome" >}} -- docs: Add configuration example for TTGO T-Camera v1.7 {{< pr number="318" repo="esphome-docs" >}} by {{< ghuser name="erichiller" >}} -- esphome: License for Material Design Icons {{< pr number="708" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: LYWSD02 {{< pr number="292" repo="esphome-docs" >}} by {{< ghuser name="G1K" >}} -- esphome: add time based cover, has built in endstop {{< pr number="665" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-feature) -- esphome: Add delayed_on_off binary_sensor filter {{< pr number="700" repo="esphome" >}} by {{< ghuser name="kepten" >}} (new-feature) -- docs: Add doc for delayed_on_off binary_sensor filter {{< pr number="324" repo="esphome-docs" >}} by {{< ghuser name="kepten" >}} -- esphome: fix wifi info {{< pr number="709" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Add description of id Parameter {{< pr number="329" repo="esphome-docs" >}} by {{< ghuser name="guptamp" >}} -- esphome: fix integration sensor {{< pr number="711" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add support for Sensirion SCD30 CO2 sensors {{< pr number="712" repo="esphome" >}} by {{< ghuser name="valordk" >}} -- docs: Add documentation for Sensirion SCD30 CO2 sensors {{< pr number="333" repo="esphome-docs" >}} by {{< ghuser name="valordk" >}} -- esphome: Fixes sim800l {{< pr number="678" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Update esp32_camera.rst jpeg quality {{< pr number="332" repo="esphome-docs" >}} by {{< ghuser name="glogiotatidis" >}} -- docs: add has_built_in_endstop docs {{< pr number="302" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Update incorrect GPIO pin for Mirabella Genio Cold + Warm White… {{< pr number="337" repo="esphome-docs" >}} by {{< ghuser name="epetousis" >}} -- esphome: Use default format to render FloatLiteral {{< pr number="717" repo="esphome" >}} by {{< ghuser name="fritzm" >}} -- esphome: Add coolix receiver {{< pr number="645" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-feature) -- docs: add coolix receiver {{< pr number="288" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix {{< pr number="724" repo="esphome" >}} by {{< ghuser name="fake-name" >}} -- docs: Update hdc1080.rst {{< pr number="343" repo="esphome-docs" >}} by {{< ghuser name="magnusja" >}} -- esphome: Update MANIFEST.in to fix esphome/issues#650 {{< pr number="733" repo="esphome" >}} by {{< ghuser name="shbatm" >}} -- docs: Fix link to light-is_on_condition {{< pr number="345" repo="esphome-docs" >}} by {{< ghuser name="myplacedk" >}} -- esphome: fixes samsung ir {{< pr number="738" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Allow 64 bit codes and add nexa remote support. {{< pr number="662" repo="esphome" >}} by {{< ghuser name="abmantis" >}} (new-feature) -- docs: Fix, optimize mijia {{< pr number="293" repo="esphome-docs" >}} by {{< ghuser name="G1K" >}} -- esphome: AS3935 Lightning sensor {{< pr number="666" repo="esphome" >}} by {{< ghuser name="TheEggi" >}} -- esphome: Full height log window {{< pr number="673" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Make it clearer that only one deep sleep component is allowed. {{< pr number="303" repo="esphome-docs" >}} by {{< ghuser name="jeff-h" >}} -- esphome: Secrets editor {{< pr number="672" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (new-feature) -- esphome: Authorization by username and password {{< pr number="668" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (new-feature) -- esphome: Basic Auth for web_server component {{< pr number="674" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Basic Auth for web_server component {{< pr number="304" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Improve SHT3xD reconnect handling {{< pr number="675" repo="esphome" >}} by {{< ghuser name="valordk" >}} -- docs: Fix description of the sensor {{< pr number="309" repo="esphome-docs" >}} by {{< ghuser name="mpettitt" >}} -- esphome: Device description in dashboard {{< pr number="707" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (new-feature) -- docs: Device description in dashboard {{< pr number="335" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: support for the sx1509 i2c device {{< pr number="651" repo="esphome" >}} by {{< ghuser name="mvturnho" >}} -- esphome: Add support for TI TLC59208F {{< pr number="718" repo="esphome" >}} by {{< ghuser name="tamisoft" >}} -- docs: ADD TLC59208F documentation {{< pr number="338" repo="esphome-docs" >}} by {{< ghuser name="tamisoft" >}} -- docs: Add Xiaomi Cleargrass Sensor Documentation {{< pr number="346" repo="esphome-docs" >}} by {{< ghuser name="sermayoral" >}} -- esphome: Add Xiaomi Cleargrass Temperature and Humidity Sensor {{< pr number="735" repo="esphome" >}} by {{< ghuser name="sermayoral" >}} -- docs: The 4.20in display works fine {{< pr number="359" repo="esphome-docs" >}} by {{< ghuser name="fredrike" >}} -- docs: Update sonoff.rst {{< pr number="341" repo="esphome-docs" >}} by {{< ghuser name="ZabojnikM" >}} -- esphome: Fix for PCF8574 output chattering at the start/reboot {{< pr number="744" repo="esphome" >}} by {{< ghuser name="amishv" >}} -- esphome: Add ADE7953 Support {{< pr number="593" repo="esphome" >}} -- esphome: refactored xiaomi sensors {{< pr number="755" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} (breaking-change) -- docs: Xiaomi refactor {{< pr number="361" repo="esphome-docs" >}} by {{< ghuser name="Alex9779" >}} -- esphome: fix CGG1 log message {{< pr number="757" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} -- docs: Add link to index.rst check list item {{< pr number="363" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Added cookbook for Teckin SB50 Bulb {{< pr number="360" repo="esphome-docs" >}} by {{< ghuser name="nebula-it" >}} -- esphome: Add mcp23008 support {{< pr number="649" repo="esphome" >}} by {{< ghuser name="TomFahey" >}} -- docs: Adding the IO2 pin to the GPIO pin list {{< pr number="354" repo="esphome-docs" >}} by {{< ghuser name="SqyD" >}} -- docs: Updated MCP23017 Component To Cover 8 & 16 Port Chips {{< pr number="277" repo="esphome-docs" >}} by {{< ghuser name="TomFahey" >}} -- esphome: Brightness ssd1306 {{< pr number="723" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix potential ISR digital_write issue {{< pr number="753" repo="esphome" >}} -- esphome: Fix addressable light fade to black function {{< pr number="752" repo="esphome" >}} -- esphome: Make UART flush function consistent {{< pr number="748" repo="esphome" >}} -- esphome: Update and pin all python requirements {{< pr number="759" repo="esphome" >}} -- esphome: Fix MCP23017 setup priority {{< pr number="751" repo="esphome" >}} -- esphome: Add rotary_encoder.set_value action {{< pr number="747" repo="esphome" >}} (new-feature) -- esphome: Fix strobe/flicker effect not using selected value {{< pr number="749" repo="esphome" >}} -- esphome: Add support for TTGO ePaper module {{< pr number="730" repo="esphome" >}} by {{< ghuser name="thomasklingbeil" >}} -- esphome: BME280: Increase sensor timeout {{< pr number="727" repo="esphome" >}} by {{< ghuser name="lobradov" >}} -- esphome: Base climate ir {{< pr number="726" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Add documentation for TTGO ePaper {{< pr number="342" repo="esphome-docs" >}} by {{< ghuser name="thomasklingbeil" >}} -- esphome: Fix dallas not unknown {{< pr number="716" repo="esphome" >}} -- esphome: Integration sensor use double precision {{< pr number="715" repo="esphome" >}} -- esphome: calibrate_linear check not all from values same {{< pr number="714" repo="esphome" >}} -- esphome: SenseAir S8 CO2 sensor support {{< pr number="705" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: SenseAir S8 CO2 sensor support {{< pr number="330" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Fix remote_transmitter type_a encoding {{< pr number="742" repo="esphome" >}} by {{< ghuser name="nicuh" >}} -- esphome: vscode support check file exists {{< pr number="763" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Proof reading changes {{< pr number="364" repo="esphome-docs" >}} by {{< ghuser name="thenameiwantedwastaken" >}} -- docs: add tcl112 receiver docs {{< pr number="365" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: add tcl112 receiver {{< pr number="762" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Sensor filter_out rounded {{< pr number="765" repo="esphome" >}} -- esphome: Use higher default baudrate for USB upload {{< pr number="761" repo="esphome" >}} -- esphome: add support for climate action {{< pr number="720" repo="esphome" >}} by {{< ghuser name="marcelveldt" >}} -- esphome: Add LEDC set_frequency action {{< pr number="754" repo="esphome" >}} (new-feature) -- esphome: Fork some base libraries {{< pr number="758" repo="esphome" >}} -- esphome: Update ESP8266/ESP32 bases {{< pr number="760" repo="esphome" >}} -- esphome: Captive portal fixes {{< pr number="766" repo="esphome" >}} -- esphome: Fix typo in Component::set_interval {{< pr number="767" repo="esphome" >}} -- esphome: Fix platformio monkey patch {{< pr number="768" repo="esphome" >}} -- esphome: Addressable light transition {{< pr number="750" repo="esphome" >}} (new-feature) -- esphome: Fixes for Python 3 {{< pr number="702" repo="esphome" >}} by {{< ghuser name="fabaff" >}} -- esphome: Add BLE scan parameters {{< pr number="769" repo="esphome" >}} (new-feature) -- esphome: Filter some debug lines from PlatformIO in output {{< pr number="771" repo="esphome" >}} -- esphome: ESP32 Upgrade AsyncTCP to 1.1.1 {{< pr number="773" repo="esphome" >}} -- esphome: Switch to Python 3 for docker installs {{< pr number="774" repo="esphome" >}} -- docs: Add script.wait action {{< pr number="367" repo="esphome-docs" >}} (new-feature) -- docs: Add ESP32 scan parameters {{< pr number="368" repo="esphome-docs" >}} -- docs: Hint how to include HA secrets.yaml instead {{< pr number="362" repo="esphome-docs" >}} by {{< ghuser name="rlowens" >}} -- esphome: Add SSD1325 Display Component {{< pr number="736" repo="esphome" >}} by {{< ghuser name="evandcoleman" >}} (cherry-picked) -- docs: Add documentation for SSD1325 OLED displays {{< pr number="347" repo="esphome-docs" >}} by {{< ghuser name="evandcoleman" >}} (cherry-picked) -- esphome: Add support for SGP30 eCO2 and TVOC sensors {{< pr number="679" repo="esphome" >}} by {{< ghuser name="valordk" >}} (cherry-picked) -- docs: Add documentation for SGP30 eCO2 and TVOC sensors {{< pr number="308" repo="esphome-docs" >}} by {{< ghuser name="valordk" >}} (cherry-picked) -- esphome: Add support for SHTCx Temperature sensors {{< pr number="676" repo="esphome" >}} by {{< ghuser name="valordk" >}} (cherry-picked) -- esphome: Add support for STS3x Temperature sensors {{< pr number="669" repo="esphome" >}} by {{< ghuser name="valordk" >}} (cherry-picked) -- docs: Add documentation for SHTCx Temperature sensors {{< pr number="305" repo="esphome-docs" >}} by {{< ghuser name="valordk" >}} (cherry-picked) -- docs: Add documentation for STS3x Temperature sensors {{< pr number="300" repo="esphome-docs" >}} by {{< ghuser name="valordk" >}} (cherry-picked) -- esphome: Add dfplayer mini component {{< pr number="655" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- docs: Add DFPlayer docs {{< pr number="306" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- docs: Add rotary_encoder.set_value action {{< pr number="358" repo="esphome-docs" >}} (cherry-picked) -- esphome: Add new component for Tuya dimmers {{< pr number="743" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (cherry-picked) -- docs: Add documentation for new Tuya dimmer component {{< pr number="353" repo="esphome-docs" >}} by {{< ghuser name="ssieb" >}} (cherry-picked) -- docs: SX1509 device documentation {{< pr number="315" repo="esphome-docs" >}} by {{< ghuser name="mvturnho" >}} (cherry-picked) -- docs: Fix typo {{< pr number="352" repo="esphome-docs" >}} by {{< ghuser name="bonanitech" >}} -- docs: Minor typo {{< pr number="349" repo="esphome-docs" >}} by {{< ghuser name="dannysauer" >}} -- docs: Clarify NodeMCU ESP8266 VIN pin {{< pr number="340" repo="esphome-docs" >}} by {{< ghuser name="Justahobby01" >}} -- docs: Add TorchStar LED controller to 'Generic Sonoff' page {{< pr number="351" repo="esphome-docs" >}} by {{< ghuser name="dale3h" >}} -- docs: Remove references to Python 2 {{< pr number="328" repo="esphome-docs" >}} by {{< ghuser name="fabaff" >}} (cherry-picked) -- docs: Cookbook Guide for Zemismart LED RGBW Downlights {{< pr number="297" repo="esphome-docs" >}} by {{< ghuser name="cryptelli" >}} -- docs: Authorization by username and password {{< pr number="296" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} (cherry-picked) -- docs: AS3935 Lightning sensor {{< pr number="294" repo="esphome-docs" >}} by {{< ghuser name="TheEggi" >}} (cherry-picked) -- docs: Cookbook ape {{< pr number="334" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add lint check for integer constants {{< pr number="775" repo="esphome" >}} -- docs: fix indent on sample {{< pr number="369" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- esphome: Add script.wait action {{< pr number="778" repo="esphome" >}} (cherry-picked) (new-feature) -- docs: update esp32camera documentation - note about PWM {{< pr number="348" repo="esphome-docs" >}} by {{< ghuser name="h0--" >}} -- esphome: Vl53l0x {{< pr number="644" repo="esphome" >}} (cherry-picked) -- esphome: Add GPIO Switch interlock wait time {{< pr number="777" repo="esphome" >}} (cherry-picked) (new-feature) -- esphome: Add PZEM004T/PZEMAC/PZEMDC Support {{< pr number="587" repo="esphome" >}} (cherry-picked) -- esphome: Update AsyncMQTTClient/ESPAsyncWebServer {{< pr number="779" repo="esphome" >}} (cherry-picked) -- esphome: Implementation of LCD Clear {{< pr number="781" repo="esphome" >}} by {{< ghuser name="amishv" >}} (cherry-picked) -- docs: fixed typo {{< pr number="370" repo="esphome-docs" >}} by {{< ghuser name="amishv" >}} -- esphome: Add sensor force_update option {{< pr number="783" repo="esphome" >}} (cherry-picked) (new-feature) -- docs: Add sensor force_update option {{< pr number="371" repo="esphome-docs" >}} (cherry-picked) -- docs: Spelling and grammar fixes {{< pr number="372" repo="esphome-docs" >}} by {{< ghuser name="scop" >}} -- docs: Add missing actual install step in getting started with Hass.io {{< pr number="373" repo="esphome-docs" >}} by {{< ghuser name="scop" >}} -- esphome: Update docker base image to 2.0.1 {{< pr number="785" repo="esphome" >}} (cherry-picked) -- esphome: Fix ledc can't find bit_depth {{< pr number="786" repo="esphome" >}} (cherry-picked) -- esphome: web_server_base AUTO_LOAD includes ASYNC_TCP {{< pr number="788" repo="esphome" >}} by {{< ghuser name="Schnilz" >}} (cherry-picked) -- esphome: Add Python 2 deprecation notice {{< pr number="784" repo="esphome" >}} (breaking-change) (cherry-picked) -- docs: Update time.rst to add GPS as source {{< pr number="375" repo="esphome-docs" >}} by {{< ghuser name="mbo18" >}} -- esphome: Fix modbus CRC calculation {{< pr number="789" repo="esphome" >}} (cherry-picked) -- esphome: Add additional custom lint checks {{< pr number="790" repo="esphome" >}} (cherry-picked) -- esphome: Implement more dump_configs {{< pr number="791" repo="esphome" >}} (cherry-picked) -- esphome: Add missing include - fixes missing GPIOPin definition {{< pr number="794" repo="esphome" >}} by {{< ghuser name="cjd" >}} (cherry-picked) -- esphome: Fix MQTT not showing logs with Python 3 {{< pr number="797" repo="esphome" >}} (cherry-picked) -- esphome: Fix scheduler first execution {{< pr number="798" repo="esphome" >}} (cherry-picked) -- esphome: Make file generation saving atomic {{< pr number="792" repo="esphome" >}} (cherry-picked) -- esphome: Fujitsu General climate new component {{< pr number="677" repo="esphome" >}} by {{< ghuser name="31337Ghost" >}} (cherry-picked) -- esphome: Warn when UART and logger operating on same bus {{< pr number="803" repo="esphome" >}} (cherry-picked) -- esphome: Add Tuya message for no datapoints {{< pr number="804" repo="esphome" >}} (cherry-picked) -- esphome: AS3935 Use normal pin polling for IRQ {{< pr number="805" repo="esphome" >}} (cherry-picked) -- esphome: Fix modbus register {{< pr number="806" repo="esphome" >}} (cherry-picked) -- esphome: Fix web server transition length truncated {{< pr number="807" repo="esphome" >}} (cherry-picked) -- docs: fix xiaomi docs {{< pr number="384" repo="esphome-docs" >}} by {{< ghuser name="Alex9779" >}} (cherry-picked) -- esphome: Add check if middle_text is too short {{< pr number="811" repo="esphome" >}} by {{< ghuser name="grea09" >}} (cherry-picked) -- esphome: [Hotfix] Dashboard authentication on Py3 {{< pr number="812" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (cherry-picked) -- esphome: Uppercase ESPHome {{< pr number="814" repo="esphome" >}} (cherry-picked) -- esphome: Print update interval for pulse counter {{< pr number="816" repo="esphome" >}} (cherry-picked) -- esphome: Allow TimePeriod for time_period_str_unit {{< pr number="815" repo="esphome" >}} (cherry-picked) -- docs: Typo fix pzem004t {{< pr number="387" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} (cherry-picked) -- esphome: Scheduler fixes {{< pr number="813" repo="esphome" >}} (cherry-picked) -- esphome: Fix fan oscillating {{< pr number="818" repo="esphome" >}} (cherry-picked) -- esphome: Fix some binary_sensor not having an initial state {{< pr number="819" repo="esphome" >}} (cherry-picked) - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.15.0.md b/content/changelog/v1.15.0.md deleted file mode 100644 index df4c331c13..0000000000 --- a/content/changelog/v1.15.0.md +++ /dev/null @@ -1,618 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.15.0." -title: "Changelog - Version 1.15.0 - September 13, 2020" -params: - seo: - description: Changelog for ESPHome version 1.15.0. - image: /_static/changelog-1.15.0.png ---- - - -{{< imgtable >}} -"AHT10","components/sensor/aht10","aht10.jpg","" -"QMC5883L","components/sensor/qmc5883l","qmc5883l.jpg","" -"INA226","components/sensor/ina226","ina226.jpg","" -"HM3301","components/sensor/hm3301","hm3301.jpg","" -"MAX31856","components/sensor/max31856","max31856.jpg","" -"MAX31865","components/sensor/max31865","max31865.jpg","" -"RuuviTag","components/sensor/ruuvitag","ruuvitag.jpg","" -"SPS30","components/sensor/sps30","sps30.jpg","" -"TMP117","components/sensor/tmp117","tmp117.jpg","" -"Xiaomi BLE","components/sensor/xiaomi_ble","xiaomi_mijia_logo.jpg","" -"Slow PWM","components/output/slow_pwm","pwm.png","" -"ESP32 DAC","components/output/esp32_dac","dac.svg","" -"AC Dimmer","components/output/ac_dimmer","ac_dimmer.svg","dark-invert" -"Tuya Fan","components/fan/tuya","tuya.png","" -"Tuya Binary Sensor","components/binary_sensor/tuya","tuya.png","" -"Tuya Dimmer","components/light/tuya","tuya.png","" -"Tuya Sensor","components/sensor/tuya","tuya.png","" -"Tuya Switch","components/switch/tuya","tuya.png","" -"Tuya Climate","components/climate/tuya","tuya.png","" -"MAX7219 Dot Matrix","components/display/max7219digit","max7219digit.jpg","" -"TM1637","components/display/tm1637","tm1637.jpg","" -"SSD1351","components/display/ssd1351","ssd1351.jpg","" -"ST7789V","components/display/st7789v","st7789v.jpg","" -"ILI9341","components/display/ili9341","ili9341.jpg","" -"PCD8544 (Nokia 5110/ 3310)","components/display/pcd8544","pcd8544.jpg","" -"BLE Scanner","components/text_sensor/ble_scanner","bluetooth.svg","dark-invert" -"Custom UART Text Sensor","cookbook/lambda_magic","language-cpp.svg","dark-invert" -"Thermostat Controller","components/climate/thermostat","air-conditioner.svg","dark-invert" -"PID Controller","components/climate/pid","function.svg","dark-invert" -"IR Remote Climate","components/climate/ir_climate","air-conditioner-ir.svg","dark-invert" -"HTTP Request","components/http_request","connection.svg","dark-invert" -"MCP3008 8-Channel 10-Bit A/D Converter","components/mcp3008","mcp3008.jpg","" -"SN74HC595 I/O Expander","components/sn74hc595","sn74hc595.jpg","" -"TM1651 Battery Display","components/tm1651","tm1651_battery_display.jpg","" -"RF Bridge","components/rf_bridge","rf_bridge.jpg","" -"Exposure Notifications","components/exposure_notifications","exposure_notifications.png","" -"RTTTL Buzzer","components/rtttl","buzzer.jpg","" -"Prometheus","components/prometheus","prometheus.svg","" -{{< /imgtable >}} -Stop! this is not Otto Winter, but Guillermo Ruffino ({{< ghuser name="glmnet" >}}). So Hi there! - -Latest feature release was 10 months ago already, however development and support did not stop. We have -lots of contributions here, the list above with integrations images is the longest to date and the changelog -is bigger too! - -## Notable Changes & New Features - -ESPHome add on is now also available at the Home Assistant community add ons! ({{< ghuser name="OttoWinter" >}} and -{{< ghuser name="frenck" >}} of course) - -The dashboard got a visual revamp! Now more nodes are visible at the same time. {{< ghuser name="jonathanadams" >}} also -took a few bugs with it too. - -Lots new sensors, port expanders, displays... and {{< ghuser name="kbx81" >}} came up with color displays too! -There are new climates like the Thermostat, PID and more IR based devices too. And can't wait to see DIY -projects with the RTTTL buzzer. - -Scripts are more stable, and also were updated to follow new Home Assistant script options, like `single`, -`queued`, etc. - -Also if you don't like repeating stuff in yaml, the new packages options {{< ghuser name="corvis" >}} added are very handy. - -I did a terrible job tagging contributions and now I'm paying for that, hope nobody gets angry. - -I've updated the contributors list in an attepmpt of giving people credit, many really deserve to be listed -here not only for their code contributions but also for their support on the community, bug fixing etc., thanks! - -This release is possible not only because all the contributions this project receives, but also for the -latest contributions from Otto itself, he did a great job automating GitHub with actions and also building -scripts which takes cares of 90% of the release process, so hopefully new versions will come along at a better pace. -If you don't see somebody credited by somthing, thats because Otto did it. - -From myself special thanks to {{< ghuser name="ssieb" >}}, {{< ghuser name="rradar" >}}, {{< ghuser name="jesserockz" >}}, {{< ghuser name="kbx81" >}}, and many others -specially {{< ghuser name="OttoWinter" >}} for all this. - -Still many new features and fixes are pending to be included in this release, but we had to left them aside -for a while so we can focus better. So let's ship this and keep going on new stuff!! - -Last but not least, thanks to all contributors, bug reporters and patrons! Without you this would not -be possible! - -## New Features - -- esphome: Dashboard Updates {{< pr number="1025" repo="esphome" >}} by {{< ghuser name="jonathanadams" >}} (new-feature) (notable-change) -- esphome: Ble scanner {{< pr number="976" repo="esphome" >}} by {{< ghuser name="TheKuko" >}} (new-feature) -- esphome: Add Prometheus /metrics-Endpoint {{< pr number="1032" repo="esphome" >}} by {{< ghuser name="margau" >}} (new-feature) -- esphome: Add support for command-line substitutions {{< pr number="1014" repo="esphome" >}} by {{< ghuser name="AlexMekkering" >}} (new-feature) -- esphome: Packages feature {{< pr number="1052" repo="esphome" >}} by {{< ghuser name="corvis" >}} (new-feature) (notable-change) -- esphome: WPA2 Enterprise Attempt 2 {{< pr number="1158" repo="esphome" >}} (new-feature) -- esphome: New script modes POC {{< pr number="1168" repo="esphome" >}} (breaking-change) (new-feature) - -## New Integrations - -- esphome: implemented ruuvi_ble and ruuvitag with RAWv1 and RAWv2 protocol {{< pr number="810" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} (new-integration) -- esphome: http_request component {{< pr number="719" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (new-integration) -- esphome: Add support for Sensirion SPS30 Particulate Matter sensors {{< pr number="891" repo="esphome" >}} by {{< ghuser name="valordk" >}} (new-integration) -- esphome: Add TM1561 support {{< pr number="893" repo="esphome" >}} by {{< ghuser name="freekode" >}} (new-integration) -- esphome: Add slow_pwm output component {{< pr number="894" repo="esphome" >}} by {{< ghuser name="nickw444" >}} (new-integration) -- esphome: Add RFBridge component {{< pr number="896" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- esphome: Climate Mitsubishi {{< pr number="725" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- esphome: PID Climate {{< pr number="885" repo="esphome" >}} (new-integration) -- esphome: Display tm1637 {{< pr number="946" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- esphome: Daikin climate ir component {{< pr number="964" repo="esphome" >}} by {{< ghuser name="hectorgimenez" >}} (new-integration) -- esphome: Add TMP117 component {{< pr number="992" repo="esphome" >}} by {{< ghuser name="Azimath" >}} (new-integration) -- esphome: Support for AHT10 temperature and humidity sensor {{< pr number="949" repo="esphome" >}} by {{< ghuser name="gmasse" >}} (new-integration) -- esphome: Add HM3301 laser dust detection sensor {{< pr number="963" repo="esphome" >}} by {{< ghuser name="freekode" >}} (new-integration) -- esphome: Add AC Dimmer support {{< pr number="880" repo="esphome" >}} (new-integration) -- esphome: feat: Add support for MCP23016 IO Expander {{< pr number="1012" repo="esphome" >}} by {{< ghuser name="reidprojects" >}} (new-integration) -- esphome: Climate whirlpool {{< pr number="1029" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- esphome: Add support for ESP32 DAC {{< pr number="1071" repo="esphome" >}} by {{< ghuser name="napieraj" >}} (new-integration) -- esphome: Adding support for MAX31856 Thermocouple Temperature Sensor (feature #700) {{< pr number="1039" repo="esphome" >}} by {{< ghuser name="declanshanaghy" >}} (new-integration) -- esphome: Add support for additional Xiaomi BLE sensors {{< pr number="1027" repo="esphome" >}} by {{< ghuser name="ahpohl" >}} (new-integration) (notable-change) -- esphome: Add E1.31 support {{< pr number="950" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- esphome: Add `adalight` light effect {{< pr number="956" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- esphome: Add WLED support {{< pr number="1092" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- esphome: Add LG Climate IR {{< pr number="1097" repo="esphome" >}} by {{< ghuser name="square99" >}} (new-integration) -- esphome: add support for SN74HC595 shift register {{< pr number="1083" repo="esphome" >}} by {{< ghuser name="phjr" >}} (new-integration) -- esphome: Thermostat component {{< pr number="1105" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- esphome: Add SSD1351 OLED display support {{< pr number="1100" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- esphome: Add support for Tuya Switches {{< pr number="1074" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- esphome: Add support for Tuya Climate devices {{< pr number="1076" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- esphome: Add support for Tuya Sensors {{< pr number="1088" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- esphome: Add support for Tuya Binary Sensors {{< pr number="1089" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- esphome: Add support for Toshiba heat pumps {{< pr number="1121" repo="esphome" >}} by {{< ghuser name="JoppyFurr" >}} (new-integration) -- esphome: Add exposure notifications {{< pr number="1135" repo="esphome" >}} (new-integration) -- esphome: rtttl player {{< pr number="1171" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) - -## Breaking Changes - -- esphome: Drop Python 2 Support {{< pr number="793" repo="esphome" >}} (breaking-change) -- esphome: Fix SGP30 incorrect baseline reading/writing {{< pr number="936" repo="esphome" >}} by {{< ghuser name="panuruj" >}} (breaking-change) -- esphome: fix servo bug restoring state and starting servo detached {{< pr number="1008" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (breaking-change) -- esphome: fix shunt voltage / current / power reading in INA3221 {{< pr number="1101" repo="esphome" >}} by {{< ghuser name="Vxider" >}} (breaking-change) -- esphome: Fix: Component script not stopped in certain situations {{< pr number="1004" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} (breaking-change) -- esphome: New script modes POC {{< pr number="1168" repo="esphome" >}} (breaking-change) (new-feature) - -## Notable Changes - -- esphome: Dashboard Updates {{< pr number="1025" repo="esphome" >}} by {{< ghuser name="jonathanadams" >}} (new-feature) (notable-change) -- esphome: Uart improvments {{< pr number="1024" repo="esphome" >}} by {{< ghuser name="0hax" >}} (notable-change) -- esphome: Add support for additional Xiaomi BLE sensors {{< pr number="1027" repo="esphome" >}} by {{< ghuser name="ahpohl" >}} (new-integration) (notable-change) -- esphome: Packages feature {{< pr number="1052" repo="esphome" >}} by {{< ghuser name="corvis" >}} (new-feature) (notable-change) - -## Beta Fixes - -- esphome: Mitigate CVE-2020-12638 WiFi WPA Downgrade {{< pr number="1207" repo="esphome" >}} -- esphome: ESP8266 change recommended framework version to 2.7.2 {{< pr number="1208" repo="esphome" >}} -- esphome: Fix base config should override packages config {{< pr number="1209" repo="esphome" >}} -- docs: ESP8266 change recommended framework version to 2.7.2 {{< pr number="714" repo="esphome-docs" >}} -- esphome: Fix AS3935 sensor configuration issues {{< pr number="1210" repo="esphome" >}} by {{< ghuser name="trylika" >}} -- esphome: Fix prometheus has wrong setup priority {{< pr number="1211" repo="esphome" >}} -- esphome: Downgrade FastLED to 3.3.2 {{< pr number="1212" repo="esphome" >}} -- docs: Fix old screenshots {{< pr number="716" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Add tuya platforms to changelog table {{< pr number="715" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Fix sdist missing requirements.txt {{< pr number="1214" repo="esphome" >}} -- docs: Include new v1.15 components from diff {{< pr number="718" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: renamed icon molecule co2 {{< pr number="1217" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add job to update HassIO addon repo {{< pr number="1218" repo="esphome" >}} -- esphome: Stop infinite loop in light on_turn_on {{< pr number="1219" repo="esphome" >}} by {{< ghuser name="WizKid" >}} -- esphome: Bump ESPAsyncWebServer-esphome to v1.2.7 {{< pr number="1221" repo="esphome" >}} -- docs: Added hint that not the subsensor id is meant. {{< pr number="720" repo="esphome-docs" >}} by {{< ghuser name="ei-ke" >}} -- esphome: wpa2 enterprise fixes: also copy eap parameters, don't require psk password to be set {{< pr number="1215" repo="esphome" >}} by {{< ghuser name="dr-oblivium" >}} -- esphome: Bump base image to 2.4.1 {{< pr number="1224" repo="esphome" >}} -- esphome: Fix release.yml invalid bash syntax {{< pr number="1226" repo="esphome" >}} -- esphome: Bump ESP8266 Arduino framework from 2.7.2 to 2.7.3 {{< pr number="1229" repo="esphome" >}} -- docs: Update docs for community Hass.io add-ons {{< pr number="721" repo="esphome-docs" >}} -- esphome: Bump ESPAsyncTCP from 1.2.2 to 1.2.3 {{< pr number="1227" repo="esphome" >}} -- esphome: Fix ESP8266 core has a broken settimeofday implementation {{< pr number="1231" repo="esphome" >}} -- docs: Cookbook: BME280 Environment added dew point calculations {{< pr number="629" repo="esphome-docs" >}} by {{< ghuser name="rradar" >}} -- esphome: Fix tuya.cpp compile warning {{< pr number="1232" repo="esphome" >}} -- esphome: Script mode fix {{< pr number="1238" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: make powered on assume public {{< pr number="1240" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Bump docker base image to 2.6.0 {{< pr number="1245" repo="esphome" >}} -- esphome: Image bit dephts {{< pr number="1241" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: add image type {{< pr number="730" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: fixes deg symbol not shown {{< pr number="1248" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Update diy.rst {{< pr number="736" repo="esphome-docs" >}} by {{< ghuser name="emorydunn" >}} -- docs: Add a note about setting dns in manual ip mode {{< pr number="735" repo="esphome-docs" >}} by {{< ghuser name="martgras" >}} -- docs: Change example ota id {{< pr number="737" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Fix SSD1306 post-setup brightness control {{< pr number="1090" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- esphome: Fix esp8266_restore_from_flash {{< pr number="638" repo="esphome" >}} -- esphome: Fix stack trace decode for latest platformio {{< pr number="830" repo="esphome" >}} -- docs: Update diy.rst {{< pr number="748" repo="esphome-docs" >}} by {{< ghuser name="galagaking" >}} -- docs: Add carrier_frequency for IR device example {{< pr number="734" repo="esphome-docs" >}} by {{< ghuser name="abmantis" >}} -- docs: Added Arlec Grid Connect Smart Plug {{< pr number="749" repo="esphome-docs" >}} by {{< ghuser name="freerangeeggs" >}} - -## All changes - -- esphome: Add lint check for integer constants {{< pr number="775" repo="esphome" >}} -- esphome: Wizard board name fixes {{< pr number="787" repo="esphome" >}} by {{< ghuser name="scop" >}} -- esphome: Logger on_message trigger {{< pr number="729" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Logger on_message trigger {{< pr number="374" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Add Fujitsu General Climate component docs {{< pr number="307" repo="esphome-docs" >}} by {{< ghuser name="31337Ghost" >}} -- docs: fix logger.rst ref link {{< pr number="379" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Added more power data to the atm90e32 component {{< pr number="799" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} -- docs: added reactive power, power factor, chip temp... {{< pr number="380" repo="esphome-docs" >}} by {{< ghuser name="CircuitSetup" >}} -- esphome: service uuid based ble tracking {{< pr number="800" repo="esphome" >}} by {{< ghuser name="Lumpusz" >}} -- docs: Ble rssi svc {{< pr number="377" repo="esphome-docs" >}} by {{< ghuser name="Lumpusz" >}} -- docs: Typo fix pzemac {{< pr number="388" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Typo fix pzemdc {{< pr number="389" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Document UART stop_bits {{< pr number="396" repo="esphome-docs" >}} -- docs: Document missing servo restore option {{< pr number="398" repo="esphome-docs" >}} -- esphome: Fix stack trace decode for latest platformio {{< pr number="830" repo="esphome" >}} -- esphome: Add MAX31865 sensor support, fix MAX31855 sensor {{< pr number="832" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- docs: Add MAX31865, update MAX31855 {{< pr number="399" repo="esphome-docs" >}} by {{< ghuser name="DAVe3283" >}} -- esphome: Add support for INA226 Current/Power Monitor {{< pr number="801" repo="esphome" >}} by {{< ghuser name="sergio303" >}} -- docs: Add INA226 current/power monitor {{< pr number="403" repo="esphome-docs" >}} by {{< ghuser name="sergio303" >}} -- esphome: implemented ruuvi_ble and ruuvitag with RAWv1 and RAWv2 protocol {{< pr number="810" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} (new-integration) -- docs: added docs for ruuvitag {{< pr number="383" repo="esphome-docs" >}} by {{< ghuser name="Alex9779" >}} -- esphome: http_request component {{< pr number="719" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} (new-integration) -- docs: http_request component {{< pr number="392" repo="esphome-docs" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: fix esphome better error out {{< pr number="843" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add climate dry fan {{< pr number="845" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Decode DHT11 decimal part {{< pr number="861" repo="esphome" >}} by {{< ghuser name="airy10" >}} -- docs: add climate core docs fan, swing {{< pr number="415" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: fix chip_temperature for atm90e32 component {{< pr number="865" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} -- esphome: add position action and lambda - tested {{< pr number="877" repo="esphome" >}} by {{< ghuser name="KristopherMackowiak" >}} -- esphome: added idle action for climate {{< pr number="859" repo="esphome" >}} by {{< ghuser name="danielkucera" >}} -- esphome: Fix MAX31865 edge case. {{< pr number="882" repo="esphome" >}} by {{< ghuser name="DAVe3283" >}} -- docs: Added Documentation for QMC5883L + HMC5883L Doc improvements {{< pr number="301" repo="esphome-docs" >}} by {{< ghuser name="timpur" >}} -- esphome: Add QMC5883L Sensor + Improvements to HMC5883L {{< pr number="671" repo="esphome" >}} by {{< ghuser name="timpur" >}} -- esphome: Add B/W support for Waveshare 2.90in (B) screen {{< pr number="889" repo="esphome" >}} by {{< ghuser name="akomelj" >}} -- docs: Add B/W support for Waveshare 2.90in (B) screen {{< pr number="426" repo="esphome-docs" >}} by {{< ghuser name="akomelj" >}} -- esphome: Add support for Sensirion SPS30 Particulate Matter sensors {{< pr number="891" repo="esphome" >}} by {{< ghuser name="valordk" >}} (new-integration) -- docs: Add documentation for Sensirion SPS30 Particulate Matter sensors {{< pr number="424" repo="esphome-docs" >}} by {{< ghuser name="valordk" >}} -- docs: Add TM1651 docs {{< pr number="429" repo="esphome-docs" >}} by {{< ghuser name="freekode" >}} -- esphome: Add TM1561 support {{< pr number="893" repo="esphome" >}} by {{< ghuser name="freekode" >}} (new-integration) -- esphome: Add magic value REPLACEME {{< pr number="881" repo="esphome" >}} -- esphome: Pulse counter validate not both disabled {{< pr number="902" repo="esphome" >}} -- esphome: Optimize application loop speed {{< pr number="860" repo="esphome" >}} -- esphome: Better/stricter pin validation {{< pr number="903" repo="esphome" >}} -- esphome: Disable default wait_time for rc_switch {{< pr number="900" repo="esphome" >}} -- esphome: Update python dependencies {{< pr number="906" repo="esphome" >}} -- esphome: Handle yaml merge keys correcly. {{< pr number="888" repo="esphome" >}} by {{< ghuser name="edge90" >}} -- esphome: Allow loading esphome version from a fork {{< pr number="907" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Clean up YAML Mapping construction {{< pr number="910" repo="esphome" >}} -- docs: Add doc for slow_pwm output component {{< pr number="427" repo="esphome-docs" >}} by {{< ghuser name="nickw444" >}} -- esphome: Add slow_pwm output component {{< pr number="894" repo="esphome" >}} by {{< ghuser name="nickw444" >}} (new-integration) -- esphome: ESP32 GPIOs 33 to 38 can be used for deep sleep wakeup {{< pr number="911" repo="esphome" >}} by {{< ghuser name="adamgreg" >}} -- esphome: Drop Python 2 Support {{< pr number="793" repo="esphome" >}} (breaking-change) -- esphome: Add RFBridge component {{< pr number="896" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- docs: Add docs for RF Bridge {{< pr number="433" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: ct_clamp: Check sample() return value is not NaN {{< pr number="921" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} -- docs: merge all ir climates in a single doc {{< pr number="385" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Climate Mitsubishi {{< pr number="725" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- esphome: fix: only decode when not str already {{< pr number="923" repo="esphome" >}} by {{< ghuser name="wilmardo" >}} -- esphome: fix climate-ir bad merge {{< pr number="935" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: http_request: fix memory allocation {{< pr number="916" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: http_request: version validation fix {{< pr number="917" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: PID Climate {{< pr number="885" repo="esphome" >}} (new-integration) -- docs: not a display component {{< pr number="462" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix for wizard via dashboard not decoding strings {{< pr number="941" repo="esphome" >}} by {{< ghuser name="timsavage" >}} -- esphome: Adding the espressif 2.6.3 {{< pr number="944" repo="esphome" >}} by {{< ghuser name="Valcob" >}} -- esphome: extract and use current version of python 3 {{< pr number="938" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Inverted output in neopixelbus {{< pr number="895" repo="esphome" >}} by {{< ghuser name="voibit" >}} -- docs: Added support for inverted output in neopixelbus {{< pr number="441" repo="esphome-docs" >}} by {{< ghuser name="voibit" >}} -- esphome: Added degree symbol for MAX7219 7-segment display. {{< pr number="764" repo="esphome" >}} by {{< ghuser name="cyberplant" >}} -- esphome: Fix dump/tx of 64 bit codes {{< pr number="940" repo="esphome" >}} by {{< ghuser name="andrasbiro" >}} -- esphome: Update hdc1080.cpp {{< pr number="887" repo="esphome" >}} by {{< ghuser name="dmkif" >}} -- esphome: add tcl112 support for dry, fan and swing {{< pr number="939" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix SGP30 incorrect baseline reading/writing {{< pr number="936" repo="esphome" >}} by {{< ghuser name="panuruj" >}} (breaking-change) -- docs: Update SGP30 for the correct eCO2 and TVOC baseline {{< pr number="458" repo="esphome-docs" >}} by {{< ghuser name="panuruj" >}} -- docs: change docs to suggest logger config {{< pr number="378" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add register_*_effect to allow registering custom effects {{< pr number="947" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- esphome: Bugfix/normalize core comparisons (and Python 3 update fixes) {{< pr number="952" repo="esphome" >}} by {{< ghuser name="timsavage" >}} -- esphome: Add transmit pioneer {{< pr number="922" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- docs: Add transmit pioneer {{< pr number="446" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- docs: add tm1637 docs {{< pr number="467" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Display tm1637 {{< pr number="946" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- esphome: Support a further variant of Xiaomi CGG1 {{< pr number="930" repo="esphome" >}} by {{< ghuser name="mario-tux" >}} -- docs: Add Daikin IR Climate documentation {{< pr number="476" repo="esphome-docs" >}} by {{< ghuser name="hectorgimenez" >}} -- esphome: Daikin climate ir component {{< pr number="964" repo="esphome" >}} by {{< ghuser name="hectorgimenez" >}} (new-integration) -- esphome: fix tm1637 missing __init__.py {{< pr number="975" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: sim800l: Add support of roaming-registered SIM cards {{< pr number="977" repo="esphome" >}} by {{< ghuser name="andriej" >}} -- esphome: BME280: fix typos, use forced mode constant {{< pr number="974" repo="esphome" >}} by {{< ghuser name="GMTA" >}} -- esphome: MQTT climate features {{< pr number="913" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- esphome: Revert default ESP32 upload baud rate {{< pr number="978" repo="esphome" >}} -- esphome: Add TM1651 simple level, turn on, turn off actions {{< pr number="920" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- esphome: Webserver - include css, js in index {{< pr number="932" repo="esphome" >}} by {{< ghuser name="Elkropac" >}} -- docs: web_server - css_include and js_include: add new options and example {{< pr number="459" repo="esphome-docs" >}} by {{< ghuser name="Elkropac" >}} -- docs: Add new action for TM1651 {{< pr number="442" repo="esphome-docs" >}} by {{< ghuser name="freekode" >}} -- docs: Added equal symbol for MAX7219 7-segment display {{< pr number="503" repo="esphome-docs" >}} by {{< ghuser name="egeltje" >}} -- esphome: Added equal symbol for MAX7219 7-segment display {{< pr number="986" repo="esphome" >}} by {{< ghuser name="egeltje" >}} -- esphome: Output from platformio idedata command does not need to be decoded {{< pr number="953" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- esphome: Allow custom lights to be addressable {{< pr number="954" repo="esphome" >}} by {{< ghuser name="brandond" >}} -- esphome: Fix esphome/issues#947 - RGBW(W) white brightness {{< pr number="925" repo="esphome" >}} by {{< ghuser name="pauln" >}} -- esphome: Add support for TTGO epaper boards with B73 revision {{< pr number="928" repo="esphome" >}} by {{< ghuser name="thomasklingbeil" >}} -- esphome: Fix OTA updates getting killed by task_wdt {{< pr number="959" repo="esphome" >}} by {{< ghuser name="Skaronator" >}} -- esphome: Bugfix/1077 decode called on str fetching platformio stacktrace {{< pr number="991" repo="esphome" >}} by {{< ghuser name="timsavage" >}} -- esphome: Add support for Tuya ceiling fan controllers {{< pr number="989" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Fixed iBeacon struct and major and minor parsing {{< pr number="987" repo="esphome" >}} by {{< ghuser name="sekkr1" >}} -- esphome: http_request http fix {{< pr number="980" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Rgbww color fix {{< pr number="967" repo="esphome" >}} by {{< ghuser name="quinnhosler" >}} -- esphome: add time cover assumed_state option {{< pr number="979" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add on_rc_switch trigger {{< pr number="983" repo="esphome" >}} by {{< ghuser name="escoand" >}} -- esphome: SCD30 fixes and improvements {{< pr number="962" repo="esphome" >}} by {{< ghuser name="Sizurka" >}} -- docs: cover time based add assumed state option {{< pr number="490" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: pzemac total energy support {{< pr number="933" repo="esphome" >}} by {{< ghuser name="yekm" >}} -- docs: docs for Tuya fan, update tuya light {{< pr number="502" repo="esphome-docs" >}} by {{< ghuser name="buxtronix" >}} -- docs: Next {{< pr number="491" repo="esphome-docs" >}} by {{< ghuser name="CircuitSetup" >}} -- docs: add energy support to pzemac {{< pr number="478" repo="esphome-docs" >}} by {{< ghuser name="yekm" >}} -- docs: Added examples for uart text sensor {{< pr number="468" repo="esphome-docs" >}} by {{< ghuser name="tomludd" >}} -- docs: Add docs for TMP117 sensor {{< pr number="505" repo="esphome-docs" >}} by {{< ghuser name="Azimath" >}} -- esphome: Add TMP117 component {{< pr number="992" repo="esphome" >}} by {{< ghuser name="Azimath" >}} (new-integration) -- esphome: Unittests for esphome python code {{< pr number="931" repo="esphome" >}} by {{< ghuser name="timsavage" >}} -- esphome: Corrections to default register values of ATM90E32 component {{< pr number="982" repo="esphome" >}} by {{< ghuser name="CircuitSetup" >}} -- esphome: Support for AHT10 temperature and humidity sensor {{< pr number="949" repo="esphome" >}} by {{< ghuser name="gmasse" >}} (new-integration) -- docs: Add documentation for AHT10 sensor {{< pr number="466" repo="esphome-docs" >}} by {{< ghuser name="gmasse" >}} -- esphome: Retry connecting if the connection is not valid {{< pr number="994" repo="esphome" >}} by {{< ghuser name="abmantis" >}} -- esphome: Support for pcd8544 (nokia 5110 and 3310) screen {{< pr number="973" repo="esphome" >}} by {{< ghuser name="pax0r" >}} -- esphome: fix servo bug restoring state and starting servo detached {{< pr number="1008" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (breaking-change) -- docs: Documentation for PCD8544 {{< pr number="485" repo="esphome-docs" >}} by {{< ghuser name="pax0r" >}} -- esphome: VSCode devcontainer support {{< pr number="914" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: removes comments from lambda {{< pr number="998" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add HM3301 laser dust detection sensor {{< pr number="963" repo="esphome" >}} by {{< ghuser name="freekode" >}} (new-integration) -- docs: Add docs HM3301 {{< pr number="529" repo="esphome-docs" >}} by {{< ghuser name="freekode" >}} -- esphome: Constant brightness {{< pr number="1007" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- docs: Add webserver-v1.js click handlers for Cover buttons {{< pr number="521" repo="esphome-docs" >}} by {{< ghuser name="balrog-kun" >}} -- esphome: web_server: Add cover calls to REST API {{< pr number="999" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} -- esphome: Add AC Dimmer support {{< pr number="880" repo="esphome" >}} (new-feature) (new-integration) -- docs: add ac_dimmer {{< pr number="536" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Add documentation for cwww and rgbww constant_brightness variables. (… {{< pr number="540" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: feat: Add support for MCP23016 IO Expander {{< pr number="1012" repo="esphome" >}} by {{< ghuser name="reidprojects" >}} (new-integration) -- docs: feat: Added documentation to support for MCP23016 {{< pr number="537" repo="esphome-docs" >}} by {{< ghuser name="reidprojects" >}} -- docs: Kristopher mackowiak next {{< pr number="544" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: fix copy paste void {{< pr number="545" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Daikin climate receiver support {{< pr number="1001" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- docs: ir_climate: describe daikin receive support {{< pr number="522" repo="esphome-docs" >}} by {{< ghuser name="puuu" >}} -- esphome: Tests for CPP Code generation and some Python3 improvements {{< pr number="961" repo="esphome" >}} by {{< ghuser name="timsavage" >}} -- esphome: Climate whirlpool {{< pr number="1029" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- docs: add whirlpool climate {{< pr number="552" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: add mac address info {{< pr number="554" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: add mac address to wifi info {{< pr number="1030" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: SHTC3: Wake up the sensor during setup {{< pr number="993" repo="esphome" >}} by {{< ghuser name="Sizurka" >}} -- esphome: Change buffer sending process for waveshare_epaper (2.70in) {{< pr number="1031" repo="esphome" >}} by {{< ghuser name="ukewea" >}} -- docs: add light on off triggers docs {{< pr number="559" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: add lights on off triggers {{< pr number="1037" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-feature) -- docs: Bluetooth advertising automation {{< pr number="512" repo="esphome-docs" >}} by {{< ghuser name="puuu" >}} -- esphome: Bluetooth advertising automation {{< pr number="995" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- esphome: Fix missing yield in ESP32 UART timeout code causing watchdog resets when blocking for serial data. {{< pr number="1016" repo="esphome" >}} by {{< ghuser name="fake-name" >}} -- docs: Make initial run variable available to addressable_lambda {{< pr number="558" repo="esphome-docs" >}} by {{< ghuser name="Skaronator" >}} -- esphome: Make initial run variable available to addressable_lambda {{< pr number="1035" repo="esphome" >}} by {{< ghuser name="Skaronator" >}} -- esphome: Dashboard Updates {{< pr number="1025" repo="esphome" >}} by {{< ghuser name="jonathanadams" >}} (new-feature) (notable-change) -- docs: remote_receiver: describe memory_block configuration {{< pr number="523" repo="esphome-docs" >}} by {{< ghuser name="puuu" >}} -- esphome: esp32 remote: make RMT memory blocks configureable {{< pr number="1002" repo="esphome" >}} by {{< ghuser name="puuu" >}} -- esphome: test disable no delay {{< pr number="1026" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: http_request ESP32 insecure requests fix {{< pr number="1041" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Update FastLED Library 3.3.3 {{< pr number="1020" repo="esphome" >}} by {{< ghuser name="teamsuperpanda" >}} -- docs: Max7219 intensity change update {{< pr number="546" repo="esphome-docs" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Some max7219 updates. {{< pr number="1021" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- docs: 5.83in Waveshare add {{< pr number="572" repo="esphome-docs" >}} by {{< ghuser name="sredfern" >}} -- esphome: Extending Support to 5.83in Waveshare eink B/W displays {{< pr number="1009" repo="esphome" >}} by {{< ghuser name="sredfern" >}} -- esphome: Allow tm1637 to use pins from IO expanders {{< pr number="1058" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Fix fan oscillation trait not being used {{< pr number="1048" repo="esphome" >}} by {{< ghuser name="blejdfist" >}} -- esphome: Update tm1637.cpp {{< pr number="1044" repo="esphome" >}} by {{< ghuser name="nepozs" >}} -- esphome: dht: Fix sensor reading from DHT22 {{< pr number="926" repo="esphome" >}} by {{< ghuser name="robinsmidsrod" >}} -- docs: dht: Add DHT22_TYPE2 model {{< pr number="563" repo="esphome-docs" >}} by {{< ghuser name="robinsmidsrod" >}} -- esphome: Add lambda to devcontainer config {{< pr number="1059" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Ble scanner doc {{< pr number="611" repo="esphome-docs" >}} by {{< ghuser name="TheKuko" >}} -- esphome: Ble scanner {{< pr number="976" repo="esphome" >}} by {{< ghuser name="TheKuko" >}} (new-feature) -- docs: Update arduino framework versions {{< pr number="575" repo="esphome-docs" >}} by {{< ghuser name="Skaronator" >}} -- docs: Fix pcf8574 mode {{< pr number="616" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Dallas autosetup {{< pr number="551" repo="esphome-docs" >}} by {{< ghuser name="krahabb" >}} -- esphome: Expose mac address via discovery (mDNS) {{< pr number="1038" repo="esphome" >}} by {{< ghuser name="ctalkington" >}} -- docs: ESP32 DAC output documentation {{< pr number="617" repo="esphome-docs" >}} by {{< ghuser name="napieraj" >}} -- esphome: Add support for ESP32 DAC {{< pr number="1071" repo="esphome" >}} by {{< ghuser name="napieraj" >}} (new-integration) -- esphome: Uart improvments {{< pr number="1024" repo="esphome" >}} by {{< ghuser name="0hax" >}} (notable-change) -- docs: Uart improvments {{< pr number="571" repo="esphome-docs" >}} by {{< ghuser name="0hax" >}} -- esphome: Adding support for MAX31856 Thermocouple Temperature Sensor (feature #700) {{< pr number="1039" repo="esphome" >}} by {{< ghuser name="declanshanaghy" >}} (new-integration) -- esphome: Add support for additional Xiaomi BLE sensors {{< pr number="1027" repo="esphome" >}} by {{< ghuser name="ahpohl" >}} (new-integration) (notable-change) -- docs: Add support for additional Xiaomi BLE sensors {{< pr number="576" repo="esphome-docs" >}} by {{< ghuser name="ahpohl" >}} -- esphome: Explicitly set language to English {{< pr number="1073" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- docs: Added TTGO-Camera Plus PIN configuration {{< pr number="510" repo="esphome-docs" >}} by {{< ghuser name="rudgr" >}} -- esphome: Added support for ssd1327 {{< pr number="985" repo="esphome" >}} by {{< ghuser name="igg" >}} -- docs: added energy in pzem004 documentation {{< pr number="547" repo="esphome-docs" >}} by {{< ghuser name="adriancuzman" >}} -- esphome: added energy reading for pzem004 {{< pr number="1022" repo="esphome" >}} by {{< ghuser name="adriancuzman" >}} -- esphome: BH1750 Measurement time {{< pr number="997" repo="esphome" >}} by {{< ghuser name="rradar" >}} -- docs: BH1750 Measurement time doc updates {{< pr number="515" repo="esphome-docs" >}} by {{< ghuser name="rradar" >}} -- esphome: Sort keys in dicts in output yaml for 'config' command {{< pr number="1049" repo="esphome" >}} by {{< ghuser name="ivan4th" >}} -- esphome: Extend uart: with rx_buffer_size: {{< pr number="1006" repo="esphome" >}} by {{< ghuser name="ayufan" >}} -- docs: Document `uart.rx_buffer_size` {{< pr number="528" repo="esphome-docs" >}} by {{< ghuser name="ayufan" >}} -- esphome: Add Prometheus /metrics-Endpoint {{< pr number="1032" repo="esphome" >}} by {{< ghuser name="margau" >}} (new-feature) -- docs: Add Prometheus-Documentation {{< pr number="556" repo="esphome-docs" >}} by {{< ghuser name="margau" >}} -- esphome: Turn off PN532 RF field when not expecting a tag {{< pr number="1046" repo="esphome" >}} by {{< ghuser name="apeeters" >}} -- docs: Docs for CS Optional {{< pr number="644" repo="esphome-docs" >}} by {{< ghuser name="igg" >}} -- esphome: making SPI CS optional {{< pr number="988" repo="esphome" >}} by {{< ghuser name="igg" >}} -- esphome: AQI calculator for HM3301 {{< pr number="1011" repo="esphome" >}} by {{< ghuser name="freekode" >}} -- docs: AQI calculator for HM3301 {{< pr number="535" repo="esphome-docs" >}} by {{< ghuser name="freekode" >}} -- esphome: Fix gamma_correct when using constant_brightness option {{< pr number="1043" repo="esphome" >}} by {{< ghuser name="Skaronator" >}} -- esphome: Add E1.31 support {{< pr number="950" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- esphome: Add `adalight` light effect {{< pr number="956" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- docs: Add documentation about E1.31, Adalight and WLED {{< pr number="646" repo="esphome-docs" >}} by {{< ghuser name="ayufan" >}} -- esphome: Add WLED support {{< pr number="1092" repo="esphome" >}} by {{< ghuser name="ayufan" >}} (new-integration) -- docs: PID Climate Controller {{< pr number="432" repo="esphome-docs" >}} -- docs: Added Etekcity Voltson cookbook {{< pr number="628" repo="esphome-docs" >}} by {{< ghuser name="gitolicious" >}} -- esphome: Update docker base image {{< pr number="1093" repo="esphome" >}} by {{< ghuser name="Skaronator" >}} -- esphome: SenseAir: flush input buffer on read error {{< pr number="1017" repo="esphome" >}} by {{< ghuser name="ferbar" >}} -- docs: Add documentation for fan direction {{< pr number="580" repo="esphome-docs" >}} by {{< ghuser name="blejdfist" >}} -- esphome: Add support for controlling fan direction {{< pr number="1051" repo="esphome" >}} by {{< ghuser name="blejdfist" >}} -- esphome: Add API component to logging error message {{< pr number="1062" repo="esphome" >}} by {{< ghuser name="JeffResc" >}} -- docs: Added MCP3008 {{< pr number="591" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Add MCP3008 I/O Expander {{< pr number="1057" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: ADE7953: Fix dereferencing of a null pointer {{< pr number="1086" repo="esphome" >}} by {{< ghuser name="rnauber" >}} -- esphome: sgp30 baseline write bug fix (#1157) {{< pr number="1078" repo="esphome" >}} by {{< ghuser name="korellas" >}} -- esphome: fix for ESP32 'Association Leave' {{< pr number="1081" repo="esphome" >}} by {{< ghuser name="MasterTim17" >}} -- esphome: Climate bang bang enhancements {{< pr number="1061" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- docs: Climate bang bang enhancements {{< pr number="595" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: Fix decode and encode for RC5-protocol {{< pr number="1047" repo="esphome" >}} by {{< ghuser name="LukasK13" >}} -- esphome: Add esp8266 huzzah gpio pins {{< pr number="1096" repo="esphome" >}} by {{< ghuser name="halkeye" >}} -- esphome: fix percentage handling {{< pr number="1094" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- docs: Add support for command-line-substitutions {{< pr number="538" repo="esphome-docs" >}} by {{< ghuser name="AlexMekkering" >}} -- esphome: Add support for command-line substitutions {{< pr number="1014" repo="esphome" >}} by {{< ghuser name="AlexMekkering" >}} (new-feature) -- esphome: Add LG Climate IR {{< pr number="1097" repo="esphome" >}} by {{< ghuser name="square99" >}} (new-integration) -- docs: Add LG Climate IR {{< pr number="655" repo="esphome-docs" >}} by {{< ghuser name="square99" >}} -- esphome: ESP32: Conditionally log on services to avoid OOM crashes {{< pr number="1098" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Release BT controller unused memory in the right place {{< pr number="1095" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- docs: add documentation for component sn74hc595 {{< pr number="637" repo="esphome-docs" >}} by {{< ghuser name="phjr" >}} -- esphome: add support for SN74HC595 shift register {{< pr number="1083" repo="esphome" >}} by {{< ghuser name="phjr" >}} (new-integration) -- esphome: Max7219 in Dot Matrix configuration {{< pr number="1053" repo="esphome" >}} by {{< ghuser name="rspaargaren" >}} -- docs: Max7219 new documentation {{< pr number="585" repo="esphome-docs" >}} by {{< ghuser name="rspaargaren" >}} -- esphome: Add support for ST7789V display module (as on TTGO T-Display) {{< pr number="1050" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- docs: Add documentation for ST7789V display module (as on TTGO T-Display) {{< pr number="594" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: Vl53 long range {{< pr number="1055" repo="esphome" >}} by {{< ghuser name="rspaargaren" >}} -- docs: Update vl53l0x.rst {{< pr number="592" repo="esphome-docs" >}} by {{< ghuser name="rspaargaren" >}} -- esphome: fix shunt voltage / current / power reading in INA3221 {{< pr number="1101" repo="esphome" >}} by {{< ghuser name="Vxider" >}} (breaking-change) -- esphome: Fix current / power reading in INA219 {{< pr number="1103" repo="esphome" >}} by {{< ghuser name="Vxider" >}} -- esphome: Fix: Component script not stopped in certain situations {{< pr number="1004" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} (breaking-change) -- docs: add script.stop breaking change {{< pr number="659" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fixes esphome/issues#1192 - Save on upload bug {{< pr number="1107" repo="esphome" >}} by {{< ghuser name="jonathanadams" >}} -- esphome: Revert "Climate bang bang enhancements" {{< pr number="1106" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Use default average mode in INA3221 {{< pr number="1102" repo="esphome" >}} by {{< ghuser name="Vxider" >}} -- esphome: Thermostat component {{< pr number="1105" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- docs: Added thermostat component doc {{< pr number="665" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: unpin mbedtls version {{< pr number="1114" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix ethernet logging too many warn messages {{< pr number="1112" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: add click dependency {{< pr number="1111" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Add documentation for climate.pid.reset_integral_term action {{< pr number="660" repo="esphome-docs" >}} by {{< ghuser name="carlos-sarmiento" >}} -- esphome: Add Integral Reset Action to PIDClimate {{< pr number="1104" repo="esphome" >}} by {{< ghuser name="carlos-sarmiento" >}} -- docs: color interlock {{< pr number="653" repo="esphome-docs" >}} by {{< ghuser name="peq123" >}} -- esphome: RGBWW - added channel interlock for RGB vs white {{< pr number="1042" repo="esphome" >}} by {{< ghuser name="peq123" >}} -- docs: Add documentation for new WPA2-EAP authentication. {{< pr number="633" repo="esphome-docs" >}} by {{< ghuser name="tomtom5152" >}} -- docs: SSD1325 documentation update for grayscale support {{< pr number="596" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: SSD1325 grayscale support {{< pr number="1064" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- docs: Cleaned up ESP32 DAC docs {{< pr number="618" repo="esphome-docs" >}} by {{< ghuser name="napieraj" >}} -- docs: Added SSD1351 doc {{< pr number="663" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: Add SSD1351 OLED display support {{< pr number="1100" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- esphome: Add cryptography requirement to the setup.py file {{< pr number="1116" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Support ssd1327 docs {{< pr number="664" repo="esphome-docs" >}} by {{< ghuser name="igg" >}} -- esphome: Revert "Add ESP32 support for WPA2-EAP Enterprise WiFi authentication" {{< pr number="1117" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Revert "Add cryptography requirement to the setup.py file" {{< pr number="1118" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Install updated git version in lint image {{< pr number="1122" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: documentation for version sensor hide timestamp option {{< pr number="640" repo="esphome-docs" >}} by {{< ghuser name="Wauter" >}} -- esphome: fixes script wait not waiting {{< pr number="1123" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Split the Tuya component documentation {{< pr number="631" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add support for Tuya Switches {{< pr number="1074" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- docs: Add Tuya Switch docs {{< pr number="625" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: fix script.wait action {{< pr number="1120" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esphome: Add support for Tuya Climate devices {{< pr number="1076" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- docs: Add Tuya Climate docs {{< pr number="632" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add support for Tuya Sensors {{< pr number="1088" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- docs: Add Tuya Sensor docs {{< pr number="661" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Add Tuya Binary Sensor docs {{< pr number="662" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add support for Tuya Binary Sensors {{< pr number="1089" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) -- esphome: feature request 398 add 'hide timestamp' option for version text sensor {{< pr number="1085" repo="esphome" >}} by {{< ghuser name="Wauter" >}} -- esphome: Add 7.5inch v2 waveshare {{< pr number="1077" repo="esphome" >}} by {{< ghuser name="PaulAntonDeen" >}} -- docs: Added new version of 7.5inch waveshare epaper {{< pr number="675" repo="esphome-docs" >}} by {{< ghuser name="PaulAntonDeen" >}} -- esphome: Move CI/CD to GitHub Actions {{< pr number="1125" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add PR labels based on files changed {{< pr number="1127" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Brightness support for Nextion display {{< pr number="1109" repo="esphome" >}} by {{< ghuser name="Vxider" >}} -- docs: Brightness support for Nextion display {{< pr number="668" repo="esphome-docs" >}} by {{< ghuser name="Vxider" >}} -- esphome: Revert "Add PR labels based on files changed" {{< pr number="1128" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Add Toshiba climate {{< pr number="681" repo="esphome-docs" >}} by {{< ghuser name="JoppyFurr" >}} -- esphome: Add support for Toshiba heat pumps {{< pr number="1121" repo="esphome" >}} by {{< ghuser name="JoppyFurr" >}} (new-integration) -- esphome: Packages feature {{< pr number="1052" repo="esphome" >}} by {{< ghuser name="corvis" >}} (new-feature) (notable-change) -- docs: Added documentation for packages feature {{< pr number="582" repo="esphome-docs" >}} by {{< ghuser name="corvis" >}} -- esphome: Allow updating pid control params {{< pr number="1115" repo="esphome" >}} by {{< ghuser name="carlos-sarmiento" >}} -- esphome: Github actions repo {{< pr number="1130" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Feature/fix unit tests {{< pr number="1129" repo="esphome" >}} by {{< ghuser name="pkuehne" >}} -- esphome: GH Actions Update {{< pr number="1134" repo="esphome" >}} -- esphome: Bug/fix internal flag in binary sensor {{< pr number="1136" repo="esphome" >}} by {{< ghuser name="pkuehne" >}} -- esphome: Use inclusive terminology {{< pr number="1137" repo="esphome" >}} -- esphome: Add exposure notifications {{< pr number="1135" repo="esphome" >}} (new-integration) -- esphome: Fix adding another mbedtls {{< pr number="1131" repo="esphome" >}} -- esphome: Tuya Sensor remove commented out code (style guide) {{< pr number="1132" repo="esphome" >}} -- docs: Add exposure notifications docs {{< pr number="683" repo="esphome-docs" >}} -- docs: Improve RGBW(W) docs {{< pr number="682" repo="esphome-docs" >}} -- esphome: add mqtt speed topics for fan {{< pr number="1140" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esphome: Bump pytest from 5.4.1 to 5.4.3 {{< pr number="1144" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump hypothesis from 5.10.4 to 5.19.3 {{< pr number="1146" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump protobuf from 3.11.3 to 3.12.2 {{< pr number="1147" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump ifaddr from 0.1.6 to 0.1.7 {{< pr number="1148" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytest-cov from 2.8.1 to 2.10.0 {{< pr number="1145" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix Waveshare 7.50inV2 {{< pr number="1143" repo="esphome" >}} -- esphome: Load setup.py requirements from requirements.txt {{< pr number="1149" repo="esphome" >}} -- esphome: Add pytest to CI {{< pr number="1138" repo="esphome" >}} -- esphome: Feature/component test fixture {{< pr number="1142" repo="esphome" >}} by {{< ghuser name="pkuehne" >}} -- esphome: Use more layer caching for esphome/esphome Dockerfile {{< pr number="1150" repo="esphome" >}} -- esphome: Don't remove location information for packages {{< pr number="1133" repo="esphome" >}} -- esphome: Add tasmota magic bits to short circuit compat check {{< pr number="1152" repo="esphome" >}} -- esphome: Fix executable bits on some hassio files {{< pr number="1151" repo="esphome" >}} -- esphome: Don't run deploy job when repository is not esphome/esphome {{< pr number="1157" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Docs for Setting control parameters on PID {{< pr number="674" repo="esphome-docs" >}} by {{< ghuser name="carlos-sarmiento" >}} -- esphome: Bump pytest-mock from 1.13.0 to 3.2.0 {{< pr number="1159" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pylint from 2.5.0 to 2.5.3 {{< pr number="1160" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump tzlocal from 2.0.0 to 2.1 {{< pr number="1162" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix unit test warning for hypothesis deprecation {{< pr number="1163" repo="esphome" >}} by {{< ghuser name="pkuehne" >}} -- esphome: Bump flake8 from 3.7.9 to 3.8.3 {{< pr number="1161" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump FastLED from 3.2.9 to 3.3.3 {{< pr number="1164" repo="esphome" >}} -- esphome: Arduino dev branch changed {{< pr number="1139" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add bump version script {{< pr number="1153" repo="esphome" >}} -- esphome: fix(cover yaml validation): adds gate to coincide with Home Assistant {{< pr number="1175" repo="esphome" >}} by {{< ghuser name="erasmuswill" >}} -- esphome: http_request fix urls caching {{< pr number="1174" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Fix rf_bridge send and receive {{< pr number="1180" repo="esphome" >}} by {{< ghuser name="vicfergar" >}} -- esphome: mdi:timer icon replaced with mdi:timer-outline {{< pr number="1181" repo="esphome" >}} by {{< ghuser name="Troon" >}} -- esphome: Bump hypothesis from 5.19.3 to 5.20.3 {{< pr number="1176" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix Home Assistant API disconnects when using st7789v display. {{< pr number="1179" repo="esphome" >}} by {{< ghuser name="dr-oblivium" >}} -- esphome: Fixed type mismatch between result field and preference of integration sensor {{< pr number="1178" repo="esphome" >}} by {{< ghuser name="FrankBakkerNl" >}} -- esphome: Feature/wizard tests {{< pr number="1167" repo="esphome" >}} by {{< ghuser name="pkuehne" >}} -- esphome: Add HassIO by-id serial port paths to serial ports listing {{< pr number="1155" repo="esphome" >}} -- esphome: Bump NeoPixelBus from 2.5.2 to 2.5.7 {{< pr number="1165" repo="esphome" >}} -- esphome: Bump colorlog from 4.1.0 to 4.2.1 {{< pr number="1183" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump hypothesis from 5.20.3 to 5.21.0 {{< pr number="1184" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: ESP8266 Disable Pin Initialization on Boot to fix pin toggling {{< pr number="1185" repo="esphome" >}} -- esphome: Fix dashboard logout button and py3.8 removed hmac.new digestmod {{< pr number="1156" repo="esphome" >}} -- docs: WPA2 Enterprise Attempt 2 {{< pr number="704" repo="esphome-docs" >}} -- esphome: WPA2 Enterprise Attempt 2 {{< pr number="1158" repo="esphome" >}} (new-feature) -- esphome: Remove symlink_ops.py {{< pr number="1196" repo="esphome" >}} -- esphome: Fix senseair flush input buffer wrong log level {{< pr number="1194" repo="esphome" >}} -- esphome: Fix WLED minor issues {{< pr number="1193" repo="esphome" >}} -- esphome: Clean up UART Improvements code {{< pr number="1190" repo="esphome" >}} -- esphome: Partially revert make SPI CS pin optional {{< pr number="1187" repo="esphome" >}} -- esphome: New script modes POC {{< pr number="1168" repo="esphome" >}} (breaking-change) (new-feature) -- docs: Add script modes and timers {{< pr number="693" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Revert "Sort keys in dicts in output yaml for 'config' command (#1049)" {{< pr number="1191" repo="esphome" >}} -- esphome: Fix SN74HC595 doesn't use ESPHome HAL and add lint checks for it {{< pr number="1188" repo="esphome" >}} -- docs: Partially Revert make SPI CS pin optional {{< pr number="706" repo="esphome-docs" >}} -- esphome: Enlarge ESP32 app partitions {{< pr number="1197" repo="esphome" >}} -- esphome: Add CODEOWNERS mechanism {{< pr number="1199" repo="esphome" >}} -- esphome: rtttl player {{< pr number="1171" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- docs: add buzzer rtttl docs {{< pr number="700" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add @glmnet components {{< pr number="1200" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: fix merge: climate devices moved to climate-ir {{< pr number="710" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add @jesserockz to codeowners {{< pr number="1202" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Fix set point logging issue {{< pr number="1201" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- docs: Revert "Dallas autosetup (#551)" {{< pr number="709" repo="esphome-docs" >}} -- esphome: Revert "Added auto discovery and setup to Dallas Platform (#1028)" {{< pr number="1189" repo="esphome" >}} - -## Release 1.15.1 - September 14 - -- esphome: fix sntp timezone {{< pr number="1266" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix for Ruuvi voltage parsing of RAWv2 format {{< pr number="1267" repo="esphome" >}} by {{< ghuser name="akoivist" >}} -- docs: Adds Tuya Climate temperature multiplier {{< pr number="756" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Adds support for Tuya Climate temperature multiplier {{< pr number="1276" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.15.2 - September 20 - -- docs: Light triggers referenced in the "automation" guide. {{< pr number="746" repo="esphome-docs" >}} by {{< ghuser name="demikl" >}} -- docs: specific MacOS Docker command to launch dashboard {{< pr number="553" repo="esphome-docs" >}} by {{< ghuser name="oncleben31" >}} -- docs: Update index.rst {{< pr number="757" repo="esphome-docs" >}} by {{< ghuser name="3ative" >}} -- esphome: Adds new homeassistant.tag_scanned action {{< pr number="1281" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: add custom uart id usage {{< pr number="765" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Readds the battery level for xiaomi_hhccjcy01 {{< pr number="1288" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: fix(remote_receiver): Add missing pin setup for ESP32 {{< pr number="1252" repo="esphome" >}} by {{< ghuser name="lwfitzgerald" >}} -- docs: Add docs for homeassistant.tag_scanned action {{< pr number="763" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.15.3 - October 22 - -- docs: Mention CODEOWNERS magic symbol {{< pr number="767" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: using docker image to build esphome-docs locally {{< pr number="747" repo="esphome-docs" >}} by {{< ghuser name="demikl" >}} -- docs: Add missing doc for rc_switch event {{< pr number="740" repo="esphome-docs" >}} by {{< ghuser name="micw" >}} -- docs: Remove unneeded parameters {{< pr number="752" repo="esphome-docs" >}} by {{< ghuser name="KTibow" >}} -- docs: Enable color_interlock for the Teckin SB50 example {{< pr number="743" repo="esphome-docs" >}} by {{< ghuser name="CarlosGS" >}} -- docs: clarify esp8266_restore_from_flash with restore_value {{< pr number="754" repo="esphome-docs" >}} by {{< ghuser name="pille" >}} -- docs: Update mirabella-genio-bulb.rst {{< pr number="732" repo="esphome-docs" >}} by {{< ghuser name="DotNetDann" >}} -- docs: Fix APDS9960 datasheet link {{< pr number="772" repo="esphome-docs" >}} by {{< ghuser name="JonathanTreffler" >}} -- docs: Update uart.rst {{< pr number="771" repo="esphome-docs" >}} by {{< ghuser name="sublime93" >}} -- docs: Update index.rst {{< pr number="773" repo="esphome-docs" >}} by {{< ghuser name="damanti-me" >}} -- docs: HM3301 - Change type to calculation_type {{< pr number="769" repo="esphome-docs" >}} by {{< ghuser name="rdehuyss" >}} -- docs: Update diy.rst {{< pr number="781" repo="esphome-docs" >}} by {{< ghuser name="Dilbert66" >}} -- docs: Update docker architectures in getting started {{< pr number="780" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Remove bh7150 API reference {{< pr number="784" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Add 2.13in-ttgo-b73 to list of waveshare models {{< pr number="786" repo="esphome-docs" >}} by {{< ghuser name="davewongillies" >}} -- docs: Typo: connedted -> connected {{< pr number="787" repo="esphome-docs" >}} by {{< ghuser name="johanvanderkuijl" >}} -- docs: Update edit URL on Sonoff Basic page {{< pr number="785" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Update Sonoff Mini {{< pr number="783" repo="esphome-docs" >}} by {{< ghuser name="debsahu" >}} -- docs: Set correct link to ESPColor struct {{< pr number="788" repo="esphome-docs" >}} by {{< ghuser name="cdrfun" >}} -- docs: Add battery_level note for xiaomi_hhccjcy01 {{< pr number="761" repo="esphome-docs" >}} by {{< ghuser name="axilleas" >}} -- docs: Corrected the example pin mapping to GPIO mapping. {{< pr number="789" repo="esphome-docs" >}} by {{< ghuser name="shaeed" >}} -- esphome: fix chip_rotation: 180 {{< pr number="1321" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- docs: Fix links, moved to gists {{< pr number="802" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Update wifi.rst {{< pr number="795" repo="esphome-docs" >}} by {{< ghuser name="Frankster-NL" >}} -- docs: BME680 default address is 0x76 {{< pr number="792" repo="esphome-docs" >}} by {{< ghuser name="trvrnrth" >}} -- docs: Individual BMXXXXX sensor configs are optional {{< pr number="791" repo="esphome-docs" >}} by {{< ghuser name="trvrnrth" >}} -- esphome: Fix Light Trigger {{< pr number="1308" repo="esphome" >}} by {{< ghuser name="MartinWelsch" >}} -- esphome: Fix Xiaomi merged packet parsing {{< pr number="1293" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} -- docs: Correct pull-up value {{< pr number="811" repo="esphome-docs" >}} by {{< ghuser name="tomlut" >}} -- esphome: Fix color_interlock behavior {{< pr number="1325" repo="esphome" >}} by {{< ghuser name="margau" >}} -- esphome: Fix scheduler with too many cancelled timers {{< pr number="1309" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: fix config check in OnlyWith configuration helper {{< pr number="1304" repo="esphome" >}} by {{< ghuser name="akomelj" >}} -- esphome: fix: Incorrect time delay conversion breaks remote_transmitter_esp8266.cpp {{< pr number="1322" repo="esphome" >}} by {{< ghuser name="thejonesyboy" >}} -- esphome: fix hm3301 AQICalculator is off by 1 {{< pr number="1331" repo="esphome" >}} by {{< ghuser name="ikatkov" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.16.0.md b/content/changelog/v1.16.0.md deleted file mode 100644 index 4be6da3de7..0000000000 --- a/content/changelog/v1.16.0.md +++ /dev/null @@ -1,387 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.16.0." -title: "Changelog - Version 1.16.0 - February 3, 2021" -params: - seo: - description: Changelog for ESPHome version 1.16.0. - image: /_static/changelog-1.16.0.png ---- - - -{{< imgtable >}} -"TMP102","components/sensor/tmp102","tmp102.jpg","" -"MCP9808","components/sensor/mcp9808","mcp9808.jpg","" -"RC522","components/binary_sensor/rc522","rc522.jpg","" -"H-bridge Light","components/light/hbridge","brightness-medium.svg","dark-invert" -"ILI9341","components/display/ili9341","ili9341.jpg","" -"Teleinfo","components/sensor/teleinfo","teleinfo.jpg","" -"EZO sensor circuits","components/sensor/ezo","ezo-ph-circuit.png","" -"SSD1322","components/display/ssd1322","ssd1322.jpg","" -"SSD1327","components/display/ssd1327","ssd1327.jpg","" -"SSD1331","components/display/ssd1331","ssd1331.jpg","" -"ST7735","components/display/st7735","st7735.jpg","" -"MCP23SXX I/O Expander - SPI Bus","components/mcp23Sxx","mcp230xx.svg","" -"CAN Bus","components/canbus","canbus.svg","" -"Inkplate 6","components/display/Inkplate","inkplate6.jpg","" -{{< /imgtable >}} -Hello, hello. Jesse Hills ({{< ghuser name="jesserockz" >}}) here. Yet another new name doing the next release. - -Hopefully from this point forward, we are looking at releasing monthly on the first Wednesday of each month, -we got the idea from Home Assistant! Thanks guys! - -There are a few new components in this release, but there was a lot of bugfixing and improvements overall and -we have a lot of PRs to go through for new features for next months release. - -Thank you to all contributors, bug reporters and patrons! Without you this project would not be possible! - -Until next month. - -## New Features - -- esphome: Enable reverse display of the Max7219 digit {{< pr number="1234" repo="esphome" >}} by {{< ghuser name="rspaargaren" >}} (new-feature) -- esphome: Pulse_counter measure total pulses {{< pr number="1173" repo="esphome" >}} by {{< ghuser name="FrankBakkerNl" >}} (new-feature) -- esphome: Support I2C transactions with combined reads and writes {{< pr number="996" repo="esphome" >}} by {{< ghuser name="la7dja" >}} (new-feature) - -## New Integrations - -- esphome: Added tmp102 temperature sensor support {{< pr number="929" repo="esphome" >}} by {{< ghuser name="timsavage" >}} (new-integration) -- esphome: Add MCP9808 temperature sensor {{< pr number="1169" repo="esphome" >}} by {{< ghuser name="k7hpn" >}} (new-integration) -- esphome: Add rc522 {{< pr number="1298" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- esphome: Pn532 upgrades {{< pr number="1302" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) (new-integration) -- esphome: Add support for ATC_MiThermometer {{< pr number="1291" repo="esphome" >}} by {{< ghuser name="ahpohl" >}} (new-integration) -- esphome: Hbridge christmas light {{< pr number="1251" repo="esphome" >}} by {{< ghuser name="DotNetDann" >}} (new-integration) -- esphome: add Ili9341 display {{< pr number="1233" repo="esphome" >}} by {{< ghuser name="Valcob" >}} (new-integration) -- esphome: components: teleinfo: electrical counter information. {{< pr number="1108" repo="esphome" >}} by {{< ghuser name="0hax" >}} (new-integration) -- esphome: add support for EZO sensor circuits {{< pr number="1239" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- esphome: Add climate.hitachi_ac344 {{< pr number="1336" repo="esphome" >}} by {{< ghuser name="honomoa" >}} (new-integration) -- esphome: SSD1331 display support {{< pr number="1244" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- esphome: New display ST7735 {{< pr number="1066" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (new-integration) -- esphome: MCP23SXX I/O Expander - SPI {{< pr number="1068" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (new-integration) -- esphome: Add GIF Animation Support {{< pr number="1378" repo="esphome" >}} by {{< ghuser name="Syndlex" >}} (new-integration) -- esphome: Canbus + MCP2515 including ExtID support {{< pr number="1384" repo="esphome" >}} by {{< ghuser name="danielschramm" >}} (new-integration) -- esphome: Add full SSD1327 display support {{< pr number="1406" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- esphome: SSD1322 display support {{< pr number="1405" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- esphome: DS1307 real time clock component {{< pr number="1441" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) (new-integration) -- esphome: Add rc522 i2c {{< pr number="1432" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) (new-integration) -- esphome: Add NDEF reading and writing to PN532 {{< pr number="1351" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) (new-integration) -- esphome: Inkplate 6 support for ESPHome {{< pr number="1283" repo="esphome" >}} by {{< ghuser name="davidzovko" >}} (cherry-picked) (new-integration) -- esphome: Support for MHO-C401 (fix) {{< pr number="1486" repo="esphome" >}} by {{< ghuser name="nikito7" >}} (cherry-picked) (new-integration) - -## Breaking Changes - -- esphome: Replace CENTER_LEFT with TOP_LEFT to match other printf function {{< pr number="1295" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} (breaking-change) -- esphome: Float output: Fix min_power and max_power adjusting when output is inverted {{< pr number="1250" repo="esphome" >}} by {{< ghuser name="dubit0" >}} (breaking-change) -- esphome: Pn532 upgrades {{< pr number="1302" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) (new-integration) -- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler {{< pr number="1387" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (breaking-change) (cherry-picked) - -## Beta Fixes - -- esphome: fix safe_mode {{< pr number="1421" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} (cherry-picked) -- esphome: DS1307 real time clock component {{< pr number="1441" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) (new-integration) -- docs: DS1307 real time clock component {{< pr number="910" repo="esphome-docs" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- esphome: Add encode_uint32 method, similar to encode_uint16 {{< pr number="1427" repo="esphome" >}} by {{< ghuser name="e28eta" >}} (cherry-picked) -- esphome: Rotary Encoder: Don't call callbacks in the isr {{< pr number="1456" repo="esphome" >}} by {{< ghuser name="mknjc" >}} (cherry-picked) -- esphome: API: copy the data to send into the tcp internal buffer {{< pr number="1455" repo="esphome" >}} by {{< ghuser name="mknjc" >}} (cherry-picked) -- esphome: Revert esptool to 2.8 {{< pr number="1460" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- esphome: Whirlpool ac {{< pr number="1467" repo="esphome" >}} by {{< ghuser name="mmanza" >}} (cherry-picked) -- esphome: Bump pytest-mock from 3.3.1 to 3.5.1 {{< pr number="1458" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} (cherry-picked) -- esphome: Add rc522 i2c {{< pr number="1432" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) (new-integration) -- docs: add rc522 i2c config variant {{< pr number="933" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- esphome: make time components polling components {{< pr number="1443" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler {{< pr number="1387" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (breaking-change) (cherry-picked) -- docs: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler {{< pr number="874" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) -- esphome: Add NDEF reading and writing to PN532 {{< pr number="1351" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) (new-integration) -- docs: Add docs for pn532 NDEF functionality {{< pr number="936" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- esphome: Inkplate 6 support for ESPHome {{< pr number="1283" repo="esphome" >}} by {{< ghuser name="davidzovko" >}} (cherry-picked) (new-integration) -- docs: Adding Inkplate 6 docs {{< pr number="778" repo="esphome-docs" >}} by {{< ghuser name="nitko12" >}} (cherry-picked) -- esphome: time sync notification {{< pr number="1442" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- docs: update time (sync) documentation {{< pr number="924" repo="esphome-docs" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- esphome: rename read/write to read/time/write_time {{< pr number="1468" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- esphome: Improve ccs811 precision {{< pr number="1428" repo="esphome" >}} by {{< ghuser name="TheNetAdmin" >}} (cherry-picked) -- esphome: make fade_to*, lighten, and darken const {{< pr number="1450" repo="esphome" >}} by {{< ghuser name="toelke" >}} (cherry-picked) -- esphome: SPI wasnt being disabled after display update {{< pr number="1493" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) -- esphome: Add support for string-type Tuya datapoints {{< pr number="1488" repo="esphome" >}} by {{< ghuser name="pauln" >}} (cherry-picked) -- esphome: Add healthcheck {{< pr number="1492" repo="esphome" >}} by {{< ghuser name="Klarstein" >}} (cherry-picked) -- esphome: Support for MHO-C401 (fix) {{< pr number="1486" repo="esphome" >}} by {{< ghuser name="nikito7" >}} (cherry-picked) (new-integration) -- docs: Add MHO-C401 {{< pr number="957" repo="esphome-docs" >}} by {{< ghuser name="nikito7" >}} (cherry-picked) -- esphome: Allow SCD30 sensors to be optional {{< pr number="1502" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- docs: Update scd30 docs to show sensors are optional {{< pr number="970" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- esphome: fix esp8266 remote_transmitter using incorrect timings {{< pr number="1465" repo="esphome" >}} by {{< ghuser name="hcoohb" >}} (cherry-picked) -- esphome: rc522 increased retry loop count {{< pr number="1506" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) - -## Release 1.16.1 - February 14 - -- esphome: Fix PN532 SPI communication {{< pr number="1511" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Update Dockerfile {{< pr number="1517" repo="esphome" >}} by {{< ghuser name="Klarstein" >}} -- esphome: Fixed transfer_byte to write_byte for 8266 {{< pr number="1529" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Added Energy sensor to hlw8012 {{< pr number="1198" repo="esphome" >}} by {{< ghuser name="FrankBakkerNl" >}} (new-feature) -- docs: Added Energy sensor to hlw8012 {{< pr number="707" repo="esphome-docs" >}} by {{< ghuser name="FrankBakkerNl" >}} -- esphome: MCP230xx open drain interrupt pins {{< pr number="1243" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- docs: MCP230xx open drain interrupt pins {{< pr number="728" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} - -## Release 1.16.2 - February 20 - -- docs: Incomplete sentence {{< pr number="1004" repo="esphome-docs" >}} by {{< ghuser name="jkmaxwell" >}} -- esphome: auto_detect check was backwards {{< pr number="1536" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- docs: Make explicit examples for splitting and joining using partitions {{< pr number="1008" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Title for Connecting your device to Home Assistant {{< pr number="1013" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Added Waveshare 2.90inch V2 e-ink display {{< pr number="1538" repo="esphome" >}} by {{< ghuser name="K-r-i-s-t-i-a-n" >}} -- docs: Added documentation for Waveshare 2.90inch V2 e-ink display {{< pr number="1010" repo="esphome-docs" >}} by {{< ghuser name="K-r-i-s-t-i-a-n" >}} -- esphome: Add reverse_enable for max7219 {{< pr number="1489" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- docs: Add reverse_enable for max7219 {{< pr number="983" repo="esphome-docs" >}} by {{< ghuser name="ssieb" >}} -- esphome: Fix safe mode ota flashing under certain configurations {{< pr number="1534" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## All changes - -- docs: Update bang_bang doc, changelog fix {{< pr number="667" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: Update cryptography requirement from <3,>=2.0.0 to >=2.0.0,<4 {{< pr number="1206" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: fix dashboard select drop down {{< pr number="1205" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: New prometheus configuration {{< pr number="713" repo="esphome-docs" >}} -- esphome: Cleanup web server prometheus integration {{< pr number="1192" repo="esphome" >}} -- esphome: Remove overview job from CI {{< pr number="1216" repo="esphome" >}} -- esphome: Bump pytest from 5.4.3 to 6.0.0 {{< pr number="1220" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix ci-custom.py const.py ordered check and improve code {{< pr number="1222" repo="esphome" >}} -- esphome: Add hyphen to supported name characters {{< pr number="1223" repo="esphome" >}} by {{< ghuser name="ianleeder" >}} -- docs: Add hyphen to supported name characters {{< pr number="719" repo="esphome-docs" >}} by {{< ghuser name="ianleeder" >}} -- esphome: Bump protobuf from 3.12.2 to 3.12.4 {{< pr number="1230" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Clean up ALLOWED_CHARS {{< pr number="1235" repo="esphome" >}} by {{< ghuser name="ianleeder" >}} -- esphome: Bump pytest from 6.0.0 to 6.0.1 {{< pr number="1236" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytest-mock from 3.2.0 to 3.3.1 {{< pr number="1263" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump protobuf from 3.12.4 to 3.13.0 {{< pr number="1254" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- docs: Update diy.rst {{< pr number="760" repo="esphome-docs" >}} by {{< ghuser name="kquinsland" >}} -- esphome: Bump pylint from 2.5.3 to 2.6.0 {{< pr number="1262" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytest from 6.0.1 to 6.0.2 {{< pr number="1280" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump platformio from 4.3.4 to 5.0.1 {{< pr number="1275" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Update max31855.cpp {{< pr number="1273" repo="esphome" >}} by {{< ghuser name="EmbeddedDevver" >}} -- esphome: Add Fan and Swing Support to fujitsu-general Component {{< pr number="1287" repo="esphome" >}} by {{< ghuser name="kpelzel" >}} -- esphome: Replace CENTER_LEFT with TOP_LEFT to match other printf function {{< pr number="1295" repo="esphome" >}} by {{< ghuser name="TheZoker" >}} (breaking-change) -- esphome: Enable reverse display of the Max7219 digit {{< pr number="1234" repo="esphome" >}} by {{< ghuser name="rspaargaren" >}} (new-feature) -- docs: update Max7219 digit with reverse option {{< pr number="726" repo="esphome-docs" >}} by {{< ghuser name="rspaargaren" >}} -- esphome: Bump paho-mqtt from 1.5.0 to 1.5.1 {{< pr number="1297" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytest-cov from 2.10.0 to 2.10.1 {{< pr number="1253" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: CI - Don't fast fail testing so results are not hidden in matrix builds {{< pr number="1286" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Support Daikin horizontal swing in climate_ir {{< pr number="1247" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Table row wasn't closed {{< pr number="1310" repo="esphome" >}} by {{< ghuser name="Ivo-tje" >}} -- esphome: Typo in the pm2.5 grid {{< pr number="1311" repo="esphome" >}} by {{< ghuser name="jamesgao" >}} -- esphome: Float output: Fix min_power and max_power adjusting when output is inverted {{< pr number="1250" repo="esphome" >}} by {{< ghuser name="dubit0" >}} (breaking-change) -- esphome: Add new time.has_time condition {{< pr number="1255" repo="esphome" >}} by {{< ghuser name="ashmckenzie" >}} -- docs: Add time.has_time documentation {{< pr number="782" repo="esphome-docs" >}} by {{< ghuser name="ashmckenzie" >}} -- esphome: handle windows filenames {{< pr number="1307" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Bump flake8 from 3.8.3 to 3.8.4 {{< pr number="1319" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytest from 6.0.2 to 6.1.1 {{< pr number="1320" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump colorlog from 4.2.1 to 4.4.0 {{< pr number="1323" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Add LYWSD02 battery sensor {{< pr number="1334" repo="esphome" >}} by {{< ghuser name="Alex9779" >}} -- docs: add battery sensor for lywsd02 {{< pr number="821" repo="esphome-docs" >}} by {{< ghuser name="sermayoral" >}} -- docs: Small typo fixes for Sonoff T1 UK 3 Gang {{< pr number="815" repo="esphome-docs" >}} by {{< ghuser name="r15ch13" >}} -- esphome: Added tmp102 temperature sensor support {{< pr number="929" repo="esphome" >}} by {{< ghuser name="timsavage" >}} (new-integration) -- docs: Added tmp102 Temperature sensor docs {{< pr number="451" repo="esphome-docs" >}} by {{< ghuser name="timsavage" >}} -- esphome: Add MCP9808 temperature sensor {{< pr number="1169" repo="esphome" >}} by {{< ghuser name="k7hpn" >}} (new-integration) -- docs: Add documentation for MCP9808 sensor {{< pr number="691" repo="esphome-docs" >}} by {{< ghuser name="k7hpn" >}} -- esphome: Add rc522 {{< pr number="1298" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (new-integration) -- docs: add rc522 docs {{< pr number="810" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add new codeowners {{< pr number="1335" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Pn532 upgrades {{< pr number="1302" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) (new-integration) -- docs: Update PN532 docs to add I2C {{< pr number="798" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Fixed CLIMATE_SWING_HORIZONTAL typo {{< pr number="1340" repo="esphome" >}} by {{< ghuser name="rob-deutsch" >}} -- esphome: add illuminance for xiaomi_mjyd02yla {{< pr number="1299" repo="esphome" >}} by {{< ghuser name="al-one" >}} -- docs: add illuminance for xiaomi_mjyd02yla {{< pr number="779" repo="esphome-docs" >}} by {{< ghuser name="al-one" >}} -- esphome: Add support for WPA2-EAP enterprise WiFi to ESP8266s. {{< pr number="1332" repo="esphome" >}} by {{< ghuser name="tomtom5152" >}} -- docs: Update enterprise authentication docs to indicate support for ESP8266s {{< pr number="814" repo="esphome-docs" >}} by {{< ghuser name="tomtom5152" >}} -- esphome: Pulse_counter measure total pulses {{< pr number="1173" repo="esphome" >}} by {{< ghuser name="FrankBakkerNl" >}} (new-feature) -- docs: Added docs for pulse_counter total {{< pr number="705" repo="esphome-docs" >}} by {{< ghuser name="FrankBakkerNl" >}} -- esphome: Add on_clockwise and on_anticlockwise triggers to rotary encoder {{< pr number="1330" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Add docs for rotary encoder on_clockwise and on_anticlockwise triggers {{< pr number="807" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: FastLED: Add YAML option for data rate {{< pr number="1338" repo="esphome" >}} by {{< ghuser name="youknow0" >}} -- docs: FastLED: Add docs for new YAML option data_rate {{< pr number="824" repo="esphome-docs" >}} by {{< ghuser name="youknow0" >}} -- esphome: [Image] add dither option for image processing {{< pr number="1317" repo="esphome" >}} by {{< ghuser name="zhujunsan" >}} -- docs: [Image] add dither option for image processing {{< pr number="796" repo="esphome-docs" >}} by {{< ghuser name="zhujunsan" >}} -- esphome: Update actions to move away from set-env {{< pr number="1349" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Move CONF_CONTRAST to const.py {{< pr number="1352" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Bump platformio from 5.0.1 to 5.0.2 {{< pr number="1355" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- docs: Fix connection typo in FAQ {{< pr number="831" repo="esphome-docs" >}} by {{< ghuser name="KTibow" >}} -- docs: Add TuyaMCU sample config for WF-DS01 {{< pr number="829" repo="esphome-docs" >}} by {{< ghuser name="davet2001" >}} -- docs: Link to Winsen ZE08-CH2O custom component {{< pr number="833" repo="esphome-docs" >}} by {{< ghuser name="cretep" >}} -- esphome: Adds support for RF Bridge advanced codes {{< pr number="1246" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- docs: Update RF Bridge documentation for advanced codes {{< pr number="731" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add contrast option to PCD8544 {{< pr number="1348" repo="esphome" >}} by {{< ghuser name="dzervas" >}} -- docs: Add contrast option docs to PCD8544 {{< pr number="834" repo="esphome-docs" >}} by {{< ghuser name="dzervas" >}} -- esphome: Add support for ATC_MiThermometer {{< pr number="1291" repo="esphome" >}} by {{< ghuser name="ahpohl" >}} (new-integration) -- docs: Add support for ATC_MiThermometer, update bindkey generation procedure {{< pr number="777" repo="esphome-docs" >}} by {{< ghuser name="ahpohl" >}} -- esphome: Bump pytest from 6.1.1 to 6.1.2 {{< pr number="1342" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump voluptuous from 0.11.7 to 0.12.0 {{< pr number="1296" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytz from 2020.1 to 2020.4 {{< pr number="1354" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Add a datapoint to sync the Tuya MCU minimum brightness {{< pr number="1347" repo="esphome" >}} by {{< ghuser name="cprussin" >}} -- docs: Document tuya dimmer min_value_datapoint {{< pr number="832" repo="esphome-docs" >}} by {{< ghuser name="cprussin" >}} -- esphome: Support I2C transactions with combined reads and writes {{< pr number="996" repo="esphome" >}} by {{< ghuser name="la7dja" >}} (new-feature) -- esphome: Hbridge christmas light {{< pr number="1251" repo="esphome" >}} by {{< ghuser name="DotNetDann" >}} (new-integration) -- docs: Hbridge christmas light {{< pr number="733" repo="esphome-docs" >}} by {{< ghuser name="DotNetDann" >}} -- docs: Add a note about INPUT_PULLUP {{< pr number="830" repo="esphome-docs" >}} by {{< ghuser name="wodor" >}} -- docs: Update waveshare_epaper.rst {{< pr number="813" repo="esphome-docs" >}} by {{< ghuser name="thedexboy" >}} -- docs: added warning to waveshare 2.7 inch display {{< pr number="818" repo="esphome-docs" >}} by {{< ghuser name="damanti-me" >}} -- docs: Update to I2C docs to explain I2C daisy chaining {{< pr number="812" repo="esphome-docs" >}} by {{< ghuser name="the-impaler" >}} -- docs: I2c text update {{< pr number="839" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: add Ili9341 display {{< pr number="1233" repo="esphome" >}} by {{< ghuser name="Valcob" >}} (new-integration) -- esphome: Correcting Hertz symbol {{< pr number="1364" repo="esphome" >}} by {{< ghuser name="robdejonge" >}} -- docs: remove use_custom_code {{< pr number="841" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Bump colorlog from 4.4.0 to 4.6.2 {{< pr number="1367" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Add support for Tuya MCU 0x1C (obtain local time) {{< pr number="1344" repo="esphome" >}} by {{< ghuser name="Yarikx" >}} -- docs: Specify clock to be used in Tuya MCU {{< pr number="827" repo="esphome-docs" >}} by {{< ghuser name="Yarikx" >}} -- esphome: Separate Tuya climate temperature_multiplier to current/target multiplier {{< pr number="1345" repo="esphome" >}} by {{< ghuser name="Yarikx" >}} -- docs: Add separate current/target Tuya Climate multipliers {{< pr number="828" repo="esphome-docs" >}} by {{< ghuser name="Yarikx" >}} -- esphome: Add bounds check for X {{< pr number="1371" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esphome: scd30: Allow setting ambient pressure compensation {{< pr number="1365" repo="esphome" >}} by {{< ghuser name="matoxp" >}} -- docs: scd30: Add missing configuration variables {{< pr number="842" repo="esphome-docs" >}} by {{< ghuser name="matoxp" >}} -- esphome: components: teleinfo: electrical counter information. {{< pr number="1108" repo="esphome" >}} by {{< ghuser name="0hax" >}} (new-integration) -- docs: Teleinfo {{< pr number="666" repo="esphome-docs" >}} by {{< ghuser name="0hax" >}} -- esphome: Adding ADE7953 irq_pin {{< pr number="1359" repo="esphome" >}} by {{< ghuser name="djwmarcx" >}} -- docs: Adding ADE7953 irq_pin {{< pr number="848" repo="esphome-docs" >}} by {{< ghuser name="djwmarcx" >}} -- docs: Fix MCP23008 example {{< pr number="845" repo="esphome-docs" >}} by {{< ghuser name="djtef" >}} -- esphome: add support for EZO sensor circuits {{< pr number="1239" repo="esphome" >}} by {{< ghuser name="ssieb" >}} (new-integration) -- docs: add docs for new EZO sensor circuits {{< pr number="727" repo="esphome-docs" >}} by {{< ghuser name="ssieb" >}} -- esphome: Bump platformio from 5.0.2 to 5.0.3 {{< pr number="1372" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- docs: Add Hitachi AC344 IR Climate documentation {{< pr number="822" repo="esphome-docs" >}} by {{< ghuser name="honomoa" >}} -- esphome: Add climate.hitachi_ac344 {{< pr number="1336" repo="esphome" >}} by {{< ghuser name="honomoa" >}} (new-integration) -- esphome: add CODEOWNER for new ezo component {{< pr number="1379" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esphome: SSD1331 display support {{< pr number="1244" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- docs: Add SSD1331 docs {{< pr number="729" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: Add kbx81 to CODEOWNERS {{< pr number="1380" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- esphome: Added 332 color conversion and RGB/BGR/GRB formats {{< pr number="1381" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Fixed logger broken by colorama {{< pr number="1385" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- esphome: Formatted test yaml files {{< pr number="1382" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- docs: Updated link to ble_monitor (previous mitemp_bt) {{< pr number="849" repo="esphome-docs" >}} by {{< ghuser name="Ernst79" >}} -- docs: Fix ac dimmer example code {{< pr number="852" repo="esphome-docs" >}} by {{< ghuser name="rradar" >}} -- docs: DIY: Add Blogpost for SP501E as WS2812 LED Controller {{< pr number="854" repo="esphome-docs" >}} by {{< ghuser name="margau" >}} -- docs: Replace Hass.io {{< pr number="853" repo="esphome-docs" >}} by {{< ghuser name="fabaff" >}} -- docs: Update deep_sleep.rst {{< pr number="850" repo="esphome-docs" >}} by {{< ghuser name="anekinloewe" >}} -- docs: Adding IAQ board in cookbook section {{< pr number="844" repo="esphome-docs" >}} by {{< ghuser name="nkitanov" >}} -- esphome: New display ST7735 {{< pr number="1066" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (new-integration) -- docs: Fix broken YAML in MQTT on_json_message example {{< pr number="620" repo="esphome-docs" >}} by {{< ghuser name="napieraj" >}} -- esphome: Configurable OTA Safe Mode {{< pr number="1393" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} -- docs: Update docs for Configurable OTA Safe Mode {{< pr number="859" repo="esphome-docs" >}} by {{< ghuser name="alexyao2015" >}} -- docs: Update ethernet.rst {{< pr number="863" repo="esphome-docs" >}} by {{< ghuser name="adezerega" >}} -- esphome: Add option to suppress embedded MCU updates on certain datapoints {{< pr number="1396" repo="esphome" >}} by {{< ghuser name="stubs12" >}} -- docs: Documentation for tuya ignore_mcu_update_on_datapoints setting {{< pr number="868" repo="esphome-docs" >}} by {{< ghuser name="stubs12" >}} -- esphome: scd30: Allow setting temperature offset {{< pr number="1400" repo="esphome" >}} by {{< ghuser name="matoxp" >}} -- docs: scd30: Document temperature_offset setting {{< pr number="864" repo="esphome-docs" >}} by {{< ghuser name="matoxp" >}} -- esphome: fix HTTP Request reusing connections with different hosts {{< pr number="1383" repo="esphome" >}} by {{< ghuser name="Anonym-tsk" >}} -- docs: Ili9341 doc update {{< pr number="870" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: MCP23SXX I/O Expander - SPI {{< pr number="1068" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (new-integration) -- docs: MCP23S08-Docs {{< pr number="613" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Bump pyserial from 3.4 to 3.5 {{< pr number="1394" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix Tuya initialisation regression {{< pr number="1408" repo="esphome" >}} by {{< ghuser name="rmounce" >}} -- docs: Update max31856.rst {{< pr number="883" repo="esphome-docs" >}} by {{< ghuser name="emuehlstein" >}} -- docs: Fix one of the commens in code block {{< pr number="881" repo="esphome-docs" >}} by {{< ghuser name="HepoH3" >}} -- docs: Update wifi.rst {{< pr number="873" repo="esphome-docs" >}} by {{< ghuser name="Pack3tL0ss" >}} -- docs: Update mirabella-genio-bulb.rst {{< pr number="857" repo="esphome-docs" >}} by {{< ghuser name="kalebzettl" >}} -- docs: Update teckin sb50 entry as they cannot be flashed anymore {{< pr number="878" repo="esphome-docs" >}} by {{< ghuser name="justyns" >}} -- docs: Change all instances of travis to github actions {{< pr number="860" repo="esphome-docs" >}} by {{< ghuser name="alexyao2015" >}} -- docs: Improve obtaining bind key {{< pr number="843" repo="esphome-docs" >}} by {{< ghuser name="abelmatser" >}} -- docs: Add clarification about "update_interval" to SDS011 sensor documentation {{< pr number="770" repo="esphome-docs" >}} by {{< ghuser name="maurice-schleussinger" >}} -- docs: Cookbook: Light Strip {{< pr number="805" repo="esphome-docs" >}} by {{< ghuser name="lein1013" >}} -- docs: Optimize images {{< pr number="799" repo="esphome-docs" >}} by {{< ghuser name="JeffResc" >}} -- docs: Add troubleshooting help with light partition {{< pr number="851" repo="esphome-docs" >}} by {{< ghuser name="TheLastGimbus" >}} -- docs: Update bang_bang.rst {{< pr number="524" repo="esphome-docs" >}} by {{< ghuser name="xheronimo" >}} -- docs: Fixed docs to match xiaomi rename {{< pr number="606" repo="esphome-docs" >}} by {{< ghuser name="WoLpH" >}} -- docs: add another example without MQTT {{< pr number="573" repo="esphome-docs" >}} by {{< ghuser name="adonno" >}} -- docs: Show example of calling HA script {{< pr number="688" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Update pulse_counter.rst {{< pr number="689" repo="esphome-docs" >}} by {{< ghuser name="neographikal" >}} -- docs: More descriptive information for noobs {{< pr number="658" repo="esphome-docs" >}} by {{< ghuser name="haryadoon" >}} -- esphome: Run task for VS Code {{< pr number="1361" repo="esphome" >}} by {{< ghuser name="gitolicious" >}} -- docs: esp32_dac.rst - Add light component to example {{< pr number="885" repo="esphome-docs" >}} by {{< ghuser name="ferbar" >}} -- docs: Update ethernet.rst {{< pr number="887" repo="esphome-docs" >}} by {{< ghuser name="dziobson" >}} -- docs: Adding gif animation docs {{< pr number="856" repo="esphome-docs" >}} by {{< ghuser name="Syndlex" >}} -- esphome: Add GIF Animation Support {{< pr number="1378" repo="esphome" >}} by {{< ghuser name="Syndlex" >}} (new-integration) -- docs: Update diy.rst {{< pr number="888" repo="esphome-docs" >}} by {{< ghuser name="pieterbrink123" >}} -- esphome: Bump tornado from 6.0.4 to 6.1 {{< pr number="1353" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix mDNS webserver port and expose prometheus service {{< pr number="1389" repo="esphome" >}} by {{< ghuser name="richardweinberger" >}} -- esphome: Bump esptool from 2.8 to 3.0 {{< pr number="1357" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- docs: Update diy.rst {{< pr number="891" repo="esphome-docs" >}} by {{< ghuser name="lairsdragon" >}} -- docs: Update sim800l.rst {{< pr number="893" repo="esphome-docs" >}} by {{< ghuser name="tyomikh" >}} -- docs: docs: necessary registration of node in HA {{< pr number="741" repo="esphome-docs" >}} by {{< ghuser name="torwag" >}} -- docs: display: st7789v: Set GPIO0 as INPUT_PULLUP {{< pr number="759" repo="esphome-docs" >}} by {{< ghuser name="kylemanna" >}} -- docs: clarify VCC, wrt #1452 {{< pr number="753" repo="esphome-docs" >}} by {{< ghuser name="pille" >}} -- docs: Update docs about MQTT lambdas {{< pr number="809" repo="esphome-docs" >}} by {{< ghuser name="matikij" >}} -- docs: Add manual for Sonoff T3 EU 3 Gang {{< pr number="816" repo="esphome-docs" >}} by {{< ghuser name="r15ch13" >}} -- docs: Add get_setup_priority() to Custom sensor docs {{< pr number="819" repo="esphome-docs" >}} by {{< ghuser name="mjkl-gh" >}} -- docs: Change on_message topics into a yaml list for deep_sleep docs {{< pr number="867" repo="esphome-docs" >}} by {{< ghuser name="mrrsm" >}} -- docs: Update pzem Example configuration entry (bad stop bit) {{< pr number="872" repo="esphome-docs" >}} by {{< ghuser name="Francis-labo" >}} -- docs: Update next from current 20201221 {{< pr number="894" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Update sonof_basic.rst - incorrect example {{< pr number="892" repo="esphome-docs" >}} by {{< ghuser name="bvansambeek" >}} -- docs: Update apds9960.rst {{< pr number="895" repo="esphome-docs" >}} by {{< ghuser name="DrRob" >}} -- esphome: Canbus + MCP2515 including ExtID support {{< pr number="1384" repo="esphome" >}} by {{< ghuser name="danielschramm" >}} (new-integration) -- docs: Canbus + MCP2515 {{< pr number="823" repo="esphome-docs" >}} by {{< ghuser name="danielschramm" >}} -- esphome: Add "ESPHOME_NOGITIGNORE" env var to prevent .gitignore creation {{< pr number="1425" repo="esphome" >}} by {{< ghuser name="acshef" >}} -- esphome: Add full SSD1327 display support {{< pr number="1406" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- docs: Add SSD1327 display docs {{< pr number="875" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: SSD1322 display support {{< pr number="1405" repo="esphome" >}} by {{< ghuser name="kbx81" >}} (new-integration) -- docs: Add SSD1322 doc {{< pr number="869" repo="esphome-docs" >}} by {{< ghuser name="kbx81" >}} -- esphome: Expose port 6052 to make reverse proxy work {{< pr number="1437" repo="esphome" >}} by {{< ghuser name="Klarstein" >}} -- esphome: rc_switch: Fix Sync signal sent after the code {{< pr number="1426" repo="esphome" >}} by {{< ghuser name="M95D" >}} -- docs: added slow mode and detach time to servo {{< pr number="896" repo="esphome-docs" >}} by {{< ghuser name="andreashergert1984" >}} -- esphome: added slow mode and detach time to servo {{< pr number="1413" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} -- esphome: Bump pytz from 2020.4 to 2020.5 {{< pr number="1430" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytest from 6.1.2 to 6.2.1 {{< pr number="1422" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- docs: Update diy.rst {{< pr number="913" repo="esphome-docs" >}} by {{< ghuser name="mikosoft83" >}} -- docs: Add note about default settings in remote transmitter {{< pr number="901" repo="esphome-docs" >}} by {{< ghuser name="darthsebulba04" >}} -- docs: st7735 Docs {{< pr number="608" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Bump platformio from 5.0.3 to 5.0.4 {{< pr number="1444" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix SN74HC595 with optional OE pin {{< pr number="1454" repo="esphome" >}} by {{< ghuser name="rradar" >}} -- esphome: Fix stepper half half step mode {{< pr number="1397" repo="esphome" >}} by {{< ghuser name="Fractal147" >}} -- esphome: fix safe_mode {{< pr number="1421" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} (cherry-picked) -- esphome: DS1307 real time clock component {{< pr number="1441" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) (new-integration) -- docs: DS1307 real time clock component {{< pr number="910" repo="esphome-docs" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- esphome: Add encode_uint32 method, similar to encode_uint16 {{< pr number="1427" repo="esphome" >}} by {{< ghuser name="e28eta" >}} (cherry-picked) -- esphome: Rotary Encoder: Don't call callbacks in the isr {{< pr number="1456" repo="esphome" >}} by {{< ghuser name="mknjc" >}} (cherry-picked) -- esphome: API: copy the data to send into the tcp internal buffer {{< pr number="1455" repo="esphome" >}} by {{< ghuser name="mknjc" >}} (cherry-picked) -- esphome: Revert esptool to 2.8 {{< pr number="1460" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- docs: fixed duplicate id in example for dac output {{< pr number="909" repo="esphome-docs" >}} by {{< ghuser name="dmannock" >}} -- docs: Add example for human readable uptime sensor {{< pr number="923" repo="esphome-docs" >}} by {{< ghuser name="fredrike" >}} -- docs: Update diy.rst {{< pr number="922" repo="esphome-docs" >}} by {{< ghuser name="omarghader" >}} -- docs: Spelling and grammar fixes {{< pr number="928" repo="esphome-docs" >}} by {{< ghuser name="scop" >}} -- docs: Fix duplicated "on_ble" in on_ble_service_data_advertise heading {{< pr number="927" repo="esphome-docs" >}} by {{< ghuser name="scop" >}} -- docs: Add hint for swapped data and clock pin {{< pr number="914" repo="esphome-docs" >}} by {{< ghuser name="DirkHeinke" >}} -- docs: Update nextion.rst {{< pr number="912" repo="esphome-docs" >}} by {{< ghuser name="wernight" >}} -- docs: Update mirabella-genio-bulb.rst to show potential use of GPIO14 instead of GPIO13 for specific monochromatic dimmable globes {{< pr number="911" repo="esphome-docs" >}} by {{< ghuser name="imeekle" >}} -- esphome: Whirlpool ac {{< pr number="1467" repo="esphome" >}} by {{< ghuser name="mmanza" >}} (cherry-picked) -- esphome: Bump pytest-mock from 3.3.1 to 3.5.1 {{< pr number="1458" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} (cherry-picked) -- esphome: Add rc522 i2c {{< pr number="1432" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) (new-integration) -- docs: add rc522 i2c config variant {{< pr number="933" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- esphome: make time components polling components {{< pr number="1443" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- docs: add cli link {{< pr number="937" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler {{< pr number="1387" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (breaking-change) (cherry-picked) -- docs: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler {{< pr number="874" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) -- docs: cli.rst add --help {{< pr number="939" repo="esphome-docs" >}} by {{< ghuser name="foxsam21" >}} -- esphome: Add NDEF reading and writing to PN532 {{< pr number="1351" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) (new-integration) -- docs: Add docs for pn532 NDEF functionality {{< pr number="936" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- esphome: Inkplate 6 support for ESPHome {{< pr number="1283" repo="esphome" >}} by {{< ghuser name="davidzovko" >}} (cherry-picked) (new-integration) -- docs: Adding Inkplate 6 docs {{< pr number="778" repo="esphome-docs" >}} by {{< ghuser name="nitko12" >}} (cherry-picked) -- esphome: time sync notification {{< pr number="1442" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- docs: update time (sync) documentation {{< pr number="924" repo="esphome-docs" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- esphome: rename read/write to read/time/write_time {{< pr number="1468" repo="esphome" >}} by {{< ghuser name="badbadc0ffee" >}} (cherry-picked) -- docs: Add directions for handling text strings {{< pr number="955" repo="esphome-docs" >}} by {{< ghuser name="poldim" >}} -- esphome: Improve ccs811 precision {{< pr number="1428" repo="esphome" >}} by {{< ghuser name="TheNetAdmin" >}} (cherry-picked) -- esphome: make fade_to*, lighten, and darken const {{< pr number="1450" repo="esphome" >}} by {{< ghuser name="toelke" >}} (cherry-picked) -- docs: fix typo 5062 => 6052 {{< pr number="956" repo="esphome-docs" >}} by {{< ghuser name="Scarbous" >}} -- docs: Fix of typo in documentation of SPS30 {{< pr number="954" repo="esphome-docs" >}} by {{< ghuser name="teffcz" >}} -- docs: Remove reference to measuring humidity {{< pr number="953" repo="esphome-docs" >}} by {{< ghuser name="tomlut" >}} -- docs: Fix human-readable uptime example so it compiles {{< pr number="949" repo="esphome-docs" >}} by {{< ghuser name="oddsockmachine" >}} -- esphome: SPI wasnt being disabled after display update {{< pr number="1493" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) -- esphome: Add support for string-type Tuya datapoints {{< pr number="1488" repo="esphome" >}} by {{< ghuser name="pauln" >}} (cherry-picked) -- esphome: Add healthcheck {{< pr number="1492" repo="esphome" >}} by {{< ghuser name="Klarstein" >}} (cherry-picked) -- docs: Add link to baseboard thermostat by rjmurph2241 {{< pr number="958" repo="esphome-docs" >}} by {{< ghuser name="rjmurph2241" >}} -- docs: Document color_temp {{< pr number="951" repo="esphome-docs" >}} by {{< ghuser name="alexyao2015" >}} -- docs: Update tuya.rst {{< pr number="950" repo="esphome-docs" >}} by {{< ghuser name="ricovangenugten" >}} -- docs: Minor uptime docs fixes {{< pr number="948" repo="esphome-docs" >}} by {{< ghuser name="foxsam21" >}} -- esphome: Support for MHO-C401 (fix) {{< pr number="1486" repo="esphome" >}} by {{< ghuser name="nikito7" >}} (cherry-picked) (new-integration) -- docs: Update image type for st7789 display {{< pr number="945" repo="esphome-docs" >}} by {{< ghuser name="gerard33" >}} -- docs: Add MHO-C401 {{< pr number="957" repo="esphome-docs" >}} by {{< ghuser name="nikito7" >}} (cherry-picked) -- esphome: Allow SCD30 sensors to be optional {{< pr number="1502" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- docs: Update scd30 docs to show sensors are optional {{< pr number="970" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- esphome: fix esp8266 remote_transmitter using incorrect timings {{< pr number="1465" repo="esphome" >}} by {{< ghuser name="hcoohb" >}} (cherry-picked) -- esphome: rc522 increased retry loop count {{< pr number="1506" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.17.0.md b/content/changelog/v1.17.0.md deleted file mode 100644 index 9d78ff92a9..0000000000 --- a/content/changelog/v1.17.0.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.17.0." -title: "Changelog - Version 1.17.0 - 4th May 2021" -params: - seo: - description: Changelog for ESPHome version 1.17.0. - image: /_static/changelog-1.17.0.png ---- - - -{{< imgtable >}} -"Inkbird IBS-TH1 Mini","components/sensor/inkbird_ibsth1_mini","inkbird_isbth1_mini.jpg","" -"MCP4725","components/output/mcp4725","mcp4725.jpg","" -"Xiaomi Miscale","components/sensor/xiaomi_miscale","xiaomi_miscale.jpg","" -"Xiaomi Miscale2","components/sensor/xiaomi_miscale2","xiaomi_miscale2.jpg","" -"Midea Air Conditioner","components/climate/midea_ac","midea.svg","" -"Addressable Light Display","components/display/addressable_light","addressable_light.jpg","" -"Pulse Meter","components/sensor/pulse_meter","pulse.svg","dark-invert" -{{< /imgtable >}} -So, ESPHome was acquired by Nabu Casa. That was big and unexpected, but awesome news for the project as now I have been hired -by Nabu Casa full-time to work on ESPHome. I know I said this in the last release, but hopefully now that it is literally -my job, the releases will move to a (yet to be defined) schedule. - -A lot of fixes and updates to existing components in this release, and a couple of new integrations and features too. Check them out -if you have the hardware but could not use it before. - -Hopefully I can get some help and pointers from the Nabu Casa team to tidy up these release notes and make them all fancy and -actually something to look forward to reading. - -Jesse - -## New Features - -- esphome: Vl53l0x change address {{< pr number="1126" repo="esphome" >}} by {{< ghuser name="kkellner" >}} (new-feature) -- esphome: Background calibration & ABC commands for SenseAir S8 {{< pr number="1623" repo="esphome" >}} by {{< ghuser name="nmaggioni" >}} (new-feature) -- esphome: Add trigger for http actions to receive the status code {{< pr number="1599" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) - -## New Integrations - -- esphome: Adding support for the Inkbird IBS-TH1 Mini sensor {{< pr number="1099" repo="esphome" >}} by {{< ghuser name="fkirill" >}} (new-integration) -- esphome: Add MCP4725 DAC Component {{< pr number="1418" repo="esphome" >}} by {{< ghuser name="JJK801" >}} (new-integration) -- esphome: Add Xiaomi Miscale v1 and v2 {{< pr number="1368" repo="esphome" >}} by {{< ghuser name="dckiller51" >}} (new-integration) -- esphome: Add support for the SM300D2 7-in-1 sensor module {{< pr number="1524" repo="esphome" >}} by {{< ghuser name="moritzgloeckl" >}} (new-integration) -- esphome: Midea climate support {{< pr number="1328" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-integration) -- esphome: Add addressable_light display platform {{< pr number="1272" repo="esphome" >}} by {{< ghuser name="justfalter" >}} (new-integration) (notable-change) -- esphome: Implement pulse_meter as an improvement on pulse_counter and pulse_width for meters {{< pr number="1434" repo="esphome" >}} by {{< ghuser name="stevebaxter" >}} (new-integration) - -## Breaking Changes - -- esphome: MCP23XXX Refactor {{< pr number="1560" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) - -## Notable Changes - -- esphome: Device class attribute for sensor component {{< pr number="1525" repo="esphome" >}} by {{< ghuser name="marecabo" >}} (notable-change) -- esphome: Add default device classes to sensor components {{< pr number="1533" repo="esphome" >}} by {{< ghuser name="marecabo" >}} (notable-change) -- esphome: Add addressable_light display platform {{< pr number="1272" repo="esphome" >}} by {{< ghuser name="justfalter" >}} (new-integration) (notable-change) - -## Release 1.17.1 - May 5 - -- esphome: Fix BLE UUID matching {{< pr number="1637" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Add optional bindkey support for CGG1. {{< pr number="1407" repo="esphome" >}} by {{< ghuser name="Flameeyes" >}} -- docs: Update CGG1 documentation around bindkey {{< pr number="876" repo="esphome-docs" >}} by {{< ghuser name="Flameeyes" >}} -- esphome: buffer allocation and TRUEFALSE templates {{< pr number="1644" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: fix servo not reattaching with same target {{< pr number="1649" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix colorlog removing colors and refactor color code {{< pr number="1671" repo="esphome" >}} -- esphome: Fix servo detach chopped PWM {{< pr number="1650" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix sensor.sensor_schema interface changed {{< pr number="1659" repo="esphome" >}} -- esphome: Sensor Average Filter Fix Floating Pointer Error Accumulating {{< pr number="1624" repo="esphome" >}} -- esphome: Added / to default glyphs {{< pr number="1691" repo="esphome" >}} by {{< ghuser name="richardklingler" >}} -- esphome: RC522 fixes {{< pr number="1479" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Fixed typo in 1.17.0 changelogs {{< pr number="1132" repo="esphome-docs" >}} by {{< ghuser name="spacegaier" >}} -- esphome: Do not call component update on failed components {{< pr number="1392" repo="esphome" >}} by {{< ghuser name="alexyao2015" >}} - -## Release 1.17.2 - May 9 - -- esphome: fixes #858 - esphome crashes with neolightbus and RMT {{< pr number="1667" repo="esphome" >}} by {{< ghuser name="angelnu" >}} -- docs: Fix abundant apostrophes {{< pr number="1137" repo="esphome-docs" >}} by {{< ghuser name="jmartens" >}} -- docs: Add output part to binary light example {{< pr number="1061" repo="esphome-docs" >}} by {{< ghuser name="klaasnicolaas" >}} - -## All changes - -- esphome: Bump voluptuous from 0.12.0 to 0.12.1 {{< pr number="1411" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: add http request tests {{< pr number="1448" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: codegen: Lambda improvements {{< pr number="1476" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} -- docs: Add options to control pulse duration on Climate_IR_LG Component {{< pr number="963" repo="esphome-docs" >}} by {{< ghuser name="mhentschke" >}} -- esphome: Add options to control pulse duration on Climate_IR_LG Component {{< pr number="1470" repo="esphome" >}} by {{< ghuser name="mhentschke" >}} -- esphome: Adding support for the Inkbird IBS-TH1 Mini sensor {{< pr number="1099" repo="esphome" >}} by {{< ghuser name="fkirill" >}} (new-integration) -- docs: Adding documentation for Inkbird IBS-TH1 Mini sensor {{< pr number="657" repo="esphome-docs" >}} by {{< ghuser name="fkirill" >}} -- esphome: Add config validator location {{< pr number="1490" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add MCP4725 DAC Component {{< pr number="1418" repo="esphome" >}} by {{< ghuser name="JJK801" >}} (new-integration) -- docs: Add MCP4725 docs {{< pr number="889" repo="esphome-docs" >}} by {{< ghuser name="JJK801" >}} -- docs: Fix format consistency {{< pr number="989" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Added codeowners to max7219digit {{< pr number="1487" repo="esphome" >}} by {{< ghuser name="rspaargaren" >}} -- esphome: Correct Native API Wire Format Documentation {{< pr number="1528" repo="esphome" >}} by {{< ghuser name="justin-gerhardt" >}} -- esphome: st7735_conf_fixes {{< pr number="1530" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- docs: ST7735 Changed configuration items to snake_case {{< pr number="1000" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Device class attribute for sensor component {{< pr number="1525" repo="esphome" >}} by {{< ghuser name="marecabo" >}} (notable-change) -- docs: Add doc for device_class attribute of sensor {{< pr number="996" repo="esphome-docs" >}} by {{< ghuser name="marecabo" >}} -- docs: Add sleep duration to enter deep sleep action {{< pr number="995" repo="esphome-docs" >}} by {{< ghuser name="nuttytree" >}} -- esphome: Add duration option to action start deep sleep {{< pr number="1526" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- esphome: fix substitution losing track of document range {{< pr number="1547" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Update esp32_camera.rst {{< pr number="1020" repo="esphome-docs" >}} by {{< ghuser name="lukaszrud" >}} -- docs: Fix format next {{< pr number="1023" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Add another project to diy.rst {{< pr number="1019" repo="esphome-docs" >}} by {{< ghuser name="shish" >}} -- docs: Update esphome-configs URL {{< pr number="1018" repo="esphome-docs" >}} by {{< ghuser name="shish" >}} -- docs: Icon is ignored by HA when device class is set {{< pr number="1011" repo="esphome-docs" >}} by {{< ghuser name="marecabo" >}} -- docs: Update pid.rst {{< pr number="1006" repo="esphome-docs" >}} by {{< ghuser name="boradwell" >}} -- docs: Mention that Hyperion.NG works with E1.31 {{< pr number="975" repo="esphome-docs" >}} by {{< ghuser name="rradar" >}} -- esphome: Add Xiaomi Miscale v1 and v2 {{< pr number="1368" repo="esphome" >}} by {{< ghuser name="dckiller51" >}} (new-integration) -- docs: Add docs for Xiaomi Miscale v1 and v2 {{< pr number="1021" repo="esphome-docs" >}} by {{< ghuser name="dckiller51" >}} -- docs: Add missing closing parenthesis in example {{< pr number="1029" repo="esphome-docs" >}} by {{< ghuser name="lepinkainen" >}} -- docs: Update Inkplate.rst {{< pr number="1026" repo="esphome-docs" >}} by {{< ghuser name="jakommo" >}} -- docs: typo in st7735 model number {{< pr number="1025" repo="esphome-docs" >}} by {{< ghuser name="wjcarpenter" >}} -- docs: Fix mcp23sXX id config {{< pr number="1017" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Update bme680.rst {{< pr number="1007" repo="esphome-docs" >}} by {{< ghuser name="wifwucite" >}} -- docs: Sim800l dial {{< pr number="1027" repo="esphome-docs" >}} by {{< ghuser name="spilin" >}} -- esphome: Add dial support for sim800l component {{< pr number="1558" repo="esphome" >}} by {{< ghuser name="spilin" >}} -- esphome: Climate IR LG -keep previous temp and fan if swing {{< pr number="1556" repo="esphome" >}} by {{< ghuser name="Otamay" >}} -- esphome: Vl53l0x change address {{< pr number="1126" repo="esphome" >}} by {{< ghuser name="kkellner" >}} (new-feature) -- docs: Update vl53l0x docs {{< pr number="679" repo="esphome-docs" >}} by {{< ghuser name="kkellner" >}} -- esphome: tuya: Use queue for sending command messages {{< pr number="1404" repo="esphome" >}} by {{< ghuser name="stubs12" >}} -- esphome: Replace substitutions in substitutions first {{< pr number="1567" repo="esphome" >}} by {{< ghuser name="edenhaus" >}} -- esphome: Added heater to climate_ir_lg {{< pr number="1555" repo="esphome" >}} by {{< ghuser name="Otamay" >}} -- esphome: More yaml validation {{< pr number="1568" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add default device classes to sensor components {{< pr number="1533" repo="esphome" >}} by {{< ghuser name="marecabo" >}} (notable-change) -- docs: Document recurring data in uart switch {{< pr number="986" repo="esphome-docs" >}} by {{< ghuser name="gabe565" >}} -- esphome: Add support for recurring data in uart switch {{< pr number="1514" repo="esphome" >}} by {{< ghuser name="gabe565" >}} -- esphome: Added samsung36 ir protocol {{< pr number="1438" repo="esphome" >}} by {{< ghuser name="tuxBurner" >}} -- docs: Added remote samsung36 protocol docs {{< pr number="904" repo="esphome-docs" >}} by {{< ghuser name="tuxBurner" >}} -- docs: Add IWOOLE Table Lamp cookbook entry {{< pr number="947" repo="esphome-docs" >}} by {{< ghuser name="Deinara" >}} -- docs: Update uart.rst example to read all available characters {{< pr number="1031" repo="esphome-docs" >}} by {{< ghuser name="RoganDawes" >}} -- esphome: ADC fix: GPIO0 not usable as output if ADC_VCC is used {{< pr number="1557" repo="esphome" >}} by {{< ghuser name="ferbar" >}} -- esphome: Add constants for device classes of binary_sensor {{< pr number="1549" repo="esphome" >}} by {{< ghuser name="marecabo" >}} -- esphome: fix path on windows escape {{< pr number="1573" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Migrate ESPColor to Color {{< pr number="1551" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- docs: Migrate ESPColor to Color {{< pr number="1036" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Add support for the SM300D2 7-in-1 sensor module {{< pr number="1524" repo="esphome" >}} by {{< ghuser name="moritzgloeckl" >}} (new-integration) -- docs: Added documentation for the SM300D2 sensor {{< pr number="993" repo="esphome-docs" >}} by {{< ghuser name="moritzgloeckl" >}} -- esphome: changed color temp from float to int {{< pr number="1522" repo="esphome" >}} by {{< ghuser name="codyjamestechnical" >}} -- esphome: Bump pytest-cov from 2.10.1 to 2.11.1 {{< pr number="1483" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump colorlog from 4.6.2 to 4.7.2 {{< pr number="1473" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: pins: Add three new boards {{< pr number="1576" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} -- esphome: Bump pytest from 6.2.1 to 6.2.2 {{< pr number="1574" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pytz from 2020.5 to 2021.1 {{< pr number="1575" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix for waveshare 2.13in-ttgo-b73 {{< pr number="1543" repo="esphome" >}} by {{< ghuser name="nikito7" >}} -- docs: Added new blogpost {{< pr number="1038" repo="esphome-docs" >}} by {{< ghuser name="pieterbrink123" >}} -- esphome: Add min/max filters {{< pr number="1569" repo="esphome" >}} by {{< ghuser name="gabe565" >}} -- docs: Document new min/max filters {{< pr number="1032" repo="esphome-docs" >}} by {{< ghuser name="gabe565" >}} -- esphome: Bump pylint from 2.6.0 to 2.7.2 {{< pr number="1582" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Extend 'uart:' with 'invert:' for esp32 {{< pr number="1586" repo="esphome" >}} by {{< ghuser name="needspeed" >}} -- docs: Uart invert option for ESP32 {{< pr number="1039" repo="esphome-docs" >}} by {{< ghuser name="Mynasru" >}} -- esphome: Bump platformio from 5.0.4 to 5.1.0 {{< pr number="1581" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: fix servo warning {{< pr number="1591" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: add-black {{< pr number="1044" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: add-black {{< pr number="1593" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: MCP23XXX Refactor {{< pr number="1560" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- docs: Update MCP23XXX docs with interrupts and pin schemas {{< pr number="1028" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Improve error checking: too many component id candidates {{< pr number="1570" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Schema dump {{< pr number="1564" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Dump schema {{< pr number="1030" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- docs: Update i2c.rst {{< pr number="1043" repo="esphome-docs" >}} by {{< ghuser name="webeling67" >}} -- docs: Update rf_bridge.rst {{< pr number="1042" repo="esphome-docs" >}} by {{< ghuser name="samnewman86" >}} -- esphome: Inkplate 6 Optimizations {{< pr number="1592" repo="esphome" >}} by {{< ghuser name="Sizurka" >}} -- docs: Fix RF Bridge link to Portisch Repo {{< pr number="1045" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: pin schema and other fixes {{< pr number="1047" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: schema-dump-pins {{< pr number="1596" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Adding that mpr121_id is a valid option for binary_sensor {{< pr number="966" repo="esphome-docs" >}} by {{< ghuser name="minideezel" >}} -- esphome: change lcd clear() to clear the buffer {{< pr number="1600" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- esphome: PN532 - don't read extra page and fix size {{< pr number="1565" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- docs: schema-filters {{< pr number="1052" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix component_tests config {{< pr number="1608" repo="esphome" >}} by {{< ghuser name="madron" >}} -- esphome: Added receive for Fujitsu ACs {{< pr number="1577" repo="esphome" >}} by {{< ghuser name="alex-richards" >}} -- esphome: Change COLOR_ON to be 255 values instead of 1 {{< pr number="1594" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: a4988 wait 1ms when coming out of sleep {{< pr number="1597" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} -- docs: Remove cs_pin from rc522 i2c example {{< pr number="1059" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Support fan speed levels {{< pr number="1541" repo="esphome" >}} by {{< ghuser name="blejdfist" >}} -- docs: Documentation for fan speed levels {{< pr number="1056" repo="esphome-docs" >}} by {{< ghuser name="blejdfist" >}} -- docs: Add CLI logs section {{< pr number="1060" repo="esphome-docs" >}} by {{< ghuser name="Tmin10" >}} -- esphome: Add option to suffix name with mac address {{< pr number="1615" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Midea climate support {{< pr number="1328" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (new-integration) -- docs: Midea Climate support {{< pr number="804" repo="esphome-docs" >}} by {{< ghuser name="dudanov" >}} -- docs: Add docs for `name_add_mac_suffix` config {{< pr number="1058" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: SPI transfer fix. Use write when no miso pin is set {{< pr number="1563" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: SPI Improvements {{< pr number="1617" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Add addressable_light display platform {{< pr number="1272" repo="esphome" >}} by {{< ghuser name="justfalter" >}} (new-integration) (notable-change) -- docs: Add docs for addressable_light display {{< pr number="755" repo="esphome-docs" >}} by {{< ghuser name="justfalter" >}} -- esphome: Implement pulse_meter as an improvement on pulse_counter and pulse_width for meters {{< pr number="1434" repo="esphome" >}} by {{< ghuser name="stevebaxter" >}} (new-integration) -- esphome: e131: fix issue 1579: limitation of maximum light count {{< pr number="1619" repo="esphome" >}} by {{< ghuser name="docteurzoidberg" >}} -- docs: Add documentation for pulse_meter {{< pr number="900" repo="esphome-docs" >}} by {{< ghuser name="stevebaxter" >}} -- esphome: Bump platformio from 5.1.0 to 5.1.1 {{< pr number="1618" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Fix pulse-meter with device_class and black {{< pr number="1621" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Declare Color objects in main.cpp {{< pr number="1395" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- esphome: Add 2.13in-ttgo-b1 waveshare epaper module. {{< pr number="1326" repo="esphome" >}} by {{< ghuser name="matikij" >}} -- docs: Add docs for ttgo-b1 version (next branch) {{< pr number="808" repo="esphome-docs" >}} by {{< ghuser name="matikij" >}} -- esphome: Bump flake8 from 3.8.4 to 3.9.0 {{< pr number="1612" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bundle platformio lib_deps in docker images {{< pr number="1625" repo="esphome" >}} -- esphome: Bump protobuf from 3.13.0 to 3.15.6 {{< pr number="1607" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump pyyaml from 5.3.1 to 5.4.1 {{< pr number="1482" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Switch docker images to debian {{< pr number="1626" repo="esphome" >}} -- esphome: Background calibration & ABC commands for SenseAir S8 {{< pr number="1623" repo="esphome" >}} by {{< ghuser name="nmaggioni" >}} (new-feature) -- docs: SenseAir: background calibration & ABC commands {{< pr number="1066" repo="esphome-docs" >}} by {{< ghuser name="nmaggioni" >}} -- esphome: Add trigger for http actions to receive the status code {{< pr number="1599" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- docs: Add docs for http_request on_response trigger {{< pr number="1049" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- docs: Fix typo lambada -> lambda in multiple display compoments {{< pr number="1071" repo="esphome-docs" >}} by {{< ghuser name="rheinz" >}} -- docs: Consistent spelling of "ID" {{< pr number="1068" repo="esphome-docs" >}} by {{< ghuser name="spacegaier" >}} -- docs: Change GREYSCALE to GRAYSCALE {{< pr number="1073" repo="esphome-docs" >}} by {{< ghuser name="adrienbrault" >}} -- docs: SPI: fix Example {{< pr number="1076" repo="esphome-docs" >}} by {{< ghuser name="ferbar" >}} -- docs: Update diy.rst {{< pr number="1106" repo="esphome-docs" >}} by {{< ghuser name="electrofun-smart" >}} -- docs: Make changelog banner dismissable {{< pr number="1113" repo="esphome-docs" >}} by {{< ghuser name="manutenfruits" >}} -- docs: Correct typo: "between between" -> "between" {{< pr number="1109" repo="esphome-docs" >}} by {{< ghuser name="janosrusiczki" >}} -- docs: Update canbus.rst {{< pr number="1115" repo="esphome-docs" >}} by {{< ghuser name="meijerwynand" >}} -- docs: Update diy.rst {{< pr number="1114" repo="esphome-docs" >}} by {{< ghuser name="murilobaliego" >}} -- docs: Update email addresses {{< pr number="1122" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.18.0.md b/content/changelog/v1.18.0.md deleted file mode 100644 index 0fb2193c12..0000000000 --- a/content/changelog/v1.18.0.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.18.0." -title: "Changelog - Version 1.18.0 - 19th May 2021" -params: - seo: - description: Changelog for ESPHome version 1.18.0. - image: /_static/changelog-1.18.0.png ---- - - -{{< imgtable >}} -"BME680 via BSEC","components/sensor/bme680_bsec","bme680.jpg","" -"b-parasite","components/sensor/b_parasite","b_parasite.jpg","" -"SGP40","components/sensor/sgp40","sgp40.jpg","" -"SHT4X","components/sensor/sht4x","sht4x.jpg","" -"TCA9548A I²C Multiplexer","components/tca9548a","tca9548a.jpg","" -"Grow Fingerprint Reader","components/fingerprint_grow","fingerprint.svg","dark-invert" -"TOF10120","components/sensor/tof10120","tof10120.jpg","" -"SM2135","components/output/sm2135","sm2135.svg","" -"ESP32 BLE Client","components/ble_client","bluetooth.svg","dark-invert" -"BLE Sensor","components/sensor/ble_sensor","bluetooth.svg","dark-invert" -"External Components","components/external_components","external_components.svg","dark-invert" -{{< /imgtable >}} -It feels like I was just writing the release notes for 1.17 not long ago, so here's to getting ESPHome going on a regular schedule. - -Releases will be set for the 3rd Wednesday of each month, with a beta release starting 1 week earlier for those who would like to test -that and help make sure it is stable. - -Apart from a few new sensors, we now have built in support for {{< docref "/components/external_components" >}}, check it out. Thanks {{< ghuser name="OttoWinter" >}} and {{< ghuser name="glmnet" >}} - -Also now, an ESPHome device is able to connect to other BLE devices and become a {{< docref "/components/ble_client" >}}, reading sensors and controlling switches etc. -You can read basic sensor values using the {{< docref "/components/sensor/ble_client" >}} component or use the data displayed in the logs to build a new native component -that provides the sensors/switches/etc directly. - -Jesse - -## New Integrations - -- esphome: Add I2CMultiplexer in general and the TCA9548A in special {{< pr number="1410" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} (new-integration) -- esphome: Add BME680 via BSEC integration {{< pr number="1313" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} (new-integration) -- esphome: Adds support for b-parasite soil moisture sensor {{< pr number="1666" repo="esphome" >}} by {{< ghuser name="rbaron" >}} (new-integration) -- esphome: Sgp40 {{< pr number="1513" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (new-integration) -- esphome: Add support for SHT4X {{< pr number="1512" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- esphome: Add Grow Fingerprint Reader {{< pr number="1356" repo="esphome" >}} by {{< ghuser name="loongyh" >}} (new-integration) -- esphome: Support for TOF10120 distance sensor {{< pr number="1375" repo="esphome" >}} by {{< ghuser name="wstrzalka" >}} (new-integration) -- esphome: BLE client support on ESP32 {{< pr number="1177" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (new-integration) -- esphome: Implement external custom components installing from YAML {{< pr number="1630" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- esphome: Add sm2135 component {{< pr number="1736" repo="esphome" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) (new-integration) - -## Breaking Changes - -- esphome: Raise minimum python version to 3.7 {{< pr number="1673" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- esphome: Change wifi signal strength unit to dBm {{< pr number="1734" repo="esphome" >}} by {{< ghuser name="mbo18" >}} (breaking-change) -- esphome: Use core constants for sample duration on bh1750 {{< pr number="1764" repo="esphome" >}} by {{< ghuser name="yuvalabou" >}} (breaking-change) (cherry-picked) - -## Beta Fixes - -- docs: Update allowed characters for node names {{< pr number="1072" repo="esphome-docs" >}} by {{< ghuser name="pkuehne" >}} (cherry-picked) -- docs: Fix missed merge conflict {{< pr number="1155" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- docs: Replaced set_password with new_password {{< pr number="1157" repo="esphome-docs" >}} by {{< ghuser name="PaulAntonDeen" >}} (cherry-picked) -- esphome: Fix build issues for idf 4.2 (Support ESP32-S2) {{< pr number="1433" repo="esphome" >}} by {{< ghuser name="misery" >}} (cherry-picked) -- esphome: Upgrade the version of AsyncTCP-esphome to v1.2.2 {{< pr number="1762" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- esphome: Use core constants for sample duration on bh1750 {{< pr number="1764" repo="esphome" >}} by {{< ghuser name="yuvalabou" >}} (breaking-change) (cherry-picked) -- esphome: Add sm2135 component {{< pr number="1736" repo="esphome" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) (new-integration) -- docs: Add sm2135 component {{< pr number="1127" repo="esphome-docs" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) -- docs: Some clarification added to external components. {{< pr number="1165" repo="esphome-docs" >}} by {{< ghuser name="mmakaay" >}} (cherry-picked) -- esphome: Allow RC522 components to have multiple configurations {{< pr number="1782" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) - -## All changes - -- esphome: Add I2CMultiplexer in generel and the TCA9548A in special {{< pr number="1410" repo="esphome" >}} by {{< ghuser name="andreashergert1984" >}} (new-integration) -- docs: Add i2c multiplexer {{< pr number="897" repo="esphome-docs" >}} by {{< ghuser name="andreashergert1984" >}} -- esphome: Add the display.is_displaying_page condition {{< pr number="1646" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- docs: Add documentation for the display.is_displaying_page condition {{< pr number="1079" repo="esphome-docs" >}} by {{< ghuser name="numo68" >}} -- esphome: Add BME680 via BSEC integration {{< pr number="1313" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} (new-integration) -- docs: Add BME680 BSEC docs {{< pr number="793" repo="esphome-docs" >}} by {{< ghuser name="trvrnrth" >}} -- esphome: Fixed CustomComponentConstructor::get_component() {{< pr number="1653" repo="esphome" >}} by {{< ghuser name="dataway" >}} -- esphome: Bump pytest from 6.2.2 to 6.2.3 {{< pr number="1663" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Bump protobuf from 3.15.6 to 3.15.7 {{< pr number="1662" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Rewrite sun component calculations {{< pr number="1661" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- esphome: Raise minimum python version to 3.7 {{< pr number="1673" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) -- esphome: Adds support for b-parasite soil moisture sensor {{< pr number="1666" repo="esphome" >}} by {{< ghuser name="rbaron" >}} (new-integration) -- docs: Adds docs for the b-parasite soil moisture sensor {{< pr number="1086" repo="esphome-docs" >}} by {{< ghuser name="rbaron" >}} -- esphome: mqtt_client: Added MQTTClientComponent::unsubscribe() {{< pr number="1672" repo="esphome" >}} by {{< ghuser name="dataway" >}} -- esphome: Disallow _ in node name {{< pr number="1632" repo="esphome" >}} by {{< ghuser name="pkuehne" >}} -- esphome: Receive long MQTT payload {{< pr number="1590" repo="esphome" >}} by {{< ghuser name="gaco79" >}} -- esphome: Daylight Saving Time spelling fix {{< pr number="1677" repo="esphome" >}} by {{< ghuser name="dashdrum" >}} -- esphome: Support custom build_flags for bme680_bsec {{< pr number="1678" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Add Arduino ESP32 version mapping {{< pr number="1679" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- esphome: Automate building and publishing of esphome-lint docker image {{< pr number="1680" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- esphome: Sgp40 {{< pr number="1513" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (new-integration) -- docs: sgp40 {{< pr number="985" repo="esphome-docs" >}} by {{< ghuser name="SenexCrenshaw" >}} -- esphome: Bump protobuf from 3.15.7 to 3.15.8 {{< pr number="1682" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- esphome: Implementing the remainder of GPS data for the GPS component. {{< pr number="1676" repo="esphome" >}} by {{< ghuser name="coogle" >}} -- docs: Updating docs for the gps component. {{< pr number="1094" repo="esphome-docs" >}} by {{< ghuser name="coogle" >}} -- esphome: Bump AsyncTCP-esphome to 1.2.1. {{< pr number="1693" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- esphome: Revert "Bump AsyncTCP-esphome to 1.2.1." {{< pr number="1709" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- esphome: Fix name_add_mac_suffix using_ instead of - {{< pr number="1702" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- docs: Update name_add_mac_suffix use dash {{< pr number="1111" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Add monochromatic effects: Pulse, Random {{< pr number="1616" repo="esphome" >}} by {{< ghuser name="ferbar" >}} -- docs: Add 'pulse' effect doc {{< pr number="1067" repo="esphome-docs" >}} by {{< ghuser name="ferbar" >}} -- esphome: Add support for SHT4X {{< pr number="1512" repo="esphome" >}} by {{< ghuser name="sjtrny" >}} (new-integration) -- docs: Add docs for SHT4X {{< pr number="1002" repo="esphome-docs" >}} by {{< ghuser name="sjtrny" >}} -- esphome: Addition of forward and reverse active energy counters to ATM90E32 sensor component {{< pr number="1271" repo="esphome" >}} by {{< ghuser name="elyorkhakimov" >}} -- docs: Add Atm90e32 energy docs {{< pr number="1120" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add Grow Fingerprint Reader {{< pr number="1356" repo="esphome" >}} by {{< ghuser name="loongyh" >}} (new-integration) -- docs: Add Grow fingerprint reader docs {{< pr number="835" repo="esphome-docs" >}} by {{< ghuser name="loongyh" >}} -- esphome: Support for TOF10120 distance sensor {{< pr number="1375" repo="esphome" >}} by {{< ghuser name="wstrzalka" >}} (new-integration) -- docs: Documentation for TOF10120 support {{< pr number="846" repo="esphome-docs" >}} by {{< ghuser name="wstrzalka" >}} -- esphome: Swap fan and swing fields for Fujitu ACs {{< pr number="1635" repo="esphome" >}} by {{< ghuser name="alex-richards" >}} -- esphome: BLE client support on ESP32 {{< pr number="1177" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (new-integration) -- docs: Ble client docs {{< pr number="702" repo="esphome-docs" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Update email addresses {{< pr number="1733" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Ble client fixes {{< pr number="1739" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- esphome: Fix #1940: Implement speed_count in TuyaFan {{< pr number="1654" repo="esphome" >}} by {{< ghuser name="0x0a11c0de" >}} -- docs: Add speed_count to tuya fan {{< pr number="1080" repo="esphome-docs" >}} by {{< ghuser name="0x0a11c0de" >}} -- docs: Fix mcp3008 reference {{< pr number="1131" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Add Hyperion Support {{< pr number="1339" repo="esphome" >}} by {{< ghuser name="d-two" >}} -- docs: Add note about hyperion classic udp port {{< pr number="1135" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} -- esphome: Call `Stepper::should_step_` every loop iteration {{< pr number="1373" repo="esphome" >}} by {{< ghuser name="akonradi" >}} -- esphome: Add support for controlling Tuya fan direction {{< pr number="1409" repo="esphome" >}} by {{< ghuser name="rmounce" >}} -- docs: Document Tuya fan direction datapoint {{< pr number="877" repo="esphome-docs" >}} by {{< ghuser name="rmounce" >}} -- esphome: Change wifi signal strength unit to dBm {{< pr number="1734" repo="esphome" >}} by {{< ghuser name="mbo18" >}} (breaking-change) -- docs: Change wifi signal strength unit to dBm {{< pr number="1125" repo="esphome-docs" >}} by {{< ghuser name="mbo18" >}} -- esphome: Added an option to disable mDNS {{< pr number="1716" repo="esphome" >}} by {{< ghuser name="dnetguru" >}} -- docs: Added docs for enable_mdns option {{< pr number="1118" repo="esphome-docs" >}} by {{< ghuser name="dnetguru" >}} -- docs: add External components docs {{< pr number="1107" repo="esphome-docs" >}} by {{< ghuser name="glmnet" >}} -- esphome: Implement external custom components installing from YAML {{< pr number="1630" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (new-integration) -- esphome: Update copyright year {{< pr number="1760" repo="esphome" >}} by {{< ghuser name="bonanitech" >}} -- docs: Fixed datasheet link for RC522 {{< pr number="1144" repo="esphome-docs" >}} by {{< ghuser name="0nikola1" >}} -- docs: Added receive for Fujitsu ACs {{< pr number="1037" repo="esphome-docs" >}} by {{< ghuser name="alex-richards" >}} -- docs: Update allowed characters for node names {{< pr number="1072" repo="esphome-docs" >}} by {{< ghuser name="pkuehne" >}} (cherry-picked) -- docs: Update docs: Add references to alternative ICs to HLW8012 and CSE7766 {{< pr number="902" repo="esphome-docs" >}} by {{< ghuser name="kubik369" >}} -- docs: Update pulse_counter.rst {{< pr number="1089" repo="esphome-docs" >}} by {{< ghuser name="Chupaka" >}} -- docs: Remove deprecated board_flash_mode from configuration example {{< pr number="1149" repo="esphome-docs" >}} by {{< ghuser name="frenck" >}} -- docs: Update deep_sleep.rst {{< pr number="1152" repo="esphome-docs" >}} by {{< ghuser name="theOzzieRat" >}} -- docs: Utalize pip3 for commands {{< pr number="1143" repo="esphome-docs" >}} by {{< ghuser name="rradar" >}} -- docs: FAQ page: Converting from "I" to "we" wording {{< pr number="1103" repo="esphome-docs" >}} by {{< ghuser name="spacegaier" >}} -- docs: thermostat min/max temperature clarification {{< pr number="1057" repo="esphome-docs" >}} by {{< ghuser name="larsonmpdx" >}} -- docs: Added compatibility notes {{< pr number="1033" repo="esphome-docs" >}} by {{< ghuser name="Dezorian" >}} -- docs: Specify format for BSSID entries. {{< pr number="1046" repo="esphome-docs" >}} by {{< ghuser name="marcteale" >}} -- docs: add font to usage example {{< pr number="1050" repo="esphome-docs" >}} by {{< ghuser name="azrael783" >}} -- docs: Fix missed merge conflict {{< pr number="1155" repo="esphome-docs" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- docs: Sample codeblock has incorrect variables {{< pr number="1156" repo="esphome-docs" >}} by {{< ghuser name="jcallaghan" >}} -- docs: Replaced set_password with new_password {{< pr number="1157" repo="esphome-docs" >}} by {{< ghuser name="PaulAntonDeen" >}} (cherry-picked) -- docs: pulse counter: Show how calculations are made {{< pr number="861" repo="esphome-docs" >}} by {{< ghuser name="fredrike" >}} -- esphome: Upgrade the version of AsyncTCP-esphome to v1.2.2 {{< pr number="1762" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- esphome: Fix build issues for idf 4.2 (Support ESP32-S2) {{< pr number="1433" repo="esphome" >}} by {{< ghuser name="misery" >}} (cherry-picked) -- esphome: Use core constants for sample duration on bh1750 {{< pr number="1764" repo="esphome" >}} by {{< ghuser name="yuvalabou" >}} (breaking-change) (cherry-picked) -- docs: Fix docs for inkplate {{< pr number="1158" repo="esphome-docs" >}} by {{< ghuser name="NobodysNightmare" >}} -- docs: Fixed wrong link in i2c_id {{< pr number="1163" repo="esphome-docs" >}} by {{< ghuser name="petrepa" >}} -- docs: Explain where to upload .ttf font files {{< pr number="1133" repo="esphome-docs" >}} by {{< ghuser name="TheGroundZero" >}} -- esphome: Add sm2135 component {{< pr number="1736" repo="esphome" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) (new-integration) -- docs: Add sm2135 component {{< pr number="1127" repo="esphome-docs" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) -- docs: Some clarification added to external components. {{< pr number="1165" repo="esphome-docs" >}} by {{< ghuser name="mmakaay" >}} (cherry-picked) -- docs: Add new disconnect reasons to the FAQ. {{< pr number="1129" repo="esphome-docs" >}} by {{< ghuser name="mmakaay" >}} -- esphome: Allow RC522 components to have multiple configurations {{< pr number="1782" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- docs: Update max frequency {{< pr number="1172" repo="esphome-docs" >}} by {{< ghuser name="bookcasey" >}} -- docs: Update web-api id component {{< pr number="1168" repo="esphome-docs" >}} by {{< ghuser name="meijerwynand" >}} -- docs: Fix docker build failure {{< pr number="1179" repo="esphome-docs" >}} by {{< ghuser name="martgras" >}} -- docs: Update ifan02 example with new fan speed options {{< pr number="1177" repo="esphome-docs" >}} by {{< ghuser name="workingmanrob" >}} -- docs: Document missing use_address in Ethernet component {{< pr number="1176" repo="esphome-docs" >}} by {{< ghuser name="xsnoopy" >}} -- docs: Lambda over multiple lines. added {{< pr number="1173" repo="esphome-docs" >}} by {{< ghuser name="klenaers" >}} -- docs: changed LG example to existing, working code {{< pr number="1171" repo="esphome-docs" >}} by {{< ghuser name="qqgg231" >}} -- docs: GPIO Switch: simplify Momentary Switch example {{< pr number="1121" repo="esphome-docs" >}} by {{< ghuser name="ianchi" >}} -- docs: Added warning: GPIOs are LIVE in power measurement devices {{< pr number="583" repo="esphome-docs" >}} by {{< ghuser name="CarlosGS" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.19.0.md b/content/changelog/v1.19.0.md deleted file mode 100644 index 691e767479..0000000000 --- a/content/changelog/v1.19.0.md +++ /dev/null @@ -1,254 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.19.0." -title: "Changelog - Version 1.19.0 - 16th June 2021" -params: - seo: - description: Changelog for ESPHome version 1.19.0. - image: /_static/changelog-1.19.0.png ---- - - -{{< imgtable >}} -"Improv","components/esp32_improv","improv.svg","dark-invert" -"SM2135","components/output/sm2135","sm2135.svg","" -"XPT2046","components/binary_sensor/xpt2046","xpt2046.jpg","" -"SDM Meter","components/sensor/sdm_meter","sdm220m.jpg","" -"CS5460A","components/sensor/cs5460a","cs5460a.png","" -{{< /imgtable >}} -Wow. Ok, so this release may not look big, but there are a number of new features that are not new components. - -## Improv - -{{< docref "/components/esp32_improv" "Improv Wi-Fi" >}} is a new standard that stands for **Improved Provisioning of Wi-Fi -Credentials**. What it does is allow you to provision Wi-Fi credentials to the device by using Bluetooth LE. -Check out the website for more details at [improv-wifi.com](https://www.improv-wifi.com/). - -## Home Assistant Sensor Attributes - -For a long time now one of the top requested features was to be able to read attributes from Home Assistant -entities into a local sensor in ESPHome. For example the brightness of a light, or the current temperature -of a climate device. {{< ghuser name="frenck" >}} decided to take a stab and as long as you are running at least ESPHome -1.19.0 and Home Assistant 2021.6 then you can do this. Thanks Frenck! - -```yaml -# Example configuration entry -sensor: - - platform: homeassistant - id: current_temperature - entity_id: climate.living_room - attribute: current_temperature -``` - -## For the Creators - -There have been a few additions to the ESPHome codebase that make it easier for creators to make projects -in ESPHome and distribute them pre-installed and ready to use. See the {{< docref "/guides/creators" "new page here" >}}. - -## The Web Experience - -We have been working hard on some new tooling to make it easier for everyone to install ESPHome and other DIY -firmwares onto their ESP-based devices. To do this we have created the -[ESP Web Tools](https://esphome.github.io/esp-web-tools/). Big shoutout to {{< ghuser name="balloob" >}} on most of that work! - -Because of these new tools, the ESPHome dashboard has gotten a slight makeover when you choose to install to a device. -You are now given the option to install directly via WebSerial to the ESP from the browser. No more plugging into the -server/VM running ESPHome and restarting container etc. It just works. (Provided you are using Chrome or Edge). - -## Command Line Interface - -Thanks to {{< ghuser name="oxan" >}} for making some change to the ESPHome CLI. Instead of `esphome config.yaml run` -we now have `esphome run config.yaml`. The old format is still accepted and will be removed in a future release, -but there is a **breaking change** with this release which is the arguments `--upload-port` and `--serial-port` have been -combined and changed to `--device`. - -## Release 1.19.1 - June 18 - -- Update dashboard to 20210617.0 {{< pr number="1930" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Fix: midea_ac: fixed query status frame {{< pr number="1922" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Improve config final validation {{< pr number="1917" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Replace CLIMATE_MODE_AUTO with CLIMATE_MODE_HEAT_COOL in most cases {{< pr number="1933" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.19.2 - June 21 - -- Don't send Tuya commands while currently receiving a message {{< pr number="1886" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Fix midea_ac query frame {{< pr number="1940" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Allow wifi setup to proceed when there is no sta or ap {{< pr number="1931" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix bad climate control enum {{< pr number="1942" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.19.3 - June 23 - -- Bump esphome-dashboard to 20210622.0 {{< pr number="1955" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.19.4 - June 24 - -- Rework climate traits {{< pr number="1941" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- API raise minor version for climate changes {{< pr number="1947" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Disallow power_save_mode NONE if used together with BLE {{< pr number="1950" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add climate preset NONE again {{< pr number="1951" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Compat argv parsing improvements {{< pr number="1952" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump dashboard to 20210623.0 {{< pr number="1958" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Full list of changes - -### New Components - -- Add sm2135 component {{< pr number="1736" repo="esphome" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) (new-integration) -- Add support for the XPT2046 touchscreen controller {{< pr number="1542" repo="esphome" >}} by {{< ghuser name="numo68" >}} (new-integration) -- Add support for SDMXXX energy meters {{< pr number="1260" repo="esphome" >}} by {{< ghuser name="polyfaces" >}} (new-integration) -- Add CS5460A power-meter component {{< pr number="1474" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} (new-integration) -- Added support for Xiaomi CGDK2 {{< pr number="1451" repo="esphome" >}} by {{< ghuser name="zaluthar" >}} (new-integration) -- Improv - BLE WiFi provisioning {{< pr number="1807" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) (notable-change) - -### Breaking Changes - -- Drop 128x160 ESP-32 camera resolution {{< pr number="1813" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- teleinfo: use text_sensor and sensor. {{< pr number="1403" repo="esphome" >}} by {{< ghuser name="0hax" >}} (breaking-change) -- CLI user experience improvements {{< pr number="1805" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) (notable-change) - -### Notable Changes - -- Add attribute support to Home Assistant sensors {{< pr number="1770" repo="esphome" >}} by {{< ghuser name="frenck" >}} (notable-change) -- CLI user experience improvements {{< pr number="1805" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) (notable-change) -- Improv - BLE WiFi provisioning {{< pr number="1807" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) (notable-change) - -### Beta Fixes - -- Upgrade the version of AsyncTCP-esphome to v1.2.2 {{< pr number="1762" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- Fix build issues for idf 4.2 (Support ESP32-S2) {{< pr number="1433" repo="esphome" >}} by {{< ghuser name="misery" >}} (cherry-picked) -- Use core constants for sample duration on bh1750 {{< pr number="1764" repo="esphome" >}} by {{< ghuser name="yuvalabou" >}} (breaking-change) (cherry-picked) -- Add sm2135 component {{< pr number="1736" repo="esphome" >}} by {{< ghuser name="BoukeHaarsma23" >}} (cherry-picked) (new-integration) -- Allow RC522 components to have multiple configurations {{< pr number="1782" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Simplify LightCall validation {{< pr number="1874" repo="esphome" >}} by {{< ghuser name="oxan" >}} (cherry-picked) -- Simplify LightCall validation {{< pr number="1874" repo="esphome" >}} by {{< ghuser name="oxan" >}} (cherry-picked) -- BLE loop use {{< pr number="1882" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- BLE loop use {{< pr number="1882" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Add support for waveshare_epaper 1.54v2 {{< pr number="1843" repo="esphome" >}} by {{< ghuser name="geoffdavis" >}} (cherry-picked) -- Add support for waveshare_epaper 1.54v2 {{< pr number="1843" repo="esphome" >}} by {{< ghuser name="geoffdavis" >}} (cherry-picked) -- Ensure wifi is in at least station mode before starting improv {{< pr number="1899" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Ensure wifi is in at least station mode before starting improv {{< pr number="1899" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Move esp32_ble_server to its own component {{< pr number="1898" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) (cherry-picked) (new-integration) -- Move esp32_ble_server to its own component {{< pr number="1898" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) (cherry-picked) (new-integration) -- Add new wizard + allow installing firmware over webserial {{< pr number="1887" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Add new wizard + allow installing firmware over webserial {{< pr number="1887" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Allow no networks or AP to be set. {{< pr number="1908" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Allow no networks or AP to be set. {{< pr number="1908" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Validate that either networks, ap, or improv is set up {{< pr number="1910" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Validate that either networks, ap, or improv is set up {{< pr number="1910" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Bump frontend to 20210614.0 {{< pr number="1912" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Bump frontend to 20210614.0 {{< pr number="1912" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- fixes compatibility with esphome cfg vscode {{< pr number="1911" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- fixes compatibility with esphome cfg vscode {{< pr number="1911" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- Bump dashboard to 20210615.0 {{< pr number="1918" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Shorten the ble name to prevent crash with long device names {{< pr number="1920" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Fix update-all from dashboard {{< pr number="1924" repo="esphome" >}} by {{< ghuser name="frenck" >}} - -### All changes - -- Bump black from 20.8b1 to 21.5b0 {{< pr number="1745" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pylint from 2.7.2 to 2.8.2 {{< pr number="1729" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Fix error when using %% in printf format. {{< pr number="1713" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Update const.py {{< pr number="1748" repo="esphome" >}} by {{< ghuser name="cciprian5" >}} -- Allow duration for deep_sleep.enter to be templatable {{< pr number="1765" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump black from 21.5b0 to 21.5b1 {{< pr number="1768" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump flake8 from 3.9.0 to 3.9.2 {{< pr number="1763" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest from 6.2.3 to 6.2.4 {{< pr number="1769" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Adding delay to aht10.cpp (issue #1635) {{< pr number="1498" repo="esphome" >}} by {{< ghuser name="krunkel" >}} -- Mitsubishi Heat Pump - Fixed default transmit_state to be generic instead of for a specific type of heat pump {{< pr number="1414" repo="esphome" >}} by {{< ghuser name="RubyBailey" >}} -- Add function to set SDS011 sensor in sleeping mode {{< pr number="1416" repo="esphome" >}} by {{< ghuser name="onde2rock" >}} -- Autorepeat filter for the binary sensors {{< pr number="1681" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- Add action to set total pulses on pulse_meter {{< pr number="1757" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add more json schema generation features {{< pr number="1690" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Generate protobuf code closer to formatted files {{< pr number="1790" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add attribute support to Home Assistant sensors {{< pr number="1770" repo="esphome" >}} by {{< ghuser name="frenck" >}} (notable-change) -- Bump Arduino SDK for ESP32 to 1.0.6 {{< pr number="1789" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Added bottom segment to digit 9 {{< pr number="1787" repo="esphome" >}} by {{< ghuser name="testbughub" >}} -- Add support for the XPT2046 touchscreen controller {{< pr number="1542" repo="esphome" >}} by {{< ghuser name="numo68" >}} (new-integration) -- Revert "Added bottom segment to digit 9" {{< pr number="1791" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Introduce new async-def coroutine syntax {{< pr number="1657" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Add on_tag_removed trigger to pn532 {{< pr number="1436" repo="esphome" >}} by {{< ghuser name="romerod" >}} -- Do not use Serial2 for ESP32C3, too {{< pr number="1798" repo="esphome" >}} by {{< ghuser name="misery" >}} -- Use latest version of upstream NeoPixelBus library {{< pr number="1701" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Added fan triggers on_turn_on and on_turn_off {{< pr number="1726" repo="esphome" >}} by {{< ghuser name="dataway" >}} -- tm1637 - support 6 character displays {{< pr number="1803" repo="esphome" >}} by {{< ghuser name="dataway" >}} -- Convert core components to async-def coroutine syntax {{< pr number="1658" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Lights & GPIO Switch inverted restore mode {{< pr number="1810" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- allow default option for typed_schema {{< pr number="1700" repo="esphome" >}} by {{< ghuser name="wifwucite" >}} -- Refactor font creation to save stack space {{< pr number="1707" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- BME680 BSEC: Allow sample rate overrides for T/P/H sensors {{< pr number="1710" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Add the on_page_change display trigger {{< pr number="1687" repo="esphome" >}} by {{< ghuser name="numo68" >}} -- Allow segments in a light partition to be reversed {{< pr number="1484" repo="esphome" >}} by {{< ghuser name="jimbauwens" >}} -- Document considerations when changing recommended framework version {{< pr number="1822" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Convert components to async-def syntax {{< pr number="1821" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump protobuf from 3.15.8 to 3.17.0 {{< pr number="1776" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Convert components to async-def syntax {{< pr number="1823" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Update sensor device classes from HA {{< pr number="1825" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Update platformio.ini settings and fix test apps {{< pr number="1815" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- lambda condition should return {{< pr number="1833" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- fix dallas pin validation {{< pr number="1692" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix typo in wizard {{< pr number="1836" repo="esphome" >}} by {{< ghuser name="ThomDietrich" >}} -- add validate to components {{< pr number="1631" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Added bottom segment to digit 9 {{< pr number="1847" repo="esphome" >}} by {{< ghuser name="testbughub" >}} -- Add support for SDMXXX energy meters {{< pr number="1260" repo="esphome" >}} by {{< ghuser name="polyfaces" >}} (new-integration) -- Add CS5460A power-meter component {{< pr number="1474" repo="esphome" >}} by {{< ghuser name="balrog-kun" >}} (new-integration) -- Drop 128x160 ESP-32 camera resolution {{< pr number="1813" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Rf Bridge: add bucket sniffing and beep functionality {{< pr number="1819" repo="esphome" >}} by {{< ghuser name="ianchi" >}} -- Use built-in validation for altitude {{< pr number="1831" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Don't check uart settings for modbus {{< pr number="1850" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- I2c raw cmds with multiplexer {{< pr number="1817" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Update fingerprint count after enroll {{< pr number="1811" repo="esphome" >}} by {{< ghuser name="rwagnervm" >}} -- teleinfo: use text_sensor and sensor. {{< pr number="1403" repo="esphome" >}} by {{< ghuser name="0hax" >}} (breaking-change) -- Copy missing BLE client characteristic read data {{< pr number="1818" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- Added support for Xiaomi CGDK2 {{< pr number="1451" repo="esphome" >}} by {{< ghuser name="zaluthar" >}} (new-integration) -- Fix ble client esp_gatt_if comparison {{< pr number="1852" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add optional lambda to BLESensor for raw data parsing {{< pr number="1851" repo="esphome" >}} by {{< ghuser name="torfbolt" >}} -- Support Tuya light color temperature control {{< pr number="1412" repo="esphome" >}} by {{< ghuser name="rmounce" >}} -- Tuya improvements {{< pr number="1491" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Use size_t for length parameter {{< pr number="1799" repo="esphome" >}} by {{< ghuser name="misery" >}} -- Added vol +/- control to dfplayer {{< pr number="1856" repo="esphome" >}} by {{< ghuser name="foxsam21" >}} -- Support raw datapoints for tuya components {{< pr number="1669" repo="esphome" >}} by {{< ghuser name="kroimon" >}} -- Add support for Sensor state class {{< pr number="1835" repo="esphome" >}} by {{< ghuser name="frenck" >}} -- make crc16 function accessible {{< pr number="1857" repo="esphome" >}} by {{< ghuser name="ssieb" >}} -- Add preset, custom_preset and custom_fan_mode support to climate {{< pr number="1471" repo="esphome" >}} by {{< ghuser name="Lumpusz" >}} -- Avoid unnecessary waits to stabilize the VOC algorithm {{< pr number="1834" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Fix SCD30 configuration on ESP32 {{< pr number="1830" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Bump Docker base version to 3.1.0 {{< pr number="1864" repo="esphome" >}} by {{< ghuser name="agners" >}} -- CLI user experience improvements {{< pr number="1805" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) (notable-change) -- Improv - BLE WiFi provisioning {{< pr number="1807" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-integration) (notable-change) -- Implement versioning for esphome/esphome-lint docker images {{< pr number="1877" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Bump base image to 3.4.0 {{< pr number="1879" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Use Clang 11 {{< pr number="1846" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Remove explain changes section from PR template {{< pr number="1876" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fixes for BLE/improv {{< pr number="1878" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Fix Clang 11 finds {{< pr number="1880" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Allow setting creator project name and version into code {{< pr number="1872" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Add platform and board to mdns response when API is used {{< pr number="1871" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update total_pulses at every detected pulse {{< pr number="1875" repo="esphome" >}} by {{< ghuser name="rklomp" >}} -- Simplify LightCall validation {{< pr number="1874" repo="esphome" >}} by {{< ghuser name="oxan" >}} (cherry-picked) -- BLE loop use {{< pr number="1882" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Add support for waveshare_epaper 1.54v2 {{< pr number="1843" repo="esphome" >}} by {{< ghuser name="geoffdavis" >}} (cherry-picked) -- Update ambiguous command {{< pr number="1889" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Configure clang-format for consistent pointer alignment {{< pr number="1890" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Activate some clang-tidy checks {{< pr number="1884" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Avoid non-const globals and enable clang-tidy check {{< pr number="1892" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Convert st7735.cpp to use Unix line separators {{< pr number="1894" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Ensure wifi is in at least station mode before starting improv {{< pr number="1899" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Move esp32_ble_server to its own component {{< pr number="1898" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) (cherry-picked) (new-integration) -- Add new wizard + allow installing firmware over webserial {{< pr number="1887" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Split files in light component {{< pr number="1893" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix CI by avoiding non-const global {{< pr number="1907" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Adds support cpp to vscode {{< pr number="1828" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Allow no networks or AP to be set. {{< pr number="1908" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Validate that either networks, ap, or improv is set up {{< pr number="1910" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Support ESP8266 Arduino 3.0.0 {{< pr number="1897" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Bump frontend to 20210614.0 {{< pr number="1912" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Run script/setup in devcontainer instead of pip install {{< pr number="1913" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- fixes compatibility with esphome cfg vscode {{< pr number="1911" repo="esphome" >}} by {{< ghuser name="glmnet" >}} (cherry-picked) -- Bump dashboard to 20210615.0 {{< pr number="1918" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Shorten the ble name to prevent crash with long device names {{< pr number="1920" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Fix update-all from dashboard {{< pr number="1924" repo="esphome" >}} by {{< ghuser name="frenck" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.20.0.md b/content/changelog/v1.20.0.md deleted file mode 100644 index a448631d68..0000000000 --- a/content/changelog/v1.20.0.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -description: "Changelog for ESPHome version 1.20.0." -title: "Changelog - Version 1.20.0 - 21st July 2021" -params: - seo: - description: Changelog for ESPHome version 1.20.0. - image: /_static/changelog-1.20.0.png ---- - - -{{< imgtable >}} -"Number Core","components/number/index","folder-open.svg","dark-invert" -"Template Number","components/number/template","description.svg","dark-invert" -"Havells Inverter","components/sensor/havells_solar","havellsgti5000d_s.jpg","" -"Anova Cooker","components/climate/anova","anova.png","" -{{< /imgtable >}} -Here's to another timely release bringing a few new components and a whole bunch of changes under -the hood to existing ones. - -## Number Entities - -Creating `number` entities in Home Assistant from ESPHome is now supported. This basically replaces -creating an `input_number` and then importing that sensor into ESPHome as a sensor with -`platform: homeassistant`. The state of the number can also be updated directly on the ESPHome device -and will be reflected in Home Assistant. - -I would like to see what other platforms people can come up with for the number component, -I have a few ideas myself. - -## Light Changes - -Unfortunately, some breaking changes had to be made: - -- For addressable RGBW lights, the brightness now also applies to the white channel (this was already the case for - non-addressable RGBW lights). If you want to control only the brightness of the color channel, use the new `color_brightness` option. - -- For RGBW lights, the white channel is no longer normalized by the color intensity in the `light.turn_on` and - `light.control` actions. In previous versions, if the red value was set to 60% and the white value to 30%, this - would result in the white channel being at 50% brightness. Starting with this version, this will result in the - white channel being set to 30%, as expected. - -## ESPHome Dashboard - -Thanks {{< ghuser name="balloob" >}} for making a small, but very significant change to the dashboard cards so now people who suffer from color-blindness -will know whether or not the node is online. - -{{< img src="online-indicator.png" alt="Image" width="50.0%" class="align-center" >}} - -## Nextion - -The Nextion component has had a major rewrite this release bringing many more features to those that use the displays. -I am not sure how to describe the changes except for listing the main change points from the PR and linking to the docs -for you to read yourself. {{< docref "/components/display/nextion" >}} - -- Sensors/binary sensors/switch/text sensors and touch have all been added. -- Over the air TFT file upload -- Polling has been added to all the components -- Display on_wake/on_sleep -- Many API helpers (get_string/get_int) have been added - -## Release 1.20.1 - July 27 - -- Fix git pull for external_components {{< pr number="2055" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- midea_ac: fix presets implementation {{< pr number="2054" repo="esphome" >}} by {{< ghuser name="dudanov" >}} -- Fixes new auto mode COOL and HEAT after {{< pr number="1994" repo="esphome" >}} {{< pr number="2053" repo="esphome" >}} by {{< ghuser name="carstenschroeder" >}} -- Log warning about lack of support for Anova nano {{< pr number="2063" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} -- Couple more updates for the Tuya component {{< pr number="2065" repo="esphome" >}} by {{< ghuser name="nuttytree" >}} -- Fix MQTT climate custom fan modes without regular ones {{< pr number="2071" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} - -## Release 1.20.2 - July 29 - -- More Tuya MCU robustness {{< pr number="2080" repo="esphome" >}} by {{< ghuser name="jkl1337" >}} -- Bump esphome dashboard to 20210728.0 {{< pr number="2081" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- HLW8012 - Dump energy sensor config {{< pr number="2082" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Use sensor_schema for total_daily_energy {{< pr number="2090" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.20.3 - July 30 - -- Set pulse meter total to use state class measurement and last reset type auto {{< pr number="2097" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} - -## Release 1.20.4 - August 4 - -- Correctly invert esp32 RMT TX {{< pr number="2022" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} -- Move configure_rmt() into setup() {{< pr number="2028" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} -- Fix climate restore schema changed resulting in invalid restore {{< pr number="2068" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix PID climate breaks when restoring old modes {{< pr number="2086" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- fix diplay trigger missing base class {{< pr number="2099" repo="esphome" >}} by {{< ghuser name="glmnet" >}} -- Fix min/max keys in MQTT Number to match Home Assistant {{< pr number="2102" repo="esphome" >}} by {{< ghuser name="paulmonigatti" >}} -- Use proper schema for the analog pin shorthand {{< pr number="2103" repo="esphome" >}} by {{< ghuser name="nonameplum" >}} -- [duty_cycle] initialize two missing variables {{< pr number="2088" repo="esphome" >}} by {{< ghuser name="CarlosGS" >}} -- Fix time.on_time triggering if time jumped back {{< pr number="1806" repo="esphome" >}} by {{< ghuser name="brambo123" >}} -- Fix external components not refreshing with default or high refresh time {{< pr number="2122" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} - -## Full list of changes - -### New Features - -- Allow WiFi AP to use device name {{< pr number="1990" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Add Number entities (from Home Assistant) {{< pr number="1971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) (new-integration) (notable-change) -- Nextion upload and sensors {{< pr number="1464" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) (new-feature) (notable-change) -- Adding last_reset_type to sensors that should support it. {{< pr number="2039" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) (new-feature) - -### New Components - -- Climate component for Ballu air conditioners with remote model YKR-K/002E {{< pr number="1939" repo="esphome" >}} by {{< ghuser name="bazuchan" >}} (new-integration) -- Anova ble component {{< pr number="1752" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (new-integration) -- Add Number entities (from Home Assistant) {{< pr number="1971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) (new-integration) (notable-change) -- Added support for havells_solar sensor {{< pr number="1988" repo="esphome" >}} by {{< ghuser name="sourabhjaiswal" >}} (new-integration) - -### Breaking Changes - -- remote_receiver use config parent receiver for registering dumpers {{< pr number="1980" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Change color model to fix white channel issues {{< pr number="1895" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Remove a whole bunch of deprecated/removed stuff {{< pr number="1981" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- catch 0.0 in float set_level pre-adjustment {{< pr number="2013" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (breaking-change) -- Climate mode meaning was changed {{< pr number="1995" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (breaking-change) - -### Beta Fixes - -- Nextion upload and sensors {{< pr number="1464" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) (new-feature) (notable-change) -- Fix ethernet component hostname handling {{< pr number="2010" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} (cherry-picked) -- Refactor docker build system and workflows {{< pr number="2023" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- GH Actions CI use GHCR {{< pr number="2027" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Dashboard disable assets caching {{< pr number="2025" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Improve external components error messages {{< pr number="2026" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Number and Template Number updates {{< pr number="2036" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Add restore_value to template number {{< pr number="2041" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- midea_ac: Fix turbo boost mode. Preset PRESET_BOOST. {{< pr number="2029" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (cherry-picked) -- Bump dashboard to 20210719.0 {{< pr number="2043" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Correct ADS1115 handling of multiple sensors in continuous mode {{< pr number="2016" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} (cherry-picked) -- ESP32 ADC use esp-idf {{< pr number="2024" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Fix white value transition for addressable lights {{< pr number="2045" repo="esphome" >}} by {{< ghuser name="oxan" >}} (cherry-picked) -- Adding last_reset_type to sensors that should support it. {{< pr number="2039" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) (new-feature) -- Remove superfluous polling on ADS1115 {{< pr number="2015" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} (cherry-picked) - -### Notable Changes - -- Add Number entities (from Home Assistant) {{< pr number="1971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) (new-integration) (notable-change) -- Nextion upload and sensors {{< pr number="1464" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) (new-feature) (notable-change) - -### All changes - -- Update ambiguous command {{< pr number="1889" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Configure clang-format for consistent pointer alignment {{< pr number="1890" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Activate some clang-tidy checks {{< pr number="1884" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Avoid non-const globals and enable clang-tidy check {{< pr number="1892" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Convert st7735.cpp to use Unix line separators {{< pr number="1894" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Split files in light component {{< pr number="1893" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix CI by avoiding non-const global {{< pr number="1907" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Adds support cpp to vscode {{< pr number="1828" repo="esphome" >}} by {{< ghuser name="dentra" >}} -- Support ESP8266 Arduino 3.0.0 {{< pr number="1897" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Run script/setup in devcontainer instead of pip install {{< pr number="1913" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix typo in test3.yaml {{< pr number="1928" repo="esphome" >}} by {{< ghuser name="loongyh" >}} -- Fix error print in script/helpers.py {{< pr number="1935" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Add variable bit width for Samsung protocol {{< pr number="1927" repo="esphome" >}} by {{< ghuser name="kbx81" >}} -- Add data sizes to log message {{< pr number="1938" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Update generation script to add const {{< pr number="1945" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Bump dashboard to 20210621.0 {{< pr number="1946" repo="esphome" >}} by {{< ghuser name="balloob" >}} -- Improve DHT read timings {{< pr number="1901" repo="esphome" >}} by {{< ghuser name="agners" >}} -- More VSCode devcontainer improvements {{< pr number="1934" repo="esphome" >}} by {{< ghuser name="agners" >}} -- Validate color temperature values for RGBWW/CWWW lights {{< pr number="1957" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Fix on_multi_click min_length {{< pr number="1960" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} -- Climate component for Ballu air conditioners with remote model YKR-K/002E {{< pr number="1939" repo="esphome" >}} by {{< ghuser name="bazuchan" >}} (new-integration) -- Simplify initializing glyph_data {{< pr number="1970" repo="esphome" >}} by {{< ghuser name="gladhorn" >}} -- Add device_class support for MQTT integration {{< pr number="1832" repo="esphome" >}} by {{< ghuser name="definitio" >}} -- Rename master branch to release {{< pr number="1976" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Fix tuya fan speed send {{< pr number="1978" repo="esphome" >}} by {{< ghuser name="trvrnrth" >}} -- Time Based Cover: Fixed apparent race condition on ESP32 chips {{< pr number="1984" repo="esphome" >}} by {{< ghuser name="pdoidge" >}} -- Fix invalid escape sequences in regex (fix pytest warning) {{< pr number="1814" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump hypothesis from 5.21.0 to 5.49.0 {{< pr number="1753" repo="esphome" >}} by {{< ghuser name="mweinelt" >}} -- Bump pytest-mock from 3.5.1 to 3.6.1 {{< pr number="1754" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- hlw8012: fix constants for BL0937 {{< pr number="1973" repo="esphome" >}} by {{< ghuser name="ianchi" >}} -- Anova ble component {{< pr number="1752" repo="esphome" >}} by {{< ghuser name="buxtronix" >}} (new-integration) -- Add stepper.set_acceleration and stepper.set_deceleration to stepper component {{< pr number="1977" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} -- remote_receiver use config parent receiver for registering dumpers {{< pr number="1980" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- Don't try compat parsing for "esphome version" {{< pr number="1966" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Change color model to fix white channel issues {{< pr number="1895" repo="esphome" >}} by {{< ghuser name="oxan" >}} (breaking-change) -- Allow WiFi AP to use device name {{< pr number="1990" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) -- Support custom fan modes in mqtt_climate {{< pr number="1989" repo="esphome" >}} by {{< ghuser name="mgorven" >}} -- Bump protobuf from 3.17.0 to 3.17.3 {{< pr number="1986" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-cov from 2.11.1 to 2.12.1 {{< pr number="1855" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Bump pytest-asyncio from 0.14.0 to 0.15.1 {{< pr number="1793" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Improve climate mode code docs {{< pr number="1995" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Climate modes COOL and HEAT are auto modes {{< pr number="1994" repo="esphome" >}} by {{< ghuser name="carstenschroeder" >}} -- Add state callback to ota component {{< pr number="1816" repo="esphome" >}} by {{< ghuser name="mmakaay" >}} -- Fix deprecation message for old climate swing mode methods {{< pr number="2003" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Add Number entities (from Home Assistant) {{< pr number="1971" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (new-feature) (new-integration) (notable-change) -- Fixed lolin32 lite key {{< pr number="2001" repo="esphome" >}} by {{< ghuser name="monkeyclass" >}} -- Add support for IBS-TH1 External Sensor {{< pr number="1983" repo="esphome" >}} by {{< ghuser name="MikkoTervala" >}} -- Bang bang climate new mode meanings {{< pr number="1996" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} -- Sgp30 sensor improvements {{< pr number="1510" repo="esphome" >}} by {{< ghuser name="huubeikens" >}} -- Color brightness fixes {{< pr number="2008" repo="esphome" >}} by {{< ghuser name="oxan" >}} -- Bump black from 21.5b1 to 21.6b0 {{< pr number="2011" repo="esphome" >}} by {{< ghuser name="dependabot[bot]" >}} -- Added support for havells_solar sensor {{< pr number="1988" repo="esphome" >}} by {{< ghuser name="sourabhjaiswal" >}} (new-integration) -- Remove a whole bunch of deprecated/removed stuff {{< pr number="1981" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (breaking-change) -- catch 0.0 in float set_level pre-adjustment {{< pr number="2013" repo="esphome" >}} by {{< ghuser name="WeekendWarrior1" >}} (breaking-change) -- Introduce clamp as a template function {{< pr number="1953" repo="esphome" >}} by {{< ghuser name="agners" >}} -- [Teleinfo] do not stop parsing frame if there is only a CRC error on … {{< pr number="1999" repo="esphome" >}} by {{< ghuser name="St4n" >}} -- Nextion upload and sensors {{< pr number="1464" repo="esphome" >}} by {{< ghuser name="SenexCrenshaw" >}} (cherry-picked) (new-feature) (notable-change) -- Fix ethernet component hostname handling {{< pr number="2010" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} (cherry-picked) -- Refactor docker build system and workflows {{< pr number="2023" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- GH Actions CI use GHCR {{< pr number="2027" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Dashboard disable assets caching {{< pr number="2025" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Improve external components error messages {{< pr number="2026" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Number and Template Number updates {{< pr number="2036" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- Add restore_value to template number {{< pr number="2041" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) -- midea_ac: Fix turbo boost mode. Preset PRESET_BOOST. {{< pr number="2029" repo="esphome" >}} by {{< ghuser name="dudanov" >}} (cherry-picked) -- Bump dashboard to 20210719.0 {{< pr number="2043" repo="esphome" >}} by {{< ghuser name="balloob" >}} (cherry-picked) -- Correct ADS1115 handling of multiple sensors in continuous mode {{< pr number="2016" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} (cherry-picked) -- ESP32 ADC use esp-idf {{< pr number="2024" repo="esphome" >}} by {{< ghuser name="OttoWinter" >}} (cherry-picked) -- Fix white value transition for addressable lights {{< pr number="2045" repo="esphome" >}} by {{< ghuser name="oxan" >}} (cherry-picked) -- Adding last_reset_type to sensors that should support it. {{< pr number="2039" repo="esphome" >}} by {{< ghuser name="jesserockz" >}} (cherry-picked) (new-feature) -- Remove superfluous polling on ADS1115 {{< pr number="2015" repo="esphome" >}} by {{< ghuser name="flacjacket" >}} (cherry-picked) - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.8.0.md b/content/changelog/v1.8.0.md deleted file mode 100644 index eacb9bb703..0000000000 --- a/content/changelog/v1.8.0.md +++ /dev/null @@ -1,243 +0,0 @@ ---- -description: "Changelog for esphomelib version 1.8.0." -title: "Version 1.8.0" -params: - seo: - description: Changelog for esphomelib version 1.8.0. ---- - - -{{< imgtable >}} -"Waveshare E-Paper","components/display/waveshare_epaper","waveshare_epaper.jpg","" -"Nextion","components/display/nextion","nextion.jpg","" -"SSD1306","components/display/ssd1306","ssd1306.jpg","" -"MAX7219","components/display/max7219","max7219.jpg","" -"LCD Display","components/display/lcd_display","lcd.jpg","" -"RCSwitch Integration","components/remote_transmitter.html#rcswitch-remote-codes","remote.svg","dark-invert" -"SPI Bus","components/spi","spi.svg","" -"UART Bus","components/uart","uart.svg","" -"Real Time Clock","components/time","clock-outline.svg","dark-invert" -"Uptime Sensor","components/sensor/uptime","timer.svg","dark-invert" -"PN532","components/binary_sensor/pn532","pn532.jpg","" -"RDM6300","components/binary_sensor/rdm6300","rdm6300.jpg","" -"BLE RSSI","components/sensor/ble_rssi","bluetooth.svg","dark-invert" -"Xiaomi HHCCJCY01","components/sensor/xiaomi_hhccjcy01","xiaomi_hhccjcy01.jpg","" -"Xiaomi LYWSDCGQ","components/sensor/xiaomi_lywsdcgq","xiaomi_lywsdcgq.jpg","" -"HMC5883L","components/sensor/hmc5883l","hmc5883l.jpg","" -"HX711","components/sensor/hx711","hx711.jpg","" -"HLW8012","components/sensor/hlw8012","hlw8012.svg","" -"BMP280","components/sensor/bmp280","bmp280.jpg","" -"INA219","components/sensor/ina219","ina219.jpg","" -"INA3221","components/sensor/ina3221","ina3221.jpg","" -"MH-Z19","components/sensor/mhz19","mhz19.jpg","" -"MS5611","components/sensor/ms5611","ms5611.jpg","" -"TCS34725","components/sensor/tcs34725","tcs34725.jpg","" -"RGBWW Light","components/light/rgbww","rgbw.png","" -"Cold+Warm White Light","components/light/cwww","brightness-medium.svg","dark-invert" -"Light Effects","components/light/index#light-effects","creation.svg","dark-invert" -{{< /imgtable >}} -Hi everyone, - -Today I have a new version of esphomelib with lots of new features and tons of time put in to present to you and -I hope you're as excited as I am to try these new things out :) - -This release mainly focuses on these new features: - -- Lots of Bug Fixes - Now that most of the hardware has arrived from china, I was able to fix a bunch - of bugs with a lot of integrations. - -- {{< docref "/components/display/index" "Displays!" >}} -- NFC/RFID Readers ({{< docref "/components/binary_sensor/pn532" "PN532" >}} and {{< docref "/components/binary_sensor/rdm6300" "RDM6300" >}}) -- New {{< docref "/components/esp32_ble_tracker" "ESP32 BLE integrations" >}} like {{< docref "/components/sensor/xiaomi_hhccjcy01" "Xiaomi HHCCJCY01" >}} -- Core Changes like the addition of the [SPI bus](/components/spi) and [UART bus](/components/uart) -- Lots of new [light effects](/components/light#light-effects) and support for cold-white/warm-white lights. -- A LOGO FOR THIS PROJECT!!! Thanks a lot to [@messimore](https://github.com/messismore) for - this visual masterpiece. - -And if you find esphomelib great and have some of your projects using it, please do spread the word online -(like [Christoph Dahlen did](https://www.dahlen.org/2018/08/esp8266-via-esphomelib-mit-home-assistant-verbinden/)) -and/or create [cookbook](/components#cookbook) entries so that others can learn from your work. Of course the main objective -of this website is to document esphomelib's features, but my vision is that it also inspires others to start -awesome projects ☀️ - -Special thanks to all the contributors for this release: - -- esphomeyaml: Add `only-generate` parameter to generate command to only generate the C++ code - [#84](https://github.com/OttoWinter/esphomeyaml/pull/84) by [@apeeters](https://github.com/apeeters) - -- esphomeyaml: Fix esphomeyaml logs for tls enabled mqtt brokers - [#118](https://github.com/OttoWinter/esphomeyaml/pull/118) by [@johnerikhalse](https://github.com/johnerikhalse) - -- esphomelib: Add Samsung IR codes [#141](https://github.com/OttoWinter/esphomelib/pull/141) - by [@escoand](https://github.com/escoand) - -- esphomelib: Add support for SNTP and RTC [#76](https://github.com/OttoWinter/esphomelib/pull/76) - by [@brandond](https://github.com/brandond) - -- esphomelib: Run travis jobs in parallel [#123](https://github.com/OttoWinter/esphomelib/pull/123) - by [@lobradov](https://github.com/lobradov) - -- esphomelib: Fix typo in dallas error message [#125](https://github.com/OttoWinter/esphomelib/pull/125) - by [@janpieper](https://github.com/janpieper) - -- esphomelib: Fix esphomelib examples [#124](https://github.com/OttoWinter/esphomelib/pull/124) - by [@lobradov](https://github.com/lobradov) - -- esphomelib: Fix panic in binary_sensor template [#111](https://github.com/OttoWinter/esphomelib/pull/111) - by [@nunofgs](https://github.com/nunofgs) - -- esphomelib: Add ESP8266 library dependency to Arduino IDE instructions [#99](https://github.com/OttoWinter/esphomelib/pull/99) - by [@per1234](https://github.com/per1234) - -- esphomelib: Fixing I2C readings [#98](https://github.com/OttoWinter/esphomelib/pull/98) - by [@exxamalte](https://github.com/exxamalte) - -- esphomedocs: Note added about resetting the ESP after serial upload before OTA upload - [#14](https://github.com/OttoWinter/esphomedocs/pull/14) by [@exxamalte](https://github.com/exxamalte) - -- esphomedocs: Add cookbook for dual relay cover [#10](https://github.com/OttoWinter/esphomedocs/pull/10) - by [@aequitas](https://github.com/aequitas) - -And in some more personal news, you might have noticed that I was not very active in online communications (github, discord, ...) -and that's partly been due to me concentrating on other stuff (university applications, work and -[this year's international olympiad of informatics](http://blog.ocg.at/2018/09/dritter-blog-von-der-ioi-in-tsukuba-japan/)). -But admittedly I must say being constantly active online is just very exhausting. As the next few weeks (or even months) -will leave me with little time to due to the start of my studies, I plan on primarily focusing on GitHub communications. -Plus I want to put an extra focus on reviewing PRs so that code submitters don't have to wait for weeks. - -## Other notable changes - -- Fixed certain occasions where esphomeyaml could run into recursive dependencies -- Fixed i2c scans not showing up via MQTT -- Improved build times by about 60%. Now, the build time should depend on the amount of components you're using, - not the total esphomelib code base size. - -- Fixed ESP32 Touch setup mode -- Fixed template binary sensors -- Added the option to specify `never` for `update_interval` to never -- Added `deep_sleep.prevent` and `deep_sleep.enter` actions -- Fixed ESP32BLETracker surpassing the maximum code size -- Fixed ESP32BLETracker/Beacon throwing an exception when a warning occurs. -- Fixed FastLED effects not taking into account the light brightness -- Fixed compatibility with Arduino core versions below 2.0.4 -- Added `output.turn_on`, `output.turn_off` and `output.set_level` actions. -- Fixed the remote transmitter/receiver using the heap inefficiently on the ESP8266 (was causing reboots) -- Fixed reliability with reading data from BME280s -- Fixed gas resistance readings from BME680s -- Fixed HTU21D readings only working in very verbose mode -- Sometimes the ESP would create a WiFi hotspot even though it was not configured to do so. That should be fixed now. -- You can now also have conditional actions. See [`if` Action](/automations/actions#if_action). -- The esphomeyaml dashboard and Hass.io add-on now can be configured with a password. -- Fixed YAML anchors not working (you can now prefix keys with `.` to make esphomeyaml ignore them) -- Made Dallas and DHT temperature sensor a bit more reliable by making the code a bit more efficient and thus resolving some timing issues. -- A `heartbeat` filter has been added to [binary sensors](/components/binary_sensor#binary_sensor-filters). -- The [`on_loop`](/components/esphome#esphome-on_loop) trigger has been added. -- esphomeyaml now know about more ESP8266/ESP32 boards, so now you can use the board-specific pin - names with even more board types. - -- The mqtt client has a new option `shutdown_message` which will be sent when the board shuts down safely. - -- In actions, instead of - -```yaml - on_...: - then: - - switch.turn_on: - id: my_switch -``` - - You can now write: - -```yaml - on_...: - then: - - switch.turn_on: my_switch -``` - - Or even shorter: - -```yaml - on_...: - - switch.turn_on: my_switch -``` - -## Breaking Changes - -- The {{< docref "/components/esphome" "core configuration" >}} has been reworked a bit to a) - make using different arduino framework version easier and b) make editing your local esphomelib - copy easier. - -- Light Effects now need to be manually declared in the config and will no longer show up automatically. Please see [Light Effects](/components/light#light-effects) -- MAX6675 has been migrated to use the new SPI bus (and fixed!). Please see the docs for how to use it now. - -## Changes in 1.8.1 - -- esphomeyaml: Limit upload speed to 115200 [#122](https://github.com/OttoWinter/esphomeyaml/pull/122) -- esphomeyaml: Fix docker installs using old platformio version [#125](https://github.com/OttoWinter/esphomeyaml/pull/125) -- esphomedocs: Waveshare E-Paper: 1.54in display works [#22](https://github.com/OttoWinter/esphomedocs/pull/22) by [@fabaff](https://github.com/fabaff) - -## Changes in 1.8.2 - -- esphomedocs: Update custom sensor docs [#25](https://github.com/OttoWinter/esphomedocs/pull/25) -- esphomedocs: Fix typo in warning message [#18](https://github.com/OttoWinter/esphomedocs/pull/18) by [@janpieper](https://github.com/janpieper) -- esphomedocs: Add alternative SPI pin names [#24](https://github.com/OttoWinter/esphomedocs/pull/24) -- esphomelib: Add toggle payload to MQTT switch component [#152](https://github.com/OttoWinter/esphomelib/pull/152) -- esphomelib: Update custom sensor example [#154](https://github.com/OttoWinter/esphomelib/pull/154) -- esphomelib: Optimize MQTT client memory consumption a bit [#155](https://github.com/OttoWinter/esphomelib/pull/155) -- esphomelib: Fix binary sensor initial value reporting [#156](https://github.com/OttoWinter/esphomelib/pull/156) -- esphomeyaml: Fix binary sensor heartbeat not working [#130](https://github.com/OttoWinter/esphomeyaml/pull/130) -- esphomeyaml: Fix MQTT discovery enabled when discovery_retain in config [#131](https://github.com/OttoWinter/esphomeyaml/pull/131) -- esphomelib: Fix binary sensor heartbeat filter [#157](https://github.com/OttoWinter/esphomelib/pull/157) -- esphomelib: Fix SSD1306 reset order for i2c [#159](https://github.com/OttoWinter/esphomelib/pull/159) -- esphomeyaml: Fix SSD1306 lambda [#132](https://github.com/OttoWinter/esphomeyaml/pull/132) -- esphomeyaml: Enable Travis Tests [#133](https://github.com/OttoWinter/esphomeyaml/pull/133) -- esphomedocs: Fix typo in display docs [#26](https://github.com/OttoWinter/esphomedocs/pull/26) by [@jblb](https://github.com/jblb) -- esphomeyaml: Auto-Update esphomelib dev version [#134](https://github.com/OttoWinter/esphomeyaml/pull/134) -- esphomeyaml: Add SSD1306 64x48 display [#136](https://github.com/OttoWinter/esphomeyaml/pull/136) -- esphomedocs: Typo in display docs [#28](https://github.com/OttoWinter/esphomedocs/pull/28) by [@yuanl](https://github.com/yuanl) -- esphomedocs: Typo fix. [#33](https://github.com/OttoWinter/esphomedocs/pull/33) by [@corbanmailloux](https://github.com/corbanmailloux) -- esphomelib: Fix typo "noting" [#172](https://github.com/OttoWinter/esphomelib/pull/172) by [@TheJulianJES](https://github.com/TheJulianJES) -- esphomedocs: Added docker local USB port mapping [#31](https://github.com/OttoWinter/esphomedocs/pull/31) - by [@ladefoged81](https://github.com/ladefoged81) - -- esphomedocs: Fixed typo [#30](https://github.com/OttoWinter/esphomedocs/pull/30) - by [@ladefoged81](https://github.com/ladefoged81) - -- esphomedocs: Add missing (required) name to example. [#29](https://github.com/OttoWinter/esphomedocs/pull/29) - by [@corbanmailloux](https://github.com/corbanmailloux) - -- esphomedocs: Add ESP32 BLE workaround docs [#34](https://github.com/OttoWinter/esphomedocs/pull/34) -- esphomelib: Apply effect after changing colors [#169](https://github.com/OttoWinter/esphomelib/pull/169) - by [@TheJulianJES](https://github.com/TheJulianJES) - -- esphomelib: Add 64x48 SSD1306 Display [#161](https://github.com/OttoWinter/esphomelib/pull/161) -- esphomedocs: Fix output link [#35](https://github.com/OttoWinter/esphomedocs/pull/35) -- esphomedocs: Fix pulse counter API typo [#36](https://github.com/OttoWinter/esphomedocs/pull/36) -- esphomedocs: Fix display docs format typo [#37](https://github.com/OttoWinter/esphomedocs/pull/37) -- esphomeyaml: Fix serial monitor opening when logger disabled [#138](https://github.com/OttoWinter/esphomeyaml/pull/138) -- esphomeyaml: Add clean MQTT button to dashboard [#139](https://github.com/OttoWinter/esphomeyaml/pull/139) -- esphomeyaml: Fix using unicode in lambdas [#141](https://github.com/OttoWinter/esphomeyaml/pull/141) -- esphomeyaml: Bump platformio-espressif32 to 1.4.0 [#142](https://github.com/OttoWinter/esphomeyaml/pull/142) -- esphomeyaml: Docker default to starting dashboard [#143](https://github.com/OttoWinter/esphomeyaml/pull/143) -- esphomedocs: Improve WiFi&Manual IP docs [#38](https://github.com/OttoWinter/esphomedocs/pull/38) -- esphomedocs: Fix PN532 update_interval typo [#39](https://github.com/OttoWinter/esphomedocs/pull/39) -- esphomedocs: Fix Sonoff S20/4CH example configurations [#40](https://github.com/OttoWinter/esphomedocs/pull/40) -- esphomelib: Split FastLED header from source [#175](https://github.com/OttoWinter/esphomelib/pull/175) -- esphomelib: Fix WiFi AP-only mode [#177](https://github.com/OttoWinter/esphomelib/pull/177) -- esphomelib: Fix RC Switch Transmitters [#178](https://github.com/OttoWinter/esphomelib/pull/178) -- esphomelib: Use dynamic JSON buffer [#179](https://github.com/OttoWinter/esphomelib/pull/179) -- esphomelib: Web Server Print incoming requests [#180](https://github.com/OttoWinter/esphomelib/pull/180) -- esphomelib: Add option to have different log level over MQTT [#176](https://github.com/OttoWinter/esphomelib/pull/176) -- esphomelib: Fix MQTT login with anonymous credentials [#182](https://github.com/OttoWinter/esphomelib/pull/182) -- esphomelib: WiFi: Add power save mode option [#181](https://github.com/OttoWinter/esphomelib/pull/181) -- esphomeyaml: Fix component loader value error [#149](https://github.com/OttoWinter/esphomeyaml/pull/149) -- esphomelib: Fix VectorJsonBuffer for ESP8266 (unaligned address) [#183](https://github.com/OttoWinter/esphomelib/pull/183) -- esphomedocs: WiFi: Add power save mode option [#41](https://github.com/OttoWinter/esphomedocs/pull/41) -- esphomedocs: Add SSD1306 64x48 Display [#27](https://github.com/OttoWinter/esphomedocs/pull/27) -- esphomeyaml: WiFi: Add power save mode option [#150](https://github.com/OttoWinter/esphomeyaml/pull/150) - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/changelog/v1.9.0.md b/content/changelog/v1.9.0.md deleted file mode 100644 index c19a82613e..0000000000 --- a/content/changelog/v1.9.0.md +++ /dev/null @@ -1,326 +0,0 @@ ---- -description: "Changelog for esphomelib version 1.9.0." -title: "Changelog - Version 1.9.0" -params: - seo: - description: Changelog for esphomelib version 1.9.0. - image: /_static/changelog-1.9.0.png ---- - - -{{< imgtable >}} -"Beta Releases","guides/faq.html#how-do-i-update-to-the-latest-beta-release","new-box.svg","dark-invert" -"Text Sensors","components/text_sensor/index","folder-open.svg","dark-invert" -"MQTT Subscribe","components/sensor/mqtt_subscribe","mqtt.png","" -"Stepper","components/stepper/index","stepper.svg","" -"CSE7766","components/sensor/cse7766","cse7766.svg","" -"PMSX003","components/sensor/pmsx003","pmsx003.svg","" -"esphomeflasher","guides/faq.html#i-can-t-get-flashing-over-usb-to-work","logo.svg","" -"Total Daily Energy","components/sensor/total_daily_energy","sigma.svg","dark-invert" -"MY9231/MY9291 LED driver","components/output/my9231","my9231.svg","" -{{< /imgtable >}} -It's time for another release of esphomelib: 1.9.0. This release is quite different from the last one, -it doesn't focus that much on new integrations with a "modest" amount of 7 new integrations. No, most of the -development has been focused on improving the core architecture and making the esphomelib ecosystem easier to use. -Because that's my main goal of this project: Providing a great user-experience so that you can focus on building -awesome things with DIY hardware! - -The features I'm particularly excited about are: - -* `esphomeflasher` - Experiencing problems flashing esphomelib firmwares using esphomeyaml? - No problem, esphomeflasher is a tool designed to make that super easy. Just let esphomeyaml generate the binary and flash - from your PC. - -* {{< docref "/components/ota/index" "Over-the-Air Updates" >}} have been completely re-written to make them a lot more stable. -* A lot of work has been put in to provide more context in YAML validation errors. Sometimes, esphomeyaml will even - try to give you suggestions for how to fix a validation error! - -* A new release cycle: esphomeyaml now also has a [beta release channel](/guides/faq#faq-beta) kind of like Home Assistant. This helps to - iron out the most important bugs before each stable release - -* And of course, lots of stability improvements and bug fixes :) - -Thank you very much to everybody who contributed to this release with new code or by -[reporting bugs](/guides/faq#faq-bug_report)! - -## New Components - -* There's a new base component called {{< docref "/components/text_sensor/index" "text sensors" >}} for using - text-based inputs, not just numbers like the generic {{< docref "/components/sensor/index" "sensors" >}} did - ({{< pr number="166" repo="esphome" >}}, {{< pr number="52" repo="esphome-docs" >}}) - -* The new MQTT Subscribe Sensors allow you to get external data into esphomelib's ecosystem via MQTT - ({{< pr number="193" repo="esphome-core" >}}, {{< pr number="175" repo="esphome" >}}, {{< pr number="50" repo="esphome-docs" >}}) - -* Added {{< docref "/components/sensor/cse7766" "CSE7766 Power Sensor" >}} to support power measurements - on the Sonoff Pow R2 ({{< pr number="277" repo="esphome-core" >}}, {{< pr number="190" repo="esphome" >}}, {{< pr number="59" repo="esphome-docs" >}}) - -* Thanks to {{< ghuser name="puuu" >}}, the LED driver in the Sonoff B1 (MY9231) is now supported! - ({{< pr number="266" repo="esphome-core" >}}, {{< pr number="227" repo="esphome" >}}, {{< pr number="80" repo="esphome-docs" >}}) - -* Added the {{< docref "/components/sensor/pmsx003" "PMSX003 Particulate Matter Sensor" >}} - ({{< pr number="229" repo="esphome-core" >}}, {{< pr number="192" repo="esphome" >}}, {{< pr number="58" repo="esphome-docs" >}}) - -* Added support for {{< docref "/components/stepper/index" "A4988 Stepper Motors" >}} ({{< pr number="239" repo="esphome-core" >}}, - {{< pr number="206" repo="esphome" >}}, {{< pr number="68" repo="esphome-docs" >}}) - -* Added {{< docref "/components/sensor/total_daily_energy" "total daily energy sensor" >}} to accumulate the total - power usage over one day ({{< pr number="256" repo="esphome-core" >}}, {{< pr number="220" repo="esphome" >}}) - -## New Features - -* Compiling for ESP32s is now possible on RPis 🎉 - -* esphomelib now has a new tool: [esphomeflasher](https://github.com/esphome/esphome-flasher) to simplify - flashing on Windows/MacOS machines **without having to install esphomeyaml**. So if esphomeyaml for some reason - can't find your USB port, you now can use the esphomeflasher app. See `esphomeflasher`. - -* ESP8266s now save the states of lights/switches/... internally and restores them on boot. - Additionally, esphomelib can now operate in fully offline mode if your WiFi network goes down - or the MQTT broker is unreachable, see [Do Automations Work Without a Network Connection](/automations/actions#automation-networkless) - ({{< pr number="258" repo="esphome-core" >}}, {{< pr number="267" repo="esphome-core" >}}, {{< pr number="229" repo="esphome" >}}) - -* The {{< docref "/components/ota/index" "Over-the-Air Update" >}} process was quite buggy sometimes and the Arduino-library - esphomelib used was doing some weird stuff. The OTA-process has now been completely re-written to be more stable - ({{< pr number="204" repo="esphome-core" >}}, {{< pr number="177" repo="esphome" >}}). - -* Add support for the Home Assistant device registry. If you're using [Home Assistant 0.81.0](https://www.home-assistant.io/blog/2018/10/26/release-81/) - or higher you will see a list of all components for each esphomelib node in the integrations screen - ({{< pr number="233" repo="esphome-core" >}}). - -* The current esphomelib version and compilation time are now printed on each boot - ({{< pr number="189" repo="esphome-core" >}}, {{< pr number="159" repo="esphome" >}}): - -```text - [13:57:33][I][application:092]: You're running esphomelib v1.9.0 compiled on Nov 3 2018, 13:55:11 -``` - -* Stack traces in the USB logs are now automatically decoded to make debugging easier - ({{< pr number="214" repo="esphome" >}}) - -* Added [`on_json_message` Trigger](/components/mqtt#mqtt-on_json_message) and [`mqtt.publish_json` Action](/components/mqtt#mqtt-publish_json_action) to make using JSON for MQTT payloads easier - ({{< pr number="230" repo="esphome-core" >}}, {{< pr number="193" repo="esphome" >}}, {{< pr number="60" repo="esphome-docs" >}}) - -* The remote (IR) components have received support for Samsung's IR protocol - ({{< pr number="176" repo="esphome" >}}, {{< pr number="48" repo="esphome-docs" >}}) - -* Added [`component.update` Action](/automations/actions#component-update_action), [`logger.log` Action](/components/logger#logger-log_action) and [`script.execute` Action](/components/script#script-execute_action) for simplifying - automations - ({{< pr number="232" repo="esphome-core" >}}, {{< pr number="196" repo="esphome" >}}, {{< pr number="198" repo="esphome" >}}, {{< pr number="61" repo="esphome-docs" >}}, {{< pr number="63" repo="esphome-docs" >}}) - -* Added [`on_multi_click`](/components/binary_sensor#binary_sensor-on_multi_click) trigger to distinguish between double, long, and single clicks. - ({{< pr number="262" repo="esphome-core" >}}, {{< pr number="77" repo="esphome-docs" >}}, {{< pr number="226" repo="esphome" >}}) - -* Added an [pn532-on_tag](/components/binary_sensor/pn532#pn532-on_tag) to {{< docref "/components/binary_sensor/pn532" "PN532 NFC Readers" >}} so that automations - can directly use the NFC tag ID - ({{< pr number="194" repo="esphome-core" >}}, {{< pr number="189" repo="esphome" >}}, {{< pr number="57" repo="esphome-docs" >}}) - -* Added a `hass-config` command which generates a Home Assistant configuration for your esphomeyaml nodes. - Useful if you're not using MQTT discovery ({{< pr number="208" repo="esphome" >}}) - -* All documentation pages now have comment systems powered by [disqus](https://disqus.com/) - ({{< pr number="47" repo="esphome-docs" >}}) - -* You now have to option to have a different log level for log messages sent over MQTT ([docs](/components/mqtt#mqtt-message), - {{< pr number="167" repo="esphome" >}}, {{< pr number="51" repo="esphome-docs" >}}) - -* Added a color correction option to {{< docref "/components/light/fastled" "FastLED addressable lights" >}} - ({{< pr number="234" repo="esphome-core" >}}, {{< pr number="200" repo="esphome" >}}, {{< pr number="64" repo="esphome-docs" >}}) - -* Added a `clean` command to esphomeyaml to fix some occasional build errors - ({{< pr number="181" repo="esphome" >}}) - -* Added a `send_first_at` option to sliding window moving average sensor filters - ({{< pr number="240" repo="esphome-core" >}}, {{< pr number="207" repo="esphome" >}}, {{< pr number="69" repo="esphome-docs" >}}) - -* You can now upload OTA firmware files with the {{< docref "/components/web_server" "web server component" >}} - -* Added the ability to define global variables in esphomeyaml: {{< docref "/components/globals" >}}. - -* Added a `frequency` option to the {{< docref "/components/output/esp8266_pwm" >}}. - -## Breaking Changes - -* As part of the rewrite of Over-The-Air updates, the old OTA protocol is incompatible with the new one - - But fear not, esphomeyaml still supports the legacy OTA update process. On your first OTA upload with 1.9.0, you will - see esphomeyaml try with the new OTA method and fail. After that, esphomeyaml will fall back to the old OTA - process and upload correctly ({{< pr number="204" repo="esphome-core" >}}). - -* esphomelib's naming convention has been made more consistent. If you're not using any [lambdas](/automations/templates#config-lambda), - everything will still work. However, if you're using the C++ API, there are a couple of breaking changes: - - For sensors and binary sensors, `id(my_sensor).value` has been deprecated and `id(my_sensor).state` should be used - instead. Additionally, the syntax for toggling lights and switches through C++ has been changed. Please see - the {{< pr number="62" repo="esphome-docs" >}} changeset for more information - ({{< pr number="231" repo="esphome-core" >}}, {{< pr number="62" repo="esphome-docs" >}}, {{< pr number="197" repo="esphome" >}}) - -## Release 1.9.1 - November 19 - -* lib: Fix RDM6300 not reporting cards {{< pr number="278" repo="esphome-core" >}} -* lib: Fix SNTP with less than 3 servers {{< pr number="279" repo="esphome-core" >}} -* lib: Fix update interval log missing time unit {{< pr number="280" repo="esphome-core" >}} -* lib: Fix CSE7766 spamming logs {{< pr number="281" repo="esphome-core" >}} -* lib: Fix outdated links {{< pr number="282" repo="esphome-core" >}} -* yaml: Fix SNTP servers option {{< pr number="237" repo="esphome" >}} - -## Release 1.9.2 - November 25 - -* lib: Fix crashing when logger not being used {{< pr number="285" repo="esphome-core" >}} -* lib: Fix template cover spamming logs {{< pr number="287" repo="esphome-core" >}} -* lib: Improve ESP32 BLE tracker stability {{< pr number="289" repo="esphome-core" >}} -* lib: Fix sensor filters using C++ undefined behavior {{< pr number="293" repo="esphome-core" >}} - -## Release 1.9.3 - December 1 - -* docs: Fix Sonoff Basic pinouts {{< pr number="88" repo="esphome-docs" >}} by {{< ghuser name="sherbang" >}} -* docs: Update cwww.rst {{< pr number="85" repo="esphome-docs" >}} by {{< ghuser name="Melkor82" >}} -* lib: Fix PMSX003 {{< pr number="300" repo="esphome-core" >}} -* lib: Fix issue with filters introduced in 1.9.2 {{< pr number="296" repo="esphome-core" >}} -* lib: Fix BMP085 pressure value {{< pr number="292" repo="esphome-core" >}} -* yaml: CSE7766 update interval {{< pr number="250" repo="esphome" >}} -* docs: CSE7766 Update Interval {{< pr number="91" repo="esphome-docs" >}} - -## All changes - -* docs: Clarify ESP32 BLE Tracker comment {{< pr number="42" repo="esphome-docs" >}} -* yaml: Add a link to Home Assistant in README {{< pr number="152" repo="esphome" >}} by {{< ghuser name="jonnyair" >}} -* lib: Add a link to Home Assistant in README.md {{< pr number="184" repo="esphome-core" >}} by {{< ghuser name="jonnyair" >}} -* docs: Fix time docs 12-hour clock strftime format {{< pr number="43" repo="esphome-docs" >}} -* lib: Fix ESP32 BLE Presence detection always on {{< pr number="185" repo="esphome-core" >}} -* lib: Fix LCD display include {{< pr number="186" repo="esphome-core" >}} -* lib: Fix template switch spamming output {{< pr number="187" repo="esphome-core" >}} -* lib: Fix using HTU21D for SI7021 {{< pr number="188" repo="esphome-core" >}} -* lib: Fix components sending invalid state on startup if integration not ready yet {{< pr number="195" repo="esphome-core" >}} -* lib: Log esphomelib version and compilation time on boot {{< pr number="189" repo="esphome-core" >}} (new-feature) -* yaml: Log esphomelib version and compilation time on boot {{< pr number="159" repo="esphome" >}} (new-feature) -* yaml: Fix raw remote receiver {{< pr number="158" repo="esphome" >}} -* lib: Add Code of Conduct (Contributor Covenant) {{< pr number="196" repo="esphome-core" >}} -* lib: Create CONTRIBUTING.md {{< pr number="197" repo="esphome-core" >}} -* lib: Create issue templates {{< pr number="198" repo="esphome-core" >}} -* lib: Create pull request template {{< pr number="199" repo="esphome-core" >}} -* yaml: Create Pull Request Template {{< pr number="172" repo="esphome" >}} -* yaml: Create CONTRIBUTING.md {{< pr number="169" repo="esphome" >}} -* yaml: Add Code of Conduct (Contributor Covenant) {{< pr number="168" repo="esphome" >}} -* yaml: Create issue templates {{< pr number="171" repo="esphome" >}} -* docs: Add Code of Conduct (Contributor Covenant) {{< pr number="44" repo="esphome-docs" >}} -* docs: Create Pull Request Template {{< pr number="45" repo="esphome-docs" >}} -* yaml: Fix readme broken link {{< pr number="174" repo="esphome" >}} -* lib: Fix pulse counter counting inverted on ESP8266 {{< pr number="200" repo="esphome-core" >}} -* yaml: Add use_build_flags removal notice {{< pr number="173" repo="esphome" >}} -* docs: Highlight update_interval gotchas {{< pr number="46" repo="esphome-docs" >}} -* docs: Add Disqus and cleanup {{< pr number="47" repo="esphome-docs" >}} (new-feature) -* lib: Fix PN532 not logging discovered tags {{< pr number="202" repo="esphome-core" >}} -* yaml: Add Samsung IR protocol {{< pr number="176" repo="esphome" >}} by {{< ghuser name="escoand" >}} (new-feature) -* docs: add samsung ir protocol {{< pr number="48" repo="esphome-docs" >}} by {{< ghuser name="escoand" >}} (new-feature) -* lib: Bump FastLED to 3.2.0 {{< pr number="203" repo="esphome-core" >}} -* yaml: Fix Wifi power_save_mode option {{< pr number="178" repo="esphome" >}} -* lib: Fix application sort order {{< pr number="211" repo="esphome-core" >}} -* docs: Improve pulse counter docs {{< pr number="49" repo="esphome-docs" >}} -* lib: Fix ESP32 BLE Controller Init {{< pr number="213" repo="esphome-core" >}} -* lib: Fix Web Server Creating Infinite Print Loop {{< pr number="214" repo="esphome-core" >}} -* lib: Add TOGGLE payload to more components {{< pr number="212" repo="esphome-core" >}} (new-feature) -* lib: ESP8266 Pulse Counter Improve Timing {{< pr number="205" repo="esphome-core" >}} -* lib: Add MQTT Subscribe Sensor {{< pr number="193" repo="esphome-core" >}} (new-feature) -* docs: Add MQTT Subscribe sensor {{< pr number="50" repo="esphome-docs" >}} (new-feature) -* yaml: Add MQTT Subscribe sensor {{< pr number="175" repo="esphome" >}} (new-feature) -* yaml: MQTT different log level {{< pr number="167" repo="esphome" >}} (new-feature) -* docs: Add option to have different log level over MQTT {{< pr number="51" repo="esphome-docs" >}} (new-feature) -* yaml: Add clean build files command and auto-clean on version change {{< pr number="181" repo="esphome" >}} (new-feature) -* lib: Add power on value to switch {{< pr number="207" repo="esphome-core" >}} (new-feature) -* lib: Rework OTA to be more stable {{< pr number="204" repo="esphome-core" >}} (breaking-change) (new-feature) -* yaml: Rework OTA to be more stable {{< pr number="177" repo="esphome" >}} (new-feature) -* lib: Fix WiFi not working when GPIO 0 connected {{< pr number="215" repo="esphome-core" >}} -* lib: Fix MiFlora illuminance reading {{< pr number="220" repo="esphome-core" >}} -* lib: Remove invalid file headers {{< pr number="219" repo="esphome-core" >}} -* yaml: Fix config dump time output {{< pr number="184" repo="esphome" >}} -* lib: GPIO Switch Rewrite {{< pr number="217" repo="esphome-core" >}} -* docs: Add power on value to GPIO Switch {{< pr number="55" repo="esphome-docs" >}} (new-feature) -* yaml: Decentralize Automation Generator Code {{< pr number="182" repo="esphome" >}} -* lib: Add PN532 On Tag Trigger {{< pr number="226" repo="esphome-core" >}} (new-feature) -* lib: Add text sensors {{< pr number="194" repo="esphome-core" >}} (new-feature) -* docs: Add Text sensors {{< pr number="52" repo="esphome-docs" >}} (new-feature) -* lib: Fix PCF8574 assert. {{< pr number="223" repo="esphome-core" >}} by {{< ghuser name="lobradov" >}} -* lib: Unify Xiaomi MiJia&MiFlora Implementations {{< pr number="225" repo="esphome-core" >}} -* docs: Unify xiaomi implementations {{< pr number="56" repo="esphome-docs" >}} -* yaml: Unify Xiaomi implementations {{< pr number="188" repo="esphome" >}} -* lib: Add CSE7766 for Sonoff Pow R2 {{< pr number="227" repo="esphome-core" >}} (new-feature) -* docs: Add CSE7766 for Sonoff Pow R2 {{< pr number="59" repo="esphome-docs" >}} (new-feature) -* docs: Add PN532 On Tag Trigger {{< pr number="57" repo="esphome-docs" >}} (new-feature) -* yaml: Add CSE776 for Sonoff Pow R2 {{< pr number="190" repo="esphome" >}} (new-feature) -* yaml: Add Text Sensors {{< pr number="166" repo="esphome" >}} (new-feature) -* yaml: Add PN532 On Tag Trigger {{< pr number="189" repo="esphome" >}} (new-feature) -* lib: Add MQTT publish JSON action and subscribe JSON trigger {{< pr number="230" repo="esphome-core" >}} (new-feature) -* yaml: Add MQTT publish JSON action and subscribe JSON trigger {{< pr number="193" repo="esphome" >}} (new-feature) -* docs: Add MQTT publish JSON action and subscribe JSON trigger {{< pr number="60" repo="esphome-docs" >}} (new-feature) -* lib: Add PMSX003 Particulate Matter Sensor {{< pr number="229" repo="esphome-core" >}} (new-feature) -* docs: Add PMSX003 Particulate Matter Sensor {{< pr number="58" repo="esphome-docs" >}} (new-feature) -* lib: Add update component action and scripts {{< pr number="232" repo="esphome-core" >}} (new-feature) -* docs: Add update component action and scripts {{< pr number="61" repo="esphome-docs" >}} (new-feature) -* lib: Implement HASS device registry for MQTT components {{< pr number="233" repo="esphome-core" >}} (new-feature) -* lib: Add FastLED color correction option {{< pr number="234" repo="esphome-core" >}} (new-feature) -* docs: Add FastLED color correction option {{< pr number="64" repo="esphome-docs" >}} (new-feature) -* yaml: Add update component action and scripts {{< pr number="196" repo="esphome" >}} (new-feature) -* yaml: Add PMSX003 Particulate Matter Sensor {{< pr number="192" repo="esphome" >}} (new-feature) -* yaml: Add FastLED color correction option {{< pr number="200" repo="esphome" >}} (new-feature) -* yaml: Fix triggers being interpreted as a sequence of automations {{< pr number="199" repo="esphome" >}} -* yaml: Fix value range trigger :expressionless: {{< pr number="201" repo="esphome" >}} -* lib: Make naming convention consistent {{< pr number="231" repo="esphome-core" >}} (breaking-change) -* docs: Make naming convention consistent {{< pr number="62" repo="esphome-docs" >}} (breaking-change) -* docs: Fix some typos {{< pr number="65" repo="esphome-docs" >}} -* yaml: Improve API naming convention consistency {{< pr number="197" repo="esphome" >}} (breaking-change) -* yaml: Fix some typos {{< pr number="202" repo="esphome" >}} -* docs: Add logger.log action {{< pr number="63" repo="esphome-docs" >}} (new-feature) -* yaml: Add logger.log action {{< pr number="198" repo="esphome" >}} (new-feature) -* docs: Fix template sensor docs {{< pr number="66" repo="esphome-docs" >}} -* docs: Fix text sensor outdated API docs {{< pr number="70" repo="esphome-docs" >}} -* docs: Add Stepper Support {{< pr number="68" repo="esphome-docs" >}} (new-feature) -* lib: Add stepper motor support {{< pr number="239" repo="esphome-core" >}} (new-feature) -* lib: Add send_first_at option to sliding window sensor filter {{< pr number="240" repo="esphome-core" >}} (new-feature) -* docs: Add send_first_at option to sliding window sensor filter {{< pr number="69" repo="esphome-docs" >}} (new-feature) -* lib: Fix display line drawing algorithm {{< pr number="241" repo="esphome-core" >}} -* lib: Fix availability calculation {{< pr number="242" repo="esphome-core" >}} -* yaml: Add Stepper Motor Support {{< pr number="206" repo="esphome" >}} (new-feature) -* yaml: Add send_first_at option to sliding window sensor filter {{< pr number="207" repo="esphome" >}} (new-feature) -* docs: Switch example to Dehumidifier, minor grammar/puncuation {{< pr number="67" repo="esphome-docs" >}} by {{< ghuser name="rorpage" >}} -* docs: Tiny typo fix. {{< pr number="73" repo="esphome-docs" >}} by {{< ghuser name="corbanmailloux" >}} -* yaml: Auto-Decode stacktraces {{< pr number="214" repo="esphome" >}} (new-feature) -* docs: Fix a broken link to setting up a BLE tracker. {{< pr number="72" repo="esphome-docs" >}} by {{< ghuser name="corbanmailloux" >}} -* yaml: Add generate home assistant config command {{< pr number="208" repo="esphome" >}} (new-feature) -* yaml: Update Gitlab Build Script {{< pr number="215" repo="esphome" >}} -* lib: Fix status binary sensor always reporting false internally {{< pr number="257" repo="esphome-core" >}} -* yaml: Fix HLW8012 Voltage Divider option not being added to source {{< pr number="224" repo="esphome" >}} -* lib: Fix HLW8012 Initial Value Reporting {{< pr number="254" repo="esphome-core" >}} -* lib: Clean up Time API {{< pr number="253" repo="esphome-core" >}} -* yaml: Better typing to components {{< pr number="225" repo="esphome" >}} -* lib: Support uploading OTA updates over web server {{< pr number="255" repo="esphome-core" >}} (new-feature) -* lib: Save and Restore states from RTC memory {{< pr number="258" repo="esphome-core" >}} (new-feature) -* docs: Revert add power_on_value to gpio switch {{< pr number="78" repo="esphome-docs" >}} -* lib: Improve default log levels and log sources {{< pr number="264" repo="esphome-core" >}} -* lib: OTA Read back server acknowledgement {{< pr number="263" repo="esphome-core" >}} -* lib: Add Multi Click Trigger to binary sensor {{< pr number="262" repo="esphome-core" >}} (new-feature) -* docs: Add binary sensor on multi click trigger {{< pr number="77" repo="esphome-docs" >}} (new-feature) -* lib: ESP32 BLE Release Bluetooth Classic Memory {{< pr number="261" repo="esphome-core" >}} -* yaml: Add restore state option to template switch {{< pr number="222" repo="esphome" >}} -* docs: Advertise esphomeflasher {{< pr number="76" repo="esphome-docs" >}} (new-feature) -* docs: Replace table generator with custom RST directive {{< pr number="75" repo="esphome-docs" >}} -* yaml: Clean up time API {{< pr number="221" repo="esphome" >}} -* yaml: Revert Add power on value to GPIO switch {{< pr number="223" repo="esphome" >}} -* yaml: Add binary sensor multi click trigger {{< pr number="226" repo="esphome" >}} (new-feature) -* lib: Add Total Daily Energy Sensor {{< pr number="256" repo="esphome-core" >}} (new-feature) -* yaml: Add total daily energy sensor {{< pr number="220" repo="esphome" >}} (new-feature) -* docs: Add total daily energy sensor {{< pr number="79" repo="esphome-docs" >}} -* lib: Introduce new setup phase: "dump config" to allow fully-offline operation {{< pr number="267" repo="esphome-core" >}} -* yaml: Let esphomeyaml know about class inheritance {{< pr number="229" repo="esphome" >}} -* docs: ESP32 deep sleep wake up multiple pins {{< pr number="81" repo="esphome-docs" >}} -* yaml: Deep Sleep Wake Up From Multiple Pins {{< pr number="230" repo="esphome" >}} -* lib: Deep Sleep Multi Wakeup {{< pr number="268" repo="esphome-core" >}} -* lib: MY9231/MY9291 LED driver support {{< pr number="266" repo="esphome-core" >}} by {{< ghuser name="puuu" >}} (new-feature) -* yaml: Add MY9231 support {{< pr number="227" repo="esphome" >}} by {{< ghuser name="puuu" >}} (new-feature) -* docs: MY9231/MY9291 LED driver documentation {{< pr number="80" repo="esphome-docs" >}} by {{< ghuser name="puuu" >}} (new-feature) -* docs: SEO Optimization {{< pr number="82" repo="esphome-docs" >}} - - - -## All Changelogs - -{{< changelogs >}} diff --git a/content/components/_index.md b/content/components/_index.md deleted file mode 100644 index 9fd26c3ecd..0000000000 --- a/content/components/_index.md +++ /dev/null @@ -1,1121 +0,0 @@ ---- -description: "main documentation" -title: "ESPHome Docs" -params: - seo: - description: ESPHome main documentation - image: logo-docs.svg ---- - -{{< html_file file="images/logo-docs.svg" >}} - -This is the top-level ESPHome documentation index. Browse the tables below, use the sidebar menu, or the search -function to find the information you're looking for. - -### Help improve this documentation - -If you find any errors in this site, corrections are welcome. You can submit a *Pull Request* (PR) in the -[GitHub repo](https://github.com/esphome/esphome-docs) with corrections. If you don't know how to create a PR you -can just use the "Edit this page on GitHub" link on the page in question which will take you to the source file -for that page. - -Alternatively, post in the *Documentation* channel in the [Discord](https://discord.gg/KhAMKrd) server. - -## ESPHome Configuration - -ESPHome is configured in YAML files - use these links for basic and advanced -information about ESPHome configuration files. - -{{< imgtable >}} -"YAML Configuration","guides/yaml","description.svg","dark-invert" -"Packages","components/packages","description.svg","dark-invert" -"Substitutions","components/substitutions","description.svg","dark-invert" -"External Components","components/external_components","external_components.svg","dark-invert" -{{< /imgtable >}} -{{< anchor "devices" >}} - -## Supported Microcontrollers - -{{< imgtable >}} -"ESP32","components/esp32","esp32.svg","" -"ESP8266","components/esp8266","esp8266.svg","" -"RP2040","components/rp2040","rp2040.svg","" -"BK72xx","components/libretiny","bk72xx.svg","" -"RTL87xx","components/libretiny","rtl87xx.svg","" -"LN882x","components/libretiny","ln882x.svg","" -"Host","components/host","host.svg","dark-invert" -"NRF52","components/nrf52","nrf52.svg","" -{{< /imgtable >}} - -## Microcontroller Peripherals - -Peripherals which directly support the operation of the microcontroller's processor(s). - -{{< imgtable >}} -"PSRAM","components/psram","psram.svg","" -"Deep Sleep","components/deep_sleep","hotel.svg","dark-invert" -"ESP32-P4 LDO regulator","components/esp_ldo","ldo.svg","dark-invert" -{{< /imgtable >}} - -## ESPHome Automations - -> *"When this happens, I want it to do that..."* - -Automations are how we customize ESPHome devices to respond/behave exactly how you want them to. - -{{< imgtable >}} -"Overview","automations/index","description.svg","dark-invert" -"Actions, Triggers, Conditions","automations/actions","description.svg","dark-invert" -"Templates","automations/templates","description.svg","dark-invert" -{{< /imgtable >}} - -## ESPHome Components - -ESPHome-specific components or components supporting ESPHome device provisioning post-installation. - -{{< imgtable >}} -"Core","components/esphome","cloud-circle.svg","dark-invert" -"Captive Portal","components/captive_portal","wifi-strength-alert-outline.svg","dark-invert" -"Copy","components/copy","content-copy.svg","dark-invert" -"Demo","components/demo","description.svg","dark-invert" -"External Components","components/external_components","external_components.svg","dark-invert" -"Globals","components/globals","description.svg","dark-invert" -"Improv via BLE","components/esp32_improv","improv.svg","dark-invert" -"Improv via Serial","components/improv_serial","improv.svg","dark-invert" -"Interval","components/interval","description.svg","dark-invert" -"JSON","components/json","json.svg","dark-invert" -"Mapping","components/mapping","mapping.svg","dark-invert" -"XXTEA","components/xxtea","xxtea.svg","" -"Script","components/script","description.svg","dark-invert" -"Factory Reset","components/factory_reset","restart-alert.svg","dark-invert" -{{< /imgtable >}} - -## Network Hardware - -{{< imgtable >}} -"WiFi","components/wifi","network-wifi.svg","dark-invert" -"ESP32 Ethernet","components/ethernet","ethernet.svg","dark-invert" -"ESP32 Hosted","components/esp32_hosted","network-wifi.svg","dark-invert" -"OpenThread","components/openthread","openthread.png","" -{{< /imgtable >}} - -## Network Protocols - -{{< imgtable >}} -"Network Core","components/network","server-network.svg","dark-invert" -"Native API","components/api","server-network.svg","dark-invert" -"MQTT","components/mqtt","mqtt.png","" -"ESP-NOW","components/espnow","esp-now.svg","" -"HTTP Request","components/http_request","connection.svg","dark-invert" -"mDNS","components/mdns","radio-tower.svg","dark-invert" -"WireGuard","components/wireguard","wireguard_custom_logo.svg","dark-invert" -"StatsD","components/statsd","connection.svg","dark-invert" -"UDP","components/udp","udp.svg","" -"Packet Transport","components/packet_transport/index","packet_transport.svg","dark-invert" -"Zigbee End Device","components/zigbee","zigbee.svg","" -{{< /imgtable >}} - -## Bluetooth/BLE - -{{< imgtable >}} -"ESP32 BLE Beacon","components/esp32_ble_beacon","bluetooth.svg","dark-invert" -"ESP32 BLE Client","components/ble_client","bluetooth.svg","dark-invert" -"ESP32 BLE Tracker","components/esp32_ble_tracker","bluetooth.svg","dark-invert" -"ESP32 BLE Server","components/esp32_ble_server","bluetooth.svg","dark-invert" -"Bluetooth Proxy","components/bluetooth_proxy","bluetooth.svg","dark-invert" -"Improv via BLE","components/esp32_improv","improv.svg","dark-invert" -"Nordic UART Service (NUS)","components/ble_nus","uart.svg","" -{{< /imgtable >}} - -## Management and Monitoring - -{{< imgtable >}} -"Debug","components/debug","bug-report.svg","dark-invert" -"Logger","components/logger","file-document-box.svg","dark-invert" -"Syslog","components/syslog","file-document-box.svg","dark-invert" -"Prometheus","components/prometheus","prometheus.svg","" -"StatsD","components/statsd","connection.svg","dark-invert" -"Safe Mode","components/safe_mode","restart-alert.svg","dark-invert" -"Web Server","components/web_server","http.svg","" -"ESP32 Camera Web Server","components/esp32_camera_web_server","camera.svg","dark-invert" -{{< /imgtable >}} - -## Update Installation - -Install updates over-the-air (OTA). - -{{< imgtable >}} -"OTA Core","components/ota/index","system-update.svg","dark-invert" -"OTA Updates","components/ota/esphome","system-update.svg","dark-invert" -"OTA Updates via HTTP Request","components/ota/http_request","system-update.svg","dark-invert" -{{< /imgtable >}} - -## Update Management - -Create update entities simplifying management of OTA updates. - -{{< imgtable >}} -"Update Core","components/update/index","system-update.svg","dark-invert" -"Managed Updates","components/update/http_request","system-update.svg","dark-invert" -{{< /imgtable >}} - -## Hardware Peripheral Interfaces/Busses - -{{< imgtable >}} -"1-Wire","components/one_wire/index","one-wire.svg","" -"CAN Bus","components/canbus/index","canbus.svg","" -"I²C Bus","components/i2c","i2c.svg","" -"I²S Audio","components/i2s_audio","i2s_audio.svg","" -"OpenTherm","components/opentherm","opentherm.png","" -"SPI Bus","components/spi","spi.svg","" -"TinyUSB","components/tinyusb","usb.svg","dark-invert" -"UART","components/uart","uart.svg","" -"USB CDC-ACM","components/usb_cdc_acm","usb.svg","dark-invert" -"USB Host","components/usb_host","usb.svg","dark-invert" -"USB UART","components/usb_uart","usb.svg","dark-invert" -{{< /imgtable >}} - -## I/O Expanders/Multiplexers - -{{< imgtable >}} -"CH422G","components/ch422g","ch422g.svg" -"CH423","components/ch423","ch423.png" -"MAX6956 - I²C Bus","components/max6956","max6956.jpg" -"MCP230XX - I²C Bus","components/mcp230xx","mcp230xx.svg" -"MCP23SXX - SPI Bus","components/mcp23Sxx","mcp23sxx.svg" -"PCA6416A","components/pca6416a","pca6416a.svg" -"PCA9554","components/pca9554","pca9554a.jpg" -"PCF8574","components/pcf8574","pcf8574.jpg" -"PI4IOE5V6408","components/pi4ioe5v6408","pca9554a.jpg" -"SN74HC165","components/sn74hc165","sn74hc595.jpg" -"SN74HC595","components/sn74hc595","sn74hc595.jpg" -"SX1509","components/sx1509","sx1509.jpg" -"TCA9548A I²C Multiplexer","components/tca9548a","tca9548a.jpg" -"TCA9555","components/tca9555","tca9555.svg" -"WeiKai SPI/I²C UART/IO Expander","components/weikai","wk2168.jpg" -"XL9535","components/xl9535","xl9535.svg" -{{< /imgtable >}} - -## 1-Wire Bus - -Platforms which specifically support or extend the {{< docref "/components/one_wire" >}}, allowing communication with -1-Wire-based devices. - -{{< imgtable >}} -"DS2484","components/one_wire/ds2484","ds2484.svg" -"GPIO","components/one_wire/gpio","gpio.svg" -{{< /imgtable >}} - -## CAN Bus - -Platforms which specifically support or extend the {{< docref "/components/canbus" >}}, allowing communication with -CAN-based devices. - -{{< imgtable >}} -"ESP32 CAN","components/canbus/esp32_can","esp32.svg" -"MCP2515","components/canbus/mcp2515","mcp2515.svg" -{{< /imgtable >}} - -## Sensor Components - -Sensors are organized into categories; if a given sensor fits into more than one category, it will appear multiple times. - -### Core - -{{< imgtable >}} -"Sensor Core","components/sensor/index","folder-open.svg","dark-invert" -"Template Sensor","components/sensor/template","description.svg","dark-invert" -"Home Assistant","components/sensor/homeassistant","home-assistant.svg","dark-invert" -"MQTT Subscribe","components/sensor/mqtt_subscribe","mqtt.png","" -"Uptime Sensor","components/sensor/uptime","timer.svg","dark-invert" -"WiFi Signal Strength","components/sensor/wifi_signal","network-wifi.svg","dark-invert" -{{< /imgtable >}} - -### Air Quality - -{{< imgtable >}} -"AGS10","components/sensor/ags10","ags10.jpg","Volatile organics","","" -"Air Quality Index","components/sensor/aqi","aqi.svg","AQI from PM sensors","","" -"AirThings BLE","components/sensor/airthings_ble","airthings_logo.png","Radon","CO₂","Volatile organics" -"CCS811","components/sensor/ccs811","ccs811.jpg","eCO₂ & Volatile organics","","" -"CM1106","components/sensor/cm1106","cm1106.png","CO₂","","" -"EE895","components/sensor/ee895","EE895.png","CO₂ & Temperature & Pressure","","" -"ENS160","components/sensor/ens160","ens160.jpg","eCO₂ & Air Quality","","" -"GCJA5","components/sensor/gcja5","gcja5.svg","Particulate","","" -"GP2Y1010AU0F","components/sensor/gp2y1010au0f","gp2y1010au0f.png","Particulate","","" -"Grove Multichannel Gas V2","components/sensor/grove_gas_mc_v2","grove-gas-mc-v2.png","NO₂ & CO & Ethanol & Volatile organics","","" -"HC8","components/sensor/hc8","hc8.png","CO₂","","" -"HM3301","components/sensor/hm3301","hm3301.jpg","Particulate","","" -"iAQ-Core","components/sensor/iaqcore","iaqcore.jpg","eCO₂ & Volatile organics","","" -"MH-Z19","components/sensor/mhz19","mhz19.jpg","CO₂ & Temperature","","" -"MiCS-4514","components/sensor/mics_4514","mics_4514.jpg","NO₂ & CO & H₂ & Ethanol & Methane & Ammonia","","" -"PM1006 Sensor","components/sensor/pm1006","pm1006.jpg","Particulate","","" -"PM2005 Sensor","components/sensor/pm2005","pm2005.png","Particulate","","" -"PMSA003I","components/sensor/pmsa003i","pmsa003i.jpg","Particulate","","" -"PMSX003","components/sensor/pmsx003","pmsx003.svg","Particulate","","" -"RadonEye BLE","components/sensor/radon_eye_ble","radon_eye_logo.png","Radon","","" -"SCD30","components/sensor/scd30","scd30.jpg","CO₂ & Temperature & Humidity","","" -"SCD4X","components/sensor/scd4x","scd4x.jpg","CO₂ & Temperature & Humidity","","" -"SDS011 Sensor","components/sensor/sds011","sds011.jpg","Particulate","","" -"SEN0321","components/sensor/sen0321","sen0321.jpg","Ozone","","" -"SEN5x","components/sensor/sen5x","sen54.jpg","Particulate & Volatile organics & NOx & Temperature & Humidity","","" -"SenseAir","components/sensor/senseair","senseair_s8.jpg","CO₂","","" -"SFA30","components/sensor/sfa30","sfa30.jpg","Formaldehyde","","" -"SGP30","components/sensor/sgp30","sgp30.jpg","eCO₂ & Volatile organics","","" -"SGP4x","components/sensor/sgp4x","sgp40.jpg","Volatile organics & NOx","","" -"SM300D2","components/sensor/sm300d2","sm300d2.jpg","Particulate & Volatile organics & eCO₂ & equivalent Formaldehyde & Temperature & Humidity","","" -"SPS30","components/sensor/sps30","sps30.jpg","Particulate","","" -"T6613/15","components/sensor/t6615","t6615.jpg","CO₂","","" -"ZyAura","components/sensor/zyaura","zgm053.jpg","CO₂ & Temperature & Humidity","","" -{{< /imgtable >}} - -### Analogue - -{{< imgtable >}} -"ADC","components/sensor/adc","flash.svg","ESP internal","dark-invert" -"ADC128S102","components/sensor/adc128s102","adc128s102.png","8-channel ADC","" -"ADS1115","components/sensor/ads1115","ads1115.jpg","4-channel ADC","" -"ADS1118","components/sensor/ads1118","ads1118.jpg","4-channel ADC","" -"CD74HC4067","components/sensor/cd74hc4067","cd74hc4067.jpg","16-channel analog multiplexer","" -"MCP3008","components/sensor/mcp3008","mcp3008.jpg","8-channel ADC","" -"MCP3204 / MCP3208","components/sensor/mcp3204","mcp3204.jpg","4-channel ADC","" -"MCP3221","components/sensor/mcp3221","mcp3221.png","ADC","" -"NAU7802","components/sensor/nau7802","nau7802.jpg","ADC","" -"Resistance","components/sensor/resistance","omega.svg","dark-invert","" -{{< /imgtable >}} - -### Bluetooth Low Energy (BLE) - -{{< imgtable >}} -"Alpha3","components/sensor/alpha3","alpha3.jpg","" -"AM43","components/sensor/am43","am43.jpg","Lux & Battery level" -"BLE Client Sensor","components/sensor/ble_client","bluetooth.svg","dark-invert" -"BLE RSSI","components/sensor/ble_rssi","bluetooth.svg","dark-invert" -"HHCCJCY10 (MiFlora Pink)","components/sensor/xiaomi_hhccjcy10","xiaomi_hhccjcy10.jpg","Soil moisture & Temperature & Light" -"Inkbird IBS-TH1 Mini","components/sensor/inkbird_ibsth1_mini","inkbird_isbth1_mini.jpg","Temperature & Humidity" -"Mopeka Pro Check LP","components/sensor/mopeka_pro_check","mopeka_pro_check.jpg","Tank level" -"Mopeka Standard Check LP","components/sensor/mopeka_std_check","mopeka_std_check.jpg","Tank level" -"RuuviTag","components/sensor/ruuvitag","ruuvitag.jpg","Temperature & Humidity & Accelerometer" -"ThermoPro BLE","components/sensor/thermopro_ble","thermopro_tp357.jpg","Temperature & Humidity" -"Xiaomi BLE","components/sensor/xiaomi_ble","xiaomi_mijia_logo.jpg","Various" -{{< /imgtable >}} - -### Digital Signals - -{{< imgtable >}} -"Duty Cycle","components/sensor/duty_cycle","percent.svg","dark-invert" -"Pulse Counter","components/sensor/pulse_counter","pulse.svg","dark-invert" -"Pulse Meter","components/sensor/pulse_meter","pulse.svg","dark-invert" -"Pulse Width","components/sensor/pulse_width","pulse.svg","dark-invert" -{{< /imgtable >}} - -### Distance - -{{< imgtable >}} -"A01NYUB","components/sensor/a01nyub","a01nyub.jpg","Acoustic distance" -"A02YYUW","components/sensor/a02yyuw","a02yyuw.jpg","Acoustic distance" -"GL-R01 Time of Flight Sensor","components/sensor/gl_r01","gl_r01.jpg","IR optical distance" -"HRXL MaxSonar WR","components/sensor/hrxl_maxsonar_wr","hrxl_maxsonar_wr.jpg","Acoustic distance" -"JSN-SR04T","components/sensor/jsn_sr04t","jsn-sr04t-v3.jpg","Acoustic distance" -"TOF10120","components/sensor/tof10120","tof10120.jpg","IR optical distance" -"Ultrasonic Sensor","components/sensor/ultrasonic","ultrasonic.jpg","Acoustic distance" -"VL53L0x","components/sensor/vl53l0x","vl53l0x.jpg","IR optical distance" -"Zio Ultrasonic Sensor","components/sensor/zio_ultrasonic","zio_ultrasonic.jpg","Acoustic distance" -{{< /imgtable >}} - -### Electricity - -{{< imgtable >}} -"ADE7880","components/sensor/ade7880","ade7880.svg","Voltage & Current & Power" -"ADE7953","components/sensor/ade7953","ade7953.svg","Power" -"ATM90E26","components/sensor/atm90e26","atm90e26.jpg","Voltage & Current & Power" -"ATM90E32","components/sensor/atm90e32","atm90e32.jpg","Voltage & Current & Power" -"BL0906","components/sensor/bl0906","bl0906.png","Voltage & Current & Power & Energy" -"BL0939","components/sensor/bl0939","bl0939.png","Voltage & Current & Power & Energy" -"BL0940","components/sensor/bl0940","bl0940.png","Voltage & Current & Power & Energy" -"BL0942","components/sensor/bl0942","bl0942.png","Voltage & Current & Power" -"CS5460A","components/sensor/cs5460a","cs5460a.png","Voltage & Current & Power" -"CSE7761","components/sensor/cse7761","cse7761.svg","Voltage & Current & Power" -"CSE7766","components/sensor/cse7766","cse7766.svg","Voltage & Current & Power" -"CT Clamp","components/sensor/ct_clamp","ct_clamp.jpg","AC Current" -"Daly BMS","components/sensor/daly_bms","daly_bms.jpg","Voltage & Current & Power" -"DLMS Meter","components/sensor/dlms_meter","dlms_meter.jpg","Electrical counter" -"DSMR","components/sensor/dsmr","dsmr.svg","Electrical counter" -"HLW8012","components/sensor/hlw8012","hlw8012.svg","Voltage & Current & Power" -"HLW8032","components/sensor/hlw8032","hlw8032.png","Voltage & Current & Power" -"INA219","components/sensor/ina219","ina219.jpg","DC Current" -"INA226","components/sensor/ina226","ina226.jpg","DC Current & Power" -"INA228","components/sensor/ina2xx","ina228.jpg","DC Voltage & Current & Power & Charge" -"INA229","components/sensor/ina2xx","ina2xx.jpg","DC Voltage & Current & Power & Charge" -"INA237","components/sensor/ina2xx","ina2xx.jpg","DC Voltage & Current & Power" -"INA238","components/sensor/ina2xx","ina2xx.jpg","DC Voltage & Current & Power" -"INA239","components/sensor/ina2xx","ina2xx.jpg","DC Voltage & Current & Power" -"INA260","components/sensor/ina260","ina260.jpg","DC Current & Power" -"INA3221","components/sensor/ina3221","ina3221.jpg","3-Ch DC current" -"Kamstrup KMP","components/sensor/kamstrup_kmp","kamstrup_kmp.jpg","District Heating Meter" -"MAX9611","components/sensor/max9611","max9611.jpg","Voltage & Current & Power & Temperature" -"PZEM AC","components/sensor/pzemac","pzem-ac.jpg","Voltage & Current & Power" -"PZEM DC","components/sensor/pzemdc","pzem-dc.jpg","Voltage & Current & Power" -"PZEM004T","components/sensor/pzem004t","pzem004t.svg","Voltage & Current & Power" -"SDM Meter","components/sensor/sdm_meter","sdm220m.jpg","Modbus energy monitor" -"Selec Meter","components/sensor/selec_meter","selec_meter_em2m.jpg","Modbus energy monitor" -"Teleinfo","components/sensor/teleinfo","teleinfo.jpg","Electrical counter" -"Total Daily Energy","components/sensor/total_daily_energy","sigma.svg","dark-invert" -{{< /imgtable >}} - -### Environmental - -{{< imgtable >}} -"Absolute Humidity","components/sensor/absolute_humidity","water-drop.svg","dark-invert","" -"AHT10 / AHT20 / AHT21 / DHT20","components/sensor/aht10","aht10.jpg","Temperature & Humidity","" -"AirThings BLE","components/sensor/airthings_ble","airthings_logo.png","Temperature & Humidity & Pressure","" -"AM2315C","components/sensor/am2315c","am2315c.jpg","Temperature & Humidity","" -"AM2320","components/sensor/am2320","am2320.jpg","Temperature & Humidity","" -"b-parasite","components/sensor/b_parasite","b_parasite.jpg","Moisture & Temperature & Humidity & Light","" -"BH1900NUX","components/sensor/bh1900nux","bh1900nux-evk-001.png","Temperature","" -"BME280","components/sensor/bme280","bme280.jpg","Temperature & Humidity & Pressure","" -"BME68x via BSEC2","components/sensor/bme68x_bsec2","bme680.jpg","Temperature & Humidity & Pressure & Gas","" -"BME680 via BSEC","components/sensor/bme680_bsec","bme680.jpg","Temperature & Humidity & Pressure & Gas","" -"BME680","components/sensor/bme680","bme680.jpg","Temperature & Humidity & Pressure & Gas","" -"BMP085","components/sensor/bmp085","bmp180.jpg","Temperature & Pressure","" -"BMP280","components/sensor/bmp280","bmp280.jpg","Temperature & Pressure","" -"BMP388 and BMP390","components/sensor/bmp3xx","bmp388.jpg","Temperature & Pressure","" -"BMP581","components/sensor/bmp581","bmp581.jpg","Temperature & Pressure","" -"Dallas DS18B20","components/sensor/dallas_temp","dallas.jpg","Temperature","" -"DHT","components/sensor/dht","dht.jpg","Temperature & Humidity","" -"DHT12","components/sensor/dht12","dht12.jpg","Temperature & Humidity","" -"DPS310","components/sensor/dps310","dps310.jpg","Temperature & Pressure","" -"EMC2101","components/emc2101","emc2101.jpg","Temperature","" -"ENS160","components/sensor/ens160","ens160.jpg","eCO₂ & Air Quality","" -"ENS210","components/sensor/ens210","ens210.jpg","Temperature & Humidity","" -"HC8","components/sensor/hc8","hc8.png","CO₂","" -"HDC1080","components/sensor/hdc1080","hdc1080.jpg","Temperature & Humidity","" -"HDC2010","components/sensor/hdc2010","hdc2010.png","Temperature & Humidity","" -"HHCCJCY10 (MiFlora Pink)","components/sensor/xiaomi_hhccjcy10","xiaomi_hhccjcy10.jpg","Soil moisture & Temperature & Light","" -"Honeywell ABP","components/sensor/honeywellabp","honeywellabp.jpg","Pressure & Temperature","" -"Honeywell ABP2 I2C","components/sensor/honeywellabp2_i2c","honeywellabp.jpg","Pressure & Temperature","" -"Honeywell HIH I2C","components/sensor/honeywell_hih_i2c","honeywellhih.jpg","Temperature & Humidity","" -"HTE501","components/sensor/hte501","HTE501.png","Temperature & Humidity","" -"HTU21D / Si7021 / SHT21","components/sensor/htu21d","htu21d.jpg","Temperature & Humidity","" -"HTU31D","components/sensor/htu31d","htu31d.jpg","Temperature & Humidity","" -"Hydreon Rain Sensor","components/sensor/hydreon_rgxx","hydreon_rg9.jpg","Rain","" -"HYT271","components/sensor/hyt271","hyt271.jpg","Temperature & Humidity","" -"Inkbird IBS-TH1 Mini","components/sensor/inkbird_ibsth1_mini","inkbird_isbth1_mini.jpg","Temperature & Humidity","" -"Internal Temperature","components/sensor/internal_temperature","thermometer.svg","Temperature","dark-invert" -"LM75B","components/sensor/lm75b","lm75b.jpg","Temperature","" -"LPS22","components/sensor/lps22","lps22.webp","Temperature & Barometric Pressure","" -"MCP9808","components/sensor/mcp9808","mcp9808.jpg","Temperature","" -"MH-Z19","components/sensor/mhz19","mhz19.jpg","CO₂ & Temperature","" -"MLX90614","components/sensor/mlx90614","mlx90614.jpg","Temperature","" -"MPL3115A2","components/sensor/mpl3115a2","mpl3115a2.jpg","Temperature & Pressure","" -"MS5611","components/sensor/ms5611","ms5611.jpg","Pressure","" -"MS8607","components/sensor/ms8607","ms8607.jpg","Temperature & Humidity & Pressure","" -"NPI-19","components/sensor/npi19","npi19.jpg","Pressure","" -"NTC Thermistor","components/sensor/ntc","ntc.jpg","Temperature","" -"PMWCS3","components/sensor/pmwcs3","pmwcs3.jpg","Soil moisture & Temperature","" -"QMP6988","components/sensor/qmp6988","qmp6988_env3.png","Temperature & Pressure","" -"RadonEye BLE","components/sensor/radon_eye_ble","radon_eye_logo.png","Radon","" -"RuuviTag","components/sensor/ruuvitag","ruuvitag.jpg","Temperature & Humidity & Accelerometer","" -"SCD30","components/sensor/scd30","scd30.jpg","CO₂ & Temperature & Humidity","" -"SCD4X","components/sensor/scd4x","scd4x.jpg","CO₂ & Temperature & Humidity","" -"SDP3x / SDP800 Series","components/sensor/sdp3x","sdp31.jpg","Pressure","" -"SFA30","components/sensor/sfa30","sfa30.jpg","Formaldehyde","" -"SHT3X-D","components/sensor/sht3xd","sht3xd.jpg","Temperature & Humidity","" -"SHT4X","components/sensor/sht4x","sht4x.jpg","Temperature & Humidity","" -"SHTCx","components/sensor/shtcx","shtc3.jpg","Temperature & Humidity","" -"SMT100","components/sensor/smt100","smt100.jpg","Moisture & Temperature","" -"STS3X","components/sensor/sts3x","sts3x.jpg","Temperature","" -"STTS22H","components/sensor/stts22h","stts22h.jpg","Temperature","" -"TC74","components/sensor/tc74","tc74.jpg","Temperature","" -"TEE501","components/sensor/tee501","TEE501.png","Temperature","" -"TE-M3200","components/sensor/tem3200","tem3200.jpg","Temperature & Pressure","" -"TMP102","components/sensor/tmp102","tmp102.jpg","Temperature","" -"TMP1075","components/sensor/tmp1075","tmp1075.jpg","Temperature","" -"TMP117","components/sensor/tmp117","tmp117.jpg","Temperature","" -"WTS01","components/sensor/wts01","wts01.png","Temperature","" -"XGZP68xx Series","components/sensor/xgzp68xx","6897d.jpg","Differential Pressure","" -{{< /imgtable >}} - -### Health/Safety - -{{< imgtable >}} -"Seeed Studio MR60BHA2 mmWave","components/seeed_mr60bha2","seeed_mr60bha2.jpg","Breathing & heartbeat detection" -"Seeed Studio MR60FDA2 mmWave","components/seeed_mr60fda2","seeed_mr60fda2.jpg","Presence & Fall detection" -{{< /imgtable >}} - -### Light - -{{< imgtable >}} -"AM43","components/sensor/am43","am43.jpg","Lux" -"APDS9306","components/sensor/apds9306","apds9306.png","Lux" -"APDS9960","components/sensor/apds9960","apds9960.jpg","Colour & Gesture" -"AS7341","components/sensor/as7341","as7341.jpg","Spectral Color Sensor" -"BH1750","components/sensor/bh1750","bh1750.jpg","Lux" -"LTR301","components/sensor/ltr501","ltr501.jpg","Lux" -"LTR303","components/sensor/ltr_als_ps","ltr303.jpg","Lux" -"LTR329","components/sensor/ltr_als_ps","ltr329.jpg","Lux" -"LTR390","components/sensor/ltr390","ltr390.jpg","Lux & UV" -"LTR501","components/sensor/ltr501","ltr501.jpg","Lux & Proximity" -"LTR553","components/sensor/ltr_als_ps","ltr-ps.jpg","Lux & Proximity" -"LTR556","components/sensor/ltr_als_ps","ltr-ps.jpg","Lux & Proximity" -"LTR558","components/sensor/ltr501","ltr501.jpg","Lux & Proximity" -"LTR559","components/sensor/ltr_als_ps","ltr559.jpg","Lux & Proximity" -"LTR659","components/sensor/ltr_als_ps","ltr-ps.jpg","Proximity" -"MAX44009","components/sensor/max44009","max44009.svg","Lux" -"OPT3001","components/sensor/opt3001","opt3001.jpg","Lux" -"TCS34725","components/sensor/tcs34725","tcs34725.jpg","Lux & RGB colour" -"TSL2561","components/sensor/tsl2561","tsl2561.jpg","Lux" -"TSL2591","components/sensor/tsl2591","tsl2591.jpg","Lux" -"VEML3235","components/sensor/veml3235","veml3235.jpg","Lux" -"VEML6030","components/sensor/veml7700","veml6030.jpg","Lux" -"VEML7700","components/sensor/veml7700","veml7700.jpg","Lux" -{{< /imgtable >}} - -### Magnetic - -{{< imgtable >}} -"AS5600","components/sensor/as5600","as5600.jpg","12-Bit Magnetic Position Sensor" -"HMC5883L","components/sensor/hmc5883l","hmc5883l.jpg","3-Axis magnetometer" -"MLX90393","components/sensor/mlx90393","mlx90393.jpg","3-Axis magnetometer" -"MMC5603","components/sensor/mmc5603","mmc5603.jpg","3-Axis magnetometer" -"MMC5983","components/sensor/mmc5983","mmc5983.jpg","3-Axis magnetometer" -"QMC5883L","components/sensor/qmc5883l","qmc5883l.jpg","3-Axis magnetometer" -{{< /imgtable >}} - -### Miscellaneous - -{{< imgtable >}} -"AS3935","components/sensor/as3935","as3935.jpg","Storm lightning" -"b-parasite","components/sensor/b_parasite","b_parasite.jpg","Moisture & Temperature & Humidity & Light" -"Binary Sensor Map","components/sensor/binary_sensor_map","binary_sensor_map.jpg","Map binary to value" -"Combination","components/sensor/combination","function.svg","dark-invert" -"Duty Time","components/sensor/duty_time","timer-play-outline.svg","dark-invert" -"EZO sensor circuits","components/sensor/ezo","ezo-ph-circuit.png","(pH)" -"FS3000","components/sensor/fs3000","fs3000.jpg","Air velocity" -"GDK101","components/sensor/gdk101","gdk101.jpg","Radiation" -"Growatt Solar","components/sensor/growatt_solar","growatt.jpg","Solar rooftop" -"Havells Solar","components/sensor/havells_solar","havellsgti5000d_s.jpg","Solar rooftop" -"Integration","components/sensor/integration","sigma.svg","dark-invert" -"Kuntze pool sensor","components/sensor/kuntze","kuntze.jpg","" -"LC709203F","components/sensor/lc709203f","lc709203f.jpg","Battery level & Thermistor" -"LVGL widget","components/sensor/lvgl","lvgl_c_num.png","" -"M5Stack Unit 8 Angle","components/sensor/m5stack_8angle","m5stack_8angle.png","" -"MAX17043","components/sensor/max17043","max17043.jpg","Battery level" -"MicroNova pellet stove","components/micronova","micronova.svg","" -"Modbus Sensor","components/sensor/modbus_controller","modbus.png","" -"Nextion","components/sensor/nextion","nextion.jpg","Sensors from display" -"Person Sensor (SEN21231)","components/sensor/sen21231","sen21231.png","" -"Resol VBus","components/vbus","resol_deltasol_bs_plus.jpg","" -"Rotary Encoder","components/sensor/rotary_encoder","rotary_encoder.jpg","" -"SMT100","components/sensor/smt100","smt100.jpg","Moisture & Temperature" -"SY6970","components/sensor/sy6970","sy6970.jpg","Battery charge IC" -"Sound Level","components/sensor/sound_level","waveform.svg","dark-invert" -"Tuya Sensor","components/sensor/tuya","tuya.png","" -"TX20","components/sensor/tx20","tx20.jpg","Wind speed & Wind direction" -"uFire EC sensor","components/sensor/ufire_ec","ufire_ec.png","EC & Temperature" -"uFire ISE sensor","components/sensor/ufire_ise","ufire_ise.png","pH & Temperature" -"WireGuard","components/wireguard","wireguard_custom_logo.svg","dark-invert" -{{< /imgtable >}} - -### Motion - -{{< imgtable >}} -"APDS9960","components/sensor/apds9960","apds9960.jpg","Colour & Gesture" -"BMI160","components/sensor/bmi160","bmi160.jpg","Accelerometer & Gyroscope" -"LD2410","components/sensor/ld2410","ld2410.jpg","Motion & Presence" -"LD2412","components/sensor/ld2412","ld2412.jpg","Motion & Presence" -"LD2420","components/sensor/ld2420","ld2420.jpg","Motion & Presence" -"LD2450","components/sensor/ld2450","ld2450.png","Motion & Presence" -"RD-03D","components/sensor/rd03d","rd03d.webp","Motion & Presence" -"MPU6050","components/sensor/mpu6050","mpu6050.jpg","Accelerometer & Gyroscope" -"MPU6886","components/sensor/mpu6886","mpu6886.jpg","Accelerometer & Gyroscope" -"MSA301","components/sensor/msa3xx","msa301.jpg","Accelerometer" -"MSA311","components/sensor/msa3xx","msa311.jpg","Accelerometer" -"RuuviTag","components/sensor/ruuvitag","ruuvitag.jpg","Temperature & Humidity & Accelerometer" -"Seeed Studio MR24HPC1 mmWave","components/seeed_mr24hpc1","seeed-mr24hpc1.jpg","Motion & Presence" -{{< /imgtable >}} - -### Thermocouple - -{{< imgtable >}} -"KMeterISO","components/sensor/kmeteriso","kmeteriso.jpg","K-Type","" -"MAX31855","components/sensor/max31855","max31855.jpg","K-Type","" -"MAX31856","components/sensor/max31856","max31856.jpg","All types","" -"MAX31865","components/sensor/max31865","max31865.jpg","Platinum RTD","" -"MAX6675","components/sensor/max6675","max6675.jpg","K-Type","" -"MCP9600","components/sensor/mcp9600","mcp9600.jpg","All types","" -{{< /imgtable >}} - -### Weight - -{{< imgtable >}} -"HX711","components/sensor/hx711","hx711.jpg","Load cell amplifier" -"Xiaomi Miscale","components/sensor/xiaomi_miscale","xiaomi_miscale1&2.jpg","" -{{< /imgtable >}} -Looking for a sensor that outputs its values as an analog voltage? Have a look at the -{{< docref "/components/sensor/adc" "ADC Sensor" >}} together with a formula like in the -[TEMT6000 configuration](https://devices.esphome.io/devices/temt6000). - -## Binary Sensor Components - -Binary Sensors are organized into categories; if a given sensor fits into more than one category, it will appear -multiple times. - -### Core - -{{< imgtable >}} -"Binary Sensor Core","components/binary_sensor/index","folder-open.svg","dark-invert" -"Template Binary Sensor","components/binary_sensor/template","description.svg","dark-invert" -"GPIO","components/binary_sensor/gpio","gpio.svg","" -"Home Assistant","components/binary_sensor/homeassistant","home-assistant.svg","dark-invert" -"Status","components/binary_sensor/status","server-network.svg","dark-invert" -"Switch","components/binary_sensor/switch","electric-switch.svg","dark-invert" -"Host SDL2","components/binary_sensor/sdl","sdl.png","" -{{< /imgtable >}} - -### Capacitive Touch - -{{< imgtable >}} -"CAP1188 Capacitive Touch Sensor","components/binary_sensor/cap1188","cap1188.jpg","" -"ESP32 Touch Pad","components/binary_sensor/esp32_touch","touch.svg","dark-invert" -"MPR121 Capacitive Touch Sensor","components/binary_sensor/mpr121","mpr121.jpg","" -"TTP229","components/binary_sensor/ttp229","ttp229.jpg","" -{{< /imgtable >}} - -### Mechanical - -{{< imgtable >}} -"Matrix Keypad","components/matrix_keypad","matrix_keypad.jpg" -"TM1637","components/display/tm1637","tm1637.jpg" -"TM1638","components/display/tm1638","tm1638.jpg" -{{< /imgtable >}} - -### NFC/RFID - -Often known as "tag" or "card" readers within the community. - -{{< imgtable >}} -"NFC Tag","components/binary_sensor/nfc","nfc.png","dark-invert" -"PN532","components/binary_sensor/pn532","pn532.jpg","" -"PN7150","components/pn7150","pn7150.jpg","" -"PN716X","components/pn7160","pn716x.jpg","" -"RC522","components/binary_sensor/rc522","rc522.jpg","" -"RDM6300","components/binary_sensor/rdm6300","rdm6300.jpg","" -"Wiegand Reader","components/wiegand","wiegand.jpg","" -{{< /imgtable >}} - -### Touchscreen - -{{< imgtable >}} -"Touchscreen Core","components/touchscreen/index","touch.svg","dark-invert" -"FT5X06","components/touchscreen/ft5x06","indicator.jpg","" -"GT911","components/touchscreen/gt911","esp32_s3_box_3.png","" -"Nextion Binary Sensor","components/binary_sensor/nextion","nextion.jpg","" -"TT21100","components/touchscreen/tt21100","esp32-s3-korvo-2-lcd.png","" -"LVGL widget","components/binary_sensor/lvgl","lvgl_c_bns.png","" -{{< /imgtable >}} - -### Presence Detection - -{{< imgtable >}} -"AT581X","components/at581x","at581x.png" -"DFRobot mmWave Radar","components/dfrobot_sen0395","dfrobot_sen0395.jpg" -"LD2410","components/sensor/ld2410","ld2410.jpg" -"LD2412","components/sensor/ld2412","ld2412.jpg" -"LD2420","components/sensor/ld2420","ld2420.jpg" -"LD2450","components/sensor/ld2450","ld2450.png" -"RD-03D","components/sensor/rd03d","rd03d.webp" -"Seeed Studio MR24HPC1 mmWave","components/seeed_mr24hpc1","seeed-mr24hpc1.jpg" -{{< /imgtable >}} - -### Miscellaneous - -{{< imgtable >}} -"Analog Threshold","components/binary_sensor/analog_threshold","analog_threshold.svg","dark-invert" -"ESP32 BLE Presence","components/binary_sensor/ble_presence","bluetooth.svg","dark-invert" -"Hydreon Rain Sensor Binary Sensor","components/binary_sensor/hydreon_rgxx","hydreon_rg9.jpg","" -"Modbus Binary Sensor","components/binary_sensor/modbus_controller","modbus.png","" -"PipSolar - compatible PV Inverter","components/pipsolar","pipsolar.jpg","" -"Pylontech Batteries","components/pylontech","pylontech.jpg","" -"Qwiic PIR Motion","components/binary_sensor/qwiic_pir","qwiic_pir.jpg","" -"Resol VBus","components/vbus","resol_deltasol_bs_plus.jpg","" -"Tuya Binary Sensor","components/binary_sensor/tuya","tuya.png","" -"WireGuard","components/wireguard","wireguard_custom_logo.svg","dark-invert" -{{< /imgtable >}} - -## Alarm Control Panel Components - -{{< imgtable >}} -"Alarm Control Panel Core","components/alarm_control_panel/index","alarm-panel.svg","dark-invert" -"Template Alarm Control Panel","components/alarm_control_panel/template","description.svg","dark-invert" -{{< /imgtable >}} - -## Audio ADC Components - -{{< imgtable >}} -"Audio ADC Core","components/audio_adc/index","audio_adc.svg" -"ES7210","components/audio_adc/es7210","es7210.svg" -"ES7243E","components/audio_adc/es7243e","es7243e.svg" -{{< /imgtable >}} - -## Audio DAC Components - -{{< imgtable >}} -"Audio DAC Core","components/audio_dac/index","audio_dac.svg" -"AIC3204","components/audio_dac/aic3204","aic3204.svg" -"ES8156","components/audio_dac/es8156","es8156.svg" -"ES8311","components/audio_dac/es8311","es8311.svg" -"ES8388","components/audio_dac/es8388","es8388.svg" -{{< /imgtable >}} - -## Button Components - -{{< imgtable >}} -"Button Core","components/button/index","folder-open.svg","dark-invert" -"Template Button","components/button/template","description.svg","dark-invert" -"Factory Reset Button","components/button/factory_reset","restart-alert.svg","dark-invert" -"Generic Output Button","components/button/output","upload.svg","dark-invert" -"Restart Button","components/button/restart","restart.svg","dark-invert" -"Safe Mode Button","components/button/safe_mode","restart-alert.svg","dark-invert" -"Shutdown Button","components/button/shutdown","power_settings.svg","dark-invert" -"UART Button","components/button/uart","uart.svg","" -"Wake-on-LAN","components/button/wake_on_lan","power_settings.svg","dark-invert" -{{< /imgtable >}} - -## Climate Components - -{{< imgtable >}} -"Climate Core","components/climate/index","folder-open.svg","dark-invert" -"Anova Cooker","components/climate/anova","anova.png","" -"Bang Bang Controller","components/climate/bang_bang","air-conditioner.svg","dark-invert" -"BedJet Climate System","components/climate/bedjet","bedjet.png","" -"Haier Climate","components/climate/haier","haier.svg","" -"IR Remote Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Midea","components/climate/midea","midea.svg","" -"PID Controller","components/climate/pid","function.svg","dark-invert" -"Thermostat Controller","components/climate/thermostat","air-conditioner.svg","dark-invert" -"Tuya Climate","components/climate/tuya","tuya.png","" -"Uponor Smatrix Base Pulse Underfloor Heating","components/uponor_smatrix","uponor.svg","" -{{< /imgtable >}} - -## Cover Components - -{{< imgtable >}} -"Cover Core","components/cover/index","folder-open.svg","dark-invert" -"Template Cover","components/cover/template","description.svg","dark-invert" -"AM43 Cover","components/cover/am43","am43.jpg","" -"Current-Based Cover","components/cover/current_based","flash.svg","dark-invert" -"Endstop Cover","components/cover/endstop","electric-switch.svg","dark-invert" -"Feedback Cover","components/cover/feedback","feedback_cover.svg","dark-invert" -"HE60R Cover","components/cover/he60r","he60r.jpg","" -"Time-Based Cover","components/cover/time_based","timer.svg","dark-invert" -"Tormatic/Novoferm Cover","components/cover/tormatic","tormatic.png","" -"Tuya Cover","components/cover/tuya","tuya.png","" -{{< /imgtable >}} - -## Datetime Components - -{{< imgtable >}} -"Datetime Core","components/datetime/index","clock-outline.svg","dark-invert" -"Template Datetime","components/datetime/template","description.svg","dark-invert" -{{< /imgtable >}} - -## Display Components - -{{< imgtable >}} -"Display Core","components/display/index","folder-open.svg","dark-invert" -"Font Renderer","components/font","format-font.svg","dark-invert" -"Graph","components/graph","chart-line.svg","dark-invert" -"QR Code","components/qr_code","qr-code.svg","dark-invert" -"Image","components/image","image-outline.svg","dark-invert" -"Animation","components/animation","image-multiple-outline.svg","dark-invert" -"Online Image","components/online_image","image-sync-outline.svg","dark-invert" -"Display Menu Core","components/display_menu/index","folder-open.svg","dark-invert" -"Graphical Display Menu","components/display_menu/graphical_display_menu","graphical_display_menu.png","" -"LCD Menu","components/display_menu/lcd_menu","lcd_menu.png","" -"LVGL Graphics","components/lvgl/index","lvgl.png","" -{{< /imgtable >}} -{{< anchor "display-hw" >}} - -## Display Hardware Platforms - -{{< imgtable >}} -"Addressable Light","components/display/addressable_light","addressable_light.jpg" -"MIPI DSI Displays","components/display/mipi_dsi","tab5.jpg" -"MIPI RGB Displays","components/display/mipi_rgb","indicator.jpg" -"MIPI SPI Displays","components/display/mipi_spi","t4-s3.jpg" -"ePaper SPI Displays","components/display/epaper_spi","epaper.svg" -"ILI9xxx","components/display/ili9xxx","ili9341.jpg" -"ILI9341","components/display/ili9xxx","ili9341.svg" -"ILI9342","components/display/ili9xxx","ili9342.svg" -"ILI9481","components/display/ili9xxx","ili9481.svg" -"ILI9486","components/display/ili9xxx","ili9341.jpg" -"ILI9488","components/display/ili9xxx","ili9488.svg" -"WSPICOLCD","components/display/ili9xxx","ili9488.svg" -"HUB75 LED Matrix","components/display/hub75","hub75.svg" -"Inkplate","components/display/inkplate","inkplate6.jpg" -"LCD Display","components/display/lcd_display","lcd.jpg" -"MAX7219 Dot Matrix","components/display/max7219digit","max7219digit.jpg" -"MAX7219","components/display/max7219","max7219.jpg" -"Nextion","components/display/nextion","nextion.jpg" -"PCD8544 (Nokia 5110/ 3310)","components/display/pcd8544","pcd8544.jpg" -"PVVX MiThermometer","components/display/pvvx_mithermometer","xiaomi_lywsd03mmc.jpg" -"Quad SPI Displays","components/display/qspi_dbi","t4-s3.jpg" -"RPI_DPI_RGB","components/display/rpi_dpi_rgb","waveshare_touch-s3.jpg" -"SSD1306","components/display/ssd1306","ssd1306.jpg" -"SSD1322","components/display/ssd1322","ssd1322.jpg" -"SSD1325","components/display/ssd1325","ssd1325.jpg" -"SSD1327","components/display/ssd1327","ssd1327.jpg" -"SSD1331","components/display/ssd1331","ssd1331.jpg" -"SSD1351","components/display/ssd1351","ssd1351.jpg" -"ST7567","components/display/st7567","st7567.jpg" -"ST7701S","components/display/st7701s","indicator.jpg" -"ST7735","components/display/st7735","st7735.jpg" -"ST7789V","components/display/st7789v","st7789v.jpg" -"ST7796","components/display/ili9xxx","st7796.svg" -"ST7920","components/display/st7920","st7920.jpg" -"TM1621","components/display/tm1621","tm1621.jpg" -"TM1637","components/display/tm1637","tm1637.jpg" -"TM1638","components/display/tm1638","tm1638.jpg" -"TM1651 Battery Display","components/tm1651","tm1651_battery_display.jpg" -"Waveshare E-Paper","components/display/waveshare_epaper","waveshare_epaper.jpg" -"Host SDL2 display","components/display/sdl","sdl.png" -{{< /imgtable >}} - -## Electromechanical - -{{< imgtable >}} -"Atlas Scientific Peristaltic Pump","components/ezo_pmp","ezo-pmp.jpg","" -"Grove TB6612FNG","components/grove_tb6612fng","motor.png","dark-invert" -"Matrix Keypad","components/matrix_keypad","matrix_keypad.jpg","" -"RTTTL Buzzer","components/rtttl","buzzer.jpg","" -"Servo","components/servo","servo.svg","" -"Stepper","components/stepper/index","stepper.svg","" -{{< /imgtable >}} - -## Energy/Solar Management - -{{< imgtable >}} -"Growatt Solar","components/sensor/growatt_solar","growatt.jpg","" -"Havells Solar","components/sensor/havells_solar","havellsgti5000d_s.jpg","" -"PipSolar-compatible PV Inverter","components/pipsolar","pipsolar.jpg","" -"Power Supply","components/power_supply","power.svg","dark-invert" -"Resol VBus","components/vbus","resol_deltasol_bs_plus.jpg","" -"SML","components/sml","sml.svg","" -"SUN-GTIL2 inverter","components/sun_gtil2","sun_1000g2.png","" -{{< /imgtable >}} - -## Event Components - -{{< imgtable >}} -"Event Core","components/event/index","folder-open.svg","dark-invert" -"Template Event","components/event/template","description.svg","dark-invert" -"UART Event","components/event/uart","uart.svg","" -{{< /imgtable >}} - -## Fan Components - -{{< imgtable >}} -"Fan Core","components/fan/index","folder-open.svg","dark-invert" -"Template Fan","components/fan/template","description.svg","dark-invert" -"Binary Fan","components/fan/binary","fan.svg","dark-invert" -"H-bridge Fan","components/fan/hbridge","fan.svg","dark-invert" -"Speed Fan","components/fan/speed","fan.svg","dark-invert" -"Tuya Fan","components/fan/tuya","tuya.png","" -{{< /imgtable >}} - -## Home Assistant Components - -Components specifically for interacting with Home Assistant. - -{{< imgtable >}} -"Binary Sensor","components/binary_sensor/homeassistant","home-assistant.svg","dark-invert" -"Bluetooth Proxy","components/bluetooth_proxy","bluetooth.svg","dark-invert" -"micro Wake Word","components/micro_wake_word","voice-assistant.svg","dark-invert" -"Number","components/number/homeassistant","home-assistant.svg","dark-invert" -"Sensor","components/sensor/homeassistant","home-assistant.svg","dark-invert" -"Switch","components/switch/homeassistant","home-assistant.svg","dark-invert" -"Text Sensor","components/text_sensor/homeassistant","home-assistant.svg","dark-invert" -"Voice Assistant","components/voice_assistant","voice-assistant.svg","dark-invert" -{{< /imgtable >}} - -## Infrared Components - -Used for creating infrared (IR) remote control transmitters and/or receivers. - -{{< imgtable >}} -"Infrared Core","components/infrared/index","folder-open.svg","dark-invert" -"IR/RF Proxy","components/ir_rf_proxy","remote.svg","dark-invert" -{{< /imgtable >}} - -## Light Components - -{{< imgtable >}} -"Light Core","components/light/index","folder-open.svg","dark-invert" -"Beken SPI","components/light/beken_spi_led_strip","color_lens.svg","dark-invert" -"Binary Light","components/light/binary","lightbulb.svg","dark-invert" -"Cold+Warm White Light","components/light/cwww","brightness-medium.svg","dark-invert" -"Color Temperature Light","components/light/color_temperature","brightness-medium.svg","dark-invert" -"ESP32 RMT","components/light/esp32_rmt_led_strip","color_lens.svg","dark-invert" -"FastLED Light","components/light/fastled","color_lens.svg","dark-invert" -"H-bridge Light","components/light/hbridge","brightness-medium.svg","dark-invert" -"Light Partition","components/light/partition","color_lens.svg","dark-invert" -"LightWaveRF","components/lightwaverf","brightness-medium.svg","dark-invert" -"LVGL widget","components/light/lvgl","lvgl_c_lig.png","" -"Monochromatic Light","components/light/monochromatic","brightness-medium.svg","dark-invert" -"NeoPixelBus Light","components/light/neopixelbus","color_lens.svg","dark-invert" -"RGB Light","components/light/rgb","rgb.png","" -"RGBCT Light","components/light/rgbct","rgbw.png","" -"RGBW Light","components/light/rgbw","rgbw.png","" -"RGBWW Light","components/light/rgbww","rgbw.png","" -"RP2040 PIO","components/light/rp2040_pio_led_strip","color_lens.svg","dark-invert" -"Shelly Dimmer","components/light/shelly_dimmer","shellydimmer2.jpg","" -"Sonoff D1 Dimmer","components/light/sonoff_d1","sonoff_d1.jpg","" -"SPI LED Strips","components/light/spi_led_strip","apa102.jpg","" -"Status Led","components/light/status_led","led-on.svg","dark-invert" -"Tuya Dimmer","components/light/tuya","tuya.png","" -{{< /imgtable >}} -**Looking for WS2811 and similar individually addressable lights?** For the ESP32 and its variants, we recommend the -{{< docref "light/esp32_rmt_led_strip" >}} or {{< docref "light/spi_led_strip" >}}; for other processors, have a look -at the {{< docref "light/fastled" "FastLED Light" >}}. - -## Lock Components - -{{< imgtable >}} -"Lock Core","components/lock/index","folder-open.svg","dark-invert" -"Template Lock","components/lock/template","description.svg","dark-invert" -"Generic Output Lock","components/lock/output","upload.svg","dark-invert" -{{< /imgtable >}} - -## Media Player Components - -{{< imgtable >}} -"Media Player Core","components/media_player/index","folder-open.svg","dark-invert" -"DFPlayer","components/dfplayer","dfplayer.svg","dark-invert" -"I2S Audio","components/media_player/i2s_audio","i2s_audio.svg","" -"Speaker","components/media_player/speaker","speaker.svg","dark-invert" -{{< /imgtable >}} - -## Microphone Components - -{{< imgtable >}} -"Microphone Core","components/microphone/index","microphone.svg","dark-invert" -"I2S Microphone","components/microphone/i2s_audio","i2s_audio.svg","" -{{< /imgtable >}} - -## Number Components - -{{< imgtable >}} -"Number Core","components/number/index","folder-open.svg","dark-invert" -"Template Number","components/number/template","description.svg","dark-invert" -"Home Assistant","components/number/homeassistant","home-assistant.svg","dark-invert" -"LVGL widget Number","components/number/lvgl","lvgl_c_num.png","" -"Modbus Number","components/number/modbus_controller","modbus.png","" -"Tuya Number","components/number/tuya","tuya.png","" -{{< /imgtable >}} - -## Output Components - -{{< imgtable >}} -"Output Core","components/output/index","folder-open.svg","dark-invert" -"Template Output","components/output/template","description.svg","dark-invert" -"AC Dimmer","components/output/ac_dimmer","ac_dimmer.svg","dark-invert" -"BLE Binary Output","components/output/ble_client","bluetooth.svg","dark-invert" -"BP1658CJ","components/output/bp1658cj","bp1658cj.svg","" -"BP5758D","components/output/bp5758d","bp5758d.svg","" -"DAC7678","components/output/dac7678","dac7678.svg","" -"EMC2101","components/emc2101","emc2101.jpg","" -"ESP32 DAC","components/output/esp32_dac","dac.svg","" -"ESP32 LEDC","components/output/ledc","pwm.png","" -"ESP8266 Software PWM","components/output/esp8266_pwm","pwm.png","" -"GP8403","components/output/gp8403","gp8403.svg","" -"GPIO Output","components/output/gpio","gpio.svg","" -"LibreTiny PWM","components/output/libretiny_pwm","pwm.png","" -"MCP4661","components/output/mcp4461","mcp4461.jpg","" -"MCP4725","components/output/mcp4725","mcp4725.jpg","" -"MCP4728","components/output/mcp4728","mcp4728.jpg","" -"MCP47A1","components/output/mcp47a1","mcp47a1.svg","" -"Modbus Output","components/output/modbus_controller","modbus.png","" -"MY9231/MY9291","components/output/my9231","my9231.svg","" -"PCA9685","components/output/pca9685","pca9685.jpg","" -"Sigma-Delta Output","components/output/sigma_delta_output","sigma-delta.svg","dark-invert" -"Slow PWM","components/output/slow_pwm","pwm.png","" -"SM16716","components/output/sm16716","sm16716.svg","" -"SM2135","components/output/sm2135","sm2135.svg","" -"SM2235","components/output/sm2235","sm2235.svg","" -"SM2335","components/output/sm2335","sm2335.svg","" -"TLC59208F","components/output/tlc59208f","tlc59208f.jpg","" -"TLC5947","components/output/tlc5947","tlc5947.jpg","" -"TLC5971","components/output/tlc5971","tlc5971.jpg","" -"X9C Potentiometer","components/output/x9c","x9c.jpg","" -{{< /imgtable >}} - -## Select Components - -{{< imgtable >}} -"Select Core","components/select/index","folder-open.svg","dark-invert" -"Template Select","components/select/template","description.svg","dark-invert" -"LVGL widget Select","components/select/lvgl","lvgl_c_sel.png","" -"Modbus Select","components/select/modbus_controller","modbus.png","" -"Tuya Select","components/select/tuya","tuya.png","" -{{< /imgtable >}} - -## Speaker Components - -{{< imgtable >}} -"Speaker Core","components/speaker/index","speaker.svg","dark-invert" -"I2S Speaker","components/speaker/i2s_audio","i2s_audio.svg","" -"Mixer Speaker","components/speaker/mixer","mixer.svg","" -"Resampler Speaker","components/speaker/resampler","waveform.svg","dark-invert" -{{< /imgtable >}} - -## Switch Components - -{{< imgtable >}} -"Switch Core","components/switch/index","folder-open.svg","dark-invert" -"Template Switch","components/switch/template","description.svg","dark-invert" -"BLE Client Switch","components/switch/ble_client","bluetooth.svg","dark-invert" -"Factory Reset Switch","components/switch/factory_reset","restart-alert.svg","dark-invert" -"Generic Output Switch","components/switch/output","upload.svg","dark-invert" -"GPIO Switch","components/switch/gpio","gpio.svg","" -"H-bridge Switch","components/switch/hbridge","hbridge-relay.jpg","" -"LVGL Widget","components/switch/lvgl","lvgl_c_swi.png","" -"Modbus Switch","components/switch/modbus_controller","modbus.png","" -"Nextion Switch","components/switch/nextion","nextion.jpg","" -"Restart Switch","components/switch/restart","restart.svg","dark-invert" -"Safe Mode Switch","components/switch/safe_mode","restart-alert.svg","dark-invert" -"Shutdown Switch","components/switch/shutdown","power_settings.svg","dark-invert" -"Tuya Switch","components/switch/tuya","tuya.png","" -"UART Switch","components/switch/uart","uart.svg","" -"Home Assistant","components/switch/homeassistant","home-assistant.svg","dark-invert" -{{< /imgtable >}} - -## Text Components - -{{< imgtable >}} -"Text Core","components/text/index","folder-open.svg","dark-invert" -"Template Text","components/text/template","description.svg","dark-invert" -"LVGL textarea Text","components/text/lvgl","lvgl_c_txt.png","" -{{< /imgtable >}} - -## Text Sensor Components - -{{< imgtable >}} -"Text Sensor Core","components/text_sensor/index","folder-open.svg","dark-invert" -"Template Text Sensor","components/text_sensor/template","description.svg","dark-invert" -"BLE Scanner","components/text_sensor/ble_scanner","bluetooth.svg","dark-invert" -"Ethernet Info","components/text_sensor/ethernet_info","ethernet.svg","dark-invert" -"Home Assistant","components/text_sensor/homeassistant","home-assistant.svg","dark-invert" -"Key Collector","components/text_sensor/key_collector","key_collector.svg","dark-invert" -"LibreTiny","components/text_sensor/libretiny","libretiny.svg","" -"LVGL textarea Text Sensor","components/text_sensor/lvgl","lvgl_c_txt.png","" -"Modbus Text Sensor","components/text_sensor/modbus_controller","modbus.png","" -"MQTT Subscribe Text","components/text_sensor/mqtt_subscribe","mqtt.png","" -"Nextion Text Sensor","components/text_sensor/nextion","nextion.jpg","" -"OpenThread Info","components/text_sensor/openthread_info","openthread.png","" -"Tuya Text Sensor","components/text_sensor/tuya","tuya.png","" -"Version","components/text_sensor/version","new-box.svg","dark-invert" -"WiFi Info","components/text_sensor/wifi_info","network-wifi.svg","dark-invert" -"WireGuard","components/wireguard","wireguard_custom_logo.svg","dark-invert" -"WL-134 Pet Tag Sensor","components/text_sensor/wl_134","fingerprint.svg","dark-invert" -{{< /imgtable >}} - -## Time Components - -{{< imgtable >}} -"Time Core","components/time/index","clock-outline.svg","dark-invert" -"BM8563 RTC","components/time/bm8563","bm8563.svg","" -"DS1307 RTC","components/time/ds1307","clock-outline.svg","dark-invert" -"RX8130 RTC","components/time/rx8130","clock-outline.svg","dark-invert" -"GPS Time","components/time/gps","crosshairs-gps.svg","dark-invert" -"Home Assistant Time","components/time/homeassistant","home-assistant.svg","dark-invert" -"PCF85063 RTC","components/time/pcf85063","clock-outline.svg","dark-invert" -"PCF8563 RTC","components/time/pcf8563","clock-outline.svg","dark-invert" -"SNTP","components/time/sntp","clock-outline.svg","dark-invert" -"Zigbee Time","components/time/zigbee","zigbee.svg","" -{{< /imgtable >}} - -## Touchscreen Components - -{{< imgtable >}} -"Touchscreen Core","components/touchscreen/index","folder-open.svg","dark-invert" -"AXS15231","components/touchscreen/axs15231","axs15231.svg","" -"CST226","components/touchscreen/cst226","t4-s3.jpg","" -"CST816","components/touchscreen/cst816","cst816.jpg","" -"CHSC6X","components/touchscreen/chsc6x","chsc6x.png","" -"EKTF2232","components/touchscreen/ektf2232","ektf2232.svg","Inkplate 6 Plus" -"FT63X6","components/touchscreen/ft63x6","wt32-sc01.png","" -"GT911","components/touchscreen/gt911","esp32_s3_box_3.png","" -"Lilygo T5 4.7""","components/touchscreen/lilygo_t5_47","lilygo_t5_47_touch.jpg","" -"TT21100","components/touchscreen/tt21100","esp32-s3-korvo-2-lcd.png","" -"XPT2046","components/touchscreen/xpt2046","xpt2046.jpg","" -{{< /imgtable >}} - -## Valve Components - -{{< imgtable >}} -"Valve Core","components/valve/index","folder-open.svg","dark-invert" -"Template Valve","components/valve/template","description.svg","dark-invert" -{{< /imgtable >}} - -## Water Heater Components - -{{< imgtable >}} -"Water Heater Core","components/water_heater/index","folder-open.svg","dark-invert" -"Template Water Heater","components/water_heater/template","description.svg","dark-invert" -{{< /imgtable >}} - -## Wireless Communication - -Used for creating infrared (IR) or radio frequency (RF) remote control transmitters and/or receivers, or to connect -ESPHome to cellular networks. **Does not encompass Wi-Fi.** - -{{< imgtable >}} -"CC1101","components/cc1101","cc1101.webp","" -"IR Remote Climate","components/climate/climate_ir","air-conditioner-ir.svg","dark-invert" -"Remote Receiver","components/remote_receiver","remote.svg","dark-invert" -"Remote Transmitter","components/remote_transmitter","remote.svg","dark-invert" -"RF Bridge","components/rf_bridge","rf_bridge.jpg","" -"SIM800L","components/sim800l","sim800l.jpg","" -"SX126x","components/sx126x","sx126x.png","" -"SX127x","components/sx127x","sx127x.png","" -{{< /imgtable >}} - -## Miscellaneous Components - -{{< imgtable >}} -"Camera Encoder","components/camera/camera_encoder","camera.svg","dark-invert" -"Key Collector","components/key_collector","key_collector.svg","dark-invert" -"ESP32 Camera","components/esp32_camera","camera.svg","dark-invert" -"Exposure Notifications","components/exposure_notifications","exposure_notifications.png","" -"GPS","components/gps","crosshairs-gps.svg","dark-invert" -"Grow Fingerprint Reader","components/fingerprint_grow","fingerprint.svg","dark-invert" -"HLK-FM22x Face Recognition Module","components/hlk_fm22x","face.svg","dark-invert" -"Modbus Controller","components/modbus_controller","modbus.png","" -"Sprinkler","components/sprinkler","sprinkler-variant.svg","dark-invert" -"Status LED","components/status_led","led-on.svg","dark-invert" -"Sun","components/sun","weather-sunny.svg","dark-invert" -"Tuya MCU","components/tuya","tuya.png","" -"Z-Wave Proxy","components/zwave_proxy","z-wave.svg","" -{{< /imgtable >}} - -## Cookbook - -{{< imgtable >}} -"Lambda Magic - Tips and Tricks","cookbook/lambda_magic","head-lightbulb-outline.svg","dark-invert" -"LVGL Recipes","cookbook/lvgl","lvgl.png","" -"Garage Door Template Cover","cookbook/garage-door","garage-variant.svg","dark-invert" -"Time & Temperature on OLED Display","cookbook/display_time_temp_oled","display_time_temp_oled_2.jpg","" -"ESP32 Water Leak Detector","cookbook/leak-detector-m5stickC","leak-detector-m5stickC_main_index.jpg","" -"BME280 Environment extras","cookbook/bme280_environment","bme280.jpg","" -"Non-Invasive Power Meter","cookbook/power_meter","power_meter.jpg","" -"Sonoff Fishpond Pump","cookbook/sonoff-fishpond-pump","cookbook-sonoff-fishpond-pump.jpg","" -"Arduino Port Extender","cookbook/arduino_port_extender","arduino_logo.svg","" -"EHMTX a matrix status/text display","cookbook/ehmtx","ehmtx.jpg","" -"Pulse Catcher","cookbook/pulse-catcher","pulses.png","" -{{< /imgtable >}} - -## Contributing - -ESPHome depends on and welcomes contributions from our community. If you'd like to contribute, please see our -[developer site](https://developers.esphome.io). diff --git a/content/components/button/safe_mode.md b/content/components/button/safe_mode.md deleted file mode 100644 index e1d7db0659..0000000000 --- a/content/components/button/safe_mode.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -description: "Instructions for setting up buttons that can remotely reboot the ESP in ESPHome into safe mode." -title: "Safe Mode Button" -params: - seo: - description: Instructions for setting up buttons that can remotely reboot the ESP in ESPHome into safe mode. - image: restart.svg ---- - -The `safe_mode` button allows you to remotely reboot your node into {{< docref "/components/safe_mode" >}}. This is useful in certain situations -where a misbehaving component is preventing Over-The-Air updates from completing successfully. - -This component requires {{< docref "/components/safe_mode" >}} to be configured. - -{{< img src="safemode-ui.png" alt="Image" width="80.0%" class="align-center" >}} - -```yaml -# Example configuration entry -button: - - platform: safe_mode - name: "Living Room Restart (Safe Mode)" -``` - -## Configuration variables - -- All options from [Button](/components/button#config-button). - -## See Also - -- {{< docref "shutdown/" >}} -- {{< docref "restart/" >}} -- {{< docref "factory_reset/" >}} -- {{< docref "/components/switch/safe_mode" >}} -- {{< docref "template/" >}} -- {{< apiref "safe_mode/safe_mode_button.h" "safe_mode/safe_mode_button.h" >}} diff --git a/content/components/display/max7219.md b/content/components/display/max7219.md deleted file mode 100644 index 1716de6757..0000000000 --- a/content/components/display/max7219.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -description: "Instructions for setting up MAX7219 7-segment displays." -title: "MAX7219 7-Segment Display" -params: - seo: - description: Instructions for setting up MAX7219 7-segment displays. - image: max7219.jpg ---- - -The `max7219` display platform allows you to use MAX7219 7-segment display drivers ( -[datasheet](https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf), -[hobbycomponents](https://hobbycomponents.com/displays/597-max7219-8-digit-seven-segment-display-module)) -with ESPHome. Please note that this component is *only* for 7-segment display, not matrix configurations. - -{{< img src="max7219-full.jpg" alt="Image" caption="MAX7219 7-Segment Display." width="75.0%" class="align-center" >}} - -As the communication with the MAX7219 is done using SPI for this component, you need -to have an [SPI bus](/components/spi) in your configuration with both the **mosi_pin** set (miso_pin is not required). -Connect VCC to 3.3V (the manufacturer recommends 4+ V, but 3.3V seems to work fine), DIN to your `mosi_pin` and -CS to your set `cs_pin` and finally GND to GND. - -You can even daisy-chain multiple MAX7219s by connecting the DOUT of the previous chip in the chain to the -next DIN. With more than ~3 chips the 3.3V will probably not be enough, so then you will have to potentially -use a logic level converted. - -```yaml -# Example configuration entry -spi: - clk_pin: D0 - mosi_pin: D1 - -display: - - platform: max7219 - cs_pin: D2 - num_chips: 1 - lambda: |- - it.print("01234567"); -``` - -## Configuration variables - -- **cs_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The pin you have the CS line hooked up to. -- **num_chips** (*Optional*, int): The number of chips you wish to use for daisy chaining. Defaults to - `1`. - -- **intensity** (*Optional*, int): The intensity with which the MAX7219 should drive the outputs. Range is from - 0 (least intense) to 15 (the default). - -- **lambda** (*Optional*, [lambda](/automations/templates#config-lambda)): The lambda to use for rendering the content on the MAX7219. - See [Rendering Lambda](#display-max7219_lambda) for more information. - -- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to re-draw the screen. Defaults to `1s`. -- **spi_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [SPI Component](/components/spi) if you want - to use multiple SPI buses. - -- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -- **reverse_enable** (*Optional*, boolean): For some displays the order of the chips is reversed so you'll see "56781234" instead of "12345678". This option will adjust the output to compensate. Defaults to `false`. - -{{< anchor "display-max7219_lambda" >}} - -## Rendering Lambda - -The MAX7219 has a similar API to the fully fledged [Display Rendering Engine](/components/display#display-engine), but it's only a subset as the MAX7219 -7-segment displays don't have a concept of individual pixels. In the lambda you're passed a variable called `it` -as with all other displays. In this case however, `it` is an MAX7219 instance (see API Reference). - -The most basic operation with the MAX7219 is wiring a simple number to the screen as in the configuration example -at the top of this page. But even though you're passing in a string (here `"01234567"` ), ESPHome converts it -into a representation that the MAX7219 can understand: The exact pixels that should be turned on. And of course, -not all characters can be represented. You can see a full list of characters [below](#display-max7219_characters). - -Each of the three methods (`print`, `printf` and `strftime` ) all optionally take a position argument at the -beginning which can be used to print the text at a specific position. This argument is `0` by default which -means the first character of the first MAX7219. For example to start the first character of your text at -the end of the first MAX7219, you would write `it.print(7, "0");`. - -Also note that the `.` (dot) character is special because when ESPHome encounters it in the string the dot -segment of the previous position will be enabled. - -```yaml -display: - - platform: max7219 - # ... - lambda: |- - // Print 0 at position 0 (left) - it.print("0"); - // Result: "0 " - - // Print 1 at position 1 (second character) - it.print(1, "1"); - // Result: "01 " - - // Let's write a sensor value (let's assume it's 42.1) - it.printf(3, "%.1f", id(my_sensor).state); - // Result: "01 42.1 " (the dot will appear on the "2" segment) - - // Overwrite the previous content with blank - it.print(" "); - // Print a right-padded sensor value with 0 digits after the decimal - it.printf("SENS%4.0f", id(my_sensor).state); - // Result: "SENS 42" - - // Print the current time - it.print(" "); - it.strftime("%H.%M.%S", id(esptime).now()); - // Result for 10:06:42 -> "10.06.42 " - - // Change the display intnsity based on another id. - // Value should be from 0-15. - it.set_intensity(id(my_brightness)); -``` - -Please see [Formatted Text](/components/display#display-printf) for a quick introduction into the `printf` formatting rules and -[Displaying Time](/components/display#display-strftime) for an introduction into the `strftime` time formatting. - -{{< anchor "display-max7219_characters" >}} - -## All 7-Segment Characters - -| **MAX7219 Representation** | **Character** | -| --------------------------------------- | ----------------- | -| {{< img src="seg00.svg" alt="Image" >}} | *(space)* | -| {{< img src="seg80.svg" alt="Image" >}} | `.` | -| {{< img src="segB0.svg" alt="Image" >}} | `!` | -| {{< img src="seg7E.svg" alt="Image" >}} | `0`, `O` | -| {{< img src="seg30.svg" alt="Image" >}} | `1`, `I` | -| {{< img src="seg6D.svg" alt="Image" >}} | `2`, `Z` | -| {{< img src="seg79.svg" alt="Image" >}} | `3` | -| {{< img src="seg33.svg" alt="Image" >}} | `4` | -| {{< img src="seg5B.svg" alt="Image" >}} | `5`, `S`, `s` | -| {{< img src="seg5F.svg" alt="Image" >}} | `6` | -| {{< img src="seg70.svg" alt="Image" >}} | `7` | -| {{< img src="seg7F.svg" alt="Image" >}} | `8` | -| {{< img src="seg73.svg" alt="Image" >}} | `9` | -| {{< img src="seg37.svg" alt="Image" >}} | `H` | -| {{< img src="seg4E.svg" alt="Image" >}} | `(`, `[`, `C` | -| {{< img src="seg31.svg" alt="Image" >}} | `{` | -| {{< img src="seg78.svg" alt="Image" >}} | `)`, `]` | -| {{< img src="seg07.svg" alt="Image" >}} | `}`, `T`, `t` | -| {{< img src="seg20.svg" alt="Image" >}} | `` ` `` | -| {{< img src="seg02.svg" alt="Image" >}} | `'` | -| {{< img src="seg22.svg" alt="Image" >}} | `"` | -| {{< img src="seg6F.svg" alt="Image" >}} | `@` | -| {{< img src="seg65.svg" alt="Image" >}} | `?` | -| {{< img src="seg10.svg" alt="Image" >}} | `,`, `i` | -| {{< img src="seg49.svg" alt="Image" >}} | `%` | -| {{< img src="seg40.svg" alt="Image" >}} | `*` | -| {{< img src="seg48.svg" alt="Image" >}} | `:` | -| {{< img src="seg58.svg" alt="Image" >}} | `;` | -| {{< img src="seg77.svg" alt="Image" >}} | `A`, `a` | -| {{< img src="seg1F.svg" alt="Image" >}} | `B`, `b` | -| {{< img src="seg3D.svg" alt="Image" >}} | `D`, `d` | -| {{< img src="seg4F.svg" alt="Image" >}} | `E`, `e` | -| {{< img src="seg47.svg" alt="Image" >}} | `F`, `f` | -| {{< img src="seg5E.svg" alt="Image" >}} | `G`, `g` | -| {{< img src="seg3C.svg" alt="Image" >}} | `J`, `j` | -| {{< img src="seg0E.svg" alt="Image" >}} | `L`, `l` | -| {{< img src="seg15.svg" alt="Image" >}} | `N`, `n` | -| {{< img src="seg67.svg" alt="Image" >}} | `P`, `p` | -| {{< img src="segFE.svg" alt="Image" >}} | `Q` | -| {{< img src="seg05.svg" alt="Image" >}} | `R`, `r` | -| {{< img src="seg3E.svg" alt="Image" >}} | `U`, `V` | -| {{< img src="seg3F.svg" alt="Image" >}} | `W` | -| {{< img src="seg27.svg" alt="Image" >}} | `Y`, `y` | -| {{< img src="seg01.svg" alt="Image" >}} | `-` | -| {{< img src="seg08.svg" alt="Image" >}} | `_` | -| {{< img src="seg09.svg" alt="Image" >}} | `=` | -| {{< img src="seg06.svg" alt="Image" >}} | `\|` | -| {{< img src="seg0D.svg" alt="Image" >}} | `c` | -| {{< img src="seg17.svg" alt="Image" >}} | `h` | -| {{< img src="seg1D.svg" alt="Image" >}} | `o` | -| {{< img src="seg1C.svg" alt="Image" >}} | `u`, `v` | -| {{< img src="seg8E.svg" alt="Image" >}} | `~` | - -> [!NOTE] -> Original 7-segment display base image taken from Wikipedia at -> by user [h2g2bob](https://commons.wikimedia.org/wiki/User:H2g2bob) under -> [Creative Commons BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.de) and modified -> for this documentation. - -## See Also - -- {{< docref "index/" >}} -- {{< apiref "max7219/max7219.h" "max7219/max7219.h" >}} -- [MAX7219 Library](https://github.com/nickgammon/MAX7219) by [Nick Gammon](https://github.com/nickgammon) diff --git a/content/components/light/binary.md b/content/components/light/binary.md deleted file mode 100644 index 34888e31dc..0000000000 --- a/content/components/light/binary.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -description: "Instructions for setting up binary ON/OFF lights in ESPHome." -title: "Binary Light" -params: - seo: - description: Instructions for setting up binary ON/OFF lights in ESPHome. - image: lightbulb.svg ---- - -The `binary` light platform creates a simple ON/OFF-only light from a -[binary output component](/components/output#output). - -{{< img src="binary-ui.png" alt="Image" width="40.0%" class="align-center" >}} - -```yaml -# Example configuration entry -light: - - platform: binary - name: "Desk Lamp" - output: light_output -``` - -## Configuration variables - -- **output** (**Required**, [ID](/guides/configuration-types#id)): The id of the binary [Output Component](/components/output#output) to use for this light. -- All other options from [Light](/components/light#config-light). - -## See Also - -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/output/gpio" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "binary/light/binary_light_output.h" "binary/light/binary_light_output.h" >}} diff --git a/content/components/light/monochromatic.md b/content/components/light/monochromatic.md deleted file mode 100644 index 630fb90e97..0000000000 --- a/content/components/light/monochromatic.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -description: "Instructions for setting up monochromatic (brightness-only) lights." -title: "Monochromatic Light" -params: - seo: - description: Instructions for setting up monochromatic (brightness-only) lights. - image: brightness-medium.svg ---- - -The `monochromatic` light platform creates a simple brightness-only light from a -[float output component](/components/output#output). - -{{< img src="monochromatic-strip.jpg" alt="Image" caption="Example of a brightness-only LED strip that can be used with this component." width="75.0%" class="align-center" >}} - -{{< img src="kitchen-lights.png" alt="Image" width="40.0%" class="align-center" >}} - -```yaml -# Example configuration entry -light: - - platform: monochromatic - name: "Kitchen Lights" - output: output_component1 -``` - -## Configuration variables - -- **output** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for this light. -- All other options from [Light](/components/light#config-light). - -## See Also - -{{< img src="monochromatic-detail.jpg" alt="Image" width="75.0%" class="align-center" >}} - -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/binary" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< docref "/components/output/my9231" >}} -- {{< apiref "monochromatic/monochromatic_light_output.h" "monochromatic/monochromatic_light_output.h" >}} diff --git a/content/components/packet_transport/sx126x.md b/content/components/packet_transport/sx126x.md deleted file mode 100644 index e889e1ebdf..0000000000 --- a/content/components/packet_transport/sx126x.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -description: "Instructions for setting up a sx126x packet transport platform on ESPHome" -title: "SX126x Packet Transport Platform" -params: - seo: - description: Instructions for setting up a sx126x packet transport platform on ESPHome - image: sx126x.png ---- - -The {{< docref "/components/packet_transport" >}} platform allows ESPHome nodes to directly communicate with each over a -communication channel. The {{< docref "/components/sx126x" >}} implementation of the platform uses FSK or -LoRa as a communication medium. See the {{< docref "/components/packet_transport" >}} and {{< docref "/components/sx126x" >}} for more information. - -## Example Configuration - -```yaml -# Example configuration entry -sx126x: - dio1_pin: GPIO14 - cs_pin: GPIO8 - busy_pin: GPIO13 - rst_pin: GPIO12 - pa_power: 3 - bandwidth: 125_0kHz - crc_enable: true - frequency: 433.92MHz - modulation: LORA - hw_version: sx1262 - rf_switch: true - sync_value: [0x14, 0x24] - preamble_size: 8 - spreading_factor: 7 - coding_rate: CR_4_6 - tcxo_voltage: 1_8V - tcxo_delay: 5ms - -packet_transport: - platform: sx126x - sensors: - - dht_temp - -sensor: - - platform: dht - id: dht - pin: GPIOXX - temperature: - name: "Temperature" - id: dht_temp -``` - -## See Also - -- {{< docref "/components/packet_transport" >}} -- {{< docref "/components/sx126x" >}} -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} -- {{< docref "/automations" >}} -- {{< apiref "packet_transport/packet_transport.h" "packet_transport/packet_transport.h" >}} diff --git a/content/components/packet_transport/sx127x.md b/content/components/packet_transport/sx127x.md deleted file mode 100644 index 3b3e198284..0000000000 --- a/content/components/packet_transport/sx127x.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -description: "Instructions for setting up a sx127x packet transport platform on ESPHome" -title: "SX127x Packet Transport Platform" -params: - seo: - description: Instructions for setting up a sx127x packet transport platform on ESPHome - image: sx127x.png ---- - -The {{< docref "/components/packet_transport" >}} platform allows ESPHome nodes to directly communicate with each over a -communication channel. The {{< docref "/components/sx127x" >}} implementation of the platform uses FSK, OOK or -LoRa as a communication medium. See the {{< docref "/components/packet_transport" >}} and {{< docref "/components/sx127x" >}} for more information. - -## Example Configuration - -```yaml -# Example configuration entry -sx127x: - dio0_pin: GPIO26 - cs_pin: GPIO18 - rst_pin: GPIO23 - pa_pin: BOOST - pa_power: 8 - bandwidth: 125_0kHz - crc_enable: true - frequency: 433.92MHz - modulation: LORA - rx_start: true - sync_value: 0x33 - spreading_factor: 7 - coding_rate: CR_4_5 - -packet_transport: - platform: sx127x - sensors: - - dht_temp - -sensor: - - platform: dht - id: dht - pin: GPIOXX - temperature: - name: "Temperature" - id: dht_temp -``` - -## See Also - -- {{< docref "/components/packet_transport" >}} -- {{< docref "/components/sx127x" >}} -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} -- {{< docref "/automations" >}} -- {{< apiref "packet_transport/packet_transport.h" "packet_transport/packet_transport.h" >}} diff --git a/content/components/packet_transport/uart.md b/content/components/packet_transport/uart.md deleted file mode 100644 index bd19abd4d6..0000000000 --- a/content/components/packet_transport/uart.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -description: "Instructions for setting up a UART packet transport platform on ESPHome" -title: "UART Packet Transport Platform" -params: - seo: - description: Instructions for setting up a UART packet transport platform on ESPHome - image: uart.svg ---- - -{{< anchor "uart-packet-transport" >}} - -The {{< docref "/components/packet_transport" >}} platform allows ESPHome nodes to directly communicate with each over a communication channel. -The UART implementation of the platform uses a serial port as a communication medium. See the {{< docref "/components/packet_transport" >}} and {{< docref "/components/uart" >}} for more information. - -## Example Configuration - -```yaml -# Example configuration entry -packet_transport: - platform: uart - sensors: - - dht_temp - -uart: - tx_pin: GPIOXX - rx_pin: GPIOXX - baud_rate: 9600 - -sensor: - - platform: dht - id: dht - pin: GPIOXX - temperature: - name: "Temperature" - id: dht_temp -``` - -## See Also - -- {{< docref "/components/packet_transport" >}} -- {{< docref "/components/uart" >}} -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} -- {{< docref "/automations" >}} -- {{< apiref "packet_transport/packet_transport.h" "packet_transport/packet_transport.h" >}} diff --git a/content/components/packet_transport/udp.md b/content/components/packet_transport/udp.md deleted file mode 100644 index 94b4b06b08..0000000000 --- a/content/components/packet_transport/udp.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -description: "Instructions for setting up a udp packet transport platform on ESPHome" -title: "UDP Packet Transport Platform" -params: - seo: - description: Instructions for setting up a udp packet transport platform on ESPHome - image: udp.svg ---- - -{{< anchor "udp-packet-transport" >}} - -The {{< docref "/components/packet_transport" >}} platform allows ESPHome nodes to directly communicate with each over a communication channel. -The UDP implementation of the platform uses UDP as a communication medium. See the {{< docref "/components/packet_transport" >}} and {{< docref "/components/udp" >}} for more information. - -## Example Configuration - -```yaml -# Example configuration entry -packet_transport: - platform: udp - sensors: - - dht_temp - -udp: - -sensor: - - platform: dht - id: dht - pin: GPIOXX - temperature: - name: "Temperature" - id: dht_temp -``` - -## See Also - -- {{< docref "/components/packet_transport" >}} -- {{< docref "/components/udp" >}} -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} -- {{< docref "/automations" >}} -- {{< apiref "packet_transport/packet_transport.h" "packet_transport/packet_transport.h" >}} diff --git a/content/components/sensor/filter/multiply.md b/content/components/sensor/filter/multiply.md deleted file mode 100644 index c796e99994..0000000000 --- a/content/components/sensor/filter/multiply.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -description: "" -headless: true ---- - -Multiplies each value by a templatable value. - -{{< anchor "sensor-filter-calibrate_linear" >}} diff --git a/content/components/sensor/hdc2010.md b/content/components/sensor/hdc2010.md deleted file mode 100644 index 317a9e8c3b..0000000000 --- a/content/components/sensor/hdc2010.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -description: "Instructions for setting up HDC2010 temperature and humidity sensors." -title: "HDC2010 High Precision Temperature and Humidity Sensor" -params: - seo: - description: Instructions for setting up HDC2010 temperature and humidity sensors. - image: hdc2010.png ---- - -The HDC2010 Temperature and Humidity sensor allows you to use your HDC2010 -([datasheet](https://www.ti.com/lit/ds/symlink/hdc2010.pdf), -[Itbrainpower](https://itbrainpower.net/a-gsm/Arduino-HDC2010-sensor_howto)) sensors with -ESPHome. The {{< docref "i2c/" >}} is -required to be set up in your configuration for this sensor to work. - -{{< img src="hdc2010-full.png" alt="Image" caption="HDC2010 Temperature & Humidity Sensor. Image by `Mikroe`." width="50.0%" class="align-center" >}} - -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} - -```yaml -# Example configuration entry -sensor: - - platform: hdc2010 - temperature: - name: "Living Room Temperature" - humidity: - name: "Living Room Humidity" - update_interval: 60s -``` - -## Configuration variables - -- **temperature** (**Required**): The information for the temperature sensor. - - - All options from {{< docref "sensor/" >}}. - -- **humidity** (**Required**): The information for the humidity sensor - - - All options from {{< docref "sensor/" >}}. - -- **update_interval** (*Optional*, {{< docref "time/" >}}): The interval to check the sensor. Defaults to `60s`. - -## See Also - -- {{< docref "sensor/#sensor-filters" >}} -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "hdc2010/hdc2010.h" "hdc2010/hdc2010.h" >}} diff --git a/content/components/sensor/hlw8012.md b/content/components/sensor/hlw8012.md deleted file mode 100644 index 88a4713078..0000000000 --- a/content/components/sensor/hlw8012.md +++ /dev/null @@ -1,262 +0,0 @@ ---- -description: "Instructions for setting up HLW8012 power sensors for the Sonoff Pow R1" -title: "HLW8012 Power Sensor" -params: - seo: - description: Instructions for setting up HLW8012 power sensors for the Sonoff Pow R1 - image: hlw8012.svg ---- - -The `hlw8012` sensor platform allows you to use your HLW8012 voltage/current and power sensors -([datasheet](https://github.com/xoseperez/hlw8012/blob/master/docs/HLW8012.pdf)) sensors with -ESPHome. This sensor is commonly found in Sonoff POWs. CSE7759 and BL0937 are similar to HLW8012 -and work with this component. Beware that CSE7759B is different and should be used with the -{{< docref "cse7766" "CSE7766" >}} component. - -> [!NOTE] -> SAFETY HAZARD: Some devices such as Sonoff POWs/Shelly/etc, have the digital GND connected directly to mains -> voltage so **the GPIOs become LIVE during normal operation**. Our advice is to mark these boards to prevent -> any use of the dangerous digital pins. - -This sensor has two data outputs which both encode values using the frequency of a modulated signal: CF and CF1. -CF's frequency is proportional to the (active) power measured and CF1 is proportional to the current/voltage. Using -the SEL pin, one can choose between which mode to use. - -ESPHome will continuously cycle the state of the SEL pin to measure current *and* voltage, though both cannot -be measured at the same exact points in time. - -```yaml -# Example configuration entry -sensor: - - platform: hlw8012 - sel_pin: GPIOXX - cf_pin: GPIOXX - cf1_pin: GPIOXX - current: - name: "HLW8012 Current" - voltage: - name: "HLW8012 Voltage" - power: - name: "HLW8012 Power" - energy: - name: "HLW8012 Energy" - update_interval: 60s -``` - -> [!NOTE] -> The configuration above should work for Sonoff POWs (R1). - -## Configuration variables - -- **sel_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The pin SEL is connected to. -- **cf_pin** (**Required**, [Pin](/guides/configuration-types#pin)): The pin CF is connected to. -- **cf1_pin** (**Required**, [Pin](/guides/configuration-types#pin)): The pin CF1 is connected to. -- **current** (*Optional*): Use the current value of the sensor in amperes. All options from - [Sensor](/components/sensor). - -- **power** (*Optional*): Use the (active) power value of the sensor in watts. All options from - [Sensor](/components/sensor). - -- **voltage** (*Optional*): Use the voltage value of the sensor in V (RMS). - All options from [Sensor](/components/sensor). - -- **energy** (*Optional*): Use the total energy value of the sensor in Wh. - All options from [Sensor](/components/sensor). - -- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. - -Advanced Options: - -- **current_resistor** (*Optional*, float): The value of the shunt resistor for current measurement. - Defaults to the Sonoff POW's value `0.001 ohm`. - -- **voltage_divider** (*Optional*, float): The value of the voltage divider on the board as `(R_upstream + R_downstream) / R_downstream`. - Defaults to the Sonoff POW's value `2351`. - -- **model** (*Optional*, string): The sensor model on the board, to set internal constant factors to convert pulses to measurements. - Possible values are `HLW8012`, `CSE7759`, `BL0937`. Defaults to `HLW8012`. - CSE7759 uses same constants and it also works with default. Must be set for BL0937 to be able to calibrate all three measurements at the same time. - -- **change_mode_every** (*Optional*, int): After how many updates to cycle between the current/voltage measurement mode. - Note that the first value after switching is discarded because it is often inaccurate. When set to `"never"` the measurement mode will stay at the - set `initial_mode`. Defaults to `8`. - -- **initial_mode** (*Optional*, string): The initial measurement mode. Defaults to `VOLTAGE`. - Possible initial measurement modes are `VOLTAGE` or `CURRENT`. - -## Permanent SEL Pin - -Some devices have the SEL pin permanently pulled high or low. If this is the case, you can configure -the initial measurement mode to match whichever mode the device uses, and disable mode switching. - -```yaml -# Example configuration entry for device with fixed measurement mode -sensor: - - platform: hlw8012 - sel_pin: GPIOXX - cf_pin: GPIOXX - cf1_pin: GPIOXX - current: - name: "HLW8012 Current" - voltage: - name: "HLW8012 Voltage" - power: - name: "HLW8012 Power" - update_interval: 60s - initial_mode: CURRENT - change_mode_every: "never" -``` - -## SEL Pin Inversion - -If using model `BL0937` the function of the SEL pin is inverted compared to default. When SEL=0 current is measured, -when SEL=1 voltage is measured. To accommodate this change use the following configuration: - -```yaml -# Example configuration entry for device BL0937 using inverted SEL pin functionality -sensor: - - platform: hlw8012 - model: BL0937 - sel_pin: - number: GPIOXX - inverted: true - cf_pin: GPIOXX - cf1_pin: GPIOXX - current: - name: "BL0937 Current" - voltage: - name: "BL0937 Voltage" - power: - name: "BL0937 Power" - update_interval: 60s -``` - -## Calibration - -What you need: - -- Your ESPHome power measurement plug -- A calibrated power meter that can measure voltage, current, power and power factor -- A large resistive load like an electric heater or kettle, ideally over 1000W - -Steps: - -- Find the currently used calibration values for `current_resistor` and `voltage_divider` in your device's YAML configuration or upload a new firmware with some known calibration values to the ESP. -- Plug the ESP power measurement plug into the calibrated power meter. -- Plug the load into the ESP plug. -- Turn on the load and make sure the power factor (PF) displayed on the power meter is 1.0. If it's not, you need to pick a different load. -- Wait for the readings to settle on both the power meter and the ESP. -- Write down the voltage reading of the power meter and the ESP at the same time. -- Write down the power reading of the power meter and the ESP at the same time. -- Write down the current reading of the power meter and the ESP at the same time. -- Use the calculator below to calculate the new calibration values for the ESP. These values will help it accurately measure power, voltage and current in the future. -- Upload the new values to the ESP. - - -| Calibration values on the ESP | -| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| voltage_divider | | -| current_resistor | | -| current_multiply | | - -| ESP measurements | -| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Voltage | V | -| Power | W | -| Current | A | - -| Power meter measurements | -| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Voltage | V | -| Power | W | -| Current | A | - -| New calibration values | -| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| voltage_divider | | -| current_resistor | | -| current_multiply | | - -| New ESP measurements | -| -------------------- | ------------------------------------------------------------------------------------------------------------------ | -| Voltage | V | -| Power | W | -| Current | A | - - - - -Example Config: - -```yaml -substitutions: - voltage_divider: "2351" - current_resistor: "0.001" - current_multiply: "1.0" - -sensor: - - platform: hlw8012 - current_resistor: ${current_resistor} - voltage_divider: ${voltage_divider} - current: - name: "HLW8012 Current" - filters: - - multiply: ${current_multiply} - voltage: - name: "HLW8012 Voltage" - power: - name: "HLW8012 Power" - energy: - name: "HLW8012 Energy" - update_interval: 60s -``` - -## See Also - -- [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "hlw8012/hlw8012.h" "hlw8012/hlw8012.h" >}} -- [HLW8012 Library](https://github.com/xoseperez/hlw8012) by [Xose Pérez](https://github.com/xoseperez) diff --git a/content/components/switch/restart.md b/content/components/switch/restart.md deleted file mode 100644 index 73d94c4ad6..0000000000 --- a/content/components/switch/restart.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -description: "Instructions for setting up switches that can remotely reboot the ESP in ESPHome." -title: "Restart Switch" -params: - seo: - description: Instructions for setting up switches that can remotely reboot the ESP in ESPHome. - image: restart.svg ---- - -The `restart` switch platform allows you to restart your node remotely -through Home Assistant. - -{{< img src="restart-ui.png" alt="Image" width="80.0%" class="align-center" >}} - -```yaml -# Example configuration entry -switch: - - platform: restart - name: "Living Room Restart" -``` - -## Configuration variables - -- All options from [Switch](/components/switch#config-switch). - -## See Also - -- {{< docref "shutdown/" >}} -- {{< docref "safe_mode/" >}} -- {{< docref "factory_reset/" >}} -- {{< docref "/components/button/restart" >}} -- {{< docref "template/" >}} -- {{< apiref "restart/switch/restart_switch.h" "restart/switch/restart_switch.h" >}} diff --git a/content/components/switch/safe_mode.md b/content/components/switch/safe_mode.md deleted file mode 100644 index d7bba4d20a..0000000000 --- a/content/components/switch/safe_mode.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -description: "Instructions for setting up switches that can remotely reboot the ESP in ESPHome into safe mode." -title: "Safe Mode Switch" -params: - seo: - description: Instructions for setting up switches that can remotely reboot the ESP in ESPHome into safe mode. - image: restart.svg ---- - -The `safe_mode` switch allows you to remotely reboot your node into {{< docref "/components/safe_mode" >}}. This is useful in certain situations where a misbehaving component, or low memory state is preventing Over-The-Air updates from completing successfully. - -This component requires {{< docref "/components/safe_mode" >}} to be configured. - -{{< img src="safemode-ui.png" alt="Image" width="80.0%" class="align-center" >}} - -```yaml -# Example configuration entry -switch: - - platform: safe_mode - name: "Living Room Restart (Safe Mode)" -``` - -## Configuration variables - -- All options from [Switch](/components/switch#config-switch). - -## See Also - -- {{< docref "shutdown/" >}} -- {{< docref "restart/" >}} -- {{< docref "factory_reset/" >}} -- {{< docref "/components/button/safe_mode" >}} -- {{< docref "template/" >}} -- {{< apiref "safe_mode/safe_mode_switch.h" "safe_mode/safe_mode_switch.h" >}} diff --git a/content/images/_index.md b/content/images/_index.md deleted file mode 100644 index 63e191291c..0000000000 --- a/content/images/_index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -description: "Images" -title: "Images" -build: {render: never} ---- - -This is a dummy file to include images in the sphinx output -that will only be used in raw HTML and thus not auto-included. - -{{< img src="hero.png" alt="" >}} - -{{< img src="logo.svg" alt="" >}} - -{{< img src="logo-docs.svg" alt="" >}} - -{{< html_file file="images/logo-text.svg" >}} diff --git a/content/projects/_index.md b/content/projects/_index.md deleted file mode 100644 index ad3f7c80c5..0000000000 --- a/content/projects/_index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -description: "Install ready-made projects directly on your device." -title: "Ready-Made Projects" -layout: "projects" -params: - seo: - description: Install ready-made projects directly on your device. - image: auto-fix.svg ---- - -{{< anchor "ready_made_projects" >}} - -Unleash the potential of your device by installing ready-made ESPHome -projects from this page. Connect your device to your PC, a few clicks in the browser -and your ESPHome device is ready to do its magic - as a Bluetooth proxy or a media player. -No programming or other software required. diff --git a/hugo.yaml b/hugo.yaml deleted file mode 100644 index a77d29bfd4..0000000000 --- a/hugo.yaml +++ /dev/null @@ -1,192 +0,0 @@ -baseURL: "" -languageCode: en-us -title: ESPHome - Smart Home Made Simple -theme: esphome-theme -enableGitInfo: true - -security: - funcs: - getenv: ['^HUGO_', '^CI$', 'NETLIFY', 'REPOSITORY_URL', 'BRANCH', 'COMMIT_REF'] - -params: - description: ESPHome - Smart Home Made Simple. ESPHome turns ESP32, ESP8266, and RP2040 microcontrollers into fully-featured smart home devices. - images: - - logo.svg - api_docs_url: https://api-docs.esphome.io - math: true - - - # Social media links - social: - - name: GitHub - url: https://github.com/esphome/esphome - - name: Discord - url: https://discord.gg/KhAMKrd - - name: Forums - url: https://community.home-assistant.io/c/esphome/ - -menu: - main: - - name: "Getting Started" - weight: 10 - identifier: "getting-started" - - name: "From Home Assistant" - url: "/guides/getting_started_hassio/" - weight: 11 - parent: "getting-started" - - name: "Using Command Line" - url: "/guides/getting_started_command_line/" - weight: 12 - parent: "getting-started" - - name: "Ready-Made Projects" - url: "/projects/" - weight: 13 - parent: "getting-started" - - name: "Migrate from Tasmota" - url: "/guides/migrate_sonoff_tasmota/" - weight: 14 - parent: "getting-started" - - name: "FAQ and Tips" - url: "/guides/faq/" - weight: 15 - parent: "getting-started" - - - name: "Next Steps" - weight: 20 - identifier: "next-steps" - - name: "Documentation" - url: "/components/" - weight: 21 - parent: "next-steps" - - name: "Automations" - url: "/automations/" - weight: 22 - parent: "next-steps" - - name: "Configuration Types" - url: "/guides/configuration-types/" - weight: 23 - parent: "next-steps" - - name: "Device Examples" - url: "https://devices.esphome.io/" - weight: 24 - parent: "next-steps" - - name: "DIY Examples" - url: "/guides/diy/" - weight: 25 - parent: "next-steps" - - name: "Sharing ESPHome Devices" - url: "/guides/creators/" - weight: 26 - parent: "next-steps" - - name: "Made for ESPHome" - url: "/guides/made_for_esphome/" - weight: 27 - parent: "next-steps" - - - name: "Keeping Up" - weight: 30 - identifier: "keeping-up" - - name: "Changelog" - url: "/changelog/" - weight: 31 - parent: "keeping-up" - - name: "Discord" - url: "https://discord.gg/KhAMKrd" - weight: 32 - parent: "keeping-up" - - name: "Forums" - url: "https://community.home-assistant.io/c/esphome/" - weight: 33 - parent: "keeping-up" - - name: "Development" - url: "https://developers.esphome.io" - weight: 34 - parent: "keeping-up" - - name: "Supporters" - url: "/guides/supporters/" - weight: 35 - parent: "keeping-up" - footer: - - name: Documentation - weight: 1 - - { parent: Documentation, url: "components/", post: "puzzle-piece", name: Components} - - { parent: Documentation, url: "guides/", post: "compass", name: Guides} - - { parent: Documentation, url: "automations/", post: "magic", name: Automations} - - { parent: Documentation, url: "cookbook/", post: "kitchen-set", name: Cookbook} - - - name: Community - weight: 2 - - { parent: Community, url: "https://discord.gg/KhAMKrd", post: "discord", name: Discord} - - { parent: Community, url: "https://github.com/esphome/esphome", post: "github", name: Github} - - { parent: Community, url: "https://community.home-assistant.io/c/esphome/", post: "comments", name: Forum} - - - name: Resources - weight: 1000 - - { parent: Resources, url: "changelog/", post: "history", name: Changelog} - - { parent: Resources, url: "https://devices.esphome.io", post: "microchip", name: "Device Database"} - - { parent: Resources, url: "https://developers.esphome.io", post: "code", name: Development} - -markup: - highlight: - codeFences: true - guessSyntax: false - lineNos: false - noClasses: false - goldmark: - renderer: - unsafe: true # Allow HTML in markdown files - extensions: - footnote: true - tableOfContents: - startLevel: 1 - endLevel: 3 - ordered: true - - -outputs: - home: - - HTML - - RSS - - ComponentsJSON - -# Static file configuration -staticDir: - - static - -mediaTypes: - image/svg+xml: - suffixes: - - svg - -outputFormats: - SVG: - mediaType: image/svg+xml - isPlainText: true - isHTML: false - ComponentsJSON: - mediaType: application/json - baseName: components - isPlainText: true - isHTML: false - path: "" - -module: - mounts: - - disableWatch: false - source: static - target: static - - disableWatch: false - source: pagefind - target: assets/pagefind - - disableWatch: false - source: static/images - target: assets/images - - disableWatch: true - source: assets - target: assets - - disableWatch: false - source: pagefind - target: static/pagefind - - disableWatch: false - source: static/images - target: static/images diff --git a/lint.mjs b/lint.mjs new file mode 100755 index 0000000000..61da60bf64 --- /dev/null +++ b/lint.mjs @@ -0,0 +1,447 @@ +#!/usr/bin/env node + +import { readFile, stat, readdir } from 'fs/promises'; +import { join, relative, basename, dirname, extname } from 'path'; +import { execSync } from 'child_process'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// ANSI color codes +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + dim: '\x1b[2m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + cyan: '\x1b[36m', + boldRed: '\x1b[1;31m', + boldGreen: '\x1b[1;32m', +}; + +// Folders to ignore +const ignoreFolders = [ + 'pagefind/', + 'node_modules/', + 'dist/', + '.astro/', +]; + +// File types +const fileTypes = [ + '.cfg', '.css', '.gif', '.h', '.html', '.ico', '.jpg', '.js', '.json', + '.md', '.mdx', '.png', '.py', '.svg', '.toml', '.txt', '.webmanifest', + '.xml', '.yaml', '.yml', '.mjs', '.ts', '.tsx', '.astro', '.sh', '.webp', + '' // empty string for files without extension (like .gitignore) +]; +const imageTypes = ['.webp', '.jpg', '.ico', '.png', '.svg', '.gif']; + +// Store errors +const errors = new Map(); + +function addError(fname, lineno, col, msg) { + if (!errors.has(fname)) { + errors.set(fname, []); + } + errors.get(fname).push({ lineno, col, msg }); +} + +// Get files from git +function getGitFiles() { + try { + const output = execSync('git ls-files -s', { encoding: 'utf-8' }); + const files = new Map(); + + for (const line of output.trim().split('\n')) { + const parts = line.split(/\s+/); + if (parts.length >= 4) { + const mode = parseInt(parts[0]); + const path = parts.slice(3).join(' '); + files.set(path, mode); + } + } + + return files; + } catch (error) { + console.error('Error getting git files:', error.message); + return new Map(); + } +} + +// Find all occurrences of a substring +function* findAll(content, substring) { + const lines = content.split('\n'); + for (let i = 0; i < lines.length; i++) { + let col = 0; + while (true) { + col = lines[i].indexOf(substring, col); + if (col === -1) break; + yield { line: i + 1, col: col + 1 }; + col += substring.length; + } + } +} + +// File checks +async function checkFileExtension(fname) { + const ext = extname(fname); + if (!fileTypes.includes(ext)) { + addError(fname, 1, 1, + 'This file extension is not a registered file type. If this is an error, please update lint.mjs.'); + } +} + +async function checkExecutableBit(fname, gitMode) { + const exclude = ['script/', '.devcontainer/', 'lint.py', 'lint.mjs']; + if (exclude.some(ex => fname.startsWith(ex) || fname === ex)) { + return; + } + + if (gitMode !== 100644) { + addError(fname, 1, 1, + `File has invalid executable bit ${gitMode}. If running from a windows machine please see disabling executable bit in git.`); + } +} + +async function checkImageSize(fname, fileStat) { + const ext = extname(fname); + if (!imageTypes.includes(ext)) return; + + if (fileStat.size > 1024 * 1024) { + const sizeKb = Math.floor(fileStat.size / 1024); + addError(fname, 1, 1, + `Image is too large. Images should be 1MB max. Use https://compress-or-die.com/ to reduce size. Current size: ${sizeKb}kb`); + } +} + +// Content checks +function checkTabs(fname, content) { + if (fname === 'Makefile') return; + + for (const { line, col } of findAll(content, '\t')) { + addError(fname, line, col, 'File contains tab character. Please convert tabs to spaces.'); + return; // Only report first occurrence + } +} + +function checkNewlines(fname, content) { + for (const { line, col } of findAll(content, '\r')) { + addError(fname, line, col, 'File contains Windows newline. Please set your editor to Unix newline mode.'); + return; // Only report first occurrence + } +} + +function checkEndNewline(fname, content) { + const exclude = ['.svg', 'runtime.txt']; + if (exclude.some(ex => fname.endsWith(ex)) || fname.includes('_static/')) { + return; + } + + if (content && !content.endsWith('\n')) { + addError(fname, 1, 1, 'File does not end with a newline, please add an empty line at the end of the file.'); + } +} + +function checkEsphomeLinks(fname, content) { + if (!fname.endsWith('.md') && !fname.endsWith('.mdx')) return; + + const linkPattern = /\[([^\]]+)\]\((https:\/\/esphome\.io\/[^)]+)\)/g; + let match; + + while ((match = linkPattern.exec(content)) !== null) { + const lineno = content.substring(0, match.index).split('\n').length; + const col = match.index - content.lastIndexOf('\n', match.index); + const linkText = match[1]; + const fullUrl = match[2]; + + addError(fname, lineno, col, + `Markdown link to esphome.io should use relative path. Change [${linkText}](${fullUrl}) to use a relative URL`); + } +} + +// Build anchor cache for link validation +async function buildAnchorCache() { + const cache = new Map(); + const contentDir = join(__dirname, 'src/content/docs'); + + try { + await stat(contentDir); + } catch { + return cache; + } + + function generateSlug(text) { + return text + .toLowerCase() + .replace(/[^\w\s-]/g, '') + .replace(/[-\s]+/g, '-') + .replace(/^-+|-+$/g, ''); + } + + async function processDir(dir, basePath = '') { + const entries = await readdir(dir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = join(dir, entry.name); + const relPath = basePath ? join(basePath, entry.name) : entry.name; + + if (entry.isDirectory()) { + await processDir(fullPath, relPath); + } else if (entry.name.endsWith('.md') || entry.name.endsWith('.mdx')) { + let pagePath; + if (entry.name === 'index.md' || entry.name === 'index.mdx') { + pagePath = basePath || ''; + } else { + pagePath = relPath.replace(/\.mdx?$/, ''); + } + + pagePath = pagePath.replace(/\\/g, '/'); + + const content = await readFile(fullPath, 'utf-8'); + const anchors = new Set(); + + for (const line of content.split('\n')) { + // Match headings + const headingMatch = line.match(/^(#{1,6})\s+(.*)/); + if (headingMatch) { + const headingText = headingMatch[2].trim(); + const anchorId = generateSlug(headingText); + anchors.add(anchorId); + } + + // Match anchor shortcodes (old Hugo style) + const shortcodeMatch = line.match(/\{\{<\s*anchor\s+"([^\s>]+)"\s*>}}/); + if (shortcodeMatch) { + anchors.add(shortcodeMatch[1]); + } + + // Match HTML anchor spans + const spanMatch = line.match(/<\/span>/); + if (spanMatch) { + anchors.add(spanMatch[1]); + } + } + + cache.set(pagePath, anchors); + } + } + } + + await processDir(contentDir); + return cache; +} + +async function checkInternalLinks(fname, content, anchorCache) { + if (!fname.endsWith('.md') && !fname.endsWith('.mdx')) return; + + // Skip template and documentation files with example links + const ignoreFiles = [ + '.claude/instructions.md', + 'script/release_notes_template.md', + ]; + if (ignoreFiles.includes(fname)) return; + + const linkPattern = /\[([^\]]+)\]\(([^)]+)\)/g; + let match; + + while ((match = linkPattern.exec(content)) !== null) { + const linkText = match[1]; + const linkUrl = match[2]; + const lineno = content.substring(0, match.index).split('\n').length; + const col = match.index - content.lastIndexOf('\n', match.index); + + // Skip external links + if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(linkUrl)) { + continue; + } + + // Check anchor-only links + if (linkUrl.startsWith('#')) { + const anchorId = linkUrl.substring(1); + + // Get current page path + let currentPage; + try { + if (fname.includes('src/content/docs/')) { + const relPath = fname.split('src/content/docs/')[1]; + if (basename(relPath) === 'index.md' || basename(relPath) === 'index.mdx') { + currentPage = dirname(relPath) === '.' ? '' : dirname(relPath); + } else { + currentPage = relPath.replace(/\.mdx?$/, ''); + } + currentPage = currentPage.replace(/\\/g, '/'); + + if (anchorCache.has(currentPage)) { + if (!anchorCache.get(currentPage).has(anchorId)) { + addError(fname, lineno, col, + `Anchor-only link '#${anchorId}' not found on current page. If this should link to another page, use the full path like [${linkText}](/path/to/page#${anchorId})`); + } + } + } + } catch (e) { + // Skip if not in content directory + } + continue; + } + + // Skip relative links to static assets + if (!linkUrl.startsWith('/') && /\.(png|jpg|jpeg|gif|svg|webp|pdf|zip)$/i.test(linkUrl)) { + continue; + } + + // Skip absolute links to static assets + if (linkUrl.startsWith('/images/') && /\.(png|jpg|jpeg|gif|svg|webp|pdf|zip)$/i.test(linkUrl)) { + continue; + } + + // Skip links with spaces or parentheses (likely code) + if (linkUrl.includes(' ') || linkUrl.includes('(') || linkUrl.includes(')')) { + continue; + } + + // Skip relative links without leading slash + if (!linkUrl.startsWith('/')) { + continue; + } + + // Parse internal link + let pathPart, anchorPart; + if (linkUrl.includes('#')) { + [pathPart, anchorPart] = linkUrl.split('#', 2); + } else { + pathPart = linkUrl; + anchorPart = null; + } + + // Skip paths with query strings or .html + if (pathPart.includes('?') || pathPart.includes('.html')) { + continue; + } + + // Remove leading slash and trailing slash + const cleanPath = pathPart.replace(/^\/+/, '').replace(/\/+$/, ''); + + // Check if page exists + // Try both with and without '/index' suffix since both are valid + const pathsToCheck = [cleanPath]; + if (cleanPath.endsWith('/index')) { + pathsToCheck.push(cleanPath.replace(/\/index$/, '')); + } else if (cleanPath !== '') { + pathsToCheck.push(cleanPath + '/index'); + } + + const pageExists = pathsToCheck.some(p => anchorCache.has(p) || p === ''); + if (!pageExists && cleanPath !== '') { + addError(fname, lineno, col, + `Internal link references non-existent page: '${pathPart}' in link [${linkText}](${linkUrl})`); + continue; + } + + // Validate anchor if present + if (anchorPart && cleanPath) { + // Find the actual page path in cache (might be with or without /index) + let targetPage = cleanPath; + if (!anchorCache.has(targetPage)) { + if (cleanPath.endsWith('/index')) { + targetPage = cleanPath.replace(/\/index$/, ''); + } else { + const withIndex = cleanPath + '/index'; + if (anchorCache.has(withIndex)) { + targetPage = withIndex; + } + } + } + + if (anchorCache.has(targetPage)) { + if (!anchorCache.get(targetPage).has(anchorPart)) { + addError(fname, lineno, col, + `Internal link references non-existent anchor: '#${anchorPart}' on page '${pathPart}' in link [${linkText}](${linkUrl})`); + } + } + } + } +} + +// Main execution +async function main() { + console.log(`${colors.cyan}Running ESPHome documentation linter...${colors.reset}\n`); + + const gitFiles = getGitFiles(); + const anchorCache = await buildAnchorCache(); + + // Process files + for (const [fname, gitMode] of gitFiles) { + // Skip ignored folders + if (ignoreFolders.some(folder => fname.startsWith(folder) || fname.includes(`/${folder}`))) { + continue; + } + + try { + const fileStat = await stat(fname); + + if (!fileStat.isFile()) continue; + + // Run file checks + await checkFileExtension(fname); + await checkExecutableBit(fname, gitMode); + await checkImageSize(fname, fileStat); + + // Skip binary files + if (imageTypes.includes(extname(fname))) { + continue; + } + + // Read and check content + let content; + try { + content = await readFile(fname, 'utf-8'); + } catch (error) { + if (error.message.includes('invalid')) { + addError(fname, 1, 1, 'File is not readable as UTF-8. Please set your editor to UTF-8 mode.'); + continue; + } + throw error; + } + + // Run content checks + checkTabs(fname, content); + checkNewlines(fname, content); + checkEndNewline(fname, content); + checkEsphomeLinks(fname, content); + await checkInternalLinks(fname, content, anchorCache); + + } catch (error) { + if (error.code !== 'ENOENT') { + console.error(`Error processing ${fname}:`, error.message); + } + } + } + + // Print errors + if (errors.size > 0) { + for (const [fname, errs] of [...errors.entries()].sort()) { + console.log(`${colors.boldGreen}### File ${colors.bright}${fname}${colors.reset}\n`); + + for (const { lineno, col, msg } of errs) { + console.log( + `${colors.bright}${fname}:${lineno}:${col}:${colors.reset} ` + + `${colors.bright}${colors.boldRed}lint:${colors.reset} ${msg}` + ); + } + console.log(); + } + + console.log(`${colors.boldRed}Found ${errors.size} file(s) with errors${colors.reset}`); + process.exit(errors.size); + } else { + console.log(`${colors.boldGreen}✓ All checks passed!${colors.reset}`); + process.exit(0); + } +} + +main().catch(error => { + console.error(`${colors.boldRed}Fatal error:${colors.reset}`, error); + process.exit(1); +}); diff --git a/netlify.toml b/netlify.toml index 8e49b9aa22..343815f6e6 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,16 +1,19 @@ [build] - publish = "public" - command = "make netlify" - environment = { HUGO_BASEURL = "https://esphome.io", HUGOxPARAMSxAPI_DOCS_URL = "https://api-docs.esphome.io", PYTHON_VERSION = "3.12", HUGO_VERSION = "0.147.8" } + publish = "dist" + command = "sed -i \"s|{{API_DOCS_URL}}|${API_DOCS_URL}|g\" netlify.toml && npm run build" + +[build.environment] + NODE_VERSION = "20" + API_DOCS_URL = "https://api-docs.esphome.io" [context.beta] - environment = { HUGO_BASEURL = "https://beta.esphome.io", HUGOxPARAMSxAPI_DOCS_URL = "https://api-docs-beta.esphome.io" } + environment = { SITE_URL = "https://beta.esphome.io", API_DOCS_URL = "https://api-docs-beta.esphome.io" } [context.next] - environment = { HUGO_BASEURL = "https://next.esphome.io", HUGOxPARAMSxAPI_DOCS_URL = "https://api-docs-dev.esphome.io" } + environment = { SITE_URL = "https://next.esphome.io", API_DOCS_URL = "https://api-docs-dev.esphome.io" } [context.production] - environment = { HUGO_BASEURL = "https://esphome.io", HUGOxPARAMSxAPI_DOCS_URL = "https://api-docs.esphome.io" } + environment = { SITE_URL = "https://esphome.io", API_DOCS_URL = "https://api-docs.esphome.io" } # Caching HTML - 1 week @@ -25,6 +28,17 @@ [headers.values] Cache-Control = "public, max-age=31536000, immutable" +# Hugo taxonomy pages - redirect to homepage +[[redirects]] + from = "/categories/*" + to = "/" + status = 301 + +[[redirects]] + from = "/tags/*" + to = "/" + status = 301 + [[redirects]] from = "/_images/*" to = "/images/:splat" @@ -41,11 +55,10 @@ status = 301 to = "https://discord.gg/KhAMKrd" status = 301 -# This redirect is for the api docs that have been moved. -# It is replaced by sed in the makefile when netlify is building the site. +# API docs redirect - substituted per environment by build command [[redirects]] from = "/api/*" - to = "{{HUGOxPARAMSxAPI_DOCS_URL}}/:splat" + to = "{{API_DOCS_URL}}/:splat" status = 301 # Webserver files @@ -328,3 +341,10 @@ status = 301 from = "/components/display/qspi_amoled.html" to = "/components/display/mipi_spi.html" status = 301 + +# Starlight URL compatibility - trailing slash redirects +# Hugo used .html extensions, Starlight uses trailing slashes +[[redirects]] + from = "/*.html" + to = "/:splat/" + status = 301 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..58ac993f69 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7697 @@ +{ + "name": "esphome-docs", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "esphome-docs", + "version": "2.0.0", + "license": "CC-BY-4.0", + "dependencies": { + "@astrojs/starlight": "^0.37.6", + "astro": "^5.16.15", + "katex": "^0.16.28", + "rehype-katex": "^7.0.1", + "remark-github-blockquote-alert": "^2.0.1", + "remark-math": "^6.0.0", + "sharp": "^0.33.5", + "starlight-blog": "^0.25.2" + }, + "devDependencies": { + "jsdom": "^28.0.0" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.1.2.tgz", + "integrity": "sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^3.0.0", + "@csstools/css-color-parser": "^4.0.1", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.2.5" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.7.8", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.8.tgz", + "integrity": "sha512-stisC1nULNc9oH5lakAj8MH88ZxeGxzyWNDfbdCxvJSJIvDsHNZqYvscGTgy/ysgXWLJPt6K/4t0/GjvtKcFJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.5" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@astrojs/compiler": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", + "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.19.0", + "smol-toml": "^1.5.2", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.2", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/mdx": { + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.13.tgz", + "integrity": "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "6.3.10", + "@mdx-js/mdx": "^3.1.1", + "acorn": "^8.15.0", + "es-module-lexer": "^1.7.0", + "estree-util-visit": "^2.0.0", + "hast-util-to-html": "^9.0.5", + "piccolore": "^0.1.3", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-smartypants": "^3.0.2", + "source-map": "^0.7.6", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.3" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + }, + "peerDependencies": { + "astro": "^5.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/rss": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.15.tgz", + "integrity": "sha512-uXO/k6AhRkIDXmRoc6xQpoPZrimQNUmS43X4+60yunfuMNHtSRN5e/FiSi7NApcZqmugSMc5+cJi8ovqgO+qIg==", + "license": "MIT", + "dependencies": { + "fast-xml-parser": "^5.3.3", + "piccolore": "^0.1.3" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.0.tgz", + "integrity": "sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.2", + "stream-replace-string": "^2.0.0", + "zod": "^3.25.76" + } + }, + "node_modules/@astrojs/starlight": { + "version": "0.37.6", + "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.37.6.tgz", + "integrity": "sha512-wQrKwH431q+8FsLBnNQeG+R36TMtEGxTQ2AuiVpcx9APcazvL3n7wVW8mMmYyxX0POjTnxlcWPkdMGR3Yj1L+w==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "^6.3.1", + "@astrojs/mdx": "^4.2.3", + "@astrojs/sitemap": "^3.3.0", + "@pagefind/default-ui": "^1.3.0", + "@types/hast": "^3.0.4", + "@types/js-yaml": "^4.0.9", + "@types/mdast": "^4.0.4", + "astro-expressive-code": "^0.41.1", + "bcp-47": "^2.1.0", + "hast-util-from-html": "^2.0.1", + "hast-util-select": "^6.0.2", + "hast-util-to-string": "^3.0.0", + "hastscript": "^9.0.0", + "i18next": "^23.11.5", + "js-yaml": "^4.1.0", + "klona": "^2.0.6", + "magic-string": "^0.30.17", + "mdast-util-directive": "^3.0.0", + "mdast-util-to-markdown": "^2.1.0", + "mdast-util-to-string": "^4.0.0", + "pagefind": "^1.3.0", + "rehype": "^13.0.1", + "rehype-format": "^5.0.0", + "remark-directive": "^3.0.0", + "ultrahtml": "^1.6.0", + "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.2" + }, + "peerDependencies": { + "astro": "^5.5.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@capsizecss/unpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz", + "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.1.tgz", + "integrity": "sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.0.1.tgz", + "integrity": "sha512-bsDKIP6f4ta2DO9t+rAbSSwv4EMESXy5ZIvzQl1afmD6Z1XHkVu9ijcG9QR/qSgQS1dVa+RaQ/MfQ7FIB/Dn1Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.1.tgz", + "integrity": "sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.0.1", + "@csstools/css-calc": "^3.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.27.tgz", + "integrity": "sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0" + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz", + "integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.13.0.tgz", + "integrity": "sha512-VnfL2lS43Z9F8li1faMH9hDZwqfrF5JvOePmrF8oESfo0ijaujnT81zYtienQRpoFa+FJbq0E5rrnMWEW73gOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@expressive-code/core": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.41.6.tgz", + "integrity": "sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.0.4", + "hast-util-select": "^6.0.2", + "hast-util-to-html": "^9.0.1", + "hast-util-to-text": "^4.0.1", + "hastscript": "^9.0.0", + "postcss": "^8.4.38", + "postcss-nested": "^6.0.1", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1" + } + }, + "node_modules/@expressive-code/plugin-frames": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.41.6.tgz", + "integrity": "sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6" + } + }, + "node_modules/@expressive-code/plugin-shiki": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.41.6.tgz", + "integrity": "sha512-Y6zmKBmsIUtWTzdefqlzm/h9Zz0Rc4gNdt2GTIH7fhHH2I9+lDYCa27BDwuBhjqcos6uK81Aca9dLUC4wzN+ng==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6", + "shiki": "^3.2.2" + } + }, + "node_modules/@expressive-code/plugin-text-markers": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.41.6.tgz", + "integrity": "sha512-PBFa1wGyYzRExMDzBmAWC6/kdfG1oLn4pLpBeTfIRrALPjcGA/59HP3e7q9J0Smk4pC7U+lWkA2LHR8FYV8U7Q==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "license": "MIT" + }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/default-ui": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.4.0.tgz", + "integrity": "sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==", + "license": "MIT" + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz", + "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz", + "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", + "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz", + "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz", + "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.22.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.17.1.tgz", + "integrity": "sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==", + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.13.0", + "@astrojs/internal-helpers": "0.7.5", + "@astrojs/markdown-remark": "6.3.10", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^4.0.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.3.0", + "acorn": "^8.15.0", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.3.1", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.1.1", + "cssesc": "^3.0.0", + "debug": "^4.4.3", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.6.2", + "diff": "^8.0.3", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.7.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.4.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.2.0", + "import-meta-resolve": "^4.2.0", + "js-yaml": "^4.1.1", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.1", + "package-manager-detector": "^1.6.0", + "piccolore": "^0.1.3", + "picomatch": "^4.0.3", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.3", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", + "svgo": "^4.0.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tsconfck": "^3.1.6", + "ultrahtml": "^1.6.0", + "unifont": "~0.7.3", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.17.4", + "vfile": "^6.0.3", + "vite": "^6.4.1", + "vitefu": "^1.1.1", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.3", + "zod": "^3.25.76", + "zod-to-json-schema": "^3.25.1", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.34.0" + } + }, + "node_modules/astro-expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.41.6.tgz", + "integrity": "sha512-l47tb1uhmVIebHUkw+HEPtU/av0G4O8Q34g2cbkPvC7/e9ZhANcjUUciKt9Hp6gSVDdIuXBBLwJQn2LkeGMOAw==", + "license": "MIT", + "dependencies": { + "rehype-expressive-code": "^0.41.6" + }, + "peerDependencies": { + "astro": "^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta" + } + }, + "node_modules/astro-remote": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/astro-remote/-/astro-remote-0.3.4.tgz", + "integrity": "sha512-jL5skNQLA0YBc1R3bVGXyHew3FqGqsT7AgLzWAVeTLzFkwVMUYvs4/lKJSmS7ygcF1GnHnoKG6++8GL9VtWwGQ==", + "license": "MIT", + "dependencies": { + "entities": "^4.5.0", + "marked": "^12.0.0", + "marked-footnote": "^1.2.2", + "marked-smartypants": "^1.1.6", + "ultrahtml": "^1.5.3" + }, + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/astro-remote/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/astro-remote/node_modules/marked": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/astro/node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/astro/node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "license": "MIT" + }, + "node_modules/bcp-47": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", + "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "license": "ISC" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz", + "integrity": "sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/cssstyle": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.7.tgz", + "integrity": "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^4.1.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.21", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/devalue": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "license": "MIT", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.41.6.tgz", + "integrity": "sha512-W/5+IQbrpCIM5KGLjO35wlp1NCwDOOVQb+PAvzEoGkW1xjGM807ZGfBKptNWH6UECvt6qgmLyWolCMYKh7eQmA==", + "license": "MIT", + "dependencies": { + "@expressive-code/core": "^0.41.6", + "@expressive-code/plugin-frames": "^0.41.6", + "@expressive-code/plugin-shiki": "^0.41.6", + "@expressive-code/plugin-text-markers": "^0.41.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.5.tgz", + "integrity": "sha512-JeaA2Vm9ffQKp9VjvfzObuMCjUYAp5WDYhRYL5LrBPY/jUDlUtOvDfot0vKSkB9tuX885BDHjtw4fZadD95wnA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.2" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", + "license": "MIT", + "dependencies": { + "fontkitten": "^1.0.2" + } + }, + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/h3": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hast-util-embedded": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", + "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-format": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-format/-/hast-util-format-1.1.0.tgz", + "integrity": "sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-minify-whitespace": "^1.0.0", + "hast-util-phrasing": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "html-whitespace-sensitive-tag-names": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-dom": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz", + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "license": "ISC", + "dependencies": { + "@types/hast": "^3.0.0", + "hastscript": "^9.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-body-ok-link": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", + "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-minify-whitespace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", + "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-embedded": "^3.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-is-body-ok-link": "^3.0.0", + "hast-util-is-element": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz", + "integrity": "sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "nth-check": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-whitespace-sensitive-tag-names": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz", + "integrity": "sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/i18next": { + "version": "23.16.8", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", + "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.0.0.tgz", + "integrity": "sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.7.6", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^5.3.7", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.20.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/katex": { + "version": "0.16.28", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.28.tgz", + "integrity": "sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/marked-footnote": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/marked-footnote/-/marked-footnote-1.4.0.tgz", + "integrity": "sha512-fZTxAhI1TcLEs5UOjCfYfTHpyKGaWQevbxaGTEA68B51l7i87SctPFtHETYqPkEN0ka5opvy4Dy1l/yXVC+hmg==", + "license": "MIT", + "peerDependencies": { + "marked": ">=7.0.0" + } + }, + "node_modules/marked-plaintify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/marked-plaintify/-/marked-plaintify-1.1.1.tgz", + "integrity": "sha512-r3kMKArhfo2H3lD4ctFq/OJTzM0uNvXHh7FBTI1hMDpf4Ac1djjtq4g8NfTBWMxWLmaEz3KL1jCkLygik3gExA==", + "license": "MIT", + "peerDependencies": { + "marked": ">=13.0.0" + } + }, + "node_modules/marked-smartypants": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/marked-smartypants/-/marked-smartypants-1.1.11.tgz", + "integrity": "sha512-Jt0eq/6rf9oXDfEKPzQ0z7UzVWcEAK3L6QBBQzbwV8bT304OvPVLTqpH3yvkSung9foOM4s120TMHEHP76Metg==", + "license": "MIT", + "dependencies": { + "smartypants": "^0.2.2" + }, + "peerDependencies": { + "marked": ">=4 <18" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", + "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "license": "MIT", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "license": "MIT" + }, + "node_modules/oniguruma-to-es": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-expressive-code": { + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.41.6.tgz", + "integrity": "sha512-aBMX8kxPtjmDSFUdZlAWJkMvsQ4ZMASfee90JWIAV8tweltXLzkWC3q++43ToTelI8ac5iC0B3/S/Cl4Ql1y2g==", + "license": "MIT", + "dependencies": { + "expressive-code": "^0.41.6" + } + }, + "node_modules/rehype-format": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.1.tgz", + "integrity": "sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-format": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-katex": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", + "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "katex": "^0.16.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", + "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-github-blockquote-alert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-github-blockquote-alert/-/remark-github-blockquote-alert-2.0.1.tgz", + "integrity": "sha512-0w0u3/wjBEK555yzm5UUnDCWO38Qk60laA5FvJrnES+YA/+r3hvvLgE/5SpMjaVpPOpVzunXk9caob1NTheM0g==", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/shiki": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.22.0.tgz", + "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.22.0", + "@shikijs/engine-javascript": "3.22.0", + "@shikijs/engine-oniguruma": "3.22.0", + "@shikijs/langs": "3.22.0", + "@shikijs/themes": "3.22.0", + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz", + "integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/smartypants": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/smartypants/-/smartypants-0.2.2.tgz", + "integrity": "sha512-TzobUYoEft/xBtb2voRPryAUIvYguG0V7Tt3de79I1WfXgCwelqVsGuZSnu3GFGRZhXR90AeEYIM+icuB/S06Q==", + "license": "BSD-3-Clause", + "bin": { + "smartypants": "bin/smartypants.js", + "smartypantsu": "bin/smartypantsu.js" + } + }, + "node_modules/smol-toml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/starlight-blog": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/starlight-blog/-/starlight-blog-0.25.2.tgz", + "integrity": "sha512-YsNXI1fT0w9CdgVGRJGR8KxNWJgKuHsad/avo9Z+FU9k9EWJVdr/Ret7tm0HbFFbOGJ8/JY/U64EHYdCAtxQhg==", + "license": "MIT", + "dependencies": { + "@astrojs/markdown-remark": "^6.3.1", + "@astrojs/mdx": "^4.0.8", + "@astrojs/rss": "^4.0.11", + "astro-remote": "^0.3.3", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-html": "^9.0.5", + "hast-util-to-string": "^3.0.1", + "marked": "^15.0.4", + "marked-plaintify": "^1.1.1", + "mdast-util-mdx-expression": "^2.0.1", + "unist-util-is": "^6.0.0", + "unist-util-remove": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=18.20.8" + }, + "peerDependencies": { + "@astrojs/starlight": ">=0.33.0" + } + }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.23.tgz", + "integrity": "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.23" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.23", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", + "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.21.0.tgz", + "integrity": "sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unifont": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.3.tgz", + "integrity": "sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==", + "license": "MIT", + "dependencies": { + "css-tree": "^3.1.0", + "ofetch": "^1.5.1", + "ohash": "^2.0.11" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", + "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.0.tgz", + "integrity": "sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", + "license": "MIT" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + }, + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..91215dbd57 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "esphome-docs", + "version": "2.0.0", + "description": "ESPHome Documentation", + "type": "module", + "scripts": { + "dev": "astro dev --host", + "build": "astro build", + "preview": "astro preview", + "lint": "node lint.mjs" + }, + "dependencies": { + "@astrojs/starlight": "^0.37.6", + "astro": "^5.16.15", + "katex": "^0.16.28", + "rehype-katex": "^7.0.1", + "remark-github-blockquote-alert": "^2.0.1", + "remark-math": "^6.0.0", + "sharp": "^0.33.5", + "starlight-blog": "^0.25.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/esphome/esphome-docs.git" + }, + "license": "CC-BY-4.0", + "bugs": { + "url": "https://github.com/esphome/esphome-docs/issues" + }, + "homepage": "https://esphome.io", + "devDependencies": { + "jsdom": "^28.0.0" + } +} diff --git a/pagefind/fragment/en-us_433ff7f.pf_fragment b/pagefind/fragment/en-us_433ff7f.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..a1a1febf205a40d02da5fd431c4b716703b9529f GIT binary patch literal 187 zcmV;s07U;EiwFP!00002|5c7L4#F@DMXzFcu0Sv{a{vZ5gixEf)F_Rk#1T|g?~W^A zVEfYl&wi=BQ_s=gyz?{G9Pof!Cu5RGQOgz^bQ0CF6~{V`6C^`6a2~io&w+qmT(rQW z76ldPi9DRXXQ88BGJy^Rg_Xddu5!=@ID%wPd1aEM8e0AA(vS6=$*JVYB%ZdtIjO71 pe%GLVR>}nr^U~l*+FC+o4fN-U*0#|NvQ978q% zdE>EW?BmIWG<2t&`Y$-+!n8d`NRxFSFO^f;Lr7ZAooPj#8<>1uEB!`beoGhAGf=@y z3d;aevBDIYG%624b}DzEmmi+zVAB%E8Ap%}Bei9W(#FNX_@v3|3bw}jO2cPRCoWcP dk-L&Lx4D2^In+&%IirWg=?~zmCawbk001lrPRRfO literal 0 HcmV?d00001 diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json new file mode 100644 index 0000000000..9cf33b4e0d --- /dev/null +++ b/pagefind/pagefind-entry.json @@ -0,0 +1 @@ +{"version":"1.3.0","languages":{"en-us":{"hash":"en-us_48573bd275bba","wasm":"en-us","page_count":1}}} \ No newline at end of file diff --git a/pagefind/pagefind-highlight.js b/pagefind/pagefind-highlight.js new file mode 100644 index 0000000000..c823fbfe7d --- /dev/null +++ b/pagefind/pagefind-highlight.js @@ -0,0 +1,1069 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node_modules/mark.js/dist/mark.js +var require_mark = __commonJS({ + "node_modules/mark.js/dist/mark.js"(exports, module) { + (function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory(); + })(exports, function() { + "use strict"; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + var classCallCheck = function(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + var createClass = function() { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) + descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + return function(Constructor, protoProps, staticProps) { + if (protoProps) + defineProperties(Constructor.prototype, protoProps); + if (staticProps) + defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + var _extends = Object.assign || function(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; + var DOMIterator = function() { + function DOMIterator2(ctx) { + var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; + var iframesTimeout = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 5e3; + classCallCheck(this, DOMIterator2); + this.ctx = ctx; + this.iframes = iframes; + this.exclude = exclude; + this.iframesTimeout = iframesTimeout; + } + createClass(DOMIterator2, [{ + key: "getContexts", + value: function getContexts() { + var ctx = void 0, filteredCtx = []; + if (typeof this.ctx === "undefined" || !this.ctx) { + ctx = []; + } else if (NodeList.prototype.isPrototypeOf(this.ctx)) { + ctx = Array.prototype.slice.call(this.ctx); + } else if (Array.isArray(this.ctx)) { + ctx = this.ctx; + } else if (typeof this.ctx === "string") { + ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx)); + } else { + ctx = [this.ctx]; + } + ctx.forEach(function(ctx2) { + var isDescendant = filteredCtx.filter(function(contexts) { + return contexts.contains(ctx2); + }).length > 0; + if (filteredCtx.indexOf(ctx2) === -1 && !isDescendant) { + filteredCtx.push(ctx2); + } + }); + return filteredCtx; + } + }, { + key: "getIframeContents", + value: function getIframeContents(ifr, successFn) { + var errorFn = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() { + }; + var doc = void 0; + try { + var ifrWin = ifr.contentWindow; + doc = ifrWin.document; + if (!ifrWin || !doc) { + throw new Error("iframe inaccessible"); + } + } catch (e) { + errorFn(); + } + if (doc) { + successFn(doc); + } + } + }, { + key: "isIframeBlank", + value: function isIframeBlank(ifr) { + var bl = "about:blank", src = ifr.getAttribute("src").trim(), href = ifr.contentWindow.location.href; + return href === bl && src !== bl && src; + } + }, { + key: "observeIframeLoad", + value: function observeIframeLoad(ifr, successFn, errorFn) { + var _this = this; + var called = false, tout = null; + var listener = function listener2() { + if (called) { + return; + } + called = true; + clearTimeout(tout); + try { + if (!_this.isIframeBlank(ifr)) { + ifr.removeEventListener("load", listener2); + _this.getIframeContents(ifr, successFn, errorFn); + } + } catch (e) { + errorFn(); + } + }; + ifr.addEventListener("load", listener); + tout = setTimeout(listener, this.iframesTimeout); + } + }, { + key: "onIframeReady", + value: function onIframeReady(ifr, successFn, errorFn) { + try { + if (ifr.contentWindow.document.readyState === "complete") { + if (this.isIframeBlank(ifr)) { + this.observeIframeLoad(ifr, successFn, errorFn); + } else { + this.getIframeContents(ifr, successFn, errorFn); + } + } else { + this.observeIframeLoad(ifr, successFn, errorFn); + } + } catch (e) { + errorFn(); + } + } + }, { + key: "waitForIframes", + value: function waitForIframes(ctx, done) { + var _this2 = this; + var eachCalled = 0; + this.forEachIframe(ctx, function() { + return true; + }, function(ifr) { + eachCalled++; + _this2.waitForIframes(ifr.querySelector("html"), function() { + if (!--eachCalled) { + done(); + } + }); + }, function(handled) { + if (!handled) { + done(); + } + }); + } + }, { + key: "forEachIframe", + value: function forEachIframe(ctx, filter, each) { + var _this3 = this; + var end = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { + }; + var ifr = ctx.querySelectorAll("iframe"), open = ifr.length, handled = 0; + ifr = Array.prototype.slice.call(ifr); + var checkEnd = function checkEnd2() { + if (--open <= 0) { + end(handled); + } + }; + if (!open) { + checkEnd(); + } + ifr.forEach(function(ifr2) { + if (DOMIterator2.matches(ifr2, _this3.exclude)) { + checkEnd(); + } else { + _this3.onIframeReady(ifr2, function(con) { + if (filter(ifr2)) { + handled++; + each(con); + } + checkEnd(); + }, checkEnd); + } + }); + } + }, { + key: "createIterator", + value: function createIterator(ctx, whatToShow, filter) { + return document.createNodeIterator(ctx, whatToShow, filter, false); + } + }, { + key: "createInstanceOnIframe", + value: function createInstanceOnIframe(contents) { + return new DOMIterator2(contents.querySelector("html"), this.iframes); + } + }, { + key: "compareNodeIframe", + value: function compareNodeIframe(node, prevNode, ifr) { + var compCurr = node.compareDocumentPosition(ifr), prev = Node.DOCUMENT_POSITION_PRECEDING; + if (compCurr & prev) { + if (prevNode !== null) { + var compPrev = prevNode.compareDocumentPosition(ifr), after = Node.DOCUMENT_POSITION_FOLLOWING; + if (compPrev & after) { + return true; + } + } else { + return true; + } + } + return false; + } + }, { + key: "getIteratorNode", + value: function getIteratorNode(itr) { + var prevNode = itr.previousNode(); + var node = void 0; + if (prevNode === null) { + node = itr.nextNode(); + } else { + node = itr.nextNode() && itr.nextNode(); + } + return { + prevNode, + node + }; + } + }, { + key: "checkIframeFilter", + value: function checkIframeFilter(node, prevNode, currIfr, ifr) { + var key = false, handled = false; + ifr.forEach(function(ifrDict, i) { + if (ifrDict.val === currIfr) { + key = i; + handled = ifrDict.handled; + } + }); + if (this.compareNodeIframe(node, prevNode, currIfr)) { + if (key === false && !handled) { + ifr.push({ + val: currIfr, + handled: true + }); + } else if (key !== false && !handled) { + ifr[key].handled = true; + } + return true; + } + if (key === false) { + ifr.push({ + val: currIfr, + handled: false + }); + } + return false; + } + }, { + key: "handleOpenIframes", + value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) { + var _this4 = this; + ifr.forEach(function(ifrDict) { + if (!ifrDict.handled) { + _this4.getIframeContents(ifrDict.val, function(con) { + _this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb); + }); + } + }); + } + }, { + key: "iterateThroughNodes", + value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) { + var _this5 = this; + var itr = this.createIterator(ctx, whatToShow, filterCb); + var ifr = [], elements = [], node = void 0, prevNode = void 0, retrieveNodes = function retrieveNodes2() { + var _getIteratorNode = _this5.getIteratorNode(itr); + prevNode = _getIteratorNode.prevNode; + node = _getIteratorNode.node; + return node; + }; + while (retrieveNodes()) { + if (this.iframes) { + this.forEachIframe(ctx, function(currIfr) { + return _this5.checkIframeFilter(node, prevNode, currIfr, ifr); + }, function(con) { + _this5.createInstanceOnIframe(con).forEachNode(whatToShow, function(ifrNode) { + return elements.push(ifrNode); + }, filterCb); + }); + } + elements.push(node); + } + elements.forEach(function(node2) { + eachCb(node2); + }); + if (this.iframes) { + this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb); + } + doneCb(); + } + }, { + key: "forEachNode", + value: function forEachNode(whatToShow, each, filter) { + var _this6 = this; + var done = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { + }; + var contexts = this.getContexts(); + var open = contexts.length; + if (!open) { + done(); + } + contexts.forEach(function(ctx) { + var ready = function ready2() { + _this6.iterateThroughNodes(whatToShow, ctx, each, filter, function() { + if (--open <= 0) { + done(); + } + }); + }; + if (_this6.iframes) { + _this6.waitForIframes(ctx, ready); + } else { + ready(); + } + }); + } + }], [{ + key: "matches", + value: function matches(element, selector) { + var selectors = typeof selector === "string" ? [selector] : selector, fn = element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector; + if (fn) { + var match = false; + selectors.every(function(sel) { + if (fn.call(element, sel)) { + match = true; + return false; + } + return true; + }); + return match; + } else { + return false; + } + } + }]); + return DOMIterator2; + }(); + var Mark$1 = function() { + function Mark3(ctx) { + classCallCheck(this, Mark3); + this.ctx = ctx; + this.ie = false; + var ua = window.navigator.userAgent; + if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) { + this.ie = true; + } + } + createClass(Mark3, [{ + key: "log", + value: function log(msg) { + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "debug"; + var log2 = this.opt.log; + if (!this.opt.debug) { + return; + } + if ((typeof log2 === "undefined" ? "undefined" : _typeof(log2)) === "object" && typeof log2[level] === "function") { + log2[level]("mark.js: " + msg); + } + } + }, { + key: "escapeStr", + value: function escapeStr(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + }, { + key: "createRegExp", + value: function createRegExp(str) { + if (this.opt.wildcards !== "disabled") { + str = this.setupWildcardsRegExp(str); + } + str = this.escapeStr(str); + if (Object.keys(this.opt.synonyms).length) { + str = this.createSynonymsRegExp(str); + } + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.setupIgnoreJoinersRegExp(str); + } + if (this.opt.diacritics) { + str = this.createDiacriticsRegExp(str); + } + str = this.createMergedBlanksRegExp(str); + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.createJoinersRegExp(str); + } + if (this.opt.wildcards !== "disabled") { + str = this.createWildcardsRegExp(str); + } + str = this.createAccuracyRegExp(str); + return str; + } + }, { + key: "createSynonymsRegExp", + value: function createSynonymsRegExp(str) { + var syn = this.opt.synonyms, sens = this.opt.caseSensitive ? "" : "i", joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? "\0" : ""; + for (var index in syn) { + if (syn.hasOwnProperty(index)) { + var value = syn[index], k1 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(index) : this.escapeStr(index), k2 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(value) : this.escapeStr(value); + if (k1 !== "" && k2 !== "") { + str = str.replace(new RegExp("(" + this.escapeStr(k1) + "|" + this.escapeStr(k2) + ")", "gm" + sens), joinerPlaceholder + ("(" + this.processSynomyms(k1) + "|") + (this.processSynomyms(k2) + ")") + joinerPlaceholder); + } + } + } + return str; + } + }, { + key: "processSynomyms", + value: function processSynomyms(str) { + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.setupIgnoreJoinersRegExp(str); + } + return str; + } + }, { + key: "setupWildcardsRegExp", + value: function setupWildcardsRegExp(str) { + str = str.replace(/(?:\\)*\?/g, function(val) { + return val.charAt(0) === "\\" ? "?" : ""; + }); + return str.replace(/(?:\\)*\*/g, function(val) { + return val.charAt(0) === "\\" ? "*" : ""; + }); + } + }, { + key: "createWildcardsRegExp", + value: function createWildcardsRegExp(str) { + var spaces = this.opt.wildcards === "withSpaces"; + return str.replace(/\u0001/g, spaces ? "[\\S\\s]?" : "\\S?").replace(/\u0002/g, spaces ? "[\\S\\s]*?" : "\\S*"); + } + }, { + key: "setupIgnoreJoinersRegExp", + value: function setupIgnoreJoinersRegExp(str) { + return str.replace(/[^(|)\\]/g, function(val, indx, original) { + var nextChar = original.charAt(indx + 1); + if (/[(|)\\]/.test(nextChar) || nextChar === "") { + return val; + } else { + return val + "\0"; + } + }); + } + }, { + key: "createJoinersRegExp", + value: function createJoinersRegExp(str) { + var joiner = []; + var ignorePunctuation = this.opt.ignorePunctuation; + if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) { + joiner.push(this.escapeStr(ignorePunctuation.join(""))); + } + if (this.opt.ignoreJoiners) { + joiner.push("\\u00ad\\u200b\\u200c\\u200d"); + } + return joiner.length ? str.split(/\u0000+/).join("[" + joiner.join("") + "]*") : str; + } + }, { + key: "createDiacriticsRegExp", + value: function createDiacriticsRegExp(str) { + var sens = this.opt.caseSensitive ? "" : "i", dct = this.opt.caseSensitive ? ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105", "A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010D", "C\xC7\u0106\u010C", "d\u0111\u010F", "D\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119", "E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012B", "I\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142", "L\u0141", "n\xF1\u0148\u0144", "N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014D", "O\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159", "R\u0158", "s\u0161\u015B\u0219\u015F", "S\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163", "T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016B", "U\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFF", "Y\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017A", "Z\u017D\u017B\u0179"] : ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010DC\xC7\u0106\u010C", "d\u0111\u010FD\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012BI\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142L\u0141", "n\xF1\u0148\u0144N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014DO\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159R\u0158", "s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016BU\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFFY\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017AZ\u017D\u017B\u0179"]; + var handled = []; + str.split("").forEach(function(ch) { + dct.every(function(dct2) { + if (dct2.indexOf(ch) !== -1) { + if (handled.indexOf(dct2) > -1) { + return false; + } + str = str.replace(new RegExp("[" + dct2 + "]", "gm" + sens), "[" + dct2 + "]"); + handled.push(dct2); + } + return true; + }); + }); + return str; + } + }, { + key: "createMergedBlanksRegExp", + value: function createMergedBlanksRegExp(str) { + return str.replace(/[\s]+/gmi, "[\\s]+"); + } + }, { + key: "createAccuracyRegExp", + value: function createAccuracyRegExp(str) { + var _this = this; + var chars = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF"; + var acc = this.opt.accuracy, val = typeof acc === "string" ? acc : acc.value, ls = typeof acc === "string" ? [] : acc.limiters, lsJoin = ""; + ls.forEach(function(limiter) { + lsJoin += "|" + _this.escapeStr(limiter); + }); + switch (val) { + case "partially": + default: + return "()(" + str + ")"; + case "complementary": + lsJoin = "\\s" + (lsJoin ? lsJoin : this.escapeStr(chars)); + return "()([^" + lsJoin + "]*" + str + "[^" + lsJoin + "]*)"; + case "exactly": + return "(^|\\s" + lsJoin + ")(" + str + ")(?=$|\\s" + lsJoin + ")"; + } + } + }, { + key: "getSeparatedKeywords", + value: function getSeparatedKeywords(sv) { + var _this2 = this; + var stack = []; + sv.forEach(function(kw) { + if (!_this2.opt.separateWordSearch) { + if (kw.trim() && stack.indexOf(kw) === -1) { + stack.push(kw); + } + } else { + kw.split(" ").forEach(function(kwSplitted) { + if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) { + stack.push(kwSplitted); + } + }); + } + }); + return { + "keywords": stack.sort(function(a, b) { + return b.length - a.length; + }), + "length": stack.length + }; + } + }, { + key: "isNumeric", + value: function isNumeric(value) { + return Number(parseFloat(value)) == value; + } + }, { + key: "checkRanges", + value: function checkRanges(array) { + var _this3 = this; + if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== "[object Object]") { + this.log("markRanges() will only accept an array of objects"); + this.opt.noMatch(array); + return []; + } + var stack = []; + var last = 0; + array.sort(function(a, b) { + return a.start - b.start; + }).forEach(function(item) { + var _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), start = _callNoMatchOnInvalid.start, end = _callNoMatchOnInvalid.end, valid = _callNoMatchOnInvalid.valid; + if (valid) { + item.start = start; + item.length = end - start; + stack.push(item); + last = end; + } + }); + return stack; + } + }, { + key: "callNoMatchOnInvalidRanges", + value: function callNoMatchOnInvalidRanges(range, last) { + var start = void 0, end = void 0, valid = false; + if (range && typeof range.start !== "undefined") { + start = parseInt(range.start, 10); + end = start + parseInt(range.length, 10); + if (this.isNumeric(range.start) && this.isNumeric(range.length) && end - last > 0 && end - start > 0) { + valid = true; + } else { + this.log("Ignoring invalid or overlapping range: " + ("" + JSON.stringify(range))); + this.opt.noMatch(range); + } + } else { + this.log("Ignoring invalid range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } + return { + start, + end, + valid + }; + } + }, { + key: "checkWhitespaceRanges", + value: function checkWhitespaceRanges(range, originalLength, string) { + var end = void 0, valid = true, max = string.length, offset = originalLength - max, start = parseInt(range.start, 10) - offset; + start = start > max ? max : start; + end = start + parseInt(range.length, 10); + if (end > max) { + end = max; + this.log("End range automatically set to the max value of " + max); + } + if (start < 0 || end - start < 0 || start > max || end > max) { + valid = false; + this.log("Invalid range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } else if (string.substring(start, end).replace(/\s+/g, "") === "") { + valid = false; + this.log("Skipping whitespace only range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } + return { + start, + end, + valid + }; + } + }, { + key: "getTextNodes", + value: function getTextNodes(cb) { + var _this4 = this; + var val = "", nodes = []; + this.iterator.forEachNode(NodeFilter.SHOW_TEXT, function(node) { + nodes.push({ + start: val.length, + end: (val += node.textContent).length, + node + }); + }, function(node) { + if (_this4.matchesExclude(node.parentNode)) { + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_ACCEPT; + } + }, function() { + cb({ + value: val, + nodes + }); + }); + } + }, { + key: "matchesExclude", + value: function matchesExclude(el) { + return DOMIterator.matches(el, this.opt.exclude.concat(["script", "style", "title", "head", "html"])); + } + }, { + key: "wrapRangeInTextNode", + value: function wrapRangeInTextNode(node, start, end) { + var hEl = !this.opt.element ? "mark" : this.opt.element, startNode = node.splitText(start), ret = startNode.splitText(end - start); + var repl = document.createElement(hEl); + repl.setAttribute("data-markjs", "true"); + if (this.opt.className) { + repl.setAttribute("class", this.opt.className); + } + repl.textContent = startNode.textContent; + startNode.parentNode.replaceChild(repl, startNode); + return ret; + } + }, { + key: "wrapRangeInMappedTextNode", + value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) { + var _this5 = this; + dict.nodes.every(function(n, i) { + var sibl = dict.nodes[i + 1]; + if (typeof sibl === "undefined" || sibl.start > start) { + if (!filterCb(n.node)) { + return false; + } + var s = start - n.start, e = (end > n.end ? n.end : end) - n.start, startStr = dict.value.substr(0, n.start), endStr = dict.value.substr(e + n.start); + n.node = _this5.wrapRangeInTextNode(n.node, s, e); + dict.value = startStr + endStr; + dict.nodes.forEach(function(k, j) { + if (j >= i) { + if (dict.nodes[j].start > 0 && j !== i) { + dict.nodes[j].start -= e; + } + dict.nodes[j].end -= e; + } + }); + end -= e; + eachCb(n.node.previousSibling, n.start); + if (end > n.end) { + start = n.end; + } else { + return false; + } + } + return true; + }); + } + }, { + key: "wrapMatches", + value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { + var _this6 = this; + var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; + this.getTextNodes(function(dict) { + dict.nodes.forEach(function(node) { + node = node.node; + var match = void 0; + while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== "") { + if (!filterCb(match[matchIdx], node)) { + continue; + } + var pos = match.index; + if (matchIdx !== 0) { + for (var i = 1; i < matchIdx; i++) { + pos += match[i].length; + } + } + node = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length); + eachCb(node.previousSibling); + regex.lastIndex = 0; + } + }); + endCb(); + }); + } + }, { + key: "wrapMatchesAcrossElements", + value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { + var _this7 = this; + var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; + this.getTextNodes(function(dict) { + var match = void 0; + while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== "") { + var start = match.index; + if (matchIdx !== 0) { + for (var i = 1; i < matchIdx; i++) { + start += match[i].length; + } + } + var end = start + match[matchIdx].length; + _this7.wrapRangeInMappedTextNode(dict, start, end, function(node) { + return filterCb(match[matchIdx], node); + }, function(node, lastIndex) { + regex.lastIndex = lastIndex; + eachCb(node); + }); + } + endCb(); + }); + } + }, { + key: "wrapRangeFromIndex", + value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) { + var _this8 = this; + this.getTextNodes(function(dict) { + var originalLength = dict.value.length; + ranges.forEach(function(range, counter) { + var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), start = _checkWhitespaceRange.start, end = _checkWhitespaceRange.end, valid = _checkWhitespaceRange.valid; + if (valid) { + _this8.wrapRangeInMappedTextNode(dict, start, end, function(node) { + return filterCb(node, range, dict.value.substring(start, end), counter); + }, function(node) { + eachCb(node, range); + }); + } + }); + endCb(); + }); + } + }, { + key: "unwrapMatches", + value: function unwrapMatches(node) { + var parent = node.parentNode; + var docFrag = document.createDocumentFragment(); + while (node.firstChild) { + docFrag.appendChild(node.removeChild(node.firstChild)); + } + parent.replaceChild(docFrag, node); + if (!this.ie) { + parent.normalize(); + } else { + this.normalizeTextNode(parent); + } + } + }, { + key: "normalizeTextNode", + value: function normalizeTextNode(node) { + if (!node) { + return; + } + if (node.nodeType === 3) { + while (node.nextSibling && node.nextSibling.nodeType === 3) { + node.nodeValue += node.nextSibling.nodeValue; + node.parentNode.removeChild(node.nextSibling); + } + } else { + this.normalizeTextNode(node.firstChild); + } + this.normalizeTextNode(node.nextSibling); + } + }, { + key: "markRegExp", + value: function markRegExp(regexp, opt) { + var _this9 = this; + this.opt = opt; + this.log('Searching with expression "' + regexp + '"'); + var totalMatches = 0, fn = "wrapMatches"; + var eachCb = function eachCb2(element) { + totalMatches++; + _this9.opt.each(element); + }; + if (this.opt.acrossElements) { + fn = "wrapMatchesAcrossElements"; + } + this[fn](regexp, this.opt.ignoreGroups, function(match, node) { + return _this9.opt.filter(node, match, totalMatches); + }, eachCb, function() { + if (totalMatches === 0) { + _this9.opt.noMatch(regexp); + } + _this9.opt.done(totalMatches); + }); + } + }, { + key: "mark", + value: function mark(sv, opt) { + var _this10 = this; + this.opt = opt; + var totalMatches = 0, fn = "wrapMatches"; + var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === "string" ? [sv] : sv), kwArr = _getSeparatedKeywords.keywords, kwArrLen = _getSeparatedKeywords.length, sens = this.opt.caseSensitive ? "" : "i", handler = function handler2(kw) { + var regex = new RegExp(_this10.createRegExp(kw), "gm" + sens), matches = 0; + _this10.log('Searching with expression "' + regex + '"'); + _this10[fn](regex, 1, function(term, node) { + return _this10.opt.filter(node, kw, totalMatches, matches); + }, function(element) { + matches++; + totalMatches++; + _this10.opt.each(element); + }, function() { + if (matches === 0) { + _this10.opt.noMatch(kw); + } + if (kwArr[kwArrLen - 1] === kw) { + _this10.opt.done(totalMatches); + } else { + handler2(kwArr[kwArr.indexOf(kw) + 1]); + } + }); + }; + if (this.opt.acrossElements) { + fn = "wrapMatchesAcrossElements"; + } + if (kwArrLen === 0) { + this.opt.done(totalMatches); + } else { + handler(kwArr[0]); + } + } + }, { + key: "markRanges", + value: function markRanges(rawRanges, opt) { + var _this11 = this; + this.opt = opt; + var totalMatches = 0, ranges = this.checkRanges(rawRanges); + if (ranges && ranges.length) { + this.log("Starting to mark with the following ranges: " + JSON.stringify(ranges)); + this.wrapRangeFromIndex(ranges, function(node, range, match, counter) { + return _this11.opt.filter(node, range, match, counter); + }, function(element, range) { + totalMatches++; + _this11.opt.each(element, range); + }, function() { + _this11.opt.done(totalMatches); + }); + } else { + this.opt.done(totalMatches); + } + } + }, { + key: "unmark", + value: function unmark(opt) { + var _this12 = this; + this.opt = opt; + var sel = this.opt.element ? this.opt.element : "*"; + sel += "[data-markjs]"; + if (this.opt.className) { + sel += "." + this.opt.className; + } + this.log('Removal selector "' + sel + '"'); + this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function(node) { + _this12.unwrapMatches(node); + }, function(node) { + var matchesSel = DOMIterator.matches(node, sel), matchesExclude = _this12.matchesExclude(node); + if (!matchesSel || matchesExclude) { + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_ACCEPT; + } + }, this.opt.done); + } + }, { + key: "opt", + set: function set$$1(val) { + this._opt = _extends({}, { + "element": "", + "className": "", + "exclude": [], + "iframes": false, + "iframesTimeout": 5e3, + "separateWordSearch": true, + "diacritics": true, + "synonyms": {}, + "accuracy": "partially", + "acrossElements": false, + "caseSensitive": false, + "ignoreJoiners": false, + "ignoreGroups": 0, + "ignorePunctuation": [], + "wildcards": "disabled", + "each": function each() { + }, + "noMatch": function noMatch() { + }, + "filter": function filter() { + return true; + }, + "done": function done() { + }, + "debug": false, + "log": window.console + }, val); + }, + get: function get$$1() { + return this._opt; + } + }, { + key: "iterator", + get: function get$$1() { + return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); + } + }]); + return Mark3; + }(); + function Mark2(ctx) { + var _this = this; + var instance = new Mark$1(ctx); + this.mark = function(sv, opt) { + instance.mark(sv, opt); + return _this; + }; + this.markRegExp = function(sv, opt) { + instance.markRegExp(sv, opt); + return _this; + }; + this.markRanges = function(sv, opt) { + instance.markRanges(sv, opt); + return _this; + }; + this.unmark = function(opt) { + instance.unmark(opt); + return _this; + }; + return this; + } + return Mark2; + }); + } +}); + +// lib/highlight.ts +var import_mark = __toESM(require_mark(), 1); +var PagefindHighlight = class { + constructor(options = { + markContext: null, + highlightParam: "pagefind-highlight", + markOptions: { + className: "pagefind-highlight", + exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] + }, + addStyles: true + }) { + var _a, _b; + const { highlightParam, markContext, markOptions, addStyles } = options; + this.highlightParam = highlightParam ?? "pagefind-highlight"; + this.addStyles = addStyles ?? true; + this.markContext = markContext !== void 0 ? markContext : null; + this.markOptions = markOptions !== void 0 ? markOptions : { + className: "pagefind-highlight", + exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] + }; + (_a = this.markOptions).className ?? (_a.className = "pagefind__highlight"); + (_b = this.markOptions).exclude ?? (_b.exclude = [ + "[data-pagefind-ignore]", + "[data-pagefind-ignore] *" + ]); + this.markOptions.separateWordSearch = false; + this.highlight(); + } + getHighlightParams(paramName) { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.getAll(paramName); + } + // Inline styles might be too hard to override + addHighlightStyles(className) { + if (!className) + return; + const styleElement = document.createElement("style"); + styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`; + document.head.appendChild(styleElement); + } + createMarkInstance() { + if (this.markContext) { + return new import_mark.default(this.markContext); + } + const pagefindBody = document.querySelectorAll("[data-pagefind-body]"); + if (pagefindBody.length !== 0) { + return new import_mark.default(pagefindBody); + } else { + return new import_mark.default(document.body); + } + } + markText(instance, text) { + instance.mark(text, this.markOptions); + } + highlight() { + const params = this.getHighlightParams(this.highlightParam); + if (!params || params.length === 0) + return; + this.addStyles && this.addHighlightStyles(this.markOptions.className); + const markInstance = this.createMarkInstance(); + this.markText(markInstance, params); + } +}; +window.PagefindHighlight = PagefindHighlight; +export { + PagefindHighlight as default +}; +/*! Bundled license information: + +mark.js/dist/mark.js: + (*!*************************************************** + * mark.js v8.11.1 + * https://markjs.io/ + * Copyright (c) 2014–2018, Julian Kühnel + * Released under the MIT license https://git.io/vwTVl + *****************************************************) +*/ diff --git a/pagefind/pagefind-modular-ui.css b/pagefind/pagefind-modular-ui.css new file mode 100644 index 0000000000..9c6793ed2b --- /dev/null +++ b/pagefind/pagefind-modular-ui.css @@ -0,0 +1,214 @@ +:root { + --pagefind-ui-scale: 0.8; + --pagefind-ui-primary: #034AD8; + --pagefind-ui-fade: #707070; + --pagefind-ui-text: #393939; + --pagefind-ui-background: #ffffff; + --pagefind-ui-border: #eeeeee; + --pagefind-ui-tag: #eeeeee; + --pagefind-ui-border-width: 2px; + --pagefind-ui-border-radius: 8px; + --pagefind-ui-image-border-radius: 8px; + --pagefind-ui-image-box-ratio: 3 / 2; + --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular", + "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", + "Lucida Grande", sans-serif; +} + +[data-pfmod-hidden] { + display: none !important; +} + +[data-pfmod-suppressed] { + opacity: 0 !important; + pointer-events: none !important; +} + +[data-pfmod-sr-hidden] { + -webkit-clip: rect(0 0 0 0) !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(100%) !important; + clip-path: inset(100%) !important; + height: 1px !important; + overflow: hidden !important; + overflow: clip !important; + position: absolute !important; + white-space: nowrap !important; + width: 1px !important; +} + +[data-pfmod-loading] { + color: var(--pagefind-ui-text); + background-color: var(--pagefind-ui-text); + border-radius: var(--pagefind-ui-border-radius); + opacity: 0.1; + pointer-events: none; +} + +/* Input */ + +.pagefind-modular-input-wrapper { + position: relative; +} + +.pagefind-modular-input-wrapper::before { + background-color: var(--pagefind-ui-text); + width: calc(18px * var(--pagefind-ui-scale)); + height: calc(18px * var(--pagefind-ui-scale)); + top: calc(23px * var(--pagefind-ui-scale)); + left: calc(20px * var(--pagefind-ui-scale)); + content: ""; + position: absolute; + display: block; + opacity: 0.7; + -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + -webkit-mask-size: 100%; + mask-size: 100%; + z-index: 9; + pointer-events: none; +} + +.pagefind-modular-input { + height: calc(64px * var(--pagefind-ui-scale)); + padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: var(--pagefind-ui-border-radius); + font-size: calc(21px * var(--pagefind-ui-scale)); + position: relative; + appearance: none; + -webkit-appearance: none; + display: flex; + width: 100%; + box-sizing: border-box; + font-weight: 700; +} + +.pagefind-modular-input::placeholder { + opacity: 0.2; +} + +.pagefind-modular-input-clear { + position: absolute; + top: calc(2px * var(--pagefind-ui-scale)); + right: calc(2px * var(--pagefind-ui-scale)); + height: calc(60px * var(--pagefind-ui-scale)); + border-radius: var(--pagefind-ui-border-radius); + padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale)); + color: var(--pagefind-ui-text); + font-size: calc(14px * var(--pagefind-ui-scale)); + cursor: pointer; + background-color: var(--pagefind-ui-background); + border: none; + appearance: none; +} + +/* ResultList */ + +.pagefind-modular-list-result { + list-style-type: none; + display: flex; + align-items: flex-start; + gap: min(calc(40px * var(--pagefind-ui-scale)), 3%); + padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale)); + border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-result:last-of-type { + border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-thumb { + width: min(30%, + calc((30% - (100px * var(--pagefind-ui-scale))) * 100000)); + max-width: calc(120px * var(--pagefind-ui-scale)); + margin-top: calc(10px * var(--pagefind-ui-scale)); + aspect-ratio: var(--pagefind-ui-image-box-ratio); + position: relative; +} + +.pagefind-modular-list-image { + display: block; + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: 0; + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; + border-radius: var(--pagefind-ui-image-border-radius); +} + +.pagefind-modular-list-inner { + flex: 1; + display: flex; + flex-direction: column; + align-items: flex-start; + margin-top: calc(10px * var(--pagefind-ui-scale)); +} + +.pagefind-modular-list-title { + display: inline-block; + font-weight: 700; + font-size: calc(21px * var(--pagefind-ui-scale)); + margin-top: 0; + margin-bottom: 0; +} + +.pagefind-modular-list-link { + color: var(--pagefind-ui-text); + text-decoration: none; +} + +.pagefind-modular-list-link:hover { + text-decoration: underline; +} + +.pagefind-modular-list-excerpt { + display: inline-block; + font-weight: 400; + font-size: calc(16px * var(--pagefind-ui-scale)); + margin-top: calc(4px * var(--pagefind-ui-scale)); + margin-bottom: 0; + min-width: calc(250px * var(--pagefind-ui-scale)); +} + +/* FilterPills */ + +.pagefind-modular-filter-pills-wrapper { + overflow-x: scroll; + padding: 15px 0; +} + +.pagefind-modular-filter-pills { + display: flex; + gap: 6px; +} + +.pagefind-modular-filter-pill { + display: flex; + justify-content: center; + align-items: center; + border: none; + appearance: none; + padding: 0 calc(24px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + color: var(--pagefind-ui-fade); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: calc(25px * var(--pagefind-ui-scale)); + font-size: calc(18px * var(--pagefind-ui-scale)); + height: calc(50px * var(--pagefind-ui-scale)); + cursor: pointer; + white-space: nowrap; +} + +.pagefind-modular-filter-pill:hover { + border-color: var(--pagefind-ui-primary); +} + +.pagefind-modular-filter-pill[aria-pressed="true"] { + border-color: var(--pagefind-ui-primary); + color: var(--pagefind-ui-primary); +} \ No newline at end of file diff --git a/pagefind/pagefind-modular-ui.js b/pagefind/pagefind-modular-ui.js new file mode 100644 index 0000000000..43f738f01d --- /dev/null +++ b/pagefind/pagefind-modular-ui.js @@ -0,0 +1,8 @@ +(()=>{var b=Object.defineProperty;var w=(i,e)=>{for(var t in e)b(i,t,{get:e[t],enumerable:!0})};var f={};w(f,{FilterPills:()=>h,Input:()=>l,Instance:()=>p,ResultList:()=>a,Summary:()=>o});var r=class i{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this.element.innerHTML=e,this}handle(e,t){return this.element.addEventListener(e,t),this}addTo(e){return e instanceof i?e.element.appendChild(this.element):e.appendChild(this.element),this.element}};var T=async(i=100)=>new Promise(e=>setTimeout(e,i)),l=class{constructor(e={}){if(this.inputEl=null,this.clearEl=null,this.instance=null,this.searchID=0,this.debounceTimeoutMs=e.debounceTimeoutMs??300,e.inputElement){if(e.containerElement){console.warn("[Pagefind Input component]: inputElement and containerElement both supplied. Ignoring the container option.");return}this.initExisting(e.inputElement)}else if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Input component]: No selector supplied for containerElement or inputElement");return}this.inputEl.addEventListener("input",async t=>{if(this.instance&&typeof t?.target?.value=="string"){this.updateState(t.target.value);let s=++this.searchID;if(await T(this.debounceTimeoutMs),s!==this.searchID)return null;this.instance?.triggerSearch(t.target.value)}}),this.inputEl.addEventListener("keydown",t=>{t.key==="Escape"&&(++this.searchID,this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState("")),t.key==="Enter"&&t.preventDefault()}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()})}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No container found for ${e} selector`);return}if(t.tagName==="INPUT")console.warn(`[Pagefind Input component]: Encountered input element for ${e} when a container was expected`),console.warn("[Pagefind Input component]: Treating containerElement option as inputElement and proceeding"),this.initExisting(e);else{t.innerHTML="";let s=0;for(;document.querySelector(`#pfmod-input-${s}`);)s+=1;let n=new r("form").class("pagefind-modular-input-wrapper").attrs({role:"search","aria-label":"Search this site",action:"javascript:void(0);"});new r("label").attrs({for:`pfmod-input-${s}`,"data-pfmod-sr-hidden":"true"}).text("Search this site").addTo(n),this.inputEl=new r("input").id(`pfmod-input-${s}`).class("pagefind-modular-input").attrs({autocapitalize:"none",enterkeyhint:"search"}).addTo(n),this.clearEl=new r("button").class("pagefind-modular-input-clear").attrs({"data-pfmod-suppressed":"true"}).text("Clear").handle("click",()=>{this.inputEl.value="",this.instance.triggerSearch(""),this.updateState("")}).addTo(n),n.addTo(t)}}initExisting(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No input element found for ${e} selector`);return}if(t.tagName!=="INPUT"){console.error(`[Pagefind Input component]: Expected ${e} to be an element`);return}this.inputEl=t}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pfmod-suppressed"):this.clearEl.setAttribute("data-pfmod-suppressed","true"))}register(e){this.instance=e,this.instance.on("search",(t,s)=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))})}focus(){this.inputEl&&this.inputEl.focus()}};var g=i=>{if(i instanceof Element)return[i];if(Array.isArray(i)&&i.every(e=>e instanceof Element))return i;if(typeof i=="string"||i instanceof String){let e=document.createElement("div");return e.innerHTML=i,[...e.childNodes]}else return console.error(`[Pagefind ResultList component]: Expected template function to return an HTML element or string, got ${typeof i}`),[]},v=()=>{let i=(e=30)=>". ".repeat(Math.floor(10+Math.random()*e));return`
  • +
    +
    +

    ${i(30)}

    +

    ${i(40)}

    +
    +
  • `},y=i=>{let e=new r("li").class("pagefind-modular-list-result"),t=new r("div").class("pagefind-modular-list-thumb").addTo(e);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(t);let s=new r("div").class("pagefind-modular-list-inner").addTo(e),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i.url}).addTo(n),new r("p").class("pagefind-modular-list-excerpt").html(i.excerpt).addTo(s),e.element},E=i=>{if(!(i instanceof HTMLElement))return null;let e=window.getComputedStyle(i).overflowY;return e!=="visible"&&e!=="hidden"?i:E(i.parentNode)},d=class{constructor(e={}){this.rawResult=e.result,this.placeholderNodes=e.placeholderNodes,this.resultFn=e.resultFn,this.intersectionEl=e.intersectionEl,this.result=null,this.waitForIntersection()}waitForIntersection(){if(!this.placeholderNodes?.length)return;let e={root:this.intersectionEl,rootMargin:"0px",threshold:.01};new IntersectionObserver((s,n)=>{this.result===null&&s?.[0]?.isIntersecting&&(this.load(),n.disconnect())},e).observe(this.placeholderNodes[0])}async load(){if(!this.placeholderNodes?.length)return;this.result=await this.rawResult.data();let e=this.resultFn(this.result),t=g(e);for(;this.placeholderNodes.length>1;)this.placeholderNodes.pop().remove();this.placeholderNodes[0].replaceWith(...t)}},a=class{constructor(e){if(this.intersectionEl=document.body,this.containerEl=null,this.results=[],this.placeholderTemplate=e.placeholderTemplate??v,this.resultTemplate=e.resultTemplate??y,e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind ResultList component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind ResultList component]: No container found for ${e} selector`);return}this.containerEl=t}append(e){for(let t of e)this.containerEl.appendChild(t)}register(e){e.on("results",t=>{this.containerEl&&(this.containerEl.innerHTML="",this.intersectionEl=E(this.containerEl),this.results=t.results.map(s=>{let n=g(this.placeholderTemplate());return this.append(n),new d({result:s,placeholderNodes:n,resultFn:this.resultTemplate,intersectionEl:this.intersectionEl})}))}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="")})}};var o=class{constructor(e={}){if(this.containerEl=null,this.defaultMessage=e.defaultMessage??"",this.term="",e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Summary component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Summary component]: No container found for ${e} selector`);return}this.containerEl=t,this.containerEl.innerText=this.defaultMessage}register(e){e.on("search",(t,s)=>{this.term=t}),e.on("results",t=>{if(!this.containerEl||!t)return;if(!this.term){this.containerEl.innerText=this.defaultMessage;return}let s=t?.results?.length??0;this.containerEl.innerText=`${s} result${s===1?"":"s"} for ${this.term}`}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerText=`Searching for ${this.term}...`)})}};var h=class{constructor(e={}){if(this.instance=null,this.wrapper=null,this.pillContainer=null,this.available={},this.selected=["All"],this.total=0,this.filterMemo="",this.filter=e.filter,this.ordering=e.ordering??null,this.alwaysShow=e.alwaysShow??!1,this.selectMultiple=e.selectMultiple??!1,!this.filter?.length){console.error("[Pagefind FilterPills component]: No filter option supplied, nothing to display");return}if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind FilterPills component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind FilterPills component]: No container found for ${e} selector`);return}t.innerHTML="";let s=`pagefind_modular_filter_pills_${this.filter}`,n=new r("div").class("pagefind-modular-filter-pills-wrapper").attrs({role:"group","aria-labelledby":s});this.alwaysShow||n.attrs({"data-pfmod-hidden":!0}),new r("div").id(s).class("pagefind-modular-filter-pills-label").attrs({"data-pfmod-sr-hidden":!0}).text(`Filter results by ${this.filter}`).addTo(n),this.pillContainer=new r("div").class("pagefind-modular-filter-pills").addTo(n),this.wrapper=n.addTo(t)}update(){let e=this.available.map(t=>t[0]).join("~");e==this.filterMemo?this.updateExisting():(this.renderNew(),this.filterMemo=e)}pushFilters(){let e=this.selected.filter(t=>t!=="All");this.instance.triggerFilter(this.filter,e)}pillInner(e,t){return this.total?`${e} (${t})`:`${e}`}renderNew(){this.available.forEach(([e,t])=>{new r("button").class("pagefind-modular-filter-pill").html(this.pillInner(e,t)).attrs({"aria-pressed":this.selected.includes(e),type:"button"}).handle("click",()=>{e==="All"?this.selected=["All"]:this.selected.includes(e)?this.selected=this.selected.filter(s=>s!==e):this.selectMultiple?this.selected.push(e):this.selected=[e],this.selected?.length?this.selected?.length>1&&(this.selected=this.selected.filter(s=>s!=="All")):this.selected=["All"],this.update(),this.pushFilters()}).addTo(this.pillContainer)})}updateExisting(){let e=[...this.pillContainer.childNodes];this.available.forEach(([t,s],n)=>{e[n].innerHTML=this.pillInner(t,s),e[n].setAttribute("aria-pressed",this.selected.includes(t))})}register(e){this.instance=e,this.instance.on("filters",t=>{if(!this.pillContainer)return;this.selectMultiple?t=t.available:t=t.total;let s=t[this.filter];if(!s){console.warn(`[Pagefind FilterPills component]: No possible values found for the ${this.filter} filter`);return}this.available=Object.entries(s),Array.isArray(this.ordering)?this.available.sort((n,c)=>{let m=this.ordering.indexOf(n[0]),_=this.ordering.indexOf(c[0]);return(m===-1?1/0:m)-(_===-1?1/0:_)}):this.available.sort((n,c)=>n[0].localeCompare(c[0])),this.available.unshift(["All",this.total]),this.update()}),e.on("results",t=>{this.pillContainer&&(this.total=t?.unfilteredResultCount||0,this.available?.[0]?.[0]==="All"&&(this.available[0][1]=this.total),this.total||this.alwaysShow?this.wrapper.removeAttribute("data-pfmod-hidden"):this.wrapper.setAttribute("data-pfmod-hidden","true"),this.update())})}};var P=async(i=50)=>await new Promise(e=>setTimeout(e,i)),u;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(u=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?modular-ui.js.*$/)[1])}catch{u="/pagefind/"}var p=class{constructor(e={}){this.__pagefind__=null,this.__initializing__=null,this.__searchID__=0,this.__hooks__={search:[],filters:[],loading:[],results:[]},this.components=[],this.searchTerm="",this.searchFilters={},this.searchResult={},this.availableFilters=null,this.totalFilters=null,this.options={bundlePath:e.bundlePath??u,mergeIndex:e.mergeIndex??[]},delete e.bundlePath,delete e.resetStyles,delete e.processResult,delete e.processTerm,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,this.pagefindOptions=e}add(e){e?.register?.(this),this.components.push(e)}on(e,t){if(!this.__hooks__[e]){let s=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Composable]: Unknown event type ${e}. Supported events: [${s}]`);return}if(typeof t!="function"){console.error(`[Pagefind Composable]: Expected callback to be a function, received ${typeof t}`);return}this.__hooks__[e].push(t)}triggerLoad(){this.__load__()}triggerSearch(e){this.searchTerm=e,this.__dispatch__("search",e,this.searchFilters),this.__search__(e,this.searchFilters)}triggerSearchWithFilters(e,t){this.searchTerm=e,this.searchFilters=t,this.__dispatch__("search",e,t),this.__search__(e,t)}triggerFilters(e){this.searchFilters=e,this.__dispatch__("search",this.searchTerm,e),this.__search__(this.searchTerm,e)}triggerFilter(e,t){this.searchFilters=this.searchFilters||{},this.searchFilters[e]=t,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(e,...t){this.__hooks__[e]?.forEach(s=>s?.(...t))}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}async __search__(e,t){this.__dispatch__("loading"),await this.__load__();let s=++this.__searchID__;if(!e||!e.length)return this.__clear__();let n=await this.__pagefind__.search(e,{filters:t});n&&this.__searchID__===s&&(n.filters&&Object.keys(n.filters)?.length&&(this.availableFilters=n.filters,this.totalFilters=n.totalFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=n,this.__dispatch__("results",this.searchResult))}async __load__(){if(this.__initializing__){for(;!this.__pagefind__;)await P(50);return}if(this.__initializing__=!0,!this.__pagefind__){let e;try{e=await import(`${this.options.bundlePath}pagefind.js`)}catch(t){console.error(t),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindComposable Instance"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location")}await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}};window.PagefindModularUI=f;})(); diff --git a/pagefind/pagefind-ui.css b/pagefind/pagefind-ui.css new file mode 100644 index 0000000000..d7984a98a4 --- /dev/null +++ b/pagefind/pagefind-ui.css @@ -0,0 +1 @@ +.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"\2937 ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable="false"])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable="true"]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)} diff --git a/pagefind/pagefind-ui.js b/pagefind/pagefind-ui.js new file mode 100644 index 0000000000..d88ad59494 --- /dev/null +++ b/pagefind/pagefind-ui.js @@ -0,0 +1,2 @@ +(()=>{var Ms=Object.defineProperty;var y=(n,e)=>{for(var t in e)Ms(n,t,{get:e[t],enumerable:!0})};function z(){}function mt(n){return n()}function gn(){return Object.create(null)}function G(n){n.forEach(mt)}function nt(n){return typeof n=="function"}function K(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}var et;function ie(n,e){return et||(et=document.createElement("a")),et.href=e,n===et.href}function En(n){return Object.keys(n).length===0}var Rn=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global,de=class{constructor(e){this.options=e,this._listeners="WeakMap"in Rn?new WeakMap:void 0}observe(e,t){return this._listeners.set(e,t),this._getObserver().observe(e,this.options),()=>{this._listeners.delete(e),this._observer.unobserve(e)}}_getObserver(){var e;return(e=this._observer)!==null&&e!==void 0?e:this._observer=new ResizeObserver(t=>{var s;for(let r of t)de.entries.set(r.target,r),(s=this._listeners.get(r.target))===null||s===void 0||s(r)})}};de.entries="WeakMap"in Rn?new WeakMap:void 0;var bn=!1;function As(){bn=!0}function vs(){bn=!1}function b(n,e){n.appendChild(e)}function S(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode&&n.parentNode.removeChild(n)}function Q(n,e){for(let t=0;tn.removeEventListener(e,t,s)}function g(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function Hs(n){return Array.from(n.childNodes)}function N(n,e){e=""+e,n.data!==e&&(n.data=e)}function pt(n,e){n.value=e??""}function B(n,e,t){n.classList[t?"add":"remove"](e)}var st=class{constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,s=null){this.e||(this.is_svg?this.e=ws(t.nodeName):this.e=C(t.nodeType===11?"TEMPLATE":t.nodeName),this.t=t.tagName!=="TEMPLATE"?t:t.content,this.c(e)),this.i(s)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;tn.indexOf(s)===-1?e.push(s):t.push(s)),t.forEach(s=>s()),re=e}var tt=new Set,ee;function ae(){ee={r:0,c:[],p:ee}}function oe(){ee.r||G(ee.c),ee=ee.p}function U(n,e){n&&n.i&&(tt.delete(n),n.i(e))}function P(n,e,t,s){if(n&&n.o){if(tt.has(n))return;tt.add(n),ee.c.push(()=>{tt.delete(n),s&&(t&&n.d(1),s())}),n.o(e)}else s&&s()}function Sn(n,e){P(n,1,1,()=>{e.delete(n.key)})}function yn(n,e,t,s,r,l,i,a,o,f,u,m){let p=n.length,h=l.length,_=p,c={};for(;_--;)c[n[_].key]=_;let d=[],T=new Map,R=new Map,M=[];for(_=h;_--;){let v=m(r,l,_),H=t(v),O=i.get(H);O?s&&M.push(()=>O.p(v,e)):(O=f(H,v),O.c()),T.set(H,d[_]=O),H in c&&R.set(H,Math.abs(_-c[H]))}let D=new Set,X=new Set;function V(v){U(v,1),v.m(a,u),i.set(v.key,v),u=v.first,h--}for(;p&&h;){let v=d[h-1],H=n[p-1],O=v.key,W=H.key;v===H?(u=v.first,p--,h--):T.has(W)?!i.has(O)||D.has(O)?V(v):X.has(W)?p--:R.get(O)>R.get(W)?(X.add(O),V(v)):(D.add(W),p--):(o(H,i),p--)}for(;p--;){let v=n[p];T.has(v.key)||o(v,i)}for(;h;)V(d[h-1]);return G(M),d}var zs=["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"],Ua=new Set([...zs]);function Mn(n,e,t){let s=n.$$.props[e];s!==void 0&&(n.$$.bound[s]=t,t(n.$$.ctx[s]))}function rt(n){n&&n.c()}function me(n,e,t,s){let{fragment:r,after_update:l}=n.$$;r&&r.m(e,t),s||ht(()=>{let i=n.$$.on_mount.map(mt).filter(nt);n.$$.on_destroy?n.$$.on_destroy.push(...i):G(i),n.$$.on_mount=[]}),l.forEach(ht)}function ue(n,e){let t=n.$$;t.fragment!==null&&(js(t.after_update),G(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Us(n,e){n.$$.dirty[0]===-1&&(se.push(n),Ns(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{let _=h.length?h[0]:p;return f.ctx&&r(f.ctx[m],f.ctx[m]=_)&&(!f.skip_bound&&f.bound[m]&&f.bound[m](_),u&&Us(n,m)),p}):[],f.update(),u=!0,G(f.before_update),f.fragment=s?s(f.ctx):!1,e.target){if(e.hydrate){As();let m=Hs(e.target);f.fragment&&f.fragment.l(m),m.forEach(k)}else f.fragment&&f.fragment.c();e.intro&&U(n.$$.fragment),me(n,e.target,e.anchor,e.customElement),vs(),kn()}fe(o)}var Ds;typeof HTMLElement=="function"&&(Ds=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:n}=this.$$;this.$$.on_disconnect=n.map(mt).filter(nt);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(n,e,t){this[n]=t}disconnectedCallback(){G(this.$$.on_disconnect)}$destroy(){ue(this,1),this.$destroy=z}$on(n,e){if(!nt(e))return z;let t=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return t.push(e),()=>{let s=t.indexOf(e);s!==-1&&t.splice(s,1)}}$set(n){this.$$set&&!En(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}});var q=class{$destroy(){ue(this,1),this.$destroy=z}$on(e,t){if(!nt(t))return z;let s=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return s.push(t),()=>{let r=s.indexOf(t);r!==-1&&s.splice(r,1)}}$set(e){this.$$set&&!En(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};function I(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=97&&e<=122||e>=65&&e<=90}function $(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=48&&e<=57}function Z(n){return I(n)||$(n)}var An=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var Rt={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var Is={}.hasOwnProperty;function lt(n,e={}){let t=vn(),s=String(n),r=s.toLowerCase(),l=0;if(n==null)throw new Error("Expected string, got `"+n+"`");if(Is.call(Rt,r)){let a=Rt[r];return(e.normalize===void 0||e.normalize===null||e.normalize)&&typeof a=="string"?lt(a):(t[An.includes(r)?"regular":"irregular"]=s,t)}for(;I(r.charCodeAt(l))&&l<9;)l++;if(l>1&&l<9){if(t.language=s.slice(0,l),l<4){let a=0;for(;r.charCodeAt(l)===45&&I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&I(r.charCodeAt(l+3))&&!I(r.charCodeAt(l+4));){if(a>2)return i(l,3,"Too many extended language subtags, expected at most 3 subtags");t.extendedLanguageSubtags.push(s.slice(l+1,l+4)),l+=4,a++}}for(r.charCodeAt(l)===45&&I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&I(r.charCodeAt(l+3))&&I(r.charCodeAt(l+4))&&!I(r.charCodeAt(l+5))&&(t.script=s.slice(l+1,l+5),l+=5),r.charCodeAt(l)===45&&(I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&!I(r.charCodeAt(l+3))?(t.region=s.slice(l+1,l+3),l+=3):$(r.charCodeAt(l+1))&&$(r.charCodeAt(l+2))&&$(r.charCodeAt(l+3))&&!$(r.charCodeAt(l+4))&&(t.region=s.slice(l+1,l+4),l+=4));r.charCodeAt(l)===45;){let a=l+1,o=a;for(;Z(r.charCodeAt(o));){if(o-a>7)return i(o,1,"Too long variant, expected at most 8 characters");o++}if(o-a>4||o-a>3&&$(r.charCodeAt(a)))t.variants.push(s.slice(a,o)),l=o;else break}for(;r.charCodeAt(l)===45&&!(r.charCodeAt(l+1)===120||!Z(r.charCodeAt(l+1))||r.charCodeAt(l+2)!==45||!Z(r.charCodeAt(l+3)));){let a=l+2,o=0;for(;r.charCodeAt(a)===45&&Z(r.charCodeAt(a+1))&&Z(r.charCodeAt(a+2));){let f=a+1;for(a=f+2,o++;Z(r.charCodeAt(a));){if(a-f>7)return i(a,2,"Too long extension, expected at most 8 characters");a++}}if(!o)return i(a,4,"Empty extension, extensions must have at least 2 characters of content");t.extensions.push({singleton:s.charAt(l+1),extensions:s.slice(l+3,a).split("-")}),l=a}}else l=0;if(l===0&&r.charCodeAt(l)===120||r.charCodeAt(l)===45&&r.charCodeAt(l+1)===120){l=l?l+2:1;let a=l;for(;r.charCodeAt(a)===45&&Z(r.charCodeAt(a+1));){let o=l+1;for(a=o;Z(r.charCodeAt(a));){if(a-o>7)return i(a,5,"Too long private-use area, expected at most 8 characters");a++}t.privateuse.push(s.slice(l+1,a)),l=a}}if(l!==s.length)return i(l,6,"Found superfluous content after tag");return t;function i(a,o,f){return e.warning&&e.warning(f,o,a),e.forgiving?t:vn()}}function vn(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function wn(n,e,t){let s=n.slice();return s[8]=e[t][0],s[9]=e[t][1],s}function Ps(n){let e,t,s,r,l,i=n[0]&&Hn(n);return{c(){i&&i.c(),e=A(),t=C("div"),s=C("p"),s.textContent=`${n[3](30)}`,r=A(),l=C("p"),l.textContent=`${n[3](40)}`,g(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),g(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(a,o){i&&i.m(a,o),S(a,e,o),S(a,t,o),b(t,s),b(t,r),b(t,l)},p(a,o){a[0]?i||(i=Hn(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function Ls(n){let e,t,s,r,l=n[1].meta?.title+"",i,a,o,f,u=n[1].excerpt+"",m,p=n[0]&&Fn(n),h=n[2].length&&On(n);return{c(){p&&p.c(),e=A(),t=C("div"),s=C("p"),r=C("a"),i=w(l),o=A(),f=C("p"),m=A(),h&&h.c(),g(r,"class","pagefind-ui__result-link svelte-j9e30"),g(r,"href",a=n[1].meta?.url||n[1].url),g(s,"class","pagefind-ui__result-title svelte-j9e30"),g(f,"class","pagefind-ui__result-excerpt svelte-j9e30"),g(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(_,c){p&&p.m(_,c),S(_,e,c),S(_,t,c),b(t,s),b(s,r),b(r,i),b(t,o),b(t,f),f.innerHTML=u,b(t,m),h&&h.m(t,null)},p(_,c){_[0]?p?p.p(_,c):(p=Fn(_),p.c(),p.m(e.parentNode,e)):p&&(p.d(1),p=null),c&2&&l!==(l=_[1].meta?.title+"")&&N(i,l),c&2&&a!==(a=_[1].meta?.url||_[1].url)&&g(r,"href",a),c&2&&u!==(u=_[1].excerpt+"")&&(f.innerHTML=u),_[2].length?h?h.p(_,c):(h=On(_),h.c(),h.m(t,null)):h&&(h.d(1),h=null)},d(_){p&&p.d(_),_&&k(e),_&&k(t),h&&h.d()}}}function Hn(n){let e;return{c(){e=C("div"),g(e,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(t,s){S(t,e,s)},d(t){t&&k(e)}}}function Fn(n){let e,t=n[1].meta.image&&Nn(n);return{c(){e=C("div"),t&&t.c(),g(e,"class","pagefind-ui__result-thumb svelte-j9e30")},m(s,r){S(s,e,r),t&&t.m(e,null)},p(s,r){s[1].meta.image?t?t.p(s,r):(t=Nn(s),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(s){s&&k(e),t&&t.d()}}}function Nn(n){let e,t,s;return{c(){e=C("img"),g(e,"class","pagefind-ui__result-image svelte-j9e30"),ie(e.src,t=n[1].meta?.image)||g(e,"src",t),g(e,"alt",s=n[1].meta?.image_alt||n[1].meta?.title)},m(r,l){S(r,e,l)},p(r,l){l&2&&!ie(e.src,t=r[1].meta?.image)&&g(e,"src",t),l&2&&s!==(s=r[1].meta?.image_alt||r[1].meta?.title)&&g(e,"alt",s)},d(r){r&&k(e)}}}function On(n){let e,t=n[2],s=[];for(let r=0;rn.toLocaleUpperCase();function Bs(n,e,t){let{show_images:s=!0}=e,{process_result:r=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],f=async m=>{t(1,a=await m.data()),t(1,a=r?.(a)??a),t(2,o=Object.entries(a.meta).filter(([p])=>!i.includes(p)))},u=(m=30)=>". ".repeat(Math.floor(10+Math.random()*m));return n.$$set=m=>{"show_images"in m&&t(0,s=m.show_images),"process_result"in m&&t(4,r=m.process_result),"result"in m&&t(5,l=m.result)},n.$$.update=()=>{if(n.$$.dirty&32)e:f(l)},[s,a,o,u,r,l]}var bt=class extends q{constructor(e){super(),Y(this,e,Bs,qs,K,{show_images:0,process_result:4,result:5})}},Un=bt;function Dn(n,e,t){let s=n.slice();return s[11]=e[t][0],s[12]=e[t][1],s}function In(n,e,t){let s=n.slice();return s[15]=e[t],s}function Vs(n){let e,t,s,r,l,i=n[0]&&Pn(n);return{c(){i&&i.c(),e=A(),t=C("div"),s=C("p"),s.textContent=`${n[5](30)}`,r=A(),l=C("p"),l.textContent=`${n[5](40)}`,g(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-4xnkmf"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-4xnkmf"),g(t,"class","pagefind-ui__result-inner svelte-4xnkmf")},m(a,o){i&&i.m(a,o),S(a,e,o),S(a,t,o),b(t,s),b(t,r),b(t,l)},p(a,o){a[0]?i||(i=Pn(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function Ws(n){let e,t,s,r,l=n[1].meta?.title+"",i,a,o,f,u,m=n[0]&&Ln(n),p=n[4]&&Bn(n),h=n[3],_=[];for(let d=0;dn.toLocaleUpperCase();function Ks(n,e,t){let{show_images:s=!0}=e,{process_result:r=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],f=[],u=!1,m=(_,c)=>{if(_.length<=c)return _;let d=[..._].sort((T,R)=>R.locations.length-T.locations.length).slice(0,3).map(T=>T.url);return _.filter(T=>d.includes(T.url))},p=async _=>{t(1,a=await _.data()),t(1,a=r?.(a)??a),t(2,o=Object.entries(a.meta).filter(([c])=>!i.includes(c))),Array.isArray(a.sub_results)&&(t(4,u=a.sub_results?.[0]?.url===(a.meta?.url||a.url)),u?t(3,f=m(a.sub_results.slice(1),3)):t(3,f=m([...a.sub_results],3)))},h=(_=30)=>". ".repeat(Math.floor(10+Math.random()*_));return n.$$set=_=>{"show_images"in _&&t(0,s=_.show_images),"process_result"in _&&t(6,r=_.process_result),"result"in _&&t(7,l=_.result)},n.$$.update=()=>{if(n.$$.dirty&128)e:p(l)},[s,a,o,f,u,h,r,l]}var Tt=class extends q{constructor(e){super(),Y(this,e,Ks,Gs,K,{show_images:0,process_result:6,result:7})}},Jn=Tt;function Yn(n,e,t){let s=n.slice();return s[10]=e[t][0],s[11]=e[t][1],s[12]=e,s[13]=t,s}function Zn(n,e,t){let s=n.slice();return s[14]=e[t][0],s[15]=e[t][1],s[16]=e,s[17]=t,s}function Xn(n){let e,t,s=n[4]("filters_label",n[5],n[6])+"",r,l,i=Object.entries(n[1]),a=[];for(let o=0;on.toLocaleUpperCase(),ts=n=>n.toLowerCase();function Ys(n,e,t){let{available_filters:s=null}=e,{show_empty_filters:r=!0}=e,{open_filters:l=[]}=e,{translate:i=()=>""}=e,{automatic_translations:a={}}=e,{translations:o={}}=e,{selected_filters:f={}}=e,u=!1,m=!1;function p(h,_){f[`${h}:${_}`]=this.checked,t(0,f)}return n.$$set=h=>{"available_filters"in h&&t(1,s=h.available_filters),"show_empty_filters"in h&&t(2,r=h.show_empty_filters),"open_filters"in h&&t(3,l=h.open_filters),"translate"in h&&t(4,i=h.translate),"automatic_translations"in h&&t(5,a=h.automatic_translations),"translations"in h&&t(6,o=h.translations),"selected_filters"in h&&t(0,f=h.selected_filters)},n.$$.update=()=>{if(n.$$.dirty&258){e:if(s&&!u){t(8,u=!0);let h=Object.entries(s||{});h.length===1&&Object.entries(h[0][1])?.length<=6&&t(7,m=!0)}}},[f,s,r,l,i,a,o,m,u,p]}var Ct=class extends q{constructor(e){super(),Y(this,e,Ys,Js,K,{available_filters:1,show_empty_filters:2,open_filters:3,translate:4,automatic_translations:5,translations:6,selected_filters:0})}},ns=Ct;var kt={};y(kt,{comments:()=>Xs,default:()=>$s,direction:()=>Qs,strings:()=>xs,thanks_to:()=>Zs});var Zs="Jan Claasen ",Xs="",Qs="ltr",xs={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]"},$s={thanks_to:Zs,comments:Xs,direction:Qs,strings:xs};var St={};y(St,{comments:()=>tr,default:()=>rr,direction:()=>nr,strings:()=>sr,thanks_to:()=>er});var er="Jermanuts",tr="",nr="rtl",sr={placeholder:"\u0628\u062D\u062B",clear_search:"\u0627\u0645\u0633\u062D",load_more:"\u062D\u0645\u0651\u0650\u0644 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",search_label:"\u0627\u0628\u062D\u062B \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639",filters_label:"\u062A\u0635\u0641\u064A\u0627\u062A",zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629 \u0644 [SEARCH_TERM]",alt_search:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u064A\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644 [DIFFERENT_TERM] \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643",search_suggestion:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u062C\u0631\u0628 \u0623\u062D\u062F \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u062A\u0627\u0644\u064A\u0629:",searching:"\u064A\u0628\u062D\u062B \u0639\u0646 [SEARCH_TERM]..."},rr={thanks_to:er,comments:tr,direction:nr,strings:sr};var yt={};y(yt,{comments:()=>ir,default:()=>ur,direction:()=>ar,strings:()=>or,thanks_to:()=>lr});var lr="Maruf Alom ",ir="",ar="ltr",or={placeholder:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",clear_search:"\u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09C1\u09A8",load_more:"\u0986\u09B0\u09CB \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09C1\u09A8",search_label:"\u098F\u0987 \u0993\u09DF\u09C7\u09AC\u09B8\u09BE\u0987\u099F\u09C7 \u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",filters_label:"\u09AB\u09BF\u09B2\u09CD\u099F\u09BE\u09B0",zero_results:"[SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF",many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",alt_search:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF. \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09C7 [DIFFERENT_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7",search_suggestion:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u09AC\u09BF\u09B7\u09DF\u09C7. \u09A8\u09BF\u09A8\u09CD\u09AE\u09C7\u09B0 \u09AC\u09BF\u09B7\u09DF\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09A6\u09C7\u0996\u09C1\u09A8:",searching:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u099A\u09B2\u099B\u09C7 [SEARCH_TERM]..."},ur={thanks_to:lr,comments:ir,direction:ar,strings:or};var Mt={};y(Mt,{comments:()=>_r,default:()=>hr,direction:()=>fr,strings:()=>dr,thanks_to:()=>cr});var cr="Pablo Villaverde ",_r="",fr="ltr",dr={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9s resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]..."},hr={thanks_to:cr,comments:_r,direction:fr,strings:dr};var At={};y(At,{comments:()=>pr,default:()=>Rr,direction:()=>gr,strings:()=>Er,thanks_to:()=>mr});var mr="Dalibor Hon ",pr="",gr="ltr",Er={placeholder:"Hledat",clear_search:"Smazat",load_more:"Na\u010D\xEDst dal\u0161\xED v\xFDsledky",search_label:"Prohledat tuto str\xE1nku",filters_label:"Filtry",zero_results:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]",many_results:"[COUNT] v\xFDsledk\u016F pro [SEARCH_TERM]",one_result:"[COUNT] v\xFDsledek pro [SEARCH_TERM]",alt_search:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Zobrazuj\xED se v\xFDsledky pro [DIFFERENT_TERM]",search_suggestion:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Souvisej\xEDc\xED v\xFDsledky hled\xE1n\xED:",searching:"Hled\xE1m [SEARCH_TERM]..."},Rr={thanks_to:mr,comments:pr,direction:gr,strings:Er};var vt={};y(vt,{comments:()=>Tr,default:()=>Sr,direction:()=>Cr,strings:()=>kr,thanks_to:()=>br});var br="Jonas Smedegaard ",Tr="",Cr="ltr",kr={placeholder:"S\xF8g",clear_search:"Nulstil",load_more:"Indl\xE6s flere resultater",search_label:"S\xF8g p\xE5 dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v et af disse s\xF8geord i stedet:",searching:"S\xF8ger efter [SEARCH_TERM]..."},Sr={thanks_to:br,comments:Tr,direction:Cr,strings:kr};var wt={};y(wt,{comments:()=>Mr,default:()=>wr,direction:()=>Ar,strings:()=>vr,thanks_to:()=>yr});var yr="Jan Claasen ",Mr="",Ar="ltr",vr={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche f\xFCr [SEARCH_TERM]"},wr={thanks_to:yr,comments:Mr,direction:Ar,strings:vr};var Ht={};y(Ht,{comments:()=>Fr,default:()=>jr,direction:()=>Nr,strings:()=>Or,thanks_to:()=>Hr});var Hr="Liam Bigelow ",Fr="",Nr="ltr",Or={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]..."},jr={thanks_to:Hr,comments:Fr,direction:Nr,strings:Or};var Ft={};y(Ft,{comments:()=>Ur,default:()=>Pr,direction:()=>Dr,strings:()=>Ir,thanks_to:()=>zr});var zr="Pablo Villaverde ",Ur="",Dr="ltr",Ir={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]..."},Pr={thanks_to:zr,comments:Ur,direction:Dr,strings:Ir};var Nt={};y(Nt,{comments:()=>qr,default:()=>Wr,direction:()=>Br,strings:()=>Vr,thanks_to:()=>Lr});var Lr="Ali Khaleqi Yekta ",qr="",Br="rtl",Vr={placeholder:"\u062C\u0633\u062A\u062C\u0648",clear_search:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",load_more:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u062A\u0627\u06CC\u062C \u0628\u06CC\u0634\u062A\u0631",search_label:"\u062C\u0633\u062A\u062C\u0648 \u062F\u0631 \u0633\u0627\u06CC\u062A",filters_label:"\u0641\u06CC\u0644\u062A\u0631\u0647\u0627",zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",alt_search:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u062F\u0631 \u0639\u0648\u0636 \u0646\u062A\u0627\u06CC\u062C \u0628\u0631\u0627\u06CC [DIFFERENT_TERM] \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F",search_suggestion:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u06CC\u06A9\u06CC \u0627\u0632 \u062C\u0633\u062A\u062C\u0648\u0647\u0627\u06CC \u0632\u06CC\u0631 \u0631\u0627 \u0627\u0645\u062A\u062D\u0627\u0646 \u06A9\u0646\u06CC\u062F:",searching:"\u062F\u0631 \u062D\u0627\u0644 \u062C\u0633\u062A\u062C\u0648\u06CC [SEARCH_TERM]..."},Wr={thanks_to:Lr,comments:qr,direction:Br,strings:Vr};var Ot={};y(Ot,{comments:()=>Kr,default:()=>Zr,direction:()=>Jr,strings:()=>Yr,thanks_to:()=>Gr});var Gr="Valtteri Laitinen ",Kr="",Jr="ltr",Yr={placeholder:"Haku",clear_search:"Tyhjenn\xE4",load_more:"Lataa lis\xE4\xE4 tuloksia",search_label:"Hae t\xE4lt\xE4 sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. N\xE4ytet\xE4\xE4n tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]..."},Zr={thanks_to:Gr,comments:Kr,direction:Jr,strings:Yr};var jt={};y(jt,{comments:()=>Qr,default:()=>el,direction:()=>xr,strings:()=>$r,thanks_to:()=>Xr});var Xr="Nicolas Friedli ",Qr="",xr="ltr",$r={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]..."},el={thanks_to:Xr,comments:Qr,direction:xr,strings:$r};var zt={};y(zt,{comments:()=>nl,default:()=>ll,direction:()=>sl,strings:()=>rl,thanks_to:()=>tl});var tl="Pablo Villaverde ",nl="",sl="ltr",rl={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]..."},ll={thanks_to:tl,comments:nl,direction:sl,strings:rl};var Ut={};y(Ut,{comments:()=>al,default:()=>cl,direction:()=>ol,strings:()=>ul,thanks_to:()=>il});var il="Nir Tamir ",al="",ol="rtl",ul={placeholder:"\u05D7\u05D9\u05E4\u05D5\u05E9",clear_search:"\u05E0\u05D9\u05E7\u05D5\u05D9",load_more:"\u05E2\u05D5\u05D3 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",search_label:"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D6\u05D4",filters_label:"\u05DE\u05E1\u05E0\u05E0\u05D9\u05DD",zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",many_results:"\u05E0\u05DE\u05E6\u05D0\u05D5 [COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",one_result:"\u05E0\u05DE\u05E6\u05D0\u05D4 \u05EA\u05D5\u05E6\u05D0\u05D4 \u05D0\u05D7\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",alt_search:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05DE\u05D5\u05E6\u05D2\u05D5\u05EA \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [DIFFERENT_TERM]",search_suggestion:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05E0\u05E1\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9\u05D9\u05DD \u05D4\u05D1\u05D0\u05D9\u05DD:",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D0\u05EA [SEARCH_TERM]..."},cl={thanks_to:il,comments:al,direction:ol,strings:ul};var Dt={};y(Dt,{comments:()=>fl,default:()=>ml,direction:()=>dl,strings:()=>hl,thanks_to:()=>_l});var _l="Amit Yadav ",fl="",dl="ltr",hl={placeholder:"\u0916\u094B\u091C\u0947\u0902",clear_search:"\u0938\u093E\u092B \u0915\u0930\u0947\u0902",load_more:"\u0914\u0930 \u0905\u0927\u093F\u0915 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0915\u0930\u0947\u0902",search_label:"\u0907\u0938 \u0938\u093E\u0907\u091F \u092E\u0947\u0902 \u0916\u094B\u091C\u0947\u0902",filters_label:"\u092B\u093C\u093F\u0932\u094D\u091F\u0930",zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E",many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u0947",one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u093E",alt_search:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F [DIFFERENT_TERM] \u0915\u0947 \u0932\u093F\u090F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E \u0930\u0939\u093E \u0939\u0948",search_suggestion:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0928\u093F\u092E\u094D\u0928\u0932\u093F\u0916\u093F\u0924 \u0916\u094B\u091C\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u094B\u0908 \u090F\u0915 \u0906\u091C\u093C\u092E\u093E\u090F\u0902:",searching:"[SEARCH_TERM] \u0915\u0940 \u0916\u094B\u091C \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948..."},ml={thanks_to:_l,comments:fl,direction:dl,strings:hl};var It={};y(It,{comments:()=>gl,default:()=>bl,direction:()=>El,strings:()=>Rl,thanks_to:()=>pl});var pl="Diomed ",gl="",El="ltr",Rl={placeholder:"Tra\u017Ei",clear_search:"O\u010Disti",load_more:"U\u010Ditaj vi\u0161e rezultata",search_label:"Pretra\u017Ei ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Poku\u0161aj s jednom od ovih pretraga:",searching:"Pretra\u017Eujem [SEARCH_TERM]..."},bl={thanks_to:pl,comments:gl,direction:El,strings:Rl};var Pt={};y(Pt,{comments:()=>Cl,default:()=>yl,direction:()=>kl,strings:()=>Sl,thanks_to:()=>Tl});var Tl="Adam Laki ",Cl="",kl="ltr",Sl={placeholder:"Keres\xE9s",clear_search:"T\xF6rl\xE9s",load_more:"Tov\xE1bbi tal\xE1latok bet\xF6lt\xE9se",search_label:"Keres\xE9s az oldalon",filters_label:"Sz\u0171r\xE9s",zero_results:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",many_results:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",one_result:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",alt_search:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Tal\xE1latok mutat\xE1sa ink\xE1bb a(z) [DIFFERENT_TERM] kifejez\xE9sre",search_suggestion:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Pr\xF3b\xE1ld meg a k\xF6vetkez\u0151 keres\xE9sek egyik\xE9t:",searching:"Keres\xE9s a(z) [SEARCH_TERM] kifejez\xE9sre..."},yl={thanks_to:Tl,comments:Cl,direction:kl,strings:Sl};var Lt={};y(Lt,{comments:()=>Al,default:()=>Hl,direction:()=>vl,strings:()=>wl,thanks_to:()=>Ml});var Ml="Nixentric",Al="",vl="ltr",wl={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]..."},Hl={thanks_to:Ml,comments:Al,direction:vl,strings:wl};var qt={};y(qt,{comments:()=>Nl,default:()=>zl,direction:()=>Ol,strings:()=>jl,thanks_to:()=>Fl});var Fl="Cosette Bruhns Alonso, Andrew Janco ",Nl="",Ol="ltr",jl={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra pi\xF9 risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]..."},zl={thanks_to:Fl,comments:Nl,direction:Ol,strings:jl};var Bt={};y(Bt,{comments:()=>Dl,default:()=>Ll,direction:()=>Il,strings:()=>Pl,thanks_to:()=>Ul});var Ul="Tate",Dl="",Il="ltr",Pl={placeholder:"\u691C\u7D22",clear_search:"\u30AF\u30EA\u30A2",load_more:"\u6B21\u3092\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059"},Ll={thanks_to:Ul,comments:Dl,direction:Il,strings:Pl};var Vt={};y(Vt,{comments:()=>Bl,default:()=>Gl,direction:()=>Vl,strings:()=>Wl,thanks_to:()=>ql});var ql="Seokho Son ",Bl="",Vl="ltr",Wl={placeholder:"\uAC80\uC0C9\uC5B4",clear_search:"\uBE44\uC6B0\uAE30",load_more:"\uAC80\uC0C9 \uACB0\uACFC \uB354 \uBCF4\uAE30",search_label:"\uC0AC\uC774\uD2B8 \uAC80\uC0C9",filters_label:"\uD544\uD130",zero_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C",many_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",one_result:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",alt_search:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. [DIFFERENT_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC",search_suggestion:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. \uCD94\uCC9C \uAC80\uC0C9\uC5B4: ",searching:"[SEARCH_TERM] \uAC80\uC0C9 \uC911..."},Gl={thanks_to:ql,comments:Bl,direction:Vl,strings:Wl};var Wt={};y(Wt,{comments:()=>Jl,default:()=>Xl,direction:()=>Yl,strings:()=>Zl,thanks_to:()=>Kl});var Kl="",Jl="",Yl="ltr",Zl={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta \u0113tahi otinga k\u0113",search_label:"Rapu",filters_label:"T\u0101tari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga k\u0113 ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakam\u0101tau ki ng\u0101 mea atu:",searching:"Rapu ki [SEARCH_TERM]..."},Xl={thanks_to:Kl,comments:Jl,direction:Yl,strings:Zl};var Gt={};y(Gt,{comments:()=>xl,default:()=>ti,direction:()=>$l,strings:()=>ei,thanks_to:()=>Ql});var Ql="Paul van Brouwershaven",xl="",$l="ltr",ei={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]..."},ti={thanks_to:Ql,comments:xl,direction:$l,strings:ei};var Kt={};y(Kt,{comments:()=>si,default:()=>ii,direction:()=>ri,strings:()=>li,thanks_to:()=>ni});var ni="Christopher Wingate",si="",ri="ltr",li={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]"},ii={thanks_to:ni,comments:si,direction:ri,strings:li};var Jt={};y(Jt,{comments:()=>oi,default:()=>_i,direction:()=>ui,strings:()=>ci,thanks_to:()=>ai});var ai="",oi="",ui="ltr",ci={placeholder:"Szukaj",clear_search:"Wyczy\u015B\u0107",load_more:"Za\u0142aduj wi\u0119cej",search_label:"Przeszukaj t\u0119 stron\u0119",filters_label:"Filtry",zero_results:"Brak wynik\xF3w dla [SEARCH_TERM]",many_results:"[COUNT] wynik\xF3w dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",alt_search:"Brak wynik\xF3w dla [SEARCH_TERM]. Wy\u015Bwietlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wynik\xF3w dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]..."},_i={thanks_to:ai,comments:oi,direction:ui,strings:ci};var Yt={};y(Yt,{comments:()=>di,default:()=>pi,direction:()=>hi,strings:()=>mi,thanks_to:()=>fi});var fi="Jonatah",di="",hi="ltr",mi={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]..."},pi={thanks_to:fi,comments:di,direction:hi,strings:mi};var Zt={};y(Zt,{comments:()=>Ei,default:()=>Ti,direction:()=>Ri,strings:()=>bi,thanks_to:()=>gi});var gi="Bogdan Mateescu ",Ei="",Ri="ltr",bi={placeholder:"C\u0103utare",clear_search:"\u015Eterge\u0163i",load_more:"\xCEnc\u0103rca\u021Bi mai multe rezultate",search_label:"C\u0103uta\u021Bi \xEEn acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afi\u0219eaz\u0103 \xEEn schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. \xCEncerca\u021Bi una dintre urm\u0103toarele c\u0103ut\u0103ri:",searching:"Se caut\u0103 dup\u0103: [SEARCH_TERM]..."},Ti={thanks_to:gi,comments:Ei,direction:Ri,strings:bi};var Xt={};y(Xt,{comments:()=>ki,default:()=>Mi,direction:()=>Si,strings:()=>yi,thanks_to:()=>Ci});var Ci="Aleksandr Gordeev",ki="",Si="ltr",yi={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]"},Mi={thanks_to:Ci,comments:ki,direction:Si,strings:yi};var Qt={};y(Qt,{comments:()=>vi,default:()=>Fi,direction:()=>wi,strings:()=>Hi,thanks_to:()=>Ai});var Ai="Andrija Sagicc",vi="",wi="ltr",Hi={placeholder:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",clear_search:"\u0411\u0440\u0438\u0441\u0430\u045A\u0435",load_more:"\u041F\u0440\u0438\u043A\u0430\u0437 \u0432\u0438\u0448\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",search_label:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0441\u0430\u0458\u0442\u0430",filters_label:"\u0424\u0438\u043B\u0442\u0435\u0440\u0438",zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",alt_search:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u0440\u0438\u043A\u0430\u0437 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043A \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [DIFFERENT_TERM]",search_suggestion:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u043E\u043A\u0443\u0448\u0430\u0458\u0442\u0435 \u0441\u0430 \u043D\u0435\u043A\u043E\u043C \u043E\u0434 \u0441\u043B\u0435\u0434\u0435\u045B\u0438\u0445 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430:",searching:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0442\u0435\u0440\u043C\u0438\u043D\u0430 [SEARCH_TERM]..."},Fi={thanks_to:Ai,comments:vi,direction:wi,strings:Hi};var xt={};y(xt,{comments:()=>Oi,default:()=>Ui,direction:()=>ji,strings:()=>zi,thanks_to:()=>Ni});var Ni="Montazar Al-Jaber ",Oi="",ji="ltr",zi={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]..."},Ui={thanks_to:Ni,comments:Oi,direction:ji,strings:zi};var $t={};y($t,{comments:()=>Ii,default:()=>qi,direction:()=>Pi,strings:()=>Li,thanks_to:()=>Di});var Di="Anonymous",Ii="",Pi="ltr",Li={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]..."},qi={thanks_to:Di,comments:Ii,direction:Pi,strings:Li};var en={};y(en,{comments:()=>Vi,default:()=>Ki,direction:()=>Wi,strings:()=>Gi,thanks_to:()=>Bi});var Bi="",Vi="",Wi="ltr",Gi={placeholder:"\u0BA4\u0BC7\u0B9F\u0BC1\u0B95",clear_search:"\u0B85\u0BB4\u0BBF\u0B95\u0BCD\u0B95\u0BC1\u0B95",load_more:"\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95",search_label:"\u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BB3\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BCD \u0BA4\u0BC7\u0B9F\u0BC1\u0B95",filters_label:"\u0BB5\u0B9F\u0BBF\u0B95\u0B9F\u0BCD\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",zero_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",many_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 [COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",one_result:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",alt_search:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD\u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8, \u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B92\u0BA4\u0BCD\u0BA4 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD \u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8.\u0B87\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC0\u0B9F\u0BBE\u0BA9 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC8 \u0BA4\u0BC7\u0B9F\u0BC1\u0B95:",searching:"[SEARCH_TERM] \u0BA4\u0BC7\u0B9F\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1"},Ki={thanks_to:Bi,comments:Vi,direction:Wi,strings:Gi};var tn={};y(tn,{comments:()=>Yi,default:()=>Qi,direction:()=>Zi,strings:()=>Xi,thanks_to:()=>Ji});var Ji="Taylan \xD6zg\xFCr Bildik",Yi="",Zi="ltr",Xi={placeholder:"Ara\u015Ft\u0131r",clear_search:"Temizle",load_more:"Daha fazla sonu\xE7",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] i\xE7in sonu\xE7 yok",many_results:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",one_result:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",alt_search:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Bunun yerine [DIFFERENT_TERM] i\xE7in sonu\xE7lar g\xF6steriliyor",search_suggestion:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Alternatif olarak a\u015Fa\u011F\u0131daki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] ara\u015Ft\u0131r\u0131l\u0131yor..."},Qi={thanks_to:Ji,comments:Yi,direction:Zi,strings:Xi};var nn={};y(nn,{comments:()=>$i,default:()=>na,direction:()=>ea,strings:()=>ta,thanks_to:()=>xi});var xi="Vladyslav Lyshenko ",$i="",ea="ltr",ta={placeholder:"\u041F\u043E\u0448\u0443\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0449\u0435",search_label:"\u041F\u043E\u0448\u0443\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0456\u043B\u044C\u0442\u0440\u0438",zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",alt_search:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0456\u0437 \u0442\u0430\u043A\u0438\u0445 \u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456\u0432",searching:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]"},na={thanks_to:xi,comments:$i,direction:ea,strings:ta};var sn={};y(sn,{comments:()=>ra,default:()=>aa,direction:()=>la,strings:()=>ia,thanks_to:()=>sa});var sa="Long Nhat Nguyen",ra="",la="ltr",ia={placeholder:"T\xECm ki\u1EBFm",clear_search:"X\xF3a",load_more:"Nhi\u1EC1u k\u1EBFt qu\u1EA3 h\u01A1n",search_label:"T\xECm ki\u1EBFm trong trang n\xE0y",filters_label:"B\u1ED9 l\u1ECDc",zero_results:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",many_results:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",one_result:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",alt_search:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Ki\u1EC3m th\u1ECB k\u1EBFt qu\u1EA3 thay th\u1EBF v\u1EDBi [DIFFERENT_TERM]",search_suggestion:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Th\u1EED m\u1ED9t trong c\xE1c t\xECm ki\u1EBFm:",searching:"\u0110ang t\xECm ki\u1EBFm cho [SEARCH_TERM]..."},aa={thanks_to:sa,comments:ra,direction:la,strings:ia};var rn={};y(rn,{comments:()=>ua,default:()=>fa,direction:()=>ca,strings:()=>_a,thanks_to:()=>oa});var oa="Amber Song",ua="",ca="ltr",_a={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},fa={thanks_to:oa,comments:ua,direction:ca,strings:_a};var ln={};y(ln,{comments:()=>ha,default:()=>ga,direction:()=>ma,strings:()=>pa,thanks_to:()=>da});var da="Amber Song",ha="",ma="ltr",pa={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F09\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u7D22",filters_label:"\u7BE9\u9078",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},ga={thanks_to:da,comments:ha,direction:ma,strings:pa};var an={};y(an,{comments:()=>Ra,default:()=>Ca,direction:()=>ba,strings:()=>Ta,thanks_to:()=>Ea});var Ea="Amber Song",Ra="",ba="ltr",Ta={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},Ca={thanks_to:Ea,comments:Ra,direction:ba,strings:Ta};var ka=[kt,St,yt,Mt,At,vt,wt,Ht,Ft,Nt,Ot,jt,zt,Ut,Dt,It,Pt,Lt,qt,Bt,Vt,Wt,Gt,Kt,Jt,Yt,Zt,Xt,Qt,xt,$t,en,tn,nn,sn,rn,ln,an],ss=ka,rs=["../../translations/af.json","../../translations/ar.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/en.json","../../translations/es.json","../../translations/fa.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/he.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/nl.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function ls(n,e,t){let s=n.slice();return s[51]=e[t],s}function is(n){let e,t,s;function r(i){n[37](i)}let l={show_empty_filters:n[5],open_filters:n[6],available_filters:n[18],translate:n[20],automatic_translations:n[19],translations:n[7]};return n[0]!==void 0&&(l.selected_filters=n[0]),e=new ns({props:l}),le.push(()=>Mn(e,"selected_filters",r)),{c(){rt(e.$$.fragment)},m(i,a){me(e,i,a),s=!0},p(i,a){let o={};a[0]&32&&(o.show_empty_filters=i[5]),a[0]&64&&(o.open_filters=i[6]),a[0]&262144&&(o.available_filters=i[18]),a[0]&524288&&(o.automatic_translations=i[19]),a[0]&128&&(o.translations=i[7]),!t&&a[0]&1&&(t=!0,o.selected_filters=i[0],Cn(()=>t=!1)),e.$set(o)},i(i){s||(U(e.$$.fragment,i),s=!0)},o(i){P(e.$$.fragment,i),s=!1},d(i){ue(e,i)}}}function as(n){let e,t,s,r,l=[Ma,ya],i=[];function a(o,f){return o[14]?0:1}return t=a(n,[-1,-1]),s=i[t]=l[t](n),{c(){e=C("div"),s.c(),g(e,"class","pagefind-ui__results-area svelte-e9gkc3")},m(o,f){S(o,e,f),i[t].m(e,null),r=!0},p(o,f){let u=t;t=a(o,f),t===u?i[t].p(o,f):(ae(),P(i[u],1,1,()=>{i[u]=null}),oe(),s=i[t],s?s.p(o,f):(s=i[t]=l[t](o),s.c()),U(s,1),s.m(e,null))},i(o){r||(U(s),r=!0)},o(o){P(s),r=!1},d(o){o&&k(e),i[t].d()}}}function ya(n){let e,t,s,r=[],l=new Map,i,a,o;function f(c,d){return c[13].results.length===0?wa:c[13].results.length===1?va:Aa}let u=f(n,[-1,-1]),m=u(n),p=n[13].results.slice(0,n[17]),h=c=>c[51].id;for(let c=0;cn[17]&&us(n);return{c(){e=C("p"),m.c(),t=A(),s=C("ol");for(let c=0;cc[17]?_?_.p(c,d):(_=us(c),_.c(),_.m(a.parentNode,a)):_&&(_.d(1),_=null)},i(c){if(!o){for(let d=0;d{o[p]=null}),oe(),r=o[s],r?r.p(e,m):(r=o[s]=a[s](e),r.c()),U(r,1),r.m(l.parentNode,l))},i(u){i||(U(r),i=!0)},o(u){P(r),i=!1},d(u){u&&k(t),o[s].d(u),u&&k(l)}}}function us(n){let e,t=n[20]("load_more",n[19],n[7])+"",s,r,l;return{c(){e=C("button"),s=w(t),g(e,"type","button"),g(e,"class","pagefind-ui__button svelte-e9gkc3")},m(i,a){S(i,e,a),b(e,s),r||(l=J(e,"click",n[22]),r=!0)},p(i,a){a[0]&524416&&t!==(t=i[20]("load_more",i[19],i[7])+"")&&N(s,t)},d(i){i&&k(e),r=!1,l()}}}function cs(n){let e,t=n[20]("searching",n[19],n[7]).replace(/\[SEARCH_TERM\]/,n[16])+"",s;return{c(){e=C("p"),s=w(t),g(e,"class","pagefind-ui__message svelte-e9gkc3")},m(r,l){S(r,e,l),b(e,s)},p(r,l){l[0]&589952&&t!==(t=r[20]("searching",r[19],r[7]).replace(/\[SEARCH_TERM\]/,r[16])+"")&&N(s,t)},d(r){r&&k(e)}}}function Na(n){let e,t,s,r,l,i,a=n[20]("clear_search",n[19],n[7])+"",o,f,u,m,p,h,_,c,d=n[12]&&is(n),T=n[15]&&as(n);return{c(){e=C("div"),t=C("form"),s=C("input"),l=A(),i=C("button"),o=w(a),f=A(),u=C("div"),d&&d.c(),m=A(),T&&T.c(),g(s,"class","pagefind-ui__search-input svelte-e9gkc3"),g(s,"type","text"),g(s,"placeholder",r=n[20]("placeholder",n[19],n[7])),g(s,"autocapitalize","none"),g(s,"enterkeyhint","search"),s.autofocus=n[8],g(i,"class","pagefind-ui__search-clear svelte-e9gkc3"),B(i,"pagefind-ui__suppressed",!n[9]),g(u,"class","pagefind-ui__drawer svelte-e9gkc3"),B(u,"pagefind-ui__hidden",!n[15]),g(t,"class","pagefind-ui__form svelte-e9gkc3"),g(t,"role","search"),g(t,"aria-label",p=n[20]("search_label",n[19],n[7])),g(t,"action","javascript:void(0);"),g(e,"class","pagefind-ui svelte-e9gkc3"),B(e,"pagefind-ui--reset",n[1])},m(R,M){S(R,e,M),b(e,t),b(t,s),pt(s,n[9]),n[34](s),b(t,l),b(t,i),b(i,o),n[35](i),b(t,f),b(t,u),d&&d.m(u,null),b(u,m),T&&T.m(u,null),h=!0,n[8]&&s.focus(),_||(c=[J(s,"focus",n[21]),J(s,"keydown",n[32]),J(s,"input",n[33]),J(i,"click",n[36]),J(t,"submit",Oa)],_=!0)},p(R,M){(!h||M[0]&524416&&r!==(r=R[20]("placeholder",R[19],R[7])))&&g(s,"placeholder",r),(!h||M[0]&256)&&(s.autofocus=R[8]),M[0]&512&&s.value!==R[9]&&pt(s,R[9]),(!h||M[0]&524416)&&a!==(a=R[20]("clear_search",R[19],R[7])+"")&&N(o,a),(!h||M[0]&512)&&B(i,"pagefind-ui__suppressed",!R[9]),R[12]?d?(d.p(R,M),M[0]&4096&&U(d,1)):(d=is(R),d.c(),U(d,1),d.m(u,m)):d&&(ae(),P(d,1,1,()=>{d=null}),oe()),R[15]?T?(T.p(R,M),M[0]&32768&&U(T,1)):(T=as(R),T.c(),U(T,1),T.m(u,null)):T&&(ae(),P(T,1,1,()=>{T=null}),oe()),(!h||M[0]&32768)&&B(u,"pagefind-ui__hidden",!R[15]),(!h||M[0]&524416&&p!==(p=R[20]("search_label",R[19],R[7])))&&g(t,"aria-label",p),(!h||M[0]&2)&&B(e,"pagefind-ui--reset",R[1])},i(R){h||(U(d),U(T),h=!0)},o(R){P(d),P(T),h=!1},d(R){R&&k(e),n[34](null),n[35](null),d&&d.d(),T&&T.d(),_=!1,G(c)}}}var Oa=n=>n.preventDefault();function ja(n,e,t){let s={},r=rs.map(E=>E.match(/([^\/]+)\.json$/)[1]);for(let E=0;Ej[E]??F[E]??"";gt(()=>{let E=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",F=lt(E.toLocaleLowerCase());t(19,hn=s[`${F.language}-${F.script}-${F.region}`]||s[`${F.language}-${F.region}`]||s[`${F.language}`]||s.en)}),Et(()=>{H?.destroy?.(),H=null});let mn=async()=>{if(!at&&(t(12,at=!0),!H)){let E;try{E=await import(`${l}pagefind.js`)}catch(j){console.error(j),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindUI"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}u||t(24,u=f?12:30);let F={...d||{},excerptLength:u};await E.options(F);for(let j of T){if(!j.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let L=j.bundlePath;delete j.bundlePath,await E.mergeIndex(L,j)}H=E,hs()}},hs=async()=>{H&&(dn=await H.filters(),(!ce||!Object.keys(ce).length)&&t(18,ce=dn))},ms=E=>{let F={};return Object.entries(E).filter(([,j])=>j).forEach(([j])=>{let[L,te]=j.split(/:(.*)$/);F[L]=F[L]||[],F[L].push(te)}),F},_e,ps=async(E,F)=>{if(!E){t(15,ut=!1),_e&&clearTimeout(_e);return}let j=ms(F),L=()=>gs(E,j);c>0&&E?(_e&&clearTimeout(_e),_e=setTimeout(L,c),await pn(),H.preload(E,{filters:j})):L(),Es()},pn=async()=>{for(;!H;)mn(),await new Promise(E=>setTimeout(E,50))},gs=async(E,F)=>{t(16,fn=E||""),typeof p=="function"&&(E=p(E)),t(14,ot=!0),t(15,ut=!0),await pn();let j=++_n,L={filters:F};X&&typeof X=="object"&&(L.sort=X);let te=await H.search(E,L);_n===j&&(te.filters&&Object.keys(te.filters)?.length&&t(18,ce=te.filters),t(13,cn=te),t(14,ot=!1),t(17,ct=i))},Es=()=>{let E=W.offsetWidth;E!=fs&&t(10,O.style.paddingRight=`${E+2}px`,O)},Rs=E=>{E?.preventDefault(),t(17,ct+=i)},bs=E=>{E.key==="Escape"&&(t(9,v=""),O.blur()),E.key==="Enter"&&E.preventDefault()};function Ts(){v=this.value,t(9,v),t(23,R)}function Cs(E){le[E?"unshift":"push"](()=>{O=E,t(10,O)})}function ks(E){le[E?"unshift":"push"](()=>{W=E,t(11,W)})}let Ss=()=>{t(9,v=""),O.blur()};function ys(E){V=E,t(0,V)}return n.$$set=E=>{"base_path"in E&&t(25,l=E.base_path),"page_size"in E&&t(26,i=E.page_size),"reset_styles"in E&&t(1,a=E.reset_styles),"show_images"in E&&t(2,o=E.show_images),"show_sub_results"in E&&t(3,f=E.show_sub_results),"excerpt_length"in E&&t(24,u=E.excerpt_length),"process_result"in E&&t(4,m=E.process_result),"process_term"in E&&t(27,p=E.process_term),"show_empty_filters"in E&&t(5,h=E.show_empty_filters),"open_filters"in E&&t(6,_=E.open_filters),"debounce_timeout_ms"in E&&t(28,c=E.debounce_timeout_ms),"pagefind_options"in E&&t(29,d=E.pagefind_options),"merge_index"in E&&t(30,T=E.merge_index),"trigger_search_term"in E&&t(23,R=E.trigger_search_term),"translations"in E&&t(7,M=E.translations),"autofocus"in E&&t(8,D=E.autofocus),"sort"in E&&t(31,X=E.sort),"selected_filters"in E&&t(0,V=E.selected_filters)},n.$$.update=()=>{if(n.$$.dirty[0]&8388608)e:R&&(t(9,v=R),t(23,R=""));if(n.$$.dirty[0]&513)e:ps(v,V)},[V,a,o,f,m,h,_,M,D,v,O,W,at,cn,ot,ut,fn,ct,ce,hn,ds,mn,Rs,R,u,l,i,p,c,d,T,X,bs,Ts,Cs,ks,Ss,ys]}var on=class extends q{constructor(e){super(),Y(this,e,ja,Na,K,{base_path:25,page_size:26,reset_styles:1,show_images:2,show_sub_results:3,excerpt_length:24,process_result:4,process_term:27,show_empty_filters:5,open_filters:6,debounce_timeout_ms:28,pagefind_options:29,merge_index:30,trigger_search_term:23,translations:7,autofocus:8,sort:31,selected_filters:0},null,[-1,-1])}},_s=on;var un;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(un=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1])}catch{un="/pagefind/"}var it=class{constructor(e){this._pfs=null;let t=e.element??"[data-pagefind-ui]",s=e.bundlePath??un,r=e.pageSize??5,l=e.resetStyles??!0,i=e.showImages??!0,a=e.showSubResults??!1,o=e.excerptLength??0,f=e.processResult??null,u=e.processTerm??null,m=e.showEmptyFilters??!0,p=e.openFilters??[],h=e.debounceTimeoutMs??300,_=e.mergeIndex??[],c=e.translations??[],d=e.autofocus??!1,T=e.sort??null;delete e.element,delete e.bundlePath,delete e.pageSize,delete e.resetStyles,delete e.showImages,delete e.showSubResults,delete e.excerptLength,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.openFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,delete e.autofocus,delete e.sort;let R=t instanceof HTMLElement?t:document.querySelector(t);R?this._pfs=new _s({target:R,props:{base_path:s,page_size:r,reset_styles:l,show_images:i,show_sub_results:a,excerpt_length:o,process_result:f,process_term:u,show_empty_filters:m,open_filters:p,debounce_timeout_ms:h,merge_index:_,translations:c,autofocus:d,sort:T,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${t}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}triggerFilters(e){let t={};for(let[s,r]of Object.entries(e))if(Array.isArray(r))for(let l of r)t[`${s}:${l}`]=!0;else t[`${s}:${r}`]=!0;this._pfs.$$set({selected_filters:t})}destroy(){this._pfs.$destroy()}};window.PagefindUI=it;})(); diff --git a/pagefind/pagefind.en-us_48573bd275bba.pf_meta b/pagefind/pagefind.en-us_48573bd275bba.pf_meta new file mode 100644 index 0000000000000000000000000000000000000000..2562ed7f7c90d54d6bcaf39bd1a5d04fd52997e2 GIT binary patch literal 86 zcmb2|=3oE;rvHrg3lrjQ<)-H8mKMjG7#pXhnWu?1 hHm4?~rsWqUmE=QZQY_3YOp}Zn8m>H4)3pbh1^~Ru9IgNW literal 0 HcmV?d00001 diff --git a/pagefind/pagefind.js b/pagefind/pagefind.js new file mode 100644 index 0000000000..035a438665 --- /dev/null +++ b/pagefind/pagefind.js @@ -0,0 +1,9 @@ +const pagefind_version="1.3.0";let wasm_bindgen;(function(){const __exports={};let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString()}let wasm=undefined;let cachedUint8Memory0=null;function getUint8Memory0(){if(cachedUint8Memory0===null||cachedUint8Memory0.byteLength===0){cachedUint8Memory0=new Uint8Array(wasm.memory.buffer)}return cachedUint8Memory0}let WASM_VECTOR_LEN=0;function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1,1)>>>0;getUint8Memory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr}__exports.init_pagefind=function(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret>>>0};const cachedTextEncoder=(typeof TextEncoder!=='undefined'?new TextEncoder('utf-8'):{encode:()=>{throw Error('TextEncoder not available')}});const encodeString=(typeof cachedTextEncoder.encodeInto==='function'?function(arg,view){return cachedTextEncoder.encodeInto(arg,view)}:function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length}});function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length,1)>>>0;getUint8Memory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr}let len=arg.length;let ptr=malloc(len,1)>>>0;const mem=getUint8Memory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=realloc(ptr,len,len=offset+arg.length*3,1)>>>0;const view=getUint8Memory0().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written;ptr=realloc(ptr,len,offset,1)>>>0}WASM_VECTOR_LEN=offset;return ptr}__exports.set_ranking_weights=function(ptr,weights){const ptr0=passStringToWasm0(weights,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.set_ranking_weights(ptr,ptr0,len0);return ret>>>0};__exports.load_index_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret>>>0};__exports.load_filter_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret>>>0};__exports.add_synthetic_filter=function(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret>>>0};let cachedInt32Memory0=null;function getInt32Memory0(){if(cachedInt32Memory0===null||cachedInt32Memory0.byteLength===0){cachedInt32Memory0=new Int32Array(wasm.memory.buffer)}return cachedInt32Memory0}const cachedTextDecoder=(typeof TextDecoder!=='undefined'?new TextDecoder('utf-8',{ignoreBOM:true,fatal:true}):{decode:()=>{throw Error('TextDecoder not available')}});if(typeof TextDecoder!=='undefined'){cachedTextDecoder.decode()};function getStringFromWasm0(ptr,len){ptr=ptr>>>0;return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr,ptr+len))}__exports.request_indexes=function(ptr,query){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.request_filter_indexes=function(ptr,filters){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_filter_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.request_all_filter_indexes=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.request_all_filter_indexes(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.filters=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.filters(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.search=function(ptr,query,filter,sort,exact){let deferred4_0;let deferred4_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;wasm.search(retptr,ptr,ptr0,len0,ptr1,len1,ptr2,len2,exact);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred4_0=r0;deferred4_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred4_0,deferred4_1,1)}};async function __wbg_load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports)}catch(e){if(module.headers.get('Content-Type')!='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e)}else{throw e}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports)}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module}}else{return instance}}}function __wbg_get_imports(){const imports={};imports.wbg={};return imports}function __wbg_init_memory(imports,maybe_memory){}function __wbg_finalize_init(instance,module){wasm=instance.exports;__wbg_init.__wbindgen_wasm_module=module;cachedInt32Memory0=null;cachedUint8Memory0=null;return wasm}function initSync(module){if(wasm!==undefined)return wasm;const imports=__wbg_get_imports();__wbg_init_memory(imports);if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module)}const instance=new WebAssembly.Instance(module,imports);return __wbg_finalize_init(instance,module)}async function __wbg_init(input){if(wasm!==undefined)return wasm;if(typeof input==='undefined'&&typeof script_src!=='undefined'){input=script_src.replace(/\.js$/,'_bg.wasm')}const imports=__wbg_get_imports();if(typeof input==='string'||(typeof Request==='function'&&input instanceof Request)||(typeof URL==='function'&&input instanceof URL)){input=fetch(input)}__wbg_init_memory(imports);const{instance,module}=await __wbg_load(await input,imports);return __wbg_finalize_init(instance,module)}wasm_bindgen=Object.assign(__wbg_init,{initSync},__exports)})();var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i2=0;i2<31;++i2){b[i2]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i2=0;var l=new u16(mb);for(;i2>>rvb]=sv}}}}else{co=new u16(s);for(i2=0;i2>>15-cd[i2]}}}return co};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i2=1;i2m)m=a[i2]}return m};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)};var shft=function(p){return(p+7)/8|0};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i2=0;i2>>4;if(s<16){ldt[i2++]=s}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i2-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i2++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){if(noSt)err(0);break}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i2=sym-257,b=fleb[i2];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2)};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)))}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1}catch(e){}var gz_default=gunzipSync;var calculate_excerpt_region=(word_positions,excerpt_length)=>{if(word_positions.length===0){return 0}let words=[];for(const word of word_positions){words[word.location]=words[word.location]||0;words[word.location]+=word.balanced_score}if(words.length<=excerpt_length){return 0}let densest=words.slice(0,excerpt_length).reduce((partialSum,a)=>partialSum+a,0);let working_sum=densest;let densest_at=[0];for(let i2=0;i2densest){densest=working_sum;densest_at=[i2]}else if(working_sum===densest&&densest_at[densest_at.length-1]===i2-1){densest_at.push(i2)}}let midpoint=densest_at[Math.floor(densest_at.length/2)];return midpoint};var build_excerpt=(content,start,length,locations,not_before,not_from)=>{let is_zws_delimited=content.includes("\u200B");let fragment_words=[];if(is_zws_delimited){fragment_words=content.split("\u200B")}else{fragment_words=content.split(/[\r\n\s]+/g)}for(let word of locations){if(fragment_words[word]?.startsWith(``)){continue}fragment_words[word]=`${fragment_words[word]}`}let endcap=not_from??fragment_words.length;let startcap=not_before??0;if(endcap-startcapendcap){start=endcap-length}if(start{const anchors=fragment.anchors.filter((a)=>/h\d/i.test(a.element)&&a.text?.length&&/\S/.test(a.text)).sort((a,b)=>a.location-b.location);const results=[];let current_anchor_position=0;let current_anchor={title:fragment.meta["title"],url:fragment.url,weighted_locations:[],locations:[],excerpt:""};const add_result=(end_range)=>{if(current_anchor.locations.length){const relative_weighted_locations=current_anchor.weighted_locations.map((l)=>{return{weight:l.weight,balanced_score:l.balanced_score,location:l.location-current_anchor_position}});const excerpt_start=calculate_excerpt_region(relative_weighted_locations,desired_excerpt_length)+current_anchor_position;const excerpt_length=end_range?Math.min(end_range-excerpt_start,desired_excerpt_length):desired_excerpt_length;current_anchor.excerpt=build_excerpt(fragment.raw_content??"",excerpt_start,excerpt_length,current_anchor.locations,current_anchor_position,end_range);results.push(current_anchor)}};for(let word of fragment.weighted_locations){if(!anchors.length||word.location=anchors[0].location){next_anchor=anchors.shift()}let anchored_url=fragment.url;try{const url_is_fq=/^((https?:)?\/\/)/.test(anchored_url);if(url_is_fq){let fq_url=new URL(anchored_url);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString()}else{if(!/^\//.test(anchored_url)){anchored_url=`/${anchored_url}`}let fq_url=new URL(`https://example.com${anchored_url}`);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString().replace(/^https:\/\/example.com/,"")}}catch(e){console.error(`Pagefind: Couldn't process ${anchored_url} for a search result`)}current_anchor_position=next_anchor.location;current_anchor={title:next_anchor.text,url:anchored_url,anchor:next_anchor,weighted_locations:[word],locations:[word.location],excerpt:""}}}add_result(anchors[0]?.location);return results};var asyncSleep=async(ms=100)=>{return new Promise((r)=>setTimeout(r,ms))};var PagefindInstance=class{constructor(opts={}){this.version=pagefind_version;this.backend=wasm_bindgen;this.decoder=new TextDecoder("utf-8");this.wasm=null;this.basePath=opts.basePath||"/pagefind/";this.primary=opts.primary||false;if(this.primary&&!opts.basePath){this.initPrimary()}if(/[^\/]$/.test(this.basePath)){this.basePath=`${this.basePath}/`}if(window?.location?.origin&&this.basePath.startsWith(window.location.origin)){this.basePath=this.basePath.replace(window.location.origin,"")}this.baseUrl=opts.baseUrl||this.defaultBaseUrl();if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`}this.indexWeight=opts.indexWeight??1;this.excerptLength=opts.excerptLength??30;this.mergeFilter=opts.mergeFilter??{};this.ranking=opts.ranking;this.highlightParam=opts.highlightParam??null;this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.searchMeta=null;this.languages=null}initPrimary(){let derivedBasePath=import.meta.url.match(/^(.*\/)pagefind.js.*$/)?.[1];if(derivedBasePath){this.basePath=derivedBasePath}else{console.warn(["Pagefind couldn't determine the base of the bundle from the import path. Falling back to the default.","Set a basePath option when initialising Pagefind to ignore this message."].join("\n"))}}defaultBaseUrl(){let default_base=this.basePath.match(/^(.*\/)_?pagefind/)?.[1];return default_base||"/"}async options(options2){const opts=["basePath","baseUrl","indexWeight","excerptLength","mergeFilter","highlightParam","ranking"];for(const[k,v]of Object.entries(options2)){if(k==="mergeFilter"){let filters2=this.stringifyFilters(v);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}else if(k==="ranking"){await this.set_ranking(options2.ranking)}else if(opts.includes(k)){if(k==="basePath"&&typeof v==="string")this.basePath=v;if(k==="baseUrl"&&typeof v==="string")this.baseUrl=v;if(k==="indexWeight"&&typeof v==="number")this.indexWeight=v;if(k==="excerptLength"&&typeof v==="number")this.excerptLength=v;if(k==="mergeFilter"&&typeof v==="object")this.mergeFilter=v;if(k==="highlightParam"&&typeof v==="string")this.highlightParam=v}else{console.warn(`Unknown Pagefind option ${k}. Allowed options: [${opts.join(", ")}]`)}}}decompress(data,file="unknown file"){if(this.decoder.decode(data.slice(0,12))==="pagefind_dcd"){return data.slice(12)}data=gz_default(data);if(this.decoder.decode(data.slice(0,12))!=="pagefind_dcd"){console.error(`Decompressing ${file} appears to have failed: Missing signature`);return data}return data.slice(12)}async set_ranking(ranking){if(!ranking)return;let rankingWeights={term_similarity:ranking.termSimilarity??null,page_length:ranking.pageLength??null,term_saturation:ranking.termSaturation??null,term_frequency:ranking.termFrequency??null};let ptr=await this.getPtr();this.raw_ptr=this.backend.set_ranking_weights(ptr,JSON.stringify(rankingWeights))}async init(language,opts){await this.loadEntry();let index=this.findIndex(language);let lang_wasm=index.wasm?index.wasm:"unknown";let resources=[this.loadMeta(index.hash)];if(opts.load_wasm===true){resources.push(this.loadWasm(lang_wasm))}await Promise.all(resources);this.raw_ptr=this.backend.init_pagefind(new Uint8Array(this.searchMeta));if(Object.keys(this.mergeFilter)?.length){let filters2=this.stringifyFilters(this.mergeFilter);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}if(this.ranking){await this.set_ranking(this.ranking)}}async loadEntry(){try{let entry_response=await fetch(`${this.basePath}pagefind-entry.json?ts=${Date.now()}`);let entry_json=await entry_response.json();this.languages=entry_json.languages;if(entry_json.version!==this.version){if(this.primary){console.warn(["Pagefind JS version doesn't match the version in your search index.",`Pagefind JS: ${this.version}. Pagefind index: ${entry_json.version}`,"If you upgraded Pagefind recently, you likely have a cached pagefind.js file.","If you encounter any search errors, try clearing your cache."].join("\n"))}else{console.warn(["Merging a Pagefind index from a different version than the main Pagefind instance.",`Main Pagefind JS: ${this.version}. Merged index (${this.basePath}): ${entry_json.version}`,"If you encounter any search errors, make sure that both sites are running the same version of Pagefind."].join("\n"))}}}catch(e){console.error(`Failed to load Pagefind metadata: +${e?.toString()}`);throw new Error("Failed to load Pagefind metadata")}}findIndex(language){if(this.languages){let index=this.languages[language];if(index)return index;index=this.languages[language.split("-")[0]];if(index)return index;let topLang=Object.values(this.languages).sort((a,b)=>b.page_count-a.page_count);if(topLang[0])return topLang[0]}throw new Error("Pagefind Error: No language indexes found.")}async loadMeta(index){try{let compressed_resp=await fetch(`${this.basePath}pagefind.${index}.pf_meta`);let compressed_meta=await compressed_resp.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata")}catch(e){console.error(`Failed to load the meta index: +${e?.toString()}`)}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await fetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression")}this.wasm=await this.backend(final_wasm)}catch(e){console.error(`Failed to load the Pagefind WASM: +${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM: +${e?.toString()}`)}}async _loadGenericChunk(url,method){try{let compressed_resp=await fetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk)}catch(e){console.error(`Failed to load the index chunk ${url}: +${e?.toString()}`)}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk")}return await this.loaded_chunks[hash]}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk")}return await this.loaded_filters[hash]}async _loadFragment(hash){let compressed_resp=await fetch(`${this.basePath}fragment/${hash}.pf_fragment`);let compressed_fragment=await compressed_resp.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment))}async loadFragment(hash,weighted_locations=[],search_term){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash)}let fragment=await this.loaded_fragments[hash];fragment.weighted_locations=weighted_locations;fragment.locations=weighted_locations.map((l)=>l.location);if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,">");fragment.content=fragment.content.replace(/\u200B/g,"")}if(!fragment.raw_url){fragment.raw_url=fragment.url}fragment.url=this.processedUrl(fragment.raw_url,search_term);const excerpt_start=calculate_excerpt_region(weighted_locations,this.excerptLength);fragment.excerpt=build_excerpt(fragment.raw_content,excerpt_start,this.excerptLength,fragment.locations);fragment.sub_results=calculate_sub_results(fragment,this.excerptLength);return fragment}fullUrl(raw){if(/^(https?:)?\/\//.test(raw)){return raw}return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/")}processedUrl(url,search_term){const normalized=this.fullUrl(url);if(this.highlightParam===null){return normalized}let individual_terms=search_term.split(/\s+/);try{let processed=new URL(normalized);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString()}catch(e){try{let processed=new URL(`https://example.com${normalized}`);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString().replace(/^https:\/\/example\.com/,"")}catch(e2){return normalized}}}async getPtr(){while(this.raw_ptr===null){await asyncSleep(50)}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)")}return this.raw_ptr}parseFilters(str){let output={};if(!str)return output;for(const block of str.split("__PF_FILTER_DELIM__")){let[filter,values]=block.split(/:(.*)$/);output[filter]={};if(values){for(const valueBlock of values.split("__PF_VALUE_DELIM__")){if(valueBlock){let extract=valueBlock.match(/^(.*):(\d+)$/);if(extract){let[,value,count]=extract;output[filter][value]=parseInt(count)??count}}}}}return output}stringifyFilters(obj={}){return JSON.stringify(obj)}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`)}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`)}return`${sort}:${direction}`}return``}async filters(){let ptr=await this.getPtr();let filters2=this.backend.request_all_filter_indexes(ptr);let filter_chunks=filters2.split(" ").filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks]);ptr=await this.getPtr();let results=this.backend.filters(ptr);return this.parseFilters(results)}async preload(term,options2={}){await this.search(term,{...options2,preload:true})}async search(term,options2={}){options2={verbose:false,filters:{},sort:{},...options2};const log=(str)=>{if(options2.verbose)console.log(str)};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`)}term=term.toLowerCase().trim().replace(/[\.`~!@#\$%\^&\*\(\)\{\}\[\]\\\|:;'",<>\/\?\-]/g,"").replace(/\s{2,}/g," ").trim();log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}}}let sort_list=this.stringifySorts(options2.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options2.filters);log(`Stringified filters to ${filter_list}`);let index_resp=this.backend.request_indexes(ptr,term);let filter_resp=this.backend.request_filter_indexes(ptr,filter_list);let chunks=index_resp.split(" ").filter((v)=>v).map((chunk)=>this.loadChunk(chunk));let filter_chunks=filter_resp.split(" ").filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options2.preload){log(`Preload \u2014 bailing out of search operation now.`);return null}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,filter_list,sort_list,exact_search);log(`Got the raw search result: ${result}`);let[unfilteredResultCount,all_results,filters2,totalFilters]=result.split(/:([^:]*):(.*)__PF_UNFILTERED_DELIM__(.*)$/);let filterObj=this.parseFilters(filters2);let totalFilterObj=this.parseFilters(totalFilters);log(`Remaining filters: ${JSON.stringify(result)}`);let results=all_results.length?all_results.split(" "):[];let resultsInterface=results.map((result2)=>{let[hash,score,all_locations]=result2.split("@");log(`Processing result: + hash:${hash} + score:${score} + locations:${all_locations}`);let weighted_locations=all_locations.length?all_locations.split(",").map((l)=>{let[weight,balanced_score,location]=l.split(">");return{weight:parseInt(weight)/24,balanced_score:parseFloat(balanced_score),location:parseInt(location)}}):[];let locations=weighted_locations.map((l)=>l.location);return{id:hash,score:parseFloat(score)*this.indexWeight,words:locations,data:async()=>await this.loadFragment(hash,weighted_locations,term)}});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? "" : "s"} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);return{results:resultsInterface,unfilteredResultCount:parseInt(unfilteredResultCount),filters:filterObj,totalFilters:totalFilterObj,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}}}};var Pagefind=class{constructor(options2={}){this.backend=wasm_bindgen;this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({...options2,primary:true});this.instances=[this.primary];this.init(options2?.language)}async options(options2){await this.primary.options(options2)}async init(overrideLanguage){if(document?.querySelector){const langCode=document.querySelector("html")?.getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase()}await this.primary.init(overrideLanguage?overrideLanguage:this.primaryLanguage,{load_wasm:true})}async mergeIndex(indexPath,options2={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return}let newInstance=new PagefindInstance({primary:false,basePath:indexPath});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50)}await newInstance.init(options2.language||this.primaryLanguage,{load_wasm:false});delete options2["language"];await newInstance.options(options2)}mergeFilters(filters2){const merged={};for(const searchFilter of filters2){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count}}}}return merged}async filters(){let filters2=await Promise.all(this.instances.map((i2)=>i2.filters()));return this.mergeFilters(filters2)}async preload(term,options2={}){await Promise.all(this.instances.map((i2)=>i2.preload(term,options2)))}async debouncedSearch(term,options2,debounceTimeoutMs){const thisSearchID=++this.searchID;this.preload(term,options2);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null}const searchResult=await this.search(term,options2);if(thisSearchID!==this.searchID){return null}return searchResult}async search(term,options2={}){let search2=await Promise.all(this.instances.map((i2)=>i2.search(term,options2)));const filters2=this.mergeFilters(search2.map((s)=>s.filters));const totalFilters=this.mergeFilters(search2.map((s)=>s.totalFilters));const results=search2.map((s)=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search2.map((s)=>s.timings);const unfilteredResultCount=search2.reduce((sum,s)=>sum+s.unfilteredResultCount,0);return{results,unfilteredResultCount,filters:filters2,totalFilters,timings}}};var pagefind=void 0;var initial_options=void 0;var init_pagefind=()=>{if(!pagefind){pagefind=new Pagefind(initial_options??{})}};var options=async(new_options)=>{if(pagefind){await pagefind.options(new_options)}else{initial_options=new_options}};var init=async()=>{init_pagefind()};var destroy=async()=>{pagefind=void 0;initial_options=void 0};var mergeIndex=async(indexPath,options2)=>{init_pagefind();return await pagefind.mergeIndex(indexPath,options2)};var search=async(term,options2)=>{init_pagefind();return await pagefind.search(term,options2)};var debouncedSearch=async(term,options2,debounceTimeoutMs=300)=>{init_pagefind();return await pagefind.debouncedSearch(term,options2,debounceTimeoutMs)};var preload=async(term,options2)=>{init_pagefind();return await pagefind.preload(term,options2)};var filters=async()=>{init_pagefind();return await pagefind.filters()};export{debouncedSearch,destroy,filters,init,mergeIndex,options,preload,search} \ No newline at end of file diff --git a/pagefind/wasm.en-us.pagefind b/pagefind/wasm.en-us.pagefind new file mode 100644 index 0000000000000000000000000000000000000000..6a6c03e38c0c83ae461923e29005f11b971f620f GIT binary patch literal 70873 zcmV(wKVqaosE@f^mF)lMMFfMmtb8P_3T3>8j zS6V;+?!UP+_SkXS#7;Wr-t-|wfVvL^3R2V?Dd}3Fqz`>ULQZJhHsdy}9dG|Y;xQt- zTWKRyP$ewX2O|O-p&SgB$DW&g_Qc8KGsmAfE{>ggQ3@gCKgsN<>U6|W-J!n{ACR)c zG#;ko+wmTB9Kmf}y5wCt8g@K`5J!_v`H!YvS`tSiPxGW__^FoYucWc6Q~o`3RGz_~ zs5{(GwM3I($t7NaMt7EY?IkzmlHbZ1Kj#@R&_wDC{_5W{=ZuWPC15R8tCREu#V z^;jIEQEQiEvJA7ZC}yIIzGl28iY5TOM?=EHpIL}s-4(_ zilP8>DOycQprw^eL?~lk9p~YB>q^%R4~t}=YqgrzSPa8;3w)57=4pl0I*QO8$4bjk zfy)5wkXOW%Mj0Jpq-K6iB2YTyd6o7LZX+0_FoAqoKK57uJjVcfM;6P=>mrRVsnPJo z*%x10cwLFciIXQ5XI}PZBR*2wPR%aPEF3#IcjDx8Gq28`c<%YdQ{n^FeBq^I$7jGY z``XMi&wu0OocL=s#%<4@cwupN!8d-WCXO9HK6C2zlZ(&KE}nSC_lmz)qYJb1-vV(F)763$wH0rcUOi zC}jF`-&VKuzv{ozzj9vxh5jS`mzth`sNd5U^g4gOtN%>DsejWfo8K_E^j-B|`j-9! z9sI8PP+wOkzG=R%Z|hI>57a;FZ<#ClQ~7Hb<#)`7`d`$u-!^ZUkM(Ez2YN;SgZwvL z`0D0jQ>zlK0&Vt< z?^yYT`F?d?`muR+?0bsG=H0Oui0z{68@*@0x}yB(J=M{-HILrY z9sNGBT~*c5#pjyHw@Xs)Q=e(~JQvvDqRkF;PQQNUz@Pu#<=bZI!1C{ZuzE?IrWtd2 zIok&0f~6b;nx?J~`hU0lgQmfDlpU;|Z!c4l=vrt1JY|YBOO5}+R@o4AU+j(Oj zq%8~6&Vds3r8We`-6M9pO{Q(bZl7L2KXH!OblL`XWO^a1fe{OY7|rW6ZB(ds9zD?z zX+21b?_6IO#jfH49?kz$A}!vbhTX;WZo_TIarW=ZhW9^0!@lC|jk4h^HT-Px?nl1C zj+zcFvzVvueC=GiBLyDi)NMVrHFVLAQyWa<d}_V@%dAm=g%L zvltWGn6U@)=Yl-4vBd}2%i@tEWG@(zN%c4Z3Mq8ZaGJK^_TwOwPRvXNPtYDPK0Mfv zb(N+?2bvaPM{r0L2e@DLlW3^9SLp9&~ZyNtW5Upq)L0=UUj#T6kWI+S!<2 z<^g)Hh1m{zUW>Awu%ZAE23g8}vER$tF?MIB>+eeMW;XF|n5|yTPXN87O~sf`W;Jw2 z7#CSg8CgcWZmeQTw4reyaCsE)2Km69>!!5 z!UcJY3ZTXTYI=Y|xxNyh@z#LG_Xnuy12n1t8rfal6{0Snkpna;0Uhmnds{EeLRKfw zwu3&vC7@_5;hZ+$`Oq*tBf>M<0#B0#glAB}GjMnYJv?FB_lKvkW-B~R7f*8^cm|u` zX@K0+P&~~>JOhs>JT~wQ>;v>+j{!VuL+rlHZpwTnvL&YG30h(cOao-8!1UfmkGX&B zjNT>c<~|I6v}^dlRWhz=F?I;oErom(ZI8BpULe2p8A}6ijWVCCgB3%9d!&^J+nWJz z27ou|hI@p|Wn+Jj7{}W<2G;2wp&_NZOFQe35gtxHbtj)X$!Gh$?hzyY9x(|SbVZcd zg!-DjdqmAnLNt)cB*`Zs&YEpb+r-v}$Y*<>eCkd zIe(pkdfkIl@8$fZytJ(|P7l~ReR|T_I@?eBvVHiOWOF}b?8Mh|c@Qm>^-s|)on9J9 zr@&n!5g2sF2OHreRI`_nrIj=`?Y{+tU+oqE-P|M(+oY$yvFDz*fPi#R^2M1`6XP#Z zFc>Qbfd%X7Hm8uc;Q|^Z&Llh}TX-~(^fTs}1o*~@J>J6mK%>-jBd#ZdnRHO4iZT4Z zMwiduroQ?;bM7sZ$+&WXnRIu|kj$@_K+^p(%_Dz%X^>hrDk3(0Nw*oit87fVyFHr= z8zE>DVQduf@x7-2%D8h@<1}h~Yv_KY`^t|obWoh} z5;O9D<2}sA3A1s+Y@F+6xD8Zp1T+g>ag;?46WNq(iXfwH6rDpzr$QPJS8S1y5>df}W_9JA>kqtdu(g3TA84J+CS& zFJkOw<<9VOHcFdz<<0-~4 z=Xo2~VmFmbLIMh|??PMiq^KR?>E40@#&p%(iw+kOcvIvQIWmN*!$nf8hy1TJ^avQk zY+HVjuuU5YE$0mpDcBF4jYq`9S`AAMZ3qh^G{1E=2hMMOdQ&g^3JMz^$;CABY*jc+IW0gdC;8+7!3RiOKnfaJhl(F6ZajPg<80ufp<+p0#f0DJTfFva#(g9-o0FhNBfPUC!yt@vs0*dAHTH9LoZp>}olG1uG zdY!(No!KxD*uBYlwu1^1yapy=6!?Tt?i9UvzbJF^Hep%X4tu5T#Fw_meQ6twNj>)E zZOW7qcWAOCsAm>AXX^6Oh%>?l@28zl3?`?PW12E+q-?}kSR>4EBH$$r60o@#6v@tT`xR()c zUjJr`?`FhqXMF#qjF{@@(LkO?<&i>>KM0-7X*YtrAJ>m7@tqVJIe;1xBFy-BDB$qcIa{hs|qKqtivAb-7o+|-vrtC|y2Ph+CbsVP) zL?teVuH?pf_KvAAufU;mqv_J{2`^g-TkE|nyA0p zv{C1=ff3UC>25(J?JL@icn$W>t>V?1Y~x&u2;l(8vDLbcEq0fpvC^?ITZ{wXo{bwe z`L>YF+m20B#N>;2zi%7i1T0Vcig#)0XmBzL8nj4Q7TI_aN!RY!`I&GU3rKhEWmqVYP;)NLM9Sh) z#sn#2yb^(Ul*#uy-0bqajet<*z znw$VO-Rf#c02@Ml3xMMx0Q(Xyf}Y*c4{+!JHYB_a0LLC+9A_l0M9|PBcHu^VC;Pu! zsRC@a1USw@&VwrehYsLy0ATpz`v!Ou4c-87>;T?cgTs3P>~0fss1}={S{!6aB|NLI0-V$d2=F&NA$HtDHv($ngz81%A=kdCQ~ zJ2(8rxLzNuZ&7XI?9K8H+~3!qL`EBn53Nd4;Q7I+QwQ~FkC#rrs4@U6;E(q;*oab+Z`O>vP)rK(eW4ORH)m&lc~PC@dklMZBbMp5h}V}E51e_My9 z7Bfx#ns%r5DuaFG^i^(yztNq;yE%e)x)(&bY0zW_l&G7O_$Rj;V})j)+yPa%NVn_%rIF$!AAqMyE)p>1$#AN-kdEYOvwr9Ks17vQ2%9^abuM zoGvFbT)9=AbFYeX!#SVD4YZDR5!>Q&Ev&y}gIDMGDK3Iy?gc7AlKQ*vqM()BqTo&_ zasnr$nlGOg+RBzW3fP_y7>nhlOXgQVGI zIWc)Qx~G#SL&@Amc6CofM-eXhXciNcrD11>rrNXtDDA;UK!TT^Y-on1#0EIiWDGU2 zi7qVe`y=E6v?nhAl9y7JG*hGk-l_nxm@6o}np>a+7U!SOBa*rBG6zFX=CUGlMcAl~ zGLO8>$zhf<58AA-*ik8UL6=9$g-WUCie>WJyjvIcbHR0F8s4hZ-k^X2L0z$Ds+qY} z5mpx%7?Kg#;*`#4HFic8Li^NCl$v%Or#v5iaKyn`TZ=8{Y3l8VU; z{tj<_Tyy1)iL!(B%M{Hc?7qvR)3*lnV;FyGT_y<=+| z4IW#2Wp%%Ns#~wYlCfY7<}EtvE%>seH+k@RD>cz);lDD9-UM7y|D+AaGPad-+ny!yqS zK^MzV>P&C~eSgo>MBI1H4E>zjxC1TAJYgM-Qhs7XEL|pO2l`7j!BCdMkYL)GJwdWHeu6yF+D)AW+AA90EAFyy1yAtHj$xyy=PaM67sXrP_0mh*eLlR@p8Q zalsQ8s%-BPvF3@jD%*QRyyJ;?s%-BQvF?fWD%&+8u6W`~mF*@GS3PmH%JvBn*FAB) z%Jvx%AA92CD%%|*ZhPW(mF-I+KKI1uRkpKa4PSWTiz?eW>RJB83#-cZ*8lK!y)jZ< z*Ztjl-^|X=%$s?;46xoM&VA4OVK>DxA1oGGuHrW;0c;Y}ibgB9ANUZd)+}`aAq!Qr ze;odFZs+^X|Lv-gC}9|L(oNdxM90_hvp{?KGQNQg6XEd&vRvOFV4(4^D6_NG4k` z*2cZ57G{C$myjVS7wAnZ8KYmxd2W7g4i;Hu0I+@n*#}J@INVez55?vmveaj7-{%4& z9-!j};3}P0K?>8Ngjt-4TZcB{P>Ne5Xuy&1Tx`YGDXOKONI#Z(A}up5aY?PXxGivT zG(tqJtRNNBEr|XeL71E%`d1JHbyiGvp*b{$1OmAvCEzB((I6&qoML8~=nh-SygW{D z%jF4Ox{KpOeLh|!d;IHK?0CI|_p>}q=P9+>CYS_+iLwF8$WLbWN~S^*nTk^mjEgzR zoR*Bn3x9*NqvVE4bCrCCLXxI;$WXjahC*a;hN3u#a)yGzL|B#RiUd;09}ls%uObNy zKEm z04F4gQd?9D2?$<`WEdlmC9<3uQHjWfN=PnPz{$zQ%gKeN)1a8-;^z}qzc+I$q?ucx zCvz)6E`^Gy9jDMLHQ6lEf_^qxo@k{Bb}A@O65A}X^f)1+hICRV6X5d1OY^-%#yy*` zAyMy|upvd{#E^Z&DMywV2XrW(;A?5iQBo07c#vuQFtj~ z_42!-?=h(zFKeyftX8E~o8`VLlg07d)fM(6v4hE>pR8%*U7rv1u#B1dsmDxblM$ZO zYMzW}Oh&YujBpmKWip~M8PVxvB%O-%%))dw6`@};6`_*U#(mOdUL{;vmto_6uP&SA zy6k{PrOqVL>zXUVpLfqfRQD_-1&EZ$4UT%1SMD?QSu>-jAE20I7+(Z48PjJ~T-~U* z$`<%eTi~U@1@f5NrD#{KXi|!H=Zd~WMN3`_t}pxn7S}ekq5$pMxIcNi71eA%*5vE- zXMZaSv8XntN8@q}YhMG{O5Kk|n=ySLsqV&hDZO5gO=XTUeRdFThFI$Y$G(GUcZ<|Q7qY*cFmC|wSMX*1zg>gMO zVV0D956)C89GAaRmK-~>;Dui?JeRY^g%*u3mlS^X37VmRQTtT^MorSh$Pt#Dz~_H$ z(5D}psECb_QryR|K_3V>1Mi|MBIxT{8UmA0V({l6<7D_BpwWvNw})|n4^tXQCflZ5vpjOYToX8lx_1Ki{3%~3`TE8Is-jDI>HdVfnuMEl9%0@j$qQk)@rmybk z>!-^6ciec**~87b=e~Ss{^;?Ax!HpgW>Eulm266hUErbFL{oQOEURqBBlV>>??ZM| zwt>~*brm;G?xhJ~qj}$a^Okq8nKr3rc>BG`IZS_R+yk^`&EdE~9aHUF|MTI0{p-7b zdTXYAFi%F*;H;+sn4GpXnj|%T^Ca0Kc|BX+JCzLWj!UiZZ$T3^GTXKd`UGi=(*SKt zHf)7I(J=7Uc6C!7>1uxmuR}1boMva#WMp`Whz6|M61grZ2$m5A3JM6O6SJSa*rJjx zylePNk>INPdj)&cNH=&5^$Mxvcc8jUtfA+5>nc;lrk0y`D6oymt3qR4)QMUQJnIkc76u|w&_n$fb~Eq zC8-&mp2UjqhLLd$ZyE7m;fF?$K`(NjL_N_RH!{i>^@KU9Qj}JX^Ak$k+L%73*qt^` z#{P0=s*+O-#o-1nDA7T`Y+I455XH$Ry8e zWDHY_3$VQ$_|o_pF_}j&0s@*Oz#%GeL9T>@a6ef!^Vd_k;d-S zBn!!cO3m-B%nqJs&MzvF|J!U2T@uhD0WA_RyrPQ_xAS!b3b%bZT;G_r2Qnm@Vm@U6);bDtYU(NK_U)EVEt_)mGB!(%#xNGA87IH zi#j%<6xVg6+5b@_=udYG$(AF7u~|J~Za7h2cVROP?_K_nw13WsZCzCH0P<57b8J3C z#H|&FOtahvy-+mW#|Z-{JbQ|_R78m&ixO8-h>j1)pmLz`Zxd*8zU>1=shs$@no0Ko zd4<{7+LplW%mucFXNm(!3;6zt1`rw?QA*_Q`a~RQ_kj?} z;q8LSr(CvT`@@fvb2l&Q7%Kp`6xP47^4k*MR3>qv9TLnN@mjm~*s)ELt`r~f;4G6% zD)m@@iF8N=M-CX$4|)8)(?)#17>arR5>ZqnDZxS$2<N(*tt4pDgalKRH`nTd9Dq2grec2-vnuLf9WEom1kRV~nGcWQlQxA< zIFZiJYi13D*Jc%lEv^U!f6$2_R*9!g(PC0#=Y@-oAir(hr>M)+RrG6 zjLK0*rN>mBV=AvZ3NHwSh?zd6_LSWD$@&&2Tug7zNG+o#QCo0!hx&^8S0EI{tEzJjPJ=x-6`MkD>P8PRS6zpPcK!YXUfsW7kCLN(V*zOWAUAMHvP{N&-5 zo1MBvv8Zn1ap7*0xIc-hD@P0Ds7V_O^q(?QIK&(jQ(CW8#rsZ@mb zG3FM#mOf30$U2a!ddX0W4IzEz?>hpKMk#G`q7M)Gf}~qP9aG8w)Yfo!Klp!DBDdmf za!SPgh=g^w5`ApvD}q+89ex#l(FxoM>>Zwx+#{`S)Jf#!6+~|CMdVntl~zT`QucQU z-`laEKBl+E#hlD{=J>eg^)Pb9>u_R(6L<8mm~{oIQT8Mv{6zY7qmfFG7Z^Ti0%Qog zC@FQQ=y3z^T6&K25?-zIlXp6=&STvbC)~KVwUOjmio>fU)k$R(@0`u;NO<<=Kg3D zfd|i}X}+XsW=^>kZ63~3ZaA;WaGq9@Fab(5ZsuIR%8Tm-s7EQw`3$dOaR&DPG|K+H zy05Car~dU_(<5~+?PFAqD&+7-8p@v)2&ozM+(nJRy1E@}A3ak>MPuwxrEi~G@RC6? z;f*OGj4Nso%kY+PYvA4P05r|pYn8I6wDAkYzEVG@ffvxC2``z=LAi>+k-T(1E9r;N z@RFB1C4A!3OJ41i^vNdeH#;Ro-f&A!p`^ei1qN~@XHepEiH}88FL}LF$MCo(f843V zGfyx1le7*MV84MbXE>AiJ)!3*CIh#lm{Lma+` z1x44;P}W{@==`$E2^O%t9m-fc!j<%;`?-8lTC`=4yB7YFdPHBVPimjO`;!WM*#vs_XXAI z9*BdfmZ;H@^Ig@G`E=xlWnU6NzU_g7iG;5J+H&LDFoEPByyPcdctSb+3fFu*g`5yK z!<8Jjsccvz=l+NqD1oI+{g@xuU97eT>b4)h^vyfUL!`ln4P>oHJr1cRU+M6f@)b_; zfx%@AIn-s<@vfO~m$k}=B0C;2FS8~m>Ez<8)LOs<`VJKf9ErF;-leamOC9-v!(u@A z&sz4lndwyc$_c(pR~#E)5sO4#_@j=)4H;7IklNhpZKcTu|5i>nL@N%v;-FhcJCX`d zs?GU<-;Rfz^4zw=6DO(45KE^gLJY}x>Bj@_ZdYYMZuL%}C|9aMtq$$|?bJIDS8I6w z@tN#7!1LdCo;kX_*LmjH^8B})>mHWKa{Wy9%yH#kI?o(c{`*X(RUA`pzLve`h;pdY z9>wM4A&H;j^oU8{BiP+L?){(tHGV@?$BxapnpZv z$!w)d_F_y$C+Qvm7kUKZ_Xva;x^kwAhg5N~aLm2kh2j^#}$Yiww(PqyM4o%a|$&<{O-iAu8^%exrBskiRtL4!kD{JTvq-pe?Z=cJ@4n{l&jE|3Z-Qg(jI1{ zg1@YS^g*w*do|dc{pHw9#s1Wv(foLJJFdjAfi0eiD@Wp*t<1-DWZQwQ|58u}qmD<} z6RlE9pFJ1{M@T-wJeUr_K2=SQ&*Jh0njGy;&Ymo^lJAAT9;@VUye9)3X!LOq>HL)i z4->68Xksg@elSLRc0RsuCJym8vH||oEfvIVTc@|KVr3@gR}ZwKh7DaQMrsD<6m8mI zn;9?R;-6@!srXERN*2)XL&|GSC7<1UCLTCKz0ve)HIZIJqujV_5=E}hnzUWB^_jS~ zLI=ate|;tz;YOl$OndYx>hDe0ABEbwC6{o9#D#wDpNT(B9o+ADS<}lQ6SKC%O^3g% z``C5}Xg5_mUS$X7PsTJ2`kwbBuW>CL`uS}EmayjD{JV#6aITc_6E5c27Mqc%$Zw>; znh}a7Nio4is&i+4?7JG&2tVRIuew}A>xoXVq`BDVYF+c_w^T{Wj4$hdA})?l{7LVL znR~zIo|vQW_uLb6{QaJLVip#A?uj{@6)aHQdsiwzCl}Q$JI&RRVi-Cj)pc> zgh@m-s@Wi_qdnXf!B>-2n&lZXIT~s-YcR2O$4P7SCaT&xDg>l3t4Wh4ffKG0AC2jm zc!0cFG)M+rnYM5jWR6rcP34s@(oB(Zff^nu3uM}AJ4rJ5G9JLnI6OgZryU@BK}(bS zf|awWZt@si6MHm9}mkX>Wfw%hj8?I-}1 zu!8&S{nImTyJp(1owh^MQ5|xikK;9VU?-8#K&8RH6lUGPce)3!DPk3&+Qj@C3i<`AEf?1;mpV2n7X7f<0VjxU!y9$j3>u6`Rxj;Bwg zisY^*tpU^x@*tH8pCTtorPH8hdglly$DUg|sx~!VSM6wXx;;4}J1SnbuvBsB2ePw!RXOM>DmHRRo~jhtT+xset;*d!Q(hvm-(0jQP)pxOt3DsI}^--`HV*->0U=TRtZwE5n zF(DToWEj(R0`M4eu$iG&a_(>rVp=4d${?n=7?+-ld5CFSnmHiy*#n`a_|pAy(}G}( zQgmso^FTsb_b+u|WWUwKV!3Guq4X0~80Q2$_2Lf*gC}V66 zNFOI&2PXv6rGesNP$}+=z{SHS;Tic7!XSKC#e)ng9b5ra+JG1tNY}@pQgXnDk*Xc0 z+P4Fh4!ZC&$cZdGTR)5}LzWf=Sz2p_?;46rg8-He9^}hJ;r3Q7Ly-o24_P4@ZIM&0 z@%cudw8*5u##Z%t1|m@s?NLB#L_^oZSmz$AeC z6oAm9)JCD=7R;cmu?D{m_FB0k5HM{_YzI*!QNnfjp^#0^<3CssRmQrRJi2)wfCCw9 zPymfLm<3XUl!-lJWxa^?6f#Ib7;11bE^@-gw&CB|Hhj5v1hyfVLcR--{^E;^xFG|& z?_?%WK~H8@L{2rs`F$w|^K0~={66RaF4;3M%8!MTVf*}zdQQpDF}cogy-@YAAbU12 z33G@Bo9xZJsLMG$85_51yy`Ev8S+7Q;z3L@6qDS{S5v7f-6yIhdmbk%O{4ctX=Z`3*t1sqDGbVhPDJW<%)V9O=nJ%Ex>_cra;a zq$V)ZxsS}=r1b1QzChMpp@Lr3{}OktF?Lng`Rwz)k27;^UIT;3nJX)GDw`O!#Z!V3 z_5fp#9oOcO1hrMe52QwSC}IZ7LdtmVIG$P)$x{I327CLT9gpQ!Cl|C_Br?5d0>N~v0(1Kd+)Q~XFt~Z*81Y@CYD^ULatZg zmiRG)QZB{sOFJJi-gf>T!0&N|B~p|*>h zQ7P*GcdpWkeet`J8;%ZRqet?1OzL`gZ1a(Me4RU!93C5D=-k{}gNMh`BlCzz7hHgR zA6n3K2;aQG$K~7T!u zn;>Y?HM_dVNC_&MwJ($vG}n1l-CyU`V708nqs7>wm~rr0~g|AW1@|sbVVbP)tRtn2KaIe6lZBVt95c67(iT)!a};)xe0PM3%g|5?A#v z-g;Qjpe$*q0tJ2F+miC~xbr-qppvo%fmcmY$otxj9#&eV0St#MV9cXW$wX1P022{^ zRK*1Gj#>z8%keOw0_~hqHAO z#SZJ7ms`Z^4wOq(0Av%A^9}Tlz%7g&tHOHR9=7OmR8%tUYaM1Ebqd@eLRxd;W1AKx z2k9ScVZTc&8#qbj@*V@)fie_IHyY7bVD~=kL$edGcgs_>I@Qx}<3i?Lc%e@-;m!(T z?GED|9l6tAzXb&C* z%bMLfK0M037f?852QpK60F-++cF)Y%UAN=MsN@83^{1z&W!1>W>YsrV@e|U|%_m0& zCBVB4dJQ-$OdwvYi|K-~oA%`Lm=+DdgdXl5@#;EN`~PP)KWJfcHc>zIc$7 z4ne!QOBtuEw=*+*1nK1+mq!Nhkkrsqi`aBL3oFC8k>2?wd>il$0Su0P`}Dz`nJ)(< ziSg}|KJ?|jH9OUzn%bn9;0Aj=$&I(+oN>_v{o?%uJtLC{cc`$nwa9PoUS7a*I!8rL z83E@sA!PR)@-Z9P&!e4@8l}R>8HZ6?!)^6OC7*D&RLiGxJ%3^tW?9$MC!j=Kv{&7N z7By(J!`3xL`DX`rQC}5K7Ue@SNERI59s&(m#7J9 z;w3w;W8WrFg3k=Ku5oWrx8UvEMnC3Se1t)Pcw-~{nMX?N(ZtdR);~D`MfCI{ftmGG zE_s#GV1!5r{g7(DAhJm&!r8p3E{sMy*LdDcls6k1ua0$*2?=uN$>*!y#9qw@c zY<>H-*BObWgaKTpSVV>iNwSYR*;?{sFS(qEhsfwI$Ytl#hHo!m9yys5JLB+1TKIaE z4vfZ!l`TZZj2>iV2%n144>yxdsO#Lz5>tVhic0F+d3)y88H?V>m)0Lj^L)tL*zX*} z4z{r-ZWO`ckpXFq42xzE-aedz&rWKM<~4e6R%|cZznBlqpZIqFx`E>8-nH@HiJz!E zr$kkhE2ejCDPnDH_jU2i!$pY2?ruZHAxmfTp2b;NWb%a*+WIEsP0bTH=hBx#g13z7 zkOW$S6uz+KsJmCHMh6D9kvb-sed3`d&;Fi$;^8H)^_a?}WcR9D8ROPpQy_VzGWg2- zU+`F}zK1#z@(MvY(^QFE?3fVfFSPX!6fM(MSq`sqXmB(R8qlV{NU89on%%Z?xEAl1 zRt-c7KZ3u;Zjj%j;Bt)yFB7dAdU8HLi!MTYFWRqniN(kB_dmGmaH!4qn`IMmNV#mA1+(xsUs8>$-uFHXk z>Tn_p`^u@&1tzc)MJ|$PQcDYq(xfsSa$eTXF-26?%2}AVz883ns+b?g>3SYduAv{@ ztSUQb?oL0f2doH+l3ew7Eb^<8-A`+NtsBikG|1JvTSeK)whC)@>T+zD$_x*3~4n+^L`mFn<%?f?A(;nl^ECB#O@<)l$-}@ zyIHgpSz8=CYYroqn9FlJQcwLj%jr%dL*y&6t!YB2EEeOc}i8)n6$P zBX!@gR`i^~j6h8-9T@2`6@|b90Ua?-Hoi84GmZ4$u92jnClmLY@|=T9VN)-K1KV}U zl&j^2#)A#Nt|yx%Qs!h zts~%j{*%tYkY6kR8TqgLN0iRLdBl#{|MbQw+xVFWvNB`e^v20?@GE&&;0OdN^%M^L z?dfkz?|+?_6JUY@m_H`4X^|@kT!Vx+XYfS{5tM8`(ilC1@5G-^+FyIEFA{qj(8CZ? zWIT)-SyW@x0qiQ^2Pe7~j=FLd^0bkq^|hjG$i5_yIp5T7NGUcMq5G!mK~qb-@F>}< zuS0oc@Pxz*FPdF0b3qk&KM3`5P%kQ@RS9TeDchQsU$=87izjnFxEX)8w3{35{oKLtp^SIG#qP7~dBeu8UjTqV^uap$E-~Q_4Tsk!@UGyVwe46KF z7Heew%kjPLa1Ss?ET%%y9Vm9ev{{RzrsGOAuGCm(N3Ue)mY-7>*0PCp>Fsh(jwG^5 zQ_0@q*T9C=Bw1RfAa$defUL;@ z_+J9WHSijG+~~OUNOhu;R0ns53IS>EA6TTPLDIT-bfwlK*oksQWBIucKF@SEPiET5 z$7#=966-LSBsnf7T{ot=I;Mu08UW*o14T(?^u$aBroX39kDwL8n5;R#S`{8Mzh98?2m`JY_}2w8RiWrBqDA zs2rvuv~0!L5C7}3H7BEsSaUkA5!YNRE+uFCx>J%jqDqgJbxA9Iny&0q2`MR_0;SPf z)t@7Q0}dP~T|;Y%v;EXdG{?FeLAeH9;8YWSTbBdPZ`L;jdj@@!S z#2_8)sN<*I!xEK+L?@@?VAaLFBcTIlmm68myDDf@XXTJFrk%Fl->Ru*U8+>MOqe0d zs#Q}REK}7qfy~LEnqbBy2((Ix{XChS}CoN!Rw25L~WP#(n}XtY<$oMXr#~?k4+7yg!epDgVa^;bL>Gze&eb9`fZOc^%^Y z(|q(^Q~?`%b3dNp4BWV14p+Gu88%ap$uUheO^> z!KL3Jirq%U8roC8fY4`K9*srY0aI6naNMp_{PWn`*Q~G3B#ZHQZw+n9-H3-(J!5w`y*w-?JDVk-Gb-p5tEH1!AO6?O;^VVNcjo4b&`(pu- z(K-~K>_*j9ZAeMlgEik*`-9_E&vL0^Mnc7mc!dulAV#3!oHISRh(-{Fv0xN`F|TsD zB5CQ|s9Eub;_~a|MraB0I1eZU^td=<(y!W3r}dog&?iZrs`CFW=XR%xYiI(w9rE;8 z@ux!n9CVRW1}qrGOB4YpY=}No)Y+C%z5g=Hfa9HUjcEOQPyk=j#+q$ZIKaG74e%4S%vrK^#|?38>C2x z^BQ(ZTA)7cbLtH30l7mtZ)mZ4L!)DF8KCOOkK(N<#`T4M=QuaHfz{C*>XZ)EFtB%M zMClSuJK*A#@4$2F5pCYUC0Y#2&A8$cZNXH0qRC|IcZzn*^m#>_uk?-P?A)S_0>R** z3{N}H2JgoJU(o0^6#gm7pkLRuhD)5@;C`<(E<2 zPsv$rZ8PLxl^Jqr={rbyaQDy0KCy5_ZF5_*?G5s&_5d+J&cDF}d21GSz@^!8rnb5> z`G&$$H_HcCSn5_x0NaBW;)ALovYe}6ikvN+7>QO`439|ZB ze5XG6^kzBUt_>!{9n`mcMWI%y^~3c9Z?e8%4lriLxX1sW;xiYBy4=T^3eY z?Z$GxiOV^gsJ-qp?OGl_(>A+Ejz-H4aFvFW&pKSL# zfQD!FyTLv~OWV5RQZ{)LyfX$2M5SOShEZq?qtKW}q04U+Mxh?vqJq0MgjwiZ9xuu$ z=B?J=!P2A@5^{|C$i^{4q57ZS0#pBAQ|)ie=nH!#y*O$eNN$(8!<#l&yuHRyqOvK?>o zXw7Fm`^6X@rd31Va0dh)_YFZ7?q&yp|F&_*TQoV6s-hxs>5;G;JVkH<^kYrQvhJRj|Lcmpr6CaH$aUmY?=>yW>lEeH7|oJ3$6Bcggg>&m7{Z(g zO2L6XrQkqSDLBxl6atel@=NLpTKQIk{@adjhG=uP7RtGJ@un=;%<+fD!7Pa#f*S%3Yv167L#C7$Ml$s z_mIDPE>_klbDeh-za&SWuoF*vr_e^`u@5@v!~y)gE6U|YMTyYY)haqk++h_77(pi) z5(DN)5kl>D`p=G311IbF-AXFTS931hDT^lk*BkKuss(zCdzwxku)D~Ci#c(sveC2WQpbd#rFSvY|^glYtPDiG6RR^ zp7a=51JHN!)C7ACWaR4e04JMqjJ|#a73|DzC){Ec1Eq8QUepKgzZ|#WloN5@^JRdwCrQ>~b=N)krrP8vVg)xqF{Y z4oKbO1JhRC>vXE4CWPz7r0d2s*NlO#*TPv>o+_Auu!UGVk=C&X?Ab$Sk|{v+@Y%74 z=EA#e>i~dKKdWkn{fG+)_fP5dfbz9)BD_IaU1z4KR}Oo!8l76EI_XSx(wXX{1Ca~` zsQ!)uAHich*CGIZDk)2s5CsB4*2QlnYneDkeI|}U&%`lYVd4l4qLM6X~OALd?=UIi-*yn^0rrRL*;EwutQuL|D>ORZ{F)Hpipv%g(w zeHQdtpH+ISwB>p^Hc=JT=26d~WZm~qN%O(FlE|tf7Z6#h_9}>+Fu>pHwA0WOGDVh-)Yr+c=#7*e z+}9DcMwQ@FLU|_-T0T5Rk_6Yz*!$TtZR}z)n`B&ANxXd%!>v1Wul3 zY>h$7))?fsMw8nbck`0MbM}(**e?m5vzJ6;zr;LeF9DU6&eS9+LqGc=EN@Ia-`+7ElUO! z%I{p#ucW0k%96r#jaQ&eUk_USrqs7lZF$W7wCERA{q$I*>L+tYH#l7B*0<5G>~*S3 zED~g-w7RBfBPG)A#Z;{oO2`Wb8PzF$8kPz07+K3@UGAzyTWf8z3=s6-#FLVtFcXDS z{q_2KcL|twN#(}WtbyMNgt~~haw%AIsdNt5-?mx)EV94V^x^gCuhz>Yjq3F=L|2wN zk2McNYgU~W?2zACW?Jw7(rwd%`|w*h#`|@Y6KF$dTq{d+U|jarM`VwCoBW|CSS{+( z9ATKc62GfEO2OV8xE9w%X?K8s^SY#lalRi=vLOe=7AV6mdjzD$W?cHmnk(cm1p^DGL#Z5-cggAN zogiN@AQ#)7^5#)jas}f}+{eEpdc(D{65wrxIB6R;tf$<;7gpAfCnWw|-M%UkuZU(V zdSvtS!q3D;r91aBZ%fpq-nl|Z%Wcrc9cu246T3}@PSQ&aqH^xM5VvSALTY4I7z zscL+VXkb7b?Bjd!TRa*c z5W;eE8$C_YL-BMdt|DqvvL$xCwIANo5(}T<5-V_tm9fOyRHo*ZSbBO zFR@a##7bOZrKTko5=FFWi3O>ep4b&O3961`O{dgda_dWtsBE#zn~Kqq&fP+W{9L6a z)Wiaonra*xq@{XXRD~X=Mv0g7Ydl>o=HX`KG&>Ld#x1y=zm|*x)5l%L!v(+E zyj+Bsm+SbWrn}r=$7n<+i%=154_ZJ{8U~zJ)sTd|0o*gjPwj4}gq|2_6h#&>1XSr% z=Cnfz7OE_at{4!^0g4gQpEe;YqS+MUZ|$A{T+XB&vT0zes8BPVvH%XMh&FhX@2yJ$ zSQAcIzpfU;ehsk24A~mismL=bKC1pDp-HR_r-Q&2^ zvAbZ!)St?8@kSofzaKjYP zc1q4LuqD-8(i3t)Ch#JxkLwK+I2i6M`ccDtFmM9GNFx|VDg!QQ1Zsr&3@))5fb$bkj)7p zLpyb=>QGnnh;AC{ah~7up#$?2s}LO<=3fMQp;lrQpbWxk!4w6r1D**C1%U|wTZstd zK{8@*bX!`{y3G@t5yC5N~n-- zyw<5}{~JEQJi8AV9ODDhBMCZ*>5o0@wxU1IV)uI4QNiie!0v4k68H!c-Bs1qlmW{N6xAW@fI<2r5AeJ}+Kp|H4&x=NVY+h4a%QBdth`Q2OB}LSYEutWJ@hIR&bNtl8CNr4(MIt^FvAhW`>bgmpdA1|1qu)-;$XLz+} zwyNRaq6PE`3zMQ)7Cu1?G%$zCrSY9`fa?ZknL2% zz|^d@b>WITAL%3pb1CAd6D~gp&Ej#>fEts2R0<*xPY67kGr@1hcc#sVML!|*z^#mT z8h&}p9IKOc?`W=qmCGqIUPHmKBD`Pg8a=mi7kKCvAKV?D`rv-Z|3>qjbh}rC}+EK@=ZZYvD=PoMCMh*pK0TYev#C?0RGFb*ZmKey_07BzJ&-WRE%zjf(J^qz89fw*Wdo{kP@pckn|LUugGdFQ<3mS2{b$xyy$g|&4 zuO61JUe$k zKK~u1zwJ9b=XKkm7Q@z8QC7xVHqyNDmW>XRCP1r~9^>6=(tF=1_g<=Xrne!n4aFWa zdn$I{-WA*7ioLriJE^lq2q(8j#!?fcPBjx9&EUYNg+v5Lu^=DceVh?HEY|$CT)ADRtKT8I85AVepqWMSJL9KH0&|KRMF$jbEyA_OsNNd%_HcUA8!owB!~AI zjHcX)+z`1z98o-Z%*Tby;`743ueKyt%oDN)uv(x_y4xt&B%WWQwUo7%N>&SSzLFxX zWecRWDY2p`wVd`Om1b%L!W-D6=1CF617`gYV#K6Hnm$Pf3omiT;%ppz!TV{p=>y`v zKy(5aPJ(74_!X(AVrCS}?`u=)DYDd4ON*r?FbT-FSbG34sqTX*m%v%9%>yB80a1#M zmU3@wu8uECilC(ml@G#V1xDD$8eyxO6f95P9n>Hzg4rrXz(r+~i@6XtvPL7g<&qW2 zf&n^1dN~d}YRhvR2h6(TKQg31k?vkaZWQsy4R2{?{BQJ>DG~t}jCPS|AG2w`E!Q)S z_K$~@;b<7Wq;H{xbTR!l*lNgVZM{OhoB+h0O-5LYlI4m)L`eY^f!% ztTJ12bd;?Ag?J^yt_M;Z{gez1-iz?dBbxz}o{XKvIzdLpuPQ!LYT#`a%pY_N2g-c6 z^`VUE6)L*vAz31oI6;$7Pv3;TJb{L^k9l>1pzO$kov^W|PYag$t<4zu3Pw*Yg4m7w z(c5&BvimdY36?=s(>yE+5vJ~1AiK~ajq%EnIRlb?j?6NS#H6}?!97YC%5Y2`SMr1| z^!>nZngb|2avE?YO=qtTDjfSuiDw!IaQm+A@^BE-qjB6&gSJU{cqu27{$$HAQ$a7j1D^q&GMvY#)l0 z$b8V<^DHk5l&czyj%z?)!al8j{gl0!6JYJ12177lRI6br2&Di_#1pR{xn+ib=i5}C z4SDjA%A;gKuT>iyK7(BZFD6S&v`!l5@LuC_P^LvdBAWQb z*+fS4Ko9xQij(V0JJzP(c|=iPkD>dGfi1xJ)w$g9%#B)d$1%6slH1PQxFwhHs)OgI z{@R)bVuE(@Np=OmOw&KAU=gZfdtcg*ELh`Wwl-IX+17Rpl`4TH?+)@K1|dtIlKT@Z zJ*w2C#xdRy9&6ed>d7FG?t>2#!nruwt%rE4FxssLc`F?4)@{b3@Q%E-gU#?qyY)>^ zk)*-N)BBbq^gJD*j*%m@|EMF>HR=dW9Cd^a7B7iC^>f9hjKY!DztZzC=??ZMT_pvSIw*q#NB7yD*WNSQ zdl7pNKZ~0B>o#=!3=Y~!?6CCiOBph{qQ&Ar!N4noCaj#^yb0{&2}v1<5vPHuMD#WO z4C&7RtikkEtp8|#AuoIC2+&sMOyJ=1t=hD*bRwGN**Bibd-2AQ&*|@E`@4ap%b!D2 z9maV?lkf!=zQr&wS((asT*-1HzN1H!$ct#24U|aUj8$_>CW9fos9AHLihCK-90_EmlC zXsJhk(%q&e9M%+Q{V3E@A>H=4o<&gf3Onz&sV)NMLPFQi@}v^4yId^;<-D!sR=FCD zo=qH}FjG7ga~U>JT_L?*j>rP1M!RgCRUZ~^=j;Z>=9QG$W+-l zQd*M)TQ?@5DxYg<@&Kcz&Yu=@!_pU2 zf<9d^g<0h16~f!r6!!IUL(QkR9zI)(U2!;e3HT_rDrXDn5`lBD3x4W}Ky;lUH|W2LQr{5pEmN>970rE&Gd?hf{W zrY6yaBpA`6>@m`)nD4k5ucV*yHhGwTAb%DplX-s9L@un)BfmsAcJ87r?mwAN(ujsOdXF%|PslR6Lf(Xl zG@Nd64NU1sy;e9~N|3j3M3R6Utl}=ptHCt-E(Vri1Okm0W>9}5z32Meu+J^mt)U4T zeeR*pJ=fze7m)IZ`4>+V+Z&uqU~%bcE6n`A5g1BBG>{d-ROD zB_MY5Xfpbv3+tA8*v+F;^N;>b#6xi}h=>2HRD(}BdE2v~8k$LlHx-=8`v&v(@hXYB zYURTQ01X{KWsg5762NCP|aocq1C zuJu#82l$G!>7(vWg=COZ7~8H-`}z<(WvoN2ko{8#&e5=I^=WEipP*H1qHbtGL#*wC z-7GX7KwtRqyH2LTv{l2P!#~ZIAhQZli`507tY58_5j(GZBkj~5_81BV(as_b`;3+J;nJ=p$3HKFxkbIQ0U1L{Y;HE~{_l)@&SvD`b2cMC zUf4^7k_L;?z$t+Rl#shSJhh@b5PoY1&QTa$N?u=(L4|;)1;~U0wqUdnsHSd=-{v=k zK?<7UK+}jbei4G%sog>vX^F_iG%vV7$VN>*e46)HHM9rB5n(#1J8+SZ3k`S+g5PBR zy?n5m0XgO-K5-n~yw69e4RZ0Ii!D$YK~pSb<9wcn?HKqKwBA%g zr;{jMO1MlSIiYg`APpJWL{%A$}C2UugIUspAZ_WIDZ@cp28- zAcDO?sbOyrB5XmA5>AVz!BU_04eEFhXcR!d+0ptSn3n$w_>rzWtjz9rEo%9;IJBTN$KQwE>&SPsz zSk3gtfkpZbcqeiuybrm6&uviAOpZCNpoFMI-;MTlg!EVDnzZK9zw zCvb6MKNrf09(TbiKSkPSt(f-{T-hUkzc|M1-tDYaIH*_c4gF>}f1-(hKU2(UyI`)Cd|n%n!cTeQ@PBp=le|XqjrxE<52=2qx4SSlxVy z=?;qm^;=foCj3-0zSD=>Tia}<9ja=Hpb;gp4G%%z=ef8Na#|ZpqNz!RtQOU5s$Ui@ z@)*Qmia*)fqN!ZW`WJx|oe+39%rN6=hYKlcBRDEFi5_v%(!vm2L+!hdYrL8SMr#X9 zQwvPK1%XD2X+wv`x|6^o(a534-If;lvg`BC6ow8Z@q|cy;FcR9V(LU6f`5c%vWH-h zQk7ikv?`-Lf(0#B)YCCmued7BMp&h*YSem)T2C>nr)=x#R3FO@;`?$hWX$oA-Riq; zg=Q+L*DP8edo5g`&U6X;4#-m$gin`jqrWgoQ=)%(>VYQv)Kj4;4_h}mhN-Zz9vW}yanI7thffXrjOONK^dvRE%4d2ZJ>F5`q;5KuoS?#fWYjdH1{_}I^uRKwM7UO4<^&q= z6lk$_f?DpBkUSj`=O83Qpr>^5fO_cNW_16uV6>Gv)E`vqI!_efwUnp_@f1qBIBnu@ z6M{qU#P$xyGX8hmQBxphbeA>eY~Y?nXt*Q-#4xw9`!1C|;7(sd(Y7%VEyE1}pflZp zn}2}rE(xfn%gJnYvv#TfL&y;w(7L4CPn%ZSIl<2(qCrknLHoG=7`wgqF zSw~IIh5gi-Y#h#r=OyDfgK1H>KQ##5`zAhY5H!3aO@YsYthC~+^(txS0F{PxG!AR} z@c3ju=@axz`Gl@o+~3_PuauuE__6-(_GJI=3CTF=rI^OG)uf%qwcY!G0Ev>$I{1s> z?tPNyskk*#px$KP1r~xVp3nHu6R_>b?|A(7*Y=_9S2wZw+7aHftgSeq3n2=&zu%p3 z6VS#94v%=ewzwU;V!PE4E4_iyxjB0(s|+>E1lTvdBfE!id;37XSb!QflyY*xlTa>d z(s6Pr7t(+JDYWWrn*({|iGxYUplnYa>fr|!)G#bOsjpMiY|IDk;jmUXg@npD81ogd z8-_S>=u#J{-Lj0T{9m>nCEcs-1fvCfOO0{W{fX+!D`Q@vDYlv|D!U%4}XmnhCP(p*N7^O3HOhA*I)~QHLGMq`SvPNU!;XbOtZ(&+FIN zO$8~K-uoR3ZEPcOViQ*C?1AsNK`UDGKcOBV5@8JCtIh_^%)$cPqN z%8WrvRVrT%{pzp}k;TlqQchM$h8?g-@R2IzW5YDqm-C~j_=^;yh3W$ttW8S;(6~q| z;2SwVv{CFk69o^(&-||Va-(kYB^z_nMxdNc<6t_{t3zN(skJszYqPd6bip*9`-XzJ z4kZKr>ds6O?zZ}%! z_+e9%?I^x6Jz#BZ+%en`BLs42TU}4aDGM9{)EE0mq$Ff}x@A`0^kv{u(ok-Q^Vj^AkTu-DZ9ir($(?r6sG4$&7 z!~ZuYQq&*cZ6{K>Wg?YZCQ=y_2|#IOH<5;#CsNr>9F@z<$3}acIFDoERG-Df`AZ=D zmGV?{LyW;>?V|*kbke?zchOx|=BizotD+@05eERwl{9=jnJWa55Z(k!q=ZQo3okJa z|AeEeBymzXv8z_?7uLZ;0{`ZB)%F7yhsZS+i>iBnI^A>#_oN(FDXEgB67GsTi{41e z%4eaCBu`;37$(n?yNqg<>`(E0vTxmjV5FoCX+uuV3-%t6fC}Firq!2o*vvl_M&X~p;9Tdv_9pBZWuHO4<8550VfZ3CeKA-~)fDIg z%`nUOmZYdNUA?U$N-yHKBDx7sNs5#Nc2^YLNClOu3|1L=LQP4!ff!dI0_nif8nG*q zV4zN{K2OaXlgflPkBhQ9R7?$-ek{fQHA!K$>~|XV*+a0WdTktL$~YNb zS;GugqX66tHMY8r_A(a$W%iwgbeFMl&M|#wvtd1%ZJfzpxekep8s$Txiq` zH5!#=41&^zfoQX^6kg@?Rt6Y1&>w~^+pY39HomCda#b}r2yL_xjYr92rl7FtCIeNW zTX#A0g+9calt!@dZj&9n%#Q<}3w)##6VK?T-Lr*wDdZqt97ma?Jq?#}SX|N7Q%(xR z%qehxG6{7IQ0kUwTqNh>0PW5*p*VPd2xxuaV?cUJ$CW7>hDh%E!cacUFhhtWW)MGY zUKb6JB+;hfQ(>%@KI9>!J+$YLGAh8!kPY#{{*$)N4|ONaaCjI+2_c*_Z}OnqcK|~H ze8|;enW#M3c+ri#q;BL44`U+?K@${VV|8BNSr4*P!+3_8hnH{(KqT0nQrDufwkEn4 zv{b_vNPFhNw#vh#hR3`d^s!oEQMnh_g%0s6mt~~MV?MphDXZ`q4`^#`A8PgS-*M}b zeKvIOBNU2B-LLWiTUUoY zYc@qBPq(siJ>AOPD5)%9n56XM@Exxw6?Gi1*5R~VQiD&kfG7lXQ@8Jx+1lP+0#Y|b z!jtO>)ep5;?$*Y!HFZ!|Cj)+R5cpaYZZIAgj6=uE*=1<*4Y_iH4(%kyxRO8BTyeS2)VTOM0|3sU)C@9?CrsQ!3*@AQaTudS z#X?7P1JM)R=AdngGWw9`zBe?Xby+Pe^efbH25 zQ80n@foTapYFG+DS9bH;Spv%ynH><&VQ(v_p^=98kdadtWx0@N?s&Vc6$9Y$F70DW zpxi^M8W0^z9gAJS_~A8Fohite>SU{PW?Ou-8r`1TFy$cnjxv+uwuT=wsRC<>i`c{& z{3&lh+x_6%Gvgpx?c1|d+0FwC)q*e^U6Mt6vWXA?rwRUng87xcBvtU_v1tzl8NMN@R z`oDxW#+K4d#;G(tYBW{FT~u9nM7RuWp^@65=b&imT$~XAY6paHYIk{R7@!(r;ezOx z@uvR*>Xyu9kRj1T273TtzBk`#wP{$R1=Upo&$D52v|6Yu>%tZ_-ImRTqa+ju-HELy zHOxKzVbUJH(jG9MEG+=t0RzGY1>!3OQY+H>9swGGEW_p8wxZUSwhi>BJ%ds!?eV~K zYJB_k^kGQbR_WcQdl#_=sd&Zc_t)wDhf8DJe?whcy+ZHN(OWry{HJ5c0u4_rBc-Zr zRY`-UsC*{$!(sm-P65y#chrLPz_nDdUzB*cI1K?!7lhh3>3t8}es!oLNN)k`2?{hQ zOk6M<#9{ibhrV*P>`^Qh245JmsIept(MyixeH67~ZULet3Q5be!Y|`_+le z*l^sH>J_&p3HvKG^GUpU@bEh~Un$2|;g#?B;+;ort`)DU5Xq#V|Jy9LyjSk`>Z3lt z`IVP{^x#)qx%sM^w;8od&s}wOQoQO)tr=FxdEMJC?fLH2rVZ!Kr_Frcd?S=xAT#n$e&!2A4)s|pwNGy-blle?4Wsc&M7G{ zFQ7aXZ=LL`wR`5HMSVh{JXCjvxpClXqIHwd#c7D3k2bI-p$Q6jme>O{A(9+A;h~mN z`jYvug6$@(iM9BJzLb%!)&hqSJmX7F)`y8tt_m|{I1v-C31oZ>aB_xA{-j)`&({ow za4O|*yU?X2)vv>pw_Cy9(Nz~HT)r<`3OdJEq-NpvhtytMR=q;d1n484T4Y?D2WElc zBGrjf9POvMtGg(e;YXHCz^^sXs#2Ns$wN()1^P!W3&rjo^VPe}au z)v&>iU!8{CRz>Mq1729TlDN#$ah;fUSsGLxM84LC3Py$vZ>lhNCj-KBX$O?Ybj8}& zB#M(9ZJm`|IxUD*UERhws@)Z0|H^kTqA=rewi7=rQZaP=Q`&Y!)<;k1>A6^PZLkoc z(MK%+jRvk=cw$oQ(hRAuq(jlpP_YgqjzXvW_cXP4l<#T&UOCd^HyOtokP1@oA1nVL zVNg&S@cVWoW5+FG5U13AyL1onUc_PD7mkK7igNJT)rP4g%?y+vD$OIm0AU1T?!ij$9ON&o|~-V8Y!7{v%X2)>L3oRTFrok0BhIYsK}m@ZPxCQH4)PIXu@v@`T<#haNH3L0vHTOvt zfRt9+RmuJc)m1@r7-KI);B17oh87BoudS;Fe!%kVFpa2e4ups*<}qCpe_>)~-8pev+28zfSRIrqN51ct$qje`^L z)U&?{Q$QWV6JxQ!`fJ|qF$K&BOaVfYSxkY21dNKvh_|GShFMGCl=1UveOiK3caDx8C!L zp$u&>%#(Wt>gghxCf1$EAdXQ3I@=J7A`hO;_7wB*+4Q6EG7#_}L(`_OX$G}jAkFUl z^Wu%6hBz)-EoH<_K~2zoSt#9DX>FAM`HJQzFE6VnlMQp=JfO7u<3_rto`09Zq{xDD znnu<~auxD;v$|iqt^z;7(0+fX7N{~LT{YiX3w3{@oYBGZ(6I}~;v_GzQ5A;Js{vhD z)T-ZWaDF({7u8AGN7hqRdhTGjhRB~Y5q7kg-zkd?K874$G0*XJss+45;=qoV6i`=* zb+t9>3R~(5Tj~m1>aynEA=(-$bRL+JMbZ~-T?*ChrHgnC--0sn_X5JgnKev!s(LSw z&%*bwX7notIuMJ>& zTlsBZiq4G$-oie;_IN15x8Pc%?$qER)ZbcxhTtxmh2#UrSc~6csP8QuJ9A_4y6^h+2;)u1}aFPd-B3*q%@04a+H)TV*u9&TnI`v{`PVedub7U?4h+Y zk5O}tu}dtp_5$-Lmc}e25wmPGX^fS=Wb(FWEPZjYjrLaB((w!^mW6vE zZISx+PTJDc-chA1U&>K19V%Vv7)`qJ!N3$4z9|LV?Z4g9;*PAMEZ!5I+vaK)KFwQQp(AKOgQB`>lniuPsE>cux_h-g?Nar zAAY+1fxGDEf$u5Ir?%Foc!w?%Ublj4uO>TFOYhs*khwluNOx>($TGv>y+KxJLOf7R zg$-to6~sa-l8^c^%d-(!h&RvxSuidpi8|}cdInfgQ#2M39f9@sx6`lH+dpXX_756r zI|!%tgm7SGxkEVMsWMJc2R`;JQ3pN*l|x>ZX_-39+E1cgrK$iX$)ZhtT9DDz zJLE#H(f1ch*Z+QwvCnKK1Hg18N%~1M^HL}ZIYBFm)?#Tg3$%ij@ z1`P$3U@~4p)U9A&sH20{3_(9GB!vyc%>F?6dc+XQEFO9N(wkupfy8C z^BsV05Kf_Ej&7u(wPq;OrYFo>Ggx922ZlnX>6?JJK|0A;TrnD5Y`LQ0`Bq9dUD0r< zqFnMljbSQ`7$y*N@@K}GYK<}j=A^zx?}bH%kpBl;vbct;GuwST^$EZA3GVj! zM@AW-jjHs@28h$t4Ujr1QbkE0DmS(*^s0r0sxv&Z2+0LZZmeG(~@vjFwI}Y z7j6QRw2qe>4PmTt`H08Zt0C;lLb~Ois%3!;&Bn#=3+%cysVWS?8<8uOw2Zj%wJB| z%eI6GQ`eZJ<$gwq-N_M71jSqFVdB+PJP-Q>o@!!lcy7?hYusYq#+MnIYr46f6_h)ueqvmwrh(XQFHY+MD7hs#>Y;mTE>!-dO!p2Pi5UkU4P?0N$TCj1lnRd!x; zGEEx6tyb#k1&Hugfn{19kTAYN48abYgr}zwKUDB;xJlBGfG2vbh{v(<(t>a`aEJjJ zMwMYd-Un|5psDmzgvn?r{1Te@uO1X4-NG;tl$E*6DQHMeFDqol`Avl&=zOJB7ka9D zXx1q?eT9)Xt8Xrp1DqM`gG7g<(F}yC$0-lJYhd$ySoQh&w}$a6E9#;RHDu+=z%LEM z(kDfXLP~DVz@K$z*8DCA>%82V4fOzpAvDn3L1QhH;+$YU%lZ`71YJ0pCsBTLX00d_ zS1t%_3kwkFgSu+b!GvBg6ab)-u3F9_z_eHdm=>PYWZWx^t{HX;t*&VrkN^(hx3mMohNcJa^+s*UOhsIiud|I%-hD}+~6vydK zKVD@OZR(fNE4nVmf}VPpHm7gmo>8yF5WKC!0JSNyMhCf54?g-B-B?un7t|-^;HW;zDnPo*sS~b zcE*sEsiAq>kT;!K(;1{Bzy_7x_Fb9MAC;N>SKsMZdiuxGuS}(WJx|9m|ILW6lbefF?o{|koSBIrCyL<71aKWk#lU!S{dWH3Zlkn<{slt zlg08?QkFi1w>=gp><=Q9kQ{@=d6&_SUv5vv8u$P=$?&4b&pzqJG3Ul+qMeVO!ef0wJ%La3GRr7Pfo+`T!2Le zOP5i)?_pt4y3i-JEux>K&w1Jmn%V>8|rC}C`ak`9juvgL7g^p7hUKL`uO6163y zi~ZE70rTcNwkfPVXj6`}tibp`19;uEmc3=Hvc-{Q?;ERZVPx4y#wr_*EW7CoW0Va> zmc4$gvi``jw~bZSj4ZojjIx<7>TBQ;gT3JqAsZxLNb!C|wUA@#JU##Od|{L^kYSE5 z^eqfMjOM}bRaB@}RVEM`wz0Usvg7^&aDQP^R@V`VqsnTy4T?fqIYr^r?d80Bx1y5k z2k1?f!-s%}%$UE9IYc#XFn@u5X+Rx3Q!4z9MrHow_zQ;%)_B@Da?V!~iM8a?7<694 zP>RM}()5FZp2R!KpFV5)r5kG{m7)aRC2IcV47p5vF>&uf;=wo!Cop~@qHsX>!9j&k zeAX^=$+}uZ%cHVfm6F1&_P1P8E5NL}Flz!XB?IKbtoSWSBuP1ylDDj@6{YYcwMdFc zx&7Xf6mhGpw~|O6$4xwm=Zd-KDa9m2xl&iH&6cC0 zu`OpLtJ3)b-cfL%7BD)i4&;o^suac}?0HEc3PRcmBaS%ZMNv2px6V<8^QNm-$Tzc) zw@{`q-o1>L$j!p|YLhVjc3&f7+Za;LcZmKiX>6_9lhxLkURGP(B4c>8>hRU7qb_7J zh^q0hrRW)yq4^$6xYD+HU5W!ftlG?Y9!vq&b}Ph&*_(={?Xey}T^dB_d!tbUfej|T z=~0IgYSP=}I`y@7DaiR8AE+n8vv{zQML+tI?-#Pj9@2Sf2k6zrn{~xEz0<+>i}-R0vlxU%g_3YZmbnZM8Q|M#xPvBKMG`34SE1)7@`e7vd(xY= z>#pw|_K!)ao3R0*IGpu!?{qBh8@uf}xV}y$L$xk5`$niN8ZQpUd_jf&!EHnj$k!0G zlyea5xdPU8StfAmxlRzu7`^EHICl7cNe_sbb%dX`T#%I*6Vk{mP z1H2dxAw#v6hMJ5NXxBq8)S9iOa&tqS=%Kld&CP3WSwUMCYDp_VHf$M>U)g40>6`ff zzvS$4U3L$Rm5?XDYIMD57y)F&&Zj=qJJos`43g{<_J3{qn31(YHZ?7-O^<_l znq-V~5$0V+d#Wf)c-(i7%l#drKHi?%g)gOzD=qi8v2^MKxjiHZw3fGMSIRf{%b~1Z zMbi1#YuwRp-Lk`kv6kR7K;v@DM@4o=k7`t;(#gt;->)JSim)OFSe&>Z^iayAUgaJ? zb7d_|woa=Rby}@9LVKj1+Oot#y3uDfn%54SQ1t>0RJcZf>Pp^cRROo7{#u*!StZ*K zaTHE<^-%TaWM*SkYX%Bw2XyE08r9Jk)kBpgL}8PMYD8&>V(jhCLp8MAXXc?=ZFs1X z6{nI|YLu>m;jeWWjaA%Il8P&8o$OhgpYiH$dh^9r{PlI;l!vWgLPsI0h4V<+!^&?) zIt6*h<4@1LTG8out^S^5_>^=;f*W|2Ru1!OVHeG+*$eZi?!{bCWIZ41-mnYyW)aoB zkf5lV)Nj}fs3o}bkGJk-C?3l~~m(=+O8rqGbn zLpxP>J41@z-Kx9Y?&Zy-D_``D|4f&4ZZVC2mPmps#K_y$2T+`+`TGOBR)ssQtXVNw$jtIp<;wV(&C`gMWjtZ7IBI=2-Ch{}TUn@39 zlu|3@gK(g-lb7~P8>OI)<_izvXrnOwxpy)-TQ5f%p(%B$6S9|jyQPb~Cb~!;_r|7+ zT!ALK$bNs?rgV{mZt*iDK}C0xPQJy&mlOG?TJtQ3(R>QoNtj+uL`#|_>8=CuAr=)v z2t!&yb8Lv7Ez|`AC;3?86BI2 z0A#ermQ&lWu&%g;`d}f6v~0u>;s~S{*nNyKS3M0?u7HU1)BzvnC_uNchf`?{7J3=h zm^QiwKIgiNtu5r+1K%Gmf!et*a1Jy{J>IHe7jXn06ii{Tzu4sh5D*sI5PsV%)!ziz z(ERiYQ;+ZV>4=kV*{}_QhgyN=+_WjNm$D`7klt|7UV;Z8SF$RW?YO?;%@8|nvyl!T z$(8jVLZUFuznk3&^|2g9)5sA;2!rbdgLdkt1YX!_N5leB_r+&Hp zsf(rZYSq*Rd1J?vn}Dkl^= z&^bokj}+rhLEVVw8!613g7IwGVj0kn?LB8MgSJH8HG+-4aZe2StoStf6K={F^4(T3 zZI3lrjykX$b?{7C@n`s8gB8D9RYr&=76aLeR^c0bLVO(vsHI)IO7nrcCx;`5k+tW_ zS-3VetI5Xpr?042K(|d&#~!M4fQ6j+kgZx34ZA!{ybN6jUJlkn9s=bieU7@-k5^qM zEttI;Ed(!E?aXP^ODsJATkP6?KwQk}8ltcnHdoJIn})0FWNV0$H(LWb4MC`+@i{}9 zNUE;UMI&qIiPXlmv(d@r9jb|+ zl(fw{VAHH!-o*{j(A*`p@~q)YlJcxw7AJZA zx{I5z{K^@24Fm7dYQ0QQKGH9%Yf=10qG6VSrB{{*>=|LQKJl#PKceIfZjlBNfhx1i zrA_Zz$W>j6FAwx_`0ur;*N#S5^eR@0LCa*y{&AGAw%!T1tLj&F-!VHy&Y>Gut8D^+ zebw^M@+XC))aVr-z2cAAD;fSXgAmH>&>ktsHnSSKaH7!?+!yC=rTJO-JK6%(yd>!0(ftr(A!hT8)7U+N^}qxlqby$wd9Du zK;mcyz`;pq9IyR8vzy@GF!$~b6w1(psWBzbut}f^c;L*fNjO)P@`XaVn*jDnC4(D+ zp{zIEKO>=;Bpne9%w@Nj=|GR6riA&Y<7AMAe`>ma5=>VO>qrp*DiU+~IBIP)khca32Q=`??V%!>Im@L+=0sfCJG zk;)W^1~9MF4RXa8kyM%`;hI{pKPe7se#u6JbGgFS$deb?pSjdAN8n|nlezD~*usUO z#D>jghOAy1%7}NW9S#(JtzaP%yBUu-Y`FPW-fqnlEu4YfCUL5SiQiZyo~|$Jah^!s43=BUyP%i5Z2l9x9{_gn<9&yW@R(?2h-1?2h-1)g3o9 z=vcpDwyohH0tRU%L}HD&^z;FH{B~J>f0RGENrV=CFfpJyy43E479r_vS4zo!(~a-6 z3sresDuiU=_=N0QD>^XjW<#}Rn_iEvKFI*I8iHuzx-S6-oo} zHz^F@Bh*Kbq#Wiw=rj7bBH|$&c;XK->M9K<9YmjE8_>2WRFpfl6a%7qcVzuw$pPiy z6pE_%;eu+oK6KQ4hfdu&msor-Pf`aO^(J*rWRU)nz*7N;(_|3X4@`+AcKI=plO+V| zcFZ=b(8{t)`l47Xli3MdM2bC_pIKane1rlGW51cpp~J!`XRn%6v#<{yUo&ZZCD$0D zOhG`BwK3vwk7%5WhFtlm?*}?ffR?Nt?$&VA!V^|WlT3y#Uu{w;REVdMl>v~4B7bEY zFX2Rj#>VWcwP-Mf?%(OdcfsvPHuLzvEC;WMCMArhW_ zzpAFOIWl~4CZHu+mU9Hb^pjSk)ii`J2=!93tm3zXN<(F~tC4<*Vrgu;Tg}59V4H5y z8%8;?qQ;38>xrc(M3FKrdT8Zb?vhatsm}Z%)iLsrQqMYdp=~{+B6q*(kgD4A=8Iz< zQq3iJNR9eX{*d~Au?OzlV-MUpvIp)Qs|UW5-&P?vHR>g&F7v5JC!sWQLF8rIG&~^y zpdr&$f49OcXVZ-Q|3x^fVev5<8_FNAz1_zHvUno-?lGR(UNHxPdi^k9M!Xg%ZbiLIc{L$l@zoOEjwz%_(go ztF&!*W@lbz%+>~YCSCSafR$y+CQwoks9hV^f1#xbP3qX}?R>E_ zdXr(Psvfr8dYK;WG_Mf}n#BKqpljan-_ z58k+1UQr%JTv5@rOL;_FQrSBx4P`X7qDI>Q0Hfz5HNw+|t7{QG7vi4;2y56Rt!Ycz zMiItT7z`s&$&Eaj6uYGPfEW!F%|uy4)ZOjbSP#&A!}YZC7I43fbClNJCjP6hvhI$? znd+%0qL&HhJ*Q*qRNrD+ou$L@XAM#;(r|v499f_C6+lI8IcX?o!9g*pIvVIoM_ZR_ z>_0k*0+reoNs;4xc0hJK!A-+dl89TTVJPV*3Wt|i94u%$zGJNGW9G3UuaBlFAHYrW zt-kLoIAhXJ3TPcL_7ih3aJbH-SlL3HWe(pth_j%@0o*pjx0ah{(1{c#Lp3XNnbc6Q z9$BYKKTA)oGnzq`o?NF{U@h~%0SJhvm>2;XD2wdOb`^t!dDj*>wZiEQHF0M{A8d{K zvyxS-A6C$>%3lm@2D30a)D=!nJMmZfSy=l8UBm@QJJZQB>gqV{TPwaAC7R4YidKXO zJs?Y8uAnNXH+KLnxi1tuUQ$+qhEKs6Ip^$?IX$D{&~KMVEl|~OhUR?q0-cIn)Nodw ztlixxT6t4LyQhGHhj6f^N@vI?M#sH#$pCu@8h#P(I3Q5GLY$=xK3e`YjV zfORRb{o`o?E80sdJhz_wC; z0?Y#*M`^SP@YCiA;H!;!!5W}1XdeIJZ2T{69e+KwJH{OU^<$5J$G{%P|KBnG3bP(S zZ4_v5&Y%`Drdvpii4389rb8$Xq3@@UQz3&NFIa@~tjI;q4QiV-(Sn#OLU}>q(${H$ z5eVgqeRe)9BKAKyg&?Oel)it%hH!Nk0Who)O8jSHs$)*}R~qb4<&TCuqZ$ECC*Z_% zC#;%L3*|U=nx_ax;l!p+{CQpRFAWW)X?9#r~bPK`r}6C%|} zd!=1gaWJFuGo#FpGnhy{H&Z|a03koK-ch3+-x=)$95ZLMgH*$42dO5b9b~i^?F5yk zDzY*=My&!yJAU&M?XHY7+Mx&?zM<9BRN{M_kpza;vN!i-=%6^N)M#O~LTA zjofs$(Rl$V-g(6G?JK-Cuj;ef~K~wn=xuyG zh^N-$dq<;Js+L~Sjp|*NcI#2&KpR7o_IZ?pmg3L&>X|nQ@pyo(M-Q-s)o|3ag^ z$=$SIOBg=e-t+Cfsfr0UMTlWQ;s{9}#h(cD8vByFE+s`=bNB0q3k8|Kn32{pfv|Mf z2~-uE6V>f8;6kud6()SOh8$c{Ks_m^g0pW~!h922_&P)Vx>z?pN=8#pYLj z^rHtKccnh`;`d!38T)>7`zx;8e5L$939q{H%E~W{Mmlp`KQYM_=n50982?sTZ#8|> z`KA0&4i4MX^VHF&^2NRz8buzWn+7o^ONyu#sfo@UJ$Eqitq(UrmF$`+cdN-LS-82X z9HgMt5Km6cMUBD=MY8GEH8`k(+X(^sTk6v&3HTvCQ)gKOFw1$)nYbXMWSr#&n}dj8 zu<`p&poStmBLf@H5O*P+Wt!J zZI#hB07BHzP>0HGx8^(7U>&QU7}fq;QPaYV&lW<3e6|^r&kh@WwgI1Q#^ke&i{rDf zW&w2r^4TWivkQpe3_NhM(Igx& zKejCOq&>3KoD(t}yJM&)H_o3(&!4KEKa*M+>dxjKHE5Q_IAEC-CIgM^qCwzuf_cgw`tRCw&Ej$m|eS+CT z{2Si`S|mKgn=VB1xPm7~l=0P2hN`%pdTQdSs3NgFNHd;L!71W@^RqbY~)!TJX8C6w#)VW)Ganrt2f#x=j5~+%rwX?f{?br zK5aPyt6x))R2v*XzWGeyB{IrQ1|qZd8E#u*qp1R5a9FJoS8q+s*7dcbRk#)r1hX5C!5(RUr`lindOjE5)sby$J7lL`+5hE*V7%}XqzjErB{J-43T@|Dw=cID_6PiZDVt;jkrIe*BWnZan1b8Z8-*)Ph_ufy5cJx?Cw zi2)CLIDx@Kn}Xk9z5=bN_>hcF5z&|!5vmj~qSUI$uq{MWu=pe{&=;w2A|(;M2cGf@ zU>bklLR`~@%)~p80Ebaf?~Ve6ZT&(KWYEwbHyKdAt{m#9;PCKsqWBZ?Mpi>cM0+_R zT33hA$8dSlH31x>i48Tr94GNFf(pY%drtB~rx$0`nH1}GLF1%k+;M}r${nigks-wGB8PWLiE3=WNR) z8Rd-TiWGYzhZ9=Nqk0zdeq(+PsWe3R?=w@g#=>I5jF4HePObcDt4CY*C-jQ5vF3rmaP59*)$S ze|vW`D9FvAAUA`8+ze7DB%MQUHrW~E0unrSJmT0!kBB31cbOq=FNO`EHfNljrhaPxeL0BRM`(7%bIQC2qY_Ej98D zwt50fc^gN0BM7KROgWoP%G+1UJIp9=5Xgx?XzK`EVUpdxO3*X1n_vV(uB_7BVT0y2 zmgeSTgYu!3%C<%?7ba%`C}`{5aS{YB@dvPPtLgU?b$_g;m%UE|3KbH?pVqycLdDQV z<`RnXUrepY@1Mhpu4j0Nc?`}sNTWQ8$pb`{@Ku{Z4`xcd*AggA-w#7)x3?!H3ygl< z`>Yw}_f4kQQQtuf>a|8`8}LB%0@P-aQi>e@d@dlowDwZyaR0eJuG18=|9ts>_McZt zL4Q9fpA$}GxbitPo%)k|!viI!QkA_4RSS zp+5&kI%GVlyk~ZSuAGQtQmGRM&?3>$6Qo0hg{Uib4Ue?lHa1E@uJBRrYn&b9~LZ2R&EISEw~Ht0^L8iwu_nU{=3=5@A`c^%DUUQWe86N0HZ6~p9u z{9mIHcFih=FPk6|2G3lif?Z!DuG#ppY92FJ{Vh7w(Ii%JUR51U;0#Z5POEj~85s1Z z;aVt)!N&?mBV~nGD_OqF;_xKp;zcoa8uP zT8n3uutjZS)bd9CwW01?3h5{+wd6g`Pg!f@g^yg)2X^T zcx<|dc%r3GXhNTKFO;b+$0;No>Aj2}%sC~)1yS^unsmR;rd-Jmm2AboGRnG;N=;0c zhHH=pcEuY^&F5AJ@6i$aQ=qv)BbRcj)F0~B$;U}4duHpwt^l_pXqDHpBK*--gdPH8tcW|@As~caaaeckqEOhndqYpg zy*vsOvbCs~z>#W^3$i-mM}5^>l(0RNc#_3Gw;FN;?ko)T)5a>#v4styIt%zWdH_Qi z!0{T8P--tKq-X*VU(A|&>=Kw+chV%=nRX?2QR;}9bP^^K) z;Qj;z+V<5ohgP=_4_OO7Qb@Pk6M#15B-CUn z$M*z8cuw`4C2qAw;Bp4QfwBQb`lj9~yOx0iwL+~x6<%rj2pVHTmzohge&t3xQ8Gam zm6?A0HmeGXEKmZCx~aoq&v?h0L*?htI%3_!mGgFK|Ci*>VdhZMiO$yhSQA=xBEte& zuF|(y-9Z+Dw6mTMXY6Nop_zPY^oE9eY$%<-(y8?{Y;Gv*BJvHjzS4htLqC$q)0>+b z?V+i&tf$J9dKxu16{sFzqp9Jv=c=inFd0g(avU9X3rq2caXd#yV`bt#)+@`Q)Q1e2 z3=Lvy-PS12tofPhssmo-Jbzt;Nu#lwO*~cOUpXz9@)KFANkf)#6(2VFAbo1F;M<6J zP6VdFRq=mWI4e0(;y)Q0P09vdT>)fq#+Rk(gB4lQQ@BVU9fJ4J={=+Xp%w};fJ+MT znmlV029Af(B)w7Mn|&vgd|wlvngcx+^7A3jnr0=-!(&=tc*Y?xA9zNe29IsD zEDR8?(j#cepvL2s6|JGcnjdap@aO|x8mwtx@O-Mlodw#D7LdFtXwNv`gMt%)-m+~V z(kb^A8_1_d62a&>=v%o-e5yK0hYV3Dqx>!va#?_$)XcH2B9!(nqF~N6v_DqhRmre( ztcN9qVmIIdD1g$ zc*}$PrkL})zFN(a2q9M+q}D7ru;HjX^g5~)6j4Hh zN}2R7ATqz7O#j1g6hsrRNL04(mtpX!0!yMdDg)gl_$=B$b`7xV zAnyPp-ERThS_Pa@z2X0&D9;UfWjQ0vN=;~O5PT(V^IFB29Ta2!&unj7Qdls0d*5!F zfOsrs?f-4O+6?OE9nYvadx69IH@4?}ILm!IoH&!|=gw6JzYS{Ih?jVf!o6Un){J_# zOlml4Olk2ANz^x_mU(0;P=!ec6j0eP(yv;xfhWkkCY1dJjZF?1W)oD_d(hj;flu{n zx1q{5@hyv!GEAT9Zdo>3s~*W|&s+ssnnNtK=gn=0_+`T(b2LwK5M zl+nid-n%T5Y~y-#(sB#3a8>(K&#(Ncp6wlHz!u-`z#>D77wYF3@!Xagv;cl8*Qwgx zEYQN%Opc}+(agAMwqsifjxg&OEo;DOk>%)>1)3y-8MHa+b}u;89X7s7n~i|MwJ zl{yK`NF*%W@(@SKgB7c%CbH^AX#RVf``59XyD)36Pz!hX|09~ax4rvh(A3;p|7SN> zuHKI*0Z%oz`ZAm@i02N|WQ`(=$q%JUdY?A{cT}V=GXpT5g)6}~?E3(+1-jH_V!Hrt z5w~-f>8tUOaq)n7$eMYzKqY;+Uel!!=H)_26*-H8i^gbAX~;EaN25949IZLu9IZLu z%r%G3q9ulptwm=7Q509@q;#e<2Xs~>7f?u)FG5*Jrab(Vkg9^#gEOc6>DUYr&%yE~ z(JMXg`k7Z>t;{KM%5WPv?#f!58ZMsMg(jWRrRQPwQ)FpARSW2oaNLzipubn^Q}Jc; z1-wiOS8b*)wrw-QR%l*$6%Ev)t2bY{`AYn$T-79iwH!sLCd~@BXU$bd?3Z4PnQwes zprG5T&a(Sul^D!E3{_p&2y1N7yfcRN_`87>wC<)+Kl$%#)Vo{7OjN>N%Lc`2sNw6u zktz0S)@anXPP?5>P59_&y1CA2nWAF6jo&jxl>!lDrvS>8L66HRmn3xUqhdoW6gBc${(rBBO<1oV>~#HCMtXO)vr{YO4am- zwltkuq{D_NRj)i6(cILq7j05-WHRJiO&-GDT5M40Hkzy>psd4C%F3jbbr`kd)u`7N z)zg`8`xcxsz58y5iKTnmAyAed;+5mAh~(?5$+Pd2RX6Rf^tHw}&0@sFO!q^bG14YF zD=kt77>j(heM2+ymFneaa23|KZlrh-or=pO4}b-6+)ZzEuva=c?Hil}lXqqpJ(tWs zcd4;(xam2~{r=P?_rDD3N-6DnDs$EI2#&EK%x=;HyDFr``91 zq`-0UD$UYCI~m_;^04OE%NZ;u{u+t;R!1G@+MoIKW3A_%)N_R;N4b)$M&-|%aeVxS z3%YC4n`tJ*uspiZ^puY*yBIK<4#X@e!;`~Q**e!Zs7ts556}uY)CE?`Hw@mw)?vS( zG(lkwg-Cp*<(Dd8dd57>d$Pm)elI&ce=yqV`Ge6;&mY*+(-2Vr<0uz%7}tm1W0FdO zHC>3+Q@O5XgS8<6rsx&pjI^out9$o zmq`siyv*Rk&yONipG6n_G^l)l!{w=tz{`neW!~@nthBz6e&364G>U!#)n*!|KlReT zc<~LbnNrL;rK|Oi=|}UdTp(XcNy8D9nTF-gi5m7CY<}hPrhNcPR0nt#q%Yx#15lB; zW+nt)yIuI`(YU5;Eu<`SoN`&_ts=Qv58^|-aW#FWj>P!H>!&z>Lg*>`{}MisSKL-^ z!Jg@_&w(BUiqaP-CmsNDbe6`##t$(Lgd+y#_;kG{{5ce&;jBM={oDU`<7MCfOXw*|Q%32}?s3#)L4rPjitgow|Ac%cLRzsO>-U91L6EZUWH}v!+ z42X?MsxbZY=zSmRHR*Wy4$$#1*y&g?UbgV_g((t(zV*dBj1BNr5UO69(DdGrx^rI$ zb{ozXG6c})MJ3ovXQBlp-IF2+cE;d1)4sQ`7Vq7lN2{LvTN7Xj7OZPa;l`Rm?P0Of z*&$R9n40ojbUdBM0I$vg=H$EpC}Kk)Ds7e_Y@Vq)37m0t<)|C?HBeJGUUP z1O#<>1(i5sKXX{e^n>}-bW6O9icmuHfQt#sVNt2zE$iELpGH>FP1uP1@m4dlyjNQn zDI zuzR-&)%c`wx@f1wwLa(JF&+hfzOx>6q?F`mg0dB(Z9eyV*&fg{FxDRM1G@)!8n}=q z{&F!FSojKEgk<8|#b4#7^ZMq%w2CL&Kr3j__ zI(Yi2nbM)zm%d@7996aG)>v2j`WfocW2}E)QTG9R=1{BKYq%=?S@3ore=(+; zyA0P;*XYYeT=Un{J;dO;xPG0?|K!qjwScA!82i(b<#_f zH<|nxTe{!!@KxpENejlZlj^vIvy!(=)9?bBV2y+KNn;0Z{3x+@H#NoDB^PzWTP+v0 zF5`+}rch94y@H}v7SzePppJZu42?L<8y;2OzX0}aGAsyXCTt}WcS~_2D3k*Cb8I9zf^N|+rfVKYxQ;$Y!{vbvSk4waxGsX1$7 z!_1HzGnLqZdMsnS`>D4BP5>J-OhaG<(g8r53nYRj#5efvjYDH7CsHpy%-OI^%KSyJ z-qMB#wli_J4&|B7E*GIiy5ummeAyUgtLc3ip_yUsO}B(4?Ra`Pt%R@)l<9VXZOGX) z6P9Fgnh8sg=wUNq88NGgu(Z6BqISd|fFbBv4hC*aJKC}%EgJ1e zJFj`rtt7^B3?VoEuwf{?jW(xTU4ISqR#kt1_9P_Q$QkhSfFfyY#$X5jTn!4)pFem&Q#LtvaZ zaA2zu9LcR>B6u1lg|s|iE5eI4@^i>DIvpCQ%T(XXH*Z`29KLzkGkNodi=M+bFXWq- ztA!_Yx7@a9bYiA@CZ_==+^i+?xPvszAM>VBs;-_@uqgjn}K&4f8<(mHy>lhM} zhnm*!P-gROqw~?=b&i7(SJ>_N%?(wr!u!Q-aNfs>9a(Zw&g<#)vgZsJx=X&ia*Uht zZ}g8f4M|nKWhafCns=4%qP9-PhiP)4MV>Q6jI9ZC&hRkI86MjGbB(^rVJc``Mf&k8 z00-!v#5y`*R!x#Jldb!G{0GCG8ZP#s)<2mZ_F?8R+3aC&aSr~bcYgKRy>o@Id60{w zL=3bfw#CAtu>&cwBBp8l137BctA!!X6JMzC9|kp934WzvxB~{WVgcz3Icr2lmU%5% z3)wI~hYgd6R49`83Mkb#F~%D@C60GL+cSpK9on+fz3u#daM%Q1quBnl-trV_%ax{S|k|_ z1kpIY3TtbgJHEmk)HjOLNrA^m&1)Q2YjSuOX0n&=c<3(ACz!C)#?oCP@SM*Kg5~k+ zVw%^*pHysGNV?@#1tlMlIua15>3woF%c#Q&gGJ(2j!N;J_E!pM5C;s{8?CE@r$Y-k z?J?=j>pnk{?tJX?PI_;50+>s##^y$nf0BHPrQxlMv??i8`Wo*)-g-HEU!(^XvA|b< zu@=7a>s{miX;BhV18|1??*G|uPd{_DdRVB1>*O^e#W6K zX;L3}YWWp1CPPCYfoYXi>9%g_@y|^*VUJQF2}hvX55{C;Wm$7rRp?{o)>pGfn zHMUja$|b>E^#_dC+Rf92?abS3=4^%Rd-`(9JsSg6tvRimze=ssjepRk9;il79kqID z1lqD1J%+VXjb1=}09Cc(t=teszRAYgv8GJ+P1}Dv)|+y#u`k{0H;wvDH~c-mY1B78 z@VCEdCD+g)URd*S%pc+r!N?y@NnEamq)GM35Z{EWZS0ng^qp!~iuIs63!WUfa|Q00 z+?`5I#bGp?+|y_U`eipg{x^@-supK+Mjo?9c}o50KI+0GS_n0VLe+pS<5HebL{Cr) zmhItTrjg*@dXA@`<;j_NuUb)Zb!rI5^novLvl@Iejj?A8Ja@2wrdo+d4?o7Uh$FFj zVmkMaUrKh`<@L7@96l;fxZ3)MEW^d&p;&@i}qYxosJ${e|tvtxr)hn-2 zdM>aexrH0H$cLN<*t_Lg-klE51%<$<=>T=?f~qQmRSa^z4reuCkmwkJ6|SyucJ`Ap zXWPJ{Kz3N18yU^}{8l`?AOq!R&yQ8VY{=1G)c@^gTYq7#p8b2M|KIdwWfWfnvql!NylzBaVl=kApuyL3y-2rXQ?O9Y;=gML|T_p5DP>}=D zohl6TXycMP0ZEOrX+=2INtzQ#dlWlm#_d%n^(V~f=D^NPC7iA1ImfY+Fwr29O`$`~ zD6BKxLzLA}_POESqDIuYmkd95FBxum$vNuhZyhKI*K6HB>HKJDkDi%fV=K8W z5ud@-6;YO_NBWZb{4OZ);}?&wq#yZ`96pDp56DmaCqSG$tQlLrY%^Z#Fl~s=rA@Uv zXSLhQb~|M$LAv&XicBmush>!jhXUGPvGLo{@I|AEG=e#qU5=A#z+8QswQR=(vvwO* zHKDgQ3m#9*%-u>q0k0#RfA<|{& z3%{|OUDeplavVA=ORyhq^OVd`NiP}jnso9yl`|L$pm?yVa!%FG=>rIXcn>nh*VB8E zc1BJ9d0nK`MzsGG6p+D&FAW1s~+<(X}NbXLvesJh#Q*>2}m zPR;ja-bY3j>iAS$Wi*~4uIWdMP5XD$9d6ZuGcrV58*-D%0$FZ(K3UGdxfbr*Lfy_& zWD7&-lJdb$b3-m%k&MFB2V>0o8X%`cC+KtN3>hqiH^BeW~uD%m>OHpB(o2;TFJsu zDml?^Id;R*O~#r*nR-qh*VtOBBex*#HYemZ*u7Cyc}(W1Dh1&2I+LQyCTZnp^#xvp)TWM+KB*ZEd;VfPN4ze4y_SJXlnX=IxWY!bL>FPf-qdexcEhHADEf84K} z(6p0!*^2T=TixDd^ATk>AE8Aqk3VAEv3pGRX`WMTcdGCe5{sR8JBbD5@EnC(zGB4@ zCuG7`KPPq#?@soI!InSn^ANnm7J-cci98t~j zP1Sf#=z<9s}?|=3DTe)1sv2%=L#;FGq(|=RnucAVe6% zgJ={m#~xvL?WRl8girrNXD|YDwtLhb(#b#a)(iGb9<`2}gJ)DnW8We1qMR#5oWR(N z;|nZ?xz&3+U&X2w;CQfv04${xNW+`I31wN#Ss z1iI!<3%}{9aTXVVr}*DeA&@bJ=thDdnSkI+@5UAWXzXGjXbO|EK)NO;glK@?!pL6Q zMTrQIzGT2Ci*O1b>+YIvX@V8yavbv%xZdo|F)*{)u)qR%>Vr-RrRqYp@u+Hq?O$cv z|8cerkqX{JZX?Dj2ppn=M)hT!GL_J$ldZmh$7lmKtU!7?HGj1s9qQjr^0= zG&aEy7e)+mAsb>_!zc%F&U97UaOds}saVCa!XD5ABc9_NAzYww8zRNojs#9{7Fr>l z^u5WekD8r|k?L?RS{;@*2`q17^+U6oD^PS3N_^$*ApWBq-oHh}Vsu-bAz%kyG3M}% zqV35>&uM!AY(SI0Dl>8iLKf)B9S92it{`kU3QPk^jnj9=sCFR#*{}l%)HRXa?KB$B zwj*tkN;MyjqaBSr6F=DC9We8-*w@aq_9`|?5F<9O13dlkoSNyf$T@gwC_z#N9c%GA zLvM30y-6wS@VmnUSV-j++9NgJGL&}7&24J%cxNs} z*Jj_wD2(6ZSEjcJ_Zp!FvbYRE^F*~I@-d_UayD16v$BAs&h#qC+g+&{l^0K`yxi&j z<7V?I*|Ba_lPU80o|O{ktVyPO7Br0Ast%_Xt4b=kpziR#?Vh8hqd*o4ifnt*&g|_W{Ey`Dnvt~Tbq+Ds4gE(O1!Sh!L8J2 zlTL@50?ftY*LanK(FuwW5>VjP6@SsMQ3l>GRn>5=^1SN8cr>AAr;lxvGxkMN4W@!iK**vH90+(=XwiNeR^ksWr^oYGLdgR_0 zJ*v_eOru6+HOW}5&S%ML8(KMjG*Eo4c$={ocbVL*u^JsW->q#27i`4-j(25Bn`iRW z&S&-1U!T=ePiIfP%o1x>Ml6$Kz6QpLFIAgP`1ILj$8a-yl3YFhm64LGEAFw9t7+Mz zx{5rFwZlhEddK(fQX3h4)GjhShkYJUMZS*E*=o+%k$(G;7E`Ep3!N-w2&lh@#$NIJ zk&WHKJc`%tfGeE!i+h*ML>kk+XTtaE`!kFI0VN7w0Bb` z4LY)cjN&;7q7ZY}_~Tn5`sMu*Cwux59cfY%pH!JsyqV~YsCjDcB(!n{yGFPjqiJ8x zq=T*vdoQY# zxjSG5iz%!_~G* zY1J2k9Elr_n$18@d717E;h74 zB#;Oah!AGt#g!M5LdZY@a_9iMCa;tiy?|S1nqbo#JhvY>yk-dH*Vf^MHW{}wV#`ZZ zn~oEawRmJ=CpR;xe!nh!UE>gv{9ZWYJroM}rceh9y|DEp)8j#U=F05c8oSIpvogDV z88lLO*^5;BnM2F7S5`_r099$FJ0o(Nso|c1x|{&#QNud&K)F39J3qcQg^OR6v4iEU>a+dE3xC*>pr)lqdvmW@s4HtjnXW#zO zIxTVa_kOhH%kO&YWpLEum$u6HTH5%dAp0zvGl>})tb-?QDYGNu4@t9KKgD(V`t%Wy zyDv@DoN}DrI|x=y@d_4wA#i_Q=yBBI>lAg9pBg`g`2hLv7X!WfUVE2`_aX7LO}syU z=g)rQjyB|H0bfP2_7}73Fn1m0uH)QwHFw?N8lsi%@^gvL89VJ5o7~IYdDK3Sy<46q zvCj}s7(w?8ok4l)-mlnOMPBTs*W=cQ4p`o|B6&r!eDMWSla+%>Z{N_e-ofPj#cPsN7N2rx zg1i5aOvQcqm3|dE)$@**-$;HB8$55#(2~Pm-gEX5M=d`3Wk;8& z7OzMa%^n^-+nN?pj}eJhssUU2A=!No(pYYy#OdC1Y{96oL7%U*W&*^3W9s;B4ha}GPZZ|IOU zy+eoe9D3BDNAMAOrPMsj#NI#2w_PY7xxf7WLHb~U{C-i=)8zN8vlh-dYtForPMiJe zvyPvA(!7(;I&1NY3s}P@-f>Rf zfPBGO+Pc9tbC^ulEL(Zrz|v&d;?6pbWZ{**8@-Lr0BA0$d{!MC0qb-LYdc>hUG7!tpTGO|@Z(#9Y-_V7t z7N6UDmJXxdSv+)}%%;ATE0{cIuy^%&y(^Ynce)m1}zk z&ly;GzT}-G_a^)edx5lj2?1e5LV_C8P_NJby zr{C0W^CO!-PX3K=$&2ORgqA$?^}b`2``i0zpl?a99R%z-#n?Mpet#NxUUy6S&|LZ# z0gxq|(=UDQ+OtNMnGE6Lvj=()TRPZx&JbGnh`j4{I78*%0a(vA{d?O-F8xjUH#wL7 zc1wDu{Hy&P`ff|9x$pAnLvv}@clk8??(cTW$vztCIaii<9rT>NOV+Qv>*%I;@xf%} zc|*y{bCR=Hp0{G@nq!jW75|WUzmqm#zYfYV=kR9RrY>LCm`fih=@;WX8(GtHIlazX zVJFz?^ZJ(bBTHI8U)qLq7JEdO{5yZ;;8M5GpWU0tE-%!X{PYd=Egq0VcBthX{ZU!Z zt#z``yg+_mVd*FQx3jE!x%-_uvvKc$HqCRt*twRk8cK#%CiRu_*1i>TwPd9bU`uc) zCFcv32(m*6$Me?oy}tLDV@^&_|JyfY8GfD1ebSB-*K#x|pCd9-uTmHA7kbbw3y1zle*T`lPT@pss(@>416vOia}zqZKl zSvapT$8+g9p3NmI(p7G&yOdunEbjLn{Y`L{erTS$f_eC?a8Q7M}wGc&X47 zgXeJ~Kie@_GqjZ7H^jFdHh{P4%zZ(-p7fzKbmHH+S2wgb_o_>~UVToe7<<0#Y*+4V zqpwu&-~L@7V$YFMX9wN-q6bORc!{S6c3GZ@K^dmis$e?*F#s{vTWJzt~dREDm5#C>Tq8`v%H_+?TXAl$jLReAV{*=p>-W;l*UKV`|4Z_VP5C!7 z|IZ`J-;MnJUhm4Jr8uGv5>IIj%B-bmIr{3GcTrc2#)k zb<9ZaMp|mP6@}X` z-KS|zY-i?M_GudKhnRWUK01gtb0;&e*hlA~4tcuy!^pgPpT^`wmm>2Lvv|dlKAH1< zE6?qd-D{w4G5!q<^qq5_{27pmHqf{7Jo(eRVhA^cZaTXUfBV+TADjS-2Nv6(fxb1% zdENJV`_n6vVdY@oT3JhL)<})`k=pPxb>Bw2Wq#aoBbwN=Z_~%z&&(tDZG3jSbTKoh z?c33tl8{3Dp^Fd}V&6TXklx1dLuA~g) zWgkW6O35r){<9=gmYHjtUvvjE-;m3clJ_%ngMEAgS>E&!X1+Ps^OCvoW5|44E>j-A zj+vL+$89@rW#%=xOzFDq%zSSyQ+nwkWFFGDM9wpr9&3ALzP!G-Zwcm-9R7B8cn|H@ zXtE5~bvL7?U*$5Tb+!Np1*1+NwL$ain z%fDXy@w^A0*RPE66Er-Uj7LCD}TW?b~aXn9-!MliGwvbpf&#? z=C>WtN@MI~emtW5=1(Di{}JVHX8!X>l)sz#lSkw~$o!X%sONFyFI_C;=$get1B=(3 z-M4tnl9g+guUxbALjB%>3(v**aN)9*=lAx>(Z<7VMeq4*R<0Pha19T-HT|Gm`upVH zg+sV~o@73LKr6kp<5slcFC+4wVE)qwH0HDBU-4<=`x9H+d=v89qlryh#5QKO=Q3rl zdVrbxB=d(0AR-!pG%mkezA=Gmp>J5NUjt%7?~H zNMmCrr1zO=Z}%^JZC`I+Z!ZpV*~eC%3tC`E25@O#uTTR+eHdttx(s9==71EG4Gx3- zx3f0O`&RTVIeXcbTrExpr1ym7cJdP8U7oKR#J^owG`RTu zv)1-5k)FKa`6|8tu$AP^9vl>Af7N101JBhj6UJP%RL%F!8Cbb^$eT3ky*@eHr0tSF z{RJvHY`(wp?7DQ;>2j}Q#66iR@-t-b&F{UC%DHnOM3nRuFHkAnYgRNyXJvoyikl=K zTl=X)gT0HFC%rPwmL}&f6FN4l_{38eoZ@YhatA)QJoxgyC4(#Lvf;^;J^auko5T#> z!}7jf`TdCeJ0zEew(Z1R`u3Ll+gk2_wdMYOE$Q#Il>c$d{fDh2-K8O8dA|G(4W8Hg z*nzquxO;8(-Z_g0)*xL?bQ^K^V|#yvFbY$X=4ZQ1^Lx&)vK*H_SJE%arQg<){*0tw zmP>!uSczaRJwKQJyrhrKrN1EQ<8tXAN&2vs^gJuYt6JUw@{jJkWg1~ ztjA|G9$$Px?s510$3xXdr4-(A%f2)yoG-WZp~1y{LrLHARRg5!btndVht3;Z zfkR?N(#w60CjnFuvZ3`3l3v1|hh1xF-%@OLjdq-~oa!_0(iiIJtoN1oYq9~6WASC@ z44}i7^etCe>P;`yUG7zOR9yNZtB-W)57^o7(zn^sbm?DMJ-tgmYI_2MZ=xV7#^ty@ z-luc_&gXYdmN|PwG9#HYW#N?9O*yw`P0xm&cTB%-`p2e!e){&AKbraIOn=^f^A4K# zidUWbs=ilkc-5BI-tyY7z4qsepIY2`_L234_2u=q)jvA;wZUHvw!Pt{Z#el4t1iCk z;?G|E;KlxBQ!ZO@+4-B_zxm$HzrSu$LH}3q3&t-L{X!r=1{bABu7a{Bm!{0@a;b~ zymCRmyBrv)UaBY>X>Fuk5K6U0<42{yE0uz>?NMn*6nMojC`tzu%SB&1Mj8{ELg1Uo zFP5bvOsJiNk1iF9UfBepbct8;wZDA%`amiQ3&m0pNGpm)yUv6K=}hT!c}=k>O^Ljs zc4NseNynCoMtUy@rO{pxXpaWPpj0kJk&I&5l#E|47)i79y6<)QRLSPBYW6cuGGjMP#nxryZarJy7uTnNKJ`a}9$ zI<4g9moY&x!iblA8KI(dzx1BeZKqwK7=?j+LR6FuGxAJ`UX03RI~n~b^o@K+D1C$7 zN~Td5g<-j5r>K$JUL>uPE&``46RQ;Zei#+(%qD0MN2NX;4tc*ltCw~-0rX=%N+U4o22m*Py z5Ck%Bb%?_-^dd~{NM0h74xJ%S`^93(59~tmW$A^XOm~@H@_7Ne1kVS7Oo+&?A7hLs zli%~hBG-07ItDe!AV+dI*<~gFNkLi6NR%SKdocPz2!g*?$?t6k$0Sv^+JkQ-+10zW zcVK8S$hMy5%K9!mi!2T+YJX`=#q&wlsK}*HvFW>3{{B*sNpF1g=1X3eEGLihlXDG$REG;o#?^v?jPLp zjXMq)KH|f{ix2$ODbfLE-Jx4v_vY_>aq#`$f8foB?YGZ83xC|dYQ>4)8vnr6|FL5A zCtrNaIrnUxeDr?L|EKTFnlbLQT}!sDdCm6yAN@=3@2A}Hnm>Q_!3_`ocE#i0eDuMy z{(NeoxsRlOUbeKC>Pg{j&b{!krGtylUAbaZf_CYl%NMU0N?wulcn`_yRsLIS@!Jn&N)<=?kNXhm`+YlKkL+abI&?{-rRYootk^s z8|?Eg{Utj#F8!o6vz{D`Fa*FT{=ZSJ6}y!&xI}RubAd^wI$u&k{-0ISJwAN)w?de(SEN>pJST)<0PXj zkV}tmsehbJWC-T4U97r*;8hfg`{k0Eo zz5M3Y?_IoeC)5A-w%@(*{MvQDe#6cXHe}xNQ!kkL&UxEEe$CD*)Boq2pE>iweP+Dr z6FWPYp7xJVo_zG?_)Gt`a}v`Fwwy41<*%=~;+H!oGyTyJYBl-cwVVe*9f` zzUv#`y7c<4r;cR$7dIcg|CY8RA3f@+8BD+9lSdu=u3&-vKD{Kr!ROuzWQzWn2>p7_}x9(`(v>DxB!`shttKmF;pr`Iw4wiDM46wW&P z%`bX-Bh#n$+;!xlU3Yx#xTh~;`ZX`U{hgOxa>_OT^z>$?zp(zGRg=&E%TI=$zK-e3 zZ~Mh<@BhM2K79GpH!!{VqM=RSI_o1(eB|kynf}&$Zo2%cRmXqs?x$~Mx_`g%cRul0 z^wys|eFxK@IsEY6*SzSKZ~W!yyP3Xu_zm~n^Rwfw?bx-Q>Ef|3J^1eUjE4^0bwAVJ zxpGb4wUZ}*bl$E9nI89b@8aKo`pr)*+4T_9znM7U%B9gS?pVL;5vI3qTDY>j{f^77 z-Ss%rQ+p5i+3EX#_S>J@wR4x3e*C9$*c4`7_f3db??7T>2M&gZcUA3tJp1Oa{N{qK z0a-Qa?egX)E_nHIZ+rpSNnw8XD}C(^-+b4$>6Ud}b;hsX@XeR4zx-6PrJlEJ!>>Me z!}NdukLBKxOwX>pd;b@|WWoD4c{7-P$&+{AfA|NN{Pu(1@l4;e_1?>-_x|{nFYr9@ zydU;{Y~nkjuU`BB*-+1W_w!fJ`pfgry!-bw1oynt|Fi4EQ~OT7vfb$U`0KZ?nz;0L z<_9k^15BTI{-f`{_FtBNaF!Wj`jY;OZhgZA<=>xS)-ip4=Z`M@z(c3qdcN7n^q0Q! zp4VM@>FX}N(p<*$Kb(2Zy3t>cG-3B-T#RDe-O-I`XgOGzxB!=9`L?D2FEk~{quiv`-(fS`OWz7B&K(N!k#5sOgKh~1|_#RFi;l%CnIwP5Kcrs%~a`fQ`<(~i7 zmii#@n~+PlTOp83&umF=ZF&CYG27FPqg&28SVUepCEtbz%^toX*L3&Hk4*D>e{9pn zQlLvM?KVB?Jg}0g zg-69C#XrA0D(7`QX9`7h_DgzRl9j(>%<@9!4y|d>MY46dXTD&cIke}{EU(S>l}kJ7 zqIY)hA+rxT+b zwCOKjeD;#1z2{`6h|UFR!79|->VlLkI%VaGUh9H1svR;UX0V#=Ta!p*hO99!3QCUD z|E{BBin2Z{zx%Y9@lVGd`48Ryuzc~5&|*1CchNxaIYUV@*mv%-p+)vv+mZyi$0Ti< ze@x>2`DhitmHxltzB;Um=xg`PX%5}e2uMhGccUPJAfR*!C?FxB!lAnxC8bM1q)QN_ zq$H#i5EPJ95CnmH4)MG9yZ3wUKlhJ2JP)(i%wBuX-m~^Fv)*?tM9)Jx=ta+Iq5oA8 zt8t-2B#54aEH)Q(Q$9~V zK0bav0X{)KAwFR~5k65qF+OpAK7M|F0e(S#A%04_Z{ z@3C}xgjp1Ju2{QucRZ(CTRB;~o*_t>nRT(YbbILaKV7sKyK}?3TN#~PtgvWRhuAq7 z_TSQkADFvXTk*PL0e}mdFzAZ-`J1sh~G& z|G~Tr3WEQy8{~i6px6y0-;PyHmAJ>l!((h=ZENR<#a^)U&W8qd}LqrWYAe(x{q|96CB zMyd1X$<75Z^Pf8Ij&^5AyR(a(;~7YE?nP0OI`^VbUxeXZ%BTx)2LuNI2ml4c5C||5 zi33K#aKQvnB7hi70wbj*1IWRYU@ClC7#)%UU;*r*4&c|2DsVG+2s{EF!yCt$08fIa zfqB>h_y=?ayveu?JpdmfT9z!NbeOu9uOW^D3{fsJyZH zJscO0oK8Yk`F26!z{hL^6*bc}8QCA}Tc=&!P)6o!tn7kf5^5SZwRQFM4UF!am|0re zIJkN~_YKc0d0p8)T=Ck`Y3@sc3DZ*;1j-GufdITbXn#5gKOrrY1&1ES2~&a+Tt}C{ zS)eRXcBBxl7DNcoPZWm&g}frEEDo_m;_y+xu0m*FfSefg28YFkC|u7aY2sH%%X2r#{hBT#-KR0v53ogP3afFJO}#vK>^KK!O7ejpza z1uEtR%wILVK_a-@UmS5AdLPb;QbDo9Nc}1$(B1c}Z$QNn#Bx~6NjX3UPH>=dfA|R! z0(5W!DAF%74C(;Ghu|QHV$9HoaKD^=sze|q%*mSHyIuo-d!9jbcmlSBuIgf zJW!hf4o8o3!ep)j&fE}cDA-Sqfmi|t_zho2PjEs3zj^dN$4w{-3JxGvx+#tBkb(nH zJs6D;*pGk(cTzKC!a8l{GrB zy1BJ&d~$myASfcQptY^*!_f4MT58M3?!h5-ty^~uO-#e0W2$QF+TL}4m?Wm4ym$Z4 z{>dr&(c>>)2^bumXz5I!`&7KvY-*;Uq-Ri3)w+dUBtE`xyT-<6w|DkjTw~nalUaFq z3t!i@eHfbjnhugnN#%=S7#tcM8$8vzWpodLBqUzk$wRP|59Ul2S z_2c9e#AwRo{}t-5grtGOiT%n5(4{a2q#rGW3JE}Yp+Zmu1VF$M#3*e-5`-QC0;NUa zK#&jw7Q}$yL17SFI6y!S(?ZZ7?jpc&N<3|-B7__BL?eb1;z>a1u9-4Eg4$n0_rUxs zA=GgHV~8Pw0_O@2*6i#tON1J3h~R{&ptztIw#&d1xYx7bb}@v@1C1Rwg$*^aQmZ5e&V6^D7e~ zisN^m3|)^z&yh<)P;fD%3K9?QhD#4If*RtW1Fq1bC~$5<(c$pYJUmJ$e-6}dniYWu zgP{wE{Pqw4<8?UZY!npT3Za1z;{P8H`is4(mARYw`Lmu|;ru;X>jF@}l#MPz#s14T zj)k4=Eh*Vc!RhCv7shz6%wN>VLTLx0}6;b)5#o zzor?j&boRLadCa#O@zIx<;?yZXSZ@A`~?ld>#xe=Jdqx)+Q7vx5B(R_QtDEpG?ly; zzg>Glfn=tkId<{&thA4O6ur+#u)Md;cXBH$`F_wAvRb(KwuvBjOAE7V^BWt^h%f%6 z--XehT;)&7^!ON$C?fa=USHMjm%N!k=^(YzFk3F&MsuB|RpYDYT+j`R72PTP*SSLF zkLV^HN(7yxACHARC|{O~v~mfCCxQASqk4-wt}xtweN6B`t+D-hYg=;c*B6^>G%Y0H zM{cPnNl)?v@7^%m=c~N|gvQDENRAEWbDM|>x4g=fUlSfQ)(BG=YH$zsFS`lXsb0wT z9!v`JOTbAS`MIU&%0R77rEv5!=K%L_*Y}@fLj}43YtESY0 zj%%3ol2R)f!~89)B28QwGb@Glj7=SD^emd^ctv81y66H*g!aR({(Qy=bGq&tdSyV@&Qt$GmFx;FL_{tgxBXxG%9nf8Rs@fu1=Z3q8apW>P` zyuEM6>TdA$kIC$JP3+_0P_bqbnGH5~bn~zEJ*X%W*6olIwemPV`zOx>!EPmu;Qd!V z2K*uSloIH!&L7!tzVW`9S#kWpg}mO1<8vcy&CKx9Gu%@M-V;8g0s2e)`P9HT#f z;5AnJDL*;5Iizvt{hNnZJW|8*)MBKHN;x=qYUe|~B%YLhq!zrUj@vjj`#6#em(Dk$ zeLKsECYqh-PW0<3%_WnH?RA7kZj}Jp>f;%0^Nc@JTr0hfu-92-{A^*P_n9P+wEV4? zo^beXi5kkX<R#(Dzj~``bpu z4&gH1^W&4`ccue9E*8b=8@lwDo_BA;CeoKHE7z)UME0eJO0vpU??jr%Re8`wLfr8K zl0Hzf*l#uLWsF~QQW_op=KYthT*-mm6?Vg;%RazjaQ%hAI!f`c?KiFQC(0~Gz)FW~ z;m3r1`Ik)LWBMCj;N0JY#P2-abrc;Yl=Oun<&{&5OFSLINKpZoo_^hN{ceZU0p^(g zZej^(PNFrwLqth5A)u6ZGg#zq&sIk(&e^1|#r+r_1 zcw1H=2CtVw@&Z}-7H{i2RVZDdag?>2%BEEH(nJ315b?(}y2B6rzWhmZ0prAziu!VL zI{#>Ww`87&yIgaySrcYgvyogfDUGHrAKHY0tQ7^O(x{_oU)oUL2Z!i1+>B-+oA1wD zvY73&z~VV*t@l6QoifmBg_J3&Du(njTD-NXK4p8wR6I#eMYeiW)Mx?9I^DT(iJTPI zNSk%adN?sXBT9QiIr#q5RZX!PLcM;@7k7NKGk`y8_GT(My4QV<<`ZuPg5RY*Qux=e zNjdSo^i=C%9}jUwj7i8g4%O?P z+A!FzqyG*D?ot>QdC@LY%l$yJE!6ps8dQkl4DiPgg~nFauUC&Cw$g%dWlyTfOKN7n z7cvC*+JkHd2V1_Tk1Zt3#}(SPD42odb0#9@SsvZzYU-K4M24<7hPv*r9vY}UNRHjR z=R2JlX0Pp@C;plnF!AL15^ksoA&{ zDl|4-gZ_y1qi@c<o zI#F`x5{WWE)=eO#yPj<*fUc+S(}}X2D_85gX>f90%Gag~w~uv4(z4hd zSlsA^j9LPn2TK1Y3ObC31m$Eh+4g{3AC^eb4E=pxBW3De*w&(@~T=zWf)^5?_*I1WYUT3#r5!P=z$P*bc zsUTG$OiXJPSxEAr2?-4Pla@+J+92x~X!ulbk$suft=(tt?vJ6cW!~vEYQamS?dp>) zy7J9XNwTI_REuqw{GNwu_H1^5-oNb0?R7I6^}i)tOJPbbZ!_KpQ|yXc zyr>%&H7*+;Wa@Hfr{%vy_9FZpL=prnpEp}Q-p~A06r92j0lz#ouK3xa`8F7-TlDWZ z036`EH)X?}V^P#+JNopPrPK1O%dlB`*XHk6T%*X-;najTK*9mQ{U{f^*<5mTmV&}wp%&(XNoZf|<3jNflFw#@c4 z8nYN(xGFy)?s8 zf<`8tX=5Lw%-;1-i{OOlmz(}BPiuVcL|q`IiY3gq(#bG0}tFfeyWfi~+BqnoS$IC^G-YZE52PiwtFce0p+fpKtDT z^Md-tX4oimpV@005oDLwOST`wM|WQK(FQGT6CrcYoJiT`scaq!JiC^W{;LU#TSR|z0k12I&TnqZKt(uVSI+HNJ`$nJ8 z&f50shGBiE_GtZ;U-MkLoigw29`L#9xdgc0N{KuomH2Q)L7skSP0LD~x#jg?D)Mh; z{K#^^1=20vrctM|ul&`e(0DMp^F~-eU9>=CV}!#k;yu4-HJPPW)&jD;#g6b?J(t`U z=D`y!Cnp3?bx}P*?jg#+F=?=fsp%@08@%O*&T6v!ztlpgXdSZ{u^Lx);j4eQC4EP_ zp!r3^n&ns$9z0XuwZK=Vy*V1$6xoEV`JZk_85m%o_wp5r-CP+Ie>)6^`TsYciZ*L7lKxW&_flls8R(d<`RP+Y2~1xp)jVo@d*; zZBf?AiK)#b&eGnk(aP&6`Z>3xtwK%GNV@dU+(PqrybU@1@?>`M3MF07-$uqt53`Q~ zTfr?X5Qmg8K3Klo+8>lJYKnED!8bZTTRlc5_22B_|W}F zqIl@VXKDPU)NwB%e=pCPuuq*GT2VxFryBicJ2(1?L;@SdZyQ{9`8s$~zd?VJsF=?l zYQ0&bmC_-@R$L(Moj544cEVx7B<&hf&k<@fK+Dr6}pZ-wanRP9jct| zK=kQcFeBb>gXa?7g#EL9wj(bl%k^)uOmWPUv8<_mLxdxs@I?mx&62M zV&O4waEHlKsB@>kckc7;n?_nqY_3m?FPRul2Snos2z!aO*X*@htcy(%B6_I(FlgBF zO!ceM%IP(pz_kIlGG$Ju-didT6+Q78@g$($2wchjrf-z+Y418EQA)Wc$3dKylG%)q zSi@y<7#)#4N@1XOt+?aP;oTT+W)cm5mEtTb>pQ)svdh`gs@PknKUXd|0u=?0_53^nK%fP-v22X2bNxx^lEgsp;wq zUH9XCa7`##&Ce^~{uyGwqS1eEAqyo`IjmV7EjkmqI*4bll+wmc)wfjyAN{zIpAg9X zz0WsjhFc#`F3;I1`hsbq)8Ig;{qbghH7i3QqC91|uuz3G55(xh>*?CVGGOB0!;Tke z0~(8#)Q>&n_WhH4C_u=I28FrwIS6_ErLXC4I31P9mgBtD9PBq)$C`6e)E1)NL-c1+ zWViCWKs`%V@8mA`^S&v3MSkOK+3y?OP53Tew9?vfm&}&yaf2zAH}l+|4XV9en6Z1& zNWCD_`Z~Cm2K<6)T1TnlfqB|s`Ms5++z$EDSljVmoei=IX)cS0`BXR#jb>db)MK{2 zSs@>13C;RptM#=ljJ@xgLRLX{NX2ASnQd7%9!OS~tTF=}xZi^Dp0tZ3UbTLWa;eS! zJ9xpQv6HzMMX-cC=;(-dt&dFl0VSyBBca2sZD^2G`|Z&Z+o9%U!uhMaioHmKdV74m z<~KF2NNt4}y@1Xf<3n8b#ma@KPRr@;Yo@y4iOdMYD1ve^BOkSwcSTpqyw=rTSKj{I zy`5ncz^%k|C6$e4X4X3T;Gr`A(!nKj=hT44sy{QDrfYh1Q-nLBOqQ2P+DFA@(IYOT zB=DeolCa5sfbKKFy|u=~HJzq`;MJOrEE3h#)cjTPe6}^;A{L7`s*|bAvIJJ4(N#-X zqvaCWRQSH@(P1*=e>XQ@1(dNs`5p}EQgKEb)s?J8=1p?Lq!c=fOfQ*2nqKgJlHGVw z;x-vmJ<4eGFz!-o#OJ2P2}gpu>lszq?+G$0DhBQEMW9Bl+@W83+;xNA+FVFVd^Yuqvx8#%_#RS>N zB$ubBvOTdZN-EOG^CAWPm@|CmQ>FWiq)EpZ-{4BSncnNiUosxhOs*Ex5INFs*O%ZU zN-eHFW{qEQ?t_vhzv&z4(QC59udHRlKkiC-Y9U;`OPE9v!x|( zlrb}V&^#;-e=c4@jl@Tpq^y_fF@4b8nEfzyRUZQSK!Rx3(3y0uJ_YBVgSQ>4}dWr%UNBzKHj%;ye=TW+uw zM2~-53oox)Z%h=`laEQzj5V@?e0It8(eP&{U!&ULlTG9(ER_%O!iF`a-+bS z#a;o|a%3dah4=PH`}h>INez}9aqusgUjKAMuQ+D(MX34A$JLFvW%>x|4O!)ycuZ#) zJh=uZ>CW`K4mr^fNxI#&`Kcl#c^}5K7tk^nAfY4auJny2g)5S+`#wQGCDO&IdoJy$Ij2$+dwBp=b z(0t#TnDo7-ILzxoE6>fTvPy~lXLPZ|s6RIV(F{Vu&-ZbJXIW~JB7bMT3k=jHC8)Wf zK+3bw=u`>+m2b`7f5BuMQ|3{s3z7YMQo_=Yd;0UW`lL8{zFo|I>-a{?;K}zHTFp=+ z0wveCDfu-b@}|yV{Cr6Vp{NJ^{|3zii9H5NWu7&PaN>6yH!FBAk0-WGXwuk0pTr7C zzqNb#8rC8jOjPx*Lp@!#fH_c=MzyS~@D81e;4FHGkn@5$SDdFMM{3^rN%HHhs1!$% zfHhWrWEriI6>9R8voz*c-q~+w>4A&wEkUrv8~O3GB4cwaNPhXO$nLNSlHWTk{skw2 z(M9=;CS4tpdsa!U}LX%*z+<7m&RF8?3Yv24(&b4w8>Qlg=rFAo(1ugg|>! z*0D~02FX{QiLqsl0-nJkAo+J^V$EHYEX9Ljko?G*n6oi3NYn8NBtMT8k=cP{a^|-U z13~iJXL3(IRcu4PQ$9!@U4xY+2pMF2%qN?r0H&&hXLHyCHsny5Qkw$J3TVEWxq{I}X^Pm<3JL5Yl% z|EKn1o-ElJ88BOKit_l{GIjJVs-I_ZV5LLGt)fH2^&?yHXUy5Y9HVj=1jg1~ip?D* zmnp5WL-j$iyRt4B8%;J0`}p#a0p}AK?9&DR5+mm_gZ!5welJn`w;8{|^cK#A&Yg4Q z%gnLh6`se8tz485cU<`kI6p)BY9t6GG{CgWsyvaTNC1oCcnt!{`*Kz}C*OQJc3Wlp z_cTb3*!0O9o)qCnmfxIDK8J#O?2qhFq4~O?&8^x5f>MyTvNsfeE&7u0iT*s1svMi= zBES9kr;X*SAZ^uPU(V?Q)!PrX3go2l3R$LXO>1Lg)2tDTL)tfnh93>d?|-Y=JP96r6(Yvx13Alo9#nrRv(5X6uXUEYshYyb(+N8o`JAG-{D1LiyDT`~VY(?lx zOb&)@lpot5({LO&#e=KI`0#P0ON^!kY)QM=YkwCW-c2 zZZgGvD={KV;+wS-?hQ(uB+UCoBX(_dB#jbf^Myqa4Gg9|B1?~ zURd*7XkK0gDcxK7)|OPu(ozSq(vOFEDm z@@M;Ra44GQUy~%6I(!{`LO$1;`J1$kU`xI9!#{4aHtujyMbC!SD*HpxCzc4Pp{OZm2C&Vdb}as#GY-}Ow7#GK3P_TH~0X5 zO#u0xbE5QmCI08pSfDdDPZqUz$=5xc_nPjuW%bgL)z7KwtIrcNyb@OrINxO*D#bB5 z{{Au8$>c37_~wSEIc~R+NhP`lc8}k{@7A3O@o0}7_u1^LAF8A)%q{J1_B`?rCtu{J~l-TdfrObg6xi`vzsklb5pWR`@?HF8RTU0k;HNhVvys z*7yk?)^2-VR^NQqm16oBO;?)i+a9F#(`yZpMx^MIl-cMCWykRAtS*10$lS@- zS`q}PCvmv;Urk5Ts`oXf6cKFkzgPHQhG462-ib~_9$ zLX=M(+W69R3uwuM>r?_}0x3>awx0Q}3|XezT3@ju`R-^MNnUYl$IqwTOg6@+|Cag% z-#TMkj8M>|^&72TDS*bq>F?q~d}`Y(zi)Y+0-SxT|M<^-&j()DDOaCqP2fFoR_0;) z-0blWTXwqJIe_qlN_Ra#e&=|>ui82vN1-F)^FFHrb@4MJCI(Z4ik;!zAL#~mm8(&n z?t-FWDV@CBIqxb0XsxOybU=X@{OS$|>_IBFT+)atEhJKt7`l zWlQSkPRZhB?b=gsg~1|ORur*6t^=7pxIqWVC2 zVQ{;pS~~0xse;T;}^t}E`6Y0Q;g-Ec~CBz+7oigCqE+YOjT}edF{jp8X-?b`xVO1v<){ ztFx{Qhr5dI&QBVB)Lkl|Nnu60v|bwOaC^HiGX&Ghho$ikEGaW)LZFa|_;~HfgNa%N zDdWJ=V&zNzdUdgKV?1*>u0WmtFOdho3hBuvA9$2Kj6Stueys%F8eyHnQ%ssf2rw`_ z*|0Yk4yZ@0sJDDq^8Hcpsi>;~oL7Kj@$w-fg=tPKl2r5o)8)m>WE5S%>26K%YP_aPE7QVcZ%F?lBg?EIQ&b=&?wIA z(Ld?=HqfQm?&XoAE*bR6^;7)G#cM;Pft`&S52%7j_fAG4?`?HlvEH>a?l846sP+Mi zrHy;>wxybTPaVm6@NPkZPc;mVHd_xr4;>Qf9hC&ywi)v@mTZa*1^m^$-k4N;U?!;7X?jVB0@8SUROu*|om2U4n|xBSu7+C~ zfmHTliVJ|`z>Tr0T8NYZINIczmB5a;ycNu?>6l>=b&~T{8vxOk( zs0I%;?LthJZ2u-c-&4BL@Y>vO&$FX(bDoB7R)8Y2kft$5fYR0O`jmxLLfea=xLo$W zli4ANd(6}4p0B|_g!`-i$&7U>>9|hcFD*B(1lqPT3at+9Nkfqm6ja`{9Tg5;!^ic? zS4zT>_b%ccl%?73X5J|ePqUOQ2w{{;zY*;DXYo#%h_BR8Ofh?Z`&=PK4UPTXz%1O( z-=BURZ;#)m&B;}IWUcta(DQv=X7aT+Re8%AR#{}`&dG1BRhl;$zTjsWONSVG;r(Me zz58>mP;UhO7O(hof5@EsDMiAs&~XKpokE<;_zK>i;ku7Di1GY*Sgx~geOf-ue^k`- zfFgz{L!a8qJujv?M9J1Zdc4K#?S@y|Zu87!^0)tkJxzmO#&bXz z4qCpgGbkC2mTb=PN|ko9J}IYNVH@8G*0Ud%#GP=f{PdZ5@o~7mo4bWI>_d>cR-mmu zcgUZIBP30&-C~6^=GH*j0ej7dph-K&1NeweV=FKzBDnDK4J%mrUY@_J5T&^axP3j) ztWtr(Me|iGVElIyyv=qQKe8)dvmXUn=O0WK>`?%7oIcjcaeoZ8^^uohY_ZGn$_oAz zxY}(2A{^0t!1W%-;KKvt_g9`z+jW%9{Y8cGc>el_e;v?IcP{LIR;7^hq4`BzEw0=X zvx3l*8RLYozoi|*c?81=2SfHJI>HA(_w|1(YLdLK{}TZFauKhh;T+*D=|0a)N`;}X6c%)X&w41pbu3x>Jw!c^q|A>(39vKTtEaEIv*6*JSU*H)Og=-Wx z#EVc)a>^toZIk*@hN}k1 zvsMXkXMSH*%Jcr}H}^uakjE%Lq4mQu>&ti?e9avBLh&oU&$4NSij;{yX=me*5UYKm z*IbHY4C7o25P+(bqBb-V%#3RvIMgoX$p%sCYZlQRH0*v;fG^PvM%!eRnvq-+`RzHl z8c;EcrZQ7-c*Z&Tj*n7diNy$!!*DVGeF=qmWsd)aDJY<~&Pf4PkRse1Js z*pf@7$PZtEBYEUAw1PLylGqudwaRmm;a+j?7ul{iH2x~s$u;N?U!Q!tH&f+iYxkO{ z!kV&e;&(w@8pl@Ae9oi3GTAxDfl8u3ZNIO7GC<)RQ${C-pUx)!-m2U~Y~8%^Z*J;k zEdxsWASwE<6*R7wGQOlCn7=0bx|EPRpg@wM3Kl~kSNJPL zv!CODIkxW}-G^!tqT5@mj52P2xP)4&mps2x+_~n!Qmh$w8Q&CrXTPI1Y?zv{bNE%M zOL9dO$6HsHvcQ~`-|r*!38kj#-Ew2OCzpF4Upb;o4zmu854HAwR>12M_2qBI(NCX} zy0w#3n%Jf}etplN!vgwo>wFnsCb#Q)UxXbJ?z0O9nX-k%B!xqAuPU4Qu&i0(Z2 z-FQ7L{4$;@h+DDJ&YhF{MfD$B`#n;B*MA%Y795f<6-;-5u3xFSF;8pa8h@(?ka|2; zc)}~&@0xy9q}Z93WpWJvlkO402@y~d@F|jc1D?NPNoL%eSt6$)02LG2RU2Gy$%%fPy7P2iGOev0ub*u?Emm)%<$a=kk2dl3{S{-S#U>26JB8 zzP+a2qu0U%qdI$*6}Z0NPxUm=v|I&>Z3$e{;;5!u2-~3kYsSTm%fY_8+jn>90(9@s9uavC$mPgCY2>h^ zS$NYBmVxT`?SZZqU&f~?eQe1(RJOb$xYO52$RRM9Bv-ELMft3_eWG=&*w8oFSZ!dS zGuBC!RF8$l%>{*m-NSYRHuEO7k1fwzh6YxDq`ve_siz$m zLvvlk-*xJ@e78iY&U=!jLbZ+8Hr>h|&i@-QxYCdJ6|Cc}lhpH55sw}%N_ae!9Ps^0 zVPoU>J2BVHV4scyp0O}~)n2t@y#AY~zFXC2^dp5^#AuxSox{6yg0na2RQ+gg^QhM9 ztR9pv$&$`5r{-8L|NZ=}fZ1bej_``XWxSu-leNM%9KyT*OUiyLJ8UQkqlFivx3!BC z*5Bc99_f!wuonPj1jWJ3K*prmAQDPO20TVHhAl2e&g*>HoK6L1T;QU4F8ZT+ZqNy% zNam@T$T6@W0-&ynvfwX>mJ*nY^IlmH=c8TF_)Wi{B`1`lLvOyIyKQfN=a$pLos4F4 zJ@X~E*)|Je&2pawv(sX728a2o(4@Q@Y&7zY=j4yHMaRHT zLuN1+fVo-(wnZ=!jsgRG4E#_&6coaWg9m1Wg5hGo*+sy_kYI2s1i%Ln*v=r}ZaEOp zc@+eS0?Zgea62#v3ZNLl+F%eit^uF|!+;bpH3>ezilo8?04@k0Ho*#}Hx@tR`rw9gGAvvC{^C01(kx0&QRsNP?YZE`hQ`pg=yR4|x~}d<&|A%MX1D zh!ApMMv8*)W7mjj&q{Pnj`EiV``~aFg7V% z8|W#Hvx}3JyQQ^@D;W9E+|kzE+}0X^>bSeQf$+`}ySlnsTX9=>L11S|7U}qT!~}Wx z7}@`mY>`obPe6#9pPySmgahtj{t#0QewM0I5YNNh^%1v)ouielwIc~OX`HwKBfEgP zkhze!pojnmNSe?Mo6^zE)W#b7KdP)(y-yI?a4bGvytTf6=bK8P+pIdcL4s-oe5 literal 0 HcmV?d00001 diff --git a/pagefind/wasm.unknown.pagefind b/pagefind/wasm.unknown.pagefind new file mode 100644 index 0000000000000000000000000000000000000000..c9b6339744030d11484dc138ca02921d87be15ed GIT binary patch literal 67201 zcmV(zK<2+6iwFoVqaosE_H5eZf|#PE-@}ME-)^4VRLN& z%vx=1Tvu8?U-xV7j6HUoHno$^xi|fhB0$|AWEWP7dMhPeE0pv{f1s6+8&bE)xJ_%v z+Yga=EKw~*%8vpCMJN(RRH8q!BA_BgS~pD~?M9+qj0g}dSt$}-DTpA2B`c+(Yh_y8{_dVx5U(fq_-kFyUJ~#X9k)zMdJagz7aq!p+QV1b`AhV}crz4)$ z9eS5|fs`Gl@nJgL9&|dszica6mV6)Ru;aOecsl8ne>C;dl6X4uG*57XKh+YwOPWM= z%J&mb%M*Buy2JfcOEd}ATH+OGbZ3b-vE-&)@_Rbr=R5%hnn<0%yZ$fzsg_|B1~L?Q zNh!i0lv>2HxkE~6WKc_`Xw;;tHGxYYOeoMU1D%davsFtWM=&tJXM~R6evActK@g0N zi&TqoBlTDuqfu+2?;8`rwg-ba7C|aR9LqR1U=L|wBen`9x6>LT2pX6!lxU#Ig)kr_ z2?o7dNS-Z1pHTR#)h4J%DvR!#n9_+f27?kgDU1%phzNxWwn!D>FWiFJ1DZJ!yj32G zzX~IlLWfEO{0IWa$9@%!s^evhk#1u+hz2DD?S*-bdH~C-Fbo7u2__|h zj#jdUy~n&T4&vsmD_uAI7y{cQNwmgd7_VE{NEm6JRYwMm9GSl;#inKH;U!u3nGo)RiohxvoE~3@R|~h zBS()c&b;JpL|j%|j?FI4EF3&KcjV}EGq21ZdG7GyG4XBHeE!9Q&&+^j_SKm~hre-j zPOPdiZhQ8~^NX_!zVSUZaqyXEW{$mfbn)=);*mqXSNx3{U6`H!#_X|0H^=NT@gMTO zvdK?T_WV#zmOTfbe}1rcO+~KdnD{#t9-BS5aOkjjOODOVyz=Ydd2aUT%nKOy;vw-z zYP{08FzZ@BP_0TU?RN3SnPZCw56#WI^x~1DwA=6N(F)763$wH0vQA!-qLAsAKb7Cr z-_z&x*MC=^)%5y3{pb2E{TKT8^%;Ksf&P~MZ*@!myS}Nvt8c0w;Qe>>Z>v@Pp?da* z`ilO0{g3*4>L2uf>c7uhO*Y~Jf3IPKGo28 z&Yx-+D}Po@W)oKayxf)r7R`H?+kBDteRYw=M zG?AxEQtnnawfj67*x-!K9_t)`?Zjh$^@kU4n5D;-|M=sTchzy4F_#y!EkG_P#IFD~ zZG+}lX@<9DyL`N?++$s)pl;GiHkiAJmJ|cG6rEqDfoR+^SA71tp3h~o;b(A9Gy$Hv zXY^g>nxBNhlTn%8OCs8H=Zdb}ahdXN@>{p|~) z*j`-6NAq8lNQ+z4u%mc$wQN{fWscQu!|UhKu)A12UpB11hlVc~x8L&(cGPrenZ-PH z=WFNE9VzfAr*7-1t)Yu{oZ4U-Cr_sr0$WS>HU#k5wXabE9%Hh0!JI&_oyC~g#*96X zKN;kajV)flUKS4@AbY`xOsYo-P)MPJhU2siw;uC~s5GTz;3{JZa0}?V`LU@35oJTS=vq_z0tVnWwyWm%HQ#?HFi~*>cy$v~WjC>;Uq**=`MgUM;xB;bqos@nM%G^)jq4e`qpfp|2-4K%w zP3`@WLo_cDP1!e(0hO`gps{20u#q2enkNTf>-PNrY2QzvaqRWSD9(^RjFoVaI~nUK z;8@i?+|cBJ-VEA49+X}?+O5upuBVXAuVz!ui?ADhHyq@K+qn|Coy+S!<2=05s78)n<+ z^GcLG04oXrVUVTl7yG@O9b8Ze|1ThS}=X`~=WT+Ek4BWL86WL_YU%YVsiq zN{7=83syzv7y{CecxB3X#T=uEP#m&Gx*==S8VXsXn}jSEND*GN3oxb~l#yk`>&6OZ$I0Ui!8x)I&Edbb0ncCqJPnYW8j7b` zk7wZVgvSP+fxVAj>@k36ZHV2M*-e?xM7G4#JWfk&f@y#(6`0=L=rQ+Cozc5Q-Q0uW zk9G|oxJt$~EyniYx}}hhqV19PFA3zAK4WR%sZr*Wb+BScaF?_aVS6Ls%>eKwU3ZUg zxoqt35#x9o$G|$>BQ&H`cWGxGGQx+GPuAfSA@bSUC!e~L4@)N*$oV55q!YJH(iKnwoyRVdUd~^qpkDXj z)O$I9DKBm7jMII#POqMHHqZ8xzHA?UCfV4}7(4N`T<%2+W&KlhOQ#2110}d?Bm#rZ zcyA+|glhIOvb2)Mrv0~o@Qd97pqm@yVH@<+*Z17@77&mQO1?OAYGV9F3I=24Ah2LP z-sTkY23$a+#F>PLWD6e+B>jweCIP;2VvjfRKF}yN-H7YSU?v?@sbUQOC+TYWo77jo zYtFrCG8tDcFq7_%8It++5=gpVrg`LVFAY-5Mn%M?FX=Xeca`-?ceiI_VIu@>AnXl# z>g#*{?~?9@OJ5ouE54sJdU!ReH@-^>po}|bHBO_(H;3*gy082cLkGnfFEJzkH{Qc+ zoG=?F%*MHHhTA~pMnJRB6-Qa*Fp*8krU)|HM$y@abSk9raK)AiR7UCRVT_XhBNRmS)TsP-tV+RcT^m0J5DG3v&gd9SqJxX;pel@!k>`})@K zR7|=CsxkfeAvM|2RBgQw&gDV1+B*E-)m&S>nyc;BTr;Y-9-p+~?NX4~?Mgl*bL zXgP0)NWp&WY&;?+)@oRCXhT>Sq4~|%bKv~ezg^SIzJkKWM{;q^ODBdfReG_qEM9f1 zEg?r~ur|eQa$<76AzW@CyUY1`_K?;k#VfGJ0_cZr#=GnADxg?CueGgZ@5bEbEh()Bqu1$M*_jOk zf!&*&XFI4M!E0a=MuATVL zf_i3=bEYmYjW{E0@P69)#9(qtIi@MIM!GlH3EQCLwBgdnt#q3}`iM0m%1Wa$IZbVi zlG7R&xub58`=j#%Meb|o2a4P`&kq#2uf0D|AJ@LT_ihN+%M>UU;#9C}fsd{{aF z=*pMyiSxwUvpX96bi^m8+YydH>2Q*ggvu&-==Eku6+EDu1B^CCMjZDt;*IOyZ1LTU z*zJt(zmySE{X81T)2KXBDDnrPlR521koV*IaV5T!LPO{EJPU%OJByq&xF5itt>bxXPelvLW{%UXZfxJ6r@p?YSHf+Tu{|arVqd}?B^*cTDH@3Lts&*x7NF=j zTT08~?bitzl2YKL8giKD9l0<~LJA2l$TVYbeUY;4i+S?3{C=`R+=AyWQsvMlb5>7J zA@SgAUgG@s6*a_9-`1{&%a_}{S0{Pi(SzL3ms5f3;qv7J74G#hK(aao^sQe;A!`l6 zehQzrk@#=N=P8)-4mXm^n-4nwKw42omR;CgHbI}K0^Cg5mt^-*M#$kU zO;g0=i+8_o8{q^jPy32@Y3XQiG71{BNLUuxco9k0?%4U6a2g9pckO0BGY-KUQqdyD z$qe7kaKp!|#5MG|YL5PjVcmWYunNv(k<9OhXyC*NK!xifa!gQjF3m*B;!?&0DPz4} z5rd-SlM7VgU=cMPD57@d0X?tEW9%N}v1Oe+#s=lFWg~eszlb~@xHow;(^4RIgi5L- zR8pOwS6Koy!%F{LU8Hr^3nbh?&wBuy!3tnHPyy@$47alZz-Ar5{_On#hx9c$0c^U} z)sO%-g!m=^$3p=2C0qnOyR9GK&;e{ncI^dL(HS@%2u+FZev z;U4K`7nD4%%PP$9tisYSE6k9rVqL|cHKbxNm{n}hQ{SMc)mJg-WfdVEQx|96_ZQiE zeXzbowT;#HORB%GKZ%Ui7av-cq{MHbl9aT1#RpDGR5dBFLy{6~W}F01`Uv$zPKT)5 z`!cZZf^)b2tf>OGiEz$#Yhh|YI%n6{!h+%A2{sf@u%UQ@dlHWvtRePc9DFg1xnLc6 zv#9q#E(_M2tKq62!nuUK^gOtS^xW8rg9*vOgc~~;T<%AdkP2e7DgC%2q3ue`5}`5? zmx1PaEEmE*J71Prpo~wjNhWQ|x~$3~pLHdab&-Vm4%y)g48ZOcnt*$+yoBq-93E|Q z07_?E8Hs9BTx3$I>J(qX*2JW*HckCbV-y`Oe>V4)#-0czu%nC$1| z`xR@VqEU@S6`kjk{FJXHdrf6j$|5PnA;JFQJd4lbTziWB< zxm?V>4B1(#Kg<<-+P-qWSe(0bk?Rt~7>JX8)3@X0!pyf}SiJb-Q`9k) z@y`*lidD|ciZy>mT{QXZ$js;z=`?*UtY6N>%UlgMT%1EV;X}5m50R(1`~gmvlNqjk zP@Z#_igUv`pT!Ndj&%{+;&Lslzhr|~=65SDf@1CkDnXL^yYHf)mE5A>PAGB&#Z|Y( zC+JHyE^GnFQZ%?-bb3r9Bf{7lm(QQ<*C8&w0=VBihS0?}k zgDG6DCL5BZ#noOqoGi~J-MMH;8*k0F6;qkk^nDUMZ7!%;a5K#YN1#E{?6RDgJR9B9 zNt2;uZX?^fr=g<=mwYsf3Chy2vwc%-+5nVxZzCYVOHVd5!%|`coM|$Kn%G1a7We%T zask>Cmw(AiDNC9uQUPyOfLP2G6kg3O&;pC|hx3SJF1*aa(382W$XpRNYQ4-OFLQF3 zrObmiD=cbYW>ygKjJh5cN29hru=Dz!H#pg>Sp?3rq2ZdHWU1qOy> z1hzP(Gg^(Ek%iDcwG*YLUB@X;O}{&GtMfiMtWmlnC=_oaNSnFj61t>fGK0U(TOZe4 zxnrX2VEr;h^8mZ=^62!f0sR=ppBg#az^OGt2w)p>Y*{%rl2$O$v32j*+D3!N)?QiN zFQ4kxYp`T2Sc7>B5U%!8P-NAjYmFpH1}EqPCv{dD5;}6hIXJ4ohomPM58X-T$wu{n zjb`NMal}+Jkfm=FJem35 zE|A#r0s1u~tJ#4m=KxB(XNTkMUOLOH*uCo6JuA2>?Ou7*BpJ9IuzNLV_o`?2s+_pr z?v>j}#qQO5yO&kF*Y2w)Z})Q0?q%2RRoaVpT})tjR5H2NgNT1ihExg)`e)0gT`Vsj zpKsnE`^Uw_kX|Q~^jOcL;s!}SW{c-%u8-1Aikq~Ho2A{dUlIGK(8H^L(lhAd9F#f} zoWMABXAQ{1HYLNPvn)yqlef!F7OW=+=!<@CBuz%hze8(&-lF9%eNbBO>IYsyc_HR3 zuHcD{iHK`Nta)Os+Vcq!S3PmH%65~8>z=q?WxGwp4Nu&tvVBIxEl=F4vc3Kxh&!IR zQ)N3zJfOXRBVyh0g#<8II)%O1ocl9xL71#aF%za<`KKAaHy?7m%d)YsBBO~??R%DF}fb|2gKFEDwbyFid6v;nWsZZL{7wbkOKt~KfR63~w z6DA>pS%is;LmLq&#a*H_AV}C3+pu@iYN;gBJ5x!d#nTdzltjguy3?Z}G-`DNs+ev< zRC)+ua)hXCKnNPF81F-O=nMt~Y)LY}O^mHU4B{l|%szrUNa7W_ZF0|jO=k4pOyeWkG<61i)G$3hYf~$m%|1VkqtwZ z5f>d;vN*s)c>`ZdUk;M0fWnhZ^M|SJ!NV;!m5Cr=o!T#$9X4=f$*Ep^HOrLMQgoT;0hGo3jj?9^&@Ml_re?VJ&| zVzoFU8qSDLosrZP>G8sJ=8DjjxFYlY>5B%Uo6KWPTA_gy#IgVTe%OhKu)U!>qrsR8IrjlSne&t#G z?C}*Z_^D=J&Kjp$G`?I@xGYIELjkk)8&ViGOOBBPEPfH6|E?ZxFKg)tNP>xhpDP)sh5sQseJ8{Azrb~HX+VvqB)<$=_(TU@S_}mBdQRm? z#?@Op_uEqNp9a*rPx9V7Il4`aujCtpGPb&1FH%!%Tw?h89efpP%)gVyYb_jWEq>*z zN0(2$u(G(Y)HJIaMOX233hcLeYNp9`=U`d&e%#Vn`u@YPZu)H9>fi$v4WB$j4&iX? zw&m7UZ>g1bspdKTUSu1ll1zFit=V)e8m57%_0|9VpP&8Y{nxI}x0mu@gu`t045Lg= z+XgvF!@qZu)*?wg+jnSxJbEB1C&6ogi8@(m+hO_yW{l$iZOb-Df)6wn_=p{8spDP! z@8LKEmz9%uMqP%6Lqs%TwM6K;ra)M(C{U3Rq+@f0rP!*H6y7ELk|wz5e&0im8s-Ma zP~Rh#{1#YujXCrjr>-*gJ)=NtsMeHYgGr3CsDv$KPl+rMYC^0*PIXv9@pQr2Jv6Lg z{f#FqvbO6suF4^Xok|?9pxb+*vNiirZp?pX#*jTR@l`}xuBw@_9o`AWu~`IB(L-4n z`Xenm`id|#dDAIF17T+KLVQ9cj>QV`M_wXq7GKI3{;#!&fL<2GK-8fO=_90R4WrF- zNS1Bz1c7%jK?CGcbWIg9dXiwkqBf46Ybia?sBWopQH4Bxt11LLc>F&e+#3!t{g`6J zFvZ~I&gjMt5&IPIxYLLl2;*q^Mnk^Q1*+8^7$af8OvIhU%Wsl`^#CXtsTrJ}=!)Qyk$DXM-G~GW zE*hx}`Ua0l&=cIza0dCRZkiJ+t@G_GPs@wJ1v>u=z;Lz_73$6)QRTTV)%Lga!7p?S?3iM(MI8EyMTJYC47Q9nf2dA5ED-D!PEiwIhwK`x>bKG6gn1RpCq07ixwfwU5( zNe&5Il-D=wf^2{|q4r1qIJ_zvU@HzIfdl7@d*(x8_{2@YZpV^7ybY2z9FfT0ejd*! zh%odsPPE}xg|ro+%QEO?c#h8#G_M=Fkdq3|XOfqktVzAQsh?N*VY>%(+Q5sq09JBf zmsa3EB51V3BlX9@0E9Pu5YC@8Q&Ht4$&-MD9d5CTSwTgm;GZD80EowWN!h-pIfYeO z+2e~9!%>8nRHRu(li3u!tHq6b`RmjA8+?YtEdg5LDu@iqaR;TxP@ZKd-**tcDiA_v z`efRZap%X|5;nLP-kzCS2TiPYVebx&6;^8Ey^M$aV1gC_Kkq}BW714F4Z#U&1SqO( znzSOq6+oaO={k5-s~doofwZe$%|Pmtpw0x8tg;Rr3v;{{thr6>g{^3RZ}#nu_3X!&y=;*L|B+**^LP$($6*O3)sHpJZj_th)kod0jx>!$Sca`` zS?|Cxcvv0=Zx{*Fq-YOiXp4YgI0*URXWCZC8RSBpYE^KbU~G}K^vNNj)d5r0i$@b) z2Ihyay;c?09 zLF7HJgNYGL+}6WlHWa8v){~I%Ga1*-MoK{rFnrbk$P{)#Qtm*}BL*O~^dj3O9If-? zWwl;JknVgHp&0r-%Q=lw@O>#_IEN_4_yLg{qzHd=3l|!~zah=%WCB|-x3E-8zYqaX z`iulXsoJ}myToaxvrK2SRCe~r%3fKTY7!$8|EA10k4LkJdhnc?=8KtT7L|)=^K_na z)A>W0&X<%JOeiIqG>gt&<=}b&>`~5aKEqKgw!l86S@v&LeDUdQH$T3v2VF*Ywd{sVCQnp*0FQB$`K#@XCJ|~ zG^_4bqme>oYyoZNqB^(+`GM4$RHkPd)8HH}|bz@|G|6bIrnCksjZZty!~%zV## zsE$H*9|fpuudR4kU{Sq=5J>-0g#PSublZFs;5W2&{PbIT5Vgs%tELUB^AW$gvmFlG zz&*uG&7(furX98!@iI1ihoddUwPY&3f^qLwUa~*_!lBdAz;POlmemM>-ax0^x$6>- z+?WmNyJ7q1qs9gUY@zY{=fg4XB;3ldho7VI{@aa5%-nAWtvOBP!Z^3jM|aQww>w-m z^c3}BrMC|{r_Ym7QD@T8MrVi6(@%10wje_ZN%y-z3 zJrkL+u*h%Zfi+{~n8d{x2WTyx{ukf1picM}?^)YkLhrGTq5D=#uGJ-vuBA!b$9cud z15t5|T)1?9@VU2o_6NWDR?q(63vc!855Dqt&;H=m?7Tkz%N3lH`-obC7yhv5045^gjzC74<**$EHx1d5CF~rMYI|}bhwPaBT-$DK+b!+6 zXdF~-piRBAhqCj(K@oy^oOf&R(MMbyjSWFlNmSY4AyMBz6I(h!tM0TV?i;k#c2t{X zZ@RcE+Y-=HVU4=0g$-K|`_UhE3G$H?)mGm;EjgNMbZbz&@3s*%=uKF&{b*1ph8ZDF znnis`jqn(rn~w%anuUY3psRBh;)0eVJ({EE)nBi(Mr+``x`jPR1558E8qMx%C< z-P~^5JKA9#P+}F_W^bRHZ`)0CcJrJaoeTRx2l_bLWC!*V2*YSJ*nR|MtK4f?L!biC z_sPzT3ZJ(@z|d6I?MOQuviQ~q_50gI&Klm;fX*C^J7gP=)M3@r1u&LAk%n?~HF4hz z{yZKU?7583f$5GJu8GzOjTjc0==5bkC=S`c4&xTM<T}^H^5}sf zJ|)@_hW&OEs5K%O@^PpIu%rQMJl*|7sAx0IVCWMn1JFYKHkboqgfYE%1T~nx9Pabx z+npmn2I33p9kC*b>sf1%;sia2rGiIDNYc|eKr^=&HMdS9lg&_TX}qr4@zz{>c1%2J zFEc30Zf6Laq&}2(pL^p#n%3#+h^iiWVJWn6+K#kVyysdYSrSoG+ z35wJD$OgJIP}rnEaGnE*qe*a?8vL}O>k`qss9ebb8V=_&I5l}>bB{*l(YD;9@$M>v z!h}AEsJoO8n5=vNIgfiKmOd@9<$L63N(vLoQkYOeVFFHAIFf{XqS!c&o^f>tuvlbE zi8T@pHgPRMPey8yzQTFbx)St*Kjz@AC9cVp7hLe9yuc<=F`qsgZJIp}l>+QnE-pCF zcWbB)ICib#f;~;y=$6$MY?Z+Ns7sfOCh^&0xzd6nt*NZE00*MceKB8J(3WnV68anj z(bBqtBeKIza!YAdL8S8uWbyaPo%Ev5S34OJE-2v4vP<~eq=yDm84aeG1T>wl_d0U2 za*0ClYb6pnCj-zY3D?1<y@EJ!?j$55A3jqLzNex=E+!bD ziHiwH03U;?c8pqItC(QWsh>eMWFgrqSY%m6K~X9S8cFcBA-yz+f`Y*%K12#)Z)jch zK%LK@D8%Cl3DpMIwfn?HCQWE3!E-L-J)2t^d#;`D24h`2-+hHA;DXncBi_?A2h&N! z^ds4gs4v3f$oETP=w9lhAXx>&%o=In>&hLfpO^qnJCn5oEfOoiI{2}GO~T`!nGiK3 zhONn0wH!vkm>NpDSQ6P+7zJX36p4ef%6co6(o``iVX(o;sK^EzuMPi`*M=|qO|dp4 zm&|9t&@aAt2RkFd`;KOkBKBB<0-Rcw-+eTf-W~4A?ta)ww6kR3>@E`}%jx>t^`er? z2|31Qn?QAsWOSw&ghglr5`Xbgg#N@mCWKYP7v*GBqWj>P+tpXC|CFXSc3>#*PQulB+ht<*J8CLj)_n~_` zylM8gf;`onB>#JrRUo{YOSL;(Uy^Jzi5RIxNbx?UBppw9`&D;}4R3HF9ArrbvLx^4 zBMDTE&&qr%Ntf#YFCe7;?7%KQ|AQ76FQb_Jr}#2R_*GH1D19-($0>P(uNimoZ&@bo zB75QAuWMhna@zfo9_MX5sNO-W{|wFMU7jEM+U=Y4TwHd81IGM#^dVm^9!na&HhzJ9 z{oQm^D3;2Vs!N8*zD1vWnQRQKSq}GlJf0L}YRSalSw3j4=}$fo1TmG}mlLLt+`}8f z2!BC*a<}r~4+st>9gNrni*)g0b0{u9d6*9lb6aOIswy^Bk$Sxyz1|Kl@s|`v*@XK| z$)xg{eBZ!*BfEzm&W4Y1IWhq8mnzoSN+sOYMM{ETv;)SG!@Tj8@9^fy!-vToU-%NZ zTGmSzo%#BorO_F~(HW~wlan8-P(n!C)7YpFAefBhES~mBWK6>~1-F?1@W14MmYj!P zpx$6Qw5E^SVvAs1YE2wJip#~1N=vO#e!94LrGKeaK7JH0%FFHnU5_qHJ3OCQ=FjPB zdim(lqtqo9eF+{{@gxa+-G%aZQj~3x15AuLDFxpBY;p;uvcou#X5ARODzh9(y1p%K z#F;7Yf9p@wwOJ@ar>%Lp>X2cn4hhmac^}2hK1|14 zb;!<6bx8I$d%mmANs8TBHNqY)b+AcTSQl!l*uGo^0H;5DI_#v)?~}CoZXAw}PRkNY zpOsj8Sz_s>^=b32UO9KOTPgtVlWfY)d^QEegIPx5z21D<54>yD0GMo~(Oe0@r;baR zoyXlbPy#?LD+qX1r21q}RPEHrNHl<-BNou|_$;B4RAV5C#CfNDE{J{1G%dNU>(w~i zRA0)7Ipf552YUhNqiOBDmKMRkx*~xM2vg4!Y)FWta!h3q`bIc{!JoE%=7>yf*r6+m zVKyw-5@_LwU5jrEH6e|2OUt(QUk&cienYVgq2`DyoYTfj#3~?UD$#9IH$lG!sjY}{7lJUWJv#`40aD!SK@Fi7Vkx? z5lHi03U#``XT&T#0X;N7gF0th2G(Vb*|Z=L$msf4|5 zs_mw_H!jmg6#jtcXB-SFYZ%EM~EyW*s+xc?%_~PA?>FFd^sooKFwWT+%b9N znU3d@Mp60r=M=F)inLJc{nxI3j0n$fEw%pP`RCrc^sQ(9kGN}(k*hlI_uTi)o!Py% zAuJxNxiccFQyFkn1-pQP&k`?Q8`lnygsLz8h}3A-MXY04NLhB*v5PjXrMjt+9LZ9w zga+DRl}14!0hNU!f>IM)DQZYb6w-z^rKqu#{6Q4J{eHji+&g#n!K0X#$Ii^T=brcD zJLmg;zwd9p@7>f6uJ^q8IVlQ13-g<}^8bM6kLPzE!8`HcUJEby9|7S{Yy3N(`G$W} z+n3mjb6IcnD7pR{x9q3);zcsE0@LBfNtFM9pofX(G`+OR_1-jcYmV!r?Ds@=;0;CO$qaU8Y4 zx1u+q>C4ZNhpzvnfAQYq+TF698~vbwJj(Q$)0AX#PbRr**+D~8uac7O%Rp@xt^7J< zl6OaVP89LQ!%gWJw3|EC(}4AMv<+WDe3|3&$_QSP5_*b+NGIB1tsB>nl~uwwgYY2$ z(8RZo-nFCci-06geEX2U6MinN*`Y)lYKv@wZT4C^wc89iW8EbAQ0_&`$RNTQD$F;P z>CNB416V;)ETq(?p%G2T**u4Qj7GNe)_%9aTVbROVU$+TmwQ_!op6^F%O|OdKiPpf z?zQBCkw@$HC>>N;f~*(jSC;voAKgiPRXA1VkDEcVpZoR@_^$)a&wgeO$r*dCJiT_Z z(=$>D>bZP*G)W#0NzUur*Ue5Mw&k6%{7N^2=1PA}o5^3P*+=LUTyLxek7cBE&Mho` z@b)4SP(*~U1h%cG_maP+^v5A0LO-OMFI?Fqli_U9Qt0~D{s%m7CMsH)K376DMA=qG z`7K7FyAtwh^}-t*kC|^@_xjyfau~s3idnQVAW8DvBujUZ>>-DLiyZ!hiM!-{+HOme z6FCTHViRDYDmlKS0i%hIvP4UtkvUAd@ZlKku$?UObB0MP_vF2NRT|A5MG_J+=$sCmZH?^(XPtVFCQ!L!4 zwQu3RsdXRZTsqz&tqS5QlpzHNqKLYClzvbeu-n8SvtK*D=-Ch2uidlg>sEnQZJj6A-(|pNnwCM{Zv@reQ#jBtlXffY%uhjDW*eStF5WaDfFg;B-4E?i@iCwDnZ; zZX`%eo(ve}s&W$jcX|kA&Te0G!L_d0-AoAVptN>Hr{X%gQ=+mChZfJmnnOsL0_B@^SVamA(>aQ3}p6 z&GLjK_fo@e%tf=fH{{Y@v#u(9neTu&VcUQft3CeI(a(SNCr|&ym!9%q)pGU=kG=lt zFMs|YduDp=BTIm*K31tGzIWv;1Q7g57iMJ1$QQ=XADW*(_uj+f(0k7RYhxD6n+y60 zf}TE`%u>@1uY0)41_Jg@X)T+m%YoQ&SCLEjafZPai>#EAj^EATkZf}X{Nja}V>Dp(sd&`R}S^3s<5EW8;;L+v7$ zEm6LVmOf%q7D)+SQ`t+4(Yqu@6PsqQ4I`5gnd+Hyq6ZhZaC*dfGUxV9f)eNY1llmk z$o?_egVFZjZ|5e)ks8{YsyZfU9{UkeK*Isl6dInmJosR~fq+v@HtL0x0PO5O$6jElR3J7S$MK0OdBEM#6&}*&Ebh_oGIZ z){|x4xEKpIYRVt(Ws-|cy2SKf3*TjQ0lt+k4X;LibnArcFibT2K$QxLz{5kRCx>QP z7%fUbv-_gy@^9Klt2Yb2xDkIg^;+yQaDRlzTO>C)&Bi*_lryX(G35-uXrY5^J1JC~ zorvmbqqKc!4|(#`cH{94?_8v>>*Fy#mRg)~WieIS8?-ydx=G8~FT@0WbId$w^bD!B z#^{Lc&6p8myJbpARtM~_9-B|6JJLiidK3F8Ofy>}<6k!arZb9wje0p0zT}z%*)EtK zOL5fnU9QIE8tdp7HZu?}={1nf&?vR_Hr1Mote=r!dM~pVpyup6UVH@bMMTftlcc-pH@5G-O`@`Wu z8x006#tHbt&*^J!pv3m&YM=mzCZTuW&w*a#65iLNZ*m#4xE+RgMdr^b?Z{7(5_FTx z6yJa7MhFk=FSz?%V_#i120o#cyNy1-5c#=5h05{tdu}|%8Ac$L_LqAPN^^ipCFD|n z%(Yx-Poj_ij(z<8;FtlciVbPR2uCCj;^`v+OXh;p^3CV!Z>FSU(U)F!FUgseU1rrg z^9h${WFM}-dBW6QJ?mcetfGTuk&RUo6yc(W;QN$<>@UhRfbVRRgR&tPx|iBp zl%Q#mrUgeD1nCYg=M+>gOUpE_15X;TCQqEj zlska9TZ&p0{h=z7f4i)SB-u@eYRsz;zjPO92KD33$6KqP^KG?4{Z@I>TK?pX>Q}l4 z9Ll~?X5aP8_Xh3(K?W$H&UFwd6*fX7$7T)ocoqXfg6uq*HWJ+|z00|P`5%0)7@*Uk zqcAV~jcyv%&^K5*EGcD0<*-B-LElsk!>H<}GPJ72_>ceVk`)J|d$8hgT;W-3rDrJ} zd9FGnc_ON{XjPW9)~4ywHkFWy_dihI3d`EF8#t?iQ{?c?r#af^zqu$PTn_d$TWHV% zf&vX%^fc@^!XgcuHyU<7!kRA3*RZn)TZb@@J^@EL&4Sgb?4L+w6*8qVSh>u|QBA|W zbV$~lD@bK8*&PB!n+k7}H}BiW=5|8Fl^^Gg{J2q;TJ2(`q>ezimRsHuN}SgbXJ=+# z!zrl0NknD7qQ=Hm>`0`%SH8dKWwcICXr}9^unV&b=R5hJ5xozNf9b64%ILYhbcskP z8YrbTi=7>^cRQwx0`K?yNhfy8@erMKS6|rxc6H=YJEZAyIssQ}ICmsu^>eB5Ms7}T zA(g=r7m#Vcr{}kNtXUT;Rf20K$h;c$Sa(&i8X7^yWKfSV<01rFq{M!jbpJjsOE^FE zI98ZRH5DsM+BOhRMAE;Z9rJTSYNiJ`md8lEo~K?S#)~A%G4A9uQb(kvh=C-9|J-wDZs7(r0rKjYnHx!_JxcVBBlc zAolc;Ex{*2Dnb)`{JM>{o*Vn88S!i^LANsKG8gm$g7z|~a6y|TWCw{h$yAzjSQe{h z@^-N*L9j{*ZXGJY-k}m`+BEwybTb|1&jd6{3^n;v|57F&u9Ez1L&=vm&YKydRb|=a z6gkc80=kB^FFy}#2z8A4^LlB|N6QuDL>?EM%g^WqEjj?|I zRo|JWBt@#00k1eLcHQWq1+(su(qj!|OVB29(^bHNQDcfS0GW*uSgQ;SMvVf_F%O`z zuh$3pw}a9uCe2o?quL4_F{(aZfEG_HlBfb%L|AH&6V)Kc%Qe(NwtAZn+PkuhIcjRA zF(=Iu)0pGtP2sjYKd;_t@4P~4Ch?ZK9r_Pv5@MfJhKyr!hH?}cu~KA^?NK_Y-t${A zYs!8-GmM!2uV&J zhM6)>m?5f+Bek~ClpR;bR+u+9JBPpa)#B_zbnrXsy-aOmeik^ph)4=`n+_4>+(==df_EMdz@%&?lah z^m9dgJM_|!O#^CxoBLF|=0nr04)#pZ0vWjhEq!&d69X|C12GyCF?#FK)yhex}5U*5gDh-N?*vF>zfyh_3!nzLWTw z9)pg>Q@!{yk6Kad+0VxG&mKd0nK=Q0;=Z8;hCA8e!hiFGBeS3CrmCn&Dkrr84#H{@ zQP+XzWm=*vs|KtaF5(XO3gvl(xS<$yapdLXHBtD zX#z!_wDU18b0R1OM~0MwBXyj^dZ3h$V!YwYoO4h<*47Oq}(fx4v3#^ePehx<*YW zNiXp<6O5pf3~3b^jc_@UD+7Y$w)1WNHI>tHRG+CDjRE=I<^0*93v08T)$znw{uXQul-&%Fb! z4!tGfV7|#SnhpZ}D$sX<^bU9s7;X5N2&qK%N~5Jk!$0bRZ<=d}ubu&EBeI9bfxwlNX*Ctc@!(ZXyY)OjEBM4(@7n zXqoz;Gxb4d>Vq!C4F!gse?w^>K{1|d5e$B6F)O}^(gH%(#Yd8r@Q=|D{xKNfAHya1 zM`#e0DHy0nwHh0M#R3Ntdvl=U|1Fm6-2gfc0m+u3<}k)QAj!M|lFX}+WFC=Zbuiff zsvTB@gT2dOu+dxV^^8B{>QElhe|B;OKv>09XDHTHNm1kIplSbhatSmo7=otNTC4(keJ?iA+>qnh8MP4=8R^bxsXnN<6IpfS03u7( z9EWOh}_o%B{YKUml zC>6?YWj?Zv4VCPXAHGPphS&+ z(l0C|X5VBd z|NX+t-#1FnrT>FPA6n zd%w(p?^XeC8e`=)@U@Se|0Cxwsq#ptYZxr8vZIOd=X6gDN*i(tz@fbqyy5{nZZ(Uk z)&CWt@91oQq?M+P=2+Hh8)HWFkU^q=(R|HXkA@En`XiCgFZBandi}^b7(1`N#q1Xh z45~u=n4xCHuK=-o+G}hg#k+)d5UuyXD8sZa&g>fbxG1yh7G)NB$VA_tJVq$!ovNe`nRvcG68UsgPhilPA@&(YmOVx>jB|od7v=s<)r%3Y`>d; z@UF=2v*uF(rQlK*G~9RNXfBCP;P~4d_s4nsZP}mB+W(xDuP~}l^fkELlQgd}KZVw; zwIz5#KF7_L;5qzmZVArfGrHP)DXm>-6RgmX;=s7_$m{>3EXowt`I)&fq zrWVJ$_a4OeSjrvX|H+P|Fyi|GZ#HCuI00qYlg~obIF7IWHRhPSi5o2%)?rOKmi7q? zt>S-cNqiS4z)}%afppD7jo>N75CQ8X-*Ab1evrs9dYiKctZb8y!yWhzslh(^viO=e zNnOb?k`SNeUkbh9L754FV!?UF{QNBM9eg>;`gvaXk9U1lBpyq*E4AeC`*NPijo$7& z&9D>ckb38sh?a}c#$92aPGzI=cZS=X6M~KYVv4^{rq1_`6fOT9gtU~jIbGfk+F>~1 zySjgSxbD!Xyp4AHCv@}s>?_ZfyWJZlo)Ll}(&8EC5btSx##f;NAuKl+2}4B-}9GOK_H0;QG}2rDeY*=1obASSYlpkd+- zQSp*lp?ITAP0dKLyq4E8(=s))va+AwoNnfiWoJ6+8G?Q#wlpVn8r%q zVl?5vRV#BIUVAHM%!xm^NN2^v!vP5U|hB*@Fg;! znv+(u`2o^!Sp`J}^Uw47p?N_>EXz$R$w)O9pnmRV&PPOm@ORK_(1f ztc1(rK`Ocq;53PKXX+2Y=DnQ5b_FNX`8pRtK&Ka=!uidqdVdS^-azqiNU~&7=8bn9pw(Jij&qKWVq+ z6t@=CbN)UPgB-MafSW8wbO1XlO$jl;-Lg4niu8ahwMrLrgaX>ZP4%vZv$|dEUn~hZ z!P+arVfa7r0P4d%Ku13h5R3*RB@cgIv+hoq12nO(5p5M1UIk*`5+i{*)NmnF7%F6X zFulu72`w@?1{k)i(M*|Rv540I*GWxQd^JcWTqaqB2hioeH1f#tUc<{EqREqR!_<^# zRaE_Dh3d^-)rXX?NTJI!%lnSvAdeGh4^9XLP@GYRn>qAUPSd6bUwZAT$ggoGyiyKOJeE34nKqBCRdfC4G@}PGCF{ z3(HTg0p|J+3#+spJX>=7e97^T`PimozB`^xqEZlJE_$$>Mi&mwBADiBl^eLFo%Z^HeGu;Msk8T*I(zRP{+?&&1~TF9z__+>N=1`6FS^;J^nc0EnE%Z%xa#TbauyobL>AIW+dH614FO|~NrBcos208aF~ z!3>|2-}~M2W;yjVn}E?7SS1+-_KL7L^4lqddRq|+Q_H!u^?buo2~vdvr0O*eshOBpCRDLO6iU_0d{G6%AtT60mtkB3uDFXa8%2&z68|({~Vhigsl($S$;*|%dQwY$G41cl`i8y_t-uy%(+@leALR0}U|43sC;m7cmpj1a3+qMF+*rGCnz0g z8?3FAXQJf4_9X3-4ewE01uCaqq#O}U6{v{sFLm{OHgiAg&?ParFB=kr`xO=UnGQ7; z@{(qVoD-^NITcsXSi)j6n_g8b@_egXmG@sthl|p*p-n+lKtHDhIbb1;+7OY6YB^rS zfG?lcTu8HjF+>18Ohn*NrL3iemz%YeRCu6SlDd5y0jMMbkYnG>g*7Q*wr~pTE%lsU zi7m$5G>Eoc$JPfDUe;Nnp3R?r!UoC~}n6#(rp_kEcxpIh>0to(59g zTd(+GE#$9}Bo|;88ekiysmy|!T$lHLAx-B^&53T!&s4ZOgs^K&33A3FE^XmPoTx*e zAF$%;H`ObfWmqq29BabrK)dByiA`OPYM63Z_R5V2?o>K1+hWiyfECd@U$5$|O-lR> zWkz&6QsCpyk^J|b!w92pD+DpDV-;y;oVynA##`5hgf$kodj2@$4i!AIntnS}>J0AY zgY8`G6}78kPwif@m&0OLCTJxM(FnG9UJ7E7h9Ff6Otde+fr-F-nmjCX+k!fxiP%7J$49>cH*|e6asB-~(>6`R}|u zg+|lDycgr!7&l-uZa_v$JT~G(za(*In5CSp+S&h)QXX2fKOS01Pe zir2>KoJ-;lLyNO;5knv#J-mIQrg;OsRgoa!gn~pQM5H1iA`%|bfEF|9KrR!B2AR0f zkckTonYhrvF-J)j8j_Pk=q6~$@}MDg{A8@8=3^<~FoTJYeG!^d11(O?_BNE5;dpU_&xSrJab}e#w*dgnfbBm>unlucXAp7&BmXy?z ziE1IKgYE*ftOHqF=&QKGR8Z${3psql`))!{~df@LWu^EF1S=(N=UVM~}4BTv>@IkpusY!xQpgs91hSpFND zqb`T#LKUIuQ?xxKX*)3BEstp&4D0rOg?s}EgnK2hPB6ynBYPQkpdP#bj$c#Pf6sZ2o4K0u%a(k%yYWke*1L<$1yF1m=ONXFZrn|xAm7Wd^b0Mfo`w3w>VA9ERwK+JYHFUs4-uAx$fQtN57`g@{6Q zPnI9c(D!z{eY2{sA<8$F#E=&|Dycb`eBh$Jr6!}g+%VYGi>buoZZP{UM^odOII z_l*`ln?g=d+)eD+Y)|eIdlXIR<$}S%HN1-OjiC~Q$`jxm{8qSJg(*ghuL<`wp@Y!* zAkYY=$p9Qyej&{tj~;t!#ZN5}7E+r$y2JP{dZL6tu%RvMhfhfJ`gnM|zlZ1GwdLV+ zr@HiWgE!R{o&!rih}2H9L5S3ip14;0-rMg z@8_@;)>({}OpT#Qs|rJ;P!Gtg41N2|ri8M(BaCpL$R;(QHW5-mnYL1v>f=9`|0LnM zdBFgWElH*crbJZU2YwX zSX#V0*mNbk@_Y3AKrN4oGzsu?&|@F2(#Qj)Opa}R4gAiDzJ7WYKRJE<^a6ge`}*l_ zr73!Q|MW7NVfOXY6Nb=C(+j!`(YJU*d&?WD=>3NF>GKU$_4$Sd_4$VO?eh&)7Qdm2 zUA&=+*c+=VBW4_Ls|vklsnBG^Rum5lT=6Ly5vhZ%xg_+bYR!er|H8Xjiqm{U zb>Sr>MMcb3hEu0lNAq{V&r#oIcPf6#w=sf&EcQy_E6+CbbBT>Ax6!TtTe3#9R zuvBo%I@TtS@l#9~aRSSfoS6+DUGmY&U@*BA>K|*)#Min!CvQt(AmH8NuF|v=bs{&* z(081P-#Do}Unie~^=A(xmw(zS+s)e%5aBa4dy7KSvJ`yr{EcQC=p7A^M4ky`Hj_l+ zM^F4#B>aQMbO5re4&XA_^BMU;O)Jai%BdJT$Z2@oY31CiJX6MK4{B0e3T`2pBB{!q zq|frz<-tOIAsCelS3AX5M?zet`082V)s;KD+VAJ;nc>xgcXsuVlB=QF&Ez3n#vf(= z0QPGSfEOn0)}$n5lq_VltV|BO%Y+=EZ(x^n4R=CKHj1F6*TkL^vF_mVoWa;`VE{#C zfrd{gc4x3;me5s$t1VHeS_=`lgQYpMF(VvlSEBIxvQ447_I(;OKz8JJO2kg+Bz8`4Ez@6PXq3^?nKc=Z1|!ql z_TbuXlF5Y7<10-01op9Df5H1^C46L6d(fscx^NZ%$@xMm0%U~vz4ZMqq6c&ot%?Y7 z4a%i5b1Gjpy(6sQO$|S;n;|vX!G-KN1FS5sAyjxor}z=^-0<3=5F*{}h;vG4ae7{6 zu}8lgeobiKn%+qWrlp<^tER@~eZ4y93yPYA2okGTi=xXQqVjm>AH7zDDZfn@;}4skNsSR| zlQKKl{vgif48*Q$-AFT$vSi7a$ze@~Cc-WDllC3ht)%LL0-&BvtJ=?4Ll$+4(6@m%zr3 zRkS4fCkjdG)zCukfkpUjnr4sCop>O12Tz3!3=l`XoD^Lcke|XE@hvE@Lc2(}W}VRt z^J6JwCy-oXitBf&_rg9`=yR=fOQwQCpBvogM%d?Ui8!uI`YPz=j?4V&zekWTW1@uR zr*}(`&^x&)a)ihb@k{%YB3wTcyL47w3lKZG)bIP!nRzWe?BvoR@k{?L;UTdb!oz>7 z)L_C)p8gP0L$SzkmJ=f0d(?j>sKl+xrTPvkae;Vu`wJ>b?L4T&WsiO=sKh;7t&o_K zr4mxIP$Ej^NdB>rqFDfTz91~GSDu}%dQD{z0EqMC$Cr- z`)k3?QGm6YK$_?)0BZFm3e755wM|wxox%m&7bb^Y`}K@$l@#e5o~BDcS!GL$b_H-* zGn-3sUcJ;7z|>zeSd%t66Phb2p?p^WeJ{h4(5r=PzL*fT@uZ?Q0&2%0X%S}D)G7VM z_0K8%#4fjg);$&YYSefUiCxj9R72oN8iv!|jpb-euBf}k}Sa*DJktrAAQ5bU;8 z*F`MFB>?m=CHJ|>5Y#SNk_3Xf9>2j+W=+XiRSXBg89J`woaDkU#OM$D`xbDhCfkDq zh)Q2KDQR3o&YmKY+i0m=0O=-Mm(U_^wD)DcQvplMBmIS|LMW<<#EhIBU8kFmyB(N4 zmwJ*7d%xm$b?yI+$p0IWAK8fP_{c`&H=NxhC@H8Y1)35DK#{onvLPV4{W)xH|4G84 z3&ZPv5mN~3w9GLP@>(ES2z#csc<-sAEJ#*Sj%Z*wy}_L5PGAdxD<#}8-?N7zAijTL4|b_(nk;J%5%dvRel;&F@(e9$O~fYsWyrA#i~s2#3lvsIc!R_pSdt;o zECw3ziBh0J1G@-V5DN_NP$Wg9LeG|76@vj-#aAi1>cidbLgY!<)$PpE+g+$Mn`{NZ zrCPA;MFM;he2r<-&}~? zlT^>VD znPB^v8p7kL0ib%}G?a;{RiH?-87%=!y9;IziE;s;Nyrze(RW0RCQ$*8$NAFGonIqRjO@ z+}TE^DE+X(#o?!o7>TflP86A>2M9PbNQ!%(Um{I=VC7Y?A|EQ+wC*Ph2}Qf{z-z+? z&iv6<>2ArSDQI?D2|1sqFR{Q9f(sO^$j?PZZf9D?kKED9Ouk z7yJ8+Fs%gb)=Gdx%izt7M?7G-Y(*_3 zPGwJ`0h+YH>Eg&xeeWX+w}yaG+5%P70u^t8C5d9v+@YSVBpi^aXw$=L3qU@t`uL?5 zX+OEVfx^&*=801C12zcib(`pb? za*P=J`9w}m$);QQrO&otIKog7TRfFT_!sltrYZKh?!|xW+vjBD<^sH zef13Nt9~l4x541*G#r(-p9#*=DYA1WXnR@VGN-giejbMk25axq^tC$6BF{A0f;Zk3 z?q&%M@uDq)^2)Y>9KTmIujJHmg%BIR0&_t<#uS`a%%PA5*Km z^OS@_Cv{#yon>$$0H6q#mY}bsY{_YC$&H&pPhXG4UBTK?A*;PFxm9(%Fw;#kX?#3@ zv>g72nv5j*L^4cHA{#8^b%R;Pnf6;`KqhO(da|8aT%d{du8lEsI^Nf}GzqM3GA)7F z6a9?$D^ntquBYNP$$*o@u8=qzO$ng#u|D6NLZSlUP2U4nJ zAf-wMQi=x>lVPR8fz(wzkW%5m5#uX8th>vB^8gQ=?1vaQH}Jqws~~Yn(miWAbz-s| zIlr~>DFFfjR_9^UGB`!d*^S9{1~ zG6cxvX9lJWyqOwXg8%KDLvJXTY|o`y_`*$PF`IpnEuJ*M9A~?Ssmak+Tt`xhX#A!SG2mrpgiOMg zdzlQcE8LkLZbcq<)~6l6%(uMRgT$01l=z|q$UIg&j}e;K0-R4+t2~n()$9~%W`jA* z;>dQ8<`K3VGfmStg@gldH!)D>bw8C!vvE?O=)IR=wa zB6f+biR`{f0!BcKV=EA*k@<@iKsLpg90<>L5LDwMJp1R*e}liC7#g zD%eEOZ$$44@uEqI7eyWjol1mlzAm$Qh2fo15290T?=S&^a?bI?nE8ZJX0WPCQk_BJ z4N9uP4X8a+7)4?5pytq6TJ1f-T)>R)k*4mOnf1~B^rne0QYfq@5`S#X?E(KC|99j{ ze~+G;J!qR!!D=7&R`2VUw2#L2@)lC-x3isUJNIkNK*p|EY%b;-mT_hxq`7262|P=| zx(i8_y}tG@sXt+rH!!WRN-(y<}p4ww-pK?DPymkRS z_17$ZRu7Sm;^gt>6GP;l%5SeEa4?IG}7T^s&Lsvhzq^0gM~Gvo8zZJ`h<8L zjHl;x&n7{4$07YZEIDA3eS&NizvX-9O4J|YrSxO1OuSi{#bOB(&IpLGBBTh6`cZdWDs*e20s5|ITF40$OX~! zp{H!gS;iwCqz|Z##}xdrU;B>=vvoTaW>dQmW>X@}-uiC~v*}V{b|$B9?MImHIrHBW zX45+nX48EMv$ttsHd7+ZW>^496@=Lg3$t~t`B0Rd2~jqvBe`U^{+u`IenVV< z;tNX9&cjm2J+nHCqk zC6YK0H>g7<8Q5iZL-sI5_F$k?at6yC3>7L!Af`wlxdd>woQaJoBru)RZMk%iZfyzb zI;d74Z&>k=MAoZ-Ru0lj<=3L$&O{AVaa-TNuaw_kOZM~o8F^`SoBW1|PSF73kIt{m zl02mJro?F_&L@^BGI!dh-EE$UA;9v-wwx90zZ}lAGbJZ_l%aQSvU+XfAzsjXA z!KPOq{JV8rSnDH*8{l-B0Pv__!_6Dt<#Y6yM;(6C-A8T&OJ(rZ5AHYehnU8OoWl`_ zPtIitPnybpEygn&GiI{`>jwA&cz);)->mYTqp0NcldITAHLD5|9beJCQ4)IK`-TSI z$qzBJgK(nf$PE(z(&^hRnVhDA`Qon@2jc!aW#87kk~wS<(+5Z&(x~mu@H+8zxF*7e`qHrM6aktRqnO(jCrUM{_^Mzx^j2t`# zF#M!2a586~5GzA{)d)vinvg3bW?vjAJT~@k2Q4oIUEU2jyPM9ShZtmsuSJkCzyfpz z;Wk`LGB{`|dE&E7BVl4q1|*;K97r9C#Cv5R3Ub93={*TAuB)SQNS;2L zr(Bw`0C4Z-ESAw&YbTu;5<4}6>PyP2C__%jkPRvY-uc+`6t%aH=P7<(+S0x5P&0rK zBrtz%{(xNIhzR(+evw|NEb=?7&6|4W4mA$ITiuf*iWvP6(&T0fm?%cDxFQcFr$Aj` zTLkCA~svw8jxa9L_MAJPtxNJETbyhe&3EfRcNiL{Wierl9pX5=*Bd zAqM&`fITA>IV>h%l6a_vwKICr=qaeqO`t9vi#U4=^p&K|QbpcH2usDreJ)FG!i|#2g)x+-V)Y)x}>0mf=;jp?-_3z?Rb4X ziE@@OMl!7`x0}|oX-o@G)qu*Dey&In!POkE_kovucaR8Zb7 zc&{Vdu}q=>8)>OsndlD*T^Vi;a%tI|AeYnEvL}M)Ub-sB>VQ_+**%`wXpsz+h;ujk z=1gBT-q(FRvrz5exEa-W;EBLVvW~EY-hStq$he|{4EO_y;(xR(|5Fjq?YDMlZfCv06Q=(+As(T(Sy$WeqrwD@h!5Q4fnCezNi19Xs}4Lr`!(>sVi-SFCRzbw$sc`Kl%G%@X-VEMy>75j{gK2SY;nRKU!V z9K9J6Wa45>5Ar+FM_^0lO`}vyDWp*--L~bIfaP$V#9asU<}B~47Q{~6SU@~NT>DkJ znzQ;8i7v^4=wgfLk`&Q}BUyJ}bUB%aD2p!1NOXbV!giccbfNlOVZtuUL)3ExhOb4J z{z6!JA^(vo$R;|HH5*2<79^9GEmL)?GvgRrzd#txl)1GbQM4;O%{diM;2X zW{=8*cihZ(%#_}dTlv9mid#YR^Bz?V=Gwv?zS-w9efT>V6L5!hg*)8KcNjo-_$Z%X zy^3J1+bl4Xi1`sw#t15-H~d@0iLiLh7|(K!_g}!Pi=)d12@l*{G)8&)1dpsINvTbe z{x}lJn$TpwqS85#<=K7~%%x$X;|3JxD=ARqDg>R!NpjJiM4ToUfN3Kl`?Vt0Tm+Rx zl)4T?_An5~dqeQBY#)Y`(#4`6SW}ZGN)6AnG|Ydduy)bSQxdYE>CD4W2kCyVa9o#< z-%I!qXhMaKM$`v!mCf<0y+yh%!vR6Ie*Q`+kVWdLY`n8(%K8K|W5~aO2o8FCS3tbv zh05vTUbTQ#7x=DGQ2cmPpPPqd@9K~+>bXN015STtb9%uMM zS>S(Coj5SW^X@>;;^%KimLdZWY)|1NZz}#EszkF@C7P{@YqnIwjOdnN%5r>u6_XIY z$maY>Rb__vMT_B=nLk-75#q%;EYL)F4mL#w5nrk#ZjyBf39J-G5snLsQg5-wnDfq2 zaQ7z18J>i>+7e>HC$c)ilZ$#;$<1<1keD0`(&Xx=B>^x~z!82h|cEswZsE$8{4uD0&xLGF&zdZU`H)~e# zYIH*v)q8+K=-zR|db36K+Ik4v)QY$C^-7YGOQI;6&NJ&FX(mMENQzj7M2*jdspbR# zY{V)yf&}+5lD|(FCuoiSOU%^p0l{Z)`e4SGiq`&(G0hNSn)@=wXyZ#{Zu`K-moSIP z?iyPvK7hn>+-?|KsJ`7ZwiLCuPvgp+F$tzZtSc3LSy#ShAqhDx9ZYNa&0B3w%E^7# zfe*7Qc=w+BF(`sem(PE4=F}>{OY9DOloSbnHFx@}%74gTOHOiZ^CZwQD#`3&-T`dhs1Xv~cBnJCU|r1Q`i2v13J)K# zA|LtAL#T^Fne;^%B()JP-gR^3uVTxGC;zMU;B{Z#n-XNA#TgmN}X2itHEz2 z9)N0^w1Ei#8DctZOynE_ZP-{orOXU7_r${SORq9Zu42qdud9&9T?krLS8zlpt+H!W z1jfUfjC|U`YZr!i21hKI;6-<9gw==Zr~sJ3YT++*!P^%`;1g&%^lK}JpCxp*3qXrt zHFf-?Fbg>VGuS}yaCAN5rYk1NLTYO;Lkf@{I}T>h!YFST!i^+%;=p>yNlFt40dukG zqHv}qNiugU54npl{lKjUW$7-c-&kb2w_$~dHVKSYbgIsP`g%nYFv z`W=;CVU}Kj)jobnA1`RN_`ISQgkc)KAc@vOP9ztxYhqI&nT*OfT{)wLKEro|04pPp zd_2r+hA^%gS0ha@hUkS&LUw2aFNb5zBrq4;)4qN=7U>T1a*{&2n2abhQnF3i5ugNj z3x!zW8PkLlZtUf7s(`}FapdLP%sQDJlAK78{$qwtscK6`(rlQqVzOXh5bG#;Xpw*x za&0an`bmh@rZedftSV@2I+K;~ZD#1omC3IpPwH~aSfVQ-@l_WsL-r)*C~=?*GD+)N zo^{O8k=~L^`6)?(>s`Pzc%1^b$R;FUxtfONMjhiuO=W@)`rMaUUcpAxMMr~}=@pzz z98G@pMqY_d@a;yc-kggYu45%>CBCjz;H%}YuN%m*Xfv$LM*Q7ODa#bFXqe9PS!E zOtKQx>6mWKx+s@f`m&%d12eeF-%oSYxqliMCOb$z$O`sXPjo9*1xp)mKOQA|WwAVd zbR2SpnZaw(N$PJVTrb*Z%fkvYZ<$QT2d?kdpf#=rCkkqC1^>WHX0aN~9L$nG#m%Ls z5e6w&aUpAvko+Ra`XYg}yo&b8;{LKnA-iqDOc(sNbS08$7xTqBxE`5t@xEz}s*KmJl zieUZtjx$(b;(sK+(#orj1EP_&)l5EE!I_*g3{1;2_k$^1A`HWZ;Asf6zZl*X7D?a; zu%qV^d^s#BF^HBBdPa{ zsE{`27ZqYd=LGF8G{pB%>{AN;6^iaG@tN!#z{o%!`0`2$&ERy@yvwuS)zaro2KAZo zyV~A_jD+d38#1%OGLzj5^a(f@87w!m_|MAOIkSq5bw+H@X7>P$A;4$846GKH!kEB$ zlr>?jv8s4yu7>?)b}m5!m%f0(l8t@r530(!hakpU!2rOOROMoT0967AP$fF4inLe8 zTqC^l?h893Qc1Tau+wJ55uwzxh}o^TYnS<((RHWXd>h|yJ)LgETq^ro zNm=BnFRJZrBi_!;`(`9S73F~wSf&K)@}NmdY78fy4AYdn)76qIeWm2X1ht0{Rb?(FE)P;ug@g}UE=`bY<017-4+arB^TiecnKt-l7MkYfRJ1X%>Bz4 z)rrVj(hdWS>LRrbA}|VA$dgLazNOn9tbX8rPFpevT!U2Jd)mr{3^;}uH!X>L&|Br& z8@IDpYbay=1tRdyA!LhxU*x> zk(eDulL_b#*m!NH%ON#vQmniQq{QIwSr{L4u>PhoI%>*T5{&LlKQenKXDKFuNZXL) zR5^S5!}iIkwB-Nhxidgk`f{;Vq$Mn)j6OsQr`EM(AhvQ?hni9auMKxRqjx)4{G0*h z2OQ8Ya7K`R=~*z*WhV2a#S#(D?3Day$}{uNjJcGtMUp7=WO{?9gER)P9556C=#HEn z5ey||cd&)uK&&a5%pImu-LX9DR$6C~=Z+v2-^daAz;S71pV16Kgrilt^f?Qxghlq4fl{v`@s;GuVRofN$&*vE^19 ze;nS*?(~5cSc%uObTCnENE8W{We@ zesCvA->wcDvnteA2N$v47I`^JeIl{;FXW9fBhyHlUoCr!w)4uy!y2VNE^tg`AleW9 zAbtP#F8hA{|MmTUsPF%^%f7$%|N8y|_5F`oHevE4v6$)%fJ$(T8nGr{1DY+E@c28Ik{2|2l8mfDw|ge(ZC-UTZ+eb`eaCxsA{a1;Qrt%3oJ zQh$}Pyb|b437o~|mKW&dp3SXiRR~AW_@aBo(t9Jl7!zkPw>549s~6j^9KoLQ#vml`UgAQ^-cW zyb!6WD$%W38x1RlrA_=`IzKyGrr9%c_XF%v;e}>0gcL8RU^$vvHmNEfG1wuYhSG=B z%x4(#^o&mMfavn-)7nFWI?_4#I$y7T1f7e3fms8`m<8=`? zt(1UP;fOng%#N+2Jj zeE}T>iyJq5aA4QO5~(36GQFjBkCBQ}6KsA$hXVw6(6?a!;F<8m<(3G>I{9FCuWUL7 zW=G3_B+`K=lJJ&5E;a)t0OqH@vR(MASvJLcrWxq{*y5m@(z37jS2oeR?D}i_DeLqu zdqaO^?cQY{=&!8RyX*`7l{I^peXGB+s(0C|zuI@%$QSh}>xkCw=!k3^gkA{qz6-Zd zsMHy<|Ht)0H&P(&m|kdVzG(){v%Z%Rqgqy!K=!cpr~Rcu?ayNE&-POiIRbN3N`Tue zQBW&ug*RD$oszE+`eAth`4Q##L0E^3l)s8epf4>bf0jI{1s^<)#Q5#@sr=FQXLmaq zJgq`;&J+`gMsi8ADWd?C0+@@Mey~;N8)M9d#)fm&=8|GXv5d0?{uKhbl=pW5aque6 zA1NTC*g(o394^N%m5t(!JJi`Lb1slaDf*W5oyM|r&(1jvt9BX(@>e>+;zFZ$uJ6(z z?MnW+D{~1de0I*IB2;d#bNvMWl#-u(moDcY`AWVn5xb6lJUf@{`?@4mN?*?ouc88H z`^mF2cbW*k>Ng#%4MvP89c)6lUBhI{EZ8K%o!yzD6OhAn=yHzNWS9-ptfu)=p!VraIrNXz+8^zwu`O#2%={|TQ4hq zlp=>gDGA@^a>=S(T9<>PF&zWRign)MdpIGd1%uAAtufG97RGo^Z=4i{0vkAC&KHct zFfh(@RA-;Yc~zBj;>~p82xS=K!iDy;Ho^F4B0%5 z>@DoFDBRfU_XZh+2d6i{OW1TE^Duu zXn%I4Iu}+~KP{$MN3OAp%(Mm|?exG12x0e4QA1TE3Y5vFXG_f*sa)L9(DYE;#^UA` zx6F~2*-}y)kQG{n?U$ArM*8~Z|8IJ@<9}@r->=tDPiGNleO1YP5x#If;e{dfw)~RK z2UZ8fK2rae2XCqlPS?#xiRHnO3{UHb<@yd!lm$Yv#Fv}l<@Ec@eO_J`=!s9IRalyS z-;UCO$rQ~th=8TMCc6^7xrH`mi7KMbzgiLu*2t1=`$($7F#`aXYdy->1@ZKB(n$NAsV$DY-=G-_`zmh~c%tc%OgZYk_i@lC!G- zt41$OfxDN-LJC)!?C!Oz7;omn-OCmfag&+_%z&68<4#pG`o>P#H0djhIgqmzRDQ5n zW1{P;i?3(*FZ+d^lH1hvd7D}QISp>7_-@Bj(FaO>w~rZdm~`e|Q<)!hTE`|+`G=g^ zu_^}a-t>-LQPz8ktJtKrT0-5Glly!@=CqZGW+mpd`iSQAcTI_85cZiMEy59)SRfqP zA{<#k0>Y7_g(HxjkZM97tu47kK}1QGN<}my5yzMRJjT{va)KQOMk4Mnr-_?nIq@tMXQZ_$Qk) zG>6et7}+71UaUY1iBNiB6r|HUsW?|CTPpy^X4A7~x<>LZeU9ES6UJ{ zT02bZU_HlnCGBE)jK5#>MK(Ka*D1|jkCioFY)+2obS@~lbrpM z>d?2h8A*vUGZ_&VwSwW7oHVWR_TN7C-Wsa>$a?E;eW!Qn_*y!?m2Z-&w|bP+u#{?e z6Z<(MXlVA^;%|Rb!`ve@QgWxk_D zqdJh-S(-A&j@bBXW(bYUWJ%#7>7@OHH&z@mIN=3sM5vS94wQ0;HK0;2s2ud_oLf+U zlMv(TEjLUK3S+ekD!W3Re#$#A=Zc5RW$1TO(sCpN*rk&}&n7`2B-u#lgWN7yw@Ewa zG3CN~KAv;f_N_pl39BHKd&a>)RrX+@h^H6JaZf#)oyV$5CiTG?lB*oVlrX4Eyi3HR9n6@Onr5*YP$6N8e z#V;?9%Yh}FQR?hmsnU*ZL4Ik^x!#{meo-l= z(o4|=dXG?1pBUQn@51uNVUhGE=zopsoT7Wp#H>zw@0xNs$M2;jYDZG385wQG05Tc2 zf8NU5b#%f#;`*i4x8F{oeP~O&U=x_vSCD^NKXLqIp;t`q6|>)7iRhn^ZHz{T^oT>t zOgsC+K}HL1U*2~!#n*B?4r@LL{)}D7dtjsSDHvj&ToKZBTr-b* zhZg}h@=D+hD3)CjIzS7Goo2isIlP-89F5PVG}Q8F>GugWNP5R`?;1;(3=M`F!}83S z1VF&85N-{@IV+McJCticV(w=mx*-P28V%+wA23M-A}EH-Zc+`*9s^Ga&Y#3P12z2i z26GxiS8k_g-X2`qU>@TS&|uVr_kFcNCpHh!D1Ocqhj^{4g#azW721L#wmgBljz`FlpJ(58gWRkx zj6|wIRz&cnj<&j4^q;}4fcag1*G#vPM%>OzNXnJiWg2uG5oj_;qw_hNj=Q=#MNCwk99+ z6-ymef_niXB)EG6mE1E}d$FFVqI+|=4e4~UsDYG502dr3p|oK~?r9w-r2MvIFV>0@ zll{OiCvy2<;Y1YMRIqMC=mIy{+CqyOqv}l1NwXM?6N7yT=;xi!#Dc}B2)3>Sn>K`! zFvmmPut6(dH|Rn0a+o7luAl^Y=hdSrtDy zqR5z^82lx6aQ7A4k#f)Go;o^$8V-(RpK5%oM)M`y&AU~hl!T9YI(p30!DABkzeB~c zKTE)?Bovo`6FdQ!G`sWQ18UzIxB&~KPOzFY7SLigsY+*A$pHe8k_2^As~80?pIcYu z(vAMQEmRjr*J)lBze#*VrBuSl^;T41R=`txM%qcF|IaM$^ksyHAt@r;ABYA zC)@_W7TLmbCrB|SRIhP$94s`T7@a~w{63gah0uqJoEef+S55{OAH$O*fJUN8!yq!Y z{(|jX3?QK=1H^u;lxSfW595Zm1WUq>(PlAPX?00%jN8UvOoHjqSZbn&`-H7-nhnz_j|Eg2?EmMjtO8n~(H z3A2z%2D2|;FsU#qc=b?an8-tzzoLZ~bRt$^VKxOVYSkkAJJ@{PcFAh*4IL!h9iq8t zVzh(l0UchoA%^MK?|?po9V}qN)AtwGG%t?GQyLj)!Il*Ug7EO8Rs`9==2#H;rD$4t z|IpaV2)pXalL(i_16u?h7816}65Z3sj^!41EKhbUVIguwX^~AU7INqJxk**VH>rx= zo0LS>NeFG}Cgp~|7j05mz2Dr{?8_WpX{C-G&K z?WRhi0Y1*a#V(!z(1Ol(ZcoZVBgA7$a&*OC=KY?+QS9UFRHT?jP3`Ts!Ioc=%6HRrSS z!P3C(?R70-2#?YxA z*z?VyrK`6~S@>D5uFmc~Dgp*pCne0Vufz+){7p1Me<9gX$m=`-vS9}B~$GC>JaAPnhmqErZ|fNzGD<; zR!IQ3ZicCmo3ju^%8;R)wz*Un9IT`BaOp?KL-I&w5FHQB0~VNz;%}G)#1KvliyKIj zY<8KLLF{;F3+-BVL%~g4S?~vIP=8c1tNp`5`jz>YV$5KaMF+mZ!9gYe6@8Y`epZ#F za<2>q(_5FoX;Y*4a-Y01murnen zPBrYT-gq|KXL*m({4gT!`nLCsl4Jooq(H~hMgip76$9y!N}qyc8_f8&8jch=5mgk0 z3o;bRfhX1mxsIWXUQ^DIyjzZ>jpBeD*+|7U5P(W5N*66N`IbwxXW<Hr15W za!8CqH<_%Hpn!r^k{c-GBWlYjL68b=Sz=cuVii75hy@&~I+$GSNiF9TqEGClw%(LJ^&`x*d0DINf(V9Xs2K%Y_k{?CZs|C-YG zFS~X{zwdu#|L?z|b(in|$Nc_wh@6oArz-6wzs z4;tFHp0hTWU~ek#@-vE8Q=%Gni2Y8+H!5{2QPoHqCNEY%$OKL z%OF!EP;0DCA7=#XFEj+98wVCAPE8S*3aj(~Q| z5VT|AorRzsJ}Q8A_^1f9!zW5WJ65Ksim1%XeOAGs9kcj~van1D+JOn3V?(on%6PYj zAPIi8TD^HHVh81|+B;W?98)>5e+dS=t+zu7!TFFr#h3~aV|?C{0g|YV3p7qlps6g- zEk;C(3DNp1ibWeX9y(%n#C|`R{Whj-#6$Alcl(l8vRYn|h3bneu$X7cAl{Zk1|fU8 znEiL`cqhrBTdTWkOfWjv7&>tg=NN!oh|{09CoqrkeLPM#UJ5oMiTUJTr)}I;qk`8~ z>99fHxCGZ+TEoUzls*3+H-oc%pXD^6Zp&Fm^|X&Ta-%fBY7hQ)?lb?g^7rBnoG8dT z>gj*(Q@_#I%+nJ#Tne5z92~iEBRnk@(gsm$a>h}A{{6*AY&`0wn+`d0gIsjrH7n@E zo=-e>#DNWb$%YM?-zdrF6)Lx&-WEP5?$3nxl4zKM@RDv6u|LN8Y{<3|iedD` zVuCY5f*nL7fJ!kb#9^)=Q6|aq%I{Z)DuX*n4~7rX@ZJW!k**O z+LD(Pn8M*ka@I?58$sdy1wW=NST1umP6=aX9ePVD1Sp_6ocD^MZ1-7$hrm`~>8ySH zD;r^vwvXXQlK)Q$ktjkVI08kBZpiWHVtKM>gi)7lCu9d5-2mGmu2ozqI-l;tp)irk z77E6Z;2gEb3`3$G*CL0!LtyJ!y2b+K%DTj62E{;CK1Zu?vW@nkQiH_~lx( z)7#oE%3cJU%@=_^r7GiHfl*Ld16z7U4URk{Y_d502wPHiaNnhvhpR^WTs6hNnw&1ihq+ zk_1V9Va5&U@+Fyq-c&`Yg2Lio)vq^y%QGBZ=vkB0E;f2xhwp;A& z;18bI!84a_H-dq|YnO$NQ|%WuB`Y%$t18ZW5wX6Cv^P~Fpv@NVIx`b3f8HCWBk7PY zrwXsK0&POjY4kF*)$h&FiE|>jNmRMK7U4Y`o%#o6^(~3<38<1BMkOfP-k%S9W zbKui6|I8FJuDBK_kpi}Ob3-4cD?Z8!VZa> zft({|fx^xbgvoW}6r74mN50~FCPw4+3q7lO)k+QKph{n=e}yA9Qnlt_7C7qUyPrdc zq~Ok?E)C0ocD_NrS8~qv(Nx9*q&zB9kxQ@!j_+PB$(l|Ikpl{Yj4{t3+zgD#UXFem zPjj22JxA-$A^MY^9@lwym|T?@`{|1tv-hX;lJ#`4n1_MLZU#6rY_T#Zu{pr4V@Y}q z(3z)vU|?W0NO>1w?}rD~6mkZ6y zG{y7FOfVk2{CIjY9lVc&Yu-#xZf7dPi(}JsA>g{3U%nrGi&qq|e`4 z-ly^74`12Nu`yTvnm)c}2HSo^pEsJ`r!!CK4YaN$Zdv}J+Fi>s9G)@ju~npO*^%|w zj$E#=9$VoqX^ZvP5$kbnu>h(qvvC9QvwF|8`Z5q>8Ms?NQAF}=Pvq6}xDM<-@_x(*tYJ73#NfcD)It(L#DM$_74gB#%z-P0as599Sv{CtXf{Mbv=I}cWpuK?f zvf!jS6C0OK@{!Hig+NSrhg^B(@Ccw+05vO5B{#xYFm*r3n?hmk;0ye zWG+`ICSr7$i8y(s6AzCvV}zVGC%K*-s7}pF6`G#0(YTpA3U7fSo3b|s-IHP-RZUwV z^hCfNGGHa(?a#$G29Xv@E1*??G^v(dzS!R?00CId+25+*Zw(O=z>Mg61i519tQ;~3 zg&=}kZFcY6b1aXdz_$pd)5vd(R@)`5w%~iW1RC9+m)I`x5>FBtA`7Lh#5rvDb`C$i zvk_#)MvxU7K~`)8Nvw^Gp>QHUX7G;>LwXbz zA3hdI#L#eG&gg83UShCLBp2BRQW<@JY^5Bj`iU)u2s|j~8Zzs80wG zyxa^^!1G{Jp|<4d++HG`?kCJS8n!`N%|y|ds_7xWkRMS?#dUdM!(C~&PDbI-H-4z_X+ofW<_EpBUD!`Qq0Og)V%x3F+V5|( zt}NZGD~dPkm^~E!&LJ^-=-|Bf>%O+Sl;ZK)HlInbcxAh_WH$sU>rx~G*H zI0VTM!}$0hxJ3%kPUpyl6$8O^X^%7ZV?X#fqgup0P8kJcgXx7AL2e6fl>@mlyde!2 zlBQVa3wj>mgrRsZv^=m;?*1ZYPY5EF-C1;e?-xphIPBNHsuF&7YG9RjX3m7sg`>rK zO>s-kT7|Pv*aNexMv2bO<3!(us`om9pr}z1`IX}v#SEfWvp@bC$&$BQ{6dTEkGrFxcuYP1?7^$ zi)v2@37^ljm)z|S=`l1RA1bEeObVw$6$}{sDyFgWjc*fjwz#zgbLb<+gyU`m<2@L8 zGy1@IS87&e@p@+^Q=)giHfAf4i3vPVxWu)eYt?XND zE0e`jQ0O7uo~!d-%C0ST?5RlXEQbFA7QlcL!kIKtE3Q57TA_0#z!HMx&>UOv#%t$+ zPJ%9pc>24}(fWuDB7a^kx9F~qv`ly!Oz%CdXSzCA7r;UoSaC1oa5aoRhUGcmGF`Ct zn(c=7P5NcH8iuVi#2X&2Y;EgDYAP-AnVK)wiqha!=Hn?f%?O(mDUW?O)ZS%75r7a3 z$p?0ELu<_;MGe*QdjEbyZ;Xsx#Z7g0(bPtbmafeQZgEpNvfM5-)vo`jn))pjF-3|H zR*~1C(J!h{467)Nb^e`a0LpQxuPDe}l1Nd9PQciZGb6il1xGewO9-=^DajwIyh9}i zOHVA1ee9^nd>si|*Q>I5PnH* zPe8O<0yuFHNFeaihIF5^X@BCc|InEL;z=AiCW3)GKty|2nW4qtnj+CXM!ZQ<#jA#f z2XJCEvXKRu;XFRp-I{J*okY2TUAcYDuQMFa+#>+ipt=P#lNxZnddXE*o@|IPMX!~2h^ zUnlP)hz|tm3FBR1x&_bF!4f9V3t>(PBDlH$aIG!D)cS&{%|%Fd3Gh`xs}NBtWJnZv z1WSey+Ela%mb9QqupbWIAA=nMv`N8UU!&jy@J)_lgby8?Gn@e^>n@i_uAokG3Hy`4 zA+z`7GS&ophE5WSW%~NEF-evwu*nC1yI&H5)@Ywk{9Ittio3it+S-gZfu9M5S?YxBnIV#$i#`p_ugNAp(Ww4&WO z0h5Oo9fyQGNsVxf;XptnXEzgV#&hxEiyKLE?HEo=ii3bImSB0U|=#}N}z<_6Ja5Cqsu z*D)mV0gu-|sv4d2p%R=?AnBNhMBWP-UjBv!eS$MjAi^OsUjMIdE`2+nDR%!*-0J_S zPJX@rR?m!DO=852=KqT3?(UfQV{z}U=LMWo%`%)!65R3Nx0dG^0p7}yGJL#VwKCv| z(bwDcjhO#~_V(x`Fr$3ZjGdGO!Xf5D2imGBIh}i*zjszi@>}{s(g1CD)|vgZC)pJ? z=jB3k?(eHP_xIJD`(w>P97__J?Q-sHCOhMADL*-zn!}=uOJCUhm^zcovI)T8k0c*u zS)AfH6Z%uJk#Wg~(37}F8OF5}F1=KA7Cw_=sOOOza%lmZ%&y`l&8iY+knHU+y563% zfFnI}gKx>_rE-x9b86e=^WD0t*tP2g~C0UjqNJ?%+5Lfqw9sAYy^WmAW%2Jv5wmXn;!RgE(^ro|T{ zpD7_P67M4JTKGRJrAUR&o+beUaD0BXfbl7^#YV=uJ5-!qSG!p01vDKIrNG^@Y5WhbStP^K!j zF8Qj#wB_Ycn*cDME1+df%JEoFF)4?55a1-Y^IO-#>cpMOU;Q{Y2U}@wSRFEQ$T-k< z2tnt@>?)wm)yY)?uq$+^2`9o>QzxFZv|UuE3AV)mZNYUCrg(t#_=os}(rIe+ywE~v z2wcosj!cOME#y{bEOfEaNKcfDRh)5^*K+Xqdv`*pF9lbJQHN2uAy2D#{9LRsotY$b zykU)^0u@sXn1$%Lut{H3@ZmEyTowV@-d(McSs?mnOGbdqsSGdEaeoErk|UK`f!wlX zf+gb(<3J`IOX!F&;7kHvFm6fm^ki--D?R=0=5^6#{)`dro{#sndp_RR?)kXhJr#l- z`90E?Nk};W#6KPRR%aEb5y)IsvX*JK;#&Czy}cl5bv%Ld3VkDO9WYRBFxKXWiBk5W3(dKAQV~M?- z8fY11dQx$7y&6#&*+?)c^fA$x5CS(HI5gB4kdtfjd{FKiEwG>tv<~IwO zcIH-IkIYrESVv39c`VU#EoK^PloXi!fzU?MHkoR)LB50al)XB3-$7JrV@`1c<^zUF7Q{Nk>^ z@hLA1XQa3Ol(yW>ioz4u!a-(;Nzy3n!ePRb$q3amCs)Y=#eubsfY3s>n8d(VfpI>1 zZEpOvffY>0@oFckjtWV_x}3=@M}VM2W*A7dm2+5RmQ3Le3(}lWh0AO=W@unB(nOPt zEJjG%x589p!p=JdL3g%%hm1_m!7?(tzAM_wX?Z-2Gz}7#OK<$Lijr(6IfqHneQh`Z zO%jH67CY9@S@uncFr1vtEr3|;Cs-H;_4aIiUuQYrw@0=u*;TjtOd;fGsIRjnCk#70 z69E3S1reMRMFxR5Q;^p!1Oy)!H?CL($VquDrF+Sj%sKr^a6eRiNpLY*YFZNFLR&P& z`w-gfFqvbC(Dq;?w4Ggy=@AD8qGP)yOB(vZH`}ph!%n`Cv*jo;tMgvv{RYS%mzftc zp#eSYgM#5)%sd%~2wd>(4O%ehGcXxG&NYa})npVLJ!I;6AGq33i)hjK){#?<#-}vo z9K;W%z6V~Z6-Ef*x11^Tl+$@b?~9j`#z-dfr6QA*=051ls#hsiJw;;Q#85oZ*1c** z%dg!`64{?r=>7}+W;zDX9%sO)W`-E1P)wookrAq`uf^vXBU%IMTKiiA9@lGtA^C~` zd899snF3cB3;57C_2kcD(fLAgK02Y1i^MxskafLBbzTV%yH*yiggCaPvWWaoLq{#l zlM3v9l5=fn^rUC>wo!`XQbWe1uRoyc(i^l}uFAEF)A*bj#z4l{#!LYTAk}0LMLS6x z6K9PykzGPt@DBm`C|qbD_^~s1OXfI(-Brm3fQ5CuLqgU8z30G@)~qlq%|?#?D__II zE&OV)f~(A=g*a!f0$f({_r$7|H2(c_R^}{tkNMr7u$ASyRb1-{Tj@8HT)T2*qp^~D zDRY*Jzhf;^YgIHWswf04k5*E7Z+4@9ZoRMyN7gF5yc?B%dF8!R?1{=5rPzapviVC| zLs=PVoa`BPBzVCQvMNV{z8nc`Ktf1Pzj*hLMTK=(H5$w~qT&?X4LIe-b8FY(R9#*& zIkKk%H$OeDOvZPYPsrx7dKa5ZY)i4DEyXU@cY19s*ihO_)mU2u8hB6|*A~!5&_=-; zZAk zprsD5i(F1IVs`41VFEUI!-{6pHIbkhQSCHn!4lAkIt(ikEGN*sPHKX0bANw!c|jeeZAB-1^$uqAktsYfD>J{L;0R zgQW#SeDX$M7vO^10X@U)dd-rbvhu+s4La}K!Vhxio-;qfJI}DnheXJ;lCRpaQkcSlnBF}x@)Aa95sH6ikmFWJ0m9fB_DFHdac4jX7 zUonr_`tVfI{OyX6pE@ZIPwMQ8-OOv|w)G1rtQ192Xq3--0|@a?poXPcxRNv=8_uLRB*hl(S0H;*d1voh!L%T@uaC z&S6@x372Qb%AAeNuZ{?7CMSe-g!6`5&-r6*x@0A**_@1)X9@Esko-lG+x&j?GR73@ z$a>*_E^J@U@|+QFUv`Y)6Pe9zLA21)Y!tSu&RG1f8f*lc9=YF;q=+@Mr2bW(VUI`Q(}MP||A7A2pT znvsS!ugElS2yn>;6?4HL!NV%ZB8*Svy`QRRz>X0k3En`qg%y*vnfihbq?g%+ESpKp zxkg2qhz^`0UL0CGrj%)gN%JimNK!`YPK_nBNx5XJ z*)wJ&-y{Aq@+L%th|zJ35Ya3lM2yS-nI>rPwH&p`HeZuvO17F+At+IESVt%GU@^y1 zXotzKVE)$;^}GsZicM+sD7_ULD0M#*H#|!O((N^NUrNoEf>J|^N8g4qEmXz_fGJ@T zW-Lsiu&jb-$G0X+WR2IU7tb(TR~&K}!{O-rEQ&eKbm}t!BkHh6v04Y)o|UO?iMLGR zHR^I89?{-1WU~-&nT2>sabxmbu^{xmlcw0$Fd==XwNLkVr`T=uO?UfFeLm9*|A}Yn z^G+B2?BBlA63n5YhMhBcn;&X`(ZTEvAY8VyrAd6XY`(GEHD!B6@TkBdc|M5G0y_u) z@(BN;V!vc^Vh#i9Z&z>2k|%rlXaDxwT3QnFh=d~=@FvoatfOIeBuyz3vT_utTriaf zCb=izVv5#qJMu_iZCzlgN9UjKe z5!jxDliaZ-+W17|niayAWOvsVK5g=<)fh)!mUvr_KujSKzM*YD5;AS)y(fXk#74d{ zpE*(FIZKP=nq^QkL17&5+D+f--a+?dmJpCEl}WCu*i{wLOj$8_`JAGdYtp`>^$A+d`Q8PV3+PVe6;< z*`50D-&Or{IZ#SsTRBKA40i=Mz|b6Q!pA_8dER>gaA(ByhcW6k7NF94FUm`VSRxBvF@Ne;GYVSJN88Z$^6Fgr!q>}+WD2kl#rrN<`8=T;<8m_que zBfpS5LIH#v0fTu6Lw4hI1X`62IS4qmWOm5X?iRaqGAD6QiKGa}uC2j=deaqbvNkmF zoS-$RD~}{f{7Dn4%loIL%?e;CmGrBb%7|1DW*kE&kE>T1I!KV15re) zCu6gZ8<>6GU~~UB;CLIVobOY5gU?55akSrLWxs)d3pi77^;6pg9>t4uwGLX0*`bBe zw>B>rC@ch%%<&7j zC&+)msC)0KLIOim8>tGoR70oZ0by@%Tx#Z1JD;*rk$MjCd zOYkh;Zph{-_DiUhIqKw& zZXKBI-DTWKHa; zN$sXc=(d90L^Qn6CjtFZm?G@JWR(x~73j>szbA&fOO!B$;KSDDJ6ROMRlqJd=5&lorGEDvU({)CYR|7GgNfDH=H%^lp^N z99J~FjgZDrX=ssDi_2LtH#9L$wk75%kraY>5z|U*vn5o)}eK;V7Z%p4P!-gJ^Qyf?^0*B7A= z+z5SOYfe$`Ybx9($3>53gf7-fF$1#heD@8Z?hK1C-oooQXvO%L$P8%4%z)2^W0!srNe--r?w?h8m#(fVbpbRq~IWSCVbxd9kZX&f0k; z*7Dt{59sgV7= zpDQc)%8EX&yi)<0U%0ZdL_ULK)e;%kj+_`0Nh%y}ImS2}87-aBa1F2@M5DrLiC~aa z{tM!vk8Ipx_Ta?P(0JIUF3UhsJcOp=HMNT)VxzW0Ji9BI!=WpA-;Mw`M-{DU;=X#t z6yt}T)5+Q4%u-@ZGrUCt_xMhPI}J*dPD9L^US6kMaY2A1q)ni@`GLjs6O1{nD|E=t zYAD}j4IgSHsqVd!9NSxiQQkMqP=B!^@|*%ZPa@bYf&Xua6qwAEzN-4>?pM_n)ijCi z$U3vQRq&z;BGoq{pq1FVZr@NNucpLXijiw}2S!W`$xdRUcR>yTyEdZw85i6O0UQn& zzlb>Yi4eKKxT-q@m=~HX;%;=kCHGm!mDUHUqp<80GOX(y!nB+Y_LgaKQSE>YgXOZ? zE>^mB^;L=cQB>l86qR@%MJ3tYtK<`s*1_zGkj!kz%!z$rWnMG))z}fnKnMG<6f=1j zO|W;b37?`$f;*U}?G8=kCYfmsj9o)GHK{`8SR-+n4?wrZTvWlk58p3;B<&q@v5|T) zgPtm;?iVNs8K_;9$kmM!xyoLpsji+WBB;Ym>UROZTJ6pXKB3q-t*PMT!qAZ+E+@eW zWF zd`{7NAHPz=D}8>&POn$&M6X!a(8nGcgFjLmw(bm!gDMUu!5%1nZ&C=R4|7y%+VK#7 zV1*_sTbskE?^WCdQ5^KiM-^e1PleVhEUi^&A46kt1yQsqJP0hdyD<)3O$vm>Xfi@r zkUyf|*Vl)~AbNYD#~?F4ww6c96T-Dz5*P?~60hQ_z<`9|JHAgW!A}ZU0!w1Y(A{DQ zD&PZxVu_(-hwN)plZ~+;_4CN%$-aDo#yn`|ePlse+0KT6NjX)enN9erE}swSrSn|8 zS|L)|2yUP+FY=c==*vrNL%hj^z1X{fKPR+!Tln*3gJ}^mM@Wz4Osxv)DL1*O!Q~<3 z2BD{>&imu7HzA{zsJ5EEH{v?BiU+C|ZpUHsj^TC~tD~9uLimmq$Lx=6;G1Qrqr4c1`>_D2El>$^gLipD%1J` zNp^@8G{CJd=$!H}8cb=o`j|dOU0>-uS-S0s*2s~?_H(RMoM8Z=QK3~p{K4EL->AwQ zQYuImc~Gz@FyzSll#w}vJ3$y6ESRdQyj#p1tj#S{RgSkr>{nI%K8pBPgE!Z1H-ZCr zEilD!RccYw?3<&)Wuiz;f3BdWGXh2xtM-Q!+bJ;4ri4Bw7Vt+#Q*oC?N9=ylhTSh( zxBEp$WeP7-2{4IsBDYHbli#kh@_9eEg#XC9L+LNyRed^3TdE$r zQCq6&qf2G(8NzyxOI7gJJ@*SbLoU@*ldt35fthDad9QN>NLLY@`&0=Cr%W@CQW=mU z@1n7f{Iqvt-~Op?>`)1#F04JV%+vT-uX4<^6JU)P-rwFG?$eBC(YbF`*ELpQS#z*Uhk`#kS%!m?$5O?0$Z0XsdI9DZao#o8X zd3I#|8C~GJFhYwViGb_O@{-&-@kqGAhTKHnG-Qykh>giR2efxw^N`s7sSOKyj$jez zrrjD@?RKN^w?0VW+oHm?r8X9!!~ zWn>O5**n$YDl7O}SAewwuJ$gciEv=F-_YAVE)-6@HKw6=9EN@5dsV65i>>XwRM`!Y zwR<K^h}8bx}D0J8`*?%AOGz+Vxu?CSNP+N zyENKcDuP!TZIX#CGa)S3k;uqMlsTZ}WvLK|K#JEp(ZhdCizEt&Hn2YM0cYS)-pQGd zLt2P}&STN$GSk-5jXs72G4OdQ>o~QAX-QQVmtUUesHVaEb0l~fzWA_tcSJ1)6xzYX z3ai;7(^+ON8wXw@EqND(Dt4!kjY1zU-JfL9r=EG=40ogc%j_sBqrHJ4@J}b!YR_`CICpr(kTNC38in);gF0soy)TB(U z5gWUK5iu$FY6drS5$QNpP~I?(Iewx>A+ACg_&I{i`zP%(mAXN82t+e<69&mpn<#l| z=wvj@@kYWI77L}igLKu-s6r#Bil3<>dXM3Am{a;VsU~Ok?fdCTPx5%%ahB7c{o6^* z&*OSd)3jDQqA~6EHu_TMQ5F)L_j_Jkwxd~nl>H->?c?-s>GS|YXQ?;wNZCT`EBH61 zrQ+wK8Y=L!Q2;8JOU0;>)Z@&ax(cWj`YClobs#-oXvu|pPB;RO! z`>ZRzcj=!Wdhk2l_0ru&<8xo#yyjc4JpId+QsUB|{c_U}F8|Vcj_1Lnm74HM8uh3Z zJ%>J1g%eTqzd>zD;mN&?)XuPDyi@6MgUu|P9_kA|ae(~Bsl}Dof}$U1dYF$Jcun4V zp_N2A@0UCP275PID2D~~W=qPQr_15sTt4`VJ~%)A%d1oa_i{FB(i0Y18n|37zGb6t ze)O#(`sPL7Z2nfL=$k5b@Vco-84`LLa)Bzo;OEg}Wce{5p(8H{zsc}w#17)8wKwXY zc*F+p-awt`@SE5dC49g38`+#jfu%$M(1hY0>Iv!`vye>?PluHhNM zwfxg{`z~J8<{#lNZdx(KU((?>FX~#@+~J?r)ag%enm)|uUq9gw;os?#I+bKg!#J8g zUHTl}v8=Oe-tfcfP8l_(Y3#^Rhs_%`zu}bmO{dHoGpep>Y*Sssh_MUm7c6Kvtf{W4 zX~FQ;MW=K$b(}tY-ja^y;hi1xhPN$SJbb~Zk;6JVjagLZRH}28V;CvjUZwxhDPvw! zYisj-f9|K6JD0U~jT^VD?X-@jrL_mo^_R5yO>O?%i5(qt{pC%q%bNe~W_5OT3}4#R z)z#e5Mok;OaLHn>v#qVUWB9OnO&zB$8Q#%+>LMz2I*Ko9o8P=**u0LWuIA2Ri zyI@59{E;J1Ii+dDn7XnSPN#?5hd%#C zeK3PQ@1^5<`kXUo=A=23rc66w;-}^uJ#pHUo>Inuh0&Ph1*I~Oil);ix`*tERa&r?77r!+UW z`SUuOsrB>ep8udW?a8rl^l$IjaTEPJEOtD<UWP=wy`PS8rTudZf7;#zy)#%qSdRO8*Xx9Y03@4vHN=P5(y4j&C;*+#el( zoBoZB9d9eCZx2;`zdcp)@3nONai-rZyfR~=XbPgn9jn>y!>!?-$ex{R!eM~7nz zbB+Jo)AsN^{H&nQeJ}@?HqE2<`b(BKcPwaKavGhRM!yaGH`W4b_mX*-6U&?FlLjz7 z?~=uH7V+3^Ywn~6#u!;h_c>XQxjjCz`z>C=wLeF7Pop}2TxQ_Cf5Z!jG1@7f*ZiNY z|0U>OQvZve=k+yZ6xPD8J@$sP_U3)rdn$at4I;FLF`23DV3%a;< zuhYFg&wD8S+n49FKK`rjkMQ^j`ZqXs{B+6j1p1fz5A@xpWO3ickB7yM!@i3jqwoG> zyBw{fuIzIuy4S%U*}Z7~(!ItO-3u4`OO|!{OBVR2ELqkzzjK`LAMpv__%pSE*J~@~ zVGM87ZK^V5ZiL7C)A514pY^Wkqa0q#+VlWxU$$so3!kFaPo=i;KFe!F75zJHNyq$f zoj;}7r&XS$Gx}K6wWz6;HrcL{ee{{>hOc};&X&D>amCWV7_Q9~szig2M z!ei5s`4t{#9a%sA18Y@$C`DcN&y4ifCiA^22Wi<+RC|}(o)sDrZ$#$o94}H?(FoN{1XGj`}Zd8Z_&I{mUPg~N7fCi!$tF(=PjAvtUq|ZHm@L=jm6Ss zqeh;#kadYAZ8R;qxYL)79nFgf{SuX0)JLgNBe~R~ey?8?yS}S=MVDVYzj*;KgUwp` zIXL>ciB+OPlg5sw6_5JmRO*lKm?GWu*GOK;lyO4GBEHKKT6byOwD7kkpTzW2Y3PLW z-Y`a%izfWm7*{S{k%Vn|N0{RUXXPRxa9B@o%&QHFX)! z_4ymE-Obc?I{#L=?106;FF7SoeO2LkMn$jRXr$0bo&IfV^XX7B7w~4tD~Tt&&53P= zm$Rg$xotk3XQ}b{E}9*SeL6wEoVIXLYjafbvB%GtZmgto`+p?klocWx5A)|NUNo;` zNxpMQ8;#fz!$ucP7h^NsubDn?q<=$W$E-CT8#}(I~Q)eenWfDvlG|?!VKh9subD70Hd>+bX ztU0__FQnz#*tUlUDf9+g=2?H2k1t%_w4!i%bp1DM(Y69?LYO&=n-?$XINe9Xpue;5 z=$~>r4P0G0m0z-_%)_;N%KQm;lkjmi?RjkUa`1ZzG}RRz_Sx7wSV+ZB=~!|a=GGX!8_?<%sUQ>R8m|8Y zeP8s59{XYYSrg$gP}h$Xb#;YU6Z%>o@2-$_s1g>z;ME&RBIp^w62S<*g4U&u#U#1% z`qI_Ww5ZEpw0LQ2^Wx^VE_oFl&0Whn+IWv>^P92GVJBdbnijO?j@Hxln#Zfwe3GAN zu`9G=!D6U^M&n-cc2=39FBjP|X;&P%pp`pp-lD}K6U^UBR=H2=HxeG7sdeb^_^W#4 zhsSs8HyIxPM%$ah<2Q6q@XJ@OzOsHD`PsBSmu zqNZfROj#)#)mg5x6RD($N>$28TDF_8P&M5zk+dz9K>cALh5Q!1&< zl%wdD(z!G)Q*O$p_i8(?ldzKx-BtQIWu)wsoitQ3X;S~2REcs7>2jO;!A@F^;kpTW z7m8|elHouy&7_s2H|*H9Mg2j2PMwwv$Cpx8!sR!fH0cc`sQan+sBS&%oP=vz^ayT( z7EISrHus{NO6kF9y0)q4Ic(}1Uae>t*{*G;l6r_L`q^-)b<{-$O@A6#N!v7S*U=+4 zsSL-a22xM4{z4e)68cN$*wcougFUvF77AY46vlu`x_e#5jAnA;9@4A(#}*`>`%Pb>P53esfegQROF z4U^s)%{q&UJGP!|CQT}b-eiK0TpE=Qbr;QD8aH&0q@kyvqNzqtoOJon=0QrGMlU}_ zV~F0b6Rs>Y)?JrY1Rga>9XxhXj-Lcfv{;xSt(j&Xu8Naa_L)wiu1t2@J{kTOwdp;=st8CE1{=+ zVZHvW5}QtVJX^{7Ptz||=Iy!9p#5qFA9N_~tPLzf^^oA?2PE$`8paonHYQY0GG_i@ zvN5=8O3!7LQ~hoCPOEKcoBl6zubD>h_Fc3QzM2gc=CuBtuRmY2*FEzZD(IMA$#ThrFL-}reY5AG&8yD0 z`rZgx;BOZ3dquSeQFW`{_VDIV={fe&d$2KOZa}`e&L*YXAIw^Z(S)_NU9Y{QRwd9r=4}Mx~*SxO7U*+uCnC@YV$nZ5=#zul+vvlg9A_PS`PTd*_Ld?eoUJn*Un6 z?ZkgR{6fzQe`?z9@3?rSp_F#TZ#|0KJmrMrWA{2kUmqTSU%#91_#N%22#;x9g>$UG2Olo{I><%uI| zXMOS~liqy`$KQVR`mGn<(*EV9ci+YFkIwt^$4|>${f9H&wb>V9EIxk4go~#<_KnNl z&EohoPuw~C^gYI(^{sa+a9scCca9so(fj_7-mS**j7`ThEcwG_7yb6#!8m?++*t?w z=GxOS z_`G9RwmNf8`QicZuf_54b@z{+yJOpEP4; z^-|aSSL67?yMJ@{SHAbs^%uUs8OIyX>{|EaoEzW1@%>wH{Nz-`6Cd`tHkPd)U?kyljgcnrsh!w)^=0dLl; z!*)D_~U=owF3zP$nS!!VZ4`okGdj9hi$@lZ(( zV`0zlZ{FPStOv(QEhx3;X zn*V3@^Mh0?j*mUibi)LI;W z|G}$1zu}zEpR+-&$MGj-U-rm@$B%jB7PV2H_u9+7xO8ppq$bL|!1`^uyj zf2B6#_<;3?{bKa@ue$DCbqkJXePz?vJFa}_AA6g3;P{Dqe}BU9_q}k}2y+{bUkP%5 z-RE!buA62)faB{{%=*byPxy~5FdviE;P{#|{`R@OH?20G!ST4d{V#vv+tL&!o6X);hg%|md^vmdSKqnH``w9Fh5Y{3;io+B z*WR+!s>bozPj30b$y1N+InNr5j}A6OtxNnJi)I>qeQy&pXyEe!kX{<6oO1>4nE{m||=Vj~~;=eU1Zdsd5kUAc}u? zXHw4R>t>Tgbjm?>2Sw$#^;@3A+^)`oTtrJ(c+L0pHN)zLMd#AGufpR{x@ex*JappF zp@&Xyn!c!QL0w&QUERdGU5H?dn^wRt8rH>TDV8J-9yY9Q#K=*j$BeCSIIQWEdGnhW zL@u=uN;hLE*INpu^XE=q($=h@bbb2M*xD9X6tF#E20iM~oUVdc>F!V@K4FXc%$W$hwgu zMvfdgYUJpVV@8f0SwFI23 zMpYk1mmS8Z{>}fE(VHB)v}4KgMeOgHw`4I*ibb6~ZkM$QY+(M9=1zE!sAoHx=XJH7 zUNF(pxa(qbtG}dUK6|UaaELg=`gC_MZ0cy9KfIG20NUMcJavdj#!Z&YrH-byQ=9$H zE}EEnY=)y)ep#@j!$*~TN+T%ULuI@UqR(7ZM|0bJUBk3PW&DJ{%k}ab?$qfwb;*>V zi*R7HQdx#4oOP%+_Ago1K^MuT`o1)iqprccfRB1no0zSOi(Y%EI1j!}pKQo?YX!2Q z{)hiFf_t7PVQ`eW)BmiJ|7`xx2;SyPH;w!JuwlbypVEBlqBi!uaKG2`mxIMl&;7s# z`nhx88{)zAo*60*ukxYtUiKdgGY=WH*wOGW2euU-~6TZ=U;f|{Xcl%p&vav z>(0BXs*`RyQ?bw3!^Yik<8#la>My$ZhGhEiBNi;WaKpeQbME`|8=pJnt#@}Ef5Mel z4I6$??TKH$_N!mtyyb?i_iTG0k;(40-?$?ue)9S)k3D{Ea^FF@1CBWIcdx&(r;ED-O9r! z9%jvRQ+0bgHCC0QCN$Vno#A#mnMzLZ53;kVvDP?eP}0sOXHKafRW>R)%uOc_wDxn& zo~J(LS@lEQL-rnYV0Fblsp)j9qs#V9rW41w2c?!}8jm<6ak!ICd@`XN&vG)Kb66r)m^$>fXp6`sGe|+|sRC?0Hs$<;a%cdmLJ$L2?q!W|U z`&pBx)LR4Su7@SltHOCDm+N*tJ;l&*F5Tz%`fo`*i)Jk>rdIdB4xoXg*K*FJl2`fI;iJ*r&oml$BX ztJj}vw>V{1D(PJ~x97hStM8aLIn_13=O5`#cj;b}zEF{^$bKfZZ_gK3Pqxl(EZ=MG z%>5IIo}V7-98sf|4z&i^=IROi4;<&H)lVJL^X#FvTK#g*KM$T}r)_i1z@w*qqUZbL z6Usi(sTysr9x%k7pZ#>Y=Nk?Cl?|~|NpnD==gKwD*#oUI>oj{#B5SMitldD*Tk8(7 z%_CNykloKpI}OR|L@L?yUuzSFV)J^!OeWl9YGArLvu}1#nKvL?ZhO`qd+eFoTkT_4 zs(r0N$tqQC?!UKh9cm5D3{!RX2y>*`V&7=qWZ&%mm-&wKp83ADBeiwK>F1sQwYtxo zbl&=ls((44eCo7!-W@jl$XT=Jyt4NE3ohPp3K`okAr{ml-;#ssJzclal! z96NjM1@z+`_k8!EA3pKqtG_X#>2WyEkCW#&uf6!HFF*RklVt-Brc+Zs^Z8jP&zawR z{>3-aB@aIO(yPCDvuxnRDf63q*50=5-ur&~vp4^;=Irw}Uw`j?4?g_l&wp{urtdxe z&=XHinLgt)pFMfbxffjctvm0!@BW7#{@K92_xb#+fBf_P9X*TNUwmo6{%uRD_nUL( zs&9PrxbJS;d!LW(KWXyx89Yf=b$|Q8XMXy^n}7LxN9ToI%Pu=`*zhgiyz9P)pZwWN zR~i#8-&A+u{!cvl<7b}OF@478KA&{Uy@Q7T`Hi+E^`AJhapFZ6AAjnyM;?9Z>F1vR z-TONXe@^bKm+Z5ScB|~fz}2@5=(*Y1-(6j8?dvLgxINlVS}K`H4ouH1-y?Zq(z2`5 zDa*Bz?8LCLwqs=yYQSF3^kh}?Gf6YCPj;q#lr@xAw1J88>^OVB1LpXP?fd~fk2q)D zY7I)9^`7u6c4*RO_4!~&n6FbCZ&hiG&rmgnIZO|M8@j5g?<`7qUSAlyj5-; z;WW61I%n+|Sm_QQIMk{suPN_YZ=ZGL-kH7DZFGh^htoi-O!eHG>&o^#J7~4%^!zII z*K4f$)aqFkJ$Ji3zufC^E1hU?C%M@~SLS2Z=j_j>de&4{r}s`xvwOajxOsDSAA7`C z?bSa&Fqw6np6k8Ue@`m^kOcjDzTI=LRb`cz^;+ol=bZUXT}`sq|7MiP(bKg#J5IVZ`QYHqpZ(#($1cC`h_7}3>Kpe=`Nz<* zH@BTW`}ieKeCeetKKJ_X)vnN}m3&N$s1*J~I8z zwXeL`de$q)Tz=Q4^N&0F3$Oh8fUEX)KVDV!UPt$eTl4D|U+_u+%#&*C)%I+;=--J znXrC-$2o~hjUTN)|Ir)2U%CG$zxm#Pg~!~p{k=EdJp7rzzPR9ks_*S#F7Dd&{-w*W zTl<-*bN^X)=Tx=s;v-fa{>&5C4L!MG%=f;2P4I^?Ps~2{+{P!rv+SI+Zkd+&)NQ}I z_6tv3dhY5=QX8NC;~PhH?muYCzK!qv@vCoV{`KH*|5)K&KliGy?D1apL^E4Z>>MM)4%4{F(=NR({{&+r)>M>@Ua)&@Zf%H zZW{g1b8G&1#-Ts`?ooH_@y}O3{!_K=_1|AN^zh~rZ@RVR%C@lw)I2)sw#jdwd+#5f zxjJ!wdTraH?{2^5iseJv4oDw;%wNh5_~B81Sen@W!(Yt*%sGcVep&5jPR?&g*bUqE zIO0zSE$i9#*Vq4U*SpR`EtjAFTKk4;|2S;nsE3X|_MCryebq@L{=X*9IxLDmTH`y* z(%sSsNH+@7EFFSK2`CNH-67rGB`sZ2(j^Ge-6bF(9nyV)AKZK4d3MjcJ9EA<^T$4O zKJN+mAR0sReDTs`x6ZjRExsKP%0iIVJ{WOGfbJ7tzr%S1$%E#NHJ36LP$eLav{lvkt{UCh-Vq z-A}h93a78?jEHhu`!U|)`+hm$9SGXT4KJQk@4Ti|HOrIx zcY;*=kN#VsB`rLog~aeuX%*_HZ^wi^V$Qy^*?r!!JCR-KVbk(_2?+*R10G*9XusFP zAE2+Ie7?Sk|Dn~_WusdlwWCP-^yJ+Iy#YIAef>o_BIhapU}1XkhEk|bRJkKbD2zR- zPuwqjDwDmsX*ZDC~`J4}3Z2e!YkZzGAE8~%|ScMzkx1lHRG z^ZH{>p(zx>V=6n&;H*P*%pXqn3L>TxqAD*#p<;;zg-)hH*hoH4Px=+dRXR-*`zRxN zJ26c;w|DY`w`=^HTNt?oiMPO6m9YgAhwM0$r>^jC|K#`tFV-pcl?hJw9nW-Ae2kzf zQC&B>O^HAksvK^POPc01+|R8aw`9a}0mY&cA_3jxy5B!l+|qodD44`0z}dLWuh#{o-yX<3RZa@3 z__f;w9W5!`Fp?_q2Y!w|mwjD@uH4J;Mad&06*!SJ(H75Cq<6nujD711{*h!ZeAO#z zH^a|-s_`CCE#*S&V~fBDj4Z3&t{8^jOY%b&ys5w~teRWP zBlGVz0T~VqH2qEB7ox;Q6A1j57%D|Ey8nmc(NPfdDM7W(jx=DH%Rc1UQ+jaWG?c4^z(pIPR`i<_tCQTclVTZWiF}YW~*c&%TY+#`>Svg?IG$Js)LzW z-h-z~lqy2a1Ok7D!;Tl#cYOTbEQ=m}6q!&5C8I3!togamy@=PJ2Q^q?3&6;T$hb-x zH*efDL|*Zpk1pk|QimyBqZ=CcVwKx=pK3^-87XESqy!vlLq# zJvOPCb1BY|D8Se6Bq zLA_>mIOLqhsscq*dl&c}^h@)DU$O&ROR=<_SZY%1qfIL(Df`+SVIQX(iYA$?^|w=B z{$%9#EUO$WjF)u|YclMB9y>~8%w_l}Uu8`0Z)+1tofk5$1c};wPyOkScf_sxrDmK< zqj-FPqQjn+nC+>u7vgQo8N;skxl!NxG;K8BKYf5C#Mk2&e7T3WA!u+tW5m?EA|Ho}_SzF+gSg370N zR_h;}`$Nd0&1je-4Nrcvi(5~ddR8mWew`w&2OU0E60>PX`p~l1J@-F&@s~>;xEr0x$x3LAb;;^>a0h|*14P8o>ImOYsbm@r}s*`$+0l$dbi^+gb5ZCKS`QcmI-&B$i8}i*GYW*V~d7fhLif3?#Rkx zHexCi5oKA zf>y7yhZ*4dD3u(2Zleb0X~e(6>A51bFw!aOdsGXLm*crN!wr}Yd<>o>RcF$-ChP=!0Njnp1$=t;pFvgiG82Gcbe46J~P}=%}wvxh}QOd9Z5tlTa9rw{=U>c+4_cu@|edkmS^xgH9Gu@9S9_ z{46&Ud3Cgml3L!@Yq*hvlpbQgm3>Tv>0D{nra*CK(QCb25_3H1h)8Au2i)xx>9m^w zc8FZKTJlpR_?k}8Z|Pu9i1tU|5^J2&soPQbn%XYIaGld}sK9(|@_;G<>zQ4H_umP2 z)^Hr2AHX*X-aM87oz4g3A|K$fMBFwnQ%Ja+ZX3#WhdCw*9o^e}%c&%{WuF%_e z8vGYXrjSZH)itbl^q60Bs!-NoxV?n}gE*v`f*9#yKK8ygrt-%+a# zlpm>m_HU6qAW6Vjg?BRizc_8?Xzq6j;DzDcfXy(ea;Xy17Af zRYdCYvkwphuCe_&wX`-E?ckdJDs03YlP_rbB_LvtDX@Nl5x{{nQiA+ zmw{`3CV}Vga&_=hmnTvzLm0&e5&MM^zF5Ooefg2ao{oi zIBT9rylAg3P8WY>fP?7Ip%BzesfvA&P}y+ep%!A;n#-`u$gH~aIm5(m55Gp}wd8E< z9P#@qx$L(5t@#ysaYC$m>=iQ|UD?CvPq?J3lNs^r_#|ED_2gxa+WqW%{#2S#%vdCI zb~pn_Pvk(o3Ke#Ak{9ZlcFQ;x0p%ZKvz>&K+a-*Ml!T6=z2mSSdPk%ef?++CKG)Up zrnco3ZsoaW5v)xaD~Gum2Sl=XeZ66j9I~^1w6to`~9Y=(Ur`YHPR)W zirpiLWFw-P6*Su3CKrZ5ax2}deIV0|!RcGi{Z5tM=J&u&?GEWptVj-RpuujHTtb@wO+hZd zOY8vq<_(=L1;1@TEnVQJK4LE|1wr-Cuiy~!sbA82-s)wZQV*8RwZZo&JdzRL_rdcq zl|fgAZU@lUf{a(o#Uf))80N~v1HBS-=?_|Xw~lR zlJ$B2jk;U|jje;m6NzDYhB1ByZ^EnWXX;*Y=G#02k1ev$D;SWCCj7yCu7rsz~#QphHVh9l1EMd<;hDRMN$+RjhEz&N$Ex|yAAv2e~Jt&J~=_SdK2sz98ot!Log zSxm3|k*n`8ON9iP)ah+a3KLlh@NQp4lg72A_Qg5O|H|aV_%f~ac=*jSsh|jDTUmxb zk|qjurs(qhZ+a`J$@1V!5{B~f#IdtMzc0-if2k*25@`PB-%SMmLNTKt z+GeDaG*I$k{W7Z!S`=wG{;$1GP&mnE`67n^(X?K>BY|+tusc1Ve-2%{7j~nzx{18| zM?=5{ND2G3fCQx>)s7KwMd1b|K!^OtAH|`SGxoW`Hzb?tjPrpl)FuZ&veWZjZg8mQT1nU+ak!l68jb#X5@S!fX-HQpOMW970}c4w-6L zp0Gfxp-(N(_=%QUS~_6zAp~he-yX8iWv?KruI?@Nk2wskIoc2R63cLWe}8#mm;c$% zYFFEx6jN=#_z78YaIVvNzdqSe-5q_Tp;!BbfX&m(OH+bClLP@H_AmOUHt^nQ7;8V?8gMP6%!WKd($NC8Z;gSwZk;?ovVoR3y!W z?ILB0Uy3_(zowr{M~1#?`WtU=|4|8NlQ>X`dBzbsA@4r&NM3E!4UG>Yug(WJ4z;&1 zm5k}Hi^_D$X~tDa>&_(bZTkvfBJc4Ys5j}%Uko+L(By`X_iqN5lyBF^a*LIamJj}u z_R86LwqSU4B_hLEIp8%pU=Bm-M@ z#R3uak@UJ!418vh+7lw_z8FCRn_4I99CzV7d_04G-uqqj@{AH zfcR5biesOqc^@7HUVG7goaSVaSI#!^Cec4>f}`U=$>u*|z46icU~BBl8BgmyLEQ)3 zdh=Kzom7gut}}M>86*i1&7Lj1tCP{qN3zWCxG|Tw;V3XiC$9RlH0kylyV=m64K@aN z4U*{a-RPL1bP-)<_FEpQs%%d7LdV+nfU%3Zn`XohOR_(kW8>DU3WA)Cnwj5B7nkvz zx{*X;BAv(pT&d{jQy&pu%~4gwg&wB;@by*1Myrw$#%5lsw=9GEmt#QN`$)2li7|`T z1PGqr6jJpf-)?=An&igKF^)KG9^YvixLKPemJL)#6Se)GkW(pQ2= zqPQbZiNuCu&T|l*;gOsx$d(hr)@dK*{rxs9!2-)?lbQ{om{?sOY4WQT|J_UW!>bj4 z-{W8ZA797| zAZY!AS`UIy{t5;`dmhw($RG$heXrm>UGQtDC#OKrjRzT7Y{Bm29{_@$Kgg>0NP>7q z1t4fp!oAGg=^G$w8wEiV?WPPQpiIK5F>|IYUT)_rLB(ogGi%B_`x%dG)AeQ@>j=&fAC$p4Ed~N z17Ta!{(~O#Cp`*8{Vt#65dUx^h~i+gZOJcZ3*tP$fEmiu_}4F13B%tKY(4nEiUu{B zxdw-7hxei%$l0Du^%7VZSenkFn)}hx_@xgBeu;FJ)x_Vs$%bJ2Q_L+N`O7<AgBjJxmEld*Rglv`-d|iAxtfYc@#eMeyT$Thp9kNm&v6uQeciEXm_tV2CWF> zBIW`?-3))?Jw2x;62&63ZJ_(sTc7m4`pHZ9doax8O1v|Z%N627$)lP!)T)k*OfrC9 z9+a0E95Nq-p8lyix=k0|@xqGm^3Hx9E>fS!ZuVeSRnh_pZ z;gIn~Uxt#cvx7kb+Ad$1{<1c0;R}vz z_aLUhJ9OC-j8ML0-Nhto_`)5DIK4H6SNF-ctqY3|OGx5%@0{;`wIxn-U zmtUCo=8X7~N=r;L)@094prB_xf^&s?w|c_9PLu&FT=9CjQdFa>K>y9?U%cvg>-@%9 zZD}5o&1UqK$bPmP@eSpm#`(bP>{4u!@6hI^M7^RSQ=FoH*<@Ay_dc9Se;0|{@u%F9#{;Qn7 zR7cPFO_%k!c?@><#%t1k0-i<~EuH~sDJRuS%3lUT8Ina1*Ok@*CK>!xhZI3tebg=8 zCq6jV=Pi5FP!2E105!(Z!0y;t|Bw5&XhaXW)_Q|Ui&0W9soWrTNRs=y!?KCkUR#TM z?(_Dk9l^9LoG%@CMU{J`7@LQ38-pFI+n&6;(nE1r(l)BY2bm3Iv^qTn8lnvebK#|8 z7Qyt?Hs^de_PCo(G3GiMC#$ z>K}RY5*j!^=YbOji^#UHoA*+{`&}XKSi0K2xJ*<0=J1dH<<&95Zg{KWXK7|>?378Z zCFp)-^N>!{!DSe+ThkWSB*k1}T>lzzpIKkLTk$)YCG@JhrD;EKtD2TlsjPRo^$0Z;2=<&cAZ+ov#PP=}w*iPHJ z&&UElG1Jp7lIQ2H{~FSgyvqb$O^A2a0=P=oOI{TQIf%k-AycQ+!h{8G>J(&J@Z!d5 z@Bb#N8kcQ^IoWe?1tqkzFlGKI^&!?TpHKk#KJwkk*_2Hhp@yyOdIR#ZTVe@|;+*mI zH9}{%mp~5rC;XHJz>sD`Kn2)UMI+iaR1V{~mb$_`hp6*V^+d*v75rbr~qtWgP9VpqTuPkxEn zo+#E_PZz7HG}TRFvg9&xcr#&6cSO?gk|s@IITYoSs#fkw(zBHfpj_-PVOfL+^XZ^Q ztEPs&FbRI<^Eq3xiz5+xD~Eb_DVtJATu{Cuv9q)koQd(mEZU6NMNzbo9)9X<00d?t zI$D16Y@%A2Ps4YlK^p+^loHTl99 z=lEpx+?0;JlTP1#Z3>K2E-e&sAP)4msFTYt2C;qH>!pnd{IHL2hC@H>wLLR9GS+C* z`lMRn4t||9?#$AXsN*tyDd@#$ zuHuo;_tE+1YNsAM|2vSM+fK*6e&u{O8Poba7Jn;LVz>@#L!-73Q0eD#*~O~uqo^v1 z;;BUXp}eSDT!_Es!H|hpji@clW}4{wJ~s8YmV;EvALQDMYd?4OozHDsmm4L}aClqa zX6y)69OB9~7kz?}@~(&%rBf9aYEOQEhQre7aIGH8U0#Ui1m$+Hk}9fXo$JDj4QW{N zKE}KflTwW2JVKRk*{N`}x2G7>keOJ|cbN=C{uB`B+vLIkVFZo+5z)&?S_ZNAEzr0E zMQOWYcs!n0|LpOYSfVdR*FQ!j1bqnjvX&8kElMA9pBcNep**Qrsa!Y zR2FT|&DMid7M19f0WEu}dHNS7*ntQLC+P|129Wb5%lJE;EGrdrdhiWK6wvmz&gbD(5t+RA zO-F7&9Q}8_KmLw5GfULmK;*BQ)6bf;_!pJs*{jm}={P!8@!t)^8+XYTP}4Q|1Js;R zt|)HbZ*Ar&55s*&DVXXFn76;hi}@EgE=+Zhhxp{LVA%>*G~dBQ@nWW;r`;P}y~r`o z?=r%Rz(`dgbhgiqXbccF{tQ^0D~oPxPezAT78k^|&v|uonJCk6hn-q2;^Vj;DK0no z>BiNH)Fz9EhHv*d*_p@1G}PxReS)fftDpfT40pM_HZdOBXnDsxo5t391?!pw_vGh* zAvw0Q<{NO3v3% zg(={~Y#6Jdx$|}2td0Rtd`4UK%Wu-y;tXzBp}rZIbp3-ejEVobEsB zyV0o&LLZhjV*H7y`pXDm?W>b(tAd!0H`gl^=5z1h-+d~{R(ZW{<-(c28oxwUBMUib z=LX))YQzMc7qz|0MjMJb8#K95cy+dQs&XhIi}kbi#0Pfa(XS$H72?9-V$(j6zoAxk zK-B#44YOM7v$u9A*!ot)yIDK7znv}j7j!ZIh6r>HkNL&sGZc%d^v(w_F%NLTN$1r? zbK*}j2*jBu)&J-SAjVwhg3R|-hh21K;3UnCl_N!EQ6LFLC#H~esd->YYs!9?DMA^l zZiadBeXMEH zf&4sy<0-8i7RxY8H{YMzc!glg!sKZy(GQC$Kt}1|EK)xXJAh# z5icir9S(sRnkwhNs~ty67A{wkg%Io<^>dkqzOMdX?m?DnZ}9fy_v6`eJ454d7^MdI zEfa^iQAu=r`HPw6J;j3a7JX$HCoPBcqpC=V*ZASF!MAgzV} z&*H+*^>H!2HA$mC`i%~_nhD1U%~P?J!-lnfD{k&|m_HBF>GEY%K3o1`Y8PGgWu@wv z@0#7wqN7CcdUF> zkqz@~Do%bExuoL;IRYLOcJ#^%uS{b;(sKA|(F8=q1@ermz=+q{{`1J?Ixsq{rwBUSiIf@JGcbLrI59Li#`d}0 zKj$p4BBq)gLmgGTM7zNN3VlXHDRfx9Vhv$y58}y!@U1NQ2_*+$CFM?u;{AC(R0XJ>{2w z;KSCJDD_<>k!Q6u8%=;YsWROeM*d{Nfv8h^(+)uKK)S&@+1%~>bPLF7* zvMwkUsn??mvQhBlPZRBLO1}`(Q{p)2sYj<{pNtbKk#NR$D`=f)9xG7u@Yj&+>njT1 zk+KTimBL{q%ePa%ZBhAW^f8phreek8O=c+jNA6s!x&oZHMADTi1(Y z_Mt;N=4@q6kD7cpfqKgd!Jn*HJpEg*v{pxm256uBaFt#k2K9zLojRI!yjYM8Hcuzl(QuH~S}vZ_7uf>c&8tF)5=Q=_<)B z!xr#w*Acy5)wXwmB(^A!r=N?_Os?z8*(DXNbZW`>{_?wvGlu%1N{@RoA z(SO&j(zK?BB(dm(lL(R5*xa=%He0;vQ+?Kp@*Aw+q7c`$C4xfg$%TGB81J+8EU&(P zO)27qHtguNj~f;FZ}|;la{5E&+D-}gk$yb8kdY{;(#3lcj=47^5?;jbm?f$eHqJ^` z1hE%a6EpQz&!_(6QaVo0qd!x9^7~0TZ02nuqQC!ttta)3@2w={y3XV-1~!)W-c61F zoc-MTNS=RfML)&GKxCo0WJ;`jB)fFy0Ql}7kVIz1#Q+T8 z!Ej(O0HFj(i9R6nAR+?KAOIo&1HdxC@FLPb1IW4VPJkdl02p{AFbTkOe>w!=?hqs} zApiz*0}wFe-Y5Z(f?)vUdkuSc0DuF=g9Gl5zRQgOz{4PcNdexwb5ZWjq`gbeb>A8T z27thWksq?&%>jUU)Wl$J@c)fM0!RXo`&JzQ0`Lw1!=oVR0$@aBcquT^gOh^`?Y@%- zEHXfa2z-J7aCfP|1YigZ1_bpkgagolyZwg{!;pYU!9rl*zGnwABEWQ)&mK$xIKV)_ zhyWbS?A-+JW($9x5sUzb1O`~i*dVM(5EyDi6fiji4EGv%m;~%=1TZ)e20#Vi?+1ec zcM5@k_U9m&FhH9e1ZNBeK>#Fjusj%a?`r@Ez_369m=FsUphh4-1^`AF*82u4ccW1O zB5?N}6O_Aku>c&vLtCA@b<=|pfZh9T13&->1LNM_1uO$`un(O}Aha+LAm?rjC@cv4 z79x(!25|*A(dq71iUh-Umlq!3hoOQ65Ci}e@JqzIJ%fM&Ef_H5Zd-s<00sf~VQ>Gt z4ruT&up+?S7TwzPkh<`1|HV3V3%@yUXDM2XmkEZl5LZ2LeEM z*ZUy@V?Jbs)dw=}&f$lEAUAj8nZtv$J@-NX&&Bg#_=#!z0Yb)jGR}d)|Gj~rBln-* z%@ca|5ZoWx{urFz2e9`|;aWhhh*mb1`u2JTHnv~{GaU;1e0*$>6@%x`8bW1G>5WgU^P^ v(9BX-$IO-i!PeN&g2}+ijse}q;FE!kfrXv{lby4bf$jeQG`hmC4^9FAB!<;m literal 0 HcmV?d00001 diff --git a/static/favicon-128x128.png b/public/favicon-128x128.png similarity index 100% rename from static/favicon-128x128.png rename to public/favicon-128x128.png diff --git a/static/favicon-16x16.png b/public/favicon-16x16.png similarity index 100% rename from static/favicon-16x16.png rename to public/favicon-16x16.png diff --git a/static/favicon-192x192.png b/public/favicon-192x192.png similarity index 100% rename from static/favicon-192x192.png rename to public/favicon-192x192.png diff --git a/static/favicon-256x256.png b/public/favicon-256x256.png similarity index 100% rename from static/favicon-256x256.png rename to public/favicon-256x256.png diff --git a/static/favicon-32x32.png b/public/favicon-32x32.png similarity index 100% rename from static/favicon-32x32.png rename to public/favicon-32x32.png diff --git a/static/favicon-512x512.png b/public/favicon-512x512.png similarity index 100% rename from static/favicon-512x512.png rename to public/favicon-512x512.png diff --git a/static/favicon.ico b/public/favicon.ico similarity index 100% rename from static/favicon.ico rename to public/favicon.ico diff --git a/static/images/6897d.jpg b/public/images/6897d.jpg similarity index 100% rename from static/images/6897d.jpg rename to public/images/6897d.jpg diff --git a/static/images/EE895.png b/public/images/EE895.png similarity index 100% rename from static/images/EE895.png rename to public/images/EE895.png diff --git a/static/images/HTE501.png b/public/images/HTE501.png similarity index 100% rename from static/images/HTE501.png rename to public/images/HTE501.png diff --git a/static/images/TEE501.png b/public/images/TEE501.png similarity index 100% rename from static/images/TEE501.png rename to public/images/TEE501.png diff --git a/static/images/a01nyub.jpg b/public/images/a01nyub.jpg similarity index 100% rename from static/images/a01nyub.jpg rename to public/images/a01nyub.jpg diff --git a/static/images/a02yyuw.jpg b/public/images/a02yyuw.jpg similarity index 100% rename from static/images/a02yyuw.jpg rename to public/images/a02yyuw.jpg diff --git a/static/images/ac_dimmer.svg b/public/images/ac_dimmer.svg similarity index 100% rename from static/images/ac_dimmer.svg rename to public/images/ac_dimmer.svg diff --git a/static/images/adc128s102.png b/public/images/adc128s102.png similarity index 100% rename from static/images/adc128s102.png rename to public/images/adc128s102.png diff --git a/static/images/addressable_light.jpg b/public/images/addressable_light.jpg similarity index 100% rename from static/images/addressable_light.jpg rename to public/images/addressable_light.jpg diff --git a/static/images/ade7880.svg b/public/images/ade7880.svg similarity index 100% rename from static/images/ade7880.svg rename to public/images/ade7880.svg diff --git a/static/images/ade7953.svg b/public/images/ade7953.svg similarity index 100% rename from static/images/ade7953.svg rename to public/images/ade7953.svg diff --git a/static/images/ads1115.jpg b/public/images/ads1115.jpg similarity index 100% rename from static/images/ads1115.jpg rename to public/images/ads1115.jpg diff --git a/static/images/ads1118.jpg b/public/images/ads1118.jpg similarity index 100% rename from static/images/ads1118.jpg rename to public/images/ads1118.jpg diff --git a/static/images/ags10.jpg b/public/images/ags10.jpg similarity index 100% rename from static/images/ags10.jpg rename to public/images/ags10.jpg diff --git a/static/images/aht10.jpg b/public/images/aht10.jpg similarity index 100% rename from static/images/aht10.jpg rename to public/images/aht10.jpg diff --git a/static/images/aic3204.svg b/public/images/aic3204.svg similarity index 100% rename from static/images/aic3204.svg rename to public/images/aic3204.svg diff --git a/static/images/air-conditioner-ir.svg b/public/images/air-conditioner-ir.svg similarity index 100% rename from static/images/air-conditioner-ir.svg rename to public/images/air-conditioner-ir.svg diff --git a/static/images/air-conditioner.svg b/public/images/air-conditioner.svg similarity index 100% rename from static/images/air-conditioner.svg rename to public/images/air-conditioner.svg diff --git a/static/images/airthings_logo.png b/public/images/airthings_logo.png similarity index 100% rename from static/images/airthings_logo.png rename to public/images/airthings_logo.png diff --git a/static/images/alarm-panel.svg b/public/images/alarm-panel.svg similarity index 100% rename from static/images/alarm-panel.svg rename to public/images/alarm-panel.svg diff --git a/static/images/alpha3.jpg b/public/images/alpha3.jpg similarity index 100% rename from static/images/alpha3.jpg rename to public/images/alpha3.jpg diff --git a/static/images/am2315c.jpg b/public/images/am2315c.jpg similarity index 100% rename from static/images/am2315c.jpg rename to public/images/am2315c.jpg diff --git a/static/images/am2320.jpg b/public/images/am2320.jpg similarity index 100% rename from static/images/am2320.jpg rename to public/images/am2320.jpg diff --git a/static/images/am43.jpg b/public/images/am43.jpg similarity index 100% rename from static/images/am43.jpg rename to public/images/am43.jpg diff --git a/static/images/analog_threshold.svg b/public/images/analog_threshold.svg similarity index 100% rename from static/images/analog_threshold.svg rename to public/images/analog_threshold.svg diff --git a/static/images/anova.png b/public/images/anova.png similarity index 100% rename from static/images/anova.png rename to public/images/anova.png diff --git a/static/images/apa102.jpg b/public/images/apa102.jpg similarity index 100% rename from static/images/apa102.jpg rename to public/images/apa102.jpg diff --git a/static/images/apds9306.png b/public/images/apds9306.png similarity index 100% rename from static/images/apds9306.png rename to public/images/apds9306.png diff --git a/static/images/apds9960.jpg b/public/images/apds9960.jpg similarity index 100% rename from static/images/apds9960.jpg rename to public/images/apds9960.jpg diff --git a/static/images/aqi.svg b/public/images/aqi.svg similarity index 100% rename from static/images/aqi.svg rename to public/images/aqi.svg diff --git a/static/images/arduino_logo.svg b/public/images/arduino_logo.svg similarity index 100% rename from static/images/arduino_logo.svg rename to public/images/arduino_logo.svg diff --git a/static/images/as3935.jpg b/public/images/as3935.jpg similarity index 100% rename from static/images/as3935.jpg rename to public/images/as3935.jpg diff --git a/static/images/as5600.jpg b/public/images/as5600.jpg similarity index 100% rename from static/images/as5600.jpg rename to public/images/as5600.jpg diff --git a/static/images/as7341.jpg b/public/images/as7341.jpg similarity index 100% rename from static/images/as7341.jpg rename to public/images/as7341.jpg diff --git a/static/images/at581x.png b/public/images/at581x.png similarity index 100% rename from static/images/at581x.png rename to public/images/at581x.png diff --git a/static/images/atm90e26.jpg b/public/images/atm90e26.jpg similarity index 100% rename from static/images/atm90e26.jpg rename to public/images/atm90e26.jpg diff --git a/static/images/atm90e32.jpg b/public/images/atm90e32.jpg similarity index 100% rename from static/images/atm90e32.jpg rename to public/images/atm90e32.jpg diff --git a/static/images/audio_adc.svg b/public/images/audio_adc.svg similarity index 100% rename from static/images/audio_adc.svg rename to public/images/audio_adc.svg diff --git a/static/images/audio_dac.svg b/public/images/audio_dac.svg similarity index 100% rename from static/images/audio_dac.svg rename to public/images/audio_dac.svg diff --git a/static/images/auto-fix.svg b/public/images/auto-fix.svg similarity index 100% rename from static/images/auto-fix.svg rename to public/images/auto-fix.svg diff --git a/static/images/axs15231.svg b/public/images/axs15231.svg similarity index 100% rename from static/images/axs15231.svg rename to public/images/axs15231.svg diff --git a/static/images/b_parasite.jpg b/public/images/b_parasite.jpg similarity index 100% rename from static/images/b_parasite.jpg rename to public/images/b_parasite.jpg diff --git a/static/images/bedjet.png b/public/images/bedjet.png similarity index 100% rename from static/images/bedjet.png rename to public/images/bedjet.png diff --git a/static/images/bh1750.jpg b/public/images/bh1750.jpg similarity index 100% rename from static/images/bh1750.jpg rename to public/images/bh1750.jpg diff --git a/static/images/bh1900nux-evk-001.png b/public/images/bh1900nux-evk-001.png similarity index 100% rename from static/images/bh1900nux-evk-001.png rename to public/images/bh1900nux-evk-001.png diff --git a/static/images/binary_sensor_map.jpg b/public/images/binary_sensor_map.jpg similarity index 100% rename from static/images/binary_sensor_map.jpg rename to public/images/binary_sensor_map.jpg diff --git a/static/images/bk72xx.svg b/public/images/bk72xx.svg similarity index 100% rename from static/images/bk72xx.svg rename to public/images/bk72xx.svg diff --git a/static/images/bl0906.png b/public/images/bl0906.png similarity index 100% rename from static/images/bl0906.png rename to public/images/bl0906.png diff --git a/static/images/bl0939.png b/public/images/bl0939.png similarity index 100% rename from static/images/bl0939.png rename to public/images/bl0939.png diff --git a/static/images/bl0940.png b/public/images/bl0940.png similarity index 100% rename from static/images/bl0940.png rename to public/images/bl0940.png diff --git a/static/images/bl0942.png b/public/images/bl0942.png similarity index 100% rename from static/images/bl0942.png rename to public/images/bl0942.png diff --git a/static/images/bluetooth.svg b/public/images/bluetooth.svg similarity index 100% rename from static/images/bluetooth.svg rename to public/images/bluetooth.svg diff --git a/static/images/bm8563.svg b/public/images/bm8563.svg similarity index 100% rename from static/images/bm8563.svg rename to public/images/bm8563.svg diff --git a/static/images/bme280.jpg b/public/images/bme280.jpg similarity index 100% rename from static/images/bme280.jpg rename to public/images/bme280.jpg diff --git a/static/images/bme680.jpg b/public/images/bme680.jpg similarity index 100% rename from static/images/bme680.jpg rename to public/images/bme680.jpg diff --git a/static/images/bmi160.jpg b/public/images/bmi160.jpg similarity index 100% rename from static/images/bmi160.jpg rename to public/images/bmi160.jpg diff --git a/static/images/bmp180.jpg b/public/images/bmp180.jpg similarity index 100% rename from static/images/bmp180.jpg rename to public/images/bmp180.jpg diff --git a/static/images/bmp280.jpg b/public/images/bmp280.jpg similarity index 100% rename from static/images/bmp280.jpg rename to public/images/bmp280.jpg diff --git a/static/images/bmp388.jpg b/public/images/bmp388.jpg similarity index 100% rename from static/images/bmp388.jpg rename to public/images/bmp388.jpg diff --git a/static/images/bmp581.jpg b/public/images/bmp581.jpg similarity index 100% rename from static/images/bmp581.jpg rename to public/images/bmp581.jpg diff --git a/static/images/bp1658cj.svg b/public/images/bp1658cj.svg similarity index 100% rename from static/images/bp1658cj.svg rename to public/images/bp1658cj.svg diff --git a/static/images/bp5758d.svg b/public/images/bp5758d.svg similarity index 100% rename from static/images/bp5758d.svg rename to public/images/bp5758d.svg diff --git a/static/images/breakable-header.jpg b/public/images/breakable-header.jpg similarity index 100% rename from static/images/breakable-header.jpg rename to public/images/breakable-header.jpg diff --git a/static/images/brightness-medium.svg b/public/images/brightness-medium.svg similarity index 100% rename from static/images/brightness-medium.svg rename to public/images/brightness-medium.svg diff --git a/static/images/bug-report.svg b/public/images/bug-report.svg similarity index 100% rename from static/images/bug-report.svg rename to public/images/bug-report.svg diff --git a/static/images/buzzer.jpg b/public/images/buzzer.jpg similarity index 100% rename from static/images/buzzer.jpg rename to public/images/buzzer.jpg diff --git a/static/images/camera.svg b/public/images/camera.svg similarity index 100% rename from static/images/camera.svg rename to public/images/camera.svg diff --git a/static/images/canbus.svg b/public/images/canbus.svg similarity index 100% rename from static/images/canbus.svg rename to public/images/canbus.svg diff --git a/static/images/cap1188.jpg b/public/images/cap1188.jpg similarity index 100% rename from static/images/cap1188.jpg rename to public/images/cap1188.jpg diff --git a/content/images/captive_portal-ui.png b/public/images/captive_portal-ui.png similarity index 100% rename from content/images/captive_portal-ui.png rename to public/images/captive_portal-ui.png diff --git a/static/images/cc1101.webp b/public/images/cc1101.webp similarity index 100% rename from static/images/cc1101.webp rename to public/images/cc1101.webp diff --git a/static/images/ccs811.jpg b/public/images/ccs811.jpg similarity index 100% rename from static/images/ccs811.jpg rename to public/images/ccs811.jpg diff --git a/static/images/cd74hc4067.jpg b/public/images/cd74hc4067.jpg similarity index 100% rename from static/images/cd74hc4067.jpg rename to public/images/cd74hc4067.jpg diff --git a/static/images/ch422g.svg b/public/images/ch422g.svg similarity index 100% rename from static/images/ch422g.svg rename to public/images/ch422g.svg diff --git a/static/images/ch423.png b/public/images/ch423.png similarity index 100% rename from static/images/ch423.png rename to public/images/ch423.png diff --git a/static/images/chart-line.svg b/public/images/chart-line.svg similarity index 100% rename from static/images/chart-line.svg rename to public/images/chart-line.svg diff --git a/static/images/chsc6x.png b/public/images/chsc6x.png similarity index 100% rename from static/images/chsc6x.png rename to public/images/chsc6x.png diff --git a/static/images/clock-outline.svg b/public/images/clock-outline.svg similarity index 100% rename from static/images/clock-outline.svg rename to public/images/clock-outline.svg diff --git a/static/images/cloud-circle.svg b/public/images/cloud-circle.svg similarity index 100% rename from static/images/cloud-circle.svg rename to public/images/cloud-circle.svg diff --git a/static/images/cm1106.png b/public/images/cm1106.png similarity index 100% rename from static/images/cm1106.png rename to public/images/cm1106.png diff --git a/static/images/color_lens.svg b/public/images/color_lens.svg similarity index 100% rename from static/images/color_lens.svg rename to public/images/color_lens.svg diff --git a/static/images/connection.svg b/public/images/connection.svg similarity index 100% rename from static/images/connection.svg rename to public/images/connection.svg diff --git a/static/images/content-copy.svg b/public/images/content-copy.svg similarity index 100% rename from static/images/content-copy.svg rename to public/images/content-copy.svg diff --git a/static/images/cookbook-sonoff-fishpond-pump.jpg b/public/images/cookbook-sonoff-fishpond-pump.jpg similarity index 100% rename from static/images/cookbook-sonoff-fishpond-pump.jpg rename to public/images/cookbook-sonoff-fishpond-pump.jpg diff --git a/static/images/crosshairs-gps.svg b/public/images/crosshairs-gps.svg similarity index 100% rename from static/images/crosshairs-gps.svg rename to public/images/crosshairs-gps.svg diff --git a/static/images/cs5460a.png b/public/images/cs5460a.png similarity index 100% rename from static/images/cs5460a.png rename to public/images/cs5460a.png diff --git a/static/images/cse7761.svg b/public/images/cse7761.svg similarity index 100% rename from static/images/cse7761.svg rename to public/images/cse7761.svg diff --git a/static/images/cse7766.svg b/public/images/cse7766.svg similarity index 100% rename from static/images/cse7766.svg rename to public/images/cse7766.svg diff --git a/static/images/cst816.jpg b/public/images/cst816.jpg similarity index 100% rename from static/images/cst816.jpg rename to public/images/cst816.jpg diff --git a/static/images/ct_clamp.jpg b/public/images/ct_clamp.jpg similarity index 100% rename from static/images/ct_clamp.jpg rename to public/images/ct_clamp.jpg diff --git a/static/images/dac.svg b/public/images/dac.svg similarity index 100% rename from static/images/dac.svg rename to public/images/dac.svg diff --git a/static/images/dac7678.svg b/public/images/dac7678.svg similarity index 100% rename from static/images/dac7678.svg rename to public/images/dac7678.svg diff --git a/static/images/dallas.jpg b/public/images/dallas.jpg similarity index 100% rename from static/images/dallas.jpg rename to public/images/dallas.jpg diff --git a/static/images/daly_bms.jpg b/public/images/daly_bms.jpg similarity index 100% rename from static/images/daly_bms.jpg rename to public/images/daly_bms.jpg diff --git a/static/images/description.svg b/public/images/description.svg similarity index 100% rename from static/images/description.svg rename to public/images/description.svg diff --git a/static/images/dfplayer.svg b/public/images/dfplayer.svg similarity index 100% rename from static/images/dfplayer.svg rename to public/images/dfplayer.svg diff --git a/static/images/dfrobot_sen0395.jpg b/public/images/dfrobot_sen0395.jpg similarity index 100% rename from static/images/dfrobot_sen0395.jpg rename to public/images/dfrobot_sen0395.jpg diff --git a/static/images/dht.jpg b/public/images/dht.jpg similarity index 100% rename from static/images/dht.jpg rename to public/images/dht.jpg diff --git a/static/images/dht12.jpg b/public/images/dht12.jpg similarity index 100% rename from static/images/dht12.jpg rename to public/images/dht12.jpg diff --git a/content/components/images/display_time_temp_oled_2.jpg b/public/images/display_time_temp_oled_2.jpg similarity index 100% rename from content/components/images/display_time_temp_oled_2.jpg rename to public/images/display_time_temp_oled_2.jpg diff --git a/static/images/dlms_meter.jpg b/public/images/dlms_meter.jpg similarity index 100% rename from static/images/dlms_meter.jpg rename to public/images/dlms_meter.jpg diff --git a/static/images/dps310.jpg b/public/images/dps310.jpg similarity index 100% rename from static/images/dps310.jpg rename to public/images/dps310.jpg diff --git a/static/images/ds2484.svg b/public/images/ds2484.svg similarity index 100% rename from static/images/ds2484.svg rename to public/images/ds2484.svg diff --git a/static/images/dsmr.svg b/public/images/dsmr.svg similarity index 100% rename from static/images/dsmr.svg rename to public/images/dsmr.svg diff --git a/static/images/ehmtx.jpg b/public/images/ehmtx.jpg similarity index 100% rename from static/images/ehmtx.jpg rename to public/images/ehmtx.jpg diff --git a/static/images/ektf2232.svg b/public/images/ektf2232.svg similarity index 100% rename from static/images/ektf2232.svg rename to public/images/ektf2232.svg diff --git a/static/images/electric-switch.svg b/public/images/electric-switch.svg similarity index 100% rename from static/images/electric-switch.svg rename to public/images/electric-switch.svg diff --git a/static/images/emc2101.jpg b/public/images/emc2101.jpg similarity index 100% rename from static/images/emc2101.jpg rename to public/images/emc2101.jpg diff --git a/static/images/ens160.jpg b/public/images/ens160.jpg similarity index 100% rename from static/images/ens160.jpg rename to public/images/ens160.jpg diff --git a/static/images/ens210.jpg b/public/images/ens210.jpg similarity index 100% rename from static/images/ens210.jpg rename to public/images/ens210.jpg diff --git a/static/images/epaper.svg b/public/images/epaper.svg similarity index 100% rename from static/images/epaper.svg rename to public/images/epaper.svg diff --git a/static/images/es7210.svg b/public/images/es7210.svg similarity index 100% rename from static/images/es7210.svg rename to public/images/es7210.svg diff --git a/static/images/es7243e.svg b/public/images/es7243e.svg similarity index 100% rename from static/images/es7243e.svg rename to public/images/es7243e.svg diff --git a/static/images/es8156.svg b/public/images/es8156.svg similarity index 100% rename from static/images/es8156.svg rename to public/images/es8156.svg diff --git a/static/images/es8311.svg b/public/images/es8311.svg similarity index 100% rename from static/images/es8311.svg rename to public/images/es8311.svg diff --git a/static/images/es8388.svg b/public/images/es8388.svg similarity index 100% rename from static/images/es8388.svg rename to public/images/es8388.svg diff --git a/static/images/esp-now.svg b/public/images/esp-now.svg similarity index 100% rename from static/images/esp-now.svg rename to public/images/esp-now.svg diff --git a/static/images/esp32-s3-korvo-2-lcd.png b/public/images/esp32-s3-korvo-2-lcd.png similarity index 100% rename from static/images/esp32-s3-korvo-2-lcd.png rename to public/images/esp32-s3-korvo-2-lcd.png diff --git a/static/images/esp32.svg b/public/images/esp32.svg similarity index 100% rename from static/images/esp32.svg rename to public/images/esp32.svg diff --git a/static/images/esp32_s3_box_3.png b/public/images/esp32_s3_box_3.png similarity index 100% rename from static/images/esp32_s3_box_3.png rename to public/images/esp32_s3_box_3.png diff --git a/static/images/esp8266.svg b/public/images/esp8266.svg similarity index 100% rename from static/images/esp8266.svg rename to public/images/esp8266.svg diff --git a/static/images/ethernet.svg b/public/images/ethernet.svg similarity index 100% rename from static/images/ethernet.svg rename to public/images/ethernet.svg diff --git a/static/images/exposure_notifications.png b/public/images/exposure_notifications.png similarity index 100% rename from static/images/exposure_notifications.png rename to public/images/exposure_notifications.png diff --git a/static/images/external-link.svg b/public/images/external-link.svg similarity index 100% rename from static/images/external-link.svg rename to public/images/external-link.svg diff --git a/static/images/external_components.svg b/public/images/external_components.svg similarity index 100% rename from static/images/external_components.svg rename to public/images/external_components.svg diff --git a/static/images/ezo-ph-circuit.png b/public/images/ezo-ph-circuit.png similarity index 100% rename from static/images/ezo-ph-circuit.png rename to public/images/ezo-ph-circuit.png diff --git a/static/images/ezo-pmp.jpg b/public/images/ezo-pmp.jpg similarity index 100% rename from static/images/ezo-pmp.jpg rename to public/images/ezo-pmp.jpg diff --git a/static/images/face.svg b/public/images/face.svg similarity index 100% rename from static/images/face.svg rename to public/images/face.svg diff --git a/content/images/factory-rst-ui.png b/public/images/factory-rst-ui.png similarity index 100% rename from content/images/factory-rst-ui.png rename to public/images/factory-rst-ui.png diff --git a/static/images/fan.svg b/public/images/fan.svg similarity index 100% rename from static/images/fan.svg rename to public/images/fan.svg diff --git a/static/images/feedback_cover.svg b/public/images/feedback_cover.svg similarity index 100% rename from static/images/feedback_cover.svg rename to public/images/feedback_cover.svg diff --git a/static/images/file-document-box.svg b/public/images/file-document-box.svg similarity index 100% rename from static/images/file-document-box.svg rename to public/images/file-document-box.svg diff --git a/static/images/fingerprint.svg b/public/images/fingerprint.svg similarity index 100% rename from static/images/fingerprint.svg rename to public/images/fingerprint.svg diff --git a/static/images/flash.svg b/public/images/flash.svg similarity index 100% rename from static/images/flash.svg rename to public/images/flash.svg diff --git a/static/images/folder-open.svg b/public/images/folder-open.svg similarity index 100% rename from static/images/folder-open.svg rename to public/images/folder-open.svg diff --git a/static/images/format-font.svg b/public/images/format-font.svg similarity index 100% rename from static/images/format-font.svg rename to public/images/format-font.svg diff --git a/static/images/fs3000.jpg b/public/images/fs3000.jpg similarity index 100% rename from static/images/fs3000.jpg rename to public/images/fs3000.jpg diff --git a/static/images/function.svg b/public/images/function.svg similarity index 100% rename from static/images/function.svg rename to public/images/function.svg diff --git a/content/components/images/garage-variant.svg b/public/images/garage-variant.svg similarity index 100% rename from content/components/images/garage-variant.svg rename to public/images/garage-variant.svg diff --git a/static/images/gcja5.svg b/public/images/gcja5.svg similarity index 100% rename from static/images/gcja5.svg rename to public/images/gcja5.svg diff --git a/static/images/gdk101.jpg b/public/images/gdk101.jpg similarity index 100% rename from static/images/gdk101.jpg rename to public/images/gdk101.jpg diff --git a/static/images/gl_r01.jpg b/public/images/gl_r01.jpg similarity index 100% rename from static/images/gl_r01.jpg rename to public/images/gl_r01.jpg diff --git a/static/images/gp2y1010au0f.png b/public/images/gp2y1010au0f.png similarity index 100% rename from static/images/gp2y1010au0f.png rename to public/images/gp2y1010au0f.png diff --git a/static/images/gp8403.svg b/public/images/gp8403.svg similarity index 100% rename from static/images/gp8403.svg rename to public/images/gp8403.svg diff --git a/content/images/gpio-ui.png b/public/images/gpio-ui.png similarity index 100% rename from content/images/gpio-ui.png rename to public/images/gpio-ui.png diff --git a/static/images/gpio.svg b/public/images/gpio.svg similarity index 100% rename from static/images/gpio.svg rename to public/images/gpio.svg diff --git a/static/images/graphical_display_menu.png b/public/images/graphical_display_menu.png similarity index 100% rename from static/images/graphical_display_menu.png rename to public/images/graphical_display_menu.png diff --git a/static/images/grove-gas-mc-v2.png b/public/images/grove-gas-mc-v2.png similarity index 100% rename from static/images/grove-gas-mc-v2.png rename to public/images/grove-gas-mc-v2.png diff --git a/static/images/grove_tb6612fng.jpg b/public/images/grove_tb6612fng.jpg similarity index 100% rename from static/images/grove_tb6612fng.jpg rename to public/images/grove_tb6612fng.jpg diff --git a/static/images/growatt.jpg b/public/images/growatt.jpg similarity index 100% rename from static/images/growatt.jpg rename to public/images/growatt.jpg diff --git a/content/images/haier-climate.jpg b/public/images/haier-climate.jpg similarity index 100% rename from content/images/haier-climate.jpg rename to public/images/haier-climate.jpg diff --git a/static/images/haier.svg b/public/images/haier.svg similarity index 100% rename from static/images/haier.svg rename to public/images/haier.svg diff --git a/static/images/havellsgti5000d_s.jpg b/public/images/havellsgti5000d_s.jpg similarity index 100% rename from static/images/havellsgti5000d_s.jpg rename to public/images/havellsgti5000d_s.jpg diff --git a/static/images/hbridge-relay.jpg b/public/images/hbridge-relay.jpg similarity index 100% rename from static/images/hbridge-relay.jpg rename to public/images/hbridge-relay.jpg diff --git a/static/images/hc8.png b/public/images/hc8.png similarity index 100% rename from static/images/hc8.png rename to public/images/hc8.png diff --git a/static/images/hdc1080.jpg b/public/images/hdc1080.jpg similarity index 100% rename from static/images/hdc1080.jpg rename to public/images/hdc1080.jpg diff --git a/static/images/hdc2010.png b/public/images/hdc2010.png similarity index 100% rename from static/images/hdc2010.png rename to public/images/hdc2010.png diff --git a/static/images/he60r.jpg b/public/images/he60r.jpg similarity index 100% rename from static/images/he60r.jpg rename to public/images/he60r.jpg diff --git a/content/components/images/head-lightbulb-outline.svg b/public/images/head-lightbulb-outline.svg similarity index 100% rename from content/components/images/head-lightbulb-outline.svg rename to public/images/head-lightbulb-outline.svg diff --git a/static/images/hero.png b/public/images/hero.png similarity index 100% rename from static/images/hero.png rename to public/images/hero.png diff --git a/static/images/high-voltage-warning.svg b/public/images/high-voltage-warning.svg similarity index 100% rename from static/images/high-voltage-warning.svg rename to public/images/high-voltage-warning.svg diff --git a/static/images/hlw8012.svg b/public/images/hlw8012.svg similarity index 100% rename from static/images/hlw8012.svg rename to public/images/hlw8012.svg diff --git a/static/images/hlw8032.png b/public/images/hlw8032.png similarity index 100% rename from static/images/hlw8032.png rename to public/images/hlw8032.png diff --git a/static/images/hm3301.jpg b/public/images/hm3301.jpg similarity index 100% rename from static/images/hm3301.jpg rename to public/images/hm3301.jpg diff --git a/static/images/hmc5883l.jpg b/public/images/hmc5883l.jpg similarity index 100% rename from static/images/hmc5883l.jpg rename to public/images/hmc5883l.jpg diff --git a/static/images/home-assistant.svg b/public/images/home-assistant.svg similarity index 100% rename from static/images/home-assistant.svg rename to public/images/home-assistant.svg diff --git a/static/images/honeywellabp.jpg b/public/images/honeywellabp.jpg similarity index 100% rename from static/images/honeywellabp.jpg rename to public/images/honeywellabp.jpg diff --git a/static/images/honeywellhih.jpg b/public/images/honeywellhih.jpg similarity index 100% rename from static/images/honeywellhih.jpg rename to public/images/honeywellhih.jpg diff --git a/static/images/host.svg b/public/images/host.svg similarity index 100% rename from static/images/host.svg rename to public/images/host.svg diff --git a/static/images/hotel.svg b/public/images/hotel.svg similarity index 100% rename from static/images/hotel.svg rename to public/images/hotel.svg diff --git a/static/images/hrxl_maxsonar_wr.jpg b/public/images/hrxl_maxsonar_wr.jpg similarity index 100% rename from static/images/hrxl_maxsonar_wr.jpg rename to public/images/hrxl_maxsonar_wr.jpg diff --git a/static/images/http.svg b/public/images/http.svg similarity index 100% rename from static/images/http.svg rename to public/images/http.svg diff --git a/static/images/htu21d.jpg b/public/images/htu21d.jpg similarity index 100% rename from static/images/htu21d.jpg rename to public/images/htu21d.jpg diff --git a/static/images/htu31d.jpg b/public/images/htu31d.jpg similarity index 100% rename from static/images/htu31d.jpg rename to public/images/htu31d.jpg diff --git a/static/images/hub75.svg b/public/images/hub75.svg similarity index 100% rename from static/images/hub75.svg rename to public/images/hub75.svg diff --git a/static/images/hx711.jpg b/public/images/hx711.jpg similarity index 100% rename from static/images/hx711.jpg rename to public/images/hx711.jpg diff --git a/static/images/hydreon_rg9.jpg b/public/images/hydreon_rg9.jpg similarity index 100% rename from static/images/hydreon_rg9.jpg rename to public/images/hydreon_rg9.jpg diff --git a/static/images/hyt271.jpg b/public/images/hyt271.jpg similarity index 100% rename from static/images/hyt271.jpg rename to public/images/hyt271.jpg diff --git a/static/images/i2c.svg b/public/images/i2c.svg similarity index 100% rename from static/images/i2c.svg rename to public/images/i2c.svg diff --git a/static/images/i2s_audio.svg b/public/images/i2s_audio.svg similarity index 100% rename from static/images/i2s_audio.svg rename to public/images/i2s_audio.svg diff --git a/static/images/iaqcore.jpg b/public/images/iaqcore.jpg similarity index 100% rename from static/images/iaqcore.jpg rename to public/images/iaqcore.jpg diff --git a/static/images/icons/bolt.svg b/public/images/icons/bolt.svg similarity index 100% rename from static/images/icons/bolt.svg rename to public/images/icons/bolt.svg diff --git a/static/images/icons/briefcase.svg b/public/images/icons/briefcase.svg similarity index 100% rename from static/images/icons/briefcase.svg rename to public/images/icons/briefcase.svg diff --git a/static/images/icons/code.svg b/public/images/icons/code.svg similarity index 100% rename from static/images/icons/code.svg rename to public/images/icons/code.svg diff --git a/static/images/icons/comments.svg b/public/images/icons/comments.svg similarity index 100% rename from static/images/icons/comments.svg rename to public/images/icons/comments.svg diff --git a/static/images/icons/compass.svg b/public/images/icons/compass.svg similarity index 100% rename from static/images/icons/compass.svg rename to public/images/icons/compass.svg diff --git a/static/images/icons/computer.svg b/public/images/icons/computer.svg similarity index 100% rename from static/images/icons/computer.svg rename to public/images/icons/computer.svg diff --git a/static/images/icons/discord.svg b/public/images/icons/discord.svg similarity index 100% rename from static/images/icons/discord.svg rename to public/images/icons/discord.svg diff --git a/static/images/icons/edit.svg b/public/images/icons/edit.svg similarity index 100% rename from static/images/icons/edit.svg rename to public/images/icons/edit.svg diff --git a/static/images/icons/github.svg b/public/images/icons/github.svg similarity index 100% rename from static/images/icons/github.svg rename to public/images/icons/github.svg diff --git a/static/images/icons/history.svg b/public/images/icons/history.svg similarity index 100% rename from static/images/icons/history.svg rename to public/images/icons/history.svg diff --git a/static/images/icons/home-assistant.svg b/public/images/icons/home-assistant.svg similarity index 100% rename from static/images/icons/home-assistant.svg rename to public/images/icons/home-assistant.svg diff --git a/static/images/icons/home.svg b/public/images/icons/home.svg similarity index 100% rename from static/images/icons/home.svg rename to public/images/icons/home.svg diff --git a/static/images/icons/industry.svg b/public/images/icons/industry.svg similarity index 100% rename from static/images/icons/industry.svg rename to public/images/icons/industry.svg diff --git a/static/images/icons/kitchen-set.svg b/public/images/icons/kitchen-set.svg similarity index 100% rename from static/images/icons/kitchen-set.svg rename to public/images/icons/kitchen-set.svg diff --git a/static/images/icons/list.svg b/public/images/icons/list.svg similarity index 100% rename from static/images/icons/list.svg rename to public/images/icons/list.svg diff --git a/static/images/icons/magic.svg b/public/images/icons/magic.svg similarity index 100% rename from static/images/icons/magic.svg rename to public/images/icons/magic.svg diff --git a/static/images/icons/microchip.svg b/public/images/icons/microchip.svg similarity index 100% rename from static/images/icons/microchip.svg rename to public/images/icons/microchip.svg diff --git a/static/images/icons/netlify-badge-color-accent.svg b/public/images/icons/netlify-badge-color-accent.svg similarity index 100% rename from static/images/icons/netlify-badge-color-accent.svg rename to public/images/icons/netlify-badge-color-accent.svg diff --git a/static/images/icons/ohf-logo-on-dark.svg b/public/images/icons/ohf-logo-on-dark.svg similarity index 100% rename from static/images/icons/ohf-logo-on-dark.svg rename to public/images/icons/ohf-logo-on-dark.svg diff --git a/static/images/icons/ohf-logo-on-light.svg b/public/images/icons/ohf-logo-on-light.svg similarity index 100% rename from static/images/icons/ohf-logo-on-light.svg rename to public/images/icons/ohf-logo-on-light.svg diff --git a/static/images/icons/print.svg b/public/images/icons/print.svg similarity index 100% rename from static/images/icons/print.svg rename to public/images/icons/print.svg diff --git a/static/images/icons/puzzle-piece.svg b/public/images/icons/puzzle-piece.svg similarity index 100% rename from static/images/icons/puzzle-piece.svg rename to public/images/icons/puzzle-piece.svg diff --git a/static/images/icons/raspberry-pi.svg b/public/images/icons/raspberry-pi.svg similarity index 100% rename from static/images/icons/raspberry-pi.svg rename to public/images/icons/raspberry-pi.svg diff --git a/static/images/icons/shield-alt.svg b/public/images/icons/shield-alt.svg similarity index 100% rename from static/images/icons/shield-alt.svg rename to public/images/icons/shield-alt.svg diff --git a/static/images/icons/terminal.svg b/public/images/icons/terminal.svg similarity index 100% rename from static/images/icons/terminal.svg rename to public/images/icons/terminal.svg diff --git a/static/images/icons/user-cog.svg b/public/images/icons/user-cog.svg similarity index 100% rename from static/images/icons/user-cog.svg rename to public/images/icons/user-cog.svg diff --git a/static/images/icons/wifi.svg b/public/images/icons/wifi.svg similarity index 100% rename from static/images/icons/wifi.svg rename to public/images/icons/wifi.svg diff --git a/static/images/ili9341.jpg b/public/images/ili9341.jpg similarity index 100% rename from static/images/ili9341.jpg rename to public/images/ili9341.jpg diff --git a/content/components/images/ili9341.svg b/public/images/ili9341.svg similarity index 100% rename from content/components/images/ili9341.svg rename to public/images/ili9341.svg diff --git a/content/components/images/ili9342.svg b/public/images/ili9342.svg similarity index 100% rename from content/components/images/ili9342.svg rename to public/images/ili9342.svg diff --git a/content/components/images/ili9481.svg b/public/images/ili9481.svg similarity index 100% rename from content/components/images/ili9481.svg rename to public/images/ili9481.svg diff --git a/static/images/ili9488.svg b/public/images/ili9488.svg similarity index 100% rename from static/images/ili9488.svg rename to public/images/ili9488.svg diff --git a/content/components/images/image-multiple-outline.svg b/public/images/image-multiple-outline.svg similarity index 100% rename from content/components/images/image-multiple-outline.svg rename to public/images/image-multiple-outline.svg diff --git a/static/images/image-outline.svg b/public/images/image-outline.svg similarity index 100% rename from static/images/image-outline.svg rename to public/images/image-outline.svg diff --git a/static/images/image-sync-outline.svg b/public/images/image-sync-outline.svg similarity index 100% rename from static/images/image-sync-outline.svg rename to public/images/image-sync-outline.svg diff --git a/static/images/improv-social.png b/public/images/improv-social.png similarity index 100% rename from static/images/improv-social.png rename to public/images/improv-social.png diff --git a/static/images/improv.svg b/public/images/improv.svg similarity index 100% rename from static/images/improv.svg rename to public/images/improv.svg diff --git a/static/images/ina219.jpg b/public/images/ina219.jpg similarity index 100% rename from static/images/ina219.jpg rename to public/images/ina219.jpg diff --git a/static/images/ina226.jpg b/public/images/ina226.jpg similarity index 100% rename from static/images/ina226.jpg rename to public/images/ina226.jpg diff --git a/static/images/ina228.jpg b/public/images/ina228.jpg similarity index 100% rename from static/images/ina228.jpg rename to public/images/ina228.jpg diff --git a/static/images/ina260.jpg b/public/images/ina260.jpg similarity index 100% rename from static/images/ina260.jpg rename to public/images/ina260.jpg diff --git a/static/images/ina2xx.jpg b/public/images/ina2xx.jpg similarity index 100% rename from static/images/ina2xx.jpg rename to public/images/ina2xx.jpg diff --git a/static/images/ina3221.jpg b/public/images/ina3221.jpg similarity index 100% rename from static/images/ina3221.jpg rename to public/images/ina3221.jpg diff --git a/static/images/indicator.jpg b/public/images/indicator.jpg similarity index 100% rename from static/images/indicator.jpg rename to public/images/indicator.jpg diff --git a/static/images/inkbird_isbth1_mini.jpg b/public/images/inkbird_isbth1_mini.jpg similarity index 100% rename from static/images/inkbird_isbth1_mini.jpg rename to public/images/inkbird_isbth1_mini.jpg diff --git a/static/images/inkplate6.jpg b/public/images/inkplate6.jpg similarity index 100% rename from static/images/inkplate6.jpg rename to public/images/inkplate6.jpg diff --git a/static/images/jsn-sr04t-v3.jpg b/public/images/jsn-sr04t-v3.jpg similarity index 100% rename from static/images/jsn-sr04t-v3.jpg rename to public/images/jsn-sr04t-v3.jpg diff --git a/content/components/images/json.svg b/public/images/json.svg similarity index 100% rename from content/components/images/json.svg rename to public/images/json.svg diff --git a/static/images/jumper-wires.jpg b/public/images/jumper-wires.jpg similarity index 100% rename from static/images/jumper-wires.jpg rename to public/images/jumper-wires.jpg diff --git a/static/images/kamstrup_kmp.jpg b/public/images/kamstrup_kmp.jpg similarity index 100% rename from static/images/kamstrup_kmp.jpg rename to public/images/kamstrup_kmp.jpg diff --git a/static/images/kmeteriso.jpg b/public/images/kmeteriso.jpg similarity index 100% rename from static/images/kmeteriso.jpg rename to public/images/kmeteriso.jpg diff --git a/static/images/kuntze.jpg b/public/images/kuntze.jpg similarity index 100% rename from static/images/kuntze.jpg rename to public/images/kuntze.jpg diff --git a/static/images/language-cpp.svg b/public/images/language-cpp.svg similarity index 100% rename from static/images/language-cpp.svg rename to public/images/language-cpp.svg diff --git a/static/images/lc709203f.jpg b/public/images/lc709203f.jpg similarity index 100% rename from static/images/lc709203f.jpg rename to public/images/lc709203f.jpg diff --git a/static/images/lcd.jpg b/public/images/lcd.jpg similarity index 100% rename from static/images/lcd.jpg rename to public/images/lcd.jpg diff --git a/static/images/lcd_menu.png b/public/images/lcd_menu.png similarity index 100% rename from static/images/lcd_menu.png rename to public/images/lcd_menu.png diff --git a/static/images/ld2410.jpg b/public/images/ld2410.jpg similarity index 100% rename from static/images/ld2410.jpg rename to public/images/ld2410.jpg diff --git a/static/images/ld2412.jpg b/public/images/ld2412.jpg similarity index 100% rename from static/images/ld2412.jpg rename to public/images/ld2412.jpg diff --git a/static/images/ld2420.jpg b/public/images/ld2420.jpg similarity index 100% rename from static/images/ld2420.jpg rename to public/images/ld2420.jpg diff --git a/static/images/ld2450.png b/public/images/ld2450.png similarity index 100% rename from static/images/ld2450.png rename to public/images/ld2450.png diff --git a/static/images/ldo.svg b/public/images/ldo.svg similarity index 100% rename from static/images/ldo.svg rename to public/images/ldo.svg diff --git a/content/components/images/leak-detector-m5stickC_main_index.jpg b/public/images/leak-detector-m5stickC_main_index.jpg similarity index 100% rename from content/components/images/leak-detector-m5stickC_main_index.jpg rename to public/images/leak-detector-m5stickC_main_index.jpg diff --git a/static/images/led-on.svg b/public/images/led-on.svg similarity index 100% rename from static/images/led-on.svg rename to public/images/led-on.svg diff --git a/static/images/libretiny.svg b/public/images/libretiny.svg similarity index 100% rename from static/images/libretiny.svg rename to public/images/libretiny.svg diff --git a/static/images/lightbulb.svg b/public/images/lightbulb.svg similarity index 100% rename from static/images/lightbulb.svg rename to public/images/lightbulb.svg diff --git a/static/images/lilygo_t5_47_touch.jpg b/public/images/lilygo_t5_47_touch.jpg similarity index 100% rename from static/images/lilygo_t5_47_touch.jpg rename to public/images/lilygo_t5_47_touch.jpg diff --git a/static/images/link.svg b/public/images/link.svg similarity index 100% rename from static/images/link.svg rename to public/images/link.svg diff --git a/static/images/lm75b.jpg b/public/images/lm75b.jpg similarity index 100% rename from static/images/lm75b.jpg rename to public/images/lm75b.jpg diff --git a/static/images/ln882x.svg b/public/images/ln882x.svg similarity index 100% rename from static/images/ln882x.svg rename to public/images/ln882x.svg diff --git a/static/images/logo-docs.svg b/public/images/logo-docs.svg similarity index 100% rename from static/images/logo-docs.svg rename to public/images/logo-docs.svg diff --git a/static/images/logo-text-on-dark.svg b/public/images/logo-text-on-dark.svg similarity index 100% rename from static/images/logo-text-on-dark.svg rename to public/images/logo-text-on-dark.svg diff --git a/static/images/logo-text.svg b/public/images/logo-text.svg similarity index 100% rename from static/images/logo-text.svg rename to public/images/logo-text.svg diff --git a/static/images/logo.png b/public/images/logo.png similarity index 100% rename from static/images/logo.png rename to public/images/logo.png diff --git a/static/images/logo.svg b/public/images/logo.svg similarity index 100% rename from static/images/logo.svg rename to public/images/logo.svg diff --git a/static/images/lps22.webp b/public/images/lps22.webp similarity index 100% rename from static/images/lps22.webp rename to public/images/lps22.webp diff --git a/static/images/ltr-ps.jpg b/public/images/ltr-ps.jpg similarity index 100% rename from static/images/ltr-ps.jpg rename to public/images/ltr-ps.jpg diff --git a/static/images/ltr303.jpg b/public/images/ltr303.jpg similarity index 100% rename from static/images/ltr303.jpg rename to public/images/ltr303.jpg diff --git a/static/images/ltr329.jpg b/public/images/ltr329.jpg similarity index 100% rename from static/images/ltr329.jpg rename to public/images/ltr329.jpg diff --git a/static/images/ltr390.jpg b/public/images/ltr390.jpg similarity index 100% rename from static/images/ltr390.jpg rename to public/images/ltr390.jpg diff --git a/static/images/ltr501.jpg b/public/images/ltr501.jpg similarity index 100% rename from static/images/ltr501.jpg rename to public/images/ltr501.jpg diff --git a/content/images/lvgl-hello.png b/public/images/lvgl-hello.png similarity index 100% rename from content/images/lvgl-hello.png rename to public/images/lvgl-hello.png diff --git a/static/images/lvgl.png b/public/images/lvgl.png similarity index 100% rename from static/images/lvgl.png rename to public/images/lvgl.png diff --git a/static/images/lvgl_c_bns.png b/public/images/lvgl_c_bns.png similarity index 100% rename from static/images/lvgl_c_bns.png rename to public/images/lvgl_c_bns.png diff --git a/static/images/lvgl_c_lig.png b/public/images/lvgl_c_lig.png similarity index 100% rename from static/images/lvgl_c_lig.png rename to public/images/lvgl_c_lig.png diff --git a/static/images/lvgl_c_num.png b/public/images/lvgl_c_num.png similarity index 100% rename from static/images/lvgl_c_num.png rename to public/images/lvgl_c_num.png diff --git a/static/images/lvgl_c_sel.png b/public/images/lvgl_c_sel.png similarity index 100% rename from static/images/lvgl_c_sel.png rename to public/images/lvgl_c_sel.png diff --git a/static/images/lvgl_c_swi.png b/public/images/lvgl_c_swi.png similarity index 100% rename from static/images/lvgl_c_swi.png rename to public/images/lvgl_c_swi.png diff --git a/static/images/lvgl_c_txt.png b/public/images/lvgl_c_txt.png similarity index 100% rename from static/images/lvgl_c_txt.png rename to public/images/lvgl_c_txt.png diff --git a/static/images/lvgl_cook_volume.png b/public/images/lvgl_cook_volume.png similarity index 100% rename from static/images/lvgl_cook_volume.png rename to public/images/lvgl_cook_volume.png diff --git a/static/images/lvgl_switch.png b/public/images/lvgl_switch.png similarity index 100% rename from static/images/lvgl_switch.png rename to public/images/lvgl_switch.png diff --git a/static/images/m5stack_8angle.png b/public/images/m5stack_8angle.png similarity index 100% rename from static/images/m5stack_8angle.png rename to public/images/m5stack_8angle.png diff --git a/static/images/made-for-esphome-black-on-transparent.png b/public/images/made-for-esphome-black-on-transparent.png similarity index 100% rename from static/images/made-for-esphome-black-on-transparent.png rename to public/images/made-for-esphome-black-on-transparent.png diff --git a/static/images/made-for-esphome-black-on-transparent.svg b/public/images/made-for-esphome-black-on-transparent.svg similarity index 100% rename from static/images/made-for-esphome-black-on-transparent.svg rename to public/images/made-for-esphome-black-on-transparent.svg diff --git a/static/images/made-for-esphome-black-on-white.png b/public/images/made-for-esphome-black-on-white.png similarity index 100% rename from static/images/made-for-esphome-black-on-white.png rename to public/images/made-for-esphome-black-on-white.png diff --git a/static/images/made-for-esphome-black-on-white.svg b/public/images/made-for-esphome-black-on-white.svg similarity index 100% rename from static/images/made-for-esphome-black-on-white.svg rename to public/images/made-for-esphome-black-on-white.svg diff --git a/static/images/made-for-esphome-white-on-black.png b/public/images/made-for-esphome-white-on-black.png similarity index 100% rename from static/images/made-for-esphome-white-on-black.png rename to public/images/made-for-esphome-white-on-black.png diff --git a/static/images/made-for-esphome-white-on-black.svg b/public/images/made-for-esphome-white-on-black.svg similarity index 100% rename from static/images/made-for-esphome-white-on-black.svg rename to public/images/made-for-esphome-white-on-black.svg diff --git a/static/images/made-for-esphome-white-on-transparent.png b/public/images/made-for-esphome-white-on-transparent.png similarity index 100% rename from static/images/made-for-esphome-white-on-transparent.png rename to public/images/made-for-esphome-white-on-transparent.png diff --git a/static/images/made-for-esphome-white-on-transparent.svg b/public/images/made-for-esphome-white-on-transparent.svg similarity index 100% rename from static/images/made-for-esphome-white-on-transparent.svg rename to public/images/made-for-esphome-white-on-transparent.svg diff --git a/static/images/mapping.svg b/public/images/mapping.svg similarity index 100% rename from static/images/mapping.svg rename to public/images/mapping.svg diff --git a/static/images/matrix_keypad.jpg b/public/images/matrix_keypad.jpg similarity index 100% rename from static/images/matrix_keypad.jpg rename to public/images/matrix_keypad.jpg diff --git a/static/images/max17043.jpg b/public/images/max17043.jpg similarity index 100% rename from static/images/max17043.jpg rename to public/images/max17043.jpg diff --git a/static/images/max31855.jpg b/public/images/max31855.jpg similarity index 100% rename from static/images/max31855.jpg rename to public/images/max31855.jpg diff --git a/static/images/max31856.jpg b/public/images/max31856.jpg similarity index 100% rename from static/images/max31856.jpg rename to public/images/max31856.jpg diff --git a/static/images/max31865.jpg b/public/images/max31865.jpg similarity index 100% rename from static/images/max31865.jpg rename to public/images/max31865.jpg diff --git a/static/images/max44009.svg b/public/images/max44009.svg similarity index 100% rename from static/images/max44009.svg rename to public/images/max44009.svg diff --git a/static/images/max6675.jpg b/public/images/max6675.jpg similarity index 100% rename from static/images/max6675.jpg rename to public/images/max6675.jpg diff --git a/static/images/max6956.jpg b/public/images/max6956.jpg similarity index 100% rename from static/images/max6956.jpg rename to public/images/max6956.jpg diff --git a/static/images/max7219.jpg b/public/images/max7219.jpg similarity index 100% rename from static/images/max7219.jpg rename to public/images/max7219.jpg diff --git a/static/images/max7219digit.jpg b/public/images/max7219digit.jpg similarity index 100% rename from static/images/max7219digit.jpg rename to public/images/max7219digit.jpg diff --git a/static/images/max9611.jpg b/public/images/max9611.jpg similarity index 100% rename from static/images/max9611.jpg rename to public/images/max9611.jpg diff --git a/static/images/mcp230xx.svg b/public/images/mcp230xx.svg similarity index 100% rename from static/images/mcp230xx.svg rename to public/images/mcp230xx.svg diff --git a/content/components/images/mcp23sxx.svg b/public/images/mcp23sxx.svg similarity index 100% rename from content/components/images/mcp23sxx.svg rename to public/images/mcp23sxx.svg diff --git a/content/components/images/mcp2515.svg b/public/images/mcp2515.svg similarity index 100% rename from content/components/images/mcp2515.svg rename to public/images/mcp2515.svg diff --git a/static/images/mcp3008.jpg b/public/images/mcp3008.jpg similarity index 100% rename from static/images/mcp3008.jpg rename to public/images/mcp3008.jpg diff --git a/static/images/mcp3204.jpg b/public/images/mcp3204.jpg similarity index 100% rename from static/images/mcp3204.jpg rename to public/images/mcp3204.jpg diff --git a/static/images/mcp3221.png b/public/images/mcp3221.png similarity index 100% rename from static/images/mcp3221.png rename to public/images/mcp3221.png diff --git a/static/images/mcp4461.jpg b/public/images/mcp4461.jpg similarity index 100% rename from static/images/mcp4461.jpg rename to public/images/mcp4461.jpg diff --git a/static/images/mcp4725.jpg b/public/images/mcp4725.jpg similarity index 100% rename from static/images/mcp4725.jpg rename to public/images/mcp4725.jpg diff --git a/static/images/mcp4728.jpg b/public/images/mcp4728.jpg similarity index 100% rename from static/images/mcp4728.jpg rename to public/images/mcp4728.jpg diff --git a/static/images/mcp47a1.svg b/public/images/mcp47a1.svg similarity index 100% rename from static/images/mcp47a1.svg rename to public/images/mcp47a1.svg diff --git a/static/images/mcp9600.jpg b/public/images/mcp9600.jpg similarity index 100% rename from static/images/mcp9600.jpg rename to public/images/mcp9600.jpg diff --git a/static/images/mcp9808.jpg b/public/images/mcp9808.jpg similarity index 100% rename from static/images/mcp9808.jpg rename to public/images/mcp9808.jpg diff --git a/static/images/mhz19.jpg b/public/images/mhz19.jpg similarity index 100% rename from static/images/mhz19.jpg rename to public/images/mhz19.jpg diff --git a/static/images/micronova.svg b/public/images/micronova.svg similarity index 100% rename from static/images/micronova.svg rename to public/images/micronova.svg diff --git a/static/images/microphone.svg b/public/images/microphone.svg similarity index 100% rename from static/images/microphone.svg rename to public/images/microphone.svg diff --git a/static/images/mics_4514.jpg b/public/images/mics_4514.jpg similarity index 100% rename from static/images/mics_4514.jpg rename to public/images/mics_4514.jpg diff --git a/static/images/midea.svg b/public/images/midea.svg similarity index 100% rename from static/images/midea.svg rename to public/images/midea.svg diff --git a/static/images/mixer.svg b/public/images/mixer.svg similarity index 100% rename from static/images/mixer.svg rename to public/images/mixer.svg diff --git a/static/images/mlx90393.jpg b/public/images/mlx90393.jpg similarity index 100% rename from static/images/mlx90393.jpg rename to public/images/mlx90393.jpg diff --git a/static/images/mlx90614.jpg b/public/images/mlx90614.jpg similarity index 100% rename from static/images/mlx90614.jpg rename to public/images/mlx90614.jpg diff --git a/static/images/mmc5603.jpg b/public/images/mmc5603.jpg similarity index 100% rename from static/images/mmc5603.jpg rename to public/images/mmc5603.jpg diff --git a/static/images/mmc5983.jpg b/public/images/mmc5983.jpg similarity index 100% rename from static/images/mmc5983.jpg rename to public/images/mmc5983.jpg diff --git a/static/images/modbus.png b/public/images/modbus.png similarity index 100% rename from static/images/modbus.png rename to public/images/modbus.png diff --git a/static/images/mopeka_pro_check.jpg b/public/images/mopeka_pro_check.jpg similarity index 100% rename from static/images/mopeka_pro_check.jpg rename to public/images/mopeka_pro_check.jpg diff --git a/static/images/mopeka_std_check.jpg b/public/images/mopeka_std_check.jpg similarity index 100% rename from static/images/mopeka_std_check.jpg rename to public/images/mopeka_std_check.jpg diff --git a/static/images/motor.png b/public/images/motor.png similarity index 100% rename from static/images/motor.png rename to public/images/motor.png diff --git a/static/images/mpl3115a2.jpg b/public/images/mpl3115a2.jpg similarity index 100% rename from static/images/mpl3115a2.jpg rename to public/images/mpl3115a2.jpg diff --git a/static/images/mpr121.jpg b/public/images/mpr121.jpg similarity index 100% rename from static/images/mpr121.jpg rename to public/images/mpr121.jpg diff --git a/static/images/mpu6050.jpg b/public/images/mpu6050.jpg similarity index 100% rename from static/images/mpu6050.jpg rename to public/images/mpu6050.jpg diff --git a/static/images/mpu6886.jpg b/public/images/mpu6886.jpg similarity index 100% rename from static/images/mpu6886.jpg rename to public/images/mpu6886.jpg diff --git a/static/images/mqtt.png b/public/images/mqtt.png similarity index 100% rename from static/images/mqtt.png rename to public/images/mqtt.png diff --git a/static/images/ms5611.jpg b/public/images/ms5611.jpg similarity index 100% rename from static/images/ms5611.jpg rename to public/images/ms5611.jpg diff --git a/static/images/ms8607.jpg b/public/images/ms8607.jpg similarity index 100% rename from static/images/ms8607.jpg rename to public/images/ms8607.jpg diff --git a/static/images/msa301.jpg b/public/images/msa301.jpg similarity index 100% rename from static/images/msa301.jpg rename to public/images/msa301.jpg diff --git a/static/images/msa311.jpg b/public/images/msa311.jpg similarity index 100% rename from static/images/msa311.jpg rename to public/images/msa311.jpg diff --git a/static/images/my9231.svg b/public/images/my9231.svg similarity index 100% rename from static/images/my9231.svg rename to public/images/my9231.svg diff --git a/static/images/nau7802.jpg b/public/images/nau7802.jpg similarity index 100% rename from static/images/nau7802.jpg rename to public/images/nau7802.jpg diff --git a/static/images/network-wifi.svg b/public/images/network-wifi.svg similarity index 100% rename from static/images/network-wifi.svg rename to public/images/network-wifi.svg diff --git a/static/images/new-box.svg b/public/images/new-box.svg similarity index 100% rename from static/images/new-box.svg rename to public/images/new-box.svg diff --git a/static/images/nextion.jpg b/public/images/nextion.jpg similarity index 100% rename from static/images/nextion.jpg rename to public/images/nextion.jpg diff --git a/static/images/nfc.png b/public/images/nfc.png similarity index 100% rename from static/images/nfc.png rename to public/images/nfc.png diff --git a/static/images/npi19.jpg b/public/images/npi19.jpg similarity index 100% rename from static/images/npi19.jpg rename to public/images/npi19.jpg diff --git a/static/images/nrf52.svg b/public/images/nrf52.svg similarity index 100% rename from static/images/nrf52.svg rename to public/images/nrf52.svg diff --git a/static/images/ntc.jpg b/public/images/ntc.jpg similarity index 100% rename from static/images/ntc.jpg rename to public/images/ntc.jpg diff --git a/static/images/omega.svg b/public/images/omega.svg similarity index 100% rename from static/images/omega.svg rename to public/images/omega.svg diff --git a/static/images/one-wire.svg b/public/images/one-wire.svg similarity index 100% rename from static/images/one-wire.svg rename to public/images/one-wire.svg diff --git a/static/images/opentherm.png b/public/images/opentherm.png similarity index 100% rename from static/images/opentherm.png rename to public/images/opentherm.png diff --git a/static/images/openthread.png b/public/images/openthread.png similarity index 100% rename from static/images/openthread.png rename to public/images/openthread.png diff --git a/static/images/opt3001.jpg b/public/images/opt3001.jpg similarity index 100% rename from static/images/opt3001.jpg rename to public/images/opt3001.jpg diff --git a/content/images/output-ui.png b/public/images/output-ui.png similarity index 100% rename from content/images/output-ui.png rename to public/images/output-ui.png diff --git a/static/images/packet_transport.svg b/public/images/packet_transport.svg similarity index 100% rename from static/images/packet_transport.svg rename to public/images/packet_transport.svg diff --git a/static/images/pca6416a.svg b/public/images/pca6416a.svg similarity index 100% rename from static/images/pca6416a.svg rename to public/images/pca6416a.svg diff --git a/static/images/pca9554a.jpg b/public/images/pca9554a.jpg similarity index 100% rename from static/images/pca9554a.jpg rename to public/images/pca9554a.jpg diff --git a/static/images/pca9685.jpg b/public/images/pca9685.jpg similarity index 100% rename from static/images/pca9685.jpg rename to public/images/pca9685.jpg diff --git a/static/images/pcd8544.jpg b/public/images/pcd8544.jpg similarity index 100% rename from static/images/pcd8544.jpg rename to public/images/pcd8544.jpg diff --git a/static/images/pcf8574.jpg b/public/images/pcf8574.jpg similarity index 100% rename from static/images/pcf8574.jpg rename to public/images/pcf8574.jpg diff --git a/static/images/percent.svg b/public/images/percent.svg similarity index 100% rename from static/images/percent.svg rename to public/images/percent.svg diff --git a/static/images/pipsolar.jpg b/public/images/pipsolar.jpg similarity index 100% rename from static/images/pipsolar.jpg rename to public/images/pipsolar.jpg diff --git a/static/images/pm1006.jpg b/public/images/pm1006.jpg similarity index 100% rename from static/images/pm1006.jpg rename to public/images/pm1006.jpg diff --git a/static/images/pm2005.png b/public/images/pm2005.png similarity index 100% rename from static/images/pm2005.png rename to public/images/pm2005.png diff --git a/static/images/pmsa003i.jpg b/public/images/pmsa003i.jpg similarity index 100% rename from static/images/pmsa003i.jpg rename to public/images/pmsa003i.jpg diff --git a/static/images/pmsx003.svg b/public/images/pmsx003.svg similarity index 100% rename from static/images/pmsx003.svg rename to public/images/pmsx003.svg diff --git a/static/images/pmwcs3.jpg b/public/images/pmwcs3.jpg similarity index 100% rename from static/images/pmwcs3.jpg rename to public/images/pmwcs3.jpg diff --git a/static/images/pn532.jpg b/public/images/pn532.jpg similarity index 100% rename from static/images/pn532.jpg rename to public/images/pn532.jpg diff --git a/static/images/pn7150.jpg b/public/images/pn7150.jpg similarity index 100% rename from static/images/pn7150.jpg rename to public/images/pn7150.jpg diff --git a/static/images/pn716x.jpg b/public/images/pn716x.jpg similarity index 100% rename from static/images/pn716x.jpg rename to public/images/pn716x.jpg diff --git a/static/images/power.svg b/public/images/power.svg similarity index 100% rename from static/images/power.svg rename to public/images/power.svg diff --git a/static/images/power_meter.jpg b/public/images/power_meter.jpg similarity index 100% rename from static/images/power_meter.jpg rename to public/images/power_meter.jpg diff --git a/static/images/power_settings.svg b/public/images/power_settings.svg similarity index 100% rename from static/images/power_settings.svg rename to public/images/power_settings.svg diff --git a/static/images/prometheus.svg b/public/images/prometheus.svg similarity index 100% rename from static/images/prometheus.svg rename to public/images/prometheus.svg diff --git a/static/images/psram.svg b/public/images/psram.svg similarity index 100% rename from static/images/psram.svg rename to public/images/psram.svg diff --git a/static/images/pulse.svg b/public/images/pulse.svg similarity index 100% rename from static/images/pulse.svg rename to public/images/pulse.svg diff --git a/static/images/pulses.png b/public/images/pulses.png similarity index 100% rename from static/images/pulses.png rename to public/images/pulses.png diff --git a/static/images/pwm.png b/public/images/pwm.png similarity index 100% rename from static/images/pwm.png rename to public/images/pwm.png diff --git a/static/images/pylontech.jpg b/public/images/pylontech.jpg similarity index 100% rename from static/images/pylontech.jpg rename to public/images/pylontech.jpg diff --git a/static/images/pzem-ac.jpg b/public/images/pzem-ac.jpg similarity index 100% rename from static/images/pzem-ac.jpg rename to public/images/pzem-ac.jpg diff --git a/static/images/pzem-dc.jpg b/public/images/pzem-dc.jpg similarity index 100% rename from static/images/pzem-dc.jpg rename to public/images/pzem-dc.jpg diff --git a/static/images/pzem004t.svg b/public/images/pzem004t.svg similarity index 100% rename from static/images/pzem004t.svg rename to public/images/pzem004t.svg diff --git a/static/images/qmc5883l.jpg b/public/images/qmc5883l.jpg similarity index 100% rename from static/images/qmc5883l.jpg rename to public/images/qmc5883l.jpg diff --git a/static/images/qmp6988_env3.png b/public/images/qmp6988_env3.png similarity index 100% rename from static/images/qmp6988_env3.png rename to public/images/qmp6988_env3.png diff --git a/static/images/qr-code.svg b/public/images/qr-code.svg similarity index 100% rename from static/images/qr-code.svg rename to public/images/qr-code.svg diff --git a/static/images/qwiic_pir.jpg b/public/images/qwiic_pir.jpg similarity index 100% rename from static/images/qwiic_pir.jpg rename to public/images/qwiic_pir.jpg diff --git a/static/images/radio-tower.svg b/public/images/radio-tower.svg similarity index 100% rename from static/images/radio-tower.svg rename to public/images/radio-tower.svg diff --git a/static/images/radon_eye_logo.png b/public/images/radon_eye_logo.png similarity index 100% rename from static/images/radon_eye_logo.png rename to public/images/radon_eye_logo.png diff --git a/static/images/rc522.jpg b/public/images/rc522.jpg similarity index 100% rename from static/images/rc522.jpg rename to public/images/rc522.jpg diff --git a/static/images/rd03d.webp b/public/images/rd03d.webp similarity index 100% rename from static/images/rd03d.webp rename to public/images/rd03d.webp diff --git a/static/images/rdm6300.jpg b/public/images/rdm6300.jpg similarity index 100% rename from static/images/rdm6300.jpg rename to public/images/rdm6300.jpg diff --git a/static/images/remote.svg b/public/images/remote.svg similarity index 100% rename from static/images/remote.svg rename to public/images/remote.svg diff --git a/static/images/resol_deltasol_bs_plus.jpg b/public/images/resol_deltasol_bs_plus.jpg similarity index 100% rename from static/images/resol_deltasol_bs_plus.jpg rename to public/images/resol_deltasol_bs_plus.jpg diff --git a/static/images/restart-alert.svg b/public/images/restart-alert.svg similarity index 100% rename from static/images/restart-alert.svg rename to public/images/restart-alert.svg diff --git a/static/images/restart.svg b/public/images/restart.svg similarity index 100% rename from static/images/restart.svg rename to public/images/restart.svg diff --git a/static/images/rf_bridge.jpg b/public/images/rf_bridge.jpg similarity index 100% rename from static/images/rf_bridge.jpg rename to public/images/rf_bridge.jpg diff --git a/static/images/rgb.png b/public/images/rgb.png similarity index 100% rename from static/images/rgb.png rename to public/images/rgb.png diff --git a/static/images/rgbw.png b/public/images/rgbw.png similarity index 100% rename from static/images/rgbw.png rename to public/images/rgbw.png diff --git a/static/images/rotary_encoder.jpg b/public/images/rotary_encoder.jpg similarity index 100% rename from static/images/rotary_encoder.jpg rename to public/images/rotary_encoder.jpg diff --git a/static/images/rp2040.svg b/public/images/rp2040.svg similarity index 100% rename from static/images/rp2040.svg rename to public/images/rp2040.svg diff --git a/static/images/rs485.jpg b/public/images/rs485.jpg similarity index 100% rename from static/images/rs485.jpg rename to public/images/rs485.jpg diff --git a/static/images/rtl87xx.svg b/public/images/rtl87xx.svg similarity index 100% rename from static/images/rtl87xx.svg rename to public/images/rtl87xx.svg diff --git a/static/images/ruuvitag.jpg b/public/images/ruuvitag.jpg similarity index 100% rename from static/images/ruuvitag.jpg rename to public/images/ruuvitag.jpg diff --git a/content/images/safemode-ui.png b/public/images/safemode-ui.png similarity index 100% rename from content/images/safemode-ui.png rename to public/images/safemode-ui.png diff --git a/static/images/scd30.jpg b/public/images/scd30.jpg similarity index 100% rename from static/images/scd30.jpg rename to public/images/scd30.jpg diff --git a/static/images/scd4x.jpg b/public/images/scd4x.jpg similarity index 100% rename from static/images/scd4x.jpg rename to public/images/scd4x.jpg diff --git a/static/images/sdl.png b/public/images/sdl.png similarity index 100% rename from static/images/sdl.png rename to public/images/sdl.png diff --git a/static/images/sdm220m.jpg b/public/images/sdm220m.jpg similarity index 100% rename from static/images/sdm220m.jpg rename to public/images/sdm220m.jpg diff --git a/static/images/sdp31.jpg b/public/images/sdp31.jpg similarity index 100% rename from static/images/sdp31.jpg rename to public/images/sdp31.jpg diff --git a/static/images/sds011.jpg b/public/images/sds011.jpg similarity index 100% rename from static/images/sds011.jpg rename to public/images/sds011.jpg diff --git a/static/images/seeed-mr24hpc1.jpg b/public/images/seeed-mr24hpc1.jpg similarity index 100% rename from static/images/seeed-mr24hpc1.jpg rename to public/images/seeed-mr24hpc1.jpg diff --git a/static/images/seeed_mr60bha2.jpg b/public/images/seeed_mr60bha2.jpg similarity index 100% rename from static/images/seeed_mr60bha2.jpg rename to public/images/seeed_mr60bha2.jpg diff --git a/static/images/seeed_mr60fda2.jpg b/public/images/seeed_mr60fda2.jpg similarity index 100% rename from static/images/seeed_mr60fda2.jpg rename to public/images/seeed_mr60fda2.jpg diff --git a/static/images/seg00.svg b/public/images/seg00.svg similarity index 100% rename from static/images/seg00.svg rename to public/images/seg00.svg diff --git a/static/images/seg01.svg b/public/images/seg01.svg similarity index 100% rename from static/images/seg01.svg rename to public/images/seg01.svg diff --git a/static/images/seg02.svg b/public/images/seg02.svg similarity index 100% rename from static/images/seg02.svg rename to public/images/seg02.svg diff --git a/static/images/seg05.svg b/public/images/seg05.svg similarity index 100% rename from static/images/seg05.svg rename to public/images/seg05.svg diff --git a/static/images/seg06.svg b/public/images/seg06.svg similarity index 100% rename from static/images/seg06.svg rename to public/images/seg06.svg diff --git a/static/images/seg07.svg b/public/images/seg07.svg similarity index 100% rename from static/images/seg07.svg rename to public/images/seg07.svg diff --git a/static/images/seg08.svg b/public/images/seg08.svg similarity index 100% rename from static/images/seg08.svg rename to public/images/seg08.svg diff --git a/static/images/seg09.svg b/public/images/seg09.svg similarity index 100% rename from static/images/seg09.svg rename to public/images/seg09.svg diff --git a/static/images/seg0D.svg b/public/images/seg0D.svg similarity index 100% rename from static/images/seg0D.svg rename to public/images/seg0D.svg diff --git a/static/images/seg0E.svg b/public/images/seg0E.svg similarity index 100% rename from static/images/seg0E.svg rename to public/images/seg0E.svg diff --git a/static/images/seg10.svg b/public/images/seg10.svg similarity index 100% rename from static/images/seg10.svg rename to public/images/seg10.svg diff --git a/static/images/seg15.svg b/public/images/seg15.svg similarity index 100% rename from static/images/seg15.svg rename to public/images/seg15.svg diff --git a/static/images/seg17.svg b/public/images/seg17.svg similarity index 100% rename from static/images/seg17.svg rename to public/images/seg17.svg diff --git a/static/images/seg1C.svg b/public/images/seg1C.svg similarity index 100% rename from static/images/seg1C.svg rename to public/images/seg1C.svg diff --git a/static/images/seg1D.svg b/public/images/seg1D.svg similarity index 100% rename from static/images/seg1D.svg rename to public/images/seg1D.svg diff --git a/static/images/seg1F.svg b/public/images/seg1F.svg similarity index 100% rename from static/images/seg1F.svg rename to public/images/seg1F.svg diff --git a/static/images/seg20.svg b/public/images/seg20.svg similarity index 100% rename from static/images/seg20.svg rename to public/images/seg20.svg diff --git a/static/images/seg22.svg b/public/images/seg22.svg similarity index 100% rename from static/images/seg22.svg rename to public/images/seg22.svg diff --git a/static/images/seg27.svg b/public/images/seg27.svg similarity index 100% rename from static/images/seg27.svg rename to public/images/seg27.svg diff --git a/static/images/seg30.svg b/public/images/seg30.svg similarity index 100% rename from static/images/seg30.svg rename to public/images/seg30.svg diff --git a/static/images/seg31.svg b/public/images/seg31.svg similarity index 100% rename from static/images/seg31.svg rename to public/images/seg31.svg diff --git a/static/images/seg33.svg b/public/images/seg33.svg similarity index 100% rename from static/images/seg33.svg rename to public/images/seg33.svg diff --git a/static/images/seg37.svg b/public/images/seg37.svg similarity index 100% rename from static/images/seg37.svg rename to public/images/seg37.svg diff --git a/static/images/seg3C.svg b/public/images/seg3C.svg similarity index 100% rename from static/images/seg3C.svg rename to public/images/seg3C.svg diff --git a/static/images/seg3D.svg b/public/images/seg3D.svg similarity index 100% rename from static/images/seg3D.svg rename to public/images/seg3D.svg diff --git a/static/images/seg3E.svg b/public/images/seg3E.svg similarity index 100% rename from static/images/seg3E.svg rename to public/images/seg3E.svg diff --git a/static/images/seg3F.svg b/public/images/seg3F.svg similarity index 100% rename from static/images/seg3F.svg rename to public/images/seg3F.svg diff --git a/static/images/seg40.svg b/public/images/seg40.svg similarity index 100% rename from static/images/seg40.svg rename to public/images/seg40.svg diff --git a/static/images/seg47.svg b/public/images/seg47.svg similarity index 100% rename from static/images/seg47.svg rename to public/images/seg47.svg diff --git a/static/images/seg48.svg b/public/images/seg48.svg similarity index 100% rename from static/images/seg48.svg rename to public/images/seg48.svg diff --git a/static/images/seg49.svg b/public/images/seg49.svg similarity index 100% rename from static/images/seg49.svg rename to public/images/seg49.svg diff --git a/static/images/seg4E.svg b/public/images/seg4E.svg similarity index 100% rename from static/images/seg4E.svg rename to public/images/seg4E.svg diff --git a/static/images/seg4F.svg b/public/images/seg4F.svg similarity index 100% rename from static/images/seg4F.svg rename to public/images/seg4F.svg diff --git a/static/images/seg58.svg b/public/images/seg58.svg similarity index 100% rename from static/images/seg58.svg rename to public/images/seg58.svg diff --git a/static/images/seg5B.svg b/public/images/seg5B.svg similarity index 100% rename from static/images/seg5B.svg rename to public/images/seg5B.svg diff --git a/static/images/seg5E.svg b/public/images/seg5E.svg similarity index 100% rename from static/images/seg5E.svg rename to public/images/seg5E.svg diff --git a/static/images/seg5F.svg b/public/images/seg5F.svg similarity index 100% rename from static/images/seg5F.svg rename to public/images/seg5F.svg diff --git a/static/images/seg65.svg b/public/images/seg65.svg similarity index 100% rename from static/images/seg65.svg rename to public/images/seg65.svg diff --git a/static/images/seg67.svg b/public/images/seg67.svg similarity index 100% rename from static/images/seg67.svg rename to public/images/seg67.svg diff --git a/static/images/seg6D.svg b/public/images/seg6D.svg similarity index 100% rename from static/images/seg6D.svg rename to public/images/seg6D.svg diff --git a/static/images/seg6F.svg b/public/images/seg6F.svg similarity index 100% rename from static/images/seg6F.svg rename to public/images/seg6F.svg diff --git a/static/images/seg70.svg b/public/images/seg70.svg similarity index 100% rename from static/images/seg70.svg rename to public/images/seg70.svg diff --git a/static/images/seg73.svg b/public/images/seg73.svg similarity index 100% rename from static/images/seg73.svg rename to public/images/seg73.svg diff --git a/static/images/seg77.svg b/public/images/seg77.svg similarity index 100% rename from static/images/seg77.svg rename to public/images/seg77.svg diff --git a/static/images/seg78.svg b/public/images/seg78.svg similarity index 100% rename from static/images/seg78.svg rename to public/images/seg78.svg diff --git a/static/images/seg79.svg b/public/images/seg79.svg similarity index 100% rename from static/images/seg79.svg rename to public/images/seg79.svg diff --git a/static/images/seg7E.svg b/public/images/seg7E.svg similarity index 100% rename from static/images/seg7E.svg rename to public/images/seg7E.svg diff --git a/static/images/seg7F.svg b/public/images/seg7F.svg similarity index 100% rename from static/images/seg7F.svg rename to public/images/seg7F.svg diff --git a/static/images/seg80.svg b/public/images/seg80.svg similarity index 100% rename from static/images/seg80.svg rename to public/images/seg80.svg diff --git a/static/images/seg8E.svg b/public/images/seg8E.svg similarity index 100% rename from static/images/seg8E.svg rename to public/images/seg8E.svg diff --git a/static/images/segB0.svg b/public/images/segB0.svg similarity index 100% rename from static/images/segB0.svg rename to public/images/segB0.svg diff --git a/static/images/segFE.svg b/public/images/segFE.svg similarity index 100% rename from static/images/segFE.svg rename to public/images/segFE.svg diff --git a/static/images/selec_meter_em2m.jpg b/public/images/selec_meter_em2m.jpg similarity index 100% rename from static/images/selec_meter_em2m.jpg rename to public/images/selec_meter_em2m.jpg diff --git a/static/images/sen0321.jpg b/public/images/sen0321.jpg similarity index 100% rename from static/images/sen0321.jpg rename to public/images/sen0321.jpg diff --git a/static/images/sen21231.png b/public/images/sen21231.png similarity index 100% rename from static/images/sen21231.png rename to public/images/sen21231.png diff --git a/static/images/sen54.jpg b/public/images/sen54.jpg similarity index 100% rename from static/images/sen54.jpg rename to public/images/sen54.jpg diff --git a/static/images/senseair_s8.jpg b/public/images/senseair_s8.jpg similarity index 100% rename from static/images/senseair_s8.jpg rename to public/images/senseair_s8.jpg diff --git a/content/images/sensor_filter_calibrate_linear.png b/public/images/sensor_filter_calibrate_linear.png similarity index 100% rename from content/images/sensor_filter_calibrate_linear.png rename to public/images/sensor_filter_calibrate_linear.png diff --git a/static/images/server-network.svg b/public/images/server-network.svg similarity index 100% rename from static/images/server-network.svg rename to public/images/server-network.svg diff --git a/static/images/servo.svg b/public/images/servo.svg similarity index 100% rename from static/images/servo.svg rename to public/images/servo.svg diff --git a/static/images/settings.svg b/public/images/settings.svg similarity index 100% rename from static/images/settings.svg rename to public/images/settings.svg diff --git a/static/images/sfa30.jpg b/public/images/sfa30.jpg similarity index 100% rename from static/images/sfa30.jpg rename to public/images/sfa30.jpg diff --git a/static/images/sgp30.jpg b/public/images/sgp30.jpg similarity index 100% rename from static/images/sgp30.jpg rename to public/images/sgp30.jpg diff --git a/static/images/sgp40.jpg b/public/images/sgp40.jpg similarity index 100% rename from static/images/sgp40.jpg rename to public/images/sgp40.jpg diff --git a/static/images/shellydimmer2.jpg b/public/images/shellydimmer2.jpg similarity index 100% rename from static/images/shellydimmer2.jpg rename to public/images/shellydimmer2.jpg diff --git a/static/images/sht3xd.jpg b/public/images/sht3xd.jpg similarity index 100% rename from static/images/sht3xd.jpg rename to public/images/sht3xd.jpg diff --git a/static/images/sht4x.jpg b/public/images/sht4x.jpg similarity index 100% rename from static/images/sht4x.jpg rename to public/images/sht4x.jpg diff --git a/static/images/shtc3.jpg b/public/images/shtc3.jpg similarity index 100% rename from static/images/shtc3.jpg rename to public/images/shtc3.jpg diff --git a/content/images/shutdown-ui.png b/public/images/shutdown-ui.png similarity index 100% rename from content/images/shutdown-ui.png rename to public/images/shutdown-ui.png diff --git a/static/images/sigma-delta.svg b/public/images/sigma-delta.svg similarity index 100% rename from static/images/sigma-delta.svg rename to public/images/sigma-delta.svg diff --git a/static/images/sigma.svg b/public/images/sigma.svg similarity index 100% rename from static/images/sigma.svg rename to public/images/sigma.svg diff --git a/static/images/sim800l.jpg b/public/images/sim800l.jpg similarity index 100% rename from static/images/sim800l.jpg rename to public/images/sim800l.jpg diff --git a/static/images/sm16716.svg b/public/images/sm16716.svg similarity index 100% rename from static/images/sm16716.svg rename to public/images/sm16716.svg diff --git a/static/images/sm2135.svg b/public/images/sm2135.svg similarity index 100% rename from static/images/sm2135.svg rename to public/images/sm2135.svg diff --git a/static/images/sm2235.svg b/public/images/sm2235.svg similarity index 100% rename from static/images/sm2235.svg rename to public/images/sm2235.svg diff --git a/static/images/sm2335.svg b/public/images/sm2335.svg similarity index 100% rename from static/images/sm2335.svg rename to public/images/sm2335.svg diff --git a/static/images/sm300d2.jpg b/public/images/sm300d2.jpg similarity index 100% rename from static/images/sm300d2.jpg rename to public/images/sm300d2.jpg diff --git a/static/images/sml.svg b/public/images/sml.svg similarity index 100% rename from static/images/sml.svg rename to public/images/sml.svg diff --git a/static/images/smt100.jpg b/public/images/smt100.jpg similarity index 100% rename from static/images/smt100.jpg rename to public/images/smt100.jpg diff --git a/static/images/sn74hc595.jpg b/public/images/sn74hc595.jpg similarity index 100% rename from static/images/sn74hc595.jpg rename to public/images/sn74hc595.jpg diff --git a/static/images/sonoff_d1.jpg b/public/images/sonoff_d1.jpg similarity index 100% rename from static/images/sonoff_d1.jpg rename to public/images/sonoff_d1.jpg diff --git a/static/images/speaker.svg b/public/images/speaker.svg similarity index 100% rename from static/images/speaker.svg rename to public/images/speaker.svg diff --git a/static/images/spi.svg b/public/images/spi.svg similarity index 100% rename from static/images/spi.svg rename to public/images/spi.svg diff --git a/static/images/sprinkler-variant.svg b/public/images/sprinkler-variant.svg similarity index 100% rename from static/images/sprinkler-variant.svg rename to public/images/sprinkler-variant.svg diff --git a/static/images/sps30.jpg b/public/images/sps30.jpg similarity index 100% rename from static/images/sps30.jpg rename to public/images/sps30.jpg diff --git a/static/images/ssd1306.jpg b/public/images/ssd1306.jpg similarity index 100% rename from static/images/ssd1306.jpg rename to public/images/ssd1306.jpg diff --git a/static/images/ssd1322.jpg b/public/images/ssd1322.jpg similarity index 100% rename from static/images/ssd1322.jpg rename to public/images/ssd1322.jpg diff --git a/static/images/ssd1325.jpg b/public/images/ssd1325.jpg similarity index 100% rename from static/images/ssd1325.jpg rename to public/images/ssd1325.jpg diff --git a/static/images/ssd1327.jpg b/public/images/ssd1327.jpg similarity index 100% rename from static/images/ssd1327.jpg rename to public/images/ssd1327.jpg diff --git a/static/images/ssd1331.jpg b/public/images/ssd1331.jpg similarity index 100% rename from static/images/ssd1331.jpg rename to public/images/ssd1331.jpg diff --git a/static/images/ssd1351.jpg b/public/images/ssd1351.jpg similarity index 100% rename from static/images/ssd1351.jpg rename to public/images/ssd1351.jpg diff --git a/static/images/st7567.jpg b/public/images/st7567.jpg similarity index 100% rename from static/images/st7567.jpg rename to public/images/st7567.jpg diff --git a/static/images/st7735.jpg b/public/images/st7735.jpg similarity index 100% rename from static/images/st7735.jpg rename to public/images/st7735.jpg diff --git a/static/images/st7789v.jpg b/public/images/st7789v.jpg similarity index 100% rename from static/images/st7789v.jpg rename to public/images/st7789v.jpg diff --git a/content/components/images/st7796.svg b/public/images/st7796.svg similarity index 100% rename from content/components/images/st7796.svg rename to public/images/st7796.svg diff --git a/static/images/st7920.jpg b/public/images/st7920.jpg similarity index 100% rename from static/images/st7920.jpg rename to public/images/st7920.jpg diff --git a/static/images/stepper.svg b/public/images/stepper.svg similarity index 100% rename from static/images/stepper.svg rename to public/images/stepper.svg diff --git a/static/images/sts3x.jpg b/public/images/sts3x.jpg similarity index 100% rename from static/images/sts3x.jpg rename to public/images/sts3x.jpg diff --git a/static/images/stts22h.jpg b/public/images/stts22h.jpg similarity index 100% rename from static/images/stts22h.jpg rename to public/images/stts22h.jpg diff --git a/static/images/sun_1000g2.png b/public/images/sun_1000g2.png similarity index 100% rename from static/images/sun_1000g2.png rename to public/images/sun_1000g2.png diff --git a/static/images/sx126x.png b/public/images/sx126x.png similarity index 100% rename from static/images/sx126x.png rename to public/images/sx126x.png diff --git a/static/images/sx127x.png b/public/images/sx127x.png similarity index 100% rename from static/images/sx127x.png rename to public/images/sx127x.png diff --git a/static/images/sx1509.jpg b/public/images/sx1509.jpg similarity index 100% rename from static/images/sx1509.jpg rename to public/images/sx1509.jpg diff --git a/static/images/sy6970.jpg b/public/images/sy6970.jpg similarity index 100% rename from static/images/sy6970.jpg rename to public/images/sy6970.jpg diff --git a/static/images/system-update.svg b/public/images/system-update.svg similarity index 100% rename from static/images/system-update.svg rename to public/images/system-update.svg diff --git a/static/images/t4-s3.jpg b/public/images/t4-s3.jpg similarity index 100% rename from static/images/t4-s3.jpg rename to public/images/t4-s3.jpg diff --git a/static/images/t6615.jpg b/public/images/t6615.jpg similarity index 100% rename from static/images/t6615.jpg rename to public/images/t6615.jpg diff --git a/static/images/tab5.jpg b/public/images/tab5.jpg similarity index 100% rename from static/images/tab5.jpg rename to public/images/tab5.jpg diff --git a/static/images/tc74.jpg b/public/images/tc74.jpg similarity index 100% rename from static/images/tc74.jpg rename to public/images/tc74.jpg diff --git a/static/images/tca9548a.jpg b/public/images/tca9548a.jpg similarity index 100% rename from static/images/tca9548a.jpg rename to public/images/tca9548a.jpg diff --git a/static/images/tca9555.svg b/public/images/tca9555.svg similarity index 100% rename from static/images/tca9555.svg rename to public/images/tca9555.svg diff --git a/static/images/tcs34725.jpg b/public/images/tcs34725.jpg similarity index 100% rename from static/images/tcs34725.jpg rename to public/images/tcs34725.jpg diff --git a/static/images/teleinfo.jpg b/public/images/teleinfo.jpg similarity index 100% rename from static/images/teleinfo.jpg rename to public/images/teleinfo.jpg diff --git a/static/images/tem3200.jpg b/public/images/tem3200.jpg similarity index 100% rename from static/images/tem3200.jpg rename to public/images/tem3200.jpg diff --git a/static/images/thermometer.svg b/public/images/thermometer.svg similarity index 100% rename from static/images/thermometer.svg rename to public/images/thermometer.svg diff --git a/static/images/thermopro_tp357.jpg b/public/images/thermopro_tp357.jpg similarity index 100% rename from static/images/thermopro_tp357.jpg rename to public/images/thermopro_tp357.jpg diff --git a/static/images/timer-play-outline.svg b/public/images/timer-play-outline.svg similarity index 100% rename from static/images/timer-play-outline.svg rename to public/images/timer-play-outline.svg diff --git a/static/images/timer.svg b/public/images/timer.svg similarity index 100% rename from static/images/timer.svg rename to public/images/timer.svg diff --git a/static/images/tlc59208f.jpg b/public/images/tlc59208f.jpg similarity index 100% rename from static/images/tlc59208f.jpg rename to public/images/tlc59208f.jpg diff --git a/static/images/tlc5947.jpg b/public/images/tlc5947.jpg similarity index 100% rename from static/images/tlc5947.jpg rename to public/images/tlc5947.jpg diff --git a/static/images/tlc5971.jpg b/public/images/tlc5971.jpg similarity index 100% rename from static/images/tlc5971.jpg rename to public/images/tlc5971.jpg diff --git a/static/images/tm1621.jpg b/public/images/tm1621.jpg similarity index 100% rename from static/images/tm1621.jpg rename to public/images/tm1621.jpg diff --git a/static/images/tm1637.jpg b/public/images/tm1637.jpg similarity index 100% rename from static/images/tm1637.jpg rename to public/images/tm1637.jpg diff --git a/static/images/tm1638.jpg b/public/images/tm1638.jpg similarity index 100% rename from static/images/tm1638.jpg rename to public/images/tm1638.jpg diff --git a/static/images/tm1651_battery_display.jpg b/public/images/tm1651_battery_display.jpg similarity index 100% rename from static/images/tm1651_battery_display.jpg rename to public/images/tm1651_battery_display.jpg diff --git a/static/images/tmp102.jpg b/public/images/tmp102.jpg similarity index 100% rename from static/images/tmp102.jpg rename to public/images/tmp102.jpg diff --git a/static/images/tmp1075.jpg b/public/images/tmp1075.jpg similarity index 100% rename from static/images/tmp1075.jpg rename to public/images/tmp1075.jpg diff --git a/static/images/tmp117.jpg b/public/images/tmp117.jpg similarity index 100% rename from static/images/tmp117.jpg rename to public/images/tmp117.jpg diff --git a/static/images/tof10120.jpg b/public/images/tof10120.jpg similarity index 100% rename from static/images/tof10120.jpg rename to public/images/tof10120.jpg diff --git a/static/images/tormatic.png b/public/images/tormatic.png similarity index 100% rename from static/images/tormatic.png rename to public/images/tormatic.png diff --git a/static/images/touch.svg b/public/images/touch.svg similarity index 100% rename from static/images/touch.svg rename to public/images/touch.svg diff --git a/static/images/tsl2561.jpg b/public/images/tsl2561.jpg similarity index 100% rename from static/images/tsl2561.jpg rename to public/images/tsl2561.jpg diff --git a/static/images/tsl2591.jpg b/public/images/tsl2591.jpg similarity index 100% rename from static/images/tsl2591.jpg rename to public/images/tsl2591.jpg diff --git a/static/images/ttp229.jpg b/public/images/ttp229.jpg similarity index 100% rename from static/images/ttp229.jpg rename to public/images/ttp229.jpg diff --git a/static/images/tuya.png b/public/images/tuya.png similarity index 100% rename from static/images/tuya.png rename to public/images/tuya.png diff --git a/static/images/tx20.jpg b/public/images/tx20.jpg similarity index 100% rename from static/images/tx20.jpg rename to public/images/tx20.jpg diff --git a/static/images/uart.svg b/public/images/uart.svg similarity index 100% rename from static/images/uart.svg rename to public/images/uart.svg diff --git a/static/images/udp.svg b/public/images/udp.svg similarity index 100% rename from static/images/udp.svg rename to public/images/udp.svg diff --git a/static/images/ufire_ec.png b/public/images/ufire_ec.png similarity index 100% rename from static/images/ufire_ec.png rename to public/images/ufire_ec.png diff --git a/static/images/ufire_ise.png b/public/images/ufire_ise.png similarity index 100% rename from static/images/ufire_ise.png rename to public/images/ufire_ise.png diff --git a/static/images/ultrasonic.jpg b/public/images/ultrasonic.jpg similarity index 100% rename from static/images/ultrasonic.jpg rename to public/images/ultrasonic.jpg diff --git a/static/images/upload.svg b/public/images/upload.svg similarity index 100% rename from static/images/upload.svg rename to public/images/upload.svg diff --git a/static/images/uponor.svg b/public/images/uponor.svg similarity index 100% rename from static/images/uponor.svg rename to public/images/uponor.svg diff --git a/static/images/usb.svg b/public/images/usb.svg similarity index 100% rename from static/images/usb.svg rename to public/images/usb.svg diff --git a/static/images/veml3235.jpg b/public/images/veml3235.jpg similarity index 100% rename from static/images/veml3235.jpg rename to public/images/veml3235.jpg diff --git a/static/images/veml6030.jpg b/public/images/veml6030.jpg similarity index 100% rename from static/images/veml6030.jpg rename to public/images/veml6030.jpg diff --git a/static/images/veml7700.jpg b/public/images/veml7700.jpg similarity index 100% rename from static/images/veml7700.jpg rename to public/images/veml7700.jpg diff --git a/static/images/vl53l0x.jpg b/public/images/vl53l0x.jpg similarity index 100% rename from static/images/vl53l0x.jpg rename to public/images/vl53l0x.jpg diff --git a/static/images/voice-assistant.svg b/public/images/voice-assistant.svg similarity index 100% rename from static/images/voice-assistant.svg rename to public/images/voice-assistant.svg diff --git a/static/images/water-drop.svg b/public/images/water-drop.svg similarity index 100% rename from static/images/water-drop.svg rename to public/images/water-drop.svg diff --git a/static/images/water_heater.svg b/public/images/water_heater.svg similarity index 100% rename from static/images/water_heater.svg rename to public/images/water_heater.svg diff --git a/static/images/waveform.svg b/public/images/waveform.svg similarity index 100% rename from static/images/waveform.svg rename to public/images/waveform.svg diff --git a/static/images/waveshare_epaper.jpg b/public/images/waveshare_epaper.jpg similarity index 100% rename from static/images/waveshare_epaper.jpg rename to public/images/waveshare_epaper.jpg diff --git a/static/images/waveshare_touch-s3.jpg b/public/images/waveshare_touch-s3.jpg similarity index 100% rename from static/images/waveshare_touch-s3.jpg rename to public/images/waveshare_touch-s3.jpg diff --git a/static/images/weather-sunny.svg b/public/images/weather-sunny.svg similarity index 100% rename from static/images/weather-sunny.svg rename to public/images/weather-sunny.svg diff --git a/static/images/wiegand.jpg b/public/images/wiegand.jpg similarity index 100% rename from static/images/wiegand.jpg rename to public/images/wiegand.jpg diff --git a/static/images/wifi-strength-alert-outline.svg b/public/images/wifi-strength-alert-outline.svg similarity index 100% rename from static/images/wifi-strength-alert-outline.svg rename to public/images/wifi-strength-alert-outline.svg diff --git a/static/images/wireguard_custom_logo.svg b/public/images/wireguard_custom_logo.svg similarity index 100% rename from static/images/wireguard_custom_logo.svg rename to public/images/wireguard_custom_logo.svg diff --git a/static/images/wk2168.jpg b/public/images/wk2168.jpg similarity index 100% rename from static/images/wk2168.jpg rename to public/images/wk2168.jpg diff --git a/static/images/wt32-sc01.png b/public/images/wt32-sc01.png similarity index 100% rename from static/images/wt32-sc01.png rename to public/images/wt32-sc01.png diff --git a/static/images/wts01.png b/public/images/wts01.png similarity index 100% rename from static/images/wts01.png rename to public/images/wts01.png diff --git a/static/images/x9c.jpg b/public/images/x9c.jpg similarity index 100% rename from static/images/x9c.jpg rename to public/images/x9c.jpg diff --git a/static/images/xiaomi_cgg1.jpg b/public/images/xiaomi_cgg1.jpg similarity index 100% rename from static/images/xiaomi_cgg1.jpg rename to public/images/xiaomi_cgg1.jpg diff --git a/static/images/xiaomi_hhccjcy01.jpg b/public/images/xiaomi_hhccjcy01.jpg similarity index 100% rename from static/images/xiaomi_hhccjcy01.jpg rename to public/images/xiaomi_hhccjcy01.jpg diff --git a/static/images/xiaomi_hhccjcy10.jpg b/public/images/xiaomi_hhccjcy10.jpg similarity index 100% rename from static/images/xiaomi_hhccjcy10.jpg rename to public/images/xiaomi_hhccjcy10.jpg diff --git a/static/images/xiaomi_lywsd02.jpg b/public/images/xiaomi_lywsd02.jpg similarity index 100% rename from static/images/xiaomi_lywsd02.jpg rename to public/images/xiaomi_lywsd02.jpg diff --git a/static/images/xiaomi_lywsd03mmc.jpg b/public/images/xiaomi_lywsd03mmc.jpg similarity index 100% rename from static/images/xiaomi_lywsd03mmc.jpg rename to public/images/xiaomi_lywsd03mmc.jpg diff --git a/static/images/xiaomi_lywsdcgq.jpg b/public/images/xiaomi_lywsdcgq.jpg similarity index 100% rename from static/images/xiaomi_lywsdcgq.jpg rename to public/images/xiaomi_lywsdcgq.jpg diff --git a/static/images/xiaomi_mijia_logo.jpg b/public/images/xiaomi_mijia_logo.jpg similarity index 100% rename from static/images/xiaomi_mijia_logo.jpg rename to public/images/xiaomi_mijia_logo.jpg diff --git a/static/images/xiaomi_miscale.jpg b/public/images/xiaomi_miscale.jpg similarity index 100% rename from static/images/xiaomi_miscale.jpg rename to public/images/xiaomi_miscale.jpg diff --git a/static/images/xiaomi_rtcgq02lm.jpg b/public/images/xiaomi_rtcgq02lm.jpg similarity index 100% rename from static/images/xiaomi_rtcgq02lm.jpg rename to public/images/xiaomi_rtcgq02lm.jpg diff --git a/static/images/xl9535.svg b/public/images/xl9535.svg similarity index 100% rename from static/images/xl9535.svg rename to public/images/xl9535.svg diff --git a/static/images/xpt2046.jpg b/public/images/xpt2046.jpg similarity index 100% rename from static/images/xpt2046.jpg rename to public/images/xpt2046.jpg diff --git a/static/images/xxtea.svg b/public/images/xxtea.svg similarity index 100% rename from static/images/xxtea.svg rename to public/images/xxtea.svg diff --git a/static/images/z-wave.svg b/public/images/z-wave.svg similarity index 100% rename from static/images/z-wave.svg rename to public/images/z-wave.svg diff --git a/static/images/zgm053.jpg b/public/images/zgm053.jpg similarity index 100% rename from static/images/zgm053.jpg rename to public/images/zgm053.jpg diff --git a/static/images/zigbee.svg b/public/images/zigbee.svg similarity index 100% rename from static/images/zigbee.svg rename to public/images/zigbee.svg diff --git a/static/images/zio_ultrasonic.jpg b/public/images/zio_ultrasonic.jpg similarity index 100% rename from static/images/zio_ultrasonic.jpg rename to public/images/zio_ultrasonic.jpg diff --git a/static/projects/bluetooth-proxy/esp32_generic.png b/public/projects/bluetooth-proxy/esp32_generic.png similarity index 100% rename from static/projects/bluetooth-proxy/esp32_generic.png rename to public/projects/bluetooth-proxy/esp32_generic.png diff --git a/static/projects/bluetooth-proxy/gl-s10.png b/public/projects/bluetooth-proxy/gl-s10.png similarity index 100% rename from static/projects/bluetooth-proxy/gl-s10.png rename to public/projects/bluetooth-proxy/gl-s10.png diff --git a/static/projects/bluetooth-proxy/header.png b/public/projects/bluetooth-proxy/header.png similarity index 100% rename from static/projects/bluetooth-proxy/header.png rename to public/projects/bluetooth-proxy/header.png diff --git a/static/projects/bluetooth-proxy/lilygo-eth-poe.png b/public/projects/bluetooth-proxy/lilygo-eth-poe.png similarity index 100% rename from static/projects/bluetooth-proxy/lilygo-eth-poe.png rename to public/projects/bluetooth-proxy/lilygo-eth-poe.png diff --git a/static/projects/bluetooth-proxy/m5stack_atom_lite.png b/public/projects/bluetooth-proxy/m5stack_atom_lite.png similarity index 100% rename from static/projects/bluetooth-proxy/m5stack_atom_lite.png rename to public/projects/bluetooth-proxy/m5stack_atom_lite.png diff --git a/static/projects/bluetooth-proxy/olimex_esp32_poe_iso.png b/public/projects/bluetooth-proxy/olimex_esp32_poe_iso.png similarity index 100% rename from static/projects/bluetooth-proxy/olimex_esp32_poe_iso.png rename to public/projects/bluetooth-proxy/olimex_esp32_poe_iso.png diff --git a/static/projects/bluetooth-proxy/seeed-esp32-poe.png b/public/projects/bluetooth-proxy/seeed-esp32-poe.png similarity index 100% rename from static/projects/bluetooth-proxy/seeed-esp32-poe.png rename to public/projects/bluetooth-proxy/seeed-esp32-poe.png diff --git a/static/projects/bluetooth-proxy/wt32-eth01.png b/public/projects/bluetooth-proxy/wt32-eth01.png similarity index 100% rename from static/projects/bluetooth-proxy/wt32-eth01.png rename to public/projects/bluetooth-proxy/wt32-eth01.png diff --git a/static/projects/empty/espressif.png b/public/projects/empty/espressif.png similarity index 100% rename from static/projects/empty/espressif.png rename to public/projects/empty/espressif.png diff --git a/static/projects/empty/pico-w.png b/public/projects/empty/pico-w.png similarity index 100% rename from static/projects/empty/pico-w.png rename to public/projects/empty/pico-w.png diff --git a/static/projects/irrf-proxy/xiao-ir-mate.png b/public/projects/irrf-proxy/xiao-ir-mate.png similarity index 100% rename from static/projects/irrf-proxy/xiao-ir-mate.png rename to public/projects/irrf-proxy/xiao-ir-mate.png diff --git a/static/projects/media-player/atom_echo.png b/public/projects/media-player/atom_echo.png similarity index 100% rename from static/projects/media-player/atom_echo.png rename to public/projects/media-player/atom_echo.png diff --git a/static/projects/media-player/atom_speaker_kit.png b/public/projects/media-player/atom_speaker_kit.png similarity index 100% rename from static/projects/media-player/atom_speaker_kit.png rename to public/projects/media-player/atom_speaker_kit.png diff --git a/static/projects/media-player/esp_muse_luxe.png b/public/projects/media-player/esp_muse_luxe.png similarity index 100% rename from static/projects/media-player/esp_muse_luxe.png rename to public/projects/media-player/esp_muse_luxe.png diff --git a/static/projects/media-player/esp_muse_proto.png b/public/projects/media-player/esp_muse_proto.png similarity index 100% rename from static/projects/media-player/esp_muse_proto.png rename to public/projects/media-player/esp_muse_proto.png diff --git a/static/projects/voice-assistant/esp32-s3-box-3.png b/public/projects/voice-assistant/esp32-s3-box-3.png similarity index 100% rename from static/projects/voice-assistant/esp32-s3-box-3.png rename to public/projects/voice-assistant/esp32-s3-box-3.png diff --git a/static/projects/voice-assistant/home-assistant-voice.png b/public/projects/voice-assistant/home-assistant-voice.png similarity index 100% rename from static/projects/voice-assistant/home-assistant-voice.png rename to public/projects/voice-assistant/home-assistant-voice.png diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000000..5d70c8bed1 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,29 @@ +# As a condition of accessing this website, you agree to abide by the following +# content signals: + +# (a) If a content-signal = yes, you may collect content for the corresponding +# use. +# (b) If a content-signal = no, you may not collect content for the +# corresponding use. +# (c) If the website operator does not include a content signal for a +# corresponding use, the website operator neither grants nor restricts +# permission via content signal with respect to content-signal with respect to the corresponding use. + +# The content signals and their meanings are: + +# search: building a search index and providing search results (e.g., returning +# hyperlinks and short excerpts from your website's contents). Search does not +# include providing AI-generated search summaries. +# ai-input: inputting content into one or more AI models (e.g., retrieval +# augmented generation, grounding, or other real-time taking of content for +# generative AI search answers). +# ai-train: training or fine-tuning AI models. + +# ANY RESTRICTIONS EXPRESSED VIA CONTENT SIGNALS ARE EXPRESS RESERVATIONS OF +# RIGHTS UNDER ARTICLE 4 OF THE EUROPEAN UNION DIRECTIVE 2019/790 ON COPYRIGHT +# AND RELATED RIGHTS IN THE DIGITAL SINGLE MARKET. + +User-agent: * +Allow: / + +Sitemap: https://esphome.io/sitemap-index.xml diff --git a/script/check_urls.mjs b/script/check_urls.mjs new file mode 100644 index 0000000000..575c86cac2 --- /dev/null +++ b/script/check_urls.mjs @@ -0,0 +1,112 @@ +#!/usr/bin/env node +/** + * Check that all URLs from the live site exist in the local build + * + * Usage: + * npm run build + * node script/check_urls.mjs + */ + +import { existsSync } from 'fs'; +import { join } from 'path'; + +const LIVE_SITEMAP = 'https://esphome.io/sitemap.xml'; +const DIST_DIR = 'dist'; + +/** + * Convert live URL to local dist path + * https://esphome.io/components/sensor/dht/ -> dist/components/sensor/dht/index.html + */ +function liveUrlToLocalPath(url) { + const u = new URL(url); + let path = u.pathname; + + // Remove leading slash + if (path.startsWith('/')) { + path = path.slice(1); + } + + // Handle trailing slash - add index.html + if (path.endsWith('/')) { + path = path + 'index.html'; + } else if (!path.endsWith('.html')) { + path = path + '/index.html'; + } + + // Handle root + if (path === 'index.html' || path === '') { + path = 'index.html'; + } + + return join(DIST_DIR, path); +} + +/** + * Parse sitemap XML and extract URLs + */ +function extractUrls(xml) { + const urls = []; + const regex = /([^<]+)<\/loc>/g; + let match; + while ((match = regex.exec(xml)) !== null) { + urls.push(match[1]); + } + return urls; +} + +async function main() { + console.log('Fetching live sitemap...'); + + const resp = await fetch(LIVE_SITEMAP); + if (!resp.ok) { + console.error(`Failed to fetch sitemap: ${resp.status}`); + process.exit(1); + } + + const xml = await resp.text(); + const liveUrls = extractUrls(xml); + + console.log(`Found ${liveUrls.length} URLs in live sitemap\n`); + + const missing = []; + const found = []; + + for (const url of liveUrls) { + const localPath = liveUrlToLocalPath(url); + + if (existsSync(localPath)) { + found.push({ url, localPath }); + } else { + missing.push({ url, localPath }); + } + } + + console.log('='.repeat(50)); + console.log('RESULTS'); + console.log('='.repeat(50)); + console.log(` Found locally: ${found.length.toString().padStart(4)}`); + console.log(` Missing: ${missing.length.toString().padStart(4)}`); + console.log('='.repeat(50)); + + if (missing.length > 0) { + console.log(`\n--- Missing URLs (${missing.length}) ---`); + for (const { url, localPath } of missing.slice(0, 50)) { + console.log(` ${url}`); + console.log(` -> ${localPath}`); + } + if (missing.length > 50) { + console.log(` ... and ${missing.length - 50} more`); + } + + console.log('\n✗ Some URLs are missing'); + process.exit(1); + } else { + console.log('\n✓ All live URLs exist locally'); + process.exit(0); + } +} + +main().catch(e => { + console.error(e); + process.exit(1); +}); diff --git a/script/convert-pr.sh b/script/convert-pr.sh deleted file mode 100755 index e5a556e66b..0000000000 --- a/script/convert-pr.sh +++ /dev/null @@ -1,27 +0,0 @@ -#! /bin/sh - -# Script to convert a PR against `next` from RST to Markdown. -# Start by checking out the PR branch, either from your own repo, or by using the -# gh command, e.g `gh pr checkout https://github.com/esphome/esphome-docs/pull/ -# Then run this script. -# -# IMPORTANT: -# run `git diff next` afterwards to check just what changes you have made. -# If your PR modifies existing files, it's quite possible you will have -# overwritten any changes made since your PR was created, and the conversion -# process just overwrites the .md file, rather than doing a normal merge. -# So check carefully and manually fix any issues, or just revise the PR from scratch. - - -git config merge.directoryRenames false - -git merge next -X theirs - -# There may be conflicts reported -# Convert files -script/convert_rst_to_md.py . . - -# cleanup -rm -rf _* components guides cookbook changelog automations images index.rst markdown.py projects svg2png svg2png.py web-api -git add -u -git commit --quiet --message="Convert to Markdown" diff --git a/script/convert_rst_to_md.py b/script/convert_rst_to_md.py deleted file mode 100755 index 1ca69ec01e..0000000000 --- a/script/convert_rst_to_md.py +++ /dev/null @@ -1,2094 +0,0 @@ -#!/usr/bin/env python3 -""" -Convert Sphinx RST files to Hugo Markdown format. -This script helps migrate the ESPHome documentation from Sphinx to Hugo. -""" - -import argparse -import csv -import io -import os -import re -import shutil -from itertools import zip_longest - -from git import Repo - -# Global anchor map to store all anchors and their document paths -anchor_map = {} - - -# Global variables for image tracking -class ImageInfo: - def __init__(self, name, path, source): - self.name = name - self.path = path - self.source = source - self.count = 0 - - def increment(self): - self.count += 1 - - -image_map = {} -included_files = set() -substitutions = {} - - -def find_included_files(file_path): - """ - Parse a file for include directives and return a list of included files. - - Args: - file_path: Path to the file to parse - - Returns: - List of absolute paths to included files - """ - include_file_list = [] - - try: - with open(file_path, "r", encoding="utf-8") as f: - content = f.read() - - # Look for .. include:: directives - include_pattern = r"^\s*\.\.\s+include::\s+(.+?)$" - matches = re.finditer(include_pattern, content, re.MULTILINE) - - for match in matches: - included_path = match.group(1).strip() - - # Handle relative paths - if not os.path.isabs(included_path): - included_path = os.path.normpath( - os.path.join(os.path.dirname(file_path), included_path) - ) - - # Check if the file exists - if os.path.exists(included_path): - include_file_list.append(included_path) - else: - print(f"Warning: Included file not found: {included_path}") - - return include_file_list - - except Exception as e: - print(f"Error parsing includes in {file_path}: {e}") - return [] - - -def get_all_included_files(input_dir): - for root, _, files in os.walk(input_dir): - for file in files: - if file.endswith(".rst"): - included_files.update( - set(find_included_files(os.path.join(root, file))) - ) - - -def build_anchor_map(input_dir): - """Scan all RST files and build a map of anchors to their document paths.""" - print("Building anchor map...") - - for root, _, files in os.walk(input_dir): - for file in files: - file_path = str(os.path.join(root, file)) - if file_path not in included_files and file.endswith(".rst"): - rel_path = os.path.relpath(file_path, input_dir) - doc_path = os.path.splitext(rel_path)[0] - - # Convert to Hugo path format - doc_path = doc_path.lower() - - # Handle index files - if os.path.basename(doc_path) == "index": - doc_path = os.path.dirname(doc_path) + "/_index" - - rel_path, rst_content = get_rst_content(input_dir, file_path) - for i, line in enumerate(rst_content): - if line.startswith(".. _") and line.endswith(":"): - anchor_name = line[ - 4:-1 - ] # Extract the anchor name without the '.. _' prefix and ':' suffix - if i < len(rst_content) - 2: - text = rst_content[i + 2].strip() - else: - text = "" - anchor_map[anchor_name] = doc_path, text - - print(f"Found {len(anchor_map)} anchors across all documents") - - -def normalize_csv_lines(lines, delimiter=","): - # Read from list of lines using StringIO - reader = csv.reader( - io.StringIO("\n".join(lines)), - delimiter=delimiter, - quotechar='"', - skipinitialspace=True, - ) - rows = list(reader) - - # Find the max number of columns - max_columns = max(len(row) for row in rows) - - # Pad rows with missing columns - normalized_rows = [row + [""] * (max_columns - len(row)) for row in rows] - for row in normalized_rows: - if len(row) > 2: - row[2] = row[2].replace(".avif", ".webp") - - return normalized_rows - - -def get_indented_block(lines, i, current_indent): - # skip blank lines - while i < len(lines) and not lines[i].strip(): - i += 1 - - md_lines = [] - # Determine the indentation level of the code block content - code_indent = 0 - if i < len(lines) and lines[i].startswith(" "): - code_indent = len(lines[i]) - len(lines[i].lstrip(" ")) - - # Add code content - while i < len(lines): - line = lines[i] - this_indent = min(len(line) - len(line.lstrip()), code_indent) - if not line: - md_lines.append("") - i += 1 - elif this_indent and this_indent >= code_indent - 1: - # Remove only the code block indentation, preserve any existing indentation - if this_indent >= code_indent: - line = line[this_indent:] - else: - line = line[this_indent - 1 :] - md_lines.append(" " * current_indent + line) - i += 1 - else: # Line without expected indentation - end of code block - break - return i, md_lines - - -bullet_regex = re.compile(r"^(\s*)([-*+])\s+") - - -def get_heading(lines, index, heading_underlines): - while index < len(lines): - line = lines[index] - if line.strip() == "": - index += 1 - continue - if line and index + 1 < len(lines) and len(lines[index + 1]) >= len(line): - next_line = lines[index + 1] - uchar = next_line[0] - if uchar in heading_underlines and all(x == uchar for x in next_line): - level = heading_underlines.index(uchar) + 1 - return level, index + 2, line.strip() - break - return None, None, None - - -def rst_unicode_to_markdown(text): - # Capture: optional text, optional whitespace, and one or more 0xAB sequences - pattern = re.compile(r"unicode::\s*([^\d]*?)?\s*((?:0x[0-9A-Fa-f]+(?:\s+)?)+)") - - def repl(match): - literal_text = (match.group(1) or "").rstrip() - codepoints = match.group(2).split() - chars = "".join(chr(int(cp, 16)) for cp in codepoints) - return f"{literal_text}{chars}" - - return pattern.sub(repl, text) - - -def convert_rst_to_md(lines, filename): - """Convert RST content to Markdown using line-by-line processing.""" - heading_underlines = [] - footnotes = [] # Store footnotes to add at the end - seo = {} - indent_stack = [] - - # Extract title and SEO data - title = "" - explicit_title = "" - skip_build = False - - def process_lines(inner_lines): - result_lines = [] - current_idx = 0 - - while current_idx < len(inner_lines): - this_line = inner_lines[current_idx] - if this_line and not this_line[0].isspace(): - indent_stack.clear() - - current_indent = len(this_line) - len(this_line.lstrip()) - # Skip title directive - if this_line.startswith(".. title::"): - current_idx += 1 - continue - - if this_line.startswith(".. seo::"): - current_idx, seo_lines = get_indented_block( - inner_lines, current_idx + 1, 0 - ) - for this_line in seo_lines: - if this_line.strip().startswith(":description:"): - seo["description"] = this_line.split(":")[2].strip() - if this_line.strip().startswith(":image:"): - seo["image"] = this_line.split(":")[2].strip() - continue - - if this_line.startswith(".. option::"): - text = this_line.replace(".. option::", "").strip() - current_idx += 1 - while ( - current_idx < len(inner_lines) - and not inner_lines[current_idx].strip() - ): - current_idx += 1 - result_lines.append(f'{{{{< option "{text}" >}}}}') - while current_idx < len(inner_lines): - if not inner_lines[current_idx]: - result_lines.append("") - current_idx += 1 - continue - if inner_lines[current_idx].startswith(" "): - result_lines.append(inner_lines[current_idx].strip()) - current_idx += 1 - else: - break - result_lines.append("{{< /option >}}") - continue - - # Handle imgtable directive - if this_line.strip() == ".. imgtable::": - current_idx += 1 - # Skip empty lines - while ( - current_idx < len(inner_lines) - and not inner_lines[current_idx].strip() - ): - current_idx += 1 - - # Start the imgtable shortcode - result_lines.append("{{< imgtable >}}") - csv_lines = [] - # Process each entry (each line should be indented) - while current_idx < len(inner_lines): - current_line = inner_lines[current_idx].strip() - - # If we hit an empty line or a non-indented line, we're done with this imgtable - if not inner_lines[current_idx].startswith(" ") and current_line: - break - - # Skip empty lines within the imgtable - if not current_line or current_line.startswith(":"): - current_idx += 1 - continue - - # Process the entry - format is typically: Title, Link, Image, [Description] - csv_lines.append(current_line) - current_idx += 1 - - csv_lines = normalize_csv_lines(csv_lines) - for row in csv_lines: - result_lines.append( - ",".join( - '"' - + col.strip().replace('"', '""').replace(":", " -") - + '"' - for col in row - ) - ) - # Close the imgtable shortcode - result_lines.append("{{< /imgtable >}}") - continue - - if this_line.startswith(".. program::"): - current_idx += 1 - continue - - # Skip title (we'll add it later with frontmatter) - if ( - this_line == title - and current_idx + 1 < len(inner_lines) - and re.match(r"^=+$", inner_lines[current_idx + 1]) - ): - current_idx += 2 - continue - - # Handle existing anchor shortcodes - anchor_name = None - if re.match(r'^\{{<\s+anchor\s+["\'](\w+)["\']\s+>}}', this_line): - anchor_name = re.match( - r'^\{{<\s+anchor\s+["\'](\w+)["\']\s+>}}', this_line - ).group(1) - # Handle RST anchors (.. _anchor:) - elif this_line.startswith(".. _") and this_line.endswith(":"): - anchor_name = this_line[ - 4:-1 - ] # Extract the anchor name without the '.. _' prefix and ':' suffix - if anchor_name: - current_idx += 1 - level, next_index, heading = get_heading( - inner_lines, current_idx, heading_underlines - ) - if heading: - heading = heading.lower().replace(" ", "-") - if heading != anchor_name.lower(): - result_lines.append(f'{{{{< anchor "{anchor_name.lower()}" >}}}}') - continue - - # Handle raw HTML blocks that might contain buttons - if this_line.strip().startswith(".. raw:: html"): - button_lines, new_i = process_raw_html_block(inner_lines, current_idx) - result_lines.extend(button_lines) - current_idx = new_i - continue - - # Handle list-table directive - if this_line.strip().startswith( - ".. list-table::" - ) or this_line.strip().startswith(".. list-table::"): - table_lines, new_i = process_list_table(inner_lines, current_idx) - result_lines.extend(table_lines) - current_idx = new_i - continue - - # Handle csv-table directive - if this_line.strip().startswith(".. csv-table::"): - table_lines, new_i = process_csv_table(inner_lines, current_idx) - result_lines.extend(table_lines) - current_idx = new_i - continue - - # Handle headings - if ( - this_line - and current_idx + 1 < len(inner_lines) - and len(inner_lines[current_idx + 1]) >= len(this_line) - ): - next_line = inner_lines[current_idx + 1] - uchar = next_line[0] - if uchar in heading_underlines and all(x == uchar for x in next_line): - level = heading_underlines.index(uchar) + 1 - prefix = "#" * level - result_lines.append(f"{prefix} {this_line}") - current_idx += 2 - continue - - # Handle code blocks - if match := re.match( - r"^(\s*)(-\s)?\.\.\s+(code-block|code)::\s*(\w*)", this_line - ): - # Extract language - language = match.group(4) - prefix = match.group(2) or "" - leading_space = match.group(1) or "" - indent = len(prefix) + len(leading_space) - - # Add the code block start with proper indentation - result_lines.append(prefix + f"```{language}") - - current_idx, new_lines = get_indented_block( - inner_lines, current_idx + 1, current_indent + indent - ) - while len(new_lines) and not new_lines[-1].strip(): - new_lines.pop() - result_lines.extend(new_lines) - result_lines.append("") - result_lines.append(" " * len(prefix) + "```") - continue - - if this_line.lstrip().startswith(".. math::"): - # Get the indentation of the current line - - # Add the code block start with proper indentation - result_lines.append(" " * current_indent + "{{< math >}}") - - current_idx, new_lines = get_indented_block( - inner_lines, current_idx + 1, current_indent - ) - result_lines.extend(new_lines) - result_lines.append(" " * current_indent + "{{< /math >}}") - continue - - if this_line.lstrip().startswith(".. collapse::"): - # Get the indentation of the current line - collapse_title = this_line.strip().removeprefix(".. collapse::").strip() - - # Add the code block start with proper indentation - - is_open = False - current_idx, new_lines = get_indented_block( - inner_lines, current_idx + 1, current_indent - ) - if new_lines[0].startswith(":open:"): - is_open = True - new_lines = new_lines[1:] - result_lines.append( - " " * current_indent - + f'{{{{< collapse "{collapse_title}" {is_open} >}}}}' - ) - result_lines.extend(new_lines) - result_lines.append(" " * current_indent + "{{< /collapse >}}") - continue - - # Handle notes - handled = False - for directive in ["note", "warning", "caution", "important", "tip"]: - if this_line.strip().startswith(f".. {directive}::"): - if not this_line.strip().endswith(f".. {directive}::"): - result_lines.append(f"{{{{< {directive} >}}}}") - result_lines.append( - this_line.removeprefix(f".. {directive}::").strip() - ) - result_lines.append(f"{{{{< /{directive} >}}}}") - current_idx += 1 - else: - # Get the indentation level of the note directive - result_lines.append(f"{{{{< {directive} >}}}}") - current_idx, note_lines = get_indented_block( - inner_lines, current_idx + 1, current_indent - ) - note_lines = process_lines(note_lines) - # Note blocks can't be indented. - result_lines.extend(x[current_indent:] for x in note_lines) - result_lines.append(f"{{{{< /{directive} >}}}}") - handled = True - break - if handled: - continue - - # Handle figures - if this_line.strip().startswith(".. figure::"): - shortcode, new_i = process_image_directive(inner_lines, current_idx) - result_lines.append(shortcode) - result_lines.append("") - current_idx = new_i - continue - - # Handle image directives - if this_line.strip().startswith(".. image::"): - shortcode, new_i = process_image_directive(inner_lines, current_idx) - result_lines.append(shortcode) - current_idx = new_i - continue - - # Skip toctree - if this_line.startswith(".. toctree::"): - current_idx, _ = get_indented_block( - inner_lines, current_idx + 1, current_indent - ) - continue - - # Handle grid tables - if ( - this_line.strip() - and (this_line.count("=") > 3 or this_line.count("-") > 3) - and all(c in "=+-| " for c in this_line) - ): - # Check if this is likely a grid table by looking at surrounding lines - is_grid_table = False - - # Check if there's a content line after this separator - if ( - current_idx + 1 < len(inner_lines) - and inner_lines[current_idx + 1].strip() - ): - # If the next line has content and is followed by another separator, it's likely a table - if ( - current_idx + 2 < len(inner_lines) - and inner_lines[current_idx + 2].strip() - and all( - c in "=+-| " for c in inner_lines[current_idx + 2].strip() - ) - ): - is_grid_table = True - # Or if the next line has content with multiple spaces between words (column alignment) - elif " " in inner_lines[current_idx + 1]: - is_grid_table = True - - if is_grid_table: - table_lines, new_i = process_grid_table(inner_lines, current_idx) - if table_lines: # Only add if we successfully processed a table - result_lines.extend(table_lines) - current_idx = new_i - continue - - # Handle footnote definitions - footnote_match = re.match(r"^\.\. \[([0-9#][^]]*)]", this_line.strip()) - if footnote_match: - footnote_label = footnote_match.group(1) - # Remove the # prefix if it exists (for auto-numbered or labeled footnotes) - if footnote_label.startswith("#"): - footnote_label = footnote_label[1:] - - # Get the indentation of the current line - current_indent = len(this_line) - len(this_line.lstrip()) - - # Get the footnote text from the same line after the label - rest_of_line = this_line.strip()[len(footnote_match.group(0)) :].strip() - current_idx, new_lines = get_indented_block( - inner_lines, current_idx + 1, current_indent - ) - - # Store the footnote to add at the end of the document - footnotes.append([f"[^{footnote_label}]: {rest_of_line}"] + new_lines) - continue - - # Process the line for inline markup - fixed_line = this_line - match = bullet_regex.match(this_line) - if match: - indent, bullet = match.groups() - indent_len = len(indent) - if not indent_stack and indent_len > 0: - fixed_line = this_line.lstrip() - elif indent_stack and indent_len > indent_stack[-1]: - indent_stack.append(indent_len) - else: - while indent_stack and indent_len < indent_stack[-1]: - indent_stack.pop() - if not indent_stack: - indent_stack.append(indent_len) - - processed_line = process_inline_markup(fixed_line) - processed_line = replace_substitutions(processed_line) - - # Fix image paths in markdown content - if ( - "/components/" in filename - and "![" in processed_line - and "](/components/" in processed_line - ): - processed_line = processed_line.replace("](/components/", "](../") - elif ( - "/components/" in filename - and "![" in processed_line - and "](images/" in processed_line - ): - processed_line = processed_line.replace("](images/", "](../images/") - - # Fix SVG image paths in markdown content - if ( - "![" in processed_line - and "](_build/_images/" in processed_line - and ".svg)" in processed_line - ): - processed_line = processed_line.replace( - "](_build/_images/", "](/images/_build/_images/" - ) - - # Special handling for wireguard - processed_line = re.sub( - r"WireGuard®_", - r"[WireGuard®](https://www.wireguard.org/)", - processed_line, - ) - # Add the processed line - result_lines.append(processed_line) - current_idx += 1 - return [x.rstrip() for x in result_lines] - - # Check for explicit title directive - for i, line in enumerate(lines): - if "This is a dummy file" in line: - skip_build = True - if line.startswith(".. title::"): - explicit_title = line.replace(".. title::", "").strip() - break - - # Find title (first line with underline of = or - characters) - for i in range(len(lines) - 1): - if re.match(r"^[=-]+$", lines[i + 1]) and lines[i]: - title = lines[i] - break - - # Use explicit title if available, otherwise use the heading title - if explicit_title: - title = explicit_title - - # Find all headings and collate the order - - i = 0 - while i < len(lines): - line = lines[i] - if ( - line - and not line.startswith(".") - and len(line.lstrip()) == len(line) - and i + 1 < len(lines) - ): - underline = lines[i + 1] - if re.match(r'^[-_=#+*~^".`]+', underline) and len(underline) >= len(line): - underchar = underline[0] - if all(x == underchar for x in underline): - if underchar not in heading_underlines: - heading_underlines.append(underchar) - i += 1 - - # Parse substitutions from original lines - all_lines = lines[:] - parse_substitutions(all_lines) - # Remove substitution definitions from lines before further processing - lines = remove_substitution_definitions(lines) - lines = process_redirects(lines) - lines = process_multiline_references(lines) - lines = process_anchors_and_images(lines) - - md_lines = process_lines(lines) - - # Add footnotes at the end of the document if there are any - if footnotes: - for footnote in footnotes: - md_lines.append("") # Add a blank line before footnotes - md_lines.extend(footnote) - - # Generate frontmatter - frontmatter = ["---"] - - # Use description from SEO if available, otherwise use title - description = seo.get("description", title) - if not description: - description = title - - # Avoid repeating "ESPHome" in the description if it's already in the title - if title.startswith("ESPHome") and description.startswith("ESPHome"): - description = description[len("ESPHome") :].strip() - if description.startswith("-"): - description = description[1:].strip() - - description = description.replace('"', '\\"') - frontmatter.append(f'description: "{description}"') - title = title.replace('"', '\\"') - frontmatter.append(f'title: "{title}"') - if skip_build: - frontmatter.append("build: {render: never}") - if seo: - frontmatter.append("params:") - frontmatter.append(" seo:") - for k, v in seo.items(): - frontmatter.append(f" {k}: {v}") - frontmatter.append("---") - # Make sure the file will end with a newline - if md_lines[-1].strip() != "": - md_lines.append("") - - return frontmatter + ["", ""] + md_lines - - -def process_inline_markup(line): - """Process inline markup in a line of text.""" - processed_line = line - - # Code - # processed_line = replace_substitutions(processed_line) - # processed_line = rst_unicode_to_markdown(processed_line) - processed_line = re.sub(r"``([^`]+)``", r"`\1` ", processed_line) - - def footnote_ref_repl(match): - ref = match.group(1).strip() - if ref.startswith("#"): - # For auto-numbered or labeled footnotes, remove the # prefix - ref = ref[1:] - return f"[^{ref}]" - - processed_line = re.sub(r"\[([0-9#a-zA-Z_]+)]_", footnote_ref_repl, processed_line) - - # Find and store all :ref: patterns - def ref_repl(match): - content = match.group(1) - # Handle references with text and ID - if "<" in content and ">" in content: - text, ref_id = [x.strip() for x in content.split("<", 1)] - ref_id = ref_id.rstrip(">") - - # Look up the document path for this anchor - doc_path, anchor_text = anchor_map.get(ref_id, ("", "")) - if not doc_path: - print(f"Warning: Could not find document path for anchor '{ref_id}'") - text = text or anchor_text - ref_id = ref_id.lower() - return f"[{text}](#{ref_id})" - # Simple references - # Look up the document path for this anchor - doc_path, anchor_text = anchor_map.get(content, ("", "")) - if not doc_path: - print(f"Warning: Could not find document path for anchor '{content}'") - anchor_text = anchor_text or content - # If we can't find the document, just use the anchor - return f"[{anchor_text}](#{content.lower()})" - - processed_line = re.sub(r":ref:`([^`]+)`", ref_repl, processed_line) - - def doc_repl(match): - content = match.group(1).strip() - - # Handle document references with text and path - if "<" in content and ">" in content: - text, doc_path = [x.strip() for x in content.split("<", 1)] - doc_path = doc_path.rstrip(">") - # Use the docref shortcode with custom text - return f'{{{{< docref "{doc_path}" "{text.strip()}" >}}}}' - # Simple document references - doc_path = fix_doc_path(content) - return f'{{{{< docref "{doc_path}" >}}}}' - - processed_line = re.sub(r":doc:`([^`]+)`", doc_repl, processed_line) - - processed_line = re.sub(r":code:`([^`]+)`", r"`\1`", processed_line) - - processed_line = process_api(processed_line, "apiref") - processed_line = process_api(processed_line, "apistruct") - processed_line = process_api(processed_line, "apiclass") - - # Replace :ghuser:`username` or :ghuser:`text ` with the ghuser shortcode - def ghuser_repl(match): - content = match.group(1).strip() - # Check for the form: text - m = re.match(r"([^<`]+)<([^>]+)>", content) - if m: - text = m.group(1).strip() - username = m.group(2).strip() - return f'{{{{< ghuser name="{username}" text="{text}" >}}}}' - else: - username = content - return f'{{{{< ghuser name="{username}" >}}}}' - - processed_line = re.sub(r":ghuser:`([^`]+)`", ghuser_repl, processed_line) - - def esphome_repl(match): - content = match.group(1).strip() - number = content - return f'{{{{< pr number="{number}" repo="esphome" >}}}}' - - processed_line = re.sub(r":esphomepr:`([^`]+)`", esphome_repl, processed_line) - processed_line = re.sub(r":yamlpr:`([^`]+)`", esphome_repl, processed_line) - - def docs_repl(match): - content = match.group(1).strip() - number = content - return f'{{{{< pr number="{number}" repo="esphome-docs" >}}}}' - - processed_line = re.sub(r":docspr:`([^`]+)`", docs_repl, processed_line) - - def lib_repl(match): - content = match.group(1).strip() - number = content - return f'{{{{< pr number="{number}" repo="esphome-core" >}}}}' - - processed_line = re.sub(r":libpr:`([^`]+)`", lib_repl, processed_line) - - # External links - processed_line = re.sub( - r"`\s*([^`]*[^` ]+)\s*<([^`]+)>`_+", r"[\1](\2)", processed_line - ) - processed_line = re.sub(r"^\.\. _([^:]+):\s*(http.*)$", r"", processed_line) - - if ":ghedit:" in processed_line: - processed_line = "" - - return processed_line - - -def process_api(processed_line, shortcode): - def api_repl(match): - content = match.group(1).strip() - - # Handle API references with text and path - if "<" in content and ">" in content: - text, api_path = content.split("<", 1) - api_path = api_path.rstrip(">") - # Use the apiref shortcode with custom text - return f'{{{{< {shortcode} "{text.strip()}" "{api_path}" >}}}}' - return f'{{{{< {shortcode} "{content}" "{content}" >}}}}' - - return re.sub(rf":{shortcode}:`([^`]+)`", api_repl, processed_line) - - -def process_multiline_references(lines): - """Process references that might be split across multiple lines.""" - processed_lines = [] - i = 0 - - while i < len(lines): - current_line = lines[i] - - # Check if this line might contain the start of a split reference - if ( - current_line.count("`") % 2 == 1 - and ">" not in current_line - and i + 1 < len(lines) - ): - # Look ahead to see if the next line completes the reference - next_line = lines[i + 1] - if ">" in next_line and ("`_" in next_line or ">" in next_line): - # This is a split reference, combine the lines - combined_line = current_line + next_line - # Process the combined line - processed_line = process_inline_markup(combined_line) - processed_lines.append(processed_line) - i += 2 # Skip the next line since we've processed it - continue - - # Normal line processing - processed_lines.append(process_inline_markup(current_line)) - i += 1 - - return processed_lines - - -def parse_substitutions(lines): - global substitutions - subs = {} - i = 0 - while i < len(lines): - line = lines[i] - m = re.match(r"^\s*\.\.\s+\|([^|]+)\|\s+(.*)", line) - if m: - subname = m.group(1).strip() - html_lines = [rst_unicode_to_markdown(m.group(2).strip())] - i += 1 - # Collect indented HTML lines - while i < len(lines) and ( - lines[i].strip() == "" or lines[i].startswith(" ") - ): - if lines[i].strip() != "": - html_lines.append(lines[i].lstrip()) - i += 1 - subs[subname] = "\n".join(html_lines) - else: - i += 1 - substitutions = subs - - -def replace_substitutions(line): - def repl(m): - name = m.group(1) - return substitutions.get(name, m.group(0)) - - return re.sub(r"\|([^|]+)\|", repl, line) - - -def remove_substitution_definitions(lines): - out = [] - i = 0 - while i < len(lines): - line = lines[i] - m = re.match(r"^\s*\.\.\s+\|([^|]+)\|\s+(.*)", line) - if m: - i += 1 - # Skip indented HTML lines - while i < len(lines) and ( - lines[i].strip() == "" or lines[i].startswith(" ") - ): - i += 1 - continue # skip this definition block - out.append(line) - i += 1 - return out - - -def process_redirects(lines): - out = [] - i = 0 - while i < len(lines): - line = lines[i] - if re.match(r"^\s*\.\.\s+redirect::\s*$", line): - url = None - i += 1 - while i < len(lines) and ( - lines[i].strip() == "" or lines[i].startswith(" ") - ): - m = re.match(r"^\s*:url:\s*(\S+)", lines[i].strip()) - if m: - url = m.group(1) - i += 1 - if url: - out.append(f'{{{{< redirect url="{url}" >}}}}') - continue - out.append(line) - i += 1 - return out - - -def process_anchors_and_images(lines): - out = [] - i = 0 - while i < len(lines): - line = lines[i] - indent = re.match(r"^(\s*)", line).group(1) - # Detect RST anchor (.. _anchor:) - anchor_match = re.match(r"^\s*\.\.\s*_([a-zA-Z0-9_-]+):\s*$", line) - if anchor_match: - anchor = anchor_match.group(1) - out.append(f'{indent}{{{{< anchor "{anchor.lower()}" >}}}}') - i += 1 - continue - # Detect indented .. image:: (even inside lists/admonitions) - image_match = re.match(r"^\s*\.\.\s*image::\s*(\S+)\s*$", line) - if image_match: - image_path = image_match.group(1) - if image_path.endswith(".avif"): - image_path = image_path.replace(".avif", ".webp") - # Collect options (indented lines) - options = {} - j = i + 1 - while j < len(lines) and (lines[j].strip() and lines[j].startswith(" ")): - opt_line = lines[j].strip() - m = re.match(r":([a-zA-Z0-9_-]+):\s*(.*)", opt_line) - if m: - options[m.group(1)] = m.group(2) - j += 1 - alt = options.get("alt", "") - width = options.get("width") - height = options.get("height") - # Build img shortcode - shortcode = f'{{{{< img src="{image_path}" alt="{alt}" ' - if width: - shortcode += f' width="{width}"' - if height: - shortcode += f' height="{height}"' - shortcode += " >}}" - out.append(f"{indent}{shortcode}") - i = j - continue - out.append(line) - i += 1 - return out - - -def convert_image_directive_in_text(text, indent=""): - # Handles .. image:: and .. figure:: path [options] in a text block (single or multiline) - lines = text.splitlines() - out = [] - i = 0 - while i < len(lines): - line = lines[i] - img_match = re.match(r"^\s*\.\.\s*(image|figure)::\s*(\S+)\s*$", line) - if img_match: - image_path = img_match.group(2) - if image_path.endswith(".avif"): - image_path = image_path.replace(".avif", ".webp") - is_figure = img_match.group(1) == "figure" - options = {} - caption_lines = [] - j = i + 1 - # Collect options and caption (for figure::) - while j < len(lines) and (lines[j].strip() and lines[j].startswith(" ")): - opt_line = lines[j].strip() - m = re.match(r":([a-zA-Z0-9_-]+):\s*(.*)", opt_line) - if m: - options[m.group(1)] = m.group(2) - elif is_figure: - caption_lines.append(opt_line) - j += 1 - alt = options.get("alt", "") - width = options.get("width") - height = options.get("height") - caption = "" - if is_figure and caption_lines: - # Join and process caption lines as inline markup - caption = " ".join(caption_lines) - shortcode = f'{{{{< img src="{image_path}" alt="{alt}" ' - if caption: - shortcode += f'caption="{caption}" ' - if width: - shortcode += f'width="{width}" ' - if height: - shortcode += f'height="{height}" ' - shortcode += ">}}" - out.append(f"{indent}{shortcode}") - i = j - continue - out.append(line) - i += 1 - return "\n".join(out) - - -def get_indent(line): - return len(line) - len(line.lstrip()) - - -def process_list_table(lines, start_idx): - """Process a list-table directive and convert it to a Markdown table.""" - # Extract table title and options - title = "" - header_rows = 0 - align = "" - - current_line = lines[start_idx].strip() - if current_line.startswith(".. list-table::") or current_line.startswith( - ".. list-table::" - ): - title = ( - current_line.replace(".. list-table::", "") - .replace(".. list-table::", "") - .strip() - ) - - # Process table options - idx = start_idx + 1 - while idx < len(lines) and lines[idx].strip().startswith(":"): - option_line = lines[idx].strip() - if option_line.startswith(":header-rows:"): - try: - header_rows = int(option_line.split(":", 2)[2].strip()) - except (ValueError, IndexError): - pass - elif option_line.startswith(":width:"): - pass # width = option_line.split(':', 2)[2].strip() - elif option_line.startswith(":widths:"): - pass - elif option_line.startswith(":align:"): - align = option_line.split(":", 2)[2].strip() - elif option_line.startswith(":class:"): - # We don't use class in Markdown, but we'll parse it anyway - pass - idx += 1 - - # Skip any blank lines - while idx < len(lines) and not lines[idx].strip(): - idx += 1 - - # Process table rows - table_data = [] - current_row = [] - anchor = "" - - while idx < len(lines): - line = lines[idx].strip() - - # End of table when we hit a non-indented line after a blank line - if not line: - if idx + 1 < len(lines) and not lines[idx + 1].startswith(" "): - break - idx += 1 - continue - - if ( - line.strip().startswith(".. _") - and line.endswith(":") - or line.strip().startswith("{{") - ): - anchor = line - idx += 1 - continue - # New row starts with * - if line.startswith("*"): - if current_row: - table_data.append(current_row) - current_row = [] - - # Extract the first cell value - cell_value = line[1:].strip() - if cell_value.startswith("-"): - cell_value = anchor.strip() + cell_value[1:].strip() - anchor = "" - current_row.append(cell_value) - - idx += 1 - continue - - # Cell values start with - - if line.startswith("-"): - cell_value = [line[1:].strip()] - this_indent = get_indent(lines[idx]) - idx += 1 - while idx < len(lines): - if lines[idx].strip().startswith("{{"): - anchor = lines[idx] - idx += 1 - continue - if lines[idx].strip() and get_indent(lines[idx]) > this_indent: - cell_value.append(lines[idx]) - idx += 1 - continue - if ( - not lines[idx].strip() - and idx + 1 < len(lines) - and get_indent(lines[idx + 1]) > this_indent - ): - cell_value.append(lines[idx]) - idx += 1 - continue - break - cell_text = process_cell_value(cell_value) - current_row.append(cell_text) - continue - # If we get here, it's either the end of the table or something we don't understand - if not lines[idx].startswith(" "): - break - - idx += 1 - - # Add the last row if it has content - if current_row: - table_data.append(current_row) - - # Generate Markdown table - md_table = [] - - # Add title if present and not empty - if title and title.strip(): - # Remove any leading colon from the title - if title.startswith(":"): - title = title[1:].strip() - md_table.append(f"### {title}") - md_table.append("") - - # Ensure all rows have the same number of columns - if table_data: - max_cols = max(len(row) for row in table_data) - for row in table_data: - while len(row) < max_cols: - row.append("") - - # Create the table header - if header_rows > 0: - header_row = table_data[0] - md_table.append( - "| " - + " | ".join( - convert_image_directive_in_text(cell) for cell in header_row - ) - + " |" - ) - - # Add alignment to the separator row if specified - if align == "center": - md_table.append("| " + " | ".join([":---:"] * len(header_row)) + " |") - elif align == "right": - md_table.append("| " + " | ".join(["---:"] * len(header_row)) + " |") - elif align == "left": - md_table.append("| " + " | ".join([":---"] * len(header_row)) + " |") - else: - md_table.append("| " + " | ".join(["---"] * len(header_row)) + " |") - - # Add data rows - for row in table_data[header_rows:]: - md_table.append( - "| " - + " | ".join(convert_image_directive_in_text(cell) for cell in row) - + " |" - ) - else: - # No header, just data rows - for row in table_data: - md_table.append( - "| " - + " | ".join(convert_image_directive_in_text(cell) for cell in row) - + " |" - ) - - # Add a blank line after the table - md_table.append("") - - return md_table, idx - - -def process_cell_value(cell_value): - if isinstance(cell_value, str): - cell_value = cell_value.split("\n") - cell_text = "" - i = 0 - while i < len(cell_value): - if "figure::" in cell_value[i] or "image::" in cell_value[i]: - shortcode, i = process_image_directive(cell_value, i) - cell_text = " ".join([cell_text, shortcode]) - else: - cell_text = " ".join([cell_text, cell_value[i].strip()]) - i += 1 - return process_inline_markup(cell_text) - - -def process_csv_table(lines, start_idx): - """Process a csv-table directive and convert it to a Markdown table.""" - # Extract table title and options - title = "" - header_rows = None - align = "" - delimiter = "," - - current_line = lines[start_idx].strip() - if current_line.startswith(".. csv-table::"): - title = current_line.replace(".. csv-table::", "").strip() - - # Process table options - idx = start_idx + 1 - while idx < len(lines) and lines[idx].strip().startswith(":"): - option_line = lines[idx].strip() - if option_line.startswith(":header:"): - header_rows = normalize_csv_lines([option_line.split(":", 2)[2].strip()])[0] - elif option_line.startswith(":width:"): - pass # width = option_line.split(':', 2)[2].strip() - elif option_line.startswith(":align:"): - align = option_line.split(":", 2)[2].strip() - elif option_line.startswith(":delim:"): - delimiter = option_line.split(":", 2)[2].strip() - # Handle special delimiter cases - if delimiter == "tab": - delimiter = "\t" - elif delimiter == "space": - delimiter = " " - elif option_line.startswith(":file:"): - # Handle CSV file inclusion - csv_file = option_line.split(":", 2)[2].strip() - # This would need to be implemented to read from the file - # For now, we'll just print a warning - print(f"Warning: CSV file inclusion not yet supported: {csv_file}") - idx += 1 - - # Skip any blank lines - while idx < len(lines) and not lines[idx].strip(): - idx += 1 - - # Process table rows - table_data = [] - - while idx < len(lines): - line = lines[idx].strip() - - # End of table when we hit a non-indented line after a blank line - if not line: - if idx + 1 < len(lines) and not lines[idx + 1].startswith(" "): - break - idx += 1 - continue - - # End of table when we hit a line that doesn't start with whitespace - if not lines[idx].startswith(" "): - break - - # Process CSV line - # Remove leading whitespace but keep the rest of the line intact - table_data.append(line.strip()) - idx += 1 - - table_data = normalize_csv_lines(table_data, delimiter) - # Generate Markdown table - md_table = [] - - # Add title if present and not empty - if title and title.strip(): - # Remove any leading colon from the title - if title.startswith(":"): - title = title[1:].strip() - md_table.append(f"### {title}") - md_table.append("") - - # Ensure all rows have the same number of columns - if table_data: - max_cols = max(len(row) for row in table_data) - for row in table_data: - while len(row) < max_cols: - row.append("") - - # Create the table header and separator - if header_rows: - # Add header row - md_table.append( - "| " - + " | ".join( - convert_image_directive_in_text(cell) for cell in header_rows - ) - + " |" - ) - - # Add alignment to the separator row if specified - if align == "center": - md_table.append("| " + " | ".join([":---:"] * len(header_rows)) + " |") - elif align == "right": - md_table.append("| " + " | ".join(["---:"] * len(header_rows)) + " |") - elif align == "left": - md_table.append("| " + " | ".join([":---"] * len(header_rows)) + " |") - else: - md_table.append("| " + " | ".join(["---"] * len(header_rows)) + " |") - - # Add data rows - for row in table_data: - md_table.append( - "| " - + " | ".join(convert_image_directive_in_text(cell) for cell in row) - + " |" - ) - else: - # No header specified, but we still need to add a separator after the first row - if table_data: - # Add first row - first_row = table_data[0] - md_table.append( - "| " - + " | ".join( - convert_image_directive_in_text(cell) for cell in first_row - ) - + " |" - ) - - # Add separator row - if align == "center": - md_table.append( - "| " + " | ".join([":---:"] * len(first_row)) + " |" - ) - elif align == "right": - md_table.append("| " + " | ".join(["---:"] * len(first_row)) + " |") - elif align == "left": - md_table.append("| " + " | ".join([":---"] * len(first_row)) + " |") - else: - md_table.append("| " + " | ".join(["---"] * len(first_row)) + " |") - - # Add remaining data rows - for row in table_data[1:]: - md_table.append( - "| " - + " | ".join( - convert_image_directive_in_text(cell) for cell in row - ) - + " |" - ) - - # Add a blank line after the table - md_table.append("") - - return md_table, idx - - -def process_grid_table(lines, start_idx): - """Process a grid table directive and convert it to a Markdown table. - - Grid tables in RST can be formatted in two ways: - 1. With rows separated by lines of "=" or "-" characters and columns separated by "|" characters - 2. With rows separated by lines of "=" or "-" characters and columns aligned by whitespace - - Args: - lines: List of lines in the file - start_idx: Index of the first line of the grid table - - Returns: - Tuple of (markdown_table_lines, end_idx) - """ - i = start_idx - table_lines = [] - - # Collect all lines of the table - while i < len(lines): - line = lines[i] - # If we hit an empty line after the table has started, we're done - if not line.strip() and table_lines: - break - - # Add any line that's part of the table structure - if line.strip(): - table_lines.append(line) - else: - # Not part of the table - break - - i += 1 - - # Process the table - if not table_lines: - return [], start_idx - - # Determine if this is a table with | separators or whitespace alignment - has_pipe_separators = "+" in table_lines[0] - - if has_pipe_separators: - return process_pipe_separated_table(table_lines), i - else: - return process_whitespace_aligned_table(table_lines, i) - - -def process_pipe_separated_table(lines): - # Find border lines and split table into row-blocks - rows = [] - current_block = [] - for line in lines: - if line.startswith("+") and "=" in line: - # End of header row - if current_block: - rows.append(current_block) - current_block = [] - rows.append(["HEADER-SEPARATOR"]) - elif line.startswith("+") and "-" in line: - # End of normal row - if current_block: - rows.append(current_block) - current_block = [] - elif "|" in line: - cells = [c.strip() for c in line.split("|")[1:-1]] - current_block.append(cells) - - # Merge multi-line cells inside each block - merged_rows = [] - for block in rows: - if block == ["HEADER-SEPARATOR"]: - merged_rows.append(block) - continue - merged = [] - for col_parts in zip_longest(*block, fillvalue=""): - merged.append(" ".join(part for part in col_parts if part)) - merged_rows.append(merged) - - # Now build Markdown - md_lines = [] - for row in merged_rows: - if row == ["HEADER-SEPARATOR"]: - # Add Markdown separator for header - md_lines.append("|" + "|".join("---" for _ in merged_rows[0]) + "|") - else: - md_lines.append("| " + " | ".join(row) + " |") - - return md_lines - - -def process_whitespace_aligned_table(table_lines, end_idx): - """Process a grid table with whitespace alignment.""" - # Find separator rows (rows with only =, -, + and spaces) - separator_rows = [] - for idx, line in enumerate(table_lines): - if all(c in "=+-| " for c in line): - separator_rows.append(idx) - - # Identify the header rows (usually the first and last rows with = characters) - header_rows = [] - for idx, line in enumerate(table_lines): - if "=" in line and all(c in "=+-| " for c in line): - header_rows.append(idx) - - # Find column boundaries by analyzing the content rows - # We'll look at the first content row after the first separator - content_rows = [idx for idx in range(len(table_lines)) if idx not in separator_rows] - - # If we have no content rows, return empty - if not content_rows: - return [], end_idx - - column_positions = [] - first_header_row = min(header_rows) - first_header = table_lines[first_header_row] - - # Find column positions by looking for groups of non-space characters - in_column = False - for i, char in enumerate(first_header): - if not in_column and char != " ": - # Start of a column - in_column = True - column_positions.append(i) - elif in_column and char == " ": - # End of a column (followed by at least one more space or end of line) - in_column = False - - # Add an end position if needed - max_line_length = max(len(line) for line in table_lines) - if column_positions and column_positions[-1] < max_line_length: - column_positions.append(max_line_length) - - column_count = len(column_positions) - - # Process each row - header_added = False - rows = [] - for line_idx, line in enumerate(table_lines): - # Skip separator rows for Markdown output - if line_idx in separator_rows: - # If this is the separator after the header row, add a Markdown header separator - if not header_added and line_idx > 0 and line_idx - 1 not in separator_rows: - header_added = True - header_cells = ["---" for _ in range(column_count - 1)] - rows.append(header_cells) - continue - - # Extract cells from the row - cells = [] - for i in range(column_count): - start_pos = column_positions[i] - # End position is either the next column start or the end of the line - end_pos = column_positions[i + 1] if i + 1 < column_count else len(line) - - # Make sure we don't go out of bounds - if start_pos < len(line): - cell_content = line[start_pos : min(end_pos, len(line))].strip() - cell_content = process_cell_value(replace_substitutions(cell_content)) - cells.append(cell_content) - - # Add the row to Markdown output - if len(cells) < column_count - 1: - cells += ["" for _ in range(column_count - 1 - len(cells))] - if header_added and not cells[0].strip(): - rows[-1] = [p + " " + n for p, n in zip(rows[-1], cells)] - else: - rows.append(cells) - markdown_rows = ["| " + " | ".join(row) + " |" for row in rows] - return markdown_rows, end_idx - - -def process_raw_html_block(lines, i): - """Process raw HTML button patterns and convert them to button shortcode.""" - button_lines = [] - raw_html_indent = len(lines[i]) - len(lines[i].lstrip()) - - i, raw_html_content = get_indented_block(lines, i + 1, raw_html_indent) - html_content = [x.strip() for x in raw_html_content] - html = " ".join(html_content) - - # --- API KEY SHORTCODE REPLACEMENT (for api.rst) --- - if '}}"], i - # --- END API KEY SHORTCODE REPLACEMENT --- - - # Check if it's a button pattern - href_match = re.search(r']*>', html) - img_match = re.search(r']*alt="([^"]*)"[^>]*/?>', html) - - if href_match and img_match: - href = href_match.group(1) - img = img_match.group(1) - alt = img_match.group(2) - - # Create button shortcode - button_lines.append(f"[![{alt}]({img})]({href})") - return button_lines, i - - file_match = None - class_match = None - for line in raw_html_content: - if not file_match: - file_match = re.search(r":file: (.+)", line.strip()) - if not class_match: - class_match = re.search(r":class: (.+)", line.strip()) - - if file_match: - href = file_match.group(1) - href = href.replace("../", "", 1) - class_ = "" - if class_match: - classes = class_match.group(1).replace(",", " ").strip() - class_ = 'class="' + classes + '"' - button_lines.append(f'{{{{< html_file file="{href}" {class_} >}}}}') - button_lines.append("") - return button_lines, i - - # If it's not a button pattern, just keep the raw HTML - button_lines.append("\n".join(raw_html_content)) - return button_lines, i - - -def process_image_directive(lines, i): - """Process an image or figure directive and convert it to a Hugo shortcode.""" - line = lines[i] - - is_figure = False - if "figure::" in line: - is_figure = True - image_path = line.replace("(\\.\\. )?figure::", "").strip() - else: - image_path = line.replace("(\\.\\. )?image::", "").strip() - - # Extract the image filename - if image_path.endswith(".avif"): - image_path = image_path.replace(".avif", ".webp") - image_filename = os.path.basename(image_path) - - # Skip options - i += 1 - - # Process options - alt_text = "Image" - caption = "" - width = "" - height = "" - align = "" - - while i < len(lines) and ( - not lines[i].strip() - or lines[i].startswith(" ") - and lines[i].strip().startswith(":") - ): - option_line = lines[i].strip() - if option_line.startswith(":alt:"): - alt_text = option_line.replace(":alt:", "").strip() - elif option_line.startswith(":width:"): - width = option_line.split(":", 2)[2].strip() - elif option_line.startswith(":height:"): - height = option_line.split(":", 2)[2].strip() - elif option_line.startswith(":align:"): - align = option_line.split(":", 2)[2].strip() - i += 1 - - # Get caption if present (for figures) - caption_lines = [] - while i < len(lines) and lines[i].startswith(" ") and is_figure: - caption_lines.append(lines[i].strip()) - i += 1 - - # Skip any blank lines after the caption - while i < len(lines) and not lines[i].strip(): - i += 1 - - # Process caption for inline markup if present - if caption_lines: - # Join caption lines into a single string - caption_text = " ".join(caption_lines) - # Process the caption for inline markup (references, formatting, etc.) - caption = process_inline_markup(caption_text) - - # Escape quotes in alt text and caption - if alt_text: - alt_text = alt_text.replace('"', '\\"') - if caption: - caption = caption.replace('"', '\\"') - - # Create the shortcode - shortcode = f'{{{{< img src="{image_filename}" alt="{alt_text}" ' - if caption: - shortcode += f'caption="{caption}" ' - if width: - shortcode += f'width="{width}" ' - if height: - shortcode += f'height="{height}" ' - if align: - shortcode += f'class="align-{align}" ' - shortcode += ">}}" - - return shortcode, i - - -def process_includes(lines, current_dir): - """Process include directives in RST files.""" - processed_lines = [] - i = 0 - - while i < len(lines): - line = lines[i] - - # Check for include directive - include_match = re.match(r"^(\s*)\.\.[\s]+include::[\s]+(.+\.rst)$", line) - if include_match: - indent = include_match.group(1) - include_file = include_match.group(2).strip() - - # Construct the full path to the included file - include_path = os.path.join(current_dir, include_file) - - if os.path.exists(include_path): - # Read the included file - with open(include_path, "r", encoding="utf-8") as f: - include_content = f.read() - - # Process the included content - include_lines = include_content.split("\n") - - # Add indentation to all lines from the included file - for include_line in include_lines: - if include_line.strip(): - processed_lines.append(f"{indent}{include_line}") - else: - processed_lines.append("") - else: - # If the file doesn't exist, just keep the include directive as a comment - processed_lines.append( - f"{indent}" - ) - else: - processed_lines.append(line) - - i += 1 - - return processed_lines - - -def fix_doc_path(path): - """Fix document paths to match Hugo's content structure.""" - # Remove .rst extension if present - path = path.lower() - if path.endswith(".rst"): - path = path[:-4] - if path.endswith("/index"): - path = path[:-6] - - # Handle special cases for components - # if path.startswith('components/'): - # path = path[11:] # Remove 'components/' prefix - # elif '/' in path and not path.startswith('/'): - # # For paths like 'switch/gpio', we need to make them '/components/switch/gpio' - # path = f"/components/{path}" - - # Don't add trailing slash for file references - # Check if it's likely a file reference (contains no hash and has a name after the last slash) - if not path.startswith("#") and "/" in path: - last_part = path.split("/")[-1] - # If the last part looks like a filename (not empty and doesn't end with a slash) - if last_part and not path.endswith("/"): - # Don't add a trailing slash - return path - - # Add trailing slash for section references (if not to a specific anchor) - if not path.startswith("#") and not path.endswith("/") and "#" not in path: - path = f"{path}/" - - return path - - -def scan_image_references(input_dir): - """Scan all RST files for image references and track their usage.""" - print("Scanning for image references...") - - # Regular expressions to match different types of image references - image_patterns = [ - r".. figure:: ([^\s]+)", # Figure directive - r".. image:: ([^\s]+)", # Image directive - r"image:: ([^\s]+)", # Image reference - r":image: ([^\s]+)", # Seo Image reference - r'src="([^"]+\.(avif|png|jpg|jpeg|gif|svg))"', # HTML img tag - r"!\[(.*?)\]\(([^)]+\.(avif|png|jpg|jpeg|gif|svg))\)", # Markdown image syntax - ] - - # Initialize image tracking dictionaries - result = {} - - for root, _, files in os.walk(input_dir): - for file in files: - if file.endswith(".rst"): - src_file = os.path.join(root, file) - - with open(src_file, "r", encoding="utf-8") as f: - content = f.read() - lines = content.splitlines() - - # Find all image references using regex patterns - for pattern in image_patterns: - for match in re.finditer(pattern, content): - image_path = match.group(1).strip() - - # Skip alignment options and other non-image paths - if image_path in ["center", "left", "right"]: - continue - - # Skip URLs - if image_path.startswith(("http://", "https://")): - continue - - # Normalize path - if image_path.startswith("/"): - # Absolute path within docs - abs_image_path = os.path.join( - input_dir, image_path.lstrip("/") - ) - else: - # Relative path - abs_image_path = os.path.join( - os.path.dirname(src_file), image_path - ) - if not os.path.exists(abs_image_path): - abs_image_path = os.path.join( - input_dir, "images/" + image_path.lstrip("/") - ) - - # Only count if the image file exists - if os.path.exists(abs_image_path): - image_filename = os.path.basename(image_path) - entry = result.setdefault( - image_filename, - ImageInfo(image_filename, abs_image_path, src_file), - ) - entry.increment() - # print(f"Found image: {image_filename} in {rel_path}") - - # Find images in imgtable directives - i = 0 - while i < len(lines): - line = lines[i].strip() - - # Check for imgtable directive - if line == ".. imgtable::": - i += 1 - # Skip empty lines - while i < len(lines) and not lines[i].strip(): - i += 1 - - # Process each entry in the imgtable - while i < len(lines): - current_line = lines[i].strip() - - # If we hit an empty line or a non-indented line, we're done with this imgtable - if not lines[i].startswith(" ") and current_line: - break - - # Skip empty lines within the imgtable - if not current_line: - i += 1 - continue - - # Process the entry - format is typically: Title, Link, Image, [Description] - parts = [part.strip() for part in current_line.split(",")] - if ( - len(parts) >= 3 - ): # We need at least 3 parts (title, link, image) - image_path = parts[2] - - # Skip URLs - if image_path.startswith(("http://", "https://")): - i += 1 - continue - - # Normalize path - if image_path.startswith("/"): - # Absolute path within docs - abs_image_path = os.path.join( - input_dir, image_path.lstrip("/") - ) - else: - # Relative path - abs_image_path = os.path.join( - os.path.dirname(src_file), image_path - ) - if not os.path.exists(abs_image_path): - abs_image_path = os.path.join( - input_dir, "images", image_path - ) - - # Only count if the image file exists - if os.path.exists(abs_image_path): - image_filename = os.path.basename(image_path) - entry = result.setdefault( - image_filename, - ImageInfo( - image_filename, abs_image_path, src_file - ), - ) - entry.increment() - # print(f"Found image in imgtable: {image_filename} in {rel_path}") - else: - print( - f"Image not found: {image_path} in {abs_image_path}" - ) - - i += 1 - else: - i += 1 - - # Print statistics - print(f"Found {len(result)} unique images") - multiple = [image for image in result.values() if image.count > 1] - print(f"Images used more than once: {len(multiple)}") - - return result - - -# Special handling for some files - - -def process_actions_file(lines): - start_actions = lines.index("## All Actions") - end_actions = lines.index('{{< anchor "tips-and-tricks" >}}') - - if start_actions and end_actions: - lines = ( - lines[:start_actions] - + [ - "## All Actions", - '{{< render-automations "actions" >}}', - '{{< anchor "config-condition" >}}', - "## All Conditions", - '{{< render-automations "conditions" >}}', - ] - + lines[end_actions:] - ) - return lines - - -def process_file(src_file, output_dir, input_dir): - output_dir = os.path.join(output_dir, "content") - """Process a single RST file and convert it to Markdown.""" - # print(rf"Processing file: {src_file}", end="", flush=True) - try: - # Read the RST file - rel_path, rst_content = get_rst_content(input_dir, src_file) - - # Convert RST to Markdown - md_content = convert_rst_to_md(rst_content, rel_path) - - # Determine output path - if os.path.basename(src_file) == "index.rst": - # Convert index.rst to _index.md for Hugo - output_path = os.path.join( - output_dir, os.path.dirname(rel_path), "_index.md" - ) - else: - output_path = os.path.join( - output_dir, os.path.splitext(rel_path)[0] + ".md" - ) - - if output_path.endswith("automations/actions.md"): - md_content = process_actions_file(md_content) - - # Create output directory if it doesn't exist - os.makedirs(os.path.dirname(output_path), exist_ok=True) - - # Write the Markdown file - # If the file already exists we don't need to tell git to move it - if not os.path.exists(output_path): - repo = Repo(".") - repo.git.mv(src_file, output_path, "-f") - with open(output_path, "w", encoding="utf-8") as f: - f.write("\n".join(md_content)) - - # print(f" Converted {src_file} -> {output_path}\033G", end="", flush=True) - # print(f"Output file size: {len(md_content)} bytes") - - return output_path - except Exception as e: - print(f"Error converting {src_file}: {str(e)}") - import traceback - - traceback.print_exc() - return None - - -def get_rst_content(input_dir, src_file): - with open(src_file, "r", encoding="utf-8") as f: - rst_content = f.read() - # print(f"File size: {len(rst_content)} bytes") - # Get the relative path of the file - rel_path = os.path.relpath(src_file, input_dir) - # Process includes before conversion - current_dir = os.path.dirname(src_file) - rst_lines = rst_content.split("\n") - rst_lines = process_includes(rst_lines, current_dir) - return rel_path, rst_lines - - -def process_directory(input_dir, output_dir): - """Process all RST files in a directory and its subdirectories.""" - success_count = 0 - total_count = 0 - - rstfiles = [] - for root, _, files in os.walk(input_dir): - for file in files: - if file.endswith(".rst"): - fullpath = os.path.join(root, file) - rstfiles.append(fullpath) - included_files.update(set(find_included_files(fullpath))) - - for fullpath in rstfiles: - root = os.path.dirname(fullpath) - if ( - os.path.basename(root) == input_dir - and os.path.basename(fullpath) == "index.rst" - ): - print("Skipping top-level index.rst file:", fullpath) - continue - if fullpath in included_files: - print("Skipping included file:", fullpath) - continue - elif fullpath.endswith(".rst"): - included_files.update(set(find_included_files(fullpath))) - total_count += 1 - if process_file(fullpath, output_dir, input_dir): - success_count += 1 - - print( - f"Conversion complete. {success_count}/{total_count} files successfully converted to {output_dir}" - ) - - -def should_copy_file(source_path, target_path): - """ - Determine if a file should be copied based on existence and modification time. - Returns True if the target doesn't exist or if the source is newer than the target. - """ - if not os.path.exists(target_path): - return True - - # Check if source is newer than target - source_mtime = os.path.getmtime(source_path) - target_mtime = os.path.getmtime(target_path) - - return source_mtime > target_mtime - - -def copy_images_to_output(output_dir, input_dir, replace=False): - """Copy images to the appropriate locations based on usage.""" - print("Copying images to output directories...") - - # Create global images directory - global_images_dir = os.path.join(output_dir, "static", "images") - os.makedirs(global_images_dir, exist_ok=True) - - # Copy images based on usage - for image in image_map.values(): - source_path = image.path - target_name = image.name - if image.name.endswith(".avif"): - continue - - if image.count > 1: - # Used more than once - copy to global images folder - target_path = os.path.join(global_images_dir, target_name) - else: - # Used only once - copy to component-level images folder - # Find the RST file that references this image - rel_path = os.path.relpath(image.source, input_dir) - component_dir = os.path.dirname(rel_path) - - # Create component-level images directory in content - component_content_dir = os.path.join(output_dir, "content", component_dir) - component_images_dir = os.path.join(component_content_dir, "images") - os.makedirs(component_images_dir, exist_ok=True) - - target_path = os.path.join(component_images_dir, target_name) - - if replace: - repo = Repo(".") - repo.git.mv(image.path, target_path, "-f") - else: - shutil.copy2(source_path, target_path) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Convert Sphinx RST files to Hugo Markdown format" - ) - parser.add_argument("input_dir", help="Input directory containing RST files") - parser.add_argument("output_dir", help="Output directory for Markdown files") - parser.add_argument( - "--single", help="Process a single file (relative to input_dir)" - ) - parser.add_argument( - "--no-images", action="store_true", help="Skip image processing" - ) - args = parser.parse_args() - - # Ensure output directory exists - os.makedirs(args.output_dir, exist_ok=True) - os.makedirs(os.path.join(args.output_dir, "content"), exist_ok=True) - os.makedirs(os.path.join(args.output_dir, "static"), exist_ok=True) - - # Build the anchor map first - get_all_included_files(args.input_dir) - build_anchor_map(args.input_dir) - - # Scan for image references - image_map = scan_image_references(args.input_dir) - - if args.single: - # Process a single file - rst_file = os.path.join(args.input_dir, args.single) - if os.path.exists(rst_file): - process_file(rst_file, args.output_dir, args.input_dir) - else: - print(f"Error: File {rst_file} not found") - else: - # Process all files in the directory - process_directory(args.input_dir, args.output_dir) - - # Copy images to output directories - if not args.no_images: - copy_images_to_output(args.output_dir, args.input_dir) diff --git a/script/fix_markdown.py b/script/fix_markdown.py deleted file mode 100644 index 1ea740e7a5..0000000000 --- a/script/fix_markdown.py +++ /dev/null @@ -1,686 +0,0 @@ -#!/usr/bin/env python3 -""" -Script to fix markdown formatting in ESPHome documentation. - -Fixes applied: -- Wrap lines longer than 120 characters -- Remove unneeded consecutive spaces -- Ensure all list markers have exactly one space after them -- Reduce consecutive blank lines to a single blank line -- Ensure blank lines around headings, fenced code blocks, and lists -- Convert numbered lists to use 1. instead of sequential numbers - -Code blocks and tables are preserved without modification. -""" - -import argparse -import os -import re -import sys -from pathlib import Path -from typing import List, Tuple - - -def is_in_frontmatter(lines: List[str], line_idx: int) -> bool: - """Check if the current line is inside YAML frontmatter.""" - if line_idx >= len(lines): - return False - - # Look for frontmatter boundaries - frontmatter_start = -1 - frontmatter_end = -1 - - for i, line in enumerate(lines): - stripped = line.strip() - if stripped == "---": - if frontmatter_start == -1: - frontmatter_start = i - elif frontmatter_end == -1: - frontmatter_end = i - break - - if frontmatter_start != -1 and frontmatter_end != -1: - return frontmatter_start < line_idx < frontmatter_end - - return False - - -def is_in_code_block(lines: List[str], line_idx: int) -> bool: - """Check if the current line is inside a code block.""" - code_block_count = 0 - for i in range(line_idx + 1): - line = lines[i].strip() - if line.startswith("```"): - code_block_count += 1 - return code_block_count % 2 == 1 - - -def is_table_line(line: str) -> bool: - """Check if a line is part of a markdown table.""" - stripped = line.strip() - # Table header separator (e.g., |---|---|) - if re.match(r"^\|[\s\-\|:]+\|$", stripped): - return True - # Table row (contains | but not just at start/end) - if "|" in stripped and stripped.count("|") >= 2: - return True - return False - - -def is_in_table(lines: List[str], line_idx: int) -> bool: - """Check if the current line is part of a table by looking at context.""" - if line_idx >= len(lines): - return False - - current_line = lines[line_idx].strip() - if not current_line or not is_table_line(current_line): - return False - - # Look for table context (header separator above or below) - for offset in [-2, -1, 1, 2]: - check_idx = line_idx + offset - if 0 <= check_idx < len(lines): - check_line = lines[check_idx].strip() - if re.match(r"^\|[\s\-\|:]+\|$", check_line): - return True - - return False - - -def process_line_with_inline_code(line: str) -> str: - """Process a line that may contain inline code, preserving code content.""" - if "`" not in line: - return remove_consecutive_spaces(line) - - # Split by backticks and process alternating segments - parts = line.split("`") - processed_parts = [] - - for i, part in enumerate(parts): - if i % 2 == 0: # Outside code - # Apply both consecutive space removal and punctuation spacing fix - part = remove_consecutive_spaces(part) - part = fix_punctuation_spacing(part) - processed_parts.append(part) - else: # Inside code - preserve as-is - processed_parts.append(part) - - return "`".join(processed_parts) - - -def get_list_indent(line: str) -> Tuple[str, str, str]: - """Extract list indentation, marker, and content from a line. - Returns (indent, marker, content) where marker includes the space after it. - """ - stripped = line.lstrip() - indent = line[: len(line) - len(stripped)] - - # Check for bullet lists - bullet_match = re.match(r"^([-*+])\s+(.*)$", stripped) - if bullet_match: - marker = bullet_match.group(1) + " " - content = bullet_match.group(2) - return indent, marker, content - - # Check for numbered lists (treat all as 1.) - number_match = re.match(r"^(\d+\.)\s+(.*)$", stripped) - if number_match: - marker = "1. " # Always use 1. for numbered lists - content = number_match.group(2) - return indent, marker, content - - return "", "", line - - -def is_url(word: str) -> bool: - """Check if a word is a URL that should not be split.""" - return any( - word.startswith(protocol) for protocol in ["http://", "https://", "ftp://"] - ) - - -def find_shortcode_boundaries(text: str) -> List[Tuple[int, int]]: - """Find all shortcode boundaries in text. Returns list of (start, end) positions.""" - boundaries = [] - i = 0 - while i < len(text): - start = text.find("{{<", i) - if start == -1: - break - end = text.find(">}}", start) - if end == -1: - break - boundaries.append((start, end + 3)) # +3 for '>}}' - i = end + 3 - return boundaries - - -def split_preserving_shortcodes(text: str) -> List[str]: - """Split text into words while preserving shortcodes as single units.""" - shortcode_boundaries = find_shortcode_boundaries(text) - if not shortcode_boundaries: - return text.split() - - parts = [] - last_end = 0 - - for start, end in shortcode_boundaries: - # Add words before the shortcode - before = text[last_end:start].strip() - if before: - parts.extend(before.split()) - - # Add the shortcode as a single unit - shortcode = text[start:end] - parts.append(shortcode) - - last_end = end - - # Add any remaining text after the last shortcode - after = text[last_end:].strip() - if after: - parts.extend(after.split()) - - return parts - - -def is_shortcode(word: str) -> bool: - """Check if a word is a Hugo shortcode that should not be split.""" - return word.startswith("{{<") and word.endswith(">}}") - - -def break_long_shortcode(shortcode: str, max_length: int, indent: str) -> List[str]: - """Break a long shortcode into multiple lines at safe breakpoints between quoted parameters.""" - if len(shortcode) <= max_length: - return [shortcode] - - # Find safe breakpoints (spaces that are not inside quotes) - breakpoints = [] - in_quotes = False - quote_char = None - - for i, char in enumerate(shortcode): - if char in ['"', "'"] and (i == 0 or shortcode[i - 1] != "\\"): - if not in_quotes: - in_quotes = True - quote_char = char - elif char == quote_char: - in_quotes = False - quote_char = None - elif char == " " and not in_quotes and i > 3: # Don't break right after {{< - breakpoints.append(i) - - if not breakpoints: - return [shortcode] # No safe breakpoints found - - # Build lines by accumulating content until we exceed max_length - lines = [] - current_start = 0 - - for i, breakpoint in enumerate(breakpoints): - # Check if we can fit more content on current line - content_so_far = shortcode[current_start:breakpoint] - - if current_start == 0: - # First line - no indent - if len(content_so_far) <= max_length: - continue # Can fit more - else: - # Need to break at previous breakpoint or here if it's the first - if i > 0: - prev_breakpoint = breakpoints[i - 1] - lines.append(shortcode[current_start:prev_breakpoint]) - current_start = prev_breakpoint + 1 - else: - # Must break here even though it's long - lines.append(content_so_far) - current_start = breakpoint + 1 - else: - # Continuation line - with indent - indented_content = indent + content_so_far - if len(indented_content) <= max_length: - continue # Can fit more - else: - # Need to break at previous breakpoint - if i > 0: - prev_breakpoint = breakpoints[i - 1] - prev_content = shortcode[current_start:prev_breakpoint] - lines.append(indent + prev_content) - current_start = prev_breakpoint + 1 - else: - # Must break here - lines.append(indent + content_so_far) - current_start = breakpoint + 1 - - # Add remaining content - remaining = shortcode[current_start:].strip() - if remaining: - if lines: - lines.append(indent + remaining) - else: - lines.append(remaining) - - return lines if lines else [shortcode] - - -def is_atomic_word(word: str) -> bool: - """Check if a word should be treated as an atomic unit (URL but not shortcode now).""" - return is_url(word) # Shortcodes can now be broken, so only URLs are atomic - - -def wrap_line(line: str, max_length: int = 120) -> List[str]: - """Wrap a line to max_length, preserving markdown formatting and not splitting URLs.""" - if len(line) <= max_length: - return [line] - - # Note: We now handle shortcodes intelligently instead of skipping the entire line - - # Check if this is a list item - indent, marker, content = get_list_indent(line) - - if marker: # This is a list item - if not content or len(content) <= 20: - return [line] - - # Calculate continuation indent (align with content after marker) - continuation_indent = indent + " " * len(marker) - - # Split content into words while preserving shortcodes - words = split_preserving_shortcodes(content) - if not words: - return [line] - - wrapped_lines = [] - current_line = indent + marker + words[0] - - for word in words[1:]: - # Check if adding this word would exceed the limit - potential_line = current_line + " " + word - if len(potential_line) <= max_length: - current_line = potential_line - else: - # If the word is a long shortcode, try to break it - if is_shortcode(word) and len(word) > max_length: - wrapped_lines.append(current_line) - broken_shortcode = break_long_shortcode( - word, max_length, continuation_indent - ) - wrapped_lines.extend(broken_shortcode) - current_line = continuation_indent.rstrip() # Reset for next word - # If the word is atomic (URL) and adding it would exceed the limit, - # but the current line isn't empty, wrap before the atomic word - elif ( - is_atomic_word(word) - and current_line.strip() != (indent + marker).strip() - ): - wrapped_lines.append(current_line) - current_line = continuation_indent + word - # If it's not atomic or current line is just the marker, add normally - else: - wrapped_lines.append(current_line) - current_line = continuation_indent + word - - if current_line: - wrapped_lines.append(current_line) - - return wrapped_lines - - else: # Regular line - # Preserve leading whitespace - leading_space = len(line) - len(line.lstrip()) - indent = line[:leading_space] - content = line[leading_space:] - - # Don't wrap very short content - if len(content) <= 20: - return [line] - - words = split_preserving_shortcodes(content) - if not words: - return [line] - - wrapped_lines = [] - current_line = indent + words[0] - - for word in words[1:]: - # Check if adding this word would exceed the limit - potential_line = current_line + " " + word - if len(potential_line) <= max_length: - current_line = potential_line - else: - # If the word is a long shortcode, try to break it - if is_shortcode(word) and len(word) > max_length: - wrapped_lines.append(current_line) - broken_shortcode = break_long_shortcode(word, max_length, indent) - wrapped_lines.extend(broken_shortcode) - current_line = indent.rstrip() # Reset for next word - # If the word is atomic (URL) and adding it would exceed the limit, - # but the current line isn't empty, wrap before the atomic word - elif is_atomic_word(word) and current_line.strip() != indent.strip(): - wrapped_lines.append(current_line) - current_line = indent + word - # If it's not atomic or current line is just indent, add normally - else: - wrapped_lines.append(current_line) - current_line = indent + word - - if current_line: - wrapped_lines.append(current_line) - - return wrapped_lines - - -def fix_list_markers(line: str) -> str: - """Ensure list markers have exactly one space after them and convert numbered lists to 1.""" - # Match list markers: -, *, +, or numbered lists - patterns = [ - (r"^(\s*)([-*+])(\s+)", r"\1\2 "), # Bullet lists - (r"^(\s*)(\d+\.)(\s+)", r"\g<1>1. "), # Numbered lists -> convert to 1. - ] - - for pattern, replacement in patterns: - line = re.sub(pattern, replacement, line) - - return line - - -def remove_consecutive_spaces(line: str) -> str: - """Remove consecutive spaces, but preserve intentional formatting.""" - # Don't modify lines that are entirely whitespace - if not line.strip(): - return line - - # Preserve leading whitespace - leading_space = len(line) - len(line.lstrip()) - indent = line[:leading_space] - content = line[leading_space:] - - # Replace multiple spaces with single space - content = re.sub(r" {2,}", " ", content) - - return indent + content - - -def fix_punctuation_spacing(line: str) -> str: - """Remove spaces immediately before commas and periods.""" - # Don't modify lines that are entirely whitespace - if not line.strip(): - return line - - # Remove spaces before commas and periods - # Use word boundaries to avoid affecting things like version numbers (1.0) or decimals - line = re.sub(r"\s+([,.])(?=\s|$)", r"\1", line) - - return line - - -def is_heading(line: str) -> bool: - """Check if a line is a markdown heading.""" - stripped = line.strip() - return stripped.startswith("#") and " " in stripped - - -def is_fenced_code_block_start(line: str) -> bool: - """Check if a line starts a fenced code block.""" - return line.strip().startswith("```") and len(line.strip()) > 3 - - -def is_fenced_code_block_end(line: str) -> bool: - """Check if a line ends a fenced code block.""" - stripped = line.strip() - return stripped == "```" or (stripped.startswith("```") and len(stripped) == 3) - - -def is_list_item(line: str) -> bool: - """Check if a line is a list item.""" - stripped = line.strip() - if not stripped: - return False - - # Check for bullet lists - if re.match(r"^[-*+]\s+", stripped): - return True - - # Check for numbered lists - if re.match(r"^\d+\.\s+", stripped): - return True - - return False - - -def is_list_item_continuation(line: str, previous_line: str) -> bool: - """Check if a line is a continuation of a list item. - Continuations lines are part of the list item that came before - it if the line indentation is 2 or 3 spaces more than the list item line. - This should not strip lines to check for indentation. - """ - line_indent = len(line) - len(line.lstrip()) - previous_indent = len(previous_line) - len(previous_line.lstrip()) - return line_indent in {previous_indent + 2, previous_indent + 3} - - -def ensure_blank_lines_around_elements(lines: List[str]) -> List[str]: - """Ensure headings, fenced code blocks, and lists are surrounded by blank lines.""" - if not lines: - return lines - - result = [] - i = 0 - - while i < len(lines): - line = lines[i] - if is_in_code_block(lines, i): - result.append(line) - i += 1 - continue - - # Check if current line needs blank line before - needs_blank_before = ( - is_heading(line) - or is_fenced_code_block_start(line) - or (is_list_item(line) and i > 0 and not is_list_item(lines[i - 1])) - ) - - # Check if current line needs blank line after - needs_blank_after = ( - is_heading(line) - or is_fenced_code_block_end(line) - or ( - is_list_item(line) - and i < len(lines) - 1 - and not is_list_item(lines[i + 1]) - and lines[i + 1].strip() - and not is_list_item_continuation(lines[i + 1], line) - ) - ) - - # Add blank line before if needed - if needs_blank_before and result and result[-1].strip(): - result.append("") - - result.append(line) - - # Add blank line after if needed - if needs_blank_after and i < len(lines) - 1 and lines[i + 1].strip(): - result.append("") - - i += 1 - - return result - - -def fix_markdown_file(file_path: Path) -> bool: - """Fix a single markdown file. Returns True if changes were made.""" - try: - with open(file_path, "r", encoding="utf-8") as f: - lines = f.readlines() - except Exception as e: - print(f"Error reading {file_path}: {e}") - return False - - # Remove trailing newlines and convert to list without \n - original_lines = [line.rstrip("\n\r") for line in lines] - fixed_lines = [] - - i = 0 - while i < len(original_lines): - line = original_lines[i] - - # Skip processing if we're in frontmatter, code block, or table - if ( - is_in_frontmatter(original_lines, i) - or is_in_code_block(original_lines, i) - or is_in_table(original_lines, i) - ): - fixed_lines.append(line) - i += 1 - continue - - # Fix list markers - line = fix_list_markers(line) - - # Process line with inline code or remove consecutive spaces - if "`" in line: - line = process_line_with_inline_code(line) - else: - line = remove_consecutive_spaces(line) - - # Fix punctuation spacing (remove spaces before commas and periods) - line = fix_punctuation_spacing(line) - - # Wrap long lines - # disabled for now until we figure it out better - # if len(line) > 120: - # wrapped = wrap_line(line, 120) - # fixed_lines.extend(wrapped) - # else: - # fixed_lines.append(line) - - fixed_lines.append(line) - - i += 1 - - # Ensure blank lines around headings, code blocks, and lists - fixed_lines = ensure_blank_lines_around_elements(fixed_lines) - - # Reduce consecutive blank lines to single blank line - final_lines = [] - blank_count = 0 - - for line in fixed_lines: - if not line.strip(): - blank_count += 1 - if blank_count == 1: - final_lines.append("") - else: - blank_count = 0 - final_lines.append(line) - - # Remove trailing blank lines - while final_lines and not final_lines[-1].strip(): - final_lines.pop() - - # Check if changes were made - if final_lines != original_lines: - try: - with open(file_path, "w", encoding="utf-8") as f: - for line in final_lines: - f.write(line + "\n") - return True - except Exception as e: - print(f"Error writing {file_path}: {e}") - return False - - return False - - -def find_markdown_files(content_dir: Path) -> List[Path]: - """Find all markdown files in the content directory.""" - markdown_files = [] - for root, dirs, files in os.walk(content_dir): - for file in files: - if file.endswith(".md"): - markdown_files.append(Path(root) / file) - return sorted(markdown_files) - - -def main(): - """Main function to process markdown files.""" - parser = argparse.ArgumentParser( - description="Fix markdown formatting in ESPHome documentation", - formatter_class=argparse.RawDescriptionHelpFormatter, - epilog="""Examples: - python3 fix_markdown.py # Process all files in content/ - python3 fix_markdown.py --file content/api.md # Process a single file - python3 fix_markdown.py -f components/sensor/dht.md # Process relative to content/""", - ) - - parser.add_argument( - "--file", - "-f", - type=str, - help="Process a single markdown file (path relative to content/ or absolute path)", - ) - - args = parser.parse_args() - - content_dir = Path(os.getcwd()) / "content" - - if args.file: - # Process single file - file_path = Path(args.file) - - # If it's not absolute, make it relative to content directory - if not file_path.is_absolute(): - file_path = content_dir / file_path - - if not file_path.exists(): - print(f"File not found: {file_path}") - sys.exit(1) - - if not file_path.suffix == ".md": - print(f"File is not a markdown file: {file_path}") - sys.exit(1) - - print(f"Processing single file: {file_path}") - - try: - if fix_markdown_file(file_path): - print(f"Fixed: {file_path}") - else: - print(f"No changes needed: {file_path}") - except Exception as e: - print(f"Error processing {file_path}: {e}") - sys.exit(1) - - else: - # Process all files in content directory - if not content_dir.exists(): - print(f"Content directory not found: {content_dir}") - sys.exit(1) - - markdown_files = find_markdown_files(content_dir) - - if not markdown_files: - print("No markdown files found in content directory") - return - - print(f"Found {len(markdown_files)} markdown files") - - modified_count = 0 - for file_path in markdown_files: - try: - if fix_markdown_file(file_path): - print(f"Fixed: {file_path.relative_to(content_dir)}") - modified_count += 1 - else: - print(f"No changes: {file_path.relative_to(content_dir)}") - except Exception as e: - print(f"Error processing {file_path}: {e}") - - print(f"\nProcessed {len(markdown_files)} files") - print(f"Modified {modified_count} files") - - -if __name__ == "__main__": - main() diff --git a/script/migrate.sh b/script/migrate.sh deleted file mode 100755 index 49288649a1..0000000000 --- a/script/migrate.sh +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/bash -# -# should have already checked out the `new` branch -current_branch=$(git rev-parse --abbrev-ref HEAD) -[ "$current_branch" != "new" ] && echo only run this script from the 'new' branch && exit 1 - -# -# Remove previous migration -git reset --hard migration-base -#bring in latest -git merge --no-commit --no-ff origin current -git checkout HEAD -- Makefile -git add -u -git commit -m "Merge current" - - -# Convert and move -script/convert_rst_to_md.py . . -# Must commit the move before adding the rewrites -git commit --quiet --message="Rename files" --author="esphomebot <68923041+esphomebot@users.noreply.github.com>" - -# Extract version and release values from conf.py -# Write to data/version.yaml -mkdir -p data -python3 -c ' -import sys -import yaml -import conf -try: - with open("data/version.yaml", "r") as file: - data = yaml.safe_load(file) -except FileNotFoundError: - data = {} -data["release"] = conf.release -data["version"] = conf.version -with open("data/version.yaml", "w") as file: - yaml.dump(data, file) -' - -# Now add the updated content and commit -rm -rf _extensions _static _templates _themes components guides cookbook changelog automations images index.rst markdown.py projects svg2png svg2png.py web-api -git add -u -git add static content -git commit --quiet --message="Convert to Markdown" --author="esphomebot <68923041+esphomebot@users.noreply.github.com>" diff --git a/script/release_notes_template.md b/script/release_notes_template.md index 9a589f8752..64eddeacaf 100644 --- a/script/release_notes_template.md +++ b/script/release_notes_template.md @@ -1,15 +1,18 @@ --- description: "Changelog for ESPHome {VERSION}." title: "ESPHome {VERSION} - {DATE}" -params: - seo: - description: Changelog for ESPHome {VERSION}. - image: /changelog/images/changelog-{VERSION}.png +pagefind: false +slug: "{VERSION}" --- + + +import ImgTable from '@components/ImgTable.astro'; + -{{< imgtable >}} -{{< /imgtable >}} + ## Release Overview @@ -41,7 +44,7 @@ params: - Select 3-5 most important features/changes - Group related PRs into cohesive narratives - Include specific numbers (RAM savings, performance improvements) - - Use {{< docref >}} for component links + - Use [Component Name](/components/path/) for component links - Professional but enthusiastic tone - Order by importance (most impactful first) --> @@ -123,7 +126,3 @@ params: - -## All Changelogs - -{{< changelogs >}} diff --git a/script/seo_audit.mjs b/script/seo_audit.mjs new file mode 100644 index 0000000000..92a18144dd --- /dev/null +++ b/script/seo_audit.mjs @@ -0,0 +1,323 @@ +#!/usr/bin/env node +/** + * SEO Audit: Compare live site vs local Starlight build + * + * Checks: + * - Meta tags (title, description, og:*, twitter:*) + * - Canonical URLs + * - Heading structure (h1, h2, h3) + * - robots.txt and sitemap + * - Internal/external link counts + */ + +import { readdir, readFile } from 'fs/promises'; +import { join, relative } from 'path'; +import { JSDOM } from 'jsdom'; + +const LIVE_SITE = 'https://esphome.io'; +const DIST_DIR = 'dist'; +const SAMPLE_SIZE = 50; // Number of pages to audit + +/** + * Extract SEO data from HTML + */ +function extractSEO(html, url) { + const dom = new JSDOM(html); + const doc = dom.window.document; + + // Title + const title = doc.querySelector('title')?.textContent?.trim() || ''; + + // Meta tags + const getMeta = (name) => { + const el = doc.querySelector(`meta[name="${name}"], meta[property="${name}"]`); + return el?.getAttribute('content') || ''; + }; + + // Canonical + const canonical = doc.querySelector('link[rel="canonical"]')?.getAttribute('href') || ''; + + // Headings + const h1s = [...doc.querySelectorAll('h1')].map(h => h.textContent?.trim()); + const h2Count = doc.querySelectorAll('h2').length; + const h3Count = doc.querySelectorAll('h3').length; + + // Links + const allLinks = [...doc.querySelectorAll('a[href]')]; + const internalLinks = allLinks.filter(a => { + const href = a.getAttribute('href'); + return href?.startsWith('/') || href?.includes('esphome.io'); + }).length; + const externalLinks = allLinks.filter(a => { + const href = a.getAttribute('href'); + return href?.startsWith('http') && !href?.includes('esphome.io'); + }).length; + + // Images + const images = doc.querySelectorAll('img'); + const imagesWithAlt = [...images].filter(img => img.getAttribute('alt')).length; + + return { + url, + title, + titleLength: title.length, + description: getMeta('description'), + descriptionLength: getMeta('description').length, + ogTitle: getMeta('og:title'), + ogDescription: getMeta('og:description'), + ogImage: getMeta('og:image'), + twitterCard: getMeta('twitter:card'), + canonical, + h1s, + h1Count: h1s.length, + h2Count, + h3Count, + internalLinks, + externalLinks, + totalImages: images.length, + imagesWithAlt, + }; +} + +/** + * Get sample of HTML files from dist + */ +async function* getHtmlFiles(dir, limit) { + let count = 0; + const stack = [dir]; + + while (stack.length > 0 && count < limit) { + const current = stack.pop(); + const entries = await readdir(current, { withFileTypes: true }); + + for (const entry of entries) { + if (count >= limit) break; + + const fullPath = join(current, entry.name); + if (entry.isDirectory()) { + stack.push(fullPath); + } else if (entry.name === 'index.html') { + count++; + yield fullPath; + } + } + } +} + +/** + * Convert local path to live URL + */ +function localToLiveUrl(localPath) { + let path = relative(DIST_DIR, localPath); + path = path.replace(/\/index\.html$/, '/'); + if (path === 'index.html') path = '/'; + return new URL(path, LIVE_SITE).href; +} + +/** + * Analyze and report issues + */ +function analyzeIssues(local, live) { + const issues = []; + + // Title issues + if (!local.title) issues.push('Missing title'); + if (local.titleLength > 60) issues.push(`Title too long (${local.titleLength} chars)`); + if (local.titleLength < 30) issues.push(`Title too short (${local.titleLength} chars)`); + + // Description issues + if (!local.description) issues.push('Missing meta description'); + if (local.descriptionLength > 160) issues.push(`Description too long (${local.descriptionLength} chars)`); + if (local.descriptionLength < 50 && local.description) issues.push(`Description too short (${local.descriptionLength} chars)`); + + // H1 issues + if (local.h1Count === 0) issues.push('Missing H1'); + if (local.h1Count > 1) issues.push(`Multiple H1s (${local.h1Count})`); + + // Canonical issues + if (!local.canonical) issues.push('Missing canonical URL'); + + // OG issues + if (!local.ogTitle) issues.push('Missing og:title'); + if (!local.ogDescription) issues.push('Missing og:description'); + if (!local.ogImage) issues.push('Missing og:image'); + + // Comparison with live + if (live) { + if (local.title !== live.title && !local.title.includes(live.title.split(' - ')[0])) { + issues.push('Title changed significantly'); + } + if (local.description && live.description && + local.description !== live.description) { + issues.push('Description changed'); + } + } + + return issues; +} + +async function main() { + console.log('SEO Audit: Live Site vs Starlight Migration\n'); + console.log('='.repeat(60)); + + // Collect sample pages + const localPages = []; + for await (const file of getHtmlFiles(DIST_DIR, SAMPLE_SIZE)) { + localPages.push(file); + } + + console.log(`\nAuditing ${localPages.length} pages...\n`); + + const results = { + local: [], + live: [], + issues: [], + }; + + // Audit each page + for (const localFile of localPages) { + const liveUrl = localToLiveUrl(localFile); + const relPath = relative(DIST_DIR, localFile).replace('/index.html', '/'); + + process.stdout.write('.'); + + // Local + const localHtml = await readFile(localFile, 'utf-8'); + const localSEO = extractSEO(localHtml, relPath); + results.local.push(localSEO); + + // Live + let liveSEO = null; + try { + const resp = await fetch(liveUrl, { timeout: 10000 }); + if (resp.ok) { + const liveHtml = await resp.text(); + liveSEO = extractSEO(liveHtml, liveUrl); + results.live.push(liveSEO); + } + } catch (e) { + // Skip if can't fetch live + } + + // Analyze + const issues = analyzeIssues(localSEO, liveSEO); + if (issues.length > 0) { + results.issues.push({ url: relPath, issues }); + } + } + + console.log('\n\n'); + + // Summary stats + console.log('='.repeat(60)); + console.log('SUMMARY'); + console.log('='.repeat(60)); + + const localStats = { + withTitle: results.local.filter(p => p.title).length, + withDescription: results.local.filter(p => p.description).length, + withCanonical: results.local.filter(p => p.canonical).length, + withOgTitle: results.local.filter(p => p.ogTitle).length, + withOgDescription: results.local.filter(p => p.ogDescription).length, + withOgImage: results.local.filter(p => p.ogImage).length, + withSingleH1: results.local.filter(p => p.h1Count === 1).length, + }; + + const liveStats = results.live.length > 0 ? { + withTitle: results.live.filter(p => p.title).length, + withDescription: results.live.filter(p => p.description).length, + withCanonical: results.live.filter(p => p.canonical).length, + withOgTitle: results.live.filter(p => p.ogTitle).length, + withOgDescription: results.live.filter(p => p.ogDescription).length, + withOgImage: results.live.filter(p => p.ogImage).length, + withSingleH1: results.live.filter(p => p.h1Count === 1).length, + } : null; + + const total = results.local.length; + + console.log(`\n${'Metric'.padEnd(25)} ${'Local'.padStart(8)} ${'Live'.padStart(8)} ${'Impact'.padStart(10)}`); + console.log('-'.repeat(55)); + + const metrics = [ + ['Has title', localStats.withTitle, liveStats?.withTitle], + ['Has description', localStats.withDescription, liveStats?.withDescription], + ['Has canonical', localStats.withCanonical, liveStats?.withCanonical], + ['Has og:title', localStats.withOgTitle, liveStats?.withOgTitle], + ['Has og:description', localStats.withOgDescription, liveStats?.withOgDescription], + ['Has og:image', localStats.withOgImage, liveStats?.withOgImage], + ['Single H1', localStats.withSingleH1, liveStats?.withSingleH1], + ]; + + for (const [name, local, live] of metrics) { + const localPct = ((local / total) * 100).toFixed(0) + '%'; + const livePct = live !== undefined ? ((live / results.live.length) * 100).toFixed(0) + '%' : 'N/A'; + const impact = live !== undefined ? (local >= live ? '✓' : '⚠️ WORSE') : ''; + console.log(`${name.padEnd(25)} ${localPct.padStart(8)} ${livePct.padStart(8)} ${impact.padStart(10)}`); + } + + // Pages with issues + if (results.issues.length > 0) { + console.log(`\n${'='.repeat(60)}`); + console.log(`PAGES WITH ISSUES (${results.issues.length})`); + console.log('='.repeat(60)); + + // Group by issue type + const issueTypes = {}; + for (const { url, issues } of results.issues) { + for (const issue of issues) { + if (!issueTypes[issue]) issueTypes[issue] = []; + issueTypes[issue].push(url); + } + } + + console.log('\nIssue breakdown:'); + for (const [issue, urls] of Object.entries(issueTypes).sort((a, b) => b[1].length - a[1].length)) { + console.log(` ${urls.length.toString().padStart(3)}x ${issue}`); + } + + console.log('\nSample pages with issues:'); + for (const { url, issues } of results.issues.slice(0, 15)) { + console.log(` ${url}`); + for (const issue of issues) { + console.log(` - ${issue}`); + } + } + } + + // Check robots.txt and sitemap + console.log(`\n${'='.repeat(60)}`); + console.log('ROBOTS & SITEMAP'); + console.log('='.repeat(60)); + + try { + const robotsLocal = await readFile(join(DIST_DIR, 'robots.txt'), 'utf-8').catch(() => null); + const robotsLive = await fetch(`${LIVE_SITE}/robots.txt`).then(r => r.text()).catch(() => null); + + console.log(`\nrobots.txt: ${robotsLocal ? '✓ Present' : '✗ Missing'} (local) | ${robotsLive ? '✓ Present' : '✗ Missing'} (live)`); + } catch (e) {} + + try { + const sitemapLocal = await readFile(join(DIST_DIR, 'sitemap-index.xml'), 'utf-8').catch(() => + readFile(join(DIST_DIR, 'sitemap.xml'), 'utf-8').catch(() => null) + ); + const sitemapLive = await fetch(`${LIVE_SITE}/sitemap.xml`).then(r => r.ok ? r.text() : null).catch(() => null); + + console.log(`sitemap.xml: ${sitemapLocal ? '✓ Present' : '✗ Missing'} (local) | ${sitemapLive ? '✓ Present' : '✗ Missing'} (live)`); + + if (sitemapLocal) { + // Check for sitemap index - if found, count entries in sitemap-0.xml + if (sitemapLocal.includes('sitemapindex')) { + const sitemap0 = await readFile(join(DIST_DIR, 'sitemap-0.xml'), 'utf-8').catch(() => null); + const localUrls = sitemap0 ? (sitemap0.match(//g) || []).length : 0; + console.log(` Local sitemap entries: ${localUrls}`); + } else { + const localUrls = (sitemapLocal.match(//g) || []).length; + console.log(` Local sitemap entries: ${localUrls}`); + } + } + } catch (e) {} + + console.log('\n'); +} + +main().catch(console.error); diff --git a/script/seo_report.mjs b/script/seo_report.mjs new file mode 100644 index 0000000000..2c96b6f2c4 --- /dev/null +++ b/script/seo_report.mjs @@ -0,0 +1,237 @@ +#!/usr/bin/env node +/** + * SEO Report: Generate CSV comparing live site vs local Starlight build + */ + +import { readdir, readFile, writeFile } from 'fs/promises'; +import { join, relative } from 'path'; +import { JSDOM } from 'jsdom'; + +const LIVE_SITE = 'https://esphome.io'; +const DIST_DIR = 'dist'; +const OUTPUT_FILE = 'seo_report.csv'; + +/** + * Extract all SEO data from HTML + */ +function extractSEO(html, url) { + const dom = new JSDOM(html); + const doc = dom.window.document; + + const title = doc.querySelector('title')?.textContent?.trim() || ''; + + const getMeta = (name) => { + const el = doc.querySelector(`meta[name="${name}"], meta[property="${name}"]`); + return el?.getAttribute('content') || ''; + }; + + const canonical = doc.querySelector('link[rel="canonical"]')?.getAttribute('href') || ''; + const h1s = [...doc.querySelectorAll('h1')].map(h => h.textContent?.trim()).join(' | '); + const h1Count = doc.querySelectorAll('h1').length; + + return { + url, + title, + titleLength: title.length, + description: getMeta('description'), + descriptionLength: getMeta('description').length, + canonical, + ogTitle: getMeta('og:title'), + ogDescription: getMeta('og:description'), + ogImage: getMeta('og:image'), + ogType: getMeta('og:type'), + ogUrl: getMeta('og:url'), + twitterCard: getMeta('twitter:card'), + twitterTitle: getMeta('twitter:title'), + twitterDescription: getMeta('twitter:description'), + twitterImage: getMeta('twitter:image'), + h1s, + h1Count, + robots: getMeta('robots'), + }; +} + +async function* getHtmlFiles(dir) { + const stack = [dir]; + while (stack.length > 0) { + const current = stack.pop(); + const entries = await readdir(current, { withFileTypes: true }); + for (const entry of entries) { + const fullPath = join(current, entry.name); + if (entry.isDirectory()) { + stack.push(fullPath); + } else if (entry.name === 'index.html') { + yield fullPath; + } + } + } +} + +function localToUrlPath(localPath) { + let path = relative(DIST_DIR, localPath); + path = path.replace(/index\.html$/, ''); + if (path === '') path = '/'; + else path = '/' + path; + return path; +} + +function escapeCSV(value) { + if (value === null || value === undefined) return ''; + const str = String(value); + if (str.includes(',') || str.includes('"') || str.includes('\n')) { + return '"' + str.replace(/"/g, '""') + '"'; + } + return str; +} + +async function fetchWithTimeout(url, timeout = 10000) { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeout); + try { + const response = await fetch(url, { signal: controller.signal }); + clearTimeout(timeoutId); + return response; + } catch (e) { + clearTimeout(timeoutId); + throw e; + } +} + +async function main() { + console.log('Generating SEO Report (local vs live)...\n'); + + const localPages = []; + for await (const file of getHtmlFiles(DIST_DIR)) { + localPages.push(file); + } + + console.log(`Found ${localPages.length} pages to analyze\n`); + + const headers = [ + 'URL', + 'Local Title', + 'Local Title Length', + 'Live Title', + 'Live Title Length', + 'Title Match', + 'Local Description', + 'Local Desc Length', + 'Live Description', + 'Live Desc Length', + 'Desc Match', + 'Local Canonical', + 'Live Canonical', + 'Local og:title', + 'Live og:title', + 'Local og:description', + 'Live og:description', + 'Local og:image', + 'Live og:image', + 'Local og:type', + 'Live og:type', + 'Local og:url', + 'Live og:url', + 'Local twitter:card', + 'Live twitter:card', + 'Local twitter:image', + 'Live twitter:image', + 'Local H1 Count', + 'Live H1 Count', + 'Local H1s', + 'Live H1s', + 'Local robots', + 'Live robots', + 'Issues' + ]; + + const rows = [headers.map(escapeCSV).join(',')]; + + let processed = 0; + const batchSize = 10; + + for (let i = 0; i < localPages.length; i += batchSize) { + const batch = localPages.slice(i, i + batchSize); + + const results = await Promise.all(batch.map(async (localFile) => { + const urlPath = localToUrlPath(localFile); + const liveUrl = new URL(urlPath, LIVE_SITE).href; + + const localHtml = await readFile(localFile, 'utf-8'); + const local = extractSEO(localHtml, urlPath); + + let live = null; + try { + const resp = await fetchWithTimeout(liveUrl); + if (resp.ok) { + const liveHtml = await resp.text(); + live = extractSEO(liveHtml, liveUrl); + } + } catch (e) {} + + const issues = []; + if (!local.title) issues.push('Missing title'); + if (local.titleLength > 60) issues.push('Title too long'); + if (local.titleLength < 30 && local.title) issues.push('Title short'); + if (!local.description) issues.push('Missing description'); + if (local.descriptionLength > 160) issues.push('Desc too long'); + if (local.descriptionLength < 50 && local.description) issues.push('Desc short'); + if (local.h1Count === 0) issues.push('Missing H1'); + if (local.h1Count > 1) issues.push('Multiple H1s'); + if (!local.canonical) issues.push('Missing canonical'); + if (!local.ogImage) issues.push('Missing og:image'); + if (!local.ogTitle) issues.push('Missing og:title'); + if (!local.ogDescription) issues.push('Missing og:description'); + + const titleMatch = live ? (local.title === live.title ? 'Yes' : 'No') : 'N/A'; + const descMatch = live ? (local.description === live.description ? 'Yes' : 'No') : 'N/A'; + + return [ + urlPath, + local.title, + local.titleLength, + live?.title || '', + live?.titleLength || '', + titleMatch, + local.description, + local.descriptionLength, + live?.description || '', + live?.descriptionLength || '', + descMatch, + local.canonical, + live?.canonical || '', + local.ogTitle, + live?.ogTitle || '', + local.ogDescription, + live?.ogDescription || '', + local.ogImage, + live?.ogImage || '', + local.ogType, + live?.ogType || '', + local.ogUrl, + live?.ogUrl || '', + local.twitterCard, + live?.twitterCard || '', + local.twitterImage, + live?.twitterImage || '', + local.h1Count, + live?.h1Count || '', + local.h1s, + live?.h1s || '', + local.robots, + live?.robots || '', + issues.join('; ') + ].map(escapeCSV).join(','); + })); + + rows.push(...results); + processed += batch.length; + process.stdout.write(`\rProcessed ${processed}/${localPages.length} pages...`); + } + + console.log('\n\nWriting CSV...'); + await writeFile(OUTPUT_FILE, rows.join('\n'), 'utf-8'); + console.log(`\nReport saved to: ${OUTPUT_FILE}`); + console.log(`Total pages: ${localPages.length}`); +} + +main().catch(console.error); diff --git a/script/test-next-migrate.sh b/script/test-next-migrate.sh deleted file mode 100755 index 5f2ab6f97c..0000000000 --- a/script/test-next-migrate.sh +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/bash -# -# should have already checked out the `new` branch -current_branch=$(git rev-parse --abbrev-ref HEAD) -#[ "$current_branch" != "new" ] && echo only run this script from the 'new' branch && exit 1 - -# -# Remove previous migration -git reset --hard migration-base -#bring in latest -git merge --no-commit --no-ff origin/next - -git checkout HEAD -- Makefile -git add -u -git commit -m "Merge next" - - -# Convert and move -script/convert_rst_to_md.py . . --replace -# Must commit the move before adding the rewrites -git commit --quiet --message="Rename files" --author="esphomebot <68923041+esphomebot@users.noreply.github.com>" - -# Extract version and release values from conf.py -# Write to data/version.yaml -mkdir -p data -python3 -c ' -import sys -import yaml -import conf -try: - with open("data/version.yaml", "r") as file: - data = yaml.safe_load(file) -except FileNotFoundError: - data = {} -data["release"] = conf.release -data["version"] = conf.version -with open("data/version.yaml", "w") as file: - yaml.dump(data, file) -' - -# Now add the updated content and commit -rm -rf _* components guides cookbook changelog automations images index.rst markdown.py projects svg2png svg2png.py web-api -git add -u -git commit --quiet --message="Convert to Markdown" --author="esphomebot <68923041+esphomebot@users.noreply.github.com>" diff --git a/script/test-release-migrate.sh b/script/test-release-migrate.sh deleted file mode 100755 index 9ecbcbf48a..0000000000 --- a/script/test-release-migrate.sh +++ /dev/null @@ -1,45 +0,0 @@ -#! /bin/bash -# -# should have already checked out the `new` branch -current_branch=$(git rev-parse --abbrev-ref HEAD) -[ "$current_branch" != "new" ] && echo only run this script from the 'new' branch && exit 1 - -# -# Remove previous migration -git reset --hard migration-base -#bring in latest -git merge --no-commit --no-ff origin/beta - -git checkout HEAD -- Makefile -git add -u -git commit -m "Merge Beta" - - -# Convert and move -script/convert_rst_to_md.py . . -# Must commit the move before adding the rewrites -git commit --quiet --message="Rename files" --author="esphomebot <68923041+esphomebot@users.noreply.github.com>" - -# Extract version and release values from conf.py -# Write to data/version.yaml -mkdir -p data -python3 -c ' -import sys -import yaml -import conf -try: - with open("data/version.yaml", "r") as file: - data = yaml.safe_load(file) -except FileNotFoundError: - data = {} -data["release"] = conf.release -data["version"] = conf.version -with open("data/version.yaml", "w") as file: - yaml.dump(data, file) -' - -# Now add the updated content and commit -rm -rf _* components guides cookbook changelog automations images index.rst markdown.py projects svg2png svg2png.py web-api -git add -u -git add content static -git commit --quiet --message="Convert to Markdown" --author="esphomebot <68923041+esphomebot@users.noreply.github.com>" diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ace61bbb31ac8512a2fa714164b05efdef70e5 GIT binary patch literal 67563 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 + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/logo-light.svg b/src/assets/logo-light.svg new file mode 100644 index 0000000000..2ad321e27f --- /dev/null +++ b/src/assets/logo-light.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/APIClass.astro b/src/components/APIClass.astro new file mode 100644 index 0000000000..fade523780 --- /dev/null +++ b/src/components/APIClass.astro @@ -0,0 +1,32 @@ +--- +/** + * APIClass Component + * Creates a link to a C++ class in the API documentation. + * + * Usage in MDX: + * + */ + +interface Props { + text: string; + path: string; +} + +const { text, path } = Astro.props; + +// Process the path to generate the API docs URL +const lastPathElement = path.split('/').pop() || path; + +let processedPath = lastPathElement + .replace(/_/g, '__') + .replace(/\./g, '_8') + .replace(/:/g, '_1'); + +// Convert capital letters to lowercase preceded by underscore +processedPath = processedPath.replace(/([A-Z])/g, (match) => `_${match.toLowerCase()}`); + +const baseUrl = 'https://api-docs.esphome.io'; +const url = `${baseUrl}/classesphome_1_1${processedPath}`; +--- + +{text} diff --git a/src/components/APIKeyGenerator.astro b/src/components/APIKeyGenerator.astro new file mode 100644 index 0000000000..2c6ebf5b65 --- /dev/null +++ b/src/components/APIKeyGenerator.astro @@ -0,0 +1,86 @@ +--- +// API Key Generator Component +// Generates a random 32-byte base64-encoded encryption key using crypto.getRandomValues() +--- + +

    + + + +
    + + + + diff --git a/src/components/APIRef.astro b/src/components/APIRef.astro new file mode 100644 index 0000000000..1e95ab7a24 --- /dev/null +++ b/src/components/APIRef.astro @@ -0,0 +1,38 @@ +--- +/** + * APIRef Component + * Creates a link to a C++ API reference. + * + * Usage in MDX: + * + */ + +interface Props { + text: string; + path: string; +} + +const { text, path } = Astro.props; + +// Process the path to generate the API docs URL +// 1. Get the last path element +const lastPathElement = path.split('/').pop() || path; + +// 2. Replace special characters +let processedPath = lastPathElement + .replace(/_/g, '__') + .replace(/\./g, '_8') + .replace(/:/g, '_1'); + +// 3. Convert capital letters to lowercase preceded by underscore +processedPath = processedPath.replace(/([A-Z])/g, (match) => `_${match.toLowerCase()}`); + +// Base URL for API docs +const baseUrl = 'https://api-docs.esphome.io'; +const url = `${baseUrl}/${processedPath}`; + +// Display text defaults to "API Reference" if same as path +const displayText = text === path ? 'API Reference' : text; +--- + +{displayText} diff --git a/src/components/APIStruct.astro b/src/components/APIStruct.astro new file mode 100644 index 0000000000..1341f6b027 --- /dev/null +++ b/src/components/APIStruct.astro @@ -0,0 +1,32 @@ +--- +/** + * APIStruct Component + * Creates a link to a C++ struct in the API documentation. + * + * Usage in MDX: + * + */ + +interface Props { + text: string; + path: string; +} + +const { text, path } = Astro.props; + +// Process the path to generate the API docs URL +const lastPathElement = path.split('/').pop() || path; + +let processedPath = lastPathElement + .replace(/_/g, '__') + .replace(/\./g, '_8') + .replace(/:/g, '_1'); + +// Convert capital letters to lowercase preceded by underscore +processedPath = processedPath.replace(/([A-Z])/g, (match) => `_${match.toLowerCase()}`); + +const baseUrl = 'https://api-docs.esphome.io'; +const url = `${baseUrl}/structesphome_1_1${processedPath}`; +--- + +{text} diff --git a/src/components/FeatureGrid.astro b/src/components/FeatureGrid.astro new file mode 100644 index 0000000000..cbcdd68cd6 --- /dev/null +++ b/src/components/FeatureGrid.astro @@ -0,0 +1,41 @@ +--- +/** + * FeatureGrid Component + * Creates a grid of feature cards with icons, titles, and descriptions. + * + * Usage in MDX: + * + */ + +interface FeatureItem { + icon: string; + title: string; + description: string; +} + +interface Props { + items: FeatureItem[]; +} + +const { items } = Astro.props; + +// Map icon names to SVG paths in public/images/icons +function getIconPath(icon: string): string { + return `/images/icons/${icon}.svg`; +} +--- + +
    + {items.map((item) => ( +
    +
    + +
    +
    {item.title}
    +

    +

    + ))} +
    diff --git a/src/components/Figure.astro b/src/components/Figure.astro new file mode 100644 index 0000000000..b5f5cb88f2 --- /dev/null +++ b/src/components/Figure.astro @@ -0,0 +1,58 @@ +--- +import { Image } from 'astro:assets'; +import type { ImageMetadata } from 'astro'; + +interface Props { + src: ImageMetadata | string; + alt: string; + caption?: string; + layout?: 'constrained' | 'fixed' | 'full-width'; + style?: string; + width?: number; + height?: number; +} + +const { src, alt, caption, layout = 'constrained', style, width, height } = Astro.props; + +// Check if there's slot content for caption +const hasSlot = Astro.slots.has('caption'); +--- + +
    + {alt} + {(hasSlot || caption) && ( +
    + {hasSlot ? : caption} +
    + )} +
    + + diff --git a/src/components/FilterList.astro b/src/components/FilterList.astro new file mode 100644 index 0000000000..fa10aea7b6 --- /dev/null +++ b/src/components/FilterList.astro @@ -0,0 +1,24 @@ +--- +// Dynamically import all filter MDX files as components +const filterModules = import.meta.glob('../content/docs/components/sensor/filter/*.mdx', { eager: true }); + +// Sort and prepare entries +const sortedFilters = Object.entries(filterModules) + .sort(([pathA], [pathB]) => pathA.localeCompare(pathB)) + .map(([path, module]) => ({ + path, + Component: (module as any).default + })); +--- + +{sortedFilters.map(({ path, Component }) => ( +
    + +
    +))} + + diff --git a/src/components/Footer.astro b/src/components/Footer.astro new file mode 100644 index 0000000000..cf2009f83c --- /dev/null +++ b/src/components/Footer.astro @@ -0,0 +1,151 @@ +--- +import EditLink from 'virtual:starlight/components/EditLink'; +import LastUpdated from 'virtual:starlight/components/LastUpdated'; + +const footerLinks = [ + { + name: 'Documentation', + children: [ + { name: 'Components', url: '/components/' }, + { name: 'Guides', url: '/guides/' }, + { name: 'Automations', url: '/automations/' }, + { name: 'Cookbook', url: '/cookbook/' }, + ], + }, + { + name: 'Community', + children: [ + { name: 'Discord', url: 'https://discord.gg/KhAMKrd' }, + { name: 'GitHub', url: 'https://github.com/esphome/esphome' }, + { name: 'Forum', url: 'https://community.home-assistant.io/c/esphome/' }, + ], + }, + { + name: 'Resources', + children: [ + { name: 'Changelog', url: '/changelog/' }, + { name: 'Device Database', url: 'https://devices.esphome.io' }, + { name: 'Development', url: 'https://developers.esphome.io' }, + ], + }, +]; +--- + + + + diff --git a/src/components/GettingStartedGrid.astro b/src/components/GettingStartedGrid.astro new file mode 100644 index 0000000000..956235c250 --- /dev/null +++ b/src/components/GettingStartedGrid.astro @@ -0,0 +1,58 @@ +--- +/** + * GettingStartedGrid Component + * Creates a grid of getting started cards with icons, descriptions, and action buttons. + * + * Usage in MDX: + * + */ + +interface GettingStartedItem { + icon: string; + title: string; + description: string; + url?: string; + button_text?: string; + steps?: string[]; +} + +interface Props { + items: GettingStartedItem[]; +} + +const { items } = Astro.props; + +function getIconPath(icon: string): string { + return `/images/icons/${icon}.svg`; +} +--- + +
    + {items.map((item) => ( +
    +
    + +
    +
    {item.title}
    +

    {item.description}

    + {item.steps && item.steps.length > 0 && ( +
      + {item.steps.map((step) => ( +
    1. + ))} +
    + )} + {item.url && ( + {item.button_text} + )} +
    + ))} +
    diff --git a/src/components/HLW8012Calculator.astro b/src/components/HLW8012Calculator.astro new file mode 100644 index 0000000000..fb373ebdfe --- /dev/null +++ b/src/components/HLW8012Calculator.astro @@ -0,0 +1,204 @@ +--- +// HLW8012 Calibration Calculator Component +--- + +
    + + + + + + + + + + + + + + + + + + +
    Calibration values on the ESP
    voltage_divider
    current_resistor
    current_multiply
    + + + + + + + + + + + + + + + + + + + +
    ESP measurements
    Voltage V
    Power W
    Current A
    + + + + + + + + + + + + + + + + + + + +
    Power meter measurements
    Voltage V
    Power W
    Current A
    + + + + + + + + + + + + + + + + + + + +
    New calibration values
    voltage_divider
    current_resistor
    current_multiply
    + + + + + + + + + + + + + + + + + + + +
    New ESP measurements
    Voltage V
    Power W
    Current A
    +
    + + + + diff --git a/src/components/ImgTable.astro b/src/components/ImgTable.astro new file mode 100644 index 0000000000..44df1a9097 --- /dev/null +++ b/src/components/ImgTable.astro @@ -0,0 +1,70 @@ +--- +/** + * ImgTable Component + * Creates a grid of component cards with images, titles, and optional descriptions. + * + * Usage in MDX: + * + */ + +interface Props { + items: Array<[string, string, string, string?, string?]>; +} + +const { items } = Astro.props; + +// Helper function to resolve image paths +function resolveImagePath(image: string, currentPath: string): string { + // If it's already an absolute path or URL, use as-is + if (image.startsWith('/') || image.startsWith('http://') || image.startsWith('https://')) { + return image; + } + + // Check if it looks like a component path (e.g., components/sensor/dht) + // Try to resolve relative to /images/ first + return `/images/${image}`; +} + +// Helper to add word break opportunities after non-alphabetic characters +function addWordBreaks(text: string): string { + return text.replace(/([^a-zA-Z])/g, '$1\u200B'); +} +--- + +
    + {items.map((item) => { + const [title, link, image, ...rest] = item; + let caption = ''; + let cssClass = ''; + + // Parse optional parameters + for (const param of rest) { + if (param === 'dark-invert') { + cssClass = param; + } else if (param && param !== '') { + caption = caption ? `${caption} & ${param}` : param; + } + } + + const resolvedLink = link.endsWith('/') ? link : `${link}/`; + const resolvedImage = resolveImagePath(image, Astro.url.pathname); + + return ( +
    + +
    + +
    +
    diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 0000000000..6a7b7a02b0 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,7 @@ +import { defineCollection } from 'astro:content'; +import { docsLoader } from '@astrojs/starlight/loaders'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), +}; diff --git a/src/content/docs/404.mdx b/src/content/docs/404.mdx new file mode 100644 index 0000000000..dc86da12dc --- /dev/null +++ b/src/content/docs/404.mdx @@ -0,0 +1,10 @@ +--- +title: '404' +template: splash +editUrl: false +hero: + tagline: The page you're looking for doesn't exist. + actions: + - text: Go home + link: / +--- diff --git a/content/automations/actions.md b/src/content/docs/automations/actions.mdx similarity index 92% rename from content/automations/actions.md rename to src/content/docs/automations/actions.mdx index f7eb9a1f91..9d61506c61 100644 --- a/content/automations/actions.md +++ b/src/content/docs/automations/actions.mdx @@ -1,13 +1,12 @@ --- description: "Guide for building automations in ESPHome" title: "Actions, Triggers, Conditions" -params: - seo: - description: Guide for building automations in ESPHome - image: auto-fix.svg --- -{{< anchor "actions-triggers" >}} +import { Content as AllActionsContent } from './all_actions.mdx'; +import { Content as AllConditionsContent } from './all_conditions.mdx'; + + ESPHome *actions* are how we make an ESPHome device *do something.* @@ -65,7 +64,7 @@ switch: First, we have to give the dehumidifier `switch` an [ID](/guides/configuration-types#id) so that we can refer to it inside of our automation. -{{< anchor "actions-trigger" >}} + ## Triggers @@ -89,7 +88,7 @@ on_press: - switch.toggle: dehumidifier1 ``` -{{< anchor "actions-action" >}} + ## Actions @@ -151,17 +150,17 @@ the specified range. In the first example, this range is defined as "any value a range refers to any (humidity) value 50% or below. Finally, for the cases where the "pure" YAML automations just don't quite reach far enough, ESPHome has another -extremely powerful tool to offer: {{< docref "templates/" >}}. +extremely powerful tool to offer: [Templates](/automations/templates/). Now that concludes the introduction to actions in ESPHome. They're a powerful tool to automate almost everything on your device with an easy-to-use syntax. What follows below is an index of common actions which you're sure to find useful (and even essential) for building all sorts of automations. -{{< anchor "common-actions" >}} + ## Common Actions -{{< anchor "delay_action" >}} + ### `delay` Action @@ -182,7 +181,7 @@ on_...: > This is a "smart" asynchronous delay - other code will still run in the background while > the delay is happening. When using a lambda call, you should return the delay value in milliseconds. -{{< anchor "if_action" >}} + ### `if` Action @@ -228,7 +227,7 @@ At least one of `condition`, `all` or `any` must be provided. - **else** (*Optional*, [Action](#all-actions)): The action to perform if the condition evaluates to false. Defaults to doing nothing. -{{< anchor "lambda_action" >}} + ### `lambda` Action @@ -241,7 +240,7 @@ on_...: id(some_binary_sensor).publish_state(false); ``` -{{< anchor "repeat_action" >}} + ### `repeat` Action @@ -268,7 +267,7 @@ on_...: - **then** (**Required**, [Action](#all-actions)): The action to repeat. -{{< anchor "wait_until_action" >}} + ### `wait_until` Action @@ -302,7 +301,7 @@ on_...: - **condition** (**Required**, [Condition](#all-conditions)): The condition to wait to become true. - **timeout** (*Optional*, [Time](/guides/configuration-types#time)): Time to wait before timing out. Defaults to never timing out. -{{< anchor "while_action" >}} + ### `while` Action @@ -328,7 +327,7 @@ on_...: - **then** (**Required**, [Action](#all-actions)): The action to perform until the condition evaluates to false. -{{< anchor "component-update_action" >}} + ### `component.update` Action @@ -346,7 +345,7 @@ on_...: - lambda: 'id(my_component).update();' ``` -{{< anchor "component-suspend_action" >}} + ### `component.suspend` Action @@ -369,7 +368,7 @@ on_...: - lambda: 'id(my_component).stop_poller();' ``` -{{< anchor "component-resume_action" >}} + ### `component.resume` Action @@ -401,18 +400,18 @@ on_...: update_interval: 15s ``` -{{< anchor "common_conditions" >}} + ## Common Conditions "Conditions" provide a way for your device to take an action only when a specific (set of) condition(s) is satisfied. -{{< anchor "and_condition" >}} -{{< anchor "all_condition" >}} -{{< anchor "or_condition" >}} -{{< anchor "any_condition" >}} -{{< anchor "xor_condition" >}} -{{< anchor "not_condition" >}} + + + + + + ### `and` / `all` / `or` / `any` / `xor` / `not` Condition @@ -437,7 +436,7 @@ on_...: - binary_sensor.is_on: some_other_sensor ``` -{{< anchor "for_condition" >}} + ### `for` Condition @@ -494,21 +493,23 @@ on_...: # ... ``` -{{< anchor "config-action" >}} + ## All Actions -{{< render-automations "actions" >}} -{{< anchor "config-condition" >}} + + + ## All Conditions -{{< render-automations "conditions" >}} -{{< anchor "tips-and-tricks" >}} + + + ## Tips and Tricks -{{< anchor "automation-networkless" >}} + ### Do Automations Work Without a Network Connection @@ -520,14 +521,14 @@ helps in the event that there is an issue in the device's network stack preventi network. You can adjust this behavior (or even disable automatic rebooting) using the `reboot_timeout` option in any of the following components: -- {{< docref "/components/wifi" >}} -- {{< docref "/components/api" >}} -- {{< docref "/components/mqtt" >}} +- [Wifi](/components/wifi/) +- [Api](/components/api/) +- [Mqtt](/components/mqtt/) Beware, however, that disabling the reboot timeout(s) effectively disables the reboot watchdog, so you will need to power-cycle the device if it proves to be/remain unreachable on the network. -{{< anchor "timers-timeouts" >}} + ### Timers and Timeouts @@ -555,5 +556,5 @@ action and then (in your automation) use the `script.is_running` condition to kn ## See Also -- {{< docref "index/" >}} -- {{< docref "templates/" >}} +- [Automations](/automations/) +- [Templates](/automations/templates/) diff --git a/content/automations/all_actions.md b/src/content/docs/automations/all_actions.mdx similarity index 97% rename from content/automations/all_actions.md rename to src/content/docs/automations/all_actions.mdx index bc9afd843e..0297049b98 100644 --- a/content/automations/all_actions.md +++ b/src/content/docs/automations/all_actions.mdx @@ -1,9 +1,9 @@ --- -description: "" -title: "" +description: "All available ESPHome actions" +title: "All Actions" --- - +{/* markdownlint-disable MD013 */} - **ags10:** `new_i2c_address`, `set_zero_point` - **alarm_control_panel:** `arm_away`, `arm_home`, `arm_night`, `chime`, `disarm`, `pending`, `ready`, `triggered` @@ -85,4 +85,4 @@ title: "" - **wifi:** `disable`, `enable` - **wireguard:** `disable`, `enable` - +{/* markdownlint-enable MD013 */} diff --git a/content/automations/all_conditions.md b/src/content/docs/automations/all_conditions.mdx similarity index 93% rename from content/automations/all_conditions.md rename to src/content/docs/automations/all_conditions.mdx index fe1d6403d9..748d58c9ae 100644 --- a/content/automations/all_conditions.md +++ b/src/content/docs/automations/all_conditions.mdx @@ -1,6 +1,6 @@ --- -description: "" -title: "" +description: "All available ESPHome conditions" +title: "All Conditions" --- - **alarm_control_panel:** `is_armed`, `ready` diff --git a/content/automations/_index.md b/src/content/docs/automations/index.mdx similarity index 68% rename from content/automations/_index.md rename to src/content/docs/automations/index.mdx index d708d6a057..7c709e7072 100644 --- a/content/automations/_index.md +++ b/src/content/docs/automations/index.mdx @@ -1,13 +1,9 @@ --- description: "Getting started guide for automations in ESPHome" title: "Automation" -params: - seo: - description: Getting started guide for automations in ESPHome - image: auto-fix.svg --- -{{< anchor "automation" >}} + Automations are a very powerful aspect of ESPHome; they allow you to easily perform actions given some condition(s). @@ -20,8 +16,8 @@ When you want your ESPHome device to respond to its environment, you use an auto This page serves as an index which will walk to through the process of using ESPHome automations--actions, triggers, templates, and more--to customize your ESPHome device just how you like it. -- {{< docref "actions/" >}} -- {{< docref "templates/" >}} -- {{< docref "/components/globals" >}} -- {{< docref "/components/script" >}} -- {{< docref "/components/interval" >}} +- [Actions](/automations/actions/) +- [Templates](/automations/templates/) +- [Globals](/components/globals/) +- [Script](/components/script/) +- [Interval](/components/interval/) diff --git a/content/automations/templates.md b/src/content/docs/automations/templates.mdx similarity index 92% rename from content/automations/templates.md rename to src/content/docs/automations/templates.mdx index dc77d47d01..9c71503709 100644 --- a/content/automations/templates.md +++ b/src/content/docs/automations/templates.mdx @@ -1,13 +1,9 @@ --- description: "Guide for using templates in ESPHome" title: "Templates" -params: - seo: - description: Guide for using templates in ESPHome - image: auto-fix.svg --- -{{< anchor "config-lambda" >}} + *Templates* (also known as *lambdas*) allow you to do almost *anything* in ESPHome. For example, if you want to only perform a certain automation if a certain complex formula evaluates to true, you can do that with templates. Let's look @@ -30,7 +26,7 @@ cover: ``` What's happening here? First, we define a binary sensor (notably with `id: top_end_stop` ) and then a -{{< docref "/components/cover/template" "template cover" >}}. (If you're new to Home Assistant, a 'cover' is something +[template cover](/components/cover/template/). (If you're new to Home Assistant, a 'cover' is something like a window blind, a roller shutter, or a garage door.) The *state* of the template cover is controlled by a template, or "lambda". In lambdas, you're just writing C++ code and therefore the name lambda is used instead of Home Assistant's "template" lingo to avoid confusion. Regardless, don't let lambdas scare you just because you saw "C++" -- writing @@ -72,7 +68,7 @@ retrieving the current state of the end stop using `.state` and using it to cons > num_executions += 1; > ``` -{{< anchor "config-templatable" >}} + ## Templating Actions @@ -102,12 +98,12 @@ using the lambda syntax as described/shown above. - [Binary Sensor](/components/binary_sensor#binary_sensor-lambda_calls) - [Switch](/components/switch#switch-lambda_calls) - [Display](/components/display#display-engine) -- [Cover](/components/cover#cover-lambda_calls) +- [Cover](/components/cover#lambdas) - [Text Sensor](/components/text_sensor#text_sensor-lambda_calls) - [Stepper](/components/stepper#stepper-lambda_calls) - [Number](/components/number#number-lambda_calls) ## See Also -- {{< docref "index/" >}} -- {{< docref "actions/" >}} +- [Automations](/automations/) +- [Actions, Triggers, Conditions](/automations/actions/) diff --git a/src/content/docs/changelog/2021.10.0.mdx b/src/content/docs/changelog/2021.10.0.mdx new file mode 100644 index 0000000000..96e6a750c0 --- /dev/null +++ b/src/content/docs/changelog/2021.10.0.mdx @@ -0,0 +1,422 @@ +--- +description: "Changelog for ESPHome 2021.10.0." +title: "ESPHome 2021.10.0 - 20th October 2021" +pagefind: false +slug: "changelog/2021.10.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +Learn from the creators about the new encryption, support for any ESP32 variant and how Otto came up with ESPHome + +{/* markdownlint-disable-next-line MD033 */} + + +## ESP-IDF + +A huge effort has been put into reorganising, restructuring and rewriting a whole lot of code +to allow ESP32 based boards to be compiled using ESP-IDF as the framework instead of Arduino. +This allows ESPHome to keep up with new features and support for new ESP32 based chips +that Espressif add to the ESP-IDF, such as the ESP32-C3 that a lot of people had been asking about. + +There are known issues and specific components that are missing support for ESP-IDF as those ones rely +on an Arduino library and need more time to be rewritten in a compatible way. + +The new documentation is here at [Esp32](/components/esp32/). + +If you come across an issue while switching to ESP-IDF, please file an +[issue on GitHub](https://github.com/esphome/esphome/issues/new/choose) +using the `ESP32-IDF` option as the platform. + +## Dashboard Node Import + +If you intend on creating and distributing devices preinstalled with ESPHome, check out [Creators](/guides/creators/) +for more information and the best ways to give the end users the best experience. + +The newest feature of this set is the importing of devices found on the network. If the device is running +ESPHome 2021.10 or newer, it can be configured to broadcast a url via mDNS and the ESPHome dashboard will pick this up +and prompt the user to import the device and create a minimal configuration for it. + +## Modbus Controller + +Support for generic modbus device data has been added. This allows you as a user +to get data and control a modbus device without a native ESPHome component. Although a +native component is still better and preferred if it exists. + +- [Modbus Controller](/components/modbus_controller/) +- [Sensors](/components/sensor/modbus_controller/) +- [Binary Sensors](/components/binary_sensor/modbus_controller/) +- [Text Sensors](/components/text_sensor/modbus_controller/) +- [Numbers](/components/number/modbus_controller/) +- [Switches](/components/switch/modbus_controller/) +- [Outputs](/components/output/modbus_controller/) + +## Text Sensor filters + +`text_sensors` now have `filters` that allow you to do string manipulation before the value is +given to the frontend. Check out the [docs here](/components/text_sensor#text_sensor-filters). + +## Lighting + +The Tuya light platform now supports RGB and HSV datapoints for those TuyaMCU based lights. + +Partitions now support adding non-addressable lights into the sequence. As an example you +could build a "fake" addressable light from regular rgb leds. + +## Graphs + +There is new [Graph](/components/graph#display-graphs) building functions for displays that will allow you to +draw the history of sensors over time. See the docs for examples and images on what this looks like. + +## `wait_until` + +The `wait_until` action now has an optional `timeout` option that lets you continue or cancel (using an +if action afterwards) your automations if the condition does not become true after a period of time. + +## Combination of MiScale 1 & 2 + +[esphome#2266](https://github.com/esphome/esphome/pull/2266) combines the two miscale platforms into one as the code was mostly the +same and autodetection could be done to detemine which one you are using. + +## Float Output state changes + +When using a float output with both invert and min/max values, prevously +the end resut value was being calculated incorrectly. [esphome#2368](https://github.com/esphome/esphome/pull/2368) fixed this. + +{/* markdownlint-disable MD013 */} + +## Release 2021.10.1 - October 21 + +- Fix MDNS for ESP8266 devices [esphome#2571](https://github.com/esphome/esphome/pull/2571) by [@mmakaay](https://github.com/mmakaay) +- Fix ESP8266 GPIO0 Pullup Validation [esphome#2572](https://github.com/esphome/esphome/pull/2572) by [@OttoWinter](https://github.com/OttoWinter) +- Fix wifi ble coexistence check [esphome#2573](https://github.com/esphome/esphome/pull/2573) by [@OttoWinter](https://github.com/OttoWinter) +- Arduino global delay/millis/... symbols workaround [esphome#2575](https://github.com/esphome/esphome/pull/2575) by [@OttoWinter](https://github.com/OttoWinter) +- Fix ESP8266 OTA adds unnecessary Update library [esphome#2579](https://github.com/esphome/esphome/pull/2579) by [@OttoWinter](https://github.com/OttoWinter) +- Fix ESP8266 dallas GPIO16 INPUT_PULLUP [esphome#2581](https://github.com/esphome/esphome/pull/2581) by [@OttoWinter](https://github.com/OttoWinter) +- Fix platformio version in Dockerfile doesn't match requirements [esphome#2582](https://github.com/esphome/esphome/pull/2582) by [@OttoWinter](https://github.com/OttoWinter) +- Fix platformio_install_deps no longer installing all lib_deps [esphome#2584](https://github.com/esphome/esphome/pull/2584) by [@OttoWinter](https://github.com/OttoWinter) + +## Release 2021.10.2 - October 22 + +- Fix HeatpumpIR pin [esphome#2585](https://github.com/esphome/esphome/pull/2585) by [@OttoWinter](https://github.com/OttoWinter) +- Fix PlatformIO version for latest Arduino framework [esphome#2590](https://github.com/esphome/esphome/pull/2590) by [@oxan](https://github.com/oxan) +- Fix pin/component switchup in SX1509 pin configuration [esphome#2593](https://github.com/esphome/esphome/pull/2593) by [@oxan](https://github.com/oxan) +- Fix old-style `arduino_version` on ESP8266 and with magic values [esphome#2591](https://github.com/esphome/esphome/pull/2591) by [@oxan](https://github.com/oxan) +- Bump esphome-dashboard from 20211021.0 to 20211021.1 [esphome#2594](https://github.com/esphome/esphome/pull/2594) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix validation of addressable light IDs [esphome#2588](https://github.com/esphome/esphome/pull/2588) by [@oxan](https://github.com/oxan) +- Fix socket connection closed not detected [esphome#2587](https://github.com/esphome/esphome/pull/2587) by [@OttoWinter](https://github.com/OttoWinter) +- Bump noise-c from 0.1.3 to 0.1.4 [esphome#2602](https://github.com/esphome/esphome/pull/2602) by [@OttoWinter](https://github.com/OttoWinter) +- Add OTA upload compression for ESP8266 [esphome#2601](https://github.com/esphome/esphome/pull/2601) by [@OttoWinter](https://github.com/OttoWinter) +- Re-raise keyboardinterrupt [esphome#2603](https://github.com/esphome/esphome/pull/2603) by [@OttoWinter](https://github.com/OttoWinter) +- Add owner to all libraries used [esphome#2604](https://github.com/esphome/esphome/pull/2604) by [@OttoWinter](https://github.com/OttoWinter) +- Fix compiler warnings and update platformio line filter [esphome#2607](https://github.com/esphome/esphome/pull/2607) by [@OttoWinter](https://github.com/OttoWinter) +- Fix ESP8266 OTA compression only starting framework v2.7.0 [esphome#2610](https://github.com/esphome/esphome/pull/2610) by [@OttoWinter](https://github.com/OttoWinter) +- Bugfix tca9548a and idf refactor anh [esphome#2612](https://github.com/esphome/esphome/pull/2612) by [@andreashergert1984](https://github.com/andreashergert1984) + +## Release 2021.10.3 - October 27 + +- fixed dependency for pca9685 component [esphome#2614](https://github.com/esphome/esphome/pull/2614) by [@andreashergert1984](https://github.com/andreashergert1984) +- Bump platform-espressif8266 from 2.6.2 to 2.6.3 [esphome#2620](https://github.com/esphome/esphome/pull/2620) by [@OttoWinter](https://github.com/OttoWinter) +- Autodetect flash size [esphome#2615](https://github.com/esphome/esphome/pull/2615) by [@agners](https://github.com/agners) +- Teleinfo ptec [esphome#2599](https://github.com/esphome/esphome/pull/2599) by [@0hax](https://github.com/0hax) +- Fix glue code missing micros() [esphome#2623](https://github.com/esphome/esphome/pull/2623) by [@OttoWinter](https://github.com/OttoWinter) +- Remove power and energy from sensors that are not true power [esphome#2628](https://github.com/esphome/esphome/pull/2628) by [@jesserockz](https://github.com/jesserockz) +- fix modbus output [esphome#2630](https://github.com/esphome/esphome/pull/2630) by [@martgras](https://github.com/martgras) +- Fix pin number validation for sn74hc595 [esphome#2621](https://github.com/esphome/esphome/pull/2621) by [@sairon](https://github.com/sairon) +- Fix select.set using lambda [esphome#2633](https://github.com/esphome/esphome/pull/2633) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- Added graphing component [esphome#2109](https://github.com/esphome/esphome/pull/2109) by [@synco](https://github.com/synco) (new-integration) (new-feature) +- Add deep sleep wakeup from touch (#1238) [esphome#2281](https://github.com/esphome/esphome/pull/2281) by [@chrta](https://github.com/chrta) (new-feature) +- Allow non-addressable lights in light partitions [esphome#2256](https://github.com/esphome/esphome/pull/2256) by [@paulmonigatti](https://github.com/paulmonigatti) (new-feature) +- Add support for Waveshare 7.5 inch (C) bichromatic display (black-and-white only for now) [esphome#1844](https://github.com/esphome/esphome/pull/1844) by [@pixelspark](https://github.com/pixelspark) (new-feature) +- Wifi scan results [esphome#1605](https://github.com/esphome/esphome/pull/1605) by [@gpambrozio](https://github.com/gpambrozio) (new-feature) +- Add SSD1305 support to SSD1306 integration along with few new options [esphome#1902](https://github.com/esphome/esphome/pull/1902) by [@zhangjingye03](https://github.com/zhangjingye03) (new-feature) (breaking-change) +- Adds light sensor support for b-parasites [esphome#2391](https://github.com/esphome/esphome/pull/2391) by [@rbaron](https://github.com/rbaron) (new-feature) +- Tuya rgb support [esphome#2278](https://github.com/esphome/esphome/pull/2278) by [@irtimaled](https://github.com/irtimaled) (new-feature) +- add fan.cycle_speed action [esphome#2329](https://github.com/esphome/esphome/pull/2329) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (new-feature) +- Add cover toggle support [esphome#1809](https://github.com/esphome/esphome/pull/1809) by [@dtmuller](https://github.com/dtmuller) (new-feature) +- Support HSV-based color support on tuya light [esphome#2400](https://github.com/esphome/esphome/pull/2400) by [@irtimaled](https://github.com/irtimaled) (new-feature) +- String manipulation filters for text sensors! [esphome#2393](https://github.com/esphome/esphome/pull/2393) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (new-feature) +- Add optional timeout for wait_until action [esphome#2282](https://github.com/esphome/esphome/pull/2282) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Added graphing component [esphome#2109](https://github.com/esphome/esphome/pull/2109) by [@synco](https://github.com/synco) (new-integration) (new-feature) +- Configurable Flash Write Interval [esphome#2119](https://github.com/esphome/esphome/pull/2119) by [@alexyao2015](https://github.com/alexyao2015) (new-integration) +- Add support for Daly Smart BMS [esphome#2156](https://github.com/esphome/esphome/pull/2156) by [@s1lvi0](https://github.com/s1lvi0) (new-integration) +- Add support for LTR390 [esphome#1505](https://github.com/esphome/esphome/pull/1505) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- Modbus controller [esphome#1779](https://github.com/esphome/esphome/pull/1779) by [@martgras](https://github.com/martgras) (new-integration) +- Dashboard node import and render in browser [esphome#2374](https://github.com/esphome/esphome/pull/2374) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- Add Current based cover [esphome#1439](https://github.com/esphome/esphome/pull/1439) by [@djwmarcx](https://github.com/djwmarcx) (new-integration) +- Add support for SCD4X [esphome#2217](https://github.com/esphome/esphome/pull/2217) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- Add support for Airthing Wave Mini [esphome#2440](https://github.com/esphome/esphome/pull/2440) by [@ncareau](https://github.com/ncareau) (new-integration) +- Add Safe Mode Restart Switch [esphome#2437](https://github.com/esphome/esphome/pull/2437) by [@paulmonigatti](https://github.com/paulmonigatti) (new-integration) +- Added heatpumpir support [esphome#1343](https://github.com/esphome/esphome/pull/1343) by [@rob-deutsch](https://github.com/rob-deutsch) (new-integration) +- OTA firmware MD5 check + password support for esp-idf [esphome#2507](https://github.com/esphome/esphome/pull/2507) by [@mmakaay](https://github.com/mmakaay) (new-integration) + +### Breaking Changes + +- Combine code of xiaomi_miscale and xiaomi_miscale2 [esphome#2266](https://github.com/esphome/esphome/pull/2266) by [@edenhaus](https://github.com/edenhaus) (breaking-change) +- Correctly invert the float output state [esphome#2368](https://github.com/esphome/esphome/pull/2368) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add SSD1305 support to SSD1306 integration along with few new options [esphome#1902](https://github.com/esphome/esphome/pull/1902) by [@zhangjingye03](https://github.com/zhangjingye03) (new-feature) (breaking-change) +- Disable dependency finder on ESP32 [esphome#2435](https://github.com/esphome/esphome/pull/2435) by [@agners](https://github.com/agners) (breaking-change) + +### Beta Fixes + +- Fix light state remaining on after turn off with transition [esphome#2509](https://github.com/esphome/esphome/pull/2509) by [@oxan](https://github.com/oxan) +- Fix: Light flash not restoring previous LightState [esphome#2383](https://github.com/esphome/esphome/pull/2383) by [@paulmonigatti](https://github.com/paulmonigatti) +- Disallow using UART2 for logger on ESP-32 variants that lack it [esphome#2510](https://github.com/esphome/esphome/pull/2510) by [@oxan](https://github.com/oxan) +- Fix BME680_BSEC compilation issue with ESP32 [esphome#2516](https://github.com/esphome/esphome/pull/2516) by [@paulmonigatti](https://github.com/paulmonigatti) +- add missing include in sgp30 [esphome#2517](https://github.com/esphome/esphome/pull/2517) by [@dmitriy5181](https://github.com/dmitriy5181) +- Fix: Color modes not being correctly used in light partitions [esphome#2513](https://github.com/esphome/esphome/pull/2513) by [@paulmonigatti](https://github.com/paulmonigatti) +- Add pressure compensation during runtime [esphome#2493](https://github.com/esphome/esphome/pull/2493) by [@martgras](https://github.com/martgras) +- Don't define UART_SELECTION_UART2 when UART2 is unavailable [esphome#2512](https://github.com/esphome/esphome/pull/2512) by [@oxan](https://github.com/oxan) +- Remove BME680_BSEC test [esphome#2518](https://github.com/esphome/esphome/pull/2518) by [@paulmonigatti](https://github.com/paulmonigatti) +- Fix Nextion HTTPClient error for ESP32 [esphome#2524](https://github.com/esphome/esphome/pull/2524) by [@kbx81](https://github.com/kbx81) +- Fix bug in register name definition [esphome#2526](https://github.com/esphome/esphome/pull/2526) by [@martgras](https://github.com/martgras) +- OTA firmware MD5 check + password support for esp-idf [esphome#2507](https://github.com/esphome/esphome/pull/2507) by [@mmakaay](https://github.com/mmakaay) (new-integration) +- Replace framework version_hint with source option [esphome#2529](https://github.com/esphome/esphome/pull/2529) by [@oxan](https://github.com/oxan) +- Fix bitshift on read in ADE7953 [esphome#2537](https://github.com/esphome/esphome/pull/2537) by [@oxan](https://github.com/oxan) +- Allow downloading all bin files from backend in dashboard [esphome#2514](https://github.com/esphome/esphome/pull/2514) by [@jesserockz](https://github.com/jesserockz) +- Bump dashboard to 20211015.0 [esphome#2525](https://github.com/esphome/esphome/pull/2525) by [@balloob](https://github.com/balloob) +- Only show timestamp for dashboard access logs [esphome#2540](https://github.com/esphome/esphome/pull/2540) by [@OttoWinter](https://github.com/OttoWinter) +- Fix const used for IDF recommended version [esphome#2542](https://github.com/esphome/esphome/pull/2542) by [@jesserockz](https://github.com/jesserockz) +- Fix Bluetooth setup_priorities [esphome#2458](https://github.com/esphome/esphome/pull/2458) by [@jesserockz](https://github.com/jesserockz) +- Autodetect ESP32 variant [esphome#2530](https://github.com/esphome/esphome/pull/2530) by [@oxan](https://github.com/oxan) +- Bump dashboard to 20211019.0 [esphome#2549](https://github.com/esphome/esphome/pull/2549) by [@jesserockz](https://github.com/jesserockz) +- Fix ADC pin validation on ESP32-C3 [esphome#2551](https://github.com/esphome/esphome/pull/2551) by [@oxan](https://github.com/oxan) +- ignore exception when not waiting for a response [esphome#2552](https://github.com/esphome/esphome/pull/2552) by [@martgras](https://github.com/martgras) +- Bump dashboard to 20211020.0 [esphome#2556](https://github.com/esphome/esphome/pull/2556) by [@jesserockz](https://github.com/jesserockz) +- Fix HA addon so it does not have logout button [esphome#2558](https://github.com/esphome/esphome/pull/2558) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211020.1 [esphome#2559](https://github.com/esphome/esphome/pull/2559) by [@jesserockz](https://github.com/jesserockz) +- A few esp32_ble_server/improv fixes [esphome#2562](https://github.com/esphome/esphome/pull/2562) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211021.0 [esphome#2564](https://github.com/esphome/esphome/pull/2564) by [@jesserockz](https://github.com/jesserockz) +- Move running process log line to debug level [esphome#2565](https://github.com/esphome/esphome/pull/2565) by [@OttoWinter](https://github.com/OttoWinter) +- Revert nextion clang-tidy changes [esphome#2566](https://github.com/esphome/esphome/pull/2566) by [@OttoWinter](https://github.com/OttoWinter) + +### All changes + +- Drop obsolete comments from CONTRIBUTING.md [esphome#2271](https://github.com/esphome/esphome/pull/2271) by [@oxan](https://github.com/oxan) +- Support inverting color temperature on tuya lights [esphome#2277](https://github.com/esphome/esphome/pull/2277) by [@irtimaled](https://github.com/irtimaled) +- Untangle core headers (part 1) [esphome#2276](https://github.com/esphome/esphome/pull/2276) by [@oxan](https://github.com/oxan) +- Compatibility with clang-tidy v14 [esphome#2272](https://github.com/esphome/esphome/pull/2272) by [@oxan](https://github.com/oxan) +- Store strings only used for logging in flash [esphome#2274](https://github.com/esphome/esphome/pull/2274) by [@oxan](https://github.com/oxan) +- Expose select on Frontend `web_server:` [esphome#2245](https://github.com/esphome/esphome/pull/2245) by [@ayufan](https://github.com/ayufan) +- Fix devcontainer scripts on Windows [esphome#2239](https://github.com/esphome/esphome/pull/2239) by [@alexyao2015](https://github.com/alexyao2015) +- Fix SM300D2 sensor component routines so they correctly read the sensor output [esphome#2159](https://github.com/esphome/esphome/pull/2159) by [@jamesbraid](https://github.com/jamesbraid) +- Bump tzlocal from 2.1 to 3.0 [esphome#2154](https://github.com/esphome/esphome/pull/2154) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Activate owning-memory clang-tidy check [esphome#1891](https://github.com/esphome/esphome/pull/1891) by [@OttoWinter](https://github.com/OttoWinter) +- Fix issue #2054. PZEM004T Component doesn't set the module address. [esphome#1784](https://github.com/esphome/esphome/pull/1784) by [@0x3333](https://github.com/0x3333) +- Convert st7735.h to use LF line endings [esphome#2287](https://github.com/esphome/esphome/pull/2287) by [@oxan](https://github.com/oxan) +- Add esphal.h include to inkplate6 component [esphome#2286](https://github.com/esphome/esphome/pull/2286) by [@oxan](https://github.com/oxan) +- Revert "Bump tzlocal from 2.1 to 3.0 (#2154)" [esphome#2289](https://github.com/esphome/esphome/pull/2289) by [@OttoWinter](https://github.com/OttoWinter) +- Run clang-tidy against ESP32 [esphome#2147](https://github.com/esphome/esphome/pull/2147) by [@oxan](https://github.com/oxan) +- Run clang-tidy against Arduino 3 [esphome#2146](https://github.com/esphome/esphome/pull/2146) by [@oxan](https://github.com/oxan) +- Bump click from 7.1.2 to 8.0.1 [esphome#1824](https://github.com/esphome/esphome/pull/1824) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add stale/lock bots [esphome#2299](https://github.com/esphome/esphome/pull/2299) by [@OttoWinter](https://github.com/OttoWinter) +- Use standard version of make_unique when available [esphome#2292](https://github.com/esphome/esphome/pull/2292) by [@oxan](https://github.com/oxan) +- Bug fix of NFC message & records becoming inaccessible in on_tag lambdas [esphome#2309](https://github.com/esphome/esphome/pull/2309) by [@JonasEr](https://github.com/JonasEr) +- Dsmr updates [esphome#2157](https://github.com/esphome/esphome/pull/2157) by [@glmnet](https://github.com/glmnet) +- Support direct relay state feedback for tuya climate component [esphome#1668](https://github.com/esphome/esphome/pull/1668) by [@kroimon](https://github.com/kroimon) +- ac_dimmer increase gate time for robotdyn [esphome#1708](https://github.com/esphome/esphome/pull/1708) by [@glmnet](https://github.com/glmnet) +- Bump aioesphomeapi from 9.0.0 to 9.1.0 [esphome#2306](https://github.com/esphome/esphome/pull/2306) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 21.8b0 to 21.9b0 [esphome#2305](https://github.com/esphome/esphome/pull/2305) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add namespace to all PlatformIO library references [esphome#2296](https://github.com/esphome/esphome/pull/2296) by [@oxan](https://github.com/oxan) +- Allow transforms and flashes to not update remote_values [esphome#2313](https://github.com/esphome/esphome/pull/2313) by [@matthewmazzanti](https://github.com/matthewmazzanti) +- Reduce stale/lock gh actions interval [esphome#2341](https://github.com/esphome/esphome/pull/2341) by [@OttoWinter](https://github.com/OttoWinter) +- Add `esp8266_disable_ssl_support:` config option [esphome#2236](https://github.com/esphome/esphome/pull/2236) by [@ayufan](https://github.com/ayufan) +- Bump pylint from 2.10.2 to 2.11.1 [esphome#2334](https://github.com/esphome/esphome/pull/2334) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add eco mode to tuya climate component [esphome#1860](https://github.com/esphome/esphome/pull/1860) by [@kroimon](https://github.com/kroimon) +- Fix SPIDevice::write_byte16 to actually take a 16 bit argument [esphome#2345](https://github.com/esphome/esphome/pull/2345) by [@lgugelmann](https://github.com/lgugelmann) +- Redo docker build system with buildkit+multi-stage and cache pio packages [esphome#2338](https://github.com/esphome/esphome/pull/2338) by [@OttoWinter](https://github.com/OttoWinter) +- Calculating the AC only component of the samples [esphome#1906](https://github.com/esphome/esphome/pull/1906) by [@synco](https://github.com/synco) +- Fix error reporting for DHT bit read loop [esphome#2344](https://github.com/esphome/esphome/pull/2344) by [@besteru](https://github.com/besteru) +- Also run docker CI when requirements change [esphome#2347](https://github.com/esphome/esphome/pull/2347) by [@OttoWinter](https://github.com/OttoWinter) +- Added graphing component [esphome#2109](https://github.com/esphome/esphome/pull/2109) by [@synco](https://github.com/synco) (new-integration) (new-feature) +- Properly calculate negative temperatures in sm300d2 [esphome#2335](https://github.com/esphome/esphome/pull/2335) by [@poptix](https://github.com/poptix) +- Fix docker release deploy push flag [esphome#2348](https://github.com/esphome/esphome/pull/2348) by [@OttoWinter](https://github.com/OttoWinter) +- Add invert_colors option for st7735 [esphome#2327](https://github.com/esphome/esphome/pull/2327) by [@g5pw](https://github.com/g5pw) +- Add deep sleep wakeup from touch (#1238) [esphome#2281](https://github.com/esphome/esphome/pull/2281) by [@chrta](https://github.com/chrta) (new-feature) +- Add ESPHOME_VERSION_CODE define [esphome#2324](https://github.com/esphome/esphome/pull/2324) by [@oxan](https://github.com/oxan) +- Install python requirements after apt ones for better caching [esphome#2349](https://github.com/esphome/esphome/pull/2349) by [@OttoWinter](https://github.com/OttoWinter) +- Introduce call_dump_config() indirection [esphome#2325](https://github.com/esphome/esphome/pull/2325) by [@oxan](https://github.com/oxan) +- ESP-IDF support and generic target platforms [esphome#2303](https://github.com/esphome/esphome/pull/2303) by [@OttoWinter](https://github.com/OttoWinter) +- CI cache only restore from direct matches [esphome#2351](https://github.com/esphome/esphome/pull/2351) by [@OttoWinter](https://github.com/OttoWinter) +- fixes compilation error in rtttl [esphome#2357](https://github.com/esphome/esphome/pull/2357) by [@martgras](https://github.com/martgras) +- Fix MDNS not registered [esphome#2359](https://github.com/esphome/esphome/pull/2359) by [@OttoWinter](https://github.com/OttoWinter) +- Fix src_filter in platformio.ini after src_dir change [esphome#2353](https://github.com/esphome/esphome/pull/2353) by [@OttoWinter](https://github.com/OttoWinter) +- Fix duplicate defines and restore alphabetical order [esphome#2352](https://github.com/esphome/esphome/pull/2352) by [@oxan](https://github.com/oxan) +- Configurable Flash Write Interval [esphome#2119](https://github.com/esphome/esphome/pull/2119) by [@alexyao2015](https://github.com/alexyao2015) (new-integration) +- Fix OTA password mismatch error. [esphome#2363](https://github.com/esphome/esphome/pull/2363) by [@mmakaay](https://github.com/mmakaay) +- Allow compilation against IDF from repository [esphome#2355](https://github.com/esphome/esphome/pull/2355) by [@oxan](https://github.com/oxan) +- Fix ESP8266 preferences not set up [esphome#2362](https://github.com/esphome/esphome/pull/2362) by [@OttoWinter](https://github.com/OttoWinter) +- Fix ESP8266 preference loading [esphome#2367](https://github.com/esphome/esphome/pull/2367) by [@paulmonigatti](https://github.com/paulmonigatti) +- Allow non-addressable lights in light partitions [esphome#2256](https://github.com/esphome/esphome/pull/2256) by [@paulmonigatti](https://github.com/paulmonigatti) (new-feature) +- add = to default font glpyh list [esphome#2361](https://github.com/esphome/esphome/pull/2361) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) +- Fix docker pio settings not applied [esphome#2370](https://github.com/esphome/esphome/pull/2370) by [@OttoWinter](https://github.com/OttoWinter) +- Fix OTA crash during reading of new bin file. [esphome#2366](https://github.com/esphome/esphome/pull/2366) by [@mmakaay](https://github.com/mmakaay) +- Fix Dallas parent not being set [esphome#2369](https://github.com/esphome/esphome/pull/2369) by [@paulmonigatti](https://github.com/paulmonigatti) +- Discard SenseAir S8 commands echoes & fix calibration result check [esphome#2358](https://github.com/esphome/esphome/pull/2358) by [@nmaggioni](https://github.com/nmaggioni) +- Add support for Daly Smart BMS [esphome#2156](https://github.com/esphome/esphome/pull/2156) by [@s1lvi0](https://github.com/s1lvi0) (new-integration) +- Combine code of xiaomi_miscale and xiaomi_miscale2 [esphome#2266](https://github.com/esphome/esphome/pull/2266) by [@edenhaus](https://github.com/edenhaus) (breaking-change) +- Add support for Waveshare 7.5 inch (C) bichromatic display (black-and-white only for now) [esphome#1844](https://github.com/esphome/esphome/pull/1844) by [@pixelspark](https://github.com/pixelspark) (new-feature) +- ili9341: use larger SPI transfers [esphome#1628](https://github.com/esphome/esphome/pull/1628) by [@numo68](https://github.com/numo68) +- Correctly invert the float output state [esphome#2368](https://github.com/esphome/esphome/pull/2368) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add support for LTR390 [esphome#1505](https://github.com/esphome/esphome/pull/1505) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- Allow sloppy Tuya datapoint message length [esphome#1982](https://github.com/esphome/esphome/pull/1982) by [@trvrnrth](https://github.com/trvrnrth) +- Mqtt topics to support numeric fan speed [esphome#1859](https://github.com/esphome/esphome/pull/1859) by [@wifwucite](https://github.com/wifwucite) +- Wifi scan results [esphome#1605](https://github.com/esphome/esphome/pull/1605) by [@gpambrozio](https://github.com/gpambrozio) (new-feature) +- Add SSD1305 support to SSD1306 integration along with few new options [esphome#1902](https://github.com/esphome/esphome/pull/1902) by [@zhangjingye03](https://github.com/zhangjingye03) (new-feature) (breaking-change) +- Fix broken compilation due to conflict between #1237 and IDF changes [esphome#2372](https://github.com/esphome/esphome/pull/2372) by [@oxan](https://github.com/oxan) +- Don't generate IDs with the name of loaded integrations [esphome#2373](https://github.com/esphome/esphome/pull/2373) by [@oxan](https://github.com/oxan) +- fix i2c scanning eror for Arduino [esphome#2364](https://github.com/esphome/esphome/pull/2364) by [@martgras](https://github.com/martgras) +- Bump tzlocal from 2.1 to 3.0 [esphome#2294](https://github.com/esphome/esphome/pull/2294) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- ledc: do not try to write_state to an uninitialized output [esphome#1732](https://github.com/esphome/esphome/pull/1732) by [@toelke](https://github.com/toelke) +- Fix two i2c error code return errors [esphome#2375](https://github.com/esphome/esphome/pull/2375) by [@OttoWinter](https://github.com/OttoWinter) +- Fix ir_climate on ESP32-C3 [esphome#2314](https://github.com/esphome/esphome/pull/2314) by [@stintel](https://github.com/stintel) +- Fix ESP8266 ADC [esphome#2376](https://github.com/esphome/esphome/pull/2376) by [@paulmonigatti](https://github.com/paulmonigatti) +- Fix: Pin flags code generation returning FLAG_NONE [esphome#2377](https://github.com/esphome/esphome/pull/2377) by [@paulmonigatti](https://github.com/paulmonigatti) +- Add missing MockObj operators [esphome#2378](https://github.com/esphome/esphome/pull/2378) by [@OttoWinter](https://github.com/OttoWinter) +- Fix esp-idf pinmask bit-shift overflow [esphome#2380](https://github.com/esphome/esphome/pull/2380) by [@chrta](https://github.com/chrta) +- Add i2c bus recovery during initialization [esphome#2379](https://github.com/esphome/esphome/pull/2379) by [@chrta](https://github.com/chrta) +- Bump voluptuous from 0.12.1 to 0.12.2 [esphome#2381](https://github.com/esphome/esphome/pull/2381) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Read unencrypted DSMR telegrams in chunks [esphome#2382](https://github.com/esphome/esphome/pull/2382) by [@mmakaay](https://github.com/mmakaay) +- Fix clang-tidy header filter [esphome#2385](https://github.com/esphome/esphome/pull/2385) by [@OttoWinter](https://github.com/OttoWinter) +- Fix InterruptLock on ESP-IDF [esphome#2388](https://github.com/esphome/esphome/pull/2388) by [@OttoWinter](https://github.com/OttoWinter) +- Fix some issues with wifi driver after IDF refactor [esphome#2387](https://github.com/esphome/esphome/pull/2387) by [@OttoWinter](https://github.com/OttoWinter) +- Fix arduino esp32 wifi v2 [esphome#2389](https://github.com/esphome/esphome/pull/2389) by [@OttoWinter](https://github.com/OttoWinter) +- Misc fixes for esp-idf [esphome#2386](https://github.com/esphome/esphome/pull/2386) by [@OttoWinter](https://github.com/OttoWinter) +- Adds light sensor support for b-parasites [esphome#2391](https://github.com/esphome/esphome/pull/2391) by [@rbaron](https://github.com/rbaron) (new-feature) +- fix: Setting Tuya string DP value [esphome#2394](https://github.com/esphome/esphome/pull/2394) by [@irtimaled](https://github.com/irtimaled) +- Tuya rgb support [esphome#2278](https://github.com/esphome/esphome/pull/2278) by [@irtimaled](https://github.com/irtimaled) (new-feature) +- add fan.cycle_speed action [esphome#2329](https://github.com/esphome/esphome/pull/2329) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (new-feature) +- Modbus controller [esphome#1779](https://github.com/esphome/esphome/pull/1779) by [@martgras](https://github.com/martgras) (new-integration) +- Extend nfc ndef records with Text [esphome#2191](https://github.com/esphome/esphome/pull/2191) by [@JonasEr](https://github.com/JonasEr) +- Fix NDEF URI casing [esphome#2397](https://github.com/esphome/esphome/pull/2397) by [@jesserockz](https://github.com/jesserockz) +- Dashboard node import and render in browser [esphome#2374](https://github.com/esphome/esphome/pull/2374) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- ccs811: Skip reading data if it is not available/ready [esphome#2404](https://github.com/esphome/esphome/pull/2404) by [@chrta](https://github.com/chrta) +- Add missing include for component bme680_bsec [esphome#2403](https://github.com/esphome/esphome/pull/2403) by [@mmakaay](https://github.com/mmakaay) +- fix: stop tuya light state getting reset [esphome#2401](https://github.com/esphome/esphome/pull/2401) by [@irtimaled](https://github.com/irtimaled) +- Add Current based cover [esphome#1439](https://github.com/esphome/esphome/pull/1439) by [@djwmarcx](https://github.com/djwmarcx) (new-integration) +- Add cover toggle support [esphome#1809](https://github.com/esphome/esphome/pull/1809) by [@dtmuller](https://github.com/dtmuller) (new-feature) +- Fix handling of timestamps in Teleinfo component. [esphome#2392](https://github.com/esphome/esphome/pull/2392) by [@0hax](https://github.com/0hax) +- bump dashboard to 20210927.0 [esphome#2405](https://github.com/esphome/esphome/pull/2405) by [@balloob](https://github.com/balloob) +- Add str_sprintf function that returns `std::string` [esphome#2408](https://github.com/esphome/esphome/pull/2408) by [@oxan](https://github.com/oxan) +- Fix lint issues in web_server_base [esphome#2409](https://github.com/esphome/esphome/pull/2409) by [@jesserockz](https://github.com/jesserockz) +- Fix uninitialised use of ESPPreferenceObject.backend [esphome#2411](https://github.com/esphome/esphome/pull/2411) by [@paulmonigatti](https://github.com/paulmonigatti) +- Add support for SCD4X [esphome#2217](https://github.com/esphome/esphome/pull/2217) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- Support HSV-based color support on tuya light [esphome#2400](https://github.com/esphome/esphome/pull/2400) by [@irtimaled](https://github.com/irtimaled) (new-feature) +- Tuya: add cover component [esphome#2279](https://github.com/esphome/esphome/pull/2279) by [@marmarek](https://github.com/marmarek) +- Fix tuya cover lint checks [esphome#2414](https://github.com/esphome/esphome/pull/2414) by [@OttoWinter](https://github.com/OttoWinter) +- Bump debian base to 5.1.0 / 20210902 [esphome#2413](https://github.com/esphome/esphome/pull/2413) by [@OttoWinter](https://github.com/OttoWinter) +- Remove default initializations from tuya cover [esphome#2415](https://github.com/esphome/esphome/pull/2415) by [@jesserockz](https://github.com/jesserockz) +- Move #ifdef to after header include [esphome#2417](https://github.com/esphome/esphome/pull/2417) by [@oxan](https://github.com/oxan) +- String manipulation filters for text sensors! [esphome#2393](https://github.com/esphome/esphome/pull/2393) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (new-feature) +- Update web_server.cpp [esphome#2419](https://github.com/esphome/esphome/pull/2419) by [@arallsopp](https://github.com/arallsopp) +- Fix default environment for clang-tidy [esphome#2420](https://github.com/esphome/esphome/pull/2420) by [@oxan](https://github.com/oxan) +- Replace std::move() with const references where possible [esphome#2421](https://github.com/esphome/esphome/pull/2421) by [@oxan](https://github.com/oxan) +- Fix line endings normalization [esphome#2407](https://github.com/esphome/esphome/pull/2407) by [@oxan](https://github.com/oxan) +- Option to ignore CRC for EFuse MAC address [esphome#2399](https://github.com/esphome/esphome/pull/2399) by [@mmakaay](https://github.com/mmakaay) +- Fix attach_interrupt(...) for esp-idf framework [esphome#2416](https://github.com/esphome/esphome/pull/2416) by [@mmakaay](https://github.com/mmakaay) +- Fix I2C recovery on Arduino [esphome#2412](https://github.com/esphome/esphome/pull/2412) by [@mmakaay](https://github.com/mmakaay) +- Fix ESP32 esp-idf OTA updates [esphome#2424](https://github.com/esphome/esphome/pull/2424) by [@mmakaay](https://github.com/mmakaay) +- Add local MAC address to WiFi info [esphome#2428](https://github.com/esphome/esphome/pull/2428) by [@cvwillegen](https://github.com/cvwillegen) +- Thermostat publish state fix [esphome#2427](https://github.com/esphome/esphome/pull/2427) by [@kbx81](https://github.com/kbx81) +- Convert time to use tzdata [esphome#2425](https://github.com/esphome/esphome/pull/2425) by [@OttoWinter](https://github.com/OttoWinter) +- Hotfix for ESP8266 OTA issue: ERROR Error binary size [esphome#2432](https://github.com/esphome/esphome/pull/2432) by [@mmakaay](https://github.com/mmakaay) +- Disable dependency finder on ESP32 [esphome#2435](https://github.com/esphome/esphome/pull/2435) by [@agners](https://github.com/agners) +- Use size_t to fix comparision using RISC-V toolchain [esphome#2436](https://github.com/esphome/esphome/pull/2436) by [@agners](https://github.com/agners) +- Fix I2C recovery ESP32 esp-idf [esphome#2438](https://github.com/esphome/esphome/pull/2438) by [@mmakaay](https://github.com/mmakaay) +- Fix esp32 no longer has Hash internal lib [esphome#2441](https://github.com/esphome/esphome/pull/2441) by [@OttoWinter](https://github.com/OttoWinter) +- Fix restoring globals [esphome#2442](https://github.com/esphome/esphome/pull/2442) by [@OttoWinter](https://github.com/OttoWinter) +- Always upload using esptool [esphome#2433](https://github.com/esphome/esphome/pull/2433) by [@OttoWinter](https://github.com/OttoWinter) +- Add support for Airthing Wave Mini [esphome#2440](https://github.com/esphome/esphome/pull/2440) by [@ncareau](https://github.com/ncareau) (new-integration) +- Improved validation for Addressable Light Partition Segments [esphome#2439](https://github.com/esphome/esphome/pull/2439) by [@paulmonigatti](https://github.com/paulmonigatti) +- Bump pytest-cov from 2.12.1 to 3.0.0 [esphome#2444](https://github.com/esphome/esphome/pull/2444) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix compilation error for shutdown component [esphome#2447](https://github.com/esphome/esphome/pull/2447) by [@martgras](https://github.com/martgras) +- Bump aioesphomeapi from 9.1.4 to 9.1.5 [esphome#2449](https://github.com/esphome/esphome/pull/2449) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Only ping once every two seconds [esphome#2448](https://github.com/esphome/esphome/pull/2448) by [@alexiri](https://github.com/alexiri) +- Bump esphome-dashboard to 20211006.0 [esphome#2451](https://github.com/esphome/esphome/pull/2451) by [@jesserockz](https://github.com/jesserockz) +- I2C re-introduce very verbose logging [esphome#2446](https://github.com/esphome/esphome/pull/2446) by [@OttoWinter](https://github.com/OttoWinter) +- Add Safe Mode Restart Switch [esphome#2437](https://github.com/esphome/esphome/pull/2437) by [@paulmonigatti](https://github.com/paulmonigatti) (new-integration) +- Add id() for restoring global [esphome#2454](https://github.com/esphome/esphome/pull/2454) by [@jesserockz](https://github.com/jesserockz) +- Add timestamp to ESPHome dashboard/cli logs [esphome#2455](https://github.com/esphome/esphome/pull/2455) by [@alexiri](https://github.com/alexiri) +- I2c fix [esphome#2460](https://github.com/esphome/esphome/pull/2460) by [@martgras](https://github.com/martgras) +- Correct I2C read() return val check in bh1750 component. [esphome#2465](https://github.com/esphome/esphome/pull/2465) by [@mmakaay](https://github.com/mmakaay) +- atm90e32: make the total_increasing class sensors actually be increasing totals. [esphome#2459](https://github.com/esphome/esphome/pull/2459) by [@davidmonro](https://github.com/davidmonro) +- Use enum for Tuya fan direction datapoint [esphome#2471](https://github.com/esphome/esphome/pull/2471) by [@rmounce](https://github.com/rmounce) +- Fix MQTT cover state when position is supported [esphome#2468](https://github.com/esphome/esphome/pull/2468) by [@definitio](https://github.com/definitio) +- Sgp40 fix [esphome#2462](https://github.com/esphome/esphome/pull/2462) by [@natelust](https://github.com/natelust) +- EntityBase Refactor [esphome#2418](https://github.com/esphome/esphome/pull/2418) by [@paulmonigatti](https://github.com/paulmonigatti) +- Fix below freezing temperature for Inkbird sensors [esphome#2466](https://github.com/esphome/esphome/pull/2466) by [@nuttytree](https://github.com/nuttytree) +- Add configuration for cover topics [esphome#2472](https://github.com/esphome/esphome/pull/2472) by [@definitio](https://github.com/definitio) +- Add configuration for climate topics [esphome#2473](https://github.com/esphome/esphome/pull/2473) by [@definitio](https://github.com/definitio) +- Use arduino btStart for arduino framework [esphome#2457](https://github.com/esphome/esphome/pull/2457) by [@jesserockz](https://github.com/jesserockz) +- Bump click from 8.0.1 to 8.0.3 [esphome#2481](https://github.com/esphome/esphome/pull/2481) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump flake8 from 3.9.2 to 4.0.1 [esphome#2483](https://github.com/esphome/esphome/pull/2483) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump platformio from 5.2.0 to 5.2.1 [esphome#2482](https://github.com/esphome/esphome/pull/2482) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esphome-dashboard from 20211006.0 to 20211011.1 [esphome#2484](https://github.com/esphome/esphome/pull/2484) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Replace deprecated COLOR_BLACK constant [esphome#2487](https://github.com/esphome/esphome/pull/2487) by [@davet2001](https://github.com/davet2001) +- Fix color temperature persistence on CWWW lights [esphome#2486](https://github.com/esphome/esphome/pull/2486) by [@sairon](https://github.com/sairon) +- Fix reset on http_request without network connection [esphome#2474](https://github.com/esphome/esphome/pull/2474) by [@niklasweber](https://github.com/niklasweber) +- Consolidate CONF_RAW_DATA_ID to const.py [esphome#2491](https://github.com/esphome/esphome/pull/2491) by [@davet2001](https://github.com/davet2001) +- Update Airthings BLE [esphome#2453](https://github.com/esphome/esphome/pull/2453) by [@jesserockz](https://github.com/jesserockz) +- Add on_open and on_closed triggers to cover [esphome#2488](https://github.com/esphome/esphome/pull/2488) by [@nuttytree](https://github.com/nuttytree) +- Fix LoadProhibited crash for logger baud_rate 0 on esp-idf [esphome#2498](https://github.com/esphome/esphome/pull/2498) by [@mmakaay](https://github.com/mmakaay) +- Added heatpumpir support [esphome#1343](https://github.com/esphome/esphome/pull/1343) by [@rob-deutsch](https://github.com/rob-deutsch) (new-integration) +- Reduce IRAM usage in test3 [esphome#2499](https://github.com/esphome/esphome/pull/2499) by [@oxan](https://github.com/oxan) +- Add optional timeout for wait_until action [esphome#2282](https://github.com/esphome/esphome/pull/2282) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Improves ct_clamp component accuracy [esphome#2283](https://github.com/esphome/esphome/pull/2283) by [@skasi7](https://github.com/skasi7) +- Allow multiple pn532_spi entries [esphome#2489](https://github.com/esphome/esphome/pull/2489) by [@jesserockz](https://github.com/jesserockz) +- Add throttle_average sensor filter [esphome#2485](https://github.com/esphome/esphome/pull/2485) by [@sermayoral](https://github.com/sermayoral) +- Fix light state remaining on after turn off with transition [esphome#2509](https://github.com/esphome/esphome/pull/2509) by [@oxan](https://github.com/oxan) +- Fix: Light flash not restoring previous LightState [esphome#2383](https://github.com/esphome/esphome/pull/2383) by [@paulmonigatti](https://github.com/paulmonigatti) +- Disallow using UART2 for logger on ESP-32 variants that lack it [esphome#2510](https://github.com/esphome/esphome/pull/2510) by [@oxan](https://github.com/oxan) +- Fix BME680_BSEC compilation issue with ESP32 [esphome#2516](https://github.com/esphome/esphome/pull/2516) by [@paulmonigatti](https://github.com/paulmonigatti) +- add missing include in sgp30 [esphome#2517](https://github.com/esphome/esphome/pull/2517) by [@dmitriy5181](https://github.com/dmitriy5181) +- Fix: Color modes not being correctly used in light partitions [esphome#2513](https://github.com/esphome/esphome/pull/2513) by [@paulmonigatti](https://github.com/paulmonigatti) +- Add pressure compensation during runtime [esphome#2493](https://github.com/esphome/esphome/pull/2493) by [@martgras](https://github.com/martgras) +- Don't define UART_SELECTION_UART2 when UART2 is unavailable [esphome#2512](https://github.com/esphome/esphome/pull/2512) by [@oxan](https://github.com/oxan) +- Remove BME680_BSEC test [esphome#2518](https://github.com/esphome/esphome/pull/2518) by [@paulmonigatti](https://github.com/paulmonigatti) +- Fix Nextion HTTPClient error for ESP32 [esphome#2524](https://github.com/esphome/esphome/pull/2524) by [@kbx81](https://github.com/kbx81) +- Fix bug in register name definition [esphome#2526](https://github.com/esphome/esphome/pull/2526) by [@martgras](https://github.com/martgras) +- OTA firmware MD5 check + password support for esp-idf [esphome#2507](https://github.com/esphome/esphome/pull/2507) by [@mmakaay](https://github.com/mmakaay) (new-integration) +- Replace framework version_hint with source option [esphome#2529](https://github.com/esphome/esphome/pull/2529) by [@oxan](https://github.com/oxan) +- Fix bitshift on read in ADE7953 [esphome#2537](https://github.com/esphome/esphome/pull/2537) by [@oxan](https://github.com/oxan) +- Allow downloading all bin files from backend in dashboard [esphome#2514](https://github.com/esphome/esphome/pull/2514) by [@jesserockz](https://github.com/jesserockz) +- Bump dashboard to 20211015.0 [esphome#2525](https://github.com/esphome/esphome/pull/2525) by [@balloob](https://github.com/balloob) +- Only show timestamp for dashboard access logs [esphome#2540](https://github.com/esphome/esphome/pull/2540) by [@OttoWinter](https://github.com/OttoWinter) +- Fix const used for IDF recommended version [esphome#2542](https://github.com/esphome/esphome/pull/2542) by [@jesserockz](https://github.com/jesserockz) +- Fix Bluetooth setup_priorities [esphome#2458](https://github.com/esphome/esphome/pull/2458) by [@jesserockz](https://github.com/jesserockz) +- Autodetect ESP32 variant [esphome#2530](https://github.com/esphome/esphome/pull/2530) by [@oxan](https://github.com/oxan) +- Bump dashboard to 20211019.0 [esphome#2549](https://github.com/esphome/esphome/pull/2549) by [@jesserockz](https://github.com/jesserockz) +- Fix ADC pin validation on ESP32-C3 [esphome#2551](https://github.com/esphome/esphome/pull/2551) by [@oxan](https://github.com/oxan) +- ignore exception when not waiting for a response [esphome#2552](https://github.com/esphome/esphome/pull/2552) by [@martgras](https://github.com/martgras) +- Bump dashboard to 20211020.0 [esphome#2556](https://github.com/esphome/esphome/pull/2556) by [@jesserockz](https://github.com/jesserockz) +- Fix HA addon so it does not have logout button [esphome#2558](https://github.com/esphome/esphome/pull/2558) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211020.1 [esphome#2559](https://github.com/esphome/esphome/pull/2559) by [@jesserockz](https://github.com/jesserockz) +- A few esp32_ble_server/improv fixes [esphome#2562](https://github.com/esphome/esphome/pull/2562) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211021.0 [esphome#2564](https://github.com/esphome/esphome/pull/2564) by [@jesserockz](https://github.com/jesserockz) +- Move running process log line to debug level [esphome#2565](https://github.com/esphome/esphome/pull/2565) by [@OttoWinter](https://github.com/OttoWinter) +- Revert nextion clang-tidy changes [esphome#2566](https://github.com/esphome/esphome/pull/2566) by [@OttoWinter](https://github.com/OttoWinter) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2021.11.0.mdx b/src/content/docs/changelog/2021.11.0.mdx new file mode 100644 index 0000000000..467c436909 --- /dev/null +++ b/src/content/docs/changelog/2021.11.0.mdx @@ -0,0 +1,293 @@ +--- +description: "Changelog for ESPHome 2021.11.0." +title: "ESPHome 2021.11.0 - 17th November 2021" +pagefind: false +slug: "changelog/2021.11.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +import { Image } from 'astro:assets'; +import configurationUrlImg from './images/configuration-url.png'; + + +## State of the Open Smart Home + +Mark your calendar for the [State of the Open Smart Home](https://www.home-assistant.io/state-of-the-open-home/) +hosted by Nabu Casa, Home Assistant & ESPHome and we'll be joined by our friends from WLED and Z-Wave JS to talk +about our work on making this vision a reality. + +Where: YouTube + +When: Saturday, December 11, at 11am PST / 8pm CET + +{/* markdownlint-disable MD033 */} + + +## Improv via Serial + + + + + The demo does not work in your browser. Use Google Chrome or Microsoft Edge. + +{/* markdownlint-enable MD033 */} + +After we created [Esp32 Improv](/components/esp32_improv/), we thought it might be a good idea to implement the same +for serial connections. See the docs here for [Improv via Serial](/components/improv_serial/) and the +[website documentation](https://www.improv-wifi.com/serial/) for implementing a client or implementing improv in +other firmware. + +## Entity Categories for Home Assistant + +Home Assistant 2021.11 added support for [Entity Categories](https://www.home-assistant.io/blog/2021/11/03/release-202111/#entity-categorization) +and with this release certain ESPHome entites such as the restart switch and uptime sensors will have the config and +diagnostic categories set respectively. +The category can be overridden by the user in the yaml configuration. + +## Configuration URL + +Another feature added to Home Assistant 2021.11 is the configuration URL. This allows for ESPHome devices to notify +Home Assistant when the `web_server` is enabled and there will be a button in the Home Assistant device page to +link directly to the `web_server` UI for your ESPHome device. + + + +## Repeat Action + +[@oxan](https://github.com/oxan) has implemented a `repeat` action for those that want to execute a list of actions x number +of times without just copying and pasting them. + +## Device name length + +The maximum length of the device name has been limited to 31 characters to fall in line with standards and you will get +an error if you try to set a device name longer than that. + +## BLE Sensor UUID changes + +A bug was introduced in 2021.9 with the UUIDs for the `ble_client` sensors being reversed incorrectly. This release +flips them to be the correct way around and you will need to reverse them in your YAML configuration. + +## BH1750 + +When using the default resolution of 0.5 for the BH1750, the result is now divided by 2 as per the finidings of +the community. + +## Binary sensor device classes + +[esphome#2703](https://github.com/esphome/esphome/pull/2703) removed the `update` `device_class` for binary sensors incorrectly in 2021.11.0. +[@frenck](https://github.com/frenck) noticed this and has added it back again in 2021.11.1. + +{/* markdownlint-disable MD013 */} + +## Release 2021.11.1 - November 17 + +- Fix AQI index calculator [esphome#2739](https://github.com/esphome/esphome/pull/2739) by [@freekode](https://github.com/freekode) +- Re-instate device class update for binary sensors [esphome#2743](https://github.com/esphome/esphome/pull/2743) by [@frenck](https://github.com/frenck) + +## Release 2021.11.2 - November 26 + +- Allow UART debug configuration with no after: definition [esphome#2753](https://github.com/esphome/esphome/pull/2753) by [@mmakaay](https://github.com/mmakaay) +- Fix gif frame scaling #2717 [esphome#2750](https://github.com/esphome/esphome/pull/2750) by [@davet2001](https://github.com/davet2001) +- esp32_camera_web_server: Improve support for MotionEye [esphome#2777](https://github.com/esphome/esphome/pull/2777) by [@ayufan](https://github.com/ayufan) +- Remove floating point ops from the ISR [esphome#2751](https://github.com/esphome/esphome/pull/2751) by [@ssieb](https://github.com/ssieb) +- Fix parsing numbers from null-terminated buffers [esphome#2755](https://github.com/esphome/esphome/pull/2755) by [@oxan](https://github.com/oxan) + +## Release 2021.11.3 - November 27 + +- Fix restoring preferences for ESP32 [esphome#2805](https://github.com/esphome/esphome/pull/2805) by [@mmakaay](https://github.com/mmakaay) + +## Release 2021.11.4 - November 29 + +- Fix parsing numbers in Anova [esphome#2816](https://github.com/esphome/esphome/pull/2816) by [@oxan](https://github.com/oxan) +- Fix parsing of multiple values in EZO sensor [esphome#2814](https://github.com/esphome/esphome/pull/2814) by [@oxan](https://github.com/oxan) +- Fix compilation error for WPA enterprise in ESP-IDF [esphome#2815](https://github.com/esphome/esphome/pull/2815) by [@CarlosGS](https://github.com/CarlosGS) +- Correct bitmask for third color (blue) scaling. [esphome#2817](https://github.com/esphome/esphome/pull/2817) by [@davet2001](https://github.com/davet2001) +- Add delay to improve stability [esphome#2793](https://github.com/esphome/esphome/pull/2793) by [@Conclusio](https://github.com/Conclusio) + +## Full list of changes + +### New Features + +- Make per-loop display clearing optional [esphome#2626](https://github.com/esphome/esphome/pull/2626) by [@timn](https://github.com/timn) (new-feature) +- Add Entity categories for Home Assistant [esphome#2636](https://github.com/esphome/esphome/pull/2636) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Add repeat action for automations [esphome#2538](https://github.com/esphome/esphome/pull/2538) by [@oxan](https://github.com/oxan) (new-feature) +- Neopixelbus redo method definitions [esphome#2616](https://github.com/esphome/esphome/pull/2616) by [@OttoWinter](https://github.com/OttoWinter) (new-feature) (breaking-change) + +### New Components + +- Feature/sensor cse7761 [esphome#2546](https://github.com/esphome/esphome/pull/2546) by [@berfenger](https://github.com/berfenger) (new-integration) +- Add `esp32_camera_web_server:` to expose mjpg/jpg images [esphome#2237](https://github.com/esphome/esphome/pull/2237) by [@ayufan](https://github.com/ayufan) (new-integration) +- CAP1188 Capacitive Touch Sensor Support [esphome#2653](https://github.com/esphome/esphome/pull/2653) by [@MrEditor97](https://github.com/MrEditor97) (new-integration) +- Implement Improv via Serial component [esphome#2423](https://github.com/esphome/esphome/pull/2423) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- TCS34725 BugFix and GA factor [esphome#2445](https://github.com/esphome/esphome/pull/2445) by [@razorback16](https://github.com/razorback16) (breaking-change) +- Limit hostnames to 31 characters [esphome#2531](https://github.com/esphome/esphome/pull/2531) by [@oxan](https://github.com/oxan) (breaking-change) +- Move default build path to .esphome directory [esphome#2586](https://github.com/esphome/esphome/pull/2586) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- ESP8266 disable PIO LDF [esphome#2608](https://github.com/esphome/esphome/pull/2608) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- Remove autoload of xiaomi_ble and ruuvi_ble [esphome#2617](https://github.com/esphome/esphome/pull/2617) by [@spbrogan](https://github.com/spbrogan) (breaking-change) +- BH1750: Fix a too high default H-res2 mode value [esphome#2536](https://github.com/esphome/esphome/pull/2536) by [@kixtarter](https://github.com/kixtarter) (breaking-change) +- Add option to use MQTT abbreviations [esphome#2641](https://github.com/esphome/esphome/pull/2641) by [@paulmonigatti](https://github.com/paulmonigatti) (breaking-change) +- Add restore_mode to rotary_encoder [esphome#2643](https://github.com/esphome/esphome/pull/2643) by [@niklasweber](https://github.com/niklasweber) (breaking-change) +- Neopixelbus redo method definitions [esphome#2616](https://github.com/esphome/esphome/pull/2616) by [@OttoWinter](https://github.com/OttoWinter) (new-feature) (breaking-change) +- Update device classes for binary sensors [esphome#2703](https://github.com/esphome/esphome/pull/2703) by [@lcavalli](https://github.com/lcavalli) (breaking-change) +- BLE_Sensor: Use as_reversed_hex_array to properly parse UUIDs after #1627 [esphome#2737](https://github.com/esphome/esphome/pull/2737) by [@tekmaven](https://github.com/tekmaven) (breaking-change) + +### Beta Fixes + +- Fix template number initial value being NaN [esphome#2692](https://github.com/esphome/esphome/pull/2692) by [@jesserockz](https://github.com/jesserockz) +- [remote_transmitter] accurate pulse timing for ESP8266 [esphome#2476](https://github.com/esphome/esphome/pull/2476) by [@CarlosGS](https://github.com/CarlosGS) +- Uart debugging support [esphome#2478](https://github.com/esphome/esphome/pull/2478) by [@mmakaay](https://github.com/mmakaay) +- Enable addressable light power supply based on raw values [esphome#2690](https://github.com/esphome/esphome/pull/2690) by [@oxan](https://github.com/oxan) +- Remove my.ha links from improv [esphome#2695](https://github.com/esphome/esphome/pull/2695) by [@jesserockz](https://github.com/jesserockz) +- Only allow prometheus when using arduino [esphome#2697](https://github.com/esphome/esphome/pull/2697) by [@jesserockz](https://github.com/jesserockz) +- Update device classes for binary sensors [esphome#2703](https://github.com/esphome/esphome/pull/2703) by [@lcavalli](https://github.com/lcavalli) (breaking-change) +- Bump ESPAsyncWebServer to 2.1.0 [esphome#2686](https://github.com/esphome/esphome/pull/2686) by [@jesserockz](https://github.com/jesserockz) +- Allow setting custom command_topic for Select and Number components [esphome#2714](https://github.com/esphome/esphome/pull/2714) by [@kbialek](https://github.com/kbialek) +- Restore InterruptLock on wifi-less ESP8266 [esphome#2712](https://github.com/esphome/esphome/pull/2712) by [@oxan](https://github.com/oxan) +- Feed WDT between doing ESP32 touchpad measurements [esphome#2720](https://github.com/esphome/esphome/pull/2720) by [@oxan](https://github.com/oxan) +- RemoteTransmitter fix. Bug from version 2021.10. Some changes. [esphome#2706](https://github.com/esphome/esphome/pull/2706) by [@dudanov](https://github.com/dudanov) +- Fix indentation of write_lambda for modbus_controller number [esphome#2722](https://github.com/esphome/esphome/pull/2722) by [@jesserockz](https://github.com/jesserockz) +- Remove unnecessary duplicate touch_pad_filter_start [esphome#2724](https://github.com/esphome/esphome/pull/2724) by [@Maelstrom96](https://github.com/Maelstrom96) +- Add zeroconf as a direct dependency and lock the version [esphome#2729](https://github.com/esphome/esphome/pull/2729) by [@jesserockz](https://github.com/jesserockz) +- Improv serial/checksum changes [esphome#2731](https://github.com/esphome/esphome/pull/2731) by [@jesserockz](https://github.com/jesserockz) +- Fix zeroconf time comparisons [esphome#2733](https://github.com/esphome/esphome/pull/2733) by [@jesserockz](https://github.com/jesserockz) +- BLE_Sensor: Use as_reversed_hex_array to properly parse UUIDs after #1627 [esphome#2737](https://github.com/esphome/esphome/pull/2737) by [@tekmaven](https://github.com/tekmaven) (breaking-change) +- Fix senseair component uart read timeout [esphome#2658](https://github.com/esphome/esphome/pull/2658) by [@rotarykite](https://github.com/rotarykite) + +### All changes + +- TCS34725 BugFix and GA factor [esphome#2445](https://github.com/esphome/esphome/pull/2445) by [@razorback16](https://github.com/razorback16) (breaking-change) +- Change millis() to faster micros() for 3ms check in feed_wdt [esphome#2492](https://github.com/esphome/esphome/pull/2492) by [@CarlosGS](https://github.com/CarlosGS) +- Add ESP32 IDF as a test env for PRs [esphome#2494](https://github.com/esphome/esphome/pull/2494) by [@mmakaay](https://github.com/mmakaay) +- use no hold master mode for si7021/htu21d [esphome#2528](https://github.com/esphome/esphome/pull/2528) by [@dmitriy5181](https://github.com/dmitriy5181) +- Bump pyyaml from 5.4.1 to 6.0 [esphome#2521](https://github.com/esphome/esphome/pull/2521) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Clarify statement at the cmd wizard tool, for new users [esphome#2519](https://github.com/esphome/esphome/pull/2519) by [@CarlosGS](https://github.com/CarlosGS) +- Continue ethernet setup if hostname fails [esphome#2430](https://github.com/esphome/esphome/pull/2430) by [@Tommatheussen](https://github.com/Tommatheussen) +- Bump aioesphomeapi from 9.1.5 to 10.0.0 [esphome#2508](https://github.com/esphome/esphome/pull/2508) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Move TemplatableValue helper class to automation.h [esphome#2511](https://github.com/esphome/esphome/pull/2511) by [@oxan](https://github.com/oxan) +- [esp-idf fix] increase FreeRTOS ticker loop from 100Hz to 1kHz [esphome#2527](https://github.com/esphome/esphome/pull/2527) by [@CarlosGS](https://github.com/CarlosGS) +- Bump pytest-asyncio from 0.15.1 to 0.16.0 [esphome#2547](https://github.com/esphome/esphome/pull/2547) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [ESP32] ADC auto-range setting [esphome#2541](https://github.com/esphome/esphome/pull/2541) by [@CarlosGS](https://github.com/CarlosGS) +- Bump paho-mqtt from 1.5.1 to 1.6.0 [esphome#2568](https://github.com/esphome/esphome/pull/2568) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix ESP8266 dallas GPIO16 INPUT_PULLUP [esphome#2581](https://github.com/esphome/esphome/pull/2581) by [@OttoWinter](https://github.com/OttoWinter) +- Fix platformio version in Dockerfile doesn't match requirements [esphome#2582](https://github.com/esphome/esphome/pull/2582) by [@OttoWinter](https://github.com/OttoWinter) +- Fix platformio_install_deps no longer installing all lib_deps [esphome#2584](https://github.com/esphome/esphome/pull/2584) by [@OttoWinter](https://github.com/OttoWinter) +- ESP32 ADC use factory calibration data [esphome#2574](https://github.com/esphome/esphome/pull/2574) by [@OttoWinter](https://github.com/OttoWinter) +- Add mDNS config dump [esphome#2576](https://github.com/esphome/esphome/pull/2576) by [@mmakaay](https://github.com/mmakaay) +- Fix mDNS ESP8266 log not included [esphome#2589](https://github.com/esphome/esphome/pull/2589) by [@OttoWinter](https://github.com/OttoWinter) +- Bump platformio from 5.2.1 to 5.2.2 [esphome#2569](https://github.com/esphome/esphome/pull/2569) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update docker base images [esphome#2583](https://github.com/esphome/esphome/pull/2583) by [@OttoWinter](https://github.com/OttoWinter) +- Bump paho-mqtt from 1.6.0 to 1.6.1 [esphome#2596](https://github.com/esphome/esphome/pull/2596) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Logging a proper url allows terminals to make it clickable [esphome#2554](https://github.com/esphome/esphome/pull/2554) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 10.0.0 to 10.0.3 [esphome#2595](https://github.com/esphome/esphome/pull/2595) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tzlocal from 3.0 to 4.0.1 [esphome#2553](https://github.com/esphome/esphome/pull/2553) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add IDF support to dallas [esphome#2578](https://github.com/esphome/esphome/pull/2578) by [@OttoWinter](https://github.com/OttoWinter) +- Limit hostnames to 31 characters [esphome#2531](https://github.com/esphome/esphome/pull/2531) by [@oxan](https://github.com/oxan) (breaking-change) +- Add EntityBase properties to ESP32 Camera [esphome#2600](https://github.com/esphome/esphome/pull/2600) by [@paulmonigatti](https://github.com/paulmonigatti) +- Move default build path to .esphome directory [esphome#2586](https://github.com/esphome/esphome/pull/2586) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- ESP8266 disable PIO LDF [esphome#2608](https://github.com/esphome/esphome/pull/2608) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- Switch issue-close-app to GH Actions and workflow cleanup [esphome#2624](https://github.com/esphome/esphome/pull/2624) by [@OttoWinter](https://github.com/OttoWinter) +- relax max entities checking [esphome#2629](https://github.com/esphome/esphome/pull/2629) by [@martgras](https://github.com/martgras) +- Allow setting URL as platform_version [esphome#2598](https://github.com/esphome/esphome/pull/2598) by [@oxan](https://github.com/oxan) +- Constrain GH Actions workflows permissions [esphome#2625](https://github.com/esphome/esphome/pull/2625) by [@OttoWinter](https://github.com/OttoWinter) +- Bump tzlocal from 4.0.1 to 4.0.2 [esphome#2631](https://github.com/esphome/esphome/pull/2631) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esptool from 3.1 to 3.2 [esphome#2632](https://github.com/esphome/esphome/pull/2632) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add publish_initial_value option to rotary encoder [esphome#2503](https://github.com/esphome/esphome/pull/2503) by [@niklasweber](https://github.com/niklasweber) +- Remove autoload of xiaomi_ble and ruuvi_ble [esphome#2617](https://github.com/esphome/esphome/pull/2617) by [@spbrogan](https://github.com/spbrogan) (breaking-change) +- Bump aioesphomeapi from 10.0.3 to 10.1.0 [esphome#2638](https://github.com/esphome/esphome/pull/2638) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Expose web_server port via the API [esphome#2467](https://github.com/esphome/esphome/pull/2467) by [@alexiri](https://github.com/alexiri) +- Allow cloning/fetching Github PR branches in external_components [esphome#2639](https://github.com/esphome/esphome/pull/2639) by [@jesserockz](https://github.com/jesserockz) +- use update_interval for sntp synchronization [esphome#2563](https://github.com/esphome/esphome/pull/2563) by [@martgras](https://github.com/martgras) +- Feature/sensor cse7761 [esphome#2546](https://github.com/esphome/esphome/pull/2546) by [@berfenger](https://github.com/berfenger) (new-integration) +- Bump aioesphomeapi from 10.1.0 to 10.2.0 [esphome#2642](https://github.com/esphome/esphome/pull/2642) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- BH1750: Fix a too high default H-res2 mode value [esphome#2536](https://github.com/esphome/esphome/pull/2536) by [@kixtarter](https://github.com/kixtarter) (breaking-change) +- Bump tzlocal from 4.0.2 to 4.1 [esphome#2645](https://github.com/esphome/esphome/pull/2645) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- convert SCD30 into Component, polls dataready register [esphome#2308](https://github.com/esphome/esphome/pull/2308) by [@geoffrey-vl](https://github.com/geoffrey-vl) +- Add option to use MQTT abbreviations [esphome#2641](https://github.com/esphome/esphome/pull/2641) by [@paulmonigatti](https://github.com/paulmonigatti) (breaking-change) +- Fix deep sleep invert_wakeup mode [esphome#2644](https://github.com/esphome/esphome/pull/2644) by [@OttoWinter](https://github.com/OttoWinter) +- Expose webserver_port to the native API [esphome#2640](https://github.com/esphome/esphome/pull/2640) by [@jesserockz](https://github.com/jesserockz) +- Fix for noise in pulse_counter and duty_cycle components [esphome#2646](https://github.com/esphome/esphome/pull/2646) by [@CarlosGS](https://github.com/CarlosGS) +- Bump black from 21.9b0 to 21.10b0 [esphome#2650](https://github.com/esphome/esphome/pull/2650) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add restore_mode to rotary_encoder [esphome#2643](https://github.com/esphome/esphome/pull/2643) by [@niklasweber](https://github.com/niklasweber) (breaking-change) +- Make per-loop display clearing optional [esphome#2626](https://github.com/esphome/esphome/pull/2626) by [@timn](https://github.com/timn) (new-feature) +- Allow esp8266 to compile with no wifi [esphome#2664](https://github.com/esphome/esphome/pull/2664) by [@glmnet](https://github.com/glmnet) +- Fix CRC error during DSMR chunked message reading [esphome#2622](https://github.com/esphome/esphome/pull/2622) by [@mmakaay](https://github.com/mmakaay) +- Add Entity categories for Home Assistant [esphome#2636](https://github.com/esphome/esphome/pull/2636) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Add SPI lib for ESP8266 and only add lib for ESP32 when using Arduino [esphome#2677](https://github.com/esphome/esphome/pull/2677) by [@mmakaay](https://github.com/mmakaay) +- Hotfix for encrypted DSMR regression [esphome#2679](https://github.com/esphome/esphome/pull/2679) by [@mmakaay](https://github.com/mmakaay) +- Add HA Entity Category support to MQTT [esphome#2678](https://github.com/esphome/esphome/pull/2678) by [@paulmonigatti](https://github.com/paulmonigatti) +- Fix gpio validation for esp32 variants [esphome#2609](https://github.com/esphome/esphome/pull/2609) by [@martgras](https://github.com/martgras) +- Fix when package url has no branch/ref [esphome#2683](https://github.com/esphome/esphome/pull/2683) by [@jesserockz](https://github.com/jesserockz) +- SSD1306_base -> Add support for 64x32 size and fix typo for flip functions [esphome#2682](https://github.com/esphome/esphome/pull/2682) by [@ychieux](https://github.com/ychieux) +- Fix dashboard imports for adoption [esphome#2684](https://github.com/esphome/esphome/pull/2684) by [@jesserockz](https://github.com/jesserockz) +- Add `esp32_camera_web_server:` to expose mjpg/jpg images [esphome#2237](https://github.com/esphome/esphome/pull/2237) by [@ayufan](https://github.com/ayufan) (new-integration) +- fix esp32 rmt receiver item array length [esphome#2671](https://github.com/esphome/esphome/pull/2671) by [@glmnet](https://github.com/glmnet) +- Remote base add pronto protocol [esphome#2619](https://github.com/esphome/esphome/pull/2619) by [@cvwillegen](https://github.com/cvwillegen) +- Set up output_switch at priority DATA instead of HARDWARE. [esphome#2648](https://github.com/esphome/esphome/pull/2648) by [@duncf](https://github.com/duncf) +- fix rc switch protocol 6 [esphome#2672](https://github.com/esphome/esphome/pull/2672) by [@glmnet](https://github.com/glmnet) +- Remove "delay_microseconds_accurate()" and improve systemwide delayMicroseconds() [esphome#2497](https://github.com/esphome/esphome/pull/2497) by [@CarlosGS](https://github.com/CarlosGS) +- modbus_controller: remove hard coded register size [esphome#2654](https://github.com/esphome/esphome/pull/2654) by [@martgras](https://github.com/martgras) +- CAP1188 Capacitive Touch Sensor Support [esphome#2653](https://github.com/esphome/esphome/pull/2653) by [@MrEditor97](https://github.com/MrEditor97) (new-integration) +- Add missing hal.h include in esp32_camera_web_server [esphome#2689](https://github.com/esphome/esphome/pull/2689) by [@oxan](https://github.com/oxan) +- [ESP32 ADC] Add option for raw uncalibrated output [esphome#2663](https://github.com/esphome/esphome/pull/2663) by [@CarlosGS](https://github.com/CarlosGS) +- Introduce parse_number() helper function [esphome#2659](https://github.com/esphome/esphome/pull/2659) by [@oxan](https://github.com/oxan) +- Add repeat action for automations [esphome#2538](https://github.com/esphome/esphome/pull/2538) by [@oxan](https://github.com/oxan) (new-feature) +- Neopixelbus redo method definitions [esphome#2616](https://github.com/esphome/esphome/pull/2616) by [@OttoWinter](https://github.com/OttoWinter) (new-feature) (breaking-change) +- Introduce byteswap helpers [esphome#2661](https://github.com/esphome/esphome/pull/2661) by [@oxan](https://github.com/oxan) +- Max7219digit multiline [esphome#1622](https://github.com/esphome/esphome/pull/1622) by [@TVDLoewe](https://github.com/TVDLoewe) +- Clean-up string sanitization helpers [esphome#2660](https://github.com/esphome/esphome/pull/2660) by [@oxan](https://github.com/oxan) +- Introduce encode_value/decode_value() template functions [esphome#2662](https://github.com/esphome/esphome/pull/2662) by [@oxan](https://github.com/oxan) +- Make OTA function switchable in web_server component [esphome#2685](https://github.com/esphome/esphome/pull/2685) by [@lazlyhu](https://github.com/lazlyhu) +- Implement Improv via Serial component [esphome#2423](https://github.com/esphome/esphome/pull/2423) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- [ms5611]: Re-implement conversion from ADC readings to sensor values [esphome#2665](https://github.com/esphome/esphome/pull/2665) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Fix template number initial value being NaN [esphome#2692](https://github.com/esphome/esphome/pull/2692) by [@jesserockz](https://github.com/jesserockz) +- [remote_transmitter] accurate pulse timing for ESP8266 [esphome#2476](https://github.com/esphome/esphome/pull/2476) by [@CarlosGS](https://github.com/CarlosGS) +- Uart debugging support [esphome#2478](https://github.com/esphome/esphome/pull/2478) by [@mmakaay](https://github.com/mmakaay) +- Enable addressable light power supply based on raw values [esphome#2690](https://github.com/esphome/esphome/pull/2690) by [@oxan](https://github.com/oxan) +- Remove my.ha links from improv [esphome#2695](https://github.com/esphome/esphome/pull/2695) by [@jesserockz](https://github.com/jesserockz) +- Only allow prometheus when using arduino [esphome#2697](https://github.com/esphome/esphome/pull/2697) by [@jesserockz](https://github.com/jesserockz) +- Update device classes for binary sensors [esphome#2703](https://github.com/esphome/esphome/pull/2703) by [@lcavalli](https://github.com/lcavalli) (breaking-change) +- Bump ESPAsyncWebServer to 2.1.0 [esphome#2686](https://github.com/esphome/esphome/pull/2686) by [@jesserockz](https://github.com/jesserockz) +- Allow setting custom command_topic for Select and Number components [esphome#2714](https://github.com/esphome/esphome/pull/2714) by [@kbialek](https://github.com/kbialek) +- Restore InterruptLock on wifi-less ESP8266 [esphome#2712](https://github.com/esphome/esphome/pull/2712) by [@oxan](https://github.com/oxan) +- Feed WDT between doing ESP32 touchpad measurements [esphome#2720](https://github.com/esphome/esphome/pull/2720) by [@oxan](https://github.com/oxan) +- RemoteTransmitter fix. Bug from version 2021.10. Some changes. [esphome#2706](https://github.com/esphome/esphome/pull/2706) by [@dudanov](https://github.com/dudanov) +- Fix indentation of write_lambda for modbus_controller number [esphome#2722](https://github.com/esphome/esphome/pull/2722) by [@jesserockz](https://github.com/jesserockz) +- Remove unnecessary duplicate touch_pad_filter_start [esphome#2724](https://github.com/esphome/esphome/pull/2724) by [@Maelstrom96](https://github.com/Maelstrom96) +- Add zeroconf as a direct dependency and lock the version [esphome#2729](https://github.com/esphome/esphome/pull/2729) by [@jesserockz](https://github.com/jesserockz) +- Improv serial/checksum changes [esphome#2731](https://github.com/esphome/esphome/pull/2731) by [@jesserockz](https://github.com/jesserockz) +- Fix zeroconf time comparisons [esphome#2733](https://github.com/esphome/esphome/pull/2733) by [@jesserockz](https://github.com/jesserockz) +- BLE_Sensor: Use as_reversed_hex_array to properly parse UUIDs after #1627 [esphome#2737](https://github.com/esphome/esphome/pull/2737) by [@tekmaven](https://github.com/tekmaven) (breaking-change) +- Fix senseair component uart read timeout [esphome#2658](https://github.com/esphome/esphome/pull/2658) by [@rotarykite](https://github.com/rotarykite) +- Fix AQI index calculator [esphome#2739](https://github.com/esphome/esphome/pull/2739) by [@freekode](https://github.com/freekode) +- Re-instate device class update for binary sensors [esphome#2743](https://github.com/esphome/esphome/pull/2743) by [@frenck](https://github.com/frenck) +- Allow UART debug configuration with no after: definition [esphome#2753](https://github.com/esphome/esphome/pull/2753) by [@mmakaay](https://github.com/mmakaay) +- Fix gif frame scaling #2717 [esphome#2750](https://github.com/esphome/esphome/pull/2750) by [@davet2001](https://github.com/davet2001) +- esp32_camera_web_server: Improve support for MotionEye [esphome#2777](https://github.com/esphome/esphome/pull/2777) by [@ayufan](https://github.com/ayufan) +- Remove floating point ops from the ISR [esphome#2751](https://github.com/esphome/esphome/pull/2751) by [@ssieb](https://github.com/ssieb) +- Fix parsing numbers from null-terminated buffers [esphome#2755](https://github.com/esphome/esphome/pull/2755) by [@oxan](https://github.com/oxan) +- Fix restoring preferences for ESP32 [esphome#2805](https://github.com/esphome/esphome/pull/2805) by [@mmakaay](https://github.com/mmakaay) +- Fix parsing numbers in Anova [esphome#2816](https://github.com/esphome/esphome/pull/2816) by [@oxan](https://github.com/oxan) +- Fix parsing of multiple values in EZO sensor [esphome#2814](https://github.com/esphome/esphome/pull/2814) by [@oxan](https://github.com/oxan) +- Fix compilation error for WPA enterprise in ESP-IDF [esphome#2815](https://github.com/esphome/esphome/pull/2815) by [@CarlosGS](https://github.com/CarlosGS) +- Correct bitmask for third color (blue) scaling. [esphome#2817](https://github.com/esphome/esphome/pull/2817) by [@davet2001](https://github.com/davet2001) +- Add delay to improve stability [esphome#2793](https://github.com/esphome/esphome/pull/2793) by [@Conclusio](https://github.com/Conclusio) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2021.12.0.mdx b/src/content/docs/changelog/2021.12.0.mdx new file mode 100644 index 0000000000..f62dc38575 --- /dev/null +++ b/src/content/docs/changelog/2021.12.0.mdx @@ -0,0 +1,248 @@ +--- +description: "Changelog for ESPHome 2021.12.0." +title: "ESPHome 2021.12.0 - 11th December 2021" +pagefind: false +slug: "changelog/2021.12.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## State of the Open Smart Home + +Today is the [State of the Open Smart Home](https://www.home-assistant.io/state-of-the-open-home/) hosted by Nabu +Casa, Home Assistant & ESPHome and we'll be joined by our friends from WLED, Z-Wave JS, Stanford's OVAL lab and +Northeastern University to talk about our work on making this vision a reality. + +Where: YouTube + +When: Today, Saturday, December 11, at 11am PST / 8pm CET + +{/* markdownlint-disable-next-line MD033 */} + + +## Buttons + +This release brings [buttons](/components/button/) from Home Assistant. Many times there have +been questions on how to simply trigger automations from the Home Assistant frontend with a button so here you go. +Here is a very simple example: + +```yaml +button: + - platform: template + name: Test Button + on_press: + then: + - logger.log: "The button was pressed!!!" +``` + +## Multiple WiFi networks with static IP + +This release has a fix that allows using multiple networks each with their own static IP address configuration. +When using these options, you **must** also set `wifi` -> `use_address` when installing new firmware as ESPHome +cannot know which IP address to use automatically. + +## The Dashboard and secrets + +The ESPHome Dashboard will now save the wifi credentials as secrets (`wifi_ssid` / `wifi_password` ) for future use. +If you are already using these secrets, then the dashboard will not ask for credentials and will configure using +them for you. + +The dashboard also now can view the logs straight from a serial connected device via the web browser. It will +show up as an option when choosing the method to view them. + +## NEC remote protocol + +In this version, the order of transferring bits was corrected from MSB to LSB in accordance with the NEC standard. +Therefore, if the configuration file has come from an earlier version of ESPhome, it is necessary to reverse +the order of the address and command bits when moving to 2021.12 or above. +For example, address: `0x84ED`, command: `0x13EC` becomes `0xB721` and `0x37C8` respectively. + +## Tuya Covers + +[esphome#2637](https://github.com/esphome/esphome/pull/2637) adds new functionality to the Tuya cover component, but at the same time +removes the "soft" inversion of the direction. Instead, it seems that most if not all tuya covers have a "hidden" +datapoint that sets the direction on the secondary MCU. See the [documentation](/components/cover/tuya/) +for the new configuration options. + +{/* markdownlint-disable MD013 */} + +## Release 2021.12.1 - December 15 + +- Set text sensor state property to filter output [esphome#2893](https://github.com/esphome/esphome/pull/2893) by [@oxan](https://github.com/oxan) +- Allow button POST on press from web server [esphome#2913](https://github.com/esphome/esphome/pull/2913) by [@wilberforce](https://github.com/wilberforce) + +## Release 2021.12.2 - December 21 + +- Don't disable idle task WDT when it's not enabled [esphome#2856](https://github.com/esphome/esphome/pull/2856) by [@oxan](https://github.com/oxan) +- Fix MQTT button press action [esphome#2917](https://github.com/esphome/esphome/pull/2917) by [@oxan](https://github.com/oxan) + +## Release 2021.12.3 - December 30 + +- Require arduino in webserver for better validation [esphome#2941](https://github.com/esphome/esphome/pull/2941) by [@jesserockz](https://github.com/jesserockz) +- Only allow internal pins for dht sensor [esphome#2940](https://github.com/esphome/esphome/pull/2940) by [@jesserockz](https://github.com/jesserockz) +- Workaround installing as editable package not working [esphome#2936](https://github.com/esphome/esphome/pull/2936) by [@jesserockz](https://github.com/jesserockz) +- Remove -e for hassio images [esphome#2964](https://github.com/esphome/esphome/pull/2964) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- pmsx003: add support for new PMS5003S device [esphome#2710](https://github.com/esphome/esphome/pull/2710) by [@NeoAcheron](https://github.com/NeoAcheron) (new-feature) +- Add climate on_state trigger [esphome#2707](https://github.com/esphome/esphome/pull/2707) by [@dudanov](https://github.com/dudanov) (new-feature) +- Add greeyac protocol to IR Climate / HeatpumpIR [esphome#2694](https://github.com/esphome/esphome/pull/2694) by [@cmroche](https://github.com/cmroche) (new-feature) +- Provide an option to select unique_id generator [esphome#2701](https://github.com/esphome/esphome/pull/2701) by [@kbialek](https://github.com/kbialek) (new-feature) +- Ignore secrets yaml on command line [esphome#2715](https://github.com/esphome/esphome/pull/2715) by [@cvwillegen](https://github.com/cvwillegen) (new-feature) +- Add max_telegram_length option to dsmr [esphome#2674](https://github.com/esphome/esphome/pull/2674) by [@mmakaay](https://github.com/mmakaay) (new-feature) +- Relax the icon validator to allow non-mdi icons [esphome#2764](https://github.com/esphome/esphome/pull/2764) by [@paulmonigatti](https://github.com/paulmonigatti) (new-feature) +- Add support for P1 Data Request pin control [esphome#2676](https://github.com/esphome/esphome/pull/2676) by [@mmakaay](https://github.com/mmakaay) (new-feature) +- Add support for sdp8xx [esphome#2779](https://github.com/esphome/esphome/pull/2779) by [@martgras](https://github.com/martgras) (new-feature) +- Add map filter for text sensors [esphome#2761](https://github.com/esphome/esphome/pull/2761) by [@oxan](https://github.com/oxan) (new-feature) +- Optionally show internal components on the web server [esphome#2627](https://github.com/esphome/esphome/pull/2627) by [@mechanarchy](https://github.com/mechanarchy) (new-feature) +- cse7766: add energy sensor [esphome#2822](https://github.com/esphome/esphome/pull/2822) by [@ianchi](https://github.com/ianchi) (new-feature) +- Allow Git credentials to be loaded from secrets [esphome#2825](https://github.com/esphome/esphome/pull/2825) by [@mechanarchy](https://github.com/mechanarchy) (new-feature) +- Expand uart invert feature to ESP8266 [esphome#1727](https://github.com/esphome/esphome/pull/1727) by [@Lewn](https://github.com/Lewn) (new-feature) + +### New Components + +- Add ble_client binary_output [esphome#2200](https://github.com/esphome/esphome/pull/2200) by [@tekmaven](https://github.com/tekmaven) (new-integration) +- Add support for button entities [esphome#2824](https://github.com/esphome/esphome/pull/2824) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- Fix NEC protocol implementation [esphome#2534](https://github.com/esphome/esphome/pull/2534) by [@dudanov](https://github.com/dudanov) (breaking-change) +- Tuya Cover improvements [esphome#2637](https://github.com/esphome/esphome/pull/2637) by [@pauln](https://github.com/pauln) (breaking-change) + +### Beta Changes + +- Feed watchdog during OTA [esphome#2852](https://github.com/esphome/esphome/pull/2852) by [@oxan](https://github.com/oxan) +- Bump esphome-dashboard to 20211206.0 [esphome#2870](https://github.com/esphome/esphome/pull/2870) by [@jesserockz](https://github.com/jesserockz) +- tlc59208f : fix compilation error [esphome#2867](https://github.com/esphome/esphome/pull/2867) by [@martgras](https://github.com/martgras) +- ADC: Turn verbose the debugging "got voltage" [esphome#2863](https://github.com/esphome/esphome/pull/2863) by [@CarlosGS](https://github.com/CarlosGS) +- SPS30 : fix i2c read size [esphome#2866](https://github.com/esphome/esphome/pull/2866) by [@martgras](https://github.com/martgras) +- Fix MCP23x17 not disabling pullup after config change [esphome#2855](https://github.com/esphome/esphome/pull/2855) by [@oxan](https://github.com/oxan) +- Ignore already stopped dhcp for ethernet [esphome#2862](https://github.com/esphome/esphome/pull/2862) by [@madron](https://github.com/madron) +- Add endpoint to fetch secrets keys [esphome#2873](https://github.com/esphome/esphome/pull/2873) by [@jesserockz](https://github.com/jesserockz) +- Adopt using wifi secrets that should exist at this point [esphome#2874](https://github.com/esphome/esphome/pull/2874) by [@jesserockz](https://github.com/jesserockz) +- Allow wizard to specify secrets [esphome#2875](https://github.com/esphome/esphome/pull/2875) by [@jesserockz](https://github.com/jesserockz) +- Feed watchdog when no component loops [esphome#2857](https://github.com/esphome/esphome/pull/2857) by [@oxan](https://github.com/oxan) +- Bump esphome-dashboard to 20211207.0 [esphome#2877](https://github.com/esphome/esphome/pull/2877) by [@jesserockz](https://github.com/jesserockz) +- Feed watchdog while setting up OTA [esphome#2876](https://github.com/esphome/esphome/pull/2876) by [@CarlosGS](https://github.com/CarlosGS) +- Use new platform component config blocks for wizard [esphome#2885](https://github.com/esphome/esphome/pull/2885) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211208.0 [esphome#2887](https://github.com/esphome/esphome/pull/2887) by [@jesserockz](https://github.com/jesserockz) +- Fix published state for modbus number [esphome#2894](https://github.com/esphome/esphome/pull/2894) by [@jesserockz](https://github.com/jesserockz) +- Modbus number/output use write single [esphome#2896](https://github.com/esphome/esphome/pull/2896) by [@glmnet](https://github.com/glmnet) +- Fix for two points setting when fan_only_cooling is disabled [esphome#2903](https://github.com/esphome/esphome/pull/2903) by [@kbx81](https://github.com/kbx81) +- Bump esphome-dashboard to 20211211.0 [esphome#2904](https://github.com/esphome/esphome/pull/2904) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Defines tidy [esphome#2696](https://github.com/esphome/esphome/pull/2696) by [@jesserockz](https://github.com/jesserockz) +- pmsx003: add support for new PMS5003S device [esphome#2710](https://github.com/esphome/esphome/pull/2710) by [@NeoAcheron](https://github.com/NeoAcheron) (new-feature) +- Add climate on_state trigger [esphome#2707](https://github.com/esphome/esphome/pull/2707) by [@dudanov](https://github.com/dudanov) (new-feature) +- Add greeyac protocol to IR Climate / HeatpumpIR [esphome#2694](https://github.com/esphome/esphome/pull/2694) by [@cmroche](https://github.com/cmroche) (new-feature) +- Fix rom/rtc.h deprecation compile warning for debug component [esphome#2520](https://github.com/esphome/esphome/pull/2520) by [@mmakaay](https://github.com/mmakaay) +- Drop unused constants from const.py [esphome#2718](https://github.com/esphome/esphome/pull/2718) by [@oxan](https://github.com/oxan) +- Install test requirements in lint Docker image [esphome#2719](https://github.com/esphome/esphome/pull/2719) by [@oxan](https://github.com/oxan) +- Clean-up MAC address helpers [esphome#2713](https://github.com/esphome/esphome/pull/2713) by [@oxan](https://github.com/oxan) +- Provide an option to select unique_id generator [esphome#2701](https://github.com/esphome/esphome/pull/2701) by [@kbialek](https://github.com/kbialek) (new-feature) +- Ignore secrets yaml on command line [esphome#2715](https://github.com/esphome/esphome/pull/2715) by [@cvwillegen](https://github.com/cvwillegen) (new-feature) +- Allow for subsecond sampling of hmc5883l [esphome#2735](https://github.com/esphome/esphome/pull/2735) by [@jaharkes](https://github.com/jaharkes) +- Change log level from DEBUG to INFO for sniffing services of `rf_bridge` [esphome#2736](https://github.com/esphome/esphome/pull/2736) by [@nagyrobi](https://github.com/nagyrobi) +- Add ble_client binary_output [esphome#2200](https://github.com/esphome/esphome/pull/2200) by [@tekmaven](https://github.com/tekmaven) (new-integration) +- Remove duplicated const data in esp8266 boards [esphome#2740](https://github.com/esphome/esphome/pull/2740) by [@jesserockz](https://github.com/jesserockz) +- Move to use improv lib from platformio [esphome#2741](https://github.com/esphome/esphome/pull/2741) by [@jesserockz](https://github.com/jesserockz) +- Add max_telegram_length option to dsmr [esphome#2674](https://github.com/esphome/esphome/pull/2674) by [@mmakaay](https://github.com/mmakaay) (new-feature) +- Changed LUT for DKE epaper on ttgo t5 2.13inch to improve partial rfresh [esphome#2475](https://github.com/esphome/esphome/pull/2475) by [@spattinson](https://github.com/spattinson) +- Fix NEC protocol implementation [esphome#2534](https://github.com/esphome/esphome/pull/2534) by [@dudanov](https://github.com/dudanov) (breaking-change) +- Remove arduino dependency from hm3301 [esphome#2745](https://github.com/esphome/esphome/pull/2745) by [@martgras](https://github.com/martgras) +- Add retry handler [esphome#2721](https://github.com/esphome/esphome/pull/2721) by [@martgras](https://github.com/martgras) +- Introduce str_snprintf helper function [esphome#2780](https://github.com/esphome/esphome/pull/2780) by [@oxan](https://github.com/oxan) +- Prettier date time display after time sync [esphome#2778](https://github.com/esphome/esphome/pull/2778) by [@cvwillegen](https://github.com/cvwillegen) +- Fix distorted gif frames when resizing [esphome#2774](https://github.com/esphome/esphome/pull/2774) by [@davet2001](https://github.com/davet2001) +- fixed wrong setup-usage tc9548a [esphome#2766](https://github.com/esphome/esphome/pull/2766) by [@andreashergert1984](https://github.com/andreashergert1984) +- Relax the icon validator to allow non-mdi icons [esphome#2764](https://github.com/esphome/esphome/pull/2764) by [@paulmonigatti](https://github.com/paulmonigatti) (new-feature) +- Bump black from 21.10b0 to 21.11b1 [esphome#2760](https://github.com/esphome/esphome/pull/2760) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update aht10.cpp to address issue #1635 [esphome#2675](https://github.com/esphome/esphome/pull/2675) by [@krunkel](https://github.com/krunkel) +- Add support for P1 Data Request pin control [esphome#2676](https://github.com/esphome/esphome/pull/2676) by [@mmakaay](https://github.com/mmakaay) (new-feature) +- Allow specifying the dashboard bind address [esphome#2787](https://github.com/esphome/esphome/pull/2787) by [@jesserockz](https://github.com/jesserockz) +- remove LEDC_HIGH_SPEED_MODE for C3, S2, S3 [esphome#2791](https://github.com/esphome/esphome/pull/2791) by [@martgras](https://github.com/martgras) +- Fix LEDC resolution calculation on ESP32-C3/S2/S3 [esphome#2794](https://github.com/esphome/esphome/pull/2794) by [@rsumner](https://github.com/rsumner) +- Add support for sdp8xx [esphome#2779](https://github.com/esphome/esphome/pull/2779) by [@martgras](https://github.com/martgras) (new-feature) +- Allow empty UART debug: option, logging in hex format by default [esphome#2771](https://github.com/esphome/esphome/pull/2771) by [@mmakaay](https://github.com/mmakaay) +- Bump pylint from 2.11.1 to 2.12.1 [esphome#2798](https://github.com/esphome/esphome/pull/2798) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix CI cache key for test3.yaml compile [esphome#2757](https://github.com/esphome/esphome/pull/2757) by [@oxan](https://github.com/oxan) +- Drop obsolete comment from CI workflow file [esphome#2758](https://github.com/esphome/esphome/pull/2758) by [@oxan](https://github.com/oxan) +- Cache virtualenv instead of pip cache between CI runs [esphome#2759](https://github.com/esphome/esphome/pull/2759) by [@oxan](https://github.com/oxan) +- Add map filter for text sensors [esphome#2761](https://github.com/esphome/esphome/pull/2761) by [@oxan](https://github.com/oxan) (new-feature) +- Only match GCC warnings from ESPHome source files in CI [esphome#2756](https://github.com/esphome/esphome/pull/2756) by [@oxan](https://github.com/oxan) +- Correct constant for dynamic I2S bus in NeoPixelBus [esphome#2797](https://github.com/esphome/esphome/pull/2797) by [@oxan](https://github.com/oxan) +- Consistently format errors in CI scripts [esphome#2762](https://github.com/esphome/esphome/pull/2762) by [@oxan](https://github.com/oxan) +- Cancel previous workflows for PRs and branches [esphome#2800](https://github.com/esphome/esphome/pull/2800) by [@jesserockz](https://github.com/jesserockz) +- total_daily_energy: allow to disable restore mode [esphome#2795](https://github.com/esphome/esphome/pull/2795) by [@ianchi](https://github.com/ianchi) +- Modbus_controller: Add custom command. [esphome#2680](https://github.com/esphome/esphome/pull/2680) by [@martgras](https://github.com/martgras) +- Fix usage of deprecated climate method in anova [esphome#2801](https://github.com/esphome/esphome/pull/2801) by [@oxan](https://github.com/oxan) +- Make clang-tidy suggest stdint.h int types [esphome#2820](https://github.com/esphome/esphome/pull/2820) by [@oxan](https://github.com/oxan) +- Fixed data type inside fast_random_8() routine [esphome#2818](https://github.com/esphome/esphome/pull/2818) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Improve DSMR read timeout handling [esphome#2699](https://github.com/esphome/esphome/pull/2699) by [@mmakaay](https://github.com/mmakaay) +- Optionally show internal components on the web server [esphome#2627](https://github.com/esphome/esphome/pull/2627) by [@mechanarchy](https://github.com/mechanarchy) (new-feature) +- Fix custom mode_state_topic [esphome#2827](https://github.com/esphome/esphome/pull/2827) by [@definitio](https://github.com/definitio) +- Add support for button entities [esphome#2824](https://github.com/esphome/esphome/pull/2824) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Tuya text_sensor and raw data usage [esphome#1812](https://github.com/esphome/esphome/pull/1812) by [@dentra](https://github.com/dentra) +- Fix 8266 SPI Clock Polarity Setting [esphome#2836](https://github.com/esphome/esphome/pull/2836) by [@kbx81](https://github.com/kbx81) +- Fix too-broad matcher for custom CI script [esphome#2829](https://github.com/esphome/esphome/pull/2829) by [@oxan](https://github.com/oxan) +- cse7766: add energy sensor [esphome#2822](https://github.com/esphome/esphome/pull/2822) by [@ianchi](https://github.com/ianchi) (new-feature) +- Burst read for BME280, to reduce spurious spikes [esphome#2809](https://github.com/esphome/esphome/pull/2809) by [@CarlosGS](https://github.com/CarlosGS) +- Bump aioesphomeapi from 10.2.0 to 10.6.0 [esphome#2840](https://github.com/esphome/esphome/pull/2840) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Button device class [esphome#2835](https://github.com/esphome/esphome/pull/2835) by [@jesserockz](https://github.com/jesserockz) +- Implement unit_of_measurement for number component [esphome#2804](https://github.com/esphome/esphome/pull/2804) by [@puuu](https://github.com/puuu) +- Number mode [esphome#2838](https://github.com/esphome/esphome/pull/2838) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211201.0 [esphome#2842](https://github.com/esphome/esphome/pull/2842) by [@jesserockz](https://github.com/jesserockz) +- Allow Git credentials to be loaded from secrets [esphome#2825](https://github.com/esphome/esphome/pull/2825) by [@mechanarchy](https://github.com/mechanarchy) (new-feature) +- Fix compile warning in Tuya automations [esphome#2837](https://github.com/esphome/esphome/pull/2837) by [@oxan](https://github.com/oxan) +- Add problem matcher for Python formatting errors [esphome#2833](https://github.com/esphome/esphome/pull/2833) by [@oxan](https://github.com/oxan) +- Fix CI check for Windows line endings [esphome#2831](https://github.com/esphome/esphome/pull/2831) by [@oxan](https://github.com/oxan) +- Don't enable namespace comment clang-tidy check twice [esphome#2830](https://github.com/esphome/esphome/pull/2830) by [@oxan](https://github.com/oxan) +- ESP32 Deep Sleep: correct level value [esphome#2812](https://github.com/esphome/esphome/pull/2812) by [@jhamhader](https://github.com/jhamhader) +- Fix OTA updates on esp8266 by declaring arch_get_cpu_cycle_count IRAM_ATTR and HOT [esphome#2843](https://github.com/esphome/esphome/pull/2843) by [@Doridian](https://github.com/Doridian) +- Fix compilation using subprocesses [esphome#2834](https://github.com/esphome/esphome/pull/2834) by [@oxan](https://github.com/oxan) +- Expand uart invert feature to ESP8266 [esphome#1727](https://github.com/esphome/esphome/pull/1727) by [@Lewn](https://github.com/Lewn) (new-feature) +- Support setting manual_ip under networks option [esphome#2839](https://github.com/esphome/esphome/pull/2839) by [@oxan](https://github.com/oxan) +- Enable a bunch of clang-tidy checks [esphome#2149](https://github.com/esphome/esphome/pull/2149) by [@oxan](https://github.com/oxan) +- Set ESP32 watchdog to loop task [esphome#2846](https://github.com/esphome/esphome/pull/2846) by [@oxan](https://github.com/oxan) +- Tuya Cover improvements [esphome#2637](https://github.com/esphome/esphome/pull/2637) by [@pauln](https://github.com/pauln) (breaking-change) +- Fix wifi not working with manual_ip using esp-idf [esphome#2849](https://github.com/esphome/esphome/pull/2849) by [@Maelstrom96](https://github.com/Maelstrom96) +- modbus_controller: bugfix: enable overriding calculated register size [esphome#2845](https://github.com/esphome/esphome/pull/2845) by [@martgras](https://github.com/martgras) +- Feed watchdog during OTA [esphome#2852](https://github.com/esphome/esphome/pull/2852) by [@oxan](https://github.com/oxan) +- Bump esphome-dashboard to 20211206.0 [esphome#2870](https://github.com/esphome/esphome/pull/2870) by [@jesserockz](https://github.com/jesserockz) +- tlc59208f : fix compilation error [esphome#2867](https://github.com/esphome/esphome/pull/2867) by [@martgras](https://github.com/martgras) +- ADC: Turn verbose the debugging "got voltage" [esphome#2863](https://github.com/esphome/esphome/pull/2863) by [@CarlosGS](https://github.com/CarlosGS) +- SPS30 : fix i2c read size [esphome#2866](https://github.com/esphome/esphome/pull/2866) by [@martgras](https://github.com/martgras) +- Fix MCP23x17 not disabling pullup after config change [esphome#2855](https://github.com/esphome/esphome/pull/2855) by [@oxan](https://github.com/oxan) +- Ignore already stopped dhcp for ethernet [esphome#2862](https://github.com/esphome/esphome/pull/2862) by [@madron](https://github.com/madron) +- Add endpoint to fetch secrets keys [esphome#2873](https://github.com/esphome/esphome/pull/2873) by [@jesserockz](https://github.com/jesserockz) +- Adopt using wifi secrets that should exist at this point [esphome#2874](https://github.com/esphome/esphome/pull/2874) by [@jesserockz](https://github.com/jesserockz) +- Allow wizard to specify secrets [esphome#2875](https://github.com/esphome/esphome/pull/2875) by [@jesserockz](https://github.com/jesserockz) +- Feed watchdog when no component loops [esphome#2857](https://github.com/esphome/esphome/pull/2857) by [@oxan](https://github.com/oxan) +- Bump esphome-dashboard to 20211207.0 [esphome#2877](https://github.com/esphome/esphome/pull/2877) by [@jesserockz](https://github.com/jesserockz) +- Feed watchdog while setting up OTA [esphome#2876](https://github.com/esphome/esphome/pull/2876) by [@CarlosGS](https://github.com/CarlosGS) +- Use new platform component config blocks for wizard [esphome#2885](https://github.com/esphome/esphome/pull/2885) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20211208.0 [esphome#2887](https://github.com/esphome/esphome/pull/2887) by [@jesserockz](https://github.com/jesserockz) +- Fix published state for modbus number [esphome#2894](https://github.com/esphome/esphome/pull/2894) by [@jesserockz](https://github.com/jesserockz) +- Modbus number/output use write single [esphome#2896](https://github.com/esphome/esphome/pull/2896) by [@glmnet](https://github.com/glmnet) +- Fix for two points setting when fan_only_cooling is disabled [esphome#2903](https://github.com/esphome/esphome/pull/2903) by [@kbx81](https://github.com/kbx81) +- Bump esphome-dashboard to 20211211.0 [esphome#2904](https://github.com/esphome/esphome/pull/2904) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2021.8.0.mdx b/src/content/docs/changelog/2021.8.0.mdx new file mode 100644 index 0000000000..47bb3b716a --- /dev/null +++ b/src/content/docs/changelog/2021.8.0.mdx @@ -0,0 +1,260 @@ +--- +description: "Changelog for ESPHome 2021.8.0." +title: "ESPHome 2021.8.0 - 18th August 2021" +pagefind: false +slug: "changelog/2021.8.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +Since starting monthly cycles, it just made sense to make this release, **ESPHome 2021.8.0**. From now ESPHome will +be versioned according to the year and month of the release. We hope that this will not confuse everyone too much =). + +There are a bunch of new integrations this release as seen above and a few breaking changes below. Hopefully nothing +has been missed out. + +Also, look at that nice sorted and categorized home page of sensors. Thanks to [@patfelst](https://github.com/patfelst) for +doing this. + +## Select Entities + +ESPHome devices can now create [Select](/components/select/) entities in Home Assistant. +This allows you to not have to create `input_select` from HA and then import the current option into ESPHome. +The chosen option can be updated from both sides and will be reflected accordingly. + +## Light Color Modes + +[@oxan](https://github.com/oxan) has been at it working hard on getting the all of the light code up to scratch and working +really well with the latest changes to Home Assistant. This is mostly an internal change, but ESPHome has +been updated to properly support Home Assistant's color modes for lights. For the most part it mainly +fixes issues that have come up with the color mode on Home Assistant not doing what people expected in ESPHome. + +## DSMR + +[@glmnet](https://github.com/glmnet) and [@zuidwijk](https://github.com/zuidwijk) have worked together to bring DSMR support to ESPHome. +This platform allows you to read your DSMR smart meter via the P1 port. Check out the +[repo](https://github.com/zuidwijk/dsmr) with more info on the hardware required for this. + +## Thermostat Breaking changes + +[@kbx81](https://github.com/kbx81) Has made a few changes to the [thermostat](/components/climate/thermostat/) +climate platform in [esphome#2032](https://github.com/esphome/esphome/pull/2032), [esphome#2073](https://github.com/esphome/esphome/pull/2073) and +[esphome#2114](https://github.com/esphome/esphome/pull/2114) to allow for the many different use cases that everyone has. +Unfortunately this means you might need to make some changes to your YAML configuration to utilize the new code. + +- `hysteresis` has been replaced with `cool_deadband`, `cool_overrun`, `heat_deadband` and `heat_overrun`. +- Climate action timers now govern how quickly climate actions may be called: + +- `min_idle_time` is required for all configurations. +- `min_cooling_off_time` and `min_cooling_run_time` are required where cool_action or dry_action is used. +- `min_heating_off_time` and `min_heating_run_time` are required where heat_action is used. +- `min_fanning_off_time` and `min_fanning_run_time` are required where fan_only_action is used. +- `min_fan_mode_switching_time` is required where any `fan_mode` actions (ex.: `fan_mode_auto_action`, + `fan_mode_on_action` ) are used. + +## Anova Souve + +There is a change with the [Anova BLE Souve](/components/climate/anova/) climate platform +that has a new **required** config option: `unit_of_measurement`. + +## Home Assistant Add-on + +For a while there has been an option in the Add-on to allow specifying the `esphome_version` +which would allow the addon to download a specific version to use. This has been removed +in this release as it causes more issues than it solves. It may be added back to the `development` addon +**only** in the future if there is demand, but the stable add-ons should stay stable. If you +need to downgrade the esphome version because a new version does not work the way you expect, then you +should be using the snapshot/backup feature built into Home Assistant Supervisor to rollback. + +{/* markdownlint-disable MD013 */} + +## Release 2021.8.1 - August 24 + +- Fix pypi download url [esphome#2177](https://github.com/esphome/esphome/pull/2177) by [@jesserockz](https://github.com/jesserockz) +- Light: include ON_OFF capability to BRIGHTNESS ColorMode [esphome#2186](https://github.com/esphome/esphome/pull/2186) by [@puuu](https://github.com/puuu) +- Fix addressable light control without transitions & effects with transitions [esphome#2187](https://github.com/esphome/esphome/pull/2187) by [@oxan](https://github.com/oxan) +- mqtt_light: remove legacy API config that is not compatible with HA 2021.8 [esphome#2183](https://github.com/esphome/esphome/pull/2183) by [@puuu](https://github.com/puuu) +- Tuya fan component uses enum datapoint type for speed instead of integer [esphome#2182](https://github.com/esphome/esphome/pull/2182) by [@nuttytree](https://github.com/nuttytree) +- Fix template select lambda [esphome#2198](https://github.com/esphome/esphome/pull/2198) by [@ssieb](https://github.com/ssieb) +- Send Celsius temperature unit in MQTT discovery message [esphome#1840](https://github.com/esphome/esphome/pull/1840) by [@mtl010957](https://github.com/mtl010957) + +## Release 2021.8.2 - August 25 + +- Revert "Light: include ON_OFF capability to BRIGHTNESS ColorMode" [esphome#2202](https://github.com/esphome/esphome/pull/2202) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- Allow entities to be disabled by default in HA [esphome#2113](https://github.com/esphome/esphome/pull/2113) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Added support for pvvx_mithermometer sensor [esphome#1546](https://github.com/esphome/esphome/pull/1546) by [@pasiz](https://github.com/pasiz) (new-integration) +- Added support for Selec Energy Meter [esphome#1993](https://github.com/esphome/esphome/pull/1993) by [@sourabhjaiswal](https://github.com/sourabhjaiswal) (new-integration) +- pm1006: add rx-only support [esphome#2038](https://github.com/esphome/esphome/pull/2038) by [@Habbie](https://github.com/Habbie) (new-integration) +- Add SDP3x sensor [esphome#2064](https://github.com/esphome/esphome/pull/2064) by [@Azimath](https://github.com/Azimath) (new-integration) +- Add support for the TLC5947 24-Channel, 12-Bit PWM LED Driver [esphome#2066](https://github.com/esphome/esphome/pull/2066) by [@rnauber](https://github.com/rnauber) (new-integration) +- Add T6615 [esphome#1170](https://github.com/esphome/esphome/pull/1170) by [@tylermenezes](https://github.com/tylermenezes) (new-integration) +- Add support for the HRXL MaxSonar WR series sensors [esphome#2020](https://github.com/esphome/esphome/pull/2020) by [@netmikey](https://github.com/netmikey) (new-integration) +- Add demo integration [esphome#2085](https://github.com/esphome/esphome/pull/2085) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- Add select entities and implement template select [esphome#2067](https://github.com/esphome/esphome/pull/2067) by [@jesserockz](https://github.com/jesserockz) (new-integration) (notable-change) +- Added support for Hitachi AC424 remote type [esphome#2101](https://github.com/esphome/esphome/pull/2101) by [@sourabhjaiswal](https://github.com/sourabhjaiswal) (new-integration) +- Adds CGPR1 - Qingping Motion & Ambient light sensor support [esphome#1675](https://github.com/esphome/esphome/pull/1675) by [@Tommatheussen](https://github.com/Tommatheussen) (new-integration) +- Dsmr component [esphome#1881](https://github.com/esphome/esphome/pull/1881) by [@glmnet](https://github.com/glmnet) (new-integration) +- Support component tsl2591 [esphome#2131](https://github.com/esphome/esphome/pull/2131) by [@wjcarpenter](https://github.com/wjcarpenter) (new-integration) +- Add support for PMSA003i [esphome#1501](https://github.com/esphome/esphome/pull/1501) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- Add rgbct and color_temperature light platforms [esphome#2138](https://github.com/esphome/esphome/pull/2138) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Feature pipsolar anh [esphome#1664](https://github.com/esphome/esphome/pull/1664) by [@andreashergert1984](https://github.com/andreashergert1984) (new-integration) +- Support for AM43 BLE blind motors [esphome#1744](https://github.com/esphome/esphome/pull/1744) by [@buxtronix](https://github.com/buxtronix) (new-integration) + +### Breaking Changes + +- Merge build flags from platformio_options [esphome#1651](https://github.com/esphome/esphome/pull/1651) by [@trvrnrth](https://github.com/trvrnrth) (breaking-change) +- Color mode implementation [esphome#2012](https://github.com/esphome/esphome/pull/2012) by [@oxan](https://github.com/oxan) (notable-change) (breaking-change) +- Fix parity bit calculation for ESP8266SoftwareSerial [esphome#1873](https://github.com/esphome/esphome/pull/1873) by [@esev](https://github.com/esev) (breaking-change) +- Dont force 0 state instead of min_power unless explicit config set [esphome#2107](https://github.com/esphome/esphome/pull/2107) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Anova fahrenheit support [esphome#2126](https://github.com/esphome/esphome/pull/2126) by [@buxtronix](https://github.com/buxtronix) (breaking-change) +- Tidy HA addon [esphome#1937](https://github.com/esphome/esphome/pull/1937) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Thermostat enhancements 2 [esphome#2114](https://github.com/esphome/esphome/pull/2114) by [@kbx81](https://github.com/kbx81) (breaking-change) + +### Beta Fixes + +- Always send all light state values in API [esphome#2150](https://github.com/esphome/esphome/pull/2150) by [@oxan](https://github.com/oxan) +- Let sensors announce their state_class via mqtt [esphome#2155](https://github.com/esphome/esphome/pull/2155) by [@puuu](https://github.com/puuu) +- Thermostat delayed fan mode fix [esphome#2158](https://github.com/esphome/esphome/pull/2158) by [@kbx81](https://github.com/kbx81) +- Fix native API log level enum values [esphome#2151](https://github.com/esphome/esphome/pull/2151) by [@OttoWinter](https://github.com/OttoWinter) +- Initialize color temperature to value within range if possible [esphome#2168](https://github.com/esphome/esphome/pull/2168) by [@oxan](https://github.com/oxan) +- Add a dummy color temp [esphome#2161](https://github.com/esphome/esphome/pull/2161) by [@DotNetDann](https://github.com/DotNetDann) +- Add Gas device class to DSMR component [esphome#2169](https://github.com/esphome/esphome/pull/2169) by [@frenck](https://github.com/frenck) +- Send dirty states when screen wakes up [esphome#2167](https://github.com/esphome/esphome/pull/2167) by [@jesserockz](https://github.com/jesserockz) +- Remove specified accuracy_decimals from total_daily_energy [esphome#2174](https://github.com/esphome/esphome/pull/2174) by [@jesserockz](https://github.com/jesserockz) +- Add new total_increasing state-class for Home Assistant 2021.9+ [esphome#2166](https://github.com/esphome/esphome/pull/2166) by [@jesserockz](https://github.com/jesserockz) + +### Notable Changes + +- Color mode implementation [esphome#2012](https://github.com/esphome/esphome/pull/2012) by [@oxan](https://github.com/oxan) (notable-change) (breaking-change) +- Add select entities and implement template select [esphome#2067](https://github.com/esphome/esphome/pull/2067) by [@jesserockz](https://github.com/jesserockz) (new-integration) (notable-change) + +### All changes + +- Always tick mdns in ethernet component [esphome#2018](https://github.com/esphome/esphome/pull/2018) by [@flacjacket](https://github.com/flacjacket) +- Bump black from 21.6b0 to 21.7b0 [esphome#2031](https://github.com/esphome/esphome/pull/2031) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Convert Arduino boolean to bool [esphome#2042](https://github.com/esphome/esphome/pull/2042) by [@jesserockz](https://github.com/jesserockz) +- Fix ESP32-C3 using v2.0.0-alpha1 support [esphome#2035](https://github.com/esphome/esphome/pull/2035) by [@agners](https://github.com/agners) +- Bump pylint from 2.8.2 to 2.9.4 [esphome#2047](https://github.com/esphome/esphome/pull/2047) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.9.4 to 2.9.5 [esphome#2050](https://github.com/esphome/esphome/pull/2050) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Thermostat fixes+updates 1 [esphome#2032](https://github.com/esphome/esphome/pull/2032) by [@kbx81](https://github.com/kbx81) +- Add test5 back to CI [esphome#2052](https://github.com/esphome/esphome/pull/2052) by [@jesserockz](https://github.com/jesserockz) +- Added support for pvvx_mithermometer sensor [esphome#1546](https://github.com/esphome/esphome/pull/1546) by [@pasiz](https://github.com/pasiz) (new-integration) +- Added support for Selec Energy Meter [esphome#1993](https://github.com/esphome/esphome/pull/1993) by [@sourabhjaiswal](https://github.com/sourabhjaiswal) (new-integration) +- Add TAG to all compile units [esphome#2060](https://github.com/esphome/esphome/pull/2060) by [@agners](https://github.com/agners) +- Fix minor build issues with Arduino ESP32 2.0.0-rc1 [esphome#2057](https://github.com/esphome/esphome/pull/2057) by [@agners](https://github.com/agners) +- Fix clang-format script behaviour without -i + code cleanup [esphome#2002](https://github.com/esphome/esphome/pull/2002) by [@oxan](https://github.com/oxan) +- Merge build flags from platformio_options [esphome#1651](https://github.com/esphome/esphome/pull/1651) by [@trvrnrth](https://github.com/trvrnrth) (breaking-change) +- Print BLE 128-bit UUIDs according to spec [esphome#2061](https://github.com/esphome/esphome/pull/2061) by [@agners](https://github.com/agners) +- Support library override using named library with repository [esphome#2056](https://github.com/esphome/esphome/pull/2056) by [@agners](https://github.com/agners) +- Initial ESP32-C3-DevKitM-1 board support [esphome#2062](https://github.com/esphome/esphome/pull/2062) by [@agners](https://github.com/agners) +- Fix a bunch of typos [esphome#2058](https://github.com/esphome/esphome/pull/2058) by [@oxan](https://github.com/oxan) +- pm1006: add rx-only support [esphome#2038](https://github.com/esphome/esphome/pull/2038) by [@Habbie](https://github.com/Habbie) (new-integration) +- Add sensor monetary device_class [esphome#2083](https://github.com/esphome/esphome/pull/2083) by [@OttoWinter](https://github.com/OttoWinter) +- Make light.addressable_set color parameters behave as documented & consistent with elsewhere [esphome#2009](https://github.com/esphome/esphome/pull/2009) by [@oxan](https://github.com/oxan) +- Bump pylint from 2.9.5 to 2.9.6 [esphome#2087](https://github.com/esphome/esphome/pull/2087) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ESPAsyncWebServer-esphome to 1.3.0 [esphome#2075](https://github.com/esphome/esphome/pull/2075) by [@agners](https://github.com/agners) +- Add SDP3x sensor [esphome#2064](https://github.com/esphome/esphome/pull/2064) by [@Azimath](https://github.com/Azimath) (new-integration) +- Add support for the TLC5947 24-Channel, 12-Bit PWM LED Driver [esphome#2066](https://github.com/esphome/esphome/pull/2066) by [@rnauber](https://github.com/rnauber) (new-integration) +- Add T6615 [esphome#1170](https://github.com/esphome/esphome/pull/1170) by [@tylermenezes](https://github.com/tylermenezes) (new-integration) +- Add support for the HRXL MaxSonar WR series sensors [esphome#2020](https://github.com/esphome/esphome/pull/2020) by [@netmikey](https://github.com/netmikey) (new-integration) +- Pull ESP32 Wifi fixes from arduino-esp32 [esphome#2069](https://github.com/esphome/esphome/pull/2069) by [@OttoWinter](https://github.com/OttoWinter) +- Add demo integration [esphome#2085](https://github.com/esphome/esphome/pull/2085) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- Add device class support to MQTT cover [esphome#2092](https://github.com/esphome/esphome/pull/2092) by [@krconv](https://github.com/krconv) +- Color mode implementation [esphome#2012](https://github.com/esphome/esphome/pull/2012) by [@oxan](https://github.com/oxan) (notable-change) (breaking-change) +- Convert more code to async-def syntax [esphome#2095](https://github.com/esphome/esphome/pull/2095) by [@OttoWinter](https://github.com/OttoWinter) +- Fix parity bit calculation for ESP8266SoftwareSerial [esphome#1873](https://github.com/esphome/esphome/pull/1873) by [@esev](https://github.com/esev) (breaking-change) +- Convert sensor_schema to use kwargs [esphome#2094](https://github.com/esphome/esphome/pull/2094) by [@OttoWinter](https://github.com/OttoWinter) +- Fix MQTT light include [esphome#2104](https://github.com/esphome/esphome/pull/2104) by [@OttoWinter](https://github.com/OttoWinter) +- Fix missing include in light_traits.h [esphome#2105](https://github.com/esphome/esphome/pull/2105) by [@jkl1337](https://github.com/jkl1337) +- Add select entities and implement template select [esphome#2067](https://github.com/esphome/esphome/pull/2067) by [@jesserockz](https://github.com/jesserockz) (new-integration) (notable-change) +- pmsx003: add standard particle, particle counts [esphome#1694](https://github.com/esphome/esphome/pull/1694) by [@warthog9](https://github.com/warthog9) +- Dont force 0 state instead of min_power unless explicit config set [esphome#2107](https://github.com/esphome/esphome/pull/2107) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix import [esphome#2108](https://github.com/esphome/esphome/pull/2108) by [@jesserockz](https://github.com/jesserockz) +- Thermostat enhancements and code clean-up [esphome#2073](https://github.com/esphome/esphome/pull/2073) by [@kbx81](https://github.com/kbx81) +- Bump esptool from 2.8 to 3.1 [esphome#1839](https://github.com/esphome/esphome/pull/1839) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add min_save_interval to total_energy/integration for memory wear [esphome#1665](https://github.com/esphome/esphome/pull/1665) by [@andreashergert1984](https://github.com/andreashergert1984) +- Add support for Waveshare E-Paper 4.2" B V2 [esphome#1610](https://github.com/esphome/esphome/pull/1610) by [@brettp](https://github.com/brettp) +- Add SM16703 to supported FastLED chipsets [esphome#1751](https://github.com/esphome/esphome/pull/1751) by [@robgridley](https://github.com/robgridley) +- Migrate COLOR constants to Color class & disallow implicit conversions to Color [esphome#2093](https://github.com/esphome/esphome/pull/2093) by [@oxan](https://github.com/oxan) +- Add version argument to ESPDEPRECATED macro [esphome#2116](https://github.com/esphome/esphome/pull/2116) by [@oxan](https://github.com/oxan) +- Fix mixup between ColorMode and ColorCapability [esphome#2121](https://github.com/esphome/esphome/pull/2121) by [@oxan](https://github.com/oxan) +- Various follow-up fixes to color mode changes [esphome#2118](https://github.com/esphome/esphome/pull/2118) by [@oxan](https://github.com/oxan) +- Fix crash when using addressable_set with out-of-range indices [esphome#2120](https://github.com/esphome/esphome/pull/2120) by [@oxan](https://github.com/oxan) +- Add state classes to pvvx_mithermometer [esphome#2125](https://github.com/esphome/esphome/pull/2125) by [@jesserockz](https://github.com/jesserockz) +- Add support for ESP8266 Arduino v3.0.1 [esphome#2128](https://github.com/esphome/esphome/pull/2128) by [@oxan](https://github.com/oxan) +- Drop legacy esphomeyaml command wrapper code [esphome#2130](https://github.com/esphome/esphome/pull/2130) by [@oxan](https://github.com/oxan) +- Allow multiple unnamed libraries [esphome#2132](https://github.com/esphome/esphome/pull/2132) by [@agners](https://github.com/agners) +- Don't stop effects if brightness goes to zero [esphome#2134](https://github.com/esphome/esphome/pull/2134) by [@oxan](https://github.com/oxan) +- Added support for Hitachi AC424 remote type [esphome#2101](https://github.com/esphome/esphome/pull/2101) by [@sourabhjaiswal](https://github.com/sourabhjaiswal) (new-integration) +- Anova fahrenheit support [esphome#2126](https://github.com/esphome/esphome/pull/2126) by [@buxtronix](https://github.com/buxtronix) (breaking-change) +- Tidy HA addon [esphome#1937](https://github.com/esphome/esphome/pull/1937) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Removed unused arguments from rgbww code [esphome#2137](https://github.com/esphome/esphome/pull/2137) by [@jesserockz](https://github.com/jesserockz) +- Only compile protobuf dumping when very verbose logging is enabled [esphome#2139](https://github.com/esphome/esphome/pull/2139) by [@oxan](https://github.com/oxan) +- Refactor clang-tidy script to use actual compiler flags and includes [esphome#2133](https://github.com/esphome/esphome/pull/2133) by [@oxan](https://github.com/oxan) +- Add Toshiba AC generic IR remote protocol [esphome#2019](https://github.com/esphome/esphome/pull/2019) by [@kbx81](https://github.com/kbx81) +- Add new Toshiba AC unit protocol [esphome#1987](https://github.com/esphome/esphome/pull/1987) by [@kbx81](https://github.com/kbx81) +- Add Dish Network protocol [esphome#2117](https://github.com/esphome/esphome/pull/2117) by [@ianchi](https://github.com/ianchi) +- Fix some issues with deprecated argv syntax detection [esphome#2127](https://github.com/esphome/esphome/pull/2127) by [@OttoWinter](https://github.com/OttoWinter) +- Don't discard cold/warm white brightness in constant brightness mode [esphome#2136](https://github.com/esphome/esphome/pull/2136) by [@oxan](https://github.com/oxan) +- Allow entities to be disabled by default in HA [esphome#2113](https://github.com/esphome/esphome/pull/2113) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Adds CGPR1 - Qingping Motion & Ambient light sensor support [esphome#1675](https://github.com/esphome/esphome/pull/1675) by [@Tommatheussen](https://github.com/Tommatheussen) (new-integration) +- Don't mark COLOR_* constants as static in header [esphome#2141](https://github.com/esphome/esphome/pull/2141) by [@oxan](https://github.com/oxan) +- RFC: status_led: allow to share single light [esphome#1974](https://github.com/esphome/esphome/pull/1974) by [@ianchi](https://github.com/ianchi) +- waveshare_epaper: add support for ttgo t5 b74 variant display [esphome#1869](https://github.com/esphome/esphome/pull/1869) by [@osresearch](https://github.com/osresearch) +- Thermostat enhancements 2 [esphome#2114](https://github.com/esphome/esphome/pull/2114) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Dsmr component [esphome#1881](https://github.com/esphome/esphome/pull/1881) by [@glmnet](https://github.com/glmnet) (new-integration) +- Always abort on allocation when out-of-memory [esphome#2129](https://github.com/esphome/esphome/pull/2129) by [@oxan](https://github.com/oxan) +- Support component tsl2591 [esphome#2131](https://github.com/esphome/esphome/pull/2131) by [@wjcarpenter](https://github.com/wjcarpenter) (new-integration) +- Add support for PMSA003i [esphome#1501](https://github.com/esphome/esphome/pull/1501) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- Increase task wdt timeout for ESP32/ESP32-C3 [esphome#2096](https://github.com/esphome/esphome/pull/2096) by [@agners](https://github.com/agners) +- Format dev temp idedata [esphome#2142](https://github.com/esphome/esphome/pull/2142) by [@OttoWinter](https://github.com/OttoWinter) +- Add rgbct and color_temperature light platforms [esphome#2138](https://github.com/esphome/esphome/pull/2138) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Warn if underscore character is used in hostname [esphome#2079](https://github.com/esphome/esphome/pull/2079) by [@davet2001](https://github.com/davet2001) +- Break the Tuya set_datapoint_value method into separate methods per datapoint type [esphome#2059](https://github.com/esphome/esphome/pull/2059) by [@nuttytree](https://github.com/nuttytree) +- Feature pipsolar anh [esphome#1664](https://github.com/esphome/esphome/pull/1664) by [@andreashergert1984](https://github.com/andreashergert1984) (new-integration) +- Add deassert_rts_dtr option to force RTS/DTR low when using miniterm [esphome#2089](https://github.com/esphome/esphome/pull/2089) by [@agners](https://github.com/agners) +- Support for AM43 BLE blind motors [esphome#1744](https://github.com/esphome/esphome/pull/1744) by [@buxtronix](https://github.com/buxtronix) (new-integration) +- Fix format warning in Tuya component [esphome#1954](https://github.com/esphome/esphome/pull/1954) by [@agners](https://github.com/agners) +- Modular light transformers [esphome#2124](https://github.com/esphome/esphome/pull/2124) by [@oxan](https://github.com/oxan) +- Support for the DKE screen version of LilyGo-TTGO-T5 V2.3 [esphome#1969](https://github.com/esphome/esphome/pull/1969) by [@blambov](https://github.com/blambov) +- Support multiple configuration directories for update-all subcommand [esphome#1925](https://github.com/esphome/esphome/pull/1925) by [@oxan](https://github.com/oxan) +- Always send all light state values in API [esphome#2150](https://github.com/esphome/esphome/pull/2150) by [@oxan](https://github.com/oxan) +- Let sensors announce their state_class via mqtt [esphome#2155](https://github.com/esphome/esphome/pull/2155) by [@puuu](https://github.com/puuu) +- Thermostat delayed fan mode fix [esphome#2158](https://github.com/esphome/esphome/pull/2158) by [@kbx81](https://github.com/kbx81) +- Fix native API log level enum values [esphome#2151](https://github.com/esphome/esphome/pull/2151) by [@OttoWinter](https://github.com/OttoWinter) +- Initialize color temperature to value within range if possible [esphome#2168](https://github.com/esphome/esphome/pull/2168) by [@oxan](https://github.com/oxan) +- Add a dummy color temp [esphome#2161](https://github.com/esphome/esphome/pull/2161) by [@DotNetDann](https://github.com/DotNetDann) +- Add Gas device class to DSMR component [esphome#2169](https://github.com/esphome/esphome/pull/2169) by [@frenck](https://github.com/frenck) +- Send dirty states when screen wakes up [esphome#2167](https://github.com/esphome/esphome/pull/2167) by [@jesserockz](https://github.com/jesserockz) +- Remove specified accuracy_decimals from total_daily_energy [esphome#2174](https://github.com/esphome/esphome/pull/2174) by [@jesserockz](https://github.com/jesserockz) +- Add new total_increasing state-class for Home Assistant 2021.9+ [esphome#2166](https://github.com/esphome/esphome/pull/2166) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2021.9.0.mdx b/src/content/docs/changelog/2021.9.0.mdx new file mode 100644 index 0000000000..01b1a95950 --- /dev/null +++ b/src/content/docs/changelog/2021.9.0.mdx @@ -0,0 +1,206 @@ +--- +description: "Changelog for ESPHome 2021.9.0." +title: "ESPHome 2021.9.0 - 15th September 2021" +pagefind: false +slug: "changelog/2021.9.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Web Server Vulnerability + +It was brought to our attention by [@andir](https://github.com/andir) that the [Web Server](/components/web_server/) +had a vulnerability in that the OTA form could be POST'd to without the basic auth credentials set in the `web_server` +configuration. If you use the `web_server` and rely on the credentials for security, then you need to upgrade +to 2021.9.2 or disable the `web_server` completely. The [Security Advisory on GitHub](https://github.com/esphome/esphome/security/advisories/GHSA-48mj-p7x2-5jfm) +has been given `CVE-2021-41104`. + +## [Home Assistant Yellow](https://home-assistant.io/yellow) + +You get the most out of your ESPHome devices when you combine it with Home Assistant, +which offers a seamless and local integration to control and manage all your ESPHome devices. +Today Home Assistant launched a crowdfunding campaign for the [Home Assistant Yellow](https://home-assistant.io/yellow), +the easiest way to get started with Home Assistant and a privacy focused smart home. + +## API Encryption + +[@OttoWinter](https://github.com/OttoWinter) has been hard at work adding a layer of encryption to the API which utilises the +`noise` protocol. This releases adds the capabilities to ESPHome devices, but Home Assistant (or other clients) +will need to upgrade their client libraries (e.g. `aioesphomeapi` ) before they can connect and communicate to +devices with encryption. This is scheduled to be available in Home Assistant 2021.10. + +## Git Packages + +[Packages](/components/packages#config-git_packages) have been extended to allow loading (multiple) YAML file(s) from a git repo. +Take a look at the examples to see how to use them. + +## Midea AC + +`platform: midea_ac` has been changed to `platform: midea` in this release and has +quite a few upgrades. Check the docs for the new features. [Midea](/components/climate/midea/) + +## SDM Meters + +[SDM Meters](/components/sensor/sdm_meter/) have been fixed to use kWh instead of Wh +as the energy unit of measurement. + +## Template Select/Number/Switch + +The template selects, numbers and switches now have more validations on them preventing weird usage. +If you do not set a `lambda` then you are required to make them either `optimistic: true`, or +utilise the `set_action` (select/number) / `turn_on_trigger` (switch). + +{/* markdownlint-disable MD013 */} + +## Release 2021.9.1 - September 20 + +- Fix MQTT discovery for sensor state_class [esphome#2331](https://github.com/esphome/esphome/pull/2331) by [@paulmonigatti](https://github.com/paulmonigatti) +- Light transition fixes [esphome#2320](https://github.com/esphome/esphome/pull/2320) by [@oxan](https://github.com/oxan) +- Cease using deprecated Cover methods in automations [esphome#2326](https://github.com/esphome/esphome/pull/2326) by [@oxan](https://github.com/oxan) +- Apply color brightness to addressable light effects [esphome#2321](https://github.com/esphome/esphome/pull/2321) by [@oxan](https://github.com/oxan) +- Add readv and writev for more efficient API packets [esphome#2342](https://github.com/esphome/esphome/pull/2342) by [@OttoWinter](https://github.com/OttoWinter) +- Clean-up sensor integration [esphome#2275](https://github.com/esphome/esphome/pull/2275) by [@oxan](https://github.com/oxan) + +## Release 2021.9.2 - September 28 + +- Bump aioesphomeapi to 9.1.1 [esphome#2350](https://github.com/esphome/esphome/pull/2350) by [@OttoWinter](https://github.com/OttoWinter) +- Midea fix [esphome#2395](https://github.com/esphome/esphome/pull/2395) by [@dudanov](https://github.com/dudanov) +- Move web_server auth to web_server_base [be965a6](https://github.com/esphome/esphome/commit/be965a60eba6bb769e2a5afdbc8eed132f077a59) by [@OttoWinter](https://github.com/OttoWinter) +- Fix lint issues in web_server_base [esphome#2409](https://github.com/esphome/esphome/pull/2409) by [@jesserockz](https://github.com/jesserockz) + +## Release 2021.9.3 - October 7 + +- Re-enable TCP nodelay for ESP32 [esphome#2390](https://github.com/esphome/esphome/pull/2390) by [@OttoWinter](https://github.com/OttoWinter) +- Bump aioesphomeapi from 9.1.1 to 9.1.2 [esphome#2426](https://github.com/esphome/esphome/pull/2426) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix socket abstraction for ESP-IDF v4 [esphome#2434](https://github.com/esphome/esphome/pull/2434) by [@agners](https://github.com/agners) +- Bump aioesphomeapi from 9.1.2 to 9.1.4 [esphome#2443](https://github.com/esphome/esphome/pull/2443) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add log line to show if API encryption is being used [esphome#2450](https://github.com/esphome/esphome/pull/2450) by [@jesserockz](https://github.com/jesserockz) +- API encryption switch to libsodium backend [esphome#2456](https://github.com/esphome/esphome/pull/2456) by [@OttoWinter](https://github.com/OttoWinter) + +## Full list of changes + +### New Features + +- Add H-Bridge fan component [esphome#2212](https://github.com/esphome/esphome/pull/2212) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (new-feature) +- Allow using a git source for a package [esphome#2193](https://github.com/esphome/esphome/pull/2193) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Add st7920 display, [esphome#1440](https://github.com/esphome/esphome/pull/1440) by [@marsjan155](https://github.com/marsjan155) (new-integration) +- Support for the AirThings Wave Plus [esphome#1656](https://github.com/esphome/esphome/pull/1656) by [@jeromelaban](https://github.com/jeromelaban) (new-integration) + +### Breaking Changes + +- Fix SDM energy units to be KILO... [esphome#2206](https://github.com/esphome/esphome/pull/2206) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Reject template select/number/switches that don't handle user input [esphome#2230](https://github.com/esphome/esphome/pull/2230) by [@oxan](https://github.com/oxan) (breaking-change) +- Remove last_reset_type and convert all those sensors to TOTAL_INCREASING [esphome#2233](https://github.com/esphome/esphome/pull/2233) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Midea support v2 [esphome#2188](https://github.com/esphome/esphome/pull/2188) by [@dudanov](https://github.com/dudanov) (breaking-change) + +### Beta Fixes + +- Fix a few ESP32-C3 compiler issues [esphome#2265](https://github.com/esphome/esphome/pull/2265) by [@jesserockz](https://github.com/jesserockz) +- sm300d2: Accept (undocumented) 0x80 checksum offset. [esphome#2263](https://github.com/esphome/esphome/pull/2263) by [@poptix](https://github.com/poptix) +- Disable automatic usage of SNTP servers from DHCP [esphome#2273](https://github.com/esphome/esphome/pull/2273) by [@oxan](https://github.com/oxan) +- Only try compat parsing after regular parsing fails [esphome#2269](https://github.com/esphome/esphome/pull/2269) by [@oxan](https://github.com/oxan) +- Suppress excessive warnings about deprecated Fan interfaces [esphome#2270](https://github.com/esphome/esphome/pull/2270) by [@oxan](https://github.com/oxan) +- t6615: tolerate sensor dropping commands [esphome#2255](https://github.com/esphome/esphome/pull/2255) by [@jasstrong](https://github.com/jasstrong) +- Fix API socket issues [esphome#2288](https://github.com/esphome/esphome/pull/2288) by [@OttoWinter](https://github.com/OttoWinter) +- Bump platformio to 5.2.0 [esphome#2291](https://github.com/esphome/esphome/pull/2291) by [@OttoWinter](https://github.com/OttoWinter) +- API Noise logging [esphome#2298](https://github.com/esphome/esphome/pull/2298) by [@OttoWinter](https://github.com/OttoWinter) +- Fix api noise explicit reject [esphome#2297](https://github.com/esphome/esphome/pull/2297) by [@OttoWinter](https://github.com/OttoWinter) +- Allow simple hostname for sntp servers [esphome#2300](https://github.com/esphome/esphome/pull/2300) by [@jesserockz](https://github.com/jesserockz) +- Fix binary strobe [esphome#2301](https://github.com/esphome/esphome/pull/2301) by [@jesserockz](https://github.com/jesserockz) +- Fix unit of measurement fields for DSMR power consumed/delivered fields [esphome#2304](https://github.com/esphome/esphome/pull/2304) by [@jsuanet](https://github.com/jsuanet) +- Simple time.sleep in place of threading wait due to upgraded zeroconf [esphome#2307](https://github.com/esphome/esphome/pull/2307) by [@jesserockz](https://github.com/jesserockz) +- Fix aioesphomeapi API logger with explicit API port config [esphome#2310](https://github.com/esphome/esphome/pull/2310) by [@mmakaay](https://github.com/mmakaay) +- Start a wifi scan after saving station details [esphome#2315](https://github.com/esphome/esphome/pull/2315) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Minor code cleanup in light components [esphome#2162](https://github.com/esphome/esphome/pull/2162) by [@mmakaay](https://github.com/mmakaay) +- Add device class update to binary sensor [esphome#2170](https://github.com/esphome/esphome/pull/2170) by [@frenck](https://github.com/frenck) +- Total daily energy methods [esphome#2163](https://github.com/esphome/esphome/pull/2163) by [@nuttytree](https://github.com/nuttytree) +- Set SDM voltage state class to measurement [esphome#2181](https://github.com/esphome/esphome/pull/2181) by [@jesserockz](https://github.com/jesserockz) +- Add macros header with more usable Arduino version defines [esphome#2145](https://github.com/esphome/esphome/pull/2145) by [@oxan](https://github.com/oxan) +- Clean-up constant definitions [esphome#2148](https://github.com/esphome/esphome/pull/2148) by [@oxan](https://github.com/oxan) +- Remove double scheduling from addressable lights [esphome#1963](https://github.com/esphome/esphome/pull/1963) by [@oxan](https://github.com/oxan) +- Reduce static RAM usage [esphome#2140](https://github.com/esphome/esphome/pull/2140) by [@oxan](https://github.com/oxan) +- Fix template select log message mentioning number [esphome#2194](https://github.com/esphome/esphome/pull/2194) by [@jesserockz](https://github.com/jesserockz) +- Add deprecated attribute to some deprecated types/methods [esphome#2185](https://github.com/esphome/esphome/pull/2185) by [@oxan](https://github.com/oxan) +- Store source package in Component for debugging [esphome#2070](https://github.com/esphome/esphome/pull/2070) by [@OttoWinter](https://github.com/OttoWinter) +- ST7789V: Make backlight_pin optional [esphome#2180](https://github.com/esphome/esphome/pull/2180) by [@speijnik](https://github.com/speijnik) +- Fix SDM energy units to be KILO... [esphome#2206](https://github.com/esphome/esphome/pull/2206) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Optionally set direction on fan.turn_on action [esphome#2171](https://github.com/esphome/esphome/pull/2171) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) +- Add st7920 display, [esphome#1440](https://github.com/esphome/esphome/pull/1440) by [@marsjan155](https://github.com/marsjan155) (new-integration) +- Fix css/js file loading for webserver when esphome not executed form config directory [esphome#2207](https://github.com/esphome/esphome/pull/2207) by [@jesserockz](https://github.com/jesserockz) +- cs_pin made optional for ili9341 [esphome#2219](https://github.com/esphome/esphome/pull/2219) by [@a13ssandr0](https://github.com/a13ssandr0) +- Fix Packages when using MQTT [esphome#2210](https://github.com/esphome/esphome/pull/2210) by [@paulmonigatti](https://github.com/paulmonigatti) +- Update known boards [esphome#2190](https://github.com/esphome/esphome/pull/2190) by [@oxan](https://github.com/oxan) +- Bump dashboard to 20210826.0 [esphome#2211](https://github.com/esphome/esphome/pull/2211) by [@jesserockz](https://github.com/jesserockz) +- Remove footer validation for fujitsu_general [esphome#2196](https://github.com/esphome/esphome/pull/2196) by [@marciogranzotto](https://github.com/marciogranzotto) +- Glmnet schema 202105 [esphome#2220](https://github.com/esphome/esphome/pull/2220) by [@glmnet](https://github.com/glmnet) +- Add H-Bridge fan component [esphome#2212](https://github.com/esphome/esphome/pull/2212) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (new-feature) +- Bump black from 21.7b0 to 21.8b0 [esphome#2222](https://github.com/esphome/esphome/pull/2222) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 6.2.4 to 6.2.5 [esphome#2223](https://github.com/esphome/esphome/pull/2223) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Support for the AirThings Wave Plus [esphome#1656](https://github.com/esphome/esphome/pull/1656) by [@jeromelaban](https://github.com/jeromelaban) (new-integration) +- Fix some lint errors in pylint 2.10.2 [esphome#2226](https://github.com/esphome/esphome/pull/2226) by [@jesserockz](https://github.com/jesserockz) +- Add transitions to light flash [esphome#2201](https://github.com/esphome/esphome/pull/2201) by [@alexyao2015](https://github.com/alexyao2015) +- iBeacon support for ble_presence [esphome#1627](https://github.com/esphome/esphome/pull/1627) by [@ignisf](https://github.com/ignisf) +- Cleanup flash transitions [esphome#2227](https://github.com/esphome/esphome/pull/2227) by [@alexyao2015](https://github.com/alexyao2015) +- Add is_on and is_off conditions for the fan component [esphome#2225](https://github.com/esphome/esphome/pull/2225) by [@nuttytree](https://github.com/nuttytree) +- Bump pylint from 2.9.6 to 2.10.2 [esphome#2197](https://github.com/esphome/esphome/pull/2197) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- mqtt_sensor: properly send state_class via MQTT [esphome#2228](https://github.com/esphome/esphome/pull/2228) by [@ayufan](https://github.com/ayufan) +- Change uptime's state_class to total_increasing (esphome/issues#2337) [esphome#2205](https://github.com/esphome/esphome/pull/2205) by [@DAVe3283](https://github.com/DAVe3283) +- Expose WHITE/CWWW/RGBCT color modes over MQTT [esphome#2231](https://github.com/esphome/esphome/pull/2231) by [@oxan](https://github.com/oxan) +- Reject template select/number/switches that don't handle user input [esphome#2230](https://github.com/esphome/esphome/pull/2230) by [@oxan](https://github.com/oxan) (breaking-change) +- Fix UARTComponent hardware vs software UART0 conflict [esphome#2229](https://github.com/esphome/esphome/pull/2229) by [@ferbar](https://github.com/ferbar) +- Move to use zeroconf library instead of inline copy [esphome#2192](https://github.com/esphome/esphome/pull/2192) by [@jesserockz](https://github.com/jesserockz) +- Allow using a git source for a package [esphome#2193](https://github.com/esphome/esphome/pull/2193) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Remove last_reset_type and convert all those sensors to TOTAL_INCREASING [esphome#2233](https://github.com/esphome/esphome/pull/2233) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Dont dump legacy fields [esphome#2241](https://github.com/esphome/esphome/pull/2241) by [@jesserockz](https://github.com/jesserockz) +- Fix encoding bug [esphome#2242](https://github.com/esphome/esphome/pull/2242) by [@jesserockz](https://github.com/jesserockz) +- Light: include ON_OFF capability to BRIGHTNESS ColorMode [esphome#2204](https://github.com/esphome/esphome/pull/2204) by [@jesserockz](https://github.com/jesserockz) +- LOG_UPDATE_INTERVAL: correctly report "never" [esphome#2240](https://github.com/esphome/esphome/pull/2240) by [@Habbie](https://github.com/Habbie) +- Fix runtime exception due to dict typing [esphome#2243](https://github.com/esphome/esphome/pull/2243) by [@alexyao2015](https://github.com/alexyao2015) +- template: select: fix initial_value cannot be used with lambda [esphome#2244](https://github.com/esphome/esphome/pull/2244) by [@ayufan](https://github.com/ayufan) +- Add device classes new in HA 2021.9 [esphome#2248](https://github.com/esphome/esphome/pull/2248) by [@oxan](https://github.com/oxan) +- Logger prevent recursive logging [esphome#2251](https://github.com/esphome/esphome/pull/2251) by [@OttoWinter](https://github.com/OttoWinter) +- Add new trigger to fan component `on_speed_set` [esphome#2246](https://github.com/esphome/esphome/pull/2246) by [@dgtal1](https://github.com/dgtal1) +- Fix fan speed restore issue on boot [esphome#1867](https://github.com/esphome/esphome/pull/1867) by [@wifwucite](https://github.com/wifwucite) +- Template sensors always publish on update interval [esphome#2224](https://github.com/esphome/esphome/pull/2224) by [@nuttytree](https://github.com/nuttytree) +- Socket component [esphome#2250](https://github.com/esphome/esphome/pull/2250) by [@OttoWinter](https://github.com/OttoWinter) +- Allow .yml files in dashboard [esphome#2257](https://github.com/esphome/esphome/pull/2257) by [@jesserockz](https://github.com/jesserockz) +- Bump dashboard to 20210908.0 and fix card names for yml [esphome#2258](https://github.com/esphome/esphome/pull/2258) by [@jesserockz](https://github.com/jesserockz) +- Fix socket not setting callbacks early enough [esphome#2260](https://github.com/esphome/esphome/pull/2260) by [@OttoWinter](https://github.com/OttoWinter) +- Convert API to use sockets [esphome#2253](https://github.com/esphome/esphome/pull/2253) by [@OttoWinter](https://github.com/OttoWinter) +- Midea support v2 [esphome#2188](https://github.com/esphome/esphome/pull/2188) by [@dudanov](https://github.com/dudanov) (breaking-change) +- ccs811: publish firmware version; log bootloader and HW version; fix a bug [esphome#2006](https://github.com/esphome/esphome/pull/2006) by [@Habbie](https://github.com/Habbie) +- API encryption [esphome#2254](https://github.com/esphome/esphome/pull/2254) by [@OttoWinter](https://github.com/OttoWinter) +- Revert "Dont dump legacy fields" [esphome#2259](https://github.com/esphome/esphome/pull/2259) by [@jesserockz](https://github.com/jesserockz) +- pm1006: add support for sending a measurement request [esphome#2214](https://github.com/esphome/esphome/pull/2214) by [@Habbie](https://github.com/Habbie) +- SGP40 sensor start-up fix [esphome#2178](https://github.com/esphome/esphome/pull/2178) by [@kbx81](https://github.com/kbx81) +- PMSA003i Update state_class and async [esphome#2216](https://github.com/esphome/esphome/pull/2216) by [@sjtrny](https://github.com/sjtrny) +- Fix a few ESP32-C3 compiler issues [esphome#2265](https://github.com/esphome/esphome/pull/2265) by [@jesserockz](https://github.com/jesserockz) +- sm300d2: Accept (undocumented) 0x80 checksum offset. [esphome#2263](https://github.com/esphome/esphome/pull/2263) by [@poptix](https://github.com/poptix) +- Disable automatic usage of SNTP servers from DHCP [esphome#2273](https://github.com/esphome/esphome/pull/2273) by [@oxan](https://github.com/oxan) +- Only try compat parsing after regular parsing fails [esphome#2269](https://github.com/esphome/esphome/pull/2269) by [@oxan](https://github.com/oxan) +- Suppress excessive warnings about deprecated Fan interfaces [esphome#2270](https://github.com/esphome/esphome/pull/2270) by [@oxan](https://github.com/oxan) +- t6615: tolerate sensor dropping commands [esphome#2255](https://github.com/esphome/esphome/pull/2255) by [@jasstrong](https://github.com/jasstrong) +- Fix API socket issues [esphome#2288](https://github.com/esphome/esphome/pull/2288) by [@OttoWinter](https://github.com/OttoWinter) +- Bump platformio to 5.2.0 [esphome#2291](https://github.com/esphome/esphome/pull/2291) by [@OttoWinter](https://github.com/OttoWinter) +- API Noise logging [esphome#2298](https://github.com/esphome/esphome/pull/2298) by [@OttoWinter](https://github.com/OttoWinter) +- Fix api noise explicit reject [esphome#2297](https://github.com/esphome/esphome/pull/2297) by [@OttoWinter](https://github.com/OttoWinter) +- Allow simple hostname for sntp servers [esphome#2300](https://github.com/esphome/esphome/pull/2300) by [@jesserockz](https://github.com/jesserockz) +- Fix binary strobe [esphome#2301](https://github.com/esphome/esphome/pull/2301) by [@jesserockz](https://github.com/jesserockz) +- Fix unit of measurement fields for DSMR power consumed/delivered fields [esphome#2304](https://github.com/esphome/esphome/pull/2304) by [@jsuanet](https://github.com/jsuanet) +- Simple time.sleep in place of threading wait due to upgraded zeroconf [esphome#2307](https://github.com/esphome/esphome/pull/2307) by [@jesserockz](https://github.com/jesserockz) +- Fix aioesphomeapi API logger with explicit API port config [esphome#2310](https://github.com/esphome/esphome/pull/2310) by [@mmakaay](https://github.com/mmakaay) +- Start a wifi scan after saving station details [esphome#2315](https://github.com/esphome/esphome/pull/2315) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.1.0.mdx b/src/content/docs/changelog/2022.1.0.mdx new file mode 100644 index 0000000000..8a827f9633 --- /dev/null +++ b/src/content/docs/changelog/2022.1.0.mdx @@ -0,0 +1,238 @@ +--- +description: "Changelog for ESPHome 2022.1.0." +title: "ESPHome 2022.1.0 - 19th January 2022" +pagefind: false +slug: "changelog/2022.1.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +HAPPY NEW YEAR!! + +There are a few more new components this release than I expected, yay!!! + +## ESPHome Web + +Today we're launching a new variant of the ESPHome dashboard: ESPHome Web – [https://web.esphome.io](https://web.esphome.io). + +The biggest challenge to getting started with ESPHome is the initial installation of ESPHome on your device. +This installation needs be done by attaching the device to your computer via a cable. Once installed, updates can +be installed over-the-air. + +Last year we added support to the ESPHome dashboard to do the initial installation via the browser. Browsers +security require the website to be served over HTTPS to allow device installation. Most people browse it from +[http://homeassistant.local](http://homeassistant.local) or other local addresses so only users that manually configured external access or +using Home Assistant Cloud could benefit. + +With ESPHome Web we took the installation bits of the ESPHome dashboard and made them available on a website served +over HTTPS. It works 100% in your browser without a backend or data leaving your computer. Now anyone can easily +install ESPHome on their devices to get started. + +[Visit ESPHome Web](https://web.esphome.io) + +## JSON + +We upgraded the ArduinoJson library used to parse and build JSON strings to the latest version. +All of the internal code has been updated to work with the changes, but any custom code or even +`lambda` might need updating now. + +The most noticeble change is that the `&` reference modifier on the `JsonObject` that are +created in lambdas are no longer required. + +Example: + +```cpp +JsonObject &blah = root.createNestedObject("blah"); + +// This should now be: + +JsonObject blah = root.createNestedObject("blah"); +``` + +{/* markdownlint-disable MD013 */} + +## Release 2022.1.1 - January 20 + +- Add `*.py.script` files to distributions [esphome#3074](https://github.com/esphome/esphome/pull/3074) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.1.2 - January 25 + +- [modbus_controller] fix incorrect start address for number write [esphome#3073](https://github.com/esphome/esphome/pull/3073) by [@martgras](https://github.com/martgras) +- Set the wrapped single light in light partition to internal [esphome#3092](https://github.com/esphome/esphome/pull/3092) by [@placidorevilla](https://github.com/placidorevilla) + +## Release 2022.1.3 - February 2 + +- Fix backwards string case helpers [esphome#3126](https://github.com/esphome/esphome/pull/3126) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +## Release 2022.1.4 - February 9 + +- Enable mDNS during OTA safe mode [esphome#3146](https://github.com/esphome/esphome/pull/3146) by [@OttoWinter](https://github.com/OttoWinter) +- Try fix canbus config validation [esphome#3173](https://github.com/esphome/esphome/pull/3173) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- Support different run duration for non-timer wakeup [esphome#2861](https://github.com/esphome/esphome/pull/2861) by [@jhamhader](https://github.com/jhamhader) (new-feature) +- Add light.on_state trigger [esphome#2868](https://github.com/esphome/esphome/pull/2868) by [@tony-fav](https://github.com/tony-fav) (new-feature) +- Support inkplate10 [esphome#2937](https://github.com/esphome/esphome/pull/2937) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Add growatt modbus sensor [esphome#2922](https://github.com/esphome/esphome/pull/2922) by [@leeuwte](https://github.com/leeuwte) (new-integration) +- Add Tuya Number support [esphome#2765](https://github.com/esphome/esphome/pull/2765) by [@frankiboy1](https://github.com/frankiboy1) (new-integration) +- Add shutdown and safe_mode button [esphome#2918](https://github.com/esphome/esphome/pull/2918) by [@jsuanet](https://github.com/jsuanet) (new-integration) +- INA260 Current and Power Sensor support [esphome#2788](https://github.com/esphome/esphome/pull/2788) by [@MrEditor97](https://github.com/MrEditor97) (new-integration) +- Improve PSRAM support [esphome#2884](https://github.com/esphome/esphome/pull/2884) by [@oxan](https://github.com/oxan) (new-integration) +- Add bl0940 component used by e.g. tuya devices [esphome#1904](https://github.com/esphome/esphome/pull/1904) by [@tobias-](https://github.com/tobias-) (new-integration) +- Add support for BMP388 / BMP 390 pressure and temperature sensor [esphome#2716](https://github.com/esphome/esphome/pull/2716) by [@martgras](https://github.com/martgras) (new-integration) +- Add MCP47A1 DAC output [esphome#3014](https://github.com/esphome/esphome/pull/3014) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Create new kalman_combinator component [esphome#2965](https://github.com/esphome/esphome/pull/2965) by [@Cat-Ion](https://github.com/Cat-Ion) (new-integration) +- New Midea IR component, improvements and fixes [esphome#2847](https://github.com/esphome/esphome/pull/2847) by [@dudanov](https://github.com/dudanov) (new-integration) +- MCP3204 4-channel 12-bit ADC component [esphome#2895](https://github.com/esphome/esphome/pull/2895) by [@rsumner](https://github.com/rsumner) (new-integration) +- Add cd74hc4067 multiplexer [esphome#2431](https://github.com/esphome/esphome/pull/2431) by [@asoehlke](https://github.com/asoehlke) (new-integration) +- Native ESP32 CAN support [esphome#1629](https://github.com/esphome/esphome/pull/1629) by [@Sympatron](https://github.com/Sympatron) (new-integration) + +### Breaking Changes + +- Modbus: use multiply for publishing number [esphome#2916](https://github.com/esphome/esphome/pull/2916) by [@martgras](https://github.com/martgras) (breaking-change) +- Upgrade ArduinoJson to 6.18.5 and migrate code [esphome#2844](https://github.com/esphome/esphome/pull/2844) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix backwards string case helpers [esphome#3126](https://github.com/esphome/esphome/pull/3126) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- Add factory to download name [esphome#3040](https://github.com/esphome/esphome/pull/3040) by [@balloob](https://github.com/balloob) +- Bump dashboard to 20220113.2 [esphome#3041](https://github.com/esphome/esphome/pull/3041) by [@balloob](https://github.com/balloob) +- Disable caching for binary download [esphome#3054](https://github.com/esphome/esphome/pull/3054) by [@lutzky](https://github.com/lutzky) +- Rename post_build scripts to fix codeowners script [esphome#3057](https://github.com/esphome/esphome/pull/3057) by [@oxan](https://github.com/oxan) +- Remove deprecated attribute from virtual entity methods [esphome#3056](https://github.com/esphome/esphome/pull/3056) by [@oxan](https://github.com/oxan) +- Add number setting to web_server/rest_api [esphome#3055](https://github.com/esphome/esphome/pull/3055) by [@jesserockz](https://github.com/jesserockz) +- bump dashboard to 20220116.0 [esphome#3061](https://github.com/esphome/esphome/pull/3061) by [@balloob](https://github.com/balloob) +- [modbus_controller] add missing skip_updates [esphome#3063](https://github.com/esphome/esphome/pull/3063) by [@martgras](https://github.com/martgras) +- Fail hard if no random bytes available for encryption [esphome#3067](https://github.com/esphome/esphome/pull/3067) by [@oxan](https://github.com/oxan) + +### All changes + +- Add a simple helper to remap values [esphome#2850](https://github.com/esphome/esphome/pull/2850) by [@jesserockz](https://github.com/jesserockz) +- Bump pylint from 2.12.1 to 2.12.2 [esphome#2858](https://github.com/esphome/esphome/pull/2858) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Support different run duration for non-timer wakeup [esphome#2861](https://github.com/esphome/esphome/pull/2861) by [@jhamhader](https://github.com/jhamhader) (new-feature) +- Drop len parameter from parse_number() [esphome#2883](https://github.com/esphome/esphome/pull/2883) by [@oxan](https://github.com/oxan) +- Drop unused xSemaphoreWait define [esphome#2888](https://github.com/esphome/esphome/pull/2888) by [@oxan](https://github.com/oxan) +- Move i2c scan to setup [esphome#2869](https://github.com/esphome/esphome/pull/2869) by [@martgras](https://github.com/martgras) +- Introduce hex parsing & formatting helper functions [esphome#2882](https://github.com/esphome/esphome/pull/2882) by [@oxan](https://github.com/oxan) +- Add light.on_state trigger [esphome#2868](https://github.com/esphome/esphome/pull/2868) by [@tony-fav](https://github.com/tony-fav) (new-feature) +- Reduce timing noise in duty_cycle [esphome#2881](https://github.com/esphome/esphome/pull/2881) by [@CarlosGS](https://github.com/CarlosGS) +- Turn verbose a debug statement in bme280 [esphome#2906](https://github.com/esphome/esphome/pull/2906) by [@CarlosGS](https://github.com/CarlosGS) +- Add reset_duration option for waveshare epaper HAT rev 2.1 [esphome#1481](https://github.com/esphome/esphome/pull/1481) by [@owenb321](https://github.com/owenb321) +- Log the actual value in modbus number [esphome#2901](https://github.com/esphome/esphome/pull/2901) by [@jesserockz](https://github.com/jesserockz) +- Add gpio 12 to strapping pin list [esphome#2902](https://github.com/esphome/esphome/pull/2902) by [@martgras](https://github.com/martgras) +- Added access to ble_scan_result_evt_param as get_scan_result [esphome#2854](https://github.com/esphome/esphome/pull/2854) by [@myhomeiot](https://github.com/myhomeiot) +- fix multi-line comment warning/error [esphome#2891](https://github.com/esphome/esphome/pull/2891) by [@martgras](https://github.com/martgras) +- Bump black from 21.11b1 to 21.12b0 [esphome#2879](https://github.com/esphome/esphome/pull/2879) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Adding Pascal unit to constants [esphome#2914](https://github.com/esphome/esphome/pull/2914) by [@jddonovan](https://github.com/jddonovan) +- quantile filter support [esphome#2900](https://github.com/esphome/esphome/pull/2900) by [@konikvranik](https://github.com/konikvranik) +- ESP32 CAM add Automatic Exposure Control option [esphome#2892](https://github.com/esphome/esphome/pull/2892) by [@sveip](https://github.com/sveip) +- Modbus: use multiply for publishing number [esphome#2916](https://github.com/esphome/esphome/pull/2916) by [@martgras](https://github.com/martgras) (breaking-change) +- Add growatt modbus sensor [esphome#2922](https://github.com/esphome/esphome/pull/2922) by [@leeuwte](https://github.com/leeuwte) (new-integration) +- Add Tuya Number support [esphome#2765](https://github.com/esphome/esphome/pull/2765) by [@frankiboy1](https://github.com/frankiboy1) (new-integration) +- Support inverted tm1637 display [esphome#2878](https://github.com/esphome/esphome/pull/2878) by [@jlsjonas](https://github.com/jlsjonas) +- Fix tm1637 bootloop [esphome#2929](https://github.com/esphome/esphome/pull/2929) by [@jlsjonas](https://github.com/jlsjonas) +- Add shutdown and safe_mode button [esphome#2918](https://github.com/esphome/esphome/pull/2918) by [@jsuanet](https://github.com/jsuanet) (new-integration) +- Support inkplate10 [esphome#2937](https://github.com/esphome/esphome/pull/2937) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- bang_bang: respect set cool- and heat-only modes [esphome#2926](https://github.com/esphome/esphome/pull/2926) by [@sairon](https://github.com/sairon) +- Update curl package version in docker [esphome#2939](https://github.com/esphome/esphome/pull/2939) by [@jesserockz](https://github.com/jesserockz) +- Change HDC1080 init instruction failure from error to warning [esphome#2927](https://github.com/esphome/esphome/pull/2927) by [@grob6000](https://github.com/grob6000) +- Add option to load docker image when building [esphome#2938](https://github.com/esphome/esphome/pull/2938) by [@jesserockz](https://github.com/jesserockz) +- Disable nightly dev build [esphome#2943](https://github.com/esphome/esphome/pull/2943) by [@jesserockz](https://github.com/jesserockz) +- Revert "Disable nightly dev build" [esphome#2944](https://github.com/esphome/esphome/pull/2944) by [@jesserockz](https://github.com/jesserockz) +- Remove Content-Length header from camera snapshot response [esphome#2860](https://github.com/esphome/esphome/pull/2860) by [@DotNetDann](https://github.com/DotNetDann) +- ST7920 ESP32 fix [esphome#2962](https://github.com/esphome/esphome/pull/2962) by [@marsjan155](https://github.com/marsjan155) +- Fix switch log state if inverted [esphome#2960](https://github.com/esphome/esphome/pull/2960) by [@hobbyquaker](https://github.com/hobbyquaker) +- Add pin aliases for featheresp32-s2 [esphome#2970](https://github.com/esphome/esphome/pull/2970) by [@arunderwood](https://github.com/arunderwood) +- INA260 Current and Power Sensor support [esphome#2788](https://github.com/esphome/esphome/pull/2788) by [@MrEditor97](https://github.com/MrEditor97) (new-integration) +- Upgrade ArduinoJson to 6.18.5 and migrate code [esphome#2844](https://github.com/esphome/esphome/pull/2844) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Don't use pyproject.toml for esphome build [esphome#2980](https://github.com/esphome/esphome/pull/2980) by [@agners](https://github.com/agners) +- Explicitly use overloaded begin() for I2C master initialization [esphome#2978](https://github.com/esphome/esphome/pull/2978) by [@agners](https://github.com/agners) +- Use template path [esphome#2961](https://github.com/esphome/esphome/pull/2961) by [@balloob](https://github.com/balloob) +- Fix compile error for idf projects with ArduinoJson 6 [esphome#2979](https://github.com/esphome/esphome/pull/2979) by [@martgras](https://github.com/martgras) +- Modbus: fix response parsing error for coil write [esphome#2986](https://github.com/esphome/esphome/pull/2986) by [@martgras](https://github.com/martgras) +- Change unset ESPHOME_LOG_LEVEL fallback to NONE [esphome#2982](https://github.com/esphome/esphome/pull/2982) by [@dbuezas](https://github.com/dbuezas) +- Add SH1107_128x64 to the ssd1306 component [esphome#2967](https://github.com/esphome/esphome/pull/2967) by [@arunderwood](https://github.com/arunderwood) +- Add logging for some Nextion errors that didn't have any [esphome#2957](https://github.com/esphome/esphome/pull/2957) by [@masto](https://github.com/masto) +- Fix HTTPRequestComponent::get_string return value [esphome#2987](https://github.com/esphome/esphome/pull/2987) by [@martgras](https://github.com/martgras) +- Improve PSRAM support [esphome#2884](https://github.com/esphome/esphome/pull/2884) by [@oxan](https://github.com/oxan) (new-integration) +- Support ISR based pulse counter on ESP32-C3 [esphome#2983](https://github.com/esphome/esphome/pull/2983) by [@agners](https://github.com/agners) +- Use to_string() from STL when available [esphome#2992](https://github.com/esphome/esphome/pull/2992) by [@oxan](https://github.com/oxan) +- Set UTF-8 encoding and version for prometheus /metrics [esphome#2993](https://github.com/esphome/esphome/pull/2993) by [@MyIgel](https://github.com/MyIgel) +- Introduce bit_cast() backport [esphome#2991](https://github.com/esphome/esphome/pull/2991) by [@oxan](https://github.com/oxan) +- Apply --no-use-pep517 for docker images [esphome#2985](https://github.com/esphome/esphome/pull/2985) by [@jesserockz](https://github.com/jesserockz) +- Dont validate baud_rate for sim800l platform [esphome#2945](https://github.com/esphome/esphome/pull/2945) by [@jesserockz](https://github.com/jesserockz) +- Modbus: add binary output [esphome#2931](https://github.com/esphome/esphome/pull/2931) by [@martgras](https://github.com/martgras) +- Add bl0940 component used by e.g. tuya devices [esphome#1904](https://github.com/esphome/esphome/pull/1904) by [@tobias-](https://github.com/tobias-) (new-integration) +- Honor user set values for col/row start for INITR_MINI_160X80. [esphome#2976](https://github.com/esphome/esphome/pull/2976) by [@gonzalop](https://github.com/gonzalop) +- Fix clang-tidy with multiple ESP32 toolchains installed [esphome#2998](https://github.com/esphome/esphome/pull/2998) by [@oxan](https://github.com/oxan) +- Set correct include_dir in platformio.ini [esphome#2999](https://github.com/esphome/esphome/pull/2999) by [@oxan](https://github.com/oxan) +- SGP40 - Reduce delay in measurement [esphome#2996](https://github.com/esphome/esphome/pull/2996) by [@martgras](https://github.com/martgras) +- atc mithermometer: Add possibility to report signal strength [esphome#3000](https://github.com/esphome/esphome/pull/3000) by [@mknjc](https://github.com/mknjc) +- Support clang-tidy for ESP32 variants [esphome#3001](https://github.com/esphome/esphome/pull/3001) by [@oxan](https://github.com/oxan) +- Fix SlowPWM output switch at the end of period [esphome#2984](https://github.com/esphome/esphome/pull/2984) by [@Chupaka](https://github.com/Chupaka) +- Add support for BMP388 / BMP 390 pressure and temperature sensor [esphome#2716](https://github.com/esphome/esphome/pull/2716) by [@martgras](https://github.com/martgras) (new-integration) +- Clean-up reverse_bits helpers [esphome#3011](https://github.com/esphome/esphome/pull/3011) by [@oxan](https://github.com/oxan) +- Convert clamp() helper to backport of std::clamp() [esphome#3010](https://github.com/esphome/esphome/pull/3010) by [@oxan](https://github.com/oxan) +- Introduce str_lower_case() and str_upper_case() helpers [esphome#3008](https://github.com/esphome/esphome/pull/3008) by [@oxan](https://github.com/oxan) +- Drop `uint{32,64}_to_string()` helper functions [esphome#3009](https://github.com/esphome/esphome/pull/3009) by [@oxan](https://github.com/oxan) +- Bump PlatformIO to 5.2.4 and zeroconf to 0.37.0 [esphome#3007](https://github.com/esphome/esphome/pull/3007) by [@oxan](https://github.com/oxan) +- Offset bugfix in Modbus Text Sensor [esphome#3006](https://github.com/esphome/esphome/pull/3006) by [@stegm](https://github.com/stegm) +- Add MCP47A1 DAC output [esphome#3014](https://github.com/esphome/esphome/pull/3014) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Bump docker dependencies [esphome#3019](https://github.com/esphome/esphome/pull/3019) by [@OttoWinter](https://github.com/OttoWinter) +- Fix register ranges in modbus controller [esphome#2981](https://github.com/esphome/esphome/pull/2981) by [@stegm](https://github.com/stegm) +- Add restore_mode to output switch [esphome#3016](https://github.com/esphome/esphome/pull/3016) by [@joshuaspence](https://github.com/joshuaspence) +- Add turn_on/off trigger to slow_pwm [esphome#2921](https://github.com/esphome/esphome/pull/2921) by [@martgras](https://github.com/martgras) +- Convert is_callable to a backport of std::is_invocable [esphome#3023](https://github.com/esphome/esphome/pull/3023) by [@oxan](https://github.com/oxan) +- Create new kalman_combinator component [esphome#2965](https://github.com/esphome/esphome/pull/2965) by [@Cat-Ion](https://github.com/Cat-Ion) (new-integration) +- New Midea IR component, improvements and fixes [esphome#2847](https://github.com/esphome/esphome/pull/2847) by [@dudanov](https://github.com/dudanov) (new-integration) +- Extend esp32_camera with requester to improve performance [esphome#2813](https://github.com/esphome/esphome/pull/2813) by [@ayufan](https://github.com/ayufan) +- MCP3204 4-channel 12-bit ADC component [esphome#2895](https://github.com/esphome/esphome/pull/2895) by [@rsumner](https://github.com/rsumner) (new-integration) +- Adding sdm_meter ability to report total power [esphome#2959](https://github.com/esphome/esphome/pull/2959) by [@MiKuBB](https://github.com/MiKuBB) +- [Modbus_controller] Fix binary sensor lambda [esphome#3020](https://github.com/esphome/esphome/pull/3020) by [@martgras](https://github.com/martgras) +- Clean-up random helper functions [esphome#3022](https://github.com/esphome/esphome/pull/3022) by [@oxan](https://github.com/oxan) +- Fix display picture for nextion display [esphome#3018](https://github.com/esphome/esphome/pull/3018) by [@lhoracek](https://github.com/lhoracek) +- Fix heatpumpir codegen min/max temperatures [esphome#3025](https://github.com/esphome/esphome/pull/3025) by [@jeffborg](https://github.com/jeffborg) +- Add an action for pzemac to reset the total energy [esphome#2480](https://github.com/esphome/esphome/pull/2480) by [@nuttytree](https://github.com/nuttytree) +- Nexa 433MHz RF protocol [esphome#2037](https://github.com/esphome/esphome/pull/2037) by [@GruffyPuffy](https://github.com/GruffyPuffy) +- Deprecate virtual methods to set entity properties [esphome#3021](https://github.com/esphome/esphome/pull/3021) by [@oxan](https://github.com/oxan) +- Run post scripts for factory binaries for flashing [esphome#3003](https://github.com/esphome/esphome/pull/3003) by [@jesserockz](https://github.com/jesserockz) +- Add cd74hc4067 multiplexer [esphome#2431](https://github.com/esphome/esphome/pull/2431) by [@asoehlke](https://github.com/asoehlke) (new-integration) +- Native ESP32 CAN support [esphome#1629](https://github.com/esphome/esphome/pull/1629) by [@Sympatron](https://github.com/Sympatron) (new-integration) +- [Modbus_controller] Fix duplicate cmd check [esphome#3031](https://github.com/esphome/esphome/pull/3031) by [@martgras](https://github.com/martgras) +- Introduce big- and little-endian integer types [esphome#2997](https://github.com/esphome/esphome/pull/2997) by [@oxan](https://github.com/oxan) +- Generate basic config for esphome-web devices [esphome#3036](https://github.com/esphome/esphome/pull/3036) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20220113.1 [esphome#3038](https://github.com/esphome/esphome/pull/3038) by [@jesserockz](https://github.com/jesserockz) +- Add factory to download name [esphome#3040](https://github.com/esphome/esphome/pull/3040) by [@balloob](https://github.com/balloob) +- Bump dashboard to 20220113.2 [esphome#3041](https://github.com/esphome/esphome/pull/3041) by [@balloob](https://github.com/balloob) +- Disable caching for binary download [esphome#3054](https://github.com/esphome/esphome/pull/3054) by [@lutzky](https://github.com/lutzky) +- Rename post_build scripts to fix codeowners script [esphome#3057](https://github.com/esphome/esphome/pull/3057) by [@oxan](https://github.com/oxan) +- Remove deprecated attribute from virtual entity methods [esphome#3056](https://github.com/esphome/esphome/pull/3056) by [@oxan](https://github.com/oxan) +- Add number setting to web_server/rest_api [esphome#3055](https://github.com/esphome/esphome/pull/3055) by [@jesserockz](https://github.com/jesserockz) +- bump dashboard to 20220116.0 [esphome#3061](https://github.com/esphome/esphome/pull/3061) by [@balloob](https://github.com/balloob) +- [modbus_controller] add missing skip_updates [esphome#3063](https://github.com/esphome/esphome/pull/3063) by [@martgras](https://github.com/martgras) +- Fail hard if no random bytes available for encryption [esphome#3067](https://github.com/esphome/esphome/pull/3067) by [@oxan](https://github.com/oxan) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.10.0.mdx b/src/content/docs/changelog/2022.10.0.mdx new file mode 100644 index 0000000000..12b699af6b --- /dev/null +++ b/src/content/docs/changelog/2022.10.0.mdx @@ -0,0 +1,100 @@ +--- +description: "Changelog for ESPHome 2022.10.0." +title: "ESPHome 2022.10.0 - 19th October 2022" +pagefind: false +slug: "changelog/2022.10.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +This month we have been busy upgrading the Bluetooth Proxy support for Home Assistant. +This meant there are many PRs awaiting reviews for new components that were unable to be +reviewed and merged in time. We will be trying to pack the next release. + +## Python Version 3.9 + +ESPHome now requires Python 3.9 or newer. This is taken care of if you use the Home Assistant addon +or docker image. If using pip, you will need to upgrade your Python version manually before ESPHome will +upgrade. + +## BLE Client Sensors + +Due to adding a new RSSI sensor to the `ble_client` sensor platform, a new `type` configuration variable. +You will get a validation error when you try to install and you have not added a `type` to your +existing configurations. + +## XPT2046 Touchscreen + +The `xpt2046` touchscreen component has been updated to be a platform of `touchscreen` instead of a +top level component. This requires a small change to your configuration, see +[Xpt2046](/components/touchscreen/xpt2046/) for the new way to configure. + +{/* markdownlint-disable MD013 */} + +## Release 2022.10.1 - October 26 + +- Update bluetooth proxy limit as soon as connection requested [esphome#3935](https://github.com/esphome/esphome/pull/3935) by [@jesserockz](https://github.com/jesserockz) +- Add water & precipitation_intensity sensor device classes [esphome#3940](https://github.com/esphome/esphome/pull/3940) by [@frenck](https://github.com/frenck) +- Fixed touch release issue using the interrupt pin [esphome#3925](https://github.com/esphome/esphome/pull/3925) by [@nielsnl68](https://github.com/nielsnl68) +- Add wind_speed sensor device class [esphome#3941](https://github.com/esphome/esphome/pull/3941) by [@frenck](https://github.com/frenck) + +## Release 2022.10.2 - November 1 + +- Fix bluetooth_proxy not connecting [esphome#3967](https://github.com/esphome/esphome/pull/3967) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### Breaking Changes + +- Thermostat remove deprecated config [esphome#3643](https://github.com/esphome/esphome/pull/3643) by [@MrMDavidson](https://github.com/MrMDavidson) (breaking-change) +- Bump python min to 3.9 [esphome#3871](https://github.com/esphome/esphome/pull/3871) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Refactor xpt2046 to be a touchscreen platform [esphome#3793](https://github.com/esphome/esphome/pull/3793) by [@nielsnl68](https://github.com/nielsnl68) (breaking-change) +- Add ble RSSI sensor for connected devices [esphome#3860](https://github.com/esphome/esphome/pull/3860) by [@RoboMagus](https://github.com/RoboMagus) (breaking-change) + +### Beta Changes + +- fix never calling preset change trigger [esphome#3864](https://github.com/esphome/esphome/pull/3864) by [@glmnet](https://github.com/glmnet) +- Modbus QWORD fix [esphome#3856](https://github.com/esphome/esphome/pull/3856) by [@dudanov](https://github.com/dudanov) +- Send true and not RSSI in ble_presence [esphome#3904](https://github.com/esphome/esphome/pull/3904) by [@fjouault](https://github.com/fjouault) +- Remove address type map from bluetooth proxy [esphome#3905](https://github.com/esphome/esphome/pull/3905) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Update mcp23s17.cpp [esphome#3797](https://github.com/esphome/esphome/pull/3797) by [@pawel3410](https://github.com/pawel3410) +- Allow CORS for web_server [esphome#3819](https://github.com/esphome/esphome/pull/3819) by [@zhzhzhy](https://github.com/zhzhzhy) +- Dont fail fast on CI for docker [esphome#3832](https://github.com/esphome/esphome/pull/3832) by [@jesserockz](https://github.com/jesserockz) +- Thermostat remove deprecated config [esphome#3643](https://github.com/esphome/esphome/pull/3643) by [@MrMDavidson](https://github.com/MrMDavidson) (breaking-change) +- Add support for parsing the short local name in the tracker [esphome#3854](https://github.com/esphome/esphome/pull/3854) by [@bdraco](https://github.com/bdraco) +- Add display GPIO setup instruction for Aliexpress display [esphome#3851](https://github.com/esphome/esphome/pull/3851) by [@kbx81](https://github.com/kbx81) +- fix dump preset string type [esphome#3863](https://github.com/esphome/esphome/pull/3863) by [@glmnet](https://github.com/glmnet) +- Bump CI to python 3.9 [esphome#3869](https://github.com/esphome/esphome/pull/3869) by [@jesserockz](https://github.com/jesserockz) +- Add cg.with_local_variable [esphome#3577](https://github.com/esphome/esphome/pull/3577) by [@jpeletier](https://github.com/jpeletier) +- Fix time/automation (cron) wdt crash when time jumps ahead too much [esphome#3844](https://github.com/esphome/esphome/pull/3844) by [@jpeletier](https://github.com/jpeletier) +- Bump pyupgrade from 2.37.3 to 3.0.0 [esphome#3867](https://github.com/esphome/esphome/pull/3867) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add min_version to esphome config [esphome#3866](https://github.com/esphome/esphome/pull/3866) by [@jesserockz](https://github.com/jesserockz) +- Bump python min to 3.9 [esphome#3871](https://github.com/esphome/esphome/pull/3871) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Bump pylint from 2.15.2 to 2.15.3 [esphome#3870](https://github.com/esphome/esphome/pull/3870) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add new sensor device classes [esphome#3895](https://github.com/esphome/esphome/pull/3895) by [@jesserockz](https://github.com/jesserockz) +- Refactor xpt2046 to be a touchscreen platform [esphome#3793](https://github.com/esphome/esphome/pull/3793) by [@nielsnl68](https://github.com/nielsnl68) (breaking-change) +- Proxy friendly host url resolution for `use_address` with path. [esphome#3653](https://github.com/esphome/esphome/pull/3653) by [@RoboMagus](https://github.com/RoboMagus) +- Update webserver index file [esphome#3896](https://github.com/esphome/esphome/pull/3896) by [@jesserockz](https://github.com/jesserockz) +- Correctly set ble_write UUIDs based on their lengths. [esphome#3885](https://github.com/esphome/esphome/pull/3885) by [@RoboMagus](https://github.com/RoboMagus) +- Fix default unit for ble_rssi sensor [esphome#3874](https://github.com/esphome/esphome/pull/3874) by [@RoboMagus](https://github.com/RoboMagus) +- Exposing coordinates from touchscreen binary sensor [esphome#3891](https://github.com/esphome/esphome/pull/3891) by [@gpambrozio](https://github.com/gpambrozio) +- Fix type annotation on `extract_registry_entry_config` [esphome#3623](https://github.com/esphome/esphome/pull/3623) by [@quentinmit](https://github.com/quentinmit) +- Add ble RSSI sensor for connected devices [esphome#3860](https://github.com/esphome/esphome/pull/3860) by [@RoboMagus](https://github.com/RoboMagus) (breaking-change) +- Fix pulse_meter filter logic [esphome#3321](https://github.com/esphome/esphome/pull/3321) by [@cstaahl](https://github.com/cstaahl) +- Add support for ZHLT01 heatpump IR protocol [esphome#3655](https://github.com/esphome/esphome/pull/3655) by [@cfeenstra1024](https://github.com/cfeenstra1024) +- Send GATT error events to HA [esphome#3884](https://github.com/esphome/esphome/pull/3884) by [@jesserockz](https://github.com/jesserockz) +- Do not require CS pin for ST7789V [esphome#3888](https://github.com/esphome/esphome/pull/3888) by [@definitio](https://github.com/definitio) +- fix never calling preset change trigger [esphome#3864](https://github.com/esphome/esphome/pull/3864) by [@glmnet](https://github.com/glmnet) +- Modbus QWORD fix [esphome#3856](https://github.com/esphome/esphome/pull/3856) by [@dudanov](https://github.com/dudanov) +- Send true and not RSSI in ble_presence [esphome#3904](https://github.com/esphome/esphome/pull/3904) by [@fjouault](https://github.com/fjouault) +- Remove address type map from bluetooth proxy [esphome#3905](https://github.com/esphome/esphome/pull/3905) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.11.0.mdx b/src/content/docs/changelog/2022.11.0.mdx new file mode 100644 index 0000000000..5a4500bbd8 --- /dev/null +++ b/src/content/docs/changelog/2022.11.0.mdx @@ -0,0 +1,230 @@ +--- +description: "Changelog for ESPHome 2022.11.0." +title: "ESPHome 2022.11.0 - 16th November 2022" +pagefind: false +slug: "changelog/2022.11.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Raspberry Pi Pico-W + +What can I say... I (Jesse) started working on making ESPHome run on the original Raspberry Pi +Pico one random weekend just for fun with no real intention of taking it further myself. +Little did I know there would be a Raspberry Pi Pico-W released earlier this year which sparked +up interest in continuing that PR and almost fully implementing RP2040 and the Pico-W as +a supported platform in ESPHome. + +There are things that have not been tested, and most likely things that will not work, so +please [create or search for an issue](https://github.com/esphome/esphome/issues) if this is the case. + +Looking forward to seeing peoples projects built on these boards running ESPHome. + +## Script Parameters + +Thanks [@jimtng](https://github.com/jimtng) for taking the time to implement a feature requested by many people over time. +Parameters on scripts are now a thing. + +```yaml +script: + - id: push_button + parameters: + button: int + then: + - logger.log: + format: "Button %d pressed" + args: [ button ] + +on_...: + - script.execute: + id: push_button + button: 1 + +on_...: + - script.execute: + id: push_button + button: 2 +``` + +## LCD Menu + +Another great feature added this release is the LCD Menu. This allows a user to build a simple (or complex) +menu system on an lcd display within ESPHome YAML, with support for switches, numbers, selects etc. +Thanks [@numo68](https://github.com/numo68). + +## Preserving User WiFi Credentials + +If you purchase a device, or install ESPHome on a device that does not have Wi-Fi credentials pre-configured from YAML, +ESPHome will now preserve any credentials entered via the [Captive Portal](/components/captive_portal/), +[Improv Serial](/components/improv_serial/) or [Esp32 Improv](/components/esp32_improv/) components after an OTA +update of the firmeware is done. It is possible they can survive flashing via serial, but only if the flash was +not erased first, which it is in the case of using ESPHome to flash. + +Products that use [ESP Web Tools](https://esphome.github.io/esp-web-tools) are able to specify in the manifest +that the flash should not be erased when installing the firmware and this is a way to provide updates for a device +that was sold. + +## Running ESPHome on lower powered machines + +People have noticed that trying to compile their projects on machine such as the Raspberry Pi 3 would crash either +the whole machine or the ESPHome add-on, or Home Assistant. This is due to having less RAM and CPU power available +to run all of the things at the same time. A new config option has been added as per the example below that should +help to allow compiling on machines such as Raspberry Pi 3. By default ESPHome tries to compile using all of the +processor cores, and this allows you to limit it to a lower amount. + +```yaml +esphome: + ... + compile_process_limit: 1 +``` + +{/* markdownlint-disable MD013 */} + +## Release 2022.11.1 - November 17 + +- Support ADC on RP2040 [esphome#4040](https://github.com/esphome/esphome/pull/4040) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.11.2 - November 23 + +- Fix rp2040 pwm to use pico-sdk, not mbed [esphome#4059](https://github.com/esphome/esphome/pull/4059) by [@jesserockz](https://github.com/jesserockz) +- Update web_server index [esphome#4060](https://github.com/esphome/esphome/pull/4060) by [@jesserockz](https://github.com/jesserockz) +- rp2040_pwm frequency is per pair of pins [esphome#4061](https://github.com/esphome/esphome/pull/4061) by [@jesserockz](https://github.com/jesserockz) +- Avoid 128bit uuid loop for 16/32 bit uuids [esphome#4068](https://github.com/esphome/esphome/pull/4068) by [@bdraco](https://github.com/bdraco) +- Avoid creating a new espbt::ESPBTUUID each loop when registering for notify [esphome#4069](https://github.com/esphome/esphome/pull/4069) by [@bdraco](https://github.com/bdraco) + +## Release 2022.11.3 - November 24 + +- fix missing library [esphome#4051](https://github.com/esphome/esphome/pull/4051) by [@ssieb](https://github.com/ssieb) +- Fix units for refresh: never [esphome#4048](https://github.com/esphome/esphome/pull/4048) by [@bkaufx](https://github.com/bkaufx) +- Don't convert climate temperature step [esphome#4082](https://github.com/esphome/esphome/pull/4082) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.11.4 - December 1 + +- current-based cover fix copy paste mistake [esphome#4124](https://github.com/esphome/esphome/pull/4124) by [@jesserockz](https://github.com/jesserockz) +- Dashboard fix relative url after login [esphome#4103](https://github.com/esphome/esphome/pull/4103) by [@ngraziano](https://github.com/ngraziano) +- Fix queuing scripts not compiling [esphome#4077](https://github.com/esphome/esphome/pull/4077) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.11.5 - December 6 + +- Fix board pin alias lookup [esphome#4147](https://github.com/esphome/esphome/pull/4147) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- Allow preserving WiFi credentials entered with captive_portal [esphome#3813](https://github.com/esphome/esphome/pull/3813) by [@kuba2k2](https://github.com/kuba2k2) (new-feature) + +### New Components + +- Add support for wl-134 [esphome#3569](https://github.com/esphome/esphome/pull/3569) by [@hobbypunk90](https://github.com/hobbypunk90) (new-integration) +- New platform ethernet_info from component text_sensor [esphome#3811](https://github.com/esphome/esphome/pull/3811) by [@gtjadsonsantos](https://github.com/gtjadsonsantos) (new-integration) +- Implementation for Atlas Scientific Peristaltic Pump [esphome#3528](https://github.com/esphome/esphome/pull/3528) by [@carlos-sarmiento](https://github.com/carlos-sarmiento) (new-integration) +- Add adc128s102 sensor [esphome#3822](https://github.com/esphome/esphome/pull/3822) by [@DeerMaximum](https://github.com/DeerMaximum) (new-integration) +- Added component Daikin BRC to support ceiling cassette heatpumps [esphome#3743](https://github.com/esphome/esphome/pull/3743) by [@hagak](https://github.com/hagak) (new-integration) +- Initial Support for RP2040 platform [esphome#3284](https://github.com/esphome/esphome/pull/3284) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Implement a simple LCD menu [esphome#3406](https://github.com/esphome/esphome/pull/3406) by [@numo68](https://github.com/numo68) (new-integration) + +### Breaking Changes + +- Don't Use Base Network Manual IP for WiFi AP [esphome#3902](https://github.com/esphome/esphome/pull/3902) by [@bkaufx](https://github.com/bkaufx) (breaking-change) + +### Beta Changes + +- Update set-output to use new GITHUB_OUTPUT [esphome#4008](https://github.com/esphome/esphome/pull/4008) by [@jesserockz](https://github.com/jesserockz) +- Add cover toggle support to current based cover [esphome#3950](https://github.com/esphome/esphome/pull/3950) by [@maringeph](https://github.com/maringeph) +- Add option for dashboard command to only generate the project and supporting files [esphome#3981](https://github.com/esphome/esphome/pull/3981) by [@jesserockz](https://github.com/jesserockz) +- Fix local webserver based on esphome/esphome-webserver#17 [esphome#3958](https://github.com/esphome/esphome/pull/3958) by [@RoboMagus](https://github.com/RoboMagus) +- fix to_lower filter [esphome#4015](https://github.com/esphome/esphome/pull/4015) by [@ssieb](https://github.com/ssieb) +- Mark webserver and captive portal as not available on rp2040 [esphome#4023](https://github.com/esphome/esphome/pull/4023) by [@jesserockz](https://github.com/jesserockz) +- Fix time components on rp2040 [esphome#4024](https://github.com/esphome/esphome/pull/4024) by [@jesserockz](https://github.com/jesserockz) +- Mark mqtt as unavailable on rp2040 [esphome#4025](https://github.com/esphome/esphome/pull/4025) by [@jesserockz](https://github.com/jesserockz) +- Update_interval less that 1 second in QMC5883L integration [esphome#4031](https://github.com/esphome/esphome/pull/4031) by [@2mikrobi](https://github.com/2mikrobi) +- Always save user wifi credentials if non in config [esphome#4036](https://github.com/esphome/esphome/pull/4036) by [@jesserockz](https://github.com/jesserockz) +- bump nginx-light 1.18.0-6.1+deb11u2 to 1.18.0-6.1+deb11u3 [esphome#4034](https://github.com/esphome/esphome/pull/4034) by [@johnmoxley](https://github.com/johnmoxley) + +### All changes + +- Update the ibeacon code [esphome#3859](https://github.com/esphome/esphome/pull/3859) by [@fhriley](https://github.com/fhriley) +- Don't Use Base Network Manual IP for WiFi AP [esphome#3902](https://github.com/esphome/esphome/pull/3902) by [@bkaufx](https://github.com/bkaufx) (breaking-change) +- Allow preserving WiFi credentials entered with captive_portal [esphome#3813](https://github.com/esphome/esphome/pull/3813) by [@kuba2k2](https://github.com/kuba2k2) (new-feature) +- Add support for wl-134 [esphome#3569](https://github.com/esphome/esphome/pull/3569) by [@hobbypunk90](https://github.com/hobbypunk90) (new-integration) +- New platform ethernet_info from component text_sensor [esphome#3811](https://github.com/esphome/esphome/pull/3811) by [@gtjadsonsantos](https://github.com/gtjadsonsantos) (new-integration) +- Implementation for Atlas Scientific Peristaltic Pump [esphome#3528](https://github.com/esphome/esphome/pull/3528) by [@carlos-sarmiento](https://github.com/carlos-sarmiento) (new-integration) +- Add adc128s102 sensor [esphome#3822](https://github.com/esphome/esphome/pull/3822) by [@DeerMaximum](https://github.com/DeerMaximum) (new-integration) +- Added component Daikin BRC to support ceiling cassette heatpumps [esphome#3743](https://github.com/esphome/esphome/pull/3743) by [@hagak](https://github.com/hagak) (new-integration) +- Bump platformio from 6.0.2 to 6.1.4 [esphome#3711](https://github.com/esphome/esphome/pull/3711) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add API interface to request a complete device config as JSON. [esphome#3911](https://github.com/esphome/esphome/pull/3911) by [@RoboMagus](https://github.com/RoboMagus) +- Initial Support for RP2040 platform [esphome#3284](https://github.com/esphome/esphome/pull/3284) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Bump esphome-dashboard to 20221020.0 [esphome#3920](https://github.com/esphome/esphome/pull/3920) by [@jesserockz](https://github.com/jesserockz) +- Fix missing dependencies for heatpumpir [esphome#3933](https://github.com/esphome/esphome/pull/3933) by [@jesserockz](https://github.com/jesserockz) +- Update the PR template [esphome#3934](https://github.com/esphome/esphome/pull/3934) by [@jesserockz](https://github.com/jesserockz) +- Fix error with require_framework_version and rp2040 [esphome#3923](https://github.com/esphome/esphome/pull/3923) by [@jesserockz](https://github.com/jesserockz) +- Make mDNS on rp2040 work [esphome#3936](https://github.com/esphome/esphome/pull/3936) by [@jesserockz](https://github.com/jesserockz) +- Send manufacturer name via API [esphome#3938](https://github.com/esphome/esphome/pull/3938) by [@jesserockz](https://github.com/jesserockz) +- Update base platformio board for rp2040 [esphome#3937](https://github.com/esphome/esphome/pull/3937) by [@jesserockz](https://github.com/jesserockz) +- Implement different random for rp2040 [esphome#3939](https://github.com/esphome/esphome/pull/3939) by [@jesserockz](https://github.com/jesserockz) +- add proper device class to uptime [esphome#3928](https://github.com/esphome/esphome/pull/3928) by [@nagyrobi](https://github.com/nagyrobi) +- Show local mac when scanning wifi [esphome#3635](https://github.com/esphome/esphome/pull/3635) by [@cvwillegen](https://github.com/cvwillegen) +- Prefix devcontainer image with ghcr.io [esphome#3942](https://github.com/esphome/esphome/pull/3942) by [@jesserockz](https://github.com/jesserockz) +- Implement InterruptLock for RP2040 [esphome#3945](https://github.com/esphome/esphome/pull/3945) by [@jesserockz](https://github.com/jesserockz) +- Implement RP2040 preferences [esphome#3946](https://github.com/esphome/esphome/pull/3946) by [@jesserockz](https://github.com/jesserockz) +- Fix filesystem size for RP2040 OTA [esphome#3947](https://github.com/esphome/esphome/pull/3947) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome/Improv to 1.2.3 [esphome#3948](https://github.com/esphome/esphome/pull/3948) by [@jesserockz](https://github.com/jesserockz) +- Add core config option to limit compile process count [esphome#3952](https://github.com/esphome/esphome/pull/3952) by [@jesserockz](https://github.com/jesserockz) +- Some RP2040 wifi changes for AP mode [esphome#3953](https://github.com/esphome/esphome/pull/3953) by [@jesserockz](https://github.com/jesserockz) +- Update rp2040 to latest framework release from GitHub [esphome#3954](https://github.com/esphome/esphome/pull/3954) by [@jesserockz](https://github.com/jesserockz) +- [SM300D2] Reduce log severity for successful reads [esphome#3955](https://github.com/esphome/esphome/pull/3955) by [@pauln](https://github.com/pauln) +- Fix imports for rp2040 with no wifi [esphome#3956](https://github.com/esphome/esphome/pull/3956) by [@jesserockz](https://github.com/jesserockz) +- Allow using LED pin on rpi pico-w [esphome#3957](https://github.com/esphome/esphome/pull/3957) by [@jesserockz](https://github.com/jesserockz) +- Fix RP2040 SPISettings [esphome#3960](https://github.com/esphome/esphome/pull/3960) by [@jesserockz](https://github.com/jesserockz) +- Make some minor changes to I²C so rp2040 works [esphome#3959](https://github.com/esphome/esphome/pull/3959) by [@jesserockz](https://github.com/jesserockz) +- Bump tornado from 6.1 to 6.2 [esphome#3620](https://github.com/esphome/esphome/pull/3620) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-cov from 3.0.0 to 4.0.0 [esphome#3922](https://github.com/esphome/esphome/pull/3922) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Remove gitpod [esphome#3964](https://github.com/esphome/esphome/pull/3964) by [@balloob](https://github.com/balloob) +- Bump pyupgrade from 3.0.0 to 3.2.0 [esphome#3973](https://github.com/esphome/esphome/pull/3973) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.1.3 to 7.2.0 [esphome#3966](https://github.com/esphome/esphome/pull/3966) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/stale from 5 to 6 [esphome#3841](https://github.com/esphome/esphome/pull/3841) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.15.3 to 2.15.5 [esphome#3978](https://github.com/esphome/esphome/pull/3978) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-mock from 3.8.2 to 3.10.0 [esphome#3877](https://github.com/esphome/esphome/pull/3877) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow multiple bluetooth proxy connections [esphome#3971](https://github.com/esphome/esphome/pull/3971) by [@jesserockz](https://github.com/jesserockz) +- Always use gh releases in base platformio file for rp2040 [esphome#3988](https://github.com/esphome/esphome/pull/3988) by [@jesserockz](https://github.com/jesserockz) +- Allow the use of multiple RDM6300 devices [esphome#3989](https://github.com/esphome/esphome/pull/3989) by [@mbardeen](https://github.com/mbardeen) +- Bump aioesphomeapi from 10.13.0 to 11.4.2 [esphome#3987](https://github.com/esphome/esphome/pull/3987) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- rp2040: Set watchdog to reboot properly [esphome#3991](https://github.com/esphome/esphome/pull/3991) by [@jesserockz](https://github.com/jesserockz) +- RP2040 uart support [esphome#3990](https://github.com/esphome/esphome/pull/3990) by [@jesserockz](https://github.com/jesserockz) +- add uart number to LOGCONFIG [esphome#3996](https://github.com/esphome/esphome/pull/3996) by [@tomaszduda23](https://github.com/tomaszduda23) +- Implement a simple LCD menu [esphome#3406](https://github.com/esphome/esphome/pull/3406) by [@numo68](https://github.com/numo68) (new-integration) +- Lint updates [esphome#3992](https://github.com/esphome/esphome/pull/3992) by [@jesserockz](https://github.com/jesserockz) +- Bump zeroconf from 0.39.1 to 0.39.4 [esphome#3979](https://github.com/esphome/esphome/pull/3979) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 22.8.0 to 22.10.0 [esphome#3986](https://github.com/esphome/esphome/pull/3986) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Skip validation of defined pins [esphome#3999](https://github.com/esphome/esphome/pull/3999) by [@jenscski](https://github.com/jenscski) +- Bump pytest-asyncio from 0.19.0 to 0.20.1 [esphome#4003](https://github.com/esphome/esphome/pull/4003) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 11.4.2 to 11.4.3 [esphome#4002](https://github.com/esphome/esphome/pull/4002) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump platformio from 6.1.4 to 6.1.5 [esphome#4004](https://github.com/esphome/esphome/pull/4004) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Enable calibration, callbacks and custom commands for EZO sensors [esphome#3910](https://github.com/esphome/esphome/pull/3910) by [@gvdhoven](https://github.com/gvdhoven) +- Bump esphome-dashboard to 20221109.0 [esphome#4006](https://github.com/esphome/esphome/pull/4006) by [@jesserockz](https://github.com/jesserockz) +- Add support for parameters in scripts [esphome#3538](https://github.com/esphome/esphome/pull/3538) by [@jimtng](https://github.com/jimtng) +- Update set-output to use new GITHUB_OUTPUT [esphome#4008](https://github.com/esphome/esphome/pull/4008) by [@jesserockz](https://github.com/jesserockz) +- Add cover toggle support to current based cover [esphome#3950](https://github.com/esphome/esphome/pull/3950) by [@maringeph](https://github.com/maringeph) +- Add option for dashboard command to only generate the project and supporting files [esphome#3981](https://github.com/esphome/esphome/pull/3981) by [@jesserockz](https://github.com/jesserockz) +- Fix local webserver based on esphome/esphome-webserver#17 [esphome#3958](https://github.com/esphome/esphome/pull/3958) by [@RoboMagus](https://github.com/RoboMagus) +- fix to_lower filter [esphome#4015](https://github.com/esphome/esphome/pull/4015) by [@ssieb](https://github.com/ssieb) +- Mark webserver and captive portal as not available on rp2040 [esphome#4023](https://github.com/esphome/esphome/pull/4023) by [@jesserockz](https://github.com/jesserockz) +- Fix time components on rp2040 [esphome#4024](https://github.com/esphome/esphome/pull/4024) by [@jesserockz](https://github.com/jesserockz) +- Mark mqtt as unavailable on rp2040 [esphome#4025](https://github.com/esphome/esphome/pull/4025) by [@jesserockz](https://github.com/jesserockz) +- Update_interval less that 1 second in QMC5883L integration [esphome#4031](https://github.com/esphome/esphome/pull/4031) by [@2mikrobi](https://github.com/2mikrobi) +- Always save user wifi credentials if non in config [esphome#4036](https://github.com/esphome/esphome/pull/4036) by [@jesserockz](https://github.com/jesserockz) +- bump nginx-light 1.18.0-6.1+deb11u2 to 1.18.0-6.1+deb11u3 [esphome#4034](https://github.com/esphome/esphome/pull/4034) by [@johnmoxley](https://github.com/johnmoxley) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.12.0.mdx b/src/content/docs/changelog/2022.12.0.mdx new file mode 100644 index 0000000000..804e5fd0d6 --- /dev/null +++ b/src/content/docs/changelog/2022.12.0.mdx @@ -0,0 +1,213 @@ +--- +description: "Changelog for ESPHome 2022.12.0." +title: "ESPHome 2022.12.0 - 14th December 2022" +pagefind: false +slug: "changelog/2022.12.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +The festive holidays are coming early and bring you an ESPHome release 1 week earlier than normal. +This release does not bring a bunch of new components like most releases, but instead the focus +has been on upgrading the core Arduino and ESP-IDF versions used for the ESP32 based devices. + +## Ethernet + +Because these core upgrade have aligned the version of ESP-IDF under the hood, `ethernet` +is now able to be used when specifying ESP-IDF as your framework of choice. + +## Bluetooth Proxy + +The Bluetooth Proxy has also had a whole lot of work done by [@bdraco](https://github.com/bdraco) under the hood to +improve the stability, speed and reliability between Home Assistant and the bluetooth devices +that get proxied through. Along with some of these bluetooth changes is a change to the +underlying flash partition table that ESPHome uses. OTA will work, but to fully take advantage +of the performance increases for bluetooth, it is best to at least one serial flash with ESPHome +2022.12.0 or later. + +## Container images + +> [!NOTE] +> This breaking change only affects you if you use docker containers directly and specify the suffix +> in your image. + +2022.12.6 changes the way the container images are built and published. This is due to something +breaking somewhere that we could not explain. It has to do with the `docker manifest` command +which has been around for a while but always been marked as `experimental` so we cannot really +complain. + +From now on there will be no builds with tags for the `-armv7` / `-amd64` / `aarch64` suffixes, +but the main images (`ghcr.io/esphome/esphome:` ) will be multi-arch capable and work on the +3 supported architectures. + +{/* markdownlint-disable MD013 */} + +## Release 2022.12.1 - December 16 + +- Support non-multiarch toolchains on 32-bit ARM [esphome#4191](https://github.com/esphome/esphome/pull/4191) by [@agners](https://github.com/agners) +- Mark ESP32-S2 as not having Bluetooth [esphome#4194](https://github.com/esphome/esphome/pull/4194) by [@jesserockz](https://github.com/jesserockz) +- Fix i2s_audio media_player compiling for esp32-s2 [esphome#4195](https://github.com/esphome/esphome/pull/4195) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.12.2 - December 20 + +- Fix import_full_config for adoption configs [esphome#4197](https://github.com/esphome/esphome/pull/4197) by [@jesserockz](https://github.com/jesserockz) +- Handle zero padding anywhere in the combined adv data [esphome#4208](https://github.com/esphome/esphome/pull/4208) by [@bdraco](https://github.com/bdraco) + +## Release 2022.12.3 - December 20 + +- Fix ESP32 GPIO when using INPUT PULLUP mode [esphome#4213](https://github.com/esphome/esphome/pull/4213) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.12.4 - January 20 + +- Fix gpio pin mode for ISR pins [esphome#4216](https://github.com/esphome/esphome/pull/4216) by [@jesserockz](https://github.com/jesserockz) +- Always send the MTU request for BLE v3 cached connections [esphome#4322](https://github.com/esphome/esphome/pull/4322) by [@bdraco](https://github.com/bdraco) + +## Release 2022.12.5 - January 23 + +- Bump nano version in lint docker image [esphome#4218](https://github.com/esphome/esphome/pull/4218) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.12.6 - January 24 + +- Move from docker manifest command to buildx with platforms [esphome#4320](https://github.com/esphome/esphome/pull/4320) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +## Release 2022.12.7 - January 26 + +- Add "content" to deploy-ha-addon-repo dispatch [esphome#4349](https://github.com/esphome/esphome/pull/4349) by [@ludeeus](https://github.com/ludeeus) +- fix stepper jump back with small steps [esphome#4339](https://github.com/esphome/esphome/pull/4339) by [@0xDRRB](https://github.com/0xDRRB) +- rename esp32 CAN to TWAI, so it compiles again [esphome#4334](https://github.com/esphome/esphome/pull/4334) by [@designer2k2](https://github.com/designer2k2) +- Fix BME280 initialization before wifi setup [esphome#4190](https://github.com/esphome/esphome/pull/4190) by [@pxe-la](https://github.com/pxe-la) +- Add a soft reset in setup() for bmp280 [esphome#4329](https://github.com/esphome/esphome/pull/4329) by [@melyux](https://github.com/melyux) + +## Release 2022.12.8 - January 27 + +- Upgrades add-on base image to 6.2.0 [esphome#4310](https://github.com/esphome/esphome/pull/4310) by [@frenck](https://github.com/frenck) +- Migrate old-style S6 scripts to s6-rc.d [esphome#4311](https://github.com/esphome/esphome/pull/4311) by [@frenck](https://github.com/frenck) +- Refactor NGINX configuration of Home Assistant Add-on [esphome#4312](https://github.com/esphome/esphome/pull/4312) by [@frenck](https://github.com/frenck) +- Add Home Assistant integration discovery [esphome#4328](https://github.com/esphome/esphome/pull/4328) by [@frenck](https://github.com/frenck) + +## Full list of changes + +### New Features + +- PID Climate - deadband and output sampling [esphome#3254](https://github.com/esphome/esphome/pull/3254) by [@patrickcollins12](https://github.com/patrickcollins12) (new-feature) + +### New Components + +- Add sn74hc165 input shift register [esphome#4151](https://github.com/esphome/esphome/pull/4151) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- Update esp32 arduino and platform versions [esphome#3564](https://github.com/esphome/esphome/pull/3564) by [@jesserockz](https://github.com/jesserockz) (notable-change) (breaking-change) + +### Beta Changes + +- Fix ble parsing with zero padded advertisements [esphome#4162](https://github.com/esphome/esphome/pull/4162) by [@jesserockz](https://github.com/jesserockz) +- Increase watchdog timeout when starting OTA [esphome#4172](https://github.com/esphome/esphome/pull/4172) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20221213.0 [esphome#4176](https://github.com/esphome/esphome/pull/4176) by [@jesserockz](https://github.com/jesserockz) +- Remove internal pin restriction from cd74hc4067 [esphome#4179](https://github.com/esphome/esphome/pull/4179) by [@jesserockz](https://github.com/jesserockz) +- Speed up bluetooth proxy connections when using esp-idf [esphome#4171](https://github.com/esphome/esphome/pull/4171) by [@bdraco](https://github.com/bdraco) (notable-change) +- Remove warnings when falling through switch cases on purpose [esphome#4181](https://github.com/esphome/esphome/pull/4181) by [@jesserockz](https://github.com/jesserockz) +- Revert camera config change for esp-idf [esphome#4182](https://github.com/esphome/esphome/pull/4182) by [@jesserockz](https://github.com/jesserockz) + +### Notable Changes + +- Update esp32 arduino and platform versions [esphome#3564](https://github.com/esphome/esphome/pull/3564) by [@jesserockz](https://github.com/jesserockz) (notable-change) (breaking-change) +- Update ESP-IDF and platform version [esphome#3565](https://github.com/esphome/esphome/pull/3565) by [@jesserockz](https://github.com/jesserockz) (notable-change) +- Speed up bluetooth proxy connections when using esp-idf [esphome#4171](https://github.com/esphome/esphome/pull/4171) by [@bdraco](https://github.com/bdraco) (notable-change) + +### All changes + +- Bump colorama from 0.4.5 to 0.4.6 [esphome#4010](https://github.com/esphome/esphome/pull/4010) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump frenck/action-yamllint from 1.3.0 to 1.3.1 [esphome#4011](https://github.com/esphome/esphome/pull/4011) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- add two new icons [esphome#3963](https://github.com/esphome/esphome/pull/3963) by [@nagyrobi](https://github.com/nagyrobi) +- Move CONF_INTERRUPT_PIN to const.py [esphome#4014](https://github.com/esphome/esphome/pull/4014) by [@jesserockz](https://github.com/jesserockz) +- Bump pyupgrade from 3.2.0 to 3.2.2 [esphome#4017](https://github.com/esphome/esphome/pull/4017) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add reset_reason text sensor to debug component [esphome#3814](https://github.com/esphome/esphome/pull/3814) by [@kuba2k2](https://github.com/kuba2k2) +- remove unused variable last_save in total_daily_energy [esphome#4039](https://github.com/esphome/esphome/pull/4039) by [@bkaufx](https://github.com/bkaufx) +- Bump base image versions to latest [esphome#4016](https://github.com/esphome/esphome/pull/4016) by [@jesserockz](https://github.com/jesserockz) +- Add number device class support [esphome#4042](https://github.com/esphome/esphome/pull/4042) by [@frenck](https://github.com/frenck) +- Update esp32 arduino and platform versions [esphome#3564](https://github.com/esphome/esphome/pull/3564) by [@jesserockz](https://github.com/jesserockz) (notable-change) (breaking-change) +- Update esp32 boards list [esphome#4056](https://github.com/esphome/esphome/pull/4056) by [@jesserockz](https://github.com/jesserockz) +- Add Lolin S2 Mini board [esphome#3264](https://github.com/esphome/esphome/pull/3264) by [@jhamhader](https://github.com/jhamhader) +- Add pin aliases for upesy boards [esphome#3794](https://github.com/esphome/esphome/pull/3794) by [@uPesy](https://github.com/uPesy) +- Bump pylint from 2.15.5 to 2.15.6 [esphome#4058](https://github.com/esphome/esphome/pull/4058) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- fix display_menu recursive schema gen [esphome#4045](https://github.com/esphome/esphome/pull/4045) by [@glmnet](https://github.com/glmnet) +- Remove manual handling of ethernet power pin [esphome#4062](https://github.com/esphome/esphome/pull/4062) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 11.4.3 to 12.0.0 [esphome#4070](https://github.com/esphome/esphome/pull/4070) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update ESP-IDF and platform version [esphome#3565](https://github.com/esphome/esphome/pull/3565) by [@jesserockz](https://github.com/jesserockz) (notable-change) +- Always use brackets around single log macros [esphome#4072](https://github.com/esphome/esphome/pull/4072) by [@jesserockz](https://github.com/jesserockz) +- Midea ir templatable code [esphome#4053](https://github.com/esphome/esphome/pull/4053) by [@reidprojects](https://github.com/reidprojects) +- Boards: Adafruit QT Py ESP32 Pico/C3/S2 [esphome#4064](https://github.com/esphome/esphome/pull/4064) by [@jenscski](https://github.com/jenscski) +- Dont set esp32 pin drive strength unless pin is set for output [esphome#4075](https://github.com/esphome/esphome/pull/4075) by [@jesserockz](https://github.com/jesserockz) +- Don't allow debug component if you don't have at least debug logging level [esphome#4076](https://github.com/esphome/esphome/pull/4076) by [@jesserockz](https://github.com/jesserockz) +- Remove a bunch of unnecessary pylint disabling [esphome#4079](https://github.com/esphome/esphome/pull/4079) by [@jesserockz](https://github.com/jesserockz) +- Update ESP32-audioI2S library [esphome#4073](https://github.com/esphome/esphome/pull/4073) by [@jesserockz](https://github.com/jesserockz) +- Add vector includes [esphome#4080](https://github.com/esphome/esphome/pull/4080) by [@jesserockz](https://github.com/jesserockz) +- Allow manually specifying binary file to OTA [esphome#4054](https://github.com/esphome/esphome/pull/4054) by [@jesserockz](https://github.com/jesserockz) +- Fix regressed 'esphome run' [esphome#4094](https://github.com/esphome/esphome/pull/4094) by [@mmakaay](https://github.com/mmakaay) +- Make parse_characteristics and parse_descriptors lazy to reduce memory pressure [esphome#4063](https://github.com/esphome/esphome/pull/4063) by [@bdraco](https://github.com/bdraco) +- Speed up BLE connections [esphome#4093](https://github.com/esphome/esphome/pull/4093) by [@bdraco](https://github.com/bdraco) +- Align BLE service logging [esphome#4095](https://github.com/esphome/esphome/pull/4095) by [@bdraco](https://github.com/bdraco) +- Suppress logging unhandled ESP_BLE_AD_TYPE_INT_RANGE [esphome#4096](https://github.com/esphome/esphome/pull/4096) by [@bdraco](https://github.com/bdraco) +- Make sure all BLE address strings are uppercase [esphome#4097](https://github.com/esphome/esphome/pull/4097) by [@bdraco](https://github.com/bdraco) +- Add logging for BLE connection slots [esphome#4098](https://github.com/esphome/esphome/pull/4098) by [@bdraco](https://github.com/bdraco) +- Fix registering for gatt notify when characteristic only support indicate [esphome#4092](https://github.com/esphome/esphome/pull/4092) by [@bdraco](https://github.com/bdraco) +- Fix descriptors not being deleted [esphome#4104](https://github.com/esphome/esphome/pull/4104) by [@bdraco](https://github.com/bdraco) +- Improve reliability of bluetooth active connections [esphome#4049](https://github.com/esphome/esphome/pull/4049) by [@bdraco](https://github.com/bdraco) +- Always use generated api options from aioesphomeapi [esphome#4116](https://github.com/esphome/esphome/pull/4116) by [@jesserockz](https://github.com/jesserockz) +- Fix bluetooth_gatt_write_descriptor never getting a response [esphome#4112](https://github.com/esphome/esphome/pull/4112) by [@bdraco](https://github.com/bdraco) +- Combine the scanner failure check so we only stop the scanner once [esphome#4111](https://github.com/esphome/esphome/pull/4111) by [@bdraco](https://github.com/bdraco) +- Reduce memory needed to send the services list [esphome#4110](https://github.com/esphome/esphome/pull/4110) by [@bdraco](https://github.com/bdraco) +- Avoid parsing characteristics and descriptors to reduce memory pressure [esphome#4109](https://github.com/esphome/esphome/pull/4109) by [@bdraco](https://github.com/bdraco) +- Send device address type alongside ble advertisements [esphome#4115](https://github.com/esphome/esphome/pull/4115) by [@jesserockz](https://github.com/jesserockz) +- Remove uuid lookups from BLE read/write/notify characteristics [esphome#4102](https://github.com/esphome/esphome/pull/4102) by [@bdraco](https://github.com/bdraco) +- Active BLE connection v3 [esphome#4113](https://github.com/esphome/esphome/pull/4113) by [@bdraco](https://github.com/bdraco) +- preprocess out proto_enum_to_string if not needed [esphome#4119](https://github.com/esphome/esphome/pull/4119) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 12.0.0 to 12.2.0 [esphome#4120](https://github.com/esphome/esphome/pull/4120) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Avoid parsing services with v3 connections without cache [esphome#4117](https://github.com/esphome/esphome/pull/4117) by [@bdraco](https://github.com/bdraco) +- FIX: Unnecessary flash writes by ModbusSwitch component [esphome#3648](https://github.com/esphome/esphome/pull/3648) by [@jpeletier](https://github.com/jpeletier) +- Speed up uuid parsing when fetching the service list [esphome#4121](https://github.com/esphome/esphome/pull/4121) by [@bdraco](https://github.com/bdraco) +- modbus_switch: honor switch:restore_mode [esphome#4122](https://github.com/esphome/esphome/pull/4122) by [@jpeletier](https://github.com/jpeletier) +- PID Climate - deadband and output sampling [esphome#3254](https://github.com/esphome/esphome/pull/3254) by [@patrickcollins12](https://github.com/patrickcollins12) (new-feature) +- Allow auto setting of ble client id if there is only 1 in config [esphome#4125](https://github.com/esphome/esphome/pull/4125) by [@jesserockz](https://github.com/jesserockz) +- fix RESTORE_INVERTED switch:restore_mode [esphome#4129](https://github.com/esphome/esphome/pull/4129) by [@jpeletier](https://github.com/jpeletier) +- Bump pylint from 2.15.6 to 2.15.7 [esphome#4127](https://github.com/esphome/esphome/pull/4127) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow global setting of compile process limit [esphome#4081](https://github.com/esphome/esphome/pull/4081) by [@jesserockz](https://github.com/jesserockz) +- Bump flake8 from 5.0.4 to 6.0.0 [esphome#4084](https://github.com/esphome/esphome/pull/4084) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump arduino pico and update wifi methods [esphome#4144](https://github.com/esphome/esphome/pull/4144) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 12.2.0 to 12.2.1 [esphome#4133](https://github.com/esphome/esphome/pull/4133) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esptool from 3.3.1 to 4.4 [esphome#4071](https://github.com/esphome/esphome/pull/4071) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix mismatched flake8 version in pre-commit [esphome#4145](https://github.com/esphome/esphome/pull/4145) by [@jesserockz](https://github.com/jesserockz) +- Detect BLE stack unrecoverable state [esphome#4128](https://github.com/esphome/esphome/pull/4128) by [@bdraco](https://github.com/bdraco) +- Bump pylint from 2.15.7 to 2.15.8 [esphome#4148](https://github.com/esphome/esphome/pull/4148) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix crash with bluetooth tracker and esp-idf [esphome#4140](https://github.com/esphome/esphome/pull/4140) by [@bdraco](https://github.com/bdraco) +- Use ENTITY_CATEGORY_CONFIG for sprinkler config switches. [esphome#4141](https://github.com/esphome/esphome/pull/4141) by [@schinckel](https://github.com/schinckel) +- fix switch initialization [esphome#4153](https://github.com/esphome/esphome/pull/4153) by [@ssieb](https://github.com/ssieb) +- Change 4 chip limit on sn74hc595 to 256 [esphome#4108](https://github.com/esphome/esphome/pull/4108) by [@jesserockz](https://github.com/jesserockz) +- Add reports fahrenheit to tuya climate [esphome#4032](https://github.com/esphome/esphome/pull/4032) by [@jesserockz](https://github.com/jesserockz) +- Allow dashboard import to pull complete file from github [esphome#3982](https://github.com/esphome/esphome/pull/3982) by [@jesserockz](https://github.com/jesserockz) +- Invalid config for waveshare models with no full_update_every [esphome#4066](https://github.com/esphome/esphome/pull/4066) by [@Nizzle](https://github.com/Nizzle) +- Add sn74hc165 input shift register [esphome#4151](https://github.com/esphome/esphome/pull/4151) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Fixed deep sleep for ESP32C3 [esphome#4143](https://github.com/esphome/esphome/pull/4143) by [@pistifonok](https://github.com/pistifonok) +- ESP32 IDF: Override toolchain-esp32ulp with espressifs own published version [esphome#4155](https://github.com/esphome/esphome/pull/4155) by [@jesserockz](https://github.com/jesserockz) +- Add API for dashboard to get boards list [esphome#4154](https://github.com/esphome/esphome/pull/4154) by [@jesserockz](https://github.com/jesserockz) +- Bump pytest-asyncio from 0.20.1 to 0.20.2 [esphome#4019](https://github.com/esphome/esphome/pull/4019) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.2.2 to 3.3.0 [esphome#4137](https://github.com/esphome/esphome/pull/4137) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump dessant/lock-threads from 3 to 4 [esphome#4150](https://github.com/esphome/esphome/pull/4150) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 12.2.1 to 13.0.1 [esphome#4149](https://github.com/esphome/esphome/pull/4149) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esphome-dashboard to 20221207.0 [esphome#4156](https://github.com/esphome/esphome/pull/4156) by [@jesserockz](https://github.com/jesserockz) +- Fix ble parsing with zero padded advertisements [esphome#4162](https://github.com/esphome/esphome/pull/4162) by [@jesserockz](https://github.com/jesserockz) +- Increase watchdog timeout when starting OTA [esphome#4172](https://github.com/esphome/esphome/pull/4172) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20221213.0 [esphome#4176](https://github.com/esphome/esphome/pull/4176) by [@jesserockz](https://github.com/jesserockz) +- Remove internal pin restriction from cd74hc4067 [esphome#4179](https://github.com/esphome/esphome/pull/4179) by [@jesserockz](https://github.com/jesserockz) +- Speed up bluetooth proxy connections when using esp-idf [esphome#4171](https://github.com/esphome/esphome/pull/4171) by [@bdraco](https://github.com/bdraco) (notable-change) +- Remove warnings when falling through switch cases on purpose [esphome#4181](https://github.com/esphome/esphome/pull/4181) by [@jesserockz](https://github.com/jesserockz) +- Revert camera config change for esp-idf [esphome#4182](https://github.com/esphome/esphome/pull/4182) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.2.0.mdx b/src/content/docs/changelog/2022.2.0.mdx new file mode 100644 index 0000000000..7720a00fdf --- /dev/null +++ b/src/content/docs/changelog/2022.2.0.mdx @@ -0,0 +1,261 @@ +--- +description: "Changelog for ESPHome 2022.2.0." +title: "ESPHome 2022.2.0 - 16th February 2022" +pagefind: false +slug: "changelog/2022.2.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Home Assistant Addon Repo + +In a future Supervisor version, the [ESPHome Home Assistant addon repository](https://github.com/esphome/home-assistant-addon) +will be added by default to new Home Assistant installations. +We have decided that we will deprecate the ESPHome addon inside the +[Community Addons](https://github.com/hassio-addons/repository) +and everyone should move to the ESPHome repo. It is safe to delete the +ESPHome addon as your configuration YAML files are stored in the Home +Assistant configuration folder. + +You can add the ESPHome addon here: + +[![Open your Home Assistant instance and show the dashboard of an add-on.][my-badge]][my-url] + +[my-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg +[my-url]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon + +## Locks + +Lock Entities have been added to ESPHome. These will be available after Home Assistant 2022.3 is released. +Thanks [@kbickar](https://github.com/kbickar). + +## ESP8266 recommended framework bump + +The recommended (and therefore default) version of Arduino for ESP8266 devices +has been bumped to 3.0.2 from 2.7.4. This brings many underlying changes to the +ESP8266 SDK. The 3.0.2 release has been out since July 2021 but ESPHome just +did not bump the default until now. + +## FastLED + +Due to the Arduino bump, the FastLED library suffers issues when running on ESP8266 +on Arduino 3+. Because of this there is now a restriction on the `fastled_clockless` +and `fastled_spi` components to only allow using them if you change the arduino version +back to 2.7.4 or lower. This will be in place until the library can update and fix the +issues. See the [documentation](/components/light/fastled/) for information on how +to continue using the lights. + +## Improv serial Wi-Fi scan + +Improv serial has been updated to be able to start a Wi-Fi scan and send the results +back to the improv client so the user can select the network SSID instead of having to type it in. + +## Tuya Multi multi-datapoint + +Some work was done on the tuya component to support devices that send all of their +datapoints in a single message. This allows for more devices to be supported and should +not cause issues with existing devices but please create an issue if it does. + +## Debug Sensors Breaking change + +The sub-sensors of the `debug` have been moved to their respective component platforms. +Please see the [documentation](/components/debug/) page for the new way to configure them. + +{/* markdownlint-disable MD013 */} + +## Release 2022.2.1 - February 17 + +- Fix missed ARDUINO_VERSION_CODE to USE_ARDUINO_VERSION_CODE changes [esphome#3206](https://github.com/esphome/esphome/pull/3206) by [@stewiem2000](https://github.com/stewiem2000) + +## Release 2022.2.2 - February 18 + +- Set entity-category to diagnostic for debug component [esphome#3209](https://github.com/esphome/esphome/pull/3209) by [@stewiem2000](https://github.com/stewiem2000) +- Fix platformio docker version mismstch [esphome#3215](https://github.com/esphome/esphome/pull/3215) by [@OttoWinter](https://github.com/OttoWinter) +- Add LONG LONG flag for arduinojson [esphome#3212](https://github.com/esphome/esphome/pull/3212) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.2.3 - February 18 + +- Bump platformio from 5.2.4 to 5.2.5 [esphome#3188](https://github.com/esphome/esphome/pull/3188) by [@dependabot[bot]](https://github.com/dependabot[bot]) + +## Release 2022.2.4 - February 21 + +- Publish NAN when dallas conversion failed [esphome#3227](https://github.com/esphome/esphome/pull/3227) by [@OttoWinter](https://github.com/OttoWinter) +- Fix ESP8266 climate memaccess warning [esphome#3226](https://github.com/esphome/esphome/pull/3226) by [@OttoWinter](https://github.com/OttoWinter) +- Improve ESP8266 iram usage [esphome#3223](https://github.com/esphome/esphome/pull/3223) by [@OttoWinter](https://github.com/OttoWinter) +- ESP32-C3 deep sleep fix [esphome#3066](https://github.com/esphome/esphome/pull/3066) by [@Troublebrewing](https://github.com/Troublebrewing) +- Fix lilygo touchscreen rotation [esphome#3221](https://github.com/esphome/esphome/pull/3221) by [@jesserockz](https://github.com/jesserockz) +- Fix fatal erroring in addon startup script [esphome#3244](https://github.com/esphome/esphome/pull/3244) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.2.5 - February 23 + +- Respect ESPHOME_USE_SUBPROCESS in esp32 post_build script [esphome#3246](https://github.com/esphome/esphome/pull/3246) by [@mweinelt](https://github.com/mweinelt) +- Fix regression caused by TSL2591 auto gain [esphome#3249](https://github.com/esphome/esphome/pull/3249) by [@Azimath](https://github.com/Azimath) + +## Release 2022.2.6 - March 2 + +- Only get free memory size from internal [esphome#3259](https://github.com/esphome/esphome/pull/3259) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- Add initial_run to regular lambda light effect [esphome#3059](https://github.com/esphome/esphome/pull/3059) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Support simple transparent pngs for display [esphome#3035](https://github.com/esphome/esphome/pull/3035) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Add restore_mode to fan component [esphome#3051](https://github.com/esphome/esphome/pull/3051) by [@joshuaspence](https://github.com/joshuaspence) (new-feature) +- slow_pwm: allow to restart a cycle on state change [esphome#3004](https://github.com/esphome/esphome/pull/3004) by [@Chupaka](https://github.com/Chupaka) (new-feature) +- Command retain option for MQTT component [esphome#3078](https://github.com/esphome/esphome/pull/3078) by [@VitaliyKurokhtin](https://github.com/VitaliyKurokhtin) (new-feature) +- Esp32cam full control [esphome#3090](https://github.com/esphome/esphome/pull/3090) by [@dav-id-org](https://github.com/dav-id-org) (new-feature) +- Configurable HTTP redirect following [esphome#3100](https://github.com/esphome/esphome/pull/3100) by [@guillempages](https://github.com/guillempages) (new-feature) +- Add IPv6 for esp-idf framework [esphome#2953](https://github.com/esphome/esphome/pull/2953) by [@HeMan](https://github.com/HeMan) (new-feature) +- Improv_serial scan and send wifi networks list [esphome#3116](https://github.com/esphome/esphome/pull/3116) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Inkplate 6 PLUS [esphome#3013](https://github.com/esphome/esphome/pull/3013) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Add ektf2232 touchscreen support [esphome#3027](https://github.com/esphome/esphome/pull/3027) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Wake-on-LAN button [esphome#3030](https://github.com/esphome/esphome/pull/3030) by [@willwill2will54](https://github.com/willwill2will54) (new-integration) +- Implement output button [esphome#3109](https://github.com/esphome/esphome/pull/3109) by [@oxan](https://github.com/oxan) (new-integration) +- Create base touchscreen component and refactor ektf2232 [esphome#3083](https://github.com/esphome/esphome/pull/3083) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add qr code support for displays [esphome#2952](https://github.com/esphome/esphome/pull/2952) by [@wjtje](https://github.com/wjtje) (new-integration) +- Add Xiaomi MHOC303 sensor e-ink clock [esphome#3115](https://github.com/esphome/esphome/pull/3115) by [@drug123](https://github.com/drug123) (new-integration) +- Add new Lock core component [esphome#2958](https://github.com/esphome/esphome/pull/2958) by [@kbickar](https://github.com/kbickar) (new-integration) +- Added RadonEye RD200 Component [esphome#3119](https://github.com/esphome/esphome/pull/3119) by [@jeffeb3](https://github.com/jeffeb3) (new-integration) +- MLX90393 three-axis magnetometer [esphome#2770](https://github.com/esphome/esphome/pull/2770) by [@functionpointer](https://github.com/functionpointer) (new-integration) +- Add Lilygo t5 4.7 Touchscreen [esphome#3084](https://github.com/esphome/esphome/pull/3084) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add Select for modbus [esphome#3032](https://github.com/esphome/esphome/pull/3032) by [@stegm](https://github.com/stegm) (new-integration) +- Add max9611 High Side Current Shunt ADC [esphome#2705](https://github.com/esphome/esphome/pull/2705) by [@mckaymatthew](https://github.com/mckaymatthew) (new-integration) + +### Breaking Changes + +- [TCS34725] remove duplicated endian conversion [esphome#3037](https://github.com/esphome/esphome/pull/3037) by [@martgras](https://github.com/martgras) (breaking-change) +- TSL2591 automatic gain control [esphome#3071](https://github.com/esphome/esphome/pull/3071) by [@Azimath](https://github.com/Azimath) (breaking-change) +- [debug] Refactor debug sensors to use the normal sensor model. [esphome#3162](https://github.com/esphome/esphome/pull/3162) by [@mknjc](https://github.com/mknjc) (breaking-change) +- Allow framework version validator to be maximum version [esphome#3197](https://github.com/esphome/esphome/pull/3197) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Notable Changes + +- ESP8266 Set recommended framework to 3.0.2 [esphome#2606](https://github.com/esphome/esphome/pull/2606) by [@OttoWinter](https://github.com/OttoWinter) (notable-change) +- Handle Tuya multi-datapoint messages [esphome#3159](https://github.com/esphome/esphome/pull/3159) by [@ssieb](https://github.com/ssieb) (notable-change) + +### Beta Changes + +- Enable mDNS during OTA safe mode [esphome#3146](https://github.com/esphome/esphome/pull/3146) by [@OttoWinter](https://github.com/OttoWinter) +- Try fix canbus config validation [esphome#3173](https://github.com/esphome/esphome/pull/3173) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 10.8.1 to 10.8.2 [esphome#3182](https://github.com/esphome/esphome/pull/3182) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Clamp rotary_encoder restored value to min and max [esphome#3184](https://github.com/esphome/esphome/pull/3184) by [@jesserockz](https://github.com/jesserockz) +- Make generating combined binary output verbose [esphome#3127](https://github.com/esphome/esphome/pull/3127) by [@OttoWinter](https://github.com/OttoWinter) +- Allow framework version validator to be maximum version [esphome#3197](https://github.com/esphome/esphome/pull/3197) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix strlcpy() uses to make long SSIDs and passwords work [esphome#3199](https://github.com/esphome/esphome/pull/3199) by [@mmakaay](https://github.com/mmakaay) +- Update HA addon token [esphome#3200](https://github.com/esphome/esphome/pull/3200) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Bump pytest-asyncio from 0.16.0 to 0.17.0 [esphome#3047](https://github.com/esphome/esphome/pull/3047) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix argument order in gitpod config file [esphome#3058](https://github.com/esphome/esphome/pull/3058) by [@oxan](https://github.com/oxan) +- Bump pytest-asyncio from 0.17.0 to 0.17.2 [esphome#3064](https://github.com/esphome/esphome/pull/3064) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix calibration parameter for bme680 humidity calculation [esphome#3069](https://github.com/esphome/esphome/pull/3069) by [@cwitting](https://github.com/cwitting) +- Bump improv library version [esphome#3072](https://github.com/esphome/esphome/pull/3072) by [@jesserockz](https://github.com/jesserockz) +- API: Expect a name for connections [esphome#2533](https://github.com/esphome/esphome/pull/2533) by [@OttoWinter](https://github.com/OttoWinter) +- AM43: autoload "sensor" to avoid compile errors [esphome#3077](https://github.com/esphome/esphome/pull/3077) by [@buxtronix](https://github.com/buxtronix) +- Add initial_run to regular lambda light effect [esphome#3059](https://github.com/esphome/esphome/pull/3059) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Support simple transparent pngs for display [esphome#3035](https://github.com/esphome/esphome/pull/3035) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Bump aioesphomeapi from 10.6.0 to 10.8.0 [esphome#3081](https://github.com/esphome/esphome/pull/3081) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add ektf2232 touchscreen support [esphome#3027](https://github.com/esphome/esphome/pull/3027) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Implement IPv6 sockets for lwIP [esphome#3015](https://github.com/esphome/esphome/pull/3015) by [@HeMan](https://github.com/HeMan) +- Allow multiple configs for cd74hc4067 [esphome#3085](https://github.com/esphome/esphome/pull/3085) by [@jesserockz](https://github.com/jesserockz) +- Wake-on-LAN button [esphome#3030](https://github.com/esphome/esphome/pull/3030) by [@willwill2will54](https://github.com/willwill2will54) (new-integration) +- Add restore_mode to fan component [esphome#3051](https://github.com/esphome/esphome/pull/3051) by [@joshuaspence](https://github.com/joshuaspence) (new-feature) +- slow_pwm: allow to restart a cycle on state change [esphome#3004](https://github.com/esphome/esphome/pull/3004) by [@Chupaka](https://github.com/Chupaka) (new-feature) +- Enable readability-const-return-type check [esphome#3099](https://github.com/esphome/esphome/pull/3099) by [@oxan](https://github.com/oxan) +- Enable readability-qualified-auto check [esphome#3095](https://github.com/esphome/esphome/pull/3095) by [@oxan](https://github.com/oxan) +- Enable readability-redundant-member-init check [esphome#3097](https://github.com/esphome/esphome/pull/3097) by [@oxan](https://github.com/oxan) +- Enable readability-named-parameter check [esphome#3098](https://github.com/esphome/esphome/pull/3098) by [@oxan](https://github.com/oxan) +- Enable readability-redundant-access-specifiers check [esphome#3096](https://github.com/esphome/esphome/pull/3096) by [@oxan](https://github.com/oxan) +- Command retain option for MQTT component [esphome#3078](https://github.com/esphome/esphome/pull/3078) by [@VitaliyKurokhtin](https://github.com/VitaliyKurokhtin) (new-feature) +- Refactor fan platform to resemble climate/cover platforms [esphome#2848](https://github.com/esphome/esphome/pull/2848) by [@oxan](https://github.com/oxan) +- Rename WEBSERVER_PORT define to USE_WEBSERVER_PORT [esphome#3102](https://github.com/esphome/esphome/pull/3102) by [@oxan](https://github.com/oxan) +- Fix path to extra_scripts in platformio.ini [esphome#3093](https://github.com/esphome/esphome/pull/3093) by [@oxan](https://github.com/oxan) +- Generate ARDUINO_VERSION_CODE in Python code [esphome#3101](https://github.com/esphome/esphome/pull/3101) by [@oxan](https://github.com/oxan) +- Add cv.require_esphome_version helper [esphome#3103](https://github.com/esphome/esphome/pull/3103) by [@oxan](https://github.com/oxan) +- Bump aioesphomeapi from 10.8.0 to 10.8.1 [esphome#3110](https://github.com/esphome/esphome/pull/3110) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Remove unused polling_component_schema from modbus number [esphome#3108](https://github.com/esphome/esphome/pull/3108) by [@martgras](https://github.com/martgras) +- Force braces around multi-line statements [esphome#3094](https://github.com/esphome/esphome/pull/3094) by [@oxan](https://github.com/oxan) +- Make CallbackManager invocable [esphome#3089](https://github.com/esphome/esphome/pull/3089) by [@oxan](https://github.com/oxan) +- Implement output button [esphome#3109](https://github.com/esphome/esphome/pull/3109) by [@oxan](https://github.com/oxan) (new-integration) +- Add increment_day function to ESPTime [esphome#2955](https://github.com/esphome/esphome/pull/2955) by [@RebbePod](https://github.com/RebbePod) +- [TCS34725] remove duplicated endian conversion [esphome#3037](https://github.com/esphome/esphome/pull/3037) by [@martgras](https://github.com/martgras) (breaking-change) +- Perform merges when substituting dict keys [esphome#3062](https://github.com/esphome/esphome/pull/3062) by [@joshuaspence](https://github.com/joshuaspence) +- Esp32cam full control [esphome#3090](https://github.com/esphome/esphome/pull/3090) by [@dav-id-org](https://github.com/dav-id-org) (new-feature) +- Fix config merging with null [esphome#3113](https://github.com/esphome/esphome/pull/3113) by [@joshuaspence](https://github.com/joshuaspence) +- Configurable HTTP redirect following [esphome#3100](https://github.com/esphome/esphome/pull/3100) by [@guillempages](https://github.com/guillempages) (new-feature) +- Add IPv6 for esp-idf framework [esphome#2953](https://github.com/esphome/esphome/pull/2953) by [@HeMan](https://github.com/HeMan) (new-feature) +- Add support for additional colors on GROW R503 [esphome#3087](https://github.com/esphome/esphome/pull/3087) by [@Zebble](https://github.com/Zebble) +- Add Heap Sensors - free/max block/fragmentation [esphome#1578](https://github.com/esphome/esphome/pull/1578) by [@micronen](https://github.com/micronen) +- Create base touchscreen component and refactor ektf2232 [esphome#3083](https://github.com/esphome/esphome/pull/3083) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add qr code support for displays [esphome#2952](https://github.com/esphome/esphome/pull/2952) by [@wjtje](https://github.com/wjtje) (new-integration) +- ESP8266 Set recommended framework to 3.0.2 [esphome#2606](https://github.com/esphome/esphome/pull/2606) by [@OttoWinter](https://github.com/OttoWinter) (notable-change) +- TSL2591 automatic gain control [esphome#3071](https://github.com/esphome/esphome/pull/3071) by [@Azimath](https://github.com/Azimath) (breaking-change) +- set adc width to 13 bits for esp32-s2 [esphome#3117](https://github.com/esphome/esphome/pull/3117) by [@martgras](https://github.com/martgras) +- Fix lint for TSL2591 [esphome#3118](https://github.com/esphome/esphome/pull/3118) by [@OttoWinter](https://github.com/OttoWinter) +- Add Xiaomi MHOC303 sensor e-ink clock [esphome#3115](https://github.com/esphome/esphome/pull/3115) by [@drug123](https://github.com/drug123) (new-integration) +- Logically group and document helper functions [esphome#3112](https://github.com/esphome/esphome/pull/3112) by [@oxan](https://github.com/oxan) +- Add support for Waveshare 7.5in-bv2 [esphome#3121](https://github.com/esphome/esphome/pull/3121) by [@Eriner](https://github.com/Eriner) +- Bump docker dependencies [esphome#3131](https://github.com/esphome/esphome/pull/3131) by [@OttoWinter](https://github.com/OttoWinter) +- Bump pytest-mock from 3.6.1 to 3.7.0 [esphome#3128](https://github.com/esphome/esphome/pull/3128) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Improv_serial scan and send wifi networks list [esphome#3116](https://github.com/esphome/esphome/pull/3116) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Disable platformio ldf for build [esphome#3130](https://github.com/esphome/esphome/pull/3130) by [@OttoWinter](https://github.com/OttoWinter) +- Bump esp-idf framework version from 4.3.0 to 4.3.2 [esphome#3120](https://github.com/esphome/esphome/pull/3120) by [@OttoWinter](https://github.com/OttoWinter) +- Bump pre-commit flake8 from 3.8.4 to 4.0.1 [esphome#3149](https://github.com/esphome/esphome/pull/3149) by [@OttoWinter](https://github.com/OttoWinter) +- Bump black from 21.12b0 to 22.1.0 [esphome#3147](https://github.com/esphome/esphome/pull/3147) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix ESP32C3 toolchain requires stdarg import in helpers [esphome#3151](https://github.com/esphome/esphome/pull/3151) by [@OttoWinter](https://github.com/OttoWinter) +- Add new Lock core component [esphome#2958](https://github.com/esphome/esphome/pull/2958) by [@kbickar](https://github.com/kbickar) (new-integration) +- Add device class support to Switch [esphome#3012](https://github.com/esphome/esphome/pull/3012) by [@frenck](https://github.com/frenck) +- Handle Tuya multi-datapoint messages [esphome#3159](https://github.com/esphome/esphome/pull/3159) by [@ssieb](https://github.com/ssieb) (notable-change) +- Bump improv library to 1.2.1 [esphome#3160](https://github.com/esphome/esphome/pull/3160) by [@jesserockz](https://github.com/jesserockz) +- Fix copy_file_if_changed src permissions copied too [esphome#3161](https://github.com/esphome/esphome/pull/3161) by [@OttoWinter](https://github.com/OttoWinter) +- [debug] Refactor debug sensors to use the normal sensor model. [esphome#3162](https://github.com/esphome/esphome/pull/3162) by [@mknjc](https://github.com/mknjc) (breaking-change) +- Added RadonEye RD200 Component [esphome#3119](https://github.com/esphome/esphome/pull/3119) by [@jeffeb3](https://github.com/jeffeb3) (new-integration) +- Text sensor schema generator similar to sensor [esphome#3172](https://github.com/esphome/esphome/pull/3172) by [@jesserockz](https://github.com/jesserockz) +- wifi_info, reduce polling interval [esphome#3165](https://github.com/esphome/esphome/pull/3165) by [@jbergler](https://github.com/jbergler) +- MLX90393 three-axis magnetometer [esphome#2770](https://github.com/esphome/esphome/pull/2770) by [@functionpointer](https://github.com/functionpointer) (new-integration) +- Enable mDNS during OTA safe mode [esphome#3146](https://github.com/esphome/esphome/pull/3146) by [@OttoWinter](https://github.com/OttoWinter) +- Dont warn on nonnull comparisons [esphome#3123](https://github.com/esphome/esphome/pull/3123) by [@jesserockz](https://github.com/jesserockz) +- Add require response option for BLE binary output [esphome#3091](https://github.com/esphome/esphome/pull/3091) by [@AshtonKem](https://github.com/AshtonKem) +- Add Lilygo t5 4.7 Touchscreen [esphome#3084](https://github.com/esphome/esphome/pull/3084) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add Select for modbus [esphome#3032](https://github.com/esphome/esphome/pull/3032) by [@stegm](https://github.com/stegm) (new-integration) +- Add max9611 High Side Current Shunt ADC [esphome#2705](https://github.com/esphome/esphome/pull/2705) by [@mckaymatthew](https://github.com/mckaymatthew) (new-integration) +- Inkplate 6 PLUS [esphome#3013](https://github.com/esphome/esphome/pull/3013) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Implement MQTT discovery object_id generator [esphome#3114](https://github.com/esphome/esphome/pull/3114) by [@akomelj](https://github.com/akomelj) +- Fix files CI after merging [esphome#3175](https://github.com/esphome/esphome/pull/3175) by [@jesserockz](https://github.com/jesserockz) +- Try fix canbus config validation [esphome#3173](https://github.com/esphome/esphome/pull/3173) by [@jesserockz](https://github.com/jesserockz) +- Bump pytest from 6.2.5 to 7.0.0 [esphome#3163](https://github.com/esphome/esphome/pull/3163) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.17.2 to 0.18.0 [esphome#3168](https://github.com/esphome/esphome/pull/3168) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow to set manufacturer data for BLEAdvertising [esphome#3179](https://github.com/esphome/esphome/pull/3179) by [@ashald](https://github.com/ashald) +- Change most references from hassio to ha-addon [esphome#3178](https://github.com/esphome/esphome/pull/3178) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 10.8.1 to 10.8.2 [esphome#3182](https://github.com/esphome/esphome/pull/3182) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Clamp rotary_encoder restored value to min and max [esphome#3184](https://github.com/esphome/esphome/pull/3184) by [@jesserockz](https://github.com/jesserockz) +- Make generating combined binary output verbose [esphome#3127](https://github.com/esphome/esphome/pull/3127) by [@OttoWinter](https://github.com/OttoWinter) +- Allow framework version validator to be maximum version [esphome#3197](https://github.com/esphome/esphome/pull/3197) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix strlcpy() uses to make long SSIDs and passwords work [esphome#3199](https://github.com/esphome/esphome/pull/3199) by [@mmakaay](https://github.com/mmakaay) +- Update HA addon token [esphome#3200](https://github.com/esphome/esphome/pull/3200) by [@jesserockz](https://github.com/jesserockz) +- Fix missed ARDUINO_VERSION_CODE to USE_ARDUINO_VERSION_CODE changes [esphome#3206](https://github.com/esphome/esphome/pull/3206) by [@stewiem2000](https://github.com/stewiem2000) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.3.0.mdx b/src/content/docs/changelog/2022.3.0.mdx new file mode 100644 index 0000000000..7f42341004 --- /dev/null +++ b/src/content/docs/changelog/2022.3.0.mdx @@ -0,0 +1,131 @@ +--- +description: "Changelog for ESPHome 2022.3.0." +title: "ESPHome 2022.3.0 - 16th March 2022" +pagefind: false +slug: "changelog/2022.3.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Python 3.8 Minimum + +This release sets the minimum Python version to 3.8. Please upgrade your local python if you are unable +to update further. + +## Webserver + +Thanks to [@wilberforce](https://github.com/wilberforce) for doing a massive bunch of work on giving new life to the frontend of +the [webserver](/components/web_server/). + +{/* markdownlint-disable MD013 */} + +## Release 2022.3.1 - March 23 + +- Fix WDT reset during dallas search algorithm [esphome#3293](https://github.com/esphome/esphome/pull/3293) by [@wysiwyng](https://github.com/wysiwyng) +- Webserver utilize Component Iterator to not overload eventstream [esphome#3310](https://github.com/esphome/esphome/pull/3310) by [@jesserockz](https://github.com/jesserockz) +- Reserve less memory for json [esphome#3289](https://github.com/esphome/esphome/pull/3289) by [@jesserockz](https://github.com/jesserockz) +- Add small delay before setting up app in safe mode [esphome#3323](https://github.com/esphome/esphome/pull/3323) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.3.2 - March 30 + +- Actually increase request memory for json parsing [esphome#3331](https://github.com/esphome/esphome/pull/3331) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- support for waveshare 7.50in-hd-b [esphome#3239](https://github.com/esphome/esphome/pull/3239) by [@Michanord](https://github.com/Michanord) (new-feature) +- Add optional display page for touchscreen binary sensors [esphome#3247](https://github.com/esphome/esphome/pull/3247) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Analog threshold [esphome#3190](https://github.com/esphome/esphome/pull/3190) by [@ianchi](https://github.com/ianchi) (new-integration) +- Add sensor support: MAX44009 [esphome#3125](https://github.com/esphome/esphome/pull/3125) by [@berfenger](https://github.com/berfenger) (new-integration) +- Add copy integration [esphome#3241](https://github.com/esphome/esphome/pull/3241) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- Add support for MPU-6886 [esphome#3183](https://github.com/esphome/esphome/pull/3183) by [@fabaff](https://github.com/fabaff) (new-integration) +- Add device support: MCP4728 [esphome#3174](https://github.com/esphome/esphome/pull/3174) by [@berfenger](https://github.com/berfenger) (new-integration) +- Add sensor support: Honeywell ABP (SPI version) [esphome#3164](https://github.com/esphome/esphome/pull/3164) by [@RubyBailey](https://github.com/RubyBailey) (new-integration) +- Add Mopeka BLE and Mopeka Pro Check BLE Sensor [esphome#2618](https://github.com/esphome/esphome/pull/2618) by [@spbrogan](https://github.com/spbrogan) (new-integration) + +### Breaking Changes + +- Raise minimum python version to 3.8 [esphome#3176](https://github.com/esphome/esphome/pull/3176) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add class as first positional arg to sensor_schema [esphome#3216](https://github.com/esphome/esphome/pull/3216) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- BH1750 dynamically calculate options [esphome#3214](https://github.com/esphome/esphome/pull/3214) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) + +### Beta Changes + +- Add optimistic config flag to modbus select. [esphome#3267](https://github.com/esphome/esphome/pull/3267) by [@stegm](https://github.com/stegm) +- Add helper overloads for hex print 16-bit [esphome#3297](https://github.com/esphome/esphome/pull/3297) by [@jesserockz](https://github.com/jesserockz) +- Allow custom register type for modbus number [esphome#3202](https://github.com/esphome/esphome/pull/3202) by [@jesserockz](https://github.com/jesserockz) + +### Notable Changes + +- Webserver v2 [esphome#2688](https://github.com/esphome/esphome/pull/2688) by [@wilberforce](https://github.com/wilberforce) (notable-change) + +### All changes + +- Remove unused obj attribute from AssignmentExpression [esphome#3145](https://github.com/esphome/esphome/pull/3145) by [@OttoWinter](https://github.com/OttoWinter) +- Remove spurious Zeroconf instance from api client [esphome#3143](https://github.com/esphome/esphome/pull/3143) by [@OttoWinter](https://github.com/OttoWinter) +- Raise minimum python version to 3.8 [esphome#3176](https://github.com/esphome/esphome/pull/3176) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Improve dallas timing [esphome#3181](https://github.com/esphome/esphome/pull/3181) by [@OttoWinter](https://github.com/OttoWinter) +- Bump pytest-asyncio from 0.18.0 to 0.18.1 [esphome#3187](https://github.com/esphome/esphome/pull/3187) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.0.0 to 7.0.1 [esphome#3189](https://github.com/esphome/esphome/pull/3189) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- add sim800l diagnostics [esphome#3136](https://github.com/esphome/esphome/pull/3136) by [@glmnet](https://github.com/glmnet) +- Docker move deps install into base [esphome#3207](https://github.com/esphome/esphome/pull/3207) by [@OttoWinter](https://github.com/OttoWinter) +- Remove redundant name from binary_sensor constructor [esphome#3213](https://github.com/esphome/esphome/pull/3213) by [@jesserockz](https://github.com/jesserockz) +- ESP8266 early init for pins [esphome#3144](https://github.com/esphome/esphome/pull/3144) by [@OttoWinter](https://github.com/OttoWinter) +- CAN bus: read all queued messages [esphome#3194](https://github.com/esphome/esphome/pull/3194) by [@felixstorm](https://github.com/felixstorm) +- CAN bus: support bit mask for on_frame can_id [esphome#3196](https://github.com/esphome/esphome/pull/3196) by [@felixstorm](https://github.com/felixstorm) +- Simplify captive portal to compressed single page [esphome#2872](https://github.com/esphome/esphome/pull/2872) by [@wilberforce](https://github.com/wilberforce) +- HttpRequestComponent::get_string - avoid copy [esphome#2988](https://github.com/esphome/esphome/pull/2988) by [@roitagar](https://github.com/roitagar) +- Docker ha-addon switch to nginx-light [esphome#3218](https://github.com/esphome/esphome/pull/3218) by [@OttoWinter](https://github.com/OttoWinter) +- Analog threshold [esphome#3190](https://github.com/esphome/esphome/pull/3190) by [@ianchi](https://github.com/ianchi) (new-integration) +- Fix pm1006 polling component definition [esphome#3210](https://github.com/esphome/esphome/pull/3210) by [@mipa87](https://github.com/mipa87) +- Add class as first positional arg to sensor_schema [esphome#3216](https://github.com/esphome/esphome/pull/3216) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Binary Sensor codegen tidyup [esphome#3217](https://github.com/esphome/esphome/pull/3217) by [@jesserockz](https://github.com/jesserockz) +- Read all cell voltages from DalyBMS [esphome#3203](https://github.com/esphome/esphome/pull/3203) by [@zigman79](https://github.com/zigman79) +- Remote magiquest protocol [esphome#2963](https://github.com/esphome/esphome/pull/2963) by [@ImSorryButWho](https://github.com/ImSorryButWho) +- Implement text_sensor based on ble_client [esphome#3079](https://github.com/esphome/esphome/pull/3079) by [@ashald](https://github.com/ashald) +- Add sensor support: MAX44009 [esphome#3125](https://github.com/esphome/esphome/pull/3125) by [@berfenger](https://github.com/berfenger) (new-integration) +- Fix for api disconnect detection. [esphome#2909](https://github.com/esphome/esphome/pull/2909) by [@peter-valkov](https://github.com/peter-valkov) +- [miscale] Add flag to clear last impedance reading if the newly received reading only contains weight [esphome#3132](https://github.com/esphome/esphome/pull/3132) by [@mknjc](https://github.com/mknjc) +- Add ESP32 variant config validator function [esphome#3088](https://github.com/esphome/esphome/pull/3088) by [@oxan](https://github.com/oxan) +- Fix warning in test1.yaml [esphome#3228](https://github.com/esphome/esphome/pull/3228) by [@OttoWinter](https://github.com/OttoWinter) +- Lint trailing whitespace [esphome#3230](https://github.com/esphome/esphome/pull/3230) by [@OttoWinter](https://github.com/OttoWinter) +- Add ESP32C3 and ESP32S2 support to dashboard [esphome#3152](https://github.com/esphome/esphome/pull/3152) by [@OttoWinter](https://github.com/OttoWinter) +- BH1750 dynamically calculate options [esphome#3214](https://github.com/esphome/esphome/pull/3214) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- Bump esphome-dashboard from 20220209.0 to 20220219.0 [esphome#3231](https://github.com/esphome/esphome/pull/3231) by [@OttoWinter](https://github.com/OttoWinter) +- Add copy integration [esphome#3241](https://github.com/esphome/esphome/pull/3241) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- Button code cleanup [esphome#3242](https://github.com/esphome/esphome/pull/3242) by [@OttoWinter](https://github.com/OttoWinter) +- Pulse meter internal filter mode [esphome#3082](https://github.com/esphome/esphome/pull/3082) by [@cstaahl](https://github.com/cstaahl) +- Add support for MPU-6886 [esphome#3183](https://github.com/esphome/esphome/pull/3183) by [@fabaff](https://github.com/fabaff) (new-integration) +- light: add RESTORE_AND_OFF/RESTORE_AND_ON LightRestoreMode [esphome#3238](https://github.com/esphome/esphome/pull/3238) by [@Niorix](https://github.com/Niorix) +- Implement send_first_at for exponential_moving_average [esphome#3240](https://github.com/esphome/esphome/pull/3240) by [@EdJoPaTo](https://github.com/EdJoPaTo) +- Add device support: MCP4728 [esphome#3174](https://github.com/esphome/esphome/pull/3174) by [@berfenger](https://github.com/berfenger) (new-integration) +- support for waveshare 7.50in-hd-b [esphome#3239](https://github.com/esphome/esphome/pull/3239) by [@Michanord](https://github.com/Michanord) (new-feature) +- Fix template button after abstract press_action [esphome#3250](https://github.com/esphome/esphome/pull/3250) by [@jesserockz](https://github.com/jesserockz) +- Store platform as uppercase [esphome#3251](https://github.com/esphome/esphome/pull/3251) by [@jesserockz](https://github.com/jesserockz) +- Add sensor support: Honeywell ABP (SPI version) [esphome#3164](https://github.com/esphome/esphome/pull/3164) by [@RubyBailey](https://github.com/RubyBailey) (new-integration) +- Add optional display page for touchscreen binary sensors [esphome#3247](https://github.com/esphome/esphome/pull/3247) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Add Mopeka BLE and Mopeka Pro Check BLE Sensor [esphome#2618](https://github.com/esphome/esphome/pull/2618) by [@spbrogan](https://github.com/spbrogan) (new-integration) +- Remove stray define [esphome#3260](https://github.com/esphome/esphome/pull/3260) by [@jesserockz](https://github.com/jesserockz) +- Webserver v2 [esphome#2688](https://github.com/esphome/esphome/pull/2688) by [@wilberforce](https://github.com/wilberforce) (notable-change) +- Add entity_category_diagnostics to SGP30 baseline sensors [esphome#3272](https://github.com/esphome/esphome/pull/3272) by [@JasperPlant](https://github.com/JasperPlant) +- Bump esphome-dashboard to 20220309.0 [esphome#3277](https://github.com/esphome/esphome/pull/3277) by [@jesserockz](https://github.com/jesserockz) +- Add visual step/min/max for webserver climate [esphome#3275](https://github.com/esphome/esphome/pull/3275) by [@wilberforce](https://github.com/wilberforce) +- Add optimistic config flag to modbus select. [esphome#3267](https://github.com/esphome/esphome/pull/3267) by [@stegm](https://github.com/stegm) +- Add helper overloads for hex print 16-bit [esphome#3297](https://github.com/esphome/esphome/pull/3297) by [@jesserockz](https://github.com/jesserockz) +- Allow custom register type for modbus number [esphome#3202](https://github.com/esphome/esphome/pull/3202) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.4.0.mdx b/src/content/docs/changelog/2022.4.0.mdx new file mode 100644 index 0000000000..5ceaaf4355 --- /dev/null +++ b/src/content/docs/changelog/2022.4.0.mdx @@ -0,0 +1,190 @@ +--- +description: "Changelog for ESPHome 2022.4.0." +title: "ESPHome 2022.4.0 - 20th April 2022" +pagefind: false +slug: "changelog/2022.4.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Home Assistant Addon Repo + +This is a repeat from the 2022.2 release notes. + +The [ESPHome Home Assistant addon repository](https://github.com/esphome/home-assistant-addon) +is added by default to new Home Assistant installations. Because of this, we have decided that we would +deprecate the ESPHome addon inside the [Community Addons](https://github.com/hassio-addons/repository) +and everyone should move to the ESPHome repo. It is safe to delete the Community ESPHome addon as +your configuration YAML files are stored in the Home Assistant configuration folder. + +You can add the ESPHome addon here: + +[![Open your Home Assistant instance and show the dashboard of an add-on.][my-badge]][my-url] + +[my-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg +[my-url]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon + +## Python 3.8 Minimum + +A friendly reminder that 2022.3 set the minimum Python version to 3.8. +Please upgrade your local python if you are unable to update ESPHome further. +This is taken care of automatically if you are using the Home Assistant Add-on, or the +ESPHome docker container. + +## Shelly Dimmer 2 + +Support for the STM32 chip of the Shelly Dimmer has been added in this release. The component also supports +flashing custom firmware to the stm32 via ESPHome which is required to use the component. See the +[documentation](/components/light/shelly_dimmer/) for more details. + +## Google Fonts + +[@OttoWinter](https://github.com/OttoWinter) has given everyone a way to use Google Fonts in their YAML and displays without +having to manually download TTF font files. The example below will automatically download and cache the Roboto +TTF font file required so you can utilise it. See the [Font Renderer Component](/components/font#display-fonts) documentation +for more details. + +```yaml +font: + - file: "gfonts://Roboto" + id: roboto + size: 20 +``` + +## Deep sleep wakeup time + +Deep sleep for ESP32 has had a new feature added. + +```yaml +on_...: + - deep_sleep.enter: + until: "14:00:00" + time_id: ... +``` + +This will automatically calculate the time required to deep sleep to ensure that the device will +wake up at "14:00:00". The time format here is local time to match the timezone you have configured and +this requires a time component to be configured. + +## Sensors imported from Home Assistant + +In this release there is a breaking change on the sensors that are imported from homeassistant, +`platform: homeassistant`. They will now default to being internal to ESPHome and will not be re-exported back +to Home Assistant, MQTT or the web server. This change makes sense as it was just extra sensors and network traffic. +You are able to add these back as non internal by adding `internal: false` to the YAML for each of the sensors. + +## Full list of changes + +{/* markdownlint-disable MD013 */} + +### New Features + +- Allow to set user defined characters on LCD [esphome#3322](https://github.com/esphome/esphome/pull/3322) by [@numo68](https://github.com/numo68) (new-feature) +- Font allow using google fonts directly [esphome#3243](https://github.com/esphome/esphome/pull/3243) by [@OttoWinter](https://github.com/OttoWinter) (new-feature) (notable-change) +- Add mqtt for idf [esphome#2930](https://github.com/esphome/esphome/pull/2930) by [@martgras](https://github.com/martgras) (new-feature) +- Extend mcp3204 to support 8 channels (mcp3208 variant) [esphome#3332](https://github.com/esphome/esphome/pull/3332) by [@RadekHvizdos](https://github.com/RadekHvizdos) (new-feature) +- Add cover toggle support to endstop cover [esphome#3358](https://github.com/esphome/esphome/pull/3358) by [@rrooggiieerr](https://github.com/rrooggiieerr) (new-feature) +- Remote base pronto receive [esphome#2826](https://github.com/esphome/esphome/pull/2826) by [@cvwillegen](https://github.com/cvwillegen) (new-feature) +- Allow specifying deep sleep wakup clock time [esphome#3312](https://github.com/esphome/esphome/pull/3312) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Add support for QMP6988 Pressure sensor [esphome#3192](https://github.com/esphome/esphome/pull/3192) by [@andrewpc](https://github.com/andrewpc) (new-integration) +- Add integration hydreon_rgxx for rain sensors by Hydreon [esphome#2711](https://github.com/esphome/esphome/pull/2711) by [@functionpointer](https://github.com/functionpointer) (new-integration) +- Add Xiaomi RTCGQ02LM - Mi Motion Sensor 2 [esphome#3186](https://github.com/esphome/esphome/pull/3186) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add Sonoff D1 Dimmer support [esphome#2775](https://github.com/esphome/esphome/pull/2775) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) (new-integration) +- Refactor Sensirion Sensors [esphome#3374](https://github.com/esphome/esphome/pull/3374) by [@martgras](https://github.com/martgras) (new-integration) +- Add support for Shelly Dimmer 2 [esphome#2954](https://github.com/esphome/esphome/pull/2954) by [@rnauber](https://github.com/rnauber) (new-integration) + +### Breaking Changes + +- Make home_assistant imported sensors internal by default [esphome#3372](https://github.com/esphome/esphome/pull/3372) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- Actually increase request memory for json parsing [esphome#3331](https://github.com/esphome/esphome/pull/3331) by [@jesserockz](https://github.com/jesserockz) +- Actually increase request memory for json parsing [esphome#3331](https://github.com/esphome/esphome/pull/3331) by [@jesserockz](https://github.com/jesserockz) +- Changes accuracy of single cell voltage [esphome#3387](https://github.com/esphome/esphome/pull/3387) by [@matthias882](https://github.com/matthias882) +- Add support for Shelly Dimmer 2 [esphome#2954](https://github.com/esphome/esphome/pull/2954) by [@rnauber](https://github.com/rnauber) (new-integration) +- Allocate smaller amount of buffer for JSON [esphome#3384](https://github.com/esphome/esphome/pull/3384) by [@dz0ny](https://github.com/dz0ny) +- Fix power_delivered/produced_phase sensor deviceclass in DSMR [esphome#3395](https://github.com/esphome/esphome/pull/3395) by [@mvdwetering](https://github.com/mvdwetering) +- Shelly Dimmer: Delete obsolete LICENSE.txt [esphome#3394](https://github.com/esphome/esphome/pull/3394) by [@rnauber](https://github.com/rnauber) +- Dont require empty object for wifi ap with defaults [esphome#3404](https://github.com/esphome/esphome/pull/3404) by [@jesserockz](https://github.com/jesserockz) + +### Notable Changes + +- Font allow using google fonts directly [esphome#3243](https://github.com/esphome/esphome/pull/3243) by [@OttoWinter](https://github.com/OttoWinter) (new-feature) (notable-change) + +### All changes + +- Bump pytest-asyncio from 0.18.1 to 0.18.2 [esphome#3262](https://github.com/esphome/esphome/pull/3262) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.38.3 to 0.38.4 [esphome#3257](https://github.com/esphome/esphome/pull/3257) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump click from 8.0.3 to 8.0.4 [esphome#3248](https://github.com/esphome/esphome/pull/3248) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker dependencies [esphome#3281](https://github.com/esphome/esphome/pull/3281) by [@OttoWinter](https://github.com/OttoWinter) +- Fixed wrong comment [esphome#3286](https://github.com/esphome/esphome/pull/3286) by [@Rai-Rai](https://github.com/Rai-Rai) +- Add support for QMP6988 Pressure sensor [esphome#3192](https://github.com/esphome/esphome/pull/3192) by [@andrewpc](https://github.com/andrewpc) (new-integration) +- Adds support for b-parasite's v2 BLE protocol [esphome#3290](https://github.com/esphome/esphome/pull/3290) by [@rbaron](https://github.com/rbaron) +- increase delay for Ethernet module warm up Safe Mode [esphome#3326](https://github.com/esphome/esphome/pull/3326) by [@nagyrobi](https://github.com/nagyrobi) +- Bump esptool from 3.2 to 3.3 [esphome#3327](https://github.com/esphome/esphome/pull/3327) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow to set user defined characters on LCD [esphome#3322](https://github.com/esphome/esphome/pull/3322) by [@numo68](https://github.com/numo68) (new-feature) +- Font allow using google fonts directly [esphome#3243](https://github.com/esphome/esphome/pull/3243) by [@OttoWinter](https://github.com/OttoWinter) (new-feature) (notable-change) +- Actually increase request memory for json parsing [esphome#3331](https://github.com/esphome/esphome/pull/3331) by [@jesserockz](https://github.com/jesserockz) +- Actually increase request memory for json parsing [esphome#3331](https://github.com/esphome/esphome/pull/3331) by [@jesserockz](https://github.com/jesserockz) +- Change beginning of file comments to avoid creating doxygen tag for `esphome` namespace [esphome#3314](https://github.com/esphome/esphome/pull/3314) by [@e28eta](https://github.com/e28eta) +- Publish custom data when modbus number lambda fills vector [esphome#3295](https://github.com/esphome/esphome/pull/3295) by [@jesserockz](https://github.com/jesserockz) +- Define touchscreen support when in use. [esphome#3296](https://github.com/esphome/esphome/pull/3296) by [@geiseri](https://github.com/geiseri) +- New vscode schema gen [esphome#3336](https://github.com/esphome/esphome/pull/3336) by [@glmnet](https://github.com/glmnet) +- protobuf: fix incomplete 64 bits implementation [esphome#3341](https://github.com/esphome/esphome/pull/3341) by [@ianchi](https://github.com/ianchi) +- feat: support ble_client that use security w/o pin codes [esphome#3320](https://github.com/esphome/esphome/pull/3320) by [@ammmze](https://github.com/ammmze) +- Add mqtt for idf [esphome#2930](https://github.com/esphome/esphome/pull/2930) by [@martgras](https://github.com/martgras) (new-feature) +- Added a function to load custom characters in LCD display [esphome#3279](https://github.com/esphome/esphome/pull/3279) by [@andrewjswan](https://github.com/andrewjswan) +- CAN bus: support remote transmission request flag for canbus.send [esphome#3193](https://github.com/esphome/esphome/pull/3193) by [@felixstorm](https://github.com/felixstorm) +- Tm1637 binarysensor [esphome#2792](https://github.com/esphome/esphome/pull/2792) by [@mvturnho](https://github.com/mvturnho) +- Bump click from 8.0.4 to 8.1.2 [esphome#3351](https://github.com/esphome/esphome/pull/3351) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.12.2 to 2.13.4 [esphome#3348](https://github.com/esphome/esphome/pull/3348) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.18.2 to 0.18.3 [esphome#3335](https://github.com/esphome/esphome/pull/3335) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.0.1 to 7.1.1 [esphome#3313](https://github.com/esphome/esphome/pull/3313) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker dependencies [esphome#3354](https://github.com/esphome/esphome/pull/3354) by [@OttoWinter](https://github.com/OttoWinter) +- Bump voluptuous from 0.12.2 to 0.13.0 [esphome#3355](https://github.com/esphome/esphome/pull/3355) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tzlocal from 4.1 to 4.2 [esphome#3356](https://github.com/esphome/esphome/pull/3356) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 2.31.0 to 2.31.1 [esphome#3292](https://github.com/esphome/esphome/pull/3292) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 22.1.0 to 22.3.0 [esphome#3357](https://github.com/esphome/esphome/pull/3357) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow on_value_range for sensor and number to be templated [esphome#3359](https://github.com/esphome/esphome/pull/3359) by [@jesserockz](https://github.com/jesserockz) +- Add support for Electrolux heatpump and bump arduino-heatpumpir version [esphome#3353](https://github.com/esphome/esphome/pull/3353) by [@ikilledmypc](https://github.com/ikilledmypc) +- Implement newer RTU protocol of Growatt inverters [esphome#3315](https://github.com/esphome/esphome/pull/3315) by [@djwlindenaar](https://github.com/djwlindenaar) +- Add parameter to control i2c stop signal at endTransmission [esphome#3370](https://github.com/esphome/esphome/pull/3370) by [@kbickar](https://github.com/kbickar) +- Fix SHTC3 sensor detection [esphome#3365](https://github.com/esphome/esphome/pull/3365) by [@ssieb](https://github.com/ssieb) +- Extend mcp3204 to support 8 channels (mcp3208 variant) [esphome#3332](https://github.com/esphome/esphome/pull/3332) by [@RadekHvizdos](https://github.com/RadekHvizdos) (new-feature) +- Bump pyupgrade from 2.31.1 to 2.32.0 [esphome#3366](https://github.com/esphome/esphome/pull/3366) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump voluptuous from 0.13.0 to 0.13.1 [esphome#3364](https://github.com/esphome/esphome/pull/3364) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.13.4 to 2.13.5 [esphome#3363](https://github.com/esphome/esphome/pull/3363) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix HM3301 AQI int8 overflow [esphome#3361](https://github.com/esphome/esphome/pull/3361) by [@calco88](https://github.com/calco88) +- Add cover toggle support to endstop cover [esphome#3358](https://github.com/esphome/esphome/pull/3358) by [@rrooggiieerr](https://github.com/rrooggiieerr) (new-feature) +- Make home_assistant imported sensors internal by default [esphome#3372](https://github.com/esphome/esphome/pull/3372) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add integration hydreon_rgxx for rain sensors by Hydreon [esphome#2711](https://github.com/esphome/esphome/pull/2711) by [@functionpointer](https://github.com/functionpointer) (new-integration) +- Addition of Deep Sleep RTC pin definition for ESP32-S2 [esphome#3303](https://github.com/esphome/esphome/pull/3303) by [@andrewpc](https://github.com/andrewpc) +- Add Xiaomi RTCGQ02LM - Mi Motion Sensor 2 [esphome#3186](https://github.com/esphome/esphome/pull/3186) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add Sonoff D1 Dimmer support [esphome#2775](https://github.com/esphome/esphome/pull/2775) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) (new-integration) +- Remote base pronto receive [esphome#2826](https://github.com/esphome/esphome/pull/2826) by [@cvwillegen](https://github.com/cvwillegen) (new-feature) +- Use correct http defines [esphome#3378](https://github.com/esphome/esphome/pull/3378) by [@dz0ny](https://github.com/dz0ny) +- Refactor Sensirion Sensors [esphome#3374](https://github.com/esphome/esphome/pull/3374) by [@martgras](https://github.com/martgras) (new-integration) +- Fix silent config errors [esphome#3380](https://github.com/esphome/esphome/pull/3380) by [@jesserockz](https://github.com/jesserockz) +- Move PN532OnTagTrigger to nfc::NfcOnTagTrigger [esphome#3379](https://github.com/esphome/esphome/pull/3379) by [@jesserockz](https://github.com/jesserockz) +- Allow specifying deep sleep wakup clock time [esphome#3312](https://github.com/esphome/esphome/pull/3312) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Changes accuracy of single cell voltage [esphome#3387](https://github.com/esphome/esphome/pull/3387) by [@matthias882](https://github.com/matthias882) +- Add support for Shelly Dimmer 2 [esphome#2954](https://github.com/esphome/esphome/pull/2954) by [@rnauber](https://github.com/rnauber) (new-integration) +- Allocate smaller amount of buffer for JSON [esphome#3384](https://github.com/esphome/esphome/pull/3384) by [@dz0ny](https://github.com/dz0ny) +- Fix power_delivered/produced_phase sensor deviceclass in DSMR [esphome#3395](https://github.com/esphome/esphome/pull/3395) by [@mvdwetering](https://github.com/mvdwetering) +- Shelly Dimmer: Delete obsolete LICENSE.txt [esphome#3394](https://github.com/esphome/esphome/pull/3394) by [@rnauber](https://github.com/rnauber) +- Dont require empty object for wifi ap with defaults [esphome#3404](https://github.com/esphome/esphome/pull/3404) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.5.0.mdx b/src/content/docs/changelog/2022.5.0.mdx new file mode 100644 index 0000000000..182a409b74 --- /dev/null +++ b/src/content/docs/changelog/2022.5.0.mdx @@ -0,0 +1,147 @@ +--- +description: "Changelog for ESPHome 2022.5.0." +title: "ESPHome 2022.5.0 - 18th May 2022" +pagefind: false +slug: "changelog/2022.5.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Rename + +ESPHome now offers a way for people to rename their devices automatically. This is done by creating a new YAML file +with the new filename, changing the `name` inside the YAML, and then OTA uploading to the device to its +existing hostname. If all is successful, the old YAML file will be removed and you can continue configuring your +newly named device. + +This is particularly useful if you have received a pre-installed device, or are installing pre-configured ESPHome +from a website for example. + +## API Transport Encryption + +API transport encryption is now enabled by default when you create a new device in ESPHome. This will +autogenerate a random encryption key in the device YAML file +that you will need to retrieve when you attempt to add the device to Home Assistant. Simply remove the +encryption key lines from your YAML should you choose to not use encryption. + +## Select & Number changes + +The `select` component has had a bunch of new features and actions added. +`select.first`, `select.last`, `select.next`, and `select.previous`. + +Alongside these new changes were some removals of internal (but public) functions on `select` and `number` +components that might break `external_components` or `lambdas` that might have been using them. See +[esphome#3457](https://github.com/esphome/esphome/pull/3457) and [esphome#3458](https://github.com/esphome/esphome/pull/3458) for more details. + +{/* markdownlint-disable MD013 */} + +## Release 2022.5.1 - May 24 + +- Update bedjet_const.h to remove blank spaces before speed steps, fixes Unknown Error when using climate.set_fan_mode in HA [esphome#3476](https://github.com/esphome/esphome/pull/3476) by [@user897943](https://github.com/user897943) +- Add missing import to bedjet [esphome#3490](https://github.com/esphome/esphome/pull/3490) by [@jesserockz](https://github.com/jesserockz) +- esp32: fix NVS [esphome#3497](https://github.com/esphome/esphome/pull/3497) by [@martgras](https://github.com/martgras) + +## Full list of changes + +### New Components + +- Add support for Shelly Dimmer 2 [esphome#2954](https://github.com/esphome/esphome/pull/2954) by [@rnauber](https://github.com/rnauber) (new-integration) +- Add BedJet BLE climate component [esphome#2452](https://github.com/esphome/esphome/pull/2452) by [@jhansche](https://github.com/jhansche) (new-integration) +- Add support for BL0939 (Sonoff Dual R3 V2 powermeter) [esphome#3300](https://github.com/esphome/esphome/pull/3300) by [@ziceva](https://github.com/ziceva) (new-integration) +- Add ENS210 Humidity & Temperature sensor component [esphome#2942](https://github.com/esphome/esphome/pull/2942) by [@itn3rd77](https://github.com/itn3rd77) (new-integration) +- add support for Sen5x sensor series [esphome#3383](https://github.com/esphome/esphome/pull/3383) by [@martgras](https://github.com/martgras) (new-integration) +- Add SML (Smart Message Language) platform for energy meters [esphome#2396](https://github.com/esphome/esphome/pull/2396) by [@alengwenus](https://github.com/alengwenus) (new-integration) +- Delonghi Penguino PAC W120HP ir support [esphome#3124](https://github.com/esphome/esphome/pull/3124) by [@grob6000](https://github.com/grob6000) (new-integration) + +### Breaking Changes + +- Code cleanup fixes for the select component [esphome#3457](https://github.com/esphome/esphome/pull/3457) by [@mmakaay](https://github.com/mmakaay) (breaking-change) +- Code cleanup fixes for the number component [esphome#3458](https://github.com/esphome/esphome/pull/3458) by [@mmakaay](https://github.com/mmakaay) (breaking-change) + +### Beta Changes + +- Restore RealTimeClock's local TZ after epoch sync [esphome#3462](https://github.com/esphome/esphome/pull/3462) by [@mmakaay](https://github.com/mmakaay) +- Shelly dimmer: Use unique_ptr to handle the lifetime of stm32_t [esphome#3400](https://github.com/esphome/esphome/pull/3400) by [@edge90](https://github.com/edge90) +- Use heat mode for heat. Move EXT HT to custom presets. [esphome#3437](https://github.com/esphome/esphome/pull/3437) by [@jgissend10](https://github.com/jgissend10) +- Make custom_fan and custom_preset templatable as per documentation [esphome#3330](https://github.com/esphome/esphome/pull/3330) by [@MrMDavidson](https://github.com/MrMDavidson) +- Update captive portal canHandle function [esphome#3360](https://github.com/esphome/esphome/pull/3360) by [@bkaufx](https://github.com/bkaufx) +- Increase JSON buffer size on overflow [esphome#3475](https://github.com/esphome/esphome/pull/3475) by [@pyos](https://github.com/pyos) +- Mark improv_serial and ESP-IDF usb based serial on c3/s2/s3 unsupported [esphome#3477](https://github.com/esphome/esphome/pull/3477) by [@jesserockz](https://github.com/jesserockz) +- ESP32: Only save to NVS if data was changed [esphome#3479](https://github.com/esphome/esphome/pull/3479) by [@martgras](https://github.com/martgras) +- Retry Tuya init commands [esphome#3482](https://github.com/esphome/esphome/pull/3482) by [@ssieb](https://github.com/ssieb) + +### Notable Changes + +- Enable api transport encryption for new projects [esphome#3142](https://github.com/esphome/esphome/pull/3142) by [@OttoWinter](https://github.com/OttoWinter) (notable-change) + +### All changes + +- Add default object_id_generator for mqtt [esphome#3389](https://github.com/esphome/esphome/pull/3389) by [@jesserockz](https://github.com/jesserockz) +- Add BedJet BLE climate component [esphome#2452](https://github.com/esphome/esphome/pull/2452) by [@jhansche](https://github.com/jhansche) (new-integration) +- Multi conf for Teleinfo component [esphome#3401](https://github.com/esphome/esphome/pull/3401) by [@parats15](https://github.com/parats15) +- Add support for Mopeka Pro+ Residential sensor [esphome#3393](https://github.com/esphome/esphome/pull/3393) by [@jamesduke](https://github.com/jamesduke) +- Add support for BL0939 (Sonoff Dual R3 V2 powermeter) [esphome#3300](https://github.com/esphome/esphome/pull/3300) by [@ziceva](https://github.com/ziceva) (new-integration) +- Add "esphome rename" command [esphome#3403](https://github.com/esphome/esphome/pull/3403) by [@jesserockz](https://github.com/jesserockz) +- SPS30: Add fan action [esphome#3410](https://github.com/esphome/esphome/pull/3410) by [@martgras](https://github.com/martgras) +- feat: add openssh-client on docker image (#1681) [esphome#3319](https://github.com/esphome/esphome/pull/3319) by [@quentin9696](https://github.com/quentin9696) +- Add duration device class for sensors [esphome#3421](https://github.com/esphome/esphome/pull/3421) by [@jesserockz](https://github.com/jesserockz) +- Missing `f` prefix on f-strings fix [esphome#3415](https://github.com/esphome/esphome/pull/3415) by [@code-review-doctor](https://github.com/code-review-doctor) +- Queue sensor publishes so we don't block for too long [esphome#3422](https://github.com/esphome/esphome/pull/3422) by [@trvrnrth](https://github.com/trvrnrth) +- added RGB565 image type [esphome#3229](https://github.com/esphome/esphome/pull/3229) by [@lubeda](https://github.com/lubeda) +- Allow wifi output_power down to 8.5dB [esphome#3405](https://github.com/esphome/esphome/pull/3405) by [@e28eta](https://github.com/e28eta) +- Add help text to rename command [esphome#3442](https://github.com/esphome/esphome/pull/3442) by [@jesserockz](https://github.com/jesserockz) +- Add rename command handler [esphome#3443](https://github.com/esphome/esphome/pull/3443) by [@balloob](https://github.com/balloob) +- Support for Arduino 2 and serial port on ESP32-S2 and ESP32-C3 [esphome#3436](https://github.com/esphome/esphome/pull/3436) by [@jenscski](https://github.com/jenscski) +- Bump dashboard to 20220508.0 [esphome#3448](https://github.com/esphome/esphome/pull/3448) by [@balloob](https://github.com/balloob) +- Waveshare epaper 7in5 v2alt [esphome#3276](https://github.com/esphome/esphome/pull/3276) by [@patvdleer](https://github.com/patvdleer) +- Early pin init [esphome#3439](https://github.com/esphome/esphome/pull/3439) by [@rainero84](https://github.com/rainero84) +- Add ENS210 Humidity & Temperature sensor component [esphome#2942](https://github.com/esphome/esphome/pull/2942) by [@itn3rd77](https://github.com/itn3rd77) (new-integration) +- Also rename yaml filename with rename command [esphome#3447](https://github.com/esphome/esphome/pull/3447) by [@jesserockz](https://github.com/jesserockz) +- Bump click from 8.1.2 to 8.1.3 [esphome#3426](https://github.com/esphome/esphome/pull/3426) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix spi transfer with miso pin defined on espidf [esphome#3450](https://github.com/esphome/esphome/pull/3450) by [@jesserockz](https://github.com/jesserockz) +- Force using name substitution when adopting a device [esphome#3451](https://github.com/esphome/esphome/pull/3451) by [@jesserockz](https://github.com/jesserockz) +- Bump pyupgrade from 2.32.0 to 2.32.1 [esphome#3452](https://github.com/esphome/esphome/pull/3452) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.13.5 to 2.13.8 [esphome#3432](https://github.com/esphome/esphome/pull/3432) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Esp32c3 deepsleep fix [esphome#3433](https://github.com/esphome/esphome/pull/3433) by [@MFlasskamp](https://github.com/MFlasskamp) +- Add SERIAL_JTAG/CDC logger option for ESP-IDF platform for ESP32-S2/S3/C3 [esphome#3105](https://github.com/esphome/esphome/pull/3105) by [@unaiur](https://github.com/unaiur) +- Select enhancement [esphome#3423](https://github.com/esphome/esphome/pull/3423) by [@mmakaay](https://github.com/mmakaay) +- Number enhancement [esphome#3429](https://github.com/esphome/esphome/pull/3429) by [@mmakaay](https://github.com/mmakaay) +- mask deprecated adc_gpio_init() for esp32-s2 [esphome#3445](https://github.com/esphome/esphome/pull/3445) by [@MFlasskamp](https://github.com/MFlasskamp) +- tca9548a fix channel selection [esphome#3417](https://github.com/esphome/esphome/pull/3417) by [@martgras](https://github.com/martgras) +- add support for Sen5x sensor series [esphome#3383](https://github.com/esphome/esphome/pull/3383) by [@martgras](https://github.com/martgras) (new-integration) +- Add SML (Smart Message Language) platform for energy meters [esphome#2396](https://github.com/esphome/esphome/pull/2396) by [@alengwenus](https://github.com/alengwenus) (new-integration) +- Delonghi Penguino PAC W120HP ir support [esphome#3124](https://github.com/esphome/esphome/pull/3124) by [@grob6000](https://github.com/grob6000) (new-integration) +- extend scd4x [esphome#3409](https://github.com/esphome/esphome/pull/3409) by [@martgras](https://github.com/martgras) +- PMSX003: Add support for specifying the update interval and spinning down [esphome#3053](https://github.com/esphome/esphome/pull/3053) by [@mjg59](https://github.com/mjg59) +- CAN bus: on_frame remote_transmission_request [esphome#3376](https://github.com/esphome/esphome/pull/3376) by [@felixstorm](https://github.com/felixstorm) +- Fix cover set position by force pushing position_id datapoint (simila… [esphome#3435](https://github.com/esphome/esphome/pull/3435) by [@dennisvbussel](https://github.com/dennisvbussel) +- added prev_frame for animation [esphome#3427](https://github.com/esphome/esphome/pull/3427) by [@lubeda](https://github.com/lubeda) +- Fix tests [esphome#3455](https://github.com/esphome/esphome/pull/3455) by [@jesserockz](https://github.com/jesserockz) +- Fix BME280 setup() when the sensor is marked as failed. [esphome#3396](https://github.com/esphome/esphome/pull/3396) by [@ctrix](https://github.com/ctrix) +- Esp32c3 deepsleep fix [esphome#3454](https://github.com/esphome/esphome/pull/3454) by [@MFlasskamp](https://github.com/MFlasskamp) +- Make retry scheduler efficient [esphome#3225](https://github.com/esphome/esphome/pull/3225) by [@OttoWinter](https://github.com/OttoWinter) +- Code cleanup fixes for the select component [esphome#3457](https://github.com/esphome/esphome/pull/3457) by [@mmakaay](https://github.com/mmakaay) (breaking-change) +- Code cleanup fixes for the number component [esphome#3458](https://github.com/esphome/esphome/pull/3458) by [@mmakaay](https://github.com/mmakaay) (breaking-change) +- Enable api transport encryption for new projects [esphome#3142](https://github.com/esphome/esphome/pull/3142) by [@OttoWinter](https://github.com/OttoWinter) (notable-change) +- Implement allow_deep_sleep [esphome#3282](https://github.com/esphome/esphome/pull/3282) by [@rubdos](https://github.com/rubdos) +- Add deep_sleep.allow YAML action [esphome#3459](https://github.com/esphome/esphome/pull/3459) by [@jesserockz](https://github.com/jesserockz) +- Restore RealTimeClock's local TZ after epoch sync [esphome#3462](https://github.com/esphome/esphome/pull/3462) by [@mmakaay](https://github.com/mmakaay) +- Shelly dimmer: Use unique_ptr to handle the lifetime of stm32_t [esphome#3400](https://github.com/esphome/esphome/pull/3400) by [@edge90](https://github.com/edge90) +- Use heat mode for heat. Move EXT HT to custom presets. [esphome#3437](https://github.com/esphome/esphome/pull/3437) by [@jgissend10](https://github.com/jgissend10) +- Make custom_fan and custom_preset templatable as per documentation [esphome#3330](https://github.com/esphome/esphome/pull/3330) by [@MrMDavidson](https://github.com/MrMDavidson) +- Update captive portal canHandle function [esphome#3360](https://github.com/esphome/esphome/pull/3360) by [@bkaufx](https://github.com/bkaufx) +- Increase JSON buffer size on overflow [esphome#3475](https://github.com/esphome/esphome/pull/3475) by [@pyos](https://github.com/pyos) +- Mark improv_serial and ESP-IDF usb based serial on c3/s2/s3 unsupported [esphome#3477](https://github.com/esphome/esphome/pull/3477) by [@jesserockz](https://github.com/jesserockz) +- ESP32: Only save to NVS if data was changed [esphome#3479](https://github.com/esphome/esphome/pull/3479) by [@martgras](https://github.com/martgras) +- Retry Tuya init commands [esphome#3482](https://github.com/esphome/esphome/pull/3482) by [@ssieb](https://github.com/ssieb) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.6.0.mdx b/src/content/docs/changelog/2022.6.0.mdx new file mode 100644 index 0000000000..4a4f688d8c --- /dev/null +++ b/src/content/docs/changelog/2022.6.0.mdx @@ -0,0 +1,200 @@ +--- +description: "Changelog for ESPHome 2022.6.0." +title: "ESPHome 2022.6.0 - 15th June 2022" +pagefind: false +slug: "changelog/2022.6.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +We are almost half way through 2022 already! My, how fast time flies when we +are having fun with ESPHome. This release is kind of small, but packs some big features. +There will be no 2022.7.0 (July) release next month as I ([@jesserockz](https://github.com/jesserockz)) will be away +around that time. So lets hope we can make 2022.8.0 worth the wait. + +## 🎶🎶🎶 Media Players + +ESPHome can now become a media player target for Home Assistant. This allows users to buy or build +ESP32 based speakers and place them around the house. + +We made a small website showing you a few tested [Media Players](https://esphome.github.io/media-players) and you can +install ESPHome directly to them via the browser using ESP Web Tools. + +Join us in a live stream all about Audio in the Open Home! + +When: Thursday, June 16, at 7pm UTC / 12pm PST / 9pm CET + +{/* markdownlint-disable-next-line MD033 */} + + +## Includes with vars + +[@jimtng](https://github.com/jimtng) is a newcomer to ESPHome. While migrating everything from a certain other +firmware, they found that they had to duplicate lots of yaml configuration for their many devices. +Basically, they decided to upgrade the `!include` yaml "directive" to allow variables. + +```yaml +# device.yaml +binary_sensor: + - <<: !include + file: bin-sensor.yaml + vars: + pin: GPIO1 + name: "Binary Sensor 1" + switch: my_switch_1_id + delay: 10s + - <<: !include + file: bin-sensor.yaml + vars: + pin: GPIO1 + name: "Binary Sensor 2" + switch: my_switch_2_id + delay: 60s + +# bin-sensor.yaml +platform: gpio +pin: ${pin} +name: ${name} +on_press: + - switch.turn_on: ${switch} + - delay: ${delay} + - switch.turn_off: ${switch} +``` + +Now while this is probably not the best example, the variables act as `substitutions` +and can be used anywhere in the underlying yaml file and can very much DRY out your configurations. + +{/* markdownlint-disable MD013 */} + +## Release 2022.6.1 - June 18 + +- Setup the mute pin if configured [esphome#3568](https://github.com/esphome/esphome/pull/3568) by [@jesserockz](https://github.com/jesserockz) +- Bugfix for ExternalRAMAllocator copy constructor [esphome#3571](https://github.com/esphome/esphome/pull/3571) by [@bnw](https://github.com/bnw) +- Media Player: added triggers [esphome#3576](https://github.com/esphome/esphome/pull/3576) by [@dudanov](https://github.com/dudanov) + +## Release 2022.6.2 - June 23 + +- Move gas mbus config option being a define to being a build flag [esphome#3575](https://github.com/esphome/esphome/pull/3575) by [@lkomurcu](https://github.com/lkomurcu) +- Fix: Make MQTT over TLS actually work [esphome#3580](https://github.com/esphome/esphome/pull/3580) by [@ShellAddicted](https://github.com/ShellAddicted) +- Fix wrong type for voc_state*_ in sgp4x component [esphome#3581](https://github.com/esphome/esphome/pull/3581) by [@kahrendt](https://github.com/kahrendt) +- Media Player: added play_media action [esphome#3579](https://github.com/esphome/esphome/pull/3579) by [@dudanov](https://github.com/dudanov) +- Fix 2 small issues in BLEClient [esphome#3544](https://github.com/esphome/esphome/pull/3544) by [@jhansche](https://github.com/jhansche) + +## Release 2022.6.3 - August 8 + +- FIX: Modbus queue deduplicator deleting custom commands [esphome#3650](https://github.com/esphome/esphome/pull/3650) by [@jpeletier](https://github.com/jpeletier) +- Update inkbird_ibsth1_mini.cpp [esphome#3664](https://github.com/esphome/esphome/pull/3664) by [@ssieb](https://github.com/ssieb) +- Add CO device class to binary_sensor [esphome#3656](https://github.com/esphome/esphome/pull/3656) by [@berg](https://github.com/berg) +- Use application/json instead of text/json [esphome#3671](https://github.com/esphome/esphome/pull/3671) by [@ssieb](https://github.com/ssieb) +- Use correct struct members. [esphome#3672](https://github.com/esphome/esphome/pull/3672) by [@ssieb](https://github.com/ssieb) + +## Breaking Changes + +### TCS34725 integration time + +The sampling settings for the TCS34725 have had a new option `auto` added and set as the default. This allows for better accuracy. +You are able to set it back to the previous default value by specifying `integration_time: 2.4ms` in your configuration. + +### SGP40 moved + +While adding support for the SGP41 chip, the SGP40 was moved and they were both combined into a new `sgp4x` component. + +### MQTT fan speeds + +[esphome#3397](https://github.com/esphome/esphome/pull/3397) removes deprecated MQTT fan speed state and speed command topics. +These were replaced with speed level state and command topics in ESPHome 2021.10.0. + +### AC Dimmer + +Due to an output power calculation the perceived power might vary slightly specially in the lower and upper regions. + +### DisplayBuffer + +A new virtual method was added to the DisplayBuffer class for specifying the display type. This change only affects `external_components`. +See [esphome#3430](https://github.com/esphome/esphome/pull/3430) for more details. + +## Full list of changes + +### New Components + +- Add Tuya select [esphome#3469](https://github.com/esphome/esphome/pull/3469) by [@bearpawmaxim](https://github.com/bearpawmaxim) (new-integration) +- Add support for SGP41 [esphome#3382](https://github.com/esphome/esphome/pull/3382) by [@martgras](https://github.com/martgras) (new-integration) (breaking-change) +- Implement Media Player and I2S Media player [esphome#3487](https://github.com/esphome/esphome/pull/3487) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- Tcs34725 automatic sampling settings for improved dynamics and accuracy [esphome#3258](https://github.com/esphome/esphome/pull/3258) by [@swifty99](https://github.com/swifty99) (breaking-change) +- Add support for SGP41 [esphome#3382](https://github.com/esphome/esphome/pull/3382) by [@martgras](https://github.com/martgras) (new-integration) (breaking-change) +- Remove deprecated fan speeds [esphome#3397](https://github.com/esphome/esphome/pull/3397) by [@kbickar](https://github.com/kbickar) (breaking-change) +- Output a true RMS voltage % [esphome#3494](https://github.com/esphome/esphome/pull/3494) by [@josephdouce](https://github.com/josephdouce) (breaking-change) +- Add display_type property to DisplayBuffer [esphome#3430](https://github.com/esphome/esphome/pull/3430) by [@guillempages](https://github.com/guillempages) (breaking-change) + +### Beta Changes + +- publish fan speed count for discovery [esphome#3537](https://github.com/esphome/esphome/pull/3537) by [@ssieb](https://github.com/ssieb) +- Nextion brightness setting requires an assignment [esphome#3533](https://github.com/esphome/esphome/pull/3533) by [@nagyv](https://github.com/nagyv) +- Implement media player volume actions [esphome#3551](https://github.com/esphome/esphome/pull/3551) by [@jesserockz](https://github.com/jesserockz) +- Fix compilation with ESP32-S3 [esphome#3543](https://github.com/esphome/esphome/pull/3543) by [@misery](https://github.com/misery) +- Bm3xx: Fix typo [esphome#3559](https://github.com/esphome/esphome/pull/3559) by [@martgras](https://github.com/martgras) + +### Notable Changes + +- Add variable substitutions for !include [esphome#3510](https://github.com/esphome/esphome/pull/3510) by [@jimtng](https://github.com/jimtng) (notable-change) + +### All changes + +- Tcs34725 automatic sampling settings for improved dynamics and accuracy [esphome#3258](https://github.com/esphome/esphome/pull/3258) by [@swifty99](https://github.com/swifty99) (breaking-change) +- Remove duplicate convert_to_8bit_color function. [esphome#2469](https://github.com/esphome/esphome/pull/2469) by [@davet2001](https://github.com/davet2001) +- Bump esptool from 3.3 to 3.3.1 [esphome#3468](https://github.com/esphome/esphome/pull/3468) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.13.8 to 2.13.9 [esphome#3470](https://github.com/esphome/esphome/pull/3470) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Tuya status gpio support [esphome#3466](https://github.com/esphome/esphome/pull/3466) by [@bearpawmaxim](https://github.com/bearpawmaxim) +- Add Tuya select [esphome#3469](https://github.com/esphome/esphome/pull/3469) by [@bearpawmaxim](https://github.com/bearpawmaxim) (new-integration) +- MQTT cover: send state even if position is available [esphome#3473](https://github.com/esphome/esphome/pull/3473) by [@pyos](https://github.com/pyos) +- Ili9341 8bit indexed mode pt1 [esphome#2490](https://github.com/esphome/esphome/pull/2490) by [@davet2001](https://github.com/davet2001) +- feat: esp32-camera add stream event [esphome#3285](https://github.com/esphome/esphome/pull/3285) by [@myml](https://github.com/myml) +- Add support for SGP41 [esphome#3382](https://github.com/esphome/esphome/pull/3382) by [@martgras](https://github.com/martgras) (new-integration) (breaking-change) +- add support user-defined modbus functions [esphome#3461](https://github.com/esphome/esphome/pull/3461) by [@gazoodle](https://github.com/gazoodle) +- Remove deprecated fan speeds [esphome#3397](https://github.com/esphome/esphome/pull/3397) by [@kbickar](https://github.com/kbickar) (breaking-change) +- Fix compile issues on windows [esphome#3491](https://github.com/esphome/esphome/pull/3491) by [@jesserockz](https://github.com/jesserockz) +- midea: New power_toggle action. Auto-use remote transmitter. [esphome#3496](https://github.com/esphome/esphome/pull/3496) by [@dudanov](https://github.com/dudanov) +- Output a true RMS voltage % [esphome#3494](https://github.com/esphome/esphome/pull/3494) by [@josephdouce](https://github.com/josephdouce) (breaking-change) +- [scd4x] Fix not passing arguments to templatable value for perform_forced_calibration [esphome#3495](https://github.com/esphome/esphome/pull/3495) by [@Wumpf](https://github.com/Wumpf) +- Thermostat preset with modes [esphome#3298](https://github.com/esphome/esphome/pull/3298) by [@MrMDavidson](https://github.com/MrMDavidson) +- Allow Prometheus component to export internal components [esphome#3508](https://github.com/esphome/esphome/pull/3508) by [@jangrewe](https://github.com/jangrewe) +- [BedJet] Add configurable heating strategy [esphome#3519](https://github.com/esphome/esphome/pull/3519) by [@jhansche](https://github.com/jhansche) +- Add variable substitutions for !include [esphome#3510](https://github.com/esphome/esphome/pull/3510) by [@jimtng](https://github.com/jimtng) (notable-change) +- Change rain intensity sensor string [esphome#3511](https://github.com/esphome/esphome/pull/3511) by [@wtremmel](https://github.com/wtremmel) +- Implement Media Player and I2S Media player [esphome#3487](https://github.com/esphome/esphome/pull/3487) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add mqtt.on_connect and mqtt.on_disconnect triggers [esphome#3520](https://github.com/esphome/esphome/pull/3520) by [@jimtng](https://github.com/jimtng) +- Refactor clock syncing [esphome#3503](https://github.com/esphome/esphome/pull/3503) by [@jhansche](https://github.com/jhansche) +- Added RC6 protocol support [esphome#3514](https://github.com/esphome/esphome/pull/3514) by [@Emrvb](https://github.com/Emrvb) +- Add display_type property to DisplayBuffer [esphome#3430](https://github.com/esphome/esphome/pull/3430) by [@guillempages](https://github.com/guillempages) (breaking-change) +- Correct ADC auto-range for ESP32-S2 variant (13 bit adc) [esphome#3158](https://github.com/esphome/esphome/pull/3158) by [@CarlosGS](https://github.com/CarlosGS) +- Suppress first rotary encoder event [esphome#3532](https://github.com/esphome/esphome/pull/3532) by [@mmakaay](https://github.com/mmakaay) +- Fix endless 'WiFi Unknown connection status 0' loop [esphome#3530](https://github.com/esphome/esphome/pull/3530) by [@mmakaay](https://github.com/mmakaay) +- support rotated ILI9341 (ILI9342) [esphome#3526](https://github.com/esphome/esphome/pull/3526) by [@ssieb](https://github.com/ssieb) +- Fix sdp3x error checking [esphome#3531](https://github.com/esphome/esphome/pull/3531) by [@Azimath](https://github.com/Azimath) +- Fix percentage validation for wrong data type input [esphome#3524](https://github.com/esphome/esphome/pull/3524) by [@mmakaay](https://github.com/mmakaay) +- Block Tuya light from reacting to dp changes if transitioning [esphome#3076](https://github.com/esphome/esphome/pull/3076) by [@VitaliyKurokhtin](https://github.com/VitaliyKurokhtin) +- Cleanup deprecated EntityBase::hash_base() [esphome#3525](https://github.com/esphome/esphome/pull/3525) by [@mmakaay](https://github.com/mmakaay) +- Fix bogus reading on no communication with MAX31865 [esphome#3505](https://github.com/esphome/esphome/pull/3505) by [@DAVe3283](https://github.com/DAVe3283) +- Implement the media player actions [esphome#3534](https://github.com/esphome/esphome/pull/3534) by [@jesserockz](https://github.com/jesserockz) +- RG15 data is float/double, not int [esphome#3512](https://github.com/esphome/esphome/pull/3512) by [@wtremmel](https://github.com/wtremmel) +- publish fan speed count for discovery [esphome#3537](https://github.com/esphome/esphome/pull/3537) by [@ssieb](https://github.com/ssieb) +- Nextion brightness setting requires an assignment [esphome#3533](https://github.com/esphome/esphome/pull/3533) by [@nagyv](https://github.com/nagyv) +- Implement media player volume actions [esphome#3551](https://github.com/esphome/esphome/pull/3551) by [@jesserockz](https://github.com/jesserockz) +- Fix compilation with ESP32-S3 [esphome#3543](https://github.com/esphome/esphome/pull/3543) by [@misery](https://github.com/misery) +- Bm3xx: Fix typo [esphome#3559](https://github.com/esphome/esphome/pull/3559) by [@martgras](https://github.com/martgras) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.8.0.mdx b/src/content/docs/changelog/2022.8.0.mdx new file mode 100644 index 0000000000..28f0241b96 --- /dev/null +++ b/src/content/docs/changelog/2022.8.0.mdx @@ -0,0 +1,169 @@ +--- +description: "Changelog for ESPHome 2022.8.0." +title: "ESPHome 2022.8.0 - 17th August 2022" +pagefind: false +slug: "changelog/2022.8.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Bluetooth Proxy + +ESPHome 2022.8.2 brings a new feature that allows you to use your ESP32 devices as Bluetooth Proxies for Home Assistant. +They will forward the BLE Advertisements to Home Assistant which will then trigger a discovery and allow you to set up +an integration for the found devices. This allows you to set up multiple ESP32 Bluetooth Proxies around the area to make +sure all advertisements are received reliably. + +We have created a few examples that are ready to flash directly from your browser for some specific devices: +[https://esphome.github.io/bluetooth-proxies/](https://esphome.github.io/bluetooth-proxies/) + +## Sprinkler controller + +[@kbx81](https://github.com/kbx81) has written a beast of a sprinkler controller to help organise and schedule all of your +sprinkler valves and keep those plants and veggies thriving. Check out the docs at +[Sprinkler](/components/sprinkler/). + +## ST7789V + +The [St7789V](/components/display/st7789v/) display platform has had an update which adds a `model` configuration +option. With this comes custom width and heights to allow you to use this with any display using this driver now. + +## Breaking Changes + +There are a few breaking changes this release, including removing `min_save_interval` from +the [Integration](/components/sensor/integration/) and [Total Daily Energy](/components/sensor/total_daily_energy/). +The BedJet climate introduced recently has also undergone a refactoring to allow different +platforms to extend the functionality available from ESPHome. + +{/* markdownlint-disable MD013 */} + +## Release 2022.8.1 - September 1 + +- fix grow password setting [esphome#3722](https://github.com/esphome/esphome/pull/3722) by [@ssieb](https://github.com/ssieb) +- Fix SPI HW selection for ESP32 variants [esphome#3728](https://github.com/esphome/esphome/pull/3728) by [@kbx81](https://github.com/kbx81) + +## Release 2022.8.2 - September 6 + +- Initial bluetooth_proxy support [esphome#3736](https://github.com/esphome/esphome/pull/3736) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Ignore NaN states in the integration component [esphome#3767](https://github.com/esphome/esphome/pull/3767) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Update modbus_controller.cpp [esphome#3768](https://github.com/esphome/esphome/pull/3768) by [@Avirsaam](https://github.com/Avirsaam) + +## Release 2022.8.3 - September 6 + +- Fix HA addon auth using HA credentials [esphome#3758](https://github.com/esphome/esphome/pull/3758) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- DAC7678 support [esphome#3441](https://github.com/esphome/esphome/pull/3441) by [@NickB1](https://github.com/NickB1) (new-integration) +- Add support for SMT100 Soil Moisture Sensor [esphome#3654](https://github.com/esphome/esphome/pull/3654) by [@piechade](https://github.com/piechade) (new-integration) +- Adding support for Whynter ARC-14S/SH Air Conditioners [esphome#3641](https://github.com/esphome/esphome/pull/3641) by [@aeonsablaze](https://github.com/aeonsablaze) (new-integration) +- Sprinkler controller component [esphome#2249](https://github.com/esphome/esphome/pull/2249) by [@kbx81](https://github.com/kbx81) (new-integration) +- Create feedback cover component [esphome#3253](https://github.com/esphome/esphome/pull/3253) by [@ianchi](https://github.com/ianchi) (new-integration) + +### Breaking Changes + +- Remove min_save_interval from intergration and total_daily_energy [esphome#3498](https://github.com/esphome/esphome/pull/3498) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Rework NaN handling in sensor filters [esphome#3610](https://github.com/esphome/esphome/pull/3610) by [@DAVe3283](https://github.com/DAVe3283) (breaking-change) +- Extend ST7789V component to support additional displays [esphome#3651](https://github.com/esphome/esphome/pull/3651) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Refactor BedJet climate into Hub component [esphome#3522](https://github.com/esphome/esphome/pull/3522) by [@jhansche](https://github.com/jhansche) (breaking-change) + +### Beta Changes + +- Improve Web view for Climate components [esphome#3706](https://github.com/esphome/esphome/pull/3706) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Add vector include [esphome#3707](https://github.com/esphome/esphome/pull/3707) by [@jesserockz](https://github.com/jesserockz) +- Add state_class total [esphome#3608](https://github.com/esphome/esphome/pull/3608) by [@peterg79](https://github.com/peterg79) +- add gradient color V2.0 [esphome#3709](https://github.com/esphome/esphome/pull/3709) by [@nielsnl68](https://github.com/nielsnl68) +- Webui small fixes [esphome#3713](https://github.com/esphome/esphome/pull/3713) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Only trigger ble_client on_connect after discovering services [esphome#3710](https://github.com/esphome/esphome/pull/3710) by [@buxtronix](https://github.com/buxtronix) +- Fixes BLE remote address type when connecting [esphome#3702](https://github.com/esphome/esphome/pull/3702) by [@rbaron](https://github.com/rbaron) +- Makes ble_client.ble_write's action value templatable [esphome#3715](https://github.com/esphome/esphome/pull/3715) by [@rbaron](https://github.com/rbaron) + +### All changes + +- Refactor vl53l0x to remove code from header. [esphome#3536](https://github.com/esphome/esphome/pull/3536) by [@RoboMagus](https://github.com/RoboMagus) +- Fix modbus user-defined function handling [esphome#3527](https://github.com/esphome/esphome/pull/3527) by [@gazoodle](https://github.com/gazoodle) +- Language schema 202204 [esphome#3492](https://github.com/esphome/esphome/pull/3492) by [@glmnet](https://github.com/glmnet) +- Fix / Reverse order shutdown [esphome#3585](https://github.com/esphome/esphome/pull/3585) by [@RoboMagus](https://github.com/RoboMagus) +- RestoringGlobalsComponent: Store value on shutdown [esphome#3586](https://github.com/esphome/esphome/pull/3586) by [@RoboMagus](https://github.com/RoboMagus) +- Map LOLIN C3 mini board pins [esphome#3587](https://github.com/esphome/esphome/pull/3587) by [@mateusdemboski](https://github.com/mateusdemboski) +- Bump platformio to 6.0.2 [esphome#3566](https://github.com/esphome/esphome/pull/3566) by [@jesserockz](https://github.com/jesserockz) +- Bump pylint from 2.13.9 to 2.14.3 [esphome#3589](https://github.com/esphome/esphome/pull/3589) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- DAC7678 support [esphome#3441](https://github.com/esphome/esphome/pull/3441) by [@NickB1](https://github.com/NickB1) (new-integration) +- Correcting ESP32 flash save/load key calculation algorithm [esphome#3416](https://github.com/esphome/esphome/pull/3416) by [@cinadr](https://github.com/cinadr) +- Bump aioesphomeapi from 10.8.2 to 10.10.0 [esphome#3590](https://github.com/esphome/esphome/pull/3590) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Do two substitutions passes to allow substitutions inside substitutions [esphome#3583](https://github.com/esphome/esphome/pull/3583) by [@jesserockz](https://github.com/jesserockz) +- Update actions [esphome#3592](https://github.com/esphome/esphome/pull/3592) by [@wrt54g](https://github.com/wrt54g) +- Add github-actions to dependabot [esphome#3595](https://github.com/esphome/esphome/pull/3595) by [@jesserockz](https://github.com/jesserockz) +- Fix some typos found by codespell [esphome#3598](https://github.com/esphome/esphome/pull/3598) by [@misery](https://github.com/misery) +- #3358 Correct temperature validity detection issue in some conditions of pu… [esphome#3545](https://github.com/esphome/esphome/pull/3545) by [@Benoit3](https://github.com/Benoit3) +- Remove min_save_interval from intergration and total_daily_energy [esphome#3498](https://github.com/esphome/esphome/pull/3498) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Bump zeroconf from 0.38.4 to 0.38.7 [esphome#3562](https://github.com/esphome/esphome/pull/3562) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- fix EDict to dict mapping in helpers.py [esphome#3599](https://github.com/esphome/esphome/pull/3599) by [@jpeletier](https://github.com/jpeletier) +- Fix slow_pwm output glitch [esphome#3601](https://github.com/esphome/esphome/pull/3601) by [@marshn](https://github.com/marshn) +- Bump pyupgrade from 2.32.1 to 2.34.0 [esphome#3591](https://github.com/esphome/esphome/pull/3591) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 22.3.0 to 22.6.0 [esphome#3613](https://github.com/esphome/esphome/pull/3613) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump colorama from 0.4.4 to 0.4.5 [esphome#3614](https://github.com/esphome/esphome/pull/3614) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.14.3 to 2.14.4 [esphome#3617](https://github.com/esphome/esphome/pull/3617) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-mock from 3.7.0 to 3.8.1 [esphome#3616](https://github.com/esphome/esphome/pull/3616) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update dfplayer condition function name [esphome#3619](https://github.com/esphome/esphome/pull/3619) by [@dab0g](https://github.com/dab0g) +- Added more sensor device classes [esphome#3624](https://github.com/esphome/esphome/pull/3624) by [@lal12](https://github.com/lal12) +- Improvement pipsolar crc [esphome#3316](https://github.com/esphome/esphome/pull/3316) by [@andreashergert1984](https://github.com/andreashergert1984) +- Fix configuration constants in core. [esphome#3652](https://github.com/esphome/esphome/pull/3652) by [@RoboMagus](https://github.com/RoboMagus) +- FIX: NVS preferences being written even if unchanged [esphome#3647](https://github.com/esphome/esphome/pull/3647) by [@jpeletier](https://github.com/jpeletier) +- Add 'set_total_pulses' action to 'pulse_counter' sensor. [esphome#3640](https://github.com/esphome/esphome/pull/3640) by [@RoboMagus](https://github.com/RoboMagus) +- add option to publish initial state of binary sensors [esphome#3636](https://github.com/esphome/esphome/pull/3636) by [@ssieb](https://github.com/ssieb) +- update packages: nginx-light-1.18.0-6.1+deb11u2 nano-5.4-2+deb11u1 [esphome#3631](https://github.com/esphome/esphome/pull/3631) by [@peterg79](https://github.com/peterg79) +- Add support for SMT100 Soil Moisture Sensor [esphome#3654](https://github.com/esphome/esphome/pull/3654) by [@piechade](https://github.com/piechade) (new-integration) +- Rework NaN handling in sensor filters [esphome#3610](https://github.com/esphome/esphome/pull/3610) by [@DAVe3283](https://github.com/DAVe3283) (breaking-change) +- Remove deprecated adc init call. [esphome#3667](https://github.com/esphome/esphome/pull/3667) by [@ssieb](https://github.com/ssieb) +- List webserver service on MDNS if enabled. [esphome#3662](https://github.com/esphome/esphome/pull/3662) by [@RoboMagus](https://github.com/RoboMagus) +- Show changes from python linting [esphome#3677](https://github.com/esphome/esphome/pull/3677) by [@jesserockz](https://github.com/jesserockz) +- dalybms: support changing the address [esphome#3676](https://github.com/esphome/esphome/pull/3676) by [@ssieb](https://github.com/ssieb) +- Upgrade rweather/Crypto from 0.2.0 to 0.4.0 [esphome#3593](https://github.com/esphome/esphome/pull/3593) by [@sybrenstuvel](https://github.com/sybrenstuvel) +- Allow GPIO20 for ESP32 [esphome#3680](https://github.com/esphome/esphome/pull/3680) by [@ashald](https://github.com/ashald) +- Remove old unused code in mcp23xxx_base [esphome#3685](https://github.com/esphome/esphome/pull/3685) by [@jesserockz](https://github.com/jesserockz) +- Adding option to report signal strength on pvvx_mithermometer [esphome#3688](https://github.com/esphome/esphome/pull/3688) by [@doolbneerg](https://github.com/doolbneerg) +- Pass optional args to 'new_Pvariable' when creating new entities [esphome#3690](https://github.com/esphome/esphome/pull/3690) by [@RoboMagus](https://github.com/RoboMagus) +- fix sx1509 use of pullup and pulldown [esphome#3689](https://github.com/esphome/esphome/pull/3689) by [@ssieb](https://github.com/ssieb) +- Add a soft reset in setup() for bme280. [esphome#3615](https://github.com/esphome/esphome/pull/3615) by [@dbaarda](https://github.com/dbaarda) +- Add get_ap() method to WiFi [esphome#3684](https://github.com/esphome/esphome/pull/3684) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Extend ST7789V component to support additional displays [esphome#3651](https://github.com/esphome/esphome/pull/3651) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Fix panic abort when BLEClient reconnects [esphome#3594](https://github.com/esphome/esphome/pull/3594) by [@dentra](https://github.com/dentra) +- Introduces ble_client.ble_write Action [esphome#3398](https://github.com/esphome/esphome/pull/3398) by [@rbaron](https://github.com/rbaron) +- Add helpers to switch python for schema and codegen [esphome#3693](https://github.com/esphome/esphome/pull/3693) by [@jesserockz](https://github.com/jesserockz) +- Refactor BedJet climate into Hub component [esphome#3522](https://github.com/esphome/esphome/pull/3522) by [@jhansche](https://github.com/jhansche) (breaking-change) +- Added support for setting the current animation frame [esphome#3681](https://github.com/esphome/esphome/pull/3681) by [@davestubbs](https://github.com/davestubbs) +- Adding support for Whynter ARC-14S/SH Air Conditioners [esphome#3641](https://github.com/esphome/esphome/pull/3641) by [@aeonsablaze](https://github.com/aeonsablaze) (new-integration) +- Sprinkler controller component [esphome#2249](https://github.com/esphome/esphome/pull/2249) by [@kbx81](https://github.com/kbx81) (new-integration) +- add gradient color [esphome#3687](https://github.com/esphome/esphome/pull/3687) by [@nielsnl68](https://github.com/nielsnl68) +- [Nextion] Add on_page trigger [esphome#3673](https://github.com/esphome/esphome/pull/3673) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Bump pyupgrade from 2.34.0 to 2.37.3 [esphome#3670](https://github.com/esphome/esphome/pull/3670) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 10.10.0 to 10.11.0 [esphome#3669](https://github.com/esphome/esphome/pull/3669) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Create feedback cover component [esphome#3253](https://github.com/esphome/esphome/pull/3253) by [@ianchi](https://github.com/ianchi) (new-integration) +- Bump pytest-asyncio from 0.18.3 to 0.19.0 [esphome#3695](https://github.com/esphome/esphome/pull/3695) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.38.7 to 0.39.0 [esphome#3694](https://github.com/esphome/esphome/pull/3694) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-mock from 3.8.1 to 3.8.2 [esphome#3622](https://github.com/esphome/esphome/pull/3622) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump flake8 from 4.0.1 to 5.0.4 [esphome#3703](https://github.com/esphome/esphome/pull/3703) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.14.4 to 2.14.5 [esphome#3697](https://github.com/esphome/esphome/pull/3697) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add priority to on_shutdown trigger [esphome#3644](https://github.com/esphome/esphome/pull/3644) by [@RoboMagus](https://github.com/RoboMagus) +- Improve Web view for Climate components [esphome#3706](https://github.com/esphome/esphome/pull/3706) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Add vector include [esphome#3707](https://github.com/esphome/esphome/pull/3707) by [@jesserockz](https://github.com/jesserockz) +- Add state_class total [esphome#3608](https://github.com/esphome/esphome/pull/3608) by [@peterg79](https://github.com/peterg79) +- add gradient color V2.0 [esphome#3709](https://github.com/esphome/esphome/pull/3709) by [@nielsnl68](https://github.com/nielsnl68) +- Webui small fixes [esphome#3713](https://github.com/esphome/esphome/pull/3713) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Only trigger ble_client on_connect after discovering services [esphome#3710](https://github.com/esphome/esphome/pull/3710) by [@buxtronix](https://github.com/buxtronix) +- Fixes BLE remote address type when connecting [esphome#3702](https://github.com/esphome/esphome/pull/3702) by [@rbaron](https://github.com/rbaron) +- Makes ble_client.ble_write's action value templatable [esphome#3715](https://github.com/esphome/esphome/pull/3715) by [@rbaron](https://github.com/rbaron) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2022.9.0.mdx b/src/content/docs/changelog/2022.9.0.mdx new file mode 100644 index 0000000000..3b05a04b4e --- /dev/null +++ b/src/content/docs/changelog/2022.9.0.mdx @@ -0,0 +1,155 @@ +--- +description: "Changelog for ESPHome 2022.9.0." +title: "ESPHome 2022.9.0 - 21st September 2022" +pagefind: false +slug: "changelog/2022.9.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## ESPHome Editor + +The editor used in ESPHome has been swapped out for Monaco thanks to [@glmnet](https://github.com/glmnet). He has +been working hard to make the experience of writing your YAML configurations easier and it now +supports auto completion with popups to show you more information. + +## Factory Reset + +A new Factory Reset switch and button has been added this release, allowing resetting of information such +as counters, restored values, and more importantly, the wifi credentials of a device that has been set up +using the captive portal such as pre-flashed devices you would have purchased. + +## Bluetooth Active Connections + +ESPHome 2022.9.3 adds active connections to the `bluetooth_proxy` component allowing Home Assistant +to connect to and control supported devices. + +{/* markdownlint-disable MD013 */} + +## Release 2022.9.1 - September 22 + +- Revert "fix spi timing issues" [esphome#3838](https://github.com/esphome/esphome/pull/3838) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.9.2 - September 29 + +- Bump dashboard to 20220925.0 [esphome#3846](https://github.com/esphome/esphome/pull/3846) by [@glmnet](https://github.com/glmnet) + +## Release 2022.9.3 - October 6 + +- Bluetooth Proxy active connections [esphome#3817](https://github.com/esphome/esphome/pull/3817) by [@jesserockz](https://github.com/jesserockz) + +## Release 2022.9.4 - October 7 + +- Add network type to mdns service message [esphome#3880](https://github.com/esphome/esphome/pull/3880) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20221007.0 [esphome#3881](https://github.com/esphome/esphome/pull/3881) by [@jesserockz](https://github.com/jesserockz) +- Dont add wifi block to yaml if discovered device uses ethernet [esphome#3882](https://github.com/esphome/esphome/pull/3882) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add dps310 sensor support [esphome#3704](https://github.com/esphome/esphome/pull/3704) by [@kbx81](https://github.com/kbx81) (new-integration) +- Support for MCP9600 Thermocouple Amplifier [esphome#3700](https://github.com/esphome/esphome/pull/3700) by [@MrEditor97](https://github.com/MrEditor97) (new-integration) +- Add support to tm1621 display [esphome#3737](https://github.com/esphome/esphome/pull/3737) by [@Philippe12](https://github.com/Philippe12) (new-integration) +- u-fire EC sensor [esphome#3774](https://github.com/esphome/esphome/pull/3774) by [@pvizeli](https://github.com/pvizeli) (new-integration) +- Add support for MPL3115A2 Pressure/Altitude and Temperature Sensor [esphome#3371](https://github.com/esphome/esphome/pull/3371) by [@kbickar](https://github.com/kbickar) (new-integration) +- Add support for BL0942 voltage, current, energy and power Sensor [esphome#3777](https://github.com/esphome/esphome/pull/3777) by [@dbuezas](https://github.com/dbuezas) (new-integration) +- Add Factory Reset button and switch [esphome#3724](https://github.com/esphome/esphome/pull/3724) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) (new-integration) +- Add support for TM1638 Led and Key component [esphome#3340](https://github.com/esphome/esphome/pull/3340) by [@skykingjwc](https://github.com/skykingjwc) (new-integration) +- Add uFire ISE sensor [esphome#3789](https://github.com/esphome/esphome/pull/3789) by [@pvizeli](https://github.com/pvizeli) (new-integration) + +### Beta Changes + +- null initialize total sensor for pulse counter [esphome#3803](https://github.com/esphome/esphome/pull/3803) by [@RoboMagus](https://github.com/RoboMagus) +- Sim800l add calls, multiline sms and ussd [esphome#3630](https://github.com/esphome/esphome/pull/3630) by [@glmnet](https://github.com/glmnet) +- Unify 'nullptr' initalization of class members; [esphome#3805](https://github.com/esphome/esphome/pull/3805) by [@RoboMagus](https://github.com/RoboMagus) +- Initialize all child sensors to nullptr [esphome#3808](https://github.com/esphome/esphome/pull/3808) by [@jesserockz](https://github.com/jesserockz) +- Remove floating point calculation from ac_dimmer ISR [esphome#3770](https://github.com/esphome/esphome/pull/3770) by [@Azimath](https://github.com/Azimath) +- split pronto codes if they are too long [esphome#3812](https://github.com/esphome/esphome/pull/3812) by [@ssieb](https://github.com/ssieb) +- [BME280] raise standby time [esphome#3804](https://github.com/esphome/esphome/pull/3804) by [@h3ndrik](https://github.com/h3ndrik) +- Make sprinkler reset_resume() method public [esphome#3824](https://github.com/esphome/esphome/pull/3824) by [@kbx81](https://github.com/kbx81) +- Bump dashboard to 20220919.1 [esphome#3828](https://github.com/esphome/esphome/pull/3828) by [@balloob](https://github.com/balloob) +- Fix-esphome-validation-line-number [esphome#3815](https://github.com/esphome/esphome/pull/3815) by [@glmnet](https://github.com/glmnet) +- Bump dashboard to 20220920.0 [esphome#3831](https://github.com/esphome/esphome/pull/3831) by [@balloob](https://github.com/balloob) +- Bump dashboard to 20220920.1 [esphome#3834](https://github.com/esphome/esphome/pull/3834) by [@glmnet](https://github.com/glmnet) + +### All changes + +- support modifying the apds9960 settings [esphome#3708](https://github.com/esphome/esphome/pull/3708) by [@ssieb](https://github.com/ssieb) +- Add support for pvvx mithermometer display via ble client [esphome#3333](https://github.com/esphome/esphome/pull/3333) by [@puuu](https://github.com/puuu) +- Improve OTA error messages adding return codes [esphome#3698](https://github.com/esphome/esphome/pull/3698) by [@IgnacioHR](https://github.com/IgnacioHR) +- Send CR also for commands for sim800l [esphome#3719](https://github.com/esphome/esphome/pull/3719) by [@ssieb](https://github.com/ssieb) +- hydreon_rgxx: Support lens_bad, em_sat and temperature [esphome#3642](https://github.com/esphome/esphome/pull/3642) by [@functionpointer](https://github.com/functionpointer) +- wifi: support 802.11k and 802.11v [esphome#3600](https://github.com/esphome/esphome/pull/3600) by [@stintel](https://github.com/stintel) +- Add final validate for i2c with mix/max frequency [esphome#3727](https://github.com/esphome/esphome/pull/3727) by [@jesserockz](https://github.com/jesserockz) +- Add dps310 sensor support [esphome#3704](https://github.com/esphome/esphome/pull/3704) by [@kbx81](https://github.com/kbx81) (new-integration) +- Let favicon be cached [esphome#3729](https://github.com/esphome/esphome/pull/3729) by [@slovdahl](https://github.com/slovdahl) +- Add bitmap font support [esphome#3573](https://github.com/esphome/esphome/pull/3573) by [@justfalter](https://github.com/justfalter) +- add log messages for bad pronto codes [esphome#3738](https://github.com/esphome/esphome/pull/3738) by [@ssieb](https://github.com/ssieb) +- add color compare operator's [esphome#3730](https://github.com/esphome/esphome/pull/3730) by [@nielsnl68](https://github.com/nielsnl68) +- Support for MCP9600 Thermocouple Amplifier [esphome#3700](https://github.com/esphome/esphome/pull/3700) by [@MrEditor97](https://github.com/MrEditor97) (new-integration) +- Support high update rates and fix several bugs in the cse7766 component. [esphome#3675](https://github.com/esphome/esphome/pull/3675) by [@fhriley](https://github.com/fhriley) +- Add Prometheus metrics relabeling [esphome#3734](https://github.com/esphome/esphome/pull/3734) by [@jangrewe](https://github.com/jangrewe) +- mcp23017: read output latch registers during setup [esphome#3744](https://github.com/esphome/esphome/pull/3744) by [@andyboeh](https://github.com/andyboeh) +- Captive portal show nearby WiFi with no ssid configured [esphome#3748](https://github.com/esphome/esphome/pull/3748) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) +- Remove unnecessary schema extension on template button [esphome#3753](https://github.com/esphome/esphome/pull/3753) by [@jesserockz](https://github.com/jesserockz) +- Tidy up switch schemas [esphome#3754](https://github.com/esphome/esphome/pull/3754) by [@jesserockz](https://github.com/jesserockz) +- Add IP101 support to Ethernet component [esphome#3751](https://github.com/esphome/esphome/pull/3751) by [@kbx81](https://github.com/kbx81) +- Add BedJet Fan child component [esphome#3735](https://github.com/esphome/esphome/pull/3735) by [@jhansche](https://github.com/jhansche) +- ibeacon support for the ble_rssi sensor [esphome#3745](https://github.com/esphome/esphome/pull/3745) by [@wjtje](https://github.com/wjtje) +- Add AEHA IR Protocol [esphome#3726](https://github.com/esphome/esphome/pull/3726) by [@hazi](https://github.com/hazi) +- Add sum type to binary_sensor_map [esphome#3541](https://github.com/esphome/esphome/pull/3541) by [@fbrthld](https://github.com/fbrthld) +- Bump aioesphomeapi from 10.11.0 to 10.13.0 [esphome#3740](https://github.com/esphome/esphome/pull/3740) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.14.5 to 2.15.0 [esphome#3746](https://github.com/esphome/esphome/pull/3746) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Esp32 pulsecounter optional pcnt [esphome#3691](https://github.com/esphome/esphome/pull/3691) by [@RoboMagus](https://github.com/RoboMagus) +- Bump black from 22.6.0 to 22.8.0 [esphome#3760](https://github.com/esphome/esphome/pull/3760) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Various ili9341 fixes [esphome#3756](https://github.com/esphome/esphome/pull/3756) by [@nielsnl68](https://github.com/nielsnl68) +- Add the same docker tags as used in HA [esphome#3752](https://github.com/esphome/esphome/pull/3752) by [@andrey-yantsen](https://github.com/andrey-yantsen) +- Bump pytest from 7.1.1 to 7.1.3 [esphome#3766](https://github.com/esphome/esphome/pull/3766) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Remove unneeded line (spi component adds it) [esphome#3778](https://github.com/esphome/esphome/pull/3778) by [@jesserockz](https://github.com/jesserockz) +- Move crc16 to helpers [esphome#3780](https://github.com/esphome/esphome/pull/3780) by [@jesserockz](https://github.com/jesserockz) +- YAML linting [esphome#3779](https://github.com/esphome/esphome/pull/3779) by [@jesserockz](https://github.com/jesserockz) +- Add support to tm1621 display [esphome#3737](https://github.com/esphome/esphome/pull/3737) by [@Philippe12](https://github.com/Philippe12) (new-integration) +- u-fire EC sensor [esphome#3774](https://github.com/esphome/esphome/pull/3774) by [@pvizeli](https://github.com/pvizeli) (new-integration) +- Add support for MPL3115A2 Pressure/Altitude and Temperature Sensor [esphome#3371](https://github.com/esphome/esphome/pull/3371) by [@kbickar](https://github.com/kbickar) (new-integration) +- Add support for BL0942 voltage, current, energy and power Sensor [esphome#3777](https://github.com/esphome/esphome/pull/3777) by [@dbuezas](https://github.com/dbuezas) (new-integration) +- Bump pylint from 2.15.0 to 2.15.2 [esphome#3785](https://github.com/esphome/esphome/pull/3785) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add Factory Reset button and switch [esphome#3724](https://github.com/esphome/esphome/pull/3724) by [@anatoly-savchenkov](https://github.com/anatoly-savchenkov) (new-integration) +- [MPU6050] Support devices with WHOAMI 0x98 [esphome#3784](https://github.com/esphome/esphome/pull/3784) by [@CarlosGS](https://github.com/CarlosGS) +- Bump zeroconf from 0.39.0 to 0.39.1 [esphome#3782](https://github.com/esphome/esphome/pull/3782) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add support for TM1638 Led and Key component [esphome#3340](https://github.com/esphome/esphome/pull/3340) by [@skykingjwc](https://github.com/skykingjwc) (new-integration) +- Remove status_set_error from ufire_ec [esphome#3792](https://github.com/esphome/esphome/pull/3792) by [@pvizeli](https://github.com/pvizeli) +- Bump frenck/action-yamllint from 1.2.0 to 1.3.0 [esphome#3798](https://github.com/esphome/esphome/pull/3798) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esp32_ble_tracker continuous and one shot scanning modes [esphome#3649](https://github.com/esphome/esphome/pull/3649) by [@jonofmac](https://github.com/jonofmac) +- Add stop action for ble scanning [esphome#3799](https://github.com/esphome/esphome/pull/3799) by [@jesserockz](https://github.com/jesserockz) +- Add Prometheus Service Discovery for online devices [esphome#3788](https://github.com/esphome/esphome/pull/3788) by [@cznewt](https://github.com/cznewt) +- Allow ble tracker to subscribe to ota start and stop the scanning [esphome#3800](https://github.com/esphome/esphome/pull/3800) by [@jesserockz](https://github.com/jesserockz) +- Add uFire ISE sensor [esphome#3789](https://github.com/esphome/esphome/pull/3789) by [@pvizeli](https://github.com/pvizeli) (new-integration) +- fix spi timing issues [esphome#3763](https://github.com/esphome/esphome/pull/3763) by [@IgnacioHR](https://github.com/IgnacioHR) +- null initialize total sensor for pulse counter [esphome#3803](https://github.com/esphome/esphome/pull/3803) by [@RoboMagus](https://github.com/RoboMagus) +- Sim800l add calls, multiline sms and ussd [esphome#3630](https://github.com/esphome/esphome/pull/3630) by [@glmnet](https://github.com/glmnet) +- Unify 'nullptr' initalization of class members; [esphome#3805](https://github.com/esphome/esphome/pull/3805) by [@RoboMagus](https://github.com/RoboMagus) +- Initialize all child sensors to nullptr [esphome#3808](https://github.com/esphome/esphome/pull/3808) by [@jesserockz](https://github.com/jesserockz) +- Remove floating point calculation from ac_dimmer ISR [esphome#3770](https://github.com/esphome/esphome/pull/3770) by [@Azimath](https://github.com/Azimath) +- split pronto codes if they are too long [esphome#3812](https://github.com/esphome/esphome/pull/3812) by [@ssieb](https://github.com/ssieb) +- [BME280] raise standby time [esphome#3804](https://github.com/esphome/esphome/pull/3804) by [@h3ndrik](https://github.com/h3ndrik) +- Make sprinkler reset_resume() method public [esphome#3824](https://github.com/esphome/esphome/pull/3824) by [@kbx81](https://github.com/kbx81) +- Bump dashboard to 20220919.1 [esphome#3828](https://github.com/esphome/esphome/pull/3828) by [@balloob](https://github.com/balloob) +- Fix-esphome-validation-line-number [esphome#3815](https://github.com/esphome/esphome/pull/3815) by [@glmnet](https://github.com/glmnet) +- Bump dashboard to 20220920.0 [esphome#3831](https://github.com/esphome/esphome/pull/3831) by [@balloob](https://github.com/balloob) +- Bump dashboard to 20220920.1 [esphome#3834](https://github.com/esphome/esphome/pull/3834) by [@glmnet](https://github.com/glmnet) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.10.0.mdx b/src/content/docs/changelog/2023.10.0.mdx new file mode 100644 index 0000000000..e902217fa7 --- /dev/null +++ b/src/content/docs/changelog/2023.10.0.mdx @@ -0,0 +1,170 @@ +--- +description: "Changelog for ESPHome 2023.10.0." +title: "ESPHome 2023.10.0 - 18th October 2023" +pagefind: false +slug: "changelog/2023.10.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +This release is quite small as myself ([@jesserockz](https://github.com/jesserockz)) and [@kbx81](https://github.com/kbx81) have been +focusing on `voice_assistant` updates and preparations for the Year of the Voice - Chapter 4. + +Check out the stream replay here: + +{/* markdownlint-disable-next-line MD033 */} + + +## XOR Condition + +A new `xor` condition has been added to the automation engine. This condition will only be true +when a single condition in the list is true. + +{/* markdownlint-disable MD013 */} + +## Release 2023.10.1 - October 19 + +- Fix voice_assistant without a speaker [esphome#5558](https://github.com/esphome/esphome/pull/5558) by [@jesserockz](https://github.com/jesserockz) +- esp32_improv add timeout [esphome#5556](https://github.com/esphome/esphome/pull/5556) by [@jesserockz](https://github.com/jesserockz) +- Create IPv4 sockets if ipv6 is not enabled [esphome#5565](https://github.com/esphome/esphome/pull/5565) by [@jesserockz](https://github.com/jesserockz) +- Incorrect ESP32 Strapping PIN Defined [esphome#5563](https://github.com/esphome/esphome/pull/5563) by [@descipher](https://github.com/descipher) + +## Release 2023.10.2 - October 24 + +- Fix XOR condition [esphome#5567](https://github.com/esphome/esphome/pull/5567) by [@jesserockz](https://github.com/jesserockz) +- Improv Serial support via USB CDC and JTAG [esphome#5559](https://github.com/esphome/esphome/pull/5559) by [@kbx81](https://github.com/kbx81) +- Publish the `pulse_meter` total when setting the total [esphome#5475](https://github.com/esphome/esphome/pull/5475) by [@TrentHouliston](https://github.com/TrentHouliston) +- Remove explicit cast for IPAddress [esphome#5574](https://github.com/esphome/esphome/pull/5574) by [@HeMan](https://github.com/HeMan) +- Set addr type when copy from ip4_addr_t [esphome#5583](https://github.com/esphome/esphome/pull/5583) by [@HeMan](https://github.com/HeMan) +- fix canbus send config [esphome#5585](https://github.com/esphome/esphome/pull/5585) by [@ssieb](https://github.com/ssieb) +- Allow set climate preset to NONE [esphome#5588](https://github.com/esphome/esphome/pull/5588) by [@dentra](https://github.com/dentra) + +## Release 2023.10.3 - October 24 + +- Set IP address `type` only when IPv4 and IPv6 are both enabled [esphome#5595](https://github.com/esphome/esphome/pull/5595) by [@kbx81](https://github.com/kbx81) + +## Release 2023.10.4 - October 30 + +- Update current_based_cover bugfix [esphome#5587](https://github.com/esphome/esphome/pull/5587) by [@rogerbusser](https://github.com/rogerbusser) +- Fixes ip include on arduino 2.7.4 [esphome#5620](https://github.com/esphome/esphome/pull/5620) by [@HeMan](https://github.com/HeMan) +- Fix bug when requesting italic gfonts [esphome#5623](https://github.com/esphome/esphome/pull/5623) by [@dewet22](https://github.com/dewet22) +- Handle enum type in tuya text_sensor [esphome#5626](https://github.com/esphome/esphome/pull/5626) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.10.5 - November 1 + +- Add connection triggers to api [esphome#5628](https://github.com/esphome/esphome/pull/5628) by [@jesserockz](https://github.com/jesserockz) +- Add on_client_connected and disconnected to voice assistant [esphome#5629](https://github.com/esphome/esphome/pull/5629) by [@jesserockz](https://github.com/jesserockz) +- Ensure that all uses of strncpy in wifi component are safe. [esphome#5636](https://github.com/esphome/esphome/pull/5636) by [@kpfleming](https://github.com/kpfleming) +- Remove some explicit IPAddress casts [esphome#5639](https://github.com/esphome/esphome/pull/5639) by [@HeMan](https://github.com/HeMan) + +## Release 2023.10.6 - November 3 + +- Revert "Ensure that all uses of strncpy in wifi component are safe." [esphome#5662](https://github.com/esphome/esphome/pull/5662) by [@jesserockz](https://github.com/jesserockz) + +## Breaking changes + +The SHT3x had a `heater_enabled` config option added in the 2023.9.0 release with a default value of `true`. +This has been flipped this release to be `false` as it started causing issues with various sensors. + +The SPS30 number concentration sensors had their units fixed to be `#/cm³` instead of `#/m³`. + +## Full list of changes + +### New Components + +- Implement sensor component for MMC5983 [esphome#5361](https://github.com/esphome/esphome/pull/5361) by [@agoode](https://github.com/agoode) (new-integration) + +### Breaking Changes + +- Do not enable SHT3x heater by default. Fixes #4886. [esphome#5445](https://github.com/esphome/esphome/pull/5445) by [@jkl1337](https://github.com/jkl1337) (breaking-change) +- Fix units for SPS30 number concentration sensors [esphome#5452](https://github.com/esphome/esphome/pull/5452) by [@kahrendt](https://github.com/kahrendt) (breaking-change) + +### Beta Changes + +- Update htu21d.cpp, fix publishing of heater level [esphome#5520](https://github.com/esphome/esphome/pull/5520) by [@Nippey](https://github.com/Nippey) +- BD5758D - Add delays and ACKs [esphome#5524](https://github.com/esphome/esphome/pull/5524) by [@Cossid](https://github.com/Cossid) +- Update Improv BLE component [esphome#5518](https://github.com/esphome/esphome/pull/5518) by [@jesserockz](https://github.com/jesserockz) +- SM10BIT_BASE - Add delays and ACKs, clear all channels before sleeping. [esphome#5526](https://github.com/esphome/esphome/pull/5526) by [@Cossid](https://github.com/Cossid) +- BP1658CJ - Clear all channels before sleeping. [esphome#5525](https://github.com/esphome/esphome/pull/5525) by [@Cossid](https://github.com/Cossid) +- Prometheus fix for esp-idf and fix newlines [esphome#5536](https://github.com/esphome/esphome/pull/5536) by [@jesserockz](https://github.com/jesserockz) +- Make IPAddress's operator!= compare values, not memory addresses. [esphome#5537](https://github.com/esphome/esphome/pull/5537) by [@raineth](https://github.com/raineth) +- Add change i2c address and allow multi conf for TB6612FNG [esphome#5492](https://github.com/esphome/esphome/pull/5492) by [@max246](https://github.com/max246) +- Add stream start and end events [esphome#5545](https://github.com/esphome/esphome/pull/5545) by [@jesserockz](https://github.com/jesserockz) +- Fix esp32_improv authorizer with no binary sensors in config [esphome#5546](https://github.com/esphome/esphome/pull/5546) by [@jesserockz](https://github.com/jesserockz) +- More voice assistant fixes [esphome#5547](https://github.com/esphome/esphome/pull/5547) by [@jesserockz](https://github.com/jesserockz) +- Fix default libretiny manufacturer reported to HA [esphome#5549](https://github.com/esphome/esphome/pull/5549) by [@jesserockz](https://github.com/jesserockz) +- SML: fix incomplete sign extension for abbreviated transmissions [esphome#5544](https://github.com/esphome/esphome/pull/5544) by [@fblaese](https://github.com/fblaese) +- esp32_improv advertise capabilities and state in ble service data [esphome#5553](https://github.com/esphome/esphome/pull/5553) by [@jesserockz](https://github.com/jesserockz) + +### Notable Changes + +- Add xor automation condition [esphome#5453](https://github.com/esphome/esphome/pull/5453) by [@kahrendt](https://github.com/kahrendt) (notable-change) + +### All changes + +- SX1509 component [esphome#5385](https://github.com/esphome/esphome/pull/5385) by [@vr6racer](https://github.com/vr6racer) +- Ci find YAML tests dynamically [esphome#5399](https://github.com/esphome/esphome/pull/5399) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Make ESPHome data dir configurable [esphome#5417](https://github.com/esphome/esphome/pull/5417) by [@werdnum](https://github.com/werdnum) +- Bump actions/checkout from 4.0.0 to 4.1.0 [esphome#5420](https://github.com/esphome/esphome/pull/5420) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix typo in documentation [esphome#5425](https://github.com/esphome/esphome/pull/5425) by [@kapily](https://github.com/kapily) +- Bump pylint from 2.17.5 to 2.17.6 [esphome#5429](https://github.com/esphome/esphome/pull/5429) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Refactor ip address representation [esphome#5252](https://github.com/esphome/esphome/pull/5252) by [@HeMan](https://github.com/HeMan) +- Fix .esphome path when not using envvar [esphome#5440](https://github.com/esphome/esphome/pull/5440) by [@jesserockz](https://github.com/jesserockz) +- [BP1658CJ] Missing clock line delays and ack bit [esphome#5448](https://github.com/esphome/esphome/pull/5448) by [@leoshusar](https://github.com/leoshusar) +- [ssd1351] fix: wait for the component to be at least in setup phase b… [esphome#5454](https://github.com/esphome/esphome/pull/5454) by [@xdecock](https://github.com/xdecock) +- Do not enable SHT3x heater by default. Fixes #4886. [esphome#5445](https://github.com/esphome/esphome/pull/5445) by [@jkl1337](https://github.com/jkl1337) (breaking-change) +- Add testcases for multiple SPI buses on ESP32 Arduino [esphome#5457](https://github.com/esphome/esphome/pull/5457) by [@angelnu](https://github.com/angelnu) +- Feat/component poller suspend [esphome#5423](https://github.com/esphome/esphome/pull/5423) by [@xdecock](https://github.com/xdecock) +- Bump actions/setup-python from 4.7.0 to 4.7.1 [esphome#5467](https://github.com/esphome/esphome/pull/5467) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add xor automation condition [esphome#5453](https://github.com/esphome/esphome/pull/5453) by [@kahrendt](https://github.com/kahrendt) (notable-change) +- Fix units for SPS30 number concentration sensors [esphome#5452](https://github.com/esphome/esphome/pull/5452) by [@kahrendt](https://github.com/kahrendt) (breaking-change) +- ST7789v - Allow predefined backlight pin to be disabled. [esphome#5476](https://github.com/esphome/esphome/pull/5476) by [@clydebarrow](https://github.com/clydebarrow) +- MAX7219 - Update intensity [esphome#5477](https://github.com/esphome/esphome/pull/5477) by [@clydebarrow](https://github.com/clydebarrow) +- St7789v and SPI data rate [esphome#5472](https://github.com/esphome/esphome/pull/5472) by [@clydebarrow](https://github.com/clydebarrow) +- Move CONF_IRQ_PIN into const.py [esphome#5488](https://github.com/esphome/esphome/pull/5488) by [@kbx81](https://github.com/kbx81) +- Initial ESP32-H2 Support [esphome#5498](https://github.com/esphome/esphome/pull/5498) by [@vidplace7](https://github.com/vidplace7) +- Increased debug message precision [esphome#5496](https://github.com/esphome/esphome/pull/5496) by [@lukeansell](https://github.com/lukeansell) +- Support for Haier IR protocol added [esphome#5403](https://github.com/esphome/esphome/pull/5403) by [@paveldn](https://github.com/paveldn) +- add USE_SPI define [esphome#5500](https://github.com/esphome/esphome/pull/5500) by [@angelnu](https://github.com/angelnu) +- Implement sensor component for MMC5983 [esphome#5361](https://github.com/esphome/esphome/pull/5361) by [@agoode](https://github.com/agoode) (new-integration) +- Bump docker dependencies [esphome#5501](https://github.com/esphome/esphome/pull/5501) by [@jesserockz](https://github.com/jesserockz) +- Move to Pillow 10.x [esphome#5489](https://github.com/esphome/esphome/pull/5489) by [@hostcc](https://github.com/hostcc) +- [Sprinkler] Initialize timers early to avoid crash [esphome#5499](https://github.com/esphome/esphome/pull/5499) by [@hostcc](https://github.com/hostcc) +- Deep sleep is only available on esp32 and esp8266 [esphome#5507](https://github.com/esphome/esphome/pull/5507) by [@jesserockz](https://github.com/jesserockz) +- Use platform consts [esphome#5508](https://github.com/esphome/esphome/pull/5508) by [@jesserockz](https://github.com/jesserockz) +- Fixed precision for Nextion sensor with float values [esphome#5497](https://github.com/esphome/esphome/pull/5497) by [@olegtarasov](https://github.com/olegtarasov) +- Remote wake word support for voice assistant [esphome#5229](https://github.com/esphome/esphome/pull/5229) by [@jesserockz](https://github.com/jesserockz) +- Don't allow entity category "CONFIG" for sensors [esphome#5505](https://github.com/esphome/esphome/pull/5505) by [@edenhaus](https://github.com/edenhaus) +- Prepare protobuf for ESP-IDF ≥ 5 [esphome#5510](https://github.com/esphome/esphome/pull/5510) by [@HeMan](https://github.com/HeMan) +- fix build lang schema for spi and i2c [esphome#5509](https://github.com/esphome/esphome/pull/5509) by [@glmnet](https://github.com/glmnet) +- Added Nextion display error handling during setup [esphome#5493](https://github.com/esphome/esphome/pull/5493) by [@olegtarasov](https://github.com/olegtarasov) +- Fix e131 and voice_assistant sockets [esphome#5502](https://github.com/esphome/esphome/pull/5502) by [@justdaniel-gh](https://github.com/justdaniel-gh) +- Allow manual set "Invert_display" [esphome#5494](https://github.com/esphome/esphome/pull/5494) by [@nielsnl68](https://github.com/nielsnl68) +- As3935 calibration [esphome#5366](https://github.com/esphome/esphome/pull/5366) by [@mveinot](https://github.com/mveinot) +- Small fixes for voice assistant [esphome#5513](https://github.com/esphome/esphome/pull/5513) by [@synesthesiam](https://github.com/synesthesiam) +- Add detail param to allow listing of select options in WebServer REST API [esphome#5503](https://github.com/esphome/esphome/pull/5503) by [@DanielBaulig](https://github.com/DanielBaulig) +- Bump curl to 7.74.0-1.3+deb11u10 [esphome#5517](https://github.com/esphome/esphome/pull/5517) by [@jesserockz](https://github.com/jesserockz) +- Update htu21d.cpp, fix publishing of heater level [esphome#5520](https://github.com/esphome/esphome/pull/5520) by [@Nippey](https://github.com/Nippey) +- BD5758D - Add delays and ACKs [esphome#5524](https://github.com/esphome/esphome/pull/5524) by [@Cossid](https://github.com/Cossid) +- Update Improv BLE component [esphome#5518](https://github.com/esphome/esphome/pull/5518) by [@jesserockz](https://github.com/jesserockz) +- SM10BIT_BASE - Add delays and ACKs, clear all channels before sleeping. [esphome#5526](https://github.com/esphome/esphome/pull/5526) by [@Cossid](https://github.com/Cossid) +- BP1658CJ - Clear all channels before sleeping. [esphome#5525](https://github.com/esphome/esphome/pull/5525) by [@Cossid](https://github.com/Cossid) +- Prometheus fix for esp-idf and fix newlines [esphome#5536](https://github.com/esphome/esphome/pull/5536) by [@jesserockz](https://github.com/jesserockz) +- Make IPAddress's operator!= compare values, not memory addresses. [esphome#5537](https://github.com/esphome/esphome/pull/5537) by [@raineth](https://github.com/raineth) +- Add change i2c address and allow multi conf for TB6612FNG [esphome#5492](https://github.com/esphome/esphome/pull/5492) by [@max246](https://github.com/max246) +- Add stream start and end events [esphome#5545](https://github.com/esphome/esphome/pull/5545) by [@jesserockz](https://github.com/jesserockz) +- Fix esp32_improv authorizer with no binary sensors in config [esphome#5546](https://github.com/esphome/esphome/pull/5546) by [@jesserockz](https://github.com/jesserockz) +- More voice assistant fixes [esphome#5547](https://github.com/esphome/esphome/pull/5547) by [@jesserockz](https://github.com/jesserockz) +- Fix default libretiny manufacturer reported to HA [esphome#5549](https://github.com/esphome/esphome/pull/5549) by [@jesserockz](https://github.com/jesserockz) +- SML: fix incomplete sign extension for abbreviated transmissions [esphome#5544](https://github.com/esphome/esphome/pull/5544) by [@fblaese](https://github.com/fblaese) +- esp32_improv advertise capabilities and state in ble service data [esphome#5553](https://github.com/esphome/esphome/pull/5553) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.11.0.mdx b/src/content/docs/changelog/2023.11.0.mdx new file mode 100644 index 0000000000..e6a451fd18 --- /dev/null +++ b/src/content/docs/changelog/2023.11.0.mdx @@ -0,0 +1,262 @@ +--- +description: "Changelog for ESPHome 2023.11.0." +title: "ESPHome 2023.11.0 - 15th November 2023" +pagefind: false +slug: "changelog/2023.11.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Text Components + +We finally have implemented the [Text](/components/text/) Components. +Many people have been using "Text Input Helpers" to get user entered text into +ESPHome for various reasons. Now ESPHome can expose text entities +directly to Home Assistant. These require Home Assistant 2023.11 or above to use. + +## Various Automations + +- BLE have had `ble.enable` and `ble.disable` actions added to turn on and off when not needed, + as well as a new condition `ble.enabled` to check the state. + +- Wi-Fi has new triggers for `on_connect` and `on_disconnect`. + +- `api` has new triggers `on_client_connected` and `on_client_disconnected` which were + released in the 2023.10.5 patch version due to requiring that specific PR to not cause merge + conflicts later. + +## Areas + +When you add a new ESPHome device to Home Assistant, you assign that device to an area. +From Home Assistant 2023.12, you will be able to specify the suggested area that Home Assistant +pre-populates when you connect the device. + +```yaml +esphome: + name: living-room-light + friendly_name: Living Room Light + area: Living Room +``` + +{/* markdownlint-disable MD013 */} + +## Release 2023.11.1 - November 16 + +- Add more VA triggers [esphome#5762](https://github.com/esphome/esphome/pull/5762) by [@kbx81](https://github.com/kbx81) +- Fix MY9231 flicker [esphome#5765](https://github.com/esphome/esphome/pull/5765) by [@Mat931](https://github.com/Mat931) + +## Release 2023.11.2 - November 18 + +- Bump aioesphomeapi from 18.4.0 to 18.4.1 [esphome#5767](https://github.com/esphome/esphome/pull/5767) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 18.4.1 to 18.5.2 [esphome#5780](https://github.com/esphome/esphome/pull/5780) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- fix 32-bit arm [esphome#5781](https://github.com/esphome/esphome/pull/5781) by [@ssieb](https://github.com/ssieb) +- Add 2MB option for partitions.csv generation and restore use of user-defined partitions [esphome#5779](https://github.com/esphome/esphome/pull/5779) by [@kbx81](https://github.com/kbx81) + +## Release 2023.11.3 - November 22 + +- include payload_open when a lock supports OPEN [esphome#5809](https://github.com/esphome/esphome/pull/5809) by [@ccutrer](https://github.com/ccutrer) +- dashboard: Fix online status when api is disabled [esphome#5791](https://github.com/esphome/esphome/pull/5791) by [@bdraco](https://github.com/bdraco) +- fix: compile errors with fonts [esphome#5808](https://github.com/esphome/esphome/pull/5808) by [@cvandesande](https://github.com/cvandesande) +- Early return when there are no wifi scan results [esphome#5797](https://github.com/esphome/esphome/pull/5797) by [@jesserockz](https://github.com/jesserockz) +- Add some additional VA triggers, part 2 [esphome#5811](https://github.com/esphome/esphome/pull/5811) by [@kbx81](https://github.com/kbx81) + +## Release 2023.11.4 - November 24 + +- Allow images to be downloaded from URLs [esphome#5214](https://github.com/esphome/esphome/pull/5214) by [@landonr](https://github.com/landonr) + +## Release 2023.11.5 - November 28 + +- Voice Assistant improvements [esphome#5827](https://github.com/esphome/esphome/pull/5827) by [@jesserockz](https://github.com/jesserockz) +- Fix missing include in remote_base [esphome#5843](https://github.com/esphome/esphome/pull/5843) by [@jesserockz](https://github.com/jesserockz) +- Add 'voice_assistant.connected' condition [esphome#5845](https://github.com/esphome/esphome/pull/5845) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.11.6 - November 28 + +- Fix write_speaker without speaker in config [esphome#5847](https://github.com/esphome/esphome/pull/5847) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add Support for Sensirion SFA30 sensor [esphome#5519](https://github.com/esphome/esphome/pull/5519) by [@ghsensdev](https://github.com/ghsensdev) (new-integration) +- add uart button [esphome#5540](https://github.com/esphome/esphome/pull/5540) by [@ssieb](https://github.com/ssieb) (new-integration) +- Add ZH/LT-01 climate component with IR receiver option [esphome#4333](https://github.com/esphome/esphome/pull/4333) by [@cfeenstra1024](https://github.com/cfeenstra1024) (new-integration) +- Feat: Add GREE climateir component [esphome#4464](https://github.com/esphome/esphome/pull/4464) by [@PiuPiuson](https://github.com/PiuPiuson) (new-integration) +- AMS iAQ Core CO2 sensor component [esphome#5192](https://github.com/esphome/esphome/pull/5192) by [@yozik04](https://github.com/yozik04) (new-integration) +- Add IR Noblex climate component [esphome#4913](https://github.com/esphome/esphome/pull/4913) by [@AGalfra](https://github.com/AGalfra) (new-integration) +- Add text component [esphome#5336](https://github.com/esphome/esphome/pull/5336) by [@EternityForest](https://github.com/EternityForest) (new-integration) +- Add support for honeywellabp2 pressure sensor [esphome#5422](https://github.com/esphome/esphome/pull/5422) by [@jpfaff](https://github.com/jpfaff) (new-integration) +- Add Emc2101 [esphome#4491](https://github.com/esphome/esphome/pull/4491) by [@ellull](https://github.com/ellull) (new-integration) +- Add support for Qwiic PIR binary sensor [esphome#5194](https://github.com/esphome/esphome/pull/5194) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add dfrobot_sen0395 mmwave radar component [esphome#4203](https://github.com/esphome/esphome/pull/4203) by [@niklasweber](https://github.com/niklasweber) (new-integration) +- Add HLK-LD2420 mmWave Radar module component. [esphome#4847](https://github.com/esphome/esphome/pull/4847) by [@descipher](https://github.com/descipher) (new-integration) +- Add Micronova component [esphome#4760](https://github.com/esphome/esphome/pull/4760) by [@Jorre05](https://github.com/Jorre05) (new-integration) +- Add differential pressure sensor support for CFSensor XGZP68xxD devices [esphome#5562](https://github.com/esphome/esphome/pull/5562) by [@gcormier](https://github.com/gcormier) (new-integration) +- Add spi support for ade7953 [esphome#5439](https://github.com/esphome/esphome/pull/5439) by [@angelnu](https://github.com/angelnu) (new-integration) +- Add resistance_sampler interface for config validation [esphome#5718](https://github.com/esphome/esphome/pull/5718) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- Hydreon updates [esphome#5424](https://github.com/esphome/esphome/pull/5424) by [@jj-uk](https://github.com/jj-uk) (breaking-change) +- Fix esp32_rmt_led_strip custom timing units [esphome#5696](https://github.com/esphome/esphome/pull/5696) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- Handle nanoseconds in config [esphome#5695](https://github.com/esphome/esphome/pull/5695) by [@jesserockz](https://github.com/jesserockz) +- Fix esp32_rmt_led_strip custom timing units [esphome#5696](https://github.com/esphome/esphome/pull/5696) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix static assets cache logic [esphome#5700](https://github.com/esphome/esphome/pull/5700) by [@bdraco](https://github.com/bdraco) +- Use piwheels for armv7 docker image builds [esphome#5703](https://github.com/esphome/esphome/pull/5703) by [@bdraco](https://github.com/bdraco) +- fix: Fix broken bluetooth_proxy and ble_clients after BLE enable/disable [esphome#5704](https://github.com/esphome/esphome/pull/5704) by [@Rapsssito](https://github.com/Rapsssito) +- Bump aioesphomeapi to 18.2.7 [esphome#5706](https://github.com/esphome/esphome/pull/5706) by [@bdraco](https://github.com/bdraco) +- Update Dockerfile to use piwheels for armv7 [esphome#5709](https://github.com/esphome/esphome/pull/5709) by [@bdraco](https://github.com/bdraco) +- Bump zeroconf from 0.120.0 to 0.122.3 [esphome#5715](https://github.com/esphome/esphome/pull/5715) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add resistance_sampler interface for config validation [esphome#5718](https://github.com/esphome/esphome/pull/5718) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Fix zeroconf name resolution refactoring error [esphome#5725](https://github.com/esphome/esphome/pull/5725) by [@bdraco](https://github.com/bdraco) +- Missed ifdefs [esphome#5727](https://github.com/esphome/esphome/pull/5727) by [@descipher](https://github.com/descipher) +- Bump aioesphomeapi from 18.2.7 to 18.4.0 [esphome#5735](https://github.com/esphome/esphome/pull/5735) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Migrate to using aioesphomeapi for the log runner to fix multiple issues [esphome#5733](https://github.com/esphome/esphome/pull/5733) by [@bdraco](https://github.com/bdraco) +- Bump zeroconf to 0.123.0 [esphome#5736](https://github.com/esphome/esphome/pull/5736) by [@bdraco](https://github.com/bdraco) +- Handle wake word not set up internally [esphome#5738](https://github.com/esphome/esphome/pull/5738) by [@jesserockz](https://github.com/jesserockz) +- dashboard: remove usage of codecs module [esphome#5741](https://github.com/esphome/esphome/pull/5741) by [@bdraco](https://github.com/bdraco) +- dashboard: Run get_serial_ports in the executor [esphome#5740](https://github.com/esphome/esphome/pull/5740) by [@bdraco](https://github.com/bdraco) +- Generate partitions.csv based on flash size [esphome#5697](https://github.com/esphome/esphome/pull/5697) by [@kbx81](https://github.com/kbx81) +- Allow setup to continue past mqtt if network/wifi is disabled [esphome#5754](https://github.com/esphome/esphome/pull/5754) by [@jesserockz](https://github.com/jesserockz) +- Dont dump wifi info when disabled [esphome#5755](https://github.com/esphome/esphome/pull/5755) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Splits FastLed test scripts out of test1.yaml [esphome#5522](https://github.com/esphome/esphome/pull/5522) by [@nielsnl68](https://github.com/nielsnl68) +- Add round sensor filter [esphome#5532](https://github.com/esphome/esphome/pull/5532) by [@jesserockz](https://github.com/jesserockz) +- Add Support for Sensirion SFA30 sensor [esphome#5519](https://github.com/esphome/esphome/pull/5519) by [@ghsensdev](https://github.com/ghsensdev) (new-integration) +- Change UART source clock to `UART_SCLK_DEFAULT` when IDF >=v5 [esphome#5533](https://github.com/esphome/esphome/pull/5533) by [@leoshusar](https://github.com/leoshusar) +- add uart button [esphome#5540](https://github.com/esphome/esphome/pull/5540) by [@ssieb](https://github.com/ssieb) (new-integration) +- add on/off options for uart switch [esphome#5539](https://github.com/esphome/esphome/pull/5539) by [@ssieb](https://github.com/ssieb) +- Update docker base and packages + docker python 3.11 [esphome#5473](https://github.com/esphome/esphome/pull/5473) by [@bdraco](https://github.com/bdraco) +- IDF 5 fixes for various components from test1.yaml [esphome#5451](https://github.com/esphome/esphome/pull/5451) by [@kbx81](https://github.com/kbx81) +- Bump aioesphomeapi from 15.0.0 to 18.0.6 [esphome#5557](https://github.com/esphome/esphome/pull/5557) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.115.1 to 0.119.0 [esphome#5560](https://github.com/esphome/esphome/pull/5560) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add config to allow suppression of warnings about use of strapping pins [esphome#5287](https://github.com/esphome/esphome/pull/5287) by [@clydebarrow](https://github.com/clydebarrow) +- Hydreon updates [esphome#5424](https://github.com/esphome/esphome/pull/5424) by [@jj-uk](https://github.com/jj-uk) (breaking-change) +- Bump actions/checkout from 4.1.0 to 4.1.1 [esphome#5551](https://github.com/esphome/esphome/pull/5551) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.10.1 to 3.13.0 [esphome#5428](https://github.com/esphome/esphome/pull/5428) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tzlocal from 5.0.1 to 5.1 [esphome#5480](https://github.com/esphome/esphome/pull/5480) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.9.1 to 23.10.0 [esphome#5561](https://github.com/esphome/esphome/pull/5561) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fan no off cycle action [esphome#5564](https://github.com/esphome/esphome/pull/5564) by [@skykingjwc](https://github.com/skykingjwc) +- Bump aioesphomeapi from 18.0.6 to 18.0.7 [esphome#5573](https://github.com/esphome/esphome/pull/5573) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Remove unnecessary checks in Nextion component [esphome#5578](https://github.com/esphome/esphome/pull/5578) by [@edwardtfn](https://github.com/edwardtfn) +- update storage version from mdns [esphome#5584](https://github.com/esphome/esphome/pull/5584) by [@glmnet](https://github.com/glmnet) +- set Nextion protocol reparse mode [esphome#5484](https://github.com/esphome/esphome/pull/5484) by [@edwardtfn](https://github.com/edwardtfn) +- Add address text sensor to WireGuard [esphome#5576](https://github.com/esphome/esphome/pull/5576) by [@droscy](https://github.com/droscy) +- Add LibreTiny hardwares to PR Template [esphome#5575](https://github.com/esphome/esphome/pull/5575) by [@HeMan](https://github.com/HeMan) +- Bump pytest-mock from 3.11.1 to 3.12.0 [esphome#5571](https://github.com/esphome/esphome/pull/5571) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.13.0 to 3.15.0 [esphome#5570](https://github.com/esphome/esphome/pull/5570) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add ZH/LT-01 climate component with IR receiver option [esphome#4333](https://github.com/esphome/esphome/pull/4333) by [@cfeenstra1024](https://github.com/cfeenstra1024) (new-integration) +- Feat: Add GREE climateir component [esphome#4464](https://github.com/esphome/esphome/pull/4464) by [@PiuPiuson](https://github.com/PiuPiuson) (new-integration) +- AMS iAQ Core CO2 sensor component [esphome#5192](https://github.com/esphome/esphome/pull/5192) by [@yozik04](https://github.com/yozik04) (new-integration) +- Add IR Noblex climate component [esphome#4913](https://github.com/esphome/esphome/pull/4913) by [@AGalfra](https://github.com/AGalfra) (new-integration) +- Bump aioesphomeapi from 18.0.7 to 18.0.12 [esphome#5597](https://github.com/esphome/esphome/pull/5597) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add text component [esphome#5336](https://github.com/esphome/esphome/pull/5336) by [@EternityForest](https://github.com/EternityForest) (new-integration) +- Fix exception handling when loading packages [esphome#5569](https://github.com/esphome/esphome/pull/5569) by [@dentra](https://github.com/dentra) +- Add support for honeywellabp2 pressure sensor [esphome#5422](https://github.com/esphome/esphome/pull/5422) by [@jpfaff](https://github.com/jpfaff) (new-integration) +- Add Emc2101 [esphome#4491](https://github.com/esphome/esphome/pull/4491) by [@ellull](https://github.com/ellull) (new-integration) +- Fix: Incorporate unique serial number in preference's hash for multiple Sensirion sensors [esphome#5479](https://github.com/esphome/esphome/pull/5479) by [@kahrendt](https://github.com/kahrendt) +- Add support for Qwiic PIR binary sensor [esphome#5194](https://github.com/esphome/esphome/pull/5194) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add ignore out of range option for clamp filter [esphome#5455](https://github.com/esphome/esphome/pull/5455) by [@kahrendt](https://github.com/kahrendt) +- Print text mqtt command topic [esphome#5601](https://github.com/esphome/esphome/pull/5601) by [@jesserockz](https://github.com/jesserockz) +- Correctly allow mqtt topics to be none so ESPHome does not sub/pub to them [esphome#5213](https://github.com/esphome/esphome/pull/5213) by [@jesserockz](https://github.com/jesserockz) +- SX1509 output debounce fix (resolves esphome/issues#4402) [esphome#4672](https://github.com/esphome/esphome/pull/4672) by [@tracestep](https://github.com/tracestep) +- Add details when error loading package [esphome#5603](https://github.com/esphome/esphome/pull/5603) by [@dentra](https://github.com/dentra) +- Fallback to main secrets.yaml for packages [esphome#5604](https://github.com/esphome/esphome/pull/5604) by [@dentra](https://github.com/dentra) +- Add area (zone) to esphome core config to be suggested through API and MQTT. [esphome#5602](https://github.com/esphome/esphome/pull/5602) by [@Cossid](https://github.com/Cossid) +- Devcontainer: allow pip install and dont warn about root user [esphome#5608](https://github.com/esphome/esphome/pull/5608) by [@jesserockz](https://github.com/jesserockz) +- Validate test files before compiling [esphome#5611](https://github.com/esphome/esphome/pull/5611) by [@jesserockz](https://github.com/jesserockz) +- Minor defines.h updates [esphome#5610](https://github.com/esphome/esphome/pull/5610) by [@jesserockz](https://github.com/jesserockz) +- timeout filter: return value [esphome#5612](https://github.com/esphome/esphome/pull/5612) by [@jesserockz](https://github.com/jesserockz) +- Add dfrobot_sen0395 mmwave radar component [esphome#4203](https://github.com/esphome/esphome/pull/4203) by [@niklasweber](https://github.com/niklasweber) (new-integration) +- refactor mcp4728 component [esphome#5609](https://github.com/esphome/esphome/pull/5609) by [@ssieb](https://github.com/ssieb) +- Fix HA error related to incorrect state class [esphome#5605](https://github.com/esphome/esphome/pull/5605) by [@nagyrobi](https://github.com/nagyrobi) +- Fix xpt2046 for IDF 5 [esphome#5614](https://github.com/esphome/esphome/pull/5614) by [@kbx81](https://github.com/kbx81) +- IDF 5 fixes for various components from test4.yaml [esphome#5622](https://github.com/esphome/esphome/pull/5622) by [@kbx81](https://github.com/kbx81) +- IDF 5 fixes for various components from test2.yaml [esphome#5621](https://github.com/esphome/esphome/pull/5621) by [@kbx81](https://github.com/kbx81) +- Fix armv7 docker builds [esphome#5630](https://github.com/esphome/esphome/pull/5630) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi from 18.0.12 to 18.2.0 [esphome#5606](https://github.com/esphome/esphome/pull/5606) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add needs-docs workflow to fail CI [esphome#5643](https://github.com/esphome/esphome/pull/5643) by [@jesserockz](https://github.com/jesserockz) +- Add support for PCA9535 16 bit I/O expander [esphome#5634](https://github.com/esphome/esphome/pull/5634) by [@clydebarrow](https://github.com/clydebarrow) +- Fix nextion waveform sending for multiple waveforms [esphome#4408](https://github.com/esphome/esphome/pull/4408) by [@gpambrozio](https://github.com/gpambrozio) +- Allow validation of pins based on hub config [esphome#5647](https://github.com/esphome/esphome/pull/5647) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 18.2.0 to 18.2.1 [esphome#5653](https://github.com/esphome/esphome/pull/5653) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Validate sn74hc595 pin number are within range [esphome#5655](https://github.com/esphome/esphome/pull/5655) by [@jesserockz](https://github.com/jesserockz) +- Update PCA9554 pin checks to new facility [esphome#5656](https://github.com/esphome/esphome/pull/5656) by [@clydebarrow](https://github.com/clydebarrow) +- Update mDNS component to 1.2.2 [esphome#5654](https://github.com/esphome/esphome/pull/5654) by [@HeMan](https://github.com/HeMan) +- Fix return value of run_external_command [esphome#5657](https://github.com/esphome/esphome/pull/5657) by [@jesserockz](https://github.com/jesserockz) +- Update RTTTL component to allow I2S [esphome#5177](https://github.com/esphome/esphome/pull/5177) by [@nielsnl68](https://github.com/nielsnl68) +- Bump flake8 version in pre-commit to match requirements file [esphome#5658](https://github.com/esphome/esphome/pull/5658) by [@jesserockz](https://github.com/jesserockz) +- Bump pytest from 7.4.2 to 7.4.3 [esphome#5599](https://github.com/esphome/esphome/pull/5599) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tzlocal from 5.1 to 5.2 [esphome#5594](https://github.com/esphome/esphome/pull/5594) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.10.0 to 23.10.1 [esphome#5593](https://github.com/esphome/esphome/pull/5593) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add Healthcheck to Dockerfile [esphome#5651](https://github.com/esphome/esphome/pull/5651) by [@JcMinarro](https://github.com/JcMinarro) +- Add HLK-LD2420 mmWave Radar module component. [esphome#4847](https://github.com/esphome/esphome/pull/4847) by [@descipher](https://github.com/descipher) (new-integration) +- Add Micronova component [esphome#4760](https://github.com/esphome/esphome/pull/4760) by [@Jorre05](https://github.com/Jorre05) (new-integration) +- Add basic shell autocompletion using argcomplete [esphome#5618](https://github.com/esphome/esphome/pull/5618) by [@Nardol](https://github.com/Nardol) +- Fixed int variables for user defined service in case of ESP32-C3 [esphome#5675](https://github.com/esphome/esphome/pull/5675) by [@paveldn](https://github.com/paveldn) +- Add callback for raw sml messages [esphome#5668](https://github.com/esphome/esphome/pull/5668) by [@micw](https://github.com/micw) +- Fix compile with latest esp-idf on esp32c6 [esphome#5677](https://github.com/esphome/esphome/pull/5677) by [@DAVe3283](https://github.com/DAVe3283) +- Null topic_prefix disables MQTT publishing/subscription unless topic is explicitly configured [esphome#5644](https://github.com/esphome/esphome/pull/5644) by [@kahrendt](https://github.com/kahrendt) +- feat: Add ESP32 BLE enable/disable automations [esphome#5616](https://github.com/esphome/esphome/pull/5616) by [@Rapsssito](https://github.com/Rapsssito) +- ble_client rssi sensor fix when not connected [esphome#5632](https://github.com/esphome/esphome/pull/5632) by [@jesserockz](https://github.com/jesserockz) +- Add Byron Doorbell RF protocol [esphome#4718](https://github.com/esphome/esphome/pull/4718) by [@marshn](https://github.com/marshn) +- Refactor dashboard zeroconf support [esphome#5681](https://github.com/esphome/esphome/pull/5681) by [@bdraco](https://github.com/bdraco) +- Allow static assets to be cached if not in debug mode [esphome#5684](https://github.com/esphome/esphome/pull/5684) by [@jesserockz](https://github.com/jesserockz) +- Remove extra code in old sgp40 [esphome#5685](https://github.com/esphome/esphome/pull/5685) by [@jesserockz](https://github.com/jesserockz) +- Allow pulse light effect to have separate on and off transition lengths [esphome#5659](https://github.com/esphome/esphome/pull/5659) by [@jesserockz](https://github.com/jesserockz) +- Add differential pressure sensor support for CFSensor XGZP68xxD devices [esphome#5562](https://github.com/esphome/esphome/pull/5562) by [@gcormier](https://github.com/gcormier) (new-integration) +- Bump zeroconf from 0.119.0 to 0.120.0 [esphome#5682](https://github.com/esphome/esphome/pull/5682) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add spi support for ade7953 [esphome#5439](https://github.com/esphome/esphome/pull/5439) by [@angelnu](https://github.com/angelnu) (new-integration) +- Remove page jump on Nextion startup [esphome#5673](https://github.com/esphome/esphome/pull/5673) by [@edwardtfn](https://github.com/edwardtfn) +- [web_server] Adds the ability to handle Private Network Access preflight requests [esphome#5669](https://github.com/esphome/esphome/pull/5669) by [@DanielBaulig](https://github.com/DanielBaulig) +- Update esphome-dashboard to version 20231107.0 [esphome#5686](https://github.com/esphome/esphome/pull/5686) by [@jesserockz](https://github.com/jesserockz) +- add wifi.on_connect and wifi.on_disconnect triggers [esphome#3639](https://github.com/esphome/esphome/pull/3639) by [@ChemicalXandco](https://github.com/ChemicalXandco) +- Implement a memory cache for dashboard entries to avoid frequent disk reads [esphome#5687](https://github.com/esphome/esphome/pull/5687) by [@bdraco](https://github.com/bdraco) +- support spi for sn74hc595 [esphome#5491](https://github.com/esphome/esphome/pull/5491) by [@angelnu](https://github.com/angelnu) +- Handle on_disconnect when Wi-Fi is disabled [esphome#5691](https://github.com/esphome/esphome/pull/5691) by [@kbx81](https://github.com/kbx81) +- Bump aioesphomeapi from 18.2.1 to 18.2.4 [esphome#5692](https://github.com/esphome/esphome/pull/5692) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Handle nanoseconds in config [esphome#5695](https://github.com/esphome/esphome/pull/5695) by [@jesserockz](https://github.com/jesserockz) +- Fix esp32_rmt_led_strip custom timing units [esphome#5696](https://github.com/esphome/esphome/pull/5696) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix static assets cache logic [esphome#5700](https://github.com/esphome/esphome/pull/5700) by [@bdraco](https://github.com/bdraco) +- Use piwheels for armv7 docker image builds [esphome#5703](https://github.com/esphome/esphome/pull/5703) by [@bdraco](https://github.com/bdraco) +- fix: Fix broken bluetooth_proxy and ble_clients after BLE enable/disable [esphome#5704](https://github.com/esphome/esphome/pull/5704) by [@Rapsssito](https://github.com/Rapsssito) +- Bump aioesphomeapi to 18.2.7 [esphome#5706](https://github.com/esphome/esphome/pull/5706) by [@bdraco](https://github.com/bdraco) +- Update Dockerfile to use piwheels for armv7 [esphome#5709](https://github.com/esphome/esphome/pull/5709) by [@bdraco](https://github.com/bdraco) +- Bump zeroconf from 0.120.0 to 0.122.3 [esphome#5715](https://github.com/esphome/esphome/pull/5715) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add resistance_sampler interface for config validation [esphome#5718](https://github.com/esphome/esphome/pull/5718) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Fix zeroconf name resolution refactoring error [esphome#5725](https://github.com/esphome/esphome/pull/5725) by [@bdraco](https://github.com/bdraco) +- Missed ifdefs [esphome#5727](https://github.com/esphome/esphome/pull/5727) by [@descipher](https://github.com/descipher) +- Bump aioesphomeapi from 18.2.7 to 18.4.0 [esphome#5735](https://github.com/esphome/esphome/pull/5735) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Migrate to using aioesphomeapi for the log runner to fix multiple issues [esphome#5733](https://github.com/esphome/esphome/pull/5733) by [@bdraco](https://github.com/bdraco) +- Bump zeroconf to 0.123.0 [esphome#5736](https://github.com/esphome/esphome/pull/5736) by [@bdraco](https://github.com/bdraco) +- Handle wake word not set up internally [esphome#5738](https://github.com/esphome/esphome/pull/5738) by [@jesserockz](https://github.com/jesserockz) +- dashboard: remove usage of codecs module [esphome#5741](https://github.com/esphome/esphome/pull/5741) by [@bdraco](https://github.com/bdraco) +- dashboard: Run get_serial_ports in the executor [esphome#5740](https://github.com/esphome/esphome/pull/5740) by [@bdraco](https://github.com/bdraco) +- Generate partitions.csv based on flash size [esphome#5697](https://github.com/esphome/esphome/pull/5697) by [@kbx81](https://github.com/kbx81) +- Allow setup to continue past mqtt if network/wifi is disabled [esphome#5754](https://github.com/esphome/esphome/pull/5754) by [@jesserockz](https://github.com/jesserockz) +- Dont dump wifi info when disabled [esphome#5755](https://github.com/esphome/esphome/pull/5755) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.12.0.mdx b/src/content/docs/changelog/2023.12.0.mdx new file mode 100644 index 0000000000..5aac31df61 --- /dev/null +++ b/src/content/docs/changelog/2023.12.0.mdx @@ -0,0 +1,303 @@ +--- +description: "Changelog for ESPHome 2023.12.0." +title: "ESPHome 2023.12.0 - 20th December 2023" +pagefind: false +slug: "changelog/2023.12.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Graphical Menu + +Following on from the previous [Lcd Menu](/components/display_menu/lcd_menu/) that was only for LCD displays, +there is now a new [Graphical Display Menu](/components/display_menu/graphical_display_menu/) that can be used with any +graphical/pixel based display. + +## Pin Reuse validation + +There is a new validation performed on configurations to ensure that pins are not reused unintentionally. +This is a common source of issues and generally a pin does not need to be reused across multiple components +in a single configuration. Pins should only be reused in a very limited set of circumstances and seeing the +error will generally mean that you need to reorganise your configuration to not reuse the pins. +The error can be bypassed by specifically adding another config item to all of the +duplicate pin definitions. See the [Pin Schema](/guides/configuration-types#pin-schema) for details. + +## Touchscreen internal changes + +The touchscreen component code has had a big overhaul which breaks any external components or open PRs for +new touchscreens. See [esphome#4596](https://github.com/esphome/esphome/pull/4596) for details if this affects you. + +## MCP3008 breaking changes + +The MCP3008 has had a restructure of the code and at the same time the default update interval has been changed +to 60 seconds, the units, device class and state class default have also been set to sane defaults expected for +a voltage sensor. + +{/* markdownlint-disable MD013 */} + +## Release 2023.12.1 - December 21 + +- Fix replaced - in allowed characters during object_id sanitizing [esphome#5983](https://github.com/esphome/esphome/pull/5983) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.12.2 - December 22 + +- ESP32-S3 and ESP-IDF don't play well with USB_CDC and need USB_SERIAL_JTAG [esphome#5929](https://github.com/esphome/esphome/pull/5929) by [@clydebarrow](https://github.com/clydebarrow) +- Update libtiff6 [esphome#5985](https://github.com/esphome/esphome/pull/5985) by [@cvandesande](https://github.com/cvandesande) +- Override GPIOs 12 and 13 on the airm2m (LuatOS) board [esphome#5982](https://github.com/esphome/esphome/pull/5982) by [@davidmonro](https://github.com/davidmonro) +- Add workaround for crash in Arduino 2.0.9 when CDC is configured [esphome#5987](https://github.com/esphome/esphome/pull/5987) by [@kbx81](https://github.com/kbx81) +- web_server.py: return empty content when file doesn't exist [esphome#5980](https://github.com/esphome/esphome/pull/5980) by [@jessicah](https://github.com/jessicah) + +## Release 2023.12.3 - December 22 + +- Fix unexpected disconnects when outgoing buffer is full during keepalive [esphome#5988](https://github.com/esphome/esphome/pull/5988) by [@bdraco](https://github.com/bdraco) +- Regenerate api_pb2 after manual changes were added incorrectly in #5732 [esphome#5990](https://github.com/esphome/esphome/pull/5990) by [@jesserockz](https://github.com/jesserockz) +- Improved sensor readings in htu21d component. [esphome#5839](https://github.com/esphome/esphome/pull/5839) by [@matzman666](https://github.com/matzman666) +- Fix dashboard logs when api is disabled and using MQTT [esphome#5992](https://github.com/esphome/esphome/pull/5992) by [@bdraco](https://github.com/bdraco) +- Fix broken configs with non-existent components [esphome#5993](https://github.com/esphome/esphome/pull/5993) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.12.4 - December 25 + +- dashboard: Only ping when polling is active [esphome#6001](https://github.com/esphome/esphome/pull/6001) by [@bdraco](https://github.com/bdraco) +- tt21100: restore init read [esphome#6008](https://github.com/esphome/esphome/pull/6008) by [@nielsnl68](https://github.com/nielsnl68) +- dashboard: Fix file writes on Windows [esphome#6013](https://github.com/esphome/esphome/pull/6013) by [@bdraco](https://github.com/bdraco) +- Display: fix class inherence in Python script [esphome#6009](https://github.com/esphome/esphome/pull/6009) by [@nielsnl68](https://github.com/nielsnl68) + +## Release 2023.12.5 - December 25 + +- Fix docker builds [esphome#6012](https://github.com/esphome/esphome/pull/6012) by [@bdraco](https://github.com/bdraco) + +## Release 2023.12.6 - January 15 + +- Fix device not requesting Home Assistant time at the update interval [esphome#6022](https://github.com/esphome/esphome/pull/6022) by [@bdraco](https://github.com/bdraco) +- fix compilation error for libretiny [esphome#6064](https://github.com/esphome/esphome/pull/6064) by [@tomaszduda23](https://github.com/tomaszduda23) +- pylontech: Fix parsing error with US2000 [esphome#6061](https://github.com/esphome/esphome/pull/6061) by [@functionpointer](https://github.com/functionpointer) +- Support full (>460 char) dumps of Pronto IR commands [esphome#6040](https://github.com/esphome/esphome/pull/6040) by [@rpaskowitz](https://github.com/rpaskowitz) +- ESP32-C3 USB_CDC fixes [esphome#6069](https://github.com/esphome/esphome/pull/6069) by [@kbx81](https://github.com/kbx81) +- Improv Serial -- don't wait for incoming bytes [esphome#6089](https://github.com/esphome/esphome/pull/6089) by [@kbx81](https://github.com/kbx81) +- add STATE_CLASS_TOTAL_INCREASING to bl0940 and bl0942 [esphome#6090](https://github.com/esphome/esphome/pull/6090) by [@tomaszduda23](https://github.com/tomaszduda23) +- Fallback to pure-python loader for better error when YAML loading fails [esphome#6081](https://github.com/esphome/esphome/pull/6081) by [@bdraco](https://github.com/bdraco) + +## Release 2023.12.7 - January 17 + +- Fix RMT timing clock base [esphome#6101](https://github.com/esphome/esphome/pull/6101) by [@majkrzak](https://github.com/majkrzak) +- Create RingBuffer for VoiceAssistant [esphome#6102](https://github.com/esphome/esphome/pull/6102) by [@jesserockz](https://github.com/jesserockz) +- Inkplate6: Fix crash with initial set of greyscale [esphome#6038](https://github.com/esphome/esphome/pull/6038) by [@clydebarrow](https://github.com/clydebarrow) + +## Release 2023.12.8 - January 19 + +- Let show_*_page actions depend on "Display" [esphome#6092](https://github.com/esphome/esphome/pull/6092) by [@guillempages](https://github.com/guillempages) +- Fix some Voice Assistant bugs [esphome#6121](https://github.com/esphome/esphome/pull/6121) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.12.9 - January 22 + +- fix sen5x negative temperature [esphome#6082](https://github.com/esphome/esphome/pull/6082) by [@ssieb](https://github.com/ssieb) +- negative values for all DHT22 variants [esphome#6074](https://github.com/esphome/esphome/pull/6074) by [@ssieb](https://github.com/ssieb) +- fix negative temperature for pmsx003 [esphome#6083](https://github.com/esphome/esphome/pull/6083) by [@ssieb](https://github.com/ssieb) +- fix: negative temperatures on PMS5003T sensors [esphome#6100](https://github.com/esphome/esphome/pull/6100) by [@aschmitz](https://github.com/aschmitz) + +## Full list of changes + +### New Components + +- Add ENS160 Sensor [esphome#4243](https://github.com/esphome/esphome/pull/4243) by [@vincentscode](https://github.com/vincentscode) (new-integration) +- Create GT911 Touchscreen component [esphome#4027](https://github.com/esphome/esphome/pull/4027) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Pylontech integration (solar battery bank) [esphome#4688](https://github.com/esphome/esphome/pull/4688) by [@functionpointer](https://github.com/functionpointer) (new-integration) +- Add Chamberlain/HomEntry HE60R garage door opener [esphome#5834](https://github.com/esphome/esphome/pull/5834) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Add graphical display menu [esphome#4105](https://github.com/esphome/esphome/pull/4105) by [@MrMDavidson](https://github.com/MrMDavidson) (new-integration) +- Updating the touchscreen interface structure [esphome#4596](https://github.com/esphome/esphome/pull/4596) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) +- Added the A02YYUW distance sensor [esphome#5729](https://github.com/esphome/esphome/pull/5729) by [@TH-Braemer](https://github.com/TH-Braemer) (new-integration) +- Add support for PN7160 [esphome#5486](https://github.com/esphome/esphome/pull/5486) by [@kbx81](https://github.com/kbx81) (new-integration) +- Add support for PN7150 [esphome#5487](https://github.com/esphome/esphome/pull/5487) by [@kbx81](https://github.com/kbx81) (new-integration) + +### Breaking Changes + +- Add proper support for SH1107 to SSD1306 component [esphome#5166](https://github.com/esphome/esphome/pull/5166) by [@nikitakuklev](https://github.com/nikitakuklev) (breaking-change) +- sen5x fix temperature compensation and gas tuning [esphome#4901](https://github.com/esphome/esphome/pull/4901) by [@matt7aylor](https://github.com/matt7aylor) (breaking-change) +- Ensure names containing characters other than `a-z` `A-Z` `0-9` or `_` are unique [esphome#5810](https://github.com/esphome/esphome/pull/5810) by [@bdraco](https://github.com/bdraco) (breaking-change) +- mcp3008: Tidy up and fix auto load bug [esphome#5842](https://github.com/esphome/esphome/pull/5842) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Nextion colors parameters [esphome#5699](https://github.com/esphome/esphome/pull/5699) by [@edwardtfn](https://github.com/edwardtfn) (breaking-change) +- Checks for pins used in multiple places [esphome#5666](https://github.com/esphome/esphome/pull/5666) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Updating the touchscreen interface structure [esphome#4596](https://github.com/esphome/esphome/pull/4596) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) + +### Beta Changes + +- Allow use of CDC/JTAG loggers on esp32 variants with Arduino [esphome#4658](https://github.com/esphome/esphome/pull/4658) by [@jesserockz](https://github.com/jesserockz) +- [Logger] ESP32 S3 serial logger [esphome#4853](https://github.com/esphome/esphome/pull/4853) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Support toggle action for template cover [esphome#5917](https://github.com/esphome/esphome/pull/5917) by [@jochenvg](https://github.com/jochenvg) +- Fix SplitDefault with variants [esphome#5928](https://github.com/esphome/esphome/pull/5928) by [@jesserockz](https://github.com/jesserockz) +- Update ENS160 TVOC device_class and AQI units to match required by HA [esphome#5939](https://github.com/esphome/esphome/pull/5939) by [@mrtoy-me](https://github.com/mrtoy-me) +- Bump zeroconf from 0.128.4 to 0.130.0 [esphome#5950](https://github.com/esphome/esphome/pull/5950) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- UARTComponent inline doc [esphome#5930](https://github.com/esphome/esphome/pull/5930) by [@edwardtfn](https://github.com/edwardtfn) +- Fix - Tuya Fan - Allow integer speed datapoint [esphome#5948](https://github.com/esphome/esphome/pull/5948) by [@cram42](https://github.com/cram42) +- i2s_audio: Set player_task's prio to 1 [esphome#5945](https://github.com/esphome/esphome/pull/5945) by [@gaaf](https://github.com/gaaf) +- esp32_camera: Set framebuffer task prio to 1 [esphome#5943](https://github.com/esphome/esphome/pull/5943) by [@gaaf](https://github.com/gaaf) +- web_server_idf: fix call with hardcoded http code [esphome#5942](https://github.com/esphome/esphome/pull/5942) by [@dentra](https://github.com/dentra) +- Revert pure virtual functions in UART component from #5920 [esphome#5932](https://github.com/esphome/esphome/pull/5932) by [@DrCoolzic](https://github.com/DrCoolzic) +- Use the correct UART/`Serial` when CDC is enabled [esphome#5957](https://github.com/esphome/esphome/pull/5957) by [@kbx81](https://github.com/kbx81) +- rename `set_raw_touch_position_` to `add_raw_touch_position_` [esphome#5962](https://github.com/esphome/esphome/pull/5962) by [@nielsnl68](https://github.com/nielsnl68) +- Fix build issue with UART component when building with Arduino and CDC [esphome#5964](https://github.com/esphome/esphome/pull/5964) by [@kbx81](https://github.com/kbx81) +- Fix `I2CBus::write()` bug and add i2c documentation [esphome#5947](https://github.com/esphome/esphome/pull/5947) by [@DrCoolzic](https://github.com/DrCoolzic) +- Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 [esphome#5961](https://github.com/esphome/esphome/pull/5961) by [@mathieu-mp](https://github.com/mathieu-mp) +- Speed up writing protobuf strings/bytes [esphome#5828](https://github.com/esphome/esphome/pull/5828) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi to 21.0.1 [esphome#5969](https://github.com/esphome/esphome/pull/5969) by [@bdraco](https://github.com/bdraco) +- image: allow the image to by auto-loaded by animation [esphome#5139](https://github.com/esphome/esphome/pull/5139) by [@ayufan](https://github.com/ayufan) +- Fix pin reuse error with pin expanders [esphome#5973](https://github.com/esphome/esphome/pull/5973) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Nextion support to `esp-idf` [esphome#5667](https://github.com/esphome/esphome/pull/5667) by [@edwardtfn](https://github.com/edwardtfn) +- fix pin range for xl9535 [esphome#5722](https://github.com/esphome/esphome/pull/5722) by [@ssieb](https://github.com/ssieb) +- Bump black from 23.10.1 to 23.11.0 [esphome#5702](https://github.com/esphome/esphome/pull/5702) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Speed up YAML by using YAML C loader when available [esphome#5721](https://github.com/esphome/esphome/pull/5721) by [@bdraco](https://github.com/bdraco) +- Bump Arduino Pico Framework to 3.6.0 and Platform to 1.10.0 [esphome#5731](https://github.com/esphome/esphome/pull/5731) by [@HeMan](https://github.com/HeMan) +- Correct url for Arduino platform [esphome#5744](https://github.com/esphome/esphome/pull/5744) by [@HeMan](https://github.com/HeMan) +- remote_base: added helper class and schemas [esphome#5169](https://github.com/esphome/esphome/pull/5169) by [@dudanov](https://github.com/dudanov) +- Bump zeroconf from 0.123.0 to 0.126.0 [esphome#5748](https://github.com/esphome/esphome/pull/5748) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Make precommit checks happy [esphome#5751](https://github.com/esphome/esphome/pull/5751) by [@HeMan](https://github.com/HeMan) +- dashboard: Use mdns cache when available if device connection is OTA [esphome#5724](https://github.com/esphome/esphome/pull/5724) by [@bdraco](https://github.com/bdraco) +- Speed up OTAs [esphome#5720](https://github.com/esphome/esphome/pull/5720) by [@bdraco](https://github.com/bdraco) +- dashboard: convert ping thread to use asyncio [esphome#5749](https://github.com/esphome/esphome/pull/5749) by [@bdraco](https://github.com/bdraco) +- dashboard: Break apart dashboard into separate modules [esphome#5764](https://github.com/esphome/esphome/pull/5764) by [@bdraco](https://github.com/bdraco) +- dashboard: split dashboard web server code into its own module [esphome#5770](https://github.com/esphome/esphome/pull/5770) by [@bdraco](https://github.com/bdraco) +- Bump zeroconf from 0.126.0 to 0.127.0 [esphome#5768](https://github.com/esphome/esphome/pull/5768) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- dashboard: fix subprocesses blocking the event loop [esphome#5772](https://github.com/esphome/esphome/pull/5772) by [@bdraco](https://github.com/bdraco) +- dashboard: use fastest available yaml loader in the dashboard [esphome#5771](https://github.com/esphome/esphome/pull/5771) by [@bdraco](https://github.com/bdraco) +- dashboard: Centralize dashboard entries into DashboardEntries class [esphome#5774](https://github.com/esphome/esphome/pull/5774) by [@bdraco](https://github.com/bdraco) +- Pass the name to the log runner when available [esphome#5759](https://github.com/esphome/esphome/pull/5759) by [@bdraco](https://github.com/bdraco) +- Add proper support for SH1107 to SSD1306 component [esphome#5166](https://github.com/esphome/esphome/pull/5166) by [@nikitakuklev](https://github.com/nikitakuklev) (breaking-change) +- Split release workflow jobs per system arch [esphome#5723](https://github.com/esphome/esphome/pull/5723) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi to 18.5.3 [esphome#5785](https://github.com/esphome/esphome/pull/5785) by [@bdraco](https://github.com/bdraco) +- Refactor log api client to let aioesphomeapi manage zeroconf [esphome#5783](https://github.com/esphome/esphome/pull/5783) by [@bdraco](https://github.com/bdraco) +- dashboard: Add support for firing events [esphome#5775](https://github.com/esphome/esphome/pull/5775) by [@bdraco](https://github.com/bdraco) +- dashboard: Ensure disk I/O happens in the executor [esphome#5789](https://github.com/esphome/esphome/pull/5789) by [@bdraco](https://github.com/bdraco) +- dashboard: Add lookup by name to entries [esphome#5790](https://github.com/esphome/esphome/pull/5790) by [@bdraco](https://github.com/bdraco) +- Refactor StorageJSON to keep loaded_integrations a set until its converted to JSON [esphome#5793](https://github.com/esphome/esphome/pull/5793) by [@bdraco](https://github.com/bdraco) +- wifi: Don't build SoftAP/DHCPS support unless 'ap' is in config. [esphome#5649](https://github.com/esphome/esphome/pull/5649) by [@kpfleming](https://github.com/kpfleming) +- ssd1306: handle V_COM differently for SH1106 [esphome#5796](https://github.com/esphome/esphome/pull/5796) by [@papillon81](https://github.com/papillon81) +- Bump aioesphomeapi from 18.5.3 to 18.5.5 [esphome#5804](https://github.com/esphome/esphome/pull/5804) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- dashboard: Fix online status when api is disabled [esphome#5792](https://github.com/esphome/esphome/pull/5792) by [@bdraco](https://github.com/bdraco) +- Haier component updated to support new protocol variations [esphome#5713](https://github.com/esphome/esphome/pull/5713) by [@paveldn](https://github.com/paveldn) +- sen5x fix temperature compensation and gas tuning [esphome#4901](https://github.com/esphome/esphome/pull/4901) by [@matt7aylor](https://github.com/matt7aylor) (breaking-change) +- Add startup_delay to interval. [esphome#5327](https://github.com/esphome/esphome/pull/5327) by [@clydebarrow](https://github.com/clydebarrow) +- Pillow: bump to 10.1.0 [esphome#5815](https://github.com/esphome/esphome/pull/5815) by [@hostcc](https://github.com/hostcc) +- dashboard: set nodelay on the websocket to avoid a delay seeing log messages [esphome#5802](https://github.com/esphome/esphome/pull/5802) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi from 18.5.5 to 18.5.7 [esphome#5822](https://github.com/esphome/esphome/pull/5822) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Ensure names containing characters other than `a-z` `A-Z` `0-9` or `_` are unique [esphome#5810](https://github.com/esphome/esphome/pull/5810) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Add ENS160 Sensor [esphome#4243](https://github.com/esphome/esphome/pull/4243) by [@vincentscode](https://github.com/vincentscode) (new-integration) +- Bump actions/github-script from 6.4.1 to 7.0.1 [esphome#5803](https://github.com/esphome/esphome/pull/5803) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Run all tests when local testing. [esphome#5717](https://github.com/esphome/esphome/pull/5717) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Bump aioesphomeapi from 18.5.7 to 18.5.9 [esphome#5830](https://github.com/esphome/esphome/pull/5830) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow split uart pin inversion for ESP-IDF [esphome#5831](https://github.com/esphome/esphome/pull/5831) by [@clydebarrow](https://github.com/clydebarrow) +- Add `is_detected()` for Nextion displays [esphome#5825](https://github.com/esphome/esphome/pull/5825) by [@edwardtfn](https://github.com/edwardtfn) +- Pull PollingComponent up from individual display drivers to Display. [esphome#5444](https://github.com/esphome/esphome/pull/5444) by [@clydebarrow](https://github.com/clydebarrow) +- Implement variable length single word SPI writes. [esphome#5678](https://github.com/esphome/esphome/pull/5678) by [@clydebarrow](https://github.com/clydebarrow) +- Add 'enable_on_boot' feature to power_supply [esphome#5826](https://github.com/esphome/esphome/pull/5826) by [@clydebarrow](https://github.com/clydebarrow) +- mcp3008: Tidy up and fix auto load bug [esphome#5842](https://github.com/esphome/esphome/pull/5842) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Create GT911 Touchscreen component [esphome#4027](https://github.com/esphome/esphome/pull/4027) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Bump aioesphomeapi from 18.5.9 to 19.1.2 [esphome#5844](https://github.com/esphome/esphome/pull/5844) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Nextion - Standardizing log messages [esphome#5837](https://github.com/esphome/esphome/pull/5837) by [@edwardtfn](https://github.com/edwardtfn) +- dashboard: Small cleanups to dashboard [esphome#5841](https://github.com/esphome/esphome/pull/5841) by [@bdraco](https://github.com/bdraco) +- Pylontech integration (solar battery bank) [esphome#4688](https://github.com/esphome/esphome/pull/4688) by [@functionpointer](https://github.com/functionpointer) (new-integration) +- Implement deep sleep and clear screen on Waveshare 7.5in B V3 [esphome#5239](https://github.com/esphome/esphome/pull/5239) by [@lucasprim](https://github.com/lucasprim) +- Fix ESP-IDF uart initialisation sequence to match Espressif docs. [esphome#5838](https://github.com/esphome/esphome/pull/5838) by [@clydebarrow](https://github.com/clydebarrow) +- Nextion - Align strings on `dump_config` [esphome#5824](https://github.com/esphome/esphome/pull/5824) by [@edwardtfn](https://github.com/edwardtfn) +- Speed up (and fix) ili9xxx display component. [esphome#5406](https://github.com/esphome/esphome/pull/5406) by [@clydebarrow](https://github.com/clydebarrow) +- Fix regex for 'byte' custom CI check [esphome#5851](https://github.com/esphome/esphome/pull/5851) by [@jesserockz](https://github.com/jesserockz) +- Pass through additional arguments to create number [esphome#5849](https://github.com/esphome/esphome/pull/5849) by [@clydebarrow](https://github.com/clydebarrow) +- Nextion `on_touch` trigger [esphome#5833](https://github.com/esphome/esphome/pull/5833) by [@edwardtfn](https://github.com/edwardtfn) +- Nextion colors parameters [esphome#5699](https://github.com/esphome/esphome/pull/5699) by [@edwardtfn](https://github.com/edwardtfn) (breaking-change) +- dashboard: fix supervisor auth doing I/O in the event loop [esphome#5807](https://github.com/esphome/esphome/pull/5807) by [@bdraco](https://github.com/bdraco) +- Improve reliability of Nextion TFT uploads (Arduino) [esphome#5683](https://github.com/esphome/esphome/pull/5683) by [@edwardtfn](https://github.com/edwardtfn) +- Add Pro Check Universal sensor support. [esphome#5798](https://github.com/esphome/esphome/pull/5798) by [@spbrogan](https://github.com/spbrogan) +- Bump aioesphomeapi from 19.1.2 to 19.1.7 [esphome#5859](https://github.com/esphome/esphome/pull/5859) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Pn532 non blocking scan [esphome#5191](https://github.com/esphome/esphome/pull/5191) by [@sharkydog](https://github.com/sharkydog) +- Add Chamberlain/HomEntry HE60R garage door opener [esphome#5834](https://github.com/esphome/esphome/pull/5834) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Bump aioesphomeapi from 19.1.7 to 19.2.1 [esphome#5863](https://github.com/esphome/esphome/pull/5863) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tornado from 6.3.3 to 6.4 [esphome#5862](https://github.com/esphome/esphome/pull/5862) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- add missing ifdef to pvvx_mithermometer [esphome#5880](https://github.com/esphome/esphome/pull/5880) by [@ssieb](https://github.com/ssieb) +- Fix un-initialized version string [esphome#5865](https://github.com/esphome/esphome/pull/5865) by [@descipher](https://github.com/descipher) +- fix a01nyub data reading [esphome#5882](https://github.com/esphome/esphome/pull/5882) by [@ssieb](https://github.com/ssieb) +- Bump pytest-asyncio from 0.21.1 to 0.23.2 [esphome#5888](https://github.com/esphome/esphome/pull/5888) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.127.0 to 0.128.0 [esphome#5889](https://github.com/esphome/esphome/pull/5889) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.17.6 to 3.0.2 [esphome#5592](https://github.com/esphome/esphome/pull/5592) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump voluptuous from 0.13.1 to 0.14.1 [esphome#5784](https://github.com/esphome/esphome/pull/5784) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Security improvement: Support wifi ap_timeout=0s (disable) [esphome#5887](https://github.com/esphome/esphome/pull/5887) by [@fornellas](https://github.com/fornellas) +- Suppress full config output of "esphome config" when -q option is used. [esphome#5852](https://github.com/esphome/esphome/pull/5852) by [@clydebarrow](https://github.com/clydebarrow) +- Checks for pins used in multiple places [esphome#5666](https://github.com/esphome/esphome/pull/5666) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Nextion support to idf with `cinttypes` [esphome#5876](https://github.com/esphome/esphome/pull/5876) by [@edwardtfn](https://github.com/edwardtfn) +- Fix test4.yaml after #5666 [esphome#5890](https://github.com/esphome/esphome/pull/5890) by [@kbx81](https://github.com/kbx81) +- Fix template text component length check [esphome#5881](https://github.com/esphome/esphome/pull/5881) by [@fornellas](https://github.com/fornellas) +- RC522 - Fix error counter error [esphome#5873](https://github.com/esphome/esphome/pull/5873) by [@kbx81](https://github.com/kbx81) +- feat(packages): support removing components [esphome#5821](https://github.com/esphome/esphome/pull/5821) by [@TMaYaD](https://github.com/TMaYaD) +- dashboard: Add some basic tests for the dashboard [esphome#5870](https://github.com/esphome/esphome/pull/5870) by [@bdraco](https://github.com/bdraco) +- Nextion exit reparse mode on startup [esphome#5868](https://github.com/esphome/esphome/pull/5868) by [@edwardtfn](https://github.com/edwardtfn) +- Bump aioesphomeapi from 19.2.1 to 19.3.0 [esphome#5895](https://github.com/esphome/esphome/pull/5895) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add framework info to Nextion log tags [esphome#5864](https://github.com/esphome/esphome/pull/5864) by [@edwardtfn](https://github.com/edwardtfn) +- Handle case where using enetity level name: None with MQTT [esphome#5897](https://github.com/esphome/esphome/pull/5897) by [@mtl010957](https://github.com/mtl010957) +- Bump actions/setup-python from 4.7.1 to 5.0.0 [esphome#5896](https://github.com/esphome/esphome/pull/5896) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.128.0 to 0.128.4 [esphome#5906](https://github.com/esphome/esphome/pull/5906) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix 18 bit displays. [esphome#5908](https://github.com/esphome/esphome/pull/5908) by [@clydebarrow](https://github.com/clydebarrow) +- fix RGBW Mode on RP2040 [esphome#5907](https://github.com/esphome/esphome/pull/5907) by [@firegore](https://github.com/firegore) +- Add graphical display menu [esphome#4105](https://github.com/esphome/esphome/pull/4105) by [@MrMDavidson](https://github.com/MrMDavidson) (new-integration) +- Added on_image callback to ESP32 Cam [esphome#4860](https://github.com/esphome/esphome/pull/4860) by [@freekode](https://github.com/freekode) +- Bump actions/stale from 8.0.0 to 9.0.0 [esphome#5899](https://github.com/esphome/esphome/pull/5899) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 3.0.2 to 3.0.3 [esphome#5905](https://github.com/esphome/esphome/pull/5905) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump frenck/action-yamllint from 1.4.1 to 1.4.2 [esphome#5716](https://github.com/esphome/esphome/pull/5716) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump dessant/lock-threads from 4.0.1 to 5.0.1 [esphome#5820](https://github.com/esphome/esphome/pull/5820) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add support for fan preset modes [esphome#5694](https://github.com/esphome/esphome/pull/5694) by [@mill1000](https://github.com/mill1000) +- Fix uninitialized climate target temperature [esphome#5795](https://github.com/esphome/esphome/pull/5795) by [@ckoca](https://github.com/ckoca) +- Bump aioesphomeapi from 19.3.0 to 20.0.0 [esphome#5911](https://github.com/esphome/esphome/pull/5911) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.11.0 to 23.12.0 [esphome#5912](https://github.com/esphome/esphome/pull/5912) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Updating the touchscreen interface structure [esphome#4596](https://github.com/esphome/esphome/pull/4596) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) +- Added the A02YYUW distance sensor [esphome#5729](https://github.com/esphome/esphome/pull/5729) by [@TH-Braemer](https://github.com/TH-Braemer) (new-integration) +- Fix AHT10 / AHT20 communication [esphome#5198](https://github.com/esphome/esphome/pull/5198) by [@flaminggoat](https://github.com/flaminggoat) +- Fix crash when handling pin_check error [esphome#5915](https://github.com/esphome/esphome/pull/5915) by [@clydebarrow](https://github.com/clydebarrow) +- Bump aioesphomeapi to 20.1.0 [esphome#5914](https://github.com/esphome/esphome/pull/5914) by [@bdraco](https://github.com/bdraco) +- Remove setpoint-change from error when calculating derivative in pid controller [esphome#4737](https://github.com/esphome/esphome/pull/4737) by [@Newspaperman57](https://github.com/Newspaperman57) +- ir_transmitter: add support for repeated commands in NEC protocol [esphome#4995](https://github.com/esphome/esphome/pull/4995) by [@ngilles](https://github.com/ngilles) +- BP1658CJ - Fix timing for all platforms, now consistent with other drivers [esphome#5799](https://github.com/esphome/esphome/pull/5799) by [@Cossid](https://github.com/Cossid) +- Add humidity support to climate [esphome#5732](https://github.com/esphome/esphome/pull/5732) by [@kroimon](https://github.com/kroimon) +- Remove lingering note [esphome#5916](https://github.com/esphome/esphome/pull/5916) by [@jesserockz](https://github.com/jesserockz) +- Fix typo added in esp32 post_build filename [esphome#5918](https://github.com/esphome/esphome/pull/5918) by [@jesserockz](https://github.com/jesserockz) +- Copy esp32 custom partition files to build folder [esphome#5919](https://github.com/esphome/esphome/pull/5919) by [@jesserockz](https://github.com/jesserockz) +- UART change at runtime [esphome#5909](https://github.com/esphome/esphome/pull/5909) by [@edwardtfn](https://github.com/edwardtfn) +- Bump aioesphomeapi from 20.1.0 to 21.0.0 [esphome#5922](https://github.com/esphome/esphome/pull/5922) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix the initial run of lambda light effects [esphome#5921](https://github.com/esphome/esphome/pull/5921) by [@smithjacobj](https://github.com/smithjacobj) +- Exposes `load_settings` to `UARTComponent` class [esphome#5920](https://github.com/esphome/esphome/pull/5920) by [@edwardtfn](https://github.com/edwardtfn) +- Add support for PN7160 [esphome#5486](https://github.com/esphome/esphome/pull/5486) by [@kbx81](https://github.com/kbx81) (new-integration) +- Add support for PN7150 [esphome#5487](https://github.com/esphome/esphome/pull/5487) by [@kbx81](https://github.com/kbx81) (new-integration) +- Allow use of CDC/JTAG loggers on esp32 variants with Arduino [esphome#4658](https://github.com/esphome/esphome/pull/4658) by [@jesserockz](https://github.com/jesserockz) +- [Logger] ESP32 S3 serial logger [esphome#4853](https://github.com/esphome/esphome/pull/4853) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Support toggle action for template cover [esphome#5917](https://github.com/esphome/esphome/pull/5917) by [@jochenvg](https://github.com/jochenvg) +- Fix SplitDefault with variants [esphome#5928](https://github.com/esphome/esphome/pull/5928) by [@jesserockz](https://github.com/jesserockz) +- Update ENS160 TVOC device_class and AQI units to match required by HA [esphome#5939](https://github.com/esphome/esphome/pull/5939) by [@mrtoy-me](https://github.com/mrtoy-me) +- Bump zeroconf from 0.128.4 to 0.130.0 [esphome#5950](https://github.com/esphome/esphome/pull/5950) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- UARTComponent inline doc [esphome#5930](https://github.com/esphome/esphome/pull/5930) by [@edwardtfn](https://github.com/edwardtfn) +- Fix - Tuya Fan - Allow integer speed datapoint [esphome#5948](https://github.com/esphome/esphome/pull/5948) by [@cram42](https://github.com/cram42) +- i2s_audio: Set player_task's prio to 1 [esphome#5945](https://github.com/esphome/esphome/pull/5945) by [@gaaf](https://github.com/gaaf) +- esp32_camera: Set framebuffer task prio to 1 [esphome#5943](https://github.com/esphome/esphome/pull/5943) by [@gaaf](https://github.com/gaaf) +- web_server_idf: fix call with hardcoded http code [esphome#5942](https://github.com/esphome/esphome/pull/5942) by [@dentra](https://github.com/dentra) +- Revert pure virtual functions in UART component from #5920 [esphome#5932](https://github.com/esphome/esphome/pull/5932) by [@DrCoolzic](https://github.com/DrCoolzic) +- Use the correct UART/`Serial` when CDC is enabled [esphome#5957](https://github.com/esphome/esphome/pull/5957) by [@kbx81](https://github.com/kbx81) +- rename `set_raw_touch_position_` to `add_raw_touch_position_` [esphome#5962](https://github.com/esphome/esphome/pull/5962) by [@nielsnl68](https://github.com/nielsnl68) +- Fix build issue with UART component when building with Arduino and CDC [esphome#5964](https://github.com/esphome/esphome/pull/5964) by [@kbx81](https://github.com/kbx81) +- Fix I2CBus::write() bug and add i2c documentation [esphome#5947](https://github.com/esphome/esphome/pull/5947) by [@DrCoolzic](https://github.com/DrCoolzic) +- Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 [esphome#5961](https://github.com/esphome/esphome/pull/5961) by [@mathieu-mp](https://github.com/mathieu-mp) +- Speed up writing protobuf strings/bytes [esphome#5828](https://github.com/esphome/esphome/pull/5828) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi to 21.0.1 [esphome#5969](https://github.com/esphome/esphome/pull/5969) by [@bdraco](https://github.com/bdraco) +- image: allow the image to by auto-loaded by animation [esphome#5139](https://github.com/esphome/esphome/pull/5139) by [@ayufan](https://github.com/ayufan) +- Fix pin reuse error with pin expanders [esphome#5973](https://github.com/esphome/esphome/pull/5973) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.2.0.mdx b/src/content/docs/changelog/2023.2.0.mdx new file mode 100644 index 0000000000..3502fe8794 --- /dev/null +++ b/src/content/docs/changelog/2023.2.0.mdx @@ -0,0 +1,230 @@ +--- +description: "Changelog for ESPHome 2023.2.0." +title: "ESPHome 2023.2.0 - 15th February 2023" +pagefind: false +slug: "changelog/2023.2.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Friendly Name + +ESPHome now supports setting a `friendly_name` which is sent to Home Assistant. This name will be used for the config entry, +the device name, and will be automatically prefixed to all of the entities where needed by Home Assistant. + +> [!NOTE] +> If you opt to use this new friendly name, take note that you should remove any friendly name (substitition) that +> you currently prepend onto entity `name` in YAML. + +```yaml +esphome: + name: living-room + friendly_name: Living Room + +sensor: + - platform: dht + pin: GPIO5 + name: Temperature +``` + +## ESPHome Update Entities in Home Assistant + +Home Assistant has offered "read-only" update entities since 2023.2.0 for ESPHome devices. This release of ESPHome +added a new API required so that those update entities can now trigger a build and install of the new firmware "over +the air" to your devices. + +{/* markdownlint-disable MD013 */} + +## Release 2023.2.1 - February 16 + +- Add ESPHome version to generated platformio.ini [esphome#4443](https://github.com/esphome/esphome/pull/4443) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.2.2 - February 17 + +- Fix adoption of variants and pico-w [esphome#4455](https://github.com/esphome/esphome/pull/4455) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.2.3 - February 20 + +- Fix MQTT discovery for climate after preset implementation [esphome#4451](https://github.com/esphome/esphome/pull/4451) by [@jmichiel](https://github.com/jmichiel) +- Update distribution manifest [esphome#4459](https://github.com/esphome/esphome/pull/4459) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.2.4 - February 23 + +- BL0939 state_class set for energy sensors [esphome#4463](https://github.com/esphome/esphome/pull/4463) by [@konsulten](https://github.com/konsulten) +- fix wiegand tag parity [esphome#4476](https://github.com/esphome/esphome/pull/4476) by [@ssieb](https://github.com/ssieb) +- Fix multiple remote_receivers with triggers [esphome#4477](https://github.com/esphome/esphome/pull/4477) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add Pca9554 component [esphome#4192](https://github.com/esphome/esphome/pull/4192) by [@hwstar](https://github.com/hwstar) (new-integration) +- Add support for BP5758D LED driver [esphome#4021](https://github.com/esphome/esphome/pull/4021) by [@Cossid](https://github.com/Cossid) (new-integration) +- Add support for BP1658CJ LED driver [esphome#4020](https://github.com/esphome/esphome/pull/4020) by [@Cossid](https://github.com/Cossid) (new-integration) +- Add support for SM2235 and SM2335 LED drivers [esphome#3924](https://github.com/esphome/esphome/pull/3924) by [@Cossid](https://github.com/Cossid) (new-integration) +- PCF85063 RTC chip [esphome#3873](https://github.com/esphome/esphome/pull/3873) by [@brogon](https://github.com/brogon) (new-integration) +- Add support for matrix keypads [esphome#4241](https://github.com/esphome/esphome/pull/4241) by [@ssieb](https://github.com/ssieb) (new-integration) +- Add X9C Potentiometer component [esphome#4183](https://github.com/esphome/esphome/pull/4183) by [@EtienneMD](https://github.com/EtienneMD) (new-integration) +- add key collector component [esphome#4242](https://github.com/esphome/esphome/pull/4242) by [@ssieb](https://github.com/ssieb) (new-integration) +- Add support for EE895 [esphome#3771](https://github.com/esphome/esphome/pull/3771) by [@Stock-M](https://github.com/Stock-M) (new-integration) +- Add support for HTE501 [esphome#3772](https://github.com/esphome/esphome/pull/3772) by [@Stock-M](https://github.com/Stock-M) (new-integration) +- Add support for TEE501 [esphome#3773](https://github.com/esphome/esphome/pull/3773) by [@Stock-M](https://github.com/Stock-M) (new-integration) +- Implement a slow sigma-delta modulation based output [esphome#4132](https://github.com/esphome/esphome/pull/4132) by [@Cat-Ion](https://github.com/Cat-Ion) (new-integration) +- add Wiegand reader component [esphome#4288](https://github.com/esphome/esphome/pull/4288) by [@ssieb](https://github.com/ssieb) (new-integration) +- Add MICS-4514 gas sensor [esphome#4316](https://github.com/esphome/esphome/pull/4316) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add Ld2410 Support [esphome#3919](https://github.com/esphome/esphome/pull/3919) by [@sebcaps](https://github.com/sebcaps) (new-integration) +- add Resol VBus support [esphome#3976](https://github.com/esphome/esphome/pull/3976) by [@ssieb](https://github.com/ssieb) (new-integration) + +### Breaking Changes + +- Use NAN values for TSL2591 saturation [esphome#3931](https://github.com/esphome/esphome/pull/3931) by [@mdonoughe](https://github.com/mdonoughe) (breaking-change) +- set_retry: add retries remaining parameter to the provided function [esphome#4251](https://github.com/esphome/esphome/pull/4251) by [@e28eta](https://github.com/e28eta) (breaking-change) + +### Beta Changes + +- Bump curl version in docker [esphome#4403](https://github.com/esphome/esphome/pull/4403) by [@jesserockz](https://github.com/jesserockz) +- Fix release workflow [esphome#4405](https://github.com/esphome/esphome/pull/4405) by [@jesserockz](https://github.com/jesserockz) +- Climate PID Autotune Logging fixes [esphome#4136](https://github.com/esphome/esphome/pull/4136) by [@patrickcollins12](https://github.com/patrickcollins12) +- Add Clipping to displaybuffer [esphome#4271](https://github.com/esphome/esphome/pull/4271) by [@nielsnl68](https://github.com/nielsnl68) +- Fix check for empty clipping array [esphome#4421](https://github.com/esphome/esphome/pull/4421) by [@nielsnl68](https://github.com/nielsnl68) +- Ledc fix [esphome#4338](https://github.com/esphome/esphome/pull/4338) by [@xvil](https://github.com/xvil) +- Add version api endpoint [esphome#4429](https://github.com/esphome/esphome/pull/4429) by [@jesserockz](https://github.com/jesserockz) +- Handle uart.write in json-config endpoint [esphome#4430](https://github.com/esphome/esphome/pull/4430) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20230214.0 [esphome#4431](https://github.com/esphome/esphome/pull/4431) by [@jesserockz](https://github.com/jesserockz) +- Fix setting wrong traits on midea climate component [esphome#4425](https://github.com/esphome/esphome/pull/4425) by [@dudanov](https://github.com/dudanov) + +### All changes + +- Expose lambda action to reset a cycle in `slow_pwm` [esphome#4158](https://github.com/esphome/esphome/pull/4158) by [@johndbritton](https://github.com/johndbritton) +- climate: Add features to generic Toshiba model [esphome#3912](https://github.com/esphome/esphome/pull/3912) by [@zagor](https://github.com/zagor) +- Fix UUID displaying incorrectly in BLE Tracker logs [esphome#4187](https://github.com/esphome/esphome/pull/4187) by [@deunlee](https://github.com/deunlee) +- Bump actions/stale from 6 to 7 [esphome#4217](https://github.com/esphome/esphome/pull/4217) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add Pca9554 component [esphome#4192](https://github.com/esphome/esphome/pull/4192) by [@hwstar](https://github.com/hwstar) (new-integration) +- Bump aioesphomeapi from 13.0.1 to 13.0.2 [esphome#4188](https://github.com/esphome/esphome/pull/4188) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.20.2 to 0.20.3 [esphome#4164](https://github.com/esphome/esphome/pull/4164) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Handle deprecated sdkconfig option [esphome#4204](https://github.com/esphome/esphome/pull/4204) by [@mmakaay](https://github.com/mmakaay) +- feat: set a wider range for jpeg quality [esphome#3872](https://github.com/esphome/esphome/pull/3872) by [@sisco0](https://github.com/sisco0) +- Bump black from 22.10.0 to 22.12.0 [esphome#4167](https://github.com/esphome/esphome/pull/4167) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Use NAN values for TSL2591 saturation [esphome#3931](https://github.com/esphome/esphome/pull/3931) by [@mdonoughe](https://github.com/mdonoughe) (breaking-change) +- Ili9341 8bit indexed mode pt2 [esphome#2502](https://github.com/esphome/esphome/pull/2502) by [@davet2001](https://github.com/davet2001) +- Allow ignoring of failed Modbus response CRC [esphome#3930](https://github.com/esphome/esphome/pull/3930) by [@jangrewe](https://github.com/jangrewe) +- calc LEDC PWM Resolution with LEDC_TIMER_BIT_MAX [esphome#3820](https://github.com/esphome/esphome/pull/3820) by [@MFlasskamp](https://github.com/MFlasskamp) +- Component::set_retry updates [esphome#3305](https://github.com/esphome/esphome/pull/3305) by [@e28eta](https://github.com/e28eta) +- Fix race condition in web_server scheduler on ESP32 [esphome#3951](https://github.com/esphome/esphome/pull/3951) by [@tomaszduda23](https://github.com/tomaszduda23) +- Fix saving light state for restore modes LIGHT_RESTORE_AND_OFF/ON [esphome#4131](https://github.com/esphome/esphome/pull/4131) by [@myhomeiot](https://github.com/myhomeiot) +- Add precipitation device class [esphome#4219](https://github.com/esphome/esphome/pull/4219) by [@jesserockz](https://github.com/jesserockz) +- Add support for BP5758D LED driver [esphome#4021](https://github.com/esphome/esphome/pull/4021) by [@Cossid](https://github.com/Cossid) (new-integration) +- Add support for BP1658CJ LED driver [esphome#4020](https://github.com/esphome/esphome/pull/4020) by [@Cossid](https://github.com/Cossid) (new-integration) +- Add support for SM2235 and SM2335 LED drivers [esphome#3924](https://github.com/esphome/esphome/pull/3924) by [@Cossid](https://github.com/Cossid) (new-integration) +- Fix broken PULSE_METER [esphome#4199](https://github.com/esphome/esphome/pull/4199) by [@cstaahl](https://github.com/cstaahl) +- PCF85063 RTC chip [esphome#3873](https://github.com/esphome/esphome/pull/3873) by [@brogon](https://github.com/brogon) (new-integration) +- Add API for dashboard to get boards list by platform [esphome#4168](https://github.com/esphome/esphome/pull/4168) by [@kuba2k2](https://github.com/kuba2k2) +- Bump dashboard to 20221231.0 [esphome#4248](https://github.com/esphome/esphome/pull/4248) by [@balloob](https://github.com/balloob) +- Bump zeroconf to 0.47.1 [esphome#4268](https://github.com/esphome/esphome/pull/4268) by [@bdraco](https://github.com/bdraco) +- Don't match words containing "id" [esphome#4265](https://github.com/esphome/esphome/pull/4265) by [@ssieb](https://github.com/ssieb) +- Add support for matrix keypads [esphome#4241](https://github.com/esphome/esphome/pull/4241) by [@ssieb](https://github.com/ssieb) (new-integration) +- Fix Template Switch restore_mode support [esphome#4280](https://github.com/esphome/esphome/pull/4280) by [@SharpEdgeMarshall](https://github.com/SharpEdgeMarshall) +- Correct decimals in Growatt energy reporting [esphome#4277](https://github.com/esphome/esphome/pull/4277) by [@rfpronk](https://github.com/rfpronk) +- Bump pylint from 2.15.8 to 2.15.10 [esphome#4278](https://github.com/esphome/esphome/pull/4278) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix frequency limit for MCP9600 [esphome#4276](https://github.com/esphome/esphome/pull/4276) by [@jowgn](https://github.com/jowgn) +- fix: json compilation error on rp2040 [esphome#4273](https://github.com/esphome/esphome/pull/4273) by [@kellertk](https://github.com/kellertk) +- http_request: add request duration logging [esphome#4272](https://github.com/esphome/esphome/pull/4272) by [@stas-sl](https://github.com/stas-sl) +- Fix HttpRequestResponseTrigger [esphome#4270](https://github.com/esphome/esphome/pull/4270) by [@gmbuell](https://github.com/gmbuell) +- Fix HttpRequestResponseTrigger again [esphome#4285](https://github.com/esphome/esphome/pull/4285) by [@gmbuell](https://github.com/gmbuell) +- Add X9C Potentiometer component [esphome#4183](https://github.com/esphome/esphome/pull/4183) by [@EtienneMD](https://github.com/EtienneMD) (new-integration) +- small DisplayBuffer images and font update [esphome#4044](https://github.com/esphome/esphome/pull/4044) by [@nielsnl68](https://github.com/nielsnl68) +- Fix use of dangling pointers in esp-idf MQTT backend [esphome#4239](https://github.com/esphome/esphome/pull/4239) by [@aaliddell](https://github.com/aaliddell) +- Ensure we never write zero bytes [esphome#4284](https://github.com/esphome/esphome/pull/4284) by [@bdraco](https://github.com/bdraco) +- Fix off-by-one bedjet fan speed (#3873) [esphome#4292](https://github.com/esphome/esphome/pull/4292) by [@jhansche](https://github.com/jhansche) +- Clean up dashboard ping result post-rename/delete [esphome#4170](https://github.com/esphome/esphome/pull/4170) by [@balloob](https://github.com/balloob) +- Calculate PWM wrap dynamically whenever the frequency is changed [esphome#4294](https://github.com/esphome/esphome/pull/4294) by [@tradeJmark](https://github.com/tradeJmark) +- Remove baud check in tuya dump_config [esphome#4298](https://github.com/esphome/esphome/pull/4298) by [@jesserockz](https://github.com/jesserockz) +- Add friendly_name to device [esphome#4296](https://github.com/esphome/esphome/pull/4296) by [@jesserockz](https://github.com/jesserockz) +- allow multiple dsmr [esphome#4299](https://github.com/esphome/esphome/pull/4299) by [@ssieb](https://github.com/ssieb) +- Bump pytest from 7.2.0 to 7.2.1 [esphome#4300](https://github.com/esphome/esphome/pull/4300) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 13.0.2 to 13.1.0 [esphome#4301](https://github.com/esphome/esphome/pull/4301) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Display the configured esphome:comment on the WebServer [esphome#4246](https://github.com/esphome/esphome/pull/4246) by [@grillp](https://github.com/grillp) +- Allow 0xA8 ID for APDS9960 [esphome#4287](https://github.com/esphome/esphome/pull/4287) by [@reubn](https://github.com/reubn) +- Dont default CORE.friendly_name [esphome#4305](https://github.com/esphome/esphome/pull/4305) by [@jesserockz](https://github.com/jesserockz) +- add key collector component [esphome#4242](https://github.com/esphome/esphome/pull/4242) by [@ssieb](https://github.com/ssieb) (new-integration) +- Tsl2591 gain publish [esphome#4291](https://github.com/esphome/esphome/pull/4291) by [@z3liff](https://github.com/z3liff) +- Add support for EE895 [esphome#3771](https://github.com/esphome/esphome/pull/3771) by [@Stock-M](https://github.com/Stock-M) (new-integration) +- Add support for HTE501 [esphome#3772](https://github.com/esphome/esphome/pull/3772) by [@Stock-M](https://github.com/Stock-M) (new-integration) +- Add support for TEE501 [esphome#3773](https://github.com/esphome/esphome/pull/3773) by [@Stock-M](https://github.com/Stock-M) (new-integration) +- PCA9685, fix reset device and add option EXTCLK [esphome#3845](https://github.com/esphome/esphome/pull/3845) by [@standahabich](https://github.com/standahabich) +- Implement a slow sigma-delta modulation based output [esphome#4132](https://github.com/esphome/esphome/pull/4132) by [@Cat-Ion](https://github.com/Cat-Ion) (new-integration) +- set_retry: add retries remaining parameter to the provided function [esphome#4251](https://github.com/esphome/esphome/pull/4251) by [@e28eta](https://github.com/e28eta) (breaking-change) +- add Wiegand reader component [esphome#4288](https://github.com/esphome/esphome/pull/4288) by [@ssieb](https://github.com/ssieb) (new-integration) +- Format docker/build.py [esphome#4313](https://github.com/esphome/esphome/pull/4313) by [@jesserockz](https://github.com/jesserockz) +- Add macro for sub sensor defining [esphome#4315](https://github.com/esphome/esphome/pull/4315) by [@jesserockz](https://github.com/jesserockz) +- Add friendly name in MDNS records if it is not empty [esphome#4317](https://github.com/esphome/esphome/pull/4317) by [@catalin2402](https://github.com/catalin2402) +- Add upload dashboard api [esphome#4318](https://github.com/esphome/esphome/pull/4318) by [@balloob](https://github.com/balloob) +- Bump esphome-dashboard to 20230120.0 [esphome#4319](https://github.com/esphome/esphome/pull/4319) by [@jesserockz](https://github.com/jesserockz) +- Hydreon: Use new device classes water and precipitation_intensity [esphome#3993](https://github.com/esphome/esphome/pull/3993) by [@functionpointer](https://github.com/functionpointer) +- Dont fail workflows if lint building fails [esphome#4336](https://github.com/esphome/esphome/pull/4336) by [@jesserockz](https://github.com/jesserockz) +- Add MICS-4514 gas sensor [esphome#4316](https://github.com/esphome/esphome/pull/4316) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Refactor esp32_ble_tracker to use esp32_ble core ble setup code [esphome#4173](https://github.com/esphome/esphome/pull/4173) by [@jesserockz](https://github.com/jesserockz) +- Add next_url to improv serial component config [esphome#4343](https://github.com/esphome/esphome/pull/4343) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Remove state class from uptime sensor [esphome#4345](https://github.com/esphome/esphome/pull/4345) by [@jesserockz](https://github.com/jesserockz) +- Fix esp32_ble_tracker setup priority [esphome#4346](https://github.com/esphome/esphome/pull/4346) by [@jesserockz](https://github.com/jesserockz) +- Fix in ble client base address parsing [esphome#4347](https://github.com/esphome/esphome/pull/4347) by [@jesserockz](https://github.com/jesserockz) +- Added support for ADS1015 [esphome#4281](https://github.com/esphome/esphome/pull/4281) by [@xvil](https://github.com/xvil) +- Fix "BLE server / advertising always on" [esphome#4353](https://github.com/esphome/esphome/pull/4353) by [@Mat931](https://github.com/Mat931) +- Dump full parsed config to json-config api call [esphome#4373](https://github.com/esphome/esphome/pull/4373) by [@jesserockz](https://github.com/jesserockz) +- Fix pressure compensation in SCD4X [esphome#4357](https://github.com/esphome/esphome/pull/4357) by [@CarlosGS](https://github.com/CarlosGS) +- Allow mdns services to be exposed by config [esphome#4202](https://github.com/esphome/esphome/pull/4202) by [@elupus](https://github.com/elupus) +- Allow final validate of uart stop bits and parity [esphome#4376](https://github.com/esphome/esphome/pull/4376) by [@jesserockz](https://github.com/jesserockz) +- Update sim800l.cpp [esphome#4223](https://github.com/esphome/esphome/pull/4223) by [@fbeek](https://github.com/fbeek) +- SCD30 Added support for manual calibration [esphome#4362](https://github.com/esphome/esphome/pull/4362) by [@ftrueck](https://github.com/ftrueck) +- Add Ld2410 Support [esphome#3919](https://github.com/esphome/esphome/pull/3919) by [@sebcaps](https://github.com/sebcaps) (new-integration) +- add Resol VBus support [esphome#3976](https://github.com/esphome/esphome/pull/3976) by [@ssieb](https://github.com/ssieb) (new-integration) +- Allow dashboard import to specify if api encryption key should be generated [esphome#4393](https://github.com/esphome/esphome/pull/4393) by [@jesserockz](https://github.com/jesserockz) +- modify SGP4X integration to report device_class as air quality index [esphome#4327](https://github.com/esphome/esphome/pull/4327) by [@alexd321](https://github.com/alexd321) +- Remove unneeded validation for esp32 gpio pins [esphome#4394](https://github.com/esphome/esphome/pull/4394) by [@jesserockz](https://github.com/jesserockz) +- Fix shelly dimmer current sensor device class [esphome#4385](https://github.com/esphome/esphome/pull/4385) by [@trvrnrth](https://github.com/trvrnrth) +- Added Ethernet Component for ESP IDF with JL1101 PHY driver [esphome#4009](https://github.com/esphome/esphome/pull/4009) by [@mobrembski](https://github.com/mobrembski) +- adds gpio INPUT_OUTPUT_OPEN_DRAIN [esphome#4360](https://github.com/esphome/esphome/pull/4360) by [@tomaszduda23](https://github.com/tomaszduda23) +- Merge components in packages [esphome#3555](https://github.com/esphome/esphome/pull/3555) by [@quentinmit](https://github.com/quentinmit) +- Update ld2410 logging [esphome#4395](https://github.com/esphome/esphome/pull/4395) by [@jesserockz](https://github.com/jesserockz) +- Update log for mics4514 to state 3 minute start time. [esphome#4396](https://github.com/esphome/esphome/pull/4396) by [@jesserockz](https://github.com/jesserockz) +- mDNS updates [esphome#4399](https://github.com/esphome/esphome/pull/4399) by [@jesserockz](https://github.com/jesserockz) +- Dont keep logging on improv start [esphome#4401](https://github.com/esphome/esphome/pull/4401) by [@jesserockz](https://github.com/jesserockz) +- Add support for Lippert LP sensors in mopeka_pro_check component [esphome#4118](https://github.com/esphome/esphome/pull/4118) by [@rperciaccante](https://github.com/rperciaccante) +- climate: add support for quiet fan mode [esphome#3609](https://github.com/esphome/esphome/pull/3609) by [@MichaelMure](https://github.com/MichaelMure) +- add MQTT preset support for Climate components [esphome#4379](https://github.com/esphome/esphome/pull/4379) by [@jmichiel](https://github.com/jmichiel) +- Added CanalSat and CanalSatLD protocol support [esphome#3513](https://github.com/esphome/esphome/pull/3513) by [@Emrvb](https://github.com/Emrvb) +- Remove unused manifest handler [esphome#4169](https://github.com/esphome/esphome/pull/4169) by [@balloob](https://github.com/balloob) +- Use the github-script action to call the workflow [esphome#4400](https://github.com/esphome/esphome/pull/4400) by [@jesserockz](https://github.com/jesserockz) +- Convert secrets constant to a tuple [esphome#4245](https://github.com/esphome/esphome/pull/4245) by [@balloob](https://github.com/balloob) +- Verify rel_path output is relative [esphome#4247](https://github.com/esphome/esphome/pull/4247) by [@balloob](https://github.com/balloob) +- Bump curl version in docker [esphome#4403](https://github.com/esphome/esphome/pull/4403) by [@jesserockz](https://github.com/jesserockz) +- Fix release workflow [esphome#4405](https://github.com/esphome/esphome/pull/4405) by [@jesserockz](https://github.com/jesserockz) +- Climate PID Autotune Logging fixes [esphome#4136](https://github.com/esphome/esphome/pull/4136) by [@patrickcollins12](https://github.com/patrickcollins12) +- Add Clipping to displaybuffer [esphome#4271](https://github.com/esphome/esphome/pull/4271) by [@nielsnl68](https://github.com/nielsnl68) +- Fix check for empty clipping array [esphome#4421](https://github.com/esphome/esphome/pull/4421) by [@nielsnl68](https://github.com/nielsnl68) +- Ledc fix [esphome#4338](https://github.com/esphome/esphome/pull/4338) by [@xvil](https://github.com/xvil) +- Add version api endpoint [esphome#4429](https://github.com/esphome/esphome/pull/4429) by [@jesserockz](https://github.com/jesserockz) +- Handle uart.write in json-config endpoint [esphome#4430](https://github.com/esphome/esphome/pull/4430) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20230214.0 [esphome#4431](https://github.com/esphome/esphome/pull/4431) by [@jesserockz](https://github.com/jesserockz) +- Fix setting wrong traits on midea climate component [esphome#4425](https://github.com/esphome/esphome/pull/4425) by [@dudanov](https://github.com/dudanov) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.3.0.mdx b/src/content/docs/changelog/2023.3.0.mdx new file mode 100644 index 0000000000..facac746af --- /dev/null +++ b/src/content/docs/changelog/2023.3.0.mdx @@ -0,0 +1,186 @@ +--- +description: "Changelog for ESPHome 2023.3.0." +title: "ESPHome 2023.3.0 - 15th March 2023" +pagefind: false +slug: "changelog/2023.3.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Sprinkler updates + +The sprinkler component has had a big update thanks to [@kbx81](https://github.com/kbx81). +The method `time_remaining()` has been renamed to `time_remaining_active_valve()` for clarity. +If you use this to display time remaining, simply update the name of the method in your code/lambda(s). + +## Tuya lights + +Tuya Lights have had a configuration change and replaced `rgb_datapoint` and `hsv_datapoint` with a new +combination of `color_datapoint` and `color_type`. See the updated documentation +([Tuya](/components/light/tuya/)) for more information. + +## SN74HC165 + +The pin/bit order has been reversed per shift register so that `pin 0` is now `input A`. + +{/* markdownlint-disable MD013 */} + +## Release 2023.3.1 - March 22 + +- climate: brown paper bag fix for on_configure [esphome#4573](https://github.com/esphome/esphome/pull/4573) by [@nwf](https://github.com/nwf) +- rp2040: Use fake Mutex lock [esphome#4602](https://github.com/esphome/esphome/pull/4602) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.3.2 - March 27 + +- Fix compile error on pzemdc.h [esphome#4583](https://github.com/esphome/esphome/pull/4583) by [@KG3RK3N](https://github.com/KG3RK3N) +- Swap curly brackets for round on LockGuard [esphome#4610](https://github.com/esphome/esphome/pull/4610) by [@jesserockz](https://github.com/jesserockz) +- Fix animation resizing [esphome#4608](https://github.com/esphome/esphome/pull/4608) by [@guillempages](https://github.com/guillempages) +- SX1509 minimum loop period (fixes esphome/issues#4325) [esphome#4613](https://github.com/esphome/esphome/pull/4613) by [@tracestep](https://github.com/tracestep) + +## Full list of changes + +### New Components + +- Add internal_temperature component [esphome#4330](https://github.com/esphome/esphome/pull/4330) by [@Mat931](https://github.com/Mat931) (new-integration) +- Support Mopeka Standard LPG tank bluetooth sensor [esphome#4351](https://github.com/esphome/esphome/pull/4351) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) (new-integration) +- add person sensor (SEN21231) from usefulsensors [esphome#4454](https://github.com/esphome/esphome/pull/4454) by [@shreyaskarnik](https://github.com/shreyaskarnik) (new-integration) +- add kuntze component [esphome#4411](https://github.com/esphome/esphome/pull/4411) by [@ssieb](https://github.com/ssieb) (new-integration) +- Add Haier climate component [esphome#4001](https://github.com/esphome/esphome/pull/4001) by [@Yarikx](https://github.com/Yarikx) (new-integration) +- FS3000 sensor [esphome#4502](https://github.com/esphome/esphome/pull/4502) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add absolute humidity component [esphome#4519](https://github.com/esphome/esphome/pull/4519) by [@DAVe3283](https://github.com/DAVe3283) (new-integration) +- Add AS7341 spectral color sensor [esphome#4331](https://github.com/esphome/esphome/pull/4331) by [@mrgnr](https://github.com/mrgnr) (new-integration) +- Renaming and extending the ili9341 to the ili9xxx component [esphome#4275](https://github.com/esphome/esphome/pull/4275) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) + +### Breaking Changes + +- Add configurable color datapoint [esphome#4383](https://github.com/esphome/esphome/pull/4383) by [@irtimaled](https://github.com/irtimaled) (breaking-change) +- Sprinkler "v2" updates [esphome#4159](https://github.com/esphome/esphome/pull/4159) by [@kbx81](https://github.com/kbx81) (breaking-change) +- sn74hc165 fixes [esphome#4457](https://github.com/esphome/esphome/pull/4457) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Renaming and extending the ili9341 to the ili9xxx component [esphome#4275](https://github.com/esphome/esphome/pull/4275) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) + +### Beta Changes + +- Fix ethernet clk_mode for GPIO0_OUT [esphome#4307](https://github.com/esphome/esphome/pull/4307) by [@jorticus](https://github.com/jorticus) +- Add ESP32-S3 support in NeoPixelBus component [esphome#4114](https://github.com/esphome/esphome/pull/4114) by [@rcloran](https://github.com/rcloran) +- Renaming and extending the ili9341 to the ili9xxx component [esphome#4275](https://github.com/esphome/esphome/pull/4275) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) +- Drop unused, broken logging macros [esphome#4534](https://github.com/esphome/esphome/pull/4534) by [@oxan](https://github.com/oxan) +- Revert storing Font glyphs in manually-allocated memory [esphome#4516](https://github.com/esphome/esphome/pull/4516) by [@oxan](https://github.com/oxan) +- Correct BME680 gas calculation and heater_off [esphome#4498](https://github.com/esphome/esphome/pull/4498) by [@CarlosGS](https://github.com/CarlosGS) +- Add support for new mpu6050 clones responding with 0x70 address [esphome#4546](https://github.com/esphome/esphome/pull/4546) by [@jakehdk](https://github.com/jakehdk) +- Add carbon dioxide device class to scd30 sensor schema. [esphome#4547](https://github.com/esphome/esphome/pull/4547) by [@murrayma](https://github.com/murrayma) +- Feat: add support for hex color in color component [esphome#4493](https://github.com/esphome/esphome/pull/4493) by [@dorianim](https://github.com/dorianim) +- Allow AUTO_LOAD to be a function [esphome#4550](https://github.com/esphome/esphome/pull/4550) by [@jesserockz](https://github.com/jesserockz) +- On the ILI9xxx display's enable the psram on esp32 and allow big screen [esphome#4551](https://github.com/esphome/esphome/pull/4551) by [@nielsnl68](https://github.com/nielsnl68) +- Map gpio pins for touch on esp32-s2/s3 [esphome#4552](https://github.com/esphome/esphome/pull/4552) by [@jesserockz](https://github.com/jesserockz) +- pipsolar component. Correct the sscanf format for QPIG command parsin… [esphome#4165](https://github.com/esphome/esphome/pull/4165) by [@eroldan](https://github.com/eroldan) +- Add state class back to uptime sensor [esphome#4557](https://github.com/esphome/esphome/pull/4557) by [@DAVe3283](https://github.com/DAVe3283) +- Added response for Tuya RSSI command [esphome#4549](https://github.com/esphome/esphome/pull/4549) by [@catalin2402](https://github.com/catalin2402) +- Remove switch actions during config; bump setup priority [esphome#4563](https://github.com/esphome/esphome/pull/4563) by [@kbx81](https://github.com/kbx81) +- Mark esp32_touch supported only on standard esp32 variant [esphome#4562](https://github.com/esphome/esphome/pull/4562) by [@jesserockz](https://github.com/jesserockz) +- fixing `shrink` and `extend` functions of the displaybuffer's Rect class [esphome#4565](https://github.com/esphome/esphome/pull/4565) by [@nielsnl68](https://github.com/nielsnl68) + +### All changes + +- socket: Format IPv4-mapped IPv6 addresses as regular IPv4 address [esphome#4382](https://github.com/esphome/esphome/pull/4382) by [@oxan](https://github.com/oxan) +- Bump frenck/action-yamllint from 1.3.1 to 1.4.0 [esphome#4289](https://github.com/esphome/esphome/pull/4289) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.3.0 to 3.3.1 [esphome#4160](https://github.com/esphome/esphome/pull/4160) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 22.12.0 to 23.1.0 [esphome#4375](https://github.com/esphome/esphome/pull/4375) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Improve tuya network status command [esphome#4415](https://github.com/esphome/esphome/pull/4415) by [@Rjevski](https://github.com/Rjevski) +- Gracefully reject vacuum map upload requests [esphome#4414](https://github.com/esphome/esphome/pull/4414) by [@Rjevski](https://github.com/Rjevski) +- Fixed PlatformIO Build on DEV [esphome#4422](https://github.com/esphome/esphome/pull/4422) by [@Expaso](https://github.com/Expaso) +- Bump platformio from 6.1.5 to 6.1.6 [esphome#4341](https://github.com/esphome/esphome/pull/4341) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.15.10 to 2.16.2 [esphome#4426](https://github.com/esphome/esphome/pull/4426) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 13.1.0 to 13.3.1 [esphome#4427](https://github.com/esphome/esphome/pull/4427) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add concurrency limit to ci-docker [esphome#4407](https://github.com/esphome/esphome/pull/4407) by [@jesserockz](https://github.com/jesserockz) +- Add final job so branch protection can require matrix ci steps [esphome#4432](https://github.com/esphome/esphome/pull/4432) by [@jesserockz](https://github.com/jesserockz) +- Deep Sleep capable ports for ESP32S3 [esphome#4230](https://github.com/esphome/esphome/pull/4230) by [@LeDominik](https://github.com/LeDominik) +- Initialize all fields in ESPTime in PCF85063 [esphome#4439](https://github.com/esphome/esphome/pull/4439) by [@oxan](https://github.com/oxan) +- Bump zeroconf from 0.47.1 to 0.47.3 [esphome#4437](https://github.com/esphome/esphome/pull/4437) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Automate syncing device classes with HA [esphome#4438](https://github.com/esphome/esphome/pull/4438) by [@oxan](https://github.com/oxan) +- NeoPixel - Add support for ESP32-S3 [esphome#4435](https://github.com/esphome/esphome/pull/4435) by [@ajacques](https://github.com/ajacques) +- add SUB_BINARY_SENSOR macro to binary sensor [esphome#4447](https://github.com/esphome/esphome/pull/4447) by [@regevbr](https://github.com/regevbr) +- add SUB_TEXT_SENSOR macro to text sensor [esphome#4448](https://github.com/esphome/esphome/pull/4448) by [@regevbr](https://github.com/regevbr) +- Simplify sensor schema generation [esphome#4462](https://github.com/esphome/esphome/pull/4462) by [@balloob](https://github.com/balloob) +- add SUB_NUMBER macro and schema to number [esphome#4449](https://github.com/esphome/esphome/pull/4449) by [@regevbr](https://github.com/regevbr) +- add SUB_BUTTON macro and ability to button schema to define the class [esphome#4450](https://github.com/esphome/esphome/pull/4450) by [@regevbr](https://github.com/regevbr) +- Simplify number_schema function [esphome#4467](https://github.com/esphome/esphome/pull/4467) by [@jesserockz](https://github.com/jesserockz) +- Simplify button_schema function [esphome#4468](https://github.com/esphome/esphome/pull/4468) by [@jesserockz](https://github.com/jesserockz) +- Simplify binary_sensor_schema function [esphome#4469](https://github.com/esphome/esphome/pull/4469) by [@jesserockz](https://github.com/jesserockz) +- Add configurable color datapoint [esphome#4383](https://github.com/esphome/esphome/pull/4383) by [@irtimaled](https://github.com/irtimaled) (breaking-change) +- Add internal_temperature component [esphome#4330](https://github.com/esphome/esphome/pull/4330) by [@Mat931](https://github.com/Mat931) (new-integration) +- Move remaining SENSOR_SCHEMA to use sensor_schema() [esphome#4471](https://github.com/esphome/esphome/pull/4471) by [@jesserockz](https://github.com/jesserockz) +- Allow specifying target and current visual steps for climate [esphome#4440](https://github.com/esphome/esphome/pull/4440) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 13.3.1 to 13.4.0 [esphome#4472](https://github.com/esphome/esphome/pull/4472) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- toshiba: add support for quiet fan mode [esphome#4283](https://github.com/esphome/esphome/pull/4283) by [@MichaelMure](https://github.com/MichaelMure) +- Bump esptool from 4.4 to 4.5 [esphome#4428](https://github.com/esphome/esphome/pull/4428) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Support Mopeka Standard LPG tank bluetooth sensor [esphome#4351](https://github.com/esphome/esphome/pull/4351) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) (new-integration) +- fix library override logic [esphome#4474](https://github.com/esphome/esphome/pull/4474) by [@mzakharo](https://github.com/mzakharo) +- Sprinkler "v2" updates [esphome#4159](https://github.com/esphome/esphome/pull/4159) by [@kbx81](https://github.com/kbx81) (breaking-change) +- add person sensor (SEN21231) from usefulsensors [esphome#4454](https://github.com/esphome/esphome/pull/4454) by [@shreyaskarnik](https://github.com/shreyaskarnik) (new-integration) +- Initial stab at importing idf components [esphome#4000](https://github.com/esphome/esphome/pull/4000) by [@jesserockz](https://github.com/jesserockz) +- add kuntze component [esphome#4411](https://github.com/esphome/esphome/pull/4411) by [@ssieb](https://github.com/ssieb) (new-integration) +- Add Haier climate component [esphome#4001](https://github.com/esphome/esphome/pull/4001) by [@Yarikx](https://github.com/Yarikx) (new-integration) +- Bump esp-idf to 4.4.3 via platformio/espressif32 @ 5.3.0 [esphome#4254](https://github.com/esphome/esphome/pull/4254) by [@bdraco](https://github.com/bdraco) +- Add energy to pzemdc [esphome#3626](https://github.com/esphome/esphome/pull/3626) by [@andreashergert1984](https://github.com/andreashergert1984) +- Update esp32 esp-idf dev and latest version numbers [esphome#4479](https://github.com/esphome/esphome/pull/4479) by [@jesserockz](https://github.com/jesserockz) +- [ExternalRAMAllocator] Use same `heap_caps_malloc` parameter as `ps_malloc`. [esphome#4484](https://github.com/esphome/esphome/pull/4484) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Lock scheduler items while modifying them [esphome#4410](https://github.com/esphome/esphome/pull/4410) by [@oxan](https://github.com/oxan) +- Move Font glyphs to SPI RAM. [esphome#4485](https://github.com/esphome/esphome/pull/4485) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Run CI on merge group [esphome#4489](https://github.com/esphome/esphome/pull/4489) by [@jesserockz](https://github.com/jesserockz) +- Fix parallel invocations of repeat action [esphome#4480](https://github.com/esphome/esphome/pull/4480) by [@oxan](https://github.com/oxan) +- Make test3 use huge_app [esphome#4488](https://github.com/esphome/esphome/pull/4488) by [@jesserockz](https://github.com/jesserockz) +- Change variable "skip_updates" and "skip_updates_counter" type from "uint8_t" to "uint16_t" [esphome#4487](https://github.com/esphome/esphome/pull/4487) by [@GitforZhangXL](https://github.com/GitforZhangXL) +- Fix copy-pasta mistake [esphome#4492](https://github.com/esphome/esphome/pull/4492) by [@jesserockz](https://github.com/jesserockz) +- Add int16 to codegen [esphome#4507](https://github.com/esphome/esphome/pull/4507) by [@jesserockz](https://github.com/jesserockz) +- Update __init__.py [esphome#4514](https://github.com/esphome/esphome/pull/4514) by [@dashkhaneh](https://github.com/dashkhaneh) +- Remove idf components before checking if any in config [esphome#4506](https://github.com/esphome/esphome/pull/4506) by [@jesserockz](https://github.com/jesserockz) +- substitutions: Don't warn when passwords look like a substitution [esphome#4161](https://github.com/esphome/esphome/pull/4161) by [@tljuniper](https://github.com/tljuniper) +- Fix typo [esphome#4515](https://github.com/esphome/esphome/pull/4515) by [@oxan](https://github.com/oxan) +- implement pairing for bluetooth proxy [esphome#4475](https://github.com/esphome/esphome/pull/4475) by [@jagheterfredrik](https://github.com/jagheterfredrik) +- Bump docker dependencies [esphome#4526](https://github.com/esphome/esphome/pull/4526) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 13.4.0 to 13.5.0 [esphome#4525](https://github.com/esphome/esphome/pull/4525) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Ensure component is ready before update. [esphome#4523](https://github.com/esphome/esphome/pull/4523) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- climate: add on_control callbacks [esphome#4511](https://github.com/esphome/esphome/pull/4511) by [@nwf](https://github.com/nwf) +- FS3000 sensor [esphome#4502](https://github.com/esphome/esphome/pull/4502) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Bump esptool from 4.5 to 4.5.1 [esphome#4497](https://github.com/esphome/esphome/pull/4497) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add support for multiple devices in bme680_bsec [esphome#3550](https://github.com/esphome/esphome/pull/3550) by [@bisbastuner](https://github.com/bisbastuner) +- Bump pytest from 7.2.1 to 7.2.2 [esphome#4505](https://github.com/esphome/esphome/pull/4505) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.16.2 to 2.16.4 [esphome#4524](https://github.com/esphome/esphome/pull/4524) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add absolute humidity component [esphome#4519](https://github.com/esphome/esphome/pull/4519) by [@DAVe3283](https://github.com/DAVe3283) (new-integration) +- Add ability to await safe mode in codegen [esphome#4529](https://github.com/esphome/esphome/pull/4529) by [@oxan](https://github.com/oxan) +- sn74hc165 fixes [esphome#4457](https://github.com/esphome/esphome/pull/4457) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add AS7341 spectral color sensor [esphome#4331](https://github.com/esphome/esphome/pull/4331) by [@mrgnr](https://github.com/mrgnr) (new-integration) +- Fix ethernet driver setting gpio 5 high when no power pin defined [esphome#4531](https://github.com/esphome/esphome/pull/4531) by [@jesserockz](https://github.com/jesserockz) +- Use PSRam for BLE scan results. [esphome#4486](https://github.com/esphome/esphome/pull/4486) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Bump esp-idf to 4.4.4 [esphome#4528](https://github.com/esphome/esphome/pull/4528) by [@bdraco](https://github.com/bdraco) +- Added pzemdc reset energy action [esphome#4481](https://github.com/esphome/esphome/pull/4481) by [@KG3RK3N](https://github.com/KG3RK3N) +- Fix ethernet clk_mode for GPIO0_OUT [esphome#4307](https://github.com/esphome/esphome/pull/4307) by [@jorticus](https://github.com/jorticus) +- Add ESP32-S3 support in NeoPixelBus component [esphome#4114](https://github.com/esphome/esphome/pull/4114) by [@rcloran](https://github.com/rcloran) +- Renaming and extending the ili9341 to the ili9xxx component [esphome#4275](https://github.com/esphome/esphome/pull/4275) by [@nielsnl68](https://github.com/nielsnl68) (new-integration) (breaking-change) +- Drop unused, broken logging macros [esphome#4534](https://github.com/esphome/esphome/pull/4534) by [@oxan](https://github.com/oxan) +- Revert storing Font glyphs in manually-allocated memory [esphome#4516](https://github.com/esphome/esphome/pull/4516) by [@oxan](https://github.com/oxan) +- Correct BME680 gas calculation and heater_off [esphome#4498](https://github.com/esphome/esphome/pull/4498) by [@CarlosGS](https://github.com/CarlosGS) +- Add support for new mpu6050 clones responding with 0x70 address [esphome#4546](https://github.com/esphome/esphome/pull/4546) by [@jakehdk](https://github.com/jakehdk) +- Add carbon dioxide device class to scd30 sensor schema. [esphome#4547](https://github.com/esphome/esphome/pull/4547) by [@murrayma](https://github.com/murrayma) +- Feat: add support for hex color in color component [esphome#4493](https://github.com/esphome/esphome/pull/4493) by [@dorianim](https://github.com/dorianim) +- Allow AUTO_LOAD to be a function [esphome#4550](https://github.com/esphome/esphome/pull/4550) by [@jesserockz](https://github.com/jesserockz) +- On the ILI9xxx display's enable the psram on esp32 and allow big screen [esphome#4551](https://github.com/esphome/esphome/pull/4551) by [@nielsnl68](https://github.com/nielsnl68) +- Map gpio pins for touch on esp32-s2/s3 [esphome#4552](https://github.com/esphome/esphome/pull/4552) by [@jesserockz](https://github.com/jesserockz) +- pipsolar component. Correct the sscanf format for QPIG command parsin… [esphome#4165](https://github.com/esphome/esphome/pull/4165) by [@eroldan](https://github.com/eroldan) +- Add state class back to uptime sensor [esphome#4557](https://github.com/esphome/esphome/pull/4557) by [@DAVe3283](https://github.com/DAVe3283) +- Added response for Tuya RSSI command [esphome#4549](https://github.com/esphome/esphome/pull/4549) by [@catalin2402](https://github.com/catalin2402) +- Remove switch actions during config; bump setup priority [esphome#4563](https://github.com/esphome/esphome/pull/4563) by [@kbx81](https://github.com/kbx81) +- Mark esp32_touch supported only on standard esp32 variant [esphome#4562](https://github.com/esphome/esphome/pull/4562) by [@jesserockz](https://github.com/jesserockz) +- fixing `shrink` and `extend` functions of the displaybuffer's Rect class [esphome#4565](https://github.com/esphome/esphome/pull/4565) by [@nielsnl68](https://github.com/nielsnl68) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.4.0.mdx b/src/content/docs/changelog/2023.4.0.mdx new file mode 100644 index 0000000000..739cbf23a7 --- /dev/null +++ b/src/content/docs/changelog/2023.4.0.mdx @@ -0,0 +1,218 @@ +--- +description: "Changelog for ESPHome 2023.4.0." +title: "ESPHome 2023.4.0 - 19th April 2023" +pagefind: false +slug: "changelog/2023.4.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Voice Assistant + +This year is the Year of the Voice for Home Assistant, and ESPHome is charging ahead with this in mind. +We've added a new [Voice Assistant](/components/voice_assistant/) component that allows you to use ESPHome devices +as an input for [assist](https://www.home-assistant.io/voice_control/) in Home Assistant **2023.5 or later**. + +With this also comes preliminary [microphone](/components/microphone/) support, which has been +built in a way that multiple components, like `voice_assistant` can request start / stop of the microphone and get +the data. We hope this leads to more interesting use cases for the microphone in the future. + +Home Assistant is hosting a live stream all about the Year of the Voice - Chapter 2. + +{/* markdownlint-disable-next-line MD033 */} + + +## Keith joins Nabu Casa + +Nabu Casa is pleased to announce that long time contributor Keith Burzinski ([@kbx81](https://github.com/kbx81)) is joining the +team as a full time developer to help out on ESPHome. Keith created the [Sprinkler](/components/sprinkler/), +[Thermostat](/components/climate/thermostat/), a bunch of the `ssd` display components and a few other components +as well as fixing many bug along the way. I expect his house climate and garden area are kept well in line. + +Looking forward to working with you Keith. + +{/* markdownlint-disable MD013 */} + +## Release 2023.4.1 - April 24 + +- fix flip_x [esphome#4727](https://github.com/esphome/esphome/pull/4727) by [@ssieb](https://github.com/ssieb) +- Use proper schema for delta filter [esphome#4723](https://github.com/esphome/esphome/pull/4723) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.4.2 - April 27 + +- I2c scan recovery reset fix [esphome#4724](https://github.com/esphome/esphome/pull/4724) by [@gcopeland](https://github.com/gcopeland) +- Debug component doesn't work on RP2040 [esphome#4728](https://github.com/esphome/esphome/pull/4728) by [@HeMan](https://github.com/HeMan) +- Only request VA port from first client that is subscribed [esphome#4747](https://github.com/esphome/esphome/pull/4747) by [@jesserockz](https://github.com/jesserockz) +- Don't allow fingerprint_grow enroll cancellation when no enrollment started [esphome#4745](https://github.com/esphome/esphome/pull/4745) by [@itpeters](https://github.com/itpeters) + +## Release 2023.4.3 - May 2 + +- Fix sprinkler switch restore_mode [esphome#4756](https://github.com/esphome/esphome/pull/4756) by [@kbx81](https://github.com/kbx81) +- Fix i2s media player on devices with no internal DAC [esphome#4768](https://github.com/esphome/esphome/pull/4768) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.4.4 - May 4 + +- Fixes for Arduino 2.7.4 (for FastLED) [esphome#4777](https://github.com/esphome/esphome/pull/4777) by [@timn](https://github.com/timn) + +## Breaking Changes + +### I²S Media Player + +With the introduction of the [I2S Audio](/components/microphone/i2s_audio/), the media player platform has some +required breaking changes to the YAML configuration. This involves moving the `i2s_lrclk_pin` and +`i2s_bclk_pin` to a new [I2S Audio](/components/i2s_audio/) component. + +```yaml +# Before +media_player: + - platform: i2s_audio + name: ESPHome I2S Media Player + dac_type: external + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + i2s_dout_pin: GPIO22 + mode: mono + +# After +i2s_audio: + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + +media_player: + - platform: i2s_audio + name: ESPHome I2S Media Player + dac_type: external + i2s_dout_pin: GPIO22 + mode: mono +``` + +### Default restore mode for Switches, Fans and Lights + +The default `restore_mode` for switches, fans and lights has been changed +from `RESTORE_DEFAULT_OFF` to `ALWAYS_OFF` with the intention that restoring values +from flash should be manually specified by a user if desired in their YAML configuration. + +### Number `step` + +The `number` components have always internally set a `step` required in config, +but allowed it to be not specified at all. This caused issues on the Home Assistant side +of things. This is only a breaking change for external components that have a `number` platform. + +### UART ids + +Due to `uart0` / `uart1` / `uart2` being defined in some of the platform code ESPHome uses, +ESPHome will now disallow these ids from being used in the config. You can simply change them to +`uart_0` to continue using. + +## Full list of changes + +### New Components + +- Added in mmc5603 code [esphome#4175](https://github.com/esphome/esphome/pull/4175) by [@benhoff](https://github.com/benhoff) (new-integration) +- Add push to talk voice assistant [esphome#4648](https://github.com/esphome/esphome/pull/4648) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- Disallow uart0/1/2 as ids in config [esphome#4446](https://github.com/esphome/esphome/pull/4446) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Require step to be set when calling register_number [esphome#4622](https://github.com/esphome/esphome/pull/4622) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Fix restore [esphome#4655](https://github.com/esphome/esphome/pull/4655) by [@spacemanspiff2007](https://github.com/spacemanspiff2007) (breaking-change) + +### Beta Changes + +- debug component, allow without debug logging [esphome#4685](https://github.com/esphome/esphome/pull/4685) by [@jesserockz](https://github.com/jesserockz) +- Fixed dns2 for ethernet [esphome#4698](https://github.com/esphome/esphome/pull/4698) by [@HeMan](https://github.com/HeMan) +- Add timeout to i2c write error logs [esphome#4697](https://github.com/esphome/esphome/pull/4697) by [@Szewcson](https://github.com/Szewcson) +- Add event triggers to voice_assistant [esphome#4699](https://github.com/esphome/esphome/pull/4699) by [@jesserockz](https://github.com/jesserockz) +- Call on_error if no api client connected that handles voice [esphome#4709](https://github.com/esphome/esphome/pull/4709) by [@jesserockz](https://github.com/jesserockz) +- Add ethernet powerdown (fixes esphome/issues#4420) [esphome#4706](https://github.com/esphome/esphome/pull/4706) by [@tracestep](https://github.com/tracestep) +- Bump arduino platform version to 5.3.0 [esphome#4713](https://github.com/esphome/esphome/pull/4713) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Mark unique_id() virtual method as deprecated [esphome#4538](https://github.com/esphome/esphome/pull/4538) by [@oxan](https://github.com/oxan) +- Drop deprecated entity property base methods [esphome#4539](https://github.com/esphome/esphome/pull/4539) by [@oxan](https://github.com/oxan) +- Format test files [esphome#4541](https://github.com/esphome/esphome/pull/4541) by [@jesserockz](https://github.com/jesserockz) +- EntityBase: Icon string can stay in flash. [esphome#4566](https://github.com/esphome/esphome/pull/4566) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Update the delta filter to be able to take a percentage change [esphome#4391](https://github.com/esphome/esphome/pull/4391) by [@TrentHouliston](https://github.com/TrentHouliston) +- Added missing PM_1_0 and PM_10_0 for PMS5003T and PMS5003ST [esphome#4560](https://github.com/esphome/esphome/pull/4560) by [@genestealer](https://github.com/genestealer) +- Add an option to force SPI into software mode [esphome#4556](https://github.com/esphome/esphome/pull/4556) by [@wupeka](https://github.com/wupeka) +- allow using a binary output for the status led [esphome#4532](https://github.com/esphome/esphome/pull/4532) by [@ssieb](https://github.com/ssieb) +- Add option flip_x [esphome#4555](https://github.com/esphome/esphome/pull/4555) by [@rafal83](https://github.com/rafal83) +- Bump aioesphomeapi from 13.5.0 to 13.5.1 [esphome#4572](https://github.com/esphome/esphome/pull/4572) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Verbose output of define. [esphome#4576](https://github.com/esphome/esphome/pull/4576) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Add support for ESP32 CAM 3MP and 5MP resolutions and arbitrary camera clock. [esphome#4580](https://github.com/esphome/esphome/pull/4580) by [@peterhalicky](https://github.com/peterhalicky) +- Add a simple 'skip_initial' filter [esphome#4582](https://github.com/esphome/esphome/pull/4582) by [@sybrenstuvel](https://github.com/sybrenstuvel) +- Fix outdated filter string in platformio_api [esphome#4587](https://github.com/esphome/esphome/pull/4587) by [@LordMike](https://github.com/LordMike) +- Split test3.yaml [esphome#4591](https://github.com/esphome/esphome/pull/4591) by [@jesserockz](https://github.com/jesserockz) +- Disallow uart0/1/2 as ids in config [esphome#4446](https://github.com/esphome/esphome/pull/4446) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Upgrade clang-format to v13 [esphome#4535](https://github.com/esphome/esphome/pull/4535) by [@oxan](https://github.com/oxan) +- B/W support for GooDisplay GDEY029T94 (as used on Adafruit MagTag) [esphome#4222](https://github.com/esphome/esphome/pull/4222) by [@AaronJackson](https://github.com/AaronJackson) +- Fix negative sqrt root in ct_clamp_sensor.cpp [esphome#4236](https://github.com/esphome/esphome/pull/4236) by [@jerome992](https://github.com/jerome992) +- Wrap ipv6 code a bit more [esphome#4574](https://github.com/esphome/esphome/pull/4574) by [@jesserockz](https://github.com/jesserockz) +- Remove EntityBase from sprinkler [esphome#4606](https://github.com/esphome/esphome/pull/4606) by [@jesserockz](https://github.com/jesserockz) +- Fix wrong port multiplexer name in dump GPIO function of sx1509 [esphome#4592](https://github.com/esphome/esphome/pull/4592) by [@skaldo](https://github.com/skaldo) +- Bump zeroconf from 0.47.3 to 0.47.4 [esphome#4597](https://github.com/esphome/esphome/pull/4597) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.20.3 to 0.21.0 [esphome#4599](https://github.com/esphome/esphome/pull/4599) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Limit range on filter time period for remote_receiver [esphome#4604](https://github.com/esphome/esphome/pull/4604) by [@RoboMagus](https://github.com/RoboMagus) +- add select_schema to select component [esphome#4545](https://github.com/esphome/esphome/pull/4545) by [@regevbr](https://github.com/regevbr) +- Add ability to clear the gatt cache [esphome#4621](https://github.com/esphome/esphome/pull/4621) by [@bdraco](https://github.com/bdraco) +- Bump actions/stale from 7 to 8 [esphome#4615](https://github.com/esphome/esphome/pull/4615) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Require step to be set when calling register_number [esphome#4622](https://github.com/esphome/esphome/pull/4622) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Lower range of CONF_FREQUENCY [esphome#4619](https://github.com/esphome/esphome/pull/4619) by [@berendhaan](https://github.com/berendhaan) +- Allow entity names to be set to None [esphome#4607](https://github.com/esphome/esphome/pull/4607) by [@jesserockz](https://github.com/jesserockz) +- Fix platform restriction for bme680_bsec [esphome#4616](https://github.com/esphome/esphome/pull/4616) by [@jesserockz](https://github.com/jesserockz) +- Fix EzoCommandType enum [esphome#4593](https://github.com/esphome/esphome/pull/4593) by [@alfredopironti](https://github.com/alfredopironti) +- `EntityBase` Name can stay in flash. [esphome#4594](https://github.com/esphome/esphome/pull/4594) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- feat: Add support to unsubscribe from BLE advertisements [esphome#4620](https://github.com/esphome/esphome/pull/4620) by [@richardhopton](https://github.com/richardhopton) +- EntityBase: Move ObjectId to Flash [esphome#4569](https://github.com/esphome/esphome/pull/4569) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Add workflow to sync device classes with HA dev [esphome#4629](https://github.com/esphome/esphome/pull/4629) by [@jesserockz](https://github.com/jesserockz) +- Synchronise Device Classes from Home Assistant [esphome#4633](https://github.com/esphome/esphome/pull/4633) by [@github-actions[bot]](https://github.com/github-actions[bot]) +- Remove AUTO_LOAD from as3935 [esphome#4630](https://github.com/esphome/esphome/pull/4630) by [@jesserockz](https://github.com/jesserockz) +- Add ifdef to new bt proxy unsubscribe [esphome#4634](https://github.com/esphome/esphome/pull/4634) by [@jesserockz](https://github.com/jesserockz) +- add bluetooth mac address in dump_config() [esphome#4628](https://github.com/esphome/esphome/pull/4628) by [@felixlungu](https://github.com/felixlungu) +- Binary map bugfixes [esphome#4636](https://github.com/esphome/esphome/pull/4636) by [@kahrendt](https://github.com/kahrendt) +- entity_base avoid padding bytes. [esphome#4637](https://github.com/esphome/esphome/pull/4637) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Avoid sensor padding. [esphome#4638](https://github.com/esphome/esphome/pull/4638) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Support advanced UART customization [esphome#4465](https://github.com/esphome/esphome/pull/4465) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Log calibration results at level INFO [esphome#4240](https://github.com/esphome/esphome/pull/4240) by [@Duckle29](https://github.com/Duckle29) +- Number step not optional [esphome#4649](https://github.com/esphome/esphome/pull/4649) by [@RoboMagus](https://github.com/RoboMagus) +- VSCode / devcontainer updates [esphome#4647](https://github.com/esphome/esphome/pull/4647) by [@jesserockz](https://github.com/jesserockz) +- Retry PN532_COMMAND_VERSION_DATA on setup() (fixes esphome/issues#3823) [esphome#4651](https://github.com/esphome/esphome/pull/4651) by [@tracestep](https://github.com/tracestep) +- Bump pylint from 2.16.4 to 2.17.2 [esphome#4650](https://github.com/esphome/esphome/pull/4650) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.1.0 to 23.3.0 [esphome#4635](https://github.com/esphome/esphome/pull/4635) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Added in mmc5603 code [esphome#4175](https://github.com/esphome/esphome/pull/4175) by [@benhoff](https://github.com/benhoff) (new-integration) +- fix compilation with latest esp-idf [esphome#4671](https://github.com/esphome/esphome/pull/4671) by [@Mic92](https://github.com/Mic92) +- Bump zeroconf from 0.47.4 to 0.56.0 [esphome#4674](https://github.com/esphome/esphome/pull/4674) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.2.2 to 7.3.0 [esphome#4673](https://github.com/esphome/esphome/pull/4673) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add push to talk voice assistant [esphome#4648](https://github.com/esphome/esphome/pull/4648) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Fix ESP32 SPI hardware assignment in Arduino fw [esphome#4669](https://github.com/esphome/esphome/pull/4669) by [@kbx81](https://github.com/kbx81) +- Fix some NFC/PN532 crashes [esphome#4678](https://github.com/esphome/esphome/pull/4678) by [@kbx81](https://github.com/kbx81) +- Add support for SSD1306 72x40 displays [esphome#4659](https://github.com/esphome/esphome/pull/4659) by [@johnsto](https://github.com/johnsto) +- Fix pin schema for i2s microphone [esphome#4680](https://github.com/esphome/esphome/pull/4680) by [@jesserockz](https://github.com/jesserockz) +- Fix BedJet setup priority [fixes esphome/issues#3807] [esphome#4677](https://github.com/esphome/esphome/pull/4677) by [@jhansche](https://github.com/jhansche) +- Add always trigger stop [esphome#4249](https://github.com/esphome/esphome/pull/4249) by [@X-Ryl669](https://github.com/X-Ryl669) +- Fix graph limits for negative values and other corner cases [esphome#4253](https://github.com/esphome/esphome/pull/4253) by [@unhold](https://github.com/unhold) +- Fix cut-off on 2.13" waveshare/ttgo epaper displays [esphome#4255](https://github.com/esphome/esphome/pull/4255) by [@unhold](https://github.com/unhold) +- [Ethernet] Add PHY KSZ8081 support [esphome#4668](https://github.com/esphome/esphome/pull/4668) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Fix restore [esphome#4655](https://github.com/esphome/esphome/pull/4655) by [@spacemanspiff2007](https://github.com/spacemanspiff2007) (breaking-change) +- debug component, allow without debug logging [esphome#4685](https://github.com/esphome/esphome/pull/4685) by [@jesserockz](https://github.com/jesserockz) +- Fixed dns2 for ethernet [esphome#4698](https://github.com/esphome/esphome/pull/4698) by [@HeMan](https://github.com/HeMan) +- Add timeout to i2c write error logs [esphome#4697](https://github.com/esphome/esphome/pull/4697) by [@Szewcson](https://github.com/Szewcson) +- Add event triggers to voice_assistant [esphome#4699](https://github.com/esphome/esphome/pull/4699) by [@jesserockz](https://github.com/jesserockz) +- Call on_error if no api client connected that handles voice [esphome#4709](https://github.com/esphome/esphome/pull/4709) by [@jesserockz](https://github.com/jesserockz) +- Add ethernet powerdown (fixes esphome/issues#4420) [esphome#4706](https://github.com/esphome/esphome/pull/4706) by [@tracestep](https://github.com/tracestep) +- Bump arduino platform version to 5.3.0 [esphome#4713](https://github.com/esphome/esphome/pull/4713) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.5.0.mdx b/src/content/docs/changelog/2023.5.0.mdx new file mode 100644 index 0000000000..30cdde6ef0 --- /dev/null +++ b/src/content/docs/changelog/2023.5.0.mdx @@ -0,0 +1,191 @@ +--- +description: "Changelog for ESPHome 2023.5.0." +title: "ESPHome 2023.5.0 - 17th May 2023" +pagefind: false +slug: "changelog/2023.5.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Speakers + +Following on from last months release adding [microphones](/components/microphone/), +this release adds [speaker](/components/speaker/) support! + +These new changes allows the [Voice Assistant](/components/voice_assistant/) to request the raw audio +stream response from Home Assistant to playback without using a full [Media Player](/components/media_player/). +This has much lower latency and allows for a much more responsive voice assistant experience. + +## More Microphones + +This release also adds a bit more configuration for the i2s_audio microphone components. +There is a breaking-change that requires new configuration fields to be added in YAML. +See the [microphone documentation](/components/microphone/i2s_audio/) for the configuration details, +but below is a small example for the M5Stack Atom Echo. + +```yaml +# Old +microphone: + platform: i2s_audio + i2s_din_pin: GPIO23 + id: my_microphone + +# New +microphone: + platform: i2s_audio + i2s_din_pin: GPIO23 + adc_type: external + pdm: false +``` + +{/* markdownlint-disable MD013 */} + +## Release 2023.5.1 - May 18 + +- Remove i2c dependency from ttp229_bsf [esphome#4851](https://github.com/esphome/esphome/pull/4851) by [@jesserockz](https://github.com/jesserockz) +- Sprinkler fixes [esphome#4816](https://github.com/esphome/esphome/pull/4816) by [@kbx81](https://github.com/kbx81) + +## Release 2023.5.2 - May 22 + +- Fix i2s_audio media_player mutex acquisition [esphome#4867](https://github.com/esphome/esphome/pull/4867) by [@kroimon](https://github.com/kroimon) + +## Release 2023.5.3 - May 22 + +- Allow microphone channel to be specified in config [esphome#4871](https://github.com/esphome/esphome/pull/4871) by [@jesserockz](https://github.com/jesserockz) +- [PSRam] Change log unit to KB to minimize rounding error. [esphome#4872](https://github.com/esphome/esphome/pull/4872) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) + +## Release 2023.5.4 - May 24 + +- [internal_temperature] ESP32-S3 needs ESP IDF V4.4.3 or higher [esphome#4873](https://github.com/esphome/esphome/pull/4873) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Update cover.h for compile errors with stop() [esphome#4879](https://github.com/esphome/esphome/pull/4879) by [@Davrosx](https://github.com/Davrosx) +- Print ESPHome version when running commands [esphome#4883](https://github.com/esphome/esphome/pull/4883) by [@jesserockz](https://github.com/jesserockz) +- fix modbus sending FP32_R values [esphome#4882](https://github.com/esphome/esphome/pull/4882) by [@ssieb](https://github.com/ssieb) +- Fix esp32_rmt_led_strip color modes [esphome#4886](https://github.com/esphome/esphome/pull/4886) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.5.5 - May 29 + +- Fix version printing not breaking yaml parsing [esphome#4904](https://github.com/esphome/esphome/pull/4904) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add mlx90614 sensors [esphome#3749](https://github.com/esphome/esphome/pull/3749) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add PCA6416A Support [esphome#4681](https://github.com/esphome/esphome/pull/4681) by [@Mat931](https://github.com/Mat931) (new-integration) +- Add support for hyt271 [esphome#4282](https://github.com/esphome/esphome/pull/4282) by [@Philippe12](https://github.com/Philippe12) (new-integration) +- Max6956 support added [esphome#3764](https://github.com/esphome/esphome/pull/3764) by [@looping40](https://github.com/looping40) (new-integration) +- Speaker support [esphome#4743](https://github.com/esphome/esphome/pull/4743) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add gp8403 output component [esphome#4495](https://github.com/esphome/esphome/pull/4495) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Create esp32 rmt addressable light driver [esphome#4708](https://github.com/esphome/esphome/pull/4708) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add host target platform [esphome#4783](https://github.com/esphome/esphome/pull/4783) by [@jesserockz](https://github.com/jesserockz) (new-integration) + +### Breaking Changes + +- Remove climate legacy away flags [esphome#4744](https://github.com/esphome/esphome/pull/4744) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Revert "Template sensors always publish on update interval (#2224)" [esphome#4774](https://github.com/esphome/esphome/pull/4774) by [@nuttytree](https://github.com/nuttytree) (breaking-change) + +### Beta Changes + +- Fixed access point for ESP32 IDF platform [esphome#4784](https://github.com/esphome/esphome/pull/4784) by [@HeMan](https://github.com/HeMan) +- Remove AUTO_LOAD from apds9960 [esphome#4746](https://github.com/esphome/esphome/pull/4746) by [@jesserockz](https://github.com/jesserockz) +- Supposed to fix #4069, by changing the default value to 0s (timeunit … [esphome#4806](https://github.com/esphome/esphome/pull/4806) by [@Alex1602](https://github.com/Alex1602) +- Wording [esphome#4805](https://github.com/esphome/esphome/pull/4805) by [@fgsch](https://github.com/fgsch) +- Tuya: Prevent loop when setting colors on case-sensitive dps [esphome#4809](https://github.com/esphome/esphome/pull/4809) by [@richardhopton](https://github.com/richardhopton) +- Fix i2s media player volume control [esphome#4813](https://github.com/esphome/esphome/pull/4813) by [@jesserockz](https://github.com/jesserockz) +- Dont try stop if not actually started [esphome#4814](https://github.com/esphome/esphome/pull/4814) by [@jesserockz](https://github.com/jesserockz) +- Fix missing stop trait in send_cover_info [esphome#4826](https://github.com/esphome/esphome/pull/4826) by [@RoboMagus](https://github.com/RoboMagus) +- Bump aioesphomeapi from 13.7.2 to 13.7.5 [esphome#4830](https://github.com/esphome/esphome/pull/4830) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update PulseLightEffect with range brightness [esphome#4820](https://github.com/esphome/esphome/pull/4820) by [@max246](https://github.com/max246) +- Bump esphome-dashboard to 20230516.0 [esphome#4831](https://github.com/esphome/esphome/pull/4831) by [@jesserockz](https://github.com/jesserockz) +- Fix time period validation for the auto cleaning interval [esphome#4811](https://github.com/esphome/esphome/pull/4811) by [@fgsch](https://github.com/fgsch) +- Bump tzlocal from 4.2 to 5.0.1 [esphome#4829](https://github.com/esphome/esphome/pull/4829) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 [esphome#4762](https://github.com/esphome/esphome/pull/4762) by [@spectrumjade](https://github.com/spectrumjade) +- Synchronise Device Classes from Home Assistant [esphome#4825](https://github.com/esphome/esphome/pull/4825) by [@github-actions[bot]](https://github.com/github-actions[bot]) +- support sending keys to the collector [esphome#4838](https://github.com/esphome/esphome/pull/4838) by [@ssieb](https://github.com/ssieb) +- handle Wiegand 8-bit keys [esphome#4837](https://github.com/esphome/esphome/pull/4837) by [@ssieb](https://github.com/ssieb) + +### All changes + +- Only allow 5 jobs from each CI run to be in parallel [esphome#4682](https://github.com/esphome/esphome/pull/4682) by [@jesserockz](https://github.com/jesserockz) +- Add Bayesian type for binary_sensor_map component [esphome#4640](https://github.com/esphome/esphome/pull/4640) by [@kahrendt](https://github.com/kahrendt) +- Bump aioesphomeapi from 13.5.1 to 13.7.0 [esphome#4676](https://github.com/esphome/esphome/pull/4676) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 4 to 5 [esphome#4661](https://github.com/esphome/esphome/pull/4661) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 3 to 4 [esphome#4367](https://github.com/esphome/esphome/pull/4367) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Keep Device Class in Flash. [esphome#4639](https://github.com/esphome/esphome/pull/4639) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Add support for passive WiFi scanning [esphome#4666](https://github.com/esphome/esphome/pull/4666) by [@BellaCoola](https://github.com/BellaCoola) +- Initial attempt at supporting ESP-IDF 5.0.0 [esphome#4364](https://github.com/esphome/esphome/pull/4364) by [@kbx81](https://github.com/kbx81) +- Get Sunrise & Sunset for a Specific Date [esphome#4712](https://github.com/esphome/esphome/pull/4712) by [@RebbePod](https://github.com/RebbePod) +- Add `supports_stop` trait to Cover [esphome#3897](https://github.com/esphome/esphome/pull/3897) by [@amomchilov](https://github.com/amomchilov) +- Bump aioesphomeapi from 13.7.0 to 13.7.1 [esphome#4725](https://github.com/esphome/esphome/pull/4725) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add on_tag_removed trigger for RC522 [esphome#4742](https://github.com/esphome/esphome/pull/4742) by [@kbx81](https://github.com/kbx81) +- Fix 'blutooth' typo in esp32_ble component [esphome#4738](https://github.com/esphome/esphome/pull/4738) by [@RoboMagus](https://github.com/RoboMagus) +- Bump pylint from 2.17.2 to 2.17.3 [esphome#4740](https://github.com/esphome/esphome/pull/4740) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tornado from 6.2 to 6.3.1 [esphome#4741](https://github.com/esphome/esphome/pull/4741) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.3.0 to 7.3.1 [esphome#4686](https://github.com/esphome/esphome/pull/4686) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Expand the platformio dep installer to also install platforms and tools [esphome#4716](https://github.com/esphome/esphome/pull/4716) by [@jesserockz](https://github.com/jesserockz) +- Remove climate legacy away flags [esphome#4744](https://github.com/esphome/esphome/pull/4744) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add mlx90614 sensors [esphome#3749](https://github.com/esphome/esphome/pull/3749) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Move am43 sensor code and remove auto load on cover [esphome#4631](https://github.com/esphome/esphome/pull/4631) by [@jesserockz](https://github.com/jesserockz) +- Fix assumed_state switch webserver [esphome#4259](https://github.com/esphome/esphome/pull/4259) by [@RoboMagus](https://github.com/RoboMagus) +- Bump aioesphomeapi from 13.7.1 to 13.7.2 [esphome#4753](https://github.com/esphome/esphome/pull/4753) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump git version in Dockerfile [esphome#4763](https://github.com/esphome/esphome/pull/4763) by [@jesserockz](https://github.com/jesserockz) +- Power down PN532 before deep sleep [esphome#4707](https://github.com/esphome/esphome/pull/4707) by [@tracestep](https://github.com/tracestep) +- Switch ESPAsyncTCP-esphome to esphome fork [esphome#4764](https://github.com/esphome/esphome/pull/4764) by [@jesserockz](https://github.com/jesserockz) +- Bump pyupgrade from 3.3.1 to 3.3.2 [esphome#4751](https://github.com/esphome/esphome/pull/4751) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Only pre-install libraries in docker images [esphome#4766](https://github.com/esphome/esphome/pull/4766) by [@jesserockz](https://github.com/jesserockz) +- Add PCA6416A Support [esphome#4681](https://github.com/esphome/esphome/pull/4681) by [@Mat931](https://github.com/Mat931) (new-integration) +- play_folder bugfix and addition of play_mp3 [esphome#4758](https://github.com/esphome/esphome/pull/4758) by [@llluis](https://github.com/llluis) +- RF Codec for Drayton Digistat heating controller [esphome#4494](https://github.com/esphome/esphome/pull/4494) by [@marshn](https://github.com/marshn) +- Add support for hyt271 [esphome#4282](https://github.com/esphome/esphome/pull/4282) by [@Philippe12](https://github.com/Philippe12) (new-integration) +- Add support for BLE passkey authentication [esphome#4258](https://github.com/esphome/esphome/pull/4258) by [@Mat931](https://github.com/Mat931) +- Add support for V2 of the waveshare 5.83in e-paper display. [esphome#3660](https://github.com/esphome/esphome/pull/3660) by [@cooki35](https://github.com/cooki35) +- Max6956 support added [esphome#3764](https://github.com/esphome/esphome/pull/3764) by [@looping40](https://github.com/looping40) (new-integration) +- Bump zeroconf from 0.56.0 to 0.60.0 [esphome#4767](https://github.com/esphome/esphome/pull/4767) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Revert "Template sensors always publish on update interval (#2224)" [esphome#4774](https://github.com/esphome/esphome/pull/4774) by [@nuttytree](https://github.com/nuttytree) (breaking-change) +- update schema gen to 2023.4.0 [esphome#4772](https://github.com/esphome/esphome/pull/4772) by [@glmnet](https://github.com/glmnet) +- Speaker support [esphome#4743](https://github.com/esphome/esphome/pull/4743) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add gp8403 output component [esphome#4495](https://github.com/esphome/esphome/pull/4495) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Create esp32 rmt addressable light driver [esphome#4708](https://github.com/esphome/esphome/pull/4708) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Bump ESP32-audioI2s to 2.0.7 [esphome#4796](https://github.com/esphome/esphome/pull/4796) by [@jesserockz](https://github.com/jesserockz) +- SM2135 Add optional current configuration, avoid communication failures. [esphome#3850](https://github.com/esphome/esphome/pull/3850) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) +- Fix ezo parsing [esphome#4792](https://github.com/esphome/esphome/pull/4792) by [@alfredopironti](https://github.com/alfredopironti) +- [ili9xxx] Improve fill operation performance [esphome#4702](https://github.com/esphome/esphome/pull/4702) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Add host target platform [esphome#4783](https://github.com/esphome/esphome/pull/4783) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add more envs to root platformio [esphome#4799](https://github.com/esphome/esphome/pull/4799) by [@jesserockz](https://github.com/jesserockz) +- Keep Unit of Measurement in Flash. [esphome#4719](https://github.com/esphome/esphome/pull/4719) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- [display] Small display print performance improvement [esphome#4788](https://github.com/esphome/esphome/pull/4788) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Fixed calculation of start and end dhcp range [esphome#4785](https://github.com/esphome/esphome/pull/4785) by [@HeMan](https://github.com/HeMan) +- Add more configuration for microphones - i2s/pdm/adc [esphome#4775](https://github.com/esphome/esphome/pull/4775) by [@jesserockz](https://github.com/jesserockz) +- Wrap VA code [esphome#4800](https://github.com/esphome/esphome/pull/4800) by [@jesserockz](https://github.com/jesserockz) +- Make i2s_audio bclk_pin optional [esphome#4801](https://github.com/esphome/esphome/pull/4801) by [@jesserockz](https://github.com/jesserockz) +- Validate project details are set for dashboard_import [esphome#4802](https://github.com/esphome/esphome/pull/4802) by [@jesserockz](https://github.com/jesserockz) +- Fixed access point for ESP32 IDF platform [esphome#4784](https://github.com/esphome/esphome/pull/4784) by [@HeMan](https://github.com/HeMan) +- Remove AUTO_LOAD from apds9960 [esphome#4746](https://github.com/esphome/esphome/pull/4746) by [@jesserockz](https://github.com/jesserockz) +- Supposed to fix #4069, by changing the default value to 0s (timeunit … [esphome#4806](https://github.com/esphome/esphome/pull/4806) by [@Alex1602](https://github.com/Alex1602) +- Wording [esphome#4805](https://github.com/esphome/esphome/pull/4805) by [@fgsch](https://github.com/fgsch) +- Tuya: Prevent loop when setting colors on case-sensitive dps [esphome#4809](https://github.com/esphome/esphome/pull/4809) by [@richardhopton](https://github.com/richardhopton) +- Fix i2s media player volume control [esphome#4813](https://github.com/esphome/esphome/pull/4813) by [@jesserockz](https://github.com/jesserockz) +- Dont try stop if not actually started [esphome#4814](https://github.com/esphome/esphome/pull/4814) by [@jesserockz](https://github.com/jesserockz) +- Fix missing stop trait in send_cover_info [esphome#4826](https://github.com/esphome/esphome/pull/4826) by [@RoboMagus](https://github.com/RoboMagus) +- Bump aioesphomeapi from 13.7.2 to 13.7.5 [esphome#4830](https://github.com/esphome/esphome/pull/4830) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update PulseLightEffect with range brightness [esphome#4820](https://github.com/esphome/esphome/pull/4820) by [@max246](https://github.com/max246) +- Bump esphome-dashboard to 20230516.0 [esphome#4831](https://github.com/esphome/esphome/pull/4831) by [@jesserockz](https://github.com/jesserockz) +- Fix time period validation for the auto cleaning interval [esphome#4811](https://github.com/esphome/esphome/pull/4811) by [@fgsch](https://github.com/fgsch) +- Bump tzlocal from 4.2 to 5.0.1 [esphome#4829](https://github.com/esphome/esphome/pull/4829) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 [esphome#4762](https://github.com/esphome/esphome/pull/4762) by [@spectrumjade](https://github.com/spectrumjade) +- Synchronise Device Classes from Home Assistant [esphome#4825](https://github.com/esphome/esphome/pull/4825) by [@github-actions[bot]](https://github.com/github-actions[bot]) +- support sending keys to the collector [esphome#4838](https://github.com/esphome/esphome/pull/4838) by [@ssieb](https://github.com/ssieb) +- handle Wiegand 8-bit keys [esphome#4837](https://github.com/esphome/esphome/pull/4837) by [@ssieb](https://github.com/ssieb) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.6.0.mdx b/src/content/docs/changelog/2023.6.0.mdx new file mode 100644 index 0000000000..26b2c086c9 --- /dev/null +++ b/src/content/docs/changelog/2023.6.0.mdx @@ -0,0 +1,214 @@ +--- +description: "Changelog for ESPHome 2023.6.0." +title: "ESPHome 2023.6.0 - 21st June 2023" +pagefind: false +slug: "changelog/2023.6.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Dark Mode 😎 + +Thanks to [@grahambrown11](https://github.com/grahambrown11) for implement a dark mode for the ESPHome dashboard! +It will take the preference of your browser and is not configurable at this time. + +## Alarm Control Panel + +[@grahambrown11](https://github.com/grahambrown11) also has contributed the base alarm control panel code and a template alarm +control panel. This is available to use now in ESPHome, but will require Home Assistant 2023.7 or newer for the entity +to show up and be control from that side. + +## MDI icons + +You can now specify MDI icons as ESPHome images using the `mdi:` prefix, for example: + +```yaml +image: + - file: "my_image.png" + id: my_image + - file: "mdi:chip" + resize: 32x32 + id: chip_icon +``` + +## Wi-Fi enable and disable + +Wi-Fi can now be enabled and disabled on demand using the `wifi.enable` and `wifi.disable` actions. +It can also be set to not enable on bootup. See the [Wi-Fi documentation](/components/wifi/) +for more details. + +{/* markdownlint-disable MD013 */} + +## Release 2023.6.1 - June 23 + +- Make ethernet_info work with esp-idf framework [esphome#4976](https://github.com/esphome/esphome/pull/4976) by [@HeMan](https://github.com/HeMan) +- display: fix white screen on binary displays [esphome#4991](https://github.com/esphome/esphome/pull/4991) by [@ayufan](https://github.com/ayufan) + +## Release 2023.6.2 - June 23 + +- remove unused static declarations [esphome#4993](https://github.com/esphome/esphome/pull/4993) by [@ssieb](https://github.com/ssieb) +- Fix rp2040 pio tool download [esphome#4994](https://github.com/esphome/esphome/pull/4994) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.6.3 - June 28 + +- Update webserver to 56d73b5 [esphome#5007](https://github.com/esphome/esphome/pull/5007) by [@jesserockz](https://github.com/jesserockz) +- Synchronise Device Classes from Home Assistant [esphome#5018](https://github.com/esphome/esphome/pull/5018) by [@esphomebot](https://github.com/esphomebot) +- Fixes compressed downloads [esphome#5014](https://github.com/esphome/esphome/pull/5014) by [@fdcastel](https://github.com/fdcastel) +- Add CONFIG_BT_BLE_42_FEATURES_SUPPORTED for ble [esphome#5008](https://github.com/esphome/esphome/pull/5008) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.6.4 - July 4 + +- [SCD30] Disable negative temperature offset [esphome#4850](https://github.com/esphome/esphome/pull/4850) by [@ardichoke](https://github.com/ardichoke) +- fix template binary_sensor publish_initial_state option [esphome#5033](https://github.com/esphome/esphome/pull/5033) by [@dudanov](https://github.com/dudanov) +- Add alarm to reserved ids [esphome#5042](https://github.com/esphome/esphome/pull/5042) by [@grahambrown11](https://github.com/grahambrown11) +- Advertise noise is enabled [esphome#5034](https://github.com/esphome/esphome/pull/5034) by [@bdraco](https://github.com/bdraco) +- Update webserver to ea86d81 [esphome#5023](https://github.com/esphome/esphome/pull/5023) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.6.5 - July 10 + +- Fix bulk and single Bluetooth parser coexistence [esphome#5073](https://github.com/esphome/esphome/pull/5073) by [@bdraco](https://github.com/bdraco) +- binary_sensor: Validate max_length for on_click/on_double_click [esphome#5068](https://github.com/esphome/esphome/pull/5068) by [@kpfleming](https://github.com/kpfleming) + +## Breaking Changes + +### VOC sensors + +Some VOC sensors have had their default device class changed from `volatile_organic_compounds` to `volatile_organic_compounds_parts` +to better align with what they are returning. + +### Microphone + +The `on_data` trigger (and the internal callback) for the microphone now provides `std::vector` instead of a `std::vector`. + +### Header files moved + +There are a couple of breaking changes for users who publish `external_components` and may use the internal APIs. +See the list below for the pull requests that have been marked as breaking changes. + +## Full list of changes + +### New Components + +- Rp2040 pio ledstrip [esphome#4818](https://github.com/esphome/esphome/pull/4818) by [@Papa-DMan](https://github.com/Papa-DMan) (new-integration) +- Add support for TMP1075 temperature sensor [esphome#4776](https://github.com/esphome/esphome/pull/4776) by [@sybrenstuvel](https://github.com/sybrenstuvel) (new-integration) +- Add Alarm Control Panel [esphome#4770](https://github.com/esphome/esphome/pull/4770) by [@grahambrown11](https://github.com/grahambrown11) (new-integration) + +### Breaking Changes + +- Add transparency support to all image types [esphome#4600](https://github.com/esphome/esphome/pull/4600) by [@guillempages](https://github.com/guillempages) (breaking-change) +- Allow i2s microphone bits per sample to be configured [esphome#4884](https://github.com/esphome/esphome/pull/4884) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Move ESPTime into core esphome namespace [esphome#4926](https://github.com/esphome/esphome/pull/4926) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- display: add `BaseImage` and provide only `Image::get_pixel` method [esphome#4932](https://github.com/esphome/esphome/pull/4932) by [@ayufan](https://github.com/ayufan) (breaking-change) +- Migrate VOC sensors that use ppb to use volatile_organic_compounds_parts device class [esphome#4982](https://github.com/esphome/esphome/pull/4982) by [@bdraco](https://github.com/bdraco) (breaking-change) + +### Beta Changes + +- Add support in vbus component for Deltasol BS 2009 [esphome#4943](https://github.com/esphome/esphome/pull/4943) by [@clydebarrow](https://github.com/clydebarrow) +- fix vbus sensor offsets [esphome#4952](https://github.com/esphome/esphome/pull/4952) by [@ssieb](https://github.com/ssieb) +- Add support for ESP32-S3-BOX-Lite displays [esphome#4941](https://github.com/esphome/esphome/pull/4941) by [@guillempages](https://github.com/guillempages) +- Split display_buffer sub-components into own files [esphome#4950](https://github.com/esphome/esphome/pull/4950) by [@guillempages](https://github.com/guillempages) +- Add support for S3 box display [esphome#4942](https://github.com/esphome/esphome/pull/4942) by [@guillempages](https://github.com/guillempages) +- display: allow to align image with `ImageAlign` [esphome#4933](https://github.com/esphome/esphome/pull/4933) by [@ayufan](https://github.com/ayufan) +- Use HW SPI for rp2040 [esphome#4955](https://github.com/esphome/esphome/pull/4955) by [@jesserockz](https://github.com/jesserockz) +- Fix for Fujitsu AC not having Quiet Fan Mode [esphome#4962](https://github.com/esphome/esphome/pull/4962) by [@TaruDesigns](https://github.com/TaruDesigns) +- Store app comment and compilation_time in flash [esphome#4945](https://github.com/esphome/esphome/pull/4945) by [@bdraco](https://github.com/bdraco) +- Construct web_server assets at build time instead of run time [esphome#4944](https://github.com/esphome/esphome/pull/4944) by [@bdraco](https://github.com/bdraco) +- Update pca9685_output.cpp [esphome#4929](https://github.com/esphome/esphome/pull/4929) by [@standahabich](https://github.com/standahabich) +- Apply configured IIR filter setting in generated BMP280 code [esphome#4975](https://github.com/esphome/esphome/pull/4975) by [@murrayma](https://github.com/murrayma) +- airthings_wave: refactor to eliminate code duplication [esphome#4910](https://github.com/esphome/esphome/pull/4910) by [@kpfleming](https://github.com/kpfleming) (new-integration) +- Make growatt play nicer with other modbus components. [esphome#4947](https://github.com/esphome/esphome/pull/4947) by [@onnlucky](https://github.com/onnlucky) +- Bump esphome-dashboard to 20230621.0 [esphome#4980](https://github.com/esphome/esphome/pull/4980) by [@jesserockz](https://github.com/jesserockz) +- Fix pypi release [esphome#4983](https://github.com/esphome/esphome/pull/4983) by [@jesserockz](https://github.com/jesserockz) +- Add configuration option to disable the log UI. [esphome#4419](https://github.com/esphome/esphome/pull/4419) by [@dd32](https://github.com/dd32) +- Update webserver and captive portal pages to 67c48ee9 [esphome#4986](https://github.com/esphome/esphome/pull/4986) by [@jesserockz](https://github.com/jesserockz) +- Migrate VOC sensors that use ppb to use volatile_organic_compounds_parts device class [esphome#4982](https://github.com/esphome/esphome/pull/4982) by [@bdraco](https://github.com/bdraco) (breaking-change) +- dashboard: Adds "compressed=1" to /download.bin endpoint. (...) [esphome#4966](https://github.com/esphome/esphome/pull/4966) by [@fdcastel](https://github.com/fdcastel) + +### All changes + +- Add minimum RSSI check to ble presence [esphome#4646](https://github.com/esphome/esphome/pull/4646) by [@nielsnl68](https://github.com/nielsnl68) +- Run black over tests folder [esphome#4824](https://github.com/esphome/esphome/pull/4824) by [@jesserockz](https://github.com/jesserockz) +- Use token so PR checks are run [esphome#4834](https://github.com/esphome/esphome/pull/4834) by [@jesserockz](https://github.com/jesserockz) +- Fix stale bot ignoring not-stale [esphome#4836](https://github.com/esphome/esphome/pull/4836) by [@jesserockz](https://github.com/jesserockz) +- Rework CI into multiple dependent jobs [esphome#4823](https://github.com/esphome/esphome/pull/4823) by [@jesserockz](https://github.com/jesserockz) +- Add DNS to Text info [esphome#4821](https://github.com/esphome/esphome/pull/4821) by [@max246](https://github.com/max246) +- allow to use MQTT for discovery of IPs if mDNS is no option [esphome#3887](https://github.com/esphome/esphome/pull/3887) by [@Links2004](https://github.com/Links2004) +- Move some I2C logic out of header file [esphome#4839](https://github.com/esphome/esphome/pull/4839) by [@CarsonF](https://github.com/CarsonF) +- Allow substitutions to be valid names [esphome#4726](https://github.com/esphome/esphome/pull/4726) by [@jgoguen](https://github.com/jgoguen) +- Insert Europe Tank Types from mopeka_std_check [esphome#4757](https://github.com/esphome/esphome/pull/4757) by [@lukasl96](https://github.com/lukasl96) +- Bump tornado from 6.3.1 to 6.3.2 [esphome#4841](https://github.com/esphome/esphome/pull/4841) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.17.3 to 2.17.4 [esphome#4843](https://github.com/esphome/esphome/pull/4843) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.60.0 to 0.62.0 [esphome#4781](https://github.com/esphome/esphome/pull/4781) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.3.2 to 3.4.0 [esphome#4842](https://github.com/esphome/esphome/pull/4842) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump platformio from 6.1.6 to 6.1.7 [esphome#4795](https://github.com/esphome/esphome/pull/4795) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Migrate e131 to use socket instead of WiFiUDP arduino library [esphome#4832](https://github.com/esphome/esphome/pull/4832) by [@jesserockz](https://github.com/jesserockz) +- Add transparency support to all image types [esphome#4600](https://github.com/esphome/esphome/pull/4600) by [@guillempages](https://github.com/guillempages) (breaking-change) +- Run YAML test 8 during CI and fix board used [esphome#4862](https://github.com/esphome/esphome/pull/4862) by [@kroimon](https://github.com/kroimon) +- Rp2040 pio ledstrip [esphome#4818](https://github.com/esphome/esphome/pull/4818) by [@Papa-DMan](https://github.com/Papa-DMan) (new-integration) +- [ILI9xxx] Update ili9xxx_init.h code for the ILI9488 display for correct white balance [esphome#4849](https://github.com/esphome/esphome/pull/4849) by [@lucasreiners](https://github.com/lucasreiners) +- Update codeowners [esphome#4875](https://github.com/esphome/esphome/pull/4875) by [@freekode](https://github.com/freekode) +- Fix rp2040_pio_led_strip color modes [esphome#4887](https://github.com/esphome/esphome/pull/4887) by [@jesserockz](https://github.com/jesserockz) +- Add i2s mclk [esphome#4885](https://github.com/esphome/esphome/pull/4885) by [@rpatel3001](https://github.com/rpatel3001) +- Allow partially looping animations [esphome#4693](https://github.com/esphome/esphome/pull/4693) by [@guillempages](https://github.com/guillempages) +- Allow i2s microphone bits per sample to be configured [esphome#4884](https://github.com/esphome/esphome/pull/4884) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add support for TMP1075 temperature sensor [esphome#4776](https://github.com/esphome/esphome/pull/4776) by [@sybrenstuvel](https://github.com/sybrenstuvel) (new-integration) +- move pio tools to LED component [esphome#4903](https://github.com/esphome/esphome/pull/4903) by [@ssieb](https://github.com/ssieb) +- add SUB_SELECT macro [esphome#4897](https://github.com/esphome/esphome/pull/4897) by [@regevbr](https://github.com/regevbr) +- add SUB_SWITCH macro [esphome#4898](https://github.com/esphome/esphome/pull/4898) by [@regevbr](https://github.com/regevbr) +- esp32_rmt_led_strip: fix compile with ESP-IDF ≥ 5 [esphome#4856](https://github.com/esphome/esphome/pull/4856) by [@stintel](https://github.com/stintel) +- Bump aioesphomeapi from 13.7.5 to 13.9.0 [esphome#4907](https://github.com/esphome/esphome/pull/4907) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- ota: fix compile with ESP-IDF ≥ 5 [esphome#4857](https://github.com/esphome/esphome/pull/4857) by [@stintel](https://github.com/stintel) +- ota: fix TWDT with ESP-IDF ≥ 5 [esphome#4858](https://github.com/esphome/esphome/pull/4858) by [@stintel](https://github.com/stintel) +- light: fix compile with ESP-IDF ≥ 5 [esphome#4855](https://github.com/esphome/esphome/pull/4855) by [@stintel](https://github.com/stintel) +- Continuous voice_assistant and silence detection [esphome#4892](https://github.com/esphome/esphome/pull/4892) by [@jesserockz](https://github.com/jesserockz) +- Allow WIFI to be disabled and enabled [esphome#4810](https://github.com/esphome/esphome/pull/4810) by [@jesserockz](https://github.com/jesserockz) +- Bump frenck/action-yamllint from 1.4.0 to 1.4.1 [esphome#4876](https://github.com/esphome/esphome/pull/4876) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-cov from 4.0.0 to 4.1.0 [esphome#4888](https://github.com/esphome/esphome/pull/4888) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.62.0 to 0.63.0 [esphome#4890](https://github.com/esphome/esphome/pull/4890) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esptool from 4.5.1 to 4.6 [esphome#4906](https://github.com/esphome/esphome/pull/4906) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- prometheus: fix compilation with EntityBase [esphome#4895](https://github.com/esphome/esphome/pull/4895) by [@mischief](https://github.com/mischief) +- Support for Adafruit ESP32-S2 TFT Feather [esphome#4912](https://github.com/esphome/esphome/pull/4912) by [@PlainTechEnthusiast](https://github.com/PlainTechEnthusiast) +- Add support for mdi images [esphome#4654](https://github.com/esphome/esphome/pull/4654) by [@guillempages](https://github.com/guillempages) +- Increase SNTP setup priority [esphome#4917](https://github.com/esphome/esphome/pull/4917) by [@droscy](https://github.com/droscy) +- Bump aioesphomeapi from 13.9.0 to 14.0.0 [esphome#4925](https://github.com/esphome/esphome/pull/4925) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bluetooth Proxy: Raw bundled advertisements [esphome#4924](https://github.com/esphome/esphome/pull/4924) by [@jesserockz](https://github.com/jesserockz) +- Move ESPTime into core esphome namespace [esphome#4926](https://github.com/esphome/esphome/pull/4926) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Allow multiple MAC addresses for 'on_ble_advertise' filter [esphome#4773](https://github.com/esphome/esphome/pull/4773) by [@RoboMagus](https://github.com/RoboMagus) +- Add SVG image support [esphome#4922](https://github.com/esphome/esphome/pull/4922) by [@guillempages](https://github.com/guillempages) +- Add !extend to devcontainer's customTags [esphome#4749](https://github.com/esphome/esphome/pull/4749) by [@jimtng](https://github.com/jimtng) +- [max7219digit] fix 270° rotation [esphome#4930](https://github.com/esphome/esphome/pull/4930) by [@spezifisch](https://github.com/spezifisch) +- proto generation updates [esphome#4653](https://github.com/esphome/esphome/pull/4653) by [@jesserockz](https://github.com/jesserockz) +- I2S media player allow setting communication format for external DACs [esphome#4918](https://github.com/esphome/esphome/pull/4918) by [@ccorderor](https://github.com/ccorderor) +- Add MULTI_CONF to pn53_i2c [esphome#4938](https://github.com/esphome/esphome/pull/4938) by [@jesserockz](https://github.com/jesserockz) +- display: Improve Image rendering by removing usage of virtual functions [esphome#4931](https://github.com/esphome/esphome/pull/4931) by [@ayufan](https://github.com/ayufan) +- display: add `BaseImage` and provide only `Image::get_pixel` method [esphome#4932](https://github.com/esphome/esphome/pull/4932) by [@ayufan](https://github.com/ayufan) (breaking-change) +- Add Alarm Control Panel [esphome#4770](https://github.com/esphome/esphome/pull/4770) by [@grahambrown11](https://github.com/grahambrown11) (new-integration) +- Add support in vbus component for Deltasol BS 2009 [esphome#4943](https://github.com/esphome/esphome/pull/4943) by [@clydebarrow](https://github.com/clydebarrow) +- fix vbus sensor offsets [esphome#4952](https://github.com/esphome/esphome/pull/4952) by [@ssieb](https://github.com/ssieb) +- Add support for ESP32-S3-BOX-Lite displays [esphome#4941](https://github.com/esphome/esphome/pull/4941) by [@guillempages](https://github.com/guillempages) +- Split display_buffer sub-components into own files [esphome#4950](https://github.com/esphome/esphome/pull/4950) by [@guillempages](https://github.com/guillempages) +- Add support for S3 box display [esphome#4942](https://github.com/esphome/esphome/pull/4942) by [@guillempages](https://github.com/guillempages) +- display: allow to align image with `ImageAlign` [esphome#4933](https://github.com/esphome/esphome/pull/4933) by [@ayufan](https://github.com/ayufan) +- Use HW SPI for rp2040 [esphome#4955](https://github.com/esphome/esphome/pull/4955) by [@jesserockz](https://github.com/jesserockz) +- Fix for Fujitsu AC not having Quiet Fan Mode [esphome#4962](https://github.com/esphome/esphome/pull/4962) by [@TaruDesigns](https://github.com/TaruDesigns) +- Store app comment and compilation_time in flash [esphome#4945](https://github.com/esphome/esphome/pull/4945) by [@bdraco](https://github.com/bdraco) +- Construct web_server assets at build time instead of run time [esphome#4944](https://github.com/esphome/esphome/pull/4944) by [@bdraco](https://github.com/bdraco) +- Update pca9685_output.cpp [esphome#4929](https://github.com/esphome/esphome/pull/4929) by [@standahabich](https://github.com/standahabich) +- Apply configured IIR filter setting in generated BMP280 code [esphome#4975](https://github.com/esphome/esphome/pull/4975) by [@murrayma](https://github.com/murrayma) +- airthings_wave: refactor to eliminate code duplication [esphome#4910](https://github.com/esphome/esphome/pull/4910) by [@kpfleming](https://github.com/kpfleming) (new-integration) +- Make growatt play nicer with other modbus components. [esphome#4947](https://github.com/esphome/esphome/pull/4947) by [@onnlucky](https://github.com/onnlucky) +- Bump esphome-dashboard to 20230621.0 [esphome#4980](https://github.com/esphome/esphome/pull/4980) by [@jesserockz](https://github.com/jesserockz) +- Fix pypi release [esphome#4983](https://github.com/esphome/esphome/pull/4983) by [@jesserockz](https://github.com/jesserockz) +- Add configuration option to disable the log UI. [esphome#4419](https://github.com/esphome/esphome/pull/4419) by [@dd32](https://github.com/dd32) +- Update webserver and captive portal pages to 67c48ee9 [esphome#4986](https://github.com/esphome/esphome/pull/4986) by [@jesserockz](https://github.com/jesserockz) +- Migrate VOC sensors that use ppb to use volatile_organic_compounds_parts device class [esphome#4982](https://github.com/esphome/esphome/pull/4982) by [@bdraco](https://github.com/bdraco) (breaking-change) +- dashboard: Adds "compressed=1" to /download.bin endpoint. (...) [esphome#4966](https://github.com/esphome/esphome/pull/4966) by [@fdcastel](https://github.com/fdcastel) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.7.0.mdx b/src/content/docs/changelog/2023.7.0.mdx new file mode 100644 index 0000000000..9d898f256e --- /dev/null +++ b/src/content/docs/changelog/2023.7.0.mdx @@ -0,0 +1,174 @@ +--- +description: "Changelog for ESPHome 2023.7.0." +title: "ESPHome 2023.7.0 - 19th July 2023" +pagefind: false +slug: "changelog/2023.7.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Webserver with ESP-IDF + +This releases adds support for the [Webserver](/components/web_server/) and +[Captive Portal](/components/captive_portal/) when using the `esp-idf` framework on ESP32 boards. + +## Display components + +This release adds a few changes to the display core code to optimise and allow for future +improvements which are already in progress. This also may bring breaking changes to the internal APIs that +`external_components` may be relying on. + +## A new warning in the logs + +```text +[00:00:00][W][component:204]: Component xxxxxx took a long time for an operation (x.xx s). +[00:00:00][W][component:205]: Components should block for at most 20-30ms. +``` + +These 2 log lines may show up in the most recent version of ESPHome due to the log level being changed from +`verbose` to `warning`. I made this change because changing the device log level to verbose just to see if these +lines show up significantly slowed down the device due to all the extra logging it had to do. + +Please do not report new issues for this, but [comment on this issue](https://github.com/esphome/issues/issues/4717) +if someone has not already commented for that specific component. + +## Full list of changes + +{/* markdownlint-disable MD013 */} + +### New Components + +- XL9535 I/O Expander [esphome#4899](https://github.com/esphome/esphome/pull/4899) by [@mreditor97](https://github.com/mreditor97) (new-integration) +- Add Zio Ultrasonic Distance Sensor Component [esphome#5059](https://github.com/esphome/esphome/pull/5059) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add Alpha3 pump component [esphome#3787](https://github.com/esphome/esphome/pull/3787) by [@jan-hofmeier](https://github.com/jan-hofmeier) (new-integration) +- RTC implementation of pcf8563 [esphome#4998](https://github.com/esphome/esphome/pull/4998) by [@KoenBreeman](https://github.com/KoenBreeman) (new-integration) +- web server esp idf support [esphome#3500](https://github.com/esphome/esphome/pull/3500) by [@dentra](https://github.com/dentra) (new-integration) +- Add TT21100 touchscreen component [esphome#4793](https://github.com/esphome/esphome/pull/4793) by [@kroimon](https://github.com/kroimon) (new-integration) +- Add support for Grove tb6612 fng [esphome#4797](https://github.com/esphome/esphome/pull/4797) by [@max246](https://github.com/max246) (new-integration) +- Add support for ATM90E26 [esphome#4366](https://github.com/esphome/esphome/pull/4366) by [@danieltwagner](https://github.com/danieltwagner) (new-integration) +- New 'Duty Time' sensor component [esphome#5069](https://github.com/esphome/esphome/pull/5069) by [@dudanov](https://github.com/dudanov) (new-integration) + +### Breaking Changes + +- display: add `BaseFont` and introduce `Font::draw` methods [esphome#4963](https://github.com/esphome/esphome/pull/4963) by [@ayufan](https://github.com/ayufan) (breaking-change) +- display: Rename `display.DisplayBufferRef` to `display.DisplayRef` used by lambda [esphome#5002](https://github.com/esphome/esphome/pull/5002) by [@ayufan](https://github.com/ayufan) (breaking-change) +- Remove template switch restore_state [esphome#5106](https://github.com/esphome/esphome/pull/5106) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- Dont do mqtt ip lookup if `use_address` has ip address [esphome#5096](https://github.com/esphome/esphome/pull/5096) by [@jesserockz](https://github.com/jesserockz) +- ESP32 enable ADC2 when wifi is disabled [esphome#4381](https://github.com/esphome/esphome/pull/4381) by [@pciavald](https://github.com/pciavald) +- [Sprinkler] Resume fixes [esphome#5100](https://github.com/esphome/esphome/pull/5100) by [@hostcc](https://github.com/hostcc) +- Remove template switch restore_state [esphome#5106](https://github.com/esphome/esphome/pull/5106) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add timeout filter [esphome#5104](https://github.com/esphome/esphome/pull/5104) by [@clydebarrow](https://github.com/clydebarrow) +- P1 values for capacity tariff in Belgium [esphome#5081](https://github.com/esphome/esphome/pull/5081) by [@bwynants](https://github.com/bwynants) +- airthings_wave: Silence compiler warnings [esphome#5098](https://github.com/esphome/esphome/pull/5098) by [@kpfleming](https://github.com/kpfleming) +- Sigma delta fix [esphome#4911](https://github.com/esphome/esphome/pull/4911) by [@PlainTechEnthusiast](https://github.com/PlainTechEnthusiast) +- [LD2410] Remove baud_rate check [esphome#5112](https://github.com/esphome/esphome/pull/5112) by [@voed](https://github.com/voed) +- Fix silence detection flag on voice assistant [esphome#5120](https://github.com/esphome/esphome/pull/5120) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.7.1 - August 1 + +- Dashboard: use Popen() on Windows [esphome#5110](https://github.com/esphome/esphome/pull/5110) by [@kuba2k2](https://github.com/kuba2k2) +- Swap ADC back to use 'int' because C3 [esphome#5151](https://github.com/esphome/esphome/pull/5151) by [@kbx81](https://github.com/kbx81) +- wifi: handle WIFI_REASON_ROAMING reason in event [esphome#5153](https://github.com/esphome/esphome/pull/5153) by [@stintel](https://github.com/stintel) +- Slightly lower template switch setup priority [esphome#5163](https://github.com/esphome/esphome/pull/5163) by [@cvwillegen](https://github.com/cvwillegen) +- update "Can't convert" warning to match others in homeassistant_sensor [esphome#5162](https://github.com/esphome/esphome/pull/5162) by [@PlainTechEnthusiast](https://github.com/PlainTechEnthusiast) +- Increase maximum number of BLE notifications [esphome#5155](https://github.com/esphome/esphome/pull/5155) by [@bdraco](https://github.com/bdraco) +- invert min_rssi check [esphome#5150](https://github.com/esphome/esphome/pull/5150) by [@Jorre05](https://github.com/Jorre05) +- Fix graininess & streaks for 7.50inV2alt Waveshare e-paper [esphome#5168](https://github.com/esphome/esphome/pull/5168) by [@Egglestron](https://github.com/Egglestron) + +### All changes + +- Upgraded Haier climate component implementation [esphome#4521](https://github.com/esphome/esphome/pull/4521) by [@paveldn](https://github.com/paveldn) +- display: add `BaseFont` and introduce `Font::draw` methods [esphome#4963](https://github.com/esphome/esphome/pull/4963) by [@ayufan](https://github.com/ayufan) (breaking-change) +- display/font: optimise font rendering by about 25% [esphome#4956](https://github.com/esphome/esphome/pull/4956) by [@ayufan](https://github.com/ayufan) +- display: move `Rect` into `rect.cpp/.h` [esphome#4957](https://github.com/esphome/esphome/pull/4957) by [@ayufan](https://github.com/ayufan) +- Bump pytest from 7.3.1 to 7.3.2 [esphome#4936](https://github.com/esphome/esphome/pull/4936) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add read/write for 16bit registers [esphome#4844](https://github.com/esphome/esphome/pull/4844) by [@CarsonF](https://github.com/CarsonF) +- XL9535 I/O Expander [esphome#4899](https://github.com/esphome/esphome/pull/4899) by [@mreditor97](https://github.com/mreditor97) (new-integration) +- Fix python venv restoring [esphome#4965](https://github.com/esphome/esphome/pull/4965) by [@jesserockz](https://github.com/jesserockz) +- Preprocess away unused code when IPv6 is disabled [esphome#4973](https://github.com/esphome/esphome/pull/4973) by [@HeMan](https://github.com/HeMan) +- Bump aioesphomeapi from 14.0.0 to 14.1.0 [esphome#4972](https://github.com/esphome/esphome/pull/4972) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add actions to animation [esphome#4959](https://github.com/esphome/esphome/pull/4959) by [@guillempages](https://github.com/guillempages) +- Bump zeroconf from 0.63.0 to 0.69.0 [esphome#4970](https://github.com/esphome/esphome/pull/4970) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- mqtt: add ESP-IDF ≥ 5.0 support [esphome#4854](https://github.com/esphome/esphome/pull/4854) by [@stintel](https://github.com/stintel) +- display: move `Image`, `Font` and `Animation` code into components [esphome#4967](https://github.com/esphome/esphome/pull/4967) by [@ayufan](https://github.com/ayufan) +- support empty schemas and one platform components [esphome#4999](https://github.com/esphome/esphome/pull/4999) by [@glmnet](https://github.com/glmnet) +- update dsmr to 0.7 [esphome#5011](https://github.com/esphome/esphome/pull/5011) by [@Pvlerick](https://github.com/Pvlerick) +- add water delivered to dsmr component [esphome#4237](https://github.com/esphome/esphome/pull/4237) by [@jerome992](https://github.com/jerome992) +- Update sync workflow [esphome#5017](https://github.com/esphome/esphome/pull/5017) by [@jesserockz](https://github.com/jesserockz) +- Bump aioesphomeapi from 14.1.0 to 15.0.0 [esphome#5012](https://github.com/esphome/esphome/pull/5012) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.4.0 to 3.7.0 [esphome#4971](https://github.com/esphome/esphome/pull/4971) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.3.2 to 7.4.0 [esphome#5000](https://github.com/esphome/esphome/pull/5000) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Attempt to fix script parameters [esphome#4627](https://github.com/esphome/esphome/pull/4627) by [@jesserockz](https://github.com/jesserockz) +- Remove yaml test cache [esphome#5019](https://github.com/esphome/esphome/pull/5019) by [@jesserockz](https://github.com/jesserockz) +- Bump esptool from 4.6 to 4.6.2 [esphome#4949](https://github.com/esphome/esphome/pull/4949) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-mock from 3.10.0 to 3.11.1 [esphome#4977](https://github.com/esphome/esphome/pull/4977) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- binary_sensor removed unused filter [esphome#5039](https://github.com/esphome/esphome/pull/5039) by [@dudanov](https://github.com/dudanov) +- binary_sensor filters templatable delays [esphome#5029](https://github.com/esphome/esphome/pull/5029) by [@dudanov](https://github.com/dudanov) +- Improve the gamma settings for the S3-Box-lite display [esphome#5046](https://github.com/esphome/esphome/pull/5046) by [@guillempages](https://github.com/guillempages) +- Prepare ethernet to work with esp idf 5.0 [esphome#5037](https://github.com/esphome/esphome/pull/5037) by [@HeMan](https://github.com/HeMan) +- Prepare debug and logger component to work with idf 5.0 [esphome#5036](https://github.com/esphome/esphome/pull/5036) by [@HeMan](https://github.com/HeMan) +- Mopeka std fixes [esphome#5041](https://github.com/esphome/esphome/pull/5041) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Adjust signature for on_disconnect [esphome#5009](https://github.com/esphome/esphome/pull/5009) by [@bdraco](https://github.com/bdraco) +- Log component long time message at warning level [esphome#5048](https://github.com/esphome/esphome/pull/5048) by [@jesserockz](https://github.com/jesserockz) +- Log start of i2c setup [esphome#5049](https://github.com/esphome/esphome/pull/5049) by [@jesserockz](https://github.com/jesserockz) +- Initial debug component support for rp2040 [esphome#5056](https://github.com/esphome/esphome/pull/5056) by [@HeMan](https://github.com/HeMan) +- Fix when idf component has broken symlinks [esphome#5058](https://github.com/esphome/esphome/pull/5058) by [@jesserockz](https://github.com/jesserockz) +- Some tests wasn't running (locally) [esphome#5050](https://github.com/esphome/esphome/pull/5050) by [@HeMan](https://github.com/HeMan) +- [ILI9xxx] Add ili9488_a (alternative gamma configuration for ILI9488) [esphome#5027](https://github.com/esphome/esphome/pull/5027) by [@lnicolas83](https://github.com/lnicolas83) +- [ili9xxx] Allow config of spi data rate. [esphome#4701](https://github.com/esphome/esphome/pull/4701) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Make scheduler debuging work with idf ≥ 5 [esphome#5052](https://github.com/esphome/esphome/pull/5052) by [@HeMan](https://github.com/HeMan) +- Adds 1.54" e-ink display (gdew0154m09) support to waveshare_epaper component [esphome#4939](https://github.com/esphome/esphome/pull/4939) by [@tobiasoort](https://github.com/tobiasoort) +- display: split `DisplayBuffer` and `Display` [esphome#5001](https://github.com/esphome/esphome/pull/5001) by [@ayufan](https://github.com/ayufan) +- Fixed ili9xxx_display update() method [esphome#5013](https://github.com/esphome/esphome/pull/5013) by [@nielsnl68](https://github.com/nielsnl68) +- [Ethernet] ksz8081rna support [esphome#4739](https://github.com/esphome/esphome/pull/4739) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Improve BME680 BSEC sensor device classes [esphome#4859](https://github.com/esphome/esphome/pull/4859) by [@trvrnrth](https://github.com/trvrnrth) +- Update RP2040 Aruino framwork and platform to latest [esphome#5025](https://github.com/esphome/esphome/pull/5025) by [@HeMan](https://github.com/HeMan) +- Allow pillow versions over 10 [esphome#5071](https://github.com/esphome/esphome/pull/5071) by [@HeMan](https://github.com/HeMan) +- display: Rename `display.DisplayBufferRef` to `display.DisplayRef` used by lambda [esphome#5002](https://github.com/esphome/esphome/pull/5002) by [@ayufan](https://github.com/ayufan) (breaking-change) +- Add Zio Ultrasonic Distance Sensor Component [esphome#5059](https://github.com/esphome/esphome/pull/5059) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add Alpha3 pump component [esphome#3787](https://github.com/esphome/esphome/pull/3787) by [@jan-hofmeier](https://github.com/jan-hofmeier) (new-integration) +- RTC implementation of pcf8563 [esphome#4998](https://github.com/esphome/esphome/pull/4998) by [@KoenBreeman](https://github.com/KoenBreeman) (new-integration) +- web server esp idf support [esphome#3500](https://github.com/esphome/esphome/pull/3500) by [@dentra](https://github.com/dentra) (new-integration) +- Add TT21100 touchscreen component [esphome#4793](https://github.com/esphome/esphome/pull/4793) by [@kroimon](https://github.com/kroimon) (new-integration) +- tuya_light: fix float->int conversion while setting color temperature [esphome#5067](https://github.com/esphome/esphome/pull/5067) by [@kswt](https://github.com/kswt) +- Fix typo in mpu6050.cpp [esphome#5086](https://github.com/esphome/esphome/pull/5086) by [@stefanklug](https://github.com/stefanklug) +- airthings_wave: Battery level reporting [esphome#4979](https://github.com/esphome/esphome/pull/4979) by [@kpfleming](https://github.com/kpfleming) +- Add support for Grove tb6612 fng [esphome#4797](https://github.com/esphome/esphome/pull/4797) by [@max246](https://github.com/max246) (new-integration) +- Add MCP2515 12MHz xtal support [esphome#5089](https://github.com/esphome/esphome/pull/5089) by [@clydebarrow](https://github.com/clydebarrow) +- Correct message for standard transmission. [esphome#5088](https://github.com/esphome/esphome/pull/5088) by [@clydebarrow](https://github.com/clydebarrow) +- Restrict pillow to versions before 10.0.0 [esphome#5090](https://github.com/esphome/esphome/pull/5090) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20230711.0 [esphome#5085](https://github.com/esphome/esphome/pull/5085) by [@jesserockz](https://github.com/jesserockz) +- added uart final validate data bits [esphome#5079](https://github.com/esphome/esphome/pull/5079) by [@dudanov](https://github.com/dudanov) +- Add support for ATM90E26 [esphome#4366](https://github.com/esphome/esphome/pull/4366) by [@danieltwagner](https://github.com/danieltwagner) (new-integration) +- Grove amend name [esphome#5093](https://github.com/esphome/esphome/pull/5093) by [@max246](https://github.com/max246) +- Fixing colon for tm1637 display if inverted set true [esphome#5072](https://github.com/esphome/esphome/pull/5072) by [@paveldn](https://github.com/paveldn) +- Fix use of `optional` [esphome#5091](https://github.com/esphome/esphome/pull/5091) by [@dudanov](https://github.com/dudanov) +- New 'Duty Time' sensor component [esphome#5069](https://github.com/esphome/esphome/pull/5069) by [@dudanov](https://github.com/dudanov) (new-integration) +- Fix PIDController::in_deadband() to give correct result when error is zero [esphome#5078](https://github.com/esphome/esphome/pull/5078) by [@lewissbaker](https://github.com/lewissbaker) +- Edit error message for pillow install to add version restrictions [esphome#5094](https://github.com/esphome/esphome/pull/5094) by [@jesserockz](https://github.com/jesserockz) +- Dont do mqtt ip lookup if `use_address` has ip address [esphome#5096](https://github.com/esphome/esphome/pull/5096) by [@jesserockz](https://github.com/jesserockz) +- ESP32 enable ADC2 when wifi is disabled [esphome#4381](https://github.com/esphome/esphome/pull/4381) by [@pciavald](https://github.com/pciavald) +- [Sprinkler] Resume fixes [esphome#5100](https://github.com/esphome/esphome/pull/5100) by [@hostcc](https://github.com/hostcc) +- Remove template switch restore_state [esphome#5106](https://github.com/esphome/esphome/pull/5106) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add timeout filter [esphome#5104](https://github.com/esphome/esphome/pull/5104) by [@clydebarrow](https://github.com/clydebarrow) +- P1 values for capacity tariff in Belgium [esphome#5081](https://github.com/esphome/esphome/pull/5081) by [@bwynants](https://github.com/bwynants) +- airthings_wave: Silence compiler warnings [esphome#5098](https://github.com/esphome/esphome/pull/5098) by [@kpfleming](https://github.com/kpfleming) +- Sigma delta fix [esphome#4911](https://github.com/esphome/esphome/pull/4911) by [@PlainTechEnthusiast](https://github.com/PlainTechEnthusiast) +- [LD2410] Remove baud_rate check [esphome#5112](https://github.com/esphome/esphome/pull/5112) by [@voed](https://github.com/voed) +- Fix silence detection flag on voice assistant [esphome#5120](https://github.com/esphome/esphome/pull/5120) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.8.0.mdx b/src/content/docs/changelog/2023.8.0.mdx new file mode 100644 index 0000000000..eab36a064d --- /dev/null +++ b/src/content/docs/changelog/2023.8.0.mdx @@ -0,0 +1,170 @@ +--- +description: "Changelog for ESPHome 2023.8.0." +title: "ESPHome 2023.8.0 - 16th August 2023" +pagefind: false +slug: "changelog/2023.8.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## LD2410 + +The LD2410 component has had a massive upgrade thanks to [@regevbr](https://github.com/regevbr)! +It now supports settings most if not all configuration parameters via `switches` / `numbers` and `selects` +and exposes more data via various `sensors`. +This includes breaking changes that mean the existing gate configuration options have been moved to the +`number` platform. + +{/* markdownlint-disable MD013 */} + +## Release 2023.8.1 - August 18 + +- Fix checksum calculation for sml [esphome#5271](https://github.com/esphome/esphome/pull/5271) by [@Mat931](https://github.com/Mat931) +- Change haier from AUTO to HEAT_COOL [esphome#5267](https://github.com/esphome/esphome/pull/5267) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +## Release 2023.8.2 - August 21 + +- Move libcairo to all architectures in docker [esphome#5276](https://github.com/esphome/esphome/pull/5276) by [@jesserockz](https://github.com/jesserockz) +- Resolve offline ESPs in dashboard when using ESPHOME_DASHBOARD_USE_PING=true [esphome#5281](https://github.com/esphome/esphome/pull/5281) by [@mwolter805](https://github.com/mwolter805) +- Align SPI data rates in C++ code with Python [esphome#5284](https://github.com/esphome/esphome/pull/5284) by [@clydebarrow](https://github.com/clydebarrow) +- Change htu21d sensors from required to optional [esphome#5285](https://github.com/esphome/esphome/pull/5285) by [@jesserockz](https://github.com/jesserockz) +- Reserve keyword "clock" [esphome#5279](https://github.com/esphome/esphome/pull/5279) by [@clydebarrow](https://github.com/clydebarrow) + +## Release 2023.8.3 - September 6 + +- Introduce cv.temperature_delta and fix problematic thermostat configuration behavior [esphome#5297](https://github.com/esphome/esphome/pull/5297) by [@sebastianrasor](https://github.com/sebastianrasor) +- fix to PR # 3887 MQTT connection not using discovery: false [esphome#5275](https://github.com/esphome/esphome/pull/5275) by [@luka6000](https://github.com/luka6000) +- Attempt to fix secret blurring [esphome#5326](https://github.com/esphome/esphome/pull/5326) by [@jesserockz](https://github.com/jesserockz) +- Bugfix: disable channels after IO if multiple tca9548a I2C multiplexers are configured [esphome#5317](https://github.com/esphome/esphome/pull/5317) by [@kahrendt](https://github.com/kahrendt) +- Fix checksum calculation for pipsolar [esphome#5299](https://github.com/esphome/esphome/pull/5299) by [@Mat931](https://github.com/Mat931) + +## Full list of changes + +### New Components + +- Add support for a01nyub [esphome#4863](https://github.com/esphome/esphome/pull/4863) by [@MrSuicideParrot](https://github.com/MrSuicideParrot) (new-integration) +- Add KMeterISO component. [esphome#5170](https://github.com/esphome/esphome/pull/5170) by [@Rudd-O](https://github.com/Rudd-O) (new-integration) +- New component: Add support for bmp581 pressure and temperature sensors [esphome#4657](https://github.com/esphome/esphome/pull/4657) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- New PM sensor Panasonic SN-GCJA5 [esphome#4988](https://github.com/esphome/esphome/pull/4988) by [@gcormier](https://github.com/gcormier) (new-integration) +- Add configuration flow abilites to the ld2410 component [esphome#4434](https://github.com/esphome/esphome/pull/4434) by [@regevbr](https://github.com/regevbr) (new-integration) (notable-change) (breaking-change) + +### Breaking Changes + +- Coolix IR protocol improvements [esphome#5105](https://github.com/esphome/esphome/pull/5105) by [@dudanov](https://github.com/dudanov) (breaking-change) +- Speaker return bytes written and do not wait for queue [esphome#5182](https://github.com/esphome/esphome/pull/5182) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Change device name in MQTT discovery messages to friendly names [esphome#5205](https://github.com/esphome/esphome/pull/5205) by [@pidpawel](https://github.com/pidpawel) (breaking-change) +- Add configuration flow abilites to the ld2410 component [esphome#4434](https://github.com/esphome/esphome/pull/4434) by [@regevbr](https://github.com/regevbr) (new-integration) (notable-change) (breaking-change) + +### Beta Changes + +- Read string of bool env and match against well known values [esphome#5232](https://github.com/esphome/esphome/pull/5232) by [@jesserockz](https://github.com/jesserockz) +- fix aeha data template [esphome#5231](https://github.com/esphome/esphome/pull/5231) by [@ssieb](https://github.com/ssieb) +- Expose start to speaker interface [esphome#5228](https://github.com/esphome/esphome/pull/5228) by [@jesserockz](https://github.com/jesserockz) +- New features added for Haier integration [esphome#5196](https://github.com/esphome/esphome/pull/5196) by [@paveldn](https://github.com/paveldn) +- pca9554 cache reads [esphome#5137](https://github.com/esphome/esphome/pull/5137) by [@hwstar](https://github.com/hwstar) +- fix midea: undo approved PR#4053 [esphome#5233](https://github.com/esphome/esphome/pull/5233) by [@dudanov](https://github.com/dudanov) +- Fixing smartair2 protocol implementation if no Wi-Fi [esphome#5238](https://github.com/esphome/esphome/pull/5238) by [@paveldn](https://github.com/paveldn) +- tuya: add time sync callback only once to prevent memleak [esphome#5234](https://github.com/esphome/esphome/pull/5234) by [@afflux](https://github.com/afflux) +- Fix duplicate tuya time warning [esphome#5243](https://github.com/esphome/esphome/pull/5243) by [@jesserockz](https://github.com/jesserockz) +- Change XL9535 `setup_priority` to IO [esphome#5246](https://github.com/esphome/esphome/pull/5246) by [@mreditor97](https://github.com/mreditor97) +- rmt_base additional minor changes [esphome#5245](https://github.com/esphome/esphome/pull/5245) by [@dudanov](https://github.com/dudanov) +- Fix 24 bit signed integer parsing in sml parser [esphome#5250](https://github.com/esphome/esphome/pull/5250) by [@mulder-fbi](https://github.com/mulder-fbi) +- Fix IDFI2CBus::writev ignoring stop parameter [esphome#4840](https://github.com/esphome/esphome/pull/4840) by [@CarsonF](https://github.com/CarsonF) +- Add configuration flow abilites to the ld2410 component [esphome#4434](https://github.com/esphome/esphome/pull/4434) by [@regevbr](https://github.com/regevbr) (new-integration) (notable-change) (breaking-change) + +### Notable Changes + +- Change MQTT client for ESP32 Arduino [esphome#5157](https://github.com/esphome/esphome/pull/5157) by [@HeMan](https://github.com/HeMan) (notable-change) +- Add configuration flow abilites to the ld2410 component [esphome#4434](https://github.com/esphome/esphome/pull/4434) by [@regevbr](https://github.com/regevbr) (new-integration) (notable-change) (breaking-change) + +### All changes + +- Mk2 to prepare color.h for idf ≥ 5 [esphome#5070](https://github.com/esphome/esphome/pull/5070) by [@HeMan](https://github.com/HeMan) +- display: Add helper methods to `Display::clip` and `Display::clamp_x/y_` [esphome#5003](https://github.com/esphome/esphome/pull/5003) by [@ayufan](https://github.com/ayufan) +- Mark repo as safe directory to git config [esphome#5102](https://github.com/esphome/esphome/pull/5102) by [@davet2001](https://github.com/davet2001) +- Bump click from 8.1.3 to 8.1.5 [esphome#5099](https://github.com/esphome/esphome/pull/5099) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyyaml from 6.0 to 6.0.1 [esphome#5117](https://github.com/esphome/esphome/pull/5117) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- ignore components folder in root [esphome#5130](https://github.com/esphome/esphome/pull/5130) by [@jesserockz](https://github.com/jesserockz) +- Add size getter to CallbackManager [esphome#5129](https://github.com/esphome/esphome/pull/5129) by [@jesserockz](https://github.com/jesserockz) +- Make docker use pip installed pillow [esphome#5074](https://github.com/esphome/esphome/pull/5074) by [@HeMan](https://github.com/HeMan) +- Change datatype in e131 addressable light [esphome#5127](https://github.com/esphome/esphome/pull/5127) by [@HeMan](https://github.com/HeMan) +- Streamer mode [esphome#5119](https://github.com/esphome/esphome/pull/5119) by [@grahambrown11](https://github.com/grahambrown11) +- Version bump for ESP32 IDF and Arduino [esphome#5035](https://github.com/esphome/esphome/pull/5035) by [@HeMan](https://github.com/HeMan) +- Synchronise Device Classes from Home Assistant [esphome#5136](https://github.com/esphome/esphome/pull/5136) by [@esphomebot](https://github.com/esphomebot) +- Update known boards to 5.4.0 [esphome#5134](https://github.com/esphome/esphome/pull/5134) by [@jesserockz](https://github.com/jesserockz) +- Init colorama in ESPHome main [esphome#5111](https://github.com/esphome/esphome/pull/5111) by [@kuba2k2](https://github.com/kuba2k2) +- Coolix IR protocol improvements [esphome#5105](https://github.com/esphome/esphome/pull/5105) by [@dudanov](https://github.com/dudanov) (breaking-change) +- Allow esp32 idf components to specify submodules and specific components [esphome#5128](https://github.com/esphome/esphome/pull/5128) by [@jesserockz](https://github.com/jesserockz) +- Synchronise Device Classes from Home Assistant [esphome#5147](https://github.com/esphome/esphome/pull/5147) by [@esphomebot](https://github.com/esphomebot) +- Prepare some components for IDF ≥ 5 [esphome#5061](https://github.com/esphome/esphome/pull/5061) by [@HeMan](https://github.com/HeMan) +- Bump clang-tidy from 11 to 14 [esphome#5160](https://github.com/esphome/esphome/pull/5160) by [@dudanov](https://github.com/dudanov) +- climate triggers Climate and ClimateCall references [esphome#5028](https://github.com/esphome/esphome/pull/5028) by [@dudanov](https://github.com/dudanov) +- remote_base changes [esphome#5124](https://github.com/esphome/esphome/pull/5124) by [@dudanov](https://github.com/dudanov) +- Add 'map_linear' and 'clamp' sensor filters [esphome#5040](https://github.com/esphome/esphome/pull/5040) by [@Mat931](https://github.com/Mat931) +- Adding Inkplate 6 v2 model variant [esphome#5165](https://github.com/esphome/esphome/pull/5165) by [@mullerdavid](https://github.com/mullerdavid) +- duty_time: fix build without binary_sensor. Parented in automations. [esphome#5156](https://github.com/esphome/esphome/pull/5156) by [@dudanov](https://github.com/dudanov) +- Add standardized CRC helper functions [esphome#4798](https://github.com/esphome/esphome/pull/4798) by [@Mat931](https://github.com/Mat931) +- Enable IPv6 for ESP32 Arduino, wifi and ethernet [esphome#4865](https://github.com/esphome/esphome/pull/4865) by [@HeMan](https://github.com/HeMan) +- Bump zeroconf from 0.69.0 to 0.71.4 [esphome#5148](https://github.com/esphome/esphome/pull/5148) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.3.0 to 23.7.0 [esphome#5126](https://github.com/esphome/esphome/pull/5126) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.17.4 to 2.17.5 [esphome#5172](https://github.com/esphome/esphome/pull/5172) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.7.0 to 3.9.0 [esphome#5083](https://github.com/esphome/esphome/pull/5083) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Vertical and horizontal airflow actions fix for Haier climate [esphome#5164](https://github.com/esphome/esphome/pull/5164) by [@paveldn](https://github.com/paveldn) +- Microphone add is_stopped [esphome#5183](https://github.com/esphome/esphome/pull/5183) by [@jesserockz](https://github.com/jesserockz) +- Add get_board function to esp32 module [esphome#5184](https://github.com/esphome/esphome/pull/5184) by [@jesserockz](https://github.com/jesserockz) +- Speaker return bytes written and do not wait for queue [esphome#5182](https://github.com/esphome/esphome/pull/5182) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Update components "if x in config" [esphome#5181](https://github.com/esphome/esphome/pull/5181) by [@jesserockz](https://github.com/jesserockz) +- Bump click from 8.1.5 to 8.1.6 [esphome#5179](https://github.com/esphome/esphome/pull/5179) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- PWM Output on RP2040 for high frequencies [esphome#5204](https://github.com/esphome/esphome/pull/5204) by [@matemaciek](https://github.com/matemaciek) +- Fix some configs after #5181 [esphome#5209](https://github.com/esphome/esphome/pull/5209) by [@jesserockz](https://github.com/jesserockz) +- Improved compensation sgp30 [esphome#5208](https://github.com/esphome/esphome/pull/5208) by [@arno1801](https://github.com/arno1801) +- Add support for a01nyub [esphome#4863](https://github.com/esphome/esphome/pull/4863) by [@MrSuicideParrot](https://github.com/MrSuicideParrot) (new-integration) +- Change device name in MQTT discovery messages to friendly names [esphome#5205](https://github.com/esphome/esphome/pull/5205) by [@pidpawel](https://github.com/pidpawel) (breaking-change) +- Add ESP32-S2/S3 capacitive touch support [esphome#5116](https://github.com/esphome/esphome/pull/5116) by [@kbx81](https://github.com/kbx81) +- Bump zeroconf from 0.71.4 to 0.74.0 [esphome#5199](https://github.com/esphome/esphome/pull/5199) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Implemented Waveshare 7.5in B V3 [esphome#5210](https://github.com/esphome/esphome/pull/5210) by [@lucasprim](https://github.com/lucasprim) +- Refactor `pulse_meter` to better handle higher frequencies [esphome#4231](https://github.com/esphome/esphome/pull/4231) by [@TrentHouliston](https://github.com/TrentHouliston) +- Change MQTT client for ESP32 Arduino [esphome#5157](https://github.com/esphome/esphome/pull/5157) by [@HeMan](https://github.com/HeMan) (notable-change) +- Add read interface to microphone [esphome#5131](https://github.com/esphome/esphome/pull/5131) by [@jesserockz](https://github.com/jesserockz) +- i2c: fix build on ESP-IDF ≥ 5.1 [esphome#5200](https://github.com/esphome/esphome/pull/5200) by [@stintel](https://github.com/stintel) +- Add socket define for rp2040 dev [esphome#4968](https://github.com/esphome/esphome/pull/4968) by [@jesserockz](https://github.com/jesserockz) +- core: read ESP32 MAC address from eFuse if IEEE802.15.4 is supported [esphome#5176](https://github.com/esphome/esphome/pull/5176) by [@stintel](https://github.com/stintel) +- esp32_ble_beacon: enable CONFIG_BT_BLE_42_FEATURES_SUPPORTED [esphome#5211](https://github.com/esphome/esphome/pull/5211) by [@stintel](https://github.com/stintel) +- Bump pytest-asyncio from 0.21.0 to 0.21.1 [esphome#5187](https://github.com/esphome/esphome/pull/5187) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- ledc: check SOC_LEDC_SUPPORT_APB_CLOCK [esphome#5212](https://github.com/esphome/esphome/pull/5212) by [@stintel](https://github.com/stintel) +- Add arm night to alarm control panel [esphome#5186](https://github.com/esphome/esphome/pull/5186) by [@primeroz](https://github.com/primeroz) +- Bump pyupgrade from 3.9.0 to 3.10.1 [esphome#5189](https://github.com/esphome/esphome/pull/5189) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add KMeterISO component. [esphome#5170](https://github.com/esphome/esphome/pull/5170) by [@Rudd-O](https://github.com/Rudd-O) (new-integration) +- Bump platformio from 6.1.7 to 6.1.9 [esphome#5066](https://github.com/esphome/esphome/pull/5066) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- New component: Add support for bmp581 pressure and temperature sensors [esphome#4657](https://github.com/esphome/esphome/pull/4657) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- New PM sensor Panasonic SN-GCJA5 [esphome#4988](https://github.com/esphome/esphome/pull/4988) by [@gcormier](https://github.com/gcormier) (new-integration) +- Daly BMS improvements [esphome#3388](https://github.com/esphome/esphome/pull/3388) by [@matthias882](https://github.com/matthias882) +- Add missing `on_(arming|pending|armed_home|armed_night|armed_away|disarmed)` triggers to alarm_control_panel [esphome#5219](https://github.com/esphome/esphome/pull/5219) by [@primeroz](https://github.com/primeroz) +- add value option to timeout filter [esphome#5222](https://github.com/esphome/esphome/pull/5222) by [@ssieb](https://github.com/ssieb) +- Tweak Color init because IDF 5+ [esphome#5221](https://github.com/esphome/esphome/pull/5221) by [@kbx81](https://github.com/kbx81) +- Read string of bool env and match against well known values [esphome#5232](https://github.com/esphome/esphome/pull/5232) by [@jesserockz](https://github.com/jesserockz) +- fix aeha data template [esphome#5231](https://github.com/esphome/esphome/pull/5231) by [@ssieb](https://github.com/ssieb) +- Expose start to speaker interface [esphome#5228](https://github.com/esphome/esphome/pull/5228) by [@jesserockz](https://github.com/jesserockz) +- New features added for Haier integration [esphome#5196](https://github.com/esphome/esphome/pull/5196) by [@paveldn](https://github.com/paveldn) +- pca9554 cache reads [esphome#5137](https://github.com/esphome/esphome/pull/5137) by [@hwstar](https://github.com/hwstar) +- fix midea: undo approved PR#4053 [esphome#5233](https://github.com/esphome/esphome/pull/5233) by [@dudanov](https://github.com/dudanov) +- Fixing smartair2 protocol implementation if no Wi-Fi [esphome#5238](https://github.com/esphome/esphome/pull/5238) by [@paveldn](https://github.com/paveldn) +- tuya: add time sync callback only once to prevent memleak [esphome#5234](https://github.com/esphome/esphome/pull/5234) by [@afflux](https://github.com/afflux) +- Fix duplicate tuya time warning [esphome#5243](https://github.com/esphome/esphome/pull/5243) by [@jesserockz](https://github.com/jesserockz) +- Change XL9535 `setup_priority` to IO [esphome#5246](https://github.com/esphome/esphome/pull/5246) by [@mreditor97](https://github.com/mreditor97) +- rmt_base additional minor changes [esphome#5245](https://github.com/esphome/esphome/pull/5245) by [@dudanov](https://github.com/dudanov) +- Fix 24 bit signed integer parsing in sml parser [esphome#5250](https://github.com/esphome/esphome/pull/5250) by [@mulder-fbi](https://github.com/mulder-fbi) +- Fix IDFI2CBus::writev ignoring stop parameter [esphome#4840](https://github.com/esphome/esphome/pull/4840) by [@CarsonF](https://github.com/CarsonF) +- Add configuration flow abilites to the ld2410 component [esphome#4434](https://github.com/esphome/esphome/pull/4434) by [@regevbr](https://github.com/regevbr) (new-integration) (notable-change) (breaking-change) +- Add `libfreetype-dev` Debian package for armv7 Docker builds [esphome#5262](https://github.com/esphome/esphome/pull/5262) by [@pierlon](https://github.com/pierlon) +- Add delay before enabling ipv6 [esphome#5256](https://github.com/esphome/esphome/pull/5256) by [@HeMan](https://github.com/HeMan) +- Bump zeroconf from 0.74.0 to 0.80.0 [esphome#5260](https://github.com/esphome/esphome/pull/5260) by [@dependabot[bot]](https://github.com/dependabot[bot]) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2023.9.0.mdx b/src/content/docs/changelog/2023.9.0.mdx new file mode 100644 index 0000000000..df45d9af32 --- /dev/null +++ b/src/content/docs/changelog/2023.9.0.mdx @@ -0,0 +1,229 @@ +--- +description: "Changelog for ESPHome 2023.9.0." +title: "ESPHome 2023.9.0 - 27th September 2023" +pagefind: false +slug: "changelog/2023.9.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## LibreTiny + +[LibreTiny](/components/libretiny/) is a platform for the RTL87xx and BK72xx family of chips. ESPHome +leverages this platform and brings the powerful yet simple YAML configuration to these chips. + +It has been months in the making, and many back and forwards with [@kuba2k2](https://github.com/kuba2k2) +(and all of the contributors to LibreTiny), but we finally got there and merged it in. + +## Wireguard + +[WireGuard](/components/wireguard/) is a new component that allows you to connect to a WireGuard® Peer. + +## LED Strips + +Following on from the previously added [Esp32 Rmt Led Strip](/components/light/esp32_rmt_led_strip/), we now have +[SPI LED Strips](/components/light/spi_led_strip/). These are replacement components for +[Neopixelbus](/components/light/neopixelbus/) and [Fastled](/components/light/fastled/) that +do not rely on the Arduino framework. + +{/* markdownlint-disable MD013 */} + +## Release 2023.9.1 - September 28 + +- Tuya Number Scaling [esphome#5108](https://github.com/esphome/esphome/pull/5108) by [@InvncibiltyCloak](https://github.com/InvncibiltyCloak) +- Migrate dashboard json files to /data folder instead of wiping out [esphome#5441](https://github.com/esphome/esphome/pull/5441) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.9.2 - October 2 + +- SPI fixes for buggy components [esphome#5446](https://github.com/esphome/esphome/pull/5446) by [@clydebarrow](https://github.com/clydebarrow) +- Fix an Issue with IR Remote Climate and Whirlpool protocol toggle [esphome#5447](https://github.com/esphome/esphome/pull/5447) by [@the-mentor](https://github.com/the-mentor) +- Fix SPI support for second bus on 2023.9.1 [esphome#5456](https://github.com/esphome/esphome/pull/5456) by [@angelnu](https://github.com/angelnu) +- Ensure esphome directory exists on addon startup [esphome#5464](https://github.com/esphome/esphome/pull/5464) by [@jesserockz](https://github.com/jesserockz) + +## Release 2023.9.3 - October 3 + +- Bump zeroconf from 0.112.0 to 0.115.0 [esphome#5432](https://github.com/esphome/esphome/pull/5432) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- add pin config for denky_d4 [esphome#5471](https://github.com/esphome/esphome/pull/5471) by [@alucryd](https://github.com/alucryd) +- Support RP2040 hardware SPI [esphome#5466](https://github.com/esphome/esphome/pull/5466) by [@clydebarrow](https://github.com/clydebarrow) +- Bump zeroconf from 0.115.0 to 0.115.1 [esphome#5470](https://github.com/esphome/esphome/pull/5470) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Sleep mode fix for BP5758D driver [esphome#5461](https://github.com/esphome/esphome/pull/5461) by [@dwildstr](https://github.com/dwildstr) +- Tuya Number: split "multiply" to a separate option [esphome#5458](https://github.com/esphome/esphome/pull/5458) by [@paravoid](https://github.com/paravoid) + +## Breaking Changes + +### Home Assistant Add-on + +The `/config/esphome/.esphome` folder has been removed and replaced with `/data` when running ESPHome as a Home Assistant add-on. +This was done because it is exactly what the add-on `/data` folder was made for and there were many files in the `.esphome` folder +that were making the Home Assistant Backup larger for no reason at all. All files in there are generated or sourced from online based +on your configurations files which have not been touched. + +> [!NOTE] +> 2023.9.1 makes a further small change that moves the `json` files used by the dashboard into the new `/data` folder. +> If you had already updated to 2023.9.0 though, the files would have already been removed and they will be re-generated +> next time you install each device. + +### Enum device class + +The `enum` device class was removed from ESPHome to keep in sync with Home Assistant. The class was already not able to be used by +any of the built in components and only potentially used by `external_components`. + +## Full list of changes + +### New Components + +- Add pmwcs3 capacitive soil moisture & temperature sensor component [esphome#4624](https://github.com/esphome/esphome/pull/4624) by [@SeByDocKy](https://github.com/SeByDocKy) (new-integration) +- Support for LibreTiny platform (RTL8710, BK7231 & other modules) [esphome#3509](https://github.com/esphome/esphome/pull/3509) by [@kuba2k2](https://github.com/kuba2k2) (new-integration) +- Adding DFRobot Ozone Sensor Support (sen0321) [esphome#4782](https://github.com/esphome/esphome/pull/4782) by [@notjj](https://github.com/notjj) (new-integration) +- Integration LightwaveRF switches [esphome#4812](https://github.com/esphome/esphome/pull/4812) by [@max246](https://github.com/max246) (new-integration) +- Refactor SPI code; Add ESP-IDF hardware support [esphome#5311](https://github.com/esphome/esphome/pull/5311) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Add BMI160 support [esphome#5143](https://github.com/esphome/esphome/pull/5143) by [@flaviut](https://github.com/flaviut) (new-integration) +- Native SPI RGB LED component [esphome#5288](https://github.com/esphome/esphome/pull/5288) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Wireguard component [esphome#4256](https://github.com/esphome/esphome/pull/4256) by [@lhoracek](https://github.com/lhoracek) (new-integration) + +### Breaking Changes + +- Synchronise Device Classes from Home Assistant [esphome#5328](https://github.com/esphome/esphome/pull/5328) by [@esphomebot](https://github.com/esphomebot) (breaking-change) +- Use /data directory for .esphome folder when running as HA add-on [esphome#5374](https://github.com/esphome/esphome/pull/5374) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- Add patch to apt install [esphome#5389](https://github.com/esphome/esphome/pull/5389) by [@synesthesiam](https://github.com/synesthesiam) +- Fix Waveshare 7.5v2 epaper screens are always powered on [esphome#5283](https://github.com/esphome/esphome/pull/5283) by [@phoenixswiss](https://github.com/phoenixswiss) +- Update radon_eye_listener.cpp [esphome#5401](https://github.com/esphome/esphome/pull/5401) by [@rmmacias](https://github.com/rmmacias) +- Add shelly-dimmer-stm32 51.7 to known versions [esphome#5400](https://github.com/esphome/esphome/pull/5400) by [@trvrnrth](https://github.com/trvrnrth) +- Add E-Trailer Gaslevel support to Mopeka Std Check [esphome#5397](https://github.com/esphome/esphome/pull/5397) by [@Phhere](https://github.com/Phhere) +- fix disabled wifi power on 8266 [esphome#5409](https://github.com/esphome/esphome/pull/5409) by [@ssieb](https://github.com/ssieb) +- fix handling of web server version [esphome#5405](https://github.com/esphome/esphome/pull/5405) by [@ssieb](https://github.com/ssieb) +- Climate preset fix [esphome#5407](https://github.com/esphome/esphome/pull/5407) by [@Jorre05](https://github.com/Jorre05) +- Remove Wi-Fi dependency from Midea component [esphome#5394](https://github.com/esphome/esphome/pull/5394) by [@AnthonyMaiorani](https://github.com/AnthonyMaiorani) +- http_request: Cleanups and safety improvements [esphome#5360](https://github.com/esphome/esphome/pull/5360) by [@kpfleming](https://github.com/kpfleming) +- Make the pulse meter timeout on startup when no pulses are received [esphome#5388](https://github.com/esphome/esphome/pull/5388) by [@TrentHouliston](https://github.com/TrentHouliston) +- Wizard: fix colored text in input prompts [esphome#5313](https://github.com/esphome/esphome/pull/5313) by [@kuba2k2](https://github.com/kuba2k2) +- support keypads with pulldowns [esphome#5404](https://github.com/esphome/esphome/pull/5404) by [@ssieb](https://github.com/ssieb) +- Fix SPI inverted clock on ESP8266 [esphome#5416](https://github.com/esphome/esphome/pull/5416) by [@clydebarrow](https://github.com/clydebarrow) +- [RP2040W] Fix WiFi bootloop upon LibreTiny support [esphome#5414](https://github.com/esphome/esphome/pull/5414) by [@hostcc](https://github.com/hostcc) +- dallas: limit addresses to 64 bits [esphome#5413](https://github.com/esphome/esphome/pull/5413) by [@oddstr13](https://github.com/oddstr13) +- Bump zeroconf from 0.108.0 to 0.112.0 [esphome#5392](https://github.com/esphome/esphome/pull/5392) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- LibreTiny: enable MQTT, bump to v1.4.1 [esphome#5419](https://github.com/esphome/esphome/pull/5419) by [@kuba2k2](https://github.com/kuba2k2) +- Wireguard keepalive remove uint16 type [esphome#5430](https://github.com/esphome/esphome/pull/5430) by [@glmnet](https://github.com/glmnet) +- Fix #4896 and #4903 [esphome#5433](https://github.com/esphome/esphome/pull/5433) by [@clydebarrow](https://github.com/clydebarrow) + +### All changes + +- Updated my username in Code Owners [esphome#5247](https://github.com/esphome/esphome/pull/5247) by [@mreditor97](https://github.com/mreditor97) +- remote_base: change dumpers log level [esphome#5253](https://github.com/esphome/esphome/pull/5253) by [@dudanov](https://github.com/dudanov) +- Add `libfreetype-dev` Debian package for armv7 Docker builds [esphome#5262](https://github.com/esphome/esphome/pull/5262) by [@pierlon](https://github.com/pierlon) +- Add delay before enabling ipv6 [esphome#5256](https://github.com/esphome/esphome/pull/5256) by [@HeMan](https://github.com/HeMan) +- Bump zeroconf from 0.74.0 to 0.80.0 [esphome#5260](https://github.com/esphome/esphome/pull/5260) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump click from 8.1.6 to 8.1.7 [esphome#5272](https://github.com/esphome/esphome/pull/5272) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Remove support for ESP-IDF version < 4 [esphome#5261](https://github.com/esphome/esphome/pull/5261) by [@HeMan](https://github.com/HeMan) +- Add pmwcs3 capacitive soil moisture & temperature sensor component [esphome#4624](https://github.com/esphome/esphome/pull/4624) by [@SeByDocKy](https://github.com/SeByDocKy) (new-integration) +- Add manufacturer data config to BLE server [esphome#5251](https://github.com/esphome/esphome/pull/5251) by [@clydebarrow](https://github.com/clydebarrow) +- Add support for `ESP32-{S2,S3,C3}` to debug component [esphome#4731](https://github.com/esphome/esphome/pull/4731) by [@jayme-github](https://github.com/jayme-github) +- Support for ESP32-C2 & ESP32-C6 [esphome#4377](https://github.com/esphome/esphome/pull/4377) by [@vidplace7](https://github.com/vidplace7) +- Bump arduino-heatpumpir to v1.0.23 [esphome#5269](https://github.com/esphome/esphome/pull/5269) by [@rob-deutsch](https://github.com/rob-deutsch) +- Fix equality check when setting current-based cover position [esphome#5167](https://github.com/esphome/esphome/pull/5167) by [@kroimon](https://github.com/kroimon) +- Bump platformio from 6.1.9 to 6.1.10 [esphome#5237](https://github.com/esphome/esphome/pull/5237) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add Invert method for SSD1306 [esphome#5292](https://github.com/esphome/esphome/pull/5292) by [@max246](https://github.com/max246) +- Update PSRAM config params for IDF4+ [esphome#5298](https://github.com/esphome/esphome/pull/5298) by [@kbx81](https://github.com/kbx81) +- Fix legacy zeroconf record update method [esphome#5294](https://github.com/esphome/esphome/pull/5294) by [@bdraco](https://github.com/bdraco) +- Bump zeroconf from 0.80.0 to 0.86.0 [esphome#5308](https://github.com/esphome/esphome/pull/5308) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add PSRAM mode and speed config [esphome#5312](https://github.com/esphome/esphome/pull/5312) by [@kbx81](https://github.com/kbx81) +- Add extra SLPOUT for waking up some ST7789 chips [esphome#5319](https://github.com/esphome/esphome/pull/5319) by [@clydebarrow](https://github.com/clydebarrow) +- 7789 controller fixes take 2 [esphome#5320](https://github.com/esphome/esphome/pull/5320) by [@clydebarrow](https://github.com/clydebarrow) +- Bump Arduino Pico to 3.4.0 [esphome#5321](https://github.com/esphome/esphome/pull/5321) by [@HeMan](https://github.com/HeMan) +- Use gzip compression for the web server component's static resources [esphome#5291](https://github.com/esphome/esphome/pull/5291) by [@EternityForest](https://github.com/EternityForest) +- Bump zeroconf from 0.86.0 to 0.88.0 [esphome#5315](https://github.com/esphome/esphome/pull/5315) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Adding heating coil and fan icons, enum device_class [esphome#5325](https://github.com/esphome/esphome/pull/5325) by [@barndawgie](https://github.com/barndawgie) +- Add dashboard API to get firmware binaries [esphome#4675](https://github.com/esphome/esphome/pull/4675) by [@kuba2k2](https://github.com/kuba2k2) +- Make uart error message go away [esphome#5329](https://github.com/esphome/esphome/pull/5329) by [@clydebarrow](https://github.com/clydebarrow) +- add heating functionality to SI7021 [esphome#4828](https://github.com/esphome/esphome/pull/4828) by [@max246](https://github.com/max246) +- Bump esphome-dashboard to 20230904.0 [esphome#5339](https://github.com/esphome/esphome/pull/5339) by [@jesserockz](https://github.com/jesserockz) +- Added Handling for Nack "file not found" [esphome#5338](https://github.com/esphome/esphome/pull/5338) by [@croessi](https://github.com/croessi) +- Prepare api and time for ESP-IDF ≥ 5 [esphome#5332](https://github.com/esphome/esphome/pull/5332) by [@HeMan](https://github.com/HeMan) +- Tweak Improv serial to build in IDF 5 [esphome#5331](https://github.com/esphome/esphome/pull/5331) by [@kbx81](https://github.com/kbx81) +- Support for LibreTiny platform (RTL8710, BK7231 & other modules) [esphome#3509](https://github.com/esphome/esphome/pull/3509) by [@kuba2k2](https://github.com/kuba2k2) (new-integration) +- Extend ESP32 CAN bit rates /bus speed support [esphome#5280](https://github.com/esphome/esphome/pull/5280) by [@mkaiser](https://github.com/mkaiser) +- Debug component: add free PSRAM sensor [esphome#5334](https://github.com/esphome/esphome/pull/5334) by [@kahrendt](https://github.com/kahrendt) +- libretiny: fix uart_port framework config [esphome#5343](https://github.com/esphome/esphome/pull/5343) by [@jesserockz](https://github.com/jesserockz) +- Bump actions/checkout from 3 to 4 [esphome#5341](https://github.com/esphome/esphome/pull/5341) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add Lilygo T-Embed to st7789v display config. [esphome#5337](https://github.com/esphome/esphome/pull/5337) by [@clydebarrow](https://github.com/clydebarrow) +- Disable IPv6 when config explicitly says false [esphome#5310](https://github.com/esphome/esphome/pull/5310) by [@HeMan](https://github.com/HeMan) +- Add defines.h to ethernet_component.h for ENABLE_IPV6 [esphome#5344](https://github.com/esphome/esphome/pull/5344) by [@kbx81](https://github.com/kbx81) +- Synchronise Device Classes from Home Assistant [esphome#5328](https://github.com/esphome/esphome/pull/5328) by [@esphomebot](https://github.com/esphomebot) (breaking-change) +- Bump pytest from 7.4.0 to 7.4.1 [esphome#5342](https://github.com/esphome/esphome/pull/5342) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fixed default temperature step values for haier climate [esphome#5330](https://github.com/esphome/esphome/pull/5330) by [@paveldn](https://github.com/paveldn) +- Add debug component to all tests [esphome#5333](https://github.com/esphome/esphome/pull/5333) by [@HeMan](https://github.com/HeMan) +- Support MaxBotix XL in addition to HRXL [esphome#4510](https://github.com/esphome/esphome/pull/4510) by [@notjj](https://github.com/notjj) +- Adding DFRobot Ozone Sensor Support (sen0321) [esphome#4782](https://github.com/esphome/esphome/pull/4782) by [@notjj](https://github.com/notjj) (new-integration) +- mdns: bump IDF mdns component to 1.2.0 [esphome#5217](https://github.com/esphome/esphome/pull/5217) by [@stintel](https://github.com/stintel) +- Integration LightwaveRF switches [esphome#4812](https://github.com/esphome/esphome/pull/4812) by [@max246](https://github.com/max246) (new-integration) +- Bump flake8 from 6.0.0 to 6.1.0 [esphome#5171](https://github.com/esphome/esphome/pull/5171) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tornado from 6.3.2 to 6.3.3 [esphome#5236](https://github.com/esphome/esphome/pull/5236) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump platformio from 6.1.10 to 6.1.11 [esphome#5323](https://github.com/esphome/esphome/pull/5323) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Only run ci-docker when ci-docker workflow changes [esphome#5347](https://github.com/esphome/esphome/pull/5347) by [@jesserockz](https://github.com/jesserockz) +- esp32: Extra build customization [esphome#5322](https://github.com/esphome/esphome/pull/5322) by [@jesserockz](https://github.com/jesserockz) +- Allow upload command to flash file via serial [esphome#5274](https://github.com/esphome/esphome/pull/5274) by [@jesserockz](https://github.com/jesserockz) +- Allow "--device SERIAL" on cli to flash only via serial [esphome#5351](https://github.com/esphome/esphome/pull/5351) by [@jesserockz](https://github.com/jesserockz) +- Fix PN532 for IDF 5 and ultralight enhancements [esphome#5352](https://github.com/esphome/esphome/pull/5352) by [@kbx81](https://github.com/kbx81) +- Fix cpu_ll_get_cycle_count() deprecated warning [esphome#5353](https://github.com/esphome/esphome/pull/5353) by [@kbx81](https://github.com/kbx81) +- Refactor SPI code; Add ESP-IDF hardware support [esphome#5311](https://github.com/esphome/esphome/pull/5311) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Bump actions/cache from 3.3.1 to 3.3.2 [esphome#5367](https://github.com/esphome/esphome/pull/5367) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.88.0 to 0.102.0 [esphome#5368](https://github.com/esphome/esphome/pull/5368) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix repeat.count = 0 case [esphome#5364](https://github.com/esphome/esphome/pull/5364) by [@Xmister](https://github.com/Xmister) +- Fix dashboard download for ESP32 variants [esphome#5355](https://github.com/esphome/esphome/pull/5355) by [@kuba2k2](https://github.com/kuba2k2) +- Bump pytest from 7.4.1 to 7.4.2 [esphome#5357](https://github.com/esphome/esphome/pull/5357) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [ADC] Support measuring VCC on Raspberry Pico (W) [esphome#5335](https://github.com/esphome/esphome/pull/5335) by [@hostcc](https://github.com/hostcc) +- Move CONF_PHASE_A/B/C constants to const.py. [esphome#5304](https://github.com/esphome/esphome/pull/5304) by [@kpfleming](https://github.com/kpfleming) +- Add BMI160 support [esphome#5143](https://github.com/esphome/esphome/pull/5143) by [@flaviut](https://github.com/flaviut) (new-integration) +- Use black-pre-commit-mirror to speed up pre-commit runs. [esphome#5372](https://github.com/esphome/esphome/pull/5372) by [@kpfleming](https://github.com/kpfleming) +- Native SPI RGB LED component [esphome#5288](https://github.com/esphome/esphome/pull/5288) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Wireguard component [esphome#4256](https://github.com/esphome/esphome/pull/4256) by [@lhoracek](https://github.com/lhoracek) (new-integration) +- Bump LibreTiny version to 1.4.0 [esphome#5375](https://github.com/esphome/esphome/pull/5375) by [@kuba2k2](https://github.com/kuba2k2) +- time: Make `std::string` version of strftime() avoid runaway memory allocations [esphome#5348](https://github.com/esphome/esphome/pull/5348) by [@kpfleming](https://github.com/kpfleming) +- Fix disabled wifi crash on boot [esphome#5370](https://github.com/esphome/esphome/pull/5370) by [@Xmister](https://github.com/Xmister) +- debug: add ESP32-C6 support [esphome#5354](https://github.com/esphome/esphome/pull/5354) by [@stintel](https://github.com/stintel) +- Make string globals persist-able using fixed size allocations [esphome#5296](https://github.com/esphome/esphome/pull/5296) by [@EternityForest](https://github.com/EternityForest) +- Use /data directory for .esphome folder when running as HA add-on [esphome#5374](https://github.com/esphome/esphome/pull/5374) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Bump zeroconf from 0.102.0 to 0.108.0 [esphome#5376](https://github.com/esphome/esphome/pull/5376) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.7.0 to 23.9.1 [esphome#5377](https://github.com/esphome/esphome/pull/5377) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Attempt to fix rp2040 adc with vcc [esphome#5378](https://github.com/esphome/esphome/pull/5378) by [@jesserockz](https://github.com/jesserockz) +- Enable IPv6 for ESP8266 and Raspberry pi pico w (RP2040) [esphome#4759](https://github.com/esphome/esphome/pull/4759) by [@HeMan](https://github.com/HeMan) +- Workflow updates [esphome#5384](https://github.com/esphome/esphome/pull/5384) by [@jesserockz](https://github.com/jesserockz) +- Modbus Controller added some features [esphome#5318](https://github.com/esphome/esphome/pull/5318) by [@0x3333](https://github.com/0x3333) +- Force heater off on setup [esphome#5161](https://github.com/esphome/esphome/pull/5161) by [@rufuswilson](https://github.com/rufuswilson) +- Add IDF 5 test yaml, add adc to IDF tests, fix adc for IDF 5 [esphome#5379](https://github.com/esphome/esphome/pull/5379) by [@kbx81](https://github.com/kbx81) +- Add patch to apt install [esphome#5389](https://github.com/esphome/esphome/pull/5389) by [@synesthesiam](https://github.com/synesthesiam) +- Fix Waveshare 7.5v2 epaper screens are always powered on [esphome#5283](https://github.com/esphome/esphome/pull/5283) by [@phoenixswiss](https://github.com/phoenixswiss) +- Update radon_eye_listener.cpp [esphome#5401](https://github.com/esphome/esphome/pull/5401) by [@rmmacias](https://github.com/rmmacias) +- Add shelly-dimmer-stm32 51.7 to known versions [esphome#5400](https://github.com/esphome/esphome/pull/5400) by [@trvrnrth](https://github.com/trvrnrth) +- Add E-Trailer Gaslevel support to Mopeka Std Check [esphome#5397](https://github.com/esphome/esphome/pull/5397) by [@Phhere](https://github.com/Phhere) +- fix disabled wifi power on 8266 [esphome#5409](https://github.com/esphome/esphome/pull/5409) by [@ssieb](https://github.com/ssieb) +- fix handling of web server version [esphome#5405](https://github.com/esphome/esphome/pull/5405) by [@ssieb](https://github.com/ssieb) +- Climate preset fix [esphome#5407](https://github.com/esphome/esphome/pull/5407) by [@Jorre05](https://github.com/Jorre05) +- Remove Wi-Fi dependency from Midea component [esphome#5394](https://github.com/esphome/esphome/pull/5394) by [@AnthonyMaiorani](https://github.com/AnthonyMaiorani) +- http_request: Cleanups and safety improvements [esphome#5360](https://github.com/esphome/esphome/pull/5360) by [@kpfleming](https://github.com/kpfleming) +- Make the pulse meter timeout on startup when no pulses are received [esphome#5388](https://github.com/esphome/esphome/pull/5388) by [@TrentHouliston](https://github.com/TrentHouliston) +- Wizard: fix colored text in input prompts [esphome#5313](https://github.com/esphome/esphome/pull/5313) by [@kuba2k2](https://github.com/kuba2k2) +- support keypads with pulldowns [esphome#5404](https://github.com/esphome/esphome/pull/5404) by [@ssieb](https://github.com/ssieb) +- Fix SPI inverted clock on ESP8266 [esphome#5416](https://github.com/esphome/esphome/pull/5416) by [@clydebarrow](https://github.com/clydebarrow) +- [RP2040W] Fix WiFi bootloop upon LibreTiny support [esphome#5414](https://github.com/esphome/esphome/pull/5414) by [@hostcc](https://github.com/hostcc) +- dallas: limit addresses to 64 bits [esphome#5413](https://github.com/esphome/esphome/pull/5413) by [@oddstr13](https://github.com/oddstr13) +- Bump zeroconf from 0.108.0 to 0.112.0 [esphome#5392](https://github.com/esphome/esphome/pull/5392) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- LibreTiny: enable MQTT, bump to v1.4.1 [esphome#5419](https://github.com/esphome/esphome/pull/5419) by [@kuba2k2](https://github.com/kuba2k2) +- Wireguard keepalive remove uint16 type [esphome#5430](https://github.com/esphome/esphome/pull/5430) by [@glmnet](https://github.com/glmnet) +- Fix #4896 and #4903 [esphome#5433](https://github.com/esphome/esphome/pull/5433) by [@clydebarrow](https://github.com/clydebarrow) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.10.0.mdx b/src/content/docs/changelog/2024.10.0.mdx new file mode 100644 index 0000000000..d756ee904d --- /dev/null +++ b/src/content/docs/changelog/2024.10.0.mdx @@ -0,0 +1,184 @@ +--- +description: "Changelog for ESPHome 2024.10.0." +title: "ESPHome 2024.10.0 - 16th October 2024" +pagefind: false +slug: "changelog/2024.10.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Web Server Grouping + +For those that use the [Web Server](/components/web_server/) with version 3, there is a new +grouping feature that allows for custom/user defined groups of entities. + +This is also a breaking change as the previous `web_server_sorting_weight` has been moved into a new +`web_server` -> `sorting_weight` configuration entry for the entity. + +Please see [Entity sorting](/components/web_server#config-webserver-sorting) for the latest documentation on these features. + +## ESP32 Advanced MAC Address Configuration + +ESPHome now supports reading a custom MAC address from the ESP32 eFuse blocks and will read and use it by default if +there is data burned into the eFuses. If you would like to disable this, or the eFuse has data burned that is not a +MAC address into those eFuses, then you can add `ignore_efuse_custom_mac: true` to your ESP32 `advanced` +configuration. See [ESP32 Advanced Configuration](/components/esp32#esp32-advanced_configuration) for more details. + +## CSE7766 Breaking Changes + +The [Cse7766](/components/sensor/cse7766/) now requires even parity in configuration. There are some chips that +work without `EVEN`, but the majority of newer chips seem to require it and the older ones work fine with it set as +well so to make it consistent across all devices the component now requires it. + +{/* markdownlint-disable MD013 */} + +## Release 2024.10.1 - October 22 + +- [config] Fix crash with empty substitutions block [esphome#7612](https://github.com/esphome/esphome/pull/7612) by [@clydebarrow](https://github.com/clydebarrow) +- Fix broken ibeacon_uuid config in ble_rssi [esphome#7640](https://github.com/esphome/esphome/pull/7640) by [@lennart-k](https://github.com/lennart-k) +- auto-load preferences [esphome#7642](https://github.com/esphome/esphome/pull/7642) by [@ssieb](https://github.com/ssieb) +- [wifi] Support custom MAC on Arduino, too [esphome#7644](https://github.com/esphome/esphome/pull/7644) by [@kbx81](https://github.com/kbx81) +- [config] Ensure user-supplied build flags don't get silently overwritten [esphome#7622](https://github.com/esphome/esphome/pull/7622) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Remove states from style definitions (Bugfix) [esphome#7645](https://github.com/esphome/esphome/pull/7645) by [@clydebarrow](https://github.com/clydebarrow) +- Move setting global voice assistant to constructor [esphome#7630](https://github.com/esphome/esphome/pull/7630) by [@synesthesiam](https://github.com/synesthesiam) + +## Release 2024.10.2 - October 24 + +- Humanized the missing MQTT log topic error message [esphome#7634](https://github.com/esphome/esphome/pull/7634) by [@solarkennedy](https://github.com/solarkennedy) +- [lvgl] Some properties were not templatable (Bugfix) [esphome#7655](https://github.com/esphome/esphome/pull/7655) by [@clydebarrow](https://github.com/clydebarrow) +- [voice_assistant] Bugfix: Fix crash on start [esphome#7662](https://github.com/esphome/esphome/pull/7662) by [@kahrendt](https://github.com/kahrendt) + +## Release 2024.10.3 - November 8 + +- [rpi_dpi_rgb] Fix get_width and height (Bugfix) [esphome#7675](https://github.com/esphome/esphome/pull/7675) by [@clydebarrow](https://github.com/clydebarrow) +- Fixes modbus timing error [esphome#7674](https://github.com/esphome/esphome/pull/7674) by [@exciton](https://github.com/exciton) +- [lvgl] Ensure images are configured before using them. (Bugfix) [esphome#7721](https://github.com/esphome/esphome/pull/7721) by [@clydebarrow](https://github.com/clydebarrow) + +## Full list of changes + +### New Components + +- Add tca9555 GPIO driver [esphome#7146](https://github.com/esphome/esphome/pull/7146) by [@mobrembski](https://github.com/mobrembski) (new-integration) +- Add support for Sharp GP2Y1010AU0F PM2.5 sensor [esphome#6007](https://github.com/esphome/esphome/pull/6007) by [@zry98](https://github.com/zry98) (new-integration) +- [audio_dac] [aic3204] Add new component + platform [esphome#7505](https://github.com/esphome/esphome/pull/7505) by [@kbx81](https://github.com/kbx81) (new-integration) +- Feature/add seeed grove gmxxx multichannel gas support [esphome#4304](https://github.com/esphome/esphome/pull/4304) by [@YorkshireIoT](https://github.com/YorkshireIoT) (new-integration) +- Add Initial TE-M3200 pressure sensor support [esphome#6862](https://github.com/esphome/esphome/pull/6862) by [@bakerkj](https://github.com/bakerkj) (new-integration) +- Add Initial NPI-19 pressure sensor support [esphome#7181](https://github.com/esphome/esphome/pull/7181) by [@bakerkj](https://github.com/bakerkj) (new-integration) +- nau7802: new component [esphome#6291](https://github.com/esphome/esphome/pull/6291) by [@cujomalainey](https://github.com/cujomalainey) (new-integration) + +### New Platforms + +- Haier climate integration update [esphome#7416](https://github.com/esphome/esphome/pull/7416) by [@paveldn](https://github.com/paveldn) (breaking-change) (new-platform) + +### Breaking Changes + +- Haier climate integration update [esphome#7416](https://github.com/esphome/esphome/pull/7416) by [@paveldn](https://github.com/paveldn) (breaking-change) (new-platform) +- [ch422g] Add support for pins 8-11; make input work. [esphome#7467](https://github.com/esphome/esphome/pull/7467) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- CSE7766 needs even parity [esphome#7549](https://github.com/esphome/esphome/pull/7549) by [@ssieb](https://github.com/ssieb) (breaking-change) +- [web_server] v3 entity grouping [esphome#6833](https://github.com/esphome/esphome/pull/6833) by [@RFDarter](https://github.com/RFDarter) (breaking-change) + +### Beta Changes + +- fix uart settings check [esphome#7573](https://github.com/esphome/esphome/pull/7573) by [@ssieb](https://github.com/ssieb) +- [web_server] Event component grouping [esphome#7586](https://github.com/esphome/esphome/pull/7586) by [@RFDarter](https://github.com/RFDarter) +- [touchscreen] Fix coordinates when using rotation [esphome#7591](https://github.com/esphome/esphome/pull/7591) by [@clydebarrow](https://github.com/clydebarrow) +- Fix update sequence when update is set to false (#5225) [esphome#7407](https://github.com/esphome/esphome/pull/7407) by [@edge90](https://github.com/edge90) + +### All changes + +- Bump peter-evans/create-pull-request from 7.0.0 to 7.0.2 [esphome#7437](https://github.com/esphome/esphome/pull/7437) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump recommended ESP-IDF to 4.4.8 [esphome#7349](https://github.com/esphome/esphome/pull/7349) by [@bdraco](https://github.com/bdraco) +- [tm1638] Fix linting and formatting issues [esphome#7443](https://github.com/esphome/esphome/pull/7443) by [@jesserockz](https://github.com/jesserockz) +- [image] Fix linting and formatting issues [esphome#7440](https://github.com/esphome/esphome/pull/7440) by [@jesserockz](https://github.com/jesserockz) +- [animation] Fix linting and formatting issues [esphome#7439](https://github.com/esphome/esphome/pull/7439) by [@jesserockz](https://github.com/jesserockz) +- [thermostat] Fix linting and formatting issues [esphome#7442](https://github.com/esphome/esphome/pull/7442) by [@jesserockz](https://github.com/jesserockz) +- Add OpenTherm component (part 1: communication layer and hub) [esphome#6645](https://github.com/esphome/esphome/pull/6645) by [@olegtarasov](https://github.com/olegtarasov) (new-integration) +- [st7701s] Make use of IDF5.x to speed up display operations [esphome#7447](https://github.com/esphome/esphome/pull/7447) by [@clydebarrow](https://github.com/clydebarrow) +- [modbus_controller] Fix linting and formatting issues [esphome#7441](https://github.com/esphome/esphome/pull/7441) by [@jesserockz](https://github.com/jesserockz) +- Bump pylint from 3.1.0 to 3.2.7 [esphome#7438](https://github.com/esphome/esphome/pull/7438) by [@jesserockz](https://github.com/jesserockz) +- Bump peter-evans/create-pull-request from 7.0.2 to 7.0.3 [esphome#7457](https://github.com/esphome/esphome/pull/7457) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- openeth ethernet / qemu support [esphome#7020](https://github.com/esphome/esphome/pull/7020) by [@apbodrov](https://github.com/apbodrov) +- [nextion] Optionally skip connection handshake [esphome#6905](https://github.com/esphome/esphome/pull/6905) by [@edwardtfn](https://github.com/edwardtfn) +- Haier climate integration update [esphome#7416](https://github.com/esphome/esphome/pull/7416) by [@paveldn](https://github.com/paveldn) (breaking-change) (new-platform) +- Added i2s_comm_fmt parameter to i2s speaker component [esphome#7449](https://github.com/esphome/esphome/pull/7449) by [@PxPert](https://github.com/PxPert) +- [lvgl] Enhancements [esphome#7453](https://github.com/esphome/esphome/pull/7453) by [@clydebarrow](https://github.com/clydebarrow) +- Add tca9555 GPIO driver [esphome#7146](https://github.com/esphome/esphome/pull/7146) by [@mobrembski](https://github.com/mobrembski) (new-integration) +- [st7701s] Fix initialisation race [esphome#7462](https://github.com/esphome/esphome/pull/7462) by [@clydebarrow](https://github.com/clydebarrow) +- add "fan_mode" and "swing_mode" to REST API [esphome#7476](https://github.com/esphome/esphome/pull/7476) by [@Tarik2142](https://github.com/Tarik2142) +- [esp32_improv] Add triggers for various states [esphome#7461](https://github.com/esphome/esphome/pull/7461) by [@kbx81](https://github.com/kbx81) +- [micro_wake_word] Workaround for failing IDF 5+ tests [esphome#7484](https://github.com/esphome/esphome/pull/7484) by [@kbx81](https://github.com/kbx81) +- Bump peter-evans/create-pull-request from 7.0.3 to 7.0.5 [esphome#7469](https://github.com/esphome/esphome/pull/7469) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add CSE7766 reactive power [esphome#7301](https://github.com/esphome/esphome/pull/7301) by [@nkinnan](https://github.com/nkinnan) +- Support inkplate 5 and 5 V2 [esphome#7448](https://github.com/esphome/esphome/pull/7448) by [@DavidSichau](https://github.com/DavidSichau) +- Add remote transmitter triggers [esphome#7483](https://github.com/esphome/esphome/pull/7483) by [@swoboda1337](https://github.com/swoboda1337) +- tcs34725: fix color/clear channel percentage calculations on long exposures [esphome#7493](https://github.com/esphome/esphome/pull/7493) by [@RubenKelevra](https://github.com/RubenKelevra) +- tcs34725: Add check for Division by Zero [esphome#7485](https://github.com/esphome/esphome/pull/7485) by [@RubenKelevra](https://github.com/RubenKelevra) +- [core] add ring buffer destructor [esphome#7500](https://github.com/esphome/esphome/pull/7500) by [@kahrendt](https://github.com/kahrendt) +- [ch422g] Add support for pins 8-11; make input work. [esphome#7467](https://github.com/esphome/esphome/pull/7467) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Add clean_session as configurable option to the MQTT component [esphome#7501](https://github.com/esphome/esphome/pull/7501) by [@victorclaessen](https://github.com/victorclaessen) +- [wifi] Use custom MAC address if programmed [esphome#7498](https://github.com/esphome/esphome/pull/7498) by [@kbx81](https://github.com/kbx81) +- Add support for Sharp GP2Y1010AU0F PM2.5 sensor [esphome#6007](https://github.com/esphome/esphome/pull/6007) by [@zry98](https://github.com/zry98) (new-integration) +- Make time dependency optional [esphome#7425](https://github.com/esphome/esphome/pull/7425) by [@nkinnan](https://github.com/nkinnan) +- Add OHF logo to README [esphome#7509](https://github.com/esphome/esphome/pull/7509) by [@mrdarrengriffin](https://github.com/mrdarrengriffin) +- Bump pypa/gh-action-pypi-publish from 1.10.1 to 1.10.2 [esphome#7487](https://github.com/esphome/esphome/pull/7487) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- tcs34725: optimize fetch time with burst read for RGB and clear values [esphome#7494](https://github.com/esphome/esphome/pull/7494) by [@RubenKelevra](https://github.com/RubenKelevra) +- tcs34725: Remove IR compensation and improve illuminance and color temperature handling in extreme conditions [esphome#7492](https://github.com/esphome/esphome/pull/7492) by [@RubenKelevra](https://github.com/RubenKelevra) +- [CI] Remove `sorted` from library include dirs [esphome#7526](https://github.com/esphome/esphome/pull/7526) by [@kbx81](https://github.com/kbx81) +- [wifi] Fix error message when no custom MAC is set [esphome#7515](https://github.com/esphome/esphome/pull/7515) by [@kbx81](https://github.com/kbx81) +- [esp32] Add `ignore_efuse_custom_mac` config var [esphome#7527](https://github.com/esphome/esphome/pull/7527) by [@kbx81](https://github.com/kbx81) +- [mics_4514] Move consts to consts.py [esphome#7528](https://github.com/esphome/esphome/pull/7528) by [@jesserockz](https://github.com/jesserockz) +- Fix parsing of µs time periods in config [esphome#7495](https://github.com/esphome/esphome/pull/7495) by [@dwmw2](https://github.com/dwmw2) +- [web_server] Expose detail=all on all components [esphome#7531](https://github.com/esphome/esphome/pull/7531) by [@RFDarter](https://github.com/RFDarter) +- [CI] Use a list when reading idedata for includes [esphome#7535](https://github.com/esphome/esphome/pull/7535) by [@kbx81](https://github.com/kbx81) +- Use "puremagic" instead of "magic" python module [esphome#7536](https://github.com/esphome/esphome/pull/7536) by [@guillempages](https://github.com/guillempages) +- [lvgl] Remap image to img in "set_style_*" [esphome#7546](https://github.com/esphome/esphome/pull/7546) by [@guillempages](https://github.com/guillempages) +- CSE7766 needs even parity [esphome#7549](https://github.com/esphome/esphome/pull/7549) by [@ssieb](https://github.com/ssieb) (breaking-change) +- Allow use of all pulse count unit channels if needed. [esphome#7550](https://github.com/esphome/esphome/pull/7550) by [@ToSa27](https://github.com/ToSa27) +- [bang-bang] Remove `assert()` [esphome#7533](https://github.com/esphome/esphome/pull/7533) by [@kbx81](https://github.com/kbx81) +- [thermostat] Remove `assert()` [esphome#7544](https://github.com/esphome/esphome/pull/7544) by [@kbx81](https://github.com/kbx81) +- [bedjet_codec] Remove `assert()` [esphome#7543](https://github.com/esphome/esphome/pull/7543) by [@kbx81](https://github.com/kbx81) +- [audio_dac] [aic3204] Add new component + platform [esphome#7505](https://github.com/esphome/esphome/pull/7505) by [@kbx81](https://github.com/kbx81) (new-integration) +- [wifi] Replace `USE_ESP32_IGNORE_EFUSE_MAC_CRC` with IDF's `CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR` [esphome#7502](https://github.com/esphome/esphome/pull/7502) by [@kbx81](https://github.com/kbx81) +- Bump docker/setup-buildx-action from 3.6.1 to 3.7.1 in the docker-actions group across 1 directory [esphome#7542](https://github.com/esphome/esphome/pull/7542) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pypa/gh-action-pypi-publish from 1.10.2 to 1.10.3 [esphome#7541](https://github.com/esphome/esphome/pull/7541) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.7.0 to 6.9.0 in /.github/actions/build-image [esphome#7511](https://github.com/esphome/esphome/pull/7511) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [code-quality] fix clang-tidy md5 and hmac_md5 [esphome#7325](https://github.com/esphome/esphome/pull/7325) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy api [esphome#7279](https://github.com/esphome/esphome/pull/7279) by [@tomaszduda23](https://github.com/tomaszduda23) +- [lvgl] Bugfixes #3 [esphome#7472](https://github.com/esphome/esphome/pull/7472) by [@clydebarrow](https://github.com/clydebarrow) +- Feature/add seeed grove gmxxx multichannel gas support [esphome#4304](https://github.com/esphome/esphome/pull/4304) by [@YorkshireIoT](https://github.com/YorkshireIoT) (new-integration) +- [lvgl] Fix: allow full range of styles on dropdown list. [esphome#7552](https://github.com/esphome/esphome/pull/7552) by [@clydebarrow](https://github.com/clydebarrow) +- [web_server] v3 entity grouping [esphome#6833](https://github.com/esphome/esphome/pull/6833) by [@RFDarter](https://github.com/RFDarter) (breaking-change) +- Add Initial TE-M3200 pressure sensor support [esphome#6862](https://github.com/esphome/esphome/pull/6862) by [@bakerkj](https://github.com/bakerkj) (new-integration) +- Add Initial NPI-19 pressure sensor support [esphome#7181](https://github.com/esphome/esphome/pull/7181) by [@bakerkj](https://github.com/bakerkj) (new-integration) +- nau7802: new component [esphome#6291](https://github.com/esphome/esphome/pull/6291) by [@cujomalainey](https://github.com/cujomalainey) (new-integration) +- Update webserver local assets to 20241007-025551 [esphome#7553](https://github.com/esphome/esphome/pull/7553) by [@esphomebot](https://github.com/esphomebot) +- [online_image] Bugfix: Use `std::string` instead of const char * [esphome#7556](https://github.com/esphome/esphome/pull/7556) by [@clydebarrow](https://github.com/clydebarrow) +- [ili9xxx] Put display into sleep mode on shutdown. [esphome#7555](https://github.com/esphome/esphome/pull/7555) by [@clydebarrow](https://github.com/clydebarrow) +- Bump actions/upload-artifact from 4.4.0 to 4.4.1 [esphome#7559](https://github.com/esphome/esphome/pull/7559) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.0.2 to 4.1.0 in /.github/actions/restore-python [esphome#7560](https://github.com/esphome/esphome/pull/7560) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.0.2 to 4.1.0 [esphome#7558](https://github.com/esphome/esphome/pull/7558) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update radon_eye_listener.cpp for more possible variants [esphome#7567](https://github.com/esphome/esphome/pull/7567) by [@baldisos](https://github.com/baldisos) +- [cst816] Allow skipping i2c probe [esphome#7557](https://github.com/esphome/esphome/pull/7557) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix text component [esphome#7563](https://github.com/esphome/esphome/pull/7563) by [@clydebarrow](https://github.com/clydebarrow) +- [template/binary_sensor] Implement `condition:` option as alternative to lambda. [esphome#7561](https://github.com/esphome/esphome/pull/7561) by [@clydebarrow](https://github.com/clydebarrow) +- Bump actions/upload-artifact from 4.4.1 to 4.4.2 [esphome#7569](https://github.com/esphome/esphome/pull/7569) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.1.0 to 4.1.1 [esphome#7570](https://github.com/esphome/esphome/pull/7570) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.1.0 to 4.1.1 in /.github/actions/restore-python [esphome#7571](https://github.com/esphome/esphome/pull/7571) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- fix uart settings check [esphome#7573](https://github.com/esphome/esphome/pull/7573) by [@ssieb](https://github.com/ssieb) +- [CI] failures when installing using apt-get. [esphome#7593](https://github.com/esphome/esphome/pull/7593) by [@clydebarrow](https://github.com/clydebarrow) +- [web_server] Event component grouping [esphome#7586](https://github.com/esphome/esphome/pull/7586) by [@RFDarter](https://github.com/RFDarter) +- [touchscreen] Fix coordinates when using rotation [esphome#7591](https://github.com/esphome/esphome/pull/7591) by [@clydebarrow](https://github.com/clydebarrow) +- Fix update sequence when update is set to false (#5225) [esphome#7407](https://github.com/esphome/esphome/pull/7407) by [@edge90](https://github.com/edge90) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.11.0.mdx b/src/content/docs/changelog/2024.11.0.mdx new file mode 100644 index 0000000000..b817763941 --- /dev/null +++ b/src/content/docs/changelog/2024.11.0.mdx @@ -0,0 +1,239 @@ +--- +description: "Changelog for ESPHome 2024.11.0." +title: "ESPHome 2024.11.0 - 20th November 2024" +pagefind: false +slug: "changelog/2024.11.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +ESPHome has grown over time and become more friendly for vendors to create and pre-install ESPHome onto devices +they sell / give away / provide. We are seeing more devices with ESPHome pre-installed, and we are so happy to +see how accessible it is becoming for regular Home Assistant users (not just developers or tech-savvy people) to +get their hands on a device that; A, works out of the box, B, works locally, and C can be fully customized by +the person who bought it if they choose to do so. +Because there are now more devices you can buy and do not have to install ESPHome onto yourself, we have made some +updates to allow ignoring these discovered devices from the ESPHome Dashboard as for most of these devices, you +don't actually need to **take control** and write and manage your own firmware for them. + +Further to this, we have slightly changed the identity of ESPHome as an add-on in Home Assistant. It is now called +**ESPHome Device Compiler**, because that is what it does, and most people do not need it if they are not going to +actually compile anything. + +## OpenTherm + +This release brings [Opentherm](/components/opentherm/) support to ESPHome. Please see the +[documentation](/components/opentherm/) for detailed information about it and how to use it. + +## ESPHome `armv7` Docker Support + +We will be retiring ESPHome's Docker support for `armv7` hardware in the February 2025 release. + +This is due to both waning support as it relates to tooling and performance reasons. We strongly recommend moving to a +more modern architecture, especially if you're using the ESPHome Device Compiler to build/compile firmware for your +devices. + +{/* markdownlint-disable MD013 */} + +## Release 2024.11.1 - November 22 + +- [http_request] Fix within context with parameters. (Bugfix) [esphome#7790](https://github.com/esphome/esphome/pull/7790) by [@clydebarrow](https://github.com/clydebarrow) +- [rtttl] Clamp gain between 0 and 1 [esphome#7793](https://github.com/esphome/esphome/pull/7793) by [@jesserockz](https://github.com/jesserockz) +- [speaker] Add missing auto-load for `audio` [esphome#7794](https://github.com/esphome/esphome/pull/7794) by [@jesserockz](https://github.com/jesserockz) +- [qspi_dbi] Fix garbled graphics on RM690B0 [esphome#7795](https://github.com/esphome/esphome/pull/7795) by [@manuelkasper](https://github.com/manuelkasper) +- Check for min_version earlier in validation [esphome#7797](https://github.com/esphome/esphome/pull/7797) by [@spuder](https://github.com/spuder) +- Fix for OTA mode not activating in safe_mode when OTA section has an on_xxxx action [esphome#7796](https://github.com/esphome/esphome/pull/7796) by [@Dilbert66](https://github.com/Dilbert66) +- Ensure storage I/O for ignored devices runs in the executor [esphome#7792](https://github.com/esphome/esphome/pull/7792) by [@bdraco](https://github.com/bdraco) + +## Release 2024.11.2 - November 27 + +- [lvgl] Bugfixes [esphome#7803](https://github.com/esphome/esphome/pull/7803) by [@clydebarrow](https://github.com/clydebarrow) +- [docker] Leave run-time required libraries installed. [esphome#7804](https://github.com/esphome/esphome/pull/7804) by [@clydebarrow](https://github.com/clydebarrow) +- [qspi_dbi] Fix init sequences (Bugfix) [esphome#7805](https://github.com/esphome/esphome/pull/7805) by [@clydebarrow](https://github.com/clydebarrow) +- fix modbus crashing when bad data returned [esphome#7810](https://github.com/esphome/esphome/pull/7810) by [@ssieb](https://github.com/ssieb) +- [Modbus Controller] Fix issue #6477. Online automation triggering Offline [esphome#7801](https://github.com/esphome/esphome/pull/7801) by [@0x3333](https://github.com/0x3333) +- [fix] Status sensor does not check if required network component is missing [esphome#7734](https://github.com/esphome/esphome/pull/7734) by [@rvalitov](https://github.com/rvalitov) +- keypad binary sensors should be initially off [esphome#7808](https://github.com/esphome/esphome/pull/7808) by [@ssieb](https://github.com/ssieb) +- fix 32 char SSIDs [esphome#7834](https://github.com/esphome/esphome/pull/7834) by [@ssieb](https://github.com/ssieb) +- [honeywell] use warning instead of failing [esphome#7862](https://github.com/esphome/esphome/pull/7862) by [@ssieb](https://github.com/ssieb) + +## Release 2024.11.3 - December 6 + +- [opentherm] Fix out of memory errors on ESP8266 [esphome#7835](https://github.com/esphome/esphome/pull/7835) by [@olegtarasov](https://github.com/olegtarasov) +- fix local time timestamp calculation [esphome#7807](https://github.com/esphome/esphome/pull/7807) by [@ssieb](https://github.com/ssieb) +- [online_image]Don't access decoder if not initialized [esphome#7882](https://github.com/esphome/esphome/pull/7882) by [@guillempages](https://github.com/guillempages) +- Add IRAM_ATTR to all functions used during interrupts on esp8266 chips. [esphome#7840](https://github.com/esphome/esphome/pull/7840) by [@FreeBear-nc](https://github.com/FreeBear-nc) +- [st7920] Remove unnecessary warning when drawing outside display bounds [esphome#7868](https://github.com/esphome/esphome/pull/7868) by [@jesserockz](https://github.com/jesserockz) +- Fix recalc_timestamp_utc [esphome#7894](https://github.com/esphome/esphome/pull/7894) by [@RouNNdeL](https://github.com/RouNNdeL) +- Cast port to int for ota pushing [esphome#7888](https://github.com/esphome/esphome/pull/7888) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Bugfixes [esphome#7896](https://github.com/esphome/esphome/pull/7896) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix msgbox content [esphome#7912](https://github.com/esphome/esphome/pull/7912) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32] Fix crash with empty `platformio_options:` value [esphome#7920](https://github.com/esphome/esphome/pull/7920) by [@clydebarrow](https://github.com/clydebarrow) + +## Full list of changes + +### New Features + +- Support ignoring discovered devices from the dashboard [esphome#7665](https://github.com/esphome/esphome/pull/7665) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- [media_player] Add new media player conditions [esphome#7667](https://github.com/esphome/esphome/pull/7667) by [@kahrendt](https://github.com/kahrendt) (new-feature) + +### New Components + +- Add TC74 temperature sensor [esphome#7460](https://github.com/esphome/esphome/pull/7460) by [@sethgirvan](https://github.com/sethgirvan) (new-integration) +- Add support for Analog Devices MAX17043 battery fuel gauge [esphome#7522](https://github.com/esphome/esphome/pull/7522) by [@blacknell](https://github.com/blacknell) (new-integration) +- [speaker, i2s_audio] I2S Speaker implementation using a ring buffer [esphome#7605](https://github.com/esphome/esphome/pull/7605) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [axs15231] Touchscreen driver [esphome#7592](https://github.com/esphome/esphome/pull/7592) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- i2c_device [esphome#7641](https://github.com/esphome/esphome/pull/7641) by [@gabest11](https://github.com/gabest11) (new-integration) +- [es8311] Add es8311 dac component [esphome#7693](https://github.com/esphome/esphome/pull/7693) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add OpenTherm component (part 3: rest of the sensors) [esphome#7676](https://github.com/esphome/esphome/pull/7676) by [@olegtarasov](https://github.com/olegtarasov) (new-integration) + +### New Platforms + +- [qspi_dbi] Rename from qspi_amoled, add features [esphome#7594](https://github.com/esphome/esphome/pull/7594) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) (new-platform) +- Add OpenTherm component (part 2.1: sensor platform) [esphome#7529](https://github.com/esphome/esphome/pull/7529) by [@olegtarasov](https://github.com/olegtarasov) (new-platform) + +### Breaking Changes + +- [qspi_dbi] Rename from qspi_amoled, add features [esphome#7594](https://github.com/esphome/esphome/pull/7594) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) (new-platform) +- [lvgl] light schema should require `widget:` not `led:` (Bugfix) [esphome#7649](https://github.com/esphome/esphome/pull/7649) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [http_request] Always return defined server response status [esphome#7689](https://github.com/esphome/esphome/pull/7689) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [touchscreen] Calibration fixes [esphome#7704](https://github.com/esphome/esphome/pull/7704) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [spi_device] rename mode to spi_mode [esphome#7724](https://github.com/esphome/esphome/pull/7724) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Update UNIT_VOLT_AMPS_REACTIVE = "var" (Currently 'VAR') [esphome#7643](https://github.com/esphome/esphome/pull/7643) by [@Roving-Ronin](https://github.com/Roving-Ronin) (breaking-change) + +### Beta Changes + +- Fix temperature and humidity for bme680 with bsec2 [esphome#7728](https://github.com/esphome/esphome/pull/7728) by [@luar123](https://github.com/luar123) +- [i2s_audio] Bugfix: Adjust I2S speaker setup priority [esphome#7759](https://github.com/esphome/esphome/pull/7759) by [@kahrendt](https://github.com/kahrendt) +- Update UNIT_VOLT_AMPS_REACTIVE = "var" (Currently 'VAR') [esphome#7643](https://github.com/esphome/esphome/pull/7643) by [@Roving-Ronin](https://github.com/Roving-Ronin) (breaking-change) +- Fix reactive power unit of measurement from VAR to var [esphome#7757](https://github.com/esphome/esphome/pull/7757) by [@felipecrs](https://github.com/felipecrs) +- Disable bluetooth proxy during update [esphome#7695](https://github.com/esphome/esphome/pull/7695) by [@jzucker2](https://github.com/jzucker2) +- ld2420: fix typo in log message [esphome#7758](https://github.com/esphome/esphome/pull/7758) by [@bfabio](https://github.com/bfabio) +- TuyaFan control should use oscillation_type [esphome#7776](https://github.com/esphome/esphome/pull/7776) by [@pethans](https://github.com/pethans) +- Bump esphome-dashboard to 20241118.0 [esphome#7782](https://github.com/esphome/esphome/pull/7782) by [@jesserockz](https://github.com/jesserockz) +- [http_request] Feed watchdog timeout around http request functions [esphome#7786](https://github.com/esphome/esphome/pull/7786) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20241120.0 [esphome#7787](https://github.com/esphome/esphome/pull/7787) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Update `pillow` to 10.4.0 [esphome#7566](https://github.com/esphome/esphome/pull/7566) by [@hostcc](https://github.com/hostcc) +- Bump actions/upload-artifact from 4.4.2 to 4.4.3 [esphome#7575](https://github.com/esphome/esphome/pull/7575) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [fix] ESP32-C6 Reset Reasons [esphome#7578](https://github.com/esphome/esphome/pull/7578) by [@rvalitov](https://github.com/rvalitov) +- [light] Add `initial_state` configuration [esphome#7577](https://github.com/esphome/esphome/pull/7577) by [@jesserockz](https://github.com/jesserockz) +- [CI] failures when installing using apt-get. [esphome#7593](https://github.com/esphome/esphome/pull/7593) by [@clydebarrow](https://github.com/clydebarrow) +- [web_server] expose event compoent to REST [esphome#7587](https://github.com/esphome/esphome/pull/7587) by [@RFDarter](https://github.com/RFDarter) +- Update test_build_components [esphome#7597](https://github.com/esphome/esphome/pull/7597) by [@tomaszduda23](https://github.com/tomaszduda23) +- [fix] ESP32-C6: internal temperature reporting [esphome#7579](https://github.com/esphome/esphome/pull/7579) by [@rvalitov](https://github.com/rvalitov) +- [code-quality] statsd component [esphome#7603](https://github.com/esphome/esphome/pull/7603) by [@tomaszduda23](https://github.com/tomaszduda23) +- [automation] Implement all and any condition shortcuts [esphome#7565](https://github.com/esphome/esphome/pull/7565) by [@clydebarrow](https://github.com/clydebarrow) +- Add TC74 temperature sensor [esphome#7460](https://github.com/esphome/esphome/pull/7460) by [@sethgirvan](https://github.com/sethgirvan) (new-integration) +- [display] filled_ring and filled_gauge methods added [esphome#7420](https://github.com/esphome/esphome/pull/7420) by [@artemyevav](https://github.com/artemyevav) +- [fix] deprecated functions warnings for logger component with ESP IDF version 5.3.0+ [esphome#7600](https://github.com/esphome/esphome/pull/7600) by [@rvalitov](https://github.com/rvalitov) +- [lvgl] Implement better software rotation [esphome#7595](https://github.com/esphome/esphome/pull/7595) by [@clydebarrow](https://github.com/clydebarrow) +- [qspi_dbi] Rename from qspi_amoled, add features [esphome#7594](https://github.com/esphome/esphome/pull/7594) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) (new-platform) +- Add support for Analog Devices MAX17043 battery fuel gauge [esphome#7522](https://github.com/esphome/esphome/pull/7522) by [@blacknell](https://github.com/blacknell) (new-integration) +- chore: bump pyyaml to 6.0.2 to support py3.13 build [esphome#7610](https://github.com/esphome/esphome/pull/7610) by [@chenrui333](https://github.com/chenrui333) +- chore: bump platformio to 6.1.16 to support py3.13 build [esphome#7590](https://github.com/esphome/esphome/pull/7590) by [@chenrui333](https://github.com/chenrui333) +- [speaker, i2s_audio] I2S Speaker implementation using a ring buffer [esphome#7605](https://github.com/esphome/esphome/pull/7605) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Bump arduino-mlx90393 to 1.0.2 [esphome#7618](https://github.com/esphome/esphome/pull/7618) by [@functionpointer](https://github.com/functionpointer) +- [fix] ESP32-C6 BLE compile error [esphome#7580](https://github.com/esphome/esphome/pull/7580) by [@rvalitov](https://github.com/rvalitov) +- [axs15231] Touchscreen driver [esphome#7592](https://github.com/esphome/esphome/pull/7592) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [lvgl] Roller and Dropdown enhancements; [esphome#7608](https://github.com/esphome/esphome/pull/7608) by [@clydebarrow](https://github.com/clydebarrow) +- [code-quality] udp component [esphome#7602](https://github.com/esphome/esphome/pull/7602) by [@tomaszduda23](https://github.com/tomaszduda23) +- [lvgl] Revise code generation to allow early widget creation [esphome#7611](https://github.com/esphome/esphome/pull/7611) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Allow esphome::Image in lambda to update image source directly [esphome#7624](https://github.com/esphome/esphome/pull/7624) by [@guillempages](https://github.com/guillempages) +- Bump bme68x_bsec2 version to 1.8.2610 [esphome#7626](https://github.com/esphome/esphome/pull/7626) by [@shvmm](https://github.com/shvmm) +- Update Pull request template [esphome#7620](https://github.com/esphome/esphome/pull/7620) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Defer display rotation reset until setup(). (Bugfix) [esphome#7627](https://github.com/esphome/esphome/pull/7627) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] light schema should require `widget:` not `led:` (Bugfix) [esphome#7649](https://github.com/esphome/esphome/pull/7649) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [image] Fix compile time problem with host image not using lvgl [esphome#7654](https://github.com/esphome/esphome/pull/7654) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix rotation code for 90deg (Bugfix) [esphome#7653](https://github.com/esphome/esphome/pull/7653) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Allow strings to be interpreted as integers (Bugfix) [esphome#7652](https://github.com/esphome/esphome/pull/7652) by [@clydebarrow](https://github.com/clydebarrow) +- [rtttl] Add `get_gain()` [esphome#7647](https://github.com/esphome/esphome/pull/7647) by [@edwardtfn](https://github.com/edwardtfn) +- feat(MQTT): Add subscribe QoS to discovery [esphome#7648](https://github.com/esphome/esphome/pull/7648) by [@Rapsssito](https://github.com/Rapsssito) +- i2c_device [esphome#7641](https://github.com/esphome/esphome/pull/7641) by [@gabest11](https://github.com/gabest11) (new-integration) +- Bump actions/cache from 4.1.1 to 4.1.2 in /.github/actions/restore-python [esphome#7659](https://github.com/esphome/esphome/pull/7659) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.1.1 to 4.1.2 [esphome#7660](https://github.com/esphome/esphome/pull/7660) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [speaker, i2s_audio] Support audio_dac component, mute actions, and improved logging [esphome#7664](https://github.com/esphome/esphome/pull/7664) by [@kahrendt](https://github.com/kahrendt) +- unified way how all platforms handle copy_files [esphome#7614](https://github.com/esphome/esphome/pull/7614) by [@tomaszduda23](https://github.com/tomaszduda23) +- updating ESP32 board definitions [esphome#7650](https://github.com/esphome/esphome/pull/7650) by [@asolochek](https://github.com/asolochek) +- Support ignoring discovered devices from the dashboard [esphome#7665](https://github.com/esphome/esphome/pull/7665) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Bump esphome-dashboard to 20241025.0 [esphome#7669](https://github.com/esphome/esphome/pull/7669) by [@jesserockz](https://github.com/jesserockz) +- unified way how all platforms handle get_download_types [esphome#7617](https://github.com/esphome/esphome/pull/7617) by [@tomaszduda23](https://github.com/tomaszduda23) +- [media_player] Add new media player conditions [esphome#7667](https://github.com/esphome/esphome/pull/7667) by [@kahrendt](https://github.com/kahrendt) (new-feature) +- [code-quality] weikai.h [esphome#7601](https://github.com/esphome/esphome/pull/7601) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump actions/setup-python from 5.2.0 to 5.3.0 in /.github/actions/restore-python [esphome#7671](https://github.com/esphome/esphome/pull/7671) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.2.0 to 5.3.0 [esphome#7670](https://github.com/esphome/esphome/pull/7670) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [image][online_image][animation] Fix transparency in RGB565 [esphome#7631](https://github.com/esphome/esphome/pull/7631) by [@clydebarrow](https://github.com/clydebarrow) +- Add OpenTherm component (part 2.1: sensor platform) [esphome#7529](https://github.com/esphome/esphome/pull/7529) by [@olegtarasov](https://github.com/olegtarasov) (new-platform) +- gp8403 : Add the possibility to use substitution for channel selection [esphome#7681](https://github.com/esphome/esphome/pull/7681) by [@SeByDocKy](https://github.com/SeByDocKy) +- [lvgl] Implement qrcode [esphome#7623](https://github.com/esphome/esphome/pull/7623) by [@clydebarrow](https://github.com/clydebarrow) +- [bytebuffer] Rework ByteBuffer using templates [esphome#7638](https://github.com/esphome/esphome/pull/7638) by [@clydebarrow](https://github.com/clydebarrow) +- [http_request] Always return defined server response status [esphome#7689](https://github.com/esphome/esphome/pull/7689) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [font] Fix failure with bitmap fonts [esphome#7691](https://github.com/esphome/esphome/pull/7691) by [@clydebarrow](https://github.com/clydebarrow) +- [http_request] Add enum for status codes [esphome#7690](https://github.com/esphome/esphome/pull/7690) by [@clydebarrow](https://github.com/clydebarrow) +- Support W5500 SPI-Ethernet polling mode if framework is supported [esphome#7503](https://github.com/esphome/esphome/pull/7503) by [@slakichi](https://github.com/slakichi) +- Add asdf to gitignore (and dockerignore) [esphome#7686](https://github.com/esphome/esphome/pull/7686) by [@jzucker2](https://github.com/jzucker2) +- Add more prometheus metrics [esphome#7683](https://github.com/esphome/esphome/pull/7683) by [@jzucker2](https://github.com/jzucker2) +- Mopeka Pro Check improvement to allow user to configure the sensor reporting for lower quality readings [esphome#7475](https://github.com/esphome/esphome/pull/7475) by [@spbrogan](https://github.com/spbrogan) +- fix(WiFi): Fix strncpy missing NULL terminator [-Werror=stringop-truncation] [esphome#7668](https://github.com/esphome/esphome/pull/7668) by [@Rapsssito](https://github.com/Rapsssito) +- let make new platform implementation in external components [esphome#7615](https://github.com/esphome/esphome/pull/7615) by [@tomaszduda23](https://github.com/tomaszduda23) +- remove use of delay [esphome#7680](https://github.com/esphome/esphome/pull/7680) by [@ssieb](https://github.com/ssieb) +- fix build error [esphome#7694](https://github.com/esphome/esphome/pull/7694) by [@tomaszduda23](https://github.com/tomaszduda23) +- fix: [climate] Allow substitutions in `visual.temperature_step.{target_temperature,current_temperature}` [esphome#7679](https://github.com/esphome/esphome/pull/7679) by [@hostcc](https://github.com/hostcc) +- Add in area and device to the prometheus labels [esphome#7692](https://github.com/esphome/esphome/pull/7692) by [@jzucker2](https://github.com/jzucker2) +- [http_request] Implement `on_error` trigger for requests [esphome#7696](https://github.com/esphome/esphome/pull/7696) by [@clydebarrow](https://github.com/clydebarrow) +- Bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0 [esphome#7700](https://github.com/esphome/esphome/pull/7700) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [es8311] Add es8311 dac component [esphome#7693](https://github.com/esphome/esphome/pull/7693) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [sdl] Allow window to be resized. [esphome#7698](https://github.com/esphome/esphome/pull/7698) by [@clydebarrow](https://github.com/clydebarrow) +- Add config for current temperature precision [esphome#7699](https://github.com/esphome/esphome/pull/7699) by [@JasonN3](https://github.com/JasonN3) +- [spi] Add mosi pin checks for displays [esphome#7702](https://github.com/esphome/esphome/pull/7702) by [@clydebarrow](https://github.com/clydebarrow) +- [CI] Fix webserver defines to be present based on platform, not just framework [esphome#7703](https://github.com/esphome/esphome/pull/7703) by [@jesserockz](https://github.com/jesserockz) +- [touchscreen] Calibration fixes [esphome#7704](https://github.com/esphome/esphome/pull/7704) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [font] Add support for "glyphsets" [esphome#7429](https://github.com/esphome/esphome/pull/7429) by [@paravoid](https://github.com/paravoid) +- [lvlg] fix tests [esphome#7708](https://github.com/esphome/esphome/pull/7708) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32_ble] Add disconnect as a virtual function to `ESPBTClient` [esphome#7705](https://github.com/esphome/esphome/pull/7705) by [@jesserockz](https://github.com/jesserockz) +- handle bad pin schemas [esphome#7711](https://github.com/esphome/esphome/pull/7711) by [@ssieb](https://github.com/ssieb) +- datetime fix build_language_schema [esphome#7710](https://github.com/esphome/esphome/pull/7710) by [@tomaszduda23](https://github.com/tomaszduda23) +- [lvgl] Don't just throw key error if someone types a bad layout type [esphome#7722](https://github.com/esphome/esphome/pull/7722) by [@jesserockz](https://github.com/jesserockz) +- [spi_device] rename mode to spi_mode [esphome#7724](https://github.com/esphome/esphome/pull/7724) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- feat(MQTT): Add `enable`, `disable` and `enable_on_boot` [esphome#7716](https://github.com/esphome/esphome/pull/7716) by [@Rapsssito](https://github.com/Rapsssito) +- [lvgl] Allow multiple LVGL instances [esphome#7712](https://github.com/esphome/esphome/pull/7712) by [@clydebarrow](https://github.com/clydebarrow) +- [fix] deprecated legacy driver tsens [esphome#7658](https://github.com/esphome/esphome/pull/7658) by [@rvalitov](https://github.com/rvalitov) +- [lvgl] Fix id config for the lvgl component (Bugfix) [esphome#7731](https://github.com/esphome/esphome/pull/7731) by [@clydebarrow](https://github.com/clydebarrow) +- Bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.2 [esphome#7730](https://github.com/esphome/esphome/pull/7730) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- OTA: Fix IPv6 and multiple address support [esphome#7414](https://github.com/esphome/esphome/pull/7414) by [@dwmw2](https://github.com/dwmw2) +- Fix dashboard ip resolving [esphome#7747](https://github.com/esphome/esphome/pull/7747) by [@jesserockz](https://github.com/jesserockz) +- [docker] Bump curl, iputils-ping and libssl-dev [esphome#7748](https://github.com/esphome/esphome/pull/7748) by [@jesserockz](https://github.com/jesserockz) +- Remove the choice for MQTT logging if it is disabled [esphome#7723](https://github.com/esphome/esphome/pull/7723) by [@solarkennedy](https://github.com/solarkennedy) +- [sensor] Make some values templatable [esphome#7735](https://github.com/esphome/esphome/pull/7735) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Implement keypads [esphome#7719](https://github.com/esphome/esphome/pull/7719) by [@clydebarrow](https://github.com/clydebarrow) +- [midea] Add temperature validation in do_follow_me method (bugfix) [esphome#7736](https://github.com/esphome/esphome/pull/7736) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- Add OpenTherm component (part 3: rest of the sensors) [esphome#7676](https://github.com/esphome/esphome/pull/7676) by [@olegtarasov](https://github.com/olegtarasov) (new-integration) +- [i2s_audio] I2S speaker improvements [esphome#7749](https://github.com/esphome/esphome/pull/7749) by [@kahrendt](https://github.com/kahrendt) +- [opentherm] Message to string extend [esphome#7755](https://github.com/esphome/esphome/pull/7755) by [@FreeBear-nc](https://github.com/FreeBear-nc) +- [sun] Implements `is_above_horizon()` [esphome#7754](https://github.com/esphome/esphome/pull/7754) by [@edwardtfn](https://github.com/edwardtfn) +- [core] Ring buffer write functions use const pointer parameter [esphome#7750](https://github.com/esphome/esphome/pull/7750) by [@kahrendt](https://github.com/kahrendt) +- [Modbus Controller] Added `on_online` and `on_offline` automation [esphome#7417](https://github.com/esphome/esphome/pull/7417) by [@0x3333](https://github.com/0x3333) +- Updated dfplayer logging to be more user-friendly [esphome#7740](https://github.com/esphome/esphome/pull/7740) by [@solarkennedy](https://github.com/solarkennedy) +- Fix temperature and humidity for bme680 with bsec2 [esphome#7728](https://github.com/esphome/esphome/pull/7728) by [@luar123](https://github.com/luar123) +- [i2s_audio] Bugfix: Adjust I2S speaker setup priority [esphome#7759](https://github.com/esphome/esphome/pull/7759) by [@kahrendt](https://github.com/kahrendt) +- Update UNIT_VOLT_AMPS_REACTIVE = "var" (Currently 'VAR') [esphome#7643](https://github.com/esphome/esphome/pull/7643) by [@Roving-Ronin](https://github.com/Roving-Ronin) (breaking-change) +- Fix reactive power unit of measurement from VAR to var [esphome#7757](https://github.com/esphome/esphome/pull/7757) by [@felipecrs](https://github.com/felipecrs) +- Disable bluetooth proxy during update [esphome#7695](https://github.com/esphome/esphome/pull/7695) by [@jzucker2](https://github.com/jzucker2) +- ld2420: fix typo in log message [esphome#7758](https://github.com/esphome/esphome/pull/7758) by [@bfabio](https://github.com/bfabio) +- TuyaFan control should use oscillation_type [esphome#7776](https://github.com/esphome/esphome/pull/7776) by [@pethans](https://github.com/pethans) +- Bump esphome-dashboard to 20241118.0 [esphome#7782](https://github.com/esphome/esphome/pull/7782) by [@jesserockz](https://github.com/jesserockz) +- [http_request] Feed watchdog timeout around http request functions [esphome#7786](https://github.com/esphome/esphome/pull/7786) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20241120.0 [esphome#7787](https://github.com/esphome/esphome/pull/7787) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.12.0.mdx b/src/content/docs/changelog/2024.12.0.mdx new file mode 100644 index 0000000000..df931eede4 --- /dev/null +++ b/src/content/docs/changelog/2024.12.0.mdx @@ -0,0 +1,203 @@ +--- +description: "Changelog for ESPHome 2024.12.0." +title: "ESPHome 2024.12.0 - 18th December 2024" +pagefind: false +slug: "changelog/2024.12.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## ESP-IDF + +ESPHome has now updated the core ESP32 code to use [ESP-IDF](https://github.com/espressif/esp-idf/) 5.1.5. +This is a major upgrade and should bring more features, chip support (Most notably the ESP32-C6 that people +keep raving on about) and in general more stability. + +To accommodate this change, ESPHome has moved away from the "official" platformio provided ESP32 platform, +and is now using a community fork [pioarduino/platform-espressif32](https://github.com/pioarduino/platform-espressif32) +as platformio has decided to stop providing ESP-IDF updates to their platform for Espressif chips. As a user, +you should not notice any difference. + +As we are unable to test every single component and board, there might be issues with specific configurations. +Please report these in the [ESPHome issue tracker](https://github.com/esphome/esphome/issues) on GitHub. + +## ESPHome `armv7` Docker Support + +We will be retiring ESPHome's Docker support for `armv7` hardware in the February 2025 release. + +This is due to both waning support as it relates to tooling and performance reasons. We strongly recommend moving to a +more modern architecture, especially if you're using the ESPHome Device Compiler to build/compile firmware for your +devices. + +{/* markdownlint-disable MD013 */} + +## Release 2024.12.1 - December 19 + +- [core] Bugfix: Implement ring buffer with xRingbuffer [esphome#7973](https://github.com/esphome/esphome/pull/7973) by [@kahrendt](https://github.com/kahrendt) + +## Release 2024.12.2 - December 20 + +- [esp32] Fix flash size warning when using IDF [esphome#7983](https://github.com/esphome/esphome/pull/7983) by [@kbx81](https://github.com/kbx81) +- [esp32_ble] Fix for Improv [esphome#7984](https://github.com/esphome/esphome/pull/7984) by [@kbx81](https://github.com/kbx81) + +## Release 2024.12.3 - January 17 + +- Fixed libretiny preference wrongly detecting change in the data to store [esphome#7990](https://github.com/esphome/esphome/pull/7990) by [@szupi-ipuzs](https://github.com/szupi-ipuzs) +- [http_request] Bugfix: run update function in a task [esphome#8018](https://github.com/esphome/esphome/pull/8018) by [@kahrendt](https://github.com/kahrendt) + +## Release 2024.12.4 - January 17 + +- Bump python3-setuptools to 66.1.1-1+deb12u1 [esphome#8074](https://github.com/esphome/esphome/pull/8074) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add: Seeed Studio mr60fda2 mmwave sensor [esphome#7576](https://github.com/esphome/esphome/pull/7576) by [@limengdu](https://github.com/limengdu) (new-integration) +- Add: Seeed Studio MR60BHA2 mmWave Sensor [esphome#7589](https://github.com/esphome/esphome/pull/7589) by [@limengdu](https://github.com/limengdu) (new-integration) + +### New Platforms + +- binary_sensor for switch state [esphome#7819](https://github.com/esphome/esphome/pull/7819) by [@ssieb](https://github.com/ssieb) (new-platform) +- Add H-Bridge switch component [esphome#7421](https://github.com/esphome/esphome/pull/7421) by [@dwmw2](https://github.com/dwmw2) (new-platform) + +### Breaking Changes + +- Fix entity name validation to allow "Off" and "On" [esphome#7821](https://github.com/esphome/esphome/pull/7821) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- MQTT sensors handling of publishing NaN values [esphome#7768](https://github.com/esphome/esphome/pull/7768) by [@kbullet](https://github.com/kbullet) (breaking-change) +- Synchronise esp32 boards with platform version 51.03.07 [esphome#7945](https://github.com/esphome/esphome/pull/7945) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [sgp30] Set default update interval to 60s [esphome#7952](https://github.com/esphome/esphome/pull/7952) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- [const] Add RMT CONF variables to const.py [esphome#7953](https://github.com/esphome/esphome/pull/7953) by [@swoboda1337](https://github.com/swoboda1337) +- [sgp30] Set default update interval to 60s [esphome#7952](https://github.com/esphome/esphome/pull/7952) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [dallas_temp] Move delay_microseconds_safe to iram [esphome#7957](https://github.com/esphome/esphome/pull/7957) by [@swoboda1337](https://github.com/swoboda1337) +- [i2s_audio] Bugfix: Correctly set ring buffer size [esphome#7959](https://github.com/esphome/esphome/pull/7959) by [@kahrendt](https://github.com/kahrendt) +- [adc] Restore missing LIBRETINY code in a separated file [esphome#7955](https://github.com/esphome/esphome/pull/7955) by [@edwardtfn](https://github.com/edwardtfn) +- [font] cleanly handle font file format exception (Bugfix) [esphome#7970](https://github.com/esphome/esphome/pull/7970) by [@clydebarrow](https://github.com/clydebarrow) +- [dashboard] Accept basic auth header [esphome#7965](https://github.com/esphome/esphome/pull/7965) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20241217.1 [esphome#7971](https://github.com/esphome/esphome/pull/7971) by [@jesserockz](https://github.com/jesserockz) +- [esp32_ble] Use RAMAllocator to avoid panic abort from `new` [esphome#7936](https://github.com/esphome/esphome/pull/7936) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Bump codecov/codecov-action from 4 to 5 [esphome#7771](https://github.com/esphome/esphome/pull/7771) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [remote_base] Fix extra comma in dump raw [esphome#7774](https://github.com/esphome/esphome/pull/7774) by [@swoboda1337](https://github.com/swoboda1337) +- [nextion] New trigger `on_buffer_overflow` [esphome#7772](https://github.com/esphome/esphome/pull/7772) by [@edwardtfn](https://github.com/edwardtfn) +- enable rp2040 for online_image [esphome#7769](https://github.com/esphome/esphome/pull/7769) by [@afflux](https://github.com/afflux) +- [nextion] Add publish actions [esphome#7646](https://github.com/esphome/esphome/pull/7646) by [@pkejval](https://github.com/pkejval) +- [wifi] Make wifi_channel_() public [esphome#7818](https://github.com/esphome/esphome/pull/7818) by [@nielsnl68](https://github.com/nielsnl68) +- feat(WiFi): Add wifi.configure action [esphome#7335](https://github.com/esphome/esphome/pull/7335) by [@Rapsssito](https://github.com/Rapsssito) +- allow multiple graphical menus [esphome#7809](https://github.com/esphome/esphome/pull/7809) by [@ssieb](https://github.com/ssieb) +- Move `CONF_NAME_ADD_MAC_SUFFIX` to `const.py` [esphome#7820](https://github.com/esphome/esphome/pull/7820) by [@jesserockz](https://github.com/jesserockz) +- binary_sensor for switch state [esphome#7819](https://github.com/esphome/esphome/pull/7819) by [@ssieb](https://github.com/ssieb) (new-platform) +- [nextion] Remove assignment within `if` [esphome#7824](https://github.com/esphome/esphome/pull/7824) by [@kbx81](https://github.com/kbx81) +- [ota] `void` functions should return nothing [esphome#7825](https://github.com/esphome/esphome/pull/7825) by [@kbx81](https://github.com/kbx81) +- [safe_mode] Remove unused capture [esphome#7826](https://github.com/esphome/esphome/pull/7826) by [@kbx81](https://github.com/kbx81) +- [stepper] Remove unnecessary `#include` [esphome#7827](https://github.com/esphome/esphome/pull/7827) by [@kbx81](https://github.com/kbx81) +- [sx1509] Fix up includes [esphome#7828](https://github.com/esphome/esphome/pull/7828) by [@kbx81](https://github.com/kbx81) +- [uart] `void` functions should return nothing [esphome#7829](https://github.com/esphome/esphome/pull/7829) by [@kbx81](https://github.com/kbx81) +- [audio] Header modernization [esphome#7832](https://github.com/esphome/esphome/pull/7832) by [@kbx81](https://github.com/kbx81) +- [opentherm] Follow variable naming convention [esphome#7833](https://github.com/esphome/esphome/pull/7833) by [@kbx81](https://github.com/kbx81) +- [opentherm] Add nolint for 8266 static global [esphome#7837](https://github.com/esphome/esphome/pull/7837) by [@kbx81](https://github.com/kbx81) +- [helpers] Add NOLINT for Mutex private field `handle_` [esphome#7838](https://github.com/esphome/esphome/pull/7838) by [@kbx81](https://github.com/kbx81) +- Add waveshare 1 45 in v2 b support [esphome#7052](https://github.com/esphome/esphome/pull/7052) by [@programmingbgloDE](https://github.com/programmingbgloDE) +- added Waveshare BWR Mode for the 7.5in Display [esphome#7687](https://github.com/esphome/esphome/pull/7687) by [@JonasB2497](https://github.com/JonasB2497) +- [homeassistant.number] Return when value not set [esphome#7839](https://github.com/esphome/esphome/pull/7839) by [@kbx81](https://github.com/kbx81) +- [CI] Add/update some system include paths [esphome#7831](https://github.com/esphome/esphome/pull/7831) by [@kbx81](https://github.com/kbx81) +- add on_key trigger to matrix_keypad [esphome#7830](https://github.com/esphome/esphome/pull/7830) by [@ssieb](https://github.com/ssieb) +- Add: Seeed Studio mr60fda2 mmwave sensor [esphome#7576](https://github.com/esphome/esphome/pull/7576) by [@limengdu](https://github.com/limengdu) (new-integration) +- [lvgl] clang-tidy fixes for #7822 [esphome#7843](https://github.com/esphome/esphome/pull/7843) by [@kbx81](https://github.com/kbx81) +- [xiaomi_ble] clang-tidy fixes for #7822 [esphome#7860](https://github.com/esphome/esphome/pull/7860) by [@kbx81](https://github.com/kbx81) +- [wireguard] clang-tidy fixes for #7822 [esphome#7859](https://github.com/esphome/esphome/pull/7859) by [@kbx81](https://github.com/kbx81) +- [dsmr] clang-tidy fixes for #7822 [esphome#7848](https://github.com/esphome/esphome/pull/7848) by [@kbx81](https://github.com/kbx81) +- Fix entity name validation to allow "Off" and "On" [esphome#7821](https://github.com/esphome/esphome/pull/7821) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [camera_web_server] Add `NOLINT` due to naming [esphome#7823](https://github.com/esphome/esphome/pull/7823) by [@kbx81](https://github.com/kbx81) +- [display_menu_base] clang-tidy fixes for #7822 [esphome#7847](https://github.com/esphome/esphome/pull/7847) by [@kbx81](https://github.com/kbx81) +- [nextion] clang-tidy fixes for #7822 [esphome#7852](https://github.com/esphome/esphome/pull/7852) by [@kbx81](https://github.com/kbx81) +- [shelly_dimmer] clang-tidy fixes for #7822 [esphome#7844](https://github.com/esphome/esphome/pull/7844) by [@kbx81](https://github.com/kbx81) +- [sim800l] clang-tidy fixes for #7822 [esphome#7856](https://github.com/esphome/esphome/pull/7856) by [@kbx81](https://github.com/kbx81) +- [nfc, pn532, pn7150, pn7160] clang-tidy fixes for #7822 [esphome#7853](https://github.com/esphome/esphome/pull/7853) by [@kbx81](https://github.com/kbx81) +- [output] clang-tidy fixes for #7822 [esphome#7854](https://github.com/esphome/esphome/pull/7854) by [@kbx81](https://github.com/kbx81) +- [sun_gtil2] clang-tidy fixes for #7822 [esphome#7858](https://github.com/esphome/esphome/pull/7858) by [@kbx81](https://github.com/kbx81) +- [pipsolar] clang-tidy fixes for #7822 [esphome#7855](https://github.com/esphome/esphome/pull/7855) by [@kbx81](https://github.com/kbx81) +- [ltr501] clang-tidy fixes for #7822 [esphome#7850](https://github.com/esphome/esphome/pull/7850) by [@kbx81](https://github.com/kbx81) +- [cse7766] clang-tidy fixes for #7822 [esphome#7846](https://github.com/esphome/esphome/pull/7846) by [@kbx81](https://github.com/kbx81) +- [alarm_control_panel] clang-tidy fixes for #7822 [esphome#7845](https://github.com/esphome/esphome/pull/7845) by [@kbx81](https://github.com/kbx81) +- [sprinkler] clang-tidy fixes for #7822 [esphome#7857](https://github.com/esphome/esphome/pull/7857) by [@kbx81](https://github.com/kbx81) +- [haier] clang-tidy fixes for #7822 [esphome#7849](https://github.com/esphome/esphome/pull/7849) by [@kbx81](https://github.com/kbx81) +- [mqtt] clang-tidy fixes for #7822 [esphome#7851](https://github.com/esphome/esphome/pull/7851) by [@kbx81](https://github.com/kbx81) +- [helpers, optional] clang-tidy fixes for #7822 [esphome#7841](https://github.com/esphome/esphome/pull/7841) by [@kbx81](https://github.com/kbx81) +- Move `USE_CAPTIVE_PORTAL` into all define groups it can be used with [esphome#7863](https://github.com/esphome/esphome/pull/7863) by [@jesserockz](https://github.com/jesserockz) +- Bump docker/build-push-action from 6.9.0 to 6.10.0 in /.github/actions/build-image [esphome#7866](https://github.com/esphome/esphome/pull/7866) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- python lint for platform components [esphome#7864](https://github.com/esphome/esphome/pull/7864) by [@tomaszduda23](https://github.com/tomaszduda23) +- [max31865] clang-tidy fixes for #7822 [esphome#7876](https://github.com/esphome/esphome/pull/7876) by [@kbx81](https://github.com/kbx81) +- [esp32_ble] clang-tidy fixes for #7822 [esphome#7883](https://github.com/esphome/esphome/pull/7883) by [@kbx81](https://github.com/kbx81) +- [mqtt] clang-tidy fixes for #7822 [esphome#7877](https://github.com/esphome/esphome/pull/7877) by [@kbx81](https://github.com/kbx81) +- [uln2003] clang-tidy fixes for #7822 [esphome#7881](https://github.com/esphome/esphome/pull/7881) by [@kbx81](https://github.com/kbx81) +- [rotary_encoder] clang-tidy fixes for #7822 [esphome#7880](https://github.com/esphome/esphome/pull/7880) by [@kbx81](https://github.com/kbx81) +- [pca6416a, pca9554] clang-tidy fixes for #7822 [esphome#7879](https://github.com/esphome/esphome/pull/7879) by [@kbx81](https://github.com/kbx81) +- [nextion] clang-tidy fixes for #7822 [esphome#7878](https://github.com/esphome/esphome/pull/7878) by [@kbx81](https://github.com/kbx81) +- [various] clang-tidy fixes for #7822 [esphome#7874](https://github.com/esphome/esphome/pull/7874) by [@kbx81](https://github.com/kbx81) +- [logger] clang-tidy fixes for #7822 [esphome#7875](https://github.com/esphome/esphome/pull/7875) by [@kbx81](https://github.com/kbx81) +- [ezo] clang-tidy fixes for #7822 [esphome#7873](https://github.com/esphome/esphome/pull/7873) by [@kbx81](https://github.com/kbx81) +- [apds9306] clang-tidy fixes for #7822 [esphome#7872](https://github.com/esphome/esphome/pull/7872) by [@kbx81](https://github.com/kbx81) +- [dht] clang-tidy fixes for #7822 [esphome#7871](https://github.com/esphome/esphome/pull/7871) by [@kbx81](https://github.com/kbx81) +- [network] clang-tidy fixes for #7822 [esphome#7870](https://github.com/esphome/esphome/pull/7870) by [@kbx81](https://github.com/kbx81) +- [lvgl] Make image update via lambda work [esphome#7886](https://github.com/esphome/esphome/pull/7886) by [@clydebarrow](https://github.com/clydebarrow) +- [deep_sleep] fix deep_sleep not keeping awake when sleep_duration is defined [esphome#7885](https://github.com/esphome/esphome/pull/7885) by [@makstech](https://github.com/makstech) +- [hx711] clang-tidy fixes for #7822 [esphome#7900](https://github.com/esphome/esphome/pull/7900) by [@kbx81](https://github.com/kbx81) +- [modbus_controller] Clang fixes [esphome#7899](https://github.com/esphome/esphome/pull/7899) by [@kbx81](https://github.com/kbx81) +- Add H-Bridge switch component [esphome#7421](https://github.com/esphome/esphome/pull/7421) by [@dwmw2](https://github.com/dwmw2) (new-platform) +- [CI] Bump GHA runners to `ubuntu-24.04` [esphome#7905](https://github.com/esphome/esphome/pull/7905) by [@kbx81](https://github.com/kbx81) +- [font et. al.] Remove explicit check for pillow installed. [esphome#7891](https://github.com/esphome/esphome/pull/7891) by [@clydebarrow](https://github.com/clydebarrow) +- [CI] Update clang-tidy to 18.1.3 [esphome#7822](https://github.com/esphome/esphome/pull/7822) by [@kbx81](https://github.com/kbx81) +- MQTT sensors handling of publishing NaN values [esphome#7768](https://github.com/esphome/esphome/pull/7768) by [@kbullet](https://github.com/kbullet) (breaking-change) +- [ble] Allow setting shorter name for ble advertisements [esphome#7867](https://github.com/esphome/esphome/pull/7867) by [@jesserockz](https://github.com/jesserockz) +- [font] Restore correct default glyphs for bitmap fonts [esphome#7907](https://github.com/esphome/esphome/pull/7907) by [@clydebarrow](https://github.com/clydebarrow) +- [helpers] clang-tidy fix for #7706 [esphome#7909](https://github.com/esphome/esphome/pull/7909) by [@kbx81](https://github.com/kbx81) +- [docker] Fix clang-tidy installation [esphome#7910](https://github.com/esphome/esphome/pull/7910) by [@kbx81](https://github.com/kbx81) +- [sntp] Resolve warnings from ESP-IDF 5.x [esphome#7913](https://github.com/esphome/esphome/pull/7913) by [@clydebarrow](https://github.com/clydebarrow) +- Add strftime variant with background color [esphome#7714](https://github.com/esphome/esphome/pull/7714) by [@mikosoft83](https://github.com/mikosoft83) +- [i2s_audio] Bugfix: Follow configured bits per sample [esphome#7916](https://github.com/esphome/esphome/pull/7916) by [@kahrendt](https://github.com/kahrendt) +- Haier AC quiet mode switch fix [esphome#7902](https://github.com/esphome/esphome/pull/7902) by [@paveldn](https://github.com/paveldn) +- [CI] Update clang-tidy to 18.1.8 [esphome#7915](https://github.com/esphome/esphome/pull/7915) by [@syssi](https://github.com/syssi) +- [i2s_audio] Speaker type fix [esphome#7919](https://github.com/esphome/esphome/pull/7919) by [@kbx81](https://github.com/kbx81) +- [esp32_rmt_led_strip] Add `COMPONENT_SCHEMA` extending [esphome#7918](https://github.com/esphome/esphome/pull/7918) by [@jesserockz](https://github.com/jesserockz) +- [esp32] Use pioarduino + IDF 5.1.5 as default for IDF builds [esphome#7706](https://github.com/esphome/esphome/pull/7706) by [@kbx81](https://github.com/kbx81) +- Bump actions/cache from 4.1.2 to 4.2.0 [esphome#7926](https://github.com/esphome/esphome/pull/7926) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.1.2 to 4.2.0 in /.github/actions/restore-python [esphome#7925](https://github.com/esphome/esphome/pull/7925) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add OCI Image Labels [esphome#7924](https://github.com/esphome/esphome/pull/7924) by [@Passific](https://github.com/Passific) +- Move docker oci labels to correct image [esphome#7927](https://github.com/esphome/esphome/pull/7927) by [@jesserockz](https://github.com/jesserockz) +- Update project description [esphome#7928](https://github.com/esphome/esphome/pull/7928) by [@jesserockz](https://github.com/jesserockz) +- [modbus] More clean-up [esphome#7921](https://github.com/esphome/esphome/pull/7921) by [@kbx81](https://github.com/kbx81) +- Add: Seeed Studio MR60BHA2 mmWave Sensor [esphome#7589](https://github.com/esphome/esphome/pull/7589) by [@limengdu](https://github.com/limengdu) (new-integration) +- Optimize QMC5883L reads [esphome#7889](https://github.com/esphome/esphome/pull/7889) by [@dnschneid](https://github.com/dnschneid) +- [display] Fix strftime overload ignoring alignment [esphome#7937](https://github.com/esphome/esphome/pull/7937) by [@jesserockz](https://github.com/jesserockz) +- Add font anti-aliasing for grayscale display [esphome#7934](https://github.com/esphome/esphome/pull/7934) by [@koreapyj](https://github.com/koreapyj) +- Bump pypa/gh-action-pypi-publish from 1.12.2 to 1.12.3 [esphome#7941](https://github.com/esphome/esphome/pull/7941) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [adc] Split files by platform [esphome#7940](https://github.com/esphome/esphome/pull/7940) by [@edwardtfn](https://github.com/edwardtfn) +- [const] Move `CONF_TEMPERATURE_COMPENSATION` to common const.py [esphome#7943](https://github.com/esphome/esphome/pull/7943) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Fix image `mode` property (Bugfix) [esphome#7938](https://github.com/esphome/esphome/pull/7938) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Add `on_change` event [esphome#7939](https://github.com/esphome/esphome/pull/7939) by [@clydebarrow](https://github.com/clydebarrow) +- Synchronise esp32 boards with platform version 51.03.07 [esphome#7945](https://github.com/esphome/esphome/pull/7945) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [i2c] Use correct macro to determine number of i2c peripherals for idf [esphome#7947](https://github.com/esphome/esphome/pull/7947) by [@jesserockz](https://github.com/jesserockz) +- [const] Add RMT CONF variables to const.py [esphome#7953](https://github.com/esphome/esphome/pull/7953) by [@swoboda1337](https://github.com/swoboda1337) +- [sgp30] Set default update interval to 60s [esphome#7952](https://github.com/esphome/esphome/pull/7952) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [dallas_temp] Move delay_microseconds_safe to iram [esphome#7957](https://github.com/esphome/esphome/pull/7957) by [@swoboda1337](https://github.com/swoboda1337) +- [i2s_audio] Bugfix: Correctly set ring buffer size [esphome#7959](https://github.com/esphome/esphome/pull/7959) by [@kahrendt](https://github.com/kahrendt) +- [adc] Restore missing LIBRETINY code in a separated file [esphome#7955](https://github.com/esphome/esphome/pull/7955) by [@edwardtfn](https://github.com/edwardtfn) +- [font] cleanly handle font file format exception (Bugfix) [esphome#7970](https://github.com/esphome/esphome/pull/7970) by [@clydebarrow](https://github.com/clydebarrow) +- [dashboard] Accept basic auth header [esphome#7965](https://github.com/esphome/esphome/pull/7965) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20241217.1 [esphome#7971](https://github.com/esphome/esphome/pull/7971) by [@jesserockz](https://github.com/jesserockz) +- [esp32_ble] Use RAMAllocator to avoid panic abort from `new` [esphome#7936](https://github.com/esphome/esphome/pull/7936) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.2.0.mdx b/src/content/docs/changelog/2024.2.0.mdx new file mode 100644 index 0000000000..47a96cb63a --- /dev/null +++ b/src/content/docs/changelog/2024.2.0.mdx @@ -0,0 +1,226 @@ +--- +description: "Changelog for ESPHome 2024.2.0." +title: "ESPHome 2024.2.0 - 21st February 2024" +pagefind: false +slug: "changelog/2024.2.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## micro Wake Word + +ESPHome implements an on-device wake word detection framework from [microWakeWord](https://github.com/kahrendt/microWakeWord). +See the [component documentation](/components/micro_wake_word/) for details on how to use it. + +Check out the live stream replay below for more details about how it works and came to be. + +{/* markdownlint-disable-next-line MD033 */} + + +## BME280 changes + +[@apbodrov](https://github.com/apbodrov) has added support for the BME280 sensor over SPI. This change is a breaking change +for any existing configurations using the BME280 over I2C as the platform name has been changed from +`bme280` to `bme280_i2c`. There are no other configuration changes required to continue using the BME280 over I2C. +See the [component documentation](/components/sensor/bme280/) for the latest configuration variables. + +## CSE7766 changes + +[@ssieb](https://github.com/ssieb) has changed the CSE7766 sensor from appearing to be a polling component. +It has a high update rate, so if you don't want to send a lot of data to HA, you can +add the [throttle_average](/components/sensor#sensor-filters) filter +with the time period you were using for the update interval (the default is 60s) to each +sensor. The example in the sensor doc page has been updated to show this. + +{/* markdownlint-disable MD013 */} + +## Release 2024.2.1 - February 26 + +- Add missing timeout to "async_request" [esphome#6267](https://github.com/esphome/esphome/pull/6267) by [@jesserockz](https://github.com/jesserockz) +- Bump zeroconf timeout to 3000 [esphome#6270](https://github.com/esphome/esphome/pull/6270) by [@jesserockz](https://github.com/jesserockz) +- web_server: Add a position property for cover entities that have the supports position trait [esphome#6269](https://github.com/esphome/esphome/pull/6269) by [@DanielBaulig](https://github.com/DanielBaulig) +- allow multiple emc2101 [esphome#6272](https://github.com/esphome/esphome/pull/6272) by [@ssieb](https://github.com/ssieb) +- Fix RP2040 SPI pin validation [esphome#6277](https://github.com/esphome/esphome/pull/6277) by [@kbx81](https://github.com/kbx81) +- dashboard: move storage json update to a background task in edit save [esphome#6280](https://github.com/esphome/esphome/pull/6280) by [@bdraco](https://github.com/bdraco) +- make output optional for speed fan [esphome#6274](https://github.com/esphome/esphome/pull/6274) by [@ssieb](https://github.com/ssieb) +- fix throttle average nan handling [esphome#6275](https://github.com/esphome/esphome/pull/6275) by [@ssieb](https://github.com/ssieb) +- Fix thermostat supplemental actions [esphome#6282](https://github.com/esphome/esphome/pull/6282) by [@kbx81](https://github.com/kbx81) + +## Release 2024.2.2 - March 6 + +- CSE7766: Fix energy calculation [esphome#6286](https://github.com/esphome/esphome/pull/6286) by [@puuu](https://github.com/puuu) +- handling with the negative temperature in the sensor tmp102 [esphome#6316](https://github.com/esphome/esphome/pull/6316) by [@FlyingFeng2021](https://github.com/FlyingFeng2021) +- fix tmp102 negative calculation [esphome#6320](https://github.com/esphome/esphome/pull/6320) by [@ssieb](https://github.com/ssieb) +- auto load output for now [esphome#6309](https://github.com/esphome/esphome/pull/6309) by [@ssieb](https://github.com/ssieb) +- Add wake word phrase to voice assistant start command [esphome#6290](https://github.com/esphome/esphome/pull/6290) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- feat: add AS5600 component/sensor [esphome#5174](https://github.com/esphome/esphome/pull/5174) by [@ammmze](https://github.com/ammmze) (new-integration) +- Support for ST7567 display 128x64 (I2C, SPI) [esphome#5952](https://github.com/esphome/esphome/pull/5952) by [@latonita](https://github.com/latonita) (new-integration) +- BME280 SPI [esphome#5538](https://github.com/esphome/esphome/pull/5538) by [@apbodrov](https://github.com/apbodrov) (new-integration) (breaking-change) +- Add support for VEML3235 lux sensor [esphome#5959](https://github.com/esphome/esphome/pull/5959) by [@kbx81](https://github.com/kbx81) (new-integration) +- Add support of Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensor [esphome#5730](https://github.com/esphome/esphome/pull/5730) by [@Benichou34](https://github.com/Benichou34) (new-integration) +- Add combination sensor and remove absorbed kalman_combinator component [esphome#5438](https://github.com/esphome/esphome/pull/5438) by [@kahrendt](https://github.com/kahrendt) (new-integration) (breaking-change) +- Add micro_wake_word component [esphome#6136](https://github.com/esphome/esphome/pull/6136) by [@kahrendt](https://github.com/kahrendt) (new-integration) + +### Breaking Changes + +- PMSx003 add relevant device and state classes to default config [esphome#5633](https://github.com/esphome/esphome/pull/5633) by [@wheimbigner](https://github.com/wheimbigner) (breaking-change) +- BME280 SPI [esphome#5538](https://github.com/esphome/esphome/pull/5538) by [@apbodrov](https://github.com/apbodrov) (new-integration) (breaking-change) +- convert cse7766 to non-polling [esphome#6095](https://github.com/esphome/esphome/pull/6095) by [@ssieb](https://github.com/ssieb) (breaking-change) +- Add combination sensor and remove absorbed kalman_combinator component [esphome#5438](https://github.com/esphome/esphome/pull/5438) by [@kahrendt](https://github.com/kahrendt) (new-integration) (breaking-change) + +### Beta Changes + +- AUTO_LOAD `sensor` for `shelly_dimmer` [esphome#6223](https://github.com/esphome/esphome/pull/6223) by [@kbx81](https://github.com/kbx81) +- Add more debugging logs to microWakeWord [esphome#6238](https://github.com/esphome/esphome/pull/6238) by [@kahrendt](https://github.com/kahrendt) +- Fix to RF receiver for Drayton Digistat heating controller [esphome#6235](https://github.com/esphome/esphome/pull/6235) by [@marshn](https://github.com/marshn) +- WRGB Use correct multiplier [esphome#6237](https://github.com/esphome/esphome/pull/6237) by [@mhetzi](https://github.com/mhetzi) +- Add optional minimum esphome version to microWakeWord manifest [esphome#6240](https://github.com/esphome/esphome/pull/6240) by [@jesserockz](https://github.com/jesserockz) +- Fix xl9535 pin reads [esphome#6242](https://github.com/esphome/esphome/pull/6242) by [@jesserockz](https://github.com/jesserockz) +- hold interrupt disable for dallas one-wire [esphome#6244](https://github.com/esphome/esphome/pull/6244) by [@ssieb](https://github.com/ssieb) +- Fix tm1651 enum [esphome#6248](https://github.com/esphome/esphome/pull/6248) by [@kbx81](https://github.com/kbx81) +- Clear UART read buffer before sending next command [esphome#6200](https://github.com/esphome/esphome/pull/6200) by [@fototakas](https://github.com/fototakas) +- Voice Assistant: add on_idle trigger and fix nevermind [esphome#6141](https://github.com/esphome/esphome/pull/6141) by [@synesthesiam](https://github.com/synesthesiam) +- Tuya Fan component fix to handle enum datapoint type [esphome#6135](https://github.com/esphome/esphome/pull/6135) by [@sibowler](https://github.com/sibowler) + +### All changes + +- Bump esptool from 4.6.2 to 4.7.0 [esphome#5935](https://github.com/esphome/esphome/pull/5935) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/download-artifact from 3.0.2 to 4.0.0 [esphome#5936](https://github.com/esphome/esphome/pull/5936) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump build-image action versions [esphome#5954](https://github.com/esphome/esphome/pull/5954) by [@jesserockz](https://github.com/jesserockz) +- Revert "Bump build-image action versions" [esphome#5955](https://github.com/esphome/esphome/pull/5955) by [@jesserockz](https://github.com/jesserockz) +- Revert "Bump actions/download-artifact from 3.0.2 to 4.0.0" [esphome#5956](https://github.com/esphome/esphome/pull/5956) by [@jesserockz](https://github.com/jesserockz) +- Bump zeroconf from 0.130.0 to 0.131.0 [esphome#5967](https://github.com/esphome/esphome/pull/5967) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add ability to lock to set mode [esphome#5924](https://github.com/esphome/esphome/pull/5924) by [@ysmilda](https://github.com/ysmilda) +- feat: add AS5600 component/sensor [esphome#5174](https://github.com/esphome/esphome/pull/5174) by [@ammmze](https://github.com/ammmze) (new-integration) +- Add default substitutions for package includes [esphome#5752](https://github.com/esphome/esphome/pull/5752) by [@mknjc](https://github.com/mknjc) +- Add gradient option to addressable color wipe effect [esphome#5689](https://github.com/esphome/esphome/pull/5689) by [@lifeisafractal](https://github.com/lifeisafractal) +- Added alarm processing for Haier component (hOn protocol) [esphome#5965](https://github.com/esphome/esphome/pull/5965) by [@paveldn](https://github.com/paveldn) +- Allow haier remote protocol to use lambdas [esphome#5898](https://github.com/esphome/esphome/pull/5898) by [@catlee](https://github.com/catlee) +- PMSx003 add relevant device and state classes to default config [esphome#5633](https://github.com/esphome/esphome/pull/5633) by [@wheimbigner](https://github.com/wheimbigner) (breaking-change) +- Add waveshare 2.7in V2 model [esphome#5903](https://github.com/esphome/esphome/pull/5903) by [@gumulka](https://github.com/gumulka) +- Add support for waveshare 2.9in B V3 version [esphome#5902](https://github.com/esphome/esphome/pull/5902) by [@gumulka](https://github.com/gumulka) +- Fix pin reuse in test1 [esphome#5978](https://github.com/esphome/esphome/pull/5978) by [@jesserockz](https://github.com/jesserockz) +- Add Waveshare 1.47in 172x320 to ST7789v component [esphome#5884](https://github.com/esphome/esphome/pull/5884) by [@mrtoy-me](https://github.com/mrtoy-me) +- (fingerprint_grow) Added on_finger_scan_invalid automation. [esphome#5885](https://github.com/esphome/esphome/pull/5885) by [@RubenNL](https://github.com/RubenNL) +- Alarm panel: Add changes to support enhanced features [esphome#5671](https://github.com/esphome/esphome/pull/5671) by [@hwstar](https://github.com/hwstar) +- support default pins for adafruit esp32 feather v2 [esphome#5482](https://github.com/esphome/esphome/pull/5482) by [@sbrudenell](https://github.com/sbrudenell) +- Bug: Unwanted change resistance in x9c component [esphome#5483](https://github.com/esphome/esphome/pull/5483) by [@fizista](https://github.com/fizista) +- Improvements to RF receiver for Drayton Digistat heating controller [esphome#5504](https://github.com/esphome/esphome/pull/5504) by [@marshn](https://github.com/marshn) +- Reduce memory usage with StringRef in MQTT Components [esphome#5719](https://github.com/esphome/esphome/pull/5719) by [@kahrendt](https://github.com/kahrendt) +- Nextion allow underscore on names [esphome#5979](https://github.com/esphome/esphome/pull/5979) by [@edwardtfn](https://github.com/edwardtfn) +- Add Keeloq RF protocol [esphome#5511](https://github.com/esphome/esphome/pull/5511) by [@marshn](https://github.com/marshn) +- Add a Binary Sensor Filter for state settling [esphome#5900](https://github.com/esphome/esphome/pull/5900) by [@cottsay](https://github.com/cottsay) +- Lint the script folder files [esphome#5991](https://github.com/esphome/esphome/pull/5991) by [@jesserockz](https://github.com/jesserockz) +- web_server support for home assistant like styling [esphome#5854](https://github.com/esphome/esphome/pull/5854) by [@afarago](https://github.com/afarago) +- [Touchscreen] Add expire of touch record. [esphome#5986](https://github.com/esphome/esphome/pull/5986) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- Support for ST7567 display 128x64 (I2C, SPI) [esphome#5952](https://github.com/esphome/esphome/pull/5952) by [@latonita](https://github.com/latonita) (new-integration) +- Add constants used by multiple display drivers to global const.py [esphome#6033](https://github.com/esphome/esphome/pull/6033) by [@clydebarrow](https://github.com/clydebarrow) +- Nextion queue size [esphome#6029](https://github.com/esphome/esphome/pull/6029) by [@edwardtfn](https://github.com/edwardtfn) +- Ble client additions and fixes [esphome#5277](https://github.com/esphome/esphome/pull/5277) by [@clydebarrow](https://github.com/clydebarrow) +- HaierProtocol library updated to 0.9.25 to fix the answer_timeout bug [esphome#6015](https://github.com/esphome/esphome/pull/6015) by [@paveldn](https://github.com/paveldn) +- GT911 touchscreen: Fix bug causing touch button release to fail [esphome#6042](https://github.com/esphome/esphome/pull/6042) by [@clydebarrow](https://github.com/clydebarrow) +- Display: Introduce `draw_pixels_at()` method for fast block display rendering [esphome#6034](https://github.com/esphome/esphome/pull/6034) by [@clydebarrow](https://github.com/clydebarrow) +- clang-format and clang-tidy scripts: More robust algorithm to find correct executable [esphome#6041](https://github.com/esphome/esphome/pull/6041) by [@clydebarrow](https://github.com/clydebarrow) +- Don't crash with invalid adc pin [esphome#6059](https://github.com/esphome/esphome/pull/6059) by [@ssieb](https://github.com/ssieb) +- Add questionmark to default glyphs. [esphome#6053](https://github.com/esphome/esphome/pull/6053) by [@RubenNL](https://github.com/RubenNL) +- pylontech: fix voltage_low and voltage_high wrong unit [esphome#6060](https://github.com/esphome/esphome/pull/6060) by [@functionpointer](https://github.com/functionpointer) +- Bump flake8 from 6.1.0 to 7.0.0 [esphome#6058](https://github.com/esphome/esphome/pull/6058) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Nextion enable upload from https when using esp-idf [esphome#6051](https://github.com/esphome/esphome/pull/6051) by [@edwardtfn](https://github.com/edwardtfn) +- Extends UART change at runtime to ESP8266 [esphome#6019](https://github.com/esphome/esphome/pull/6019) by [@edwardtfn](https://github.com/edwardtfn) +- Nextion draw QR code at runtime [esphome#6027](https://github.com/esphome/esphome/pull/6027) by [@edwardtfn](https://github.com/edwardtfn) +- Extend i2s config options [esphome#6056](https://github.com/esphome/esphome/pull/6056) by [@Hadatko](https://github.com/Hadatko) +- Add getter for image data_start [esphome#6036](https://github.com/esphome/esphome/pull/6036) by [@clydebarrow](https://github.com/clydebarrow) +- Bump hypothesis to 6.92.1 [esphome#6011](https://github.com/esphome/esphome/pull/6011) by [@bdraco](https://github.com/bdraco) +- Bump recommended ESP32 IDF to 4.4.6 [esphome#6048](https://github.com/esphome/esphome/pull/6048) by [@bdraco](https://github.com/bdraco) +- Bump pytest from 7.4.3 to 7.4.4 [esphome#6046](https://github.com/esphome/esphome/pull/6046) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- dashboard: refactor ping implementation to be more efficient [esphome#6002](https://github.com/esphome/esphome/pull/6002) by [@bdraco](https://github.com/bdraco) +- Bump pytest-asyncio from 0.23.2 to 0.23.3 [esphome#6047](https://github.com/esphome/esphome/pull/6047) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 23.12.0 to 23.12.1 [esphome#6018](https://github.com/esphome/esphome/pull/6018) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Run python tests on windows and macos [esphome#6010](https://github.com/esphome/esphome/pull/6010) by [@bdraco](https://github.com/bdraco) +- BME280 SPI [esphome#5538](https://github.com/esphome/esphome/pull/5538) by [@apbodrov](https://github.com/apbodrov) (new-integration) (breaking-change) +- Actions to enable and disable WireGuard connection [esphome#5690](https://github.com/esphome/esphome/pull/5690) by [@droscy](https://github.com/droscy) +- hydreon_rgxx - fix missing cg.add(var.set_model(...)) [esphome#6065](https://github.com/esphome/esphome/pull/6065) by [@mrtoy-me](https://github.com/mrtoy-me) +- Bump pillow to 10.2.0. [esphome#6091](https://github.com/esphome/esphome/pull/6091) by [@pfrenssen](https://github.com/pfrenssen) +- convert cse7766 to non-polling [esphome#6095](https://github.com/esphome/esphome/pull/6095) by [@ssieb](https://github.com/ssieb) (breaking-change) +- Use touch state from ft63x6 driver. [esphome#6055](https://github.com/esphome/esphome/pull/6055) by [@nielsnl68](https://github.com/nielsnl68) +- update script/setup so it works fine on windows [esphome#6087](https://github.com/esphome/esphome/pull/6087) by [@nielsnl68](https://github.com/nielsnl68) +- add Pico-ResTouch-LCD-3.5 [esphome#6078](https://github.com/esphome/esphome/pull/6078) by [@nielsnl68](https://github.com/nielsnl68) +- Revert "add Pico-ResTouch-LCD-3.5" [esphome#6098](https://github.com/esphome/esphome/pull/6098) by [@nielsnl68](https://github.com/nielsnl68) +- Add triangle shapes to display component [esphome#6096](https://github.com/esphome/esphome/pull/6096) by [@mathieu-mp](https://github.com/mathieu-mp) +- Fingerprint_grow: Trigger on finger scan start and on finger scan misplaced [esphome#6003](https://github.com/esphome/esphome/pull/6003) by [@alexborro](https://github.com/alexborro) +- Add continuous option to the graph [esphome#6093](https://github.com/esphome/esphome/pull/6093) by [@ssieb](https://github.com/ssieb) +- Add NFC binary sensor platform [esphome#6068](https://github.com/esphome/esphome/pull/6068) by [@kbx81](https://github.com/kbx81) +- Socket: Add recvfrom method to receive UDP with source address. [esphome#6103](https://github.com/esphome/esphome/pull/6103) by [@clydebarrow](https://github.com/clydebarrow) +- Add support for VEML3235 lux sensor [esphome#5959](https://github.com/esphome/esphome/pull/5959) by [@kbx81](https://github.com/kbx81) (new-integration) +- CV: tidy up Schema wrapper [esphome#6105](https://github.com/esphome/esphome/pull/6105) by [@jesserockz](https://github.com/jesserockz) +- Add support X.509 client certificates for MQTT. [esphome#5778](https://github.com/esphome/esphome/pull/5778) by [@h2zero](https://github.com/h2zero) +- Fix color observation for triangle outline in display component [esphome#6107](https://github.com/esphome/esphome/pull/6107) by [@mathieu-mp](https://github.com/mathieu-mp) +- Add support of Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensor [esphome#5730](https://github.com/esphome/esphome/pull/5730) by [@Benichou34](https://github.com/Benichou34) (new-integration) +- Proposal: Test yaml for each component [esphome#5398](https://github.com/esphome/esphome/pull/5398) by [@Fabian-Schmidt](https://github.com/Fabian-Schmidt) +- WiFi fast_connect: save/load BSSID and channel for faster connect from sleep [esphome#5931](https://github.com/esphome/esphome/pull/5931) by [@rguca](https://github.com/rguca) +- Fixes Waveshare 7.5in B V2 and V3 [esphome#6079](https://github.com/esphome/esphome/pull/6079) by [@Pofilo](https://github.com/Pofilo) +- Add combination sensor and remove absorbed kalman_combinator component [esphome#5438](https://github.com/esphome/esphome/pull/5438) by [@kahrendt](https://github.com/kahrendt) (new-integration) (breaking-change) +- Bump platformio from 6.1.11 to 6.1.13 [esphome#6086](https://github.com/esphome/esphome/pull/6086) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 3.3.2 to 4.0.0 [esphome#6110](https://github.com/esphome/esphome/pull/6110) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Enable networking and some other components on host platform [esphome#6114](https://github.com/esphome/esphome/pull/6114) by [@clydebarrow](https://github.com/clydebarrow) +- Fix time component for host platform [esphome#6118](https://github.com/esphome/esphome/pull/6118) by [@clydebarrow](https://github.com/clydebarrow) +- Add quad spi features [esphome#5925](https://github.com/esphome/esphome/pull/5925) by [@clydebarrow](https://github.com/clydebarrow) +- add AM2120 device type [esphome#6115](https://github.com/esphome/esphome/pull/6115) by [@alexbuit](https://github.com/alexbuit) +- Add support for Waveshare EPD 2.13" V3 [esphome#5363](https://github.com/esphome/esphome/pull/5363) by [@clydebarrow](https://github.com/clydebarrow) +- OTA 2 which confirm each written chunk [esphome#6066](https://github.com/esphome/esphome/pull/6066) by [@tomaszduda23](https://github.com/tomaszduda23) +- Remove `optional<>` for pointer types [esphome#6120](https://github.com/esphome/esphome/pull/6120) by [@kroimon](https://github.com/kroimon) +- Improve temperature precision in BME280 and BMP280 [esphome#6124](https://github.com/esphome/esphome/pull/6124) by [@jxl77](https://github.com/jxl77) +- Nextion TFT upload IDF memory optimization [esphome#6128](https://github.com/esphome/esphome/pull/6128) by [@edwardtfn](https://github.com/edwardtfn) +- Add support for Pico-ResTouch-LCD-3.5 to ili9xxx driver [esphome#6129](https://github.com/esphome/esphome/pull/6129) by [@clydebarrow](https://github.com/clydebarrow) +- Ensure filename is shown when YAML raises an error [esphome#6139](https://github.com/esphome/esphome/pull/6139) by [@bdraco](https://github.com/bdraco) +- ILI9XXX: Restore offset usage in set_addr_window [esphome#6147](https://github.com/esphome/esphome/pull/6147) by [@clydebarrow](https://github.com/clydebarrow) +- Minimum 1 for full_update_every to prevent IntegerDivideByZero. [esphome#6150](https://github.com/esphome/esphome/pull/6150) by [@RubenNL](https://github.com/RubenNL) +- Support tri-color waveshare eink displays 2.7inch B and B V2 [esphome#4238](https://github.com/esphome/esphome/pull/4238) by [@rnauber](https://github.com/rnauber) +- Synchronise Device Classes from Home Assistant [esphome#6158](https://github.com/esphome/esphome/pull/6158) by [@esphomebot](https://github.com/esphomebot) +- dfrobot_sen0395: Use setLatency instead of outputLatency [esphome#5665](https://github.com/esphome/esphome/pull/5665) by [@jfroy](https://github.com/jfroy) +- Add some components to the new testing framework (A part 1) [esphome#6142](https://github.com/esphome/esphome/pull/6142) by [@kbx81](https://github.com/kbx81) +- WRGB or RGBW? WS2814 [esphome#6164](https://github.com/esphome/esphome/pull/6164) by [@mhetzi](https://github.com/mhetzi) +- Add some components to the new testing framework (A part 2) [esphome#6162](https://github.com/esphome/esphome/pull/6162) by [@kbx81](https://github.com/kbx81) +- Bump aioesphomeapi to 21.0.2 [esphome#6188](https://github.com/esphome/esphome/pull/6188) by [@bdraco](https://github.com/bdraco) +- Add some components to the new testing framework (B) [esphome#6173](https://github.com/esphome/esphome/pull/6173) by [@kbx81](https://github.com/kbx81) +- Add "transformer_active" flag for use in effects. [esphome#6157](https://github.com/esphome/esphome/pull/6157) by [@TikiBill](https://github.com/TikiBill) +- CSE7766: fix power and current measurements at low loads [esphome#6180](https://github.com/esphome/esphome/pull/6180) by [@twasilczyk](https://github.com/twasilczyk) +- host platform: improvements and bugfixes [esphome#6137](https://github.com/esphome/esphome/pull/6137) by [@clydebarrow](https://github.com/clydebarrow) +- WLED Sync fix and BK72XX support [esphome#6190](https://github.com/esphome/esphome/pull/6190) by [@ChuckMash](https://github.com/ChuckMash) +- Add missing vector.h for lightwaverf [esphome#6196](https://github.com/esphome/esphome/pull/6196) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (C) [esphome#6174](https://github.com/esphome/esphome/pull/6174) by [@kbx81](https://github.com/kbx81) +- update docstrings in cpp_generator.py [esphome#6212](https://github.com/esphome/esphome/pull/6212) by [@nielsnl68](https://github.com/nielsnl68) +- Fixed group mask logic for WLED Sync fix [esphome#6193](https://github.com/esphome/esphome/pull/6193) by [@ChuckMash](https://github.com/ChuckMash) +- Add micro_wake_word component [esphome#6136](https://github.com/esphome/esphome/pull/6136) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- AUTO_LOAD `sensor` for `shelly_dimmer` [esphome#6223](https://github.com/esphome/esphome/pull/6223) by [@kbx81](https://github.com/kbx81) +- Add more debugging logs to microWakeWord [esphome#6238](https://github.com/esphome/esphome/pull/6238) by [@kahrendt](https://github.com/kahrendt) +- Fix to RF receiver for Drayton Digistat heating controller [esphome#6235](https://github.com/esphome/esphome/pull/6235) by [@marshn](https://github.com/marshn) +- WRGB Use correct multiplier [esphome#6237](https://github.com/esphome/esphome/pull/6237) by [@mhetzi](https://github.com/mhetzi) +- Add optional minimum esphome version to microWakeWord manifest [esphome#6240](https://github.com/esphome/esphome/pull/6240) by [@jesserockz](https://github.com/jesserockz) +- Fix xl9535 pin reads [esphome#6242](https://github.com/esphome/esphome/pull/6242) by [@jesserockz](https://github.com/jesserockz) +- hold interrupt disable for dallas one-wire [esphome#6244](https://github.com/esphome/esphome/pull/6244) by [@ssieb](https://github.com/ssieb) +- Fix tm1651 enum [esphome#6248](https://github.com/esphome/esphome/pull/6248) by [@kbx81](https://github.com/kbx81) +- Clear UART read buffer before sending next command [esphome#6200](https://github.com/esphome/esphome/pull/6200) by [@fototakas](https://github.com/fototakas) +- Voice Assistant: add on_idle trigger and fix nevermind [esphome#6141](https://github.com/esphome/esphome/pull/6141) by [@synesthesiam](https://github.com/synesthesiam) +- Tuya Fan component fix to handle enum datapoint type [esphome#6135](https://github.com/esphome/esphome/pull/6135) by [@sibowler](https://github.com/sibowler) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.3.0.mdx b/src/content/docs/changelog/2024.3.0.mdx new file mode 100644 index 0000000000..9e82d1fc7b --- /dev/null +++ b/src/content/docs/changelog/2024.3.0.mdx @@ -0,0 +1,248 @@ +--- +description: "Changelog for ESPHome 2024.3.0." +title: "ESPHome 2024.3.0 - 20th March 2024" +pagefind: false +slug: "changelog/2024.3.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Dates + +ESPHome now has support for `date` entities that can be set from the frontend (like Home Assistant) for +you to check against and execute automations in the future. + +ESPHome Dates require Home Assistant 2024.4 or later. + +## IPv6 + +ESPHome is now prepared for the future! The future that is the old IPv6 that is. +Dualstack is added and it could now have up to 5 ip addresses of any type, and communication with Home assistant, +MQTT and NTP works with IPv6. ESPHome still depends on IPv4, but the crystal ball shows sign of IPv6-only networks. + +If you are building an [External Components](/components/external_components/) or you use +`network::get_ip_address()`, `wifi::global_wifi_component->get_ip_address()` or +`ethernet::global_eth_component->get_ip_address()`, these functions have been renamed to +`::get_ip_addresses()` respectively and now return a list of all IP addresses. + +{/* markdownlint-disable MD013 */} + +## Release 2024.3.1 - March 27 + +- AHT10: Fix bug [esphome#6409](https://github.com/esphome/esphome/pull/6409) by [@clydebarrow](https://github.com/clydebarrow) +- microWakeWord: Fix model path joining [esphome#6426](https://github.com/esphome/esphome/pull/6426) by [@ebw44](https://github.com/ebw44) +- Don't compile strptime unless its required [esphome#6424](https://github.com/esphome/esphome/pull/6424) by [@gabest11](https://github.com/gabest11) +- Fix editor live validation [esphome#6431](https://github.com/esphome/esphome/pull/6431) by [@bdraco](https://github.com/bdraco) + +## Release 2024.3.2 - April 4 + +- Fix logger compile error on ESP32-C6 [esphome#6323](https://github.com/esphome/esphome/pull/6323) by [@DAVe3283](https://github.com/DAVe3283) +- Add missing ethernet types [esphome#6444](https://github.com/esphome/esphome/pull/6444) by [@ssieb](https://github.com/ssieb) +- fix: changing the content source when playing is paused blocks the player [esphome#6454](https://github.com/esphome/esphome/pull/6454) by [@NewoPL](https://github.com/NewoPL) + +## Thank you for your support + +We would like to thank all Home Assistant Cloud subscribers for their support. It allows [Nabu Casa](https://nabucasa.com/) to +employ two developers to maintain and further develop the ESPHome project. + +## Full list of changes + +### New Components + +- New component: ADE7880 voltage/current/power/energy sensor [esphome#5242](https://github.com/esphome/esphome/pull/5242) by [@kpfleming](https://github.com/kpfleming) (new-integration) +- Add Uponor Smatrix component [esphome#5769](https://github.com/esphome/esphome/pull/5769) by [@kroimon](https://github.com/kroimon) (new-integration) +- Support for MS8607 PHT (Pressure Humidity Temperature) sensor [esphome#3307](https://github.com/esphome/esphome/pull/3307) by [@e28eta](https://github.com/e28eta) (new-integration) +- Add datetime date entities [esphome#6191](https://github.com/esphome/esphome/pull/6191) by [@RFDarter](https://github.com/RFDarter) (new-integration) +- Add AGS10 Sensor [esphome#6070](https://github.com/esphome/esphome/pull/6070) by [@mak-42](https://github.com/mak-42) (new-integration) +- ads1118 component [esphome#5711](https://github.com/esphome/esphome/pull/5711) by [@solomondg1](https://github.com/solomondg1) (new-integration) +- Add CST816 touchscreen driver [esphome#5941](https://github.com/esphome/esphome/pull/5941) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- AM2315C Temperature + Humidity Sensor [esphome#6266](https://github.com/esphome/esphome/pull/6266) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- Touchscreen: add support for CST226 controller chip [esphome#6151](https://github.com/esphome/esphome/pull/6151) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Drivers for RGB 16 bit parallel displays [esphome#5872](https://github.com/esphome/esphome/pull/5872) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- VEML7700 and VEML6030 light sensors [esphome#6067](https://github.com/esphome/esphome/pull/6067) by [@latonita](https://github.com/latonita) (new-integration) +- Add Seeed Studio mmWave Kit MR24HPC1 [esphome#5761](https://github.com/esphome/esphome/pull/5761) by [@limengdu](https://github.com/limengdu) (new-integration) +- Add driver for quad SPI AMOLED displays [esphome#6354](https://github.com/esphome/esphome/pull/6354) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- feat: Add HTU31D Support [esphome#5805](https://github.com/esphome/esphome/pull/5805) by [@betterengineering](https://github.com/betterengineering) (new-integration) +- Emmeti infrared climate support [esphome#5197](https://github.com/esphome/esphome/pull/5197) by [@E440QF](https://github.com/E440QF) (new-integration) +- Added Kamstrup Multical 40x component [esphome#4200](https://github.com/esphome/esphome/pull/4200) by [@cfeenstra1024](https://github.com/cfeenstra1024) (new-integration) + +### New Platforms + +- Additional sensors and binary sensors support for Haier Climate [esphome#6257](https://github.com/esphome/esphome/pull/6257) by [@paveldn](https://github.com/paveldn) (breaking-change) (new-platform) +- add template fan [esphome#6310](https://github.com/esphome/esphome/pull/6310) by [@ssieb](https://github.com/ssieb) (breaking-change) (new-platform) + +### Breaking Changes + +- LTR390 - Multiple bugfixes [esphome#6161](https://github.com/esphome/esphome/pull/6161) by [@sjtrny](https://github.com/sjtrny) (breaking-change) +- Touchscreen component and driver fixes [esphome#5997](https://github.com/esphome/esphome/pull/5997) by [@nielsnl68](https://github.com/nielsnl68) (breaking-change) +- Additional sensors and binary sensors support for Haier Climate [esphome#6257](https://github.com/esphome/esphome/pull/6257) by [@paveldn](https://github.com/paveldn) (breaking-change) (new-platform) +- add template fan [esphome#6310](https://github.com/esphome/esphome/pull/6310) by [@ssieb](https://github.com/ssieb) (breaking-change) (new-platform) + +### Beta Changes + +- SPI: Revert clk_pin to standard output pin schema [esphome#6368](https://github.com/esphome/esphome/pull/6368) by [@clydebarrow](https://github.com/clydebarrow) +- Allow actions in web_server to be executed via GET method [esphome#5938](https://github.com/esphome/esphome/pull/5938) by [@afarago](https://github.com/afarago) +- fix servo restore [esphome#6370](https://github.com/esphome/esphome/pull/6370) by [@ssieb](https://github.com/ssieb) +- Don't try to get IPv6 addresses when disabled [esphome#6366](https://github.com/esphome/esphome/pull/6366) by [@HeMan](https://github.com/HeMan) +- Use AQI device class [esphome#6376](https://github.com/esphome/esphome/pull/6376) by [@fgsch](https://github.com/fgsch) +- Fix list-components when PR is not targeting dev [esphome#6375](https://github.com/esphome/esphome/pull/6375) by [@jesserockz](https://github.com/jesserockz) +- allow negative ppm for sensair [esphome#6385](https://github.com/esphome/esphome/pull/6385) by [@ssieb](https://github.com/ssieb) +- microWakeWord - add new ops and small improvements [esphome#6360](https://github.com/esphome/esphome/pull/6360) by [@kahrendt](https://github.com/kahrendt) +- Fix compilation for uponor_smatrix without time component [esphome#6389](https://github.com/esphome/esphome/pull/6389) by [@kroimon](https://github.com/kroimon) +- Shows component operation time in `ms` [esphome#6388](https://github.com/esphome/esphome/pull/6388) by [@edwardtfn](https://github.com/edwardtfn) +- IPv6 can't be enabled for libretiny [esphome#6387](https://github.com/esphome/esphome/pull/6387) by [@HeMan](https://github.com/HeMan) +- Replace name and friendly name in full adopted configs [esphome#4456](https://github.com/esphome/esphome/pull/4456) by [@jesserockz](https://github.com/jesserockz) +- Fix bug in `remote_base` conditional [esphome#6281](https://github.com/esphome/esphome/pull/6281) by [@swoboda1337](https://github.com/swoboda1337) +- Fix sending packets to uponor_smatrix devices [esphome#6392](https://github.com/esphome/esphome/pull/6392) by [@kroimon](https://github.com/kroimon) +- Fix wrong initialization of vectors in ade7953_i2c [esphome#6393](https://github.com/esphome/esphome/pull/6393) by [@kroimon](https://github.com/kroimon) +- ld2420: Firmware v1.5.4+ bug workaround [esphome#6168](https://github.com/esphome/esphome/pull/6168) by [@descipher](https://github.com/descipher) +- Require xsrf/csrf when using a password [esphome#6396](https://github.com/esphome/esphome/pull/6396) by [@jesserockz](https://github.com/jesserockz) +- AHT10: Use state machine to avoid blocking delay [esphome#6401](https://github.com/esphome/esphome/pull/6401) by [@clydebarrow](https://github.com/clydebarrow) +- Show component warnings and errors in the log; [esphome#6400](https://github.com/esphome/esphome/pull/6400) by [@clydebarrow](https://github.com/clydebarrow) +- web_server support for v3 [esphome#6203](https://github.com/esphome/esphome/pull/6203) by [@RFDarter](https://github.com/RFDarter) + +### All changes + +- Bump openssh-client to 1:9.2p1-2+deb12u2 [esphome#6216](https://github.com/esphome/esphome/pull/6216) by [@jesserockz](https://github.com/jesserockz) +- Add support for 1.8V-powered devices [esphome#6234](https://github.com/esphome/esphome/pull/6234) by [@bisbastuner](https://github.com/bisbastuner) +- Adjust HeatpumpIR dependency [esphome#6222](https://github.com/esphome/esphome/pull/6222) by [@ivankravets](https://github.com/ivankravets) +- INA226 - fixed improper work with signed values, added configurable ADC parameters [esphome#6172](https://github.com/esphome/esphome/pull/6172) by [@latonita](https://github.com/latonita) +- Prevent network config on rpipico board [esphome#5832](https://github.com/esphome/esphome/pull/5832) by [@carlosV2](https://github.com/carlosV2) +- Bump pytest-asyncio from 0.23.3 to 0.23.5 [esphome#6201](https://github.com/esphome/esphome/pull/6201) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- New component: ADE7880 voltage/current/power/energy sensor [esphome#5242](https://github.com/esphome/esphome/pull/5242) by [@kpfleming](https://github.com/kpfleming) (new-integration) +- Add some components to the new testing framework (D) [esphome#6175](https://github.com/esphome/esphome/pull/6175) by [@kbx81](https://github.com/kbx81) +- Provide example devcontainer config for mdns and USB passthrough [esphome#6094](https://github.com/esphome/esphome/pull/6094) by [@linkedupbits](https://github.com/linkedupbits) +- Bump black from 23.12.1 to 24.2.0 [esphome#6221](https://github.com/esphome/esphome/pull/6221) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 7.4.4 to 8.0.1 [esphome#6246](https://github.com/esphome/esphome/pull/6246) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump codecov/codecov-action from 3 to 4 [esphome#6160](https://github.com/esphome/esphome/pull/6160) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 5.0.2 to 6.0.0 [esphome#6159](https://github.com/esphome/esphome/pull/6159) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump frenck/action-yamllint from 1.4.2 to 1.5.0 [esphome#6236](https://github.com/esphome/esphome/pull/6236) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump voluptuous from 0.14.1 to 0.14.2 [esphome#6181](https://github.com/esphome/esphome/pull/6181) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.15.0 to 3.15.1 [esphome#6247](https://github.com/esphome/esphome/pull/6247) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- LTR390 - Multiple bugfixes [esphome#6161](https://github.com/esphome/esphome/pull/6161) by [@sjtrny](https://github.com/sjtrny) (breaking-change) +- Fix yamllint [esphome#6253](https://github.com/esphome/esphome/pull/6253) by [@jesserockz](https://github.com/jesserockz) +- Improve the error message on OTA version mismatch [esphome#6259](https://github.com/esphome/esphome/pull/6259) by [@sybrenstuvel](https://github.com/sybrenstuvel) +- Bump aioesphomeapi from 21.0.2 to 22.0.0 [esphome#6263](https://github.com/esphome/esphome/pull/6263) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow ESP8266 to use multiple i2c busses [esphome#6145](https://github.com/esphome/esphome/pull/6145) by [@LouDou](https://github.com/LouDou) +- Add Uponor Smatrix component [esphome#5769](https://github.com/esphome/esphome/pull/5769) by [@kroimon](https://github.com/kroimon) (new-integration) +- Fix test_build_components for macOS sed [esphome#6278](https://github.com/esphome/esphome/pull/6278) by [@kbx81](https://github.com/kbx81) +- Allow to specify global build directory [esphome#6276](https://github.com/esphome/esphome/pull/6276) by [@werwolfby](https://github.com/werwolfby) +- Add device class support to text sensor [esphome#6202](https://github.com/esphome/esphome/pull/6202) by [@dougiteixeira](https://github.com/dougiteixeira) +- Bump pytest from 8.0.1 to 8.0.2 [esphome#6288](https://github.com/esphome/esphome/pull/6288) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Improve dualstack and IPv6 support [esphome#5449](https://github.com/esphome/esphome/pull/5449) by [@HeMan](https://github.com/HeMan) +- Waveshare e-ink 2IN9_V2 - fix full and partial update based on vendor… [esphome#5481](https://github.com/esphome/esphome/pull/5481) by [@darianndd](https://github.com/darianndd) +- Add RTTTL volume control. [esphome#5968](https://github.com/esphome/esphome/pull/5968) by [@nielsnl68](https://github.com/nielsnl68) +- Touchscreen component and driver fixes [esphome#5997](https://github.com/esphome/esphome/pull/5997) by [@nielsnl68](https://github.com/nielsnl68) (breaking-change) +- Add `on_update` trigger for Project versions [esphome#6298](https://github.com/esphome/esphome/pull/6298) by [@jesserockz](https://github.com/jesserockz) +- Bump peter-evans/create-pull-request from 6.0.0 to 6.0.1 [esphome#6302](https://github.com/esphome/esphome/pull/6302) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- CSE7766 Apparent Power & Power Factor calculations [esphome#6292](https://github.com/esphome/esphome/pull/6292) by [@DAVe3283](https://github.com/DAVe3283) +- Adding W5500 support to ethernet component [esphome#4424](https://github.com/esphome/esphome/pull/4424) by [@JeroenVanOort](https://github.com/JeroenVanOort) +- Fix numbering of ip_address sensors [esphome#6305](https://github.com/esphome/esphome/pull/6305) by [@HeMan](https://github.com/HeMan) +- Bump aioesphomeapi from 22.0.0 to 23.0.0 [esphome#6293](https://github.com/esphome/esphome/pull/6293) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add regular polygon shapes to display component [esphome#6108](https://github.com/esphome/esphome/pull/6108) by [@mathieu-mp](https://github.com/mathieu-mp) +- Fix return value in `core/automation.h` [esphome#6314](https://github.com/esphome/esphome/pull/6314) by [@FlyingFeng2021](https://github.com/FlyingFeng2021) +- aht10: Added new CMD and renamed existing CMD to match datasheet [esphome#6303](https://github.com/esphome/esphome/pull/6303) by [@cptskippy](https://github.com/cptskippy) +- handling with the negative temperature in the sensor tmp102 [esphome#6316](https://github.com/esphome/esphome/pull/6316) by [@FlyingFeng2021](https://github.com/FlyingFeng2021) +- x9c: fix off by 1 error [esphome#6318](https://github.com/esphome/esphome/pull/6318) by [@andynumber2](https://github.com/andynumber2) +- Support for MS8607 PHT (Pressure Humidity Temperature) sensor [esphome#3307](https://github.com/esphome/esphome/pull/3307) by [@e28eta](https://github.com/e28eta) (new-integration) +- Separate logger implementations for each hardware platform into different files [esphome#6167](https://github.com/esphome/esphome/pull/6167) by [@tomaszduda23](https://github.com/tomaszduda23) +- Additional sensors and binary sensors support for Haier Climate [esphome#6257](https://github.com/esphome/esphome/pull/6257) by [@paveldn](https://github.com/paveldn) (breaking-change) (new-platform) +- Add toggle command to cover web_server endpoint [esphome#6319](https://github.com/esphome/esphome/pull/6319) by [@heythisisnate](https://github.com/heythisisnate) +- Improv: support connecting to hidden networks [esphome#6322](https://github.com/esphome/esphome/pull/6322) by [@jesserockz](https://github.com/jesserockz) +- Update mDNS for IDF ≥ 5.0 [esphome#6328](https://github.com/esphome/esphome/pull/6328) by [@HeMan](https://github.com/HeMan) +- DFPlayer: refix Bug created with PR 4758 [esphome#5861](https://github.com/esphome/esphome/pull/5861) by [@sandronidi](https://github.com/sandronidi) +- Fix build failures on host platform caused by #6167 [esphome#6338](https://github.com/esphome/esphome/pull/6338) by [@clydebarrow](https://github.com/clydebarrow) +- Update bang_bang to log two decimal places in config dump [esphome#6304](https://github.com/esphome/esphome/pull/6304) by [@rafalw1277](https://github.com/rafalw1277) +- Add datetime date entities [esphome#6191](https://github.com/esphome/esphome/pull/6191) by [@RFDarter](https://github.com/RFDarter) (new-integration) +- Add AGS10 Sensor [esphome#6070](https://github.com/esphome/esphome/pull/6070) by [@mak-42](https://github.com/mak-42) (new-integration) +- Bump aioesphomeapi from 23.0.0 to 23.1.0 [esphome#6332](https://github.com/esphome/esphome/pull/6332) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.23.5 to 0.23.5.post1 [esphome#6334](https://github.com/esphome/esphome/pull/6334) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-buildx-action from 3.0.0 to 3.1.0 [esphome#6295](https://github.com/esphome/esphome/pull/6295) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Set dependabot to look at composite actions versions [esphome#6343](https://github.com/esphome/esphome/pull/6343) by [@jesserockz](https://github.com/jesserockz) +- ads1118 component [esphome#5711](https://github.com/esphome/esphome/pull/5711) by [@solomondg1](https://github.com/solomondg1) (new-integration) +- Bump actions/cache from 4.0.0 to 4.0.1 [esphome#6306](https://github.com/esphome/esphome/pull/6306) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 5.0.0 to 5.2.0 in /.github/actions/build-image [esphome#6347](https://github.com/esphome/esphome/pull/6347) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- fix: modbus_textsensor response is too long in some cases [esphome#6333](https://github.com/esphome/esphome/pull/6333) by [@NewoPL](https://github.com/NewoPL) +- add template fan [esphome#6310](https://github.com/esphome/esphome/pull/6310) by [@ssieb](https://github.com/ssieb) (breaking-change) (new-platform) +- dump config after logging CDC port is opened by host [esphome#6169](https://github.com/esphome/esphome/pull/6169) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add IRK support to allow tracking of devices with random MAC addresses [esphome#6335](https://github.com/esphome/esphome/pull/6335) by [@chbmuc](https://github.com/chbmuc) +- [Fingerprint_grow] Implements Sleep Mode feature [esphome#6116](https://github.com/esphome/esphome/pull/6116) by [@alexborro](https://github.com/alexborro) +- cleanup ili9xxx component by removing data rate define [esphome#6350](https://github.com/esphome/esphome/pull/6350) by [@nielsnl68](https://github.com/nielsnl68) +- web_server_idf: support x-www-form-urlencoded POST requests [esphome#6037](https://github.com/esphome/esphome/pull/6037) by [@dentra](https://github.com/dentra) +- feat(MQTT): Add QoS option for each MQTT component [esphome#6279](https://github.com/esphome/esphome/pull/6279) by [@Rapsssito](https://github.com/Rapsssito) +- Check permissions [esphome#6255](https://github.com/esphome/esphome/pull/6255) by [@OdileVidrine](https://github.com/OdileVidrine) +- Add CST816 touchscreen driver [esphome#5941](https://github.com/esphome/esphome/pull/5941) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- ILI9XXX: Lazily allocate buffer [esphome#6352](https://github.com/esphome/esphome/pull/6352) by [@clydebarrow](https://github.com/clydebarrow) +- AM2315C Temperature + Humidity Sensor [esphome#6266](https://github.com/esphome/esphome/pull/6266) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- Add ble_presence binary sensor timeout config value. [esphome#6024](https://github.com/esphome/esphome/pull/6024) by [@clydebarrow](https://github.com/clydebarrow) +- Add state listeners to `rotary_encoder` [esphome#6035](https://github.com/esphome/esphome/pull/6035) by [@clydebarrow](https://github.com/clydebarrow) +- ili9xxx: Add support for GC9A01A display [esphome#6351](https://github.com/esphome/esphome/pull/6351) by [@clydebarrow](https://github.com/clydebarrow) +- Touchscreen: add support for CST226 controller chip [esphome#6151](https://github.com/esphome/esphome/pull/6151) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- font: add anti-aliasing and other features [esphome#6198](https://github.com/esphome/esphome/pull/6198) by [@clydebarrow](https://github.com/clydebarrow) +- Mhz19 warmup [esphome#6214](https://github.com/esphome/esphome/pull/6214) by [@fornellas](https://github.com/fornellas) +- Refactor ATM90E32 to reduce blocking time and improve accuracy. [esphome#5670](https://github.com/esphome/esphome/pull/5670) by [@descipher](https://github.com/descipher) +- Bump aioesphomeapi from 23.1.0 to 23.1.1 [esphome#6348](https://github.com/esphome/esphome/pull/6348) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 8.0.2 to 8.1.1 [esphome#6346](https://github.com/esphome/esphome/pull/6346) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add support for Waveshare 2.13" V2 display [esphome#6337](https://github.com/esphome/esphome/pull/6337) by [@manuelkasper](https://github.com/manuelkasper) +- Mitsubishi Climate updates [esphome#3886](https://github.com/esphome/esphome/pull/3886) by [@RubyBailey](https://github.com/RubyBailey) +- Drivers for RGB 16 bit parallel displays [esphome#5872](https://github.com/esphome/esphome/pull/5872) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- hydreon_rgxx - add resolution option [esphome#6077](https://github.com/esphome/esphome/pull/6077) by [@mrtoy-me](https://github.com/mrtoy-me) +- SPI schema now uses typed_schema with `type` key [esphome#6353](https://github.com/esphome/esphome/pull/6353) by [@clydebarrow](https://github.com/clydebarrow) +- VEML7700 and VEML6030 light sensors [esphome#6067](https://github.com/esphome/esphome/pull/6067) by [@latonita](https://github.com/latonita) (new-integration) +- Add Seeed Studio mmWave Kit MR24HPC1 [esphome#5761](https://github.com/esphome/esphome/pull/5761) by [@limengdu](https://github.com/limengdu) (new-integration) +- Add getter for font glyph data [esphome#6355](https://github.com/esphome/esphome/pull/6355) by [@clydebarrow](https://github.com/clydebarrow) +- Require reset_pin for certain waveshare_epaper models in YAML validation [esphome#6357](https://github.com/esphome/esphome/pull/6357) by [@manuelkasper](https://github.com/manuelkasper) +- touchscreen driver fixes [esphome#6356](https://github.com/esphome/esphome/pull/6356) by [@clydebarrow](https://github.com/clydebarrow) +- Make USE_HOST compilable on msys2 [esphome#6359](https://github.com/esphome/esphome/pull/6359) by [@maruel](https://github.com/maruel) +- download font from url on build [esphome#5254](https://github.com/esphome/esphome/pull/5254) by [@landonr](https://github.com/landonr) +- Add driver for quad SPI AMOLED displays [esphome#6354](https://github.com/esphome/esphome/pull/6354) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- ADE7953: Add the ability to use accumulating energy registers, more precise power reporting [esphome#6311](https://github.com/esphome/esphome/pull/6311) by [@isorin](https://github.com/isorin) +- feat: Add HTU31D Support [esphome#5805](https://github.com/esphome/esphome/pull/5805) by [@betterengineering](https://github.com/betterengineering) (new-integration) +- Emmeti infrared climate support [esphome#5197](https://github.com/esphome/esphome/pull/5197) by [@E440QF](https://github.com/E440QF) (new-integration) +- Added Kamstrup Multical 40x component [esphome#4200](https://github.com/esphome/esphome/pull/4200) by [@cfeenstra1024](https://github.com/cfeenstra1024) (new-integration) +- add possibility to provide different conversion times for Bus Voltage… [esphome#6327](https://github.com/esphome/esphome/pull/6327) by [@kev300](https://github.com/kev300) +- SPI: Revert clk_pin to standard output pin schema [esphome#6368](https://github.com/esphome/esphome/pull/6368) by [@clydebarrow](https://github.com/clydebarrow) +- Allow actions in web_server to be executed via GET method [esphome#5938](https://github.com/esphome/esphome/pull/5938) by [@afarago](https://github.com/afarago) +- fix servo restore [esphome#6370](https://github.com/esphome/esphome/pull/6370) by [@ssieb](https://github.com/ssieb) +- Don't try to get IPv6 addresses when disabled [esphome#6366](https://github.com/esphome/esphome/pull/6366) by [@HeMan](https://github.com/HeMan) +- Use AQI device class [esphome#6376](https://github.com/esphome/esphome/pull/6376) by [@fgsch](https://github.com/fgsch) +- Fix list-components when PR is not targeting dev [esphome#6375](https://github.com/esphome/esphome/pull/6375) by [@jesserockz](https://github.com/jesserockz) +- allow negative ppm for sensair [esphome#6385](https://github.com/esphome/esphome/pull/6385) by [@ssieb](https://github.com/ssieb) +- microWakeWord - add new ops and small improvements [esphome#6360](https://github.com/esphome/esphome/pull/6360) by [@kahrendt](https://github.com/kahrendt) +- Fix compilation for uponor_smatrix without time component [esphome#6389](https://github.com/esphome/esphome/pull/6389) by [@kroimon](https://github.com/kroimon) +- Shows component operation time in `ms` [esphome#6388](https://github.com/esphome/esphome/pull/6388) by [@edwardtfn](https://github.com/edwardtfn) +- IPv6 can't be enabled for libretiny [esphome#6387](https://github.com/esphome/esphome/pull/6387) by [@HeMan](https://github.com/HeMan) +- Replace name and friendly name in full adopted configs [esphome#4456](https://github.com/esphome/esphome/pull/4456) by [@jesserockz](https://github.com/jesserockz) +- Fix bug in `remote_base` conditional [esphome#6281](https://github.com/esphome/esphome/pull/6281) by [@swoboda1337](https://github.com/swoboda1337) +- Fix sending packets to uponor_smatrix devices [esphome#6392](https://github.com/esphome/esphome/pull/6392) by [@kroimon](https://github.com/kroimon) +- Fix wrong initialization of vectors in ade7953_i2c [esphome#6393](https://github.com/esphome/esphome/pull/6393) by [@kroimon](https://github.com/kroimon) +- ld2420: Firmware v1.5.4+ bug workaround [esphome#6168](https://github.com/esphome/esphome/pull/6168) by [@descipher](https://github.com/descipher) +- Require xsrf/csrf when using a password [esphome#6396](https://github.com/esphome/esphome/pull/6396) by [@jesserockz](https://github.com/jesserockz) +- AHT10: Use state machine to avoid blocking delay [esphome#6401](https://github.com/esphome/esphome/pull/6401) by [@clydebarrow](https://github.com/clydebarrow) +- Show component warnings and errors in the log; [esphome#6400](https://github.com/esphome/esphome/pull/6400) by [@clydebarrow](https://github.com/clydebarrow) +- web_server support for v3 [esphome#6203](https://github.com/esphome/esphome/pull/6203) by [@RFDarter](https://github.com/RFDarter) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.4.0.mdx b/src/content/docs/changelog/2024.4.0.mdx new file mode 100644 index 0000000000..15de44039e --- /dev/null +++ b/src/content/docs/changelog/2024.4.0.mdx @@ -0,0 +1,174 @@ +--- +description: "Changelog for ESPHome 2024.4.0." +title: "ESPHome 2024.4.0 - 17th April 2024" +pagefind: false +slug: "changelog/2024.4.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Time Entities + +ESPHome now has support for `time` entities that can be set from the frontend (like Home Assistant). +This allows you to set a timer to execute future automations on device. + +ESPHome Dates require Home Assistant 2024.4 or later. + +## Voice Assistant Audio + +This release adds support for sending and receiving audio to/from voice assistants via the API. Currently ESPHome +sends and receives the Voice Assistant audio bytes via a UDP socket which can be unreliable and insecure. +Beginning with Home Assistant 2024.5, both sides will automatically recognise that they both support API Audio and will +use that route instead. This is more reliable because the ESPHome API uses a TCP socket, so packet order and +delivery is guaranteed, and if you use API Encryption, your audio will also be encrypted in transit. + +{/* markdownlint-disable MD013 */} + +## Release 2024.4.1 - April 23 + +- [Tuya Climate] Fix compilation error caused by codegen [esphome#6568](https://github.com/esphome/esphome/pull/6568) by [@zry98](https://github.com/zry98) +- wifi: fix reconnect issue due to enablement of fast connect [esphome#6598](https://github.com/esphome/esphome/pull/6598) by [@jpeletier](https://github.com/jpeletier) +- Calibrate Beken internal temperature [esphome#6599](https://github.com/esphome/esphome/pull/6599) by [@Mat931](https://github.com/Mat931) +- fix streaming logs from MQTT for ESP32 devices using TLS [esphome#6605](https://github.com/esphome/esphome/pull/6605) by [@ccutrer](https://github.com/ccutrer) +- Disallow variant/family override for known boards [esphome#6512](https://github.com/esphome/esphome/pull/6512) by [@clydebarrow](https://github.com/clydebarrow) +- esp32_ble: Consider ESP_BT_STATUS_DONE a successful state [esphome#6493](https://github.com/esphome/esphome/pull/6493) by [@polyfloyd](https://github.com/polyfloyd) +- Fix or filter [esphome#6574](https://github.com/esphome/esphome/pull/6574) by [@swoboda1337](https://github.com/swoboda1337) + +## Release 2024.4.2 - April 30 + +- Fix SHT3xd fails sometimes in 2024.4.0 [esphome#6592](https://github.com/esphome/esphome/pull/6592) by [@mrtoy-me](https://github.com/mrtoy-me) +- allow defaults with no include vars [esphome#6613](https://github.com/esphome/esphome/pull/6613) by [@ssieb](https://github.com/ssieb) +- Revert #6458 [esphome#6650](https://github.com/esphome/esphome/pull/6650) by [@tronikos](https://github.com/tronikos) +- [i2s_audio.microphone] Fixing adc bug [esphome#6654](https://github.com/esphome/esphome/pull/6654) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add sun_gtil2 component (for SUN-1000G2 / SUN-2000G2 grid tie inverters) [esphome#4958](https://github.com/esphome/esphome/pull/4958) by [@Mat931](https://github.com/Mat931) (new-integration) +- Add support for AT581x component [esphome#6297](https://github.com/esphome/esphome/pull/6297) by [@X-Ryl669](https://github.com/X-Ryl669) (new-integration) +- Add new Component: Ultrasonic Distance Sensor JSN-SR04T [esphome#6023](https://github.com/esphome/esphome/pull/6023) by [@Mafus1](https://github.com/Mafus1) (new-integration) +- feat: Add Daikin ARC (tested on Daikin ARC472A62) [esphome#6429](https://github.com/esphome/esphome/pull/6429) by [@magicbear](https://github.com/magicbear) (new-integration) +- add support for Tuya pink version of miflora [esphome#5402](https://github.com/esphome/esphome/pull/5402) by [@fariouche](https://github.com/fariouche) (new-integration) +- Implemented support for the TLC5971 as an output component [esphome#6494](https://github.com/esphome/esphome/pull/6494) by [@IJIJI](https://github.com/IJIJI) (new-integration) + +### Breaking Changes + +- Add support for new modes in Tuya Climate [esphome#5159](https://github.com/esphome/esphome/pull/5159) by [@moriahmorgan](https://github.com/moriahmorgan) (breaking-change) +- IPv6 string representation follows RFC5952 [esphome#6449](https://github.com/esphome/esphome/pull/6449) by [@HeMan](https://github.com/HeMan) (breaking-change) + +### Beta Changes + +- Add dooya remote transmitter test [esphome#6508](https://github.com/esphome/esphome/pull/6508) by [@jesserockz](https://github.com/jesserockz) +- ads1115: remove auto-load and split sensor into platform folder [esphome#5981](https://github.com/esphome/esphome/pull/5981) by [@jesserockz](https://github.com/jesserockz) (new-platform) +- Bump esphome-dashboard to 20240412.0 [esphome#6517](https://github.com/esphome/esphome/pull/6517) by [@jesserockz](https://github.com/jesserockz) +- Fix missing ifdefs in voice assistant [esphome#6520](https://github.com/esphome/esphome/pull/6520) by [@jesserockz](https://github.com/jesserockz) +- Fix project version longer than 30 characters breaking compilation [esphome#6535](https://github.com/esphome/esphome/pull/6535) by [@jesserockz](https://github.com/jesserockz) +- Fix no-release bug on ft6x36 [esphome#6527](https://github.com/esphome/esphome/pull/6527) by [@clydebarrow](https://github.com/clydebarrow) + +### All changes + +- Bump docker/login-action from 3.0.0 to 3.1.0 [esphome#6367](https://github.com/esphome/esphome/pull/6367) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 6.0.1 to 6.0.2 [esphome#6361](https://github.com/esphome/esphome/pull/6361) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 5.2.0 to 5.3.0 in /.github/actions/build-image [esphome#6373](https://github.com/esphome/esphome/pull/6373) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-buildx-action from 3.1.0 to 3.2.0 [esphome#6372](https://github.com/esphome/esphome/pull/6372) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix deep_sleep for ESP32-C6 [esphome#6377](https://github.com/esphome/esphome/pull/6377) by [@ferrets6](https://github.com/ferrets6) +- Fix keeloq for IDF 5+ [esphome#6382](https://github.com/esphome/esphome/pull/6382) by [@kbx81](https://github.com/kbx81) +- Fix Nextion set_component_picture call [esphome#6378](https://github.com/esphome/esphome/pull/6378) by [@edwardtfn](https://github.com/edwardtfn) +- Add line_at_angle method to Display component [esphome#6381](https://github.com/esphome/esphome/pull/6381) by [@deisterhold](https://github.com/deisterhold) +- Check generated proto files are as expected if any are modified in PRs [esphome#6254](https://github.com/esphome/esphome/pull/6254) by [@jesserockz](https://github.com/jesserockz) +- ld2420: fix energy mode documentation [esphome#6225](https://github.com/esphome/esphome/pull/6225) by [@andresv](https://github.com/andresv) +- Add actions for component tests A, B and C [esphome#6256](https://github.com/esphome/esphome/pull/6256) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (V) [esphome#6231](https://github.com/esphome/esphome/pull/6231) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (X,Y,Z) [esphome#6233](https://github.com/esphome/esphome/pull/6233) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (E) [esphome#6176](https://github.com/esphome/esphome/pull/6176) by [@kbx81](https://github.com/kbx81) +- Make SPI compile with IDF ≥ 5.0 [esphome#6383](https://github.com/esphome/esphome/pull/6383) by [@HeMan](https://github.com/HeMan) +- Fix esp32-camera test yaml [esphome#6398](https://github.com/esphome/esphome/pull/6398) by [@kbx81](https://github.com/kbx81) +- Bump pytest-asyncio from 0.23.5.post1 to 0.23.6 [esphome#6402](https://github.com/esphome/esphome/pull/6402) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.0.1 to 4.0.2 in /.github/actions/restore-python [esphome#6403](https://github.com/esphome/esphome/pull/6403) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.0.1 to 4.0.2 [esphome#6404](https://github.com/esphome/esphome/pull/6404) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ESP8266 Arduino versions [esphome#5359](https://github.com/esphome/esphome/pull/5359) by [@HeMan](https://github.com/HeMan) +- Allow accept/reject delta to be specified. [esphome#5060](https://github.com/esphome/esphome/pull/5060) by [@cvwillegen](https://github.com/cvwillegen) +- Allow setting htop for ledc [esphome#6340](https://github.com/esphome/esphome/pull/6340) by [@Gagootron](https://github.com/Gagootron) +- sm2135: add separate_modes option to support different chip variants [esphome#6152](https://github.com/esphome/esphome/pull/6152) by [@jasperro](https://github.com/jasperro) +- AHT10: fix temperature-only operation; add warning/error messages [esphome#6405](https://github.com/esphome/esphome/pull/6405) by [@clydebarrow](https://github.com/clydebarrow) +- Add support for new modes in Tuya Climate [esphome#5159](https://github.com/esphome/esphome/pull/5159) by [@moriahmorgan](https://github.com/moriahmorgan) (breaking-change) +- Add sun_gtil2 component (for SUN-1000G2 / SUN-2000G2 grid tie inverters) [esphome#4958](https://github.com/esphome/esphome/pull/4958) by [@Mat931](https://github.com/Mat931) (new-integration) +- SPI: Make some validation failures give more useful messages. [esphome#6413](https://github.com/esphome/esphome/pull/6413) by [@clydebarrow](https://github.com/clydebarrow) +- Bump aioesphomeapi from 23.1.1 to 23.2.0 [esphome#6412](https://github.com/esphome/esphome/pull/6412) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add check for use of GPIOXX in config [esphome#6419](https://github.com/esphome/esphome/pull/6419) by [@clydebarrow](https://github.com/clydebarrow) +- WireGuard for esp8266 [esphome#6365](https://github.com/esphome/esphome/pull/6365) by [@droscy](https://github.com/droscy) +- setup.cfg: drop duplicate, underintended trove classifier [esphome#6421](https://github.com/esphome/esphome/pull/6421) by [@mweinelt](https://github.com/mweinelt) +- Store preferences in disk file on host platform [esphome#6428](https://github.com/esphome/esphome/pull/6428) by [@clydebarrow](https://github.com/clydebarrow) +- Add support for AT581x component [esphome#6297](https://github.com/esphome/esphome/pull/6297) by [@X-Ryl669](https://github.com/X-Ryl669) (new-integration) +- Add some components to the new testing framework (F) [esphome#6177](https://github.com/esphome/esphome/pull/6177) by [@kbx81](https://github.com/kbx81) +- Add get_contrast() and get_brightness() to SSD1306 class to get protected variables [esphome#6435](https://github.com/esphome/esphome/pull/6435) by [@benediktkr](https://github.com/benediktkr) +- Add new Component: Ultrasonic Distance Sensor JSN-SR04T [esphome#6023](https://github.com/esphome/esphome/pull/6023) by [@Mafus1](https://github.com/Mafus1) (new-integration) +- Add some components to the new testing framework (G) [esphome#6178](https://github.com/esphome/esphome/pull/6178) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (K) [esphome#6186](https://github.com/esphome/esphome/pull/6186) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (N) [esphome#6210](https://github.com/esphome/esphome/pull/6210) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (Q) [esphome#6218](https://github.com/esphome/esphome/pull/6218) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (U) [esphome#6230](https://github.com/esphome/esphome/pull/6230) by [@kbx81](https://github.com/kbx81) +- Fix spacing in new test yaml [esphome#6441](https://github.com/esphome/esphome/pull/6441) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (W) [esphome#6232](https://github.com/esphome/esphome/pull/6232) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (L) [esphome#6195](https://github.com/esphome/esphome/pull/6195) by [@kbx81](https://github.com/kbx81) +- feat: Add Daikin ARC (tested on Daikin ARC472A62) [esphome#6429](https://github.com/esphome/esphome/pull/6429) by [@magicbear](https://github.com/magicbear) (new-integration) +- Disable truthy yamllint rule [esphome#6442](https://github.com/esphome/esphome/pull/6442) by [@jesserockz](https://github.com/jesserockz) +- Add get_size method to QR Code header [esphome#6430](https://github.com/esphome/esphome/pull/6430) by [@deisterhold](https://github.com/deisterhold) +- Minor change to support sht85 sensor [esphome#6415](https://github.com/esphome/esphome/pull/6415) by [@mrtoy-me](https://github.com/mrtoy-me) +- IPv6 string representation follows RFC5952 [esphome#6449](https://github.com/esphome/esphome/pull/6449) by [@HeMan](https://github.com/HeMan) (breaking-change) +- Bump actions/setup-python from 5.0.0 to 5.1.0 [esphome#6437](https://github.com/esphome/esphome/pull/6437) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.0.0 to 5.1.0 in /.github/actions/restore-python [esphome#6438](https://github.com/esphome/esphome/pull/6438) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Optimize QMC5883L: Read registers only for enabled sensors [esphome#6458](https://github.com/esphome/esphome/pull/6458) by [@tronikos](https://github.com/tronikos) +- minor refactor to allow commit hash as ref value. [esphome#6446](https://github.com/esphome/esphome/pull/6446) by [@LelandSindt](https://github.com/LelandSindt) +- TMP117 fix polling period config [esphome#6452](https://github.com/esphome/esphome/pull/6452) by [@mrtoy-me](https://github.com/mrtoy-me) +- Bump Arduino Pico Framework to 3.7.2 and Platform to 1.12.0 [esphome#6386](https://github.com/esphome/esphome/pull/6386) by [@HeMan](https://github.com/HeMan) +- Display menu: Allow "left" key to exit current menu if not editing [esphome#6460](https://github.com/esphome/esphome/pull/6460) by [@jesserockz](https://github.com/jesserockz) +- Fix NOLINT on inclusive-language check [esphome#6464](https://github.com/esphome/esphome/pull/6464) by [@jesserockz](https://github.com/jesserockz) +- Add yamllint to dev requirements [esphome#6466](https://github.com/esphome/esphome/pull/6466) by [@jesserockz](https://github.com/jesserockz) +- Add temperature for QMC5883L [esphome#6456](https://github.com/esphome/esphome/pull/6456) by [@tronikos](https://github.com/tronikos) +- web_server: Return early if no clients connected [esphome#6467](https://github.com/esphome/esphome/pull/6467) by [@jesserockz](https://github.com/jesserockz) +- ESP32 Arduino WiFi: misc bug fixes [esphome#6470](https://github.com/esphome/esphome/pull/6470) by [@paravoid](https://github.com/paravoid) +- Replace std::regex with sscanf calls [esphome#6468](https://github.com/esphome/esphome/pull/6468) by [@jesserockz](https://github.com/jesserockz) +- Include "Failed" status in config log. [esphome#6482](https://github.com/esphome/esphome/pull/6482) by [@clydebarrow](https://github.com/clydebarrow) +- Fix Microphone IsCapturingCondition [esphome#6490](https://github.com/esphome/esphome/pull/6490) by [@RaymiiOrg](https://github.com/RaymiiOrg) +- Remove misleading tag/line in messages [esphome#6495](https://github.com/esphome/esphome/pull/6495) by [@clydebarrow](https://github.com/clydebarrow) +- Send/Receive Voice Assistant audio via API [esphome#6471](https://github.com/esphome/esphome/pull/6471) by [@jesserockz](https://github.com/jesserockz) +- Datetime date initial value fix [esphome#6483](https://github.com/esphome/esphome/pull/6483) by [@RFDarter](https://github.com/RFDarter) +- If the loop() took more than the required time, don't delay further [esphome#6496](https://github.com/esphome/esphome/pull/6496) by [@clydebarrow](https://github.com/clydebarrow) +- Bump LibreTiny version to 1.5.1 [esphome#6500](https://github.com/esphome/esphome/pull/6500) by [@kuba2k2](https://github.com/kuba2k2) +- Internal temperature: Support Beken platform [esphome#6491](https://github.com/esphome/esphome/pull/6491) by [@Mat931](https://github.com/Mat931) +- Bump docker/setup-buildx-action from 3.2.0 to 3.3.0 [esphome#6502](https://github.com/esphome/esphome/pull/6502) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- add support for Tuya pink version of miflora [esphome#5402](https://github.com/esphome/esphome/pull/5402) by [@fariouche](https://github.com/fariouche) (new-integration) +- Add MAC address to WiFi config reply [esphome#6489](https://github.com/esphome/esphome/pull/6489) by [@cvwillegen](https://github.com/cvwillegen) +- Adds i2c timeout config [esphome#4614](https://github.com/esphome/esphome/pull/4614) by [@tracestep](https://github.com/tracestep) +- Add ABB-Welcome / Busch-Welcome Door Intercom Protocol [esphome#4689](https://github.com/esphome/esphome/pull/4689) by [@Mat931](https://github.com/Mat931) +- Add support for time entities [esphome#6399](https://github.com/esphome/esphome/pull/6399) by [@jesserockz](https://github.com/jesserockz) +- Fix Match by IRK [esphome#6499](https://github.com/esphome/esphome/pull/6499) by [@MRemy2](https://github.com/MRemy2) +- Add rmt_channel to remote_transmitter and remote_receiver [esphome#6497](https://github.com/esphome/esphome/pull/6497) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Rework tlc5947 to remove AUTO_LOAD [esphome#6503](https://github.com/esphome/esphome/pull/6503) by [@jesserockz](https://github.com/jesserockz) +- UART: ignore require_tx/rx if not a native uart implementation [esphome#6504](https://github.com/esphome/esphome/pull/6504) by [@jesserockz](https://github.com/jesserockz) +- esp32_rmt_led_strip bugfixes [esphome#6506](https://github.com/esphome/esphome/pull/6506) by [@Mat931](https://github.com/Mat931) +- Implemented support for the TLC5971 as an output component [esphome#6494](https://github.com/esphome/esphome/pull/6494) by [@IJIJI](https://github.com/IJIJI) (new-integration) +- Add Dooya protocol to remote_base [esphome#6488](https://github.com/esphome/esphome/pull/6488) by [@bukureckid](https://github.com/bukureckid) +- Only give error for connected sensors at startup [esphome#6474](https://github.com/esphome/esphome/pull/6474) by [@leejoow](https://github.com/leejoow) +- Webserver float to string fix [esphome#6507](https://github.com/esphome/esphome/pull/6507) by [@RFDarter](https://github.com/RFDarter) +- Add dooya remote transmitter test [esphome#6508](https://github.com/esphome/esphome/pull/6508) by [@jesserockz](https://github.com/jesserockz) +- ads1115: remove auto-load and split sensor into platform folder [esphome#5981](https://github.com/esphome/esphome/pull/5981) by [@jesserockz](https://github.com/jesserockz) (new-platform) +- Bump esphome-dashboard to 20240412.0 [esphome#6517](https://github.com/esphome/esphome/pull/6517) by [@jesserockz](https://github.com/jesserockz) +- Fix missing ifdefs in voice assistant [esphome#6520](https://github.com/esphome/esphome/pull/6520) by [@jesserockz](https://github.com/jesserockz) +- Fix project version longer than 30 characters breaking compilation [esphome#6535](https://github.com/esphome/esphome/pull/6535) by [@jesserockz](https://github.com/jesserockz) +- Fix no-release bug on ft6x36 [esphome#6527](https://github.com/esphome/esphome/pull/6527) by [@clydebarrow](https://github.com/clydebarrow) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.5.0.mdx b/src/content/docs/changelog/2024.5.0.mdx new file mode 100644 index 0000000000..2ce4078d03 --- /dev/null +++ b/src/content/docs/changelog/2024.5.0.mdx @@ -0,0 +1,261 @@ +--- +description: "Changelog for ESPHome 2024.5.0." +title: "ESPHome 2024.5.0 - 15th May 2024" +pagefind: false +slug: "changelog/2024.5.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Valves, Events, and More + +This release brings a new `Valve` component, which can be used to control valves. +A `Valve` can be opened, closed, or a specific position set if supported. + +`Event` entities were added to Home Assistant in [2023.8](https://www.home-assistant.io/blog/2023/08/02/release-20238/#introducing-the-event-entity). +They allow better structure and also history and logging of the events sent from ESPHome to Home Assistant compared +to just using publishing events onto the Home Assistant event bus with the `homeassistant.event` action. + +The `datetime` component has also been extended with `DateTime` and `Time` entity types this release. + +## ESP32 ADC Attenuation + +The attenuation configuration option for ESP32 `adc` sensors has had a deprecation in the underlying ESP-IDF +framework with the `11dB` option. The value to replace `11dB` with is `12dB`. There are no functionality changes +otherwise. There will be a warning in the logs when installing if you are using `11dB` and it will be +removed in **2024.8.0**. + +## Remote Receiver tolerance + +The `tolerance` option in the `remote_receiver` component has been extended to allow time values, but at the +same time the validation is now more strict. +If you were using a raw value with no unit before 2024.5.0, for example `25`, you will need to change it to `25%`. + +{/* markdownlint-disable MD013 */} + +## Release 2024.5.1 - May 20 + +- Add device_class to valve core config [esphome#6765](https://github.com/esphome/esphome/pull/6765) by [@acshef](https://github.com/acshef) +- Synchronise Device Classes from Home Assistant [esphome#6768](https://github.com/esphome/esphome/pull/6768) by [@esphomebot](https://github.com/esphomebot) +- Fix Upload from Dashboard with MQTT discovery. [esphome#6774](https://github.com/esphome/esphome/pull/6774) by [@Links2004](https://github.com/Links2004) +- Fix MQTT dashboard discovery (Exception in MqttStatusThread). [esphome#6775](https://github.com/esphome/esphome/pull/6775) by [@Links2004](https://github.com/Links2004) + +## Release 2024.5.2 - May 21 + +- Revert "Fix MQTT dashboard discovery (Exception in MqttStatusThread)." [esphome#6782](https://github.com/esphome/esphome/pull/6782) by [@bdraco](https://github.com/bdraco) +- Fix DashboardEntries.all() call [esphome#6783](https://github.com/esphome/esphome/pull/6783) by [@bdraco](https://github.com/bdraco) +- [remote_receiver] Add better error message for tolerance breaking change [esphome#6784](https://github.com/esphome/esphome/pull/6784) by [@jesserockz](https://github.com/jesserockz) +- Update webserver local assets to 20240519-215627 [esphome#6779](https://github.com/esphome/esphome/pull/6779) by [@esphomebot](https://github.com/esphomebot) + +## Release 2024.5.3 - May 25 + +- [voice_assistant] Don't allocate buffers until starting the microphone for the first time [esphome#6800](https://github.com/esphome/esphome/pull/6800) by [@jesserockz](https://github.com/jesserockz) + +## Release 2024.5.4 - May 28 + +- [web_server_base] Bump ESPAsyncWebServer-esphome to 3.2.2 [esphome#6797](https://github.com/esphome/esphome/pull/6797) by [@jesserockz](https://github.com/jesserockz) +- [helpers] Move Base64 string to cpp [esphome#6819](https://github.com/esphome/esphome/pull/6819) by [@gabest11](https://github.com/gabest11) + +## Release 2024.5.5 - June 5 + +- [voice_assistant] Half the microphone ringbuffer size [esphome#6830](https://github.com/esphome/esphome/pull/6830) by [@jesserockz](https://github.com/jesserockz) +- [i2s_speaker] Add buffer allocation failure checks [esphome#6829](https://github.com/esphome/esphome/pull/6829) by [@jesserockz](https://github.com/jesserockz) +- [improv_serial] Fix for IDF 4.4.7 [esphome#6855](https://github.com/esphome/esphome/pull/6855) by [@kbx81](https://github.com/kbx81) + +## Full list of changes + +### New Components + +- Add valve component [esphome#6447](https://github.com/esphome/esphome/pull/6447) by [@kbx81](https://github.com/kbx81) (new-integration) +- Add the WeiKai SPI/I2C UART/IO Expander components to esphome [esphome#5218](https://github.com/esphome/esphome/pull/5218) by [@DrCoolzic](https://github.com/DrCoolzic) (new-integration) +- Event entity support [esphome#6451](https://github.com/esphome/esphome/pull/6451) by [@nohat](https://github.com/nohat) (new-integration) +- SPI and I2C for BMP390 and BMP380 [esphome#6652](https://github.com/esphome/esphome/pull/6652) by [@latonita](https://github.com/latonita) (new-integration) (breaking-change) + +### Breaking Changes + +- Add DNS sensor and simplify format [esphome#6450](https://github.com/esphome/esphome/pull/6450) by [@HeMan](https://github.com/HeMan) (breaking-change) +- SM2135 - Use standard channel ordering. [esphome#6573](https://github.com/esphome/esphome/pull/6573) by [@Cossid](https://github.com/Cossid) (breaking-change) +- [sn74hc595] Enforce type field to distinguish gpio vs spi mode [esphome#6609](https://github.com/esphome/esphome/pull/6609) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Add datetime entities [esphome#6513](https://github.com/esphome/esphome/pull/6513) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- SPI and I2C for BMP390 and BMP380 [esphome#6652](https://github.com/esphome/esphome/pull/6652) by [@latonita](https://github.com/latonita) (new-integration) (breaking-change) + +### Beta Changes + +- [github] Upgrade to actions/[upload,download]-artifact v4 [esphome#6698](https://github.com/esphome/esphome/pull/6698) by [@jesserockz](https://github.com/jesserockz) +- [nextion] Replace flags to `USE_ARDUINO` [esphome#6700](https://github.com/esphome/esphome/pull/6700) by [@edwardtfn](https://github.com/edwardtfn) +- [remote_receiver, remote_transmitter] Improve error messages on the ESP32 [esphome#6701](https://github.com/esphome/esphome/pull/6701) by [@Mat931](https://github.com/Mat931) +- [ethernet] Use constexpr instead of inline define for KSZ80XX_PC2R_REG_ADDR [esphome#6705](https://github.com/esphome/esphome/pull/6705) by [@jesserockz](https://github.com/jesserockz) +- Add PHY register writes to enable external clock on Ethernet with RTL8201 [esphome#6704](https://github.com/esphome/esphome/pull/6704) by [@heythisisnate](https://github.com/heythisisnate) +- Bump recommended ESP-IDF to 4.4.7 [esphome#6703](https://github.com/esphome/esphome/pull/6703) by [@bdraco](https://github.com/bdraco) +- [core] Ensure that a generated ID name is distinct from its type. [esphome#6706](https://github.com/esphome/esphome/pull/6706) by [@clydebarrow](https://github.com/clydebarrow) +- [color] Fix crash when hex color parses as int, improve error reporting. [esphome#6707](https://github.com/esphome/esphome/pull/6707) by [@clydebarrow](https://github.com/clydebarrow) +- [github] Fix digest artifact name [esphome#6710](https://github.com/esphome/esphome/pull/6710) by [@jesserockz](https://github.com/jesserockz) +- fix(ltr390): stuck ALS values when configured for ALS+UV readings [esphome#6723](https://github.com/esphome/esphome/pull/6723) by [@CodeInPolish](https://github.com/CodeInPolish) +- Set FEATURE_API_AUDIO flag also if the speaker component is not used [esphome#6712](https://github.com/esphome/esphome/pull/6712) by [@gnumpi](https://github.com/gnumpi) +- Bump platformio from 6.1.13 to 6.1.15 [esphome#6634](https://github.com/esphome/esphome/pull/6634) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix ESPHOME_PROJECT_VERSION_30 [esphome#6731](https://github.com/esphome/esphome/pull/6731) by [@jesserockz](https://github.com/jesserockz) +- Voice-Assistant: Start-order change for VAD disabled: start va-pipeline when microphon… [esphome#6391](https://github.com/esphome/esphome/pull/6391) by [@gnumpi](https://github.com/gnumpi) +- Add ANNOUNCING state to media_player. [esphome#6691](https://github.com/esphome/esphome/pull/6691) by [@gnumpi](https://github.com/gnumpi) +- [adc] Fix 11db deprecation warning [esphome#6749](https://github.com/esphome/esphome/pull/6749) by [@jesserockz](https://github.com/jesserockz) (notable-change) + +### Notable Changes + +- [adc] Fix 11db deprecation warning [esphome#6749](https://github.com/esphome/esphome/pull/6749) by [@jesserockz](https://github.com/jesserockz) (notable-change) + +### All changes + +- Add some components to the new testing framework (H) [esphome#6179](https://github.com/esphome/esphome/pull/6179) by [@kbx81](https://github.com/kbx81) +- Added Htu21d model option [esphome#6511](https://github.com/esphome/esphome/pull/6511) by [@MRemy2](https://github.com/MRemy2) +- Add bk72xx base test file [esphome#6522](https://github.com/esphome/esphome/pull/6522) by [@jesserockz](https://github.com/jesserockz) +- Add "log" alias for "logs" command [esphome#6519](https://github.com/esphome/esphome/pull/6519) by [@pzich](https://github.com/pzich) +- Add DNS sensor and simplify format [esphome#6450](https://github.com/esphome/esphome/pull/6450) by [@HeMan](https://github.com/HeMan) (breaking-change) +- Add all missing `remote_receiver` `on_...` tests [esphome#6524](https://github.com/esphome/esphome/pull/6524) by [@kbx81](https://github.com/kbx81) +- Add actions to http_request tests [esphome#6529](https://github.com/esphome/esphome/pull/6529) by [@kbx81](https://github.com/kbx81) +- Update homeassistant component tests with actions [esphome#6528](https://github.com/esphome/esphome/pull/6528) by [@kbx81](https://github.com/kbx81) +- Define `USE_PSRAM` [esphome#6526](https://github.com/esphome/esphome/pull/6526) by [@edwardtfn](https://github.com/edwardtfn) +- Bump black from 24.2.0 to 24.4.0 [esphome#6539](https://github.com/esphome/esphome/pull/6539) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 6.0.2 to 6.0.3 [esphome#6525](https://github.com/esphome/esphome/pull/6525) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump python version in sync-device-classes workflow to 3.12 for HA [esphome#6541](https://github.com/esphome/esphome/pull/6541) by [@jesserockz](https://github.com/jesserockz) +- Bump pylint from 3.0.3 to 3.1.0 [esphome#6287](https://github.com/esphome/esphome/pull/6287) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 23.2.0 to 24.0.0 [esphome#6544](https://github.com/esphome/esphome/pull/6544) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.15.1 to 3.15.2 [esphome#6543](https://github.com/esphome/esphome/pull/6543) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add enum option to typed_schema [esphome#6546](https://github.com/esphome/esphome/pull/6546) by [@jesserockz](https://github.com/jesserockz) +- Move esphome-fork startup script to main repo. [esphome#6523](https://github.com/esphome/esphome/pull/6523) by [@jesserockz](https://github.com/jesserockz) +- Call workflow for addon with dev version [esphome#6549](https://github.com/esphome/esphome/pull/6549) by [@jesserockz](https://github.com/jesserockz) +- Use trusted publishing token for pypi [esphome#6545](https://github.com/esphome/esphome/pull/6545) by [@jesserockz](https://github.com/jesserockz) +- Fix uart to work with new enum definition in esp-idf-v5.2.1 [esphome#6487](https://github.com/esphome/esphome/pull/6487) by [@luar123](https://github.com/luar123) +- Housecleaning: Use walrus operator in datetime [esphome#6552](https://github.com/esphome/esphome/pull/6552) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in text [esphome#6560](https://github.com/esphome/esphome/pull/6560) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in light [esphome#6556](https://github.com/esphome/esphome/pull/6556) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in select [esphome#6557](https://github.com/esphome/esphome/pull/6557) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in number [esphome#6561](https://github.com/esphome/esphome/pull/6561) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in cover [esphome#6562](https://github.com/esphome/esphome/pull/6562) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in climate [esphome#6551](https://github.com/esphome/esphome/pull/6551) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in fan [esphome#6555](https://github.com/esphome/esphome/pull/6555) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in text_sensor [esphome#6559](https://github.com/esphome/esphome/pull/6559) by [@jesserockz](https://github.com/jesserockz) +- Bump zeroconf to 0.132.2 [esphome#6548](https://github.com/esphome/esphome/pull/6548) by [@bdraco](https://github.com/bdraco) +- Housecleaning: Use walrus operator in switch [esphome#6558](https://github.com/esphome/esphome/pull/6558) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in lock [esphome#6554](https://github.com/esphome/esphome/pull/6554) by [@jesserockz](https://github.com/jesserockz) +- Housecleaning: Use walrus operator in sensor [esphome#6553](https://github.com/esphome/esphome/pull/6553) by [@jesserockz](https://github.com/jesserockz) +- Bump pytest-mock from 3.12.0 to 3.14.0 [esphome#6572](https://github.com/esphome/esphome/pull/6572) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 6.0.3 to 6.0.4 [esphome#6569](https://github.com/esphome/esphome/pull/6569) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Nextion - Review set_protocol_reparse_mode() [esphome#6567](https://github.com/esphome/esphome/pull/6567) by [@edwardtfn](https://github.com/edwardtfn) +- Allow component final_validate [esphome#6475](https://github.com/esphome/esphome/pull/6475) by [@kbx81](https://github.com/kbx81) +- SM2135 - Use standard channel ordering. [esphome#6573](https://github.com/esphome/esphome/pull/6573) by [@Cossid](https://github.com/Cossid) (breaking-change) +- Nextion - Do not refresh sensors while updating [esphome#6566](https://github.com/esphome/esphome/pull/6566) by [@edwardtfn](https://github.com/edwardtfn) +- Nextion - Review types [esphome#6565](https://github.com/esphome/esphome/pull/6565) by [@edwardtfn](https://github.com/edwardtfn) +- On failure, dump the output of preceding jobs in CI status [esphome#6564](https://github.com/esphome/esphome/pull/6564) by [@clydebarrow](https://github.com/clydebarrow) +- Nextion `send_command` method [esphome#6540](https://github.com/esphome/esphome/pull/6540) by [@edwardtfn](https://github.com/edwardtfn) +- Fix some printf formats for size_t. [esphome#6542](https://github.com/esphome/esphome/pull/6542) by [@clydebarrow](https://github.com/clydebarrow) +- remove delay from tmp102 [esphome#6577](https://github.com/esphome/esphome/pull/6577) by [@ssieb](https://github.com/ssieb) +- Create `component_dir` substitution for local files to be included in… [esphome#6575](https://github.com/esphome/esphome/pull/6575) by [@jesserockz](https://github.com/jesserockz) +- Define `USE_ESP32_BLE` [esphome#6585](https://github.com/esphome/esphome/pull/6585) by [@edwardtfn](https://github.com/edwardtfn) +- Bump aioesphomeapi from 24.0.0 to 24.3.0 [esphome#6602](https://github.com/esphome/esphome/pull/6602) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Add yamllint and clang-format to pre-commit hooks [esphome#6578](https://github.com/esphome/esphome/pull/6578) by [@clydebarrow](https://github.com/clydebarrow) +- Use clang-format version from requirements_dev file [esphome#6606](https://github.com/esphome/esphome/pull/6606) by [@jesserockz](https://github.com/jesserockz) +- Add some components to the new testing framework (P) [esphome#6213](https://github.com/esphome/esphome/pull/6213) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (M part 1) [esphome#6207](https://github.com/esphome/esphome/pull/6207) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (M part 2) [esphome#6208](https://github.com/esphome/esphome/pull/6208) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (O) [esphome#6211](https://github.com/esphome/esphome/pull/6211) by [@kbx81](https://github.com/kbx81) +- [mopeka_std_check] Fix test file indentation [esphome#6610](https://github.com/esphome/esphome/pull/6610) by [@jesserockz](https://github.com/jesserockz) +- Add valve component [esphome#6447](https://github.com/esphome/esphome/pull/6447) by [@kbx81](https://github.com/kbx81) (new-integration) +- Add some components to the new testing framework (R) [esphome#6219](https://github.com/esphome/esphome/pull/6219) by [@kbx81](https://github.com/kbx81) +- [sn74hc595] Enforce type field to distinguish gpio vs spi mode [esphome#6609](https://github.com/esphome/esphome/pull/6609) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [tests] Run yaml tests in groups if over 100 to run [esphome#6612](https://github.com/esphome/esphome/pull/6612) by [@jesserockz](https://github.com/jesserockz) +- Add some components to the new testing framework (I) [esphome#6185](https://github.com/esphome/esphome/pull/6185) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (T) [esphome#6229](https://github.com/esphome/esphome/pull/6229) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (S part 1) [esphome#6224](https://github.com/esphome/esphome/pull/6224) by [@kbx81](https://github.com/kbx81) +- Add some components to the new testing framework (S part 2) [esphome#6227](https://github.com/esphome/esphome/pull/6227) by [@kbx81](https://github.com/kbx81) +- `graphical_display_menu` requires a Display, not DisplayBuffer [esphome#6614](https://github.com/esphome/esphome/pull/6614) by [@clydebarrow](https://github.com/clydebarrow) +- Add null GPIO pin [esphome#6611](https://github.com/esphome/esphome/pull/6611) by [@clydebarrow](https://github.com/clydebarrow) +- Allow UART to be AUTO LOADed [esphome#6617](https://github.com/esphome/esphome/pull/6617) by [@jesserockz](https://github.com/jesserockz) +- Add the WeiKai SPI/I2C UART/IO Expander components to esphome [esphome#5218](https://github.com/esphome/esphome/pull/5218) by [@DrCoolzic](https://github.com/DrCoolzic) (new-integration) +- Sort mqtt_const alphabetically [esphome#6619](https://github.com/esphome/esphome/pull/6619) by [@jesserockz](https://github.com/jesserockz) +- Limit Rx wait loop time to 3 seconds. [esphome#6594](https://github.com/esphome/esphome/pull/6594) by [@descipher](https://github.com/descipher) +- Event entity support [esphome#6451](https://github.com/esphome/esphome/pull/6451) by [@nohat](https://github.com/nohat) (new-integration) +- Only check c/c++ files with clang-format [esphome#6620](https://github.com/esphome/esphome/pull/6620) by [@jesserockz](https://github.com/jesserockz) +- Added base64 helper [esphome#4866](https://github.com/esphome/esphome/pull/4866) by [@freekode](https://github.com/freekode) +- Add Roomba IR protocol [esphome#4595](https://github.com/esphome/esphome/pull/4595) by [@rforro](https://github.com/rforro) +- Fix issue when setting cw/ww brightness via temperature [esphome#5976](https://github.com/esphome/esphome/pull/5976) by [@patagonaa](https://github.com/patagonaa) +- Add get/set color temperature functions in Kelvin [esphome#5006](https://github.com/esphome/esphome/pull/5006) by [@danielkent-net](https://github.com/danielkent-net) +- Move CONF_PLATFORM_VERSION to global const.py [esphome#6629](https://github.com/esphome/esphome/pull/6629) by [@tomaszduda23](https://github.com/tomaszduda23) +- Ble client fixes for proxy [esphome#6596](https://github.com/esphome/esphome/pull/6596) by [@elupus](https://github.com/elupus) +- Fix for #6614- use background_color, improve anti-aliasing [esphome#6618](https://github.com/esphome/esphome/pull/6618) by [@clydebarrow](https://github.com/clydebarrow) +- Fix graph hangs when y ≤ 0 [esphome#6593](https://github.com/esphome/esphome/pull/6593) by [@chiahsing](https://github.com/chiahsing) +- Feature add last_operation to time based cover [esphome#6084](https://github.com/esphome/esphome/pull/6084) by [@xprofiler](https://github.com/xprofiler) +- Add `event`, `text_sensor` and `valve` device classes to sync script [esphome#6624](https://github.com/esphome/esphome/pull/6624) by [@kbx81](https://github.com/kbx81) +- Add datetime entities [esphome#6513](https://github.com/esphome/esphome/pull/6513) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Multiple Daly-BMS support [esphome#6615](https://github.com/esphome/esphome/pull/6615) by [@latonita](https://github.com/latonita) +- Remove text_sensor from sync-device-class job [esphome#6637](https://github.com/esphome/esphome/pull/6637) by [@kbx81](https://github.com/kbx81) +- Synchronise Device Classes from Home Assistant [esphome#6638](https://github.com/esphome/esphome/pull/6638) by [@esphomebot](https://github.com/esphomebot) +- Display: add diagnostic test_card option [esphome#6608](https://github.com/esphome/esphome/pull/6608) by [@nielsnl68](https://github.com/nielsnl68) +- waveshare_epaper: Add 2.90in-dke [esphome#6492](https://github.com/esphome/esphome/pull/6492) by [@polyfloyd](https://github.com/polyfloyd) +- Extract core comments from #6241 [esphome#6643](https://github.com/esphome/esphome/pull/6643) by [@javawizard](https://github.com/javawizard) +- [hm3301] Updated the AQI based on the airnow document [esphome#6004](https://github.com/esphome/esphome/pull/6004) by [@optimusprimespace](https://github.com/optimusprimespace) +- Fix command line substitutions without any yaml substitutions [esphome#6644](https://github.com/esphome/esphome/pull/6644) by [@jesserockz](https://github.com/jesserockz) +- Allow platform dependencies [esphome#6623](https://github.com/esphome/esphome/pull/6623) by [@kbx81](https://github.com/kbx81) +- [light] Add transition_length to strobe effect. [esphome#6595](https://github.com/esphome/esphome/pull/6595) by [@lhartmann](https://github.com/lhartmann) +- Fixed the issue that graph draws out of the boundary. [esphome#6651](https://github.com/esphome/esphome/pull/6651) by [@chiahsing](https://github.com/chiahsing) +- Fix upload command. MQTT user and password is missing from configuration. #5093 [esphome#5766](https://github.com/esphome/esphome/pull/5766) by [@dylan09](https://github.com/dylan09) +- patch esphome cli to skip mqtt based device discovery if --device option is specified [esphome#6371](https://github.com/esphome/esphome/pull/6371) by [@quigleymd](https://github.com/quigleymd) +- Fix for #4866 - inconsistent arguments [esphome#6639](https://github.com/esphome/esphome/pull/6639) by [@clydebarrow](https://github.com/clydebarrow) +- [template/text] Fix lambda config [esphome#6655](https://github.com/esphome/esphome/pull/6655) by [@asergunov](https://github.com/asergunov) +- web_server: Add support for v3 local server_index [esphome#6563](https://github.com/esphome/esphome/pull/6563) by [@pzich](https://github.com/pzich) +- Update webserver local assets to 20240429-211523 [esphome#6657](https://github.com/esphome/esphome/pull/6657) by [@esphomebot](https://github.com/esphomebot) +- [nextion] Exit reparse before update TFT [esphome#6589](https://github.com/esphome/esphome/pull/6589) by [@edwardtfn](https://github.com/edwardtfn) +- [nextion] Set alternative TFT update baud rate [esphome#6587](https://github.com/esphome/esphome/pull/6587) by [@edwardtfn](https://github.com/edwardtfn) +- [TM1637] Let turn off the display [esphome#6656](https://github.com/esphome/esphome/pull/6656) by [@asergunov](https://github.com/asergunov) +- [nextion] Use persistent http connection for TFT upload (Arduino) [esphome#6582](https://github.com/esphome/esphome/pull/6582) by [@edwardtfn](https://github.com/edwardtfn) +- Extend MQTT tests [esphome#6648](https://github.com/esphome/esphome/pull/6648) by [@kbx81](https://github.com/kbx81) +- Extend and consolidate `script` tests [esphome#6663](https://github.com/esphome/esphome/pull/6663) by [@kbx81](https://github.com/kbx81) +- [nextion] Use persistent http connection for TFT upload (ESP-IDF) [esphome#6576](https://github.com/esphome/esphome/pull/6576) by [@edwardtfn](https://github.com/edwardtfn) +- Add a function to return the loop_interval [esphome#6666](https://github.com/esphome/esphome/pull/6666) by [@tronikos](https://github.com/tronikos) +- Remote receiver improvements [esphome#4642](https://github.com/esphome/esphome/pull/4642) by [@Mat931](https://github.com/Mat931) +- Make fast update intervals in qmc5883l work [esphome#6647](https://github.com/esphome/esphome/pull/6647) by [@tronikos](https://github.com/tronikos) +- SPI and I2C for BMP390 and BMP380 [esphome#6652](https://github.com/esphome/esphome/pull/6652) by [@latonita](https://github.com/latonita) (new-integration) (breaking-change) +- Set `CONF_` CI counter to fail on 3 or more definitions [esphome#6668](https://github.com/esphome/esphome/pull/6668) by [@jesserockz](https://github.com/jesserockz) +- [core] Rename ALWAYS_INLINE to ESPHOME_ALWAYS_INLINE [esphome#6636](https://github.com/esphome/esphome/pull/6636) by [@tomaszduda23](https://github.com/tomaszduda23) +- print task name if logger is called from other than main thread [esphome#6630](https://github.com/esphome/esphome/pull/6630) by [@tomaszduda23](https://github.com/tomaszduda23) +- Fix recent definitions into `defines.h` [esphome#6667](https://github.com/esphome/esphome/pull/6667) by [@edwardtfn](https://github.com/edwardtfn) +- Add fast update to HMC5883L [esphome#6669](https://github.com/esphome/esphome/pull/6669) by [@mkmer](https://github.com/mkmer) +- Minor tidy up of BME280 code [esphome#6672](https://github.com/esphome/esphome/pull/6672) by [@latonita](https://github.com/latonita) +- External components: optional configurable path for git source [esphome#6677](https://github.com/esphome/esphome/pull/6677) by [@twasilczyk](https://github.com/twasilczyk) +- Use clang-apply-replacements when clang-apply-replacements-14 does not exist [esphome#6684](https://github.com/esphome/esphome/pull/6684) by [@Links2004](https://github.com/Links2004) +- fix conflict with EMPTY macro in zephyr [esphome#6679](https://github.com/esphome/esphome/pull/6679) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump actions/checkout from 4.1.1 to 4.1.5 [esphome#6685](https://github.com/esphome/esphome/pull/6685) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix Datetime-Datetime compiler error [esphome#6686](https://github.com/esphome/esphome/pull/6686) by [@RFDarter](https://github.com/RFDarter) +- Bump esphome/ESPAsyncWebServer-esphome to 3.2.0 [esphome#6687](https://github.com/esphome/esphome/pull/6687) by [@jesserockz](https://github.com/jesserockz) +- fix date_time validation [esphome#6688](https://github.com/esphome/esphome/pull/6688) by [@RFDarter](https://github.com/RFDarter) +- proceed if AP mode is set up [esphome#6631](https://github.com/esphome/esphome/pull/6631) by [@ssieb](https://github.com/ssieb) +- Migrate some constants to core code [esphome#6692](https://github.com/esphome/esphome/pull/6692) by [@clydebarrow](https://github.com/clydebarrow) +- Consolidate test files where all tests are identical [esphome#6690](https://github.com/esphome/esphome/pull/6690) by [@kbx81](https://github.com/kbx81) +- Make `pulse_meter` PULSE filter report the pulse as soon as it can [esphome#6014](https://github.com/esphome/esphome/pull/6014) by [@TrentHouliston](https://github.com/TrentHouliston) +- Update webserver local assets to 20240507-231331 [esphome#6696](https://github.com/esphome/esphome/pull/6696) by [@esphomebot](https://github.com/esphomebot) +- [github] Upgrade to actions/[upload,download]-artifact v4 [esphome#6698](https://github.com/esphome/esphome/pull/6698) by [@jesserockz](https://github.com/jesserockz) +- [nextion] Replace flags to `USE_ARDUINO` [esphome#6700](https://github.com/esphome/esphome/pull/6700) by [@edwardtfn](https://github.com/edwardtfn) +- [remote_receiver, remote_transmitter] Improve error messages on the ESP32 [esphome#6701](https://github.com/esphome/esphome/pull/6701) by [@Mat931](https://github.com/Mat931) +- [ethernet] Use constexpr instead of inline define for KSZ80XX_PC2R_REG_ADDR [esphome#6705](https://github.com/esphome/esphome/pull/6705) by [@jesserockz](https://github.com/jesserockz) +- Add PHY register writes to enable external clock on Ethernet with RTL8201 [esphome#6704](https://github.com/esphome/esphome/pull/6704) by [@heythisisnate](https://github.com/heythisisnate) +- Bump recommended ESP-IDF to 4.4.7 [esphome#6703](https://github.com/esphome/esphome/pull/6703) by [@bdraco](https://github.com/bdraco) +- [core] Ensure that a generated ID name is distinct from its type. [esphome#6706](https://github.com/esphome/esphome/pull/6706) by [@clydebarrow](https://github.com/clydebarrow) +- [color] Fix crash when hex color parses as int, improve error reporting. [esphome#6707](https://github.com/esphome/esphome/pull/6707) by [@clydebarrow](https://github.com/clydebarrow) +- [github] Fix digest artifact name [esphome#6710](https://github.com/esphome/esphome/pull/6710) by [@jesserockz](https://github.com/jesserockz) +- fix(ltr390): stuck ALS values when configured for ALS+UV readings [esphome#6723](https://github.com/esphome/esphome/pull/6723) by [@CodeInPolish](https://github.com/CodeInPolish) +- Set FEATURE_API_AUDIO flag also if the speaker component is not used [esphome#6712](https://github.com/esphome/esphome/pull/6712) by [@gnumpi](https://github.com/gnumpi) +- Bump platformio from 6.1.13 to 6.1.15 [esphome#6634](https://github.com/esphome/esphome/pull/6634) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix ESPHOME_PROJECT_VERSION_30 [esphome#6731](https://github.com/esphome/esphome/pull/6731) by [@jesserockz](https://github.com/jesserockz) +- Voice-Assistant: Start-order change for VAD disabled: start va-pipeline when microphon… [esphome#6391](https://github.com/esphome/esphome/pull/6391) by [@gnumpi](https://github.com/gnumpi) +- Add ANNOUNCING state to media_player. [esphome#6691](https://github.com/esphome/esphome/pull/6691) by [@gnumpi](https://github.com/gnumpi) +- [adc] Fix 11db deprecation warning [esphome#6749](https://github.com/esphome/esphome/pull/6749) by [@jesserockz](https://github.com/jesserockz) (notable-change) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.6.0.mdx b/src/content/docs/changelog/2024.6.0.mdx new file mode 100644 index 0000000000..026139102e --- /dev/null +++ b/src/content/docs/changelog/2024.6.0.mdx @@ -0,0 +1,401 @@ +--- +description: "Changelog for ESPHome 2024.6.0." +title: "ESPHome 2024.6.0 - 19th June 2024" +pagefind: false +slug: "changelog/2024.6.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## An update on updates + +So we have a few updates to update you on this ~~update~~ release. +Please do read these release notes carefully as there are quite a few breaking changes that +we know will affect a large portion of users. + +Join us for the ESPHome Release Party for the 2024.6.0 release! We'll talk about the hard work put into +ESPHome over the past few months, its new home under the Open Home Foundation, and share with you the new logo! + +{/* markdownlint-disable-next-line MD033 */} + + +Jesse + +### ESPHome branding + +In April, Nabu Casa donated ESPHome to the newly found Open Home Foundation. This foundation, +which also owns Home Assistant, fights for the rights of privacy, choice, and sustainability +of the smart home - and everyone that lives in one. This was done to create a bulwark against +surveillance capitalism, the risk of buyout, and open-source projects becoming abandonware. +To an extent, this protection extends even against our future selves—so that smart home users +can continue to benefit for years, if not decades, no matter what comes. + +As part of this new governance, we decided to align the branding of Home Assistant and ESPHome, +the two consumer-facing projects of the foundation, to communicate that we share a common vision. + +This change will not have any impact on the day-to- day running of ESPHome. +Both Keith and I will remain full-time employees at Nabu Casa, a commercial partner of +the Open Home Foundation, to further develop ESPHome as the best way for anyone to create +smart home devices. To support our work, +[subscribe to Home Assistant Cloud by Nabu Casa](https://www.nabucasa.com/). +[Learn more about the Open Home Foundation](https://www.openhomefoundation.org/blog/announcing-the-open-home-foundation/) + +### Update Entities + +So, we created `update` entities. These are similar to the ones that Home Assistant shows now when +you have the ESPHome Add-on installed in Home Assistant OS, except those ones show you an update to the +version of the ESPHome Add-on and in the background will compile and upload new firmware to your device. + +These new `update` entities are a bit different. If you have acquired a device that was pre-installed +with ESPHome, the vendor you acquired the device from is now able to compile the firmware and host it +on a website along with a description of the firmware the device can read and present that there is an +update available for this device. You do not need to adopt the device into the ESPHome dashboard, and +you don't actually need the ESPHome dashboard installed. Using the new `http_request` OTA platform, +the device will be able to download the firmware and update itself. + +> [!NOTE] +> Update Entities require at least Home Assistant 2024.7 to show up and be controlled in the Home Assistant UI. + +### Voice Assistant Timers + +Home Assistant 2024.6 added support for starting, pausing, resuming, cancelling timers via Assist devices. +In this ESPHome release, we added new triggers to the [Voice Assistant](/components/voice_assistant/) +component to take advantage of these. Timers are only in memory, do not represent entities and are only available +on the device that started the timer. + +### OTA Platforms + +With the above mentioned `http_request` OTA platform, we made the decision to split out the current +`ota` server to its own platform to make the code more managable and to allow for more flexibility going forward. + +Because of this, all configurations that currently have `ota:` in them will fail to validate after +updating to this release. + +You will need to change the configuration by adding a new line as below: + +```yaml +# Old +ota: + +# New +ota: + platform: esphome +``` + +If you have a password set, it may look like the following: + +```yaml +# Old +ota: + password: "xxxx" + +# New +ota: + platform: esphome + password: "xxxx" +``` + +As part of this change also, [safe_mode](/components/safe_mode/) has been pulled out into its own +top level component. It is automatically included in any configuration that has an `ota` configuration block, +so there is nothing you need to do unless you were overriding some of the safe mode specific configurations. + +### 1-Wire + +Up until now, the `dallas` sensor platform contained the only 1-wire implementation in ESPHome. +There had been requests to add support for other 1-wire based components, so [@ssieb](https://github.com/ssieb) has +made a new top level [1-wire](/components/one_wire/) component that will allow for this. +In doing so, the `dallas` sensor platform has been removed, and replaced with `dallas_temp` +to allow for other Dallas sensors to be implemented that are not temperature sensors. + +```yaml +# Old +dallas: + - pin: GPIOXX + +sensor: + - platform: dallas + address: 0x1234567890abcdef + name: "My Sensor" + +# New +one_wire: + - platform: gpio + pin: GPIOXX + +sensor: + - platform: dallas_temp + address: 0x1234567890abcdef + name: "My Sensor" +``` + +### HTTP(s) Requests + +The [http_request](/components/http_request/) platform has been rewritten in this release to +add support when using ESP-IDF or when using the [rp2040](/components/rp2040/) platform. This will +also allow other ESPHome components to make HTTP(s) requests which includes the new `http_request` OTA platform and the +`update` entities. + +As part of this, the configuration has been changed quite a bit so please read the documentation for the latest +configuration options. + +### JSON parsing + +An internal helper component `json` has had some minor, but breaking changes that now require the parsing +callback function to return a boolean value, representing whether the parsing was successful or not. +This is mostly an internal change, but could be used by +[external components](/components/external_components/) or lambdas in YAML. + +{/* markdownlint-disable MD013 */} + +## Release 2024.6.1 - June 20 + +- debug_libretiny - Fix typo [esphome#6942](https://github.com/esphome/esphome/pull/6942) by [@Cossid](https://github.com/Cossid) +- Bump esphome-dashboard to 20240620.0 [esphome#6944](https://github.com/esphome/esphome/pull/6944) by [@jesserockz](https://github.com/jesserockz) + +## Release 2024.6.2 - June 25 + +- [core] Fix package merging with lists of primitives [esphome#6952](https://github.com/esphome/esphome/pull/6952) by [@jesserockz](https://github.com/jesserockz) +- [update] Set entity_category to config & Publish state to logs [esphome#6954](https://github.com/esphome/esphome/pull/6954) by [@jesserockz](https://github.com/jesserockz) +- Fix infinite loop in http_request for ESP-IDF. [esphome#6963](https://github.com/esphome/esphome/pull/6963) by [@kpfleming](https://github.com/kpfleming) +- ESP-IDF 4.x expects seconds for esp_task_wdt_init(), not milliseconds. [esphome#6964](https://github.com/esphome/esphome/pull/6964) by [@kpfleming](https://github.com/kpfleming) +- Onewire [esphome#6967](https://github.com/esphome/esphome/pull/6967) by [@ssieb](https://github.com/ssieb) +- [http_request] memory leak fix [esphome#6973](https://github.com/esphome/esphome/pull/6973) by [@gabest11](https://github.com/gabest11) +- Await cg.get_variable in Update component [esphome#6974](https://github.com/esphome/esphome/pull/6974) by [@bkaufx](https://github.com/bkaufx) +- [one-wire] fix potential hang [esphome#6976](https://github.com/esphome/esphome/pull/6976) by [@ssieb](https://github.com/ssieb) +- [midea] fix fan speed compatibility with some models [esphome#6978](https://github.com/esphome/esphome/pull/6978) by [@dudanov](https://github.com/dudanov) + +## Release 2024.6.3 - June 26 + +- [safe_mode] Set safe mode core data in disabled cases [esphome#6983](https://github.com/esphome/esphome/pull/6983) by [@jesserockz](https://github.com/jesserockz) +- [ota-esphome] Validate for multiple esphome ota instances [esphome#6984](https://github.com/esphome/esphome/pull/6984) by [@kbx81](https://github.com/kbx81) +- Improve 'body' handling in http_request on_response triggers [esphome#6968](https://github.com/esphome/esphome/pull/6968) by [@kpfleming](https://github.com/kpfleming) +- [ds1307] Initialize uninitialized struct members [esphome#6985](https://github.com/esphome/esphome/pull/6985) by [@ptr727](https://github.com/ptr727) +- Fix float encoding in modbus server [esphome#6986](https://github.com/esphome/esphome/pull/6986) by [@Petapton](https://github.com/Petapton) +- [dallas_temp] fix ds18s20 temp calc [esphome#6988](https://github.com/esphome/esphome/pull/6988) by [@ssieb](https://github.com/ssieb) +- [modbus-text-sensor] fix potential buffer overflow [esphome#6993](https://github.com/esphome/esphome/pull/6993) by [@dudanov](https://github.com/dudanov) + +## Release 2024.6.4 - June 27 + +- [ota-esphome] Merge configurations by port [esphome#7001](https://github.com/esphome/esphome/pull/7001) by [@kbx81](https://github.com/kbx81) +- Fix LEDC 100% is not 100% duty with ESP32 IDF [esphome#6997](https://github.com/esphome/esphome/pull/6997) by [@Links2004](https://github.com/Links2004) + +## Release 2024.6.5 - July 3 + +- [mpr121] await register parented [esphome#7014](https://github.com/esphome/esphome/pull/7014) by [@jesserockz](https://github.com/jesserockz) +- Move some consts for #4585 [esphome#7023](https://github.com/esphome/esphome/pull/7023) by [@kbx81](https://github.com/kbx81) +- [wifi] Only set default ttls phase 2 on esp-idf [esphome#7033](https://github.com/esphome/esphome/pull/7033) by [@jesserockz](https://github.com/jesserockz) + +## Release 2024.6.6 - July 3 + +- Bump dockerfile dependencies [esphome#7017](https://github.com/esphome/esphome/pull/7017) by [@jesserockz](https://github.com/jesserockz) +- [docker] Bump versions inside armv7 block [esphome#7022](https://github.com/esphome/esphome/pull/7022) by [@jesserockz](https://github.com/jesserockz) +- [docker] Fix docker build error fall through [esphome#7021](https://github.com/esphome/esphome/pull/7021) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- Add ADC multisampling [esphome#6330](https://github.com/esphome/esphome/pull/6330) by [@Mat931](https://github.com/Mat931) (new-feature) +- [voice_assistant] Timers [esphome#6821](https://github.com/esphome/esphome/pull/6821) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- GDK101 support [esphome#4703](https://github.com/esphome/esphome/pull/4703) by [@Szewcson](https://github.com/Szewcson) (new-integration) +- Add beken_spi_led_strip component [esphome#6515](https://github.com/esphome/esphome/pull/6515) by [@Mat931](https://github.com/Mat931) (new-integration) +- Separate `OTABackend` from OTA component [esphome#6459](https://github.com/esphome/esphome/pull/6459) by [@kbx81](https://github.com/kbx81) (new-integration) (breaking-change) +- SPI and I2C for ENS160 [esphome#6369](https://github.com/esphome/esphome/pull/6369) by [@latonita](https://github.com/latonita) (new-integration) (breaking-change) +- INA228/INA229, INA238/INA239, INA237 power/energy/charge monitor (I2C, SPI) [esphome#6138](https://github.com/esphome/esphome/pull/6138) by [@latonita](https://github.com/latonita) (new-integration) +- [haier] `text_sensor` and `button` platforms [esphome#6780](https://github.com/esphome/esphome/pull/6780) by [@paveldn](https://github.com/paveldn) (new-integration) +- LTR-303, LTR-329, LTR-553, LTR-556, LTR-559, LTR-659 Series of Lite-On Light (ALS) and Proximity(PS) sensors [esphome#6076](https://github.com/esphome/esphome/pull/6076) by [@latonita](https://github.com/latonita) (new-integration) +- Add host time platform; remove host support from sntp. [esphome#6854](https://github.com/esphome/esphome/pull/6854) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [ota] http_request update platform [esphome#5586](https://github.com/esphome/esphome/pull/5586) by [@oarcher](https://github.com/oarcher) (new-integration) +- [core] Update Entities [esphome#6885](https://github.com/esphome/esphome/pull/6885) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- New 1-wire component [esphome#6860](https://github.com/esphome/esphome/pull/6860) by [@ssieb](https://github.com/ssieb) (new-integration) (breaking-change) +- [display] SDL2 display driver for host platform [esphome#6825](https://github.com/esphome/esphome/pull/6825) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) + +### New Platforms + +- BedJet: expose the outlet temperature on the climate and as a sensor [esphome#6633](https://github.com/esphome/esphome/pull/6633) by [@javawizard](https://github.com/javawizard) (new-platform) +- mpr121: Add GPIO support [esphome#6776](https://github.com/esphome/esphome/pull/6776) by [@polyfloyd](https://github.com/polyfloyd) (new-platform) + +### Breaking Changes + +- Separate `OTABackend` from OTA component [esphome#6459](https://github.com/esphome/esphome/pull/6459) by [@kbx81](https://github.com/kbx81) (new-integration) (breaking-change) +- SPI and I2C for ENS160 [esphome#6369](https://github.com/esphome/esphome/pull/6369) by [@latonita](https://github.com/latonita) (new-integration) (breaking-change) +- Uncouple safe_mode from OTA [esphome#6759](https://github.com/esphome/esphome/pull/6759) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Fix incorrect naming of the AdaFruit MagTag display. [esphome#6810](https://github.com/esphome/esphome/pull/6810) by [@sasodoma](https://github.com/sasodoma) (breaking-change) +- [http_request] Add esp-idf and rp2040 support [esphome#3256](https://github.com/esphome/esphome/pull/3256) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Allow parse_json to return a boolean result [esphome#6884](https://github.com/esphome/esphome/pull/6884) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- New 1-wire component [esphome#6860](https://github.com/esphome/esphome/pull/6860) by [@ssieb](https://github.com/ssieb) (new-integration) (breaking-change) + +### Beta Changes + +- [CI] Fix for sdl [esphome#6892](https://github.com/esphome/esphome/pull/6892) by [@jesserockz](https://github.com/jesserockz) +- Add operation_speed option to X9C component [esphome#6890](https://github.com/esphome/esphome/pull/6890) by [@oliverhihn](https://github.com/oliverhihn) +- [host] Execute host program when using run command [esphome#6897](https://github.com/esphome/esphome/pull/6897) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20240613.0 [esphome#6901](https://github.com/esphome/esphome/pull/6901) by [@jesserockz](https://github.com/jesserockz) +- Synchronise Device Classes from Home Assistant [esphome#6904](https://github.com/esphome/esphome/pull/6904) by [@esphomebot](https://github.com/esphomebot) +- [ili9xxx] Fix init for GC9A01A [esphome#6913](https://github.com/esphome/esphome/pull/6913) by [@jesserockz](https://github.com/jesserockz) +- [mqtt] Fix datetime copy pasta [esphome#6914](https://github.com/esphome/esphome/pull/6914) by [@jesserockz](https://github.com/jesserockz) +- fix(dallas): make recovery time for 1-bit equal to that of 0-bit [esphome#6763](https://github.com/esphome/esphome/pull/6763) by [@muggenhor](https://github.com/muggenhor) +- [wifi] Fix some access point bugs related to esp-idf 4.4.7 [esphome#6928](https://github.com/esphome/esphome/pull/6928) by [@jesserockz](https://github.com/jesserockz) +- Rename legacy/modern to ota/factory [esphome#6922](https://github.com/esphome/esphome/pull/6922) by [@jesserockz](https://github.com/jesserockz) +- Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 [esphome#6926](https://github.com/esphome/esphome/pull/6926) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 5.4.0 to 6.0.0 in /.github/actions/build-image [esphome#6927](https://github.com/esphome/esphome/pull/6927) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.0.0 to 6.0.1 in /.github/actions/build-image [esphome#6934](https://github.com/esphome/esphome/pull/6934) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [network] Default ipv6 to false to always set the flags [esphome#6937](https://github.com/esphome/esphome/pull/6937) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- Add IRK support to ble_rssi [esphome#6422](https://github.com/esphome/esphome/pull/6422) by [@chbmuc](https://github.com/chbmuc) +- Add new Error type to skip prepending path [esphome#6716](https://github.com/esphome/esphome/pull/6716) by [@jesserockz](https://github.com/jesserockz) +- [github] Only save platformio cache for dev branch [esphome#6711](https://github.com/esphome/esphome/pull/6711) by [@jesserockz](https://github.com/jesserockz) +- Only cache docker images on dev branch [esphome#6714](https://github.com/esphome/esphome/pull/6714) by [@jesserockz](https://github.com/jesserockz) +- Add pylint to git pre-commit hooks [esphome#6726](https://github.com/esphome/esphome/pull/6726) by [@clydebarrow](https://github.com/clydebarrow) +- separate debug component for each platform in different file [esphome#6715](https://github.com/esphome/esphome/pull/6715) by [@tomaszduda23](https://github.com/tomaszduda23) +- GDK101 support [esphome#4703](https://github.com/esphome/esphome/pull/4703) by [@Szewcson](https://github.com/Szewcson) (new-integration) +- Typing hint and doc fixes [esphome#6729](https://github.com/esphome/esphome/pull/6729) by [@clydebarrow](https://github.com/clydebarrow) +- time_based_cover.cpp with manual control fix [esphome#6719](https://github.com/esphome/esphome/pull/6719) by [@Jorge-Crespo-Celdran](https://github.com/Jorge-Crespo-Celdran) +- [CST816] Add support for Hynitron Microelectronics CST826 capacitive touch [esphome#6682](https://github.com/esphome/esphome/pull/6682) by [@lboue](https://github.com/lboue) +- Bump pytest from 8.1.1 to 8.2.0 [esphome#6732](https://github.com/esphome/esphome/pull/6732) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [web_server] Minor python formatting [esphome#6735](https://github.com/esphome/esphome/pull/6735) by [@jesserockz](https://github.com/jesserockz) +- [esp32_ble] Fix compilation error on esp32c6 [esphome#6734](https://github.com/esphome/esphome/pull/6734) by [@jesserockz](https://github.com/jesserockz) +- [core] Fix minor formatting issues [esphome#6738](https://github.com/esphome/esphome/pull/6738) by [@jesserockz](https://github.com/jesserockz) +- [config] Improve error reporting [esphome#6736](https://github.com/esphome/esphome/pull/6736) by [@clydebarrow](https://github.com/clydebarrow) +- [tests] `test2.yaml` has become too large [esphome#6750](https://github.com/esphome/esphome/pull/6750) by [@kbx81](https://github.com/kbx81) +- Bump esphome-dashboard from 20240412.0 to 20240429.1 [esphome#6743](https://github.com/esphome/esphome/pull/6743) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- BedJet: expose the outlet temperature on the climate and as a sensor [esphome#6633](https://github.com/esphome/esphome/pull/6633) by [@javawizard](https://github.com/javawizard) (new-platform) +- Add beken_spi_led_strip component [esphome#6515](https://github.com/esphome/esphome/pull/6515) by [@Mat931](https://github.com/Mat931) (new-integration) +- i2c: fix format string specifiers [esphome#6746](https://github.com/esphome/esphome/pull/6746) by [@ius](https://github.com/ius) +- Allow one timing to cancel others [esphome#6744](https://github.com/esphome/esphome/pull/6744) by [@lbilger](https://github.com/lbilger) +- fix rp2040_pio_led flicker and proper multi-strip support [esphome#6194](https://github.com/esphome/esphome/pull/6194) by [@Papa-DMan](https://github.com/Papa-DMan) +- Mirage remote receiver & transmitter [esphome#6479](https://github.com/esphome/esphome/pull/6479) by [@heggi](https://github.com/heggi) +- WPA2 Enterprise - Explicitly set TTLS Phase 2 [esphome#6436](https://github.com/esphome/esphome/pull/6436) by [@shxshxshxshx](https://github.com/shxshxshxshx) +- Fix Prometheus Output to Match Spec [esphome#6032](https://github.com/esphome/esphome/pull/6032) by [@sdwilsh](https://github.com/sdwilsh) +- Skip gpio validation [esphome#5615](https://github.com/esphome/esphome/pull/5615) by [@amcfague](https://github.com/amcfague) +- [core] Migrate to pyproject.toml [esphome#6737](https://github.com/esphome/esphome/pull/6737) by [@jesserockz](https://github.com/jesserockz) +- [core] Move pytest config into pyproject.toml [esphome#6740](https://github.com/esphome/esphome/pull/6740) by [@jesserockz](https://github.com/jesserockz) +- [core] Move pylint config into pyproject.toml [esphome#6739](https://github.com/esphome/esphome/pull/6739) by [@jesserockz](https://github.com/jesserockz) +- [core] Fix running pylint via pre-commit from GUI apps [esphome#6754](https://github.com/esphome/esphome/pull/6754) by [@jesserockz](https://github.com/jesserockz) +- Separate `OTABackend` from OTA component [esphome#6459](https://github.com/esphome/esphome/pull/6459) by [@kbx81](https://github.com/kbx81) (new-integration) (breaking-change) +- Add ADC multisampling [esphome#6330](https://github.com/esphome/esphome/pull/6330) by [@Mat931](https://github.com/Mat931) (new-feature) +- [core] Fix some extends cases [esphome#6748](https://github.com/esphome/esphome/pull/6748) by [@jesserockz](https://github.com/jesserockz) +- Port wifi_component_esp32_arduino from tcpip_adapter to esp_netif [esphome#6476](https://github.com/esphome/esphome/pull/6476) by [@paravoid](https://github.com/paravoid) +- SPI and I2C for ENS160 [esphome#6369](https://github.com/esphome/esphome/pull/6369) by [@latonita](https://github.com/latonita) (new-integration) (breaking-change) +- Fix wifi compile error on IDF 5.1+ [esphome#6756](https://github.com/esphome/esphome/pull/6756) by [@kbx81](https://github.com/kbx81) +- [core] Update some coroutine priorities [esphome#6755](https://github.com/esphome/esphome/pull/6755) by [@jesserockz](https://github.com/jesserockz) +- INA228/INA229, INA238/INA239, INA237 power/energy/charge monitor (I2C, SPI) [esphome#6138](https://github.com/esphome/esphome/pull/6138) by [@latonita](https://github.com/latonita) (new-integration) +- [nextion] Fix type on sprintf for IDF v5 [esphome#6758](https://github.com/esphome/esphome/pull/6758) by [@edwardtfn](https://github.com/edwardtfn) +- [core] Remove references to deleted setup.py [esphome#6757](https://github.com/esphome/esphome/pull/6757) by [@jesserockz](https://github.com/jesserockz) +- Fix pip3 install [esphome#6771](https://github.com/esphome/esphome/pull/6771) by [@syssi](https://github.com/syssi) +- [tests] make test_build_components work with venv without installing esphome [esphome#6761](https://github.com/esphome/esphome/pull/6761) by [@tomaszduda23](https://github.com/tomaszduda23) +- separate deep_sleep component for each platform in different file [esphome#6762](https://github.com/esphome/esphome/pull/6762) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump actions/checkout from 4.1.5 to 4.1.6 [esphome#6764](https://github.com/esphome/esphome/pull/6764) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- add rp2040 support to the wizard [esphome#6239](https://github.com/esphome/esphome/pull/6239) by [@fodfodfod](https://github.com/fodfodfod) +- [ili9xxx] Add 18bit mode selection and custom init sequence [esphome#6745](https://github.com/esphome/esphome/pull/6745) by [@clydebarrow](https://github.com/clydebarrow) +- Tiny fix in automation.h - unused return value removed [esphome#6760](https://github.com/esphome/esphome/pull/6760) by [@latonita](https://github.com/latonita) +- Uncouple safe_mode from OTA [esphome#6759](https://github.com/esphome/esphome/pull/6759) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Add support for acting as Modbus server [esphome#4874](https://github.com/esphome/esphome/pull/4874) by [@JeroenVanOort](https://github.com/JeroenVanOort) +- Add on_safe_mode trigger [esphome#6790](https://github.com/esphome/esphome/pull/6790) by [@kbx81](https://github.com/kbx81) +- [sx1509] Output open drain pin mode [esphome#6788](https://github.com/esphome/esphome/pull/6788) by [@Swamp-Ig](https://github.com/Swamp-Ig) +- [ledc] Change some logging lines from debug to verbose [esphome#6796](https://github.com/esphome/esphome/pull/6796) by [@jesserockz](https://github.com/jesserockz) +- [haier] `text_sensor` and `button` platforms [esphome#6780](https://github.com/esphome/esphome/pull/6780) by [@paveldn](https://github.com/paveldn) (new-integration) +- mpr121: Add GPIO support [esphome#6776](https://github.com/esphome/esphome/pull/6776) by [@polyfloyd](https://github.com/polyfloyd) (new-platform) +- [nextion] Add basic functions to Intelligent series [esphome#6791](https://github.com/esphome/esphome/pull/6791) by [@edwardtfn](https://github.com/edwardtfn) +- Fix incorrect naming of the AdaFruit MagTag display. [esphome#6810](https://github.com/esphome/esphome/pull/6810) by [@sasodoma](https://github.com/sasodoma) (breaking-change) +- [tuya] add support for extended services [esphome#6808](https://github.com/esphome/esphome/pull/6808) by [@augs](https://github.com/augs) +- fix libretiny regression from #6715 [esphome#6806](https://github.com/esphome/esphome/pull/6806) by [@augs](https://github.com/augs) +- Make i2s_audio compatible with IDF 5+ [esphome#6534](https://github.com/esphome/esphome/pull/6534) by [@pimdo](https://github.com/pimdo) +- Fix compile errors on ESP32-C6 with latest ESP-IDF [esphome#6822](https://github.com/esphome/esphome/pull/6822) by [@DAVe3283](https://github.com/DAVe3283) +- Use uint8_t instead of uint32_t for 8-bit values on mitsubishi [esphome#6824](https://github.com/esphome/esphome/pull/6824) by [@DAVe3283](https://github.com/DAVe3283) +- Make SPI Ethernet (W5500) compatible with ESP-IDF v5 [esphome#6778](https://github.com/esphome/esphome/pull/6778) by [@fightforlife](https://github.com/fightforlife) +- [wake_on_lan] Make component platform independent [esphome#6815](https://github.com/esphome/esphome/pull/6815) by [@clydebarrow](https://github.com/clydebarrow) +- Fix a bunch of components for IDF 5 compatibility and #6802 [esphome#6805](https://github.com/esphome/esphome/pull/6805) by [@kbx81](https://github.com/kbx81) +- Bump docker/login-action from 3.1.0 to 3.2.0 [esphome#6823](https://github.com/esphome/esphome/pull/6823) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-cov from 4.1.0 to 5.0.0 [esphome#6580](https://github.com/esphome/esphome/pull/6580) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 6.0.4 to 6.0.5 [esphome#6635](https://github.com/esphome/esphome/pull/6635) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump black from 24.4.0 to 24.4.2 [esphome#6646](https://github.com/esphome/esphome/pull/6646) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [voice_assistant] Timers [esphome#6821](https://github.com/esphome/esphome/pull/6821) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- [web_server] add entity sorting for v3 [esphome#6445](https://github.com/esphome/esphome/pull/6445) by [@RFDarter](https://github.com/RFDarter) +- [micro_wake_word] Ensure model string is Path [esphome#6826](https://github.com/esphome/esphome/pull/6826) by [@synesthesiam](https://github.com/synesthesiam) +- Fix DHT reading timing for SI7021 on ESP32 [esphome#6604](https://github.com/esphome/esphome/pull/6604) by [@erdembey](https://github.com/erdembey) +- [core] Const-ify some Component fields [esphome#6831](https://github.com/esphome/esphome/pull/6831) by [@jesserockz](https://github.com/jesserockz) +- LTR-303, LTR-329, LTR-553, LTR-556, LTR-559, LTR-659 Series of Lite-On Light (ALS) and Proximity(PS) sensors [esphome#6076](https://github.com/esphome/esphome/pull/6076) by [@latonita](https://github.com/latonita) (new-integration) +- Update const.py added missing millimeter [esphome#6834](https://github.com/esphome/esphome/pull/6834) by [@NonaSuomy](https://github.com/NonaSuomy) +- Fix log message in VA for IDF 5 [esphome#6839](https://github.com/esphome/esphome/pull/6839) by [@kbx81](https://github.com/kbx81) +- Replace random non-ascii-print characters with standard substitutes [esphome#6840](https://github.com/esphome/esphome/pull/6840) by [@ptr727](https://github.com/ptr727) +- Wireguard support for bk72 microcontrollers [esphome#6842](https://github.com/esphome/esphome/pull/6842) by [@droscy](https://github.com/droscy) +- Add messages when WiFi and Ethernet components set 'warning' flag. [esphome#6850](https://github.com/esphome/esphome/pull/6850) by [@kpfleming](https://github.com/kpfleming) +- [sntp] fix for ESP-IDF > 5.0 [esphome#6769](https://github.com/esphome/esphome/pull/6769) by [@HeMan](https://github.com/HeMan) +- Avoid unsafe git error when container user and file config volume permissions don't match [esphome#6843](https://github.com/esphome/esphome/pull/6843) by [@ptr727](https://github.com/ptr727) +- Add Ethernet MAC address to ethernet_info [esphome#6835](https://github.com/esphome/esphome/pull/6835) by [@ptr727](https://github.com/ptr727) +- Add host time platform; remove host support from sntp. [esphome#6854](https://github.com/esphome/esphome/pull/6854) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [wireguard] Implement workaround for crash on IDF 5+ [esphome#6846](https://github.com/esphome/esphome/pull/6846) by [@kbx81](https://github.com/kbx81) +- [ft5x06] Interrupt pin and code quality improvements [esphome#6851](https://github.com/esphome/esphome/pull/6851) by [@jesserockz](https://github.com/jesserockz) +- [ethernet] Add config option to set arbitrary PHY register values [esphome#6836](https://github.com/esphome/esphome/pull/6836) by [@heythisisnate](https://github.com/heythisisnate) +- Add carrier_frequency option to remote_transmitter.transmit_aeha [esphome#6792](https://github.com/esphome/esphome/pull/6792) by [@svxa](https://github.com/svxa) +- Add `invert_position_report` to `tuya.cover` [esphome#6020](https://github.com/esphome/esphome/pull/6020) by [@wrouesnel](https://github.com/wrouesnel) +- [Tuya Climate] Support both datapoint and pins for active state [esphome#6789](https://github.com/esphome/esphome/pull/6789) by [@zry98](https://github.com/zry98) +- [config] Allow file: scheme for git external components [esphome#6844](https://github.com/esphome/esphome/pull/6844) by [@clydebarrow](https://github.com/clydebarrow) +- [ota] http_request update platform [esphome#5586](https://github.com/esphome/esphome/pull/5586) by [@oarcher](https://github.com/oarcher) (new-integration) +- [logger] Fix defines for development [esphome#6870](https://github.com/esphome/esphome/pull/6870) by [@jesserockz](https://github.com/jesserockz) +- [docker] Avoid unsafe git error when container user and file config volume permissions don't match [esphome#6873](https://github.com/esphome/esphome/pull/6873) by [@ptr727](https://github.com/ptr727) +- [datetime] Add logs on DateCall perform [esphome#6868](https://github.com/esphome/esphome/pull/6868) by [@RFDarter](https://github.com/RFDarter) +- fix: arduino media player sets wrong state for announcements [esphome#6849](https://github.com/esphome/esphome/pull/6849) by [@gnumpi](https://github.com/gnumpi) +- [datetime] datetime-datetime strptime support value string without seconds [esphome#6867](https://github.com/esphome/esphome/pull/6867) by [@RFDarter](https://github.com/RFDarter) +- Update webserver local assets to 20240608-093147 [esphome#6874](https://github.com/esphome/esphome/pull/6874) by [@esphomebot](https://github.com/esphomebot) +- fix: arduino media player still sets wrong state. [esphome#6875](https://github.com/esphome/esphome/pull/6875) by [@gnumpi](https://github.com/gnumpi) +- [http_request] Add esp-idf and rp2040 support [esphome#3256](https://github.com/esphome/esphome/pull/3256) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [i2s_speaker] A few fixes [esphome#6872](https://github.com/esphome/esphome/pull/6872) by [@jesserockz](https://github.com/jesserockz) +- [voice_assistant] Write less data to speaker each loop [esphome#6877](https://github.com/esphome/esphome/pull/6877) by [@jesserockz](https://github.com/jesserockz) +- Bump docker/build-push-action from 5.3.0 to 5.4.0 in /.github/actions/build-image [esphome#6883](https://github.com/esphome/esphome/pull/6883) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow parse_json to return a boolean result [esphome#6884](https://github.com/esphome/esphome/pull/6884) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Update webserver local assets to 20240610-230854 [esphome#6886](https://github.com/esphome/esphome/pull/6886) by [@esphomebot](https://github.com/esphomebot) +- [core] Update Entities [esphome#6885](https://github.com/esphome/esphome/pull/6885) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- [Dockerfile] Sync platformio version with requirements.txt [esphome#6888](https://github.com/esphome/esphome/pull/6888) by [@ptr727](https://github.com/ptr727) +- [Deep sleep] Compilation error with IDF ≥ 5.* [esphome#6879](https://github.com/esphome/esphome/pull/6879) by [@asergunov](https://github.com/asergunov) +- [animation] Allow loading external url at build time [esphome#6876](https://github.com/esphome/esphome/pull/6876) by [@landonr](https://github.com/landonr) +- [waveshare_epaper] Add support for 13.3in-k [esphome#6443](https://github.com/esphome/esphome/pull/6443) by [@pgericson](https://github.com/pgericson) +- Climate IR LG - Support fan only mode and all "on" commands [esphome#3712](https://github.com/esphome/esphome/pull/3712) by [@danieldabate](https://github.com/danieldabate) +- [safe_mode] Allow user-defined interval for successful boot [esphome#6882](https://github.com/esphome/esphome/pull/6882) by [@NMartin354](https://github.com/NMartin354) +- New 1-wire component [esphome#6860](https://github.com/esphome/esphome/pull/6860) by [@ssieb](https://github.com/ssieb) (new-integration) (breaking-change) +- [he60r] Don't publish state unless it has changed. [BUGFIX] [esphome#6869](https://github.com/esphome/esphome/pull/6869) by [@clydebarrow](https://github.com/clydebarrow) +- [image] Make PIL import local [esphome#6864](https://github.com/esphome/esphome/pull/6864) by [@guillempages](https://github.com/guillempages) +- [config] Retain path information in validated configuration [esphome#6785](https://github.com/esphome/esphome/pull/6785) by [@clydebarrow](https://github.com/clydebarrow) +- WebSocket overrides check_origin for reverse proxy configuration [esphome#6845](https://github.com/esphome/esphome/pull/6845) by [@gabest11](https://github.com/gabest11) +- [config] Early termination of validation steps on error [esphome#6837](https://github.com/esphome/esphome/pull/6837) by [@clydebarrow](https://github.com/clydebarrow) +- Fix media_player.volume_set when media player is not started [esphome#6859](https://github.com/esphome/esphome/pull/6859) by [@tetele](https://github.com/tetele) +- [display] SDL2 display driver for host platform [esphome#6825](https://github.com/esphome/esphome/pull/6825) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [ili9xxx] Implement st7735 support [esphome#6838](https://github.com/esphome/esphome/pull/6838) by [@clydebarrow](https://github.com/clydebarrow) +- [CI] Fix for sdl [esphome#6892](https://github.com/esphome/esphome/pull/6892) by [@jesserockz](https://github.com/jesserockz) +- Add operation_speed option to X9C component [esphome#6890](https://github.com/esphome/esphome/pull/6890) by [@oliverhihn](https://github.com/oliverhihn) +- [host] Execute host program when using run command [esphome#6897](https://github.com/esphome/esphome/pull/6897) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20240613.0 [esphome#6901](https://github.com/esphome/esphome/pull/6901) by [@jesserockz](https://github.com/jesserockz) +- Synchronise Device Classes from Home Assistant [esphome#6904](https://github.com/esphome/esphome/pull/6904) by [@esphomebot](https://github.com/esphomebot) +- [ili9xxx] Fix init for GC9A01A [esphome#6913](https://github.com/esphome/esphome/pull/6913) by [@jesserockz](https://github.com/jesserockz) +- [mqtt] Fix datetime copy pasta [esphome#6914](https://github.com/esphome/esphome/pull/6914) by [@jesserockz](https://github.com/jesserockz) +- fix(dallas): make recovery time for 1-bit equal to that of 0-bit [esphome#6763](https://github.com/esphome/esphome/pull/6763) by [@muggenhor](https://github.com/muggenhor) +- [wifi] Fix some access point bugs related to esp-idf 4.4.7 [esphome#6928](https://github.com/esphome/esphome/pull/6928) by [@jesserockz](https://github.com/jesserockz) +- Rename legacy/modern to ota/factory [esphome#6922](https://github.com/esphome/esphome/pull/6922) by [@jesserockz](https://github.com/jesserockz) +- Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 [esphome#6926](https://github.com/esphome/esphome/pull/6926) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 5.4.0 to 6.0.0 in /.github/actions/build-image [esphome#6927](https://github.com/esphome/esphome/pull/6927) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.0.0 to 6.0.1 in /.github/actions/build-image [esphome#6934](https://github.com/esphome/esphome/pull/6934) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [network] Default ipv6 to false to always set the flags [esphome#6937](https://github.com/esphome/esphome/pull/6937) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.7.0.mdx b/src/content/docs/changelog/2024.7.0.mdx new file mode 100644 index 0000000000..7c115acd60 --- /dev/null +++ b/src/content/docs/changelog/2024.7.0.mdx @@ -0,0 +1,169 @@ +--- +description: "Changelog for ESPHome 2024.7.0." +title: "ESPHome 2024.7.0 - 17th July 2024" +pagefind: false +slug: "changelog/2024.7.0" +--- + +## microWakeWord + +The `micro_wake_word` component has been updated to "version 2". +This brings the capability to configure multiple models per device and has a `vad` model for +voice activity detection. + +The configuration has a breaking change to support these new features. + +```yaml +micro_wake_word: + model: okay_nabu +``` + +needs to be changed to the following: + +```yaml +micro_wake_word: + models: + - okay_nabu +``` + +Please see the [Documentation](/components/micro_wake_word/) for the full configuration. + +{/* markdownlint-disable MD013 */} + +## Release 2024.7.1 - July 22 + +- Prevent rename from deleting new config [esphome#7104](https://github.com/esphome/esphome/pull/7104) by [@acortelyou](https://github.com/acortelyou) +- [i2s_microphone] Partially revert #7092 so microphone volume doesn't change [esphome#7109](https://github.com/esphome/esphome/pull/7109) by [@kahrendt](https://github.com/kahrendt) +- [heatpumpir] Fix BK72XX Compile error with IRremoteESP8266 [esphome#6955](https://github.com/esphome/esphome/pull/6955) by [@dianlight](https://github.com/dianlight) +- [http_request] allow basic auth for idf [esphome#7086](https://github.com/esphome/esphome/pull/7086) by [@oarcher](https://github.com/oarcher) +- Fixes sml parser to process extended length lists with a number of items that is dividable by 16 [esphome#6148](https://github.com/esphome/esphome/pull/6148) by [@irgendwienet](https://github.com/irgendwienet) + +## Release 2024.7.2 - July 25 + +- [http_request] Change default timeout to 4.5s [esphome#7123](https://github.com/esphome/esphome/pull/7123) by [@jesserockz](https://github.com/jesserockz) +- [http_request] Fix ESP-IDF follow redirect [esphome#7101](https://github.com/esphome/esphome/pull/7101) by [@dentra](https://github.com/dentra) + +## Release 2024.7.3 - August 1 + +- [pmwcs3] Add delay after sending REG_READ_START [esphome#7130](https://github.com/esphome/esphome/pull/7130) by [@thevogoncoder](https://github.com/thevogoncoder) +- Fix for Mitsubishi units that only support cooling [esphome#7143](https://github.com/esphome/esphome/pull/7143) by [@RubyBailey](https://github.com/RubyBailey) +- [micro_wake_word] Fix VAD detection and modify detection computation [esphome#7164](https://github.com/esphome/esphome/pull/7164) by [@kahrendt](https://github.com/kahrendt) + +## Full list of changes + +### New Features + +- [uptime] Add new timestamp type for uptime sensor [esphome#7029](https://github.com/esphome/esphome/pull/7029) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### Breaking Changes + +- [dooya] Flip bit timings [esphome#6947](https://github.com/esphome/esphome/pull/6947) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [modbus_text_sensor] new default ANSI encoding type [esphome#6975](https://github.com/esphome/esphome/pull/6975) by [@dudanov](https://github.com/dudanov) (breaking-change) +- [micro_wake_word] Version 2 [esphome#7032](https://github.com/esphome/esphome/pull/7032) by [@kahrendt](https://github.com/kahrendt) (breaking-change) + +### Beta Changes + +- helpers.cpp: Fix GLIBCXX_RELEASE check < 8 [esphome#7062](https://github.com/esphome/esphome/pull/7062) by [@ferbar](https://github.com/ferbar) +- Fix pmsa003i cold boot marked as failed on ESP32 et al [esphome#7064](https://github.com/esphome/esphome/pull/7064) by [@z3liff](https://github.com/z3liff) +- [http_request] Fix follow_redirects on arduino [esphome#7054](https://github.com/esphome/esphome/pull/7054) by [@guillempages](https://github.com/guillempages) +- [ethernet] Fix compile warning for IPv6 [esphome#7048](https://github.com/esphome/esphome/pull/7048) by [@HeMan](https://github.com/HeMan) +- Update webserver local assets to 20240704-081526 [esphome#7041](https://github.com/esphome/esphome/pull/7041) by [@esphomebot](https://github.com/esphomebot) +- Add braces to if statement to avoid compiler warning. [esphome#7036](https://github.com/esphome/esphome/pull/7036) by [@colmbuckley](https://github.com/colmbuckley) +- [mitsubishi] Fix current temperature [esphome#6909](https://github.com/esphome/esphome/pull/6909) by [@ttaborda](https://github.com/ttaborda) +- [climate] fix dump output of unsupported features [esphome#7005](https://github.com/esphome/esphome/pull/7005) by [@dudanov](https://github.com/dudanov) +- [climate-traits] improved performance [esphome#7006](https://github.com/esphome/esphome/pull/7006) by [@dudanov](https://github.com/dudanov) +- Add default icon to restart button [esphome#7076](https://github.com/esphome/esphome/pull/7076) by [@leejoow](https://github.com/leejoow) +- Add support for the Gree YAC1FB9 in climate_ir [esphome#7056](https://github.com/esphome/esphome/pull/7056) by [@topeju](https://github.com/topeju) +- add ESP32-C6 support to esp32_can [esphome#7063](https://github.com/esphome/esphome/pull/7063) by [@Adminius](https://github.com/Adminius) +- Fix voice assistant crash when no speaker configured [esphome#7075](https://github.com/esphome/esphome/pull/7075) by [@kevdliu](https://github.com/kevdliu) +- Bump HeatpumpIR, add protocols, remove IRremoteESP8266 [esphome#6996](https://github.com/esphome/esphome/pull/6996) by [@nagyrobi](https://github.com/nagyrobi) +- LTR390 separate ALS and UV gain and resolution [esphome#7026](https://github.com/esphome/esphome/pull/7026) by [@latonita](https://github.com/latonita) +- [improv_serial] Fix linker error created in #6998 [esphome#7082](https://github.com/esphome/esphome/pull/7082) by [@kbx81](https://github.com/kbx81) +- [i2s_audio] Allow config for primary/secondary i2s mode [esphome#7092](https://github.com/esphome/esphome/pull/7092) by [@jesserockz](https://github.com/jesserockz) +- [micro_wake_word] Allow simpler model config [esphome#7094](https://github.com/esphome/esphome/pull/7094) by [@jesserockz](https://github.com/jesserockz) +- [ota] Print Arduino update errors [esphome#7096](https://github.com/esphome/esphome/pull/7096) by [@jesserockz](https://github.com/jesserockz) + +### All changes + +- [CI] Update device class sync script for update entities [esphome#6895](https://github.com/esphome/esphome/pull/6895) by [@jesserockz](https://github.com/jesserockz) +- X9c operation speed [esphome#6898](https://github.com/esphome/esphome/pull/6898) by [@oliverhihn](https://github.com/oliverhihn) +- Bump actions/checkout from 4.1.6 to 4.1.7 [esphome#6900](https://github.com/esphome/esphome/pull/6900) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [CI] Allow clang-tidy to see IDF components [esphome#6903](https://github.com/esphome/esphome/pull/6903) by [@kbx81](https://github.com/kbx81) +- [esp32_camera] Use newer library version (for #6802) [esphome#6809](https://github.com/esphome/esphome/pull/6809) by [@kbx81](https://github.com/kbx81) +- [micro_wake_word] Pin to esp-tflite-micro v1.3.1 [esphome#6906](https://github.com/esphome/esphome/pull/6906) by [@kbx81](https://github.com/kbx81) +- VEML7700 Fix GCC build warnings [esphome#6881](https://github.com/esphome/esphome/pull/6881) by [@latonita](https://github.com/latonita) +- IDF 5 fixes for #6802 [esphome#6911](https://github.com/esphome/esphome/pull/6911) by [@kbx81](https://github.com/kbx81) +- [CI-ethernet] Add/fix/organize/clean up ethernet component tests [esphome#6916](https://github.com/esphome/esphome/pull/6916) by [@kbx81](https://github.com/kbx81) +- [CI-a01nyub] Consolidate test files [esphome#6917](https://github.com/esphome/esphome/pull/6917) by [@kbx81](https://github.com/kbx81) +- [CI-api] Test fix for IDF 5+ [esphome#6918](https://github.com/esphome/esphome/pull/6918) by [@kbx81](https://github.com/kbx81) +- [CI-http_request] Test fix for IDF 5+ [esphome#6919](https://github.com/esphome/esphome/pull/6919) by [@kbx81](https://github.com/kbx81) +- [CI-wireguard] Test file consolidation [esphome#6920](https://github.com/esphome/esphome/pull/6920) by [@kbx81](https://github.com/kbx81) +- [CI-esp32_hall] Remove IDF test [esphome#6921](https://github.com/esphome/esphome/pull/6921) by [@kbx81](https://github.com/kbx81) +- [CI] Introduce testing for IDF 5 (and other arbitrary framework versions) [esphome#6802](https://github.com/esphome/esphome/pull/6802) by [@kbx81](https://github.com/kbx81) +- uart: allow setting the UART id in final_validate_device_schema [esphome#6923](https://github.com/esphome/esphome/pull/6923) by [@paravoid](https://github.com/paravoid) +- Bump peter-evans/create-pull-request from 6.0.5 to 6.1.0 [esphome#6935](https://github.com/esphome/esphome/pull/6935) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix garbled graphics on LILYGO T4-S3 display [esphome#6910](https://github.com/esphome/esphome/pull/6910) by [@manuelkasper](https://github.com/manuelkasper) +- Update cover.h for open() and close() compiler warnings [esphome#6936](https://github.com/esphome/esphome/pull/6936) by [@peter--s](https://github.com/peter--s) +- [CI] Add debug component test for LibreTiny [esphome#6945](https://github.com/esphome/esphome/pull/6945) by [@kbx81](https://github.com/kbx81) +- [dooya] Flip bit timings [esphome#6947](https://github.com/esphome/esphome/pull/6947) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [qspi_amoled] Fix display remaining blank after update() before setup completion [esphome#6958](https://github.com/esphome/esphome/pull/6958) by [@manuelkasper](https://github.com/manuelkasper) +- Bump docker/build-push-action from 6.0.1 to 6.1.0 in /.github/actions/build-image [esphome#6962](https://github.com/esphome/esphome/pull/6962) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Synchronise Device Classes from Home Assistant [esphome#6966](https://github.com/esphome/esphome/pull/6966) by [@esphomebot](https://github.com/esphomebot) +- [qspi_amoled] Fix clear/fill with rotation [esphome#6960](https://github.com/esphome/esphome/pull/6960) by [@manuelkasper](https://github.com/manuelkasper) +- [script] allow template parameters [esphome#6972](https://github.com/esphome/esphome/pull/6972) by [@ssieb](https://github.com/ssieb) +- [haier] climate ID auto generation [esphome#6949](https://github.com/esphome/esphome/pull/6949) by [@dudanov](https://github.com/dudanov) +- [core] Add script to extract actions, conditions, and pin_providers [esphome#6929](https://github.com/esphome/esphome/pull/6929) by [@jesserockz](https://github.com/jesserockz) +- [external_files] Move common `download_content` function to `external_files.py` [esphome#6982](https://github.com/esphome/esphome/pull/6982) by [@jesserockz](https://github.com/jesserockz) +- Do not build mDNS when mDNS is disabled via yaml [esphome#6979](https://github.com/esphome/esphome/pull/6979) by [@Links2004](https://github.com/Links2004) +- Bump HeatpumpIR and IRremoteESP8266 [esphome#6948](https://github.com/esphome/esphome/pull/6948) by [@nagyrobi](https://github.com/nagyrobi) +- [CI] Add more mdns and safe_mode tests [esphome#6990](https://github.com/esphome/esphome/pull/6990) by [@kbx81](https://github.com/kbx81) +- [CI] Remove old test yamls from CI runs [esphome#6991](https://github.com/esphome/esphome/pull/6991) by [@kbx81](https://github.com/kbx81) +- [CI] Update tests to run against IDF 5.1 [esphome#6992](https://github.com/esphome/esphome/pull/6992) by [@kbx81](https://github.com/kbx81) +- Bump docker/build-push-action from 6.1.0 to 6.2.0 in /.github/actions/build-image [esphome#6999](https://github.com/esphome/esphome/pull/6999) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [tuya] implement command 0x22 - datapoint-async [esphome#6980](https://github.com/esphome/esphome/pull/6980) by [@christiaanderidder](https://github.com/christiaanderidder) +- Allow wireguard to bind to PPP interface [esphome#6989](https://github.com/esphome/esphome/pull/6989) by [@droscy](https://github.com/droscy) +- [modbus_text_sensor] new default ANSI encoding type [esphome#6975](https://github.com/esphome/esphome/pull/6975) by [@dudanov](https://github.com/dudanov) (breaking-change) +- [CI] Remove old test yaml files [esphome#7002](https://github.com/esphome/esphome/pull/7002) by [@kbx81](https://github.com/kbx81) +- Revert "[CI] Update tests to run against IDF 5.1" [esphome#7003](https://github.com/esphome/esphome/pull/7003) by [@jesserockz](https://github.com/jesserockz) +- Enable devcontainer linters [esphome#7019](https://github.com/esphome/esphome/pull/7019) by [@orland0m](https://github.com/orland0m) +- 'uart' and 'improv_serial' need to understand non-UART logger configurations [esphome#6998](https://github.com/esphome/esphome/pull/6998) by [@kpfleming](https://github.com/kpfleming) +- Make crc8 const-correct [esphome#7027](https://github.com/esphome/esphome/pull/7027) by [@nattgris](https://github.com/nattgris) +- [CI] Run all tests when a base test changes [esphome#7010](https://github.com/esphome/esphome/pull/7010) by [@kbx81](https://github.com/kbx81) +- [CI] Update tests to run against IDF 5.1 [esphome#7011](https://github.com/esphome/esphome/pull/7011) by [@kbx81](https://github.com/kbx81) +- [uptime] Add new timestamp type for uptime sensor [esphome#7029](https://github.com/esphome/esphome/pull/7029) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Fix compile errors on ESP32-C6 with W5500 SPI ethernet [esphome#7030](https://github.com/esphome/esphome/pull/7030) by [@LeeHanYeong](https://github.com/LeeHanYeong) +- Bump docker/setup-buildx-action from 3.3.0 to 3.4.0 [esphome#7043](https://github.com/esphome/esphome/pull/7043) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.2.0 to 6.3.0 in /.github/actions/build-image [esphome#7038](https://github.com/esphome/esphome/pull/7038) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-qemu-action from 3.0.0 to 3.1.0 [esphome#7039](https://github.com/esphome/esphome/pull/7039) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/upload-artifact from 4.3.3 to 4.3.4 [esphome#7047](https://github.com/esphome/esphome/pull/7047) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/download-artifact from 4.1.7 to 4.1.8 [esphome#7046](https://github.com/esphome/esphome/pull/7046) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix display of update state in webinterfae [esphome#7045](https://github.com/esphome/esphome/pull/7045) by [@leejoow](https://github.com/leejoow) +- Haier component update to support more protocol variations [esphome#7040](https://github.com/esphome/esphome/pull/7040) by [@paveldn](https://github.com/paveldn) +- Don't test for IPv6 addresses when min_ipv6_addr_count is 0 [esphome#7037](https://github.com/esphome/esphome/pull/7037) by [@colmbuckley](https://github.com/colmbuckley) +- [CI] Allow running specific target test(s) only [esphome#7051](https://github.com/esphome/esphome/pull/7051) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump actions/setup-python from 5.1.0 to 5.1.1 in /.github/actions/restore-python [esphome#7071](https://github.com/esphome/esphome/pull/7071) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix RC Switch protocol not transmitting correctly via IR [esphome#5411](https://github.com/esphome/esphome/pull/5411) by [@michd](https://github.com/michd) +- [micro_wake_word] Version 2 [esphome#7032](https://github.com/esphome/esphome/pull/7032) by [@kahrendt](https://github.com/kahrendt) (breaking-change) +- UART component support added for host platform [esphome#6912](https://github.com/esphome/esphome/pull/6912) by [@paveldn](https://github.com/paveldn) +- Configure ap ip for RP2040 [esphome#7065](https://github.com/esphome/esphome/pull/7065) by [@HeMan](https://github.com/HeMan) +- helpers.cpp: Fix GLIBCXX_RELEASE check < 8 [esphome#7062](https://github.com/esphome/esphome/pull/7062) by [@ferbar](https://github.com/ferbar) +- Fix pmsa003i cold boot marked as failed on ESP32 et al [esphome#7064](https://github.com/esphome/esphome/pull/7064) by [@z3liff](https://github.com/z3liff) +- [http_request] Fix follow_redirects on arduino [esphome#7054](https://github.com/esphome/esphome/pull/7054) by [@guillempages](https://github.com/guillempages) +- [ethernet] Fix compile warning for IPv6 [esphome#7048](https://github.com/esphome/esphome/pull/7048) by [@HeMan](https://github.com/HeMan) +- Update webserver local assets to 20240704-081526 [esphome#7041](https://github.com/esphome/esphome/pull/7041) by [@esphomebot](https://github.com/esphomebot) +- Add braces to if statement to avoid compiler warning. [esphome#7036](https://github.com/esphome/esphome/pull/7036) by [@colmbuckley](https://github.com/colmbuckley) +- [mitsubishi] Fix current temperature [esphome#6909](https://github.com/esphome/esphome/pull/6909) by [@ttaborda](https://github.com/ttaborda) +- [climate] fix dump output of unsupported features [esphome#7005](https://github.com/esphome/esphome/pull/7005) by [@dudanov](https://github.com/dudanov) +- [climate-traits] improved performance [esphome#7006](https://github.com/esphome/esphome/pull/7006) by [@dudanov](https://github.com/dudanov) +- Add default icon to restart button [esphome#7076](https://github.com/esphome/esphome/pull/7076) by [@leejoow](https://github.com/leejoow) +- Add support for the Gree YAC1FB9 in climate_ir [esphome#7056](https://github.com/esphome/esphome/pull/7056) by [@topeju](https://github.com/topeju) +- add ESP32-C6 support to esp32_can [esphome#7063](https://github.com/esphome/esphome/pull/7063) by [@Adminius](https://github.com/Adminius) +- Fix voice assistant crash when no speaker configured [esphome#7075](https://github.com/esphome/esphome/pull/7075) by [@kevdliu](https://github.com/kevdliu) +- Bump HeatpumpIR, add protocols, remove IRremoteESP8266 [esphome#6996](https://github.com/esphome/esphome/pull/6996) by [@nagyrobi](https://github.com/nagyrobi) +- LTR390 separate ALS and UV gain and resolution [esphome#7026](https://github.com/esphome/esphome/pull/7026) by [@latonita](https://github.com/latonita) +- [improv_serial] Fix linker error created in #6998 [esphome#7082](https://github.com/esphome/esphome/pull/7082) by [@kbx81](https://github.com/kbx81) +- [i2s_audio] Allow config for primary/secondary i2s mode [esphome#7092](https://github.com/esphome/esphome/pull/7092) by [@jesserockz](https://github.com/jesserockz) +- [micro_wake_word] Allow simpler model config [esphome#7094](https://github.com/esphome/esphome/pull/7094) by [@jesserockz](https://github.com/jesserockz) +- [ota] Print Arduino update errors [esphome#7096](https://github.com/esphome/esphome/pull/7096) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.8.0.mdx b/src/content/docs/changelog/2024.8.0.mdx new file mode 100644 index 0000000000..2fff5499fc --- /dev/null +++ b/src/content/docs/changelog/2024.8.0.mdx @@ -0,0 +1,257 @@ +--- +description: "Changelog for ESPHome 2024.8.0." +title: "ESPHome 2024.8.0 - 21st August 2024" +pagefind: false +slug: "changelog/2024.8.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Light and Versatile Embedded Graphics Library + +Or LVGL for short, has been worked on by [@clydebarrow](https://github.com/clydebarrow) (and multiple other users doing testing +and documentation etc) for quite some time now and is finally ready for releasing this month. It is a very powerful +graphics library that is able to be configured almost completely in YAML (There are some places that will require +lambdas/c++). The [documentation](/components/lvgl/) is very extensive and hopefully we see +some awesome dashboards being made with it. + +## Online Image + +[@guillempages](https://github.com/guillempages) created a new [online_image](/components/online_image/) component +that allows your ESPHome device to download images from the internet while it is running and show them on your display. +This can also be combined with the new LVGL component to show dynamic images for your dashboard. + +## Home Assistant Switch & Number + +New platforms have been added for `switch` and `number` to allow importing of state and controlling +of switches and numbers that exist in Home Assistant (or another device via Home Assistant). +This greatly simplifies controlling remote entities and will hopefully be extended to other platforms. + +## Thank you for your support + +We would like to thank all Home Assistant Cloud subscribers for their support. It allows +[Nabu Casa](https://nabucasa.com/) to employ two developers to maintain and further develop the ESPHome project. + +{/* markdownlint-disable MD013 */} + +## Release 2024.8.1 - August 28 + +- [lvgl] Bug fixes [esphome#7338](https://github.com/esphome/esphome/pull/7338) by [@clydebarrow](https://github.com/clydebarrow) +- [core] Clean build if the loaded integrations changed [esphome#7344](https://github.com/esphome/esphome/pull/7344) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix race condition involving numbers, switches etc. [esphome#7345](https://github.com/esphome/esphome/pull/7345) by [@clydebarrow](https://github.com/clydebarrow) +- [api] Fix sending the `once` flag on ha entity subscription [esphome#7357](https://github.com/esphome/esphome/pull/7357) by [@jesserockz](https://github.com/jesserockz) + +## Release 2024.8.2 - September 3 + +- [datetime] Fix templated args [esphome#7368](https://github.com/esphome/esphome/pull/7368) by [@jesserockz](https://github.com/jesserockz) +- Enable IPv6 when manual IPv4 is enabled [esphome#7381](https://github.com/esphome/esphome/pull/7381) by [@HeMan](https://github.com/HeMan) +- [core] Only clean build files with esp-idf [esphome#7388](https://github.com/esphome/esphome/pull/7388) by [@jesserockz](https://github.com/jesserockz) + +## Release 2024.8.3 - September 3 + +- Bump Dockerfile dependencies [esphome#7386](https://github.com/esphome/esphome/pull/7386) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Features + +- [update] Implement `update.perform` action and `update.is_available` condition [esphome#7165](https://github.com/esphome/esphome/pull/7165) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- Feature/m5angle8: Add support for m5angle8 input device [esphome#6799](https://github.com/esphome/esphome/pull/6799) by [@rnauber](https://github.com/rnauber) (new-integration) +- APDS9306 Ambient Light Sensor [esphome#6709](https://github.com/esphome/esphome/pull/6709) by [@aodrenah](https://github.com/aodrenah) (new-integration) +- [lvgl] base implementation [esphome#7116](https://github.com/esphome/esphome/pull/7116) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Add runtime online image support [esphome#4710](https://github.com/esphome/esphome/pull/4710) by [@guillempages](https://github.com/guillempages) (new-integration) +- [bme68x_bsec2_i2c] BME68X Temperature+Pressure+Humidity+Gas Sensor via BSEC2 [esphome#4585](https://github.com/esphome/esphome/pull/4585) by [@neffs](https://github.com/neffs) (new-integration) +- Add support for LYWSD02MMC Xiaomi device [esphome#7080](https://github.com/esphome/esphome/pull/7080) by [@juanluss31](https://github.com/juanluss31) (new-integration) + +### New Platforms + +- [homeassistant] Native switch entity import and control [esphome#7018](https://github.com/esphome/esphome/pull/7018) by [@Links2004](https://github.com/Links2004) (new-platform) +- [homeassistant] Native number entity import and control [esphome#6455](https://github.com/esphome/esphome/pull/6455) by [@landonr](https://github.com/landonr) (new-platform) +- Correct offset calibration [esphome#7228](https://github.com/esphome/esphome/pull/7228) by [@descipher](https://github.com/descipher) (new-platform) + +### Breaking Changes + +- Remove deprecated argument parser [esphome#7151](https://github.com/esphome/esphome/pull/7151) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +### Beta Changes + +- remove extra number from pronto [esphome#7263](https://github.com/esphome/esphome/pull/7263) by [@ssieb](https://github.com/ssieb) +- [api] Bump noise-c library version [esphome#7288](https://github.com/esphome/esphome/pull/7288) by [@clydebarrow](https://github.com/clydebarrow) +- fix some small rtttl issues [esphome#6817](https://github.com/esphome/esphome/pull/6817) by [@nielsnl68](https://github.com/nielsnl68) +- Fix overflow in ESPColorCorrection object [esphome#7268](https://github.com/esphome/esphome/pull/7268) by [@g-kiss](https://github.com/g-kiss) +- [validation] Allow `maybe_simple_value` to not have default key in complex value [esphome#7294](https://github.com/esphome/esphome/pull/7294) by [@jesserockz](https://github.com/jesserockz) +- [network] Always allow `enable_ipv6: false` [esphome#7291](https://github.com/esphome/esphome/pull/7291) by [@dwmw2](https://github.com/dwmw2) +- Revert "[validation] Allow `maybe_simple_value` to not have default key in complex value" [esphome#7305](https://github.com/esphome/esphome/pull/7305) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Bug fixes [esphome#7300](https://github.com/esphome/esphome/pull/7300) by [@clydebarrow](https://github.com/clydebarrow) +- [speaker] Fix header includes [esphome#7304](https://github.com/esphome/esphome/pull/7304) by [@nielsnl68](https://github.com/nielsnl68) +- [microphone] Fix header includes [esphome#7310](https://github.com/esphome/esphome/pull/7310) by [@jesserockz](https://github.com/jesserockz) +- Fix RP2040 Neopixel flickering issue [esphome#7307](https://github.com/esphome/esphome/pull/7307) by [@deCodeIt](https://github.com/deCodeIt) +- add the ability to add more idf components to an existing setup [esphome#7302](https://github.com/esphome/esphome/pull/7302) by [@nielsnl68](https://github.com/nielsnl68) +- Fix waveshare 2.13" epaper stride calculation error [esphome#7303](https://github.com/esphome/esphome/pull/7303) by [@serialx](https://github.com/serialx) +- [rtttl] fix STOPPED state [esphome#7323](https://github.com/esphome/esphome/pull/7323) by [@NewoPL](https://github.com/NewoPL) + +### All changes + +- [wifi] Fix EAP for IDF 5.1+, add test [esphome#7061](https://github.com/esphome/esphome/pull/7061) by [@kbx81](https://github.com/kbx81) +- jsn_sr04t component: AJ_SR04M compatibility mode in checksum calculation [esphome#7044](https://github.com/esphome/esphome/pull/7044) by [@soeffi](https://github.com/soeffi) +- [CI] compile entire web_server during tests [esphome#7084](https://github.com/esphome/esphome/pull/7084) by [@tomaszduda23](https://github.com/tomaszduda23) +- [CI] Add more `improv_serial` tests [esphome#7081](https://github.com/esphome/esphome/pull/7081) by [@kbx81](https://github.com/kbx81) +- Bump docker/build-push-action from 6.3.0 to 6.4.0 in /.github/actions/build-image [esphome#7089](https://github.com/esphome/esphome/pull/7089) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [CI] add web_server v1 test [esphome#7090](https://github.com/esphome/esphome/pull/7090) by [@tomaszduda23](https://github.com/tomaszduda23) +- [wifi] Hostname may not be set as expected on Arduino platform [esphome#7050](https://github.com/esphome/esphome/pull/7050) by [@NewoPL](https://github.com/NewoPL) +- Add host uart support for MacOS [esphome#7095](https://github.com/esphome/esphome/pull/7095) by [@clydebarrow](https://github.com/clydebarrow) +- Bump docker/build-push-action from 6.4.0 to 6.4.1 in /.github/actions/build-image [esphome#7102](https://github.com/esphome/esphome/pull/7102) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [code-quality] Add some ruff configuration [esphome#7103](https://github.com/esphome/esphome/pull/7103) by [@jesserockz](https://github.com/jesserockz) +- [web_server] move v1 code to separate file [esphome#7091](https://github.com/esphome/esphome/pull/7091) by [@tomaszduda23](https://github.com/tomaszduda23) +- [validation] Add `host` to `require_framework_version` [esphome#7107](https://github.com/esphome/esphome/pull/7107) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Tidy up some duplicate CONFIG_SCHEMA assignments [esphome#7106](https://github.com/esphome/esphome/pull/7106) by [@jesserockz](https://github.com/jesserockz) +- Move MQTT ip discovery to deticated config option. [esphome#6673](https://github.com/esphome/esphome/pull/6673) by [@Links2004](https://github.com/Links2004) +- Feature/m5angle8: Add support for m5angle8 input device [esphome#6799](https://github.com/esphome/esphome/pull/6799) by [@rnauber](https://github.com/rnauber) (new-integration) +- use cache to build tests for compoenents [esphome#7059](https://github.com/esphome/esphome/pull/7059) by [@tomaszduda23](https://github.com/tomaszduda23) +- [modbus_controller] Add on_command_sent trigger [esphome#7078](https://github.com/esphome/esphome/pull/7078) by [@leejoow](https://github.com/leejoow) +- [ili9xxx] Rework delay handling [esphome#7115](https://github.com/esphome/esphome/pull/7115) by [@clydebarrow](https://github.com/clydebarrow) +- Inherit `esp32_ble_beacon` from `esp32_ble` [esphome#6908](https://github.com/esphome/esphome/pull/6908) by [@jpbede](https://github.com/jpbede) +- APDS9306 Ambient Light Sensor [esphome#6709](https://github.com/esphome/esphome/pull/6709) by [@aodrenah](https://github.com/aodrenah) (new-integration) +- Bump docker/build-push-action from 6.4.1 to 6.5.0 in /.github/actions/build-image [esphome#7119](https://github.com/esphome/esphome/pull/7119) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-qemu-action from 3.1.0 to 3.2.0 [esphome#7120](https://github.com/esphome/esphome/pull/7120) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/login-action from 3.2.0 to 3.3.0 [esphome#7121](https://github.com/esphome/esphome/pull/7121) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-buildx-action from 3.4.0 to 3.5.0 [esphome#7122](https://github.com/esphome/esphome/pull/7122) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [fan] fix initial FanCall to properly set speed [esphome#7113](https://github.com/esphome/esphome/pull/7113) by [@kr0ner](https://github.com/kr0ner) +- Added ruff to pre-commit hooks [esphome#7124](https://github.com/esphome/esphome/pull/7124) by [@clydebarrow](https://github.com/clydebarrow) +- Update webserver local assets to 20240724-013115 [esphome#7126](https://github.com/esphome/esphome/pull/7126) by [@esphomebot](https://github.com/esphomebot) +- [http_request] Allow configure buffer size on ESP-IDF [esphome#7125](https://github.com/esphome/esphome/pull/7125) by [@dentra](https://github.com/dentra) +- Give more info on import errors. [esphome#7128](https://github.com/esphome/esphome/pull/7128) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] base implementation [esphome#7116](https://github.com/esphome/esphome/pull/7116) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Bump aioesphomeapi to 24.6.2 and cryptography to 43.0.0 [esphome#7131](https://github.com/esphome/esphome/pull/7131) by [@bdraco](https://github.com/bdraco) +- [dependabot] Group docker action bumps into single PR [esphome#7133](https://github.com/esphome/esphome/pull/7133) by [@jesserockz](https://github.com/jesserockz) +- Add `--version` handler to cli [esphome#7150](https://github.com/esphome/esphome/pull/7150) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Organise ethernet related imports [esphome#7152](https://github.com/esphome/esphome/pull/7152) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Organise wifi related imports [esphome#7153](https://github.com/esphome/esphome/pull/7153) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Organise core imports [esphome#7149](https://github.com/esphome/esphome/pull/7149) by [@jesserockz](https://github.com/jesserockz) +- Remove deprecated argument parser [esphome#7151](https://github.com/esphome/esphome/pull/7151) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Move `CONF_ON_ERROR` to const.py [esphome#7156](https://github.com/esphome/esphome/pull/7156) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Organise esp32 imports [esphome#7154](https://github.com/esphome/esphome/pull/7154) by [@jesserockz](https://github.com/jesserockz) +- Add microAmp and milliAmp to defined units [esphome#7157](https://github.com/esphome/esphome/pull/7157) by [@FreeBear-nc](https://github.com/FreeBear-nc) +- Bump docker/setup-buildx-action from 3.5.0 to 3.6.1 in the docker-actions group [esphome#7159](https://github.com/esphome/esphome/pull/7159) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- LVGL stage 2 [esphome#7129](https://github.com/esphome/esphome/pull/7129) by [@clydebarrow](https://github.com/clydebarrow) +- [pid] Add get_min_integral() and get_max_integral() [esphome#7162](https://github.com/esphome/esphome/pull/7162) by [@FreeBear-nc](https://github.com/FreeBear-nc) +- [code-quality] Organise bluetooth related imports [esphome#7155](https://github.com/esphome/esphome/pull/7155) by [@jesserockz](https://github.com/jesserockz) +- http_request watchdog as a component [esphome#7161](https://github.com/esphome/esphome/pull/7161) by [@oarcher](https://github.com/oarcher) +- [touchscreen] Allow binary sensor to have multiple pages in config [esphome#7112](https://github.com/esphome/esphome/pull/7112) by [@jesserockz](https://github.com/jesserockz) +- [matrix_keypad] Add `pin->setup()` to rows and cols [esphome#7163](https://github.com/esphome/esphome/pull/7163) by [@AAllport](https://github.com/AAllport) +- [update] Implement `update.perform` action and `update.is_available` condition [esphome#7165](https://github.com/esphome/esphome/pull/7165) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- [lvgl] PR stage 3 [esphome#7160](https://github.com/esphome/esphome/pull/7160) by [@clydebarrow](https://github.com/clydebarrow) +- [api] `homeassistant.action` replaces `homeassistant.service` [esphome#7171](https://github.com/esphome/esphome/pull/7171) by [@jesserockz](https://github.com/jesserockz) +- ade7953_spi wrong size specified in read_array call [esphome#7172](https://github.com/esphome/esphome/pull/7172) by [@SimoPk](https://github.com/SimoPk) +- Bump improv library to 1.2.4 [esphome#7174](https://github.com/esphome/esphome/pull/7174) by [@jesserockz](https://github.com/jesserockz) +- Implement 'round to nearest multiple' filter [esphome#7142](https://github.com/esphome/esphome/pull/7142) by [@MrEbbinghaus](https://github.com/MrEbbinghaus) +- git ignore managed_components [esphome#7180](https://github.com/esphome/esphome/pull/7180) by [@oarcher](https://github.com/oarcher) +- [core] Eliminate nuisance messages from `build_codeowners` [esphome#7185](https://github.com/esphome/esphome/pull/7185) by [@clydebarrow](https://github.com/clydebarrow) +- [code-quality] More portable shebangs [esphome#7189](https://github.com/esphome/esphome/pull/7189) by [@jesserockz](https://github.com/jesserockz) +- Add support for doing update entity refresh/check via API. [esphome#7190](https://github.com/esphome/esphome/pull/7190) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Stage 4 [esphome#7166](https://github.com/esphome/esphome/pull/7166) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32_improv] Update Improv library to reference new repo/version [esphome#7195](https://github.com/esphome/esphome/pull/7195) by [@kahrendt](https://github.com/kahrendt) +- hydreon_rgxx: Fix parsing of data line [esphome#7192](https://github.com/esphome/esphome/pull/7192) by [@domob1812](https://github.com/domob1812) +- Remove outdated version block [esphome#7177](https://github.com/esphome/esphome/pull/7177) by [@tomaszduda23](https://github.com/tomaszduda23) +- [lvgl] Stage 5 [esphome#7191](https://github.com/esphome/esphome/pull/7191) by [@clydebarrow](https://github.com/clydebarrow) +- socket: socket::set_sockaddr() for IPv4 addresses in IPv6 builds [esphome#7196](https://github.com/esphome/esphome/pull/7196) by [@dwmw2](https://github.com/dwmw2) +- Adds MQTT component to Alarm Control panel component [esphome#7188](https://github.com/esphome/esphome/pull/7188) by [@heythisisnate](https://github.com/heythisisnate) +- [lvgl] Final stage [esphome#7184](https://github.com/esphome/esphome/pull/7184) by [@clydebarrow](https://github.com/clydebarrow) +- Move `CONF_BACKGROUND_COLOR` and `CONF_FOREGROUND_COLOR` to const.py [esphome#7202](https://github.com/esphome/esphome/pull/7202) by [@jesserockz](https://github.com/jesserockz) +- [helpers] Set default flags of ExternalRAMAllocator to ALLOW_FAILURE [esphome#7201](https://github.com/esphome/esphome/pull/7201) by [@jesserockz](https://github.com/jesserockz) +- Add runtime online image support [esphome#4710](https://github.com/esphome/esphome/pull/4710) by [@guillempages](https://github.com/guillempages) (new-integration) +- Update i2s_audio_speaker.cppi2s_audio/speaker: Fix fallthrough compiler warning [esphome#7167](https://github.com/esphome/esphome/pull/7167) by [@Mimoja](https://github.com/Mimoja) +- Move CONF_ITEMS/CONF_FONT/CONF_TEXT to const.py [esphome#7204](https://github.com/esphome/esphome/pull/7204) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Fix compile error when using encoder with buttons only. [esphome#7203](https://github.com/esphome/esphome/pull/7203) by [@clydebarrow](https://github.com/clydebarrow) +- Revert "Add null GPIO pin " [esphome#6621](https://github.com/esphome/esphome/pull/6621) by [@jesserockz](https://github.com/jesserockz) +- [remote_transmitter] Change default carrier_frequency to valid value [esphome#7176](https://github.com/esphome/esphome/pull/7176) by [@iannisimo](https://github.com/iannisimo) +- [code-quality] Organise script imports [esphome#7198](https://github.com/esphome/esphome/pull/7198) by [@jesserockz](https://github.com/jesserockz) +- [max31856] Use cv.frequency as validator [esphome#7212](https://github.com/esphome/esphome/pull/7212) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Organise base entities imports [esphome#7208](https://github.com/esphome/esphome/pull/7208) by [@tomaszduda23](https://github.com/tomaszduda23) +- [spi] Remove `SPIDelegateDummy` [esphome#7215](https://github.com/esphome/esphome/pull/7215) by [@jesserockz](https://github.com/jesserockz) +- [code-quality] Apply ruff linting suggestions [esphome#7206](https://github.com/esphome/esphome/pull/7206) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] Organise logger imports [esphome#7205](https://github.com/esphome/esphome/pull/7205) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] Apply ruff linting suggestions to core [esphome#7207](https://github.com/esphome/esphome/pull/7207) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy sprinkler [esphome#7222](https://github.com/esphome/esphome/pull/7222) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] __attribute__((packed)) [esphome#7221](https://github.com/esphome/esphome/pull/7221) by [@tomaszduda23](https://github.com/tomaszduda23) +- hx711: Check for DOUT going high after a reading [esphome#7214](https://github.com/esphome/esphome/pull/7214) by [@dwmw2](https://github.com/dwmw2) +- [mqtt] Add extended device info [esphome#7194](https://github.com/esphome/esphome/pull/7194) by [@dentra](https://github.com/dentra) +- [code-quality] NOLINT readability-identifier-naming [esphome#7220](https://github.com/esphome/esphome/pull/7220) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] Organise time imports [esphome#7219](https://github.com/esphome/esphome/pull/7219) by [@tomaszduda23](https://github.com/tomaszduda23) +- [lvgl] Fix set state on updates [esphome#7227](https://github.com/esphome/esphome/pull/7227) by [@clydebarrow](https://github.com/clydebarrow) +- add missing override [esphome#7231](https://github.com/esphome/esphome/pull/7231) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add text_align_to_string [esphome#7243](https://github.com/esphome/esphome/pull/7243) by [@MrMDavidson](https://github.com/MrMDavidson) +- [sml] Fixed crashing sml parser [esphome#7235](https://github.com/esphome/esphome/pull/7235) by [@eNBeWe](https://github.com/eNBeWe) +- Allow project name and version as improv_serial identity [esphome#7248](https://github.com/esphome/esphome/pull/7248) by [@AzonInc](https://github.com/AzonInc) +- [lvgl] Implement default group for encoders [esphome#7242](https://github.com/esphome/esphome/pull/7242) by [@clydebarrow](https://github.com/clydebarrow) +- [bme68x_bsec2_i2c] BME68X Temperature+Pressure+Humidity+Gas Sensor via BSEC2 [esphome#4585](https://github.com/esphome/esphome/pull/4585) by [@neffs](https://github.com/neffs) (new-integration) +- [code-quality] clang-tidy media_player [esphome#7238](https://github.com/esphome/esphome/pull/7238) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump docker/build-push-action from 6.5.0 to 6.6.1 in /.github/actions/build-image [esphome#7232](https://github.com/esphome/esphome/pull/7232) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- fix build error [esphome#7229](https://github.com/esphome/esphome/pull/7229) by [@tomaszduda23](https://github.com/tomaszduda23) +- adjust to new python pre-commit hooks [esphome#7178](https://github.com/esphome/esphome/pull/7178) by [@tomaszduda23](https://github.com/tomaszduda23) +- add windows script/setup.bat [esphome#7140](https://github.com/esphome/esphome/pull/7140) by [@nielsnl68](https://github.com/nielsnl68) +- [code-quality] add NOLINT haier_base [esphome#7236](https://github.com/esphome/esphome/pull/7236) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] clang-tidy bedjet [esphome#7251](https://github.com/esphome/esphome/pull/7251) by [@tomaszduda23](https://github.com/tomaszduda23) +- fix name conflict with zephyr macro [esphome#7252](https://github.com/esphome/esphome/pull/7252) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] Apply ruff linting suggestions [esphome#7239](https://github.com/esphome/esphome/pull/7239) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add support for LYWSD02MMC Xiaomi device [esphome#7080](https://github.com/esphome/esphome/pull/7080) by [@juanluss31](https://github.com/juanluss31) (new-integration) +- [code-quality] fix clang-tidy web server [esphome#7230](https://github.com/esphome/esphome/pull/7230) by [@tomaszduda23](https://github.com/tomaszduda23) +- [test][web_server] Rejig test for v3 [esphome#7110](https://github.com/esphome/esphome/pull/7110) by [@RFDarter](https://github.com/RFDarter) +- [api] Error log when NONE Update command is sent [esphome#7247](https://github.com/esphome/esphome/pull/7247) by [@oarcher](https://github.com/oarcher) +- [api] Add new flag to request state/attribute once from HA only [esphome#7258](https://github.com/esphome/esphome/pull/7258) by [@jesserockz](https://github.com/jesserockz) +- [homeassistant] Add `HOME_ASSISTANT_IMPORT_CONTROL_SCHEMA` [esphome#7259](https://github.com/esphome/esphome/pull/7259) by [@jesserockz](https://github.com/jesserockz) +- [const] Add some units for future use and adjust case [esphome#7260](https://github.com/esphome/esphome/pull/7260) by [@nkinnan](https://github.com/nkinnan) +- [online_image] add option to show placeholder while downloading [esphome#7083](https://github.com/esphome/esphome/pull/7083) by [@guillempages](https://github.com/guillempages) +- [lvgl] Add initial_focus for encoders [esphome#7256](https://github.com/esphome/esphome/pull/7256) by [@clydebarrow](https://github.com/clydebarrow) +- [code-quality] fix order in esphome/const.py [esphome#7267](https://github.com/esphome/esphome/pull/7267) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy network [esphome#7266](https://github.com/esphome/esphome/pull/7266) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy core optional [esphome#7265](https://github.com/esphome/esphome/pull/7265) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] Fix variable naming in base_light_effects [esphome#7237](https://github.com/esphome/esphome/pull/7237) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy mqtt [esphome#7253](https://github.com/esphome/esphome/pull/7253) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy wifi related [esphome#7254](https://github.com/esphome/esphome/pull/7254) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump docker/build-push-action from 6.6.1 to 6.7.0 in /.github/actions/build-image [esphome#7269](https://github.com/esphome/esphome/pull/7269) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [CI] Dont run full CI on `build-image` action changes [esphome#7270](https://github.com/esphome/esphome/pull/7270) by [@jesserockz](https://github.com/jesserockz) +- Implement ByteBuffer [esphome#6878](https://github.com/esphome/esphome/pull/6878) by [@clydebarrow](https://github.com/clydebarrow) +- Add min and max brightness parameters for Light dim_relative Action [esphome#6971](https://github.com/esphome/esphome/pull/6971) by [@PaoloTK](https://github.com/PaoloTK) +- [homeassistant] Native switch entity import and control [esphome#7018](https://github.com/esphome/esphome/pull/7018) by [@Links2004](https://github.com/Links2004) (new-platform) +- [homeassistant] Native number entity import and control [esphome#6455](https://github.com/esphome/esphome/pull/6455) by [@landonr](https://github.com/landonr) (new-platform) +- [lvgl] Rework events to avoid feedback loops [esphome#7262](https://github.com/esphome/esphome/pull/7262) by [@clydebarrow](https://github.com/clydebarrow) +- Add `color_filter_opa` style property [esphome#7276](https://github.com/esphome/esphome/pull/7276) by [@clydebarrow](https://github.com/clydebarrow) +- [code-quality] fix clang-tidy wake_on_lan [esphome#7275](https://github.com/esphome/esphome/pull/7275) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix readability-braces-around-statements [esphome#7273](https://github.com/esphome/esphome/pull/7273) by [@tomaszduda23](https://github.com/tomaszduda23) +- [mqtt] fix missing initializer in MQTTClientComponent::disable_discovery [esphome#7271](https://github.com/esphome/esphome/pull/7271) by [@oarcher](https://github.com/oarcher) +- [code-quality] fix readability-named-parameter [esphome#7272](https://github.com/esphome/esphome/pull/7272) by [@tomaszduda23](https://github.com/tomaszduda23) +- support illuminance for airthings wave plus device [esphome#5203](https://github.com/esphome/esphome/pull/5203) by [@MadMonkey87](https://github.com/MadMonkey87) +- [micro_wake_word] Bump ESPMicroSpeechFeatures version to 1.1.0 [esphome#7249](https://github.com/esphome/esphome/pull/7249) by [@kahrendt](https://github.com/kahrendt) +- Implement the finish() method and action. implement the is_stopped condition [esphome#7255](https://github.com/esphome/esphome/pull/7255) by [@nielsnl68](https://github.com/nielsnl68) +- Correct offset calibration [esphome#7228](https://github.com/esphome/esphome/pull/7228) by [@descipher](https://github.com/descipher) (new-platform) +- remove extra number from pronto [esphome#7263](https://github.com/esphome/esphome/pull/7263) by [@ssieb](https://github.com/ssieb) +- [api] Bump noise-c library version [esphome#7288](https://github.com/esphome/esphome/pull/7288) by [@clydebarrow](https://github.com/clydebarrow) +- fix some small rtttl issues [esphome#6817](https://github.com/esphome/esphome/pull/6817) by [@nielsnl68](https://github.com/nielsnl68) +- Fix overflow in ESPColorCorrection object [esphome#7268](https://github.com/esphome/esphome/pull/7268) by [@g-kiss](https://github.com/g-kiss) +- [validation] Allow `maybe_simple_value` to not have default key in complex value [esphome#7294](https://github.com/esphome/esphome/pull/7294) by [@jesserockz](https://github.com/jesserockz) +- [network] Always allow `enable_ipv6: false` [esphome#7291](https://github.com/esphome/esphome/pull/7291) by [@dwmw2](https://github.com/dwmw2) +- Revert "[validation] Allow `maybe_simple_value` to not have default key in complex value" [esphome#7305](https://github.com/esphome/esphome/pull/7305) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Bug fixes [esphome#7300](https://github.com/esphome/esphome/pull/7300) by [@clydebarrow](https://github.com/clydebarrow) +- [speaker] Fix header includes [esphome#7304](https://github.com/esphome/esphome/pull/7304) by [@nielsnl68](https://github.com/nielsnl68) +- [microphone] Fix header includes [esphome#7310](https://github.com/esphome/esphome/pull/7310) by [@jesserockz](https://github.com/jesserockz) +- Fix RP2040 Neopixel flickering issue [esphome#7307](https://github.com/esphome/esphome/pull/7307) by [@deCodeIt](https://github.com/deCodeIt) +- add the ability to add more idf components to an existing setup [esphome#7302](https://github.com/esphome/esphome/pull/7302) by [@nielsnl68](https://github.com/nielsnl68) +- Fix waveshare 2.13" epaper stride calculation error [esphome#7303](https://github.com/esphome/esphome/pull/7303) by [@serialx](https://github.com/serialx) +- [rtttl] fix STOPPED state [esphome#7323](https://github.com/esphome/esphome/pull/7323) by [@NewoPL](https://github.com/NewoPL) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2024.9.0.mdx b/src/content/docs/changelog/2024.9.0.mdx new file mode 100644 index 0000000000..e6cf011e96 --- /dev/null +++ b/src/content/docs/changelog/2024.9.0.mdx @@ -0,0 +1,178 @@ +--- +description: "Changelog for ESPHome 2024.9.0." +title: "ESPHome 2024.9.0 - 18th September 2024" +pagefind: false +slug: "changelog/2024.9.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## UDP & StatsD Components + +This release brings two new data driven components to ESPHome. + +The first is the [UDP Component](/components/udp/) which allows direct communication between ESPHome +devices over the local network. To start off, only sensor and binary sensor data can be transmitted, and +hopefully more entity types will be supported in the future. + +Next is the [StatsD Component](/components/statsd/) which allows you to send sensor data +directly to a statsd server for monitoring. + +## Breaking Changes + +There are a few breaking changes this release that will require changes in YAML if you are +using the affected components. Please make sure to check the list below for details about each one. +The documentation is always the best place to find the most up-to-date information on configuration for +any given component found in ESPHome. + +## Thank you for your support + +Did you know that Jesse and Keith both are employed at [Nabu Casa](https://nabucasa.com/) to work full-time on ESPHome? +Yep, that's possible thanks to everyone who subscribes to Home Assistant Cloud. Thank you! + +{/* markdownlint-disable MD013 */} + +## Release 2024.9.1 - September 23 + +- Copy active wake words to message [esphome#7481](https://github.com/esphome/esphome/pull/7481) by [@synesthesiam](https://github.com/synesthesiam) + +## Release 2024.9.2 - October 1 + +- fix bl0906 reset energy action [esphome#7488](https://github.com/esphome/esphome/pull/7488) by [@ssieb](https://github.com/ssieb) +- [config_validation] Fix bug with extras on schemas [esphome#7497](https://github.com/esphome/esphome/pull/7497) by [@jesserockz](https://github.com/jesserockz) +- Prevent rp2040 randomly breaking the build [esphome#7507](https://github.com/esphome/esphome/pull/7507) by [@nkinnan](https://github.com/nkinnan) +- [rp2040] Always use maxgerhardt platform fork [esphome#7514](https://github.com/esphome/esphome/pull/7514) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add support for BL0906 energy meter [esphome#7339](https://github.com/esphome/esphome/pull/7339) by [@tarontop](https://github.com/tarontop) (new-integration) +- [udp] Implement UDP sensor broadcast [esphome#6865](https://github.com/esphome/esphome/pull/6865) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- CH422G support [esphome#7356](https://github.com/esphome/esphome/pull/7356) by [@jesterret](https://github.com/jesterret) (new-integration) +- Add StatsD component [esphome#6642](https://github.com/esphome/esphome/pull/6642) by [@Links2004](https://github.com/Links2004) (new-integration) +- Add support for using BMP280 with SPI [esphome#7053](https://github.com/esphome/esphome/pull/7053) by [@ademuri](https://github.com/ademuri) (new-integration) (breaking-change) +- LTR-501, LTR-301, LTR-558 Series of Lite-On Light (ALS) and Proximity(PS) sensors [esphome#6262](https://github.com/esphome/esphome/pull/6262) by [@latonita](https://github.com/latonita) (new-integration) + +### Breaking Changes + +- [ili9xxx] Make `invert_colors` required [esphome#7292](https://github.com/esphome/esphome/pull/7292) by [@gvdhoven](https://github.com/gvdhoven) (breaking-change) +- Add support for using BMP280 with SPI [esphome#7053](https://github.com/esphome/esphome/pull/7053) by [@ademuri](https://github.com/ademuri) (new-integration) (breaking-change) +- Move I2S config settings the the base i2sAudio files. Phase 1 [esphome#7183](https://github.com/esphome/esphome/pull/7183) by [@nielsnl68](https://github.com/nielsnl68) (breaking-change) +- [i2s_audio] Add more options to speakers and microphones [esphome#7306](https://github.com/esphome/esphome/pull/7306) by [@pyos](https://github.com/pyos) (breaking-change) + +### Beta Changes + +- [voice-assistant] Dont error on `no_wake_word` timeout error with streaming wake word [esphome#7435](https://github.com/esphome/esphome/pull/7435) by [@jesserockz](https://github.com/jesserockz) +- Improve manufacturer data tracing to identify BLE devices a bit easie… [esphome#7332](https://github.com/esphome/esphome/pull/7332) by [@tomer-w](https://github.com/tomer-w) +- Add sample_bytes to media player supported format [esphome#7451](https://github.com/esphome/esphome/pull/7451) by [@synesthesiam](https://github.com/synesthesiam) +- [docker] Bump git from 1:2.39.2-1.1 to 1:2.39.5-0+deb12u1 [esphome#7452](https://github.com/esphome/esphome/pull/7452) by [@jesserockz](https://github.com/jesserockz) +- Add voice assistant configuration messages [esphome#7445](https://github.com/esphome/esphome/pull/7445) by [@synesthesiam](https://github.com/synesthesiam) +- Dont replace project name spaces with underlines [esphome#7455](https://github.com/esphome/esphome/pull/7455) by [@jesserockz](https://github.com/jesserockz) +- Add voice assistant methods for configuration [esphome#7459](https://github.com/esphome/esphome/pull/7459) by [@synesthesiam](https://github.com/synesthesiam) + +### All changes + +- [code-quality] fix performance-unnecessary-value-param [esphome#7274](https://github.com/esphome/esphome/pull/7274) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy prometheus [esphome#7284](https://github.com/esphome/esphome/pull/7284) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy ota [esphome#7282](https://github.com/esphome/esphome/pull/7282) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy e131 [esphome#7281](https://github.com/esphome/esphome/pull/7281) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy wireguard [esphome#7287](https://github.com/esphome/esphome/pull/7287) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy improv_serial [esphome#7283](https://github.com/esphome/esphome/pull/7283) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy captive_portal [esphome#7280](https://github.com/esphome/esphome/pull/7280) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add HMAC-MD5 support for authenticating OTA updates [esphome#7200](https://github.com/esphome/esphome/pull/7200) by [@dwmw2](https://github.com/dwmw2) (new-integration) +- [const] Add UNIT_LITRE [esphome#7317](https://github.com/esphome/esphome/pull/7317) by [@Roving-Ronin](https://github.com/Roving-Ronin) +- [code-quality] fix clang-tidy socket [esphome#7285](https://github.com/esphome/esphome/pull/7285) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code-quality] fix clang-tidy cstddef [esphome#7324](https://github.com/esphome/esphome/pull/7324) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add output source priority "hybrid" [esphome#7322](https://github.com/esphome/esphome/pull/7322) by [@syssi](https://github.com/syssi) +- Enable verbose mode from env ESPHOME_VERBOSE or --verbose [esphome#6987](https://github.com/esphome/esphome/pull/6987) by [@ptr727](https://github.com/ptr727) +- Tuya Number: allow to set hidden datapoints [esphome#7024](https://github.com/esphome/esphome/pull/7024) by [@szupi-ipuzs](https://github.com/szupi-ipuzs) +- feat: Expand ByteBuffer [esphome#7316](https://github.com/esphome/esphome/pull/7316) by [@Rapsssito](https://github.com/Rapsssito) +- [ledc] Tweak fix in #6997 [esphome#7336](https://github.com/esphome/esphome/pull/7336) by [@kbx81](https://github.com/kbx81) +- [ledc] Fix maximum brightness on ESP-IDF 5.1 [esphome#7342](https://github.com/esphome/esphome/pull/7342) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Bug fixes: [esphome#7341](https://github.com/esphome/esphome/pull/7341) by [@clydebarrow](https://github.com/clydebarrow) +- [const] Move `CONF_LINE_FREQUENCY` to const.py [esphome#7351](https://github.com/esphome/esphome/pull/7351) by [@jesserockz](https://github.com/jesserockz) +- bl0942: Fix init sequence, add address and line_frequency options [esphome#7250](https://github.com/esphome/esphome/pull/7250) by [@dwmw2](https://github.com/dwmw2) +- Add supported formats to media player [esphome#7318](https://github.com/esphome/esphome/pull/7318) by [@synesthesiam](https://github.com/synesthesiam) +- Add reset to esp32_rmt_led_strip [esphome#7354](https://github.com/esphome/esphome/pull/7354) by [@angelnu](https://github.com/angelnu) +- [ili9xxx] Make `invert_colors` required [esphome#7292](https://github.com/esphome/esphome/pull/7292) by [@gvdhoven](https://github.com/gvdhoven) (breaking-change) +- Add WS2811 to esp32_rmt_led_strip [esphome#7353](https://github.com/esphome/esphome/pull/7353) by [@angelnu](https://github.com/angelnu) +- [lvgl] Add lvgl.widget.focus action and related triggers. [esphome#7315](https://github.com/esphome/esphome/pull/7315) by [@clydebarrow](https://github.com/clydebarrow) +- esp32_can: suppress compiler warning [esphome#7372](https://github.com/esphome/esphome/pull/7372) by [@mrk-its](https://github.com/mrk-its) +- Add support for BL0906 energy meter [esphome#7339](https://github.com/esphome/esphome/pull/7339) by [@tarontop](https://github.com/tarontop) (new-integration) +- [platformio] Add environments for ESP-IDF 5.3 for development [esphome#7371](https://github.com/esphome/esphome/pull/7371) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Bug fixes [esphome#7370](https://github.com/esphome/esphome/pull/7370) by [@clydebarrow](https://github.com/clydebarrow) +- [bytebuffer] Use existing bit_cast operations. [esphome#7374](https://github.com/esphome/esphome/pull/7374) by [@clydebarrow](https://github.com/clydebarrow) +- Bump actions/setup-python from 5.1.0 to 5.2.0 [esphome#7375](https://github.com/esphome/esphome/pull/7375) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.1.1 to 5.2.0 in /.github/actions/restore-python [esphome#7376](https://github.com/esphome/esphome/pull/7376) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [gt911] Add reset pin config [esphome#7373](https://github.com/esphome/esphome/pull/7373) by [@clydebarrow](https://github.com/clydebarrow) +- [st7701s] Add delay feature in init sequences [esphome#7343](https://github.com/esphome/esphome/pull/7343) by [@clydebarrow](https://github.com/clydebarrow) +- Add now required `invert_colors` option to test files referencing ili9xxx [esphome#7367](https://github.com/esphome/esphome/pull/7367) by [@clydebarrow](https://github.com/clydebarrow) +- esp32_can: make queue lengths configurable [esphome#7361](https://github.com/esphome/esphome/pull/7361) by [@mrk-its](https://github.com/mrk-its) +- [code-quality] fix clang-tidy web_server and web_server_base [esphome#7286](https://github.com/esphome/esphome/pull/7286) by [@tomaszduda23](https://github.com/tomaszduda23) +- Update MiCS Values [esphome#7173](https://github.com/esphome/esphome/pull/7173) by [@TrevorSchirmer](https://github.com/TrevorSchirmer) +- Tuya Number: allow restoring value of hidden datapoints [esphome#7346](https://github.com/esphome/esphome/pull/7346) by [@szupi-ipuzs](https://github.com/szupi-ipuzs) +- [udp] Implement UDP sensor broadcast [esphome#6865](https://github.com/esphome/esphome/pull/6865) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- update logs for bluetooth proxy [esphome#7382](https://github.com/esphome/esphome/pull/7382) by [@tomaszduda23](https://github.com/tomaszduda23) +- [font] Make display an auto-load, not a dependency [esphome#7366](https://github.com/esphome/esphome/pull/7366) by [@clydebarrow](https://github.com/clydebarrow) +- CH422G support [esphome#7356](https://github.com/esphome/esphome/pull/7356) by [@jesterret](https://github.com/jesterret) (new-integration) +- [rpi_dpi_rgb] Add enable_pin and reset_display method to driver [esphome#7383](https://github.com/esphome/esphome/pull/7383) by [@lboue](https://github.com/lboue) +- Bump actions/upload-artifact from 4.3.4 to 4.4.0 [esphome#7379](https://github.com/esphome/esphome/pull/7379) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix build for esp32h2 using esp-idf 5.3 [esphome#7393](https://github.com/esphome/esphome/pull/7393) by [@mrene](https://github.com/mrene) +- Bump mDNS and follow ruff's suggestions [esphome#7308](https://github.com/esphome/esphome/pull/7308) by [@HeMan](https://github.com/HeMan) +- Bump rp2040 Arduino platform and framework [esphome#7134](https://github.com/esphome/esphome/pull/7134) by [@HeMan](https://github.com/HeMan) +- [gree] Add support for YX1FF remote [esphome#7298](https://github.com/esphome/esphome/pull/7298) by [@dangreco](https://github.com/dangreco) +- [modbus_controller] Allow duplicate command config [esphome#7311](https://github.com/esphome/esphome/pull/7311) by [@0x3333](https://github.com/0x3333) +- Better support for task blocking ring buffer reads and writes [esphome#7390](https://github.com/esphome/esphome/pull/7390) by [@kahrendt](https://github.com/kahrendt) +- Bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.0 [esphome#7395](https://github.com/esphome/esphome/pull/7395) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [api] Remove id from `MediaPlayerSupportedFormat` [esphome#7406](https://github.com/esphome/esphome/pull/7406) by [@jesserockz](https://github.com/jesserockz) +- Drop max BLE client connections limitation [esphome#7088](https://github.com/esphome/esphome/pull/7088) by [@syssi](https://github.com/syssi) +- [bl0942] loop and overflow cleanup [esphome#7358](https://github.com/esphome/esphome/pull/7358) by [@dwmw2](https://github.com/dwmw2) +- Bump peter-evans/create-pull-request from 6.1.0 to 7.0.0 [esphome#7405](https://github.com/esphome/esphome/pull/7405) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pypa/gh-action-pypi-publish from 1.10.0 to 1.10.1 [esphome#7404](https://github.com/esphome/esphome/pull/7404) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Voice assist improvement - configurable conversation_id timeout [esphome#7385](https://github.com/esphome/esphome/pull/7385) by [@jeffc](https://github.com/jeffc) +- Support BL0942 calibration [esphome#7299](https://github.com/esphome/esphome/pull/7299) by [@dwmw2](https://github.com/dwmw2) +- [micro_wake_word] Remove duplicated download code [esphome#7401](https://github.com/esphome/esphome/pull/7401) by [@jesserockz](https://github.com/jesserockz) +- Add StatsD component [esphome#6642](https://github.com/esphome/esphome/pull/6642) by [@Links2004](https://github.com/Links2004) (new-integration) +- [homeassistant-switch] Support different entity domains [esphome#7331](https://github.com/esphome/esphome/pull/7331) by [@jesserockz](https://github.com/jesserockz) +- Add support for using BMP280 with SPI [esphome#7053](https://github.com/esphome/esphome/pull/7053) by [@ademuri](https://github.com/ademuri) (new-integration) (breaking-change) +- Add voice assistant announce [esphome#7377](https://github.com/esphome/esphome/pull/7377) by [@synesthesiam](https://github.com/synesthesiam) +- [lvgl] Msgbox fixes and enhancements [esphome#7380](https://github.com/esphome/esphome/pull/7380) by [@clydebarrow](https://github.com/clydebarrow) +- libretiny: Allow specifying version of explicitly imported sources [esphome#7408](https://github.com/esphome/esphome/pull/7408) by [@dwmw2](https://github.com/dwmw2) +- [libretiny] Report version 1.7.0 for 'dev' and 'latest' [esphome#7415](https://github.com/esphome/esphome/pull/7415) by [@dwmw2](https://github.com/dwmw2) +- LTR-501, LTR-301, LTR-558 Series of Lite-On Light (ALS) and Proximity(PS) sensors [esphome#6262](https://github.com/esphome/esphome/pull/6262) by [@latonita](https://github.com/latonita) (new-integration) +- Fix armv7 container builds [esphome#7426](https://github.com/esphome/esphome/pull/7426) by [@jesserockz](https://github.com/jesserockz) +- [gh-actions] Don't produce docker build summaries [esphome#7430](https://github.com/esphome/esphome/pull/7430) by [@jesserockz](https://github.com/jesserockz) +- Add BK72xx support to require_framework_version() [esphome#7409](https://github.com/esphome/esphome/pull/7409) by [@dwmw2](https://github.com/dwmw2) +- Switch IPv6 platform check to use require_framework_version() [esphome#7410](https://github.com/esphome/esphome/pull/7410) by [@dwmw2](https://github.com/dwmw2) +- [bl0942] Improve energy reporting [esphome#7428](https://github.com/esphome/esphome/pull/7428) by [@dwmw2](https://github.com/dwmw2) +- [rpi_dpi_rgb] Add bounce_buffer config for ESP-IDF 5.x [esphome#7423](https://github.com/esphome/esphome/pull/7423) by [@clydebarrow](https://github.com/clydebarrow) +- [LVGL] Add color gradients [esphome#7427](https://github.com/esphome/esphome/pull/7427) by [@clydebarrow](https://github.com/clydebarrow) +- [dsmr] Add internal 'telegram' text_sensor to support bridging [esphome#6841](https://github.com/esphome/esphome/pull/6841) by [@marcovaneck](https://github.com/marcovaneck) +- Pull in new AsyncTCP for IPv6 on BK72xx [esphome#7431](https://github.com/esphome/esphome/pull/7431) by [@dwmw2](https://github.com/dwmw2) +- Bump LibreTiny recommended version to 1.7.0 [esphome#7432](https://github.com/esphome/esphome/pull/7432) by [@dwmw2](https://github.com/dwmw2) +- Enable IPv6 support for BK72xx [esphome#7398](https://github.com/esphome/esphome/pull/7398) by [@dwmw2](https://github.com/dwmw2) +- Move I2S config settings the the base i2sAudio files. Phase 1 [esphome#7183](https://github.com/esphome/esphome/pull/7183) by [@nielsnl68](https://github.com/nielsnl68) (breaking-change) +- Implement all supported thermocouple types for MAX31856 [esphome#7218](https://github.com/esphome/esphome/pull/7218) by [@ArkanStasarik](https://github.com/ArkanStasarik) +- [i2s_audio] Add more options to speakers and microphones [esphome#7306](https://github.com/esphome/esphome/pull/7306) by [@pyos](https://github.com/pyos) (breaking-change) +- [uponor_smatrix] Modifies sending algorithm [esphome#7326](https://github.com/esphome/esphome/pull/7326) by [@skasi7](https://github.com/skasi7) +- User configurable frame buffer. [esphome#7360](https://github.com/esphome/esphome/pull/7360) by [@ajwahab](https://github.com/ajwahab) +- [Modbus Controller] Added preference to change command retries [esphome#7312](https://github.com/esphome/esphome/pull/7312) by [@0x3333](https://github.com/0x3333) +- [voice-assistant] Dont error on `no_wake_word` timeout error with streaming wake word [esphome#7435](https://github.com/esphome/esphome/pull/7435) by [@jesserockz](https://github.com/jesserockz) +- Improve manufacturer data tracing to identify BLE devices a bit easie… [esphome#7332](https://github.com/esphome/esphome/pull/7332) by [@tomer-w](https://github.com/tomer-w) +- Add sample_bytes to media player supported format [esphome#7451](https://github.com/esphome/esphome/pull/7451) by [@synesthesiam](https://github.com/synesthesiam) +- [docker] Bump git from 1:2.39.2-1.1 to 1:2.39.5-0+deb12u1 [esphome#7452](https://github.com/esphome/esphome/pull/7452) by [@jesserockz](https://github.com/jesserockz) +- Add voice assistant configuration messages [esphome#7445](https://github.com/esphome/esphome/pull/7445) by [@synesthesiam](https://github.com/synesthesiam) +- Dont replace project name spaces with underlines [esphome#7455](https://github.com/esphome/esphome/pull/7455) by [@jesserockz](https://github.com/jesserockz) +- Add voice assistant methods for configuration [esphome#7459](https://github.com/esphome/esphome/pull/7459) by [@synesthesiam](https://github.com/synesthesiam) + +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/2025.10.0.md b/src/content/docs/changelog/2025.10.0.mdx similarity index 97% rename from content/changelog/2025.10.0.md rename to src/content/docs/changelog/2025.10.0.mdx index 6a38d150c0..d0db1e5be1 100644 --- a/content/changelog/2025.10.0.md +++ b/src/content/docs/changelog/2025.10.0.mdx @@ -1,18 +1,18 @@ --- description: "Changelog for ESPHome 2025.10.0." title: "ESPHome 2025.10.0 - 15th October 2025" -params: - seo: - description: Changelog for ESPHome 2025.10.0. - image: /changelog/images/changelog-2025.10.0.png +pagefind: false +slug: "changelog/2025.10.0" --- -{{< imgtable >}} -"Z-Wave Proxy","components/zwave_proxy","z-wave.svg","" -"ePaper SPI Displays","components/display/epaper_spi","epaper.svg","" -"WTS01","components/sensor/wts01","wts01.png","" -"LM75B","components/sensor/lm75b","lm75b.jpg","" -{{< /imgtable >}} +import ImgTable from "@components/ImgTable.astro"; + + ## Release Overview @@ -32,7 +32,7 @@ while introducing groundbreaking new features. ## Z-Wave Proxy -The new {{< docref "/components/zwave_proxy" >}} component enables network-based connectivity for Z-Wave hardware +The new [Zwave Proxy](/components/zwave_proxy/) component enables network-based connectivity for Z-Wave hardware by proxying serial communication between a Z-Wave modem SoC and Z-Wave JS over WiFi or Ethernet. This component was specifically designed for the [Home Assistant ZWA-2 Z-Wave Adapter](https://www.home-assistant.io/connect/zwa-2/), which combines an ESP32 and a Z-Wave modem in a single device, but could support other Z-Wave hardware in the future. @@ -84,7 +84,7 @@ Now Arduino is built as an ESP-IDF component alongside your configuration. ESPHo - New projects - Configurations where you want faster builds -Arduino is still fully supported and works great if you need it for specific Arduino libraries. See our {{< docref "/components/esp32#migrating-from-arduino" "Arduino to ESP-IDF migration guide" >}} for help switching - it's easier than you might think! +Arduino is still fully supported and works great if you need it for specific Arduino libraries. See our [Arduino to ESP-IDF migration guide](/guides/esp32_arduino_to_idf) for help switching - it's easier than you might think! ### What You Need to Know @@ -96,7 +96,7 @@ Arduino is still fully supported and works great if you need it for specific Ard ## ePaper SPI Display Component -The new {{< docref "/components/display/epaper_spi" >}} component provides a unified, modernized interface for +The new [Epaper Spi](/components/display/epaper_spi/) component provides a unified, modernized interface for SPI-based ePaper displays: **Improvements:** @@ -109,7 +109,7 @@ SPI-based ePaper displays: **Current Status:** Currently supports one display model, with additional models from the -{{< docref "/components/display/waveshare_epaper" "waveshare_epaper" >}} component being migrated over time. This +[waveshare_epaper](/components/display/waveshare_epaper/) component being migrated over time. This new architecture provides a more maintainable codebase for future ePaper display support. ## Security Enhancements @@ -291,51 +291,51 @@ ESPHome 2025.10.0 includes several breaking changes requiring attention: - **Framework architecture change** - Arduino is now integrated as an ESP-IDF component - **Impact**: Build process changes, potential incompatibilities with external components - **Action Required**: Test custom components, update framework version handling -- **PR**: [#10647](https://github.com/esphome/esphome/pull/10647) +- **PR**: [esphome#10647](https://github.com/esphome/esphome/pull/10647) ### API Changes Several API-related breaking changes improve security and efficiency: - **ConnectRequest/Response renamed** to AuthenticationRequest/Response - [#10726](https://github.com/esphome/esphome/pull/10726) + [esphome#10726](https://github.com/esphome/esphome/pull/10726) - **Password and encryption now mutually exclusive** with deprecation warnings - [#10871](https://github.com/esphome/esphome/pull/10871) -- **Configurable connection limits** added with new defaults [#10939](https://github.com/esphome/esphome/pull/10939) -- **Message size limits** to prevent memory exhaustion [#10936](https://github.com/esphome/esphome/pull/10936) + [esphome#10871](https://github.com/esphome/esphome/pull/10871) +- **Configurable connection limits** added with new defaults [esphome#10939](https://github.com/esphome/esphome/pull/10939) +- **Message size limits** to prevent memory exhaustion [esphome#10936](https://github.com/esphome/esphome/pull/10936) - **ClientInfo::get_combined_info() removed** to eliminate heap fragmentation - [#10970](https://github.com/esphome/esphome/pull/10970) + [esphome#10970](https://github.com/esphome/esphome/pull/10970) - **HomeassistantServiceResponse renamed** to HomeassistantActionRequest - [#10839](https://github.com/esphome/esphome/pull/10839) + [esphome#10839](https://github.com/esphome/esphome/pull/10839) ### Component Changes -- **EKTF2232**: `rts_pin` renamed to `reset_pin` [#10720](https://github.com/esphome/esphome/pull/10720) +- **EKTF2232**: `rts_pin` renamed to `reset_pin` [esphome#10720](https://github.com/esphome/esphome/pull/10720) - **MMC5603**: Fixed incorrect calculation factor (values will change) - [#9925](https://github.com/esphome/esphome/pull/9925) + [esphome#9925](https://github.com/esphome/esphome/pull/9925) - **ESP32 BLE**: max_connections now shared between client and server - [#11006](https://github.com/esphome/esphome/pull/11006) + [esphome#11006](https://github.com/esphome/esphome/pull/11006) - **Logger**: Runtime tag-specific log levels conditionally compiled - [#11004](https://github.com/esphome/esphome/pull/11004) -- **Lock**: Internal representation changed to bitmask [#10977](https://github.com/esphome/esphome/pull/10977) -- **mDNS/OpenThread**: Services storage uses StaticVector [#10976](https://github.com/esphome/esphome/pull/10976) + [esphome#11004](https://github.com/esphome/esphome/pull/11004) +- **Lock**: Internal representation changed to bitmask [esphome#10977](https://github.com/esphome/esphome/pull/10977) +- **mDNS/OpenThread**: Services storage uses StaticVector [esphome#10976](https://github.com/esphome/esphome/pull/10976) ### ESP32 Platform - **Version handling improved** with stricter validation - [#10899](https://github.com/esphome/esphome/pull/10899) + [esphome#10899](https://github.com/esphome/esphome/pull/10899) - **Web server**: IDF web server now used for Arduino builds - [#10991](https://github.com/esphome/esphome/pull/10991) + [esphome#10991](https://github.com/esphome/esphome/pull/10991) ### Audio - **esp-audio-libs updated to 2.0.1** with new FLAC decoder - [#10974](https://github.com/esphome/esphome/pull/10974) + [esphome#10974](https://github.com/esphome/esphome/pull/10974) Most breaking changes involve internal optimizations and security improvements. Standard configurations should continue working, but custom components and advanced setups may require updates. - +{/* markdownlint-disable MD013 */} ## Release 2025.10.1 - October 16 @@ -769,8 +769,4 @@ continue working, but custom components and advanced setups may require updates. - - -## All Changelogs - -{{< changelogs >}} +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/2025.11.0.md b/src/content/docs/changelog/2025.11.0.mdx similarity index 88% rename from content/changelog/2025.11.0.md rename to src/content/docs/changelog/2025.11.0.mdx index edf5516be2..1e61c2a79c 100644 --- a/content/changelog/2025.11.0.md +++ b/src/content/docs/changelog/2025.11.0.mdx @@ -1,24 +1,24 @@ --- description: "Changelog for ESPHome 2025.11.0." title: "ESPHome 2025.11.0 - November 2025" -params: - seo: - description: Changelog for ESPHome 2025.11.0. - image: /changelog/images/changelog-2025.11.0.png +pagefind: false +slug: "changelog/2025.11.0" --- -{{< imgtable >}} -"BH1900NUX","components/sensor/bh1900nux","bh1900nux-evk-001.png","" -"HDC2010","components/sensor/hdc2010","hdc2010.png","" -"TinyUSB","components/tinyusb","usb.svg","dark-invert" -"MCP3221","components/sensor/mcp3221","mcp3221.png","" -"HLK-FM22x Face Recognition Module","components/hlk_fm22x","face.svg","dark-invert" -"RX8130 RTC","components/time/rx8130","clock-outline.svg","dark-invert" -{{< /imgtable >}} +import ImgTable from "@components/ImgTable.astro"; + + ## Release Overview - +{/* RELEASE_OVERVIEW_START */} ESPHome 2025.11.0 is a performance and reliability-focused release that makes your devices faster, more reliable, and more capable than ever before. WiFi connectivity gets a complete overhaul with intelligent mesh network handling, dramatically faster connection times, and enhanced security controls. Memory optimizations free up **2-31KB of RAM** and **10KB+ of flash**, giving even resource-constrained devices room to grow. A new infrastructure change slashes event processing latency by **600-1,300x**—making BLE Proxy GATT operations rival local Bluetooth adapters, even over the network. **WiFi improvements** address the most common connectivity pain points: devices no longer get stuck on failed access points in mesh networks, hidden network connections are 2-6 seconds faster, and the new `min_auth_mode` option provides security controls with WPA2 defaults. The redesigned connection strategy with intelligent AP selection and reliable reconnection logic delivers the rock-solid WiFi performance users expect. @@ -28,12 +28,12 @@ ESPHome 2025.11.0 is a performance and reliability-focused release that makes yo **Memory optimizations** touch nearly every core component—WiFi scan management, select options, lights, climate controls, sensors, and the action framework. Sensor filter optimizations deliver the most dramatic gains, with sliding window filters saving up to 25KB of RAM on configurations that previously struggled with memory constraints. These improvements enable more complex configurations on the same hardware. New hardware support expands ESPHome's reach with 7 new components including the HDC2010 sensor, MCP3221 ADC, HLK-FM22X face recognition module, BH1900NUX sensor, RX8130 RTC, and TinyUSB foundation support for ESP32-S2/S3. Platform enhancements bring I2C and BLE logging to nRF52, while ESP32 gains hosted BLE for chips without native Bluetooth and ESP-NOW transport capabilities. - +{/* RELEASE_OVERVIEW_END */} - +{/* FEATURE_HIGHLIGHTS_START */} ## Enhanced WiFi Security and Reliability -**Dramatically Improved WiFi Reliability and Connection Times** ([#11805](https://github.com/esphome/esphome/pull/11805)) +**Dramatically Improved WiFi Reliability and Connection Times** ([esphome#11805](https://github.com/esphome/esphome/pull/11805)) A major step forward in WiFi reliability addresses critical connectivity issues in mesh networks and multi-AP environments. Previously, devices would get stuck repeatedly trying the strongest signal even when that access point was rejecting connections—a bug introduced in 2025.8.2 that made the priority-based failover system ineffective. @@ -48,7 +48,7 @@ The redesigned connection strategy delivers measurable improvements: This release restores and improves upon the reliable failover behavior users expect in multi-AP deployments, while reducing connection latency and memory overhead. -**Configurable Minimum Authentication Mode** ([#11814](https://github.com/esphome/esphome/pull/11814)) +**Configurable Minimum Authentication Mode** ([esphome#11814](https://github.com/esphome/esphome/pull/11814)) Added `min_auth_mode` configuration option to control WiFi authentication security: @@ -69,31 +69,31 @@ ESPHome 2025.11.0 delivers substantial memory improvements across the entire fra **Sensor Filter Optimizations:** -- **Sliding window filters** ([#11282](https://github.com/esphome/esphome/pull/11282)) - Saves **22-25KB RAM** on large batch windows, **90% on sliding windows**, **1,748 bytes flash** on ESP8266. Prevents OOM crashes on ESP32 devices with multiple sensors -- **Filter value lists** ([#11407](https://github.com/esphome/esphome/pull/11407)) - Saves **444 bytes flash** on ESP8266, 18-52% faster execution -- **Calibration/OR filters** ([#11437](https://github.com/esphome/esphome/pull/11437)) - Saves **464 bytes flash**, **48 bytes RAM** on ESP8266 +- **Sliding window filters** ([esphome#11282](https://github.com/esphome/esphome/pull/11282)) - Saves **22-25KB RAM** on large batch windows, **90% on sliding windows**, **1,748 bytes flash** on ESP8266. Prevents OOM crashes on ESP32 devices with multiple sensors +- **Filter value lists** ([esphome#11407](https://github.com/esphome/esphome/pull/11407)) - Saves **444 bytes flash** on ESP8266, 18-52% faster execution +- **Calibration/OR filters** ([esphome#11437](https://github.com/esphome/esphome/pull/11437)) - Saves **464 bytes flash**, **48 bytes RAM** on ESP8266 **Component Optimizations:** -- **WiFi component** ([#11205](https://github.com/esphome/esphome/pull/11205)) - Saves **440-1,192 bytes RAM** depending on network density -- **Select component** ([#11514](https://github.com/esphome/esphome/pull/11514)) - Saves **270-2,800 bytes per select** depending on option count -- **Light component** ([#11348](https://github.com/esphome/esphome/pull/11348)) - Saves **1,756 bytes flash** on ESP8266, **~108 bytes RAM** per 6 lights -- **Climate component** ([#11466](https://github.com/esphome/esphome/pull/11466), [#11621](https://github.com/esphome/esphome/pull/11621)) - Saves **~440 bytes RAM** per climate entity -- **Fan component** ([#11483](https://github.com/esphome/esphome/pull/11483), [#11632](https://github.com/esphome/esphome/pull/11632)) - Saves **~24 bytes per fan** -- **Event component** ([#11463](https://github.com/esphome/esphome/pull/11463), [#11767](https://github.com/esphome/esphome/pull/11767)) - Saves **1,248 bytes flash** -- **Global Controller Registry** ([#11772](https://github.com/esphome/esphome/pull/11772)) - Saves **388-6,148 bytes RAM** depending on entity count -- **Action framework** ([#11704](https://github.com/esphome/esphome/pull/11704)) - Saves **356 bytes flash**, eliminates RAM allocations in automations -- **Script component** ([#11308](https://github.com/esphome/esphome/pull/11308)) - Saves **1,592 bytes flash** on ESP32 -- **ESP32-IDF** ([#10930](https://github.com/esphome/esphome/pull/10930), [#11441](https://github.com/esphome/esphome/pull/11441)) - Saves **~10KB combined** (1.3KB + 8.7KB) -- **Network component** ([#11707](https://github.com/esphome/esphome/pull/11707)) - Saves **32-72 bytes per network component** -- **Light effects** ([#11487](https://github.com/esphome/esphome/pull/11487)) - Saves **24-32 bytes per effect** -- **WiFi priority** ([#11830](https://github.com/esphome/esphome/pull/11830)) - Saves **3 bytes per network entry** plus up to **96 bytes** from auto-recovery +- **WiFi component** ([esphome#11205](https://github.com/esphome/esphome/pull/11205)) - Saves **440-1,192 bytes RAM** depending on network density +- **Select component** ([esphome#11514](https://github.com/esphome/esphome/pull/11514)) - Saves **270-2,800 bytes per select** depending on option count +- **Light component** ([esphome#11348](https://github.com/esphome/esphome/pull/11348)) - Saves **1,756 bytes flash** on ESP8266, **~108 bytes RAM** per 6 lights +- **Climate component** ([esphome#11466](https://github.com/esphome/esphome/pull/11466), [esphome#11621](https://github.com/esphome/esphome/pull/11621)) - Saves **~440 bytes RAM** per climate entity +- **Fan component** ([esphome#11483](https://github.com/esphome/esphome/pull/11483), [esphome#11632](https://github.com/esphome/esphome/pull/11632)) - Saves **~24 bytes per fan** +- **Event component** ([esphome#11463](https://github.com/esphome/esphome/pull/11463), [esphome#11767](https://github.com/esphome/esphome/pull/11767)) - Saves **1,248 bytes flash** +- **Global Controller Registry** ([esphome#11772](https://github.com/esphome/esphome/pull/11772)) - Saves **388-6,148 bytes RAM** depending on entity count +- **Action framework** ([esphome#11704](https://github.com/esphome/esphome/pull/11704)) - Saves **356 bytes flash**, eliminates RAM allocations in automations +- **Script component** ([esphome#11308](https://github.com/esphome/esphome/pull/11308)) - Saves **1,592 bytes flash** on ESP32 +- **ESP32-IDF** ([esphome#10930](https://github.com/esphome/esphome/pull/10930), [esphome#11441](https://github.com/esphome/esphome/pull/11441)) - Saves **~10KB combined** (1.3KB + 8.7KB) +- **Network component** ([esphome#11707](https://github.com/esphome/esphome/pull/11707)) - Saves **32-72 bytes per network component** +- **Light effects** ([esphome#11487](https://github.com/esphome/esphome/pull/11487)) - Saves **24-32 bytes per effect** +- **WiFi priority** ([esphome#11830](https://github.com/esphome/esphome/pull/11830)) - Saves **3 bytes per network entry** plus up to **96 bytes** from auto-recovery **Note on Breaking Changes:** These optimizations required API changes for external component developers. See [Breaking Changes](#breaking-changes) section for migration details. Standard YAML configurations remain fully compatible but custom code in lambdas may require updates. ## Ultra-Low Latency Event Processing -**Thread-Safe Loop Wake Mechanism** ([#11681](https://github.com/esphome/esphome/pull/11681)) +**Thread-Safe Loop Wake Mechanism** ([esphome#11681](https://github.com/esphome/esphome/pull/11681)) A new infrastructure change eliminates event processing delays across multiple components. Previously, events from background tasks (BLE, USB, MQTT, ESP-NOW, wake word detection) would queue and wait up to 16ms for the next `select()` timeout before processing. The new `wake_loop_threadsafe()` mechanism uses a UDP loopback socket to immediately wake the main event loop when events arrive. @@ -105,11 +105,11 @@ A new infrastructure change eliminates event processing delays across multiple c **Components with Ultra-Low Latency:** -- **BLE operations** ([#11663](https://github.com/esphome/esphome/pull/11663)) - Bluetooth Proxy, BLE Client GATT operations, HomeKit pairing -- **USB Host** ([#11683](https://github.com/esphome/esphome/pull/11683)) - USB event processing over 1000x faster -- **MQTT** ([#11695](https://github.com/esphome/esphome/pull/11695)) - ESP32 only (ESP8266 already runs in main loop) -- **ESP-NOW** ([#11696](https://github.com/esphome/esphome/pull/11696)) - Packet reception and transmission completion -- **Micro Wake Word** ([#11698](https://github.com/esphome/esphome/pull/11698)) - Near-instant automation responses, all triggers fire within same millisecond +- **BLE operations** ([esphome#11663](https://github.com/esphome/esphome/pull/11663)) - Bluetooth Proxy, BLE Client GATT operations, HomeKit pairing +- **USB Host** ([esphome#11683](https://github.com/esphome/esphome/pull/11683)) - USB event processing over 1000x faster +- **MQTT** ([esphome#11695](https://github.com/esphome/esphome/pull/11695)) - ESP32 only (ESP8266 already runs in main loop) +- **ESP-NOW** ([esphome#11696](https://github.com/esphome/esphome/pull/11696)) - Packet reception and transmission completion +- **Micro Wake Word** ([esphome#11698](https://github.com/esphome/esphome/pull/11698)) - Near-instant automation responses, all triggers fire within same millisecond **Real-World Impact:** @@ -123,7 +123,7 @@ This optimization requires no configuration changes and automatically benefits a ## High-Performance Networking for Media Streaming -**Automatic Network Performance Tuning** ([#11812](https://github.com/esphome/esphome/pull/11812)) +**Automatic Network Performance Tuning** ([esphome#11812](https://github.com/esphome/esphome/pull/11812)) Introduced centralized high-performance networking system where components request optimized settings through `network.require_high_performance_networking()`: @@ -134,7 +134,7 @@ Introduced centralized high-performance networking system where components reque This optimization is critical for ESP32-S3 devices running voice assistants and media streaming, eliminating audio stuttering caused by insufficient WiFi buffer sizes. -**PSRAM Configuration Options** ([#11411](https://github.com/esphome/esphome/pull/11411)) +**PSRAM Configuration Options** ([esphome#11411](https://github.com/esphome/esphome/pull/11411)) Added `ignore_not_found` option (default `true`) to allow disabling `CONFIG_SPIRAM_IGNORE_NOTFOUND`. When set to `false` on devices with guaranteed PSRAM, enables WiFi driver to configure larger buffers for optimal streaming performance. Also improves boot reliability by managing heap allocations before PSRAM initialization. @@ -142,31 +142,31 @@ Added `ignore_not_found` option (default `true`) to allow disabling `CONFIG_SPIR **7 New Sensor/Device Components:** -- [HDC2010](/components/sensor/hdc2010) ([#6674](https://github.com/esphome/esphome/pull/6674)) - Texas Instruments temperature and humidity sensor -- [MCP3221](/components/sensor/mcp3221) ([#7764](https://github.com/esphome/esphome/pull/7764)) - I2C A-D converter with configurable reference voltage -- [HLK-FM22X](/components/hlk_fm22x) ([#8059](https://github.com/esphome/esphome/pull/8059)) - Face recognition module family -- [BH1900NUX](/components/sensor/bh1900nux) ([#8631](https://github.com/esphome/esphome/pull/8631)) - Rohm Semiconductor temperature sensor -- [RX8130](/components/time/rx8130) ([#10511](https://github.com/esphome/esphome/pull/10511)) - Epson RTC chip (used in M5Stack devices) -- [BLE NUS Logger](/components/ble_nus) ([#9846](https://github.com/esphome/esphome/pull/9846)) - Logging over BLE for nRF52 platform -- [TinyUSB](/components/tinyusb) ([#11678](https://github.com/esphome/esphome/pull/11678)) - USB device functionality foundation for ESP32-S2/S3 +- [HDC2010](/components/sensor/hdc2010) ([esphome#6674](https://github.com/esphome/esphome/pull/6674)) - Texas Instruments temperature and humidity sensor +- [MCP3221](/components/sensor/mcp3221) ([esphome#7764](https://github.com/esphome/esphome/pull/7764)) - I2C A-D converter with configurable reference voltage +- [HLK-FM22X](/components/hlk_fm22x) ([esphome#8059](https://github.com/esphome/esphome/pull/8059)) - Face recognition module family +- [BH1900NUX](/components/sensor/bh1900nux) ([esphome#8631](https://github.com/esphome/esphome/pull/8631)) - Rohm Semiconductor temperature sensor +- [RX8130](/components/time/rx8130) ([esphome#10511](https://github.com/esphome/esphome/pull/10511)) - Epson RTC chip (used in M5Stack devices) +- [BLE NUS Logger](/components/ble_nus) ([esphome#9846](https://github.com/esphome/esphome/pull/9846)) - Logging over BLE for nRF52 platform +- [TinyUSB](/components/tinyusb) ([esphome#11678](https://github.com/esphome/esphome/pull/11678)) - USB device functionality foundation for ESP32-S2/S3 **Extended Hardware Support:** -- GP8403 DAC now supports GP8413 (15-bit) model ([#7726](https://github.com/esphome/esphome/pull/7726)) with higher precision -- Toshiba climate supports RAS-2819T air conditioner ([#9490](https://github.com/esphome/esphome/pull/9490)) with two-packet IR protocol -- Dallas temperature sensors support index-based addressing ([#11346](https://github.com/esphome/esphome/pull/11346)) for devices without programmable addresses -- SX126x LoRa module pins now support GPIO port expanders ([#11782](https://github.com/esphome/esphome/pull/11782)) for SeeedStudio SenseCAP Indicator -- Mopeka Standard Check sensors support alternate ID 0x44 ([#10907](https://github.com/esphome/esphome/pull/10907)) +- GP8403 DAC now supports GP8413 (15-bit) model ([esphome#7726](https://github.com/esphome/esphome/pull/7726)) with higher precision +- Toshiba climate supports RAS-2819T air conditioner ([esphome#9490](https://github.com/esphome/esphome/pull/9490)) with two-packet IR protocol +- Dallas temperature sensors support index-based addressing ([esphome#11346](https://github.com/esphome/esphome/pull/11346)) for devices without programmable addresses +- SX126x LoRa module pins now support GPIO port expanders ([esphome#11782](https://github.com/esphome/esphome/pull/11782)) for SeeedStudio SenseCAP Indicator +- Mopeka Standard Check sensors support alternate ID 0x44 ([esphome#10907](https://github.com/esphome/esphome/pull/10907)) **Platform & Feature Expansions:** -- **nRF52 platform** - I2C support ([#8150](https://github.com/esphome/esphome/pull/8150)), BLE NUS logging ([#9846](https://github.com/esphome/esphome/pull/9846), [#9861](https://github.com/esphome/esphome/pull/9861)), GPIO voltage control ([#9858](https://github.com/esphome/esphome/pull/9858)), GPIO input by switching to polling mode ([#11664](https://github.com/esphome/esphome/pull/11664)), and Seeed XIAO BLE board improvements ([#10698](https://github.com/esphome/esphome/pull/10698)) -- **ESP-NOW transport** - Added ESP-NOW as a transport platform for packet_transport component ([#11025](https://github.com/esphome/esphome/pull/11025)) -- **IR Remote protocols** - Dyson AM07 fan support ([#10163](https://github.com/esphome/esphome/pull/10163)), Symphony protocol ([#10777](https://github.com/esphome/esphome/pull/10777)), Toshiba RAS-2819T AC ([#9490](https://github.com/esphome/esphome/pull/9490)) +- **nRF52 platform** - I2C support ([esphome#8150](https://github.com/esphome/esphome/pull/8150)), BLE NUS logging ([esphome#9846](https://github.com/esphome/esphome/pull/9846), [esphome#9861](https://github.com/esphome/esphome/pull/9861)), GPIO voltage control ([esphome#9858](https://github.com/esphome/esphome/pull/9858)), GPIO input by switching to polling mode ([esphome#11664](https://github.com/esphome/esphome/pull/11664)), and Seeed XIAO BLE board improvements ([esphome#10698](https://github.com/esphome/esphome/pull/10698)) +- **ESP-NOW transport** - Added ESP-NOW as a transport platform for packet_transport component ([esphome#11025](https://github.com/esphome/esphome/pull/11025)) +- **IR Remote protocols** - Dyson AM07 fan support ([esphome#10163](https://github.com/esphome/esphome/pull/10163)), Symphony protocol ([esphome#10777](https://github.com/esphome/esphome/pull/10777)), Toshiba RAS-2819T AC ([esphome#9490](https://github.com/esphome/esphome/pull/9490)) ## ESP32 Platform Enhancements -**ESP-IDF 5.5.1 and Arduino 3.3.2** ([#9839](https://github.com/esphome/esphome/pull/9839)) +**ESP-IDF 5.5.1 and Arduino 3.3.2** ([esphome#9839](https://github.com/esphome/esphome/pull/9839)) Major framework updates bring the latest ESP-IDF 5.5.1 and Arduino 3.3.2 to ESPHome: @@ -177,19 +177,19 @@ Major framework updates bring the latest ESP-IDF 5.5.1 and Arduino 3.3.2 to ESPH These updates are automatically applied when using the default framework versions. -**Hosted BLE Support** ([#11167](https://github.com/esphome/esphome/pull/11167)) +**Hosted BLE Support** ([esphome#11167](https://github.com/esphome/esphome/pull/11167)) ESP32 P4 and other chips without integrated Bluetooth now support BLE through external controllers using ESP-Hosted API. Enables Bluetooth Proxy functionality on previously unsupported ESP32 variants. -**Hosted OTA Support** ([#11562](https://github.com/esphome/esphome/pull/11562)) +**Hosted OTA Support** ([esphome#11562](https://github.com/esphome/esphome/pull/11562)) Firmware updates for ESP32 co-processors are now supported via ESP-Hosted API, enabling OTA functionality for hosted configurations. -**Brownout Protection** ([#11306](https://github.com/esphome/esphome/pull/11306)) +**Brownout Protection** ([esphome#11306](https://github.com/esphome/esphome/pull/11306)) ESP-IDF builds now automatically reduce PHY TX power during brownout conditions to prevent boot loops. This feature was previously only available in Arduino framework builds. Can be disabled if needed through sdkconfig options. -**Configurable Main Loop Stack Size** ([#10564](https://github.com/esphome/esphome/pull/10564)) +**Configurable Main Loop Stack Size** ([esphome#10564](https://github.com/esphome/esphome/pull/10564)) ESP32 ESP-IDF configurations can now tune the main loop stack size for complex setups: @@ -201,17 +201,17 @@ esp32: main_loop_stack_size: 16384 # Increase for deeply nested components ``` -**Framework Source Options** ([#11125](https://github.com/esphome/esphome/pull/11125)) +**Framework Source Options** ([esphome#11125](https://github.com/esphome/esphome/pull/11125)) ESP32 framework configuration now accepts additional PlatformIO source schemes beyond HTTP, including `symlink://`, `git://`, and other repository protocols for local development. ## OpenThread Improvements -**Over-The-Air Updates** ([#11095](https://github.com/esphome/esphome/pull/11095)) +**Over-The-Air Updates** ([esphome#11095](https://github.com/esphome/esphome/pull/11095)) OpenThread devices (ESP32-H2) now support OTA updates via `esphome run`. The mDNS address is automatically populated as the device's default address, eliminating the need to manually specify `--device
    `. -**Sleepy End Device Support** ([#11374](https://github.com/esphome/esphome/pull/11374)) +**Sleepy End Device Support** ([esphome#11374](https://github.com/esphome/esphome/pull/11374)) Added `poll_period` configuration for MTD (Minimal Thread Device) mode, enabling Sleep End Device (SED) behavior for battery-powered Thread devices: @@ -225,14 +225,14 @@ openthread: The nRF52 (Zephyr) platform received extensive new functionality: -- **I2C Support** ([#8150](https://github.com/esphome/esphome/pull/8150)) - Full I2C bus support for sensors and peripherals -- **BLE Logging** ([#9846](https://github.com/esphome/esphome/pull/9846), [#9861](https://github.com/esphome/esphome/pull/9861)) - Log viewing via `esphome logs --device BLE` or MAC address -- **GPIO High Voltage Mode** ([#9858](https://github.com/esphome/esphome/pull/9858)) - Adjustable voltage levels for USB-powered operation -- **Xiao BLE Bootloader Fix** ([#10698](https://github.com/esphome/esphome/pull/10698)) - Corrected default bootloader, fixed upload, added runtime mismatch detection +- **I2C Support** ([esphome#8150](https://github.com/esphome/esphome/pull/8150)) - Full I2C bus support for sensors and peripherals +- **BLE Logging** ([esphome#9846](https://github.com/esphome/esphome/pull/9846), [esphome#9861](https://github.com/esphome/esphome/pull/9861)) - Log viewing via `esphome logs --device BLE` or MAC address +- **GPIO High Voltage Mode** ([esphome#9858](https://github.com/esphome/esphome/pull/9858)) - Adjustable voltage levels for USB-powered operation +- **Xiao BLE Bootloader Fix** ([esphome#10698](https://github.com/esphome/esphome/pull/10698)) - Corrected default bootloader, fixed upload, added runtime mismatch detection ## LVGL Display Enhancements -**Simplified Layout System** ([#10149](https://github.com/esphome/esphome/pull/10149)) +**Simplified Layout System** ([esphome#10149](https://github.com/esphome/esphome/pull/10149)) LVGL widgets now support shorthand layout methods for easier configuration: @@ -253,7 +253,7 @@ lvgl: New `container` widget provides styling-free base with 100% default dimensions. Added `stretch` option for flex layouts and substantial speedup of config validation. -**Rendering Triggers and NaN Substitution** ([#11628](https://github.com/esphome/esphome/pull/11628), [#11712](https://github.com/esphome/esphome/pull/11712)) +**Rendering Triggers and NaN Substitution** ([esphome#11628](https://github.com/esphome/esphome/pull/11628), [esphome#11712](https://github.com/esphome/esphome/pull/11712)) Added `on_draw_start` and `on_draw_end` triggers for coordinating e-paper display updates. Text formatting now supports NaN substitution for graceful handling of unavailable sensor values: @@ -269,7 +269,7 @@ lvgl: ## Display Component Improvements -**E-Paper SPI Refactoring** ([#11540](https://github.com/esphome/esphome/pull/11540)) +**E-Paper SPI Refactoring** ([esphome#11540](https://github.com/esphome/esphome/pull/11540)) Major improvements to e-paper displays: @@ -277,9 +277,9 @@ Major improvements to e-paper displays: - **Optimized state machine**: Code-based sequence instead of linear queue saves memory - **Board-specific configs**: Pre-configured pin mappings (Seeed-reTerminal-E1002) - **Improved timing**: Internal delay handling instead of loop disabling -- **Fixed busy pin logic** ([#11349](https://github.com/esphome/esphome/pull/11349)): Corrected active-low detection +- **Fixed busy pin logic** ([esphome#11349](https://github.com/esphome/esphome/pull/11349)): Corrected active-low detection -**Component Idle Detection** ([#11651](https://github.com/esphome/esphome/pull/11651)) +**Component Idle Detection** ([esphome#11651](https://github.com/esphome/esphome/pull/11651)) New `component.is_idle` condition and `is_idle()` method for automations that need to wait for displays to finish updating before proceeding: @@ -294,7 +294,7 @@ lvgl: ## Configuration and Developer Tools -**Advanced Substitution Features** ([#11203](https://github.com/esphome/esphome/pull/11203)) +**Advanced Substitution Features** ([esphome#11203](https://github.com/esphome/esphome/pull/11203)) The `!extend` and `!remove` tags now support substitutions and Jinja templates: @@ -307,7 +307,7 @@ packages: - id: !remove ${COMPONENT_TO_REMOVE} # Conditional removal ``` -**Memory Analysis Command** ([#11395](https://github.com/esphome/esphome/pull/11395)) +**Memory Analysis Command** ([esphome#11395](https://github.com/esphome/esphome/pull/11395)) New `esphome analyze-memory ` command provides detailed memory usage breakdown by component: @@ -320,11 +320,11 @@ New `esphome analyze-memory ` command provides detailed memory usag ### Sensors -- Dallas temperature sensors support index-based addressing ([#11346](https://github.com/esphome/esphome/pull/11346)) for devices without programmable addresses -- INA2xx reset control ([#10787](https://github.com/esphome/esphome/pull/10787)): Preserve counters through ESP resets with `reset_on_boot: false` -- XGZP68xx oversampling ([#10306](https://github.com/esphome/esphome/pull/10306)): Configurable oversampling up to 32768x for improved accuracy +- Dallas temperature sensors support index-based addressing ([esphome#11346](https://github.com/esphome/esphome/pull/11346)) for devices without programmable addresses +- INA2xx reset control ([esphome#10787](https://github.com/esphome/esphome/pull/10787)): Preserve counters through ESP resets with `reset_on_boot: false` +- XGZP68xx oversampling ([esphome#10306](https://github.com/esphome/esphome/pull/10306)): Configurable oversampling up to 32768x for improved accuracy -**Improved Improv WiFi Provisioning** ([#10757](https://github.com/esphome/esphome/pull/10757)) +**Improved Improv WiFi Provisioning** ([esphome#10757](https://github.com/esphome/esphome/pull/10757)) ESP32 Improv now supports `next_url` with template substitutions for post-provisioning redirection: @@ -333,7 +333,7 @@ esp32_improv: next_url: "https://example.com/setup?device={{device_name}}&ip={{ip_address}}" ``` -**Sensor Heartbeat Filter Options** ([#10993](https://github.com/esphome/esphome/pull/10993)) +**Sensor Heartbeat Filter Options** ([esphome#10993](https://github.com/esphome/esphome/pull/10993)) Heartbeat filter adds `optimistic` mode to forward new values immediately while still repeating periodically: @@ -346,41 +346,41 @@ sensor: optimistic: true # Forward immediately + repeat ``` -**ESP-NOW Packet Transport** ([#11025](https://github.com/esphome/esphome/pull/11025)) +**ESP-NOW Packet Transport** ([esphome#11025](https://github.com/esphome/esphome/pull/11025)) ESP-NOW now available as transport platform for packet_transport component, enabling direct ESP32-to-ESP32 wireless sensor data transmission. -**Remote Transmitter Non-Blocking Mode** ([#11524](https://github.com/esphome/esphome/pull/11524)) +**Remote Transmitter Non-Blocking Mode** ([esphome#11524](https://github.com/esphome/esphome/pull/11524)) Remote transmitter operations no longer block the main loop by default, preventing "took a long time for an operation" warnings during long IR transmissions. -**HTTP Request Trigger Variables** ([#11464](https://github.com/esphome/esphome/pull/11464)) +**HTTP Request Trigger Variables** ([esphome#11464](https://github.com/esphome/esphome/pull/11464)) HTTP request actions now pass trigger variables correctly into `on_response` and `on_error` triggers. - +{/* FEATURE_HIGHLIGHTS_END */} ## Breaking Changes - +{/* BREAKING_CHANGES_USERS_START */} ### User-Facing Breaking Changes #### WiFi & Network -- **WiFi**: WiFi and Ethernet components no longer block other components' setup until connected. Components with setup priority > WIFI (802.3) now initialize immediately, even if network is disconnected. [#9823](https://github.com/esphome/esphome/pull/9823) +- **WiFi**: WiFi and Ethernet components no longer block other components' setup until connected. Components with setup priority > WIFI (802.3) now initialize immediately, even if network is disconnected. [esphome#9823](https://github.com/esphome/esphome/pull/9823) -- **WiFi min_auth_mode**: ESP8266 default will change from `WPA` to `WPA2` in 2026.6.0. Users with WPA-only routers must explicitly set `min_auth_mode: WPA` before then. [#11814](https://github.com/esphome/esphome/pull/11814) +- **WiFi min_auth_mode**: ESP8266 default will change from `WPA` to `WPA2` in 2026.6.0. Users with WPA-only routers must explicitly set `min_auth_mode: WPA` before then. [esphome#11814](https://github.com/esphome/esphome/pull/11814) -- **WiFi priority**: The `priority` configuration option now only accepts integers (-128 to 127) instead of floats. Change `priority: 5.5` to `priority: 5`. [#11830](https://github.com/esphome/esphome/pull/11830) +- **WiFi priority**: The `priority` configuration option now only accepts integers (-128 to 127) instead of floats. Change `priority: 5.5` to `priority: 5`. [esphome#11830](https://github.com/esphome/esphome/pull/11830) -- **.local addresses**: .local addresses now require mDNS to be enabled for DNS resolution. Previously attempted DNS resolution could add 10+ second delays. [#11508](https://github.com/esphome/esphome/pull/11508) +- **.local addresses**: .local addresses now require mDNS to be enabled for DNS resolution. Previously attempted DNS resolution could add 10+ second delays. [esphome#11508](https://github.com/esphome/esphome/pull/11508) -- **Network high performance**: Speaker media player now always enables high performance networking mode (previously only with codec support). Users can override with `enable_high_performance` under the network component if needed. [#11812](https://github.com/esphome/esphome/pull/11812) +- **Network high performance**: Speaker media player now always enables high performance networking mode (previously only with codec support). Users can override with `enable_high_performance` under the network component if needed. [esphome#11812](https://github.com/esphome/esphome/pull/11812) ### ESP32 Platform -- **ESP32 brownout protection**: ESP-IDF now reduces PHY TX power during brownout to prevent boot loops. Can be disabled with `sdkconfig_options: CONFIG_ESP_PHY_REDUCE_TX_POWER: n` if needed. [#11306](https://github.com/esphome/esphome/pull/11306) +- **ESP32 brownout protection**: ESP-IDF now reduces PHY TX power during brownout to prevent boot loops. Can be disabled with `sdkconfig_options: CONFIG_ESP_PHY_REDUCE_TX_POWER: n` if needed. [esphome#11306](https://github.com/esphome/esphome/pull/11306) - **ESP32 PSRAM**: PSRAM is no longer auto-loaded by components that depend on it (such as `esp32_camera`, `speaker`, and `media_player`). Users must now explicitly add a `psram:` configuration block to their YAML. Additionally, for ESP32-S3, the `mode` option is now required since S3 supports both quad and octal modes. Typically, 2MB PSRAM uses `quad` mode while 8 or 16MB uses `octal` mode—check your module's datasheet. Example configuration: @@ -390,68 +390,68 @@ HTTP request actions now pass trigger variables correctly into `on_response` and speed: 80MHz ``` - [#11470](https://github.com/esphome/esphome/pull/11470) + [esphome#11470](https://github.com/esphome/esphome/pull/11470) ### Component Behavior Changes -- **Script max_runs**: Queued scripts now default to `max_runs: 5` (allowing 1 running + 4 queued instances) instead of unlimited to prevent crashes from unbounded memory growth. Set `max_runs` explicitly if you need more capacity. [#11308](https://github.com/esphome/esphome/pull/11308) +- **Script max_runs**: Queued scripts now default to `max_runs: 5` (allowing 1 running + 4 queued instances) instead of unlimited to prevent crashes from unbounded memory growth. Set `max_runs` explicitly if you need more capacity. [esphome#11308](https://github.com/esphome/esphome/pull/11308) -- **Remote transmitter**: Remote transmitter now defaults to non-blocking mode to prevent long blocking operations (>30ms). [#11524](https://github.com/esphome/esphome/pull/11524) +- **Remote transmitter**: Remote transmitter now defaults to non-blocking mode to prevent long blocking operations (>30ms). [esphome#11524](https://github.com/esphome/esphome/pull/11524) -- **Fan preset modes**: Fan preset modes now preserve the order defined in YAML instead of being sorted alphabetically. The order in Home Assistant will match your YAML configuration order. [#11483](https://github.com/esphome/esphome/pull/11483) +- **Fan preset modes**: Fan preset modes now preserve the order defined in YAML instead of being sorted alphabetically. The order in Home Assistant will match your YAML configuration order. [esphome#11483](https://github.com/esphome/esphome/pull/11483) -- **Select state**: The public `state` member has been deprecated and will be removed in 2026.5.0. Use `current_option()` method instead. Deprecation warnings will be shown during compilation. [#11623](https://github.com/esphome/esphome/pull/11623) +- **Select state**: The public `state` member has been deprecated and will be removed in 2026.5.0. Use `current_option()` method instead. Deprecation warnings will be shown during compilation. [esphome#11623](https://github.com/esphome/esphome/pull/11623) ### Component-Specific Changes -- **HM3301**: AQI calculation updated to EPA 2024 standard. Values will change compared to the old 2012 formula. [#9442](https://github.com/esphome/esphome/pull/9442) +- **HM3301**: AQI calculation updated to EPA 2024 standard. Values will change compared to the old 2012 formula. [esphome#9442](https://github.com/esphome/esphome/pull/9442) -- **GDK101**: Firmware version is now reported as a string instead of a float division result. [#11029](https://github.com/esphome/esphome/pull/11029) +- **GDK101**: Firmware version is now reported as a string instead of a float division result. [esphome#11029](https://github.com/esphome/esphome/pull/11029) -- **Uponor Smatrix**: The `address` property of the `uponor_smatrix` component was removed. Device addresses are now 32-bit instead of separate 16-bit system and device addresses. Update configurations by prepending the previous system address to individual device addresses. [#11066](https://github.com/esphome/esphome/pull/11066) +- **Uponor Smatrix**: The `address` property of the `uponor_smatrix` component was removed. Device addresses are now 32-bit instead of separate 16-bit system and device addresses. Update configurations by prepending the previous system address to individual device addresses. [esphome#11066](https://github.com/esphome/esphome/pull/11066) -- **Pipsolar**: Fixed typo `warnung_low_pv_energy` renamed to `warning_low_pv_energy`. Update YAML configurations. [#10291](https://github.com/esphome/esphome/pull/10291) +- **Pipsolar**: Fixed typo `warnung_low_pv_energy` renamed to `warning_low_pv_energy`. Update YAML configurations. [esphome#10291](https://github.com/esphome/esphome/pull/10291) -- **E-Paper SPI**: Busy pin logic corrected to match datasheet (active low). Some e-paper displays may behave differently. [#11349](https://github.com/esphome/esphome/pull/11349) +- **E-Paper SPI**: Busy pin logic corrected to match datasheet (active low). Some e-paper displays may behave differently. [esphome#11349](https://github.com/esphome/esphome/pull/11349) -- **nRF52 bootloader**: Default bootloader changed for `xiao_ble` and `adafruit_itsybitsy_nrf52840` boards. Warning shown if generic Adafruit bootloader is used. [#10698](https://github.com/esphome/esphome/pull/10698) +- **nRF52 bootloader**: Default bootloader changed for `xiao_ble` and `adafruit_itsybitsy_nrf52840` boards. Warning shown if generic Adafruit bootloader is used. [esphome#10698](https://github.com/esphome/esphome/pull/10698) -- **HTTP request triggers**: Changed from multiple on_response/on_error triggers to a single trigger that receives variables. Update automation configurations to use the new variable-based trigger format. [#11464](https://github.com/esphome/esphome/pull/11464) +- **HTTP request triggers**: Changed from multiple on_response/on_error triggers to a single trigger that receives variables. Update automation configurations to use the new variable-based trigger format. [esphome#11464](https://github.com/esphome/esphome/pull/11464) ## YAML Lambda Changes Users who access component members directly in YAML lambdas may need updates: -- **Select**: Change `id(my_select).state` to `id(my_select).current_option()` (deprecated, will be removed in 2026.5.0). [#11623](https://github.com/esphome/esphome/pull/11623) +- **Select**: Change `id(my_select).state` to `id(my_select).current_option()` (deprecated, will be removed in 2026.5.0). [esphome#11623](https://github.com/esphome/esphome/pull/11623) -- **Fan**: Change `id(my_fan).preset_mode` to `id(my_fan).get_preset_mode()`. [#11632](https://github.com/esphome/esphome/pull/11632) +- **Fan**: Change `id(my_fan).preset_mode` to `id(my_fan).get_preset_mode()`. [esphome#11632](https://github.com/esphome/esphome/pull/11632) -- **Event**: Change `id(my_event).last_event_type` to `id(my_event).get_last_event_type()`. [#11767](https://github.com/esphome/esphome/pull/11767) +- **Event**: Change `id(my_event).last_event_type` to `id(my_event).get_last_event_type()`. [esphome#11767](https://github.com/esphome/esphome/pull/11767) - **Climate**: Custom mode members are now private. Change direct access to public accessor methods: - Check if active: `id(my_climate).custom_fan_mode.has_value()` → `id(my_climate).has_custom_fan_mode()`, `id(my_climate).custom_preset.has_value()` → `id(my_climate).has_custom_preset()` - Get value: `id(my_climate).custom_fan_mode.value()` → `id(my_climate).get_custom_fan_mode()`, `id(my_climate).custom_preset.value()` → `id(my_climate).get_custom_preset()` - [#11621](https://github.com/esphome/esphome/pull/11621) - + [esphome#11621](https://github.com/esphome/esphome/pull/11621) +{/* BREAKING_CHANGES_USERS_END */} ### Breaking Changes for Developers - +{/* BREAKING_CHANGES_DEVELOPERS_START */} The following changes affect external component developers. Standard YAML configurations are generally not affected. ## Core Framework Changes -- **Action/Trigger Framework**: All action/trigger/condition method signatures changed to use const references (`const Ts&... x`) instead of pass-by-value (`Ts... x`). See the [Action Framework Performance Optimization](https://developers.esphome.io/blog/2025/11/06/action-framework-performance-optimization/) blog post for migration details. [#11704](https://github.com/esphome/esphome/pull/11704) +- **Action/Trigger Framework**: All action/trigger/condition method signatures changed to use const references (`const Ts&... x`) instead of pass-by-value (`Ts... x`). See the [Action Framework Performance Optimization](https://developers.esphome.io/blog/2025/11/06/action-framework-performance-optimization/) blog post for migration details. [esphome#11704](https://github.com/esphome/esphome/pull/11704) -- **Controller API**: Controllers now use global registry pattern. Method signatures changed to remove unused state parameters (e.g., `on_sensor_update(sensor::Sensor *obj)` instead of `on_sensor_update(sensor::Sensor *obj, float state)`). External controller implementations extremely rare. [#11772](https://github.com/esphome/esphome/pull/11772) +- **Controller API**: Controllers now use global registry pattern. Method signatures changed to remove unused state parameters (e.g., `on_sensor_update(sensor::Sensor *obj)` instead of `on_sensor_update(sensor::Sensor *obj, float state)`). External controller implementations extremely rare. [esphome#11772](https://github.com/esphome/esphome/pull/11772) -- **EntityBase::hash_base()**: Removed deprecated virtual method (deprecated since June 2022). Remove `hash_base()` overrides from external components. [#11783](https://github.com/esphome/esphome/pull/11783) +- **EntityBase::hash_base()**: Removed deprecated virtual method (deprecated since June 2022). Remove `hash_base()` overrides from external components. [esphome#11783](https://github.com/esphome/esphome/pull/11783) -- **hexencode()**: Removed function deprecated since 2022.1. Use alternative encoding methods. [#11383](https://github.com/esphome/esphome/pull/11383) +- **hexencode()**: Removed function deprecated since 2022.1. Use alternative encoding methods. [esphome#11383](https://github.com/esphome/esphome/pull/11383) -- **Schema constants**: Removed deprecated schema constants from core. Update external components to use current schema helpers. [#11591](https://github.com/esphome/esphome/pull/11591) +- **Schema constants**: Removed deprecated schema constants from core. Update external components to use current schema helpers. [esphome#11591](https://github.com/esphome/esphome/pull/11591) ## Component-Specific API Changes @@ -459,72 +459,72 @@ The following changes affect external component developers. Standard YAML config See the [Climate Entity Class: FiniteSetMask and Flash Storage Optimizations](https://developers.esphome.io/blog/2025/11/07/climate-entity-class-finitesetmask-and-flash-storage-optimizations/) blog post for migration details. -- **Custom modes storage**: Changed from `std::set` to `FiniteSetMask` for supported modes, and from `std::vector` to `std::vector` for custom fan modes and presets. [#11466](https://github.com/esphome/esphome/pull/11466), [#11621](https://github.com/esphome/esphome/pull/11621) +- **Custom modes storage**: Changed from `std::set` to `FiniteSetMask` for supported modes, and from `std::vector` to `std::vector` for custom fan modes and presets. [esphome#11466](https://github.com/esphome/esphome/pull/11466), [esphome#11621](https://github.com/esphome/esphome/pull/11621) -- **Member access**: Climate device members (`custom_fan_mode_`, `custom_preset_`) are now private. Use protected setter methods (`set_custom_fan_mode_()`, `set_custom_preset_()`) in derived classes. Use public accessor methods to read values: `has_custom_fan_mode()`, `get_custom_fan_mode()`, `has_custom_preset()`, `get_custom_preset()`. [#11621](https://github.com/esphome/esphome/pull/11621) +- **Member access**: Climate device members (`custom_fan_mode_`, `custom_preset_`) are now private. Use protected setter methods (`set_custom_fan_mode_()`, `set_custom_preset_()`) in derived classes. Use public accessor methods to read values: `has_custom_fan_mode()`, `get_custom_fan_mode()`, `has_custom_preset()`, `get_custom_preset()`. [esphome#11621](https://github.com/esphome/esphome/pull/11621) -- **Deprecated methods**: Removed methods deprecated in 1.20 (July 2021). [#11388](https://github.com/esphome/esphome/pull/11388) +- **Deprecated methods**: Removed methods deprecated in 1.20 (July 2021). [esphome#11388](https://github.com/esphome/esphome/pull/11388) ### Light See the [Light Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/07/light-entity-class-memory-optimizations/) blog post for migration details. -- **Color modes**: Replaced `std::set` with `ColorModeMask` bitmask class. [#11348](https://github.com/esphome/esphome/pull/11348) +- **Color modes**: Replaced `std::set` with `ColorModeMask` bitmask class. [esphome#11348](https://github.com/esphome/esphome/pull/11348) -- **Effect names**: Changed from `std::string` to `const char *` for effect names. [#11487](https://github.com/esphome/esphome/pull/11487) +- **Effect names**: Changed from `std::string` to `const char *` for effect names. [esphome#11487](https://github.com/esphome/esphome/pull/11487) -- **Deprecated methods**: Removed methods deprecated in 2021.8.0. [#11389](https://github.com/esphome/esphome/pull/11389) +- **Deprecated methods**: Removed methods deprecated in 2021.8.0. [esphome#11389](https://github.com/esphome/esphome/pull/11389) ### Fan See the [Fan Entity Class: Preset Mode Flash Storage and Order Preservation](https://developers.esphome.io/blog/2025/11/07/fan-entity-class-preset-mode-flash-storage-and-order-preservation/) blog post for migration details. -- **Preset modes**: Changed from `std::set` to `std::vector`. The `.preset_mode` public member has been removed - use `get_preset_mode()` for reading and `set_preset_mode_()` for writing in derived classes. [#11483](https://github.com/esphome/esphome/pull/11483), [#11632](https://github.com/esphome/esphome/pull/11632) +- **Preset modes**: Changed from `std::set` to `std::vector`. The `.preset_mode` public member has been removed - use `get_preset_mode()` for reading and `set_preset_mode_()` for writing in derived classes. [esphome#11483](https://github.com/esphome/esphome/pull/11483), [esphome#11632](https://github.com/esphome/esphome/pull/11632) -- **Deprecated code**: Removed code deprecated in 2022.2. [#11392](https://github.com/esphome/esphome/pull/11392) +- **Deprecated code**: Removed code deprecated in 2022.2. [esphome#11392](https://github.com/esphome/esphome/pull/11392) ### Select See the [Select Entity Class: Index-Based Operations and Flash Storage](https://developers.esphome.io/blog/2025/11/07/select-entity-class-index-based-operations-and-flash-storage/) blog post for migration details. -- **Options storage**: Changed from `std::vector` to `FixedVector`. [#11514](https://github.com/esphome/esphome/pull/11514) +- **Options storage**: Changed from `std::vector` to `FixedVector`. [esphome#11514](https://github.com/esphome/esphome/pull/11514) -- **State member**: Public `state` member deprecated (will be removed in 2026.5.0). Use `current_option()` method instead. [#11623](https://github.com/esphome/esphome/pull/11623) +- **State member**: Public `state` member deprecated (will be removed in 2026.5.0). Use `current_option()` method instead. [esphome#11623](https://github.com/esphome/esphome/pull/11623) -- **Index-based operations**: Added optional `control(size_t index)` override for more efficient implementations. [#11623](https://github.com/esphome/esphome/pull/11623) +- **Index-based operations**: Added optional `control(size_t index)` override for more efficient implementations. [esphome#11623](https://github.com/esphome/esphome/pull/11623) ### Event See the [Event Entity Class: Memory Optimizations](https://developers.esphome.io/blog/2025/11/07/event-entity-class-memory-optimizations/) blog post for migration details. -- **Event types storage**: Changed from `FixedVector` to `FixedVector`. The `last_event_type` field is now private - use `get_last_event_type()` getter instead. [#11463](https://github.com/esphome/esphome/pull/11463), [#11767](https://github.com/esphome/esphome/pull/11767) +- **Event types storage**: Changed from `FixedVector` to `FixedVector`. The `last_event_type` field is now private - use `get_last_event_type()` getter instead. [esphome#11463](https://github.com/esphome/esphome/pull/11463), [esphome#11767](https://github.com/esphome/esphome/pull/11767) ### Network Components See the [Network get_use_address() Optimization](https://developers.esphome.io/blog/2025/11/20/network-use-address-optimization/) blog post for migration details. -- **WiFi scan results**: External components that access WiFi scan results after connection must call `wifi.request_wifi_scan_results()` in their `to_code()` function to prevent cleanup. [#11205](https://github.com/esphome/esphome/pull/11205) +- **WiFi scan results**: External components that access WiFi scan results after connection must call `wifi.request_wifi_scan_results()` in their `to_code()` function to prevent cleanup. [esphome#11205](https://github.com/esphome/esphome/pull/11205) -- **use_address**: Changed from `const std::string &` to `const char *` in WiFi, Ethernet, and OpenThread components. Remove `.c_str()` calls when using `get_use_address()`. [#11707](https://github.com/esphome/esphome/pull/11707) +- **use_address**: Changed from `const std::string &` to `const char *` in WiFi, Ethernet, and OpenThread components. Remove `.c_str()` calls when using `get_use_address()`. [esphome#11707](https://github.com/esphome/esphome/pull/11707) ### Other Components -- **Cover**: Removed methods deprecated in 2021.9. Update to current cover API. [#11391](https://github.com/esphome/esphome/pull/11391) +- **Cover**: Removed methods deprecated in 2021.9. Update to current cover API. [esphome#11391](https://github.com/esphome/esphome/pull/11391) -- **Nextion**: Removed methods deprecated in 1.20 (July 2021). Update to current nextion API. [#11393](https://github.com/esphome/esphome/pull/11393) +- **Nextion**: Removed methods deprecated in 1.20 (July 2021). Update to current nextion API. [esphome#11393](https://github.com/esphome/esphome/pull/11393) ## ESP32-Specific Changes -- **ESP-IDF advanced options**: New options to disable libc locks in IRAM and VFS features. External components using these features must call helper functions to register needs. [#10930](https://github.com/esphome/esphome/pull/10930), [#11441](https://github.com/esphome/esphome/pull/11441) +- **ESP-IDF advanced options**: New options to disable libc locks in IRAM and VFS features. External components using these features must call helper functions to register needs. [esphome#10930](https://github.com/esphome/esphome/pull/10930), [esphome#11441](https://github.com/esphome/esphome/pull/11441) ## Migration Resources For detailed migration guides and examples, see the [ESPHome developer documentation](https://developers.esphome.io/). The 2025.11 release blog posts include comprehensive migration examples for common use cases. - +{/* BREAKING_CHANGES_DEVELOPERS_END */} - +{/* markdownlint-disable MD013 */} ## Release 2025.11.1 - November 24 @@ -707,7 +707,7 @@ The 2025.11 release blog posts include comprehensive migration examples for comm - [remote_transmitter] Add non-blocking mode [esphome#11524](https://github.com/esphome/esphome/pull/11524) by [@swoboda1337](https://github.com/swoboda1337) (new-feature) (breaking-change) - [core] .local addresses are only resolvable if mDNS is enabled [esphome#11508](https://github.com/esphome/esphome/pull/11508) by [@Links2004](https://github.com/Links2004) (breaking-change) - [fan] Use std::vector for preset modes, preserve config order [esphome#11483](https://github.com/esphome/esphome/pull/11483) by [@bdraco](https://github.com/bdraco) (breaking-change) -- [climate] Replace std::vector with const char* for custom fan modes and presets [esphome#11621](https://github.com/esphome/esphome/pull/11621) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [climate] Replace `std::vector` with const char* for custom fan modes and presets [esphome#11621](https://github.com/esphome/esphome/pull/11621) by [@bdraco](https://github.com/bdraco) (breaking-change) - [psram] Require mode for S3 [esphome#11470](https://github.com/esphome/esphome/pull/11470) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) - [network] Store use_address in RODATA to save RAM [esphome#11707](https://github.com/esphome/esphome/pull/11707) by [@bdraco](https://github.com/bdraco) (breaking-change) - [fan] Remove duplicate preset mode storage to save RAM [esphome#11632](https://github.com/esphome/esphome/pull/11632) by [@bdraco](https://github.com/bdraco) (breaking-change) @@ -908,7 +908,7 @@ The 2025.11 release blog posts include comprehensive migration examples for comm - [http_request] Pass collect_headers by const reference instead of by value [esphome#11494](https://github.com/esphome/esphome/pull/11494) by [@bdraco](https://github.com/bdraco) - [remote_transmitter] Remove delays and use RMT instead [esphome#11505](https://github.com/esphome/esphome/pull/11505) by [@swoboda1337](https://github.com/swoboda1337) - [esp32] Add IDF 5.4.3 to platform list and switch to tar.xz [esphome#11528](https://github.com/esphome/esphome/pull/11528) by [@swoboda1337](https://github.com/swoboda1337) -- [sntp] Replace std::vector with std::array to save heap memory [esphome#11525](https://github.com/esphome/esphome/pull/11525) by [@bdraco](https://github.com/bdraco) +- [sntp] Replace `std::vector` with `std::array` to save heap memory [esphome#11525](https://github.com/esphome/esphome/pull/11525) by [@bdraco](https://github.com/bdraco) - [gpio] Skip set_inverted() call for default false value [esphome#11538](https://github.com/esphome/esphome/pull/11538) by [@bdraco](https://github.com/bdraco) - [core] Don't allow python 3.14 [esphome#11527](https://github.com/esphome/esphome/pull/11527) by [@swoboda1337](https://github.com/swoboda1337) - Optimize stateless lambdas to use function pointers [esphome#11551](https://github.com/esphome/esphome/pull/11551) by [@bdraco](https://github.com/bdraco) @@ -992,7 +992,7 @@ The 2025.11 release blog posts include comprehensive migration examples for comm - [scheduler] Refactor call() for improved code organization [esphome#11643](https://github.com/esphome/esphome/pull/11643) by [@bdraco](https://github.com/bdraco) - [core] Avoid redundant millis() calls in base_automation loop methods [esphome#11676](https://github.com/esphome/esphome/pull/11676) by [@bdraco](https://github.com/bdraco) - [esp32_ble] Wake main loop for GAP security events [esphome#11677](https://github.com/esphome/esphome/pull/11677) by [@bdraco](https://github.com/bdraco) -- [climate] Replace std::vector with const char* for custom fan modes and presets [esphome#11621](https://github.com/esphome/esphome/pull/11621) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [climate] Replace `std::vector` with const char* for custom fan modes and presets [esphome#11621](https://github.com/esphome/esphome/pull/11621) by [@bdraco](https://github.com/bdraco) (breaking-change) - [nrf52,debug] fix status of nRESET pin, add extra registry from UICR [esphome#11667](https://github.com/esphome/esphome/pull/11667) by [@tomaszduda23](https://github.com/tomaszduda23) - [template] alarm_control_panel more ESP_LOGCONFIG reductions [esphome#11691](https://github.com/esphome/esphome/pull/11691) by [@warthog618](https://github.com/warthog618) - [mqtt] Fix climate custom fan mode and preset compilation errors [esphome#11692](https://github.com/esphome/esphome/pull/11692) by [@bdraco](https://github.com/bdraco) @@ -1190,8 +1190,4 @@ The 2025.11 release blog posts include comprehensive migration examples for comm - - -## All Changelogs - -{{< changelogs >}} +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/2025.12.0.md b/src/content/docs/changelog/2025.12.0.mdx similarity index 90% rename from content/changelog/2025.12.0.md rename to src/content/docs/changelog/2025.12.0.mdx index 65b6263565..5d1b75d139 100644 --- a/content/changelog/2025.12.0.md +++ b/src/content/docs/changelog/2025.12.0.mdx @@ -1,33 +1,33 @@ --- description: "Changelog for ESPHome 2025.12.0." title: "ESPHome 2025.12.0 - December 2025" -params: - seo: - description: Changelog for ESPHome 2025.12.0. - image: /changelog/images/changelog-2025.12.0.png +pagefind: false +slug: "changelog/2025.12.0" --- -{{< imgtable >}} -"BM8563 RTC","components/time/bm8563","bm8563.svg","" -"CC1101","components/cc1101","cc1101.webp","" -"HC8","components/sensor/hc8","hc8.png","" -"HLW8032","components/sensor/hlw8032","hlw8032.png","" -"HUB75 LED Matrix","components/display/hub75","hub75.svg","" -"STTS22H","components/sensor/stts22h","stts22h.jpg","" -"ThermoPro BLE","components/sensor/thermopro_ble","thermopro_tp357.jpg","" -"USB CDC-ACM","components/usb_cdc_acm","usb.svg","dark-invert" -{{< /imgtable >}} +import ImgTable from "@components/ImgTable.astro"; + + ## Release Overview - +{/* RELEASE_OVERVIEW_START */} ESPHome 2025.12.0 introduces API action responses for bidirectional communication with Home Assistant, conditional package inclusion for dynamic configurations, and HUB75 LED matrix display support. This release delivers significant memory optimizations saving up to 10KB of IRAM on ESP32 devices, eliminates per-packet heap allocations in API connections and socket latency on ESP8266, and adds 8 new components including the CC1101 sub-GHz transceiver and USB CDC-ACM support. LVGL receives multiple usability improvements, and the WiFi component has been refactored for instant callback-based updates across all platforms. - +{/* RELEASE_OVERVIEW_END */} - +{/* FEATURE_HIGHLIGHTS_START */} ## API Action Responses -The [Native API](/components/api) now supports actions that send structured responses back to clients like Home Assistant, enabling true bidirectional communication where actions return success/error status and JSON data payloads ([#12136](https://github.com/esphome/esphome/pull/12136)). +The [Native API](/components/api) now supports actions that send structured responses back to clients like Home Assistant, enabling true bidirectional communication where actions return success/error status and JSON data payloads ([esphome#12136](https://github.com/esphome/esphome/pull/12136)). **Key Features:** @@ -54,13 +54,13 @@ api: ## Conditional Package Inclusion -The [packages](/components/packages) system now supports conditional inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables ([#11605](https://github.com/esphome/esphome/pull/11605)). +The [packages](/components/packages) system now supports conditional inclusion, a long-awaited feature that enables dynamic configuration based on substitution variables ([esphome#11605](https://github.com/esphome/esphome/pull/11605)). **Key Features:** - **Conditional imports** - Include packages based on boolean conditions using Jinja2 expressions - **Package merging after substitutions** - Packages are now merged after substitution resolution, enabling generated components to merge correctly with manually defined ones -- **LVGL extend support** - The `!extend` and `!remove` directives now work with LVGL-style configurations ([#11534](https://github.com/esphome/esphome/pull/11534)) +- **LVGL extend support** - The `!extend` and `!remove` directives now work with LVGL-style configurations ([esphome#11534](https://github.com/esphome/esphome/pull/11534)) ```yaml substitutions: @@ -75,7 +75,7 @@ This enables creating reusable configuration templates that adapt to different h ## HUB75 LED Matrix Display Support -The new [hub75](/components/display/hub75) component brings native support for HUB75 LED matrix panels, enabling large-format LED displays for information dashboards, signage, and creative projects ([#11153](https://github.com/esphome/esphome/pull/11153)). +The new [hub75](/components/display/hub75) component brings native support for HUB75 LED matrix panels, enabling large-format LED displays for information dashboards, signage, and creative projects ([esphome#11153](https://github.com/esphome/esphome/pull/11153)). **Key Features:** @@ -86,7 +86,7 @@ The new [hub75](/components/display/hub75) component brings native support for H ## CC1101 Sub-1GHz Transceiver -The new [cc1101](/components/cc1101) component adds support for the Texas Instruments CC1101 Sub-1GHz transceiver, enabling 433MHz remote control integration and other sub-GHz wireless applications ([#11849](https://github.com/esphome/esphome/pull/11849)). +The new [cc1101](/components/cc1101) component adds support for the Texas Instruments CC1101 Sub-1GHz transceiver, enabling 433MHz remote control integration and other sub-GHz wireless applications ([esphome#11849](https://github.com/esphome/esphome/pull/11849)). **Key Features:** @@ -97,7 +97,7 @@ The new [cc1101](/components/cc1101) component adds support for the Texas Instru ## USB CDC-ACM Support -The new [usb_cdc_acm](/components/usb_cdc_acm) component enables USB virtual serial port functionality on ESP32-S2 and ESP32-S3 devices ([#11687](https://github.com/esphome/esphome/pull/11687)). +The new [usb_cdc_acm](/components/usb_cdc_acm) component enables USB virtual serial port functionality on ESP32-S2 and ESP32-S3 devices ([esphome#11687](https://github.com/esphome/esphome/pull/11687)). **Key Features:** @@ -108,29 +108,29 @@ The new [usb_cdc_acm](/components/usb_cdc_acm) component enables USB virtual ser ## WiFi Info Callback Architecture -The WiFi component has been refactored from polling-based updates to event-driven callbacks, significantly improving responsiveness ([#10748](https://github.com/esphome/esphome/pull/10748)). +The WiFi component has been refactored from polling-based updates to event-driven callbacks, significantly improving responsiveness ([esphome#10748](https://github.com/esphome/esphome/pull/10748)). **Key Features:** - **Immediate updates** - WiFi info sensors now update instantly when state changes instead of waiting for poll intervals - **Reduced overhead** - Eliminates continuous polling in wifi_info sensors - **Platform consistency** - All platforms (ESP8266, ESP32, LibreTiny, Pico W) now use the same callback infrastructure -- **New power save mode sensor** - Reports current WiFi power save mode ([#11480](https://github.com/esphome/esphome/pull/11480)) -- **AP active condition** - New `wifi.ap_active` condition for automation triggers ([#11852](https://github.com/esphome/esphome/pull/11852)) +- **New power save mode sensor** - Reports current WiFi power save mode ([esphome#11480](https://github.com/esphome/esphome/pull/11480)) +- **AP active condition** - New `wifi.ap_active` condition for automation triggers ([esphome#11852](https://github.com/esphome/esphome/pull/11852)) ## Low Latency UART Processing -The UART component now supports a `wake_loop_on_rx` flag that wakes the main loop immediately when data arrives, enabling near-real-time serial processing ([#12172](https://github.com/esphome/esphome/pull/12172)). +The UART component now supports a `wake_loop_on_rx` flag that wakes the main loop immediately when data arrives, enabling near-real-time serial processing ([esphome#12172](https://github.com/esphome/esphome/pull/12172)). **Key Benefits:** -- **Z-Wave Proxy performance** - Reduces latency by ~10ms for WiFi-connected [ZWA-2 devices](https://www.home-assistant.io/blog/2025/10/13/portable-z-wave-with-wifi-and-poe/), building on the USB-connected Ethernet/PoE optimizations from 2025.11.0 ([#12135](https://github.com/esphome/esphome/pull/12135)) +- **Z-Wave Proxy performance** - Reduces latency by ~10ms for WiFi-connected [ZWA-2 devices](https://www.home-assistant.io/blog/2025/10/13/portable-z-wave-with-wifi-and-poe/), building on the USB-connected Ethernet/PoE optimizations from 2025.11.0 ([esphome#12135](https://github.com/esphome/esphome/pull/12135)) - **Real-time serial applications** - Any component requiring fast response to incoming serial data can now achieve sub-millisecond wake times by enabling this flag in their code - **Automatic infrastructure** - The socket wake infrastructure is automatically enabled when any UART requests RX wake ## ESP8266 Socket Latency Elimination -ESP8266 previously had higher network latency than ESP32 and LibreTiny because it used polling for socket data, sleeping up to 16ms before discovering incoming data. This affected every API request and Home Assistant command. The loop now wakes within microseconds of data arriving using ESP8266's `esp_schedule()` mechanism, bringing ESP8266 to near parity with ESP32 and LibreTiny. This is automatic for all ESP8266 devices with no configuration needed ([#12397](https://github.com/esphome/esphome/pull/12397)). +ESP8266 previously had higher network latency than ESP32 and LibreTiny because it used polling for socket data, sleeping up to 16ms before discovering incoming data. This affected every API request and Home Assistant command. The loop now wakes within microseconds of data arriving using ESP8266's `esp_schedule()` mechanism, bringing ESP8266 to near parity with ESP32 and LibreTiny. This is automatic for all ESP8266 devices with no configuration needed ([esphome#12397](https://github.com/esphome/esphome/pull/12397)). ## Memory and IRAM Optimizations @@ -138,19 +138,19 @@ This release includes substantial memory optimizations, particularly for ESP32 d **FreeRTOS and Ring Buffer Flash Placement:** -- **~8KB IRAM savings** - FreeRTOS functions moved to flash by default ([#12182](https://github.com/esphome/esphome/pull/12182)) -- **~1.5KB additional IRAM savings** - Ring buffer functions moved to flash ([#12184](https://github.com/esphome/esphome/pull/12184)) +- **~8KB IRAM savings** - FreeRTOS functions moved to flash by default ([esphome#12182](https://github.com/esphome/esphome/pull/12182)) +- **~1.5KB additional IRAM savings** - Ring buffer functions moved to flash ([esphome#12184](https://github.com/esphome/esphome/pull/12184)) - **Escape hatches** - Use `freertos_in_iram: true` or `ringbuf_in_iram: true` if issues occur These changes prepare ESPHome for ESP-IDF 6.0 where flash placement becomes the default. **BLE Client Memory Reduction:** -- **24-40 bytes per BLE client** - Replaced `std::string` with fixed `char[18]` for MAC address storage ([#12070](https://github.com/esphome/esphome/pull/12070)) +- **24-40 bytes per BLE client** - Replaced `std::string` with fixed `char[18]` for MAC address storage ([esphome#12070](https://github.com/esphome/esphome/pull/12070)) **Text Sensor Optimization:** -- **24-32 bytes per text sensor** - Eliminated duplicate string storage when no filters configured ([#12205](https://github.com/esphome/esphome/pull/12205)) +- **24-32 bytes per text sensor** - Eliminated duplicate string storage when no filters configured ([esphome#12205](https://github.com/esphome/esphome/pull/12205)) **Dashboard Import Optimization:** @@ -158,23 +158,23 @@ These changes prepare ESPHome for ESP-IDF 6.0 where flash placement becomes the - Package import URL is now stored as a pointer to `.rodata` instead of a heap-allocated `std::string`. - On ESP32, `.rodata` resides in flash, providing RAM savings. - On ESP8266, `.rodata` is in RAM, but this still avoids heap overhead. - - ([#11951](https://github.com/esphome/esphome/pull/11951)) + - ([esphome#11951](https://github.com/esphome/esphome/pull/11951)) **API Connection Optimizations:** The API connection layer received significant optimizations to reduce heap fragmentation and memory churn: -- **Eliminated per-packet heap allocation** - Previously every API packet received required a new heap allocation. The receive buffer is now reused across packets, with excess capacity released after initial sync completes. This reduces heap fragmentation on busy devices. For quiet devices, the initial sync memory spike is released rather than held for the lifetime of the connection. (Connections can last for months.) ([#12133](https://github.com/esphome/esphome/pull/12133)) -- **Zero-copy API commands** - Select and light effect commands now process strings directly from protobuf buffer without heap allocation ([#12329](https://github.com/esphome/esphome/pull/12329), [#12384](https://github.com/esphome/esphome/pull/12384)) -- **Flash storage for device info** - Device info strings stored in flash on ESP8266 ([#12173](https://github.com/esphome/esphome/pull/12173)) -- **Flash storage for state subscriptions** - Home Assistant state subscriptions stored in flash instead of heap ([#12008](https://github.com/esphome/esphome/pull/12008)) -- **Reduced service call storage** - Home Assistant service call strings use less heap ([#12151](https://github.com/esphome/esphome/pull/12151)) -- **APINoiseContext optimization** - Removed shared_ptr overhead ([#11981](https://github.com/esphome/esphome/pull/11981)) -- **Loop-based reboot timeout** - Avoids scheduler heap churn ([#12291](https://github.com/esphome/esphome/pull/12291)) +- **Eliminated per-packet heap allocation** - Previously every API packet received required a new heap allocation. The receive buffer is now reused across packets, with excess capacity released after initial sync completes. This reduces heap fragmentation on busy devices. For quiet devices, the initial sync memory spike is released rather than held for the lifetime of the connection. (Connections can last for months.) ([esphome#12133](https://github.com/esphome/esphome/pull/12133)) +- **Zero-copy API commands** - Select and light effect commands now process strings directly from protobuf buffer without heap allocation ([esphome#12329](https://github.com/esphome/esphome/pull/12329), [esphome#12384](https://github.com/esphome/esphome/pull/12384)) +- **Flash storage for device info** - Device info strings stored in flash on ESP8266 ([esphome#12173](https://github.com/esphome/esphome/pull/12173)) +- **Flash storage for state subscriptions** - Home Assistant state subscriptions stored in flash instead of heap ([esphome#12008](https://github.com/esphome/esphome/pull/12008)) +- **Reduced service call storage** - Home Assistant service call strings use less heap ([esphome#12151](https://github.com/esphome/esphome/pull/12151)) +- **APINoiseContext optimization** - Removed shared_ptr overhead ([esphome#11981](https://github.com/esphome/esphome/pull/11981)) +- **Loop-based reboot timeout** - Avoids scheduler heap churn ([esphome#12291](https://github.com/esphome/esphome/pull/12291)) **Sensor Timeout Filter Optimization:** -- **Eliminates scheduler heap churn** - Timeout filters now use a loop-based implementation instead of scheduler timeouts. This is particularly important for LD2410/LD2420/LD2450 users with many timeout filters, where the old implementation caused ~70 heap operations/second and constant scheduler pool exhaustion when someone was in range of the sensor ([#11922](https://github.com/esphome/esphome/pull/11922)) +- **Eliminates scheduler heap churn** - Timeout filters now use a loop-based implementation instead of scheduler timeouts. This is particularly important for LD2410/LD2420/LD2450 users with many timeout filters, where the old implementation caused ~70 heap operations/second and constant scheduler pool exhaustion when someone was in range of the sensor ([esphome#11922](https://github.com/esphome/esphome/pull/11922)) ## New Hardware Support @@ -182,120 +182,120 @@ This release adds support for 8 new components and numerous display models: **New Sensor Components:** -- [hlw8032](/components/sensor/hlw8032) - Single-phase power metering IC ([#7241](https://github.com/esphome/esphome/pull/7241)) -- [stts22h](/components/sensor/stts22h) - High-accuracy temperature sensor ([#11778](https://github.com/esphome/esphome/pull/11778)) -- [thermopro_ble](/components/sensor/thermopro_ble) - ThermoPro BLE temperature/humidity sensors ([#11835](https://github.com/esphome/esphome/pull/11835)) -- [hc8](/components/sensor/hc8) - HC8 CO2 sensor ([#11872](https://github.com/esphome/esphome/pull/11872)) +- [hlw8032](/components/sensor/hlw8032) - Single-phase power metering IC ([esphome#7241](https://github.com/esphome/esphome/pull/7241)) +- [stts22h](/components/sensor/stts22h) - High-accuracy temperature sensor ([esphome#11778](https://github.com/esphome/esphome/pull/11778)) +- [thermopro_ble](/components/sensor/thermopro_ble) - ThermoPro BLE temperature/humidity sensors ([esphome#11835](https://github.com/esphome/esphome/pull/11835)) +- [hc8](/components/sensor/hc8) - HC8 CO2 sensor ([esphome#11872](https://github.com/esphome/esphome/pull/11872)) **New Time Component:** -- [bm8563](/components/time/bm8563) - BM8563 I2C RTC ([#11616](https://github.com/esphome/esphome/pull/11616)) +- [bm8563](/components/time/bm8563) - BM8563 I2C RTC ([esphome#11616](https://github.com/esphome/esphome/pull/11616)) **New Display Models:** -- Waveshare 4.26" e-paper with SSD1677 controller ([#11887](https://github.com/esphome/esphome/pull/11887)) -- Waveshare S3 LCD 3.16" ([#12309](https://github.com/esphome/esphome/pull/12309)) -- Guition JC4827W543 480x272 display ([#12034](https://github.com/esphome/esphome/pull/12034)) -- Guition JC4880P443 480x800 MIPI DSI display ([#12068](https://github.com/esphome/esphome/pull/12068)) -- M5Stack Core2 display ([#12301](https://github.com/esphome/esphome/pull/12301)) +- Waveshare 4.26" e-paper with SSD1677 controller ([esphome#11887](https://github.com/esphome/esphome/pull/11887)) +- Waveshare S3 LCD 3.16" ([esphome#12309](https://github.com/esphome/esphome/pull/12309)) +- Guition JC4827W543 480x272 display ([esphome#12034](https://github.com/esphome/esphome/pull/12034)) +- Guition JC4880P443 480x800 MIPI DSI display ([esphome#12068](https://github.com/esphome/esphome/pull/12068)) +- M5Stack Core2 display ([esphome#12301](https://github.com/esphome/esphome/pull/12301)) **Platform Enhancements:** -- ESP32-C5 PSRAM support with quad mode and speeds up to 120MHz ([#12215](https://github.com/esphome/esphome/pull/12215)) -- Seeed XIAO ESP32-C6 board definition ([#12307](https://github.com/esphome/esphome/pull/12307)) -- Remote transmitter/receiver support for RP2040 ([#12048](https://github.com/esphome/esphome/pull/12048)) -- nRF52 DC-DC converter settings ([#11841](https://github.com/esphome/esphome/pull/11841)) +- ESP32-C5 PSRAM support with quad mode and speeds up to 120MHz ([esphome#12215](https://github.com/esphome/esphome/pull/12215)) +- Seeed XIAO ESP32-C6 board definition ([esphome#12307](https://github.com/esphome/esphome/pull/12307)) +- Remote transmitter/receiver support for RP2040 ([esphome#12048](https://github.com/esphome/esphome/pull/12048)) +- nRF52 DC-DC converter settings ([esphome#11841](https://github.com/esphome/esphome/pull/11841)) ## LVGL Improvements Multiple enhancements improve the LVGL experience: -- **Direct button text** - Set `text:` directly on buttons without nested label widgets ([#11964](https://github.com/esphome/esphome/pull/11964)) -- **Auto row/column padding** - `pad_all` now applies to inter-row/column spacing in flex layouts ([#11879](https://github.com/esphome/esphome/pull/11879)) -- **Display sync option** - New `update_when_display_idle` option syncs LVGL updates with display refresh ([#11896](https://github.com/esphome/esphome/pull/11896)) -- **Enhanced arc widget** - More arc parameters available in update actions ([#12066](https://github.com/esphome/esphome/pull/12066)) -- **Scroll properties** - Added missing scroll-related configuration options ([#11901](https://github.com/esphome/esphome/pull/11901)) +- **Direct button text** - Set `text:` directly on buttons without nested label widgets ([esphome#11964](https://github.com/esphome/esphome/pull/11964)) +- **Auto row/column padding** - `pad_all` now applies to inter-row/column spacing in flex layouts ([esphome#11879](https://github.com/esphome/esphome/pull/11879)) +- **Display sync option** - New `update_when_display_idle` option syncs LVGL updates with display refresh ([esphome#11896](https://github.com/esphome/esphome/pull/11896)) +- **Enhanced arc widget** - More arc parameters available in update actions ([esphome#12066](https://github.com/esphome/esphome/pull/12066)) +- **Scroll properties** - Added missing scroll-related configuration options ([esphome#11901](https://github.com/esphome/esphome/pull/11901)) ## Component Enhancements **Gree Climate:** -- New `turbo`, `light`, `health`, and `xfan` switches for supported models ([#12160](https://github.com/esphome/esphome/pull/12160)) +- New `turbo`, `light`, `health`, and `xfan` switches for supported models ([esphome#12160](https://github.com/esphome/esphome/pull/12160)) **Climate IR:** -- Optional humidity sensor support ([#9805](https://github.com/esphome/esphome/pull/9805)) +- Optional humidity sensor support ([esphome#9805](https://github.com/esphome/esphome/pull/9805)) **SPS30 Particulate Sensor:** -- Idle mode functionality to extend sensor life and reduce power consumption ([#12255](https://github.com/esphome/esphome/pull/12255)) +- Idle mode functionality to extend sensor life and reduce power consumption ([esphome#12255](https://github.com/esphome/esphome/pull/12255)) **PCA9685 PWM:** -- Phase balancer option to fix LED flickering during animations ([#9792](https://github.com/esphome/esphome/pull/9792)) +- Phase balancer option to fix LED flickering during animations ([esphome#9792](https://github.com/esphome/esphome/pull/9792)) **Prometheus:** -- Event and text component metrics support ([#10240](https://github.com/esphome/esphome/pull/10240)) +- Event and text component metrics support ([esphome#10240](https://github.com/esphome/esphome/pull/10240)) **MCP3204 ADC:** -- Differential mode measurement support ([#7436](https://github.com/esphome/esphome/pull/7436)) +- Differential mode measurement support ([esphome#7436](https://github.com/esphome/esphome/pull/7436)) ## Developer Features **IDF Component Improvements:** -- Shorthand syntax for ESP-IDF components like `espressif/esp_hosted^2.6.6` ([#12127](https://github.com/esphome/esphome/pull/12127)) +- Shorthand syntax for ESP-IDF components like `espressif/esp_hosted^2.6.6` ([esphome#12127](https://github.com/esphome/esphome/pull/12127)) - YAML can now override component versions defined in code **API Enhancements:** -- `state_subscription_only` flag for reliable API connection detection without logger false positives ([#11906](https://github.com/esphome/esphome/pull/11906)) -- New `measurement_angle` state class for angle sensors ([#12085](https://github.com/esphome/esphome/pull/12085)) - +- `state_subscription_only` flag for reliable API connection detection without logger false positives ([esphome#11906](https://github.com/esphome/esphome/pull/11906)) +- New `measurement_angle` state class for angle sensors ([esphome#12085](https://github.com/esphome/esphome/pull/12085)) +{/* FEATURE_HIGHLIGHTS_END */} ## Breaking Changes - +{/* BREAKING_CHANGES_USERS_START */} ### Component Changes -- **Micronova**: Multiple configuration changes ([#12226](https://github.com/esphome/esphome/pull/12226), [#12318](https://github.com/esphome/esphome/pull/12318), [#12371](https://github.com/esphome/esphome/pull/12371)): +- **Micronova**: Multiple configuration changes ([esphome#12226](https://github.com/esphome/esphome/pull/12226), [esphome#12318](https://github.com/esphome/esphome/pull/12318), [esphome#12371](https://github.com/esphome/esphome/pull/12371)): - `update_interval` moved from hub to individual entities - remove from `micronova:` section and add to each sensor/text_sensor - `memory_location` now restricted to read locations (0x00-0x79) - subtract 0x80 from values above 0x79 - `memory_write_location` removed from number entities (now calculated automatically) - Custom button/sensor entities now require explicit `memory_location` and `address` configuration -- **Prometheus**: Light color metrics (`light_color_*`) are now only generated if the light component supports those color modes. This reduces memory usage on ESP8266 but may affect monitoring setups that expected all metrics regardless of light capabilities. [#9530](https://github.com/esphome/esphome/pull/9530) +- **Prometheus**: Light color metrics (`light_color_*`) are now only generated if the light component supports those color modes. This reduces memory usage on ESP8266 but may affect monitoring setups that expected all metrics regardless of light capabilities. [esphome#9530](https://github.com/esphome/esphome/pull/9530) -- **Text Sensor**: The public `raw_state` member has been removed. If you access `.raw_state` directly in a lambda, update to use `.get_raw_state()` instead. [#12205](https://github.com/esphome/esphome/pull/12205) +- **Text Sensor**: The public `raw_state` member has been removed. If you access `.raw_state` directly in a lambda, update to use `.get_raw_state()` instead. [esphome#12205](https://github.com/esphome/esphome/pull/12205) ### Platform Changes -- **I2C on ESP32-C5/C6/P4**: Fixed I2C port logic for chips with Low Power (LP) I2C ports. Users with multiple I2C buses on these chips may need to verify their port assignments. [#12063](https://github.com/esphome/esphome/pull/12063) +- **I2C on ESP32-C5/C6/P4**: Fixed I2C port logic for chips with Low Power (LP) I2C ports. Users with multiple I2C buses on these chips may need to verify their port assignments. [esphome#12063](https://github.com/esphome/esphome/pull/12063) ### Behavior Changes -- **WiFi Info**: Text sensors now use callback-based updates instead of polling. Updates happen immediately when WiFi state changes rather than on fixed intervals. This improves responsiveness but may change timing behavior if your automations depended on the polling interval. [#10748](https://github.com/esphome/esphome/pull/10748) - +- **WiFi Info**: Text sensors now use callback-based updates instead of polling. Updates happen immediately when WiFi state changes rather than on fixed intervals. This improves responsiveness but may change timing behavior if your automations depended on the polling interval. [esphome#10748](https://github.com/esphome/esphome/pull/10748) +{/* BREAKING_CHANGES_USERS_END */} ### Breaking Changes for Developers - -- **Component::mark_failed() and status_set_error()**: The `const char*` overloads are deprecated and will be removed in 2026.6.0. Use `LOG_STR()` instead: `this->mark_failed(LOG_STR("Error message"))`. This fixes dangling pointer bugs when passing temporary strings. [#12021](https://github.com/esphome/esphome/pull/12021) +{/* BREAKING_CHANGES_DEVELOPERS_START */} +- **Component::mark_failed() and status_set_error()**: The `const char*` overloads are deprecated and will be removed in 2026.6.0. Use `LOG_STR()` instead: `this->mark_failed(LOG_STR("Error message"))`. This fixes dangling pointer bugs when passing temporary strings. [esphome#12021](https://github.com/esphome/esphome/pull/12021) -- **BLEClientBase::address_str()**: Return type changed from `const std::string&` to `const char*`. Remove `.c_str()` calls: `client->address_str()` instead of `client->address_str().c_str()`. [#12070](https://github.com/esphome/esphome/pull/12070) +- **BLEClientBase::address_str()**: Return type changed from `const std::string&` to `const char*`. Remove `.c_str()` calls: `client->address_str()` instead of `client->address_str().c_str()`. [esphome#12070](https://github.com/esphome/esphome/pull/12070) -- **TextSensor::raw_state**: Changed from public member to protected `raw_state_`. Use `get_raw_state()` method instead of direct member access. [#12205](https://github.com/esphome/esphome/pull/12205) +- **TextSensor::raw_state**: Changed from public member to protected `raw_state_`. Use `get_raw_state()` method instead of direct member access. [esphome#12205](https://github.com/esphome/esphome/pull/12205) -- **WiFi component callbacks**: New callback architecture with `wifi_connect_state_callback_`, `ip_state_callback_`, and `wifi_scan_state_callback_`. Automation triggers moved to `automation.h`. [#10748](https://github.com/esphome/esphome/pull/10748) +- **WiFi component callbacks**: New callback architecture with `wifi_connect_state_callback_`, `ip_state_callback_`, and `wifi_scan_state_callback_`. Automation triggers moved to `automation.h`. [esphome#10748](https://github.com/esphome/esphome/pull/10748) -- **Micronova**: `MicroNovaFunctions` enum removed - value interpretation now determined at compile time. The `get_set_fan_speed_offset()` public method removed from sensor entity. [#12363](https://github.com/esphome/esphome/pull/12363) +- **Micronova**: `MicroNovaFunctions` enum removed - value interpretation now determined at compile time. The `get_set_fan_speed_offset()` public method removed from sensor entity. [esphome#12363](https://github.com/esphome/esphome/pull/12363) For detailed migration guides and API documentation, see the [ESPHome Developers Documentation](https://developers.esphome.io/). - +{/* BREAKING_CHANGES_DEVELOPERS_END */} - +{/* markdownlint-disable MD013 */} ## Release 2025.12.1 - December 19 @@ -454,7 +454,7 @@ For detailed migration guides and API documentation, see the [ESPHome Developers - [core] Deprecate unsafe const char`*` APIs in mark_failed() and status_set_error(), add LogString`*` overloads [esphome#12021](https://github.com/esphome/esphome/pull/12021) by [@bdraco](https://github.com/bdraco) (breaking-change) - [wifi_info] Use callbacks instead of polling [esphome#10748](https://github.com/esphome/esphome/pull/10748) by [@kbx81](https://github.com/kbx81) (breaking-change) -- [esp32_ble_client] Replace std::string with char[18] for BLE address storage [esphome#12070](https://github.com/esphome/esphome/pull/12070) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32_ble_client] Replace `std::string` with char[18] for BLE address storage [esphome#12070](https://github.com/esphome/esphome/pull/12070) by [@bdraco](https://github.com/bdraco) (breaking-change) - [prometheus] Avoid generating unused light color metrics to reduce memory usage on ESP8266 [esphome#9530](https://github.com/esphome/esphome/pull/9530) by [@pgolawsk](https://github.com/pgolawsk) (breaking-change) - [text_sensor] Avoid duplicate string storage when no filters configured [esphome#12205](https://github.com/esphome/esphome/pull/12205) by [@bdraco](https://github.com/bdraco) (breaking-change) - [micronova] Set update_interval on entities instead on hub [esphome#12226](https://github.com/esphome/esphome/pull/12226) by [@edenhaus](https://github.com/edenhaus) (breaking-change) @@ -537,9 +537,9 @@ For detailed migration guides and API documentation, see the [ESPHome Developers - [ltr390] Simplify mode tracking with bitmask instead of vector/function [esphome#12093](https://github.com/esphome/esphome/pull/12093) by [@bdraco](https://github.com/bdraco) - [sht4x] Read and store a serial number of SHT4x sensors [esphome#12089](https://github.com/esphome/esphome/pull/12089) by [@namezys](https://github.com/namezys) - Add developer-breaking-change labelling [esphome#12095](https://github.com/esphome/esphome/pull/12095) by [@jesserockz](https://github.com/jesserockz) -- [core] Replace seq<>/gens<> with std::index_sequence for code clarity [esphome#11921](https://github.com/esphome/esphome/pull/11921) by [@bdraco](https://github.com/bdraco) +- [core] Replace `seq<>`/`gens<>` with std::index_sequence for code clarity [esphome#11921](https://github.com/esphome/esphome/pull/11921) by [@bdraco](https://github.com/bdraco) - [core] Deduplicate identical stateless lambdas to reduce flash usage [esphome#11918](https://github.com/esphome/esphome/pull/11918) by [@bdraco](https://github.com/bdraco) -- [esp32_ble_client] Replace std::string with char[18] for BLE address storage [esphome#12070](https://github.com/esphome/esphome/pull/12070) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32_ble_client] Replace `std::string` with char[18] for BLE address storage [esphome#12070](https://github.com/esphome/esphome/pull/12070) by [@bdraco](https://github.com/bdraco) (breaking-change) - [lvgl] Fix lambda return types for coord and font validators [esphome#12113](https://github.com/esphome/esphome/pull/12113) by [@bdraco](https://github.com/bdraco) - [lvgl] Add missing obj scroll properties [esphome#11901](https://github.com/esphome/esphome/pull/11901) by [@clydebarrow](https://github.com/clydebarrow) (new-feature) - [lvgl] Automatically pad rows and columns [esphome#11879](https://github.com/esphome/esphome/pull/11879) by [@clydebarrow](https://github.com/clydebarrow) (new-feature) @@ -660,7 +660,7 @@ For detailed migration guides and API documentation, see the [ESPHome Developers - [sx1509] Change setup priority from HARDWARE to IO [esphome#12373](https://github.com/esphome/esphome/pull/12373) by [@mirko](https://github.com/mirko) - [psram] Fix boot failure with 120MHz Octal flash [esphome#12377](https://github.com/esphome/esphome/pull/12377) by [@clydebarrow](https://github.com/clydebarrow) - [pio] Rationalise library definitions in platformio.ini [esphome#12374](https://github.com/esphome/esphome/pull/12374) by [@clydebarrow](https://github.com/clydebarrow) -- [scheduler] Avoid std::string allocation in RetryArgs [esphome#12311](https://github.com/esphome/esphome/pull/12311) by [@bdraco](https://github.com/bdraco) +- [scheduler] Avoid `std::string` allocation in RetryArgs [esphome#12311](https://github.com/esphome/esphome/pull/12311) by [@bdraco](https://github.com/bdraco) - [mdns] Reduce RAM usage by eliminating MAC address heap allocation [esphome#12073](https://github.com/esphome/esphome/pull/12073) by [@bdraco](https://github.com/bdraco) - [core] Add PR template instruction to AI instructions [esphome#12375](https://github.com/esphome/esphome/pull/12375) by [@swoboda1337](https://github.com/swoboda1337) - [api] Store device info strings in flash on ESP8266 [esphome#12173](https://github.com/esphome/esphome/pull/12173) by [@bdraco](https://github.com/bdraco) @@ -735,8 +735,4 @@ For detailed migration guides and API documentation, see the [ESPHome Developers - - -## All Changelogs - -{{< changelogs >}} +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.2.0.mdx b/src/content/docs/changelog/2025.2.0.mdx new file mode 100644 index 0000000000..b80c5ec083 --- /dev/null +++ b/src/content/docs/changelog/2025.2.0.mdx @@ -0,0 +1,394 @@ +--- +description: "Changelog for ESPHome 2025.2.0." +title: "ESPHome 2025.2.0 - 19th February 2025" +pagefind: false +slug: "changelog/2025.2.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +**🎉 Happy New Year! 🎉** + +We're kicking off 2025 with a number of updates, several of which are focused on removing old code. Unfortunately, +this means we have a few breaking changes, but this work helps keep ESPHome more maintainable in the long-run. + +Join us below for the ESPHome New Year Release Party. + +{/* markdownlint-disable-next-line MD033 */} + + +## Removal of "old style" Platform Configuration + +[Three years ago](https://github.com/esphome/esphome/pull/2303), we added support for using +[ESP-IDF](https://github.com/espressif/esp-idf/) directly (as an alternative to Arduino). This brought about a +number of benefits and a new syntax was introduced to facilitate greater flexibility when specifying and configuring +your microcontroller/board. + +In this release, we've removed support for the "old style" of configuring your microcontroller/board. If you're still +using it, you'll need to update your configurations to use the new style. A brief explanation is +[in this pull request](https://github.com/esphome/esphome/pull/8118), but for more detail, please see the +[documentation for your microcontroller platform](/components#devices). + +## Removal of Custom Components + +Custom components were deprecated over a year ago and, as promised, support for them was removed in this release. We +encourage all developers to migrate their custom components to [External Components](/components/external_components/). +Please see [a note about custom components](https://developers.esphome.io/blog/2025/02/19/about-the-removal-of-support-for-custom-components/) +for a detailed explanation and next steps. + +## Removal of `armv7` support + +ESPHome no longer supports the 32-bit `armv7` architecture. This is due to both waning support as it relates to +tooling and performance reasons. We strongly recommend moving to a more modern architecture, especially if you're using +the ESPHome Device Builder to build/compile firmware for your devices. + +- The toolchains required for compiling ESPHome are dropping support for armv7, so if the toolchain is not available, + ESPHome can't do the compile. + +- Building on armv7 is very slow and is likely to crash due to lack of RAM, which is not a good user experience. +- ESPHome can be installed anywhere you can run Docker or Python pip, which will provide a better experience with + much faster compiling. + +## `esp32_rmt` Updates + +Components which utilize the RMT hardware found on the ESP32 and its variants have been updated to use the new +interface available in [ESP-IDF](https://github.com/espressif/esp-idf/) versions 5 and above. This eliminates +related warnings seen in the compiler logs while building ESPHome configurations. In most cases, you won't notice any +difference, but this change could result in some issues, particularly for +[External Components](/components/external_components/). You may need to make a minor change or two in your device +configurations; the configuration validator will tell you if this is necessary as you update your devices. + +## Audio Components + +This release includes support for a number of new audio-related components/hardware. These are primarily aimed at +supporting hardware found in Espressif's S3-Box series of products, eliminating the need to use the +[ESP-ADF](https://github.com/espressif/esp-adf/) and thus offering better integration with ESPHome in general. If +you're using an S3-Box (or one of the variants), we strongly recommend updating your device either OTA or by using our +[Projects](/projects/) web installer. If you have "taken control" of or "adopted" your S3-Box, we strongly recommend +updating your device's local configuration based on our updated configuration files found at +[https://github.com/esphome/wake-word-voice-assistants](https://github.com/esphome/wake-word-voice-assistants). + +In addition, new `speaker` components have been introduced to provide more advanced functionality when using +[Voice Assistant](/components/voice_assistant/). These components extend our work to help you create the ultimate +personal voice assistant hardware. + +The new [speaker media player](/components/media_player/speaker/) component adds several features +for building a well-rounded audio device. It supports playing two different streams of audio: one for announcements +and another for music. + +The new [mixer speaker](/components/speaker/mixer/) component lets you combine the two streams. The mixer +even supports audio ducking, so you can lower the volume of the music while your announcement plays! + +## Image Components + +This release adds support for alpha-blending images when using LVGL. To facilitate this, the `use_transparency` +configuration variable in [Image](/components/image/) and related components was renamed to `transparency` +and changed from a boolean to an enum; in addition, the `type` configuration variable is now mandatory. See the +[Image](/components/image/) documentation for more detail. + +The default presentation for binary images has changed in part due to the new transparency support. This may result +in images appearing to have inverted colors for example on e-ink displays. There is a new configuration variable, +`invert_alpha`, which can be used to switch black and white pixels if necessary to restore the previous behaviour. + +Finally, the [Online Image](/components/online_image/) was updated to add support for both BMP and JPEG image formats. + +## ILI9XXX Display Component + +There are two changes to the [Ili9Xxx](/components/display/ili9xxx/) component. Previously the component +automatically loaded the `psram` component - this has been removed, and you must now explicitly include the +`psram` component in your configuration if your display requires it. The bit-depth defaults to 16 bit as before, but +there is no attempt to automatically fallback to 8 bit if insufficient memory is available. You must now explicitly +select 8-bit mode with the `color_palette` configuration variable if required. + +The symptoms caused by these changes are likely to be a blank screen or a screen that is not displaying correctly. Check +the runtime logs for any errors or warnings that may indicate the cause of the issue, specifically memory allocation +failures. + +{/* markdownlint-disable MD013 */} + +## Release 2025.2.1 - February 26 + +- Bump aioesphomeapi to 29.1.1 [esphome#8274](https://github.com/esphome/esphome/pull/8274) by [@bdraco](https://github.com/bdraco) +- Fix BLE max notifications with ESP-IDF 5.x [esphome#8301](https://github.com/esphome/esphome/pull/8301) by [@bdraco](https://github.com/bdraco) +- Update webserver local assets to 20250224-195901 [esphome#8312](https://github.com/esphome/esphome/pull/8312) by [@esphomebot](https://github.com/esphomebot) +- Fix bluetooth race when disconnect called while still connecting [esphome#8297](https://github.com/esphome/esphome/pull/8297) by [@bdraco](https://github.com/bdraco) +- [esp32_touch] Fix variants, add tests for variants [esphome#8320](https://github.com/esphome/esphome/pull/8320) by [@kbx81](https://github.com/kbx81) + +## Release 2025.2.2 - March 3 + +- Fix `end_of_scan_` not being called while disconnecting [esphome#8328](https://github.com/esphome/esphome/pull/8328) by [@bdraco](https://github.com/bdraco) +- [audio] Determine http timeout based on duration since last successful read [esphome#8341](https://github.com/esphome/esphome/pull/8341) by [@kahrendt](https://github.com/kahrendt) +- Bump aioesphomeapi to 29.3.2 [esphome#8353](https://github.com/esphome/esphome/pull/8353) by [@bdraco](https://github.com/bdraco) +- [ltr390] Move calculation to allow dynamic setting of gain and resolution [esphome#8343](https://github.com/esphome/esphome/pull/8343) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- [es7210] add support for es7210 ADC [esphome#8007](https://github.com/esphome/esphome/pull/8007) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [audio_adc] Add new `audio_adc` component [esphome#8094](https://github.com/esphome/esphome/pull/8094) by [@kbx81](https://github.com/kbx81) (new-integration) +- [es8156] Add support for ES8156 audio DAC [esphome#8085](https://github.com/esphome/esphome/pull/8085) by [@kbx81](https://github.com/kbx81) (new-integration) +- [es7243e] Add support for ES7243E audio ADC [esphome#8098](https://github.com/esphome/esphome/pull/8098) by [@kbx81](https://github.com/kbx81) (new-integration) +- [esp32_ble_server] Create custom services, characteristics and descriptors [esphome#7009](https://github.com/esphome/esphome/pull/7009) by [@Rapsssito](https://github.com/Rapsssito) (new-integration) +- [resampler] Media Player Components PR7 [esphome#8169](https://github.com/esphome/esphome/pull/8169) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [mixer] Media Player Components PR8 [esphome#8170](https://github.com/esphome/esphome/pull/8170) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [xxtea] Extract encryption functions to separate component [esphome#8183](https://github.com/esphome/esphome/pull/8183) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [logger] Add runtime level select [esphome#8222](https://github.com/esphome/esphome/pull/8222) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [speaker] Media Player Components PR9 [esphome#8171](https://github.com/esphome/esphome/pull/8171) by [@kahrendt](https://github.com/kahrendt) (new-integration) + +### New Platforms + +- [uptime] Add text_sensor [esphome#8028](https://github.com/esphome/esphome/pull/8028) by [@clydebarrow](https://github.com/clydebarrow) (new-platform) +- Add: Human Presence and Target Count to the Seeed Studio MR60BHA2 [esphome#8010](https://github.com/esphome/esphome/pull/8010) by [@limengdu](https://github.com/limengdu) (new-platform) +- [sdl] Implement binary sensors from keystrokes [esphome#8207](https://github.com/esphome/esphome/pull/8207) by [@bdm310](https://github.com/bdm310) (new-platform) + +### Breaking Changes + +- [esp32_rmt] Updates for IDF 5+ [esphome#7770](https://github.com/esphome/esphome/pull/7770) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [lvgl] remove default state [esphome#8038](https://github.com/esphome/esphome/pull/8038) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [nextion] Brightness control tweaks [esphome#8027](https://github.com/esphome/esphome/pull/8027) by [@kbx81](https://github.com/kbx81) (breaking-change) +- [image] Transparency changes; code refactor [esphome#7908](https://github.com/esphome/esphome/pull/7908) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [ili9xxx] psram and 8 bit changes [esphome#8084](https://github.com/esphome/esphome/pull/8084) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [core] Remove old style platform configuration [esphome#8118](https://github.com/esphome/esphome/pull/8118) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [custom] Remove platforms [esphome#8119](https://github.com/esphome/esphome/pull/8119) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Remove arm/v7 container image support [esphome#8194](https://github.com/esphome/esphome/pull/8194) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [esp32_rmt] Set pull-up and open-drain modes based on pin schema [esphome#8178](https://github.com/esphome/esphome/pull/8178) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [scd30] Increase minimal CONF_UPDATE_INTERVAL from 1 to 2 seconds [esphome#8256](https://github.com/esphome/esphome/pull/8256) by [@DjordjeMandic](https://github.com/DjordjeMandic) (breaking-change) + +### Beta Changes + +- [online_image]Fix reset if buffer not allocated [esphome#8236](https://github.com/esphome/esphome/pull/8236) by [@guillempages](https://github.com/guillempages) +- [core] Ignore dot-prefixed config entries when looking for target platform [esphome#8240](https://github.com/esphome/esphome/pull/8240) by [@jesserockz](https://github.com/jesserockz) +- Bump zeroconf to 0.144.1 [esphome#8238](https://github.com/esphome/esphome/pull/8238) by [@bdraco](https://github.com/bdraco) +- [core] Fix `config_dir` for dashboard [esphome#8242](https://github.com/esphome/esphome/pull/8242) by [@jesserockz](https://github.com/jesserockz) +- [cse7766] Remove `stream` dependency [esphome#7720](https://github.com/esphome/esphome/pull/7720) by [@gabest11](https://github.com/gabest11) +- [graph] Remove `stream` dependency [esphome#8243](https://github.com/esphome/esphome/pull/8243) by [@kbx81](https://github.com/kbx81) +- [modbus_controller] Remove `stream` dependency [esphome#8244](https://github.com/esphome/esphome/pull/8244) by [@kbx81](https://github.com/kbx81) +- [logger] Fix bug causing global log level to be overwritten [esphome#8248](https://github.com/esphome/esphome/pull/8248) by [@swoboda1337](https://github.com/swoboda1337) +- Add support for the DAC on the S2 [esphome#8030](https://github.com/esphome/esphome/pull/8030) by [@maraid](https://github.com/maraid) +- Fix crash when storage file doesnt exist yet [esphome#8249](https://github.com/esphome/esphome/pull/8249) by [@jesserockz](https://github.com/jesserockz) +- don't crash on null pages [esphome#8254](https://github.com/esphome/esphome/pull/8254) by [@ssieb](https://github.com/ssieb) +- [scd30] Increase minimal CONF_UPDATE_INTERVAL from 1 to 2 seconds [esphome#8256](https://github.com/esphome/esphome/pull/8256) by [@DjordjeMandic](https://github.com/DjordjeMandic) (breaking-change) +- Bump zeroconf to 0.144.3 [esphome#8253](https://github.com/esphome/esphome/pull/8253) by [@bdraco](https://github.com/bdraco) +- DHT platform now supports modules with inbuilt external resistor [esphome#8257](https://github.com/esphome/esphome/pull/8257) by [@deCodeIt](https://github.com/deCodeIt) +- Replace glyphsets with esphome_glyphsets [esphome#8261](https://github.com/esphome/esphome/pull/8261) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi to 29.1.0 [esphome#8105](https://github.com/esphome/esphome/pull/8105) by [@bdraco](https://github.com/bdraco) +- Bump openssh-client to 1:9.2p1-2+deb12u4 to fix docker builds [esphome#8269](https://github.com/esphome/esphome/pull/8269) by [@bdraco](https://github.com/bdraco) +- Increase default repeat delay for Toto remote transmitter protocol [esphome#8265](https://github.com/esphome/esphome/pull/8265) by [@G-Two](https://github.com/G-Two) +- Bump zeroconf to 0.145.1 [esphome#8267](https://github.com/esphome/esphome/pull/8267) by [@bdraco](https://github.com/bdraco) + +### All changes + +- [rotary_encoder] Fix volatile increment/decrement deprecation warnings [esphome#7958](https://github.com/esphome/esphome/pull/7958) by [@edwardtfn](https://github.com/edwardtfn) +- [pulse_counter] Fix volatile increment/decrement deprecation warnings [esphome#7954](https://github.com/esphome/esphome/pull/7954) by [@edwardtfn](https://github.com/edwardtfn) +- [nextion] Publishes `is_connected()` [esphome#7961](https://github.com/esphome/esphome/pull/7961) by [@edwardtfn](https://github.com/edwardtfn) +- Fix adc channel for ESP32-H2 [esphome#7964](https://github.com/esphome/esphome/pull/7964) by [@luar123](https://github.com/luar123) +- [nextion] Remove `_internal` from non-protected functions [esphome#7656](https://github.com/esphome/esphome/pull/7656) by [@edwardtfn](https://github.com/edwardtfn) +- [opentherm] Message ordering, on-the-fly message editing, code improvements [esphome#7903](https://github.com/esphome/esphome/pull/7903) by [@olegtarasov](https://github.com/olegtarasov) +- [debug] Detailed reset reason [esphome#7729](https://github.com/esphome/esphome/pull/7729) by [@edwardtfn](https://github.com/edwardtfn) +- [uart] Use `SOC_UART_NUM` as number of uarts instead of `UART_NUM_MAX` [esphome#7967](https://github.com/esphome/esphome/pull/7967) by [@jesserockz](https://github.com/jesserockz) +- [ci] Dont run main ci suite on docker files [esphome#7966](https://github.com/esphome/esphome/pull/7966) by [@jesserockz](https://github.com/jesserockz) +- Bump docker/setup-buildx-action from 3.7.1 to 3.8.0 in the docker-actions group [esphome#7969](https://github.com/esphome/esphome/pull/7969) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [core] Add c6 and h2 to split default [esphome#7974](https://github.com/esphome/esphome/pull/7974) by [@swoboda1337](https://github.com/swoboda1337) +- [midea] Add Fahrenheit support to `midea_ac.follow_me` action [esphome#7762](https://github.com/esphome/esphome/pull/7762) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- [esp32_rmt] Updates for IDF 5+ [esphome#7770](https://github.com/esphome/esphome/pull/7770) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [qspi_dbi] Bugfix and new features [esphome#7979](https://github.com/esphome/esphome/pull/7979) by [@clydebarrow](https://github.com/clydebarrow) +- [helpers] Provide calls to get free heap and largest available block. [esphome#7978](https://github.com/esphome/esphome/pull/7978) by [@clydebarrow](https://github.com/clydebarrow) +- Bump actions/upload-artifact from 4.4.3 to 4.5.0 [esphome#7981](https://github.com/esphome/esphome/pull/7981) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [esp32_ble] do not skip events if queue is blocked [esphome#7960](https://github.com/esphome/esphome/pull/7960) by [@tomaszduda23](https://github.com/tomaszduda23) +- [ble_client, bluetooth_proxy, esp32_ble_client, esp32_ble_tracker] fix ble proxy stop working [esphome#7901](https://github.com/esphome/esphome/pull/7901) by [@tomaszduda23](https://github.com/tomaszduda23) +- [esp32_rmt] IDF 5+ update fixes [esphome#8002](https://github.com/esphome/esphome/pull/8002) by [@swoboda1337](https://github.com/swoboda1337) +- Initialize esp32_rmt_led_strip buffer [esphome#8036](https://github.com/esphome/esphome/pull/8036) by [@pzich](https://github.com/pzich) +- [addressable_light] Remove rmt channel from idf tests [esphome#7987](https://github.com/esphome/esphome/pull/7987) by [@clydebarrow](https://github.com/clydebarrow) +- Remove rmt channel from idf tests [esphome#8054](https://github.com/esphome/esphome/pull/8054) by [@clydebarrow](https://github.com/clydebarrow) +- Fixed comment typo in light_color_values.h [esphome#8050](https://github.com/esphome/esphome/pull/8050) by [@samunemeth](https://github.com/samunemeth) +- Fix braceless else statements [esphome#7799](https://github.com/esphome/esphome/pull/7799) by [@pzich](https://github.com/pzich) +- Enable udp to work (on ipv4) when ipv6 is enabled [esphome#8060](https://github.com/esphome/esphome/pull/8060) by [@HeMan](https://github.com/HeMan) +- Update sprinkler.cpp [esphome#7996](https://github.com/esphome/esphome/pull/7996) by [@jotaj91](https://github.com/jotaj91) +- [lvgl] remove default state [esphome#8038](https://github.com/esphome/esphome/pull/8038) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [lvgl] fix bg_image_src [esphome#8005](https://github.com/esphome/esphome/pull/8005) by [@clydebarrow](https://github.com/clydebarrow) +- [lgvl] disp_bg_image and disp_bg_opa changes [esphome#8025](https://github.com/esphome/esphome/pull/8025) by [@clydebarrow](https://github.com/clydebarrow) +- [spi_led_strip] Fix priority [esphome#8021](https://github.com/esphome/esphome/pull/8021) by [@clydebarrow](https://github.com/clydebarrow) +- [config] Early check for required version [esphome#8000](https://github.com/esphome/esphome/pull/8000) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Implement `lvgl.page.is_showing:` condition [esphome#8055](https://github.com/esphome/esphome/pull/8055) by [@clydebarrow](https://github.com/clydebarrow) +- [display] auto_clear_enabled defaults [esphome#7986](https://github.com/esphome/esphome/pull/7986) by [@clydebarrow](https://github.com/clydebarrow) +- Convert IPAddress to use Pythonmodule ipaddress [esphome#8072](https://github.com/esphome/esphome/pull/8072) by [@HeMan](https://github.com/HeMan) +- Add log level env var [esphome#7604](https://github.com/esphome/esphome/pull/7604) by [@briancw](https://github.com/briancw) +- [spi] relay on KEY_TARGET_PLATFORM as the other platforms does [esphome#8066](https://github.com/esphome/esphome/pull/8066) by [@tomaszduda23](https://github.com/tomaszduda23) +- Bump actions/upload-artifact from 4.5.0 to 4.6.0 [esphome#8058](https://github.com/esphome/esphome/pull/8058) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6 [esphome#8024](https://github.com/esphome/esphome/pull/8024) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-qemu-action from 3.2.0 to 3.3.0 in the docker-actions group [esphome#8052](https://github.com/esphome/esphome/pull/8052) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.10.0 to 6.11.0 in /.github/actions/build-image [esphome#8053](https://github.com/esphome/esphome/pull/8053) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Allow CONF_RMT_CHANNEL parameter for IDF 4.X [esphome#8035](https://github.com/esphome/esphome/pull/8035) by [@gnumpi](https://github.com/gnumpi) +- [esp32] Fix arch_get_cpu_freq_hz [esphome#8047](https://github.com/esphome/esphome/pull/8047) by [@swoboda1337](https://github.com/swoboda1337) +- Fix Waveshare 7in5bv3bwr image quality in BWR mode [esphome#8043](https://github.com/esphome/esphome/pull/8043) by [@zbikmarc](https://github.com/zbikmarc) +- [json] use correct formatting [esphome#8039](https://github.com/esphome/esphome/pull/8039) by [@clydebarrow](https://github.com/clydebarrow) +- [nextion] Brightness control tweaks [esphome#8027](https://github.com/esphome/esphome/pull/8027) by [@kbx81](https://github.com/kbx81) (breaking-change) +- [image] Transparency changes; code refactor [esphome#7908](https://github.com/esphome/esphome/pull/7908) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Added VERY_VERBOSE dfplayer printing [esphome#8026](https://github.com/esphome/esphome/pull/8026) by [@solarkennedy](https://github.com/solarkennedy) +- [core] fix comment for crc8 function in helpers.h [esphome#8016](https://github.com/esphome/esphome/pull/8016) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- [debug] Add framework type to debug info [esphome#8013](https://github.com/esphome/esphome/pull/8013) by [@edwardtfn](https://github.com/edwardtfn) +- [debug] Add ESP32 partition table logging to `dump_config` [esphome#8012](https://github.com/esphome/esphome/pull/8012) by [@edwardtfn](https://github.com/edwardtfn) +- [psram] Improve total PSRAM display in logs by using rounded KB values [esphome#8008](https://github.com/esphome/esphome/pull/8008) by [@edwardtfn](https://github.com/edwardtfn) +- Use ESPHome logo on readme page according to theme (light/dark) [esphome#7992](https://github.com/esphome/esphome/pull/7992) by [@dougiteixeira](https://github.com/dougiteixeira) +- Fix compile errors with pioarduino/platform-espressif32: wifi_component_esp32_arduino.cpp [esphome#7998](https://github.com/esphome/esphome/pull/7998) by [@bitflippersanonymous](https://github.com/bitflippersanonymous) +- Include esp_mac.h and C++20 str_startswith/str_ends [esphome#7999](https://github.com/esphome/esphome/pull/7999) by [@bitflippersanonymous](https://github.com/bitflippersanonymous) +- [esp32_wifi] Enhance WiFi component with TCPIP core locking. [esphome#7997](https://github.com/esphome/esphome/pull/7997) by [@bitflippersanonymous](https://github.com/bitflippersanonymous) +- add missing include in base_automation.h [esphome#8001](https://github.com/esphome/esphome/pull/8001) by [@nielsnl68](https://github.com/nielsnl68) +- Fixed topic when mac is used [esphome#7988](https://github.com/esphome/esphome/pull/7988) by [@Hadatko](https://github.com/Hadatko) +- web_server: Adds REST API POST endpoints to arm and disarm [esphome#7985](https://github.com/esphome/esphome/pull/7985) by [@heythisisnate](https://github.com/heythisisnate) +- [lvgl] fix tests [esphome#8075](https://github.com/esphome/esphome/pull/8075) by [@clydebarrow](https://github.com/clydebarrow) +- Allow external libraries to use ESP_LOGx macros [esphome#8078](https://github.com/esphome/esphome/pull/8078) by [@kroimon](https://github.com/kroimon) +- [uptime] Add text_sensor [esphome#8028](https://github.com/esphome/esphome/pull/8028) by [@clydebarrow](https://github.com/clydebarrow) (new-platform) +- [image] Fix mdi images [esphome#8082](https://github.com/esphome/esphome/pull/8082) by [@clydebarrow](https://github.com/clydebarrow) +- [ili9xxx] psram and 8 bit changes [esphome#8084](https://github.com/esphome/esphome/pull/8084) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [spi] Restore `SPIDelegateDummy` [esphome#8019](https://github.com/esphome/esphome/pull/8019) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] fix lvgl.widget.update and friends [esphome#8087](https://github.com/esphome/esphome/pull/8087) by [@clydebarrow](https://github.com/clydebarrow) +- fix(web_server/fan): send speed update values even when fan is off [esphome#8086](https://github.com/esphome/esphome/pull/8086) by [@distante](https://github.com/distante) +- [es7210] add support for es7210 ADC [esphome#8007](https://github.com/esphome/esphome/pull/8007) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [event] Store `last_event_type` in class [esphome#8088](https://github.com/esphome/esphome/pull/8088) by [@jesserockz](https://github.com/jesserockz) +- [prometheus] Select, media_player, and number prometheus metrics [esphome#7895](https://github.com/esphome/esphome/pull/7895) by [@jzucker2](https://github.com/jzucker2) +- Bump docker/build-push-action from 6.11.0 to 6.12.0 in /.github/actions/build-image [esphome#8090](https://github.com/esphome/esphome/pull/8090) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Revert "Add resistance_sampler interface for config validation" [esphome#8093](https://github.com/esphome/esphome/pull/8093) by [@clydebarrow](https://github.com/clydebarrow) +- Fix running pre-commit on Windows [esphome#8095](https://github.com/esphome/esphome/pull/8095) by [@stellar-aria](https://github.com/stellar-aria) +- Remove black-formatter from pre-commit hooks [esphome#8097](https://github.com/esphome/esphome/pull/8097) by [@stellar-aria](https://github.com/stellar-aria) +- Increase Daly-BMS coltage cells from 16 to 18 cells [esphome#8057](https://github.com/esphome/esphome/pull/8057) by [@j-sepul](https://github.com/j-sepul) +- [image]Rename option "use_transparency" [esphome#8113](https://github.com/esphome/esphome/pull/8113) by [@guillempages](https://github.com/guillempages) +- [online_image] Use RAMAllocator [esphome#8114](https://github.com/esphome/esphome/pull/8114) by [@guillempages](https://github.com/guillempages) +- Fixed incorrect display dimension [esphome#8110](https://github.com/esphome/esphome/pull/8110) by [@Duckle29](https://github.com/Duckle29) +- Update defines.h for esp-idf 5.1.5 [esphome#8117](https://github.com/esphome/esphome/pull/8117) by [@jesserockz](https://github.com/jesserockz) +- [audio_adc] Add new `audio_adc` component [esphome#8094](https://github.com/esphome/esphome/pull/8094) by [@kbx81](https://github.com/kbx81) (new-integration) +- [uptime] Cosmetic improvements for uptime text_sensor [esphome#8101](https://github.com/esphome/esphome/pull/8101) by [@clydebarrow](https://github.com/clydebarrow) +- [es8156] Add support for ES8156 audio DAC [esphome#8085](https://github.com/esphome/esphome/pull/8085) by [@kbx81](https://github.com/kbx81) (new-integration) +- [esp32_touch] Fix deprecated warning [esphome#8092](https://github.com/esphome/esphome/pull/8092) by [@swoboda1337](https://github.com/swoboda1337) +- [core] Remove old style platform configuration [esphome#8118](https://github.com/esphome/esphome/pull/8118) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Bump actions/stale from 9.0.0 to 9.1.0 [esphome#8120](https://github.com/esphome/esphome/pull/8120) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [custom] Remove platforms [esphome#8119](https://github.com/esphome/esphome/pull/8119) by [@kbx81](https://github.com/kbx81) (breaking-change) +- Add: Human Presence and Target Count to the Seeed Studio MR60BHA2 [esphome#8010](https://github.com/esphome/esphome/pull/8010) by [@limengdu](https://github.com/limengdu) (new-platform) +- [es7243e] Add support for ES7243E audio ADC [esphome#8098](https://github.com/esphome/esphome/pull/8098) by [@kbx81](https://github.com/kbx81) (new-integration) +- [debug] fix debug_esp32 printf for partition size and address [esphome#8122](https://github.com/esphome/esphome/pull/8122) by [@fightforlife](https://github.com/fightforlife) +- [esp32] Set logger default interface for C6 [esphome#8126](https://github.com/esphome/esphome/pull/8126) by [@kbx81](https://github.com/kbx81) +- [core] add support for custom platform [esphome#7616](https://github.com/esphome/esphome/pull/7616) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add verbose logging for pulse width calculation in pulse_meter [esphome#8124](https://github.com/esphome/esphome/pull/8124) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- [ads1115] Add sample rate control [esphome#8102](https://github.com/esphome/esphome/pull/8102) by [@brambo123](https://github.com/brambo123) +- Fix mqtt climate step rounding [esphome#8121](https://github.com/esphome/esphome/pull/8121) by [@olemmela](https://github.com/olemmela) +- [spi] Fix data type in bitbash transfer_() [esphome#8125](https://github.com/esphome/esphome/pull/8125) by [@oliv3r](https://github.com/oliv3r) +- [online_image] Add binary bmp support [esphome#8116](https://github.com/esphome/esphome/pull/8116) by [@jesserockz](https://github.com/jesserockz) +- [online_image] Code Improvements [esphome#8130](https://github.com/esphome/esphome/pull/8130) by [@guillempages](https://github.com/guillempages) +- Update mdns for ESP-IDF [esphome#8145](https://github.com/esphome/esphome/pull/8145) by [@HeMan](https://github.com/HeMan) +- Include Bluetooth connection slot allocations in connections free message [esphome#8148](https://github.com/esphome/esphome/pull/8148) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_server] Create custom services, characteristics and descriptors [esphome#7009](https://github.com/esphome/esphome/pull/7009) by [@Rapsssito](https://github.com/Rapsssito) (new-integration) +- [online_image] Add JPEG support to online_image [esphome#8127](https://github.com/esphome/esphome/pull/8127) by [@guillempages](https://github.com/guillempages) +- [logger] Ensure PRIu32 and friends are available [esphome#8155](https://github.com/esphome/esphome/pull/8155) by [@clydebarrow](https://github.com/clydebarrow) +- Fix forgotten uses of use_transparency [esphome#8115](https://github.com/esphome/esphome/pull/8115) by [@kroimon](https://github.com/kroimon) +- Add multicast support to udp component [esphome#8051](https://github.com/esphome/esphome/pull/8051) by [@HeMan](https://github.com/HeMan) +- [display] Properly handle case of auto_clear_enabled: false [esphome#8156](https://github.com/esphome/esphome/pull/8156) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32_rmt] Increase default symbols in led strip and remove IRAM config [esphome#8133](https://github.com/esphome/esphome/pull/8133) by [@swoboda1337](https://github.com/swoboda1337) +- [climate] Accept °K as intended [esphome#8134](https://github.com/esphome/esphome/pull/8134) by [@oliv3r](https://github.com/oliv3r) +- Bump docker/build-push-action from 6.12.0 to 6.13.0 in /.github/actions/build-image [esphome#8136](https://github.com/esphome/esphome/pull/8136) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pypa/gh-action-pypi-publish from 1.12.3 to 1.12.4 [esphome#8137](https://github.com/esphome/esphome/pull/8137) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.3.0 to 5.4.0 [esphome#8154](https://github.com/esphome/esphome/pull/8154) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.3.0 to 5.4.0 in /.github/actions/restore-python [esphome#8153](https://github.com/esphome/esphome/pull/8153) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [remote_transmitter] Fix issues with 32bit rollover on esp8266 and libretiny [esphome#8056](https://github.com/esphome/esphome/pull/8056) by [@swoboda1337](https://github.com/swoboda1337) +- Use abspath for config path dir [esphome#8044](https://github.com/esphome/esphome/pull/8044) by [@NicoIIT](https://github.com/NicoIIT) +- [remote_base] Add default value for offset in is_valid [esphome#8159](https://github.com/esphome/esphome/pull/8159) by [@swoboda1337](https://github.com/swoboda1337) +- feat(core): Add support for `<...>` includes [esphome#8132](https://github.com/esphome/esphome/pull/8132) by [@Rapsssito](https://github.com/Rapsssito) +- Bump zeroconf to 0.143.0 [esphome#8104](https://github.com/esphome/esphome/pull/8104) by [@bdraco](https://github.com/bdraco) +- [i2s_audio] Media Player Components PR1 [esphome#8163](https://github.com/esphome/esphome/pull/8163) by [@kahrendt](https://github.com/kahrendt) +- [audio, i2s_audio, speaker] Media Player Components PR2 [esphome#8164](https://github.com/esphome/esphome/pull/8164) by [@kahrendt](https://github.com/kahrendt) +- [audio] Media Player Components PR3 [esphome#8165](https://github.com/esphome/esphome/pull/8165) by [@kahrendt](https://github.com/kahrendt) +- Add virtual get_flags() to GPIOPin and implementation in InternalGPIOPin derivatives [esphome#8151](https://github.com/esphome/esphome/pull/8151) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- Make get_flags() in GPIOPin mandatory [esphome#8182](https://github.com/esphome/esphome/pull/8182) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- [audio] Media Player Components PR4 [esphome#8166](https://github.com/esphome/esphome/pull/8166) by [@kahrendt](https://github.com/kahrendt) +- [audio] Media Player Components PR5 [esphome#8167](https://github.com/esphome/esphome/pull/8167) by [@kahrendt](https://github.com/kahrendt) +- [audio] Media Player Components PR6 [esphome#8168](https://github.com/esphome/esphome/pull/8168) by [@kahrendt](https://github.com/kahrendt) +- Remove arm/v7 container image support [esphome#8194](https://github.com/esphome/esphome/pull/8194) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [resampler] Media Player Components PR7 [esphome#8169](https://github.com/esphome/esphome/pull/8169) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [mixer] Media Player Components PR8 [esphome#8170](https://github.com/esphome/esphome/pull/8170) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [CI] Consolidate some tests (A) [esphome#8184](https://github.com/esphome/esphome/pull/8184) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (B) [esphome#8185](https://github.com/esphome/esphome/pull/8185) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (C) [esphome#8186](https://github.com/esphome/esphome/pull/8186) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (D) [esphome#8189](https://github.com/esphome/esphome/pull/8189) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (E) [esphome#8191](https://github.com/esphome/esphome/pull/8191) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (F) [esphome#8195](https://github.com/esphome/esphome/pull/8195) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (G) [esphome#8196](https://github.com/esphome/esphome/pull/8196) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (H) [esphome#8198](https://github.com/esphome/esphome/pull/8198) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (K, L) [esphome#8201](https://github.com/esphome/esphome/pull/8201) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (M) [esphome#8202](https://github.com/esphome/esphome/pull/8202) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (I, J) [esphome#8200](https://github.com/esphome/esphome/pull/8200) by [@kbx81](https://github.com/kbx81) +- [i2c] Workaround for i2c on s2 [esphome#8188](https://github.com/esphome/esphome/pull/8188) by [@swoboda1337](https://github.com/swoboda1337) +- [lvgl] add triggers for swipe gestures [esphome#8190](https://github.com/esphome/esphome/pull/8190) by [@clydebarrow](https://github.com/clydebarrow) +- [xxtea] Extract encryption functions to separate component [esphome#8183](https://github.com/esphome/esphome/pull/8183) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [lvgl] Make layouts work properly on base display [esphome#8193](https://github.com/esphome/esphome/pull/8193) by [@clydebarrow](https://github.com/clydebarrow) +- [preferences] Better handling of flash_write_interval [esphome#8199](https://github.com/esphome/esphome/pull/8199) by [@clydebarrow](https://github.com/clydebarrow) +- [CI] Consolidate some tests (N, O, P) [esphome#8204](https://github.com/esphome/esphome/pull/8204) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (Q, R) [esphome#8205](https://github.com/esphome/esphome/pull/8205) by [@kbx81](https://github.com/kbx81) +- [prometheus] Add update entity to prometheus metrics [esphome#8173](https://github.com/esphome/esphome/pull/8173) by [@jzucker2](https://github.com/jzucker2) +- [uponor_smatrix] add target temperature as sensor [esphome#7745](https://github.com/esphome/esphome/pull/7745) by [@janschroeter](https://github.com/janschroeter) +- [sdl] Implement binary sensors from keystrokes [esphome#8207](https://github.com/esphome/esphome/pull/8207) by [@bdm310](https://github.com/bdm310) (new-platform) +- Bump the docker-actions group with 2 updates [esphome#8215](https://github.com/esphome/esphome/pull/8215) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [esp32_rmt] Set pull-up and open-drain modes based on pin schema [esphome#8178](https://github.com/esphome/esphome/pull/8178) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- Add Toto protocol to remote receiver and transmitter [esphome#8177](https://github.com/esphome/esphome/pull/8177) by [@G-Two](https://github.com/G-Two) +- Markdown tweaks/updates [esphome#8211](https://github.com/esphome/esphome/pull/8211) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (S) [esphome#8206](https://github.com/esphome/esphome/pull/8206) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (U, V, W, X, Y, Z) [esphome#8210](https://github.com/esphome/esphome/pull/8210) by [@kbx81](https://github.com/kbx81) +- [CI] Consolidate some tests (T) [esphome#8208](https://github.com/esphome/esphome/pull/8208) by [@kbx81](https://github.com/kbx81) +- [online_image]Pin specific version of JPEG library [esphome#8217](https://github.com/esphome/esphome/pull/8217) by [@guillempages](https://github.com/guillempages) +- [logger] Add runtime level select [esphome#8222](https://github.com/esphome/esphome/pull/8222) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [online_image] Set Accept header [esphome#8216](https://github.com/esphome/esphome/pull/8216) by [@candrews](https://github.com/candrews) +- [waveshare_epaper] Rationalise and complete tests [esphome#8221](https://github.com/esphome/esphome/pull/8221) by [@clydebarrow](https://github.com/clydebarrow) +- Fix pref conflict of WiFi creds and fast_connect [esphome#8219](https://github.com/esphome/esphome/pull/8219) by [@QRPp](https://github.com/QRPp) +- Don't activate venv in devcontainer [esphome#8128](https://github.com/esphome/esphome/pull/8128) by [@kroimon](https://github.com/kroimon) +- Add ADC sampling method option [esphome#8131](https://github.com/esphome/esphome/pull/8131) by [@blind-oracle](https://github.com/blind-oracle) +- [ota] Increase socket timeout earlier in OTA script [esphome#8129](https://github.com/esphome/esphome/pull/8129) by [@swoboda1337](https://github.com/swoboda1337) +- [speaker] Media Player Components PR9 [esphome#8171](https://github.com/esphome/esphome/pull/8171) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- Add partial update of GDEW029T5 e-paper display [esphome#8162](https://github.com/esphome/esphome/pull/8162) by [@mystster](https://github.com/mystster) +- Add waveshare 2.9inch e-Paper HAT (D) [esphome#7906](https://github.com/esphome/esphome/pull/7906) by [@TataGEEK](https://github.com/TataGEEK) +- [http_request]Use `std::string` for headers [esphome#8225](https://github.com/esphome/esphome/pull/8225) by [@guillempages](https://github.com/guillempages) +- [online_image] Improve error handling [esphome#8212](https://github.com/esphome/esphome/pull/8212) by [@guillempages](https://github.com/guillempages) +- [speaker] Bugfix: Ensure all audio is played after completely decoding a file [esphome#8231](https://github.com/esphome/esphome/pull/8231) by [@kahrendt](https://github.com/kahrendt) +- [voice_assistant] Add announce support [esphome#8232](https://github.com/esphome/esphome/pull/8232) by [@kahrendt](https://github.com/kahrendt) +- [prometheus] Adding valve entity metrics [esphome#8223](https://github.com/esphome/esphome/pull/8223) by [@jzucker2](https://github.com/jzucker2) +- Added Waveshare e-paper display model "7.50inv2p" to the waveshare_epaper component. [esphome#7751](https://github.com/esphome/esphome/pull/7751) by [@tmpeh](https://github.com/tmpeh) +- added Waveshare BWR Mode for the 4.2in Display [esphome#7995](https://github.com/esphome/esphome/pull/7995) by [@itpcc](https://github.com/itpcc) +- Add GDEY029T94 support [esphome#7931](https://github.com/esphome/esphome/pull/7931) by [@danielkoek](https://github.com/danielkoek) +- GDEY042T81 e-paper displays support [esphome#8061](https://github.com/esphome/esphome/pull/8061) by [@mgruener](https://github.com/mgruener) +- Add support for Waveshare 7.3" ACeP 7-Color display [esphome#6380](https://github.com/esphome/esphome/pull/6380) by [@NeilSCGH](https://github.com/NeilSCGH) +- Bump esphome-dashboard to 20250212.0 [esphome#8235](https://github.com/esphome/esphome/pull/8235) by [@jesserockz](https://github.com/jesserockz) +- [online_image]Fix reset if buffer not allocated [esphome#8236](https://github.com/esphome/esphome/pull/8236) by [@guillempages](https://github.com/guillempages) +- [core] Ignore dot-prefixed config entries when looking for target platform [esphome#8240](https://github.com/esphome/esphome/pull/8240) by [@jesserockz](https://github.com/jesserockz) +- Bump zeroconf to 0.144.1 [esphome#8238](https://github.com/esphome/esphome/pull/8238) by [@bdraco](https://github.com/bdraco) +- [core] Fix `config_dir` for dashboard [esphome#8242](https://github.com/esphome/esphome/pull/8242) by [@jesserockz](https://github.com/jesserockz) +- [cse7766] Remove `stream` dependency [esphome#7720](https://github.com/esphome/esphome/pull/7720) by [@gabest11](https://github.com/gabest11) +- [graph] Remove `stream` dependency [esphome#8243](https://github.com/esphome/esphome/pull/8243) by [@kbx81](https://github.com/kbx81) +- [modbus_controller] Remove `stream` dependency [esphome#8244](https://github.com/esphome/esphome/pull/8244) by [@kbx81](https://github.com/kbx81) +- [logger] Fix bug causing global log level to be overwritten [esphome#8248](https://github.com/esphome/esphome/pull/8248) by [@swoboda1337](https://github.com/swoboda1337) +- Add support for the DAC on the S2 [esphome#8030](https://github.com/esphome/esphome/pull/8030) by [@maraid](https://github.com/maraid) +- Fix crash when storage file doesnt exist yet [esphome#8249](https://github.com/esphome/esphome/pull/8249) by [@jesserockz](https://github.com/jesserockz) +- don't crash on null pages [esphome#8254](https://github.com/esphome/esphome/pull/8254) by [@ssieb](https://github.com/ssieb) +- [scd30] Increase minimal CONF_UPDATE_INTERVAL from 1 to 2 seconds [esphome#8256](https://github.com/esphome/esphome/pull/8256) by [@DjordjeMandic](https://github.com/DjordjeMandic) (breaking-change) +- Bump zeroconf to 0.144.3 [esphome#8253](https://github.com/esphome/esphome/pull/8253) by [@bdraco](https://github.com/bdraco) +- DHT platform now supports modules with inbuilt external resistor [esphome#8257](https://github.com/esphome/esphome/pull/8257) by [@deCodeIt](https://github.com/deCodeIt) +- Replace glyphsets with esphome_glyphsets [esphome#8261](https://github.com/esphome/esphome/pull/8261) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi to 29.1.0 [esphome#8105](https://github.com/esphome/esphome/pull/8105) by [@bdraco](https://github.com/bdraco) +- Bump openssh-client to 1:9.2p1-2+deb12u4 to fix docker builds [esphome#8269](https://github.com/esphome/esphome/pull/8269) by [@bdraco](https://github.com/bdraco) +- Increase default repeat delay for Toto remote transmitter protocol [esphome#8265](https://github.com/esphome/esphome/pull/8265) by [@G-Two](https://github.com/G-Two) +- Bump zeroconf to 0.145.1 [esphome#8267](https://github.com/esphome/esphome/pull/8267) by [@bdraco](https://github.com/bdraco) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.3.0.mdx b/src/content/docs/changelog/2025.3.0.mdx new file mode 100644 index 0000000000..a4615c7e2d --- /dev/null +++ b/src/content/docs/changelog/2025.3.0.mdx @@ -0,0 +1,143 @@ +--- +description: "Changelog for ESPHome 2025.3.0." +title: "ESPHome 2025.3.0 - 19th March 2025" +pagefind: false +slug: "changelog/2025.3.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +Our second release of 2025 is a bit smaller -- Jesse is away, so we are a bit short-staffed. 😅 + +Even so, we do still have a few new additions (as above), so we thought we'd proceed with a release just the same. +Of note, the long-awaited [Ld2450](/components/sensor/ld2450/) has landed; as there are now a few products +available with this sensor, it seemed about time to get it baked in. That said, I'll keep it short. Happy hacking! + +{/* markdownlint-disable MD013 */} + +## Release 2025.3.1 - March 22 + +- [ft63x6] Get correct dimensions from display [esphome#8417](https://github.com/esphome/esphome/pull/8417) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Set correct buffer size [esphome#8442](https://github.com/esphome/esphome/pull/8442) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Ensure non-zero screen dimensions during init [esphome#8444](https://github.com/esphome/esphome/pull/8444) by [@clydebarrow](https://github.com/clydebarrow) + +## Release 2025.3.2 - March 25 + +- [gt911][cst226][ektf2232] Swap x and y calibration values [esphome#8450](https://github.com/esphome/esphome/pull/8450) by [@clydebarrow](https://github.com/clydebarrow) +- [font] More robust handling of fixed font sizes. [esphome#8443](https://github.com/esphome/esphome/pull/8443) by [@clydebarrow](https://github.com/clydebarrow) +- fix 1bpp rendering [esphome#8463](https://github.com/esphome/esphome/pull/8463) by [@ssieb](https://github.com/ssieb) +- [media_player] Don't reset enqueue command [esphome#8465](https://github.com/esphome/esphome/pull/8465) by [@kahrendt](https://github.com/kahrendt) +- [speaker] Bugfix: Fix rapidly adding items to playlist [esphome#8466](https://github.com/esphome/esphome/pull/8466) by [@kahrendt](https://github.com/kahrendt) +- [ld2450] Fix bluetooth state not reported correctly [esphome#8458](https://github.com/esphome/esphome/pull/8458) by [@kbx81](https://github.com/kbx81) + +## Release 2025.3.3 - March 31 + +- [display] Don't assume glyph x_offset is zero. [esphome#8473](https://github.com/esphome/esphome/pull/8473) by [@clydebarrow](https://github.com/clydebarrow) +- Bump ESP mdns to 1.8.2 [esphome#8482](https://github.com/esphome/esphome/pull/8482) by [@bdraco](https://github.com/bdraco) +- [speaker] Bugfix: Media player always unpauses when receiving a stop command [esphome#8474](https://github.com/esphome/esphome/pull/8474) by [@kahrendt](https://github.com/kahrendt) +- [lvgl] Implement switch restore [esphome#8481](https://github.com/esphome/esphome/pull/8481) by [@clydebarrow](https://github.com/clydebarrow) +- [speaker] Bugfixes: two pause state issues [esphome#8488](https://github.com/esphome/esphome/pull/8488) by [@kahrendt](https://github.com/kahrendt) + +## Full list of changes + +### New Components + +- [ld2450] Add new component [esphome#5674](https://github.com/esphome/esphome/pull/5674) by [@hareeshmu](https://github.com/hareeshmu) (new-integration) +- Adding support for chsc6x touch controller [esphome#8258](https://github.com/esphome/esphome/pull/8258) by [@kkosik20](https://github.com/kkosik20) (new-integration) +- MSA311 and MSA301 accelerometer support [esphome#6795](https://github.com/esphome/esphome/pull/6795) by [@latonita](https://github.com/latonita) (new-integration) +- Cover component for Tormatic and Novoferm garage doors [esphome#5933](https://github.com/esphome/esphome/pull/5933) by [@ti-mo](https://github.com/ti-mo) (new-integration) + +### Breaking Changes + +- [mlx90393] Fix inverted gain and resolution. Expose temperature_compensation and hallconf. [esphome#7635](https://github.com/esphome/esphome/pull/7635) by [@functionpointer](https://github.com/functionpointer) (breaking-change) +- [touchscreen] Axis swap bugfix [esphome#8376](https://github.com/esphome/esphome/pull/8376) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [cst816] Remove binary sensor [esphome#8377](https://github.com/esphome/esphome/pull/8377) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) + +### Beta Changes + +- Bump mdns library to 1.8.0 [esphome#8378](https://github.com/esphome/esphome/pull/8378) by [@bdraco](https://github.com/bdraco) +- [audio, mixer] Memory and CPU performance improvements [esphome#8387](https://github.com/esphome/esphome/pull/8387) by [@kahrendt](https://github.com/kahrendt) +- [speaker, resampler, mixer] Make volume and mute getters virtual [esphome#8391](https://github.com/esphome/esphome/pull/8391) by [@kahrendt](https://github.com/kahrendt) +- [core] add reallocation support to RAMAllocator [esphome#8390](https://github.com/esphome/esphome/pull/8390) by [@kahrendt](https://github.com/kahrendt) +- [api] add voice assistant announce to the api [esphome#8395](https://github.com/esphome/esphome/pull/8395) by [@kahrendt](https://github.com/kahrendt) +- Bump aioesphomeapi to 29.6.0 [esphome#8396](https://github.com/esphome/esphome/pull/8396) by [@bdraco](https://github.com/bdraco) +- Rework pyproject.toml to make it parseable by dependabot [esphome#8397](https://github.com/esphome/esphome/pull/8397) by [@bdraco](https://github.com/bdraco) +- Bump cryptography to 44.0.2 [esphome#8399](https://github.com/esphome/esphome/pull/8399) by [@bdraco](https://github.com/bdraco) +- Bump tornado from 6.4 to 6.4.2 [esphome#8398](https://github.com/esphome/esphome/pull/8398) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [font] Fix issues with bitmap fonts [esphome#8407](https://github.com/esphome/esphome/pull/8407) by [@clydebarrow](https://github.com/clydebarrow) +- Added getters for graphs ymin and ymax [esphome#8112](https://github.com/esphome/esphome/pull/8112) by [@Duckle29](https://github.com/Duckle29) +- [docker] Bump curl, git, openssh-client, libopenjp2-7, nginx-light [esphome#8419](https://github.com/esphome/esphome/pull/8419) by [@kbx81](https://github.com/kbx81) +- [docker] Bump libfreetype [esphome#8426](https://github.com/esphome/esphome/pull/8426) by [@kbx81](https://github.com/kbx81) +- [core] Handle mis-typed platform name more cleanly [esphome#8424](https://github.com/esphome/esphome/pull/8424) by [@clydebarrow](https://github.com/clydebarrow) +- [audio] Bugfix: fix flac decoding glitches by using esp-audio-libs v1.1.3 [esphome#8431](https://github.com/esphome/esphome/pull/8431) by [@kahrendt](https://github.com/kahrendt) + +### All changes + +- [modbus_controller] Extend tests [esphome#8245](https://github.com/esphome/esphome/pull/8245) by [@kbx81](https://github.com/kbx81) +- Switch to native arm runners for docker CI [esphome#8262](https://github.com/esphome/esphome/pull/8262) by [@bdraco](https://github.com/bdraco) +- Use the process CPU count to determine how many children to create [esphome#8268](https://github.com/esphome/esphome/pull/8268) by [@bdraco](https://github.com/bdraco) +- Bump actions/cache from 4.2.0 to 4.2.1 in /.github/actions/restore-python [esphome#8273](https://github.com/esphome/esphome/pull/8273) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.2.0 to 4.2.1 [esphome#8271](https://github.com/esphome/esphome/pull/8271) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Ruff format for CI [esphome#8276](https://github.com/esphome/esphome/pull/8276) by [@stellar-aria](https://github.com/stellar-aria) +- [ld2450] Add new component [esphome#5674](https://github.com/esphome/esphome/pull/5674) by [@hareeshmu](https://github.com/hareeshmu) (new-integration) +- Bump docker/build-push-action from 6.13.0 to 6.14.0 in /.github/actions/build-image [esphome#8281](https://github.com/esphome/esphome/pull/8281) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Finish up transition from black-format to ruff [esphome#8294](https://github.com/esphome/esphome/pull/8294) by [@stellar-aria](https://github.com/stellar-aria) +- [core, dashboard] load external component to get get_download_types [esphome#8139](https://github.com/esphome/esphome/pull/8139) by [@tomaszduda23](https://github.com/tomaszduda23) +- [ota] set USE_OTA_VERSION 2 in defines [esphome#8299](https://github.com/esphome/esphome/pull/8299) by [@tomaszduda23](https://github.com/tomaszduda23) +- [socket] add connect method [esphome#8308](https://github.com/esphome/esphome/pull/8308) by [@kahrendt](https://github.com/kahrendt) +- Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7 [esphome#8314](https://github.com/esphome/esphome/pull/8314) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/upload-artifact from 4.6.0 to 4.6.1 [esphome#8295](https://github.com/esphome/esphome/pull/8295) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [api] ensure fair network sharing + prevent lost state changes via deferred publish at high event load [esphome#7547](https://github.com/esphome/esphome/pull/7547) by [@nkinnan](https://github.com/nkinnan) +- ili9xxx: Add support for GC9D01N circle display [esphome#8302](https://github.com/esphome/esphome/pull/8302) by [@rforro](https://github.com/rforro) +- web_server: ensure fair network sharing + prevent lost state changes via deferred publish at high event load [esphome#7538](https://github.com/esphome/esphome/pull/7538) by [@nkinnan](https://github.com/nkinnan) +- [i2c] python code style [esphome#8311](https://github.com/esphome/esphome/pull/8311) by [@tomaszduda23](https://github.com/tomaszduda23) +- Adding support for chsc6x touch controller [esphome#8258](https://github.com/esphome/esphome/pull/8258) by [@kkosik20](https://github.com/kkosik20) (new-integration) +- [core] make upload_program more generic [esphome#8321](https://github.com/esphome/esphome/pull/8321) by [@tomaszduda23](https://github.com/tomaszduda23) +- [i2c] Fix i2c issue on idf 5.3 [esphome#8283](https://github.com/esphome/esphome/pull/8283) by [@swoboda1337](https://github.com/swoboda1337) +- [core] SplitDefault unit test [esphome#8324](https://github.com/esphome/esphome/pull/8324) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add option to include vars in remote packages [esphome#7606](https://github.com/esphome/esphome/pull/7606) by [@pszafer](https://github.com/pszafer) +- [ld2450] Fix for "unknown" sensor states [esphome#8305](https://github.com/esphome/esphome/pull/8305) by [@kbx81](https://github.com/kbx81) +- Update arduino-heatpumpir and add new protocol for Panasonic AC [esphome#8309](https://github.com/esphome/esphome/pull/8309) by [@barchasse38](https://github.com/barchasse38) +- MSA311 and MSA301 accelerometer support [esphome#6795](https://github.com/esphome/esphome/pull/6795) by [@latonita](https://github.com/latonita) (new-integration) +- Include the bluetooth mac address in the device info when proxy is enabled [esphome#8203](https://github.com/esphome/esphome/pull/8203) by [@bdraco](https://github.com/bdraco) +- dashboard: Implement automatic ping fallback [esphome#8263](https://github.com/esphome/esphome/pull/8263) by [@bdraco](https://github.com/bdraco) +- [ld2450] Fix misplaced `ifdef` and related logic [esphome#8335](https://github.com/esphome/esphome/pull/8335) by [@kbx81](https://github.com/kbx81) +- Bump the docker-actions group with 2 updates [esphome#8330](https://github.com/esphome/esphome/pull/8330) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/download-artifact from 4.1.8 to 4.1.9 [esphome#8331](https://github.com/esphome/esphome/pull/8331) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.14.0 to 6.15.0 in /.github/actions/build-image [esphome#8332](https://github.com/esphome/esphome/pull/8332) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [mlx90393] Fix inverted gain and resolution. Expose temperature_compensation and hallconf. [esphome#7635](https://github.com/esphome/esphome/pull/7635) by [@functionpointer](https://github.com/functionpointer) (breaking-change) +- [font] Use freetype instead of Pillow for font rendering [esphome#8300](https://github.com/esphome/esphome/pull/8300) by [@clydebarrow](https://github.com/clydebarrow) +- Bump actions/cache from 4.2.1 to 4.2.2 [esphome#8336](https://github.com/esphome/esphome/pull/8336) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.2.1 to 4.2.2 in /.github/actions/restore-python [esphome#8337](https://github.com/esphome/esphome/pull/8337) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [zeroconf] Ruff formatting [esphome#8338](https://github.com/esphome/esphome/pull/8338) by [@jesserockz](https://github.com/jesserockz) +- [nrf52, core] unified way how all platforms handle SplitDefault [esphome#7715](https://github.com/esphome/esphome/pull/7715) by [@tomaszduda23](https://github.com/tomaszduda23) +- Cover component for Tormatic and Novoferm garage doors [esphome#5933](https://github.com/esphome/esphome/pull/5933) by [@ti-mo](https://github.com/ti-mo) (new-integration) +- [io_bus] Initial implementation [esphome#8227](https://github.com/esphome/esphome/pull/8227) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [tmp1075] fix component for TMP1075N [esphome#8317](https://github.com/esphome/esphome/pull/8317) by [@ssieb](https://github.com/ssieb) +- Bump docker/setup-qemu-action from 3.5.0 to 3.6.0 in the docker-actions group [esphome#8346](https://github.com/esphome/esphome/pull/8346) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [dashboard] Rename trash/delete to archive [esphome#8357](https://github.com/esphome/esphome/pull/8357) by [@jesserockz](https://github.com/jesserockz) +- [helpers] Allow RAMAllocator to be told the size of the object manually [esphome#8356](https://github.com/esphome/esphome/pull/8356) by [@jesserockz](https://github.com/jesserockz) +- [ld2450] fix null exception & zone target_count not published [esphome#8348](https://github.com/esphome/esphome/pull/8348) by [@mistic100](https://github.com/mistic100) +- [bmp085] Fix error in read of pressure [esphome#8359](https://github.com/esphome/esphome/pull/8359) by [@gusdleon](https://github.com/gusdleon) +- [udp] fix clang tidy [esphome#8351](https://github.com/esphome/esphome/pull/8351) by [@tomaszduda23](https://github.com/tomaszduda23) +- [i2s_audio] Bugfix: Speaker incorrectly delays when sending data [esphome#8361](https://github.com/esphome/esphome/pull/8361) by [@kahrendt](https://github.com/kahrendt) +- Initialise h-bridge switch to requested initial state [esphome#8363](https://github.com/esphome/esphome/pull/8363) by [@AnyOldName3](https://github.com/AnyOldName3) +- [lvgl] Fix initialisation race condition (Bugfix) [esphome#8369](https://github.com/esphome/esphome/pull/8369) by [@clydebarrow](https://github.com/clydebarrow) +- [time] fix recalc_timestamp_local [esphome#8239](https://github.com/esphome/esphome/pull/8239) by [@qraynaud](https://github.com/qraynaud) +- allow touchscreen buttons outside of display dimensions [esphome#8296](https://github.com/esphome/esphome/pull/8296) by [@zendes](https://github.com/zendes) +- [touchscreen] Axis swap bugfix [esphome#8376](https://github.com/esphome/esphome/pull/8376) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [cst816] Remove binary sensor [esphome#8377](https://github.com/esphome/esphome/pull/8377) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Revert "[io_bus] Initial implementation" [esphome#8384](https://github.com/esphome/esphome/pull/8384) by [@clydebarrow](https://github.com/clydebarrow) +- Bump aioesphomeapi to 29.5.1 [esphome#8364](https://github.com/esphome/esphome/pull/8364) by [@bdraco](https://github.com/bdraco) +- Bump esptool to 4.8.1latest [esphome#8367](https://github.com/esphome/esphome/pull/8367) by [@shvmm](https://github.com/shvmm) +- Bump zeroconf to 0.146.1 [esphome#8365](https://github.com/esphome/esphome/pull/8365) by [@bdraco](https://github.com/bdraco) +- mcp2515: Add missing CFG1 assignment to be able to use 50kbps with a 16MHz crystal. [esphome#8375](https://github.com/esphome/esphome/pull/8375) by [@djasper-ha](https://github.com/djasper-ha) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.4.0.mdx b/src/content/docs/changelog/2025.4.0.mdx new file mode 100644 index 0000000000..1d83f3b811 --- /dev/null +++ b/src/content/docs/changelog/2025.4.0.mdx @@ -0,0 +1,163 @@ +--- +description: "Changelog for ESPHome 2025.4.0." +title: "ESPHome 2025.4.0 - 16th April 2025" +pagefind: false +slug: "changelog/2025.4.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +Another small release out this month. I (Jesse) will be back full-time next week and so hopefully we can +get the project picking up some steam again. + +{/* markdownlint-disable MD013 */} + +## Release 2025.4.1 - April 29 + +- Fix psram below idf 5 [esphome#8584](https://github.com/esphome/esphome/pull/8584) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Ensure pages are created on the correct display [esphome#8596](https://github.com/esphome/esphome/pull/8596) by [@clydebarrow](https://github.com/clydebarrow) +- Fix BLE connection loop caused by timeout and pending disconnect race [esphome#8597](https://github.com/esphome/esphome/pull/8597) by [@bdraco](https://github.com/bdraco) +- [online_image] Fix printf format; comment fixes [esphome#8607](https://github.com/esphome/esphome/pull/8607) by [@clydebarrow](https://github.com/clydebarrow) +- [watchdog] Fix for variants with single core [esphome#8602](https://github.com/esphome/esphome/pull/8602) by [@jesserockz](https://github.com/jesserockz) +- [core] Fix setting of log level/verbose [esphome#8600](https://github.com/esphome/esphome/pull/8600) by [@clydebarrow](https://github.com/clydebarrow) +- Update ens160_base.cpp – fix wrong double negative [esphome#8639](https://github.com/esphome/esphome/pull/8639) by [@steffenbanhardt](https://github.com/steffenbanhardt) + +## Release 2025.4.2 - May 12 + +- Fix unexpected widget update behavior [esphome#8260](https://github.com/esphome/esphome/pull/8260) by [@bdm310](https://github.com/bdm310) +- [esp32_ble] Remove explicit and now incorrect ble override for esp32-c6 [esphome#8643](https://github.com/esphome/esphome/pull/8643) by [@jesserockz](https://github.com/jesserockz) +- [media_player] Fix actions with id as value [esphome#8654](https://github.com/esphome/esphome/pull/8654) by [@jesserockz](https://github.com/jesserockz) +- Fix typo preventing tt21100 from autosetting the touchscreen res. [esphome#8662](https://github.com/esphome/esphome/pull/8662) by [@raineth](https://github.com/raineth) +- Fix HLW8012 sensor not returning values if change_mode_every is set to never [esphome#8456](https://github.com/esphome/esphome/pull/8456) by [@SuperPlusUser](https://github.com/SuperPlusUser) +- [display] Fix Rect::inside [esphome#8679](https://github.com/esphome/esphome/pull/8679) by [@clydebarrow](https://github.com/clydebarrow) +- [as3935_i2c] Remove redundant includes [esphome#8677](https://github.com/esphome/esphome/pull/8677) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Allow padding to be negative [esphome#8671](https://github.com/esphome/esphome/pull/8671) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix image property processing [esphome#8691](https://github.com/esphome/esphome/pull/8691) by [@clydebarrow](https://github.com/clydebarrow) + +## Full list of changes + +### New Components + +- Add support for MCP4461 quad i2c digipot/rheostat [esphome#8180](https://github.com/esphome/esphome/pull/8180) by [@p1ngb4ck](https://github.com/p1ngb4ck) (new-integration) + +### Breaking Changes + +- Rework max connections for BLE to avoid exceeding the hard limit [esphome#8303](https://github.com/esphome/esphome/pull/8303) by [@bdraco](https://github.com/bdraco) (breaking-change) + +### Beta Changes + +- [lvgl] Fix use of image without canvas (Bugfix) [esphome#8540](https://github.com/esphome/esphome/pull/8540) by [@clydebarrow](https://github.com/clydebarrow) +- Include MAC address in noise hello [esphome#8551](https://github.com/esphome/esphome/pull/8551) by [@bdraco](https://github.com/bdraco) +- [axs15231] Don't overwrite manual dimensions [esphome#8553](https://github.com/esphome/esphome/pull/8553) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix initial focus on roller [esphome#8547](https://github.com/esphome/esphome/pull/8547) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Add restore_value to select and number [esphome#8494](https://github.com/esphome/esphome/pull/8494) by [@clydebarrow](https://github.com/clydebarrow) +- Speaker-Media-Player: Fix potential deadlock in audio pipeline [esphome#8548](https://github.com/esphome/esphome/pull/8548) by [@gnumpi](https://github.com/gnumpi) +- [lvgl] Ensure captured lambdas are in correct order [esphome#8560](https://github.com/esphome/esphome/pull/8560) by [@clydebarrow](https://github.com/clydebarrow) +- Bump aioesphomeapi from 29.9.0 to 29.10.0 [esphome#8562](https://github.com/esphome/esphome/pull/8562) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.146.3 to 0.146.4 [esphome#8563](https://github.com/esphome/esphome/pull/8563) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esphome-dashboard to 20250415.0 [esphome#8565](https://github.com/esphome/esphome/pull/8565) by [@swoboda1337](https://github.com/swoboda1337) +- Fix '--device MQTT' for devices with static IP [esphome#8535](https://github.com/esphome/esphome/pull/8535) by [@dwmw2](https://github.com/dwmw2) +- [am2315c] Use warning not fail during update [esphome#8499](https://github.com/esphome/esphome/pull/8499) by [@swoboda1337](https://github.com/swoboda1337) +- Bump zeroconf from 0.146.4 to 0.146.5 [esphome#8569](https://github.com/esphome/esphome/pull/8569) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix vscode validation not showing error squiggles [esphome#8500](https://github.com/esphome/esphome/pull/8500) by [@glmnet](https://github.com/glmnet) +- SML runtime optimizations [esphome#8571](https://github.com/esphome/esphome/pull/8571) by [@mariusgreuel](https://github.com/mariusgreuel) + +### All changes + +
    + + + + +- [esp32] Allow pioarduino versions 5.3.2 and 5.4.0 [esphome#8440](https://github.com/esphome/esphome/pull/8440) by [@swoboda1337](https://github.com/swoboda1337) +- [cli] Add `--reset` and `--upload_speed` options [esphome#8380](https://github.com/esphome/esphome/pull/8380) by [@clydebarrow](https://github.com/clydebarrow) +- [core] Fix 5.4.0 build issue [esphome#8455](https://github.com/esphome/esphome/pull/8455) by [@swoboda1337](https://github.com/swoboda1337) +- [core] Fix s2 build after crc header fix [esphome#8459](https://github.com/esphome/esphome/pull/8459) by [@swoboda1337](https://github.com/swoboda1337) +- [esp32_can] Configurable enqueue timeout [esphome#8453](https://github.com/esphome/esphome/pull/8453) by [@patagonaa](https://github.com/patagonaa) +- [scheduler] Properly handle millis() overflow [esphome#8197](https://github.com/esphome/esphome/pull/8197) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32] Allow pioarduino version 5.4.1 [esphome#8480](https://github.com/esphome/esphome/pull/8480) by [@swoboda1337](https://github.com/swoboda1337) +- [psram] 120MHz does not work in octal mode [esphome#8477](https://github.com/esphome/esphome/pull/8477) by [@clydebarrow](https://github.com/clydebarrow) +- Move CONF_DEFAULT to const.py [esphome#8497](https://github.com/esphome/esphome/pull/8497) by [@nielsnl68](https://github.com/nielsnl68) +- [lvgl] Add some defines [esphome#8501](https://github.com/esphome/esphome/pull/8501) by [@clydebarrow](https://github.com/clydebarrow) +- Add support for MCP4461 quad i2c digipot/rheostat [esphome#8180](https://github.com/esphome/esphome/pull/8180) by [@p1ngb4ck](https://github.com/p1ngb4ck) (new-integration) +- Bump platformio to 6.1.18 [esphome#8430](https://github.com/esphome/esphome/pull/8430) by [@shvmm](https://github.com/shvmm) +- Update emails from nabucasa to OHF [esphome#8508](https://github.com/esphome/esphome/pull/8508) by [@jesserockz](https://github.com/jesserockz) +- [nau7802] fix bad blocking code (#6395) [esphome#8070](https://github.com/esphome/esphome/pull/8070) by [@cujomalainey](https://github.com/cujomalainey) +- [core, qspi_dbi] Clang tidy fixes for 5.3.2 [esphome#8509](https://github.com/esphome/esphome/pull/8509) by [@swoboda1337](https://github.com/swoboda1337) +- [CI] Clang tidy fixes for 5.3.2 [esphome#8510](https://github.com/esphome/esphome/pull/8510) by [@swoboda1337](https://github.com/swoboda1337) +- [ethernet_info] return actual ethernet MAC address [esphome#8492](https://github.com/esphome/esphome/pull/8492) by [@victorclaessen](https://github.com/victorclaessen) +- Rework max connections for BLE to avoid exceeding the hard limit [esphome#8303](https://github.com/esphome/esphome/pull/8303) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [component] Show error message for failed component [esphome#8478](https://github.com/esphome/esphome/pull/8478) by [@clydebarrow](https://github.com/clydebarrow) +- [psram] Allow use of experimental 120MHz octal mode [esphome#8519](https://github.com/esphome/esphome/pull/8519) by [@clydebarrow](https://github.com/clydebarrow) +- Ensure plaintext responds with bad indicator byte before dropping the connection [esphome#8521](https://github.com/esphome/esphome/pull/8521) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi to 29.9.0 [esphome#8522](https://github.com/esphome/esphome/pull/8522) by [@bdraco](https://github.com/bdraco) +- [lvgl] add on_boot trigger [esphome#8498](https://github.com/esphome/esphome/pull/8498) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Make line points templatable [esphome#8502](https://github.com/esphome/esphome/pull/8502) by [@clydebarrow](https://github.com/clydebarrow) +- [spi] Implement octal mode [esphome#8386](https://github.com/esphome/esphome/pull/8386) by [@clydebarrow](https://github.com/clydebarrow) +- real_time_clock: Apply timezone immediately in set_timezone() [esphome#8531](https://github.com/esphome/esphome/pull/8531) by [@dwmw2](https://github.com/dwmw2) +- [lvgl] Implement canvas widget [esphome#8504](https://github.com/esphome/esphome/pull/8504) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix use of image without canvas (Bugfix) [esphome#8540](https://github.com/esphome/esphome/pull/8540) by [@clydebarrow](https://github.com/clydebarrow) +- Include MAC address in noise hello [esphome#8551](https://github.com/esphome/esphome/pull/8551) by [@bdraco](https://github.com/bdraco) +- [axs15231] Don't overwrite manual dimensions [esphome#8553](https://github.com/esphome/esphome/pull/8553) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Fix initial focus on roller [esphome#8547](https://github.com/esphome/esphome/pull/8547) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Add restore_value to select and number [esphome#8494](https://github.com/esphome/esphome/pull/8494) by [@clydebarrow](https://github.com/clydebarrow) +- Speaker-Media-Player: Fix potential deadlock in audio pipeline [esphome#8548](https://github.com/esphome/esphome/pull/8548) by [@gnumpi](https://github.com/gnumpi) +- [lvgl] Ensure captured lambdas are in correct order [esphome#8560](https://github.com/esphome/esphome/pull/8560) by [@clydebarrow](https://github.com/clydebarrow) +- Bump esphome-dashboard to 20250415.0 [esphome#8565](https://github.com/esphome/esphome/pull/8565) by [@swoboda1337](https://github.com/swoboda1337) +- Fix '--device MQTT' for devices with static IP [esphome#8535](https://github.com/esphome/esphome/pull/8535) by [@dwmw2](https://github.com/dwmw2) +- [am2315c] Use warning not fail during update [esphome#8499](https://github.com/esphome/esphome/pull/8499) by [@swoboda1337](https://github.com/swoboda1337) +- Fix vscode validation not showing error squiggles [esphome#8500](https://github.com/esphome/esphome/pull/8500) by [@glmnet](https://github.com/glmnet) +- SML runtime optimizations [esphome#8571](https://github.com/esphome/esphome/pull/8571) by [@mariusgreuel](https://github.com/mariusgreuel) + + +
    + +### Dependency Changes + +
    + + + + +- Bump setuptools from 69.2.0 to 76.0.0 [esphome#8405](https://github.com/esphome/esphome/pull/8405) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump puremagic from 1.27 to 1.28 [esphome#8406](https://github.com/esphome/esphome/pull/8406) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esphome-glyphsets from 0.1.0 to 0.2.0 [esphome#8403](https://github.com/esphome/esphome/pull/8403) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.2.2 to 4.2.3 in /.github/actions/restore-python [esphome#8437](https://github.com/esphome/esphome/pull/8437) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.2.2 to 4.2.3 [esphome#8433](https://github.com/esphome/esphome/pull/8433) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.9.2 to 0.11.0 [esphome#8409](https://github.com/esphome/esphome/pull/8409) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 3.2.7 to 3.3.6 [esphome#8441](https://github.com/esphome/esphome/pull/8441) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update wheel requirement from \~=0.43.0 to \>=0.43,\<0.46 [esphome#8421](https://github.com/esphome/esphome/pull/8421) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tzlocal from 5.2 to 5.3.1 [esphome#8423](https://github.com/esphome/esphome/pull/8423) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 29.6.0 to 29.7.0 [esphome#8448](https://github.com/esphome/esphome/pull/8448) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.23.6 to 0.25.3 [esphome#8447](https://github.com/esphome/esphome/pull/8447) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.0 to 0.11.2 [esphome#8461](https://github.com/esphome/esphome/pull/8461) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.4.0 to 5.5.0 [esphome#8468](https://github.com/esphome/esphome/pull/8468) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.4.0 to 5.5.0 in /.github/actions/restore-python [esphome#8467](https://github.com/esphome/esphome/pull/8467) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-cov from 5.0.0 to 6.0.0 [esphome#8462](https://github.com/esphome/esphome/pull/8462) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.25.3 to 0.26.0 [esphome#8490](https://github.com/esphome/esphome/pull/8490) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump async-timeout from 4.0.3 to 5.0.1 [esphome#8491](https://github.com/esphome/esphome/pull/8491) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump platformio from 6.1.16 to 6.1.18 [esphome#8449](https://github.com/esphome/esphome/pull/8449) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump peter-evans/create-pull-request from 7.0.7 to 7.0.8 [esphome#8362](https://github.com/esphome/esphome/pull/8362) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/login-action from 3.3.0 to 3.4.0 in the docker-actions group [esphome#8408](https://github.com/esphome/esphome/pull/8408) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/download-artifact from 4.1.9 to 4.2.1 [esphome#8434](https://github.com/esphome/esphome/pull/8434) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/upload-artifact from 4.6.1 to 4.6.2 [esphome#8435](https://github.com/esphome/esphome/pull/8435) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruamel-yaml from 0.18.6 to 0.18.10 [esphome#8446](https://github.com/esphome/esphome/pull/8446) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump yamllint from 1.35.1 to 1.37.0 [esphome#8495](https://github.com/esphome/esphome/pull/8495) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.15.2 to 3.19.1 [esphome#8496](https://github.com/esphome/esphome/pull/8496) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump voluptuous from 0.14.2 to 0.15.2 [esphome#8506](https://github.com/esphome/esphome/pull/8506) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.146.1 to 0.146.3 [esphome#8507](https://github.com/esphome/esphome/pull/8507) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 76.0.0 to 78.1.0 [esphome#8512](https://github.com/esphome/esphome/pull/8512) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump flake8 from 7.0.0 to 7.2.0 [esphome#8493](https://github.com/esphome/esphome/pull/8493) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 8.2.0 to 8.3.5 [esphome#8528](https://github.com/esphome/esphome/pull/8528) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 29.9.0 to 29.10.0 [esphome#8562](https://github.com/esphome/esphome/pull/8562) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.146.3 to 0.146.4 [esphome#8563](https://github.com/esphome/esphome/pull/8563) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.146.4 to 0.146.5 [esphome#8569](https://github.com/esphome/esphome/pull/8569) by [@dependabot[bot]](https://github.com/dependabot[bot]) + + +
    + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.5.0.mdx b/src/content/docs/changelog/2025.5.0.mdx new file mode 100644 index 0000000000..fbbf09cb39 --- /dev/null +++ b/src/content/docs/changelog/2025.5.0.mdx @@ -0,0 +1,419 @@ +--- +description: "Changelog for ESPHome 2025.5.0." +title: "ESPHome 2025.5.0 - 21st May 2025" +pagefind: false +slug: "changelog/2025.5.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Voice Assistant + +raw:: html +Home Assistant Voice Preview Edition is +Home Assistant's first official voice assistant hardware. +It was designed from the ground up to give the best experience possible with Assist, +Home Assistant's built-in voice assistant software. With advanced mics and audio processing, +it can run fully locally in the home. Voice Preview Edition was built to run ESPHome, +and like any ESPHome device, can be fully customized. + +We have implemented all of the new features developed for the Voice Preview Edition! +The voice assistant component supports starting conversations from Home Assistant and +continuing conversations without needing to reactivate the wake word. +Additionally, microWakeWord supports enabling and disabling models via yaml actions. +The voice assistant component, through Home Assistant, can also change the active +on-device wake word. If you use our prebuilt voice assistant firmwares, then you +will receive an update notification automatically in Home Assistant adding support +for these new features! + +If you have taken control or created your own voice assistant configuration, you may +need to adjust them to support these new features. Please see the newly updated +examples in our wake word voice assistant firmware repository to get started. + +If you have taken control of your Home Assistant Voice PE and want to get all of the +new changes and don't want to continue managing your own YAML file, you can re-install +the latest firmware from the raw:: html +web installer. We also provide +OTA updates for the device that you can directly install from within Home Assistant. + +It is now easier to configure and use microphones. Multiple components can +simultaneously read from one microphone. Each individual component using a microphone +can also set their own specific gain level or specify which microphone channel to use. +Microphone settings are validated at compilation, and most settings are converted, +if necessary, without any extra configuration. Your existing YAML files should still +build without any adjustments. However, if your microphone was previously configured +to use 32 bits per sample, then you should add a gain factor of 4 to match +ESPHome's previous behavior. For example: + +```yaml +voice_assistant: + microphone: + microphone: echo_microphone + gain_factor: 4 +``` + +## Packet Transport + +The [Packet Transport](/components/packet_transport/) has been added to allow ESPHome devices to directly communicate +with each other. There are two platforms available in this release: [Uart](/components/packet_transport/uart/) +and [Udp](/components/packet_transport/udp/). + +## HTTP Request + +The [Http Request](/components/http_request/) actions have had the `headers` config variable renamed to +`request_headers` in order to differentiate it from the new `collect_headers` config variable allowing you to collect +and access the response headers in automations. + +## ATM90E32 + +For energy meters that use the [atm90e32](/components/sensor/atm90e32/) energy metering chip, like +from CircuitSetup, and Gelidus Research, support was added for semi-automatic gain & offset calibration, and status +messages for each phase & frequency. An apparent power sensor was also added. + +{/* markdownlint-disable MD013 */} + +## Release 2025.5.1 - May 27 + +- [core] Add some missing includes [esphome#8864](https://github.com/esphome/esphome/pull/8864) by [@jesserockz](https://github.com/jesserockz) +- [tuya_select] - Fix datapoint config error. [esphome#8871](https://github.com/esphome/esphome/pull/8871) by [@Cossid](https://github.com/Cossid) +- [online_image] Allocate pngle manually to potentially use psram [esphome#8354](https://github.com/esphome/esphome/pull/8354) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Improve error messages from text validation [esphome#8872](https://github.com/esphome/esphome/pull/8872) by [@clydebarrow](https://github.com/clydebarrow) +- [micro_wake_word] avoid duplicated detections from same event [esphome#8877](https://github.com/esphome/esphome/pull/8877) by [@kahrendt](https://github.com/kahrendt) +- [speaker] ensure the pipeline returns an error state before returning its stopped [esphome#8878](https://github.com/esphome/esphome/pull/8878) by [@kahrendt](https://github.com/kahrendt) +- [logger] Fix options in select [esphome#8875](https://github.com/esphome/esphome/pull/8875) by [@jesserockz](https://github.com/jesserockz) +- [esp32] Fix building on IDF 4 [esphome#8892](https://github.com/esphome/esphome/pull/8892) by [@kbx81](https://github.com/kbx81) +- [api] Fix crash with gcc compiler on host [esphome#8902](https://github.com/esphome/esphome/pull/8902) by [@jesserockz](https://github.com/jesserockz) +- [web_server] Fix download list where external_components has a substitution value [esphome#8911](https://github.com/esphome/esphome/pull/8911) by [@jesserockz](https://github.com/jesserockz) + +## Release 2025.5.2 - June 3 + +- [i2s-audio] ensure mic task isn't pinned to a core [esphome#8879](https://github.com/esphome/esphome/pull/8879) by [@kahrendt](https://github.com/kahrendt) +- [rp2040] use low-level control for ISR gpio and add IRAM_ATTR [esphome#8950](https://github.com/esphome/esphome/pull/8950) by [@ssieb](https://github.com/ssieb) +- [esp8266] fix isr pin [esphome#8981](https://github.com/esphome/esphome/pull/8981) by [@ssieb](https://github.com/ssieb) +- [debug] Make sensors work without logger debug level [esphome#8980](https://github.com/esphome/esphome/pull/8980) by [@clydebarrow](https://github.com/clydebarrow) +- Fix logger stack overflow [esphome#8988](https://github.com/esphome/esphome/pull/8988) by [@bdraco](https://github.com/bdraco) + +## Full list of changes + +### New Components + +- Add CUBIC PM2005/PM2105 Laser Particle Sensor Module [esphome#8292](https://github.com/esphome/esphome/pull/8292) by [@andrewjswan](https://github.com/andrewjswan) (new-integration) +- [mapping] Implement yaml-configured maps [esphome#8333](https://github.com/esphome/esphome/pull/8333) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [const] Create component-level const repository [esphome#8385](https://github.com/esphome/esphome/pull/8385) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [packet_transport] Extract packet encoding functionality [esphome#8187](https://github.com/esphome/esphome/pull/8187) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) (breaking-change) +- [uart] Add packet_transport platform [esphome#8214](https://github.com/esphome/esphome/pull/8214) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [syslog] Implement logging via syslog [esphome#8637](https://github.com/esphome/esphome/pull/8637) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [sound_level] Add a new sound level sensor [esphome#8737](https://github.com/esphome/esphome/pull/8737) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [mipi_spi] New display driver for MIPI DBI devices [esphome#8383](https://github.com/esphome/esphome/pull/8383) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) + +### New Platforms + +- [cst226] Add support for cst226 binary sensor [esphome#8381](https://github.com/esphome/esphome/pull/8381) by [@clydebarrow](https://github.com/clydebarrow) (new-platform) +- ATM90E32 Semi-automatic calibration & Status fields [esphome#8529](https://github.com/esphome/esphome/pull/8529) by [@CircuitSetup](https://github.com/CircuitSetup) (new-platform) (breaking-change) + +### Breaking Changes + +- [http_request] Ability to get response headers [esphome#8224](https://github.com/esphome/esphome/pull/8224) by [@candrews](https://github.com/candrews) (breaking-change) +- [i2s_audio, microphone, micro_wake_word, voice_assistant] Use microphone source to process incoming audio [esphome#8645](https://github.com/esphome/esphome/pull/8645) by [@kahrendt](https://github.com/kahrendt) (breaking-change) +- [packet_transport] Extract packet encoding functionality [esphome#8187](https://github.com/esphome/esphome/pull/8187) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) (breaking-change) +- ATM90E32 Semi-automatic calibration & Status fields [esphome#8529](https://github.com/esphome/esphome/pull/8529) by [@CircuitSetup](https://github.com/CircuitSetup) (new-integration) (breaking-change) + +### Beta Changes + +
    + + + + +- [media_player] Deprecate `MEDIA_PLAYER_SCHEMA` [esphome#8784](https://github.com/esphome/esphome/pull/8784) by [@jesserockz](https://github.com/jesserockz) +- [schema] Get component name if available for deprecation warning [esphome#8785](https://github.com/esphome/esphome/pull/8785) by [@jesserockz](https://github.com/jesserockz) +- [fan] Update components to use `fan_schema(...)` [esphome#8786](https://github.com/esphome/esphome/pull/8786) by [@jesserockz](https://github.com/jesserockz) +- Improve batching of BLE advertisements for better airtime efficiency [esphome#8778](https://github.com/esphome/esphome/pull/8778) by [@bdraco](https://github.com/bdraco) +- Fix release to pypi [esphome#8789](https://github.com/esphome/esphome/pull/8789) by [@jesserockz](https://github.com/jesserockz) +- [climate] Update components to use `climate_schema(...)` [esphome#8788](https://github.com/esphome/esphome/pull/8788) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20250514.0 [esphome#8790](https://github.com/esphome/esphome/pull/8790) by [@jesserockz](https://github.com/jesserockz) +- Avoid protobuf message construction when tx buffer is full [esphome#8787](https://github.com/esphome/esphome/pull/8787) by [@bdraco](https://github.com/bdraco) +- Update some sensor schemas to be Optional [esphome#8803](https://github.com/esphome/esphome/pull/8803) by [@jesserockz](https://github.com/jesserockz) +- Use fixed buffer for plaintext protocol like noise protocol [esphome#8800](https://github.com/esphome/esphome/pull/8800) by [@bdraco](https://github.com/bdraco) +- Optimize protobuf varint decoder for ESPHome use case [esphome#8791](https://github.com/esphome/esphome/pull/8791) by [@bdraco](https://github.com/bdraco) +- Logger Recursion Guard per Task on ESP32 [esphome#8765](https://github.com/esphome/esphome/pull/8765) by [@bdraco](https://github.com/bdraco) +- [log] improve/refactor `log` [esphome#8708](https://github.com/esphome/esphome/pull/8708) by [@ximex](https://github.com/ximex) +- [gps] update lib, improve code/tests/config [esphome#8768](https://github.com/esphome/esphome/pull/8768) by [@ximex](https://github.com/ximex) +- Fix ESP32 Camera class inheritance [esphome#8811](https://github.com/esphome/esphome/pull/8811) by [@bdraco](https://github.com/bdraco) +- [sen5x] Fix validation for values read from hardware [esphome#8769](https://github.com/esphome/esphome/pull/8769) by [@kbx81](https://github.com/kbx81) +- Fix the case of single error [esphome#8824](https://github.com/esphome/esphome/pull/8824) by [@asergunov](https://github.com/asergunov) +- Revert "[binary_sensor] initial state refactor" [esphome#8828](https://github.com/esphome/esphome/pull/8828) by [@clydebarrow](https://github.com/clydebarrow) +- Fix misspelling of climate in climate_ir.climate_ir_with_receiver_schema [esphome#8829](https://github.com/esphome/esphome/pull/8829) by [@warthog618](https://github.com/warthog618) +- Fix ESP32 console logging corruption and message loss in multi-task [esphome#8806](https://github.com/esphome/esphome/pull/8806) by [@bdraco](https://github.com/bdraco) +- Reduce number of calls to fetch time in the main loop [esphome#8804](https://github.com/esphome/esphome/pull/8804) by [@bdraco](https://github.com/bdraco) +- Refactor API frame helpers to enable buffer reuse [esphome#8825](https://github.com/esphome/esphome/pull/8825) by [@bdraco](https://github.com/bdraco) +- Bump docker/build-push-action from 6.16.0 to 6.17.0 in /.github/actions/build-image [esphome#8810](https://github.com/esphome/esphome/pull/8810) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Update esp32-camera library version [esphome#8832](https://github.com/esphome/esphome/pull/8832) by [@Fexiven](https://github.com/Fexiven) +- Fix api doc homepage [esphome#8836](https://github.com/esphome/esphome/pull/8836) by [@jesserockz](https://github.com/jesserockz) +- Deploy doxygen docs to netlify [esphome#8837](https://github.com/esphome/esphome/pull/8837) by [@jesserockz](https://github.com/jesserockz) +- [release] Fix output value [esphome#8839](https://github.com/esphome/esphome/pull/8839) by [@jesserockz](https://github.com/jesserockz) +- [release] Don't wait for docker to be finished before deploying schema [esphome#8838](https://github.com/esphome/esphome/pull/8838) by [@jesserockz](https://github.com/jesserockz) +- Fix API connection sending ping too early after connection establishment [esphome#8840](https://github.com/esphome/esphome/pull/8840) by [@bdraco](https://github.com/bdraco) +- Fix ethernet connection timeout issue caused by incorrect time value during setup [esphome#8841](https://github.com/esphome/esphome/pull/8841) by [@bdraco](https://github.com/bdraco) +- [docker] Update pip on build [esphome#8835](https://github.com/esphome/esphome/pull/8835) by [@jesserockz](https://github.com/jesserockz) +- [api-docs] Run using netlify builders [esphome#8842](https://github.com/esphome/esphome/pull/8842) by [@jesserockz](https://github.com/jesserockz) +- Fix #ifdefs [esphome#8853](https://github.com/esphome/esphome/pull/8853) by [@clydebarrow](https://github.com/clydebarrow) +- [at581x] Fix issue with methods not being public [esphome#8852](https://github.com/esphome/esphome/pull/8852) by [@gpambrozio](https://github.com/gpambrozio) +- [api-docs] Move netlify.toml to root [esphome#8861](https://github.com/esphome/esphome/pull/8861) by [@jesserockz](https://github.com/jesserockz) + + +
    + +### All changes + +
    + + + + +- [esp32] Allow pioarduino version 5.3.3 and 5.5.0 [esphome#8526](https://github.com/esphome/esphome/pull/8526) by [@swoboda1337](https://github.com/swoboda1337) +- Update setup to make .temp directory [esphome#8558](https://github.com/esphome/esphome/pull/8558) by [@calumapplepie](https://github.com/calumapplepie) +- [core] make require_framework_version generic [esphome#8412](https://github.com/esphome/esphome/pull/8412) by [@tomaszduda23](https://github.com/tomaszduda23) +- Add support for Waveshare 5.65" ACeP 7-Color display [esphome#8557](https://github.com/esphome/esphome/pull/8557) by [@nhjschulz](https://github.com/nhjschulz) +- [ci] Pin codecov action to v5.4.0 [esphome#8564](https://github.com/esphome/esphome/pull/8564) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Small buffers in internal RAM [esphome#8523](https://github.com/esphome/esphome/pull/8523) by [@clydebarrow](https://github.com/clydebarrow) +- Use python3 in place of python, as some systems don't emulate the former [esphome#8568](https://github.com/esphome/esphome/pull/8568) by [@calumapplepie](https://github.com/calumapplepie) +- Add typing to protobuf code generator [esphome#8541](https://github.com/esphome/esphome/pull/8541) by [@bdraco](https://github.com/bdraco) +- fix typo `USE_ESP32_VARIANT_ESP32H6` [esphome#8580](https://github.com/esphome/esphome/pull/8580) by [@ximex](https://github.com/ximex) +- [prometheus] Add climate metrics [esphome#8247](https://github.com/esphome/esphome/pull/8247) by [@jzucker2](https://github.com/jzucker2) +- [api] Allow noise encryption key to be set at runtime [esphome#7296](https://github.com/esphome/esphome/pull/7296) by [@kbx81](https://github.com/kbx81) +- [esp32_rmt_led_strip] Add use_dma option [esphome#8270](https://github.com/esphome/esphome/pull/8270) by [@swoboda1337](https://github.com/swoboda1337) +- Add CUBIC PM2005/PM2105 Laser Particle Sensor Module [esphome#8292](https://github.com/esphome/esphome/pull/8292) by [@andrewjswan](https://github.com/andrewjswan) (new-integration) +- [uptime] Add format config for text_sensor [esphome#8304](https://github.com/esphome/esphome/pull/8304) by [@clydebarrow](https://github.com/clydebarrow) +- [mapping] Implement yaml-configured maps [esphome#8333](https://github.com/esphome/esphome/pull/8333) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [analog_threshold] Make thresholds templatable [esphome#8452](https://github.com/esphome/esphome/pull/8452) by [@clydebarrow](https://github.com/clydebarrow) +- [internal_temperature] Add p4 ifdefs [esphome#8484](https://github.com/esphome/esphome/pull/8484) by [@swoboda1337](https://github.com/swoboda1337) +- Sort resolved IP addresses for dashboard [esphome#8536](https://github.com/esphome/esphome/pull/8536) by [@dwmw2](https://github.com/dwmw2) +- Remove duplicate co2 and pressure constants [esphome#8583](https://github.com/esphome/esphome/pull/8583) by [@mgiacomelli](https://github.com/mgiacomelli) +- [remote_receiver] Filtering fixes [esphome#7777](https://github.com/esphome/esphome/pull/7777) by [@swoboda1337](https://github.com/swoboda1337) +- [psram] Add version check to fix 5.3.2 [esphome#8588](https://github.com/esphome/esphome/pull/8588) by [@swoboda1337](https://github.com/swoboda1337) +- Bump esp-idf to 5.1.6 [esphome#8566](https://github.com/esphome/esphome/pull/8566) by [@bdraco](https://github.com/bdraco) +- Update const.py - Add UNIT_MEGAJOULE = "MJ" [esphome#8594](https://github.com/esphome/esphome/pull/8594) by [@Roving-Ronin](https://github.com/Roving-Ronin) +- Implement `min_power` for component `ac_dimmer` using method `trailing` [esphome#8472](https://github.com/esphome/esphome/pull/8472) by [@VasilKalchev](https://github.com/VasilKalchev) +- Rewrite BLE scanner to use a state machine [esphome#8601](https://github.com/esphome/esphome/pull/8601) by [@bdraco](https://github.com/bdraco) +- [http_request] Ability to get response headers [esphome#8224](https://github.com/esphome/esphome/pull/8224) by [@candrews](https://github.com/candrews) (breaking-change) +- [sht4x] Reduce warn spam, added communication check in setup [esphome#8250](https://github.com/esphome/esphome/pull/8250) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- Schema gen action [esphome#8593](https://github.com/esphome/esphome/pull/8593) by [@glmnet](https://github.com/glmnet) +- [i2s_audio, i2s_audio_microphone, i2s_audio_speaker] Add basic support for new esp-idf 5.x.x i2s driver. [esphome#8181](https://github.com/esphome/esphome/pull/8181) by [@luar123](https://github.com/luar123) +- fix schema-gen-ci failures [esphome#8621](https://github.com/esphome/esphome/pull/8621) by [@glmnet](https://github.com/glmnet) +- replace `http` with `https` [esphome#8628](https://github.com/esphome/esphome/pull/8628) by [@ximex](https://github.com/ximex) +- [docker] Use new base container image [esphome#8582](https://github.com/esphome/esphome/pull/8582) by [@jesserockz](https://github.com/jesserockz) +- [i2s_audio] Microphone reads in loop for callbacks shouldn't ever delay [esphome#8625](https://github.com/esphome/esphome/pull/8625) by [@kahrendt](https://github.com/kahrendt) +- [micro_wake_word] Use microphone callback and avoid unnecessary allocation attempts [esphome#8626](https://github.com/esphome/esphome/pull/8626) by [@kahrendt](https://github.com/kahrendt) +- [voice_assisant] support start/continue conversation and deallocate buffers [esphome#8610](https://github.com/esphome/esphome/pull/8610) by [@kahrendt](https://github.com/kahrendt) +- [voice_assistant] Use mic callback and remove esp_adf code [esphome#8627](https://github.com/esphome/esphome/pull/8627) by [@kahrendt](https://github.com/kahrendt) +- [const] Create component-level const repository [esphome#8385](https://github.com/esphome/esphome/pull/8385) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [http_request] Implement for host platform [esphome#8040](https://github.com/esphome/esphome/pull/8040) by [@clydebarrow](https://github.com/clydebarrow) +- Take advantage of clipping to speed image drawing. [esphome#8630](https://github.com/esphome/esphome/pull/8630) by [@lhartmann](https://github.com/lhartmann) +- [touchscreen] Clear interrupt flag before reading touch data. [esphome#8632](https://github.com/esphome/esphome/pull/8632) by [@raineth](https://github.com/raineth) +- [mdns] Support templatable config options for MDNS extra services [esphome#8606](https://github.com/esphome/esphome/pull/8606) by [@heythisisnate](https://github.com/heythisisnate) +- Fix support for ESP32-H2 in deep_sleep [esphome#8290](https://github.com/esphome/esphome/pull/8290) by [@baal86](https://github.com/baal86) +- [const] Move CONF_GAIN_FACTOR to const.py [esphome#8646](https://github.com/esphome/esphome/pull/8646) by [@jesserockz](https://github.com/jesserockz) +- [http_request] Fix request headers [esphome#8644](https://github.com/esphome/esphome/pull/8644) by [@jesserockz](https://github.com/jesserockz) +- add beo4_protocol to remote_base component [esphome#8307](https://github.com/esphome/esphome/pull/8307) by [@aanban](https://github.com/aanban) +- Ensure new const file stays in order [esphome#8642](https://github.com/esphome/esphome/pull/8642) by [@jesserockz](https://github.com/jesserockz) +- [audio, microphone] Add MicrophoneSource helper class [esphome#8641](https://github.com/esphome/esphome/pull/8641) by [@kahrendt](https://github.com/kahrendt) +- [pmsx003] Refactor Imports, Extract Constants, Improve Data Handling & Logging [esphome#8344](https://github.com/esphome/esphome/pull/8344) by [@ximex](https://github.com/ximex) +- Add code to send/receive GoBox infrared control messages. [esphome#7554](https://github.com/esphome/esphome/pull/7554) by [@cvwillegen](https://github.com/cvwillegen) +- [bluetooth_proxy] Allow changing active/passive via api [esphome#8649](https://github.com/esphome/esphome/pull/8649) by [@jesserockz](https://github.com/jesserockz) +- [pmsa003i] code improvements [esphome#8485](https://github.com/esphome/esphome/pull/8485) by [@ximex](https://github.com/ximex) +- [adc] sort variants and add links to reference implementations [esphome#8327](https://github.com/esphome/esphome/pull/8327) by [@ximex](https://github.com/ximex) +- [i2s_audio, microphone, micro_wake_word, voice_assistant] Use microphone source to process incoming audio [esphome#8645](https://github.com/esphome/esphome/pull/8645) by [@kahrendt](https://github.com/kahrendt) (breaking-change) +- [debug] Fix compile errors when using the ESP32-C2 [esphome#7474](https://github.com/esphome/esphome/pull/7474) by [@d51x](https://github.com/d51x) +- [canbus] Add callback for use by other components [esphome#8578](https://github.com/esphome/esphome/pull/8578) by [@clydebarrow](https://github.com/clydebarrow) +- [i2s_audio] Move microphone reads into a task [esphome#8651](https://github.com/esphome/esphome/pull/8651) by [@kahrendt](https://github.com/kahrendt) +- Only warn if the component blocked for a longer time than the last time [esphome#8064](https://github.com/esphome/esphome/pull/8064) by [@numo68](https://github.com/numo68) +- [micro_wake_word] add new VPE features [esphome#8655](https://github.com/esphome/esphome/pull/8655) by [@kahrendt](https://github.com/kahrendt) +- [microphone] Bugfix: protect against starting mic if already started [esphome#8656](https://github.com/esphome/esphome/pull/8656) by [@kahrendt](https://github.com/kahrendt) +- Bump FastLed version to 3.9.16 [esphome#8402](https://github.com/esphome/esphome/pull/8402) by [@andrewjswan](https://github.com/andrewjswan) +- [gree] Add support for YAG remotes [esphome#7418](https://github.com/esphome/esphome/pull/7418) by [@sarthurdev](https://github.com/sarthurdev) +- Add a function to return the I2C address from an I2CDevice object [esphome#8454](https://github.com/esphome/esphome/pull/8454) by [@ilikecake](https://github.com/ilikecake) +- Fix second scrolling run ussue [esphome#8347](https://github.com/esphome/esphome/pull/8347) by [@asergunov](https://github.com/asergunov) +- [alarm_control_panel] Allow sensor to trigger when alarm disarmed [esphome#7746](https://github.com/esphome/esphome/pull/7746) by [@nworbneb](https://github.com/nworbneb) +- Component pca9685 - phase_begin always set to zero [esphome#8379](https://github.com/esphome/esphome/pull/8379) by [@uae007](https://github.com/uae007) +- [remote_base] Fix compile error on IDF [esphome#8664](https://github.com/esphome/esphome/pull/8664) by [@kbx81](https://github.com/kbx81) +- [defines] Fix USE_MICRO_WAKE_WORD position [esphome#8663](https://github.com/esphome/esphome/pull/8663) by [@jesserockz](https://github.com/jesserockz) +- Adding timing budget support for vl53l0x [esphome#7991](https://github.com/esphome/esphome/pull/7991) by [@lastradanet](https://github.com/lastradanet) +- Daikin IR Climate Remote Target Temperature and Fan Modes [esphome#7946](https://github.com/esphome/esphome/pull/7946) by [@bcpearce](https://github.com/bcpearce) +- [i2c] Allow buffers in PSRAM [esphome#8640](https://github.com/esphome/esphome/pull/8640) by [@clydebarrow](https://github.com/clydebarrow) +- Fix CONFIG_LWIP_TCP_RCV_SCALE and CONFIG_TCP_WND_DEFAULT [esphome#8425](https://github.com/esphome/esphome/pull/8425) by [@rwrozelle](https://github.com/rwrozelle) +- support self-signed cert in mqtt [esphome#8650](https://github.com/esphome/esphome/pull/8650) by [@scaiper](https://github.com/scaiper) +- [binary_sensor] initial state refactor [esphome#8648](https://github.com/esphome/esphome/pull/8648) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- Add to_ntc_resistance|temperature sensor filter (esphome/feature-requests#2967) [esphome#7898](https://github.com/esphome/esphome/pull/7898) by [@rhabacker](https://github.com/rhabacker) +- [esp32, debug] Add `cpu_frequency` config option and debug sensor [esphome#8542](https://github.com/esphome/esphome/pull/8542) by [@clydebarrow](https://github.com/clydebarrow) +- [voice_assistant] voice assistant can configure enabled wake words [esphome#8657](https://github.com/esphome/esphome/pull/8657) by [@kahrendt](https://github.com/kahrendt) +- [mlx90393] Add verification for register contents [esphome#8279](https://github.com/esphome/esphome/pull/8279) by [@functionpointer](https://github.com/functionpointer) +- Check for missed pulse_meter ISRs in the main loop [esphome#6126](https://github.com/esphome/esphome/pull/6126) by [@TrentHouliston](https://github.com/TrentHouliston) +- [debug] add missing header [esphome#8666](https://github.com/esphome/esphome/pull/8666) by [@kahrendt](https://github.com/kahrendt) +- [microphone] Add software mute and fix wrong type for automations [esphome#8667](https://github.com/esphome/esphome/pull/8667) by [@kahrendt](https://github.com/kahrendt) +- [micro_wake_word] Clarify spectrogram features calculation [esphome#8669](https://github.com/esphome/esphome/pull/8669) by [@kahrendt](https://github.com/kahrendt) +- Add UNIT_MILLIVOLT [esphome#8665](https://github.com/esphome/esphome/pull/8665) by [@DJTerentjev](https://github.com/DJTerentjev) +- Added Banking support to tca9555, fixed input bug [esphome#8003](https://github.com/esphome/esphome/pull/8003) by [@mobrembski](https://github.com/mobrembski) +- Add GDEY0583T81 support [esphome#8668](https://github.com/esphome/esphome/pull/8668) by [@myllyja](https://github.com/myllyja) +- [climate] Fix typo and use `this->` [esphome#8678](https://github.com/esphome/esphome/pull/8678) by [@ximex](https://github.com/ximex) +- Add CONF_CONTINUOUS to const.py [esphome#8682](https://github.com/esphome/esphome/pull/8682) by [@ilikecake](https://github.com/ilikecake) +- unify lowercase `x` in hexadecimal values [esphome#8686](https://github.com/esphome/esphome/pull/8686) by [@ximex](https://github.com/ximex) +- [climate_ir_lg] use `this->` [esphome#8687](https://github.com/esphome/esphome/pull/8687) by [@ximex](https://github.com/ximex) +- [packet_transport] Extract packet encoding functionality [esphome#8187](https://github.com/esphome/esphome/pull/8187) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) (breaking-change) +- [esp32_ble_server] Add appearance advertising field [esphome#8672](https://github.com/esphome/esphome/pull/8672) by [@clydebarrow](https://github.com/clydebarrow) +- [packages] Allow list instead of dict for packages [esphome#8688](https://github.com/esphome/esphome/pull/8688) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Add refresh action to re-evaluate initial widget properties [esphome#8675](https://github.com/esphome/esphome/pull/8675) by [@clydebarrow](https://github.com/clydebarrow) +- [image] Support the other Pictogrammers icon sets `memory:` and `mdil:` [esphome#8676](https://github.com/esphome/esphome/pull/8676) by [@clydebarrow](https://github.com/clydebarrow) +- [uart] Add packet_transport platform [esphome#8214](https://github.com/esphome/esphome/pull/8214) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [debug] Show source of last software reboot [esphome#8595](https://github.com/esphome/esphome/pull/8595) by [@clydebarrow](https://github.com/clydebarrow) +- [syslog] Implement logging via syslog [esphome#8637](https://github.com/esphome/esphome/pull/8637) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [cst226] Add support for cst226 binary sensor [esphome#8381](https://github.com/esphome/esphome/pull/8381) by [@clydebarrow](https://github.com/clydebarrow) (new-platform) +- [nextion] Adds a command pacer with `command_spacing` attribute [esphome#7948](https://github.com/esphome/esphome/pull/7948) by [@edwardtfn](https://github.com/edwardtfn) +- [arduino] Always include Arduino.h for Arduino [esphome#8693](https://github.com/esphome/esphome/pull/8693) by [@clydebarrow](https://github.com/clydebarrow) +- [audio, microphone] Quantization Improvements [esphome#8695](https://github.com/esphome/esphome/pull/8695) by [@kahrendt](https://github.com/kahrendt) +- [micro_wake_word] Experimental cutoff adjustments and uses mic sample rate [esphome#8702](https://github.com/esphome/esphome/pull/8702) by [@kahrendt](https://github.com/kahrendt) +- [mics_4514] Add default device class to CO sensor [esphome#8710](https://github.com/esphome/esphome/pull/8710) by [@jesserockz](https://github.com/jesserockz) +- [i2s_audio, mixer, resampler, speaker] Simplify duration played callback [esphome#8703](https://github.com/esphome/esphome/pull/8703) by [@kahrendt](https://github.com/kahrendt) +- [packet_transport] Make some arguments const [esphome#8700](https://github.com/esphome/esphome/pull/8700) by [@clydebarrow](https://github.com/clydebarrow) +- Reserve buffer space to avoid frequent realloc when generating protobuf messages [esphome#8707](https://github.com/esphome/esphome/pull/8707) by [@bdraco](https://github.com/bdraco) +- Preallocate Buffer Space for ESP32-CAM [esphome#8712](https://github.com/esphome/esphome/pull/8712) by [@bdraco](https://github.com/bdraco) +- Correct Protobuf Wire Type for `encode_fixed64` [esphome#8713](https://github.com/esphome/esphome/pull/8713) by [@bdraco](https://github.com/bdraco) +- Avoid Reallocation When Sending Logging Messages [esphome#8714](https://github.com/esphome/esphome/pull/8714) by [@bdraco](https://github.com/bdraco) +- Reserve space in the frame helper when we know in advance how much we need [esphome#8716](https://github.com/esphome/esphome/pull/8716) by [@bdraco](https://github.com/bdraco) +- Require reserve_size in create_buffer to reduce realloc overhead [esphome#8715](https://github.com/esphome/esphome/pull/8715) by [@bdraco](https://github.com/bdraco) +- [key_collector] enable/disable [esphome#8718](https://github.com/esphome/esphome/pull/8718) by [@ssieb](https://github.com/ssieb) +- Increase zeroconf timeout to 10 seconds [esphome#8670](https://github.com/esphome/esphome/pull/8670) by [@bdraco](https://github.com/bdraco) +- Consolidate `write_raw_` implementation to reduce code duplication [esphome#8717](https://github.com/esphome/esphome/pull/8717) by [@bdraco](https://github.com/bdraco) +- Improve BLE Connection Reliability by Enabling Software Coexistence [esphome#8683](https://github.com/esphome/esphome/pull/8683) by [@bdraco](https://github.com/bdraco) +- Optimize bluetooth_proxy memory copy and reduce reallocs [esphome#8723](https://github.com/esphome/esphome/pull/8723) by [@bdraco](https://github.com/bdraco) +- ATM90E32 Semi-automatic calibration & Status fields [esphome#8529](https://github.com/esphome/esphome/pull/8529) by [@CircuitSetup](https://github.com/CircuitSetup) (new-integration) (breaking-change) +- [api] Synchronise api.proto between repos [esphome#8720](https://github.com/esphome/esphome/pull/8720) by [@jesserockz](https://github.com/jesserockz) +- [valve] Tidy up template publish action location [esphome#8731](https://github.com/esphome/esphome/pull/8731) by [@jesserockz](https://github.com/jesserockz) +- [valve] Move to use `valve_schema(..)` instead of `VALVE_SCHEMA` [esphome#8730](https://github.com/esphome/esphome/pull/8730) by [@jesserockz](https://github.com/jesserockz) +- [lock] Tidy up template publish action and lockstate locations [esphome#8729](https://github.com/esphome/esphome/pull/8729) by [@jesserockz](https://github.com/jesserockz) +- [update] Move to use `update_schema(..)` instead of `UPDATE_SCHEMA` [esphome#8726](https://github.com/esphome/esphome/pull/8726) by [@jesserockz](https://github.com/jesserockz) +- [text] Move to use `text_schema(..)` instead of `TEXT_SCHEMA` [esphome#8727](https://github.com/esphome/esphome/pull/8727) by [@jesserockz](https://github.com/jesserockz) +- [lock] Move to use `lock_schema(..)` instead of `LOCK_SCHEMA` [esphome#8728](https://github.com/esphome/esphome/pull/8728) by [@jesserockz](https://github.com/jesserockz) +- [config] Use `cv.UNDEFINED` instead of adhoc `_UNDEF` objects [esphome#8725](https://github.com/esphome/esphome/pull/8725) by [@jesserockz](https://github.com/jesserockz) +- [audio, microphone] - Allow MicrophoneSource to passively capture/optimization [esphome#8732](https://github.com/esphome/esphome/pull/8732) by [@kahrendt](https://github.com/kahrendt) +- [audio] Bump esp-audio-libs to version 1.1.4 for speed optimizations [esphome#8739](https://github.com/esphome/esphome/pull/8739) by [@kahrendt](https://github.com/kahrendt) +- [i2s_audio] Fix: Slot bit-width for ESP32 variant [esphome#8738](https://github.com/esphome/esphome/pull/8738) by [@kahrendt](https://github.com/kahrendt) +- [voice_assistant] Bugfix: Properly detect states where mic is running [esphome#8745](https://github.com/esphome/esphome/pull/8745) by [@kahrendt](https://github.com/kahrendt) +- [sound_level] Add a new sound level sensor [esphome#8737](https://github.com/esphome/esphome/pull/8737) by [@kahrendt](https://github.com/kahrendt) (new-integration) +- [one_wire][dallas_temp] adjust timings and reduce disabled interrupts [esphome#8744](https://github.com/esphome/esphome/pull/8744) by [@ssieb](https://github.com/ssieb) +- MQTT: fan direction control added [esphome#8022](https://github.com/esphome/esphome/pull/8022) by [@mbronk](https://github.com/mbronk) +- [config] Add entity schema consts with deprecation log [esphome#8747](https://github.com/esphome/esphome/pull/8747) by [@jesserockz](https://github.com/jesserockz) +- Fix ESP32 API Disconnects Caused by Concurrent Logger Writes [esphome#8736](https://github.com/esphome/esphome/pull/8736) by [@bdraco](https://github.com/bdraco) +- [vscode] provide version to editor [esphome#8752](https://github.com/esphome/esphome/pull/8752) by [@glmnet](https://github.com/glmnet) +- [i2s_audio] Correct a microphone with a DC offset signal [esphome#8751](https://github.com/esphome/esphome/pull/8751) by [@kahrendt](https://github.com/kahrendt) +- [config] Deprecate other `*_SCHEMA` constants [esphome#8748](https://github.com/esphome/esphome/pull/8748) by [@jesserockz](https://github.com/jesserockz) +- [opentherm] Update to use schema methods [esphome#8756](https://github.com/esphome/esphome/pull/8756) by [@jesserockz](https://github.com/jesserockz) +- [factory_reset] Use switch_schema method [esphome#8757](https://github.com/esphome/esphome/pull/8757) by [@jesserockz](https://github.com/jesserockz) +- [sprinkler] Use number_schema method [esphome#8759](https://github.com/esphome/esphome/pull/8759) by [@jesserockz](https://github.com/jesserockz) +- [tm1638] Use switch_schema method [esphome#8758](https://github.com/esphome/esphome/pull/8758) by [@jesserockz](https://github.com/jesserockz) +- [airthings] Remove unnecessary schema [esphome#8760](https://github.com/esphome/esphome/pull/8760) by [@jesserockz](https://github.com/jesserockz) +- [ble_client] Use text_sensor_schema method [esphome#8761](https://github.com/esphome/esphome/pull/8761) by [@jesserockz](https://github.com/jesserockz) +- [sml] Use text_sensor_schema method [esphome#8762](https://github.com/esphome/esphome/pull/8762) by [@jesserockz](https://github.com/jesserockz) +- [udp, syslog] fix clang tidy [esphome#8755](https://github.com/esphome/esphome/pull/8755) by [@tomaszduda23](https://github.com/tomaszduda23) +- Avoid iterating clients twice in the api_server loop [esphome#8733](https://github.com/esphome/esphome/pull/8733) by [@bdraco](https://github.com/bdraco) +- [clang] clang tidy support with zephyr [esphome#8352](https://github.com/esphome/esphome/pull/8352) by [@tomaszduda23](https://github.com/tomaszduda23) +- Fix missing recursion guard release on ESP8266 [esphome#8766](https://github.com/esphome/esphome/pull/8766) by [@bdraco](https://github.com/bdraco) +- [schema] Deploy schema after release workflow finished [esphome#8767](https://github.com/esphome/esphome/pull/8767) by [@jesserockz](https://github.com/jesserockz) +- [config] Deprecate more `*_SCHEMA` constants [esphome#8763](https://github.com/esphome/esphome/pull/8763) by [@jesserockz](https://github.com/jesserockz) +- [gps] Add hdop sensor [esphome#8680](https://github.com/esphome/esphome/pull/8680) by [@realzoulou](https://github.com/realzoulou) +- In case of proto-diff show changes and archive generated [esphome#8698](https://github.com/esphome/esphome/pull/8698) by [@dala318](https://github.com/dala318) +- [climate] Fix climate_schema [esphome#8772](https://github.com/esphome/esphome/pull/8772) by [@jesserockz](https://github.com/jesserockz) +- Tuya Select - Add int_datapoint option [esphome#8393](https://github.com/esphome/esphome/pull/8393) by [@Cossid](https://github.com/Cossid) +- [select] Tidy schema generation [esphome#8775](https://github.com/esphome/esphome/pull/8775) by [@jesserockz](https://github.com/jesserockz) +- [demo] Clean up schema deprecations, add test [esphome#8771](https://github.com/esphome/esphome/pull/8771) by [@jesserockz](https://github.com/jesserockz) +- [template] Use alarm_control_panel_schema method [esphome#8764](https://github.com/esphome/esphome/pull/8764) by [@jesserockz](https://github.com/jesserockz) +- [cover] Update components to use `cover_schema(...)` [esphome#8770](https://github.com/esphome/esphome/pull/8770) by [@jesserockz](https://github.com/jesserockz) +- [switch] Fix schema generation [esphome#8774](https://github.com/esphome/esphome/pull/8774) by [@jesserockz](https://github.com/jesserockz) +- [esp32] improve `gpio` [esphome#8709](https://github.com/esphome/esphome/pull/8709) by [@ximex](https://github.com/ximex) +- [text_sensor] Fix schema generation [esphome#8773](https://github.com/esphome/esphome/pull/8773) by [@jesserockz](https://github.com/jesserockz) +- [audio] Fix: Decoder stops unnecessarily after a potential failure is detected. [esphome#8776](https://github.com/esphome/esphome/pull/8776) by [@gnumpi](https://github.com/gnumpi) +- [esp32][esp8266] use low-level pin control for ISR gpio [esphome#8743](https://github.com/esphome/esphome/pull/8743) by [@ssieb](https://github.com/ssieb) +- [online_image] Support 24 bit bmp images [esphome#8612](https://github.com/esphome/esphome/pull/8612) by [@jesserockz](https://github.com/jesserockz) +- [mipi_spi] New display driver for MIPI DBI devices [esphome#8383](https://github.com/esphome/esphome/pull/8383) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- [media_player] Deprecate `MEDIA_PLAYER_SCHEMA` [esphome#8784](https://github.com/esphome/esphome/pull/8784) by [@jesserockz](https://github.com/jesserockz) +- [schema] Get component name if available for deprecation warning [esphome#8785](https://github.com/esphome/esphome/pull/8785) by [@jesserockz](https://github.com/jesserockz) +- [fan] Update components to use `fan_schema(...)` [esphome#8786](https://github.com/esphome/esphome/pull/8786) by [@jesserockz](https://github.com/jesserockz) +- Improve batching of BLE advertisements for better airtime efficiency [esphome#8778](https://github.com/esphome/esphome/pull/8778) by [@bdraco](https://github.com/bdraco) +- Fix release to pypi [esphome#8789](https://github.com/esphome/esphome/pull/8789) by [@jesserockz](https://github.com/jesserockz) +- [climate] Update components to use `climate_schema(...)` [esphome#8788](https://github.com/esphome/esphome/pull/8788) by [@jesserockz](https://github.com/jesserockz) +- Bump esphome-dashboard to 20250514.0 [esphome#8790](https://github.com/esphome/esphome/pull/8790) by [@jesserockz](https://github.com/jesserockz) +- Avoid protobuf message construction when tx buffer is full [esphome#8787](https://github.com/esphome/esphome/pull/8787) by [@bdraco](https://github.com/bdraco) +- Update some sensor schemas to be Optional [esphome#8803](https://github.com/esphome/esphome/pull/8803) by [@jesserockz](https://github.com/jesserockz) +- Use fixed buffer for plaintext protocol like noise protocol [esphome#8800](https://github.com/esphome/esphome/pull/8800) by [@bdraco](https://github.com/bdraco) +- Optimize protobuf varint decoder for ESPHome use case [esphome#8791](https://github.com/esphome/esphome/pull/8791) by [@bdraco](https://github.com/bdraco) +- Logger Recursion Guard per Task on ESP32 [esphome#8765](https://github.com/esphome/esphome/pull/8765) by [@bdraco](https://github.com/bdraco) +- [log] improve/refactor `log` [esphome#8708](https://github.com/esphome/esphome/pull/8708) by [@ximex](https://github.com/ximex) +- [gps] update lib, improve code/tests/config [esphome#8768](https://github.com/esphome/esphome/pull/8768) by [@ximex](https://github.com/ximex) +- Fix ESP32 Camera class inheritance [esphome#8811](https://github.com/esphome/esphome/pull/8811) by [@bdraco](https://github.com/bdraco) +- [sen5x] Fix validation for values read from hardware [esphome#8769](https://github.com/esphome/esphome/pull/8769) by [@kbx81](https://github.com/kbx81) +- Fix the case of single error [esphome#8824](https://github.com/esphome/esphome/pull/8824) by [@asergunov](https://github.com/asergunov) +- Revert "[binary_sensor] initial state refactor" [esphome#8828](https://github.com/esphome/esphome/pull/8828) by [@clydebarrow](https://github.com/clydebarrow) +- Fix misspelling of climate in climate_ir.climate_ir_with_receiver_schema [esphome#8829](https://github.com/esphome/esphome/pull/8829) by [@warthog618](https://github.com/warthog618) +- Fix ESP32 console logging corruption and message loss in multi-task [esphome#8806](https://github.com/esphome/esphome/pull/8806) by [@bdraco](https://github.com/bdraco) +- Reduce number of calls to fetch time in the main loop [esphome#8804](https://github.com/esphome/esphome/pull/8804) by [@bdraco](https://github.com/bdraco) +- Refactor API frame helpers to enable buffer reuse [esphome#8825](https://github.com/esphome/esphome/pull/8825) by [@bdraco](https://github.com/bdraco) +- Update esp32-camera library version [esphome#8832](https://github.com/esphome/esphome/pull/8832) by [@Fexiven](https://github.com/Fexiven) +- Fix api doc homepage [esphome#8836](https://github.com/esphome/esphome/pull/8836) by [@jesserockz](https://github.com/jesserockz) +- Deploy doxygen docs to netlify [esphome#8837](https://github.com/esphome/esphome/pull/8837) by [@jesserockz](https://github.com/jesserockz) +- [release] Fix output value [esphome#8839](https://github.com/esphome/esphome/pull/8839) by [@jesserockz](https://github.com/jesserockz) +- [release] Don't wait for docker to be finished before deploying schema [esphome#8838](https://github.com/esphome/esphome/pull/8838) by [@jesserockz](https://github.com/jesserockz) +- Fix API connection sending ping too early after connection establishment [esphome#8840](https://github.com/esphome/esphome/pull/8840) by [@bdraco](https://github.com/bdraco) +- Fix ethernet connection timeout issue caused by incorrect time value during setup [esphome#8841](https://github.com/esphome/esphome/pull/8841) by [@bdraco](https://github.com/bdraco) +- [docker] Update pip on build [esphome#8835](https://github.com/esphome/esphome/pull/8835) by [@jesserockz](https://github.com/jesserockz) +- [api-docs] Run using netlify builders [esphome#8842](https://github.com/esphome/esphome/pull/8842) by [@jesserockz](https://github.com/jesserockz) +- Fix #ifdefs [esphome#8853](https://github.com/esphome/esphome/pull/8853) by [@clydebarrow](https://github.com/clydebarrow) +- [at581x] Fix issue with methods not being public [esphome#8852](https://github.com/esphome/esphome/pull/8852) by [@gpambrozio](https://github.com/gpambrozio) +- [api-docs] Move netlify.toml to root [esphome#8861](https://github.com/esphome/esphome/pull/8861) by [@jesserockz](https://github.com/jesserockz) + + +
    + +### Dependency Changes + +
    + + + + +- Bump ruff from 0.11.2 to 0.11.4 [esphome#8538](https://github.com/esphome/esphome/pull/8538) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-cov from 6.0.0 to 6.1.1 [esphome#8537](https://github.com/esphome/esphome/pull/8537) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.4 to 0.11.5 [esphome#8546](https://github.com/esphome/esphome/pull/8546) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump codecov/codecov-action from 5.4.0 to 5.4.2 [esphome#8572](https://github.com/esphome/esphome/pull/8572) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 29.10.0 to 30.0.1 [esphome#8579](https://github.com/esphome/esphome/pull/8579) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.5 to 0.11.6 [esphome#8587](https://github.com/esphome/esphome/pull/8587) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/download-artifact from 4.2.1 to 4.3.0 [esphome#8617](https://github.com/esphome/esphome/pull/8617) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.15.0 to 6.16.0 in /.github/actions/build-image [esphome#8619](https://github.com/esphome/esphome/pull/8619) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.6 to 0.11.7 [esphome#8615](https://github.com/esphome/esphome/pull/8615) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 78.1.0 to 79.0.1 [esphome#8614](https://github.com/esphome/esphome/pull/8614) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.5.0 to 5.6.0 [esphome#8618](https://github.com/esphome/esphome/pull/8618) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/setup-python from 5.5.0 to 5.6.0 in /.github/actions/restore-python [esphome#8616](https://github.com/esphome/esphome/pull/8616) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 79.0.1 to 80.3.1 [esphome#8696](https://github.com/esphome/esphome/pull/8696) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 30.0.1 to 30.1.0 [esphome#8652](https://github.com/esphome/esphome/pull/8652) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 3.3.6 to 3.3.7 [esphome#8706](https://github.com/esphome/esphome/pull/8706) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump yamllint from 1.37.0 to 1.37.1 [esphome#8705](https://github.com/esphome/esphome/pull/8705) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.7 to 0.11.8 [esphome#8721](https://github.com/esphome/esphome/pull/8721) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump puremagic from 1.28 to 1.29 [esphome#8722](https://github.com/esphome/esphome/pull/8722) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 30.1.0 to 30.2.0 [esphome#8734](https://github.com/esphome/esphome/pull/8734) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.8 to 0.11.9 [esphome#8735](https://github.com/esphome/esphome/pull/8735) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump zeroconf from 0.146.5 to 0.147.0 [esphome#8754](https://github.com/esphome/esphome/pull/8754) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 80.3.1 to 80.4.0 [esphome#8753](https://github.com/esphome/esphome/pull/8753) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.16.0 to 6.17.0 in /.github/actions/build-image [esphome#8810](https://github.com/esphome/esphome/pull/8810) by [@dependabot[bot]](https://github.com/dependabot[bot]) + + +
    + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.6.0.mdx b/src/content/docs/changelog/2025.6.0.mdx new file mode 100644 index 0000000000..17480f5fdc --- /dev/null +++ b/src/content/docs/changelog/2025.6.0.mdx @@ -0,0 +1,483 @@ +--- +description: "Changelog for ESPHome 2025.6.0." +title: "ESPHome 2025.6.0 - 18th June 2025" +pagefind: false +slug: "changelog/2025.6.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## ESP-IDF Updates + +### New Version: 5.3.2 + +In this release, we have updated the ESP-IDF framework to version 5.3.2. This version has been thoroughly tested +in the background by our development team and is now the default for all configurations using ESP-IDF as the framework. + +This version bump brings expanded microcontroller support. ESPHome now officially supports the following ESP32 variants: + +- **ESP32** - The original ESP32 with dual-core Xtensa LX6 +- **ESP32-C3** - Single-core RISC-V with Wi-Fi and Bluetooth 5 (LE) +- **ESP32-C6** - Single-core RISC-V with Wi-Fi 6, Bluetooth 5 (LE), and Thread/Zigbee *(new)* +- **ESP32-H2** - Single-core RISC-V with Bluetooth 5 (LE) and Thread/Zigbee *(new)* +- **ESP32-S2** - Single-core Xtensa LX7 with Wi-Fi +- **ESP32-S3** - Dual-core Xtensa LX7 with Wi-Fi and Bluetooth 5 (LE) +- **ESP32-P4** - Dual-core RISC-V high-performance variant *(new)* + +> [!NOTE] +> The newly supported variants (ESP32-C6, ESP32-H2, ESP32-P4) are still being refined. Some components may not yet +> be fully compatible with these chips. Additional component updates are planned for ESPHome 2025.7.0. +> +> They also currently only support using the ESP-IDF framework, and do not work with the Arduino framework in this +> release. +> +> Please check our [Pull Requests](https://github.com/esphome/esphome/pulls) for the latest compatibility status +> before reporting issues with these new variants. + +### ESP-IDF 4.x Support + +This release is the last release which will support ESP-IDF 4.x versions; in the July release (2025.7.0) we will bump +the default Arduino version to 3.1.3, which is now built on IDF 5.x and, as such, ESPHome will no longer require +ESP-IDF 4.x support to maintain compatibility with Arduino. Please see +[our developer blog](https://developers.esphome.io/blog/2025/06/18/sunsetting-support-for-idf-4x/) for more details. + +> [!WARNING] +> Device configurations held back on ESP-IDF 4.x are unlikely to compile with the next ESPHome release (2025.7.0). +> +> You can continue to use older versions of ESPHome, but you'll need to ensure your device configurations are using +> IDF 5.x if you wish to upgrade to 2025.7.0 or later releases of ESPHome. + +## OpenThread + +With the ESP-IDF 5.3.2 update, we've introduced basic OpenThread support for ESP-IDF based configurations. +This exciting addition enables ESP32-C6 and ESP32-H2 devices to join Thread networks, expanding your connectivity +options beyond traditional Wi-Fi and Ethernet. + +### Thread Network Integration + +Your ESPHome devices can now connect to Thread networks and communicate with Home Assistant through the +[Native API](/components/api/), provided you have: + +- Thread support enabled in Home Assistant +- An OpenThread border router configured and running on your network + +### Important Considerations + +Thread is designed as a low-power, low-bandwidth networking protocol. It's specifically optimized for: + +- IoT devices with minimal data transmission needs +- Battery-powered or energy-efficient applications +- Mesh networking scenarios + +### Current Limitations + +- ESPHome does not yet support Thread "Sleepy End Device" mode (low-power sleep functionality) +- Not recommended for applications requiring high-frequency sensor data transmission +- Best suited for simple control and monitoring use cases + +Think of Thread support as providing you with a third networking option alongside Wi-Fi and Ethernet, +particularly valuable for ESP32-C6 and ESP32-H2 deployments in mesh network environments. + +## Python 3.10 Requirement + +Starting with ESPHome 2025.6.0, **Python 3.10 or higher is required** to run ESPHome. This change enables us to: + +- Utilize modern Python features and improvements +- Remove legacy compatibility code that was needed for older Python versions +- Maintain a more secure and efficient codebase + +### Why This Change? + +Python 3.9 reaches its [end of life in October 2025](https://devguide.python.org/versions/), making this +upgrade both timely and necessary for long-term security and maintainability. + +### What You Need to Do + +| Installation Method | Action Required | +| ------------------------- | ------------------------------------------------------------------------ | +| Home Assistant Add-on | **No action needed** - Already uses Python 3.12 | +| Container Images (Docker) | **No action needed** - Already uses Python 3.12 | +| Direct Installation (pip) | Ensure Python 3.10+ is installed before running `pip install -U esphome` | + +> [!WARNING] +> If you're running ESPHome directly on your machine with Python 3.9 or older, running `pip install -U esphome` +> will not upgrade beyond version 2025.5.2. You must upgrade your Python installation first. + +## Performance Optimizations + +This release includes extensive performance improvements across multiple areas of ESPHome. Our optimization efforts +focus on three key areas: + +1. Native API Speed + Enhanced [Native API](/components/api/) performance for faster communication between ESPHome devices + and Home Assistant. + +1. Memory Footprint Reduction + Significant RAM usage optimizations to improve stability and allow for more complex configurations, + especially on memory-constrained devices. + +1. Flash Storage Efficiency + Reduced compiled firmware size, leaving more flash storage available for your applications and OTA updates. + +These optimizations are part of an ongoing effort to make ESPHome more efficient and reliable. More performance +improvements are planned for future releases. + +## BME68x BSEC2 Arduino Independence + +Great news for Bosch [BME68x BSEC2 sensor](/components/sensor/bme68x_bsec2/) users! Bosch has merged +and released a community contribution to their [BSEC2 library](https://github.com/boschsensortec/Bosch-BSEC2-Library) +that removes the Arduino framework dependency. This improvement means: + +- **Better ESP-IDF compatibility** - BME68x sensors now work seamlessly with ESP-IDF based configurations +- **Reduced dependencies** - Cleaner builds without unnecessary Arduino components +- **Improved reliability** - More stable sensor operation across different ESP32 variants + +This change makes the BME68x environmental sensors more versatile and easier to integrate into ESP-IDF projects, +continuing ESPHome's move toward framework flexibility. + +> [!NOTE] +> This change applies *only* to the [BME68x BSEC2 sensor component](/components/sensor/bme68x_bsec2/). +> It does not apply to the older, now-outdated [BME680 BSEC sensor component](/components/sensor/bme680_bsec/). + +{/* markdownlint-disable MD013 */} + +## Release 2025.6.1 - June 23 + +
    + + + + +- Eliminate memory fragmentation with BLE event pool [esphome#9101](https://github.com/esphome/esphome/pull/9101) by [@bdraco](https://github.com/bdraco) +- [nextion] Fix command spacing double timing and response blocking issues [esphome#9134](https://github.com/esphome/esphome/pull/9134) by [@edwardtfn](https://github.com/edwardtfn) +- Fix missing BLE GAP events causing RSSI sensor and beacon failures [esphome#9138](https://github.com/esphome/esphome/pull/9138) by [@bdraco](https://github.com/bdraco) +- [config validation] Add more ip address / network validators [esphome#9181](https://github.com/esphome/esphome/pull/9181) by [@jesserockz](https://github.com/jesserockz) +- Fixes for setup of OpenThread either using TLV or entering Credentials directly [esphome#9157](https://github.com/esphome/esphome/pull/9157) by [@rwrozelle](https://github.com/rwrozelle) +- Restore access to BLEScanResult as get_scan_result [esphome#9148](https://github.com/esphome/esphome/pull/9148) by [@myhomeiot](https://github.com/myhomeiot) + + +
    + +## Release 2025.6.2 - June 27 + +
    + + + + +- [lvgl] Fix dangling pointer issue with qrcode [esphome#9190](https://github.com/esphome/esphome/pull/9190) by [@clydebarrow](https://github.com/clydebarrow) +- [audio] Bugfix: improve timeout handling [esphome#9221](https://github.com/esphome/esphome/pull/9221) by [@kahrendt](https://github.com/kahrendt) +- [speaker] bugfix: continue to block tasks if stop flag is set [esphome#9222](https://github.com/esphome/esphome/pull/9222) by [@kahrendt](https://github.com/kahrendt) +- [voice_assistant] Support streaming TTS responses and fixes crash for long responses [esphome#9224](https://github.com/esphome/esphome/pull/9224) by [@kahrendt](https://github.com/kahrendt) +- [esp32] Change `enable_lwip_mdns_queries` default to `True` [esphome#9188](https://github.com/esphome/esphome/pull/9188) by [@scaiper](https://github.com/scaiper) +- [i2c] Disable i2c scan on certain idf versions [esphome#9237](https://github.com/esphome/esphome/pull/9237) by [@swoboda1337](https://github.com/swoboda1337) +- [mcp23xxx_base] fix pin interrupts [esphome#9244](https://github.com/esphome/esphome/pull/9244) by [@ssieb](https://github.com/ssieb) + + +
    + +## Release 2025.6.3 - July 3 + +
    + + + + +- [uart] fix: missing uart_config_t struct initialisation [esphome#9235](https://github.com/esphome/esphome/pull/9235) by [@Rezoran](https://github.com/Rezoran) +- Fix api log client crashing when api encryption is dynamic [esphome#9245](https://github.com/esphome/esphome/pull/9245) by [@jesserockz](https://github.com/jesserockz) +- Fix crash when event last_event_type is null in web_server [esphome#9266](https://github.com/esphome/esphome/pull/9266) by [@bdraco](https://github.com/bdraco) +- [http_request] allow retrieval of more than just the first header [esphome#9242](https://github.com/esphome/esphome/pull/9242) by [@candrews](https://github.com/candrews) + + +
    + +## Full list of changes + +### New Components + +- Add CUBIC CM1106 Single Beam NDIR CO2 Sensor Module [esphome#8293](https://github.com/esphome/esphome/pull/8293) by [@andrewjswan](https://github.com/andrewjswan) (new-integration) +- [usb_uart] Implement USB Host mode UART [esphome#8334](https://github.com/esphome/esphome/pull/8334) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Add es8388 audio_dac [esphome#8342](https://github.com/esphome/esphome/pull/8342) by [@P4uLT](https://github.com/P4uLT) (new-integration) +- [lc709203f] Add battery monitor [esphome#8037](https://github.com/esphome/esphome/pull/8037) by [@ilikecake](https://github.com/ilikecake) (new-integration) +- [esp_ldo] Implement support for ESP32-P4 LDO [esphome#9009](https://github.com/esphome/esphome/pull/9009) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Add OpenThread support on ESP-IDF [esphome#7506](https://github.com/esphome/esphome/pull/7506) by [@mrene](https://github.com/mrene) (new-integration) + +### Breaking Changes + +- update minimal python version to 3.10 [esphome#8850](https://github.com/esphome/esphome/pull/8850) by [@ximex](https://github.com/ximex) (breaking-change) +- Add LWIP optimization options to reduce flash usage [esphome#8946](https://github.com/esphome/esphome/pull/8946) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Replace API deferred queue with efficient message batching system [esphome#9012](https://github.com/esphome/esphome/pull/9012) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize Component and Application state storage from uint32_t to uint8_t [esphome#9082](https://github.com/esphome/esphome/pull/9082) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Reduce entity memory usage by eliminating field shadowing and bit-packing [esphome#9076](https://github.com/esphome/esphome/pull/9076) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize Application `area_` from `std::string` to `const char*` [esphome#9085](https://github.com/esphome/esphome/pull/9085) by [@bdraco](https://github.com/bdraco) (breaking-change) + +### Beta Changes + +
    + + + + +- Fix dashboard logging being escaped before parser [esphome#9054](https://github.com/esphome/esphome/pull/9054) by [@bdraco](https://github.com/bdraco) +- Always perform select() when loop duration exceeds interval [esphome#9058](https://github.com/esphome/esphome/pull/9058) by [@bdraco](https://github.com/bdraco) +- [nextion] Remove upload flags reset from success path to prevent TFT corruption [esphome#9064](https://github.com/esphome/esphome/pull/9064) by [@edwardtfn](https://github.com/edwardtfn) +- Fix BYPASS_AUTO feature to work with or without an arming delay [esphome#9051](https://github.com/esphome/esphome/pull/9051) by [@heythisisnate](https://github.com/heythisisnate) +- Fix misleading comment in API [esphome#9069](https://github.com/esphome/esphome/pull/9069) by [@bdraco](https://github.com/bdraco) +- [prometheus] Remove `cv.only_with_arduino` [esphome#9061](https://github.com/esphome/esphome/pull/9061) by [@jesserockz](https://github.com/jesserockz) +- [esp32] Dynamically set default framework based on variant [esphome#9060](https://github.com/esphome/esphome/pull/9060) by [@jesserockz](https://github.com/jesserockz) +- Fix `captive_portal` loading entire `web_server` [esphome#9066](https://github.com/esphome/esphome/pull/9066) by [@bdraco](https://github.com/bdraco) +- Make ParseOnOffState enum uint8_t [esphome#9083](https://github.com/esphome/esphome/pull/9083) by [@bdraco](https://github.com/bdraco) +- Optimize Component and Application state storage from uint32_t to uint8_t [esphome#9082](https://github.com/esphome/esphome/pull/9082) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Small optimizations to api buffer helper [esphome#9071](https://github.com/esphome/esphome/pull/9071) by [@bdraco](https://github.com/bdraco) +- Reduce entity memory usage by eliminating field shadowing and bit-packing [esphome#9076](https://github.com/esphome/esphome/pull/9076) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize memory usage by lazy-allocating raw callbacks in sensors [esphome#9077](https://github.com/esphome/esphome/pull/9077) by [@bdraco](https://github.com/bdraco) +- Fix API message encoding to return actual size instead of calculated size [esphome#9073](https://github.com/esphome/esphome/pull/9073) by [@bdraco](https://github.com/bdraco) +- Optimize Application `area_` from `std::string` to `const char*` [esphome#9085](https://github.com/esphome/esphome/pull/9085) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Fix unbound BLE event queue growth and reduce memory usage [esphome#9052](https://github.com/esphome/esphome/pull/9052) by [@bdraco](https://github.com/bdraco) +- Bump aioesphomeapi from 32.2.1 to 32.2.3 [esphome#9091](https://github.com/esphome/esphome/pull/9091) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- [fan] fix initial FanCall to properly set speed [esphome#8277](https://github.com/esphome/esphome/pull/8277) by [@dhewg](https://github.com/dhewg) +- Implement a lock free ring buffer for BLEScanResult to avoid drops [esphome#9087](https://github.com/esphome/esphome/pull/9087) by [@bdraco](https://github.com/bdraco) +- Make BLE queue lock free [esphome#9088](https://github.com/esphome/esphome/pull/9088) by [@bdraco](https://github.com/bdraco) +- Fix protobuf encoding size mismatch by passing force parameter in encode_string [esphome#9074](https://github.com/esphome/esphome/pull/9074) by [@bdraco](https://github.com/bdraco) +- [i2s_audio] Check for a nullptr before disabling and deleting channel [esphome#9062](https://github.com/esphome/esphome/pull/9062) by [@kahrendt](https://github.com/kahrendt) +- Ensure we can send batches where the first message exceeds MAX_PACKET_SIZE [esphome#9068](https://github.com/esphome/esphome/pull/9068) by [@bdraco](https://github.com/bdraco) +- Add common base classes for entity protobuf messages to reduce duplicate code [esphome#9090](https://github.com/esphome/esphome/pull/9090) by [@bdraco](https://github.com/bdraco) +- Reduce Component blocking threshold memory usage by 2 bytes per component [esphome#9081](https://github.com/esphome/esphome/pull/9081) by [@bdraco](https://github.com/bdraco) +- Remove `std::` prefix as not all platforms have access yet. [esphome#9095](https://github.com/esphome/esphome/pull/9095) by [@jesserockz](https://github.com/jesserockz) +- [i2s_audio] Add `dump_config` methods, shorten log messages [esphome#9099](https://github.com/esphome/esphome/pull/9099) by [@kbx81](https://github.com/kbx81) +- [i2s_audio] Bugfix: crashes when unlocking i2s bus multiple times [esphome#9100](https://github.com/esphome/esphome/pull/9100) by [@kahrendt](https://github.com/kahrendt) +- [spi] Cater for non-word-aligned buffers on esp8266 [esphome#9108](https://github.com/esphome/esphome/pull/9108) by [@clydebarrow](https://github.com/clydebarrow) +- Optimize LightState memory layout [esphome#9113](https://github.com/esphome/esphome/pull/9113) by [@bdraco](https://github.com/bdraco) +- Reduce Switch component memory usage by 8 bytes per instance [esphome#9112](https://github.com/esphome/esphome/pull/9112) by [@bdraco](https://github.com/bdraco) + + +
    + +### Notable Changes + +- [bme68x_bsec2_i2c] Remove arduino dependency [esphome#7815](https://github.com/esphome/esphome/pull/7815) by [@luar123](https://github.com/luar123) (notable-change) + +### All changes + +
    + + + + +- add actions to the MAX7219Component [esphome#6462](https://github.com/esphome/esphome/pull/6462) by [@nielsnl68](https://github.com/nielsnl68) +- [api] Update api proto to add legacy value [esphome#8802](https://github.com/esphome/esphome/pull/8802) by [@jesserockz](https://github.com/jesserockz) +- [script] Use local import for zephyr [esphome#8822](https://github.com/esphome/esphome/pull/8822) by [@clydebarrow](https://github.com/clydebarrow) +- Bump cryptography to 45.0.1 [esphome#8826](https://github.com/esphome/esphome/pull/8826) by [@bdraco](https://github.com/bdraco) +- unify and add missing metric suffixes [esphome#8816](https://github.com/esphome/esphome/pull/8816) by [@ximex](https://github.com/ximex) +- Improve stability for a test that crashes intermittently in CI [esphome#8699](https://github.com/esphome/esphome/pull/8699) by [@dala318](https://github.com/dala318) +- update ruff version to `0.11.10` in `.pre-commit-config.yaml` [esphome#8851](https://github.com/esphome/esphome/pull/8851) by [@ximex](https://github.com/ximex) +- add python 3.13 to ci pipeline [esphome#8855](https://github.com/esphome/esphome/pull/8855) by [@ximex](https://github.com/ximex) +- [esp32] Use IDF 5.3.2 as default for IDF builds [esphome#8464](https://github.com/esphome/esphome/pull/8464) by [@swoboda1337](https://github.com/swoboda1337) +- update minimal python version to 3.10 [esphome#8850](https://github.com/esphome/esphome/pull/8850) by [@ximex](https://github.com/ximex) (breaking-change) +- [esp32, logger] Add initial P4 support [esphome#8439](https://github.com/esphome/esphome/pull/8439) by [@swoboda1337](https://github.com/swoboda1337) +- Add CUBIC CM1106 Single Beam NDIR CO2 Sensor Module [esphome#8293](https://github.com/esphome/esphome/pull/8293) by [@andrewjswan](https://github.com/andrewjswan) (new-integration) +- Updates for development environment [esphome#8801](https://github.com/esphome/esphome/pull/8801) by [@jesserockz](https://github.com/jesserockz) +- [sync] Update and fix sync workflow [esphome#8873](https://github.com/esphome/esphome/pull/8873) by [@jesserockz](https://github.com/jesserockz) +- [lvgl] Try to allocate smaller buffer on failure [esphome#8814](https://github.com/esphome/esphome/pull/8814) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Add content styling to tabview [esphome#8823](https://github.com/esphome/esphome/pull/8823) by [@clydebarrow](https://github.com/clydebarrow) +- [usb_uart] Implement USB Host mode UART [esphome#8334](https://github.com/esphome/esphome/pull/8334) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- OTA: Close and clean up client when setsockopt fails [esphome#8865](https://github.com/esphome/esphome/pull/8865) by [@luuoaoa](https://github.com/luuoaoa) +- Add const DEVICE_CLASS_WIND_DIRECTION [esphome#8870](https://github.com/esphome/esphome/pull/8870) by [@Pi57](https://github.com/Pi57) +- Synchronise Device Classes from Home Assistant [esphome#8874](https://github.com/esphome/esphome/pull/8874) by [@esphomebot](https://github.com/esphomebot) +- Optimize API frame helper buffer management [esphome#8805](https://github.com/esphome/esphome/pull/8805) by [@bdraco](https://github.com/bdraco) +- Use UINT16_MAX instead of hard coded 65535 in api [esphome#8884](https://github.com/esphome/esphome/pull/8884) by [@bdraco](https://github.com/bdraco) +- feat: `wifi.configure` now emits error after reconnecting to old AP [esphome#8653](https://github.com/esphome/esphome/pull/8653) by [@Rapsssito](https://github.com/Rapsssito) +- [modbus_controller] Add assumed_state to switch [esphome#8880](https://github.com/esphome/esphome/pull/8880) by [@gotnone](https://github.com/gotnone) +- [const] Move `CONF_RESET` to const.py [esphome#8889](https://github.com/esphome/esphome/pull/8889) by [@jesserockz](https://github.com/jesserockz) +- [bme68x_bsec2_i2c] Remove arduino dependency [esphome#7815](https://github.com/esphome/esphome/pull/7815) by [@luar123](https://github.com/luar123) (notable-change) +- [i2s_audio] Add basic support for esp32-p4 [esphome#8887](https://github.com/esphome/esphome/pull/8887) by [@jesserockz](https://github.com/jesserockz) +- [esp32, logger, core] Add initial c5 support [esphome#8895](https://github.com/esphome/esphome/pull/8895) by [@swoboda1337](https://github.com/swoboda1337) +- Resolve regex library warnings [esphome#8890](https://github.com/esphome/esphome/pull/8890) by [@emmanuel-ferdman](https://github.com/emmanuel-ferdman) +- Add integration tests for host [esphome#8912](https://github.com/esphome/esphome/pull/8912) by [@bdraco](https://github.com/bdraco) +- Fix flakey tests [esphome#8914](https://github.com/esphome/esphome/pull/8914) by [@bdraco](https://github.com/bdraco) +- [sx1509] add support for keys [esphome#8413](https://github.com/esphome/esphome/pull/8413) by [@ssieb](https://github.com/ssieb) +- Add es8388 audio_dac [esphome#8342](https://github.com/esphome/esphome/pull/8342) by [@P4uLT](https://github.com/P4uLT) (new-integration) +- [online_image] Last-Modified-Date and ETag response caching [esphome#8782](https://github.com/esphome/esphome/pull/8782) by [@candrews](https://github.com/candrews) +- [aht10] Various optimizations/clean-up [esphome#8921](https://github.com/esphome/esphome/pull/8921) by [@kbx81](https://github.com/kbx81) +- [rtttl] Various optimizations/clean-up [esphome#8923](https://github.com/esphome/esphome/pull/8923) by [@kbx81](https://github.com/kbx81) +- [ledc] Various optimizations/clean-up [esphome#8922](https://github.com/esphome/esphome/pull/8922) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (a, b) [esphome#8924](https://github.com/esphome/esphome/pull/8924) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (c, d) [esphome#8925](https://github.com/esphome/esphome/pull/8925) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (e, f) [esphome#8926](https://github.com/esphome/esphome/pull/8926) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (g, h, i) [esphome#8927](https://github.com/esphome/esphome/pull/8927) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (k, l, m) [esphome#8928](https://github.com/esphome/esphome/pull/8928) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (n, o, p, q, r) [esphome#8929](https://github.com/esphome/esphome/pull/8929) by [@kbx81](https://github.com/kbx81) +- Streamline setup() logging (s, t, u, v, w, x, y, z) [esphome#8930](https://github.com/esphome/esphome/pull/8930) by [@kbx81](https://github.com/kbx81) +- [speaker mediaplayer] Yaml config initial volume (on first boot) [esphome#8898](https://github.com/esphome/esphome/pull/8898) by [@mrtoy-me](https://github.com/mrtoy-me) +- [i2s_audio] Bump esphome/ESP32-audioI2S to 2.2.0 [esphome#8920](https://github.com/esphome/esphome/pull/8920) by [@jesserockz](https://github.com/jesserockz) +- Add more demo platforms [esphome#8903](https://github.com/esphome/esphome/pull/8903) by [@jesserockz](https://github.com/jesserockz) +- Migrate wifi component to use App.get_loop_component_start_time [esphome#8931](https://github.com/esphome/esphome/pull/8931) by [@bdraco](https://github.com/bdraco) +- Optimize socket operations by checking readiness in the main loop [esphome#8918](https://github.com/esphome/esphome/pull/8918) by [@bdraco](https://github.com/bdraco) +- Improve logging in integration tests when port does not open [esphome#8932](https://github.com/esphome/esphome/pull/8932) by [@bdraco](https://github.com/bdraco) +- [pmwcs3] Optimize logging [esphome#8936](https://github.com/esphome/esphome/pull/8936) by [@kbx81](https://github.com/kbx81) +- [tmp102] Remove `setup()`, optimize logging [esphome#8937](https://github.com/esphome/esphome/pull/8937) by [@kbx81](https://github.com/kbx81) +- Optimize plaintext API header reading to reduce system calls [esphome#8941](https://github.com/esphome/esphome/pull/8941) by [@bdraco](https://github.com/bdraco) +- [gcja5] Remove unused `setup()` method [esphome#8935](https://github.com/esphome/esphome/pull/8935) by [@kbx81](https://github.com/kbx81) +- [alarm_control_panel] BYPASS_AUTO option for Template Alarm Control Panel sensors left open when armed [esphome#8795](https://github.com/esphome/esphome/pull/8795) by [@heythisisnate](https://github.com/heythisisnate) +- Fix select() logging flood in very verbose mode [esphome#8942](https://github.com/esphome/esphome/pull/8942) by [@bdraco](https://github.com/bdraco) +- particle matter improvements [esphome#8846](https://github.com/esphome/esphome/pull/8846) by [@ximex](https://github.com/ximex) +- Fix colors in update all [esphome#8854](https://github.com/esphome/esphome/pull/8854) by [@swoboda1337](https://github.com/swoboda1337) +- Add flip X and Y on inkplate6 component [esphome#7904](https://github.com/esphome/esphome/pull/7904) by [@Leicas](https://github.com/Leicas) +- [modbus] [modbus_controller] Fix server role read coil 0x1 crc [esphome#8859](https://github.com/esphome/esphome/pull/8859) by [@gotnone](https://github.com/gotnone) +- [rp2040] Allow changing watchdog timeout [esphome#8868](https://github.com/esphome/esphome/pull/8868) by [@kuba2k2](https://github.com/kuba2k2) +- [esp32] Regenerate boards from recommended platform version [esphome#8938](https://github.com/esphome/esphome/pull/8938) by [@jesserockz](https://github.com/jesserockz) +- Introduce "communication failed" log macro [esphome#8939](https://github.com/esphome/esphome/pull/8939) by [@kbx81](https://github.com/kbx81) +- [demo] FIx some of the entities [esphome#8943](https://github.com/esphome/esphome/pull/8943) by [@jesserockz](https://github.com/jesserockz) +- Redundant Log Messages Cleanup [esphome#8944](https://github.com/esphome/esphome/pull/8944) by [@bdraco](https://github.com/bdraco) +- [dht] Clean-up, shorten some log messages [esphome#8949](https://github.com/esphome/esphome/pull/8949) by [@kbx81](https://github.com/kbx81) +- Have ESPHome's YAML dumper comply with its own yamllint rules [esphome#8957](https://github.com/esphome/esphome/pull/8957) by [@jpeletier](https://github.com/jpeletier) +- Allow Weikai to pass data_bit validation [esphome#8917](https://github.com/esphome/esphome/pull/8917) by [@timdaman](https://github.com/timdaman) +- [max9611] Remove redundant "max9611" from log messages [esphome#8967](https://github.com/esphome/esphome/pull/8967) by [@kbx81](https://github.com/kbx81) +- [nextion] Allocate NextionQueue in PSRAM (if available) [esphome#8979](https://github.com/esphome/esphome/pull/8979) by [@edwardtfn](https://github.com/edwardtfn) +- [esp32c6] Add test base file and platformio env [esphome#8973](https://github.com/esphome/esphome/pull/8973) by [@jesserockz](https://github.com/jesserockz) +- Add missing icons and device classes to BME680 sensors [esphome#8960](https://github.com/esphome/esphome/pull/8960) by [@tronikos](https://github.com/tronikos) +- [preferences] Shorten log messages [esphome#8982](https://github.com/esphome/esphome/pull/8982) by [@kbx81](https://github.com/kbx81) +- [lc709203f] Add battery monitor [esphome#8037](https://github.com/esphome/esphome/pull/8037) by [@ilikecake](https://github.com/ilikecake) (new-integration) +- [mdns] Set up only after API is set up [esphome#9000](https://github.com/esphome/esphome/pull/9000) by [@jesserockz](https://github.com/jesserockz) +- [const] Move CONF_X and CONF_Y to const.py [esphome#8999](https://github.com/esphome/esphome/pull/8999) by [@Hannah-GBS](https://github.com/Hannah-GBS) +- [core] Update defines.h esp-idf version [esphome#8974](https://github.com/esphome/esphome/pull/8974) by [@jesserockz](https://github.com/jesserockz) +- [spi] Remove redundant "SPI" from log messages [esphome#8970](https://github.com/esphome/esphome/pull/8970) by [@kbx81](https://github.com/kbx81) +- [sdp3x] Remove redundant "sdp3x" from log messages [esphome#8969](https://github.com/esphome/esphome/pull/8969) by [@kbx81](https://github.com/kbx81) +- [ethernet] Remove redundant "ethernet" from log messages [esphome#8966](https://github.com/esphome/esphome/pull/8966) by [@kbx81](https://github.com/kbx81) +- [bmp3xx] Remove redundant "bmp3xx" from log messages [esphome#8965](https://github.com/esphome/esphome/pull/8965) by [@kbx81](https://github.com/kbx81) +- Remove unnecessary ellipsis [esphome#8964](https://github.com/esphome/esphome/pull/8964) by [@kbx81](https://github.com/kbx81) +- [wireguard] Remove redundant "wireguard" from log messages [esphome#8963](https://github.com/esphome/esphome/pull/8963) by [@kbx81](https://github.com/kbx81) +- [dashboard] Fix logging colors [esphome#8984](https://github.com/esphome/esphome/pull/8984) by [@swoboda1337](https://github.com/swoboda1337) +- [sps30] Shorten log messages [esphome#8971](https://github.com/esphome/esphome/pull/8971) by [@kbx81](https://github.com/kbx81) +- [bmp581] Shorten some log messages [esphome#8948](https://github.com/esphome/esphome/pull/8948) by [@kbx81](https://github.com/kbx81) +- [api] Streamline some log strings [esphome#8962](https://github.com/esphome/esphome/pull/8962) by [@kbx81](https://github.com/kbx81) +- [mqtt] Remove redundant "mqtt" from log messages [esphome#8968](https://github.com/esphome/esphome/pull/8968) by [@kbx81](https://github.com/kbx81) +- [ci, nrf52] make zephyr clang mandatory [esphome#8992](https://github.com/esphome/esphome/pull/8992) by [@tomaszduda23](https://github.com/tomaszduda23) +- [sdl] Add config for SDL window flags [esphome#8998](https://github.com/esphome/esphome/pull/8998) by [@Hannah-GBS](https://github.com/Hannah-GBS) +- [nextion] Add optional `max_queue_size` limit to prevent queue overflows [esphome#8976](https://github.com/esphome/esphome/pull/8976) by [@edwardtfn](https://github.com/edwardtfn) +- Move CONF_REQUEST_HEADERS to const.py [esphome#9002](https://github.com/esphome/esphome/pull/9002) by [@numo68](https://github.com/numo68) +- [api] Fix build error in IDF 5.5 [esphome#9007](https://github.com/esphome/esphome/pull/9007) by [@swoboda1337](https://github.com/swoboda1337) +- [list-components.py] Only add platforms that are actually platforms. [esphome#9005](https://github.com/esphome/esphome/pull/9005) by [@clydebarrow](https://github.com/clydebarrow) +- [qwiic_pir] Clean-up, shorten some log messages [esphome#8951](https://github.com/esphome/esphome/pull/8951) by [@kbx81](https://github.com/kbx81) +- [esp32] Add config vars for compiler [esphome#9023](https://github.com/esphome/esphome/pull/9023) by [@kbx81](https://github.com/kbx81) +- Implement proper API connection teardown before deep sleep/reboot [esphome#9008](https://github.com/esphome/esphome/pull/9008) by [@bdraco](https://github.com/bdraco) +- [config] Clean build on ESP-IDF when component/platform combos change [esphome#9028](https://github.com/esphome/esphome/pull/9028) by [@clydebarrow](https://github.com/clydebarrow) +- Disable ruff rule UP038 [esphome#9029](https://github.com/esphome/esphome/pull/9029) by [@bdraco](https://github.com/bdraco) +- Update webserver local assets to 20250608-225410 [esphome#9030](https://github.com/esphome/esphome/pull/9030) by [@esphomebot](https://github.com/esphomebot) +- Reduce ESP_LOGCONFIG calls [esphome#9026](https://github.com/esphome/esphome/pull/9026) by [@bdraco](https://github.com/bdraco) +- Force socket ready when high frequency looping [esphome#9032](https://github.com/esphome/esphome/pull/9032) by [@juanboro](https://github.com/juanboro) +- [psram] Add P4 support [esphome#8545](https://github.com/esphome/esphome/pull/8545) by [@clydebarrow](https://github.com/clydebarrow) +- [nextion] Use safe restart to properly handle globals and restart logging [esphome#9010](https://github.com/esphome/esphome/pull/9010) by [@edwardtfn](https://github.com/edwardtfn) +- [max7219digit, servo, tsl2591] ESP_LOGCONFIG call reduction (Extend #9026) [esphome#9033](https://github.com/esphome/esphome/pull/9033) by [@kbx81](https://github.com/kbx81) +- [tsl2561, tsl2591] Shorten log messages [esphome#9034](https://github.com/esphome/esphome/pull/9034) by [@kbx81](https://github.com/kbx81) +- Change RP2040 PIO SK6812 timings [esphome#9020](https://github.com/esphome/esphome/pull/9020) by [@pseud0sphere](https://github.com/pseud0sphere) +- Add LWIP optimization options to reduce flash usage [esphome#8946](https://github.com/esphome/esphome/pull/8946) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [globals] Prevent redundant oversized string checks in loop [esphome#9001](https://github.com/esphome/esphome/pull/9001) by [@edwardtfn](https://github.com/edwardtfn) +- [nextion] Optimize log messages to reduce memory usage [esphome#9039](https://github.com/esphome/esphome/pull/9039) by [@edwardtfn](https://github.com/edwardtfn) +- [nextion] Add configurable limit for commands processed per loop [esphome#8972](https://github.com/esphome/esphome/pull/8972) by [@edwardtfn](https://github.com/edwardtfn) +- [lvgl] Fix templated argument to `lvgl.is_idle` [esphome#9014](https://github.com/esphome/esphome/pull/9014) by [@clydebarrow](https://github.com/clydebarrow) +- Replace API deferred queue with efficient message batching system [esphome#9012](https://github.com/esphome/esphome/pull/9012) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Reduce Bluetooth overhead by disabling unused logging categories [esphome#8945](https://github.com/esphome/esphome/pull/8945) by [@bdraco](https://github.com/bdraco) +- [inkplate] Remove arduino dependency [esphome#9031](https://github.com/esphome/esphome/pull/9031) by [@jesserockz](https://github.com/jesserockz) +- [core] Include esp_mac.h on Arduino too [esphome#9040](https://github.com/esphome/esphome/pull/9040) by [@swoboda1337](https://github.com/swoboda1337) +- Use a `define` for log message constants [esphome#8952](https://github.com/esphome/esphome/pull/8952) by [@kbx81](https://github.com/kbx81) +- [esp_ldo] Implement support for ESP32-P4 LDO [esphome#9009](https://github.com/esphome/esphome/pull/9009) by [@clydebarrow](https://github.com/clydebarrow) (new-integration) +- Fix: Seeed Studio MR60FDA2 threshold height could not be set [esphome#9011](https://github.com/esphome/esphome/pull/9011) by [@limengdu](https://github.com/limengdu) +- [esp32] Use release zip from pioarduino/platform-espressif32 instead of git tag [esphome#8975](https://github.com/esphome/esphome/pull/8975) by [@jesserockz](https://github.com/jesserockz) +- [esp32_rmt] Add variant validation for use_dma [esphome#8897](https://github.com/esphome/esphome/pull/8897) by [@swoboda1337](https://github.com/swoboda1337) +- Ensure components only powerdown after teardown [esphome#9044](https://github.com/esphome/esphome/pull/9044) by [@bdraco](https://github.com/bdraco) +- use `encode_uintXX` [esphome#8847](https://github.com/esphome/esphome/pull/8847) by [@ximex](https://github.com/ximex) +- Add OpenThread support on ESP-IDF [esphome#7506](https://github.com/esphome/esphome/pull/7506) by [@mrene](https://github.com/mrene) (new-integration) +- [shtcx] Shorten log messages [esphome#9046](https://github.com/esphome/esphome/pull/9046) by [@kbx81](https://github.com/kbx81) +- [application] Fix build error on some IDF versions [esphome#9045](https://github.com/esphome/esphome/pull/9045) by [@kbx81](https://github.com/kbx81) +- [spi] Restrict octal spi to S3/S2/P4 [esphome#9041](https://github.com/esphome/esphome/pull/9041) by [@clydebarrow](https://github.com/clydebarrow) +- Reserve memory for component and platform vectors [esphome#9042](https://github.com/esphome/esphome/pull/9042) by [@bdraco](https://github.com/bdraco) +- Improve shutdown reliability when tx buffer is full [esphome#9043](https://github.com/esphome/esphome/pull/9043) by [@bdraco](https://github.com/bdraco) +- Add support for custom request headers in online_image component [esphome#8985](https://github.com/esphome/esphome/pull/8985) by [@numo68](https://github.com/numo68) +- Openthread code updates [esphome#9047](https://github.com/esphome/esphome/pull/9047) by [@jesserockz](https://github.com/jesserockz) +- [sgp4x] Shorten log messages, various clean-up [esphome#9048](https://github.com/esphome/esphome/pull/9048) by [@kbx81](https://github.com/kbx81) +- Fix dashboard logging being escaped before parser [esphome#9054](https://github.com/esphome/esphome/pull/9054) by [@bdraco](https://github.com/bdraco) +- Always perform select() when loop duration exceeds interval [esphome#9058](https://github.com/esphome/esphome/pull/9058) by [@bdraco](https://github.com/bdraco) +- [nextion] Remove upload flags reset from success path to prevent TFT corruption [esphome#9064](https://github.com/esphome/esphome/pull/9064) by [@edwardtfn](https://github.com/edwardtfn) +- Fix BYPASS_AUTO feature to work with or without an arming delay [esphome#9051](https://github.com/esphome/esphome/pull/9051) by [@heythisisnate](https://github.com/heythisisnate) +- Fix misleading comment in API [esphome#9069](https://github.com/esphome/esphome/pull/9069) by [@bdraco](https://github.com/bdraco) +- [prometheus] Remove `cv.only_with_arduino` [esphome#9061](https://github.com/esphome/esphome/pull/9061) by [@jesserockz](https://github.com/jesserockz) +- [esp32] Dynamically set default framework based on variant [esphome#9060](https://github.com/esphome/esphome/pull/9060) by [@jesserockz](https://github.com/jesserockz) +- Fix `captive_portal` loading entire `web_server` [esphome#9066](https://github.com/esphome/esphome/pull/9066) by [@bdraco](https://github.com/bdraco) +- Make ParseOnOffState enum uint8_t [esphome#9083](https://github.com/esphome/esphome/pull/9083) by [@bdraco](https://github.com/bdraco) +- Optimize Component and Application state storage from uint32_t to uint8_t [esphome#9082](https://github.com/esphome/esphome/pull/9082) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Small optimizations to api buffer helper [esphome#9071](https://github.com/esphome/esphome/pull/9071) by [@bdraco](https://github.com/bdraco) +- Reduce entity memory usage by eliminating field shadowing and bit-packing [esphome#9076](https://github.com/esphome/esphome/pull/9076) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize memory usage by lazy-allocating raw callbacks in sensors [esphome#9077](https://github.com/esphome/esphome/pull/9077) by [@bdraco](https://github.com/bdraco) +- Fix API message encoding to return actual size instead of calculated size [esphome#9073](https://github.com/esphome/esphome/pull/9073) by [@bdraco](https://github.com/bdraco) +- Optimize Application `area_` from `std::string` to `const char*` [esphome#9085](https://github.com/esphome/esphome/pull/9085) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Fix unbound BLE event queue growth and reduce memory usage [esphome#9052](https://github.com/esphome/esphome/pull/9052) by [@bdraco](https://github.com/bdraco) +- [fan] fix initial FanCall to properly set speed [esphome#8277](https://github.com/esphome/esphome/pull/8277) by [@dhewg](https://github.com/dhewg) +- Implement a lock free ring buffer for BLEScanResult to avoid drops [esphome#9087](https://github.com/esphome/esphome/pull/9087) by [@bdraco](https://github.com/bdraco) +- Make BLE queue lock free [esphome#9088](https://github.com/esphome/esphome/pull/9088) by [@bdraco](https://github.com/bdraco) +- Fix protobuf encoding size mismatch by passing force parameter in encode_string [esphome#9074](https://github.com/esphome/esphome/pull/9074) by [@bdraco](https://github.com/bdraco) +- [i2s_audio] Check for a nullptr before disabling and deleting channel [esphome#9062](https://github.com/esphome/esphome/pull/9062) by [@kahrendt](https://github.com/kahrendt) +- Ensure we can send batches where the first message exceeds MAX_PACKET_SIZE [esphome#9068](https://github.com/esphome/esphome/pull/9068) by [@bdraco](https://github.com/bdraco) +- Add common base classes for entity protobuf messages to reduce duplicate code [esphome#9090](https://github.com/esphome/esphome/pull/9090) by [@bdraco](https://github.com/bdraco) +- Reduce Component blocking threshold memory usage by 2 bytes per component [esphome#9081](https://github.com/esphome/esphome/pull/9081) by [@bdraco](https://github.com/bdraco) +- Remove `std::` prefix as not all platforms have access yet. [esphome#9095](https://github.com/esphome/esphome/pull/9095) by [@jesserockz](https://github.com/jesserockz) +- [i2s_audio] Add `dump_config` methods, shorten log messages [esphome#9099](https://github.com/esphome/esphome/pull/9099) by [@kbx81](https://github.com/kbx81) +- [i2s_audio] Bugfix: crashes when unlocking i2s bus multiple times [esphome#9100](https://github.com/esphome/esphome/pull/9100) by [@kahrendt](https://github.com/kahrendt) +- [spi] Cater for non-word-aligned buffers on esp8266 [esphome#9108](https://github.com/esphome/esphome/pull/9108) by [@clydebarrow](https://github.com/clydebarrow) +- Optimize LightState memory layout [esphome#9113](https://github.com/esphome/esphome/pull/9113) by [@bdraco](https://github.com/bdraco) +- Reduce Switch component memory usage by 8 bytes per instance [esphome#9112](https://github.com/esphome/esphome/pull/9112) by [@bdraco](https://github.com/bdraco) + + +
    + +### Dependency Changes + +
    + + + + +- Bump aioesphomeapi from 30.2.0 to 31.0.0 [esphome#8779](https://github.com/esphome/esphome/pull/8779) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump cairosvg from 2.7.1 to 2.8.0 [esphome#8780](https://github.com/esphome/esphome/pull/8780) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump cairosvg from 2.8.0 to 2.8.1 [esphome#8799](https://github.com/esphome/esphome/pull/8799) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 31.0.0 to 31.0.1 [esphome#8809](https://github.com/esphome/esphome/pull/8809) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 80.4.0 to 80.7.1 [esphome#8808](https://github.com/esphome/esphome/pull/8808) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.9 to 0.11.10 [esphome#8818](https://github.com/esphome/esphome/pull/8818) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump cairosvg from 2.8.1 to 2.8.2 [esphome#8817](https://github.com/esphome/esphome/pull/8817) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump codecov/codecov-action from 5.4.2 to 5.4.3 [esphome#8820](https://github.com/esphome/esphome/pull/8820) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 31.0.1 to 31.1.0 [esphome#8849](https://github.com/esphome/esphome/pull/8849) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 80.7.1 to 80.8.0 [esphome#8858](https://github.com/esphome/esphome/pull/8858) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tornado from 6.4.2 to 6.5.1 [esphome#8882](https://github.com/esphome/esphome/pull/8882) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.10 to 0.11.11 [esphome#8883](https://github.com/esphome/esphome/pull/8883) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pyupgrade from 3.19.1 to 3.20.0 [esphome#8891](https://github.com/esphome/esphome/pull/8891) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/checkout from 4.1.7 to 4.2.2 [esphome#8904](https://github.com/esphome/esphome/pull/8904) by [@jesserockz](https://github.com/jesserockz) +- Bump ruamel-yaml from 0.18.10 to 0.18.11 [esphome#8910](https://github.com/esphome/esphome/pull/8910) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-mock from 3.14.0 to 3.14.1 [esphome#8909](https://github.com/esphome/esphome/pull/8909) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump setuptools from 80.8.0 to 80.9.0 [esphome#8915](https://github.com/esphome/esphome/pull/8915) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-xdist from 3.6.1 to 3.7.0 [esphome#8916](https://github.com/esphome/esphome/pull/8916) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/build-push-action from 6.17.0 to 6.18.0 in /.github/actions/build-image [esphome#8919](https://github.com/esphome/esphome/pull/8919) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 8.3.5 to 8.4.0 [esphome#8993](https://github.com/esphome/esphome/pull/8993) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruamel-yaml from 0.18.11 to 0.18.12 [esphome#8977](https://github.com/esphome/esphome/pull/8977) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 31.1.0 to 32.0.0 [esphome#9004](https://github.com/esphome/esphome/pull/9004) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.11 to 0.11.13 [esphome#9017](https://github.com/esphome/esphome/pull/9017) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruamel-yaml from 0.18.12 to 0.18.13 [esphome#9018](https://github.com/esphome/esphome/pull/9018) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 32.0.0 to 32.1.0 [esphome#9024](https://github.com/esphome/esphome/pull/9024) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 32.1.0 to 32.2.0 [esphome#9025](https://github.com/esphome/esphome/pull/9025) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 32.2.0 to 32.2.1 [esphome#9038](https://github.com/esphome/esphome/pull/9038) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruamel-yaml from 0.18.13 to 0.18.14 [esphome#9037](https://github.com/esphome/esphome/pull/9037) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 32.2.1 to 32.2.3 [esphome#9091](https://github.com/esphome/esphome/pull/9091) by [@dependabot[bot]](https://github.com/dependabot[bot]) + + +
    + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.7.0.mdx b/src/content/docs/changelog/2025.7.0.mdx new file mode 100644 index 0000000000..8842f1b00a --- /dev/null +++ b/src/content/docs/changelog/2025.7.0.mdx @@ -0,0 +1,826 @@ +--- +description: "Changelog for ESPHome 2025.7.0." +title: "ESPHome 2025.7.0 - 16th July 2025" +pagefind: false +slug: "changelog/2025.7.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Release Overview + +ESPHome 2025.7.0 is a major release featuring significant architectural improvements, new hardware support, +and important platform updates. This release modernizes the codebase while expanding hardware compatibility +and introducing powerful new features for advanced users. + +**Major Changes:** + +- **Web Server OTA** moved to dedicated platform (breaking change - migration required) +- **ESP-IDF 4.x support removed** - ESP-IDF 5.3.2+ now required +- **ESP32 Arduino updated to 3.1.3** for better compatibility and performance +- **Sub-device support** for logical entity grouping in Home Assistant +- **Jinja2 template expressions** for dynamic configuration generation + +**New Hardware:** + +- LoRa communication (SX126x/SX127x), ESP32 Hosted WiFi, LN882X SoCs +- New sensors: OPT3001 light, LPS22 pressure, GL-R01 ToF, Xiaomi BLE + +**Performance:** + +- Extensive memory optimizations (up to 40% reduction in component memory usage) +- Enhanced performance through C++20 support and optimized algorithms +- Improved interrupt handling and scheduler efficiency + +## Web Server OTA Platform + +> [!WARNING] +> **Breaking Change:** Read this carefully! If your only OTA method is `web_server` and you don't have it explicitly +> enabled, you will lose the ability to update devices OTA after updating to 2025.7.0. You must add the `web_server` +> OTA platform to your configuration to maintain OTA functionality. + +The [Web Server](/components/web_server/) component has undergone a significant architectural change. Previously, +OTA functionality was built directly into the web server component. This has now been extracted into a dedicated +OTA platform: [Web Server](/components/ota/web_server/). + +**Migration Required:** + +If you were relying on the web server's built-in OTA functionality, you now need to explicitly configure the web +server OTA platform: + +```yaml +# Before (implicit OTA in web server) +web_server: + port: 80 + +# After (explicit OTA platform required) +web_server: + port: 80 + +ota: + - platform: esphome # Your existing OTA method + - platform: web_server # Add this for web-based OTA uploads +``` + +**Benefits of this change:** + +- **Cleaner separation of concerns** - Web server focuses on serving content, OTA platform handles updates +- **More flexible OTA configuration** - Better control over OTA methods and security +- **Improved maintainability** - Dedicated OTA platform allows for better features and bug fixes + +## ESP-IDF 4.x End of Life + +> [!NOTE] +> **Major Platform Change:** This release completely removes support for ESP-IDF 4.x versions, marking the end of life +> for these older framework versions. + +ESPHome 2025.7.0 removes all support for ESP-IDF 4.x versions as part of our commitment to supporting modern, +secure, and well-maintained development frameworks. Please see our +[developer blog post](https://developers.esphome.io/blog/2025/06/18/sunsetting-support-for-idf-4x/) for detailed +background and technical reasons behind this decision. + +**What this means for users:** + +- **Most users are unaffected** - We automatically set the recommended ESP-IDF version (currently 5.3.2) as the default +- **Explicit version users must update** - If you're explicitly setting the ESP-IDF version in your configuration, + you must update to version 5.3.2 or later + +- **Legacy projects may need updates** - Older projects might require minor configuration adjustments + +**Required action if you explicitly set ESP-IDF version:** + +```yaml +# Remove or update old explicit versions +esp32: + board: esp32dev + framework: + type: esp-idf + version: 4.4.7 # ❌ No longer supported + +# Update to supported version +esp32: + board: esp32dev + framework: + type: esp-idf + version: 5.3.2 # ✅ Supported (or omit for latest recommended) +``` + +**Benefits of ESP-IDF 5.x:** + +- **Enhanced security** - Latest security patches and improvements +- **Better performance** - Optimized code generation and runtime performance +- **Modern C++ support** - Full C++20 support with improved standard library +- **Expanded hardware support** - Better support for newer ESP32 variants (S2, S3, C3, C6, H2) +- **Active maintenance** - Continued updates and bug fixes from Espressif + +## ESP32 Arduino Framework 3.x + +> [!NOTE] +> **Framework Update:** Arduino for ESP32 has been upgraded to version 3.1.3, bringing significant improvements +> and maintaining compatibility with ESP-IDF 5.3.2. + +To maintain alignment and compatibility with the current ESP-IDF version of 5.3.2, the Arduino framework for ESP32 +has been updated to version 3.1.3. This represents a major version jump from Arduino 2.x. + +**Key improvements in Arduino 3.1.3:** + +- **ESP-IDF 5.3.2 compatibility** - Full integration with the latest ESP-IDF features +- **Improved stability** - Better memory management and reduced crashes +- **Enhanced WiFi performance** - More reliable connections and better power management +- **Updated libraries** - Latest versions of core Arduino libraries +- **Bug fixes** - Numerous fixes for issues present in earlier versions + +**Potential compatibility considerations:** + +- Some third-party Arduino libraries may need updates for Arduino 3.x compatibility +- Timing-sensitive code might behave slightly differently due to framework optimizations +- Memory usage patterns may change slightly due to framework improvements + +> [!NOTE] +> **Flash Usage Warning:** Arduino 3.x can use more flash memory than Arduino 2.x, which may cause some projects +> with many components to exceed available flash space. If you encounter flash size issues, consider: +> +> - Switching to ESP-IDF framework (recommended for large projects) +> - Reducing the number of enabled components +> - Using a board with more flash memory + +Most users will see this as a transparent improvement with better performance and reliability. + +## Sub-Device Support + +> [!NOTE] +> **New Feature:** Entities can now be organized into logical sub-devices, enabling better organization +> and area management in Home Assistant. + +ESPHome now supports **sub-devices**, a powerful new feature that allows you to logically group entities from a single +physical ESPHome device into multiple virtual devices within Home Assistant. This is particularly useful for complex +setups where one ESP32 controls sensors or actuators in different areas of your home. + +**Use cases and benefits:** + +- **Multi-room sensors** - One ESP32 with temperature sensors in different rooms can appear as separate devices per room +- **Complex automation hubs** - A single ESP32 controlling lights, fans, and sensors across multiple areas +- **Better Home Assistant organization** - Entities automatically appear in the correct areas and can be managed + independently + +- **Cleaner dashboards** - Related entities are grouped together logically rather than by physical device + +**How it works:** + +You can assign entities to sub-devices using the new `device_id` configuration option. First, define your devices +in the `devices` section under `esphome:`, then reference them in individual entities. + +**Example configuration:** + +```yaml +esphome: + name: multi_room_controller + + # Define areas (optional) + areas: + - id: living_room_area + name: "Living Room" + - id: bedroom_area + name: "Bedroom" + + # Define devices + devices: + - id: living_room_device + name: "Living Room Sensors" + area_id: living_room_area + - id: bedroom_device + name: "Bedroom Sensors" + area_id: bedroom_area + +# Assign sensors to different devices +sensor: + - platform: dht + pin: GPIO4 + temperature: + name: "Living Room Temperature" + device_id: living_room_device + humidity: + name: "Living Room Humidity" + device_id: living_room_device + + - platform: dht + pin: GPIO5 + temperature: + name: "Bedroom Temperature" + device_id: bedroom_device + humidity: + name: "Bedroom Humidity" + device_id: bedroom_device +``` + +In this example, Home Assistant will see two separate sensor devices (one for living room, one for bedroom) +even though they're controlled by a single ESPHome device. + +This feature enhances the logical organization of your smart home while maintaining the efficiency of +centralized ESPHome device management. + +## New Hardware Support Highlights + +This release brings support for exciting new hardware platforms and components: + +**New Wireless Communication:** + +- **SX126x & SX127x LoRa modules** - Long-range, low-power communication for remote sensors and IoT applications +- **ESP32 Hosted WiFi** - Use an ESP32 as a WiFi adapter for other microcontrollers, expanding connectivity options + +**New Sensors & Measurement:** + +- **OPT3001** - High-precision ambient light sensor with excellent low-light sensitivity +- **LPS22** - Accurate barometric pressure sensor for weather monitoring and altitude measurement +- **GL-R01** - Time-of-flight distance sensor for precise proximity and ranging applications +- **Xiaomi XMWSDJ04MMC** - Support for popular Xiaomi Bluetooth temperature/humidity sensors + +**Expanded Platform Support:** + +- **LN882X SoC Family** - New LibreTiny support extends ESPHome to additional low-cost WiFi microcontrollers +- **PI4IOE5V6408** - New I2C GPIO expander for applications requiring additional digital I/O pins + +**Infrastructure Improvements:** + +- **DS2484** - Advanced 1-Wire bus master for improved reliability in complex 1-Wire networks +- **Enhanced Camera Framework** - New base camera class enables support for alternative camera implementations + +## Memory and Performance Optimizations + +ESPHome 2025.7.0 includes extensive memory and performance optimizations, particularly beneficial for +resource-constrained devices: + +**Memory Usage Reductions:** + +- **Component memory reduced** (8 bytes per component) - Significant savings for devices with many components +- **Sensor entities optimized** - Reduced memory footprint for devices with numerous sensors +- **API and networking optimizations** - Lower RAM usage for WiFi and API communication +- **Color constant storage optimization** - More efficient handling of color data in displays and lighting + +**Performance Improvements:** + +- **Faster loop processing** - Components can now disable their loop() method when not needed, reducing CPU overhead +- **Optimized API communication** - Improved batching and reduced redundant operations +- **Enhanced logging performance** - More efficient message processing and reduced CPU impact +- **Bluetooth proxy optimizations** - Better performance for ESP32 devices acting as Bluetooth proxies + +**Code Quality Enhancements:** + +- **C++20 support** - Modern C++ features for better performance and developer experience +- **Improved interrupt handling** - More reliable GPIO interrupt processing +- **Enhanced scheduler** - Better task management with comprehensive test coverage + +## Jinja2 Template Expressions in Substitutions + +> [!NOTE] +> **New Feature:** ESPHome now supports Jinja2 template expressions within substitutions, +> enabling more advanced and dynamic value generation. + +ESPHome 2025.7.0 introduces support for Jinja2 template expressions within the existing substitutions system. +This enhancement extends the current `${ }` substitution syntax to support Jinja2 expressions, allowing for +more sophisticated value calculations and transformations. + +**Enhanced substitution capabilities:** + +- **Mathematical operations** - Perform calculations using substitution variables +- **Conditional expressions** - Use ternary operators and conditional logic +- **String formatting** - Advanced string manipulation and formatting +- **Type conversions** - Convert between strings, numbers, and other types +- **Filter operations** - Apply Jinja2 filters for data transformation + +**Example usage:** + +```yaml +substitutions: + device_name: living_room_sensors + num_sensors: 3 + base_pin: 4 + offset_voltage: 3.3 + enable_debugging: false + sensor_config: + update_interval: 60s + accuracy_decimals: 2 + +sensor: + - platform: adc + pin: GPIO${base_pin} + name: "${device_name} voltage" + update_interval: ${sensor_config.update_interval} + accuracy_decimals: ${sensor_config.accuracy_decimals} + filters: + # Convert ADC reading to actual voltage + - multiply: ${offset_voltage / 4095} + + - platform: adc + pin: GPIO${base_pin + 1} + name: "${device_name} sensor ${num_sensors > 1 and 'secondary' or 'primary'}" + accuracy_decimals: ${1 if num_sensors <= 2 else 2} + update_interval: ${sensor_config.update_interval} + +binary_sensor: + - platform: gpio + pin: GPIO${base_pin + 2} + name: "${device_name} status ${enable_debugging and '(debug)' or ''}" +``` + +**Key features:** + +- **Works within existing substitutions** - Uses the familiar `${ }` syntax you already know +- **Access to substitution variables** - All defined substitutions are available as Jinja variables +- **Dictionary and list access** - Use dot notation (`device.name` ) or indexing (`pins[0]` ) +- **Mathematical functions** - Access to Python's math library (`math.sqrt`, `math.pi`, etc.) +- **Conditional logic** - Ternary operators and boolean expressions for dynamic values + +**Benefits:** + +- **More powerful substitutions** - Calculate complex values instead of just simple replacements +- **Reduced duplication** - Generate values programmatically based on other substitutions +- **Better maintainability** - Change base values and have dependent values update automatically +- **Enhanced flexibility** - Support for conditional values and complex transformations + +This feature builds upon ESPHome's existing substitutions system, making it more powerful while maintaining +backward compatibility. It's particularly useful for responsive designs, calculated pin assignments, +and configurations that need to adapt based on device capabilities or user preferences. + +For complete documentation and more examples, see the [Substitutions](/components/substitutions/) guide. + +## ArduinoJson Library 7.x + +> [!WARNING] +> **Breaking Change:** The ArduinoJson library has been upgraded from version 6.x to 7.2.0, introducing +> breaking changes that may affect custom components and external integrations. + +ESPHome 2025.7.0 upgrades the ArduinoJson library to version 7.2.0, bringing performance improvements and +reduced memory usage. Most users will not be affected as all standard ESPHome components have been updated. +However, if you have external components, or lambdas that directly use ArduinoJson, you may need +to update your code. + +For detailed migration information, see the [ArduinoJson migration guide](https://arduinojson.org/v7/how-to/upgrade-from-v6/). + +{/* markdownlint-disable MD013 */} + +## Release 2025.7.1 - July 17 + +
    + + + + +- [lvgl]: fix missing await keyword in meter tick_style width processing [esphome#9538](https://github.com/esphome/esphome/pull/9538) by [@theshut](https://github.com/theshut) +- Fix compilation error when using string lambdas with homeassistant services [esphome#9543](https://github.com/esphome/esphome/pull/9543) by [@bdraco](https://github.com/bdraco) +- Fix format string warnings in Web Server OTA component [esphome#9569](https://github.com/esphome/esphome/pull/9569) by [@bdraco](https://github.com/bdraco) +- Add helpful error message when ESP32+Arduino runs out of flash space [esphome#9580](https://github.com/esphome/esphome/pull/9580) by [@bdraco](https://github.com/bdraco) +- Allow disabling OTA for web_server while keeping it enabled for captive_portal [esphome#9583](https://github.com/esphome/esphome/pull/9583) by [@bdraco](https://github.com/bdraco) +- [esp32] Add missing include for helpers [esphome#9579](https://github.com/esphome/esphome/pull/9579) by [@jesserockz](https://github.com/jesserockz) +- Fix lwIP thread safety assertion failures on ESP32 [esphome#9570](https://github.com/esphome/esphome/pull/9570) by [@bdraco](https://github.com/bdraco) + + +
    + +## Release 2025.7.2 - July 19 + +
    + + + + +- Fix template event web_server crash [esphome#9618](https://github.com/esphome/esphome/pull/9618) by [@AzonInc](https://github.com/AzonInc) +- [api] Fix compilation error with char* lambdas in HomeAssistant services [esphome#9638](https://github.com/esphome/esphome/pull/9638) by [@bdraco](https://github.com/bdraco) +- [wireguard] Fix boot loop when CONFIG_LWIP_TCPIP_CORE_LOCKING is enabled [esphome#9637](https://github.com/esphome/esphome/pull/9637) by [@bdraco](https://github.com/bdraco) +- [scheduler] Fix cancellation of timers with empty string names [esphome#9641](https://github.com/esphome/esphome/pull/9641) by [@bdraco](https://github.com/bdraco) +- [logger] fix on_message [esphome#9642](https://github.com/esphome/esphome/pull/9642) by [@ssieb](https://github.com/ssieb) +- esp32_camera: deprecate i2c_pins; throw error if combined with i2c: block [esphome#9615](https://github.com/esphome/esphome/pull/9615) by [@RubenKelevra](https://github.com/RubenKelevra) +- [scheduler] Fix DelayAction cancellation in restart mode scripts [esphome#9646](https://github.com/esphome/esphome/pull/9646) by [@bdraco](https://github.com/bdraco) +- [lvgl] Fix meter rotation [esphome#9605](https://github.com/esphome/esphome/pull/9605) by [@clydebarrow](https://github.com/clydebarrow) +- [libretiny] Remove unsupported lock-free queue and event pool implementations [esphome#9653](https://github.com/esphome/esphome/pull/9653) by [@bdraco](https://github.com/bdraco) +- [lvgl] Prevent keyerror on min/max value widgets with no default [esphome#9660](https://github.com/esphome/esphome/pull/9660) by [@jesserockz](https://github.com/jesserockz) +- Fix AsyncTCP version mismatch between platformio.ini and async_tcp component [esphome#9676](https://github.com/esphome/esphome/pull/9676) by [@bdraco](https://github.com/bdraco) +- [speaker] Media player's pipeline properly returns playing state near end of file [esphome#9668](https://github.com/esphome/esphome/pull/9668) by [@kahrendt](https://github.com/kahrendt) +- [voice_assistant] Use media player callbacks to track TTS response status [esphome#9670](https://github.com/esphome/esphome/pull/9670) by [@kahrendt](https://github.com/kahrendt) +- [gpio] Disable interrupt mode by default for LibreTiny platforms [esphome#9687](https://github.com/esphome/esphome/pull/9687) by [@bdraco](https://github.com/bdraco) + + +
    + +## Release 2025.7.3 - July 23 + +
    + + + + +- [gpio] Auto-disable interrupts for shared GPIO pins in binary sensors [esphome#9701](https://github.com/esphome/esphome/pull/9701) by [@bdraco](https://github.com/bdraco) +- Fix format string error in ota_web_server.cpp [esphome#9711](https://github.com/esphome/esphome/pull/9711) by [@tmpeh](https://github.com/tmpeh) +- [sdl][mipi_spi] Respect clipping when drawing [esphome#9722](https://github.com/esphome/esphome/pull/9722) by [@JonasB2497](https://github.com/JonasB2497) +- [esp32_touch] Fix setup mode in v1 driver [esphome#9725](https://github.com/esphome/esphome/pull/9725) by [@swoboda1337](https://github.com/swoboda1337) +- [tuya] Update use of fan_schema [esphome#9762](https://github.com/esphome/esphome/pull/9762) by [@jesserockz](https://github.com/jesserockz) +- [config_validation] Add support for suggesting alternate component/platform [esphome#9757](https://github.com/esphome/esphome/pull/9757) by [@kbx81](https://github.com/kbx81) +- [core] Process pending loop enables during setup blocking phase [esphome#9787](https://github.com/esphome/esphome/pull/9787) by [@bdraco](https://github.com/bdraco) +- [fastled_clockless, fastled_spi] Add suggested alternate when using IDF [esphome#9784](https://github.com/esphome/esphome/pull/9784) by [@kbx81](https://github.com/kbx81) +- [neopixelbus] Add suggested alternate when using IDF [esphome#9783](https://github.com/esphome/esphome/pull/9783) by [@kbx81](https://github.com/kbx81) +- [bme680_bsec] Add suggested alternate when using IDF [esphome#9785](https://github.com/esphome/esphome/pull/9785) by [@kbx81](https://github.com/kbx81) + + +
    + +## Release 2025.7.4 - July 28 + +
    + + + + +- [remote_receiver] Fix idle validation [esphome#9819](https://github.com/esphome/esphome/pull/9819) by [@swoboda1337](https://github.com/swoboda1337) +- [gt911] i2c fixes [esphome#9822](https://github.com/esphome/esphome/pull/9822) by [@clydebarrow](https://github.com/clydebarrow) +- fix: non-optional x/y target calculation for ld2450 [esphome#9849](https://github.com/esphome/esphome/pull/9849) by [@Hofferic](https://github.com/Hofferic) +- [logger] Don't allow `logger.log` actions without configuring the `logger` [esphome#9821](https://github.com/esphome/esphome/pull/9821) by [@jesserockz](https://github.com/jesserockz) +- Add seed flag when running setup with uv present [esphome#9932](https://github.com/esphome/esphome/pull/9932) by [@cryptk](https://github.com/cryptk) +- Fail with old lerp [esphome#9914](https://github.com/esphome/esphome/pull/9914) by [@HeMan](https://github.com/HeMan) + + +
    + +## Release 2025.7.5 - August 5 + +
    + + + + +- [lvgl] Bugfix for tileview [esphome#9938](https://github.com/esphome/esphome/pull/9938) by [@clydebarrow](https://github.com/clydebarrow) +- [api] Fix OTA progress updates not being sent when main loop is blocked [esphome#10049](https://github.com/esphome/esphome/pull/10049) by [@bdraco](https://github.com/bdraco) +- [font] Catch file load exception [esphome#10058](https://github.com/esphome/esphome/pull/10058) by [@clydebarrow](https://github.com/clydebarrow) +- [i2s_audio] Use high-pass filter for dc offset correction [esphome#10005](https://github.com/esphome/esphome/pull/10005) by [@doobry](https://github.com/doobry) + + +
    + +## Full list of changes + +### New Components + +- Add support for Xiaomi XMWSDJ04MMC [esphome#8591](https://github.com/esphome/esphome/pull/8591) by [@medusalix](https://github.com/medusalix) (new-integration) +- [opt3001] New component [esphome#6625](https://github.com/esphome/esphome/pull/6625) by [@ccutrer](https://github.com/ccutrer) (new-integration) +- [esp32_hosted] Add support for remote wifi [esphome#8833](https://github.com/esphome/esphome/pull/8833) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- [pi4ioe5v6408] Add new IO Expander [esphome#8888](https://github.com/esphome/esphome/pull/8888) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Add support for LN882X Family (with LibreTiny) [esphome#8954](https://github.com/esphome/esphome/pull/8954) by [@lamauny](https://github.com/lamauny) (new-integration) (notable-change) +- Replace custom OTA implementation in web_server_base [esphome#9274](https://github.com/esphome/esphome/pull/9274) by [@bdraco](https://github.com/bdraco) (new-integration) (breaking-change) +- [ds2484] New component [esphome#9147](https://github.com/esphome/esphome/pull/9147) by [@mrk-its](https://github.com/mrk-its) (new-integration) +- [sx127x] Add sx127x component [esphome#7490](https://github.com/esphome/esphome/pull/7490) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- Introduce base Camera class to support alternative camera implementations [esphome#9285](https://github.com/esphome/esphome/pull/9285) by [@DT-art1](https://github.com/DT-art1) (new-integration) +- [sx126x] Add sx126x component [esphome#8516](https://github.com/esphome/esphome/pull/8516) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- lps22: add a component [esphome#7540](https://github.com/esphome/esphome/pull/7540) by [@nagisa](https://github.com/nagisa) (new-integration) +- Add support for GL-R01 I2C - Time of Flight sensor [esphome#8329](https://github.com/esphome/esphome/pull/8329) by [@pkejval](https://github.com/pkejval) (new-integration) + +### Breaking Changes + +- [binary_sensor] Add action to invalidate state and pass to HA [esphome#8961](https://github.com/esphome/esphome/pull/8961) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- [esp32_hall] Remove esp32_hall [esphome#9117](https://github.com/esphome/esphome/pull/9117) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [web_server] Upgrade ESPAsync libraries [esphome#8867](https://github.com/esphome/esphome/pull/8867) by [@kuba2k2](https://github.com/kuba2k2) (breaking-change) +- Bump ESP32 Arduino version to 3.1.3 [esphome#8604](https://github.com/esphome/esphome/pull/8604) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [mqtt] Don't wait for connection unless configured to [esphome#8933](https://github.com/esphome/esphome/pull/8933) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [API] Sub devices and areas [esphome#8544](https://github.com/esphome/esphome/pull/8544) by [@dala318](https://github.com/dala318) (breaking-change) +- Reduce memory required for sensor entities [esphome#9201](https://github.com/esphome/esphome/pull/9201) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize TemplatableValue memory [esphome#9202](https://github.com/esphome/esphome/pull/9202) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize Application class memory layout and reduce loop_interval size [esphome#9208](https://github.com/esphome/esphome/pull/9208) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [pins] Update `internal_gpio_pin_number` to work directly like `internal_gpio_output_pin_number` [esphome#9270](https://github.com/esphome/esphome/pull/9270) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [smt100] Rename `dielectric_constant` to `permittivity` [esphome#9175](https://github.com/esphome/esphome/pull/9175) by [@piechade](https://github.com/piechade) (breaking-change) +- Fix entity hash collisions by enforcing unique names across devices per platform [esphome#9276](https://github.com/esphome/esphome/pull/9276) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32] Remove IDF 4 support and clean up code [esphome#9145](https://github.com/esphome/esphome/pull/9145) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- Replace custom OTA implementation in web_server_base [esphome#9274](https://github.com/esphome/esphome/pull/9274) by [@bdraco](https://github.com/bdraco) (new-integration) (breaking-change) +- Reduce RAM usage by optimizing Color constant storage [esphome#9339](https://github.com/esphome/esphome/pull/9339) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize logger callback API by including message length parameter [esphome#9368](https://github.com/esphome/esphome/pull/9368) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Conditionally compile API user services to save 4.3KB flash (follow-up to #9262) [esphome#9451](https://github.com/esphome/esphome/pull/9451) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [json] Bump ArduinoJson library to 7.4.2 [esphome#8857](https://github.com/esphome/esphome/pull/8857) by [@kahrendt](https://github.com/kahrendt) (breaking-change) + +### Notable Changes + +- Add support for LN882X Family (with LibreTiny) [esphome#8954](https://github.com/esphome/esphome/pull/8954) by [@lamauny](https://github.com/lamauny) (new-integration) (notable-change) +- Jinja expressions in configs (Take #3) [esphome#8955](https://github.com/esphome/esphome/pull/8955) by [@jpeletier](https://github.com/jpeletier) (notable-change) + +### All changes + +
    + + + + +- [core/pins] improve pins types [esphome#8848](https://github.com/esphome/esphome/pull/8848) by [@ximex](https://github.com/ximex) +- [binary_sensor] Add action to invalidate state and pass to HA [esphome#8961](https://github.com/esphome/esphome/pull/8961) by [@clydebarrow](https://github.com/clydebarrow) (breaking-change) +- ina219: powerdown the sensor on shutdown [esphome#9053](https://github.com/esphome/esphome/pull/9053) by [@youknow0](https://github.com/youknow0) +- Build with C++17 [esphome#8603](https://github.com/esphome/esphome/pull/8603) by [@HeMan](https://github.com/HeMan) +- Move some consts to `const.py` [esphome#9084](https://github.com/esphome/esphome/pull/9084) by [@kbx81](https://github.com/kbx81) +- Reduce Component memory usage by 20 bytes per component [esphome#9080](https://github.com/esphome/esphome/pull/9080) by [@bdraco](https://github.com/bdraco) +- [ruff] Apply various ruff suggestions [esphome#8947](https://github.com/esphome/esphome/pull/8947) by [@jesserockz](https://github.com/jesserockz) +- Bump LibreTiny recommended version to 1.9.1 [esphome#9110](https://github.com/esphome/esphome/pull/9110) by [@swoboda1337](https://github.com/swoboda1337) +- [esp32_hall] Remove esp32_hall [esphome#9117](https://github.com/esphome/esphome/pull/9117) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- Resolve esphome::optional vs std::optional ambiguity in code generation [esphome#9119](https://github.com/esphome/esphome/pull/9119) by [@bdraco](https://github.com/bdraco) +- Add intent progress event to voice assistant enum [esphome#9103](https://github.com/esphome/esphome/pull/9103) by [@synesthesiam](https://github.com/synesthesiam) +- Pin libretiny to 1.9.1 [esphome#9118](https://github.com/esphome/esphome/pull/9118) by [@swoboda1337](https://github.com/swoboda1337) +- Bump ruff in pre-commit to 0.12.0 [esphome#9121](https://github.com/esphome/esphome/pull/9121) by [@bdraco](https://github.com/bdraco) +- [heatpumpir] Bump HeatpumpIR to 1.0.35 [esphome#9123](https://github.com/esphome/esphome/pull/9123) by [@swoboda1337](https://github.com/swoboda1337) +- [i2s_audio] Bump esphome/ESP32-audioI2S to 2.3.0 [esphome#9124](https://github.com/esphome/esphome/pull/9124) by [@swoboda1337](https://github.com/swoboda1337) +- Reduce CPU overhead by allowing components to disable their loop() [esphome#9089](https://github.com/esphome/esphome/pull/9089) by [@bdraco](https://github.com/bdraco) +- Add support for Xiaomi XMWSDJ04MMC [esphome#8591](https://github.com/esphome/esphome/pull/8591) by [@medusalix](https://github.com/medusalix) (new-integration) +- [web_server] Upgrade ESPAsync libraries [esphome#8867](https://github.com/esphome/esphome/pull/8867) by [@kuba2k2](https://github.com/kuba2k2) (breaking-change) +- Bump ESP32 Arduino version to 3.1.3 [esphome#8604](https://github.com/esphome/esphome/pull/8604) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- Remove empty generated protobuf methods [esphome#9098](https://github.com/esphome/esphome/pull/9098) by [@bdraco](https://github.com/bdraco) +- Reduce code duplication in auto-generated API protocol code [esphome#9097](https://github.com/esphome/esphome/pull/9097) by [@bdraco](https://github.com/bdraco) +- Use smaller atomic types for ESP32 BLE Tracker ring buffer indices [esphome#9106](https://github.com/esphome/esphome/pull/9106) by [@bdraco](https://github.com/bdraco) +- Optimize API server performance by using cached loop time [esphome#9104](https://github.com/esphome/esphome/pull/9104) by [@bdraco](https://github.com/bdraco) +- Optimize API component memory usage by reordering class members to reduce padding [esphome#9111](https://github.com/esphome/esphome/pull/9111) by [@bdraco](https://github.com/bdraco) +- Optimize bluetooth_proxy memory usage on ESP32 [esphome#9114](https://github.com/esphome/esphome/pull/9114) by [@bdraco](https://github.com/bdraco) +- Add enable_loop_soon_any_context() for thread and ISR-safe loop enabling [esphome#9127](https://github.com/esphome/esphome/pull/9127) by [@bdraco](https://github.com/bdraco) +- Optimize OTA loop to avoid unnecessary stack allocations [esphome#9129](https://github.com/esphome/esphome/pull/9129) by [@bdraco](https://github.com/bdraco) +- [i2c] Expose internal i2c bus port number [esphome#9136](https://github.com/esphome/esphome/pull/9136) by [@jesserockz](https://github.com/jesserockz) +- Disable Ethernet loop polling when connected and stable [esphome#9102](https://github.com/esphome/esphome/pull/9102) by [@bdraco](https://github.com/bdraco) +- Clean up RAMAllocators in audio related code [esphome#9140](https://github.com/esphome/esphome/pull/9140) by [@jesserockz](https://github.com/jesserockz) +- Clean up RAMAllocators in http_request code [esphome#9143](https://github.com/esphome/esphome/pull/9143) by [@jesserockz](https://github.com/jesserockz) +- Clean up RAMAllocators in display related code [esphome#9141](https://github.com/esphome/esphome/pull/9141) by [@jesserockz](https://github.com/jesserockz) +- [i2c] Make `get_port()` public [esphome#9146](https://github.com/esphome/esphome/pull/9146) by [@jesserockz](https://github.com/jesserockz) +- [esp32_camera] Allow sharing i2c bus [esphome#9137](https://github.com/esphome/esphome/pull/9137) by [@jesserockz](https://github.com/jesserockz) +- [nextion] Add command queuing to prevent command loss when spacing is active [esphome#9139](https://github.com/esphome/esphome/pull/9139) by [@edwardtfn](https://github.com/edwardtfn) +- [nextion] Cached timing optimization [esphome#9150](https://github.com/esphome/esphome/pull/9150) by [@edwardtfn](https://github.com/edwardtfn) +- [wifi, wifi_info] Tidy up/shorten more log messages [esphome#9151](https://github.com/esphome/esphome/pull/9151) by [@kbx81](https://github.com/kbx81) +- [bh1750] Remove redundant platform name from logging [esphome#9153](https://github.com/esphome/esphome/pull/9153) by [@kbx81](https://github.com/kbx81) +- Add option to enable support for USB Hubs [esphome#9154](https://github.com/esphome/esphome/pull/9154) by [@RoganDawes](https://github.com/RoganDawes) +- [spi] Enable >6 devices with ESP-IDF [esphome#9128](https://github.com/esphome/esphome/pull/9128) by [@clydebarrow](https://github.com/clydebarrow) +- Clean up RAMAllocators in light related code [esphome#9142](https://github.com/esphome/esphome/pull/9142) by [@jesserockz](https://github.com/jesserockz) +- [nextion] Extract common `upload_end_` function to shared file [esphome#9155](https://github.com/esphome/esphome/pull/9155) by [@edwardtfn](https://github.com/edwardtfn) +- Improve on C++17 [esphome#9170](https://github.com/esphome/esphome/pull/9170) by [@HeMan](https://github.com/HeMan) +- [nextion] Revert to `millis()` on `recv_ret_string_` [esphome#9168](https://github.com/esphome/esphome/pull/9168) by [@edwardtfn](https://github.com/edwardtfn) +- [const] Move `CONF_DEVICES` to `const.py` [esphome#9179](https://github.com/esphome/esphome/pull/9179) by [@jesserockz](https://github.com/jesserockz) +- Reduce Logger memory usage by optimizing variable sizes [esphome#9161](https://github.com/esphome/esphome/pull/9161) by [@bdraco](https://github.com/bdraco) +- Fix slow noise handshake by reading multiple messages per loop [esphome#9130](https://github.com/esphome/esphome/pull/9130) by [@bdraco](https://github.com/bdraco) +- Reduce RAM usage for scheduled tasks [esphome#9180](https://github.com/esphome/esphome/pull/9180) by [@bdraco](https://github.com/bdraco) +- Pre-reserve looping components vector to reduce memory allocations [esphome#9177](https://github.com/esphome/esphome/pull/9177) by [@bdraco](https://github.com/bdraco) +- [lvgl] Add start_value to bar; make values templatable and updateable [esphome#9056](https://github.com/esphome/esphome/pull/9056) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Use styles instead of object properties for themes [esphome#9116](https://github.com/esphome/esphome/pull/9116) by [@clydebarrow](https://github.com/clydebarrow) +- Feature fontmetrics [esphome#8978](https://github.com/esphome/esphome/pull/8978) by [@JonasB2497](https://github.com/JonasB2497) +- Image should not update when setting URL [esphome#8885](https://github.com/esphome/esphome/pull/8885) by [@gpambrozio](https://github.com/gpambrozio) +- [opt3001] New component [esphome#6625](https://github.com/esphome/esphome/pull/6625) by [@ccutrer](https://github.com/ccutrer) (new-integration) +- [mqtt] Don't wait for connection unless configured to [esphome#8933](https://github.com/esphome/esphome/pull/8933) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [modbus_controller] Fix modbus read_lambda precision for non-floats or large integers [esphome#9159](https://github.com/esphome/esphome/pull/9159) by [@jpeletier](https://github.com/jpeletier) +- [helpers] Add `format_mac_address_pretty` function, migrate components [esphome#9193](https://github.com/esphome/esphome/pull/9193) by [@kbx81](https://github.com/kbx81) +- [ld2450] Use `App.get_loop_component_start_time()`, shorten log messages [esphome#9192](https://github.com/esphome/esphome/pull/9192) by [@kbx81](https://github.com/kbx81) +- [ld2420] Shorten log messages + other clean-up [esphome#9200](https://github.com/esphome/esphome/pull/9200) by [@kbx81](https://github.com/kbx81) +- [ld2410] Use `App.get_loop_component_start_time()`, shorten log messages [esphome#9194](https://github.com/esphome/esphome/pull/9194) by [@kbx81](https://github.com/kbx81) +- [esp32_hall] Add dummy component [esphome#9125](https://github.com/esphome/esphome/pull/9125) by [@swoboda1337](https://github.com/swoboda1337) +- fix(MQTT): Call disconnect callback on DNS error [esphome#9016](https://github.com/esphome/esphome/pull/9016) by [@Rapsssito](https://github.com/Rapsssito) +- Rename kVARh/VARh to kvarh/varh [esphome#9191](https://github.com/esphome/esphome/pull/9191) by [@Drafteed](https://github.com/Drafteed) +- [API] Sub devices and areas [esphome#8544](https://github.com/esphome/esphome/pull/8544) by [@dala318](https://github.com/dala318) (breaking-change) +- [binary_sensor] Add timeout filter [esphome#9198](https://github.com/esphome/esphome/pull/9198) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] Allow linear positioning of grid cells [esphome#9196](https://github.com/esphome/esphome/pull/9196) by [@clydebarrow](https://github.com/clydebarrow) +- Reduce memory required for sensor entities [esphome#9201](https://github.com/esphome/esphome/pull/9201) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Reduce logger CPU usage by disabling loop when buffer is empty [esphome#9160](https://github.com/esphome/esphome/pull/9160) by [@bdraco](https://github.com/bdraco) +- Optimize API connection loop performance [esphome#9184](https://github.com/esphome/esphome/pull/9184) by [@bdraco](https://github.com/bdraco) +- Optimize TemplatableValue memory [esphome#9202](https://github.com/esphome/esphome/pull/9202) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize API connection memory with tagged pointers [esphome#9203](https://github.com/esphome/esphome/pull/9203) by [@bdraco](https://github.com/bdraco) +- Fix missing protobuf message dump for batched messages with very verbose logging [esphome#9206](https://github.com/esphome/esphome/pull/9206) by [@bdraco](https://github.com/bdraco) +- Optimize Application class memory layout and reduce loop_interval size [esphome#9208](https://github.com/esphome/esphome/pull/9208) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Use shared workflow for locking [esphome#9211](https://github.com/esphome/esphome/pull/9211) by [@jesserockz](https://github.com/jesserockz) +- [esp32] Improve and simplify IDF component support [esphome#9163](https://github.com/esphome/esphome/pull/9163) by [@swoboda1337](https://github.com/swoboda1337) +- [ld2450] More optimizing, fix copypasta [esphome#9210](https://github.com/esphome/esphome/pull/9210) by [@kbx81](https://github.com/kbx81) +- [ci] Lint lock.yml [esphome#9214](https://github.com/esphome/esphome/pull/9214) by [@jesserockz](https://github.com/jesserockz) +- [script] Add exec bit to run-in-env [esphome#9212](https://github.com/esphome/esphome/pull/9212) by [@jesserockz](https://github.com/jesserockz) +- [ld2410] More optimizations [esphome#9209](https://github.com/esphome/esphome/pull/9209) by [@kbx81](https://github.com/kbx81) +- [ld2450] Move consts to cpp file, optimize memory use [esphome#9215](https://github.com/esphome/esphome/pull/9215) by [@kbx81](https://github.com/kbx81) +- [tests] Remove extra newline [esphome#9213](https://github.com/esphome/esphome/pull/9213) by [@jesserockz](https://github.com/jesserockz) +- Optimize SafeModeComponent memory layout to reduce padding [esphome#9228](https://github.com/esphome/esphome/pull/9228) by [@bdraco](https://github.com/bdraco) +- [esp32_hosted] Add support for remote wifi [esphome#8833](https://github.com/esphome/esphome/pull/8833) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- use c++17 `[[fallthrough]];` [esphome#9149](https://github.com/esphome/esphome/pull/9149) by [@ximex](https://github.com/ximex) +- [esp32] Update IDF components to use the registry [esphome#9223](https://github.com/esphome/esphome/pull/9223) by [@swoboda1337](https://github.com/swoboda1337) +- [wifi] Reduce memory usage [esphome#9232](https://github.com/esphome/esphome/pull/9232) by [@bdraco](https://github.com/bdraco) +- [ethernet] Reduce memory usage by 8 bytes [esphome#9231](https://github.com/esphome/esphome/pull/9231) by [@bdraco](https://github.com/bdraco) +- [gpio] Reduce ESP32 memory usage by optimizing struct padding [esphome#9230](https://github.com/esphome/esphome/pull/9230) by [@bdraco](https://github.com/bdraco) +- Reduce component_iterator memory usage [esphome#9205](https://github.com/esphome/esphome/pull/9205) by [@bdraco](https://github.com/bdraco) +- Upgrade to use C++20 [esphome#9135](https://github.com/esphome/esphome/pull/9135) by [@HeMan](https://github.com/HeMan) +- [mcp23xxx_base] fix pin interrupts [esphome#9244](https://github.com/esphome/esphome/pull/9244) by [@ssieb](https://github.com/ssieb) +- [i2c] Disable i2c scan on certain idf versions [esphome#9237](https://github.com/esphome/esphome/pull/9237) by [@swoboda1337](https://github.com/swoboda1337) +- Reduce libretiny logconfig messages [esphome#9239](https://github.com/esphome/esphome/pull/9239) by [@bdraco](https://github.com/bdraco) +- Disable dynamic log level control for ESP32 ESP-IDF builds [esphome#9233](https://github.com/esphome/esphome/pull/9233) by [@bdraco](https://github.com/bdraco) +- Silence protobuf compatibility warnings when importing aioesphomeapi [esphome#9236](https://github.com/esphome/esphome/pull/9236) by [@bdraco](https://github.com/bdraco) +- [esp32] Allow 5.4.2 [esphome#9243](https://github.com/esphome/esphome/pull/9243) by [@swoboda1337](https://github.com/swoboda1337) +- Remove backports of `std` [esphome#9246](https://github.com/esphome/esphome/pull/9246) by [@HeMan](https://github.com/HeMan) +- Fix buffer corruption in API message encoding with very verbose logging [esphome#9249](https://github.com/esphome/esphome/pull/9249) by [@bdraco](https://github.com/bdraco) +- Extract lock-free queue and event pool to core helpers [esphome#9238](https://github.com/esphome/esphome/pull/9238) by [@bdraco](https://github.com/bdraco) +- Replace ping retry timer with batch queue fallback [esphome#9207](https://github.com/esphome/esphome/pull/9207) by [@bdraco](https://github.com/bdraco) +- [thermostat] Memory optimizations [esphome#9259](https://github.com/esphome/esphome/pull/9259) by [@kbx81](https://github.com/kbx81) +- [adc] Memory optimizations [esphome#9247](https://github.com/esphome/esphome/pull/9247) by [@kbx81](https://github.com/kbx81) +- [light] Memory optimizations [esphome#9260](https://github.com/esphome/esphome/pull/9260) by [@kbx81](https://github.com/kbx81) +- Reduce web_server code duplication by extracting detail parameter parsing [esphome#9257](https://github.com/esphome/esphome/pull/9257) by [@bdraco](https://github.com/bdraco) +- Remove redundant get_setup_priority() overrides returning default value [esphome#9253](https://github.com/esphome/esphome/pull/9253) by [@bdraco](https://github.com/bdraco) +- Fix MQTT blocking main loop for multiple seconds at a time [esphome#8325](https://github.com/esphome/esphome/pull/8325) by [@dwmw2](https://github.com/dwmw2) +- Remove single-use send_*_info wrappers in API connection [esphome#9255](https://github.com/esphome/esphome/pull/9255) by [@bdraco](https://github.com/bdraco) +- Reduce API memory footprint through bitfield consolidation and type sizing [esphome#9252](https://github.com/esphome/esphome/pull/9252) by [@bdraco](https://github.com/bdraco) +- Reduce flash usage by making add_message_object non-template [esphome#9258](https://github.com/esphome/esphome/pull/9258) by [@bdraco](https://github.com/bdraco) +- Remove unused return value from read_message and fix ifdef placement in generated API code [esphome#9256](https://github.com/esphome/esphome/pull/9256) by [@bdraco](https://github.com/bdraco) +- Reduce web_server RAM usage by 96 bytes with conditional sorting compilation [esphome#9227](https://github.com/esphome/esphome/pull/9227) by [@bdraco](https://github.com/bdraco) +- Add interrupt support to GPIO binary sensors [esphome#9115](https://github.com/esphome/esphome/pull/9115) by [@bdraco](https://github.com/bdraco) +- [pi4ioe5v6408] Add new IO Expander [esphome#8888](https://github.com/esphome/esphome/pull/8888) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- Reduce loop enable/disable log spam by using very verbose level [esphome#9267](https://github.com/esphome/esphome/pull/9267) by [@bdraco](https://github.com/bdraco) +- Fix thread-safe cleanup of event source connections in ESP-IDF web server [esphome#9268](https://github.com/esphome/esphome/pull/9268) by [@bdraco](https://github.com/bdraco) +- Reduce API component memory usage with conditional compilation [esphome#9262](https://github.com/esphome/esphome/pull/9262) by [@bdraco](https://github.com/bdraco) +- Optimize scheduler string storage to eliminate heap allocations [esphome#9251](https://github.com/esphome/esphome/pull/9251) by [@bdraco](https://github.com/bdraco) +- Optimize web_server UrlMatch to avoid heap allocations [esphome#9263](https://github.com/esphome/esphome/pull/9263) by [@bdraco](https://github.com/bdraco) +- Add support for LN882X Family (with LibreTiny) [esphome#8954](https://github.com/esphome/esphome/pull/8954) by [@lamauny](https://github.com/lamauny) (new-integration) (notable-change) +- Support DM9051 SPI ethernet device [esphome#6861](https://github.com/esphome/esphome/pull/6861) by [@bmork](https://github.com/bmork) +- [light] Fix transitions with `lerp` [esphome#9269](https://github.com/esphome/esphome/pull/9269) by [@kbx81](https://github.com/kbx81) +- [remote_base] Fix dumper base class and enable schema extension [esphome#9218](https://github.com/esphome/esphome/pull/9218) by [@gabest11](https://github.com/gabest11) +- [ld2420] Move consts to cpp file, optimize memory use [esphome#9216](https://github.com/esphome/esphome/pull/9216) by [@kbx81](https://github.com/kbx81) +- Update libsodium to 1.0.20 [esphome#9240](https://github.com/esphome/esphome/pull/9240) by [@bdraco](https://github.com/bdraco) +- Fixes for async MQTT [esphome#9273](https://github.com/esphome/esphome/pull/9273) by [@dwmw2](https://github.com/dwmw2) +- Fix flaky test_api_conditional_memory by waiting for all required states [esphome#9271](https://github.com/esphome/esphome/pull/9271) by [@bdraco](https://github.com/bdraco) +- [pins] Update `internal_gpio_pin_number` to work directly like `internal_gpio_output_pin_number` [esphome#9270](https://github.com/esphome/esphome/pull/9270) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- [http_request.update] Fix `size_t` printing [esphome#9144](https://github.com/esphome/esphome/pull/9144) by [@jesserockz](https://github.com/jesserockz) +- [smt100] Rename `dielectric_constant` to `permittivity` [esphome#9175](https://github.com/esphome/esphome/pull/9175) by [@piechade](https://github.com/piechade) (breaking-change) +- [ethernet] P4 changes and 5.3.0 deprecated warnings [esphome#8457](https://github.com/esphome/esphome/pull/8457) by [@swoboda1337](https://github.com/swoboda1337) +- Fix - Pass thread TLVs down to openthread if they are defined [esphome#9182](https://github.com/esphome/esphome/pull/9182) by [@mrene](https://github.com/mrene) +- Fix entity hash collisions by enforcing unique names across devices per platform [esphome#9276](https://github.com/esphome/esphome/pull/9276) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [host] Disable platformio ldf [esphome#9277](https://github.com/esphome/esphome/pull/9277) by [@jesserockz](https://github.com/jesserockz) +- Jinja expressions in configs (Take #3) [esphome#8955](https://github.com/esphome/esphome/pull/8955) by [@jpeletier](https://github.com/jpeletier) (notable-change) +- Use interrupt based approach for esp32_touch [esphome#9059](https://github.com/esphome/esphome/pull/9059) by [@bdraco](https://github.com/bdraco) +- Add OTA support to ESP-IDF webserver [esphome#9264](https://github.com/esphome/esphome/pull/9264) by [@bdraco](https://github.com/bdraco) +- [modbus] Modbus server role: write holding registers [esphome#9156](https://github.com/esphome/esphome/pull/9156) by [@jpeletier](https://github.com/jpeletier) +- [esp32] Remove IDF 4 support and clean up code [esphome#9145](https://github.com/esphome/esphome/pull/9145) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- Fix regression: BK7231N devices not returning entities via API [esphome#9283](https://github.com/esphome/esphome/pull/9283) by [@bdraco](https://github.com/bdraco) +- [esp32_rmt_led_strip] Reduce memory usage by 32x with IDF 5.3 [esphome#8388](https://github.com/esphome/esphome/pull/8388) by [@swoboda1337](https://github.com/swoboda1337) +- [api] Dump bytes fields as hex instead of unreadable string [esphome#9288](https://github.com/esphome/esphome/pull/9288) by [@jesserockz](https://github.com/jesserockz) +- Reduce Component memory usage by 40% (8 bytes per component) [esphome#9278](https://github.com/esphome/esphome/pull/9278) by [@bdraco](https://github.com/bdraco) +- Replace custom OTA implementation in web_server_base [esphome#9274](https://github.com/esphome/esphome/pull/9274) by [@bdraco](https://github.com/bdraco) (new-integration) (breaking-change) +- pulse_meter total [esphome#9282](https://github.com/esphome/esphome/pull/9282) by [@prchal](https://github.com/prchal) +- Mmc5603 fix for devices that don't retrieve chip_id [esphome#8959](https://github.com/esphome/esphome/pull/8959) by [@jsb2092](https://github.com/jsb2092) +- made qr_code elements optional [esphome#8896](https://github.com/esphome/esphome/pull/8896) by [@JonasB2497](https://github.com/JonasB2497) +- [nextion] memory optimization [esphome#9164](https://github.com/esphome/esphome/pull/9164) by [@edwardtfn](https://github.com/edwardtfn) +- Use encode_bytes() for protobuf bytes fields [esphome#9289](https://github.com/esphome/esphome/pull/9289) by [@bdraco](https://github.com/bdraco) +- [core] Deleting CMakeCache.txt for fast recompilation with ESP-IDF [esphome#8750](https://github.com/esphome/esphome/pull/8750) by [@zkoalexey](https://github.com/zkoalexey) +- [heatpumpir] Add Support for PHS32 HeatPump [esphome#7378](https://github.com/esphome/esphome/pull/7378) by [@mrtntome](https://github.com/mrtntome) +- OpenThread - add Device Type [esphome#9272](https://github.com/esphome/esphome/pull/9272) by [@rwrozelle](https://github.com/rwrozelle) +- Don't compile `state_to_string()` unless debugging. [esphome#7473](https://github.com/esphome/esphome/pull/7473) by [@colmbuckley](https://github.com/colmbuckley) +- [time] Add `USE_TIME_TIMEZONE` define [esphome#9290](https://github.com/esphome/esphome/pull/9290) by [@jesserockz](https://github.com/jesserockz) +- [time] fix clang-tidy [esphome#9292](https://github.com/esphome/esphome/pull/9292) by [@tomaszduda23](https://github.com/tomaszduda23) +- [esp32_touch] Fix threshold [esphome#9291](https://github.com/esphome/esphome/pull/9291) by [@clydebarrow](https://github.com/clydebarrow) +- [ds2484] New component [esphome#9147](https://github.com/esphome/esphome/pull/9147) by [@mrk-its](https://github.com/mrk-its) (new-integration) +- Fix missing ifdef guards in API protobuf generator [esphome#9296](https://github.com/esphome/esphome/pull/9296) by [@bdraco](https://github.com/bdraco) +- Save flash and RAM by conditionally compiling unused API password code [esphome#9297](https://github.com/esphome/esphome/pull/9297) by [@bdraco](https://github.com/bdraco) +- [Packet transport] Ping timeout sensor [esphome#8694](https://github.com/esphome/esphome/pull/8694) by [@dala318](https://github.com/dala318) +- Allow disabling API batch delay for real-time state updates [esphome#9298](https://github.com/esphome/esphome/pull/9298) by [@bdraco](https://github.com/bdraco) +- Packages: optional base path for remote git packages [esphome#9279](https://github.com/esphome/esphome/pull/9279) by [@dudanov](https://github.com/dudanov) +- [sx127x] Add sx127x component [esphome#7490](https://github.com/esphome/esphome/pull/7490) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- [microphone] simplify mute handling to avoid unnecessary copies [esphome#9303](https://github.com/esphome/esphome/pull/9303) by [@kahrendt](https://github.com/kahrendt) +- Add device_id to entity state messages for sub-device support [esphome#9304](https://github.com/esphome/esphome/pull/9304) by [@bdraco](https://github.com/bdraco) +- Fix web_server URL parsing lifetime issue [esphome#9309](https://github.com/esphome/esphome/pull/9309) by [@bdraco](https://github.com/bdraco) +- Reduce web_server loop overhead on ESP32 by avoiding unnecessary semaphore operations [esphome#9308](https://github.com/esphome/esphome/pull/9308) by [@bdraco](https://github.com/bdraco) +- Fix compiler warning in tsl2591 component [esphome#9310](https://github.com/esphome/esphome/pull/9310) by [@mikelawrence](https://github.com/mikelawrence) +- Fix web_server busy loop with ungracefully disconnected clients [esphome#9312](https://github.com/esphome/esphome/pull/9312) by [@bdraco](https://github.com/bdraco) +- Add const char overload for Component::defer() [esphome#9324](https://github.com/esphome/esphome/pull/9324) by [@bdraco](https://github.com/bdraco) +- [rtttl] trim extraneous whitespace in "ac_dimmer" in "PWM_BAD" list [esphome#9318](https://github.com/esphome/esphome/pull/9318) by [@ximex](https://github.com/ximex) +- Mark ESPTime comparison operators as const [esphome#9335](https://github.com/esphome/esphome/pull/9335) by [@freundTech](https://github.com/freundTech) +- [ld2450] Reduce CPU usage, eliminate redundant sensor updates [esphome#9334](https://github.com/esphome/esphome/pull/9334) by [@bdraco](https://github.com/bdraco) +- [nextion] Memory optimization [esphome#9338](https://github.com/esphome/esphome/pull/9338) by [@edwardtfn](https://github.com/edwardtfn) +- Reduce RAM usage by optimizing Color constant storage [esphome#9339](https://github.com/esphome/esphome/pull/9339) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Eliminate API component guard variable to save 8 bytes RAM [esphome#9341](https://github.com/esphome/esphome/pull/9341) by [@bdraco](https://github.com/bdraco) +- Eliminate web_server_idf guard variable to save 8 bytes RAM [esphome#9344](https://github.com/esphome/esphome/pull/9344) by [@bdraco](https://github.com/bdraco) +- [scd4x] Optimize logging + minor code clean-up [esphome#9347](https://github.com/esphome/esphome/pull/9347) by [@kbx81](https://github.com/kbx81) +- [ld2410] Reduce RAM usage, general clean-up [esphome#9346](https://github.com/esphome/esphome/pull/9346) by [@kbx81](https://github.com/kbx81) +- [sx127x] Improve error handling [esphome#9351](https://github.com/esphome/esphome/pull/9351) by [@swoboda1337](https://github.com/swoboda1337) +- Fix defer() thread safety issues on multi-core platforms [esphome#9317](https://github.com/esphome/esphome/pull/9317) by [@bdraco](https://github.com/bdraco) +- [update, http_request_update] Implement update available trigger [esphome#9174](https://github.com/esphome/esphome/pull/9174) by [@jhbruhn](https://github.com/jhbruhn) +- Split LockFreeQueue into base and notifying variants to reduce memory usage [esphome#9330](https://github.com/esphome/esphome/pull/9330) by [@bdraco](https://github.com/bdraco) +- Fix bluetooth proxy busy loop when disconnecting pending BLE connections [esphome#9332](https://github.com/esphome/esphome/pull/9332) by [@bdraco](https://github.com/bdraco) +- Use std::span to eliminate heap allocation for single-packet API transmissions [esphome#9313](https://github.com/esphome/esphome/pull/9313) by [@bdraco](https://github.com/bdraco) +- [sx127x] Fix shaping print in dump_config and preallocate packet [esphome#9357](https://github.com/esphome/esphome/pull/9357) by [@swoboda1337](https://github.com/swoboda1337) +- Introduce base Camera class to support alternative camera implementations [esphome#9285](https://github.com/esphome/esphome/pull/9285) by [@DT-art1](https://github.com/DT-art1) (new-integration) +- [scd4x] Memory optimization [esphome#9358](https://github.com/esphome/esphome/pull/9358) by [@kbx81](https://github.com/kbx81) +- [nextion] Replace boolean flags with bitfields to optimize memory usage [esphome#9359](https://github.com/esphome/esphome/pull/9359) by [@edwardtfn](https://github.com/edwardtfn) +- [inkplate6] Require 240mhz cpu frequency [esphome#9356](https://github.com/esphome/esphome/pull/9356) by [@jesserockz](https://github.com/jesserockz) +- [sx126x] Add sx126x component [esphome#8516](https://github.com/esphome/esphome/pull/8516) by [@swoboda1337](https://github.com/swoboda1337) (new-integration) +- [nextion] Optimize settings memory usage with compile-time defines [esphome#9350](https://github.com/esphome/esphome/pull/9350) by [@edwardtfn](https://github.com/edwardtfn) +- [ld2450] Clean-up for consistency, reduce CPU usage when idle [esphome#9363](https://github.com/esphome/esphome/pull/9363) by [@kbx81](https://github.com/kbx81) +- [nextion] Review `touch_sleep_timeout` [esphome#9345](https://github.com/esphome/esphome/pull/9345) by [@edwardtfn](https://github.com/edwardtfn) +- [core] Move platform helper implementations into their own file [esphome#9361](https://github.com/esphome/esphome/pull/9361) by [@jesserockz](https://github.com/jesserockz) +- [nextion] Add optional device info storage configuration [esphome#9366](https://github.com/esphome/esphome/pull/9366) by [@edwardtfn](https://github.com/edwardtfn) +- Optimize Bluetooth proxy batching and increase scan buffer capacity [esphome#9328](https://github.com/esphome/esphome/pull/9328) by [@bdraco](https://github.com/bdraco) +- Fix scheduler race conditions and add comprehensive test suite [esphome#9348](https://github.com/esphome/esphome/pull/9348) by [@bdraco](https://github.com/bdraco) +- Reduce LightCall memory usage by 50 bytes per call [esphome#9333](https://github.com/esphome/esphome/pull/9333) by [@bdraco](https://github.com/bdraco) +- Optimize entity icon memory usage with USE_ENTITY_ICON flag [esphome#9337](https://github.com/esphome/esphome/pull/9337) by [@bdraco](https://github.com/bdraco) +- Reduce core RAM usage by 40 bytes with static initialization optimizations [esphome#9340](https://github.com/esphome/esphome/pull/9340) by [@bdraco](https://github.com/bdraco) +- Fix flaky test_api_conditional_memory by disabling API batch delay [esphome#9360](https://github.com/esphome/esphome/pull/9360) by [@bdraco](https://github.com/bdraco) +- Fix format specifier warnings in QuantileFilter logging [esphome#9364](https://github.com/esphome/esphome/pull/9364) by [@bdraco](https://github.com/bdraco) +- Optimize logger performance by eliminating redundant strlen calls [esphome#9369](https://github.com/esphome/esphome/pull/9369) by [@bdraco](https://github.com/bdraco) +- Replace deprecated sprintf with snprintf in API protobuf code generation [esphome#9365](https://github.com/esphome/esphome/pull/9365) by [@bdraco](https://github.com/bdraco) +- Refactor duplicate socket read error handling in API frame helper [esphome#9370](https://github.com/esphome/esphome/pull/9370) by [@bdraco](https://github.com/bdraco) +- Refactor entity lookup methods with macros in preparation for device_id support [esphome#9371](https://github.com/esphome/esphome/pull/9371) by [@bdraco](https://github.com/bdraco) +- Refactor API entity update dispatch to reduce code duplication [esphome#9372](https://github.com/esphome/esphome/pull/9372) by [@bdraco](https://github.com/bdraco) +- Don't compile unnecessary platform files (e.g. ESP8266 files on ESP32) [esphome#9354](https://github.com/esphome/esphome/pull/9354) by [@bdraco](https://github.com/bdraco) +- Refactor voice assistant API methods to reduce code duplication [esphome#9374](https://github.com/esphome/esphome/pull/9374) by [@bdraco](https://github.com/bdraco) +- Eliminate bluetooth_proxy guard variable to save 8 bytes RAM [esphome#9343](https://github.com/esphome/esphome/pull/9343) by [@bdraco](https://github.com/bdraco) +- [nextion] Optimize component memory usage with bitfield state management [esphome#9373](https://github.com/esphome/esphome/pull/9373) by [@edwardtfn](https://github.com/edwardtfn) +- Fix brightness setting not working on SSD1305 128x32 OLEDs [esphome#9376](https://github.com/esphome/esphome/pull/9376) by [@DooMMasteR](https://github.com/DooMMasteR) +- Optimize logger callback API by including message length parameter [esphome#9368](https://github.com/esphome/esphome/pull/9368) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Run integration tests only on Python 3.13 to reduce CI resource usage [esphome#9377](https://github.com/esphome/esphome/pull/9377) by [@bdraco](https://github.com/bdraco) +- Fix flaky test_api_conditional_memory and improve integration test patterns [esphome#9379](https://github.com/esphome/esphome/pull/9379) by [@bdraco](https://github.com/bdraco) +- [helpers] Improve `format_hex_pretty` [esphome#9380](https://github.com/esphome/esphome/pull/9380) by [@jesserockz](https://github.com/jesserockz) +- hydreon_rgxx: remove precipitation_intensity from RG9 [esphome#9367](https://github.com/esphome/esphome/pull/9367) by [@functionpointer](https://github.com/functionpointer) +- [image] Add byte order option and unit tests [esphome#9326](https://github.com/esphome/esphome/pull/9326) by [@clydebarrow](https://github.com/clydebarrow) +- Fix integration test race condition by isolating PlatformIO directories [esphome#9383](https://github.com/esphome/esphome/pull/9383) by [@bdraco](https://github.com/bdraco) +- Fix format string error in waveshare_epaper.cpp [esphome#9322](https://github.com/esphome/esphome/pull/9322) by [@tmpeh](https://github.com/tmpeh) +- Fix race condition in scheduler string lifetime integration test [esphome#9382](https://github.com/esphome/esphome/pull/9382) by [@bdraco](https://github.com/bdraco) +- lps22: add a component [esphome#7540](https://github.com/esphome/esphome/pull/7540) by [@nagisa](https://github.com/nagisa) (new-integration) +- [nfc] Update code to use `format_hex_pretty` [esphome#9384](https://github.com/esphome/esphome/pull/9384) by [@jesserockz](https://github.com/jesserockz) +- [helpers] Fix `format_hex_pretty` resize without separator [esphome#9389](https://github.com/esphome/esphome/pull/9389) by [@jesserockz](https://github.com/jesserockz) +- Add support for GL-R01 I2C - Time of Flight sensor [esphome#8329](https://github.com/esphome/esphome/pull/8329) by [@pkejval](https://github.com/pkejval) (new-integration) +- [esp32] Improve flexibility of `only_on_variant` [esphome#9390](https://github.com/esphome/esphome/pull/9390) by [@jesserockz](https://github.com/jesserockz) +- ESP_EXT1_WAKEUP_ANY_LOW is for s2/s3/c6/h2; ESP_EXT1_WAKEUP_ALL_LOW otherwise [esphome#9387](https://github.com/esphome/esphome/pull/9387) by [@candrews](https://github.com/candrews) +- [apds9960] Add 0x9E ID [esphome#9392](https://github.com/esphome/esphome/pull/9392) by [@Merikei](https://github.com/Merikei) +- Fix another race in the string lifetime scheduler test [esphome#9399](https://github.com/esphome/esphome/pull/9399) by [@bdraco](https://github.com/bdraco) +- [esp32_touch] Fix touch v1 [esphome#9414](https://github.com/esphome/esphome/pull/9414) by [@swoboda1337](https://github.com/swoboda1337) +- Set lib_compat_mode to strict [esphome#9408](https://github.com/esphome/esphome/pull/9408) by [@swoboda1337](https://github.com/swoboda1337) +- debug: bufferoverflow mitigation in DebugComponent::on_shutdown() [esphome#9422](https://github.com/esphome/esphome/pull/9422) by [@RubenKelevra](https://github.com/RubenKelevra) +- Exclude internal entities from name uniqueness validation [esphome#9410](https://github.com/esphome/esphome/pull/9410) by [@bdraco](https://github.com/bdraco) +- Handle ESP32 chunked MQTT messages missing topic on non-first chunks, causing panic [esphome#5786](https://github.com/esphome/esphome/pull/5786) by [@aaliddell](https://github.com/aaliddell) +- Replace remaining instances of USE_ESP32_CAMERA with USE_CAMERA [esphome#9401](https://github.com/esphome/esphome/pull/9401) by [@DT-art1](https://github.com/DT-art1) +- Sync api.proto from aioesphomeapi [esphome#9393](https://github.com/esphome/esphome/pull/9393) by [@bdraco](https://github.com/bdraco) +- Fix scheduler crash when cancelling items with NULL names [esphome#9444](https://github.com/esphome/esphome/pull/9444) by [@bdraco](https://github.com/bdraco) +- [wizard] use lowercase to match [esphome#9448](https://github.com/esphome/esphome/pull/9448) by [@ssieb](https://github.com/ssieb) +- Optimize API flash usage by storing message size at compile time [esphome#9447](https://github.com/esphome/esphome/pull/9447) by [@bdraco](https://github.com/bdraco) +- Optimize API proto size calculations by removing redundant force parameter [esphome#9449](https://github.com/esphome/esphome/pull/9449) by [@bdraco](https://github.com/bdraco) +- [ld2410] Remove redundant `delay()` calls, minor optimizations [esphome#9453](https://github.com/esphome/esphome/pull/9453) by [@kbx81](https://github.com/kbx81) +- [ld2420] Memory optimization, code clean-up [esphome#9426](https://github.com/esphome/esphome/pull/9426) by [@kbx81](https://github.com/kbx81) +- Reduce API flash usage by eliminating unnecessary template instantiations [esphome#9452](https://github.com/esphome/esphome/pull/9452) by [@bdraco](https://github.com/bdraco) +- Conditionally compile API user services to save 4.3KB flash (follow-up to #9262) [esphome#9451](https://github.com/esphome/esphome/pull/9451) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [packet_transport] Don't run update if ping_pong not enabled. [esphome#9434](https://github.com/esphome/esphome/pull/9434) by [@clydebarrow](https://github.com/clydebarrow) +- [sx127x, sx126x] Fix preamble_size default and validation [esphome#9454](https://github.com/esphome/esphome/pull/9454) by [@swoboda1337](https://github.com/swoboda1337) +- Apply existing protobuf buffer optimization to nested message encoding (~2.3x speed up) [esphome#9458](https://github.com/esphome/esphome/pull/9458) by [@bdraco](https://github.com/bdraco) +- Only generate protobuf encode/decode methods for the message direction they're used [esphome#9461](https://github.com/esphome/esphome/pull/9461) by [@bdraco](https://github.com/bdraco) +- [usb_uart] Be flexible about descriptor layout for CDC-ACM devices [esphome#9425](https://github.com/esphome/esphome/pull/9425) by [@clydebarrow](https://github.com/clydebarrow) +- [libretiny] Set lib_compat_mode to soft for libretiny [esphome#9439](https://github.com/esphome/esphome/pull/9439) by [@swoboda1337](https://github.com/swoboda1337) +- (Maybe?) fix I2S speaker internal DAC mode [esphome#9435](https://github.com/esphome/esphome/pull/9435) by [@pzich](https://github.com/pzich) +- [lvgl] Post-process size arguments in meter config [esphome#9466](https://github.com/esphome/esphome/pull/9466) by [@pzich](https://github.com/pzich) +- Automatically disable interrupts for ESP8266 GPIO16 binary sensors [esphome#9467](https://github.com/esphome/esphome/pull/9467) by [@bdraco](https://github.com/bdraco) +- [substitutions] Fix #7189 [esphome#9469](https://github.com/esphome/esphome/pull/9469) by [@jpeletier](https://github.com/jpeletier) +- Fix pre-commit CI failures by skipping local hooks that require virtual environment [esphome#9476](https://github.com/esphome/esphome/pull/9476) by [@bdraco](https://github.com/bdraco) +- [esp_ldo] Component schema; default priority [esphome#9479](https://github.com/esphome/esphome/pull/9479) by [@clydebarrow](https://github.com/clydebarrow) +- Follow logging best practices by removing redundant component prefix [esphome#9481](https://github.com/esphome/esphome/pull/9481) by [@bdraco](https://github.com/bdraco) +- Fix dormant bug in RAMAllocator::reallocate() manual_size calculation [esphome#9482](https://github.com/esphome/esphome/pull/9482) by [@bdraco](https://github.com/bdraco) +- Suppress spurious volatile and Python syntax warnings during builds [esphome#9488](https://github.com/esphome/esphome/pull/9488) by [@bdraco](https://github.com/bdraco) +- [online_image] Support `byte_order` [esphome#9502](https://github.com/esphome/esphome/pull/9502) by [@clydebarrow](https://github.com/clydebarrow) +- [json] Bump ArduinoJson library to 7.4.2 [esphome#8857](https://github.com/esphome/esphome/pull/8857) by [@kahrendt](https://github.com/kahrendt) (breaking-change) +- [fan] Do not save state for fan if configured as NO_RESTORE [esphome#9472](https://github.com/esphome/esphome/pull/9472) by [@skyegecko](https://github.com/skyegecko) +- Fix LibreTiny compilation error by updating ESPAsyncWebServer and dependencies [esphome#9492](https://github.com/esphome/esphome/pull/9492) by [@bdraco](https://github.com/bdraco) +- [captive_portal] Add test case for libretiny [esphome#9457](https://github.com/esphome/esphome/pull/9457) by [@clydebarrow](https://github.com/clydebarrow) +- [opentherm.output] Fix `lerp` [esphome#9506](https://github.com/esphome/esphome/pull/9506) by [@kbx81](https://github.com/kbx81) +- [servo] Fix `lerp` [esphome#9507](https://github.com/esphome/esphome/pull/9507) by [@kbx81](https://github.com/kbx81) +- Add missing clang-tidy NOLINT comments for ArduinoJson v7 in IDF webserver [esphome#9508](https://github.com/esphome/esphome/pull/9508) by [@bdraco](https://github.com/bdraco) +- [core] Don't issue -Wno-volatile for host platform [esphome#9511](https://github.com/esphome/esphome/pull/9511) by [@clydebarrow](https://github.com/clydebarrow) +- [component] Fix `is_ready` flag when loop disabled [esphome#9501](https://github.com/esphome/esphome/pull/9501) by [@jesserockz](https://github.com/jesserockz) +- [ms8607] Fix humidity calc [esphome#9499](https://github.com/esphome/esphome/pull/9499) by [@LorbusChris](https://github.com/LorbusChris) +- Fix timing overflow when components disable themselves during loop [esphome#9529](https://github.com/esphome/esphome/pull/9529) by [@bdraco](https://github.com/bdraco) +- [as3935_spi] remove unnecessary includes [esphome#9528](https://github.com/esphome/esphome/pull/9528) by [@ssieb](https://github.com/ssieb) + + +
    + +### Dependency Changes + +
    + + + + +- Bump pytest-cov from 6.1.1 to 6.2.1 [esphome#9063](https://github.com/esphome/esphome/pull/9063) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.26.0 to 1.0.0 [esphome#9067](https://github.com/esphome/esphome/pull/9067) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-buildx-action from 3.10.0 to 3.11.0 in the docker-actions group [esphome#9105](https://github.com/esphome/esphome/pull/9105) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.11.13 to 0.12.0 [esphome#9120](https://github.com/esphome/esphome/pull/9120) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/setup-buildx-action from 3.11.0 to 3.11.1 in the docker-actions group [esphome#9133](https://github.com/esphome/esphome/pull/9133) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 32.2.3 to 32.2.4 [esphome#9132](https://github.com/esphome/esphome/pull/9132) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 8.4.0 to 8.4.1 [esphome#9131](https://github.com/esphome/esphome/pull/9131) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esptool from 4.8.1 to 4.9.0 [esphome#9158](https://github.com/esphome/esphome/pull/9158) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 32.2.4 to 33.1.0 [esphome#9173](https://github.com/esphome/esphome/pull/9173) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump flake8 from 7.2.0 to 7.3.0 [esphome#9172](https://github.com/esphome/esphome/pull/9172) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 33.1.0 to 33.1.1 [esphome#9187](https://github.com/esphome/esphome/pull/9187) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.12.0 to 0.12.1 [esphome#9241](https://github.com/esphome/esphome/pull/9241) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 33.1.1 to 34.0.0 [esphome#9265](https://github.com/esphome/esphome/pull/9265) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 34.0.0 to 34.1.0 [esphome#9301](https://github.com/esphome/esphome/pull/9301) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.12.1 to 0.12.2 [esphome#9311](https://github.com/esphome/esphome/pull/9311) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump puremagic from 1.29 to 1.30 [esphome#9320](https://github.com/esphome/esphome/pull/9320) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 34.1.0 to 34.2.0 [esphome#9391](https://github.com/esphome/esphome/pull/9391) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 34.2.0 to 34.2.1 [esphome#9460](https://github.com/esphome/esphome/pull/9460) by [@dependabot[bot]](https://github.com/dependabot[bot]) + + +
    + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/2025.8.0.mdx b/src/content/docs/changelog/2025.8.0.mdx new file mode 100644 index 0000000000..98877e0c39 --- /dev/null +++ b/src/content/docs/changelog/2025.8.0.mdx @@ -0,0 +1,698 @@ +--- +description: "Changelog for ESPHome 2025.8.0." +title: "ESPHome 2025.8.0 - 20th August 2025" +pagefind: false +slug: "changelog/2025.8.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + +## Release Overview + +ESPHome 2025.8.0 expands platform support with the introduction of Nordic nRF52 devices, +adds mesh communication capabilities, and delivers significant performance improvements. This release +focuses on architectural innovation and memory optimization while introducing new hardware possibilities. + +**Key Highlights:** + +- **New nRF52 platform** based on Zephyr RTOS opens Nordic semiconductor ecosystem +- **ESP-NOW mesh communication** enables direct device-to-device connectivity +- **High-performance MIPI DSI displays** for ESP32-P4 professional applications +- **Extensive memory optimizations** with up to 10x performance improvements in key areas +- **Python 3.11+ requirement** (breaking change - Python 3.10 support dropped) + +## NRF52 Platform Support + +ESPHome 2025.8.0 introduces basic support for Nordic nRF52 series microcontrollers through the new +[Nrf52](/components/nrf52/) platform. This implementation is built on the Zephyr RTOS, providing a robust +foundation for Nordic semiconductor devices. + +**Key Features:** + +- **Complete platform integration** with ESPHome's component ecosystem +- **ADC support** for analog sensor reading with configurable resolution +- **GPIO functionality** with interrupt support and pin configuration +- **Zephyr debug component** for advanced debugging and development + +The nRF52 platform opens up new possibilities for low-power, Bluetooth-enabled devices while maintaining +the familiar ESPHome configuration syntax and component compatibility. + +## ESP-NOW Communication + +The new [Espnow](/components/espnow/) component brings device-to-device communication to ESP32 platforms without +requiring WiFi infrastructure. ESP-NOW enables direct communication between ESP32 devices using the 2.4GHz +band with minimal power consumption. + +**Applications:** + +- **Mesh sensor networks** - Sensors can communicate directly without WiFi routers +- **Remote control systems** - Direct device control with low latency +- **Backup communication** - Fallback when WiFi is unavailable +- **Battery-powered devices** - Efficient communication for power-constrained applications + +This protocol is particularly valuable for distributed sensor networks and scenarios where traditional +WiFi infrastructure is impractical or unavailable. + +## MIPI DSI Display Support + +ESPHome now supports high-performance MIPI DSI displays through the new [Mipi Dsi](/components/display/mipi_dsi/) +component, specifically designed for ESP32-P4 processors with DSI interfaces. + +**Benefits:** + +- **High-resolution displays** with excellent performance +- **Hardware acceleration** through dedicated DSI controllers +- **Reduced CPU overhead** compared to traditional SPI displays +- **Professional display quality** for advanced applications + +This addition significantly expands ESPHome's display capabilities, enabling professional-grade user interfaces +and high-resolution graphics applications. + +## Memory & Performance Optimizations + +ESPHome 2025.8.0 includes extensive optimizations focused on reducing memory usage and improving performance: + +**Flash Memory Savings:** + +- Conditional compilation removes unused API features (thousands of bytes saved) +- Optimized protobuf implementations with zero-copy techniques +- Reduced code duplication across components +- Streamlined error handling and logging systems + +**Runtime Performance:** + +- 10x faster string encoding with optimized memcpy operations +- Enhanced scheduler with reduced millis() calls +- Improved BLE scanning with batched processing +- Zero-copy protobuf fields for reduced memory allocations + +## Python 3.11+ Requirement + +Starting with ESPHome 2025.8.0, **Python 3.11 or higher is required** to run ESPHome. This change enables us to: + +- Utilize modern Python features and improvements +- Remove legacy compatibility code that was needed for older Python versions +- Maintain a more secure and efficient codebase + +### Why This Change? + +Python 3.10 reaches its [end of life in October 2026](https://devguide.python.org/versions/). This +upgrade is necessary for the project to move forward with modern development practices and maintain +long-term security and maintainability. + +### What You Need to Do + +| Installation Method | Action Required | +| ------------------------- | --------------------------------------------------- | +| Home Assistant Add-on | **No action needed** - Already uses Python 3.12 | +| Container Images (Docker) | **No action needed** - Already uses Python 3.12 | +| Direct Installation (pip) | **Upgrade Python to 3.11+** before updating ESPHome | + +> [!warning] +> If you're running ESPHome directly on your machine with Python 3.10 or older, running `pip install -U esphome` +> will not upgrade beyond version 2025.7.x. You must upgrade your Python installation first. + +## Breaking Changes + +ESPHome 2025.8.0 includes several breaking changes that may require action on your part: + +### Bluetooth and BLE Changes + +- Bluetooth Proxy: Parsed advertisement support and V1 connection support removed to save memory +- BLE: Conditional compilation for advertising and service classes may reduce available features if not + explicitly enabled + +- May affect older components using deprecated Bluetooth features + +### API Optimizations + +- Deprecated protobuf fields removed (reduces flash usage) +- Conditional compilation for Home Assistant state/service subscriptions +- May affect custom API clients using deprecated fields + +### Component Filter Changes + +- [LD2410](/components/sensor/ld2410/) and [LD2450](/components/sensor/ld2450/) + components now use native filters instead of `throttle` + +- See the component documentation for updated filter configuration + +### ESP32 Touch Sensor + +- Workaround implemented for ESP-IDF v5.4 regression +- May affect touch sensor behavior on newer ESP-IDF versions + +Most of these changes are automatic optimizations that shouldn't affect typical usage, but custom components +or advanced configurations may need updates. + +{/* markdownlint-disable MD013 */} + +## Release 2025.8.1 - August 25 + +
    + + +- [api] Add zero-copy StringRef methods for compilation_time and effect_name [esphome#10257](https://github.com/esphome/esphome/pull/10257) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Add log helper functions to reduce flash usage by 120 bytes [esphome#10243](https://github.com/esphome/esphome/pull/10243) by [@bdraco](https://github.com/bdraco) +- [api] Add `USE_API_HOMEASSISTANT_SERVICES` if using `tag_scanned` action [esphome#10316](https://github.com/esphome/esphome/pull/10316) by [@jesserockz](https://github.com/jesserockz) +- [http_request] Fix for host after ArduinoJson library bump [esphome#10348](https://github.com/esphome/esphome/pull/10348) by [@clydebarrow](https://github.com/clydebarrow) +- [core] Improve error reporting for entity name conflicts with non-ASCII characters [esphome#10329](https://github.com/esphome/esphome/pull/10329) by [@bdraco](https://github.com/bdraco) +- [pvvx_mithermometer] Fix race condition with BLE authentication [esphome#10327](https://github.com/esphome/esphome/pull/10327) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Optimize BLE connection parameters for different connection types [esphome#10356](https://github.com/esphome/esphome/pull/10356) by [@bdraco](https://github.com/bdraco) +- [esp32_ble] Increase GATT connection retry count to use full timeout window [esphome#10376](https://github.com/esphome/esphome/pull/10376) by [@bdraco](https://github.com/bdraco) +- [script] Fix parallel mode scripts with delays cancelling each other [esphome#10324](https://github.com/esphome/esphome/pull/10324) by [@bdraco](https://github.com/bdraco) +- [deep_sleep] Fix ESP32-C6 compilation error with gpio_deep_sleep_hold_en() [esphome#10345](https://github.com/esphome/esphome/pull/10345) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Reduce log level for harmless BLE timeout race conditions [esphome#10339](https://github.com/esphome/esphome/pull/10339) by [@bdraco](https://github.com/bdraco) +- [lvgl] Fix meter rotation [esphome#10342](https://github.com/esphome/esphome/pull/10342) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32_ble_tracker] Fix on_scan_end trigger compilation without USE_ESP32_BLE_DEVICE [esphome#10399](https://github.com/esphome/esphome/pull/10399) by [@bdraco](https://github.com/bdraco) +- [test] Add integration test for light effect memory corruption fix [esphome#10417](https://github.com/esphome/esphome/pull/10417) by [@bdraco](https://github.com/bdraco) +- [web_server] Use oi.esphome.io for css and js assets [esphome#10296](https://github.com/esphome/esphome/pull/10296) by [@clydebarrow](https://github.com/clydebarrow) + +
    + +## Release 2025.8.2 - August 29 + +
    + + +- [wifi] Fix reconnection failures after adapter restart by not clearing netif pointers [esphome#10458](https://github.com/esphome/esphome/pull/10458) by [@bdraco](https://github.com/bdraco) +- [mipi_spi] Fix dimensions [esphome#10443](https://github.com/esphome/esphome/pull/10443) by [@clydebarrow](https://github.com/clydebarrow) +- [i2c] Perform register reads as single transactions [esphome#10389](https://github.com/esphome/esphome/pull/10389) by [@clydebarrow](https://github.com/clydebarrow) +- [wifi] Fix retry with hidden networks. [esphome#10445](https://github.com/esphome/esphome/pull/10445) by [@clydebarrow](https://github.com/clydebarrow) +- Fix AttributeError when uploading OTA to offline OpenThread devices [esphome#10459](https://github.com/esphome/esphome/pull/10459) by [@bdraco](https://github.com/bdraco) +- [rtttl] Fix RTTTL for speakers [esphome#10381](https://github.com/esphome/esphome/pull/10381) by [@fortuna](https://github.com/fortuna) +- [esphome] Fix OTA watchdog resets by validating all magic bytes before blocking [esphome#10401](https://github.com/esphome/esphome/pull/10401) by [@bdraco](https://github.com/bdraco) + +
    + +## Release 2025.8.3 - September 4 + +
    + + +- [mcp4461] Fix reading level [esphome#10479](https://github.com/esphome/esphome/pull/10479) by [@p1ngb4ck](https://github.com/p1ngb4ck) +- Fix incorrect entity count due to undefined execution order with globals [esphome#10497](https://github.com/esphome/esphome/pull/10497) by [@bdraco](https://github.com/bdraco) +- [mipi_dsi] Fix config for Guition screen [esphome#10464](https://github.com/esphome/esphome/pull/10464) by [@clydebarrow](https://github.com/clydebarrow) +- [mcp4461] Fix read transaction [esphome#10465](https://github.com/esphome/esphome/pull/10465) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32] Rebuild when idf_component.yml changes [esphome#10540](https://github.com/esphome/esphome/pull/10540) by [@swoboda1337](https://github.com/swoboda1337) +- [i2c] Fix bug in write_register16 [esphome#10547](https://github.com/esphome/esphome/pull/10547) by [@latonita](https://github.com/latonita) +- [esp32] Clear IDF environment variables [esphome#10527](https://github.com/esphome/esphome/pull/10527) by [@swoboda1337](https://github.com/swoboda1337) +- [api] Fix VERY_VERBOSE logging compilation error with bool arrays [esphome#10539](https://github.com/esphome/esphome/pull/10539) by [@bdraco](https://github.com/bdraco) + +
    + +## Release 2025.8.4 - September 10 + +
    + + +- [sen5x] Fix initialization [esphome#10603](https://github.com/esphome/esphome/pull/10603) by [@kbx81](https://github.com/kbx81) +- [kmeteriso] Fix i2c call [esphome#10618](https://github.com/esphome/esphome/pull/10618) by [@clydebarrow](https://github.com/clydebarrow) +- [light] add missing header [esphome#10590](https://github.com/esphome/esphome/pull/10590) by [@tomaszduda23](https://github.com/tomaszduda23) + +
    + +## Full list of changes + +### New Features + +- [output] Add `set_min_power` & `set_max_power` actions for `FloatOutput` [esphome#8934](https://github.com/esphome/esphome/pull/8934) by [@DjordjeMandic](https://github.com/DjordjeMandic) (new-feature) +- [nrf52] add adc [esphome#9321](https://github.com/esphome/esphome/pull/9321) by [@tomaszduda23](https://github.com/tomaszduda23) (new-feature) +- [espnow] Basic communication between ESP32 devices [esphome#9582](https://github.com/esphome/esphome/pull/9582) by [@nielsnl68](https://github.com/nielsnl68) (new-component) (new-feature) +- [esp32] Add config option to execute from PSRAM [esphome#9907](https://github.com/esphome/esphome/pull/9907) by [@clydebarrow](https://github.com/clydebarrow) (new-feature) +- [color][lvgl] Allow Color to be used for lv_color_t [esphome#10016](https://github.com/esphome/esphome/pull/10016) by [@clydebarrow](https://github.com/clydebarrow) (new-feature) +- [esp32] Add framework migration warning for upcoming ESP-IDF default change [esphome#10030](https://github.com/esphome/esphome/pull/10030) by [@bdraco](https://github.com/bdraco) (new-feature) +- Add CO5300 display support [esphome#9739](https://github.com/esphome/esphome/pull/9739) by [@mschnaubelt](https://github.com/mschnaubelt) (new-feature) +- [remote_transmitter] Add digital_write automation [esphome#10069](https://github.com/esphome/esphome/pull/10069) by [@swoboda1337](https://github.com/swoboda1337) (new-feature) +- Support multiple --device arguments for address fallback [esphome#10003](https://github.com/esphome/esphome/pull/10003) by [@bdraco](https://github.com/bdraco) (new-feature) +- Add device class absolute_humidity to the absolute humidity component [esphome#10100](https://github.com/esphome/esphome/pull/10100) by [@mbo18](https://github.com/mbo18) (new-feature) +- [switch] Add `switch.control` automation action [esphome#10105](https://github.com/esphome/esphome/pull/10105) by [@edwardtfn](https://github.com/edwardtfn) (new-feature) +- [switch] Add `control()` method to API [esphome#10118](https://github.com/esphome/esphome/pull/10118) by [@edwardtfn](https://github.com/edwardtfn) (new-feature) +- [switch] Add trigger `on_state` [esphome#10108](https://github.com/esphome/esphome/pull/10108) by [@edwardtfn](https://github.com/edwardtfn) (new-feature) +- [nrf52, zephyr_debug] add zephyr debug component [esphome#8319](https://github.com/esphome/esphome/pull/8319) by [@tomaszduda23](https://github.com/tomaszduda23) (new-feature) +- [sensor] Extend timeout filter with option to return last value received [esphome#10115](https://github.com/esphome/esphome/pull/10115) by [@kbx81](https://github.com/kbx81) (new-feature) +- [substitutions] Add some safe built-in functions to jinja parsing [esphome#10178](https://github.com/esphome/esphome/pull/10178) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- [ld2412] New component [esphome#9075](https://github.com/esphome/esphome/pull/9075) by [@Rihan9](https://github.com/Rihan9) (new-component) (new-feature) (new-platform) +- [entity] Allow `device_id` to be blank on entities [esphome#10217](https://github.com/esphome/esphome/pull/10217) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +### New Components + +- [nrf52, core] nrf52 core based on zephyr [esphome#7049](https://github.com/esphome/esphome/pull/7049) by [@tomaszduda23](https://github.com/tomaszduda23) (new-component) +- Add runtime_stats component for performance debugging and analysis [esphome#9386](https://github.com/esphome/esphome/pull/9386) by [@bdraco](https://github.com/bdraco) (new-component) +- [mipi] Refactor constants and functions [esphome#9853](https://github.com/esphome/esphome/pull/9853) by [@clydebarrow](https://github.com/clydebarrow) (new-component) +- [mipi_dsi] New display driver for P4 DSI [esphome#9403](https://github.com/esphome/esphome/pull/9403) by [@clydebarrow](https://github.com/clydebarrow) (new-component) (new-platform) +- [espnow] Basic communication between ESP32 devices [esphome#9582](https://github.com/esphome/esphome/pull/9582) by [@nielsnl68](https://github.com/nielsnl68) (new-component) (new-feature) +- [ld2412] New component [esphome#9075](https://github.com/esphome/esphome/pull/9075) by [@Rihan9](https://github.com/Rihan9) (new-component) (new-feature) (new-platform) + +### New Platforms + +- [mipi_dsi] New display driver for P4 DSI [esphome#9403](https://github.com/esphome/esphome/pull/9403) by [@clydebarrow](https://github.com/clydebarrow) (new-component) (new-platform) +- [ld2412] New component [esphome#9075](https://github.com/esphome/esphome/pull/9075) by [@Rihan9](https://github.com/Rihan9) (new-component) (new-feature) (new-platform) + +### Breaking Changes + +- Remove parsed advertisement support from bluetooth_proxy to save memory [esphome#9489](https://github.com/esphome/esphome/pull/9489) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Drop Python 3.10 support, require Python 3.11+ [esphome#9522](https://github.com/esphome/esphome/pull/9522) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Remove legacy unique_id field from entities [esphome#9022](https://github.com/esphome/esphome/pull/9022) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [api] Remove deprecated protobuf fields to reduce flash usage [esphome#9679](https://github.com/esphome/esphome/pull/9679) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [api] Add conditional compilation for Home Assistant state subscriptions [esphome#9898](https://github.com/esphome/esphome/pull/9898) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [api] Add conditional compilation for Home Assistant service subscriptions [esphome#9900](https://github.com/esphome/esphome/pull/9900) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32_touch] Work around ESP-IDF v5.4 regression in `touch_pad_read_filtered` [esphome#9957](https://github.com/esphome/esphome/pull/9957) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [ld2410] Replace `throttle` with native filters [esphome#10019](https://github.com/esphome/esphome/pull/10019) by [@kbx81](https://github.com/kbx81) (breaking-change) +- [esp32_ble] Conditionally compile BLE advertising to reduce flash usage [esphome#10099](https://github.com/esphome/esphome/pull/10099) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32_ble_client] Conditionally compile BLE service classes to reduce flash usage [esphome#10114](https://github.com/esphome/esphome/pull/10114) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [bluetooth_proxy] Remove V1 connection support [esphome#10107](https://github.com/esphome/esphome/pull/10107) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32] Add IDF log_level option [esphome#10134](https://github.com/esphome/esphome/pull/10134) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [ld2450] Replace `throttle` with native filters [esphome#10196](https://github.com/esphome/esphome/pull/10196) by [@kbx81](https://github.com/kbx81) (breaking-change) + +### All changes + +
    + + +- [web_server] fix `Arudino` typo [esphome#9404](https://github.com/esphome/esphome/pull/9404) by [@ximex](https://github.com/ximex) +- Speed up clang-tidy CI by 80%+ with incremental checking [esphome#9396](https://github.com/esphome/esphome/pull/9396) by [@bdraco](https://github.com/bdraco) +- Fix PlatformIO cache in CI by adding platformio.ini hash to cache key [esphome#9411](https://github.com/esphome/esphome/pull/9411) by [@bdraco](https://github.com/bdraco) +- Fix clang-tidy triggering full scan on Python-only core file changes [esphome#9412](https://github.com/esphome/esphome/pull/9412) by [@bdraco](https://github.com/bdraco) +- Implement shared PlatformIO cache for integration tests [esphome#9413](https://github.com/esphome/esphome/pull/9413) by [@bdraco](https://github.com/bdraco) +- Fix Python cache for all pytest CI jobs [esphome#9415](https://github.com/esphome/esphome/pull/9415) by [@bdraco](https://github.com/bdraco) +- Fix Python cache key mismatch for all pytest jobs [esphome#9417](https://github.com/esphome/esphome/pull/9417) by [@bdraco](https://github.com/bdraco) +- Adding support for Airthings Wave Gen2 [esphome#8460](https://github.com/esphome/esphome/pull/8460) by [@precurse](https://github.com/precurse) +- Fix Windows virtual environment activation in CI workflows [esphome#9420](https://github.com/esphome/esphome/pull/9420) by [@bdraco](https://github.com/bdraco) +- Fix clang-tidy not finding changed files on squash-merge commits [esphome#9421](https://github.com/esphome/esphome/pull/9421) by [@bdraco](https://github.com/bdraco) +- [config] Add bitrate validator [esphome#9423](https://github.com/esphome/esphome/pull/9423) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32] remove debug log [esphome#9424](https://github.com/esphome/esphome/pull/9424) by [@ssieb](https://github.com/ssieb) +- CI: Centralize test determination logic to reduce unnecessary job runners [esphome#9432](https://github.com/esphome/esphome/pull/9432) by [@bdraco](https://github.com/bdraco) +- Disable WiFi when using Ethernet to save memory [esphome#9456](https://github.com/esphome/esphome/pull/9456) by [@bdraco](https://github.com/bdraco) +- Fix pre-commit CI failures by skipping local hooks that require virtual environment [esphome#9476](https://github.com/esphome/esphome/pull/9476) by [@bdraco](https://github.com/bdraco) +- Fix clang-tidy skipping when Python linters are skipped [esphome#9463](https://github.com/esphome/esphome/pull/9463) by [@bdraco](https://github.com/bdraco) +- Refactor format_hex_pretty functions to eliminate code duplication [esphome#9480](https://github.com/esphome/esphome/pull/9480) by [@bdraco](https://github.com/bdraco) +- Fix pre-commit CI issues by switching to lite mode [esphome#9484](https://github.com/esphome/esphome/pull/9484) by [@bdraco](https://github.com/bdraco) +- Refactor WebServer request handling for improved maintainability [esphome#9470](https://github.com/esphome/esphome/pull/9470) by [@bdraco](https://github.com/bdraco) +- Fix WebServer routes constant naming convention [esphome#9497](https://github.com/esphome/esphome/pull/9497) by [@bdraco](https://github.com/bdraco) +- Remove redundant pyupgrade CI job (follow-up to #9484) [esphome#9493](https://github.com/esphome/esphome/pull/9493) by [@bdraco](https://github.com/bdraco) +- Add pre-commit hooks to fix common formatting issues causing CI failures [esphome#9494](https://github.com/esphome/esphome/pull/9494) by [@bdraco](https://github.com/bdraco) +- Remove yamllint job from CI since its now handled by pre-commit job [esphome#9500](https://github.com/esphome/esphome/pull/9500) by [@bdraco](https://github.com/bdraco) +- Fix blocked CI cancellation caused by always() in clang-tidy workflow [esphome#9503](https://github.com/esphome/esphome/pull/9503) by [@bdraco](https://github.com/bdraco) +- Include entire platformio.ini in clang-tidy hash calculation [esphome#9509](https://github.com/esphome/esphome/pull/9509) by [@bdraco](https://github.com/bdraco) +- Enable issue tracking [esphome#9515](https://github.com/esphome/esphome/pull/9515) by [@jesserockz](https://github.com/jesserockz) +- [repo] Fix issue template config.yml [esphome#9516](https://github.com/esphome/esphome/pull/9516) by [@jesserockz](https://github.com/jesserockz) +- [ms8607] Fix humidity calc [esphome#9499](https://github.com/esphome/esphome/pull/9499) by [@LorbusChris](https://github.com/LorbusChris) +- [nrf52, core] nrf52 core based on zephyr [esphome#7049](https://github.com/esphome/esphome/pull/7049) by [@tomaszduda23](https://github.com/tomaszduda23) (new-component) +- remove duplication from component_iterator [esphome#7210](https://github.com/esphome/esphome/pull/7210) by [@tomaszduda23](https://github.com/tomaszduda23) +- [adc] Use new library with ESP-IDF v5 [esphome#9021](https://github.com/esphome/esphome/pull/9021) by [@edwardtfn](https://github.com/edwardtfn) +- [mipi_spi] Template code, partial buffer support [esphome#9314](https://github.com/esphome/esphome/pull/9314) by [@clydebarrow](https://github.com/clydebarrow) +- Remove dead code: 64-bit protobuf types never used in 7 years [esphome#9471](https://github.com/esphome/esphome/pull/9471) by [@bdraco](https://github.com/bdraco) +- Add runtime_stats component for performance debugging and analysis [esphome#9386](https://github.com/esphome/esphome/pull/9386) by [@bdraco](https://github.com/bdraco) (new-component) +- Make API ConnectRequest optional for passwordless connections [esphome#9445](https://github.com/esphome/esphome/pull/9445) by [@bdraco](https://github.com/bdraco) +- Improve API protobuf decode method readability and reduce code size [esphome#9455](https://github.com/esphome/esphome/pull/9455) by [@bdraco](https://github.com/bdraco) +- Reduce API component flash usage by consolidating error logging [esphome#9468](https://github.com/esphome/esphome/pull/9468) by [@bdraco](https://github.com/bdraco) +- Remove parsed advertisement support from bluetooth_proxy to save memory [esphome#9489](https://github.com/esphome/esphome/pull/9489) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Drop Python 3.10 support, require Python 3.11+ [esphome#9522](https://github.com/esphome/esphome/pull/9522) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Optimize MedianFilter memory allocation by adding vector reserve [esphome#9531](https://github.com/esphome/esphome/pull/9531) by [@bdraco](https://github.com/bdraco) +- [i2c] Use new driver with IDF 5.4.2+ [esphome#8483](https://github.com/esphome/esphome/pull/8483) by [@swoboda1337](https://github.com/swoboda1337) +- Optimize scheduler timing by reducing millis() calls [esphome#9524](https://github.com/esphome/esphome/pull/9524) by [@bdraco](https://github.com/bdraco) +- Optimize API component LOGCONFIG usage for flash memory savings [esphome#9526](https://github.com/esphome/esphome/pull/9526) by [@bdraco](https://github.com/bdraco) +- Skip API log message calls for unsubscribed log levels [esphome#9514](https://github.com/esphome/esphome/pull/9514) by [@bdraco](https://github.com/bdraco) +- Optimize API connection batch priority message handling to reduce flash usage [esphome#9510](https://github.com/esphome/esphome/pull/9510) by [@bdraco](https://github.com/bdraco) +- Reduce flash usage by replacing ProtoSize template with specialized methods [esphome#9487](https://github.com/esphome/esphome/pull/9487) by [@bdraco](https://github.com/bdraco) +- [ssd1306_base] fix typo `brighrness` [esphome#9491](https://github.com/esphome/esphome/pull/9491) by [@ximex](https://github.com/ximex) +- Fix CI failures from merge collisions [esphome#9535](https://github.com/esphome/esphome/pull/9535) by [@bdraco](https://github.com/bdraco) +- Remove legacy unique_id field from entities [esphome#9022](https://github.com/esphome/esphome/pull/9022) by [@bdraco](https://github.com/bdraco) (breaking-change) +- Reduce binary size with field-level conditional compilation for protobuf messages [esphome#9473](https://github.com/esphome/esphome/pull/9473) by [@bdraco](https://github.com/bdraco) +- [adc] Test platforms on IDF [esphome#9536](https://github.com/esphome/esphome/pull/9536) by [@edwardtfn](https://github.com/edwardtfn) +- Refactor API connection entity encoding to reduce code duplication [esphome#9505](https://github.com/esphome/esphome/pull/9505) by [@bdraco](https://github.com/bdraco) +- Reduce API proto vtable overhead by splitting decode functionality [esphome#9541](https://github.com/esphome/esphome/pull/9541) by [@bdraco](https://github.com/bdraco) +- Add ability to have same entity names on different sub devices [esphome#9355](https://github.com/esphome/esphome/pull/9355) by [@bdraco](https://github.com/bdraco) +- Synchronise Device Classes from Home Assistant [esphome#9513](https://github.com/esphome/esphome/pull/9513) by [@esphomebot](https://github.com/esphomebot) +- Update script/helpers.py to use ESPHome YAML parser for integration fixtures [esphome#9544](https://github.com/esphome/esphome/pull/9544) by [@bdraco](https://github.com/bdraco) +- [adc] Add ESP32-C5 support [esphome#9486](https://github.com/esphome/esphome/pull/9486) by [@edwardtfn](https://github.com/edwardtfn) +- Move CONF_ALTITUDE_COMPENSATION to const.py [esphome#9563](https://github.com/esphome/esphome/pull/9563) by [@mikelawrence](https://github.com/mikelawrence) +- Revert "Bump ESP32 IDF version to 5.4.2 and Arduino version to 3.2.1" [esphome#9574](https://github.com/esphome/esphome/pull/9574) by [@jesserockz](https://github.com/jesserockz) +- Workflow to auto label PRs based on changes [esphome#9585](https://github.com/esphome/esphome/pull/9585) by [@jesserockz](https://github.com/jesserockz) +- [dependabot] Use specific labels for github-actions updates [esphome#9586](https://github.com/esphome/esphome/pull/9586) by [@jesserockz](https://github.com/jesserockz) +- [CI] Add `by-code-owner` labelling [esphome#9589](https://github.com/esphome/esphome/pull/9589) by [@jesserockz](https://github.com/jesserockz) +- [CI] Add `needs-docs` labelling [esphome#9591](https://github.com/esphome/esphome/pull/9591) by [@jesserockz](https://github.com/jesserockz) +- Skip compilation of web_server_v1.cpp when not using version 1 [esphome#9590](https://github.com/esphome/esphome/pull/9590) by [@bdraco](https://github.com/bdraco) +- Update Issues / Feature Requests links in Readme [esphome#9600](https://github.com/esphome/esphome/pull/9600) by [@RubenKelevra](https://github.com/RubenKelevra) +- Add some AI instructions [esphome#9606](https://github.com/esphome/esphome/pull/9606) by [@jesserockz](https://github.com/jesserockz) +- Update Issues / Feature Requests links [esphome#9607](https://github.com/esphome/esphome/pull/9607) by [@RubenKelevra](https://github.com/RubenKelevra) +- [ci] Implement external component PR workflow [esphome#9595](https://github.com/esphome/esphome/pull/9595) by [@clydebarrow](https://github.com/clydebarrow) +- [ci] attempt to fix permission for workflow [esphome#9610](https://github.com/esphome/esphome/pull/9610) by [@clydebarrow](https://github.com/clydebarrow) +- Refactor API send_message from template to non-template implementation [esphome#9561](https://github.com/esphome/esphome/pull/9561) by [@bdraco](https://github.com/bdraco) +- Fix scheduler rollover detection with concurrent task calls [esphome#9624](https://github.com/esphome/esphome/pull/9624) by [@bdraco](https://github.com/bdraco) +- adds nRF52840 to PR templates [esphome#9631](https://github.com/esphome/esphome/pull/9631) by [@tomaszduda23](https://github.com/tomaszduda23) +- [code quality] move const to esphome/const.py [esphome#9632](https://github.com/esphome/esphome/pull/9632) by [@tomaszduda23](https://github.com/tomaszduda23) +- [esp32] Allow variant in place of board [esphome#9427](https://github.com/esphome/esphome/pull/9427) by [@clydebarrow](https://github.com/clydebarrow) +- [scheduler] Fix LibreTiny compilation error due to missing atomic operations [esphome#9643](https://github.com/esphome/esphome/pull/9643) by [@bdraco](https://github.com/bdraco) +- Fix bluetooth_proxy heap allocations during BLE scanning [esphome#9633](https://github.com/esphome/esphome/pull/9633) by [@bdraco](https://github.com/bdraco) +- core/schedule: fixup out of sync code comment [esphome#9649](https://github.com/esphome/esphome/pull/9649) by [@RubenKelevra](https://github.com/RubenKelevra) +- [CI] New workflow to mention codeowners on issues [esphome#9658](https://github.com/esphome/esphome/pull/9658) by [@jesserockz](https://github.com/jesserockz) +- [CI] Add codeowners mention workflow [esphome#9651](https://github.com/esphome/esphome/pull/9651) by [@jesserockz](https://github.com/jesserockz) +- [CI] Fix by-code-owner labelling [esphome#9661](https://github.com/esphome/esphome/pull/9661) by [@jesserockz](https://github.com/jesserockz) +- [scheduler] Add integration tests for set_retry functionality [esphome#9644](https://github.com/esphome/esphome/pull/9644) by [@bdraco](https://github.com/bdraco) +- Use message_source_map consistently in proto generation [esphome#9542](https://github.com/esphome/esphome/pull/9542) by [@bdraco](https://github.com/bdraco) +- esp32cam: add fb location config option [esphome#9630](https://github.com/esphome/esphome/pull/9630) by [@RubenKelevra](https://github.com/RubenKelevra) +- [i2s_audio] Bugfix: cast adc_channel_t to adc1_channel_t [esphome#9688](https://github.com/esphome/esphome/pull/9688) by [@kahrendt](https://github.com/kahrendt) +- Add core team as codeowner of .github folder [esphome#9663](https://github.com/esphome/esphome/pull/9663) by [@jesserockz](https://github.com/jesserockz) +- [CI] Fix clang-tidy not running when platformio.ini changes [esphome#9678](https://github.com/esphome/esphome/pull/9678) by [@bdraco](https://github.com/bdraco) +- [api] Fix missing ifdef guards for field_ifdef fields in protobuf base classes [esphome#9693](https://github.com/esphome/esphome/pull/9693) by [@bdraco](https://github.com/bdraco) +- [const] Move CONF_FLIP_X and CONF_FLIP_Y to `const.py` [esphome#9741](https://github.com/esphome/esphome/pull/9741) by [@DT-art1](https://github.com/DT-art1) +- core/scheduler: Make `millis_64_` rollover monotonic on SMP [esphome#9716](https://github.com/esphome/esphome/pull/9716) by [@RubenKelevra](https://github.com/RubenKelevra) +- [bluetooth_proxy] Fix service discovery on disconnect and refactor connection handling [esphome#9697](https://github.com/esphome/esphome/pull/9697) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Batch BLE advertisement processing to reduce overhead [esphome#9699](https://github.com/esphome/esphome/pull/9699) by [@bdraco](https://github.com/bdraco) +- [api] Memory optimizations for API frame helper buffering [esphome#9724](https://github.com/esphome/esphome/pull/9724) by [@bdraco](https://github.com/bdraco) +- [api] Eliminate heap allocation in `process_batch_` using stack-allocated PacketInfo array [esphome#9703](https://github.com/esphome/esphome/pull/9703) by [@bdraco](https://github.com/bdraco) +- [api] Remove deprecated protobuf fields to reduce flash usage [esphome#9679](https://github.com/esphome/esphome/pull/9679) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [CI] Only mention codeowners once [esphome#9727](https://github.com/esphome/esphome/pull/9727) by [@jesserockz](https://github.com/jesserockz) +- [api] Consolidate error handling and remove unused code [esphome#9726](https://github.com/esphome/esphome/pull/9726) by [@bdraco](https://github.com/bdraco) +- [api] Fix missing ifdef guards for AreaInfo and DeviceInfo messages [esphome#9730](https://github.com/esphome/esphome/pull/9730) by [@bdraco](https://github.com/bdraco) +- [core] Refactor scheduler to eliminate hidden side effects in `empty_` [esphome#9743](https://github.com/esphome/esphome/pull/9743) by [@bdraco](https://github.com/bdraco) +- [api] Reduce memory usage by eliminating duplicate client info strings [esphome#9740](https://github.com/esphome/esphome/pull/9740) by [@bdraco](https://github.com/bdraco) +- [CI] Label PR too-big if it has more than 1000 lines changed [esphome#9744](https://github.com/esphome/esphome/pull/9744) by [@jesserockz](https://github.com/jesserockz) +- [CI] Keep original labels when PR has too many lines [esphome#9745](https://github.com/esphome/esphome/pull/9745) by [@jesserockz](https://github.com/jesserockz) +- [CI] Fetch platform components and target platforms from hosted json file [esphome#9747](https://github.com/esphome/esphome/pull/9747) by [@jesserockz](https://github.com/jesserockz) +- [CI] Add url and dismiss reviews once conditions are met [esphome#9748](https://github.com/esphome/esphome/pull/9748) by [@jesserockz](https://github.com/jesserockz) +- [api] Split frame helper implementation into protocol-specific files [esphome#9746](https://github.com/esphome/esphome/pull/9746) by [@bdraco](https://github.com/bdraco) +- [CI] Fix codeowner workflow requesting the same multiple times [esphome#9750](https://github.com/esphome/esphome/pull/9750) by [@jesserockz](https://github.com/jesserockz) +- [CI] Use comment marker in too-big reviews [esphome#9751](https://github.com/esphome/esphome/pull/9751) by [@jesserockz](https://github.com/jesserockz) +- [CI] Dont create new review if existing and dont count tests [esphome#9753](https://github.com/esphome/esphome/pull/9753) by [@jesserockz](https://github.com/jesserockz) +- [api] Sync uses_password field_ifdef optimization from aioesphomeapi [esphome#9756](https://github.com/esphome/esphome/pull/9756) by [@bdraco](https://github.com/bdraco) +- [tests] Fix flaky scheduler retry test timing [esphome#9760](https://github.com/esphome/esphome/pull/9760) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Optimize service discovery with in-place construction [esphome#9765](https://github.com/esphome/esphome/pull/9765) by [@bdraco](https://github.com/bdraco) +- Factor PlatformIO buildgen out of writer.py [esphome#9378](https://github.com/esphome/esphome/pull/9378) by [@stellar-aria](https://github.com/stellar-aria) +- [api] Implement zero-copy for all protobuf bytes fields [esphome#9761](https://github.com/esphome/esphome/pull/9761) by [@bdraco](https://github.com/bdraco) +- [api] Optimize string encoding with memcpy for 10x performance improvement [esphome#9778](https://github.com/esphome/esphome/pull/9778) by [@bdraco](https://github.com/bdraco) +- [api] Optimize noise handshake with memcpy for faster connection setup [esphome#9779](https://github.com/esphome/esphome/pull/9779) by [@bdraco](https://github.com/bdraco) +- [nrf52] Add missing CoreModel define for scheduler [esphome#9777](https://github.com/esphome/esphome/pull/9777) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Write require feature defines after all clients are registered [esphome#9780](https://github.com/esphome/esphome/pull/9780) by [@jesserockz](https://github.com/jesserockz) +- [api] Optimize protobuf memory usage with fixed-size arrays for Bluetooth UUIDs [esphome#9782](https://github.com/esphome/esphome/pull/9782) by [@bdraco](https://github.com/bdraco) +- [api] Implement zero-copy string optimization for outgoing protobuf messages [esphome#9790](https://github.com/esphome/esphome/pull/9790) by [@bdraco](https://github.com/bdraco) +- [schema-gen] fix referenced schemas when schema in component platform [esphome#9755](https://github.com/esphome/esphome/pull/9755) by [@glmnet](https://github.com/glmnet) +- [audio] fix typo `gneneral` and `divison` [esphome#9808](https://github.com/esphome/esphome/pull/9808) by [@ximex](https://github.com/ximex) +- [sgp4x] Fix build [esphome#9794](https://github.com/esphome/esphome/pull/9794) by [@swoboda1337](https://github.com/swoboda1337) +- [http_request] set correct duration_ms for failed requests [esphome#9789](https://github.com/esphome/esphome/pull/9789) by [@stas-sl](https://github.com/stas-sl) +- [udp] Move `on_receive` to const [esphome#9811](https://github.com/esphome/esphome/pull/9811) by [@jesserockz](https://github.com/jesserockz) +- Bump ESP32 IDF version to 5.4.2 and Arduino version to 3.2.1 [esphome#9770](https://github.com/esphome/esphome/pull/9770) by [@swoboda1337](https://github.com/swoboda1337) +- Workflow - check all comments to find previous bot comment [esphome#9815](https://github.com/esphome/esphome/pull/9815) by [@clydebarrow](https://github.com/clydebarrow) +- [core] Match LockFreeQueue initialization order [esphome#9813](https://github.com/esphome/esphome/pull/9813) by [@jesserockz](https://github.com/jesserockz) +- [CI] Paginate codeowner comments to make sure we find it [esphome#9817](https://github.com/esphome/esphome/pull/9817) by [@jesserockz](https://github.com/jesserockz) +- [CI] Paginate codeowner comments to make sure we find it [esphome#9818](https://github.com/esphome/esphome/pull/9818) by [@jesserockz](https://github.com/jesserockz) +- [core] Initialize `looping_components_` before setup blocking phase [esphome#9820](https://github.com/esphome/esphome/pull/9820) by [@bdraco](https://github.com/bdraco) +- [i2c] Use `i2c_master_probe` to scan i2c bus [esphome#9831](https://github.com/esphome/esphome/pull/9831) by [@jesserockz](https://github.com/jesserockz) +- [core] Restore COMPONENT_STATE_LOOP_DONE check in calculate_looping_components [esphome#9832](https://github.com/esphome/esphome/pull/9832) by [@bdraco](https://github.com/bdraco) +- [ci] Support C++17 nested namespace syntax in linter [esphome#9826](https://github.com/esphome/esphome/pull/9826) by [@bdraco](https://github.com/bdraco) +- [modem] network component change [esphome#9801](https://github.com/esphome/esphome/pull/9801) by [@oarcher](https://github.com/oarcher) +- [interval] Fix startup behaviour [esphome#9793](https://github.com/esphome/esphome/pull/9793) by [@clydebarrow](https://github.com/clydebarrow) +- [mipi] Refactor constants and functions [esphome#9853](https://github.com/esphome/esphome/pull/9853) by [@clydebarrow](https://github.com/clydebarrow) (new-component) +- Update post_build.py.script to Fix #7137 [esphome#9578](https://github.com/esphome/esphome/pull/9578) by [@Maeur1](https://github.com/Maeur1) +- [helpers] Add "unknown" value handling to `Deduplicator` [esphome#9855](https://github.com/esphome/esphome/pull/9855) by [@kbx81](https://github.com/kbx81) +- [ld2450] Set `accuracy_decimals=0` as default for "target" entities [esphome#9842](https://github.com/esphome/esphome/pull/9842) by [@bharvey88](https://github.com/bharvey88) +- [logger] remove unnecessary call to setTxTimeoutMs [esphome#9854](https://github.com/esphome/esphome/pull/9854) by [@tjhorner](https://github.com/tjhorner) +- [i2s_audio] Speaker improvements: CPU core agnostic and more accurate timestamps [esphome#9800](https://github.com/esphome/esphome/pull/9800) by [@kahrendt](https://github.com/kahrendt) +- [esp32] Fix threading model for single-core variants (S2, C3, C6, H2) [esphome#9851](https://github.com/esphome/esphome/pull/9851) by [@bdraco](https://github.com/bdraco) +- [api] Replace magic numbers with MESSAGE_TYPE constants in protobuf switch cases [esphome#9776](https://github.com/esphome/esphome/pull/9776) by [@bdraco](https://github.com/bdraco) +- [api] Simplify generated authentication check code [esphome#9806](https://github.com/esphome/esphome/pull/9806) by [@bdraco](https://github.com/bdraco) +- [api] Reduce code duplication in protobuf dump methods with helper functions [esphome#9809](https://github.com/esphome/esphome/pull/9809) by [@bdraco](https://github.com/bdraco) +- [api] Use emplace_back for TemplatableKeyValuePair construction in HomeAssistant services [esphome#9804](https://github.com/esphome/esphome/pull/9804) by [@bdraco](https://github.com/bdraco) +- [core] Fix component state documentation and add state helper method [esphome#9824](https://github.com/esphome/esphome/pull/9824) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] [esp32_ble_tracker] [esp32_ble] Use C++17 nested namespace syntax [esphome#9825](https://github.com/esphome/esphome/pull/9825) by [@bdraco](https://github.com/bdraco) +- [ld2410] Use `Deduplicator` for sensors [esphome#9584](https://github.com/esphome/esphome/pull/9584) by [@kbx81](https://github.com/kbx81) +- [api] Use C++17 nested namespace syntax [esphome#9856](https://github.com/esphome/esphome/pull/9856) by [@bdraco](https://github.com/bdraco) +- [mipi] Keep models from different drivers separate [esphome#9865](https://github.com/esphome/esphome/pull/9865) by [@clydebarrow](https://github.com/clydebarrow) +- [ld2450] Use `Deduplicator` for sensors [esphome#9863](https://github.com/esphome/esphome/pull/9863) by [@kbx81](https://github.com/kbx81) +- [core] Revert #9851 and rename ESPHOME_CORES to ESPHOME_THREAD [esphome#9862](https://github.com/esphome/esphome/pull/9862) by [@bdraco](https://github.com/bdraco) +- [CI] Refactor auto-label workflow: modular architecture, CODEOWNERS automation, and performance improvements [esphome#9860](https://github.com/esphome/esphome/pull/9860) by [@jesserockz](https://github.com/jesserockz) +- [factory_reset] Allow factory reset by rapid power cycle [esphome#9749](https://github.com/esphome/esphome/pull/9749) by [@clydebarrow](https://github.com/clydebarrow) +- [gps] Patches to build on IDF, other optimizations [esphome#9728](https://github.com/esphome/esphome/pull/9728) by [@kbx81](https://github.com/kbx81) +- [sound_level] fix spelling mistake [esphome#9843](https://github.com/esphome/esphome/pull/9843) by [@tomaszduda23](https://github.com/tomaszduda23) +- rc522: fix buffer overflow in UID/buffer formatting helpers [esphome#9375](https://github.com/esphome/esphome/pull/9375) by [@RubenKelevra](https://github.com/RubenKelevra) +- [platformio.ini] Move GPS to common lib_deps [esphome#9883](https://github.com/esphome/esphome/pull/9883) by [@kbx81](https://github.com/kbx81) +- [ruff] Enable SIM rules and fix code simplification violations [esphome#9872](https://github.com/esphome/esphome/pull/9872) by [@bdraco](https://github.com/bdraco) +- [platformio.ini] Add GPS to nrf52-zephyr lib_deps [esphome#9884](https://github.com/esphome/esphome/pull/9884) by [@kbx81](https://github.com/kbx81) +- Remove redundant platformio environments [esphome#9886](https://github.com/esphome/esphome/pull/9886) by [@jesserockz](https://github.com/jesserockz) +- [CI] Better mega-pr label handling [esphome#9888](https://github.com/esphome/esphome/pull/9888) by [@jesserockz](https://github.com/jesserockz) +- [CI] Fix auto-label workflow - codeowners & listFiles [esphome#9890](https://github.com/esphome/esphome/pull/9890) by [@jesserockz](https://github.com/jesserockz) +- [mqtt] Don’t log state topic subscription for buttons [esphome#9887](https://github.com/esphome/esphome/pull/9887) by [@GilDev](https://github.com/GilDev) +- [scheduler] Fix retry race condition on cancellation [esphome#9788](https://github.com/esphome/esphome/pull/9788) by [@bdraco](https://github.com/bdraco) +- [ruff] Enable PERF rules and fix all violations [esphome#9874](https://github.com/esphome/esphome/pull/9874) by [@bdraco](https://github.com/bdraco) +- [scheduler] Fix null pointer crash [esphome#9893](https://github.com/esphome/esphome/pull/9893) by [@clydebarrow](https://github.com/clydebarrow) +- [core] Centralize component setup logging to reduce flash usage [esphome#9885](https://github.com/esphome/esphome/pull/9885) by [@bdraco](https://github.com/bdraco) +- [mipi_dsi] New display driver for P4 DSI [esphome#9403](https://github.com/esphome/esphome/pull/9403) by [@clydebarrow](https://github.com/clydebarrow) (new-component) (new-platform) +- [api] Add missing USE_API_PASSWORD guards to reduce flash usage [esphome#9899](https://github.com/esphome/esphome/pull/9899) by [@bdraco](https://github.com/bdraco) +- [api] Add conditional compilation for Home Assistant state subscriptions [esphome#9898](https://github.com/esphome/esphome/pull/9898) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [i2c] Fix logging level for bus scan results in dump_config [esphome#9904](https://github.com/esphome/esphome/pull/9904) by [@bdraco](https://github.com/bdraco) +- [ruff] Enable FURB rules for code modernization [esphome#9896](https://github.com/esphome/esphome/pull/9896) by [@bdraco](https://github.com/bdraco) +- [core] Fix format error in log printf [esphome#9911](https://github.com/esphome/esphome/pull/9911) by [@clydebarrow](https://github.com/clydebarrow) +- [logger] Use C++17 nested namespace syntax [esphome#9916](https://github.com/esphome/esphome/pull/9916) by [@bdraco](https://github.com/bdraco) +- [wifi] Allow config to use PSRAM [esphome#9866](https://github.com/esphome/esphome/pull/9866) by [@clydebarrow](https://github.com/clydebarrow) +- [ci-custom] Report actual changes needed for absolute import [esphome#9919](https://github.com/esphome/esphome/pull/9919) by [@clydebarrow](https://github.com/clydebarrow) +- [light] Reduce flash memory usage by optimizing validation and color mode logic [esphome#9921](https://github.com/esphome/esphome/pull/9921) by [@bdraco](https://github.com/bdraco) +- [power_supply] Optimize logging, reduce flash footprint [esphome#9923](https://github.com/esphome/esphome/pull/9923) by [@kbx81](https://github.com/kbx81) +- [wifi] Disallow psram config with arduino [esphome#9922](https://github.com/esphome/esphome/pull/9922) by [@clydebarrow](https://github.com/clydebarrow) +- [core] Use nullptr defaults in status_set_error/warning to reduce flash usage [esphome#9931](https://github.com/esphome/esphome/pull/9931) by [@bdraco](https://github.com/bdraco) +- [light] Reduce flash usage by 832 bytes through code optimization [esphome#9924](https://github.com/esphome/esphome/pull/9924) by [@bdraco](https://github.com/bdraco) +- [api] Reduce code duplication in send_noise_encryption_set_key_response [esphome#9918](https://github.com/esphome/esphome/pull/9918) by [@bdraco](https://github.com/bdraco) +- replace os.getlogin() with getpass.getuser() [esphome#9928](https://github.com/esphome/esphome/pull/9928) by [@cmaxl](https://github.com/cmaxl) +- [packages] add example from documentation to component tests [esphome#9891](https://github.com/esphome/esphome/pull/9891) by [@tomaszduda23](https://github.com/tomaszduda23) +- [api] Add conditional compilation for Home Assistant service subscriptions [esphome#9900](https://github.com/esphome/esphome/pull/9900) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [api] Fix string lifetime issue in Home Assistant service calls with templated values [esphome#9909](https://github.com/esphome/esphome/pull/9909) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Fix service discovery cache pollution and descriptor count parameter bug [esphome#9902](https://github.com/esphome/esphome/pull/9902) by [@bdraco](https://github.com/bdraco) +- [config_validation] extend should combine extra validations [esphome#9939](https://github.com/esphome/esphome/pull/9939) by [@clydebarrow](https://github.com/clydebarrow) +- [scheduler] Eliminate more runtime string allocations from retry [esphome#9930](https://github.com/esphome/esphome/pull/9930) by [@bdraco](https://github.com/bdraco) +- [api] Remove unnecessary string copies from optional access [esphome#9897](https://github.com/esphome/esphome/pull/9897) by [@bdraco](https://github.com/bdraco) +- [heatpumpir] Bump library to 1.0.37 [esphome#9944](https://github.com/esphome/esphome/pull/9944) by [@jesserockz](https://github.com/jesserockz) +- [api] Optimize protobuf empty message handling to reduce flash and runtime overhead [esphome#9908](https://github.com/esphome/esphome/pull/9908) by [@bdraco](https://github.com/bdraco) +- [api] Align ProtoSize API design with ProtoWriteBuffer pattern [esphome#9920](https://github.com/esphome/esphome/pull/9920) by [@bdraco](https://github.com/bdraco) +- [esp32] Enable LWIP core locking on ESP-IDF to reduce socket operation overhead [esphome#9857](https://github.com/esphome/esphome/pull/9857) by [@bdraco](https://github.com/bdraco) +- [sensor] Add support for default filters [esphome#9934](https://github.com/esphome/esphome/pull/9934) by [@kbx81](https://github.com/kbx81) +- [binary_sensor] Add support for default filters [esphome#9935](https://github.com/esphome/esphome/pull/9935) by [@kbx81](https://github.com/kbx81) +- [text_sensor] Add support for default filters [esphome#9936](https://github.com/esphome/esphome/pull/9936) by [@kbx81](https://github.com/kbx81) +- [heatpumpir] Fix issue with IRremoteESP8266 being included on ESP32 [esphome#9950](https://github.com/esphome/esphome/pull/9950) by [@swoboda1337](https://github.com/swoboda1337) +- Openthread add Teardown [esphome#9275](https://github.com/esphome/esphome/pull/9275) by [@rwrozelle](https://github.com/rwrozelle) +- [gps] Fix slow parsing [esphome#9953](https://github.com/esphome/esphome/pull/9953) by [@kbx81](https://github.com/kbx81) +- [output] Add `set_min_power` & `set_max_power` actions for `FloatOutput` [esphome#8934](https://github.com/esphome/esphome/pull/8934) by [@DjordjeMandic](https://github.com/DjordjeMandic) (new-feature) +- [esp32] Bump platform to 54.03.21-1 and add support for tagged releases [esphome#9926](https://github.com/esphome/esphome/pull/9926) by [@swoboda1337](https://github.com/swoboda1337) +- [adc] Enable ADC on ESP32-P4 [esphome#9954](https://github.com/esphome/esphome/pull/9954) by [@clydebarrow](https://github.com/clydebarrow) +- [esp32] Fix post build [esphome#9951](https://github.com/esphome/esphome/pull/9951) by [@jesserockz](https://github.com/jesserockz) +- [component] Revert setup messages to LOG_CONFIG level [esphome#9956](https://github.com/esphome/esphome/pull/9956) by [@clydebarrow](https://github.com/clydebarrow) +- Media player API enumeration alignment and feature flags [esphome#9949](https://github.com/esphome/esphome/pull/9949) by [@rwrozelle](https://github.com/rwrozelle) +- [mipi_dsi] Add dependencies [esphome#9952](https://github.com/esphome/esphome/pull/9952) by [@clydebarrow](https://github.com/clydebarrow) +- Fix WiFi to prefer strongest AP when multiple APs have same SSID [esphome#9963](https://github.com/esphome/esphome/pull/9963) by [@dayowe](https://github.com/dayowe) +- [api] Eliminate heap allocations when populating repeated fields from containers [esphome#9948](https://github.com/esphome/esphome/pull/9948) by [@bdraco](https://github.com/bdraco) +- [wifi] add more disconnect reason descriptions [esphome#9955](https://github.com/esphome/esphome/pull/9955) by [@ssieb](https://github.com/ssieb) +- [sensor] Add new filter: `throttle_with_priority` [esphome#9937](https://github.com/esphome/esphome/pull/9937) by [@kbx81](https://github.com/kbx81) +- [template] Add tests for more sensor filters [esphome#9973](https://github.com/esphome/esphome/pull/9973) by [@kbx81](https://github.com/kbx81) +- [esp32_ble_client] Fix connection failures with short discovery timeout devices and speed up BLE connections [esphome#9971](https://github.com/esphome/esphome/pull/9971) by [@bdraco](https://github.com/bdraco) +- media_player add off on capability [esphome#9294](https://github.com/esphome/esphome/pull/9294) by [@rwrozelle](https://github.com/rwrozelle) +- [core] Fix regex for lambda id() replacement [esphome#9975](https://github.com/esphome/esphome/pull/9975) by [@clydebarrow](https://github.com/clydebarrow) +- [CI] Add labels for checkboxes [esphome#9991](https://github.com/esphome/esphome/pull/9991) by [@jesserockz](https://github.com/jesserockz) +- [api] Bump APIVersion to 1.11 [esphome#9990](https://github.com/esphome/esphome/pull/9990) by [@rwrozelle](https://github.com/rwrozelle) +- [api] Reduce flash usage through targeted optimizations [esphome#9979](https://github.com/esphome/esphome/pull/9979) by [@bdraco](https://github.com/bdraco) +- [esp32_touch] Work around ESP-IDF v5.4 regression in `touch_pad_read_filtered` [esphome#9957](https://github.com/esphome/esphome/pull/9957) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [esp32_ble] Fix spurious BLE 5.0 event warnings on ESP32-S3 [esphome#9969](https://github.com/esphome/esphome/pull/9969) by [@bdraco](https://github.com/bdraco) +- [tm1651] Remove dependency on Arduino Library [esphome#9645](https://github.com/esphome/esphome/pull/9645) by [@mrtoy-me](https://github.com/mrtoy-me) +- [wifi] Allow fast_connect with multiple networks [esphome#9947](https://github.com/esphome/esphome/pull/9947) by [@GilDev](https://github.com/GilDev) +- [esp32_ble_client] Fix BLE connection stability for WiFi-based proxies [esphome#9993](https://github.com/esphome/esphome/pull/9993) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Batch BLE service discovery messages for 67% reduction in API traffic [esphome#9992](https://github.com/esphome/esphome/pull/9992) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Optimize UUID transmission with efficient short_uuid field [esphome#9995](https://github.com/esphome/esphome/pull/9995) by [@bdraco](https://github.com/bdraco) +- [esp32] Bump ESP32 platform to 54.03.21-2 [esphome#10000](https://github.com/esphome/esphome/pull/10000) by [@swoboda1337](https://github.com/swoboda1337) +- [esp32] Fix strapping pin validation for P4 and H2 [esphome#9980](https://github.com/esphome/esphome/pull/9980) by [@clydebarrow](https://github.com/clydebarrow) +- [bluetooth_proxy] Implement dynamic service batching based on MTU constraints [esphome#10001](https://github.com/esphome/esphome/pull/10001) by [@bdraco](https://github.com/bdraco) +- [midea] Use c++17 constexpr and inline static in IrFollowMeData [esphome#10002](https://github.com/esphome/esphome/pull/10002) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- [image] Improve schemas [esphome#9791](https://github.com/esphome/esphome/pull/9791) by [@clydebarrow](https://github.com/clydebarrow) +- [nrf52] add adc [esphome#9321](https://github.com/esphome/esphome/pull/9321) by [@tomaszduda23](https://github.com/tomaszduda23) (new-feature) +- [ruff] Enable RET and fix all violations [esphome#9929](https://github.com/esphome/esphome/pull/9929) by [@bdraco](https://github.com/bdraco) +- [sensor] Fix bug in percentage based delta filter [esphome#8157](https://github.com/esphome/esphome/pull/8157) by [@swoboda1337](https://github.com/swoboda1337) +- [sensor] A little bit of filter clean-up [esphome#9986](https://github.com/esphome/esphome/pull/9986) by [@kbx81](https://github.com/kbx81) +- [espnow] Basic communication between ESP32 devices [esphome#9582](https://github.com/esphome/esphome/pull/9582) by [@nielsnl68](https://github.com/nielsnl68) (new-component) (new-feature) +- [nrf52, debug] debug component for nrf52 [esphome#8315](https://github.com/esphome/esphome/pull/8315) by [@tomaszduda23](https://github.com/tomaszduda23) +- [nrf52, gpio] check different port notation [esphome#9737](https://github.com/esphome/esphome/pull/9737) by [@tomaszduda23](https://github.com/tomaszduda23) +- [esp32] Add config option to execute from PSRAM [esphome#9907](https://github.com/esphome/esphome/pull/9907) by [@clydebarrow](https://github.com/clydebarrow) (new-feature) +- [wifi] Fix crash during WiFi reconnection on ESP32 with poor signal quality [esphome#9989](https://github.com/esphome/esphome/pull/9989) by [@bdraco](https://github.com/bdraco) +- [CI] Allow multiple grep options for clang-tidy [esphome#10004](https://github.com/esphome/esphome/pull/10004) by [@jesserockz](https://github.com/jesserockz) +- [bluetooth_proxy] Eliminate heap allocations in connection state reporting [esphome#10010](https://github.com/esphome/esphome/pull/10010) by [@bdraco](https://github.com/bdraco) +- [core] Convert entity vectors to static allocation for reduced memory usage [esphome#10018](https://github.com/esphome/esphome/pull/10018) by [@bdraco](https://github.com/bdraco) +- [syslog] Fix RFC3164 timestamp compliance for single-digit days [esphome#10034](https://github.com/esphome/esphome/pull/10034) by [@Copilot](https://github.com/Copilot) +- [core] Fix compilation errors when platform sections have no entities [esphome#10023](https://github.com/esphome/esphome/pull/10023) by [@bdraco](https://github.com/bdraco) +- [config] Fix reversion of excessive yaml output after error [esphome#10043](https://github.com/esphome/esphome/pull/10043) by [@clydebarrow](https://github.com/clydebarrow) +- [color][lvgl] Allow Color to be used for lv_color_t [esphome#10016](https://github.com/esphome/esphome/pull/10016) by [@clydebarrow](https://github.com/clydebarrow) (new-feature) +- Update esp32-camera library version to 2.1.0 [esphome#9527](https://github.com/esphome/esphome/pull/9527) by [@RubenKelevra](https://github.com/RubenKelevra) +- [core] Replace std::find and std::max_element with simple loops to reduce binary size [esphome#10044](https://github.com/esphome/esphome/pull/10044) by [@bdraco](https://github.com/bdraco) +- [core] Convert components, devices, and areas vectors to static allocation [esphome#10020](https://github.com/esphome/esphome/pull/10020) by [@bdraco](https://github.com/bdraco) +- [core] Replace std::stable_sort with insertion sort to save 3.5KB flash [esphome#10035](https://github.com/esphome/esphome/pull/10035) by [@bdraco](https://github.com/bdraco) +- [web_server_idf] Replace std::find_if with simple loop to reduce binary size [esphome#10042](https://github.com/esphome/esphome/pull/10042) by [@bdraco](https://github.com/bdraco) +- [core] Optimize Application::pre_setup() to reduce duplicate MAC address operations [esphome#10039](https://github.com/esphome/esphome/pull/10039) by [@bdraco](https://github.com/bdraco) +- [web_server] Reduce binary size by using EntityBase and minimizing template instantiations [esphome#10033](https://github.com/esphome/esphome/pull/10033) by [@bdraco](https://github.com/bdraco) +- [web_server] Conditionally compile authentication code to save flash memory [esphome#10022](https://github.com/esphome/esphome/pull/10022) by [@bdraco](https://github.com/bdraco) +- [core] Update to esptool 5.0+ command syntax [esphome#10011](https://github.com/esphome/esphome/pull/10011) by [@bdraco](https://github.com/bdraco) +- [wifi] Replace std::stable_sort with insertion sort to save 2.4KB flash [esphome#10037](https://github.com/esphome/esphome/pull/10037) by [@bdraco](https://github.com/bdraco) +- [esp32] Add framework migration warning for upcoming ESP-IDF default change [esphome#10030](https://github.com/esphome/esphome/pull/10030) by [@bdraco](https://github.com/bdraco) (new-feature) +- [api] Use static allocation for areas and devices in DeviceInfoResponse [esphome#10038](https://github.com/esphome/esphome/pull/10038) by [@bdraco](https://github.com/bdraco) +- [AI] Add note about the defines.h file needing to include all new defines added [esphome#10054](https://github.com/esphome/esphome/pull/10054) by [@jesserockz](https://github.com/jesserockz) +- [nfc] Rename `binary_sensor` source files [esphome#10053](https://github.com/esphome/esphome/pull/10053) by [@jesserockz](https://github.com/jesserockz) +- [core] Move docs url generator to helpers.py [esphome#10056](https://github.com/esphome/esphome/pull/10056) by [@jesserockz](https://github.com/jesserockz) +- [esp32_ble_tracker] Remove unnecessary STOPPED scanner state to reduce latency [esphome#10055](https://github.com/esphome/esphome/pull/10055) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Use FAST connection parameters for all v3 connections [esphome#10052](https://github.com/esphome/esphome/pull/10052) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Connect immediately on READY_TO_CONNECT to reduce latency [esphome#10051](https://github.com/esphome/esphome/pull/10051) by [@bdraco](https://github.com/bdraco) +- [esp32_ble] Fix BLE connection slot waste by aligning ESP-IDF timeout with client timeout [esphome#10013](https://github.com/esphome/esphome/pull/10013) by [@bdraco](https://github.com/bdraco) +- [gt911] Use timeout instead of delay, shortened log msg [esphome#10024](https://github.com/esphome/esphome/pull/10024) by [@DjordjeMandic](https://github.com/DjordjeMandic) +- [espnow, web_server_idf] Fix IDF 5.5 compile issues [esphome#10068](https://github.com/esphome/esphome/pull/10068) by [@swoboda1337](https://github.com/swoboda1337) +- Add CO5300 display support [esphome#9739](https://github.com/esphome/esphome/pull/9739) by [@mschnaubelt](https://github.com/mschnaubelt) (new-feature) +- [api] Add helpful compile-time errors for Custom API Device methods [esphome#10076](https://github.com/esphome/esphome/pull/10076) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Warn about BLE connection timeout mismatch on Arduino framework [esphome#10063](https://github.com/esphome/esphome/pull/10063) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Start MTU negotiation earlier following ESP-IDF examples [esphome#10062](https://github.com/esphome/esphome/pull/10062) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Optimize connection by promoting client immediately after scan stop trigger [esphome#10061](https://github.com/esphome/esphome/pull/10061) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Eliminate redundant ring buffer for lower latency [esphome#10057](https://github.com/esphome/esphome/pull/10057) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Fix connection parameter timing by setting preferences before connection [esphome#10059](https://github.com/esphome/esphome/pull/10059) by [@bdraco](https://github.com/bdraco) +- [tests] Add datetime entities to host_mode_many_entities integration test [esphome#10032](https://github.com/esphome/esphome/pull/10032) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Optimize memory usage with fixed-size array and const string references [esphome#10015](https://github.com/esphome/esphome/pull/10015) by [@bdraco](https://github.com/bdraco) +- [esp32_dac] Always use esp-idf APIs [esphome#9833](https://github.com/esphome/esphome/pull/9833) by [@jesserockz](https://github.com/jesserockz) +- [core] Allow extra args on cli and just ignore them [esphome#9814](https://github.com/esphome/esphome/pull/9814) by [@jesserockz](https://github.com/jesserockz) +- [gpio_expander] Fix bank caching [esphome#10077](https://github.com/esphome/esphome/pull/10077) by [@jesserockz](https://github.com/jesserockz) +- [remote_transmitter] Add digital_write automation [esphome#10069](https://github.com/esphome/esphome/pull/10069) by [@swoboda1337](https://github.com/swoboda1337) (new-feature) +- Support multiple --device arguments for address fallback [esphome#10003](https://github.com/esphome/esphome/pull/10003) by [@bdraco](https://github.com/bdraco) (new-feature) +- [core] Update core component codeowners to `@esphome/core` [esphome#10082](https://github.com/esphome/esphome/pull/10082) by [@jesserockz](https://github.com/jesserockz) +- Add myself to multiple bluetooth codeowners [esphome#10083](https://github.com/esphome/esphome/pull/10083) by [@bdraco](https://github.com/bdraco) +- [speaker] Media player fixes for IDF5.4 [esphome#10088](https://github.com/esphome/esphome/pull/10088) by [@kahrendt](https://github.com/kahrendt) +- [espnow] Small changes and fixes [esphome#10014](https://github.com/esphome/esphome/pull/10014) by [@nielsnl68](https://github.com/nielsnl68) +- [select] Fix new_select() not forwarding constructor args while preserving keyword-only options parameter [esphome#10036](https://github.com/esphome/esphome/pull/10036) by [@Copilot](https://github.com/Copilot) +- [mcp23xxx] Use CachedGpioExpander [esphome#10078](https://github.com/esphome/esphome/pull/10078) by [@jesserockz](https://github.com/jesserockz) +- update espressif's esp32-camera library to 2.1.1 [esphome#10090](https://github.com/esphome/esphome/pull/10090) by [@RubenKelevra](https://github.com/RubenKelevra) +- [esp32_ble_tracker] Add missing `USE_ESP32_BLE_DEVICE` guard for `already_discovered_` member [esphome#10085](https://github.com/esphome/esphome/pull/10085) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Refactor loop() method for improved readability and performance [esphome#10074](https://github.com/esphome/esphome/pull/10074) by [@bdraco](https://github.com/bdraco) +- [esp32_rmt_led_strip] Work around IDFGH-16195 [esphome#10093](https://github.com/esphome/esphome/pull/10093) by [@swoboda1337](https://github.com/swoboda1337) +- [bme680] Eliminate warnings due to unused functions [esphome#9735](https://github.com/esphome/esphome/pull/9735) by [@pgolawsk](https://github.com/pgolawsk) +- [light] Allow light effect schema to be a schema object already [esphome#10091](https://github.com/esphome/esphome/pull/10091) by [@jesserockz](https://github.com/jesserockz) +- [bluetooth_proxy] Reduce flash usage by consolidating duplicate logging [esphome#10094](https://github.com/esphome/esphome/pull/10094) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Simplify state machine guards with helper functions [esphome#10092](https://github.com/esphome/esphome/pull/10092) by [@bdraco](https://github.com/bdraco) +- [deep_sleep] enable sleep pull up/down for wakeup pin [esphome#9395](https://github.com/esphome/esphome/pull/9395) by [@candrews](https://github.com/candrews) +- [esp32_ble] Make BLE notification limit configurable to fix ESP_GATT_NO_RESOURCES errors [esphome#10098](https://github.com/esphome/esphome/pull/10098) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Replace std::find with simple loop for small fixed array [esphome#10102](https://github.com/esphome/esphome/pull/10102) by [@bdraco](https://github.com/bdraco) +- [ld2410] Replace `throttle` with native filters [esphome#10019](https://github.com/esphome/esphome/pull/10019) by [@kbx81](https://github.com/kbx81) (breaking-change) +- [esp32_ble_client] Convert to C++17 nested namespace syntax [esphome#10111](https://github.com/esphome/esphome/pull/10111) by [@bdraco](https://github.com/bdraco) +- [esp32_ble] Conditionally compile BLE advertising to reduce flash usage [esphome#10099](https://github.com/esphome/esphome/pull/10099) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [bluetooth_proxy] Consolidate dump_config() log calls [esphome#10103](https://github.com/esphome/esphome/pull/10103) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy][esp32_ble_tracker][esp32_ble_client] Consolidate duplicate logging code to reduce flash usage [esphome#10097](https://github.com/esphome/esphome/pull/10097) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Remove unnecessary heap allocation for response object [esphome#10104](https://github.com/esphome/esphome/pull/10104) by [@bdraco](https://github.com/bdraco) +- Add device class absolute_humidity to the absolute humidity component [esphome#10100](https://github.com/esphome/esphome/pull/10100) by [@mbo18](https://github.com/mbo18) (new-feature) +- [esp32_touch] Restore get_value() for ESP32-S2/S3 variants [esphome#10112](https://github.com/esphome/esphome/pull/10112) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Avoid iterating empty services vector for bluetooth_proxy connections [esphome#10110](https://github.com/esphome/esphome/pull/10110) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_tracker] Optimize member variable ordering to reduce memory padding [esphome#10113](https://github.com/esphome/esphome/pull/10113) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Conditionally compile BLE service classes to reduce flash usage [esphome#10114](https://github.com/esphome/esphome/pull/10114) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [bluetooth_proxy] Remove V1 connection support [esphome#10107](https://github.com/esphome/esphome/pull/10107) by [@bdraco](https://github.com/bdraco) (breaking-change) +- [switch] Add `switch.control` automation action [esphome#10105](https://github.com/esphome/esphome/pull/10105) by [@edwardtfn](https://github.com/edwardtfn) (new-feature) +- [mdns] Conditionally compile extra services to reduce flash usage [esphome#10129](https://github.com/esphome/esphome/pull/10129) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Reduce flash usage by optimizing logging strings [esphome#10119](https://github.com/esphome/esphome/pull/10119) by [@bdraco](https://github.com/bdraco) +- [wifi] Reduce flash usage by optimizing logging [esphome#10127](https://github.com/esphome/esphome/pull/10127) by [@bdraco](https://github.com/bdraco) +- [cover] Reduce flash usage by optimizing validation messages [esphome#10130](https://github.com/esphome/esphome/pull/10130) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Optimize connection loop to reduce CPU usage [esphome#10133](https://github.com/esphome/esphome/pull/10133) by [@bdraco](https://github.com/bdraco) +- [switch] Add `control()` method to API [esphome#10118](https://github.com/esphome/esphome/pull/10118) by [@edwardtfn](https://github.com/edwardtfn) (new-feature) +- [switch] Add trigger `on_state` [esphome#10108](https://github.com/esphome/esphome/pull/10108) by [@edwardtfn](https://github.com/edwardtfn) (new-feature) +- [esp32_ble_tracker] Fix false reboots when event loop is blocked [esphome#10144](https://github.com/esphome/esphome/pull/10144) by [@bdraco](https://github.com/bdraco) +- [esp32] Add IDF log_level option [esphome#10134](https://github.com/esphome/esphome/pull/10134) by [@swoboda1337](https://github.com/swoboda1337) (breaking-change) +- [dashboard] Fix port fallback regression when device is offline [esphome#10135](https://github.com/esphome/esphome/pull/10135) by [@bdraco](https://github.com/bdraco) +- [web_server] Reduce flash usage by consolidating parameter parsing [esphome#10154](https://github.com/esphome/esphome/pull/10154) by [@bdraco](https://github.com/bdraco) +- [ade7880] Fix duplicate sensor name validation error [esphome#10155](https://github.com/esphome/esphome/pull/10155) by [@bdraco](https://github.com/bdraco) +- Optimize subprocess performance with close_fds=False [esphome#10145](https://github.com/esphome/esphome/pull/10145) by [@bdraco](https://github.com/bdraco) +- [CI] Print more info for when consts are duplicated [esphome#10166](https://github.com/esphome/esphome/pull/10166) by [@jesserockz](https://github.com/jesserockz) +- [neopixelbus] Fix neopixelbus on esp32 [esphome#10123](https://github.com/esphome/esphome/pull/10123) by [@swoboda1337](https://github.com/swoboda1337) +- [lvgl] Various validation fixes [esphome#10141](https://github.com/esphome/esphome/pull/10141) by [@clydebarrow](https://github.com/clydebarrow) +- [lvgl] fix allocation of reduced size buffer with rotation [esphome#10147](https://github.com/esphome/esphome/pull/10147) by [@clydebarrow](https://github.com/clydebarrow) +- [nrf52, zephyr_debug] add zephyr debug component [esphome#8319](https://github.com/esphome/esphome/pull/8319) by [@tomaszduda23](https://github.com/tomaszduda23) (new-feature) +- [display] Disallow `show_test_card: true` and `update_interval: never` [esphome#9927](https://github.com/esphome/esphome/pull/9927) by [@ChadMatsalla](https://github.com/ChadMatsalla) +- [sensor] Extend timeout filter with option to return last value received [esphome#10115](https://github.com/esphome/esphome/pull/10115) by [@kbx81](https://github.com/kbx81) (new-feature) +- [esphome] Fix OTA watchdog resets during port scanning and network delays [esphome#10152](https://github.com/esphome/esphome/pull/10152) by [@bdraco](https://github.com/bdraco) +- [api] Optimize single vector writes to use write() instead of writev() [esphome#10193](https://github.com/esphome/esphome/pull/10193) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Replace dynamic vector with fixed array for BLE advertisements [esphome#10174](https://github.com/esphome/esphome/pull/10174) by [@bdraco](https://github.com/bdraco) +- [substitutions] Add some safe built-in functions to jinja parsing [esphome#10178](https://github.com/esphome/esphome/pull/10178) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- [core] Improve entity duplicate validation error messages [esphome#10184](https://github.com/esphome/esphome/pull/10184) by [@bdraco](https://github.com/bdraco) +- [api] Add constexpr optimizations to protobuf encoding [esphome#10192](https://github.com/esphome/esphome/pull/10192) by [@bdraco](https://github.com/bdraco) +- [wifi] Remove restriction from using NONE power saving mode with BLE [esphome#10181](https://github.com/esphome/esphome/pull/10181) by [@kahrendt](https://github.com/kahrendt) +- [const] Add CONF_POWER_MODE [esphome#10173](https://github.com/esphome/esphome/pull/10173) by [@joshuasing](https://github.com/joshuasing) +- [core] Reset pin registry after target platform validations [esphome#10199](https://github.com/esphome/esphome/pull/10199) by [@jesserockz](https://github.com/jesserockz) +- [ld2412] New component [esphome#9075](https://github.com/esphome/esphome/pull/9075) by [@Rihan9](https://github.com/Rihan9) (new-component) (new-feature) (new-platform) +- [atm90e32] energy meter calibration log output enhancements & software SPI fix [esphome#10143](https://github.com/esphome/esphome/pull/10143) by [@CircuitSetup](https://github.com/CircuitSetup) +- [ld2450] Replace `throttle` with native filters [esphome#10196](https://github.com/esphome/esphome/pull/10196) by [@kbx81](https://github.com/kbx81) (breaking-change) +- [bme280_base, bmp280_base] add reasons to the fails, clean up logging [esphome#10209](https://github.com/esphome/esphome/pull/10209) by [@ssieb](https://github.com/ssieb) +- [bluetooth_proxy] Remove ESPBTUUID dependency to save 296 bytes of flash [esphome#10213](https://github.com/esphome/esphome/pull/10213) by [@bdraco](https://github.com/bdraco) +- [CI] Fix CI job failures for PRs with >300 changed files [esphome#10215](https://github.com/esphome/esphome/pull/10215) by [@bdraco](https://github.com/bdraco) +- [entity] Allow `device_id` to be blank on entities [esphome#10217](https://github.com/esphome/esphome/pull/10217) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- [espnow] Set state to enabled before adding initial peers [esphome#10225](https://github.com/esphome/esphome/pull/10225) by [@jesserockz](https://github.com/jesserockz) +- [psram] allow disabling [esphome#10224](https://github.com/esphome/esphome/pull/10224) by [@ssieb](https://github.com/ssieb) +- [esp32_ble] Add `USE_ESP32_BLE_UUID` when advertising is desired [esphome#10230](https://github.com/esphome/esphome/pull/10230) by [@jesserockz](https://github.com/jesserockz) +- Improve error reporting for add_library [esphome#10226](https://github.com/esphome/esphome/pull/10226) by [@stellar-aria](https://github.com/stellar-aria) +- [wifi] Automatically disable Enterprise WiFi support when EAP is not configured [esphome#10242](https://github.com/esphome/esphome/pull/10242) by [@bdraco](https://github.com/bdraco) +- [core] Trigger clean build when components are removed from configuration [esphome#10235](https://github.com/esphome/esphome/pull/10235) by [@bdraco](https://github.com/bdraco) +- [bluetooth_proxy] Remove redundant connection type check after V1 removal [esphome#10208](https://github.com/esphome/esphome/pull/10208) by [@bdraco](https://github.com/bdraco) +- [esp32_ble] Optimize BLE event memory usage by eliminating std::vector overhead [esphome#10247](https://github.com/esphome/esphome/pull/10247) by [@bdraco](https://github.com/bdraco) +- [web_server] fix cover_all_json_generator wrong detail [esphome#10252](https://github.com/esphome/esphome/pull/10252) by [@RFDarter](https://github.com/RFDarter) +- [esp32_ble] Store GATTC/GATTS param and small data inline to nearly eliminate heap allocations [esphome#10249](https://github.com/esphome/esphome/pull/10249) by [@bdraco](https://github.com/bdraco) +- [senseair] Discard 0 ppm readings with "Out Of Range" bit set. [esphome#10275](https://github.com/esphome/esphome/pull/10275) by [@raineth](https://github.com/raineth) +- [core] Fix post-OTA logs display when using esphome run and MQTT [esphome#10274](https://github.com/esphome/esphome/pull/10274) by [@raineth](https://github.com/raineth) +- [core] Fix scheduler race condition where cancelled items still execute [esphome#10268](https://github.com/esphome/esphome/pull/10268) by [@bdraco](https://github.com/bdraco) +- [esp32] Write variant to sdkconfig file [esphome#10267](https://github.com/esphome/esphome/pull/10267) by [@jesserockz](https://github.com/jesserockz) +- [nextion] Don't include terminating NUL in nextion text_sensor states [esphome#10273](https://github.com/esphome/esphome/pull/10273) by [@raineth](https://github.com/raineth) +- [atm90e32] Only read 1 register per SPI transaction per datasheet. [esphome#10258](https://github.com/esphome/esphome/pull/10258) by [@raineth](https://github.com/raineth) +- [pipsolar] fix faults_present, fix update interval [esphome#10289](https://github.com/esphome/esphome/pull/10289) by [@patagonaa](https://github.com/patagonaa) +- [bluetooth_proxy] Fix connection slot race by deferring slot release until GATT close [esphome#10303](https://github.com/esphome/esphome/pull/10303) by [@bdraco](https://github.com/bdraco) + +
    + +### Dependency Changes + +
    + + +- Bump ruff from 0.12.2 to 0.12.3 [esphome#9446](https://github.com/esphome/esphome/pull/9446) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 34.2.1 to 35.0.1 [esphome#9474](https://github.com/esphome/esphome/pull/9474) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 35.0.1 to 36.0.0 [esphome#9567](https://github.com/esphome/esphome/pull/9567) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 1.0.0 to 1.1.0 [esphome#9588](https://github.com/esphome/esphome/pull/9588) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-xdist from 3.7.0 to 3.8.0 [esphome#9287](https://github.com/esphome/esphome/pull/9287) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.12.3 to 0.12.4 [esphome#9634](https://github.com/esphome/esphome/pull/9634) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 36.0.0 to 36.0.1 [esphome#9636](https://github.com/esphome/esphome/pull/9636) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 36.0.1 to 37.0.0 [esphome#9677](https://github.com/esphome/esphome/pull/9677) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.0.0 to 37.0.1 [esphome#9685](https://github.com/esphome/esphome/pull/9685) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.0.1 to 37.0.2 [esphome#9738](https://github.com/esphome/esphome/pull/9738) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.0.2 to 37.0.3 [esphome#9754](https://github.com/esphome/esphome/pull/9754) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.0.3 to 37.0.4 [esphome#9764](https://github.com/esphome/esphome/pull/9764) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.12.4 to 0.12.5 [esphome#9871](https://github.com/esphome/esphome/pull/9871) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.0.4 to 37.1.0 [esphome#9905](https://github.com/esphome/esphome/pull/9905) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.1.0 to 37.1.2 [esphome#9910](https://github.com/esphome/esphome/pull/9910) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.1.2 to 37.1.3 [esphome#9943](https://github.com/esphome/esphome/pull/9943) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.1.3 to 37.1.4 [esphome#9964](https://github.com/esphome/esphome/pull/9964) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.1.4 to 37.1.5 [esphome#9977](https://github.com/esphome/esphome/pull/9977) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.12.5 to 0.12.7 [esphome#9976](https://github.com/esphome/esphome/pull/9976) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.1.5 to 37.1.6 [esphome#9988](https://github.com/esphome/esphome/pull/9988) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.1.6 to 37.2.0 [esphome#9996](https://github.com/esphome/esphome/pull/9996) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.2.0 to 37.2.1 [esphome#9998](https://github.com/esphome/esphome/pull/9998) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.2.1 to 37.2.2 [esphome#10009](https://github.com/esphome/esphome/pull/10009) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esptool from 4.9.0 to 5.0.2 [esphome#9983](https://github.com/esphome/esphome/pull/9983) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.2.2 to 37.2.3 [esphome#10012](https://github.com/esphome/esphome/pull/10012) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.2.3 to 37.2.4 [esphome#10050](https://github.com/esphome/esphome/pull/10050) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.2.4 to 37.2.5 [esphome#10080](https://github.com/esphome/esphome/pull/10080) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump docker/login-action from 3.4.0 to 3.5.0 in the docker-actions group [esphome#10081](https://github.com/esphome/esphome/pull/10081) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 37.2.5 to 38.0.0 [esphome#10109](https://github.com/esphome/esphome/pull/10109) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/download-artifact from 4.3.0 to 5.0.0 [esphome#10106](https://github.com/esphome/esphome/pull/10106) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.2.3 to 4.2.4 in /.github/actions/restore-python [esphome#10125](https://github.com/esphome/esphome/pull/10125) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/cache from 4.2.3 to 4.2.4 [esphome#10128](https://github.com/esphome/esphome/pull/10128) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump ruff from 0.12.7 to 0.12.8 [esphome#10126](https://github.com/esphome/esphome/pull/10126) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump tornado from 6.5.1 to 6.5.2 [esphome#10142](https://github.com/esphome/esphome/pull/10142) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 38.0.0 to 38.1.0 [esphome#10176](https://github.com/esphome/esphome/pull/10176) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 3.3.7 to 3.3.8 [esphome#10177](https://github.com/esphome/esphome/pull/10177) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 38.1.0 to 38.2.1 [esphome#10197](https://github.com/esphome/esphome/pull/10197) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump actions/checkout from 4 to 5 [esphome#10198](https://github.com/esphome/esphome/pull/10198) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump aioesphomeapi from 38.2.1 to 39.0.0 [esphome#10222](https://github.com/esphome/esphome/pull/10222) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump esphome-dashboard from 20250514.0 to 20250814.0 [esphome#10227](https://github.com/esphome/esphome/pull/10227) by [@dependabot[bot]](https://github.com/dependabot[bot]) + +
    + +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/2025.9.0.md b/src/content/docs/changelog/2025.9.0.mdx similarity index 98% rename from content/changelog/2025.9.0.md rename to src/content/docs/changelog/2025.9.0.mdx index 06509e6b1d..ef1401c877 100644 --- a/content/changelog/2025.9.0.md +++ b/src/content/docs/changelog/2025.9.0.mdx @@ -1,16 +1,16 @@ --- description: "Changelog for ESPHome 2025.9.0." title: "ESPHome 2025.9.0 - 17th September 2025" -params: - seo: - description: Changelog for ESPHome 2025.9.0. - image: /changelog/images/changelog-2025.9.0.png +pagefind: false +slug: "changelog/2025.9.0" --- -{{< imgtable >}} -"MIPI RGB Displays","components/display/mipi_rgb","indicator.jpg","" -"Camera Encoder","components/camera/camera_encoder","camera.svg","dark-invert" -{{< /imgtable >}} +import ImgTable from "@components/ImgTable.astro"; + + ## Release Overview @@ -28,7 +28,7 @@ developer tools while maintaining backward compatibility for most use cases. - **Improved sensor support** with enhanced BL0940 power monitoring capabilities - **Component improvements** including restructured Inkplate e-paper display support - +{/* markdownlint-disable-next-line MD026 */} ## 🎉 Welcome Jonathan to the Open Home Foundation Team! We're excited to announce that Jonathan ([@swoboda1337](https://github.com/swoboda1337)) has joined the @@ -50,7 +50,7 @@ If you'd like to support continued development of ESPHome and other open home pr ## MIPI RGB Display Support ESPHome 2025.9.0 introduces comprehensive support for MIPI RGB displays through the new -{{< docref "/components/display/mipi_rgb" >}} component. +[Mipi Rgb](/components/display/mipi_rgb/) component. **Key Features:** @@ -74,7 +74,7 @@ The ESPHome Builder web interface now offers improved flexibility for getting st ## Camera JPEG Encoder -The new {{< docref "/components/camera/camera_encoder" >}} component adds efficient JPEG compression capabilities to +The new [Camera Encoder](/components/camera/camera_encoder/) component adds efficient JPEG compression capabilities to ESP32 camera implementations, enabling: **Benefits:** @@ -156,7 +156,7 @@ ESPHome 2025.9.0 includes several breaking changes that may require configuratio Most breaking changes are internal optimizations that shouldn't affect typical configurations, but custom components and advanced setups may require updates. - +{/* markdownlint-disable MD013 */} ## Release 2025.9.1 - September 19 @@ -426,8 +426,4 @@ and advanced setups may require updates. - - -## All Changelogs - -{{< changelogs >}} +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/2026.1.0.md b/src/content/docs/changelog/2026.1.0.mdx similarity index 90% rename from content/changelog/2026.1.0.md rename to src/content/docs/changelog/2026.1.0.mdx index e9e2a17821..ec32d6b2cb 100644 --- a/content/changelog/2026.1.0.md +++ b/src/content/docs/changelog/2026.1.0.mdx @@ -1,25 +1,25 @@ --- description: "Changelog for ESPHome 2026.1.0." title: "ESPHome 2026.1.0 - January 2026" -params: - seo: - description: Changelog for ESPHome 2026.1.0. - image: /changelog/images/changelog-2026.1.0.png +pagefind: false +slug: "changelog/2026.1.0" --- -{{< imgtable >}} -"AQI","components/sensor/aqi","aqi.svg","" -"Water Heater Core","components/water_heater/index","folder-open.svg","dark-invert" -"Template Water Heater","components/water_heater/template","description.svg","dark-invert" -"Zigbee End Device","components/zigbee","zigbee.svg","" -"RD-03D","components/sensor/rd03d","rd03d.webp","" -"Infrared Core","components/infrared/index","folder-open.svg","dark-invert" -"IR/RF Proxy","components/ir_rf_proxy","remote.svg","dark-invert" -{{< /imgtable >}} +import ImgTable from "@components/ImgTable.astro"; + + ## Release Overview - +{/* RELEASE_OVERVIEW_START */} ESPHome 2026.1.0 delivers one of the most requested features: automatic WiFi roaming. Devices now switch to better access points after connecting, solving the problem of devices getting stuck on distant APs after power outages or AP reboots. The web server now uses entity names directly in URLs with collision-free encoding, fixing issues that plagued non-ASCII configurations. @@ -29,7 +29,7 @@ This release completes major security transitions: API password authentication h Months of performance optimization work culminates here: heap churn reduction plus allocator work enabled moving heap functions from IRAM to flash (saving ~6KB of IRAM on ESP32), removing object_id storage from RAM saves hundreds to thousands of bytes, zero-copy API support delivers ~42% more entities per packet, and ESP32 camera streaming improves by ~10% with lower latency. These optimizations translate directly into headroom for existing devices and reliability for years to come. LibreTiny platforms (BK72xx, RTL87xx, LN882x) receive thread-safe WiFi, atomics support, and deep sleep that bring them closer to first-class status. New hardware support includes the RD-03D mmWave radar and BTHome v2 parsing for Xiaomi sensors, while Zigbee on nRF52 expands with sensor, binary sensor, and switch support. - +{/* RELEASE_OVERVIEW_END */} ## Upgrade Checklist @@ -92,10 +92,10 @@ In 2026, ESPHome is faster, leaner, and more durable. It respects the hardware i We learned how to move forward without leaving users behind. - +{/* FEATURE_HIGHLIGHTS_START */} ## WiFi Roaming Support -One of the most requested features for years: ESPHome devices now automatically switch to better access points after connecting ([#12809](https://github.com/esphome/esphome/pull/12809)). +One of the most requested features for years: ESPHome devices now automatically switch to better access points after connecting ([esphome#12809](https://github.com/esphome/esphome/pull/12809)). This addresses three scenarios where devices get stuck on suboptimal APs: @@ -117,7 +117,7 @@ wifi: ## Web Server Improvements -The web server now uses entity names directly in URLs instead of sanitized `object_id` values ([#12627](https://github.com/esphome/esphome/pull/12627)), fixing long-standing issues with URL collisions. This change is part of the broader effort to [eliminate `object_id` collisions with non-ASCII characters](https://github.com/esphome/backlog/issues/85) - a key step toward proper UTF-8 support so users can use non-ASCII entity names in Home Assistant without collisions. +The web server now uses entity names directly in URLs instead of sanitized `object_id` values ([esphome#12627](https://github.com/esphome/esphome/pull/12627)), fixing long-standing issues with URL collisions. This change is part of the broader effort to [eliminate `object_id` collisions with non-ASCII characters](https://github.com/esphome/backlog/issues/85) - a key step toward proper UTF-8 support so users can use non-ASCII entity names in Home Assistant without collisions. **Problems Solved:** @@ -148,7 +148,7 @@ Old URLs using `object_id` format (e.g., `/sensor/temperature_sensor`) continue ### Brotli Compression for Web Assets -Web server and captive portal assets now use Brotli compression by default, saving significant flash space ([#12959](https://github.com/esphome/esphome/pull/12959)): +Web server and captive portal assets now use Brotli compression by default, saving significant flash space ([esphome#12959](https://github.com/esphome/esphome/pull/12959)): - **captive_portal**: 348 bytes saved (24%) - **web_server v2**: 1,210 bytes saved (10%) @@ -160,7 +160,7 @@ This release includes significant security improvements that complete long-stand ### API Password Authentication Removed -Password authentication has been **removed** from the API component after being deprecated since May 2022 ([#12819](https://github.com/esphome/esphome/pull/12819)). Password authentication only verified identity while all data was still transmitted in plaintext. Noise-based encryption provides both authentication and a fully encrypted data stream. +Password authentication has been **removed** from the API component after being deprecated since May 2022 ([esphome#12819](https://github.com/esphome/esphome/pull/12819)). Password authentication only verified identity while all data was still transmitted in plaintext. Noise-based encryption provides both authentication and a fully encrypted data stream. **If your configuration still has `password:`, it will fail to compile.** Users must migrate to encryption: @@ -173,20 +173,20 @@ api: ### OTA Authentication Upgraded -MD5 authentication support has been **removed** from OTA updates ([#12707](https://github.com/esphome/esphome/pull/12707)). SHA256 is now mandatory, preventing protocol downgrade attacks. +MD5 authentication support has been **removed** from OTA updates ([esphome#12707](https://github.com/esphome/esphome/pull/12707)). SHA256 is now mandatory, preventing protocol downgrade attacks. -> [!IMPORTANT] +> [!NOTE] > **ESPHome versions before 2025.10.0 that use password authentication cannot OTA to devices running 2026.1.0 or later.** > > If you use multiple systems to install and/or update your ESPHome devices, be sure they're all up-to-date! If you need to downgrade to a version before 2025.10.0, downgrade to 2025.12.x first, then OTA to an earlier version. ### HMAC-SHA256 Support -A new `hmac_sha256` component provides HMAC support using the more secure SHA256 algorithm ([#12437](https://github.com/esphome/esphome/pull/12437)). +A new `hmac_sha256` component provides HMAC support using the more secure SHA256 algorithm ([esphome#12437](https://github.com/esphome/esphome/pull/12437)). ## ESP-IDF Default Framework -This release completes the transition announced in ESPHome 2025.8.0: **ESP-IDF is now the default framework** for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3 ([#12746](https://github.com/esphome/esphome/pull/12746)). Users have been warned about this change for months. +This release completes the transition announced in ESPHome 2025.8.0: **ESP-IDF is now the default framework** for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3 ([esphome#12746](https://github.com/esphome/esphome/pull/12746)). Users have been warned about this change for months. **Benefits:** @@ -195,7 +195,7 @@ This release completes the transition announced in ESPHome 2025.8.0: **ESP-IDF i - **Better performance** - Improved runtime characteristics - **Access to newer features** - Full ESP-IDF capabilities -This release also bumps to ESP-IDF 5.5.2 ([#12681](https://github.com/esphome/esphome/pull/12681)). +This release also bumps to ESP-IDF 5.5.2 ([esphome#12681](https://github.com/esphome/esphome/pull/12681)). To continue using Arduino for components that require it (such as `heatpumpir` or `midea`), explicitly set `type: arduino` in your configuration. See the [Arduino to ESP-IDF Migration Guide](/guides/esp32_arduino_to_idf/) for details. @@ -212,7 +212,7 @@ This release represents the culmination of months of work to reduce heap churn a ### Heap Churn Reduction -Systematic elimination of unnecessary dynamic allocations means heap functions (malloc, free, realloc) are now primarily called during setup, not during normal operation. This enabled moving heap functions from IRAM to flash on ESP32, **saving ~6KB of IRAM** ([#12862](https://github.com/esphome/esphome/pull/12862)). +Systematic elimination of unnecessary dynamic allocations means heap functions (malloc, free, realloc) are now primarily called during setup, not during normal operation. This enabled moving heap functions from IRAM to flash on ESP32, **saving ~6KB of IRAM** ([esphome#12862](https://github.com/esphome/esphome/pull/12862)). Key optimizations include: @@ -224,7 +224,7 @@ Key optimizations include: ### Object ID RAM Removal -The `object_id` field is no longer stored in RAM, saving significant memory especially on ESP8266 ([#12631](https://github.com/esphome/esphome/pull/12631)): +The `object_id` field is no longer stored in RAM, saving significant memory especially on ESP8266 ([esphome#12631](https://github.com/esphome/esphome/pull/12631)): - **ESP8266** (37 entities): ~886 bytes saved (~24 bytes/entity) - **ESP32** (102 entities): ~497 bytes saved (~5 bytes/entity) @@ -234,26 +234,26 @@ The `object_id` field is no longer stored in RAM, saving significant memory espe ESP8266 receives additional memory optimizations: -- **Unused waveform code excluded** - Saves 596 bytes RAM when `esp8266_pwm` is not used ([#12690](https://github.com/esphome/esphome/pull/12690)) -- **Unused Serial objects excluded** - Saves 32-64 bytes RAM ([#12736](https://github.com/esphome/esphome/pull/12736)) +- **Unused waveform code excluded** - Saves 596 bytes RAM when `esp8266_pwm` is not used ([esphome#12690](https://github.com/esphome/esphome/pull/12690)) +- **Unused Serial objects excluded** - Saves 32-64 bytes RAM ([esphome#12736](https://github.com/esphome/esphome/pull/12736)) ### ESP-IDF 5.5.2 Compiler Improvements -The bump to ESP-IDF 5.5.2 includes compiler improvements that reduce flash usage by ~35KB (~4%) on typical ESP32 configurations ([#12681](https://github.com/esphome/esphome/pull/12681)). The libc component alone shrank by ~15KB. +The bump to ESP-IDF 5.5.2 includes compiler improvements that reduce flash usage by ~35KB (~4%) on typical ESP32 configurations ([esphome#12681](https://github.com/esphome/esphome/pull/12681)). The libc component alone shrank by ~15KB. ### Logging Optimizations -Over 100 components received logging optimizations that combine consecutive log statements into single calls ([#12838](https://github.com/esphome/esphome/pull/12838), [#12860](https://github.com/esphome/esphome/pull/12860), [#12856](https://github.com/esphome/esphome/pull/12856), and many more). Each `ESP_LOG*` call involves formatting, memory allocation, serial output, and network packet transmission. Combining them significantly reduces event loop blocking and the number of network packets sent to connected clients. +Over 100 components received logging optimizations that combine consecutive log statements into single calls ([esphome#12838](https://github.com/esphome/esphome/pull/12838), [esphome#12860](https://github.com/esphome/esphome/pull/12860), [esphome#12856](https://github.com/esphome/esphome/pull/12856), and many more). Each `ESP_LOG*` call involves formatting, memory allocation, serial output, and network packet transmission. Combining them significantly reduces event loop blocking and the number of network packets sent to connected clients. Additional logging improvements: -- **Thread-safe logging on host platform** - Consistent behavior across platforms ([#13010](https://github.com/esphome/esphome/pull/13010)) -- **RAII guards for recursion protection** - Optimized hot path performance ([#13194](https://github.com/esphome/esphome/pull/13194)) -- **StaticVector for log listeners** - Compile-time sizing eliminates heap allocation ([#13196](https://github.com/esphome/esphome/pull/13196)) +- **Thread-safe logging on host platform** - Consistent behavior across platforms ([esphome#13010](https://github.com/esphome/esphome/pull/13010)) +- **RAII guards for recursion protection** - Optimized hot path performance ([esphome#13194](https://github.com/esphome/esphome/pull/13194)) +- **StaticVector for log listeners** - Compile-time sizing eliminates heap allocation ([esphome#13196](https://github.com/esphome/esphome/pull/13196)) ### Zero-Copy API Protocol -Zero-copy message handling is now complete and enabled by default for all protobuf messages ([#12816](https://github.com/esphome/esphome/pull/12816)), eliminating unnecessary memory copies during API communication. Combined with removing `object_id` from the wire protocol ([#12818](https://github.com/esphome/esphome/pull/12818)) and 33% smaller batch items ([#13199](https://github.com/esphome/esphome/pull/13199)), this provides: +Zero-copy message handling is now complete and enabled by default for all protobuf messages ([esphome#12816](https://github.com/esphome/esphome/pull/12816)), eliminating unnecessary memory copies during API communication. Combined with removing `object_id` from the wire protocol ([esphome#12818](https://github.com/esphome/esphome/pull/12818)) and 33% smaller batch items ([esphome#13199](https://github.com/esphome/esphome/pull/13199)), this provides: - **~42% more entities per packet** (24 → 34) - **Faster Home Assistant reconnects** - especially noticeable for large setups @@ -263,29 +263,29 @@ Zero-copy message handling is now complete and enabled by default for all protob ### ESP32 Network Latency Reduction -Socket operations on ESP32 now call `lwip_read()` and `lwip_write()` directly instead of going through ESP-IDF's VFS layer ([#13179](https://github.com/esphome/esphome/pull/13179)). This reduces latency for API connections, async TCP, and voice assistant components by eliminating unnecessary function pointer dispatches. +Socket operations on ESP32 now call `lwip_read()` and `lwip_write()` directly instead of going through ESP-IDF's VFS layer ([esphome#13179](https://github.com/esphome/esphome/pull/13179)). This reduces latency for API connections, async TCP, and voice assistant components by eliminating unnecessary function pointer dispatches. ### PSRAM Workaround Optimization -ESP32 r3.0+ users with PSRAM can now save ~10KB of IRAM by setting `minimum_chip_revision: "3.0"` ([#13074](https://github.com/esphome/esphome/pull/13074)). This disables workarounds for silicon bugs that were fixed in newer chip revisions. +ESP32 r3.0+ users with PSRAM can now save ~10KB of IRAM by setting `minimum_chip_revision: "3.0"` ([esphome#13074](https://github.com/esphome/esphome/pull/13074)). This disables workarounds for silicon bugs that were fixed in newer chip revisions. ## LibreTiny Platform Improvements LibreTiny platforms (BK72xx, RTL87xx, LN882x) receive significant improvements that bring them closer to first-class platform status: -- **Thread-safe logging** - Prevents buffer corruption and connection failures when non-main tasks log messages ([#13062](https://github.com/esphome/esphome/pull/13062)) -- **Cortex-M4 atomics support** - Enables proper atomic operations on RTL87xx and LN882x platforms ([#13191](https://github.com/esphome/esphome/pull/13191)) -- **Thread-safe WiFi** - Improved WiFi reliability in multi-threaded scenarios ([#13191](https://github.com/esphome/esphome/pull/13191)) -- **Board regeneration** - Updated board definitions with consolidated platform code ([#13191](https://github.com/esphome/esphome/pull/13191)) -- **Deep sleep support** - BK7231n and BK7231t chips now support deep sleep with configurable timer and GPIO wake-up ([#12267](https://github.com/esphome/esphome/pull/12267)) -- **BLE stack disabled on BK7231N** - Saves ~21KB RAM and ~225KB flash since ESPHome has no BLE support on LibreTiny ([#13131](https://github.com/esphome/esphome/pull/13131)) -- **LibreTiny 1.9.2** - Fixes GPIO interrupt issues on LN882H that caused HLW8012/BL0937 power sensors to report zero ([#13077](https://github.com/esphome/esphome/pull/13077)) +- **Thread-safe logging** - Prevents buffer corruption and connection failures when non-main tasks log messages ([esphome#13062](https://github.com/esphome/esphome/pull/13062)) +- **Cortex-M4 atomics support** - Enables proper atomic operations on RTL87xx and LN882x platforms ([esphome#13191](https://github.com/esphome/esphome/pull/13191)) +- **Thread-safe WiFi** - Improved WiFi reliability in multi-threaded scenarios ([esphome#13191](https://github.com/esphome/esphome/pull/13191)) +- **Board regeneration** - Updated board definitions with consolidated platform code ([esphome#13191](https://github.com/esphome/esphome/pull/13191)) +- **Deep sleep support** - BK7231n and BK7231t chips now support deep sleep with configurable timer and GPIO wake-up ([esphome#12267](https://github.com/esphome/esphome/pull/12267)) +- **BLE stack disabled on BK7231N** - Saves ~21KB RAM and ~225KB flash since ESPHome has no BLE support on LibreTiny ([esphome#13131](https://github.com/esphome/esphome/pull/13131)) +- **LibreTiny 1.9.2** - Fixes GPIO interrupt issues on LN882H that caused HLW8012/BL0937 power sensors to report zero ([esphome#13077](https://github.com/esphome/esphome/pull/13077)) ## New Hardware Support ### RD-03D mmWave Radar -The `rd03d` component adds support for the Ai-Thinker RD-03D 24GHz millimeter-wave radar module with multi-target trajectory tracking ([#12764](https://github.com/esphome/esphome/pull/12764)). +The `rd03d` component adds support for the Ai-Thinker RD-03D 24GHz millimeter-wave radar module with multi-target trajectory tracking ([esphome#12764](https://github.com/esphome/esphome/pull/12764)). **Features:** @@ -294,11 +294,11 @@ The `rd03d` component adds support for the Ai-Thinker RD-03D 24GHz millimeter-wa ### BTHome MiThermometer -The `bthome_mithermometer` platform enables receiving data from Xiaomi Mijia BLE sensors running PVVX firmware with BTHome v2 format ([#12635](https://github.com/esphome/esphome/pull/12635)). Starting with PVVX firmware version 6, BTHome v2 is the only supported format. +The `bthome_mithermometer` platform enables receiving data from Xiaomi Mijia BLE sensors running PVVX firmware with BTHome v2 format ([esphome#12635](https://github.com/esphome/esphome/pull/12635)). Starting with PVVX firmware version 6, BTHome v2 is the only supported format. ### Air Quality Index Sensor -A new standalone `aqi` sensor computes Air Quality Index from particulate matter readings ([#12203](https://github.com/esphome/esphome/pull/12203), [#12958](https://github.com/esphome/esphome/pull/12958)). It supports both EPA AQI (US) and CAQI (European) calculation methods. +A new standalone `aqi` sensor computes Air Quality Index from particulate matter readings ([esphome#12203](https://github.com/esphome/esphome/pull/12203), [esphome#12958](https://github.com/esphome/esphome/pull/12958)). It supports both EPA AQI (US) and CAQI (European) calculation methods. ```yaml sensor: @@ -319,15 +319,15 @@ sensor: ESPHome now supports Zigbee on nRF52 platforms, bringing a new connectivity option alongside WiFi, Bluetooth, and Thread: -- **Binary sensor support** - Expose GPIO states via Zigbee ([#11535](https://github.com/esphome/esphome/pull/11535)) -- **Sensor support** - Expose ESPHome sensors via Zigbee's Analog Input cluster with automatic unit mapping ([#12187](https://github.com/esphome/esphome/pull/12187)) -- **Switch support** - Control ESPHome switches via Zigbee as binary output ([#13083](https://github.com/esphome/esphome/pull/13083)) +- **Binary sensor support** - Expose GPIO states via Zigbee ([esphome#11535](https://github.com/esphome/esphome/pull/11535)) +- **Sensor support** - Expose ESPHome sensors via Zigbee's Analog Input cluster with automatic unit mapping ([esphome#12187](https://github.com/esphome/esphome/pull/12187)) +- **Switch support** - Control ESPHome switches via Zigbee as binary output ([esphome#13083](https://github.com/esphome/esphome/pull/13083)) - **`wipe_on_boot: once`** - Wipe network settings only on first boot, preserving connections after OTA updates -- **Framework version support** - Configure nRF-SDK version with experimental support for SDK 2.9.2 and 3.2.0 ([#12489](https://github.com/esphome/esphome/pull/12489)) +- **Framework version support** - Configure nRF-SDK version with experimental support for SDK 2.9.2 and 3.2.0 ([esphome#12489](https://github.com/esphome/esphome/pull/12489)) ## OTA Rollback Support -ESP32 devices using ESP-IDF now support automatic OTA rollback ([#12460](https://github.com/esphome/esphome/pull/12460)). When enabled (the default), the bootloader automatically rolls back to the previous firmware if the device crashes or resets before the boot is marked as successful. +ESP32 devices using ESP-IDF now support automatic OTA rollback ([esphome#12460](https://github.com/esphome/esphome/pull/12460)). When enabled (the default), the bootloader automatically rolls back to the previous firmware if the device crashes or resets before the boot is marked as successful. This feature works with the `safe_mode` component - after a successful boot (determined by the safe_mode boot timer), the firmware is marked as valid. If the device crashes before that point, it automatically rolls back. @@ -337,15 +337,15 @@ This feature works with the `safe_mode` component - after a successful boot (det ### AC Dimmer ESP-IDF Support -The `ac_dimmer` component now supports ESP-IDF framework in addition to Arduino ([#7072](https://github.com/esphome/esphome/pull/7072)). +The `ac_dimmer` component now supports ESP-IDF framework in addition to Arduino ([esphome#7072](https://github.com/esphome/esphome/pull/7072)). ### DSMR ESP-IDF Support -The `dsmr` component now supports ESP-IDF framework and fixes multiple bugs with the DSMR parsing ([#11036](https://github.com/esphome/esphome/pull/11036)). +The `dsmr` component now supports ESP-IDF framework and fixes multiple bugs with the DSMR parsing ([esphome#11036](https://github.com/esphome/esphome/pull/11036)). ### ESP32 Camera Performance -The `esp32_camera` component received significant performance improvements ([#12601](https://github.com/esphome/esphome/pull/12601)): +The `esp32_camera` component received significant performance improvements ([esphome#12601](https://github.com/esphome/esphome/pull/12601)): - **~10% more frames delivered** during streaming (510-523 vs 467-474 per 60 seconds) - **~50% reduction in idle CPU usage** by skipping work when no frames are pending @@ -353,7 +353,7 @@ The `esp32_camera` component received significant performance improvements ([#12 ## Water Heater Component -ESPHome now includes a dedicated [water_heater](/components/water_heater) entity type for controlling water heaters, boilers, and similar hot water appliances ([#12498](https://github.com/esphome/esphome/pull/12498), [#12516](https://github.com/esphome/esphome/pull/12516), [#12511](https://github.com/esphome/esphome/pull/12511)). +ESPHome now includes a dedicated [water_heater](/components/water_heater) entity type for controlling water heaters, boilers, and similar hot water appliances ([esphome#12498](https://github.com/esphome/esphome/pull/12498), [esphome#12516](https://github.com/esphome/esphome/pull/12516), [esphome#12511](https://github.com/esphome/esphome/pull/12511)). - **Template platform** - Full control via automations and lambdas - **Multiple operating modes** - Support for eco, gas, and custom modes @@ -379,7 +379,7 @@ water_heater: > [!WARNING] > This component is experimental and the API is likely to change in future releases. -The new [ir_rf_proxy](/components/ir_rf_proxy) component provides an API-accessible interface for transmitting and receiving infrared and RF signals, bridging Home Assistant with ESPHome's existing `remote_receiver` and `remote_transmitter` components ([#12985](https://github.com/esphome/esphome/pull/12985)). +The new [ir_rf_proxy](/components/ir_rf_proxy) component provides an API-accessible interface for transmitting and receiving infrared and RF signals, bridging Home Assistant with ESPHome's existing `remote_receiver` and `remote_transmitter` components ([esphome#12985](https://github.com/esphome/esphome/pull/12985)). **Key Features:** @@ -388,7 +388,7 @@ The new [ir_rf_proxy](/components/ir_rf_proxy) component provides an API-accessi - **Raw timing arrays** - Maximum flexibility with minimal on-device processing - **Bidirectional operation** - Define multiple proxy instances for transmit and receive -This component is part of a broader effort to make IR & RF easier to use from within Home Assistant. A new experimental `infrared` entity platform ([#13129](https://github.com/esphome/esphome/pull/13129)) provides the underlying infrastructure. +This component is part of a broader effort to make IR & RF easier to use from within Home Assistant. A new experimental `infrared` entity platform ([esphome#13129](https://github.com/esphome/esphome/pull/13129)) provides the underlying infrastructure. ```yaml infrared: @@ -402,33 +402,33 @@ infrared: ## Additional Features -- **UART event component** - Trigger ESPHome events when receiving specific UART sequences ([#11765](https://github.com/esphome/esphome/pull/11765)) -- **Templatable MQTT topics** - Dynamic state and command topics via lambdas ([#12441](https://github.com/esphome/esphome/pull/12441)) -- **Update check action** - Trigger HTTP-based update checks from automations ([#12415](https://github.com/esphome/esphome/pull/12415)) -- **SPI flexible data rates** - Any achievable data rate within 5% can now be specified ([#12753](https://github.com/esphome/esphome/pull/12753)) -- **Hub75 improvements** - Rotation support, expanded bit depths (4-12), and brightness action ([#12674](https://github.com/esphome/esphome/pull/12674), [#12521](https://github.com/esphome/esphome/pull/12521)) -- **ESP32 CAN listen-only mode** - Passive bus monitoring without sending ACK signals ([#13084](https://github.com/esphome/esphome/pull/13084)) -- **MMC5603 temperature compensation** - Eliminates thermal variation in magnetometer readings ([#12556](https://github.com/esphome/esphome/pull/12556)) -- **MHZ19 configurable detection range** - Set detection range at setup or dynamically via action ([#12677](https://github.com/esphome/esphome/pull/12677)) -- **ESP32 RMT LED strip inverted logic** - Support for simple transistor-based level shifters ([#12825](https://github.com/esphome/esphome/pull/12825)) -- **ESP32 Hosted HTTP updates** - Fetch coprocessor firmware from remote manifests ([#13090](https://github.com/esphome/esphome/pull/13090)) -- **Thermostat boolean heat_cool_mode** - Simplified configuration without requiring automations ([#13069](https://github.com/esphome/esphome/pull/13069)) - +- **UART event component** - Trigger ESPHome events when receiving specific UART sequences ([esphome#11765](https://github.com/esphome/esphome/pull/11765)) +- **Templatable MQTT topics** - Dynamic state and command topics via lambdas ([esphome#12441](https://github.com/esphome/esphome/pull/12441)) +- **Update check action** - Trigger HTTP-based update checks from automations ([esphome#12415](https://github.com/esphome/esphome/pull/12415)) +- **SPI flexible data rates** - Any achievable data rate within 5% can now be specified ([esphome#12753](https://github.com/esphome/esphome/pull/12753)) +- **Hub75 improvements** - Rotation support, expanded bit depths (4-12), and brightness action ([esphome#12674](https://github.com/esphome/esphome/pull/12674), [esphome#12521](https://github.com/esphome/esphome/pull/12521)) +- **ESP32 CAN listen-only mode** - Passive bus monitoring without sending ACK signals ([esphome#13084](https://github.com/esphome/esphome/pull/13084)) +- **MMC5603 temperature compensation** - Eliminates thermal variation in magnetometer readings ([esphome#12556](https://github.com/esphome/esphome/pull/12556)) +- **MHZ19 configurable detection range** - Set detection range at setup or dynamically via action ([esphome#12677](https://github.com/esphome/esphome/pull/12677)) +- **ESP32 RMT LED strip inverted logic** - Support for simple transistor-based level shifters ([esphome#12825](https://github.com/esphome/esphome/pull/12825)) +- **ESP32 Hosted HTTP updates** - Fetch coprocessor firmware from remote manifests ([esphome#13090](https://github.com/esphome/esphome/pull/13090)) +- **Thermostat boolean heat_cool_mode** - Simplified configuration without requiring automations ([esphome#13069](https://github.com/esphome/esphome/pull/13069)) +{/* FEATURE_HIGHLIGHTS_END */} ## Breaking Changes - +{/* BREAKING_CHANGES_USERS_START */} ### Platform Changes -- **ESP32**: ESP-IDF is now the default framework for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3. Users who relied on the implicit Arduino default must now explicitly specify `type: arduino` if they need Arduino-specific features or have components that don't yet support ESP-IDF (such as `heatpumpir`, `midea`, or `light` with `wled` effect). [#12746](https://github.com/esphome/esphome/pull/12746) +- **ESP32**: ESP-IDF is now the default framework for ESP32, ESP32-C3, ESP32-S2, and ESP32-S3. Users who relied on the implicit Arduino default must now explicitly specify `type: arduino` if they need Arduino-specific features or have components that don't yet support ESP-IDF (such as `heatpumpir`, `midea`, or `light` with `wled` effect). [esphome#12746](https://github.com/esphome/esphome/pull/12746) -- **ESP8266**: Unused Arduino Serial objects are now excluded from builds. Users who directly use `Serial` or `Serial1` in lambdas must now explicitly enable them with `enable_serial: true` or `enable_serial1: true` under the `esp8266:` configuration. Most users are unaffected as Serial usage typically goes through the `uart` component. [#12736](https://github.com/esphome/esphome/pull/12736) +- **ESP8266**: Unused Arduino Serial objects are now excluded from builds. Users who directly use `Serial` or `Serial1` in lambdas must now explicitly enable them with `enable_serial: true` or `enable_serial1: true` under the `esp8266:` configuration. Most users are unaffected as Serial usage typically goes through the `uart` component. [esphome#12736](https://github.com/esphome/esphome/pull/12736) -- **ESP8266**: Unused waveform code is now excluded from builds when `esp8266_pwm` is not used, saving 596 bytes of RAM. Users who directly use Arduino waveform functions in lambdas must add an `esp8266_pwm` component to their configuration. [#12690](https://github.com/esphome/esphome/pull/12690) +- **ESP8266**: Unused waveform code is now excluded from builds when `esp8266_pwm` is not used, saving 596 bytes of RAM. Users who directly use Arduino waveform functions in lambdas must add an `esp8266_pwm` component to their configuration. [esphome#12690](https://github.com/esphome/esphome/pull/12690) ### Security Changes -- **API**: Password authentication has been removed after being deprecated since May 2022. Configurations with `password:` will fail to build. Users must migrate to `encryption:` with a key generated via `openssl rand -base64 32`. [#12819](https://github.com/esphome/esphome/pull/12819) +- **API**: Password authentication has been removed after being deprecated since May 2022. Configurations with `password:` will fail to build. Users must migrate to `encryption:` with a key generated via `openssl rand -base64 32`. [esphome#12819](https://github.com/esphome/esphome/pull/12819) ```yaml api: @@ -436,70 +436,70 @@ infrared: key: !secret api_encryption_key ``` -- **OTA**: ESPHome versions before 2025.10.0 cannot perform OTA updates to devices running this version. MD5 authentication support has been removed; SHA256 is now mandatory. [#12707](https://github.com/esphome/esphome/pull/12707) +- **OTA**: ESPHome versions before 2025.10.0 cannot perform OTA updates to devices running this version. MD5 authentication support has been removed; SHA256 is now mandatory. [esphome#12707](https://github.com/esphome/esphome/pull/12707) ### Component Changes -- **Sprinkler**: Internal latching valve support has been removed. The configuration variables `pump_pulse_duration`, `pump_off_switch_id`, `pump_on_switch_id`, `valve_pulse_duration`, `valve_off_switch_id`, and `valve_on_switch_id` are no longer available. Users with latching valves must now use an [H-Bridge switch](/components/switch/hbridge) with the standard `valve_switch_id` and/or `pump_switch_id` configuration. [#12603](https://github.com/esphome/esphome/pull/12603) +- **Sprinkler**: Internal latching valve support has been removed. The configuration variables `pump_pulse_duration`, `pump_off_switch_id`, `pump_on_switch_id`, `valve_pulse_duration`, `valve_off_switch_id`, and `valve_on_switch_id` are no longer available. Users with latching valves must now use an [H-Bridge switch](/components/switch/hbridge) with the standard `valve_switch_id` and/or `pump_switch_id` configuration. [esphome#12603](https://github.com/esphome/esphome/pull/12603) -- **Web Server**: URLs now use entity names instead of sanitized `object_id` values. Old URLs (e.g., `/sensor/temperature_sensor`) still work but are deprecated and will be removed in 2026.7.0. Additionally, the `/` character is no longer allowed in entity, device, or area names (reserved as URL path separator), and names are limited to 120 characters maximum. [#12627](https://github.com/esphome/esphome/pull/12627) +- **Web Server**: URLs now use entity names instead of sanitized `object_id` values. Old URLs (e.g., `/sensor/temperature_sensor`) still work but are deprecated and will be removed in 2026.7.0. Additionally, the `/` character is no longer allowed in entity, device, or area names (reserved as URL path separator), and names are limited to 120 characters maximum. [esphome#12627](https://github.com/esphome/esphome/pull/12627) -- **ESP32 Hosted**: The update configuration now requires an explicit `type:` field. Existing embedded mode configurations must add `type: embedded`. A new `type: http` mode allows fetching firmware from remote manifests. [#13090](https://github.com/esphome/esphome/pull/13090) +- **ESP32 Hosted**: The update configuration now requires an explicit `type:` field. Existing embedded mode configurations must add `type: embedded`. A new `type: http` mode allows fetching firmware from remote manifests. [esphome#13090](https://github.com/esphome/esphome/pull/13090) -- **HM3301**: The AQI sensor configuration has been refactored into a shared `aqi` component. Existing `aqi:` configurations under `hm3301` continue to work but the implementation is now shared with `pmsx003`. [#12203](https://github.com/esphome/esphome/pull/12203) +- **HM3301**: The AQI sensor configuration has been refactored into a shared `aqi` component. Existing `aqi:` configurations under `hm3301` continue to work but the implementation is now shared with `pmsx003`. [esphome#12203](https://github.com/esphome/esphome/pull/12203) -- **MMC5603**: The `auto_set_reset` option is now enabled by default to eliminate temperature-related drift. This reduces maximum read frequency from 150Hz to 75Hz. Users requiring high-frequency reads can set `auto_set_reset: false`. [#12556](https://github.com/esphome/esphome/pull/12556) +- **MMC5603**: The `auto_set_reset` option is now enabled by default to eliminate temperature-related drift. This reduces maximum read frequency from 150Hz to 75Hz. Users requiring high-frequency reads can set `auto_set_reset: false`. [esphome#12556](https://github.com/esphome/esphome/pull/12556) -- **Ultrasonic**: The `timeout` option is deprecated and will be removed in 2026.8.0. A fixed 80ms measurement timeout is now used to fix reliability issues with some SR04 sensors that have a 12.3ms delay before sending pulses. [#12897](https://github.com/esphome/esphome/pull/12897) +- **Ultrasonic**: The `timeout` option is deprecated and will be removed in 2026.8.0. A fixed 80ms measurement timeout is now used to fix reliability issues with some SR04 sensors that have a 12.3ms delay before sending pulses. [esphome#12897](https://github.com/esphome/esphome/pull/12897) ### Behavior Changes -- **API**: The `on_client_disconnected` trigger now fires after the client is removed from the connection list, so `api.connected` correctly reflects the true connection state. Users who added `delay: 1ms` workarounds can remove them. Users who relied on the disconnecting client still being counted may need to adjust their logic. [#13088](https://github.com/esphome/esphome/pull/13088) +- **API**: The `on_client_disconnected` trigger now fires after the client is removed from the connection list, so `api.connected` correctly reflects the true connection state. Users who added `delay: 1ms` workarounds can remove them. Users who relied on the disconnecting client still being counted may need to adjust their logic. [esphome#13088](https://github.com/esphome/esphome/pull/13088) -- **Display Drivers**: Multiple display drivers now correctly honor clipping for `fill()` and `clear()` operations. Code that relied on the previous (incorrect) behavior where fills ignored clipping regions may produce different results. [#12808](https://github.com/esphome/esphome/pull/12808) +- **Display Drivers**: Multiple display drivers now correctly honor clipping for `fill()` and `clear()` operations. Code that relied on the previous (incorrect) behavior where fills ignored clipping regions may produce different results. [esphome#12808](https://github.com/esphome/esphome/pull/12808) -- **Build Info**: The `compilation_time` field in the native API now correctly updates on every compile (previously only updated when `main.cpp` was rebuilt). The version text sensor format has changed to include config hash. [#12425](https://github.com/esphome/esphome/pull/12425) +- **Build Info**: The `compilation_time` field in the native API now correctly updates on every compile (previously only updated when `main.cpp` was rebuilt). The version text sensor format has changed to include config hash. [esphome#12425](https://github.com/esphome/esphome/pull/12425) ### Deprecations -- **custom_components folder**: The `custom_components` folder is deprecated and will be removed in 2026.6.0. Users should migrate to `external_components` instead. A warning appears if the folder exists and contains files. [#12552](https://github.com/esphome/esphome/pull/12552) +- **custom_components folder**: The `custom_components` folder is deprecated and will be removed in 2026.6.0. Users should migrate to `external_components` instead. A warning appears if the folder exists and contains files. [esphome#12552](https://github.com/esphome/esphome/pull/12552) ### Lambda API Changes Users with lambdas that access component state should note the following changes. These methods now return `StringRef` instead of `const char*`, which is safer but requires minor syntax changes: -- **Fan**: `get_preset_mode()` returns `StringRef`. Use `.empty()` instead of `!= nullptr` checks, and `==` for string comparison instead of `strcmp()`. [#13092](https://github.com/esphome/esphome/pull/13092) +- **Fan**: `get_preset_mode()` returns `StringRef`. Use `.empty()` instead of `!= nullptr` checks, and `==` for string comparison instead of `strcmp()`. [esphome#13092](https://github.com/esphome/esphome/pull/13092) -- **Select**: `current_option()` returns `StringRef`. Use `.empty()` instead of `!= nullptr` checks. [#13095](https://github.com/esphome/esphome/pull/13095) +- **Select**: `current_option()` returns `StringRef`. Use `.empty()` instead of `!= nullptr` checks. [esphome#13095](https://github.com/esphome/esphome/pull/13095) -- **Climate**: `get_custom_fan_mode()` and `get_custom_preset()` return `StringRef`. Use `has_custom_fan_mode()` or `.empty()` instead of `!= nullptr` checks. [#13103](https://github.com/esphome/esphome/pull/13103) +- **Climate**: `get_custom_fan_mode()` and `get_custom_preset()` return `StringRef`. Use `has_custom_fan_mode()` or `.empty()` instead of `!= nullptr` checks. [esphome#13103](https://github.com/esphome/esphome/pull/13103) -- **Event**: `get_last_event_type()` returns `StringRef`. Use `has_event()` or `.empty()` instead of `!= nullptr` checks. [#13104](https://github.com/esphome/esphome/pull/13104) +- **Event**: `get_last_event_type()` returns `StringRef`. Use `has_event()` or `.empty()` instead of `!= nullptr` checks. [esphome#13104](https://github.com/esphome/esphome/pull/13104) -- **Light**: `get_effect_name()` returns `StringRef` instead of `std::string`. [#13105](https://github.com/esphome/esphome/pull/13105) - +- **Light**: `get_effect_name()` returns `StringRef` instead of `std::string`. [esphome#13105](https://github.com/esphome/esphome/pull/13105) +{/* BREAKING_CHANGES_USERS_END */} ### Breaking Changes for Developers - -- **Application API**: `get_compilation_time()` deprecated (removal 2026.7.0), `get_compilation_time_ref()` removed. Use `get_build_time()` (Unix timestamp), `get_config_hash()`, `get_config_version_hash()`, or `get_build_time_string(buffer)` instead. [#12425](https://github.com/esphome/esphome/pull/12425) +{/* BREAKING_CHANGES_DEVELOPERS_START */} +- **Application API**: `get_compilation_time()` deprecated (removal 2026.7.0), `get_compilation_time_ref()` removed. Use `get_build_time()` (Unix timestamp), `get_config_hash()`, `get_config_version_hash()`, or `get_build_time_string(buffer)` instead. [esphome#12425](https://github.com/esphome/esphome/pull/12425) -- **Fan API**: `Fan::get_preset_mode()` returns `StringRef` instead of `const char*`. Returns empty ref when no preset is set. Use `has_preset_mode()` or `.empty()` instead of nullptr checks. New `apply_preset_mode_(call)` helper for derived classes. [#13092](https://github.com/esphome/esphome/pull/13092) +- **Fan API**: `Fan::get_preset_mode()` returns `StringRef` instead of `const char*`. Returns empty ref when no preset is set. Use `has_preset_mode()` or `.empty()` instead of nullptr checks. New `apply_preset_mode_(call)` helper for derived classes. [esphome#13092](https://github.com/esphome/esphome/pull/13092) -- **Select API**: `Select::current_option()` returns `StringRef` instead of `const char*`. Returns empty ref when no state is set. [#13095](https://github.com/esphome/esphome/pull/13095) +- **Select API**: `Select::current_option()` returns `StringRef` instead of `const char*`. Returns empty ref when no state is set. [esphome#13095](https://github.com/esphome/esphome/pull/13095) -- **Climate API**: `Climate::get_custom_fan_mode()` and `Climate::get_custom_preset()` return `StringRef` instead of `const char*`. New `StringRef` overloads for `set_custom_fan_mode_()` and `set_custom_preset_()` protected setters. [#13103](https://github.com/esphome/esphome/pull/13103) +- **Climate API**: `Climate::get_custom_fan_mode()` and `Climate::get_custom_preset()` return `StringRef` instead of `const char*`. New `StringRef` overloads for `set_custom_fan_mode_()` and `set_custom_preset_()` protected setters. [esphome#13103](https://github.com/esphome/esphome/pull/13103) -- **Event API**: `Event::get_last_event_type()` returns `StringRef` instead of `const char*`. New `has_event()` method added. [#13104](https://github.com/esphome/esphome/pull/13104) +- **Event API**: `Event::get_last_event_type()` returns `StringRef` instead of `const char*`. New `has_event()` method added. [esphome#13104](https://github.com/esphome/esphome/pull/13104) -- **Light API**: `LightEffect::get_name()` returns `StringRef` instead of `const char*`. `LightState::get_effect_name()` returns `StringRef` instead of `std::string`. New `str_equals_case_insensitive(StringRef, StringRef)` helper in `helpers.h`. [#13105](https://github.com/esphome/esphome/pull/13105) +- **Light API**: `LightEffect::get_name()` returns `StringRef` instead of `const char*`. `LightState::get_effect_name()` returns `StringRef` instead of `std::string`. New `str_equals_case_insensitive(StringRef, StringRef)` helper in `helpers.h`. [esphome#13105](https://github.com/esphome/esphome/pull/13105) -- **ESP8266 Serial**: External components using Arduino `Serial` or `Serial1` directly must call `enable_serial()` or `enable_serial1()` from `esphome.components.esp8266.const` in their `to_code()` function. [#12736](https://github.com/esphome/esphome/pull/12736) +- **ESP8266 Serial**: External components using Arduino `Serial` or `Serial1` directly must call `enable_serial()` or `enable_serial1()` from `esphome.components.esp8266.const` in their `to_code()` function. [esphome#12736](https://github.com/esphome/esphome/pull/12736) For detailed migration guides and API documentation, see the [ESPHome Developers Documentation](https://developers.esphome.io/). - +{/* BREAKING_CHANGES_DEVELOPERS_END */} - +{/* markdownlint-disable MD013 */} ## Release 2026.1.1 - January 22 @@ -595,8 +595,6 @@ For detailed migration guides and API documentation, see the [ESPHome Developers ## Full list of changes -The lists below are grouped by tag and may contain duplicates across sections. - ### New Features - [esp32] Add OTA rollback support [esphome#12460](https://github.com/esphome/esphome/pull/12460) by [@swoboda1337](https://github.com/swoboda1337) (new-feature) @@ -608,7 +606,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - [water_heater] (1/4) Implement API/Core/component for new water_heater component [esphome#12498](https://github.com/esphome/esphome/pull/12498) by [@dhoeben](https://github.com/dhoeben) (new-component) (new-feature) - Add Event Component to UART [esphome#11765](https://github.com/esphome/esphome/pull/11765) by [@eoasmxd](https://github.com/eoasmxd) (new-feature) (new-platform) - [bme68x_bsec2] add `id:` to allow extending [esphome#12649](https://github.com/esphome/esphome/pull/12649) by [@ssieb](https://github.com/ssieb) (new-feature) -- Add BTHome advertisements parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) +- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) - [spi] Allow any achievable data rate [esphome#12753](https://github.com/esphome/esphome/pull/12753) by [@tuct](https://github.com/tuct) (new-feature) - [mhz19] Make detection range configurable [esphome#12677](https://github.com/esphome/esphome/pull/12677) by [@jvanderneutstulen](https://github.com/jvanderneutstulen) (new-feature) - [water_heater] (2/4) Implement template for new water_heater component [esphome#12516](https://github.com/esphome/esphome/pull/12516) by [@dhoeben](https://github.com/dhoeben) (new-feature) @@ -642,7 +640,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - Add hmac-sha256 support [esphome#12437](https://github.com/esphome/esphome/pull/12437) by [@dwmw2](https://github.com/dwmw2) (new-component) - [aqi, hm3301, pmsx003] Air Quality Index improvements [esphome#12203](https://github.com/esphome/esphome/pull/12203) by [@jasstrong](https://github.com/jasstrong) (new-component) (new-feature) (breaking-change) - [water_heater] (1/4) Implement API/Core/component for new water_heater component [esphome#12498](https://github.com/esphome/esphome/pull/12498) by [@dhoeben](https://github.com/dhoeben) (new-component) (new-feature) -- Add BTHome advertisements parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) +- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) - [nrf52,zigbee] add support for binary_input [esphome#11535](https://github.com/esphome/esphome/pull/11535) by [@tomaszduda23](https://github.com/tomaszduda23) (new-component) (new-feature) - [rd03d] Add Ai-Thinker RD-03D mmWave radar component [esphome#12764](https://github.com/esphome/esphome/pull/12764) by [@jasstrong](https://github.com/jasstrong) (new-component) (new-feature) (new-platform) - [infrared] Implement experimental API/Core/component for new component/entity type [esphome#13129](https://github.com/esphome/esphome/pull/13129) by [@kbx81](https://github.com/kbx81) (new-component) @@ -651,7 +649,7 @@ The lists below are grouped by tag and may contain duplicates across sections. ### New Platforms - Add Event Component to UART [esphome#11765](https://github.com/esphome/esphome/pull/11765) by [@eoasmxd](https://github.com/eoasmxd) (new-feature) (new-platform) -- Add BTHome advertisements parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) +- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) - [rd03d] Add Ai-Thinker RD-03D mmWave radar component [esphome#12764](https://github.com/esphome/esphome/pull/12764) by [@jasstrong](https://github.com/jasstrong) (new-component) (new-feature) (new-platform) - [aqi] Implement a sensor that computes AQI [esphome#12958](https://github.com/esphome/esphome/pull/12958) by [@jasstrong](https://github.com/jasstrong) (new-feature) (new-platform) @@ -795,7 +793,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - [ethernet_info] Eliminate heap allocations in DNS text sensor [esphome#12756](https://github.com/esphome/esphome/pull/12756) by [@bdraco](https://github.com/bdraco) - [core] Add format_hex_pretty_to buffer helper and reduce code duplication [esphome#12687](https://github.com/esphome/esphome/pull/12687) by [@bdraco](https://github.com/bdraco) - [core] Make LockFreeQueue more widely available [esphome#12766](https://github.com/esphome/esphome/pull/12766) by [@clydebarrow](https://github.com/clydebarrow) -- Add BTHome advertisements parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) +- Add BTHome advertisments parsing to Xiaomi Mijia BLE Sensors [esphome#12635](https://github.com/esphome/esphome/pull/12635) by [@nagyrobi](https://github.com/nagyrobi) (new-component) (new-feature) (new-platform) - [mipi_spi] Use stack buffer for hex formatting in verbose logging [esphome#12778](https://github.com/esphome/esphome/pull/12778) by [@bdraco](https://github.com/bdraco) - Fix display driver fill implementations to honor clipping correctly [esphome#12808](https://github.com/esphome/esphome/pull/12808) by [@stuartparmenter](https://github.com/stuartparmenter) (breaking-change) - [mipi_dsi] Use stack buffer for hex formatting in very verbose logging [esphome#12776](https://github.com/esphome/esphome/pull/12776) by [@bdraco](https://github.com/bdraco) @@ -1054,7 +1052,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - [neopixelbus] Fix ESP8266 compilation by enabling Serial/Serial1 for NeoPixelBus library [esphome#13027](https://github.com/esphome/esphome/pull/13027) by [@bdraco](https://github.com/bdraco) - [async_tcp] Fix build conflicts and use IDF component for ESP32 [esphome#13025](https://github.com/esphome/esphome/pull/13025) by [@dwmw2](https://github.com/dwmw2) - [aqi] Implement a sensor that computes AQI [esphome#12958](https://github.com/esphome/esphome/pull/12958) by [@jasstrong](https://github.com/jasstrong) (new-feature) (new-platform) -- [api] Eliminate std::string from ClientInfo struct [esphome#12566](https://github.com/esphome/esphome/pull/12566) by [@bdraco](https://github.com/bdraco) +- [api] Eliminate `std::string` from ClientInfo struct [esphome#12566](https://github.com/esphome/esphome/pull/12566) by [@bdraco](https://github.com/bdraco) - [text_sensor][text] Add const char* overloads to publish_state to eliminate heap churn [esphome#13030](https://github.com/esphome/esphome/pull/13030) by [@bdraco](https://github.com/bdraco) - [esp32_camera][uart] Add missing wake_loop_threadsafe() preprocessor guards [esphome#13043](https://github.com/esphome/esphome/pull/13043) by [@bdraco](https://github.com/bdraco) - Map `HEAT_COOL` to `MODE_AUTO` in HeatpumpIR component [esphome#12058](https://github.com/esphome/esphome/pull/12058) by [@poolski](https://github.com/poolski) @@ -1089,7 +1087,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - [modbus_controller] Replace format_hex_pretty with stack-based format_hex_pretty_to [esphome#12781](https://github.com/esphome/esphome/pull/12781) by [@bdraco](https://github.com/bdraco) - [logger] Add thread-safe logging for host platform [esphome#13010](https://github.com/esphome/esphome/pull/13010) by [@bdraco](https://github.com/bdraco) - [wifi] Add basic post-connect roaming support for stationary devices [esphome#12809](https://github.com/esphome/esphome/pull/12809) by [@bdraco](https://github.com/bdraco) (new-feature) -- [debug] Use stack buffers with buf_append helper instead of std::string [esphome#13020](https://github.com/esphome/esphome/pull/13020) by [@bdraco](https://github.com/bdraco) +- [debug] Use stack buffers with buf_append helper instead of `std::string` [esphome#13020](https://github.com/esphome/esphome/pull/13020) by [@bdraco](https://github.com/bdraco) - [abbwelcome] Use stack-based formatting to eliminate heap allocations [esphome#12799](https://github.com/esphome/esphome/pull/12799) by [@bdraco](https://github.com/bdraco) - [web_server][captive_portal] Add Brotli compression (saves ~11KB flash when using local) [esphome#12959](https://github.com/esphome/esphome/pull/12959) by [@bdraco](https://github.com/bdraco) (new-feature) - Update webserver local assets to 20260107-214817 [esphome#13064](https://github.com/esphome/esphome/pull/13064) by [@esphomebot](https://github.com/esphomebot) @@ -1181,7 +1179,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - [bh1750] Eliminate heap allocations by replacing callbacks with state machine [esphome#11950](https://github.com/esphome/esphome/pull/11950) by [@bdraco](https://github.com/bdraco) - [api] Reduce batch RAM usage by 33% via switch dispatch [esphome#13199](https://github.com/esphome/esphome/pull/13199) by [@bdraco](https://github.com/bdraco) - [usb_cdc_acm] move esp32 implementation to new file [esphome#12824](https://github.com/esphome/esphome/pull/12824) by [@tomaszduda23](https://github.com/tomaszduda23) -- [scheduler] Eliminate heap allocations for std::string names and add uint32_t ID API [esphome#13200](https://github.com/esphome/esphome/pull/13200) by [@bdraco](https://github.com/bdraco) +- [scheduler] Eliminate heap allocations for `std::string` names and add uint32_t ID API [esphome#13200](https://github.com/esphome/esphome/pull/13200) by [@bdraco](https://github.com/bdraco) - [ethernet_info] Convert to event-driven IP state listener pattern [esphome#13203](https://github.com/esphome/esphome/pull/13203) by [@bdraco](https://github.com/bdraco) - [web_server] Store method/domain comparison strings in flash on ESP8266 [esphome#13205](https://github.com/esphome/esphome/pull/13205) by [@bdraco](https://github.com/bdraco) - [image] Correctly handle dimensions in physical units [esphome#13209](https://github.com/esphome/esphome/pull/13209) by [@clydebarrow](https://github.com/clydebarrow) @@ -1192,6 +1190,19 @@ The lists below are grouped by tag and may contain duplicates across sections. - [safe_mode] Detect bootloader rollback support at runtime [esphome#13230](https://github.com/esphome/esphome/pull/13230) by [@swoboda1337](https://github.com/swoboda1337) - [qr_code] Allocate and free memory for QR code buffer [esphome#13161](https://github.com/esphome/esphome/pull/13161) by [@rootnegativ1](https://github.com/rootnegativ1) - [web_server][captive_portal] Change default compression from Brotli to gzip [esphome#13246](https://github.com/esphome/esphome/pull/13246) by [@bdraco](https://github.com/bdraco) +- [sprinkler] Fix scheduler deprecation warnings and heap churn with FixedVector [esphome#13251](https://github.com/esphome/esphome/pull/13251) by [@bdraco](https://github.com/bdraco) +- [dallas_temp] Use const char* for set_timeout to fix deprecation warning and heap churn [esphome#13250](https://github.com/esphome/esphome/pull/13250) by [@bdraco](https://github.com/bdraco) +- [api] Fix clock conflicts when multiple clients connected to homeassistant time [esphome#13253](https://github.com/esphome/esphome/pull/13253) by [@bdraco](https://github.com/bdraco) +- [esp32_ble_client] Reduce GATT data event logging to prevent firmware update failures [esphome#13252](https://github.com/esphome/esphome/pull/13252) by [@bdraco](https://github.com/bdraco) +- [ntc, resistance] change log level to verbose [esphome#13268](https://github.com/esphome/esphome/pull/13268) by [@mrtoy-me](https://github.com/mrtoy-me) +- [hmac_sha256] Replace unsafe sprintf with format_hex_to [esphome#13290](https://github.com/esphome/esphome/pull/13290) by [@bdraco](https://github.com/bdraco) +- [hub75] Bump esp-hub75 version to 0.3.0 [esphome#13243](https://github.com/esphome/esphome/pull/13243) by [@stuartparmenter](https://github.com/stuartparmenter) (breaking-change) +- [http_request] Unable to handle chunked responses [esphome#7884](https://github.com/esphome/esphome/pull/7884) by [@HLFCode](https://github.com/HLFCode) +- [network] Fix IPAddress::str_to() to lowercase IPv6 hex digits [esphome#13325](https://github.com/esphome/esphome/pull/13325) by [@bdraco](https://github.com/bdraco) +- [api] Fix truncation of Home Assistant attributes longer than 255 characters [esphome#13348](https://github.com/esphome/esphome/pull/13348) by [@bdraco](https://github.com/bdraco) +- [core] Fix state leakage and module caching when processing multiple configurations [esphome#13368](https://github.com/esphome/esphome/pull/13368) by [@swoboda1337](https://github.com/swoboda1337) +- [x9c] Fix potentiometer unable to decrement [esphome#13382](https://github.com/esphome/esphome/pull/13382) by [@swoboda1337](https://github.com/swoboda1337) +- [wifi_info] Fix missing state when both IP+DNS or SSID+BSSID configure [esphome#13385](https://github.com/esphome/esphome/pull/13385) by [@bdraco](https://github.com/bdraco) @@ -1237,8 +1248,4 @@ The lists below are grouped by tag and may contain duplicates across sections. - - -## All Changelogs - -{{< changelogs >}} +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/2026.2.0.md b/src/content/docs/changelog/2026.2.0.mdx similarity index 99% rename from content/changelog/2026.2.0.md rename to src/content/docs/changelog/2026.2.0.mdx index 681fc12e7d..de15492b08 100644 --- a/content/changelog/2026.2.0.md +++ b/src/content/docs/changelog/2026.2.0.mdx @@ -1,20 +1,21 @@ --- description: "Changelog for ESPHome 2026.2.0." title: "ESPHome 2026.2.0 - February 2026" -params: - seo: - description: Changelog for ESPHome 2026.2.0. - image: /changelog/images/changelog-2026.2.0.png +pagefind: false +slug: "changelog/2026.2.0" --- -{{< imgtable >}} -"BMP581","components/sensor/bmp581","bmp581.jpg" -"SY6970","components/sensor/sy6970","sy6970.jpg" -"CH423","components/ch423","ch423.png" -"DLMS Meter","components/sensor/dlms_meter","dlms_meter.jpg" -{{< /imgtable >}} +import ImgTable from "@components/ImgTable.astro"; + + + +{/* markdownlint-disable MD013 */} - ## Full list of changes The lists below are grouped by tag and may contain duplicates across sections. @@ -490,7 +491,7 @@ The lists below are grouped by tag and may contain duplicates across sections. - Bump actions/checkout from 6.0.1 to 6.0.2 [esphome#13452](https://github.com/esphome/esphome/pull/13452) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump actions/setup-python from 6.1.0 to 6.2.0 [esphome#13454](https://github.com/esphome/esphome/pull/13454) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump actions/setup-python from 6.1.0 to 6.2.0 in /.github/actions/restore-python [esphome#13453](https://github.com/esphome/esphome/pull/13453) by [@dependabot[bot]](https://github.com/apps/dependabot) -- Update wheel requirement from <0.46,>=0.43 to >=0.43,<0.47 [esphome#13451](https://github.com/esphome/esphome/pull/13451) by [@dependabot[bot]](https://github.com/apps/dependabot) +- Update wheel requirement from \<0.46,\>=0.43 to \>=0.43,\<0.47 [esphome#13451](https://github.com/esphome/esphome/pull/13451) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump ruff from 0.14.13 to 0.14.14 [esphome#13487](https://github.com/esphome/esphome/pull/13487) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump github/codeql-action from 4.31.10 to 4.31.11 [esphome#13488](https://github.com/esphome/esphome/pull/13488) by [@dependabot[bot]](https://github.com/apps/dependabot) - Bump github/codeql-action from 4.31.11 to 4.32.0 [esphome#13559](https://github.com/esphome/esphome/pull/13559) by [@dependabot[bot]](https://github.com/apps/dependabot) @@ -509,8 +510,4 @@ The lists below are grouped by tag and may contain duplicates across sections. - - -## All Changelogs - -{{< changelogs >}} +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/images/changelog-1.10.0.png b/src/content/docs/changelog/images/changelog-1.10.0.png similarity index 100% rename from content/changelog/images/changelog-1.10.0.png rename to src/content/docs/changelog/images/changelog-1.10.0.png diff --git a/content/changelog/images/changelog-1.11.0.png b/src/content/docs/changelog/images/changelog-1.11.0.png similarity index 100% rename from content/changelog/images/changelog-1.11.0.png rename to src/content/docs/changelog/images/changelog-1.11.0.png diff --git a/content/changelog/images/changelog-1.12.0.png b/src/content/docs/changelog/images/changelog-1.12.0.png similarity index 100% rename from content/changelog/images/changelog-1.12.0.png rename to src/content/docs/changelog/images/changelog-1.12.0.png diff --git a/content/changelog/images/changelog-1.13.0.png b/src/content/docs/changelog/images/changelog-1.13.0.png similarity index 100% rename from content/changelog/images/changelog-1.13.0.png rename to src/content/docs/changelog/images/changelog-1.13.0.png diff --git a/content/changelog/images/changelog-1.14.0.png b/src/content/docs/changelog/images/changelog-1.14.0.png similarity index 100% rename from content/changelog/images/changelog-1.14.0.png rename to src/content/docs/changelog/images/changelog-1.14.0.png diff --git a/content/changelog/images/changelog-1.15.0.png b/src/content/docs/changelog/images/changelog-1.15.0.png similarity index 100% rename from content/changelog/images/changelog-1.15.0.png rename to src/content/docs/changelog/images/changelog-1.15.0.png diff --git a/content/changelog/images/changelog-1.16.0.png b/src/content/docs/changelog/images/changelog-1.16.0.png similarity index 100% rename from content/changelog/images/changelog-1.16.0.png rename to src/content/docs/changelog/images/changelog-1.16.0.png diff --git a/content/changelog/images/changelog-1.17.0.png b/src/content/docs/changelog/images/changelog-1.17.0.png similarity index 100% rename from content/changelog/images/changelog-1.17.0.png rename to src/content/docs/changelog/images/changelog-1.17.0.png diff --git a/content/changelog/images/changelog-1.18.0.png b/src/content/docs/changelog/images/changelog-1.18.0.png similarity index 100% rename from content/changelog/images/changelog-1.18.0.png rename to src/content/docs/changelog/images/changelog-1.18.0.png diff --git a/content/changelog/images/changelog-1.19.0.png b/src/content/docs/changelog/images/changelog-1.19.0.png similarity index 100% rename from content/changelog/images/changelog-1.19.0.png rename to src/content/docs/changelog/images/changelog-1.19.0.png diff --git a/content/changelog/images/changelog-1.20.0.png b/src/content/docs/changelog/images/changelog-1.20.0.png similarity index 100% rename from content/changelog/images/changelog-1.20.0.png rename to src/content/docs/changelog/images/changelog-1.20.0.png diff --git a/content/changelog/images/changelog-1.9.0.png b/src/content/docs/changelog/images/changelog-1.9.0.png similarity index 100% rename from content/changelog/images/changelog-1.9.0.png rename to src/content/docs/changelog/images/changelog-1.9.0.png diff --git a/content/changelog/images/changelog-2021.10.0.png b/src/content/docs/changelog/images/changelog-2021.10.0.png similarity index 100% rename from content/changelog/images/changelog-2021.10.0.png rename to src/content/docs/changelog/images/changelog-2021.10.0.png diff --git a/content/changelog/images/changelog-2021.11.0.png b/src/content/docs/changelog/images/changelog-2021.11.0.png similarity index 100% rename from content/changelog/images/changelog-2021.11.0.png rename to src/content/docs/changelog/images/changelog-2021.11.0.png diff --git a/content/changelog/images/changelog-2021.12.0.png b/src/content/docs/changelog/images/changelog-2021.12.0.png similarity index 100% rename from content/changelog/images/changelog-2021.12.0.png rename to src/content/docs/changelog/images/changelog-2021.12.0.png diff --git a/content/changelog/images/changelog-2021.8.0.png b/src/content/docs/changelog/images/changelog-2021.8.0.png similarity index 100% rename from content/changelog/images/changelog-2021.8.0.png rename to src/content/docs/changelog/images/changelog-2021.8.0.png diff --git a/content/changelog/images/changelog-2021.9.0.png b/src/content/docs/changelog/images/changelog-2021.9.0.png similarity index 100% rename from content/changelog/images/changelog-2021.9.0.png rename to src/content/docs/changelog/images/changelog-2021.9.0.png diff --git a/content/changelog/images/changelog-2022.1.0.png b/src/content/docs/changelog/images/changelog-2022.1.0.png similarity index 100% rename from content/changelog/images/changelog-2022.1.0.png rename to src/content/docs/changelog/images/changelog-2022.1.0.png diff --git a/content/changelog/images/changelog-2022.10.0.png b/src/content/docs/changelog/images/changelog-2022.10.0.png similarity index 100% rename from content/changelog/images/changelog-2022.10.0.png rename to src/content/docs/changelog/images/changelog-2022.10.0.png diff --git a/content/changelog/images/changelog-2022.11.0.png b/src/content/docs/changelog/images/changelog-2022.11.0.png similarity index 100% rename from content/changelog/images/changelog-2022.11.0.png rename to src/content/docs/changelog/images/changelog-2022.11.0.png diff --git a/content/changelog/images/changelog-2022.12.0.png b/src/content/docs/changelog/images/changelog-2022.12.0.png similarity index 100% rename from content/changelog/images/changelog-2022.12.0.png rename to src/content/docs/changelog/images/changelog-2022.12.0.png diff --git a/content/changelog/images/changelog-2022.2.0.png b/src/content/docs/changelog/images/changelog-2022.2.0.png similarity index 100% rename from content/changelog/images/changelog-2022.2.0.png rename to src/content/docs/changelog/images/changelog-2022.2.0.png diff --git a/content/changelog/images/changelog-2022.3.0.png b/src/content/docs/changelog/images/changelog-2022.3.0.png similarity index 100% rename from content/changelog/images/changelog-2022.3.0.png rename to src/content/docs/changelog/images/changelog-2022.3.0.png diff --git a/content/changelog/images/changelog-2022.4.0.png b/src/content/docs/changelog/images/changelog-2022.4.0.png similarity index 100% rename from content/changelog/images/changelog-2022.4.0.png rename to src/content/docs/changelog/images/changelog-2022.4.0.png diff --git a/content/changelog/images/changelog-2022.5.0.png b/src/content/docs/changelog/images/changelog-2022.5.0.png similarity index 100% rename from content/changelog/images/changelog-2022.5.0.png rename to src/content/docs/changelog/images/changelog-2022.5.0.png diff --git a/content/changelog/images/changelog-2022.6.0.png b/src/content/docs/changelog/images/changelog-2022.6.0.png similarity index 100% rename from content/changelog/images/changelog-2022.6.0.png rename to src/content/docs/changelog/images/changelog-2022.6.0.png diff --git a/content/changelog/images/changelog-2022.8.0.png b/src/content/docs/changelog/images/changelog-2022.8.0.png similarity index 100% rename from content/changelog/images/changelog-2022.8.0.png rename to src/content/docs/changelog/images/changelog-2022.8.0.png diff --git a/content/changelog/images/changelog-2022.9.0.png b/src/content/docs/changelog/images/changelog-2022.9.0.png similarity index 100% rename from content/changelog/images/changelog-2022.9.0.png rename to src/content/docs/changelog/images/changelog-2022.9.0.png diff --git a/content/changelog/images/changelog-2023.10.0.png b/src/content/docs/changelog/images/changelog-2023.10.0.png similarity index 100% rename from content/changelog/images/changelog-2023.10.0.png rename to src/content/docs/changelog/images/changelog-2023.10.0.png diff --git a/content/changelog/images/changelog-2023.11.0.png b/src/content/docs/changelog/images/changelog-2023.11.0.png similarity index 100% rename from content/changelog/images/changelog-2023.11.0.png rename to src/content/docs/changelog/images/changelog-2023.11.0.png diff --git a/content/changelog/images/changelog-2023.12.0.png b/src/content/docs/changelog/images/changelog-2023.12.0.png similarity index 100% rename from content/changelog/images/changelog-2023.12.0.png rename to src/content/docs/changelog/images/changelog-2023.12.0.png diff --git a/content/changelog/images/changelog-2023.2.0.png b/src/content/docs/changelog/images/changelog-2023.2.0.png similarity index 100% rename from content/changelog/images/changelog-2023.2.0.png rename to src/content/docs/changelog/images/changelog-2023.2.0.png diff --git a/content/changelog/images/changelog-2023.3.0.png b/src/content/docs/changelog/images/changelog-2023.3.0.png similarity index 100% rename from content/changelog/images/changelog-2023.3.0.png rename to src/content/docs/changelog/images/changelog-2023.3.0.png diff --git a/content/changelog/images/changelog-2023.4.0.png b/src/content/docs/changelog/images/changelog-2023.4.0.png similarity index 100% rename from content/changelog/images/changelog-2023.4.0.png rename to src/content/docs/changelog/images/changelog-2023.4.0.png diff --git a/content/changelog/images/changelog-2023.5.0.png b/src/content/docs/changelog/images/changelog-2023.5.0.png similarity index 100% rename from content/changelog/images/changelog-2023.5.0.png rename to src/content/docs/changelog/images/changelog-2023.5.0.png diff --git a/content/changelog/images/changelog-2023.6.0.png b/src/content/docs/changelog/images/changelog-2023.6.0.png similarity index 100% rename from content/changelog/images/changelog-2023.6.0.png rename to src/content/docs/changelog/images/changelog-2023.6.0.png diff --git a/content/changelog/images/changelog-2023.7.0.png b/src/content/docs/changelog/images/changelog-2023.7.0.png similarity index 100% rename from content/changelog/images/changelog-2023.7.0.png rename to src/content/docs/changelog/images/changelog-2023.7.0.png diff --git a/content/changelog/images/changelog-2023.8.0.png b/src/content/docs/changelog/images/changelog-2023.8.0.png similarity index 100% rename from content/changelog/images/changelog-2023.8.0.png rename to src/content/docs/changelog/images/changelog-2023.8.0.png diff --git a/content/changelog/images/changelog-2023.9.0.png b/src/content/docs/changelog/images/changelog-2023.9.0.png similarity index 100% rename from content/changelog/images/changelog-2023.9.0.png rename to src/content/docs/changelog/images/changelog-2023.9.0.png diff --git a/content/changelog/images/changelog-2024.10.0.png b/src/content/docs/changelog/images/changelog-2024.10.0.png similarity index 100% rename from content/changelog/images/changelog-2024.10.0.png rename to src/content/docs/changelog/images/changelog-2024.10.0.png diff --git a/content/changelog/images/changelog-2024.11.0.png b/src/content/docs/changelog/images/changelog-2024.11.0.png similarity index 100% rename from content/changelog/images/changelog-2024.11.0.png rename to src/content/docs/changelog/images/changelog-2024.11.0.png diff --git a/content/changelog/images/changelog-2024.12.0.png b/src/content/docs/changelog/images/changelog-2024.12.0.png similarity index 100% rename from content/changelog/images/changelog-2024.12.0.png rename to src/content/docs/changelog/images/changelog-2024.12.0.png diff --git a/content/changelog/images/changelog-2024.2.0.png b/src/content/docs/changelog/images/changelog-2024.2.0.png similarity index 100% rename from content/changelog/images/changelog-2024.2.0.png rename to src/content/docs/changelog/images/changelog-2024.2.0.png diff --git a/content/changelog/images/changelog-2024.3.0.png b/src/content/docs/changelog/images/changelog-2024.3.0.png similarity index 100% rename from content/changelog/images/changelog-2024.3.0.png rename to src/content/docs/changelog/images/changelog-2024.3.0.png diff --git a/content/changelog/images/changelog-2024.4.0.png b/src/content/docs/changelog/images/changelog-2024.4.0.png similarity index 100% rename from content/changelog/images/changelog-2024.4.0.png rename to src/content/docs/changelog/images/changelog-2024.4.0.png diff --git a/content/changelog/images/changelog-2024.5.0.png b/src/content/docs/changelog/images/changelog-2024.5.0.png similarity index 100% rename from content/changelog/images/changelog-2024.5.0.png rename to src/content/docs/changelog/images/changelog-2024.5.0.png diff --git a/content/changelog/images/changelog-2024.6.0.png b/src/content/docs/changelog/images/changelog-2024.6.0.png similarity index 100% rename from content/changelog/images/changelog-2024.6.0.png rename to src/content/docs/changelog/images/changelog-2024.6.0.png diff --git a/content/changelog/images/changelog-2024.8.0.png b/src/content/docs/changelog/images/changelog-2024.8.0.png similarity index 100% rename from content/changelog/images/changelog-2024.8.0.png rename to src/content/docs/changelog/images/changelog-2024.8.0.png diff --git a/content/changelog/images/changelog-2024.9.0.png b/src/content/docs/changelog/images/changelog-2024.9.0.png similarity index 100% rename from content/changelog/images/changelog-2024.9.0.png rename to src/content/docs/changelog/images/changelog-2024.9.0.png diff --git a/content/changelog/images/changelog-2025.10.0.png b/src/content/docs/changelog/images/changelog-2025.10.0.png similarity index 100% rename from content/changelog/images/changelog-2025.10.0.png rename to src/content/docs/changelog/images/changelog-2025.10.0.png diff --git a/content/changelog/images/changelog-2025.11.0.png b/src/content/docs/changelog/images/changelog-2025.11.0.png similarity index 100% rename from content/changelog/images/changelog-2025.11.0.png rename to src/content/docs/changelog/images/changelog-2025.11.0.png diff --git a/content/changelog/images/changelog-2025.2.0.png b/src/content/docs/changelog/images/changelog-2025.2.0.png similarity index 100% rename from content/changelog/images/changelog-2025.2.0.png rename to src/content/docs/changelog/images/changelog-2025.2.0.png diff --git a/content/changelog/images/changelog-2025.3.0.png b/src/content/docs/changelog/images/changelog-2025.3.0.png similarity index 100% rename from content/changelog/images/changelog-2025.3.0.png rename to src/content/docs/changelog/images/changelog-2025.3.0.png diff --git a/content/changelog/images/changelog-2025.4.0.png b/src/content/docs/changelog/images/changelog-2025.4.0.png similarity index 100% rename from content/changelog/images/changelog-2025.4.0.png rename to src/content/docs/changelog/images/changelog-2025.4.0.png diff --git a/content/changelog/images/changelog-2025.5.0.png b/src/content/docs/changelog/images/changelog-2025.5.0.png similarity index 100% rename from content/changelog/images/changelog-2025.5.0.png rename to src/content/docs/changelog/images/changelog-2025.5.0.png diff --git a/content/changelog/images/changelog-2025.6.0.png b/src/content/docs/changelog/images/changelog-2025.6.0.png similarity index 100% rename from content/changelog/images/changelog-2025.6.0.png rename to src/content/docs/changelog/images/changelog-2025.6.0.png diff --git a/content/changelog/images/changelog-2025.7.0.png b/src/content/docs/changelog/images/changelog-2025.7.0.png similarity index 100% rename from content/changelog/images/changelog-2025.7.0.png rename to src/content/docs/changelog/images/changelog-2025.7.0.png diff --git a/content/changelog/images/changelog-2025.8.0.png b/src/content/docs/changelog/images/changelog-2025.8.0.png similarity index 100% rename from content/changelog/images/changelog-2025.8.0.png rename to src/content/docs/changelog/images/changelog-2025.8.0.png diff --git a/content/changelog/images/changelog-2025.9.0.png b/src/content/docs/changelog/images/changelog-2025.9.0.png similarity index 100% rename from content/changelog/images/changelog-2025.9.0.png rename to src/content/docs/changelog/images/changelog-2025.9.0.png diff --git a/content/changelog/images/configuration-url.png b/src/content/docs/changelog/images/configuration-url.png similarity index 100% rename from content/changelog/images/configuration-url.png rename to src/content/docs/changelog/images/configuration-url.png diff --git a/content/changelog/images/creation.svg b/src/content/docs/changelog/images/creation.svg similarity index 100% rename from content/changelog/images/creation.svg rename to src/content/docs/changelog/images/creation.svg diff --git a/content/changelog/images/github-1000-stars.png b/src/content/docs/changelog/images/github-1000-stars.png similarity index 100% rename from content/changelog/images/github-1000-stars.png rename to src/content/docs/changelog/images/github-1000-stars.png diff --git a/content/changelog/images/live-validation.png b/src/content/docs/changelog/images/live-validation.png similarity index 100% rename from content/changelog/images/live-validation.png rename to src/content/docs/changelog/images/live-validation.png diff --git a/content/changelog/images/mcp23017.svg b/src/content/docs/changelog/images/mcp23017.svg similarity index 100% rename from content/changelog/images/mcp23017.svg rename to src/content/docs/changelog/images/mcp23017.svg diff --git a/content/changelog/images/online-indicator.png b/src/content/docs/changelog/images/online-indicator.png similarity index 100% rename from content/changelog/images/online-indicator.png rename to src/content/docs/changelog/images/online-indicator.png diff --git a/content/changelog/images/tracer-an.jpg b/src/content/docs/changelog/images/tracer-an.jpg similarity index 100% rename from content/changelog/images/tracer-an.jpg rename to src/content/docs/changelog/images/tracer-an.jpg diff --git a/content/changelog/images/visual-studio-code.svg b/src/content/docs/changelog/images/visual-studio-code.svg similarity index 100% rename from content/changelog/images/visual-studio-code.svg rename to src/content/docs/changelog/images/visual-studio-code.svg diff --git a/content/changelog/images/vscode-validation.png b/src/content/docs/changelog/images/vscode-validation.png similarity index 100% rename from content/changelog/images/vscode-validation.png rename to src/content/docs/changelog/images/vscode-validation.png diff --git a/content/changelog/images/xiaomi_miscale2.jpg b/src/content/docs/changelog/images/xiaomi_miscale2.jpg similarity index 100% rename from content/changelog/images/xiaomi_miscale2.jpg rename to src/content/docs/changelog/images/xiaomi_miscale2.jpg diff --git a/src/content/docs/changelog/index.mdx b/src/content/docs/changelog/index.mdx new file mode 100644 index 0000000000..f35a509bb8 --- /dev/null +++ b/src/content/docs/changelog/index.mdx @@ -0,0 +1,7 @@ +--- +description: "ESPHome Changelog" +title: "Changelog" +pagefind: false +--- + +Redirecting to the latest release... diff --git a/src/content/docs/changelog/v1.10.0.mdx b/src/content/docs/changelog/v1.10.0.mdx new file mode 100644 index 0000000000..94fc6e7d0b --- /dev/null +++ b/src/content/docs/changelog/v1.10.0.mdx @@ -0,0 +1,241 @@ +--- +description: "Changelog for esphomelib version 1.10.0." +title: "Changelog - Version 1.10.0" +pagefind: false +slug: "changelog/v1.10.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + + +## Native API + +This release brings with it lots of goodies, but most important is the [native API](/components/api/). +MQTT has been the only way this project communicated with Home Assistant for a while now. And MQTT is a great protocol +to get started, but it always had problems: + +- Another service to install - Users would need to install an MQTT broker in order to get started. +- MQTT Discovery - Home Assistant's MQTT discovery has been great, but always had problems like retained messages etc. +- Inefficient - A typical MQTT message for sending a binary sensor state is about 70 bytes long, and the MQTT library + we used was quite inefficient with runtime memory allocation too. + +So I decided to do something against that: ESPHome now features a native protocol (based on TCP+protocol buffers) +that addresses these issues and has a +[component on the Home Assistant](https://rc--home-assistant-docs.netlify.com/components/esphome/) +side too. + +**Does this mean MQTT will be removed?** + +No! MQTT is an awesome protocol with easy integration for many tools like Node-RED and custom MQTT clients. +This native API is only for replacing communications with Home Assistant, so *if* anything gets removed it's +MQTT auto discovery for Home Assistant. Of course both can be used together at the same time too. + +**Should I switch to the native API immediately?** + +You definitely can, but a word of warning first: The MQTT implementation has seen tons of fixes for small quirks +in how the ESP SDK works. From my own testing, the native API seems to be quite stable - but I'm sure it'll take a bit +of time to find+fix some final bugs. + +**How do I migrate from MQTT?** + +First, make sure you run at least Home Assistant 0.85.0 (currently a +[beta release](https://www.home-assistant.io/docs/installation/updating/#run-the-beta-version)). +Then, go through the migration guide here (removed). + +## Python 3 Compatibility + +PlatformIO has finally implemented [python 3 support](https://github.com/platformio/platformio-core/issues/895) +after some quick changes, ESPHome is now also compatible with python 3.5+. So with this new release +you can try ESPHome with Python 3 already. Just make sure to install the development version of platformio first: + +```bash +pip3 install -U https://github.com/platformio/platformio-core/archive/develop.zip +``` + +I don't particularly like python 2, and in a year's time support for it will officially be ended. So the plan for +ESPHome is to drop python 2 as soon as possible. Once platformio releases version 4.0 (with python 3 support), I +will go through and check everything still works. Maybe ESPHome will support python 2 for 1 or 2 releases after that +but really I want to drop support for python 2 as soon as possible. + +## Dashboard & Hass.io Addon Updates + +The dashboard and Hass.io addon have seen a lot of ❤️ in this release: The dashboard has seen tons of small +changes to make the user experience better and the Hass.io addon has been completely re-written with the +[Hass.io Community Addon Images](https://github.com/hassio-addons) as the base. + +- The dashboard now features a built-in YAML editor. +- Configuration wizard now shows a list of boards directly, so you just have to choose them from a dropdown. +- Hass.io Addon: You can log in using your Home Assistant credentials now. +- And many more changes (colored logs, auto-scroll, node status, update notifications, ...) + +## Rename: `esphome{lib,yaml}` -> ESPHome + +The name esphomelib and esphomeyaml were too technical, and this project has changed a lot since the first +published release (the yaml part didn't even exist back then). So ... the project is being re-branded slightly: + +- esphomeyaml -> ESPHome +- esphomelib -> ESPHome Core +- esphomedocs -> ESPHome Docs + +As you see, the yaml project is now getting the "fancy" name, because that's by far the best way to use this framework. +As part of this change, using the *core* framework directly from code (without YAML) is being deprecated, the API docs +have long been inaccurate now and users should really switch over to ESPHome through YAML + +Of course that doesn't mean you won't be able to write custom code. In fact, this release also contains lots of +new guides and changes to make creating custom components much easier. The goal is to have a project where users +can use YAML for the boring boilerplate code but can completely customize everything with custom components. + +This migration is of course huge - almost every single file in the code+docs base has `esphome{lib,yaml}` somewhere +in it, so it will take time until the next release for this to be finished. + +## Breaking Changes + +- Previously, esphomelib would by default only publish every 15th sensor value in order to provide averaged values. + However, that often confused users and I now decided to remove it **and** set the default update interval of + all components to `60s` instead of the previous `15s`. You can get back the old behavior by setting + +```yaml + sensor: + - platform: ... # enter platform here + # other settings + update_interval: 15s + filters: + - sliding_window_moving_average: {} +``` + +- The fastled effects have been renamed to `addressable_` for the new + [Neopixelbus](/components/light/neopixelbus/) integration. See the validation error message + for more info. + +## Other notable changes + +- You can now configured multiple WiFi networks to connect to. The best one will be chosen automatically. + This is along with a *complete* rewrite of the WiFi component which now interacts directly with the ESP SDK. + ([Connecting to Multiple Networks](/components/wifi#wifi-networks)) + +- GPIO Switches have a new option `restore_mode` to configure how their values should be restored on boot. + ([Gpio](/components/switch/gpio/)) + +- Added [Substitutions](/components/substitutions/) to reduce repeating across configs. +- Validation error messages are now displayed even better. Now all errors are shown with the exact context + where the error appeared. Try it, it's so much better. Next step will be to upgrade to a better YAML reader + to provide better error messages when the YAML syntax is invalid. + +- Added a bunch of guides (and helpers) for creating custom components. Also new: `esphomeyaml.libraries`, + `esphomeyaml.includes` and `esphomeyaml.platformio_options` ([Esphome](/components/esphome/)) + +- Saved a lot of flash space on ESP8266 boards. Previously, platformio would allocate about 1/4 of flash for SPIFFS, + but esphomelib doesn't use that so now you have that as extra storage. Thanks `@brandond [http://github.com/brandond](http://github.com/brandond)` + +- You can now use Home Assistant to get time in ESPHome, so no more need for SNTP. See [Time](/components/time/). + +## Release 1.10.1 - January 13 + +- docs: Fix substitutions example & api intro text [esphome-docs#117](https://github.com/esphome/esphome-docs/pull/117) by [@thubot](https://github.com/thubot) +- lib: Fix while action not resetting is_running [esphome-core#378](https://github.com/esphome/esphome-core/pull/378) +- lib: Fix remote transmitter ESP32 repeat wait [esphome-core#376](https://github.com/esphome/esphome-core/pull/376) +- lib: Fix addressable lights [esphome-core#375](https://github.com/esphome/esphome-core/pull/375) +- yaml: Fix ESP32 not decoding stacktrace on broken PC [esphome#330](https://github.com/esphome/esphome/pull/330) +- docs: Fixed missing link to BME cookbook [esphome-docs#120](https://github.com/esphome/esphome-docs/pull/120) by [@Mynasru](https://github.com/Mynasru) +- lib: Fix addressable flicker effect [esphome-core#383](https://github.com/esphome/esphome-core/pull/383) +- lib: NeoPixelBus: fix handling of white color component [esphome-core#384](https://github.com/esphome/esphome-core/pull/384) by [@badbadc0ffee](https://github.com/badbadc0ffee) +- lib: Fix trigger not being optional [esphome-core#381](https://github.com/esphome/esphome-core/pull/381) +- docs: Add WiFi fast connect [esphome-docs#121](https://github.com/esphome/esphome-docs/pull/121) +- yaml: Fix AsyncTCP compilation on ESP32 with Arduino breaking change [esphome#334](https://github.com/esphome/esphome/pull/334) +- yaml: Fix show logs with MQTT and dashboard [esphome#332](https://github.com/esphome/esphome/pull/332) +- lib: Add WiFi fast connect mode [esphome-core#385](https://github.com/esphome/esphome-core/pull/385) +- lib: Fix API Server has deep sleep [esphome-core#386](https://github.com/esphome/esphome-core/pull/386) +- yaml: Introduce wifi fast connect mode [esphome#333](https://github.com/esphome/esphome/pull/333) +- lib: Fix GPIO Switch not handling inverted [esphome-core#387](https://github.com/esphome/esphome-core/pull/387) +- lib: Expose NeoPixelBus Controller [esphome-core#388](https://github.com/esphome/esphome-core/pull/388) +- yaml: Pin platformio platforms [esphome#335](https://github.com/esphome/esphome/pull/335) +- lib: Fix ble tracker compile error [esphome-core#390](https://github.com/esphome/esphome-core/pull/390) + +## All changes + +- docs: CSE7766 Update Interval [esphome-docs#91](https://github.com/esphome/esphome-docs/pull/91) +- docs: add baud_rate; typo on sensor type [esphome-docs#90](https://github.com/esphome/esphome-docs/pull/90) by [@drewp](https://github.com/drewp) +- docs: Fix docs for LCD display strftime [esphome-docs#95](https://github.com/esphome/esphome-docs/pull/95) +- lib: Make CSE7766 a polling sensor [esphome-core#305](https://github.com/esphome/esphome-core/pull/305) +- lib: Supply clang-format file for contributors [esphome-core#290](https://github.com/esphome/esphome-core/pull/290) +- yaml: Time SNTP validate server format [esphome#254](https://github.com/esphome/esphome/pull/254) +- yaml: Fix GPIO input schema validator [esphome#253](https://github.com/esphome/esphome/pull/253) +- lib: Implement custom sensor platform [esphome-core#274](https://github.com/esphome/esphome-core/pull/274) +- lib: Only compile code stuff if necessary [esphome-core#309](https://github.com/esphome/esphome-core/pull/309) +- yaml: [Huge] Util Refactor, Dashboard Improvements, Hass.io Auth API, Better Validation Errors, Conditions, Custom Platforms, Substitutions [esphome#234](https://github.com/esphome/esphome/pull/234) +- docs: Fix copy paste error [esphome-docs#100](https://github.com/esphome/esphome-docs/pull/100) by [@oscar-b](https://github.com/oscar-b) +- lib: Fix large JSON payloads being cut off [esphome-core#323](https://github.com/esphome/esphome-core/pull/323) by [@quazzie](https://github.com/quazzie) +- docs: Add Wikipedia link to tz database zones list [esphome-docs#105](https://github.com/esphome/esphome-docs/pull/105) by [@apeeters](https://github.com/apeeters) +- docs: Add pins for Shelly 2 [esphome-docs#103](https://github.com/esphome/esphome-docs/pull/103) by [@oscar-b](https://github.com/oscar-b) +- lib: Native Esphomelib API [esphome-core#322](https://github.com/esphome/esphome-core/pull/322) +- yaml: Add native ESPHome API [esphome#265](https://github.com/esphome/esphome/pull/265) +- lib: Add support for MAX31855 sensor [esphome-core#310](https://github.com/esphome/esphome-core/pull/310) by [@sherbang](https://github.com/sherbang) +- docs: Documentation for MAX31855 sensor [esphome-docs#97](https://github.com/esphome/esphome-docs/pull/97) by [@sherbang](https://github.com/sherbang) +- lib: Fix typo in Output Switch [esphome-core#307](https://github.com/esphome/esphome-core/pull/307) +- lib: Fix PCA9685 with many channels [esphome-core#304](https://github.com/esphome/esphome-core/pull/304) +- docs: Fixed typo in Sonoff R2 Cover example [esphome-docs#112](https://github.com/esphome/esphome-docs/pull/112) by [@voicevon](https://github.com/voicevon) +- lib: Dump native API Server config on boot [esphome-core#338](https://github.com/esphome/esphome-core/pull/338) by [@voicevon](https://github.com/voicevon) +- lib: Split Automation headers from implementation [esphome-core#349](https://github.com/esphome/esphome-core/pull/349) +- lib: Travis update [esphome-core#350](https://github.com/esphome/esphome-core/pull/350) +- lib: Fix API Server logs [esphome-core#347](https://github.com/esphome/esphome-core/pull/347) +- lib: WiFi Better logging for ESP8266 [esphome-core#346](https://github.com/esphome/esphome-core/pull/346) +- lib: API Server Watchdog [esphome-core#345](https://github.com/esphome/esphome-core/pull/345) +- lib: GPIO Switch Restore Mode [esphome-core#344](https://github.com/esphome/esphome-core/pull/344) +- lib: Fix Remote Receiver Overflow for ESP8266 [esphome-core#348](https://github.com/esphome/esphome-core/pull/348) +- yaml: Api fixes [esphome#289](https://github.com/esphome/esphome/pull/289) +- yaml: Fix host network [esphome#280](https://github.com/esphome/esphome/pull/280) +- yaml: Fix ESP8266 verbose logging [esphome#291](https://github.com/esphome/esphome/pull/291) +- yaml: API Server Watchdog [esphome#290](https://github.com/esphome/esphome/pull/290) +- lib: Implement Addressable Lights Base [esphome-core#243](https://github.com/esphome/esphome-core/pull/243) +- yaml: Disable SPIFFS to save flash space [esphome#288](https://github.com/esphome/esphome/pull/288) +- yaml: Fix MQTT message trigger [esphome#282](https://github.com/esphome/esphome/pull/282) +- yaml: GPIO Switch Restore Mode [esphome#287](https://github.com/esphome/esphome/pull/287) +- yaml: Addressable Lights [esphome#294](https://github.com/esphome/esphome/pull/294) +- yaml: Toggle Auto-Update Check With Environment Variable [esphome#292](https://github.com/esphome/esphome/pull/292) +- yaml: Make compatible with python 3 [esphome#281](https://github.com/esphome/esphome/pull/281) +- docs: Fix copy/paste error in turn_off_action [esphome-docs#113](https://github.com/esphome/esphome-docs/pull/113) by [@wutr](https://github.com/wutr) +- yaml: GPIO Switch Fix restore_mode validator [esphome#296](https://github.com/esphome/esphome/pull/296) by [@yottatsa](https://github.com/yottatsa) +- yaml: Fixes for Python 3 Compatibility [esphome#297](https://github.com/esphome/esphome/pull/297) +- lib: Stop old template action when new one is started [esphome-core#354](https://github.com/esphome/esphome-core/pull/354) +- lib: Add APDS-9960 support [esphome-core#286](https://github.com/esphome/esphome-core/pull/286) +- lib: Change default update interval to 60 seconds [esphome-core#356](https://github.com/esphome/esphome-core/pull/356) +- lib: ESP32 Ethernet support [esphome-core#288](https://github.com/esphome/esphome-core/pull/288) +- lib: Add ULN2003 support [esphome-core#301](https://github.com/esphome/esphome-core/pull/301) +- lib: Add clean discovery option to simplify transition to native API [esphome-core#357](https://github.com/esphome/esphome-core/pull/357) +- yaml: Add clean MQTT discovery option for native API [esphome#302](https://github.com/esphome/esphome/pull/302) +- yaml: Add APDS9960 Support [esphome#300](https://github.com/esphome/esphome/pull/300) +- lib: Add neopixelbus component [esphome-core#352](https://github.com/esphome/esphome-core/pull/352) +- yaml: Add neopixelbus component [esphome#303](https://github.com/esphome/esphome/pull/303) +- yaml: Add support for MAX31855 sensor [esphome#258](https://github.com/esphome/esphome/pull/258) by [@sherbang](https://github.com/sherbang) +- yaml: ULN2003 Support [esphome#304](https://github.com/esphome/esphome/pull/304) +- yaml: Add ESP32 Ethernet Support [esphome#301](https://github.com/esphome/esphome/pull/301) +- docs: total_daily_energy doesn't have pin option [esphome-docs#114](https://github.com/esphome/esphome-docs/pull/114) by [@oscar-b](https://github.com/oscar-b) +- docs: Getting started HassIO - USD device discovery [esphome-docs#110](https://github.com/esphome/esphome-docs/pull/110) by [@DavidDeSloovere](https://github.com/DavidDeSloovere) +- docs: Mismatch in example and text [esphome-docs#109](https://github.com/esphome/esphome-docs/pull/109) by [@wellsi](https://github.com/wellsi) +- docs: BME280 environment cookbook entry [esphome-docs#107](https://github.com/esphome/esphome-docs/pull/107) by [@Mynasru](https://github.com/Mynasru) +- docs: Update getting_started_command_line.rst [esphome-docs#102](https://github.com/esphome/esphome-docs/pull/102) by [@doskoi](https://github.com/doskoi) +- docs: Updated the multi click example code block [esphome-docs#92](https://github.com/esphome/esphome-docs/pull/92) by [@cooljimy84](https://github.com/cooljimy84) +- docs: Add step to setting up devices [esphome-docs#101](https://github.com/esphome/esphome-docs/pull/101) by [@magnusoverli](https://github.com/magnusoverli) +- yaml: Update beta config [esphome#305](https://github.com/esphome/esphome/pull/305) +- yaml: Fix component.update action [esphome#308](https://github.com/esphome/esphome/pull/308) +- yaml: OTA don't error when upgrading from no password to password mode [esphome#309](https://github.com/esphome/esphome/pull/309) +- yaml: use full space on small devices [esphome#310](https://github.com/esphome/esphome/pull/310) by [@escoand](https://github.com/escoand) +- lib: Fix interval compilation error [esphome-core#364](https://github.com/esphome/esphome-core/pull/364) +- yaml: Fix interval trigger [esphome#313](https://github.com/esphome/esphome/pull/313) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.11.0.mdx b/src/content/docs/changelog/v1.11.0.mdx new file mode 100644 index 0000000000..42214c6c3f --- /dev/null +++ b/src/content/docs/changelog/v1.11.0.mdx @@ -0,0 +1,282 @@ +--- +description: "Changelog for esphomelib version 1.11.0." +title: "Changelog - Version 1.11.0" +pagefind: false +slug: "changelog/v1.11.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +Release 1.11.0 is here, and it has been a busy few weeks :) + +First of all, thank you all for the amazing support on discord, twitter, twitch, etc. +Seeing how much people can accomplish with this tool is really inspiring! + +## ESPHome Rename Completed + +Back in 1.10.0, it was decided to rename the project from esphomelib to ESPHome. This release +has seen **massive** refactors to allow this rename. Literally thousands of files had +to be changed, often with lots of manual action required. Now a rename might not seem +too exciting for you the user, but consider this: Lots of ancient code got revised and cleaned up, +the ESPHome source got moved to a [dedicated Github Organization](https://github.com/esphome) +and many other organizational changes were made which will enable faster feature development. + +As an example, ESPHome's documentation now gets built and served by [Netlify](https://www.netlify.com/), +so all documentation contributions will now get a preview of the changes on a preview website. + +## Installation Methods Changed + +Because of this rename, ESPHome's installation methods have also changed (breaking change!). + +- **Hass.io**: The Hass.io addon repository has moved to [https://github.com/esphome/hassio](https://github.com/esphome/hassio), + please remove the old addon repository and add the new repository. + +- **pip-based installs**: The new installation command is `pip install esphome` and + the `esphomeyaml` command now is called `esphome`. + +- **docker-based installs**: The docker image has moved to `esphome/esphome`. So now you need + to use `docker run --rm -it esphome/esphome livingroom.yaml run`. The dashboard view + now uses mDNS to show online/offline status of ESPs, so you need to add `--net=host` for + that to work. + +All old installation methods will no longer receive updates (and potentially be removed +in the future). + +## Local mDNS Responder + +Up until now, many users had to set static IPs for all ESP nodes in order to be able to connect to +them. That was not a good user experience and this project is committed to providing the best +possible user experience. So now ESPHome bundles its own mDNS responder so static IPs are no +longer necessary (ref: [esphome#386](https://github.com/esphome/esphome/pull/386))! 🎉 + +## Faster Release Cycle + +One of the big things that needs to be changed with this project is the release cycle. +For one thing there's all contributions by you the users that potentially have to wait +before users can use it. But it also makes releasing small tweaks or fixes much more difficult. + +I know I've said this before, but I want to move ESPHome to a quicker and more regular release +interval. As a start, I've set my personal due date for the next release to be in two weeks. +Going forward, I want to have a regular release interval of 3 weeks (remind me of this if I forget :) + +Also, you might have seen me post a picture of an ESP32 camera integration for ESPHome. Don't worry, +I've made that a top priority for the next release, but I've hit some road blocks that would have +prevented it from working in a stable way for this release (and I needed to finally get this darn +release out). + +## Release 1.11.2 - February 26 + +- docs: Fix units on the valid frequency values [esphome-docs#170](https://github.com/esphome/esphome-docs/pull/170) by [@kwdavidson](https://github.com/kwdavidson) +- esphome: Allow non-pullup pins for dallas [esphome#456](https://github.com/esphome/esphome/pull/456) +- core: Turn off light at 0% brightness [esphome-core#526](https://github.com/esphome/esphome-core/pull/526) +- core: HLW8012 don't count a single pulse as power [esphome-core#527](https://github.com/esphome/esphome-core/pull/527) +- core: Set initial brightness to 0 when turning light on [esphome-core#528](https://github.com/esphome/esphome-core/pull/528) +- core: Allow white value of addressable lights to be controlled independently of brightness [esphome-core#529](https://github.com/esphome/esphome-core/pull/529) +- core: Fix WiFi not connecting to open networks [esphome-core#531](https://github.com/esphome/esphome-core/pull/531) +- esphome: Remove automatic update check [esphome#457](https://github.com/esphome/esphome/pull/457) +- esphome: Fix mDNS library added only with OTA [esphome#451](https://github.com/esphome/esphome/pull/451) +- docs: Merge dallas component [esphome-docs#179](https://github.com/esphome/esphome-docs/pull/179) by [@FrengerH](https://github.com/FrengerH) +- docs: Correct ultrasonic filter_nan example [esphome-docs#159](https://github.com/esphome/esphome-docs/pull/159) by [@apeeters](https://github.com/apeeters) +- docs: Cookbook entry for Display component [esphome-docs#173](https://github.com/esphome/esphome-docs/pull/173) by [@ahd71](https://github.com/ahd71) +- core: Fix light partition src offset [esphome-core#525](https://github.com/esphome/esphome-core/pull/525) + +## Release 1.11.1 - February 23 + +- core: Fix addressable not updating light [esphome-core#521](https://github.com/esphome/esphome-core/pull/521) +- docs: Add Ethernet pin config for olimex esp32-poe board [esphome-docs#166](https://github.com/esphome/esphome-docs/pull/166) by [@setola](https://github.com/setola) +- docs: FAQ: Add description for mDNS support on different subnets [esphome-docs#169](https://github.com/esphome/esphome-docs/pull/169) by [@Taigar2015](https://github.com/Taigar2015) + +## Breaking Changes + +- Template Switches no longer restore their state by default [esphome-core#503](https://github.com/esphome/esphome-core/pull/503) +- Removed heartbeat filter from binary sensors [esphome-core#454](https://github.com/esphome/esphome-core/pull/454) +- `optimistic` mode for template platforms has been split off into `optimistic` and + `assumed_state` options [esphome-core#455](https://github.com/esphome/esphome-core/pull/455) + +- `run_cycles` has been removed from deep_sleep [esphome#353](https://github.com/esphome/esphome/pull/353) + +## Other notable changes + +- Added GPIO Switch interlocking [esphome-core#482](https://github.com/esphome/esphome-core/pull/482) +- Added light partition platform which allows you to split an addressable light into partitions + and combine them [esphome-core#501](https://github.com/esphome/esphome-core/pull/501) + +- Added `wait_until` action [esphome-core#508](https://github.com/esphome/esphome-core/pull/508) +- Added template publish actions, which allow you to manually push a state to a template + platform [esphome-core#453](https://github.com/esphome/esphome-core/pull/453) + +- Added support for SI7021 sensors (found in Sonoff TH modules) [esphome#375](https://github.com/esphome/esphome/pull/375) +- MQTT is no longer compiled into firmwares that do no use it, should save a bit of space + [esphome-core#430](https://github.com/esphome/esphome-core/pull/430), [esphome-core#409](https://github.com/esphome/esphome-core/pull/409) + +- Added `use_address` option to `wifi:` which overrides the address ESPHome connects to [esphome-core#484](https://github.com/esphome/esphome-core/pull/484) +- Added display pages, which allow you to have a display that periodically switches between + different pages of content [esphome-core#507](https://github.com/esphome/esphome-core/pull/507) + +- Added two new IR codecs: IR5 and JVC [esphome-core#502](https://github.com/esphome/esphome-core/pull/502), [esphome-core#493](https://github.com/esphome/esphome-core/pull/493) +- Added option to use alternative hardware UART interfaces for logging [esphome-core#483](https://github.com/esphome/esphome-core/pull/483) +- All log strings are stored in flash now, so that saves a few kb of IRAM on ESP8266s [esphome-core#432](https://github.com/esphome/esphome-core/pull/432) +- Fixed ESP8266s with CSE7766 rebooting often +- Fixed using MQTT and native API at the same time +- Personal information is now automatically redacted from dashboard logs [esphome-core#488](https://github.com/esphome/esphome-core/pull/488) + +## Beta Fixes + +- esphome: Fix custom components not registered [esphome#441](https://github.com/esphome/esphome/pull/441) +- core: Add empty nameable constructors [esphome-core#509](https://github.com/esphome/esphome-core/pull/509) +- core: Fix Nextion "Received unknown filler end bytes" [esphome-core#510](https://github.com/esphome/esphome-core/pull/510) +- core: Fix functional attachInterrupt placed in flash [esphome-core#511](https://github.com/esphome/esphome-core/pull/511) +- esphome: Remove duplicate scrollbar & move scrollbar [esphome#443](https://github.com/esphome/esphome/pull/443) by [@TheZoker](https://github.com/TheZoker) +- esphome: Remove unnecessary wrapper [esphome#444](https://github.com/esphome/esphome/pull/444) by [@TheZoker](https://github.com/TheZoker) +- core: Refactor addressable light and fix partition issue [esphome-core#512](https://github.com/esphome/esphome-core/pull/512) +- esphome: Fix MQTT log topic level [esphome#445](https://github.com/esphome/esphome/pull/445) +- core: Fix ESP8266 functional interrupts [esphome-core#515](https://github.com/esphome/esphome-core/pull/515) +- esphome: Allow i2c on non-pullup pins [esphome#447](https://github.com/esphome/esphome/pull/447) +- esphome: Allow use of arduino core v2.5.0 on ESP8266 [esphome#446](https://github.com/esphome/esphome/pull/446) + +## All changes + +- core: Attempt to fix the addressable flicker effect [esphome-core#392](https://github.com/esphome/esphome-core/pull/392) by [@RomRider](https://github.com/RomRider) +- esphome: typing is only required for python < 3.5 [esphome#341](https://github.com/esphome/esphome/pull/341) by [@dotlambda](https://github.com/dotlambda) +- esphome: Fix install pillow in docker image [esphome#338](https://github.com/esphome/esphome/pull/338) +- esphome: Allow IPv4 addresses for SNTP servers [esphome#340](https://github.com/esphome/esphome/pull/340) +- docs: Fix esp8266_pwm example, IDs cannot have hyphens [esphome-docs#123](https://github.com/esphome/esphome-docs/pull/123) by [@rabbadab](https://github.com/rabbadab) +- esphome: Add pyserial to install_requires [esphome#348](https://github.com/esphome/esphome/pull/348) by [@dotlambda](https://github.com/dotlambda) +- docs: Added explanation how to change the password [esphome-docs#124](https://github.com/esphome/esphome-docs/pull/124) by [@WoLpH](https://github.com/WoLpH) +- docs: Update light lambda effect example [esphome-docs#125](https://github.com/esphome/esphome-docs/pull/125) by [@jdads1](https://github.com/jdads1) +- core: Improve handling of MQTT birth message [esphome-core#410](https://github.com/esphome/esphome-core/pull/410) +- core: Fix WiFi apply hostname too early [esphome-core#399](https://github.com/esphome/esphome-core/pull/399) +- core: Fix pulse counter filtering for ESP8266 [esphome-core#397](https://github.com/esphome/esphome-core/pull/397) +- esphome: Warn if expire_after used without MQTT [esphome#354](https://github.com/esphome/esphome/pull/354) +- esphome: Use strict string mode for WiFi password [esphome#351](https://github.com/esphome/esphome/pull/351) +- docs: Add ESP8266 advanced info [esphome-docs#128](https://github.com/esphome/esphome-docs/pull/128) +- docs: Cookbook Entry for Sonoff Basic Fish Pond Pump [esphome-docs#122](https://github.com/esphome/esphome-docs/pull/122) by [@meijerwynand](https://github.com/meijerwynand) +- docs: Add Arilux LC02 pinout [esphome-docs#130](https://github.com/esphome/esphome-docs/pull/130) by [@pixiandreas](https://github.com/pixiandreas) +- docs: Dallas: Update for default update_interval [esphome-docs#131](https://github.com/esphome/esphome-docs/pull/131) by [@balk77](https://github.com/balk77) +- core: Fix Light Color Temperature for native API [esphome-core#398](https://github.com/esphome/esphome-core/pull/398) +- core: Throttle filter doesn't work for quick firing sensors [esphome-core#408](https://github.com/esphome/esphome-core/pull/408) by [@AlexDanault](https://github.com/AlexDanault) +- core: Improve Preferences Log Output [esphome-core#414](https://github.com/esphome/esphome-core/pull/414) +- core: Fix GPIO switch restoring inverted [esphome-core#415](https://github.com/esphome/esphome-core/pull/415) +- core: Default expire after to 0 with deep sleep [esphome-core#417](https://github.com/esphome/esphome-core/pull/417) +- core: Improve DHT error message [esphome-core#424](https://github.com/esphome/esphome-core/pull/424) +- esphome: Fix Non-ASCII characters being escaped if in wrong locale [esphome#369](https://github.com/esphome/esphome/pull/369) +- esphome: Upgrade HassIO Ubuntu Base to 2.2.1 [esphome#368](https://github.com/esphome/esphome/pull/368) +- esphome: Fix ESP32 BLE tracker scan interval in seconds [esphome#367](https://github.com/esphome/esphome/pull/367) +- esphome: ESP8266 Better Exception Code Names [esphome#358](https://github.com/esphome/esphome/pull/358) +- esphome: Remove DNS1,DNS2 inclusive [esphome#357](https://github.com/esphome/esphome/pull/357) +- esphome: Remove deep sleep run_cycles [esphome#353](https://github.com/esphome/esphome/pull/353) +- esphome: Fix custom output requiring type [esphome#344](https://github.com/esphome/esphome/pull/344) +- core: Don't duplicate binary sensor events [esphome-core#411](https://github.com/esphome/esphome-core/pull/411) +- esphome: Add ability to run commands using subprocess, instead of in-process [esphome#359](https://github.com/esphome/esphome/pull/359) by [@dotlambda](https://github.com/dotlambda) +- core: Fix on_press / on_release being triggered on initial state [esphome-core#425](https://github.com/esphome/esphome-core/pull/425) +- core: Remove hard dependencies in library.json [esphome-core#409](https://github.com/esphome/esphome-core/pull/409) +- esphome: Upgrade espressif32 package to 1.6.0 [esphome#355](https://github.com/esphome/esphome/pull/355) +- esphome: Fix dashboard password with python 3 [esphome#339](https://github.com/esphome/esphome/pull/339) +- esphome: Fix nginx closing WebSocket connection after 60 seconds [esphome#370](https://github.com/esphome/esphome/pull/370) +- esphome: Disable platformio LDF [esphome#352](https://github.com/esphome/esphome/pull/352) +- core: Store log strings in flash for ESP8266 [esphome-core#432](https://github.com/esphome/esphome-core/pull/432) +- core: Adding DHT model SI7021 to DHT sensor [esphome-core#433](https://github.com/esphome/esphome-core/pull/433) by [@grea09](https://github.com/grea09) +- esphome: Adding SI7021 sensor to config validation [esphome#375](https://github.com/esphome/esphome/pull/375) by [@grea09](https://github.com/grea09) +- core: Add logging to NeoPixelBus [esphome-core#438](https://github.com/esphome/esphome-core/pull/438) by [@badbadc0ffee](https://github.com/badbadc0ffee) +- esphome: Includes should be relative to the src directory, not main.cpp file [esphome#390](https://github.com/esphome/esphome/pull/390) by [@yawor](https://github.com/yawor) +- esphome: Generate variable for each custom component id [esphome#382](https://github.com/esphome/esphome/pull/382) by [@yawor](https://github.com/yawor) +- esphome: Fix Custom Components No Name [esphome#395](https://github.com/esphome/esphome/pull/395) +- core: Split off assumed state from optimistic mode [esphome-core#455](https://github.com/esphome/esphome-core/pull/455) +- esphome: Remove Heartbeat Binary Sensor Filter [esphome#393](https://github.com/esphome/esphome/pull/393) +- core: Disable MQTT if not used [esphome-core#430](https://github.com/esphome/esphome-core/pull/430) +- esphome: Disable MQTT if not used [esphome#373](https://github.com/esphome/esphome/pull/373) +- core: Store raw remote codes in flash [esphome-core#456](https://github.com/esphome/esphome-core/pull/456) +- core: Deduplicate values before sending [esphome-core#454](https://github.com/esphome/esphome-core/pull/454) +- core: Rewrite native API client for increased reliability [esphome-core#426](https://github.com/esphome/esphome-core/pull/426) +- docs: Fix Typo in BME280 Environment Cookbook [esphome-docs#145](https://github.com/esphome/esphome-docs/pull/145) by [@hajdbo](https://github.com/hajdbo) +- docs: Updating Repo URLs in Contribution Guide [esphome-docs#143](https://github.com/esphome/esphome-docs/pull/143) by [@badbadc0ffee](https://github.com/badbadc0ffee) +- core: Update sony.cpp to fix incorrectly formed Sony IR code (extra bit) [esphome-core#458](https://github.com/esphome/esphome-core/pull/458) by [@chris-jennings](https://github.com/chris-jennings) +- docs: Extra example in cookbook / flashing DOIT ESP32 [esphome-docs#138](https://github.com/esphome/esphome-docs/pull/138) by [@DavidDeSloovere](https://github.com/DavidDeSloovere) +- docs: Adding the SI7021 to docs [esphome-docs#147](https://github.com/esphome/esphome-docs/pull/147) by [@grea09](https://github.com/grea09) +- esphome: Validate neopixelbus method [esphome#398](https://github.com/esphome/esphome/pull/398) +- core: Fix PMSx003 payload length calculation [esphome-core#471](https://github.com/esphome/esphome-core/pull/471) by [@hajdbo](https://github.com/hajdbo) +- docs: Netlify [esphome-docs#153](https://github.com/esphome/esphome-docs/pull/153) +- docs: Remove duplicate "includes" line [esphome-docs#154](https://github.com/esphome/esphome-docs/pull/154) by [@notgwj](https://github.com/notgwj) +- core: Remove 'flash' property from MQTT Light discovery JSON. [esphome-core#478](https://github.com/esphome/esphome-core/pull/478) by [@brandond](https://github.com/brandond) +- docs: Improve docker build instructions [esphome-docs#155](https://github.com/esphome/esphome-docs/pull/155) by [@DavidDeSloovere](https://github.com/DavidDeSloovere) +- core: Add Homeassistant Binary Sensor [esphome-core#480](https://github.com/esphome/esphome-core/pull/480) (cherry-picked) +- core: GPIO Switch Interlocking [esphome-core#482](https://github.com/esphome/esphome-core/pull/482) (cherry-picked) +- esphome: Print error when mqtt.publish used without MQTT enabled [esphome#408](https://github.com/esphome/esphome/pull/408) (cherry-picked) +- esphome: Add Homeassistant Binary Sensor [esphome#409](https://github.com/esphome/esphome/pull/409) (cherry-picked) +- esphome: Allow pins 9&10 for PWM [esphome#410](https://github.com/esphome/esphome/pull/410) (cherry-picked) +- docs: Homeassistant binary sensor [esphome-docs#156](https://github.com/esphome/esphome-docs/pull/156) +- esphome: Store Raw Remote Codes in PROGMEM [esphome#392](https://github.com/esphome/esphome/pull/392) (cherry-picked) +- core: Better error messages for OTA [esphome-core#486](https://github.com/esphome/esphome-core/pull/486) +- esphome: Better error messages for OTA [esphome#418](https://github.com/esphome/esphome/pull/418) +- core: Synchronize homeassistant time periodically [esphome-core#485](https://github.com/esphome/esphome-core/pull/485) +- core: ESP8266 Arduino 2.5.0 Compatibility [esphome-core#481](https://github.com/esphome/esphome-core/pull/481) (cherry-picked) +- esphome: Add Switch Interlocking [esphome#411](https://github.com/esphome/esphome/pull/411) (cherry-picked) +- esphome: Add local mDNS responder for .local [esphome#386](https://github.com/esphome/esphome/pull/386) (cherry-picked) +- core: Auto-Redact private information from logs [esphome-core#488](https://github.com/esphome/esphome-core/pull/488) +- esphome: Auto-Redact private information from logs in dashboard [esphome#421](https://github.com/esphome/esphome/pull/421) +- esphome: Replace optimistic with Assumed State [esphome#394](https://github.com/esphome/esphome/pull/394) (cherry-picked) +- core: Add Template Publish Action [esphome-core#453](https://github.com/esphome/esphome-core/pull/453) (cherry-picked) +- esphome: Add template publish actions and switch triggers [esphome#391](https://github.com/esphome/esphome/pull/391) (cherry-picked) +- core: Rework hostname (replaced by use_address) [esphome-core#484](https://github.com/esphome/esphome-core/pull/484) +- esphome: Add use_address [esphome#417](https://github.com/esphome/esphome/pull/417) +- core: Fixes I2C SH1106 repeats the first 8 lines of the display. [esphome-core#492](https://github.com/esphome/esphome-core/pull/492) by [@n0bel](https://github.com/n0bel) +- docs: Link Home Assistant's include system in FAQ [esphome-docs#157](https://github.com/esphome/esphome-docs/pull/157) by [@TheHackmeister](https://github.com/TheHackmeister) +- core: Rework UART component for fixes [esphome-core#487](https://github.com/esphome/esphome-core/pull/487) +- esphome: Rework UART component for fixes [esphome#419](https://github.com/esphome/esphome/pull/419) +- esphome: Make dout the default flash mode [esphome#420](https://github.com/esphome/esphome/pull/420) +- core: Revert espressif32 package upgrade [esphome-core#490](https://github.com/esphome/esphome-core/pull/490) +- esphome: Revert "Upgrade espressif32 package to 1.6.0 (#355)" [esphome#422](https://github.com/esphome/esphome/pull/422) +- core: Add support for JVC remote transmitting and receiving [esphome-core#493](https://github.com/esphome/esphome-core/pull/493) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add support for JVC remote transmitting and receiving [esphome#423](https://github.com/esphome/esphome/pull/423) by [@jesserockz](https://github.com/jesserockz) +- docs: Add docs for JVC remote transmitting and receiving [esphome-docs#160](https://github.com/esphome/esphome-docs/pull/160) by [@jesserockz](https://github.com/jesserockz) +- docs: H801 LED controller (remade) [esphome-docs#158](https://github.com/esphome/esphome-docs/pull/158) by [@erazor666](https://github.com/erazor666) +- core: Enable use of alternate hardware UARTs for logging [esphome-core#483](https://github.com/esphome/esphome-core/pull/483) by [@brandond](https://github.com/brandond) +- esphome: Enable use of alternate hardware UARTs for logging [esphome#427](https://github.com/esphome/esphome/pull/427) by [@brandond](https://github.com/brandond) +- docs: Enable use of alternate hardware UARTs for logging [esphome-docs#161](https://github.com/esphome/esphome-docs/pull/161) by [@brandond](https://github.com/brandond) +- core: Rename esphomelib to esphome-core [esphome-core#494](https://github.com/esphome/esphome-core/pull/494) +- esphome: Rename esphomeyaml to esphome [esphome#426](https://github.com/esphome/esphome/pull/426) +- esphome: Include common components for compiles [esphome#431](https://github.com/esphome/esphome/pull/431) +- core: Add light partition platform [esphome-core#501](https://github.com/esphome/esphome-core/pull/501) +- core: Add RC5 IR code support [esphome-core#502](https://github.com/esphome/esphome-core/pull/502) +- core: Template switch do not restore state by default [esphome-core#503](https://github.com/esphome/esphome-core/pull/503) +- core: Fix ethernet initialization order [esphome-core#504](https://github.com/esphome/esphome-core/pull/504) +- esphome: Add RC5 IR code support [esphome#432](https://github.com/esphome/esphome/pull/432) +- core: Tweak BLE tracker settings [esphome-core#505](https://github.com/esphome/esphome-core/pull/505) +- esphome: Add text_sensor.template.publish action [esphome#433](https://github.com/esphome/esphome/pull/433) +- esphome: Add light partition platform [esphome#434](https://github.com/esphome/esphome/pull/434) +- core: Add 'hidden' option to wifi networks [esphome-core#506](https://github.com/esphome/esphome-core/pull/506) +- esphome: Add hidden option to wifi networks [esphome#436](https://github.com/esphome/esphome/pull/436) +- core: Add display pages abstraction [esphome-core#507](https://github.com/esphome/esphome-core/pull/507) +- esphome: Add display page abstraction [esphome#435](https://github.com/esphome/esphome/pull/435) +- esphome: Fix dashboard style issues [esphome#437](https://github.com/esphome/esphome/pull/437) by [@TheZoker](https://github.com/TheZoker) +- esphome: Include tapTarget html element only when needed [esphome#439](https://github.com/esphome/esphome/pull/439) by [@TheZoker](https://github.com/TheZoker) +- core: Add wait_until action [esphome-core#508](https://github.com/esphome/esphome-core/pull/508) +- esphome: Add wait_until action [esphome#440](https://github.com/esphome/esphome/pull/440) +- docs: Document addressable_lambda light effect [esphome-docs#163](https://github.com/esphome/esphome-docs/pull/163) +- esphome: Fix custom components not registered [esphome#441](https://github.com/esphome/esphome/pull/441) (cherry-picked) +- docs: Custom Binary Sensor: Add missing ";" and fix indentation in YAML [esphome-docs#164](https://github.com/esphome/esphome-docs/pull/164) by [@mjoshd](https://github.com/mjoshd) +- core: Add empty nameable constructors [esphome-core#509](https://github.com/esphome/esphome-core/pull/509) (cherry-picked) +- core: Fix Nextion "Received unknown filler end bytes" [esphome-core#510](https://github.com/esphome/esphome-core/pull/510) (cherry-picked) +- core: Fix functional attachInterrupt placed in flash [esphome-core#511](https://github.com/esphome/esphome-core/pull/511) (cherry-picked) +- docs: Add Sonoff T1 LED pin [esphome-docs#165](https://github.com/esphome/esphome-docs/pull/165) by [@lwis](https://github.com/lwis) +- esphome: Remove duplicate scrollbar & move scrollbar [esphome#443](https://github.com/esphome/esphome/pull/443) by [@TheZoker](https://github.com/TheZoker) (cherry-picked) +- esphome: Remove unnecessary wrapper [esphome#444](https://github.com/esphome/esphome/pull/444) by [@TheZoker](https://github.com/TheZoker) (cherry-picked) +- core: Refactor addressable light and fix partition issue [esphome-core#512](https://github.com/esphome/esphome-core/pull/512) (cherry-picked) +- esphome: Fix MQTT log topic level [esphome#445](https://github.com/esphome/esphome/pull/445) (cherry-picked) +- core: Fix ESP8266 functional interrupts [esphome-core#515](https://github.com/esphome/esphome-core/pull/515) (cherry-picked) +- esphome: Allow i2c on non-pullup pins [esphome#447](https://github.com/esphome/esphome/pull/447) (cherry-picked) +- esphome: Allow use of arduino core v2.5.0 on ESP8266 [esphome#446](https://github.com/esphome/esphome/pull/446) (cherry-picked) +- core: Fix feed_wdt [esphome-core#520](https://github.com/esphome/esphome-core/pull/520) +- core: Speed up waveshare Epaper [esphome-core#518](https://github.com/esphome/esphome-core/pull/518) +- esphome: Improve dashboard setup wizard [esphome#450](https://github.com/esphome/esphome/pull/450) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.12.0.mdx b/src/content/docs/changelog/v1.12.0.mdx new file mode 100644 index 0000000000..b0c00f715a --- /dev/null +++ b/src/content/docs/changelog/v1.12.0.mdx @@ -0,0 +1,188 @@ +--- +description: "Changelog for ESPHome version 1.12.0." +title: "Changelog - Version 1.12.0" +pagefind: false +slug: "changelog/v1.12.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +It's release day! 🎉 Today I'm happy to release ESPHome 1.12.0. What's new? A lot of awesome +stuff got added! Let me walk you through it: + +Before 1.12, it was only possible to transfer data from ESPHome to Home Assistant (with the +`homeassistant.service` call). With 1.12 you get [User-defined services](/components/api#api-device-actions), +just define a service in your ESPHome file and call it like any other service from HA. All the +rest (like variables, data validation, etc) are handled automatically! + +[ESP32 Camera Support](/components/esp32_camera/): This is huge. When integrating cameras +into your smart home you'd always have to weigh between security and price; cheap cameras often +are very insecure (and sometimes even exposed on the web). And even the pricier ones would +sometimes phone back to the manufacturer and upload your data. With ESPHome, everything's 100% +local and communicates *directly* with Home Assistant. It took a bit longer than I initially +anticipated to iron out most stability issues, but with 1.12.0 it's finally here :) + +And thanks very much to [@puuu](https://github.com/puuu) for the [SDS011 Particulate Matter integration](/components/sensor/sds011/) and +[@mvturnho](https://github.com/mvturnho) for the newly added +[MPR121 Capacitive Touch sensor](/components/binary_sensor/mpr121/) support! + +And as always, this release contains tons of small adjustments (like automatically providing +suggestions for validation errors) and bug fixes to make your life easier. + +## Breaking Changes + +- The `timeout_meter` and `timeout_time` options of the ultrasonic sensor + have been merged into `timeout`. ([Ultrasonic](/components/sensor/ultrasonic/)) + +- Ultrasonic Sensor no longer works with GPIO16 as echo pin on ESP8266s because + the implementation switched to an asynchronous interrupt mode. + +## Other notable changes + +- Added `calibrate_linear` sensor filter for easier calibration of sensors + ([sensor-filter-calibrate_linear](/components/sensor/filter/multiply#sensor-filter-calibrate_linear)) + +- Added `for` parameter to [binary_sensor.is_on](/components/binary_sensor#binary_sensor-is_on_condition) condition. +- Added `streamer_mode`, `status_use_ping` and `relative_url` options to the Hass.io addon + (see addon description). + +- Improved validation. For small typos for config variables similar keys are automatically + suggested. + +- Added `esp8266_restore_from_flash` to [esphome section](/components/esphome/) which + enables restoring state from flash instead of RTC memory - this allows recovering relay state + even after a power cycle. + +- Added ability +- `!secret` values are now hidden for config validation. +- Rotary Encoders have a new `min_value` and `max_value` option. ([Rotary Encoder](/components/sensor/rotary_encoder/)) +- Fixed OTA not working for ESP32 when BLE enabled. +- Added a "delete" button in the dashboard interface to delete configuration files. +- Reworked GPIO interrupts, this will fix a bunch of issues with components that use interrupts + (rotary encoder, software uart, remote receiver, ...) + +- Allowed the use of newest Arduino Core version for ESP8266: `2.5.0` (not default yet, + please try it out on non-critical devices and report if there are no wifi issues) + +## Release 1.12.1 - March 20 + +- core: Fix homeassistant mqtt discovery for light components [esphome-core#553](https://github.com/esphome/esphome-core/pull/553) by [@puuu](https://github.com/puuu) +- esphome: Fix filter_out: nan filer [esphome#486](https://github.com/esphome/esphome/pull/486) +- docs: Sonoff S20 yaml fix [esphome-docs#200](https://github.com/esphome/esphome-docs/pull/200) by [@BananaPukeh](https://github.com/BananaPukeh) +- core: Fix WiFi Info Text Sensor [esphome-core#554](https://github.com/esphome/esphome-core/pull/554) +- core: Fix addressable lights starting white at boot [esphome-core#556](https://github.com/esphome/esphome-core/pull/556) +- esphome: Fix IPAddress in validate secret [esphome#488](https://github.com/esphome/esphome/pull/488) + +## Release 1.12.2 - March 31 + +- esphome: Better symlink support under Windows [esphome#487](https://github.com/esphome/esphome/pull/487) by [@glmnet](https://github.com/glmnet) +- core: Fix WiFi Info sensor for ESP32 [esphome-core#561](https://github.com/esphome/esphome-core/pull/561) +- core: Revert ultrasonic sensor to non-interrupt mode [esphome-core#562](https://github.com/esphome/esphome-core/pull/562) +- core: Fix web_server for text_sensors [esphome-core#567](https://github.com/esphome/esphome-core/pull/567) +- core: Fix ESP8266 cannot OTA after failed OTA attempt [esphome-core#564](https://github.com/esphome/esphome-core/pull/564) +- core: ESP8266 SDK Core 2.3.0 compat [esphome-core#563](https://github.com/esphome/esphome-core/pull/563) +- esphome: ESP8266 SDK 2.3.0 compat [esphome#490](https://github.com/esphome/esphome/pull/490) +- docs: Expand USB flashing, clarify how to report a bug. [esphome-docs#204](https://github.com/esphome/esphome-docs/pull/204) by [@balloob](https://github.com/balloob) +- core: Fix dallas on GPIO0 [esphome-core#568](https://github.com/esphome/esphome-core/pull/568) +- docs: Fix api homeassistant.service docs [esphome-docs#209](https://github.com/esphome/esphome-docs/pull/209) by [@davericher](https://github.com/davericher) +- esphome: Upgrade ESPAsyncTCP to 1.2.0 [esphome#497](https://github.com/esphome/esphome/pull/497) +- core: Upgrade espasynctcp [esphome-core#576](https://github.com/esphome/esphome-core/pull/576) +- esphome: Fix dashboard wizard unicode [esphome#494](https://github.com/esphome/esphome/pull/494) +- esphome: Fix text sensor MQTT settings [esphome#495](https://github.com/esphome/esphome/pull/495) +- core: Split up WiFi ESP32 and ESP8266 implementation [esphome-core#572](https://github.com/esphome/esphome-core/pull/572) +- core: Fix MCP23017 to work on OUTPUT mode. [esphome-core#571](https://github.com/esphome/esphome-core/pull/571) by [@puerari](https://github.com/puerari) +- core: Disable wifi interface on shutdown [esphome-core#566](https://github.com/esphome/esphome-core/pull/566) +- core: Fix light flashes [esphome-core#578](https://github.com/esphome/esphome-core/pull/578) +- core: Rewrite PN532 to fix some lowvbat issues [esphome-core#575](https://github.com/esphome/esphome-core/pull/575) +- core: cse7766 fix [esphome-core#558](https://github.com/esphome/esphome-core/pull/558) by [@brianrjones69](https://github.com/brianrjones69) +- esphome: Upgrade docker base image to 1.4.3 [esphome#499](https://github.com/esphome/esphome/pull/499) +- core: Fix neopixelbus logging causes section type conflict [esphome-core#579](https://github.com/esphome/esphome-core/pull/579) + +## All changes + +- core: Fix feed_wdt [esphome-core#520](https://github.com/esphome/esphome-core/pull/520) +- core: Speed up waveshare Epaper [esphome-core#518](https://github.com/esphome/esphome-core/pull/518) +- esphome: Improve dashboard setup wizard [esphome#450](https://github.com/esphome/esphome/pull/450) +- core: Add MPR121 support for esphome-core [esphome-core#517](https://github.com/esphome/esphome-core/pull/517) by [@mvturnho](https://github.com/mvturnho) +- esphome: Add MPR121 Capacitive Touch Sensor [esphome#449](https://github.com/esphome/esphome/pull/449) by [@mvturnho](https://github.com/mvturnho) +- core: Add restore state from flash option [esphome-core#530](https://github.com/esphome/esphome-core/pull/530) +- esphome: Add restore state from flash option [esphome#459](https://github.com/esphome/esphome/pull/459) +- docs: Add restore state from flash option [esphome-docs#181](https://github.com/esphome/esphome-docs/pull/181) +- esphome: Automatically hide secrets in validation [esphome#455](https://github.com/esphome/esphome/pull/455) +- core: Add nextion commands [esphome-core#523](https://github.com/esphome/esphome-core/pull/523) +- core: Add logic in Output for minimum power setting [esphome-core#516](https://github.com/esphome/esphome-core/pull/516) by [@mtl010957](https://github.com/mtl010957) +- esphome: Add handling for min power output setting [esphome#448](https://github.com/esphome/esphome/pull/448) by [@mtl010957](https://github.com/mtl010957) +- docs: Update output documentation for min_power configuration [esphome-docs#167](https://github.com/esphome/esphome-docs/pull/167) by [@mtl010957](https://github.com/mtl010957) +- esphome: Recommend similar keys for spelling errors [esphome#458](https://github.com/esphome/esphome/pull/458) +- core: Convert Automation engine to variadic templates [esphome-core#519](https://github.com/esphome/esphome-core/pull/519) +- core: Add linear calibration filter [esphome-core#524](https://github.com/esphome/esphome-core/pull/524) +- esphome: Convert automation engine to use variadic templates [esphome#452](https://github.com/esphome/esphome/pull/452) +- docs: Add linear calibration filter [esphome-docs#180](https://github.com/esphome/esphome-docs/pull/180) +- core: Add native API User-Defined services [esphome-core#522](https://github.com/esphome/esphome-core/pull/522) +- esphome: Add native API User-Defined services [esphome#453](https://github.com/esphome/esphome/pull/453) +- esphome: Add linear calibration sensor filter [esphome#454](https://github.com/esphome/esphome/pull/454) +- docs: Component reshuffle [esphome-docs#183](https://github.com/esphome/esphome-docs/pull/183) by [@FrengerH](https://github.com/FrengerH) +- docs: Add MPR121 support [esphome-docs#176](https://github.com/esphome/esphome-docs/pull/176) by [@mvturnho](https://github.com/mvturnho) +- esphome: Fix os.symlink on Windows [esphome#460](https://github.com/esphome/esphome/pull/460) +- esphome: Enable i2c scanning by default [esphome#462](https://github.com/esphome/esphome/pull/462) +- core: Add rotary encoder min/max value [esphome-core#534](https://github.com/esphome/esphome-core/pull/534) +- esphome: Add rotary encoder min/max value [esphome#463](https://github.com/esphome/esphome/pull/463) +- esphome: Fix gain setting for ADS1115 [esphome#468](https://github.com/esphome/esphome/pull/468) by [@Melkor82](https://github.com/Melkor82) +- core: Use clang-format and clang-tidy in CI [esphome-core#540](https://github.com/esphome/esphome-core/pull/540) +- core: Add GPIO interrupt abstraction [esphome-core#535](https://github.com/esphome/esphome-core/pull/535) +- core: Add MCP23017 [esphome-core#537](https://github.com/esphome/esphome-core/pull/537) +- core: Add WiFi/MQTT/API connected condition [esphome-core#536](https://github.com/esphome/esphome-core/pull/536) +- core: Fix debug statement in ESP32 Hall Sensor [esphome-core#533](https://github.com/esphome/esphome-core/pull/533) by [@emwap](https://github.com/emwap) +- core: Remove light mqtt_json warning [esphome-core#532](https://github.com/esphome/esphome-core/pull/532) +- esphome: Add WiFi/MQTT/API connected condition [esphome#465](https://github.com/esphome/esphome/pull/465) +- esphome: Rewrite interrupt components [esphome#464](https://github.com/esphome/esphome/pull/464) +- esphome: Add relative_url, streamer_mode, status_use_ping dashboard options [esphome#461](https://github.com/esphome/esphome/pull/461) +- esphome: Add MCP23017 [esphome#466](https://github.com/esphome/esphome/pull/466) +- esphome: Allow Arduino Core 2.5.0 for ESP8266 [esphome#469](https://github.com/esphome/esphome/pull/469) +- core: Add copy output platform [esphome-core#542](https://github.com/esphome/esphome-core/pull/542) +- core: Add 'for' to binary sensor conditions [esphome-core#541](https://github.com/esphome/esphome-core/pull/541) +- esphome: Upgrade ESP32 core to 1.0.1 [esphome#470](https://github.com/esphome/esphome/pull/470) +- core: Add WiFi Info Text Sensor [esphome-core#543](https://github.com/esphome/esphome-core/pull/543) +- esphome: Add for to binary sensor conditions [esphome#471](https://github.com/esphome/esphome/pull/471) +- esphome: Add connected condition [esphome#474](https://github.com/esphome/esphome/pull/474) +- esphome: Add copy output platform [esphome#472](https://github.com/esphome/esphome/pull/472) +- esphome: Add Wifi info text sensor [esphome#473](https://github.com/esphome/esphome/pull/473) +- docs: Add text-based sensor example to OLED cookbook entry [esphome-docs#190](https://github.com/esphome/esphome-docs/pull/190) by [@tubalainen](https://github.com/tubalainen) +- docs: H801 Cookbook Edit Language about holding GPIOs during flashing [esphome-docs#189](https://github.com/esphome/esphome-docs/pull/189) by [@2016for](https://github.com/2016for) +- docs: Adding manual for Sonoff T1 UK 3 Gang V1.1 [esphome-docs#182](https://github.com/esphome/esphome-docs/pull/182) by [@nnmalex](https://github.com/nnmalex) +- core: Add SDS011 [esphome-core#538](https://github.com/esphome/esphome-core/pull/538) by [@puuu](https://github.com/puuu) +- esphome: Support SDS011 component. [esphome#467](https://github.com/esphome/esphome/pull/467) by [@puuu](https://github.com/puuu) +- docs: Document SDS011 component [esphome-docs#185](https://github.com/esphome/esphome-docs/pull/185) by [@puuu](https://github.com/puuu) +- docs: Add Teckin SP20 (US) example to 'Generic Sonoff' page [esphome-docs#191](https://github.com/esphome/esphome-docs/pull/191) by [@mjoshd](https://github.com/mjoshd) +- esphome: Add color to login error for better visibility [esphome#478](https://github.com/esphome/esphome/pull/478) by [@TheZoker](https://github.com/TheZoker) +- core: Fixed: Waveshare 4.2in display timing problem due to high speed SPI u… [esphome-core#546](https://github.com/esphome/esphome-core/pull/546) by [@dirkj](https://github.com/dirkj) +- docs: Update information on flashing OTA to old ip [esphome-docs#193](https://github.com/esphome/esphome-docs/pull/193) by [@tubalainen](https://github.com/tubalainen) +- docs: NeopixelBus Light: Fix GPIO2 not GPIO3 for uart1 method [esphome-docs#194](https://github.com/esphome/esphome-docs/pull/194) by [@Bierchermuesli](https://github.com/Bierchermuesli) +- docs: Cookbook Guide for Mirabella Genio Smart Bulbs [esphome-docs#184](https://github.com/esphome/esphome-docs/pull/184) by [@cryptelli](https://github.com/cryptelli) +- docs: Improve bme280_environment cookbook for stable climates [esphome-docs#149](https://github.com/esphome/esphome-docs/pull/149) by [@hajdbo](https://github.com/hajdbo) +- core: SDS011: change type of update_interval_min to uint8_t [esphome-core#545](https://github.com/esphome/esphome-core/pull/545) by [@puuu](https://github.com/puuu) +- core: Add ESP32 camera support [esphome-core#544](https://github.com/esphome/esphome-core/pull/544) +- docs: Cookbook Guide for Brilliant / Mirabella Genio Smart Plugs [esphome-docs#195](https://github.com/esphome/esphome-docs/pull/195) by [@cryptelli](https://github.com/cryptelli) +- esphome: Add ESP32 Camera [esphome#475](https://github.com/esphome/esphome/pull/475) +- docs: Add native API User-Defined services [esphome-docs#171](https://github.com/esphome/esphome-docs/pull/171) (cherry-picked) +- docs: BME280 environment micrograms -> grams [esphome-docs#198](https://github.com/esphome/esphome-docs/pull/198) by [@hajdbo](https://github.com/hajdbo) +- esphome: Changes for 1.12 [esphome#482](https://github.com/esphome/esphome/pull/482) (cherry-picked) +- core: Fixes for 1.12 [esphome-core#551](https://github.com/esphome/esphome-core/pull/551) (cherry-picked) +- core: More changes for 1.12 [esphome-core#552](https://github.com/esphome/esphome-core/pull/552) +- esphome: More changes for 1.12 [esphome#483](https://github.com/esphome/esphome/pull/483) +- esphome: Update Hassio base image to 1.4.1 [esphome#484](https://github.com/esphome/esphome/pull/484) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.13.0.mdx b/src/content/docs/changelog/v1.13.0.mdx new file mode 100644 index 0000000000..0319a403eb --- /dev/null +++ b/src/content/docs/changelog/v1.13.0.mdx @@ -0,0 +1,292 @@ +--- +description: "Changelog for ESPHome version 1.13.0." +title: "Changelog - Version 1.13.0 - May 30th 2019" +pagefind: false +slug: "changelog/v1.13.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +import { Image } from 'astro:assets'; +import liveValidationImg from './images/live-validation.png'; + +{/* markdownlint-disable MD013 */} + +Oh hi there! + +It's been a while since the last release (once again 😅). But I hope you'll be excited +to hear what's new in this latest release of ESPHome: 1.13.0! + +First of all, as you can see in the table above, a *ton* of new components have been added. Some to +highlight are: + +- **Cover Updates**: Covers now support setting arbitrary position (and the new time-based and endstop covers + make full use of it). + +- **Climate Support**: ESPHome now has a full climate abstraction - with the "bang bang" climate device + you can automate thermostats directly on the ESP. + +- **Sun, GPS** etc - This release brings a lot of helper components too of course. + +But... the biggest change in this version has yet to be mentioned here: A complete refactor of the +ESPHome codebase. Remember the project rename in 1.11? It's nothing compared to the latest and greatest +[code refactor](https://github.com/esphome/esphome/pull/504). ESPHome has gotten a completely new +directory structure, and the codebase has been simplified a lot. + +**What does this mean for you?** + +Well, you'll be happy to hear that this refactor improves **compile times** by around **2x**. +Additionally, these changes will make contributing a lot easier, because now the code is much more +modular. + +**But it doesn't stop there!** + +This release also brings another awesome new feature: Live validation! If you use the editor in the +ESPHome dashboard, your configuration will be validated on-the-fly and any validation errors +are shown directly in the editor in less than half a second! + + + +I also want to give special shout outs to these awesome people who have contributed a lot of +features in this version: + +- [@gitolicious](https://github.com/gitolicious) for his awesome work on improving the dashboard! +- [@mvturnho](https://github.com/mvturnho) for the new TTP219 and binary sensor map additions! +- [@glmnet](https://github.com/glmnet) for adding the TCL112 and Coolix climate platforms, as well [@puuu](https://github.com/puuu) + for pushing ahead with the climate component! + +- Everyone who has been supporting me financially over [Patreon](https://www.patreon.com/ottowinter)! +- Everybody who reported bugs, contributed documentation and fixed things! + +If you like this version, please consider starring the [ESPHome repository](https://github.com/esphome/esphome) +on Github 💫! + +## Other notable changes + +- Hass.io Ingress - ESPHome now supports showing the dashboard directly in the Home Assistant frontend + via the Hass.io Ingress feature. + +- The i2c variant of the ttp229 device is now also supported. +- Covers now support position & tilt - you can use these with the new [endstop](/components/cover/endstop/) + and [time-based](/components/cover/time_based/) cover platforms. + +- ESPHome has received support for climate devices, you can now let your ESP control heaters/coolers + directly on the ESP. Great for building a DIY thermostat or making an existing one IoT-enabled. + +- [Lights](/components/light/) now have some new actions: `light.dim_relative` and + `light.addressable_set`. Addressable lights now also support a new range syntax (`.range()` and `.all()` ) + functions to allow easier effect creation. + +- Added a new custom component mechanism and contribution guidelines have been updated. +- [RDM6300](/components/binary_sensor/rdm6300/) now also has an `on_tag` trigger like the PN532. +- [Remote Transmitter](/components/remote_transmitter/) and [Remote Receiver](/components/remote_receiver/) + have gotten some new features: custom triggers and actions with templatable values. + +- Added `output.esp8266_pwm.set_frequency` action for dynamically changing the frequency of the ESP8266 + PWM output (for example for active buzzers). + +- Added `servo.detach` action to disable a servo - this prevents it from moving around once it's in position. +- Added `stepper.set_speed` to dynamically change a stepper's speed at runtime. +- Added `text_sensor.state` condition for checking a text sensor's state against a fixed value. +- Added [globals.set](/components/globals#globals-set_action) action, + [script.is_running](/components/script#script-is_running_condition) condition, + [for](/automations/actions#for_condition) condition. + +- Custom components can now access ESPHome's global variables. +- Added `restore_mode` for lights and [light.is_on/off](/components/light#light-is_on_condition). + +## Breaking Changes + +All of these are also documented in validation - just view the validation output and it should tell +you what has changed. + +- `esphome_core_version` has been removed - ESPHome is no longer split up in the core and python repository. +- The `esp32_ble_tracker` binary sensor platform (not the global hub) has been renamed to `ble_presence`. +- The remote transmitter switch has been removed and a template switch with the new actions should be used. + See validation output. + +- `esphome_core_version` has been removed - ESPHome is no longer split up in the core and python repository. +- Because of some internal changes, some ID names are used internally and can no longer be used. + See validation errors. + +## Release 1.13.1 - May 30 + +- esphome: Fix validation TypeError [esphome#574](https://github.com/esphome/esphome/pull/574) +- esphome: Fix Sun Trigger [esphome#572](https://github.com/esphome/esphome/pull/572) +- esphome: Dashboard work around Hass.io bug [esphome#575](https://github.com/esphome/esphome/pull/575) +- esphome: Fix waveshare 7.5in model [esphome#576](https://github.com/esphome/esphome/pull/576) + +## Release 1.13.2 - May 31 + +- esphome: Fix remote_receiver binary_sensor schema [esphome#578](https://github.com/esphome/esphome/pull/578) +- esphome: Fix MQTT client_id changed [esphome#579](https://github.com/esphome/esphome/pull/579) +- esphome: Fix Rotary Encoder [esphome#580](https://github.com/esphome/esphome/pull/580) +- esphome: Fix travis build [esphome#582](https://github.com/esphome/esphome/pull/582) +- esphome: Fix MQTT on_message trigger [esphome#583](https://github.com/esphome/esphome/pull/583) +- esphome: Fix light partition [esphome#584](https://github.com/esphome/esphome/pull/584) +- esphome: Fix i2c setup priority [esphome#585](https://github.com/esphome/esphome/pull/585) +- docs: add note for asynchronously update of adc [esphome-docs#259](https://github.com/esphome/esphome-docs/pull/259) by [@escoand](https://github.com/escoand) + +## Release 1.13.3 - June 1 + +- esphome: List the correct boards when building for ESP32 [esphome#589](https://github.com/esphome/esphome/pull/589) by [@macourteau](https://github.com/macourteau) +- esphome: Fix addressable effects [esphome#590](https://github.com/esphome/esphome/pull/590) +- esphome: Fix scripts circular dependency [esphome#591](https://github.com/esphome/esphome/pull/591) +- esphome: Fix timezone detection for timezones without daylight savings time [esphome#586](https://github.com/esphome/esphome/pull/586) +- esphome: Fix remote_receiver binary_sensor [esphome#592](https://github.com/esphome/esphome/pull/592) +- docs: Add missing filter name for ct_clamp [esphome-docs#258](https://github.com/esphome/esphome-docs/pull/258) by [@jesserockz](https://github.com/jesserockz) +- esphome: Fix flicker light effect turning itself off [esphome#594](https://github.com/esphome/esphome/pull/594) +- esphome: Fix medium fan speed [esphome#595](https://github.com/esphome/esphome/pull/595) +- esphome: Fix dashboard for Py3 installs [esphome#596](https://github.com/esphome/esphome/pull/596) + +## Release 1.13.4 - June 3 + +- esphome: Add better esphomeyaml migration path [esphome#600](https://github.com/esphome/esphome/pull/600) +- esphome: Allow old remote_transmitter repeat schema [esphome#601](https://github.com/esphome/esphome/pull/601) +- esphome: Fix color wipe effect [esphome#599](https://github.com/esphome/esphome/pull/599) +- docs: Update integration.rst [esphome-docs#263](https://github.com/esphome/esphome-docs/pull/263) by [@balk77](https://github.com/balk77) +- esphome: Fix hx711 [esphome#602](https://github.com/esphome/esphome/pull/602) +- esphome: Fix validation infinite loop with empty platform block [esphome#598](https://github.com/esphome/esphome/pull/598) +- esphome: Fix ADS1115 calculation [esphome#606](https://github.com/esphome/esphome/pull/606) +- esphome: ESP8266 connect fixes [esphome#605](https://github.com/esphome/esphome/pull/605) + +## Release 1.13.5 - June 8 + +- esphome: Move ESPHome version define [esphome#607](https://github.com/esphome/esphome/pull/607) +- esphome: Fix ForCondition time duration check [esphome#610](https://github.com/esphome/esphome/pull/610) by [@ptatrai](https://github.com/ptatrai) +- docs: Add timezone mapping to Docker compose. [esphome-docs#266](https://github.com/esphome/esphome-docs/pull/266) by [@jeff-h](https://github.com/jeff-h) +- esphome: DHT22 ignore invalid values [esphome#614](https://github.com/esphome/esphome/pull/614) +- esphome: Template Cover don't auto-set current_operation [esphome#612](https://github.com/esphome/esphome/pull/612) +- esphome: Fix Hass.io addon SSL [esphome#613](https://github.com/esphome/esphome/pull/613) +- esphome: Fix remote_receiver always shows sony [esphome#617](https://github.com/esphome/esphome/pull/617) +- esphome: Make ForCondition a component [esphome#616](https://github.com/esphome/esphome/pull/616) +- esphome: Update docker base image to 1.8.0 [esphome#618](https://github.com/esphome/esphome/pull/618) +- esphome: Fix integration sensor, add test [esphome#619](https://github.com/esphome/esphome/pull/619) +- esphome: Fix sun default elevation [esphome#620](https://github.com/esphome/esphome/pull/620) +- esphome: Update base image to 1.8.3 [esphome#625](https://github.com/esphome/esphome/pull/625) +- esphome: Fix status binary sensor for MQTT [esphome#628](https://github.com/esphome/esphome/pull/628) +- esphome: Work around ESP32 BLE issue [esphome#626](https://github.com/esphome/esphome/pull/626) +- esphome: Work around ESP32 core WiFi Bug [esphome#627](https://github.com/esphome/esphome/pull/627) + +## Release 1.13.6 - June 14 + +- docs: Lambas won't just work with the short name [esphome-docs#269](https://github.com/esphome/esphome-docs/pull/269) by [@ryannazaretian](https://github.com/ryannazaretian) +- esphome: Fix ESP32 RCSwitch Dump Stack Smash Protection [esphome#636](https://github.com/esphome/esphome/pull/636) +- esphome: Fix russia timezone detection [esphome#637](https://github.com/esphome/esphome/pull/637) +- esphome: Fix esp8266_restore_from_flash [esphome#638](https://github.com/esphome/esphome/pull/638) +- esphome: Fix globals.set [esphome#635](https://github.com/esphome/esphome/pull/635) +- esphome: Fix version.h file [esphome#630](https://github.com/esphome/esphome/pull/630) +- esphome: Fix remote_receiver raw binary sensor [esphome#639](https://github.com/esphome/esphome/pull/639) +- esphome: Re-add CustomMQTTDevice class [esphome#640](https://github.com/esphome/esphome/pull/640) + +## All changes + +- docs: Extend the documentation of esp8266_restore_from_flash to include pla… [esphome-docs#203](https://github.com/esphome/esphome-docs/pull/203) by [@placidorevilla](https://github.com/placidorevilla) +- esphome: TTP229-LSF i2c device support [esphome#489](https://github.com/esphome/esphome/pull/489) by [@mvturnho](https://github.com/mvturnho) +- docs: TTP229-LSF i2c device support [esphome-docs#205](https://github.com/esphome/esphome-docs/pull/205) by [@mvturnho](https://github.com/mvturnho) +- docs: Remove deprecated filter_nan: option [esphome-docs#214](https://github.com/esphome/esphome-docs/pull/214) by [@davericher](https://github.com/davericher) +- docs: Minor Gramatical fix [esphome-docs#220](https://github.com/esphome/esphome-docs/pull/220) by [@meichthys](https://github.com/meichthys) +- esphome: Add cover position/tilt support [esphome#496](https://github.com/esphome/esphome/pull/496) +- esphome: Add climate support [esphome#502](https://github.com/esphome/esphome/pull/502) +- esphome: Add 'at' time trigger [esphome#493](https://github.com/esphome/esphome/pull/493) +- docs: Stepper combine lambda docs [esphome-docs#223](https://github.com/esphome/esphome-docs/pull/223) by [@AalianKhan](https://github.com/AalianKhan) +- esphome: Simplify coroutine syntax [esphome#503](https://github.com/esphome/esphome/pull/503) +- docs: Added a section for all lambda calls [esphome-docs#222](https://github.com/esphome/esphome-docs/pull/222) by [@AalianKhan](https://github.com/AalianKhan) +- docs: Typo in ESP32 Touch Component [esphome-docs#216](https://github.com/esphome/esphome-docs/pull/216) by [@jcullen86](https://github.com/jcullen86) +- docs: MQTT clean-mqtt: Document for docker [esphome-docs#210](https://github.com/esphome/esphome-docs/pull/210) by [@bphermansson](https://github.com/bphermansson) +- esphome: Wio_link and wio_node pinout improvements [esphome#505](https://github.com/esphome/esphome/pull/505) by [@sethcohn](https://github.com/sethcohn) +- docs: Voltage range of ADC is at the chip pin [esphome-docs#224](https://github.com/esphome/esphome-docs/pull/224) by [@kimonm](https://github.com/kimonm) +- esphome: Escape double quotes and backslashes in ssid and psk [esphome#507](https://github.com/esphome/esphome/pull/507) by [@gitolicious](https://github.com/gitolicious) +- docs: Added Gitpod documentation [esphome-docs#225](https://github.com/esphome/esphome-docs/pull/225) by [@gitolicious](https://github.com/gitolicious) +- docs: Fixed lint and ref errors [esphome-docs#228](https://github.com/esphome/esphome-docs/pull/228) by [@gitolicious](https://github.com/gitolicious) +- esphome: 🏗 Merge C++ into python codebase [esphome#504](https://github.com/esphome/esphome/pull/504) +- docs: Create .gitpod.yml [esphome-docs#226](https://github.com/esphome/esphome-docs/pull/226) by [@gitolicious](https://github.com/gitolicious) +- esphome: Cleanup dashboard JS [esphome#491](https://github.com/esphome/esphome/pull/491) +- docs: Add esp32_camera ttgo-camera example [esphome-docs#231](https://github.com/esphome/esphome-docs/pull/231) by [@Naesstrom](https://github.com/Naesstrom) +- esphome: Hass.io Ingress [esphome#519](https://github.com/esphome/esphome/pull/519) +- docs: Fix config name for showing previous page [esphome-docs#238](https://github.com/esphome/esphome-docs/pull/238) by [@kevinior](https://github.com/kevinior) +- docs: fixed copy paste error [esphome-docs#237](https://github.com/esphome/esphome-docs/pull/237) by [@norges](https://github.com/norges) +- docs: Update switch/index.rst lambda section [esphome-docs#236](https://github.com/esphome/esphome-docs/pull/236) by [@EmmanuelLM](https://github.com/EmmanuelLM) +- docs: Update h801 cookbook [esphome-docs#235](https://github.com/esphome/esphome-docs/pull/235) by [@Eenoo](https://github.com/Eenoo) +- esphome: Create .gitpod.yml [esphome#508](https://github.com/esphome/esphome/pull/508) by [@gitolicious](https://github.com/gitolicious) +- esphome: Fix MQTT Not Working in dev branch [esphome#527](https://github.com/esphome/esphome/pull/527) by [@mtl010957](https://github.com/mtl010957) +- esphome: Fix custom_sensor codegen [esphome#526](https://github.com/esphome/esphome/pull/526) by [@emwap](https://github.com/emwap) +- esphome: Fix compilation of automations [esphome#525](https://github.com/esphome/esphome/pull/525) by [@envy](https://github.com/envy) +- esphome: Add Custom Component tests [esphome#529](https://github.com/esphome/esphome/pull/529) by [@emwap](https://github.com/emwap) +- esphome: Create .editorconfig [esphome#524](https://github.com/esphome/esphome/pull/524) by [@gitolicious](https://github.com/gitolicious) +- docs: Fix minor typo in ESP32 camera docs [esphome-docs#241](https://github.com/esphome/esphome-docs/pull/241) by [@richrd](https://github.com/richrd) +- esphome: Added save & validate button in editor window [esphome#511](https://github.com/esphome/esphome/pull/511) by [@gitolicious](https://github.com/gitolicious) +- esphome: Fix compilation of my9231 component [esphome#533](https://github.com/esphome/esphome/pull/533) by [@puuu](https://github.com/puuu) +- esphome: Allow rx_only mode of sds011 component [esphome#534](https://github.com/esphome/esphome/pull/534) by [@puuu](https://github.com/puuu) +- esphome: MPU6050 fix temperature reading (wrong datatype) [esphome#532](https://github.com/esphome/esphome/pull/532) by [@norges](https://github.com/norges) +- esphome: Check lambdas for return statement [esphome#539](https://github.com/esphome/esphome/pull/539) +- esphome: Auto-Generate esphome.h [esphome#538](https://github.com/esphome/esphome/pull/538) +- esphome: Revert HLW8012 to use pulse counter [esphome#537](https://github.com/esphome/esphome/pull/537) +- esphome: Use int_range validator [esphome#542](https://github.com/esphome/esphome/pull/542) +- esphome: Dashboard editor live validation [esphome#540](https://github.com/esphome/esphome/pull/540) +- esphome: Sun support [esphome#531](https://github.com/esphome/esphome/pull/531) +- esphome: Update CI linter [esphome#544](https://github.com/esphome/esphome/pull/544) +- esphome: Updates for 1.13 [esphome#546](https://github.com/esphome/esphome/pull/546) +- esphome: Make Climate component work over mqtt [esphome#535](https://github.com/esphome/esphome/pull/535) by [@puuu](https://github.com/puuu) +- esphome: CCS811 support [esphome#536](https://github.com/esphome/esphome/pull/536) +- esphome: GPS time source [esphome#543](https://github.com/esphome/esphome/pull/543) +- esphome: TTP229 BSF support [esphome#547](https://github.com/esphome/esphome/pull/547) +- docs: Update links [esphome-docs#243](https://github.com/esphome/esphome-docs/pull/243) by [@oscar-b](https://github.com/oscar-b) +- esphome: Bme680 pressure value fix [esphome#550](https://github.com/esphome/esphome/pull/550) by [@plopp](https://github.com/plopp) +- docs: Fix typo in docs mi flora [esphome-docs#250](https://github.com/esphome/esphome-docs/pull/250) by [@seuros](https://github.com/seuros) +- docs: Stepper component: fix typo in doc [esphome-docs#254](https://github.com/esphome/esphome-docs/pull/254) by [@Johboh](https://github.com/Johboh) +- esphome: Suggested fix for empty domain [esphome#555](https://github.com/esphome/esphome/pull/555) by [@ASMfreaK](https://github.com/ASMfreaK) +- docs: Sensor: correct example for on_raw_value [esphome-docs#255](https://github.com/esphome/esphome-docs/pull/255) by [@Johboh](https://github.com/Johboh) +- docs: Update bh1750.rst (fix incorrect link text) [esphome-docs#246](https://github.com/esphome/esphome-docs/pull/246) by [@richrd](https://github.com/richrd) +- esphome: Don't fall back to the global availability topic if it is empty [esphome#553](https://github.com/esphome/esphome/pull/553) by [@brandond](https://github.com/brandond) +- esphome: Add examples to Nextion page [esphome#548](https://github.com/esphome/esphome/pull/548) by [@AalianKhan](https://github.com/AalianKhan) +- esphome: Support for AM2320 temperature and humidity sensor [esphome#554](https://github.com/esphome/esphome/pull/554) by [@T3m3z](https://github.com/T3m3z) +- docs: Documentation for AM2320 component [esphome-docs#249](https://github.com/esphome/esphome-docs/pull/249) by [@T3m3z](https://github.com/T3m3z) +- esphome: Add TCL112 climate [esphome#523](https://github.com/esphome/esphome/pull/523) by [@glmnet](https://github.com/glmnet) +- docs: Add Coolix Tcl112 Climate [esphome-docs#247](https://github.com/esphome/esphome-docs/pull/247) by [@glmnet](https://github.com/glmnet) +- esphome: Add coolix climate ❄ 🔥 [esphome#521](https://github.com/esphome/esphome/pull/521) by [@glmnet](https://github.com/glmnet) +- esphome: added link from dashboard to web server, if configured [esphome#556](https://github.com/esphome/esphome/pull/556) by [@gitolicious](https://github.com/gitolicious) (cherry-picked) +- esphome: Add NTC and resistance sensor [esphome#560](https://github.com/esphome/esphome/pull/560) (cherry-picked) +- esphome: Waveshare enter deep sleep mode on shutdown [esphome#561](https://github.com/esphome/esphome/pull/561) (cherry-picked) +- docs: extended mpr121 docs with debounce and thresholds config [esphome-docs#245](https://github.com/esphome/esphome-docs/pull/245) by [@mvturnho](https://github.com/mvturnho) (cherry-picked) +- esphome: Mpr121 added debounce and thresholds config [esphome#558](https://github.com/esphome/esphome/pull/558) by [@mvturnho](https://github.com/mvturnho) (cherry-picked) +- docs: Documentation for binary_sensor_map [esphome-docs#199](https://github.com/esphome/esphome-docs/pull/199) by [@mvturnho](https://github.com/mvturnho) (cherry-picked) +- esphome: Binary sensor map implementation [esphome#551](https://github.com/esphome/esphome/pull/551) by [@mvturnho](https://github.com/mvturnho) (cherry-picked) +- esphome: Fix CWWW/RGBWW lights [esphome#562](https://github.com/esphome/esphome/pull/562) (cherry-picked) +- esphome: added download, edit and retry buttons to upload modal [esphome#557](https://github.com/esphome/esphome/pull/557) by [@gitolicious](https://github.com/gitolicious) (cherry-picked) +- esphome: Renamed upload button [esphome#563](https://github.com/esphome/esphome/pull/563) by [@gitolicious](https://github.com/gitolicious) +- esphome: Warn if a component does long-running work in loop thread [esphome#565](https://github.com/esphome/esphome/pull/565) +- esphome: Add CT Clamp component [esphome#559](https://github.com/esphome/esphome/pull/559) by [@jesserockz](https://github.com/jesserockz) +- docs: Add docs for CT Clamp [esphome-docs#256](https://github.com/esphome/esphome-docs/pull/256) by [@jesserockz](https://github.com/jesserockz) +- docs: Put 'MAC_ADDRESS' instead of MAC_ADDRESS [esphome-docs#239](https://github.com/esphome/esphome-docs/pull/239) by [@tiagofreire-pt](https://github.com/tiagofreire-pt) +- esphome: Fix TSL2561 invalid default [esphome#566](https://github.com/esphome/esphome/pull/566) +- esphome: Use copy for custom includes [esphome#568](https://github.com/esphome/esphome/pull/568) +- esphome: Add uart.write action [esphome#567](https://github.com/esphome/esphome/pull/567) +- esphome: Correctly set warm white variables [esphome#569](https://github.com/esphome/esphome/pull/569) by [@jesserockz](https://github.com/jesserockz) +- esphome: Register light conditions [esphome#570](https://github.com/esphome/esphome/pull/570) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.14.0.mdx b/src/content/docs/changelog/v1.14.0.mdx new file mode 100644 index 0000000000..098e7e8548 --- /dev/null +++ b/src/content/docs/changelog/v1.14.0.mdx @@ -0,0 +1,566 @@ +--- +description: "Changelog for ESPHome version 1.14.0." +title: "Changelog - Version 1.14.0 - November 1" +pagefind: false +slug: "changelog/v1.14.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +import { Image } from 'astro:assets'; +import vscodeValidationImg from './images/vscode-validation.png'; +import github1000StarsImg from './images/github-1000-stars.png'; + +{/* markdownlint-disable MD013 */} + +So... it's been a while since the last release... + +But today - november 1 - the wait has finally ended! We're proud to announce ESPHome 1.14, +a release with the most features additions to date thanks to a ton of contributors! + +## Captive Portal + +First, we've heard your feedback in the feature request tracker. One of the highest requested +features has been to add a WiFi captive portal (also called "WiFiManager") capability to ESPHome. + + + +With the new [captive portal](/components/captive_portal/) component you can set up a fallback +WiFi hotspot that gets created if the ESP fails to connect to the WiFi network. If you're creating +a new device this is automatically enabled. To add this feature existing devices check out the +[captive portal example](/components/captive_portal/). + +## VSCode Plugin & New Integrations + +[@glmnet](https://github.com/glmnet) has been very active in the ESPHome community - he not only managed a ton +of bug reports and feature requests, he also implemented some very interesting features: + +- ESPHome now has a working VSCode plugin with live config validation support! + Check out the [ESPHome plugin on the VSCode marketplace](https://marketplace.visualstudio.com/items?itemName=ESPHome.esphome-vscode). + +- The new [SIM800L integration](/components/sim800l/) lets you send SMS and + with [DF-Player](/components/dfplayer/) you can play some music from your ESP 🎵 + + + +Thank you [@glmnet](https://github.com/glmnet) for your work! + +## New Sensors + +As you can see in the grid at the top of this page, there's been no shortage of sensors either! +There are all kinds of new sensor types here: from [lightning detectors ⚡️](/components/sensor/as3935/), +the laser distance measuring [vl53l0x](/components/sensor/vl53l0x/) to various environmental +sensors (thanks [@TheEggi](https://github.com/TheEggi), [@valordk](https://github.com/valordk)!). + +In list of supported power measuring chips has grown a lot with the 3-channel [ATM90E32](/components/sensor/atm90e32/), +various PZEM-004Ts and the power monitoring chip in the [Shelly 2.5](/components/sensor/ade7953/) +(thanks [@thompsa](https://github.com/thompsa) [@tsunglung](https://github.com/tsunglung)!). + +Of course there's a lot more features in this release that didn't fit here anymore. +Just to name a few: new Xiaomi BLE devices are supported, the +[Tuya MCU protocol](/components/light/tuya/) (thanks [@ssieb](https://github.com/ssieb) and [@brandond](https://github.com/brandond)!) has been added and major +architectural parts of the ESPHome native API have changed to allow for faster +development. + +Oh, and before we forget: ESPHome has reached 1.000 stars on GitHub! + + + +As always, thanks to all contributors, bug reporters and patrons! Without you this would not +be possible! + +### Breaking Changes + +- We have deprecated support for Python 2 installs. 1.14.x will still work with Python 2, + but will print a warning. Starting with 1.15.0, ESPHome will require at least Python 3.6. + Note: The Docker/Hass.io addon images already use Python 3 ([esphome#784](https://github.com/esphome/esphome/pull/784), [esphome#774](https://github.com/esphome/esphome/pull/774)). + +- The `xiaomi_` BLE platforms have been renamed to match their model numbers ([esphome#755](https://github.com/esphome/esphome/pull/755)). + + - `xiaomi_mijia` -> [xiaomi_lywsdcgq](/components/sensor/xiaomi_lywsdcgq/) + - `xiaomi_miflora` -> [xiaomi_hhccjcy01](/components/sensor/xiaomi_hhccjcy01/) + +- As part of the addition of the captive portal component, the default `reboot_timeout` for + `wifi` has been increased to 15 minutes from the previous 5 minutes ([esphome#624](https://github.com/esphome/esphome/pull/624)). + +- The ESP32 LEDC `bit_depth` option has been removed. The best bit depth is now dynamically + calculated ([esphome#754](https://github.com/esphome/esphome/pull/754), [docs](/components/output/ledc/)). + +- For [pcf8574](/components/pcf8574/), the `INPUT_PULLUP` option has been removed and replaced + with `INPUT` ([esphome#828](https://github.com/esphome/esphome/pull/828), [docs](/components/pcf8574/)). + +### Release 1.14.1 - November 2 + +- docs: DIY Examples page [esphome-docs#395](https://github.com/esphome/esphome-docs/pull/395) +- esphome: refactored xiaomi ble data parsing [esphome#823](https://github.com/esphome/esphome/pull/823) by [@Alex9779](https://github.com/Alex9779) +- docs: Document UART stop_bits [esphome-docs#396](https://github.com/esphome/esphome-docs/pull/396) +- esphome: Fix wizard mkdir [esphome#824](https://github.com/esphome/esphome/pull/824) +- esphome: Move native API enums to new namespace [esphome#825](https://github.com/esphome/esphome/pull/825) +- esphome: Fix update-all input in dashboard [esphome#826](https://github.com/esphome/esphome/pull/826) +- esphome: Remove PCF8574 input_pullup mode and cleanup [esphome#828](https://github.com/esphome/esphome/pull/828) +- esphome: Add servo missing restore option to codegen [esphome#829](https://github.com/esphome/esphome/pull/829) +- docs: Document missing servo restore option [esphome-docs#398](https://github.com/esphome/esphome-docs/pull/398) + +### Release 1.14.2 - November 3 + +- esphome: Fix weird ESP8266 wifi crashes [esphome#831](https://github.com/esphome/esphome/pull/831) + +### Release 1.14.3 - November 17 + +- docs: Fix typo: as3935 sensor docs [esphome-docs#401](https://github.com/esphome/esphome-docs/pull/401) by [@TheJulianJES](https://github.com/TheJulianJES) +- docs: Remove references to scan_interval [esphome-docs#400](https://github.com/esphome/esphome-docs/pull/400) by [@marrold](https://github.com/marrold) +- esphome: ESP8266 remove default opmode check [esphome#835](https://github.com/esphome/esphome/pull/835) +- esphome: WiFi AP apply manual ip settings [esphome#836](https://github.com/esphome/esphome/pull/836) +- esphome: Fix ESP32 rotary encoder [esphome#834](https://github.com/esphome/esphome/pull/834) +- esphome: Fix homeassistant.service schema lambda [esphome#833](https://github.com/esphome/esphome/pull/833) +- esphome: Update platformio libraries [esphome#837](https://github.com/esphome/esphome/pull/837) +- docs: Update brilliant-mirabella-genio-smart-plugs.rst - Added Gosund… [esphome-docs#402](https://github.com/esphome/esphome-docs/pull/402) by [@Taigar2015](https://github.com/Taigar2015) +- esphome: Update variable in scheduler [esphome#838](https://github.com/esphome/esphome/pull/838) +- esphome: Fix sun calculations for negative sun declination [esphome#839](https://github.com/esphome/esphome/pull/839) +- docs: Update diy.rst [esphome-docs#404](https://github.com/esphome/esphome-docs/pull/404) by [@kvvoff](https://github.com/kvvoff) +- docs: DIY Examples : add Custom ESPHome for Wofea Alarm [esphome-docs#405](https://github.com/esphome/esphome-docs/pull/405) by [@nbergont](https://github.com/nbergont) +- docs: Update Mirabella Genio red LED GPIO [esphome-docs#406](https://github.com/esphome/esphome-docs/pull/406) by [@ankycooper](https://github.com/ankycooper) +- esphome: fix missing checks of is_playing condition [esphome#844](https://github.com/esphome/esphome/pull/844) by [@glmnet](https://github.com/glmnet) +- docs: Update lcd_display.rst [esphome-docs#411](https://github.com/esphome/esphome-docs/pull/411) by [@Destix](https://github.com/Destix) +- esphome: Add wifi output_power setting [esphome#853](https://github.com/esphome/esphome/pull/853) +- esphome: Add missing state attribute [esphome#851](https://github.com/esphome/esphome/pull/851) +- esphome: Fix neopixelbus missing method pins [esphome#848](https://github.com/esphome/esphome/pull/848) +- esphome: Fix sensor force_update native API [esphome#847](https://github.com/esphome/esphome/pull/847) +- esphome: Web server CORS headers [esphome#840](https://github.com/esphome/esphome/pull/840) +- esphome: Check DHT sensor exists before publishing [esphome#850](https://github.com/esphome/esphome/pull/850) +- esphome: Adjust some units [esphome#852](https://github.com/esphome/esphome/pull/852) +- esphome: Fix PZEM004T v2 [esphome#846](https://github.com/esphome/esphome/pull/846) +- esphome: Mark python 3.5 support deprecated [esphome#849](https://github.com/esphome/esphome/pull/849) +- docs: document the new has_position parameter for the template cover [esphome-docs#410](https://github.com/esphome/esphome-docs/pull/410) by [@ssieb](https://github.com/ssieb) +- esphome: add position reporting to the template cover [esphome#821](https://github.com/esphome/esphome/pull/821) by [@ssieb](https://github.com/ssieb) +- esphome: Atm90e32 pf fix [esphome#841](https://github.com/esphome/esphome/pull/841) by [@Diramu](https://github.com/Diramu) +- esphome: Switch to 115200 baud upload if 460800 fails [esphome#856](https://github.com/esphome/esphome/pull/856) +- esphome: Fix logger uart conflict check [esphome#858](https://github.com/esphome/esphome/pull/858) by [@brandond](https://github.com/brandond) +- esphome: Tuya: Fix init sequence and handle wifi test command [esphome#820](https://github.com/esphome/esphome/pull/820) by [@brandond](https://github.com/brandond) +- docs: add Topersun smart plug [esphome-docs#413](https://github.com/esphome/esphome-docs/pull/413) by [@hmoffatt](https://github.com/hmoffatt) +- esphome: Improve WiFi disconnect messages [esphome#857](https://github.com/esphome/esphome/pull/857) +- esphome: Fix MQTT python 3 stringify IPAddress Type [esphome#864](https://github.com/esphome/esphome/pull/864) +- esphome: Revert ESP32 BLE Tracker defaults [esphome#863](https://github.com/esphome/esphome/pull/863) +- esphome: Change ESP8266 default wifi output power [esphome#862](https://github.com/esphome/esphome/pull/862) + +### Release 1.14.4 - June 5 + +- docs: Added Android Beacon MQTT app [esphome-docs#417](https://github.com/esphome/esphome-docs/pull/417) by [@turbo-lab](https://github.com/turbo-lab) +- esphome: fix the problem of missing part of advertising packet when activ… [esphome#868](https://github.com/esphome/esphome/pull/868) by [@warpzone](https://github.com/warpzone) +- docs: dfplayer updates [esphome-docs#421](https://github.com/esphome/esphome-docs/pull/421) by [@glmnet](https://github.com/glmnet) +- docs: Fix time id conflict [esphome-docs#418](https://github.com/esphome/esphome-docs/pull/418) by [@guiguid](https://github.com/guiguid) +- docs: Cookbook for Sonoff Light Switches [esphome-docs#407](https://github.com/esphome/esphome-docs/pull/407) by [@bensuffolk](https://github.com/bensuffolk) +- esphome: fix climate_ir on receive optional [esphome#897](https://github.com/esphome/esphome/pull/897) by [@glmnet](https://github.com/glmnet) +- esphome: Fix MQTT logs Int or String expected Python 3 [esphome#898](https://github.com/esphome/esphome/pull/898) +- esphome: web_server call setup_controller [esphome#899](https://github.com/esphome/esphome/pull/899) +- esphome: Ignore ESP32 Camera unknown framesizes [esphome#901](https://github.com/esphome/esphome/pull/901) +- esphome: Update ESP32 BLE ADV parse to match BLE spec [esphome#904](https://github.com/esphome/esphome/pull/904) +- esphome: Add ESP8266 core v2.6.2 [esphome#905](https://github.com/esphome/esphome/pull/905) +- docs: Add doc for color correction of rgb* lights [esphome-docs#431](https://github.com/esphome/esphome-docs/pull/431) by [@nickw444](https://github.com/nickw444) +- docs: Use .timestamp instead of .time in time docs [esphome-docs#435](https://github.com/esphome/esphome-docs/pull/435) by [@davidjb](https://github.com/davidjb) +- docs: DIY Examples : Added SW420 Vibration Sensor with Remote Notifications [esphome-docs#436](https://github.com/esphome/esphome-docs/pull/436) by [@rmooreID](https://github.com/rmooreID) +- docs: Fix broken link [esphome-docs#437](https://github.com/esphome/esphome-docs/pull/437) by [@richrd](https://github.com/richrd) +- docs: Update getting_started_command_line.rst [esphome-docs#461](https://github.com/esphome/esphome-docs/pull/461) by [@CyanoFresh](https://github.com/CyanoFresh) +- docs: Added degree symbol output on ~ for MAX7219 [esphome-docs#376](https://github.com/esphome/esphome-docs/pull/376) by [@cyberplant](https://github.com/cyberplant) +- docs: change "tracker" to "presence" [esphome-docs#465](https://github.com/esphome/esphome-docs/pull/465) by [@spattinson](https://github.com/spattinson) +- docs: On_sunrise was listed twice in description. [esphome-docs#464](https://github.com/esphome/esphome-docs/pull/464) by [@Mechotronic](https://github.com/Mechotronic) +- docs: Patch 3 [esphome-docs#460](https://github.com/esphome/esphome-docs/pull/460) by [@Valcob](https://github.com/Valcob) +- docs: fixed non working example [esphome-docs#381](https://github.com/esphome/esphome-docs/pull/381) by [@danibjor](https://github.com/danibjor) +- docs: Added my custom component, now with correct syntax [esphome-docs#454](https://github.com/esphome/esphome-docs/pull/454) by [@nldroid](https://github.com/nldroid) +- docs: faq reboot_timeout [esphome-docs#472](https://github.com/esphome/esphome-docs/pull/472) by [@glmnet](https://github.com/glmnet) +- docs: my9231->bit_depth: parameter name and sonoff B1 [esphome-docs#489](https://github.com/esphome/esphome-docs/pull/489) by [@anduchs](https://github.com/anduchs) +- docs: New DIY project about Cat Feeder [esphome-docs#439](https://github.com/esphome/esphome-docs/pull/439) by [@rubengargar](https://github.com/rubengargar) +- docs: Update diy.rst [esphome-docs#493](https://github.com/esphome/esphome-docs/pull/493) by [@brianhanifin](https://github.com/brianhanifin) +- docs: Add my ESPHome configs [esphome-docs#492](https://github.com/esphome/esphome-docs/pull/492) by [@nuttytree](https://github.com/nuttytree) +- docs: Brightness feature not included in doc. [esphome-docs#445](https://github.com/esphome/esphome-docs/pull/445) by [@tubalainen](https://github.com/tubalainen) +- docs: remove apostrophe [esphome-docs#504](https://github.com/esphome/esphome-docs/pull/504) by [@perjury](https://github.com/perjury) +- docs: Add UART-based Mitsibishi HeatPump Component [esphome-docs#506](https://github.com/esphome/esphome-docs/pull/506) by [@geoffdavis](https://github.com/geoffdavis) +- docs: Update pzemac.rst [esphome-docs#495](https://github.com/esphome/esphome-docs/pull/495) by [@Francisk0](https://github.com/Francisk0) +- docs: Fix link syntax [esphome-docs#507](https://github.com/esphome/esphome-docs/pull/507) by [@geoffdavis](https://github.com/geoffdavis) +- docs: Typo fix [esphome-docs#498](https://github.com/esphome/esphome-docs/pull/498) by [@napieraj](https://github.com/napieraj) +- docs: Fix some typos in Sonoff basic light switch [esphome-docs#480](https://github.com/esphome/esphome-docs/pull/480) by [@kaykayehnn](https://github.com/kaykayehnn) +- docs: Wrong IC [esphome-docs#499](https://github.com/esphome/esphome-docs/pull/499) by [@Tuckie](https://github.com/Tuckie) +- docs: small mistype fix [esphome-docs#477](https://github.com/esphome/esphome-docs/pull/477) by [@trylika](https://github.com/trylika) +- docs: Update sonoff.rst [esphome-docs#470](https://github.com/esphome/esphome-docs/pull/470) by [@TBobsin](https://github.com/TBobsin) +- docs: Update sonoff-t1-3.rst [esphome-docs#497](https://github.com/esphome/esphome-docs/pull/497) by [@RockBomber](https://github.com/RockBomber) +- docs: remove uppercase allowed in names [esphome-docs#487](https://github.com/esphome/esphome-docs/pull/487) by [@truglodite](https://github.com/truglodite) +- docs: Update ssd1306.rst [esphome-docs#481](https://github.com/esphome/esphome-docs/pull/481) by [@Valcob](https://github.com/Valcob) +- docs: Update board for Sonoff and link to Tasmota [esphome-docs#484](https://github.com/esphome/esphome-docs/pull/484) by [@sillyfrog](https://github.com/sillyfrog) +- docs: Update migrate_sonoff_tasmota.rst [esphome-docs#483](https://github.com/esphome/esphome-docs/pull/483) by [@jasonehines](https://github.com/jasonehines) +- docs: added rgbww light using pwm driver [esphome-docs#482](https://github.com/esphome/esphome-docs/pull/482) by [@morph027](https://github.com/morph027) +- docs: add a note about the log level of dump: all [esphome-docs#475](https://github.com/esphome/esphome-docs/pull/475) by [@drewp](https://github.com/drewp) +- docs: ifan02 cookbook [esphome-docs#218](https://github.com/esphome/esphome-docs/pull/218) by [@quazzie](https://github.com/quazzie) +- docs: Add documentation for cwww and rgbww constant_brightness variables. [esphome-docs#530](https://github.com/esphome/esphome-docs/pull/530) by [@kroimon](https://github.com/kroimon) +- docs: remove link to Adafruit [esphome-docs#531](https://github.com/esphome/esphome-docs/pull/531) by [@ebaschiera](https://github.com/ebaschiera) +- docs: Revert "Add documentation for cwww and rgbww constant_brightness vari… [esphome-docs#539](https://github.com/esphome/esphome-docs/pull/539) by [@glmnet](https://github.com/glmnet) +- docs: Add Stepper Motor blinds to diy examples [esphome-docs#534](https://github.com/esphome/esphome-docs/pull/534) by [@icarome](https://github.com/icarome) +- docs: Update sonoff.rst [esphome-docs#549](https://github.com/esphome/esphome-docs/pull/549) by [@MrZetor](https://github.com/MrZetor) +- docs: Improve LEDC documentation [esphome-docs#557](https://github.com/esphome/esphome-docs/pull/557) by [@Skaronator](https://github.com/Skaronator) +- docs: Update wifi.rst [esphome-docs#562](https://github.com/esphome/esphome-docs/pull/562) by [@kbouchard111](https://github.com/kbouchard111) +- docs: Add unit_of_measurement to make graphing happens [esphome-docs#569](https://github.com/esphome/esphome-docs/pull/569) by [@deftdawg](https://github.com/deftdawg) +- docs: Simple grammar change. [esphome-docs#578](https://github.com/esphome/esphome-docs/pull/578) by [@mnaz](https://github.com/mnaz) +- docs: Fix typos [esphome-docs#561](https://github.com/esphome/esphome-docs/pull/561) by [@mje-nz](https://github.com/mje-nz) +- docs: Adding example of how to use a buzzer [esphome-docs#570](https://github.com/esphome/esphome-docs/pull/570) by [@declanshanaghy](https://github.com/declanshanaghy) +- docs: Deleted Warning because the component is already tested [esphome-docs#615](https://github.com/esphome/esphome-docs/pull/615) by [@deltazerorsan](https://github.com/deltazerorsan) +- docs: Update datasheet URL on SHTCX page [esphome-docs#598](https://github.com/esphome/esphome-docs/pull/598) by [@JeffResc](https://github.com/JeffResc) +- docs: Update datagram URL on TX20 page [esphome-docs#599](https://github.com/esphome/esphome-docs/pull/599) by [@JeffResc](https://github.com/JeffResc) +- docs: Update datasheet URL on SCD30 page [esphome-docs#600](https://github.com/esphome/esphome-docs/pull/600) by [@JeffResc](https://github.com/JeffResc) +- docs: Update datasheet URL on STS3X page [esphome-docs#602](https://github.com/esphome/esphome-docs/pull/602) by [@JeffResc](https://github.com/JeffResc) +- docs: Update datasheet URL on SGP30 page [esphome-docs#601](https://github.com/esphome/esphome-docs/pull/601) by [@JeffResc](https://github.com/JeffResc) +- docs: Update Home Assistant custom component URL on contributing guide page [esphome-docs#603](https://github.com/esphome/esphome-docs/pull/603) by [@JeffResc](https://github.com/JeffResc) +- docs: Update WaveShare E-Paper URL on WaveShare E-Paper page [esphome-docs#597](https://github.com/esphome/esphome-docs/pull/597) by [@JeffResc](https://github.com/JeffResc) +- docs: Fix copy/paste error [esphome-docs#574](https://github.com/esphome/esphome-docs/pull/574) by [@mniess](https://github.com/mniess) +- docs: Update pulse_counter.rst [esphome-docs#609](https://github.com/esphome/esphome-docs/pull/609) by [@m1ch](https://github.com/m1ch) +- docs: Add smart intercom blogpost [esphome-docs#621](https://github.com/esphome/esphome-docs/pull/621) by [@frog32](https://github.com/frog32) +- docs: Minor spelling [esphome-docs#622](https://github.com/esphome/esphome-docs/pull/622) by [@AalianKhan](https://github.com/AalianKhan) +- docs: Added NEO Coolcam [esphome-docs#496](https://github.com/esphome/esphome-docs/pull/496) by [@nldroid](https://github.com/nldroid) +- docs: pzemac energy support [esphome-docs#514](https://github.com/esphome/esphome-docs/pull/514) by [@rradar](https://github.com/rradar) +- docs: Revert "pzemac energy support" [esphome-docs#623](https://github.com/esphome/esphome-docs/pull/623) by [@glmnet](https://github.com/glmnet) +- docs: Changed miflora platforms [esphome-docs#586](https://github.com/esphome/esphome-docs/pull/586) by [@Guyohms](https://github.com/Guyohms) +- docs: Update docs to reflect ssd1327 support [esphome-docs#500](https://github.com/esphome/esphome-docs/pull/500) by [@igg](https://github.com/igg) +- docs: Typo: NEC -> Sony [esphome-docs#624](https://github.com/esphome/esphome-docs/pull/624) by [@gitolicious](https://github.com/gitolicious) +- docs: Not every nodeMCU board supports 12V [esphome-docs#626](https://github.com/esphome/esphome-docs/pull/626) by [@Laess3r](https://github.com/Laess3r) +- docs: Revert "Update docs to reflect ssd1327 support" [esphome-docs#634](https://github.com/esphome/esphome-docs/pull/634) by [@glmnet](https://github.com/glmnet) + +### Notable Changes & New Features + +- Dashboard Interface: Add an "Update all" button ([esphome#615](https://github.com/esphome/esphome/pull/615)). +- Uploads over USB are now about 4 times faster ([esphome#761](https://github.com/esphome/esphome/pull/761)). +- [ESPHome-Flasher v1.2.0](https://github.com/esphome/esphome-flasher/releases/tag/v1.2.0) has been + released with fixes for ESP32s and faster uploads. + +- All [native API](/components/api/) communication stubs are now automatically + generated using automated scripts. This is a big step towards making the API more flexible, for + example cross-device communication ([esphome#633](https://github.com/esphome/esphome/pull/633)). + +- New class to declare user-defined services straight from custom components. + See the updated custom component guide. + +- [Sensors](/components/sensor) have a new `force_update` option ([esphome#783](https://github.com/esphome/esphome/pull/783)). +- Add GPIO Switch [interlock_wait_time](/components/switch/gpio#switch-gpio-interlocking) ([esphome#777](https://github.com/esphome/esphome/pull/777)). +- Add a configurable priority for WiFi network selection ([esphome#658](https://github.com/esphome/esphome/pull/658), [docs](/components/wifi/)). +- Add [script.wait](/components/script#script-wait_action) action ([esphome#778](https://github.com/esphome/esphome/pull/778)). +- Dashboard Interface: Add an interface for editing `secrets.yaml` ([esphome#672](https://github.com/esphome/esphome/pull/672) by [@Anonym-tsk](https://github.com/Anonym-tsk)). +- Dashboard Interface: Authorization by username and password for non-Hass.io installs + ([esphome#668](https://github.com/esphome/esphome/pull/668) by [@Anonym-tsk](https://github.com/Anonym-tsk)). + +- Dashboard Interface: The material icons font is now shipped with ESPHome + ([esphome#703](https://github.com/esphome/esphome/pull/703) by [@Anonym-tsk](https://github.com/Anonym-tsk)). + +- Add [output.ledc.set_frequency](/components/output/ledc#output-ledc-set_frequency_action) action ([esphome#754](https://github.com/esphome/esphome/pull/754)). +- Changing from an effect to a static color for addressable light now + has per-LED transitions ([esphome#750](https://github.com/esphome/esphome/pull/750)). + +- Add [rotary_encoder.set_value](/components/sensor/rotary_encoder#sensor-rotary_encoder-set_value_action) action ([esphome#747](https://github.com/esphome/esphome/pull/747)). +- You can now specify per-device descriptions in the dashboard interface + ([esphome#707](https://github.com/esphome/esphome/pull/707) by [@Anonym-tsk](https://github.com/Anonym-tsk), [docs](/components/esphome/)). + +- The [SPI bus](/components/spi/) now sends data over the hardware SPI bus if possible. + This can result in significant speedups for displays ([esphome#623](https://github.com/esphome/esphome/pull/623)). + +- Add `delayed_on_off` binary_sensor filter ([esphome#700](https://github.com/esphome/esphome/pull/700) by [@kepten](https://github.com/kepten), + [docs](/components/sensor#sensor-filters)). + +- Implement `median` sensor filter ([esphome#697](https://github.com/esphome/esphome/pull/697) by [@jvanderneutstulen](https://github.com/jvanderneutstulen), + [docs](/components/sensor#sensor-filters)). + +- A function scheduler now handles all of ESPHome's timeout/interval calls, replacing the + previous per-component implementation ([esphome#609](https://github.com/esphome/esphome/pull/609)). + +- Add support for calibrating MH-Z19 sensors ([esphome#683](https://github.com/esphome/esphome/pull/683) by [@Anonym-tsk](https://github.com/Anonym-tsk), [docs](/components/sensor/mhz19/)). +- Add BLE scan parameters for improving BLE detection percentage + ([esphome#769](https://github.com/esphome/esphome/pull/769), [docs](/components/esp32_ble_tracker/)). + +- Add configurable ignore bits to rc_switch_raw codes ([esphome#650](https://github.com/esphome/esphome/pull/650) by [@mtl010957](https://github.com/mtl010957), + [docs](/components/remote_receiver/)). + +- New `restore` option has been added to [servos](/components/servo/) ([esphome#829](https://github.com/esphome/esphome/pull/829)). +- Add IR receiver support for coolix climate devices ([esphome#645](https://github.com/esphome/esphome/pull/645) by [@glmnet](https://github.com/glmnet), [docs](/components/climate/climate_ir/)). +- Add [calibrate_polynomial](/components/sensor/filter/calibrate_polynomial#sensor-filter-calibrate_polynomial) sensor filter ([esphome#642](https://github.com/esphome/esphome/pull/642)). +- Allow setting the initial mode of HLW8012 sensors ([esphome#611](https://github.com/esphome/esphome/pull/611) by [@brandond](https://github.com/brandond), [docs](/components/sensor/hlw8012/)). +- Add tilt actions to [template cover](/components/cover/template/) ([esphome#577](https://github.com/esphome/esphome/pull/577) by [@mtl010957](https://github.com/mtl010957)). +- Add backlight handling for lcd_pcf8574 ([esphome#573](https://github.com/esphome/esphome/pull/573) by [@adarazs](https://github.com/adarazs), [docs](/components/display/lcd_display/)). + +### All changes + +- esphome: CLI show version better [esphome#581](https://github.com/esphome/esphome/pull/581) +- esphome: SM16716 support [esphome#541](https://github.com/esphome/esphome/pull/541) +- docs: Add documentation for SM16716 output component. [esphome-docs#217](https://github.com/esphome/esphome-docs/pull/217) by [@kll](https://github.com/kll) +- docs: Document the backlight control for lcd_pcf8574 [esphome-docs#261](https://github.com/esphome/esphome-docs/pull/261) by [@adarazs](https://github.com/adarazs) +- esphome: Add backlight handling for lcd_pcf8574 [esphome#573](https://github.com/esphome/esphome/pull/573) by [@adarazs](https://github.com/adarazs) (new-feature) +- esphome: clear and disable editor while fetching contents [esphome#603](https://github.com/esphome/esphome/pull/603) by [@gitolicious](https://github.com/gitolicious) +- esphome: Scan length for AddressableScanEffect [esphome#608](https://github.com/esphome/esphome/pull/608) by [@majorpeter](https://github.com/majorpeter) (new-feature) +- docs: Scaneffectlength [esphome-docs#264](https://github.com/esphome/esphome-docs/pull/264) by [@majorpeter](https://github.com/majorpeter) +- esphome: Fix ForCondition time duration check [esphome#610](https://github.com/esphome/esphome/pull/610) by [@ptatrai](https://github.com/ptatrai) (cherry-picked) +- esphome: DHT22 ignore invalid values [esphome#614](https://github.com/esphome/esphome/pull/614) (cherry-picked) +- esphome: Template Cover don't auto-set current_operation [esphome#612](https://github.com/esphome/esphome/pull/612) (cherry-picked) +- esphome: Fix Hass.io addon SSL [esphome#613](https://github.com/esphome/esphome/pull/613) (cherry-picked) +- esphome: Fix remote_receiver always shows sony [esphome#617](https://github.com/esphome/esphome/pull/617) (cherry-picked) +- esphome: Make ForCondition a component [esphome#616](https://github.com/esphome/esphome/pull/616) (cherry-picked) +- esphome: Update docker base image to 1.8.0 [esphome#618](https://github.com/esphome/esphome/pull/618) (cherry-picked) +- esphome: Fix integration sensor, add test [esphome#619](https://github.com/esphome/esphome/pull/619) (cherry-picked) +- esphome: Fix sun default elevation [esphome#620](https://github.com/esphome/esphome/pull/620) (cherry-picked) +- esphome: Allow setting the initial mode of HLW8012 sensors [esphome#611](https://github.com/esphome/esphome/pull/611) by [@brandond](https://github.com/brandond) (new-feature) +- docs: Allow setting the initial mode of HLW8012 sensors [esphome-docs#268](https://github.com/esphome/esphome-docs/pull/268) by [@brandond](https://github.com/brandond) +- esphome: Add more efficient SPI implementation [esphome#622](https://github.com/esphome/esphome/pull/622) +- esphome: Allow id() syntax for custom code [esphome#621](https://github.com/esphome/esphome/pull/621) +- esphome: Dashboard Update all button [esphome#615](https://github.com/esphome/esphome/pull/615) (new-feature) +- esphome: Add central function scheduler [esphome#609](https://github.com/esphome/esphome/pull/609) +- esphome: Update base image to 1.8.3 [esphome#625](https://github.com/esphome/esphome/pull/625) (cherry-picked) +- esphome: Fix status binary sensor for MQTT [esphome#628](https://github.com/esphome/esphome/pull/628) (cherry-picked) +- esphome: Work around ESP32 BLE issue [esphome#626](https://github.com/esphome/esphome/pull/626) (cherry-picked) +- esphome: Work around ESP32 core WiFi Bug [esphome#627](https://github.com/esphome/esphome/pull/627) (cherry-picked) +- esphome: Add HW SPI support [esphome#623](https://github.com/esphome/esphome/pull/623) (new-feature) +- esphome: Captive Portal [esphome#624](https://github.com/esphome/esphome/pull/624) (breaking-change) +- esphome: Fix ESP32 RCSwitch Dump Stack Smash Protection [esphome#636](https://github.com/esphome/esphome/pull/636) (cherry-picked) +- esphome: Fix russia timezone detection [esphome#637](https://github.com/esphome/esphome/pull/637) (cherry-picked) +- esphome: Fix globals.set [esphome#635](https://github.com/esphome/esphome/pull/635) (cherry-picked) +- esphome: Fix version.h file [esphome#630](https://github.com/esphome/esphome/pull/630) (cherry-picked) +- esphome: Fix remote_receiver raw binary sensor [esphome#639](https://github.com/esphome/esphome/pull/639) (cherry-picked) +- esphome: Re-add CustomMQTTDevice class [esphome#640](https://github.com/esphome/esphome/pull/640) (cherry-picked) +- esphome: Yashima climate new component [esphome#634](https://github.com/esphome/esphome/pull/634) by [@diraimondo](https://github.com/diraimondo) +- docs: Add Yashima Climate component docs [esphome-docs#275](https://github.com/esphome/esphome-docs/pull/275) by [@diraimondo](https://github.com/diraimondo) +- esphome: Fix home assistant binary sensor initial state [esphome#632](https://github.com/esphome/esphome/pull/632) by [@glmnet](https://github.com/glmnet) +- esphome: Atmel M90E32AS Energy Metering IC. Found in CircuitSetup 2chan and 6chan energy meterss [esphome#629](https://github.com/esphome/esphome/pull/629) by [@thompsa](https://github.com/thompsa) +- docs: Add docs for atm90e32 sensor [esphome-docs#271](https://github.com/esphome/esphome-docs/pull/271) by [@thompsa](https://github.com/thompsa) +- esphome: Add set_threshold and get_value methods to ESP32TouchBinarySensor. [esphome#631](https://github.com/esphome/esphome/pull/631) by [@rnauber](https://github.com/rnauber) +- esphome: Make logger string memory usage more efficient [esphome#641](https://github.com/esphome/esphome/pull/641) +- docs: Add SIM800L docs [esphome-docs#257](https://github.com/esphome/esphome-docs/pull/257) by [@glmnet](https://github.com/glmnet) +- esphome: SMS Sender / Receiver [esphome#522](https://github.com/esphome/esphome/pull/522) by [@glmnet](https://github.com/glmnet) +- esphome: Create Protobuf Plugin for automatically generating native API stubs [esphome#633](https://github.com/esphome/esphome/pull/633) +- esphome: Template tilt cover [esphome#577](https://github.com/esphome/esphome/pull/577) by [@mtl010957](https://github.com/mtl010957) (new-feature) +- esphome: Provide the lights current color to the addressable_lambda_effect. [esphome#646](https://github.com/esphome/esphome/pull/646) by [@rnauber](https://github.com/rnauber) +- docs: Update sun.rst [esphome-docs#278](https://github.com/esphome/esphome-docs/pull/278) by [@pove](https://github.com/pove) +- esphome: Fixed rc_switch dump off by one bit [esphome#652](https://github.com/esphome/esphome/pull/652) by [@mtl010957](https://github.com/mtl010957) +- esphome: Adding ignore bits to narrow compare of received codes [esphome#650](https://github.com/esphome/esphome/pull/650) by [@mtl010957](https://github.com/mtl010957) (new-feature) +- esphome: Fix remote_transmitter wait time unit [esphome#654](https://github.com/esphome/esphome/pull/654) +- esphome: Update dependencies [esphome#653](https://github.com/esphome/esphome/pull/653) +- esphome: CT Clamp ADS1115 Improvements [esphome#647](https://github.com/esphome/esphome/pull/647) +- esphome: Add calibrate_polynomial sensor filter [esphome#642](https://github.com/esphome/esphome/pull/642) (new-feature) +- esphome: WIP: ESP8266 work on connection issues [esphome#648](https://github.com/esphome/esphome/pull/648) +- docs: Added docs for ignore bit setting on rc_switch_raw and fixed ref links [esphome-docs#279](https://github.com/esphome/esphome-docs/pull/279) by [@mtl010957](https://github.com/mtl010957) +- docs: Absolute humidity calculation description [esphome-docs#283](https://github.com/esphome/esphome-docs/pull/283) by [@tomlut](https://github.com/tomlut) +- docs: ZyAura CO2 / Temperature / Humidity Sensor [esphome-docs#281](https://github.com/esphome/esphome-docs/pull/281) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: ZyAura CO2 / Temperature / Humidity Sensor [esphome#656](https://github.com/esphome/esphome/pull/656) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Fix deep sleep on_shutdown hooks [esphome#660](https://github.com/esphome/esphome/pull/660) +- esphome: ESP32 Use NVS directly [esphome#659](https://github.com/esphome/esphome/pull/659) +- docs: Added TX20/TX23 sensor documentation [esphome-docs#150](https://github.com/esphome/esphome-docs/pull/150) by [@TheEggi](https://github.com/TheEggi) +- esphome: added tx20 wind speed sensor [esphome#275](https://github.com/esphome/esphome/pull/275) by [@TheEggi](https://github.com/TheEggi) +- docs: Added docs for tilt capability in template cover [esphome-docs#260](https://github.com/esphome/esphome-docs/pull/260) by [@mtl010957](https://github.com/mtl010957) +- docs: Add description next to title [esphome-docs#227](https://github.com/esphome/esphome-docs/pull/227) by [@jjok](https://github.com/jjok) +- esphome: WiFi networks priority [esphome#658](https://github.com/esphome/esphome/pull/658) (new-feature) +- esphome: Change ESP32 default power_save_mode to light [esphome#661](https://github.com/esphome/esphome/pull/661) +- docs: Added TTGO T-Journal [esphome-docs#289](https://github.com/esphome/esphome-docs/pull/289) by [@bwente](https://github.com/bwente) +- docs: Updated confusing deep_sleep.prevent documentation [esphome-docs#287](https://github.com/esphome/esphome-docs/pull/287) by [@ofalvai](https://github.com/ofalvai) +- docs: Fix typo in transmit_sony documentation [esphome-docs#299](https://github.com/esphome/esphome-docs/pull/299) by [@davericher](https://github.com/davericher) +- esphome: Restore sending "None" effect type [esphome#667](https://github.com/esphome/esphome/pull/667) by [@tribut](https://github.com/tribut) +- esphome: fix missing schedule call [esphome#690](https://github.com/esphome/esphome/pull/690) by [@glmnet](https://github.com/glmnet) +- docs: Update logger.rst [esphome-docs#313](https://github.com/esphome/esphome-docs/pull/313) by [@srg74](https://github.com/srg74) +- esphome: Remove double publish_state in ultrasonic sensor [esphome#696](https://github.com/esphome/esphome/pull/696) by [@brandond](https://github.com/brandond) +- esphome: Local Material Icons [esphome#703](https://github.com/esphome/esphome/pull/703) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Corrected ESP32 hardware UART pins [esphome#701](https://github.com/esphome/esphome/pull/701) by [@jwozny](https://github.com/jwozny) +- esphome: Fix mqtt_text_sensor to honor unique_id when set. [esphome#698](https://github.com/esphome/esphome/pull/698) by [@middelink](https://github.com/middelink) +- docs: Minor changes to the setup steps [esphome-docs#327](https://github.com/esphome/esphome-docs/pull/327) by [@fabaff](https://github.com/fabaff) +- esphome: Fix duplicate set_update_interval() calls on same component [esphome#693](https://github.com/esphome/esphome/pull/693) by [@middelink](https://github.com/middelink) +- esphome: MH-Z19 calibration support [esphome#683](https://github.com/esphome/esphome/pull/683) by [@Anonym-tsk](https://github.com/Anonym-tsk) (new-feature) +- esphome: Implement median filter [esphome#697](https://github.com/esphome/esphome/pull/697) by [@jvanderneutstulen](https://github.com/jvanderneutstulen) (new-feature) +- docs: Median filter [esphome-docs#319](https://github.com/esphome/esphome-docs/pull/319) by [@jvanderneutstulen](https://github.com/jvanderneutstulen) +- docs: MH-Z19 calibration support [esphome-docs#312](https://github.com/esphome/esphome-docs/pull/312) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Update names [esphome-docs#326](https://github.com/esphome/esphome-docs/pull/326) by [@fabaff](https://github.com/fabaff) +- docs: Fix header level [esphome-docs#325](https://github.com/esphome/esphome-docs/pull/325) by [@fabaff](https://github.com/fabaff) +- docs: 7.50in waveshare e-paper works [esphome-docs#321](https://github.com/esphome/esphome-docs/pull/321) by [@rafl](https://github.com/rafl) +- docs: Fix api.proto url [esphome-docs#310](https://github.com/esphome/esphome-docs/pull/310) by [@pstuifzand](https://github.com/pstuifzand) +- esphome: add xiaomi BLE Thermometer lywsd02 model support [esphome#664](https://github.com/esphome/esphome/pull/664) by [@junnikokuki](https://github.com/junnikokuki) +- docs: Add Sonoff Mini to 'Generic Sonoff' page [esphome-docs#320](https://github.com/esphome/esphome-docs/pull/320) by [@Infinitte](https://github.com/Infinitte) +- esphome: Fix GPS time source. [esphome#704](https://github.com/esphome/esphome/pull/704) +- docs: Add configuration example for TTGO T-Camera v1.7 [esphome-docs#318](https://github.com/esphome/esphome-docs/pull/318) by [@erichiller](https://github.com/erichiller) +- esphome: License for Material Design Icons [esphome#708](https://github.com/esphome/esphome/pull/708) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: LYWSD02 [esphome-docs#292](https://github.com/esphome/esphome-docs/pull/292) by [@G1K](https://github.com/G1K) +- esphome: add time based cover, has built in endstop [esphome#665](https://github.com/esphome/esphome/pull/665) by [@glmnet](https://github.com/glmnet) (new-feature) +- esphome: Add delayed_on_off binary_sensor filter [esphome#700](https://github.com/esphome/esphome/pull/700) by [@kepten](https://github.com/kepten) (new-feature) +- docs: Add doc for delayed_on_off binary_sensor filter [esphome-docs#324](https://github.com/esphome/esphome-docs/pull/324) by [@kepten](https://github.com/kepten) +- esphome: fix wifi info [esphome#709](https://github.com/esphome/esphome/pull/709) by [@glmnet](https://github.com/glmnet) +- docs: Add description of id Parameter [esphome-docs#329](https://github.com/esphome/esphome-docs/pull/329) by [@guptamp](https://github.com/guptamp) +- esphome: fix integration sensor [esphome#711](https://github.com/esphome/esphome/pull/711) by [@glmnet](https://github.com/glmnet) +- esphome: Add support for Sensirion SCD30 CO2 sensors [esphome#712](https://github.com/esphome/esphome/pull/712) by [@valordk](https://github.com/valordk) +- docs: Add documentation for Sensirion SCD30 CO2 sensors [esphome-docs#333](https://github.com/esphome/esphome-docs/pull/333) by [@valordk](https://github.com/valordk) +- esphome: Fixes sim800l [esphome#678](https://github.com/esphome/esphome/pull/678) by [@glmnet](https://github.com/glmnet) +- docs: Update esp32_camera.rst jpeg quality [esphome-docs#332](https://github.com/esphome/esphome-docs/pull/332) by [@glogiotatidis](https://github.com/glogiotatidis) +- docs: add has_built_in_endstop docs [esphome-docs#302](https://github.com/esphome/esphome-docs/pull/302) by [@glmnet](https://github.com/glmnet) +- docs: Update incorrect GPIO pin for Mirabella Genio Cold + Warm White… [esphome-docs#337](https://github.com/esphome/esphome-docs/pull/337) by [@epetousis](https://github.com/epetousis) +- esphome: Use default format to render FloatLiteral [esphome#717](https://github.com/esphome/esphome/pull/717) by [@fritzm](https://github.com/fritzm) +- esphome: Add coolix receiver [esphome#645](https://github.com/esphome/esphome/pull/645) by [@glmnet](https://github.com/glmnet) (new-feature) +- docs: add coolix receiver [esphome-docs#288](https://github.com/esphome/esphome-docs/pull/288) by [@glmnet](https://github.com/glmnet) +- esphome: Fix [issues#658](https://github.com/esphome/issues/issues/658) [esphome#724](https://github.com/esphome/esphome/pull/724) by [@fake-name](https://github.com/fake-name) +- docs: Update hdc1080.rst [esphome-docs#343](https://github.com/esphome/esphome-docs/pull/343) by [@magnusja](https://github.com/magnusja) +- esphome: Update MANIFEST.in to fix esphome/issues#650 [esphome#733](https://github.com/esphome/esphome/pull/733) by [@shbatm](https://github.com/shbatm) +- docs: Fix link to light-is_on_condition [esphome-docs#345](https://github.com/esphome/esphome-docs/pull/345) by [@myplacedk](https://github.com/myplacedk) +- esphome: fixes samsung ir [esphome#738](https://github.com/esphome/esphome/pull/738) by [@glmnet](https://github.com/glmnet) +- esphome: Allow 64 bit codes and add nexa remote support. [esphome#662](https://github.com/esphome/esphome/pull/662) by [@abmantis](https://github.com/abmantis) (new-feature) +- docs: Fix, optimize mijia [esphome-docs#293](https://github.com/esphome/esphome-docs/pull/293) by [@G1K](https://github.com/G1K) +- esphome: AS3935 Lightning sensor [esphome#666](https://github.com/esphome/esphome/pull/666) by [@TheEggi](https://github.com/TheEggi) +- esphome: Full height log window [esphome#673](https://github.com/esphome/esphome/pull/673) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Make it clearer that only one deep sleep component is allowed. [esphome-docs#303](https://github.com/esphome/esphome-docs/pull/303) by [@jeff-h](https://github.com/jeff-h) +- esphome: Secrets editor [esphome#672](https://github.com/esphome/esphome/pull/672) by [@Anonym-tsk](https://github.com/Anonym-tsk) (new-feature) +- esphome: Authorization by username and password [esphome#668](https://github.com/esphome/esphome/pull/668) by [@Anonym-tsk](https://github.com/Anonym-tsk) (new-feature) +- esphome: Basic Auth for web_server component [esphome#674](https://github.com/esphome/esphome/pull/674) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Basic Auth for web_server component [esphome-docs#304](https://github.com/esphome/esphome-docs/pull/304) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Improve SHT3xD reconnect handling [esphome#675](https://github.com/esphome/esphome/pull/675) by [@valordk](https://github.com/valordk) +- docs: Fix description of the sensor [esphome-docs#309](https://github.com/esphome/esphome-docs/pull/309) by [@mpettitt](https://github.com/mpettitt) +- esphome: Device description in dashboard [esphome#707](https://github.com/esphome/esphome/pull/707) by [@Anonym-tsk](https://github.com/Anonym-tsk) (new-feature) +- docs: Device description in dashboard [esphome-docs#335](https://github.com/esphome/esphome-docs/pull/335) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: support for the sx1509 i2c device [esphome#651](https://github.com/esphome/esphome/pull/651) by [@mvturnho](https://github.com/mvturnho) +- esphome: Add support for TI TLC59208F [esphome#718](https://github.com/esphome/esphome/pull/718) by [@tamisoft](https://github.com/tamisoft) +- docs: ADD TLC59208F documentation [esphome-docs#338](https://github.com/esphome/esphome-docs/pull/338) by [@tamisoft](https://github.com/tamisoft) +- docs: Add Xiaomi Cleargrass Sensor Documentation [esphome-docs#346](https://github.com/esphome/esphome-docs/pull/346) by [@sermayoral](https://github.com/sermayoral) +- esphome: Add Xiaomi Cleargrass Temperature and Humidity Sensor [esphome#735](https://github.com/esphome/esphome/pull/735) by [@sermayoral](https://github.com/sermayoral) +- docs: The 4.20in display works fine [esphome-docs#359](https://github.com/esphome/esphome-docs/pull/359) by [@fredrike](https://github.com/fredrike) +- docs: Update sonoff.rst [esphome-docs#341](https://github.com/esphome/esphome-docs/pull/341) by [@ZabojnikM](https://github.com/ZabojnikM) +- esphome: Fix for PCF8574 output chattering at the start/reboot [esphome#744](https://github.com/esphome/esphome/pull/744) by [@amishv](https://github.com/amishv) +- esphome: Add ADE7953 Support [esphome#593](https://github.com/esphome/esphome/pull/593) +- esphome: refactored xiaomi sensors [esphome#755](https://github.com/esphome/esphome/pull/755) by [@Alex9779](https://github.com/Alex9779) (breaking-change) +- docs: Xiaomi refactor [esphome-docs#361](https://github.com/esphome/esphome-docs/pull/361) by [@Alex9779](https://github.com/Alex9779) +- esphome: fix CGG1 log message [esphome#757](https://github.com/esphome/esphome/pull/757) by [@Alex9779](https://github.com/Alex9779) +- docs: Add link to index.rst check list item [esphome-docs#363](https://github.com/esphome/esphome-docs/pull/363) by [@glmnet](https://github.com/glmnet) +- docs: Added cookbook for Teckin SB50 Bulb [esphome-docs#360](https://github.com/esphome/esphome-docs/pull/360) by [@nebula-it](https://github.com/nebula-it) +- esphome: Add mcp23008 support [esphome#649](https://github.com/esphome/esphome/pull/649) by [@TomFahey](https://github.com/TomFahey) +- docs: Adding the IO2 pin to the GPIO pin list [esphome-docs#354](https://github.com/esphome/esphome-docs/pull/354) by [@SqyD](https://github.com/SqyD) +- docs: Updated MCP23017 Component To Cover 8 & 16 Port Chips [esphome-docs#277](https://github.com/esphome/esphome-docs/pull/277) by [@TomFahey](https://github.com/TomFahey) +- esphome: Brightness ssd1306 [esphome#723](https://github.com/esphome/esphome/pull/723) by [@glmnet](https://github.com/glmnet) +- esphome: Fix potential ISR digital_write issue [esphome#753](https://github.com/esphome/esphome/pull/753) +- esphome: Fix addressable light fade to black function [esphome#752](https://github.com/esphome/esphome/pull/752) +- esphome: Make UART flush function consistent [esphome#748](https://github.com/esphome/esphome/pull/748) +- esphome: Update and pin all python requirements [esphome#759](https://github.com/esphome/esphome/pull/759) +- esphome: Fix MCP23017 setup priority [esphome#751](https://github.com/esphome/esphome/pull/751) +- esphome: Add rotary_encoder.set_value action [esphome#747](https://github.com/esphome/esphome/pull/747) (new-feature) +- esphome: Fix strobe/flicker effect not using selected value [esphome#749](https://github.com/esphome/esphome/pull/749) +- esphome: Add support for TTGO ePaper module [esphome#730](https://github.com/esphome/esphome/pull/730) by [@thomasklingbeil](https://github.com/thomasklingbeil) +- esphome: BME280: Increase sensor timeout [esphome#727](https://github.com/esphome/esphome/pull/727) by [@lobradov](https://github.com/lobradov) +- esphome: Base climate ir [esphome#726](https://github.com/esphome/esphome/pull/726) by [@glmnet](https://github.com/glmnet) +- docs: Add documentation for TTGO ePaper [esphome-docs#342](https://github.com/esphome/esphome-docs/pull/342) by [@thomasklingbeil](https://github.com/thomasklingbeil) +- esphome: Fix dallas not unknown [esphome#716](https://github.com/esphome/esphome/pull/716) +- esphome: Integration sensor use double precision [esphome#715](https://github.com/esphome/esphome/pull/715) +- esphome: calibrate_linear check not all from values same [esphome#714](https://github.com/esphome/esphome/pull/714) +- esphome: SenseAir S8 CO2 sensor support [esphome#705](https://github.com/esphome/esphome/pull/705) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: SenseAir S8 CO2 sensor support [esphome-docs#330](https://github.com/esphome/esphome-docs/pull/330) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Fix remote_transmitter type_a encoding [esphome#742](https://github.com/esphome/esphome/pull/742) by [@nicuh](https://github.com/nicuh) +- esphome: vscode support check file exists [esphome#763](https://github.com/esphome/esphome/pull/763) by [@glmnet](https://github.com/glmnet) +- docs: Proof reading changes [esphome-docs#364](https://github.com/esphome/esphome-docs/pull/364) by [@thenameiwantedwastaken](https://github.com/thenameiwantedwastaken) +- docs: add tcl112 receiver docs [esphome-docs#365](https://github.com/esphome/esphome-docs/pull/365) by [@glmnet](https://github.com/glmnet) +- esphome: add tcl112 receiver [esphome#762](https://github.com/esphome/esphome/pull/762) by [@glmnet](https://github.com/glmnet) +- esphome: Sensor filter_out rounded [esphome#765](https://github.com/esphome/esphome/pull/765) +- esphome: Use higher default baudrate for USB upload [esphome#761](https://github.com/esphome/esphome/pull/761) +- esphome: add support for climate action [esphome#720](https://github.com/esphome/esphome/pull/720) by [@marcelveldt](https://github.com/marcelveldt) +- esphome: Add LEDC set_frequency action [esphome#754](https://github.com/esphome/esphome/pull/754) (new-feature) +- esphome: Fork some base libraries [esphome#758](https://github.com/esphome/esphome/pull/758) +- esphome: Update ESP8266/ESP32 bases [esphome#760](https://github.com/esphome/esphome/pull/760) +- esphome: Captive portal fixes [esphome#766](https://github.com/esphome/esphome/pull/766) +- esphome: Fix typo in Component::set_interval [esphome#767](https://github.com/esphome/esphome/pull/767) +- esphome: Fix platformio monkey patch [esphome#768](https://github.com/esphome/esphome/pull/768) +- esphome: Addressable light transition [esphome#750](https://github.com/esphome/esphome/pull/750) (new-feature) +- esphome: Fixes for Python 3 [esphome#702](https://github.com/esphome/esphome/pull/702) by [@fabaff](https://github.com/fabaff) +- esphome: Add BLE scan parameters [esphome#769](https://github.com/esphome/esphome/pull/769) (new-feature) +- esphome: Filter some debug lines from PlatformIO in output [esphome#771](https://github.com/esphome/esphome/pull/771) +- esphome: ESP32 Upgrade AsyncTCP to 1.1.1 [esphome#773](https://github.com/esphome/esphome/pull/773) +- esphome: Switch to Python 3 for docker installs [esphome#774](https://github.com/esphome/esphome/pull/774) +- docs: Add script.wait action [esphome-docs#367](https://github.com/esphome/esphome-docs/pull/367) (new-feature) +- docs: Add ESP32 scan parameters [esphome-docs#368](https://github.com/esphome/esphome-docs/pull/368) +- docs: Hint how to include HA secrets.yaml instead [esphome-docs#362](https://github.com/esphome/esphome-docs/pull/362) by [@rlowens](https://github.com/rlowens) +- esphome: Add SSD1325 Display Component [esphome#736](https://github.com/esphome/esphome/pull/736) by [@evandcoleman](https://github.com/evandcoleman) (cherry-picked) +- docs: Add documentation for SSD1325 OLED displays [esphome-docs#347](https://github.com/esphome/esphome-docs/pull/347) by [@evandcoleman](https://github.com/evandcoleman) (cherry-picked) +- esphome: Add support for SGP30 eCO2 and TVOC sensors [esphome#679](https://github.com/esphome/esphome/pull/679) by [@valordk](https://github.com/valordk) (cherry-picked) +- docs: Add documentation for SGP30 eCO2 and TVOC sensors [esphome-docs#308](https://github.com/esphome/esphome-docs/pull/308) by [@valordk](https://github.com/valordk) (cherry-picked) +- esphome: Add support for SHTCx Temperature sensors [esphome#676](https://github.com/esphome/esphome/pull/676) by [@valordk](https://github.com/valordk) (cherry-picked) +- esphome: Add support for STS3x Temperature sensors [esphome#669](https://github.com/esphome/esphome/pull/669) by [@valordk](https://github.com/valordk) (cherry-picked) +- docs: Add documentation for SHTCx Temperature sensors [esphome-docs#305](https://github.com/esphome/esphome-docs/pull/305) by [@valordk](https://github.com/valordk) (cherry-picked) +- docs: Add documentation for STS3x Temperature sensors [esphome-docs#300](https://github.com/esphome/esphome-docs/pull/300) by [@valordk](https://github.com/valordk) (cherry-picked) +- esphome: Add dfplayer mini component [esphome#655](https://github.com/esphome/esphome/pull/655) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- docs: Add DFPlayer docs [esphome-docs#306](https://github.com/esphome/esphome-docs/pull/306) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- docs: Add rotary_encoder.set_value action [esphome-docs#358](https://github.com/esphome/esphome-docs/pull/358) (cherry-picked) +- esphome: Add new component for Tuya dimmers [esphome#743](https://github.com/esphome/esphome/pull/743) by [@ssieb](https://github.com/ssieb) (cherry-picked) +- docs: Add documentation for new Tuya dimmer component [esphome-docs#353](https://github.com/esphome/esphome-docs/pull/353) by [@ssieb](https://github.com/ssieb) (cherry-picked) +- docs: SX1509 device documentation [esphome-docs#315](https://github.com/esphome/esphome-docs/pull/315) by [@mvturnho](https://github.com/mvturnho) (cherry-picked) +- docs: Fix typo [esphome-docs#352](https://github.com/esphome/esphome-docs/pull/352) by [@bonanitech](https://github.com/bonanitech) +- docs: Minor typo [esphome-docs#349](https://github.com/esphome/esphome-docs/pull/349) by [@dannysauer](https://github.com/dannysauer) +- docs: Clarify NodeMCU ESP8266 VIN pin [esphome-docs#340](https://github.com/esphome/esphome-docs/pull/340) by [@Justahobby01](https://github.com/Justahobby01) +- docs: Add TorchStar LED controller to 'Generic Sonoff' page [esphome-docs#351](https://github.com/esphome/esphome-docs/pull/351) by [@dale3h](https://github.com/dale3h) +- docs: Remove references to Python 2 [esphome-docs#328](https://github.com/esphome/esphome-docs/pull/328) by [@fabaff](https://github.com/fabaff) (cherry-picked) +- docs: Cookbook Guide for Zemismart LED RGBW Downlights [esphome-docs#297](https://github.com/esphome/esphome-docs/pull/297) by [@cryptelli](https://github.com/cryptelli) +- docs: Authorization by username and password [esphome-docs#296](https://github.com/esphome/esphome-docs/pull/296) by [@Anonym-tsk](https://github.com/Anonym-tsk) (cherry-picked) +- docs: AS3935 Lightning sensor [esphome-docs#294](https://github.com/esphome/esphome-docs/pull/294) by [@TheEggi](https://github.com/TheEggi) (cherry-picked) +- docs: Cookbook ape [esphome-docs#334](https://github.com/esphome/esphome-docs/pull/334) by [@glmnet](https://github.com/glmnet) +- esphome: Add lint check for integer constants [esphome#775](https://github.com/esphome/esphome/pull/775) +- docs: fix indent on sample [esphome-docs#369](https://github.com/esphome/esphome-docs/pull/369) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- esphome: Add script.wait action [esphome#778](https://github.com/esphome/esphome/pull/778) (cherry-picked) (new-feature) +- docs: update esp32camera documentation - note about PWM [esphome-docs#348](https://github.com/esphome/esphome-docs/pull/348) by [@h0--](https://github.com/h0--) +- esphome: Vl53l0x [esphome#644](https://github.com/esphome/esphome/pull/644) (cherry-picked) +- esphome: Add GPIO Switch interlock wait time [esphome#777](https://github.com/esphome/esphome/pull/777) (cherry-picked) (new-feature) +- esphome: Add PZEM004T/PZEMAC/PZEMDC Support [esphome#587](https://github.com/esphome/esphome/pull/587) (cherry-picked) +- esphome: Update AsyncMQTTClient/ESPAsyncWebServer [esphome#779](https://github.com/esphome/esphome/pull/779) (cherry-picked) +- esphome: Implementation of LCD Clear [esphome#781](https://github.com/esphome/esphome/pull/781) by [@amishv](https://github.com/amishv) (cherry-picked) +- docs: fixed typo [esphome-docs#370](https://github.com/esphome/esphome-docs/pull/370) by [@amishv](https://github.com/amishv) +- esphome: Add sensor force_update option [esphome#783](https://github.com/esphome/esphome/pull/783) (cherry-picked) (new-feature) +- docs: Add sensor force_update option [esphome-docs#371](https://github.com/esphome/esphome-docs/pull/371) (cherry-picked) +- docs: Spelling and grammar fixes [esphome-docs#372](https://github.com/esphome/esphome-docs/pull/372) by [@scop](https://github.com/scop) +- docs: Add missing actual install step in getting started with Hass.io [esphome-docs#373](https://github.com/esphome/esphome-docs/pull/373) by [@scop](https://github.com/scop) +- esphome: Update docker base image to 2.0.1 [esphome#785](https://github.com/esphome/esphome/pull/785) (cherry-picked) +- esphome: Fix ledc can't find bit_depth [esphome#786](https://github.com/esphome/esphome/pull/786) (cherry-picked) +- esphome: web_server_base AUTO_LOAD includes ASYNC_TCP [esphome#788](https://github.com/esphome/esphome/pull/788) by [@Schnilz](https://github.com/Schnilz) (cherry-picked) +- esphome: Add Python 2 deprecation notice [esphome#784](https://github.com/esphome/esphome/pull/784) (breaking-change) (cherry-picked) +- docs: Update time.rst to add GPS as source [esphome-docs#375](https://github.com/esphome/esphome-docs/pull/375) by [@mbo18](https://github.com/mbo18) +- esphome: Fix modbus CRC calculation [esphome#789](https://github.com/esphome/esphome/pull/789) (cherry-picked) +- esphome: Add additional custom lint checks [esphome#790](https://github.com/esphome/esphome/pull/790) (cherry-picked) +- esphome: Implement more dump_configs [esphome#791](https://github.com/esphome/esphome/pull/791) (cherry-picked) +- esphome: Add missing include - fixes missing GPIOPin definition [esphome#794](https://github.com/esphome/esphome/pull/794) by [@cjd](https://github.com/cjd) (cherry-picked) +- esphome: Fix MQTT not showing logs with Python 3 [esphome#797](https://github.com/esphome/esphome/pull/797) (cherry-picked) +- esphome: Fix scheduler first execution [esphome#798](https://github.com/esphome/esphome/pull/798) (cherry-picked) +- esphome: Make file generation saving atomic [esphome#792](https://github.com/esphome/esphome/pull/792) (cherry-picked) +- esphome: Fujitsu General climate new component [esphome#677](https://github.com/esphome/esphome/pull/677) by [@31337Ghost](https://github.com/31337Ghost) (cherry-picked) +- esphome: Warn when UART and logger operating on same bus [esphome#803](https://github.com/esphome/esphome/pull/803) (cherry-picked) +- esphome: Add Tuya message for no datapoints [esphome#804](https://github.com/esphome/esphome/pull/804) (cherry-picked) +- esphome: AS3935 Use normal pin polling for IRQ [esphome#805](https://github.com/esphome/esphome/pull/805) (cherry-picked) +- esphome: Fix modbus register [esphome#806](https://github.com/esphome/esphome/pull/806) (cherry-picked) +- esphome: Fix web server transition length truncated [esphome#807](https://github.com/esphome/esphome/pull/807) (cherry-picked) +- docs: fix xiaomi docs [esphome-docs#384](https://github.com/esphome/esphome-docs/pull/384) by [@Alex9779](https://github.com/Alex9779) (cherry-picked) +- esphome: Add check if middle_text is too short [esphome#811](https://github.com/esphome/esphome/pull/811) by [@grea09](https://github.com/grea09) (cherry-picked) +- esphome: [Hotfix] Dashboard authentication on Py3 [esphome#812](https://github.com/esphome/esphome/pull/812) by [@Anonym-tsk](https://github.com/Anonym-tsk) (cherry-picked) +- esphome: Uppercase ESPHome [esphome#814](https://github.com/esphome/esphome/pull/814) (cherry-picked) +- esphome: Print update interval for pulse counter [esphome#816](https://github.com/esphome/esphome/pull/816) (cherry-picked) +- esphome: Allow TimePeriod for time_period_str_unit [esphome#815](https://github.com/esphome/esphome/pull/815) (cherry-picked) +- docs: Typo fix pzem004t [esphome-docs#387](https://github.com/esphome/esphome-docs/pull/387) by [@Anonym-tsk](https://github.com/Anonym-tsk) (cherry-picked) +- esphome: Scheduler fixes [esphome#813](https://github.com/esphome/esphome/pull/813) (cherry-picked) +- esphome: Fix fan oscillating [esphome#818](https://github.com/esphome/esphome/pull/818) (cherry-picked) +- esphome: Fix some binary_sensor not having an initial state [esphome#819](https://github.com/esphome/esphome/pull/819) (cherry-picked) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.15.0.mdx b/src/content/docs/changelog/v1.15.0.mdx new file mode 100644 index 0000000000..cb7e44e9eb --- /dev/null +++ b/src/content/docs/changelog/v1.15.0.mdx @@ -0,0 +1,617 @@ +--- +description: "Changelog for ESPHome version 1.15.0." +title: "Changelog - Version 1.15.0 - September 13, 2020" +pagefind: false +slug: "changelog/v1.15.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +Stop! this is not Otto Winter, but Guillermo Ruffino ([@glmnet](https://github.com/glmnet)). So Hi there! + +Latest feature release was 10 months ago already, however development and support did not stop. We have +lots of contributions here, the list above with integrations images is the longest to date and the changelog +is bigger too! + +## Notable Changes & New Features + +ESPHome add on is now also available at the Home Assistant community add ons! ([@OttoWinter](https://github.com/OttoWinter) and +[@frenck](https://github.com/frenck) of course) + +The dashboard got a visual revamp! Now more nodes are visible at the same time. [@jonathanadams](https://github.com/jonathanadams) also +took a few bugs with it too. + +Lots new sensors, port expanders, displays... and [@kbx81](https://github.com/kbx81) came up with color displays too! +There are new climates like the Thermostat, PID and more IR based devices too. And can't wait to see DIY +projects with the RTTTL buzzer. + +Scripts are more stable, and also were updated to follow new Home Assistant script options, like `single`, +`queued`, etc. + +Also if you don't like repeating stuff in yaml, the new packages options [@corvis](https://github.com/corvis) added are very handy. + +I did a terrible job tagging contributions and now I'm paying for that, hope nobody gets angry. + +I've updated the contributors list in an attepmpt of giving people credit, many really deserve to be listed +here not only for their code contributions but also for their support on the community, bug fixing etc., thanks! + +This release is possible not only because all the contributions this project receives, but also for the +latest contributions from Otto itself, he did a great job automating GitHub with actions and also building +scripts which takes cares of 90% of the release process, so hopefully new versions will come along at a better pace. +If you don't see somebody credited by somthing, thats because Otto did it. + +From myself special thanks to [@ssieb](https://github.com/ssieb), [@rradar](https://github.com/rradar), [@jesserockz](https://github.com/jesserockz), [@kbx81](https://github.com/kbx81), and many others +specially [@OttoWinter](https://github.com/OttoWinter) for all this. + +Still many new features and fixes are pending to be included in this release, but we had to left them aside +for a while so we can focus better. So let's ship this and keep going on new stuff!! + +Last but not least, thanks to all contributors, bug reporters and patrons! Without you this would not +be possible! + +## New Features + +- esphome: Dashboard Updates [esphome#1025](https://github.com/esphome/esphome/pull/1025) by [@jonathanadams](https://github.com/jonathanadams) (new-feature) (notable-change) +- esphome: Ble scanner [esphome#976](https://github.com/esphome/esphome/pull/976) by [@TheKuko](https://github.com/TheKuko) (new-feature) +- esphome: Add Prometheus /metrics-Endpoint [esphome#1032](https://github.com/esphome/esphome/pull/1032) by [@margau](https://github.com/margau) (new-feature) +- esphome: Add support for command-line substitutions [esphome#1014](https://github.com/esphome/esphome/pull/1014) by [@AlexMekkering](https://github.com/AlexMekkering) (new-feature) +- esphome: Packages feature [esphome#1052](https://github.com/esphome/esphome/pull/1052) by [@corvis](https://github.com/corvis) (new-feature) (notable-change) +- esphome: WPA2 Enterprise Attempt 2 [esphome#1158](https://github.com/esphome/esphome/pull/1158) (new-feature) +- esphome: New script modes POC [esphome#1168](https://github.com/esphome/esphome/pull/1168) (breaking-change) (new-feature) + +## New Integrations + +- esphome: implemented ruuvi_ble and ruuvitag with RAWv1 and RAWv2 protocol [esphome#810](https://github.com/esphome/esphome/pull/810) by [@Alex9779](https://github.com/Alex9779) (new-integration) +- esphome: http_request component [esphome#719](https://github.com/esphome/esphome/pull/719) by [@Anonym-tsk](https://github.com/Anonym-tsk) (new-integration) +- esphome: Add support for Sensirion SPS30 Particulate Matter sensors [esphome#891](https://github.com/esphome/esphome/pull/891) by [@valordk](https://github.com/valordk) (new-integration) +- esphome: Add TM1561 support [esphome#893](https://github.com/esphome/esphome/pull/893) by [@freekode](https://github.com/freekode) (new-integration) +- esphome: Add slow_pwm output component [esphome#894](https://github.com/esphome/esphome/pull/894) by [@nickw444](https://github.com/nickw444) (new-integration) +- esphome: Add RFBridge component [esphome#896](https://github.com/esphome/esphome/pull/896) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- esphome: Climate Mitsubishi [esphome#725](https://github.com/esphome/esphome/pull/725) by [@glmnet](https://github.com/glmnet) (new-integration) +- esphome: PID Climate [esphome#885](https://github.com/esphome/esphome/pull/885) (new-integration) +- esphome: Display tm1637 [esphome#946](https://github.com/esphome/esphome/pull/946) by [@glmnet](https://github.com/glmnet) (new-integration) +- esphome: Daikin climate ir component [esphome#964](https://github.com/esphome/esphome/pull/964) by [@hectorgimenez](https://github.com/hectorgimenez) (new-integration) +- esphome: Add TMP117 component [esphome#992](https://github.com/esphome/esphome/pull/992) by [@Azimath](https://github.com/Azimath) (new-integration) +- esphome: Support for AHT10 temperature and humidity sensor [esphome#949](https://github.com/esphome/esphome/pull/949) by [@gmasse](https://github.com/gmasse) (new-integration) +- esphome: Add HM3301 laser dust detection sensor [esphome#963](https://github.com/esphome/esphome/pull/963) by [@freekode](https://github.com/freekode) (new-integration) +- esphome: Add AC Dimmer support [esphome#880](https://github.com/esphome/esphome/pull/880) (new-integration) +- esphome: feat: Add support for MCP23016 IO Expander [esphome#1012](https://github.com/esphome/esphome/pull/1012) by [@reidprojects](https://github.com/reidprojects) (new-integration) +- esphome: Climate whirlpool [esphome#1029](https://github.com/esphome/esphome/pull/1029) by [@glmnet](https://github.com/glmnet) (new-integration) +- esphome: Add support for ESP32 DAC [esphome#1071](https://github.com/esphome/esphome/pull/1071) by [@napieraj](https://github.com/napieraj) (new-integration) +- esphome: Adding support for MAX31856 Thermocouple Temperature Sensor (feature #700) [esphome#1039](https://github.com/esphome/esphome/pull/1039) by [@declanshanaghy](https://github.com/declanshanaghy) (new-integration) +- esphome: Add support for additional Xiaomi BLE sensors [esphome#1027](https://github.com/esphome/esphome/pull/1027) by [@ahpohl](https://github.com/ahpohl) (new-integration) (notable-change) +- esphome: Add E1.31 support [esphome#950](https://github.com/esphome/esphome/pull/950) by [@ayufan](https://github.com/ayufan) (new-integration) +- esphome: Add `adalight` light effect [esphome#956](https://github.com/esphome/esphome/pull/956) by [@ayufan](https://github.com/ayufan) (new-integration) +- esphome: Add WLED support [esphome#1092](https://github.com/esphome/esphome/pull/1092) by [@ayufan](https://github.com/ayufan) (new-integration) +- esphome: Add LG Climate IR [esphome#1097](https://github.com/esphome/esphome/pull/1097) by [@square99](https://github.com/square99) (new-integration) +- esphome: add support for SN74HC595 shift register [esphome#1083](https://github.com/esphome/esphome/pull/1083) by [@phjr](https://github.com/phjr) (new-integration) +- esphome: Thermostat component [esphome#1105](https://github.com/esphome/esphome/pull/1105) by [@kbx81](https://github.com/kbx81) (new-integration) +- esphome: Add SSD1351 OLED display support [esphome#1100](https://github.com/esphome/esphome/pull/1100) by [@kbx81](https://github.com/kbx81) (new-integration) +- esphome: Add support for Tuya Switches [esphome#1074](https://github.com/esphome/esphome/pull/1074) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- esphome: Add support for Tuya Climate devices [esphome#1076](https://github.com/esphome/esphome/pull/1076) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- esphome: Add support for Tuya Sensors [esphome#1088](https://github.com/esphome/esphome/pull/1088) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- esphome: Add support for Tuya Binary Sensors [esphome#1089](https://github.com/esphome/esphome/pull/1089) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- esphome: Add support for Toshiba heat pumps [esphome#1121](https://github.com/esphome/esphome/pull/1121) by [@JoppyFurr](https://github.com/JoppyFurr) (new-integration) +- esphome: Add exposure notifications [esphome#1135](https://github.com/esphome/esphome/pull/1135) (new-integration) +- esphome: rtttl player [esphome#1171](https://github.com/esphome/esphome/pull/1171) by [@glmnet](https://github.com/glmnet) (new-integration) + +## Breaking Changes + +- esphome: Drop Python 2 Support [esphome#793](https://github.com/esphome/esphome/pull/793) (breaking-change) +- esphome: Fix SGP30 incorrect baseline reading/writing [esphome#936](https://github.com/esphome/esphome/pull/936) by [@panuruj](https://github.com/panuruj) (breaking-change) +- esphome: fix servo bug restoring state and starting servo detached [esphome#1008](https://github.com/esphome/esphome/pull/1008) by [@glmnet](https://github.com/glmnet) (breaking-change) +- esphome: fix shunt voltage / current / power reading in INA3221 [esphome#1101](https://github.com/esphome/esphome/pull/1101) by [@Vxider](https://github.com/Vxider) (breaking-change) +- esphome: Fix: Component script not stopped in certain situations [esphome#1004](https://github.com/esphome/esphome/pull/1004) by [@balrog-kun](https://github.com/balrog-kun) (breaking-change) +- esphome: New script modes POC [esphome#1168](https://github.com/esphome/esphome/pull/1168) (breaking-change) (new-feature) + +## Notable Changes + +- esphome: Dashboard Updates [esphome#1025](https://github.com/esphome/esphome/pull/1025) by [@jonathanadams](https://github.com/jonathanadams) (new-feature) (notable-change) +- esphome: Uart improvments [esphome#1024](https://github.com/esphome/esphome/pull/1024) by [@0hax](https://github.com/0hax) (notable-change) +- esphome: Add support for additional Xiaomi BLE sensors [esphome#1027](https://github.com/esphome/esphome/pull/1027) by [@ahpohl](https://github.com/ahpohl) (new-integration) (notable-change) +- esphome: Packages feature [esphome#1052](https://github.com/esphome/esphome/pull/1052) by [@corvis](https://github.com/corvis) (new-feature) (notable-change) + +## Beta Fixes + +- esphome: Mitigate CVE-2020-12638 WiFi WPA Downgrade [esphome#1207](https://github.com/esphome/esphome/pull/1207) +- esphome: ESP8266 change recommended framework version to 2.7.2 [esphome#1208](https://github.com/esphome/esphome/pull/1208) +- esphome: Fix base config should override packages config [esphome#1209](https://github.com/esphome/esphome/pull/1209) +- docs: ESP8266 change recommended framework version to 2.7.2 [esphome-docs#714](https://github.com/esphome/esphome-docs/pull/714) +- esphome: Fix AS3935 sensor configuration issues [esphome#1210](https://github.com/esphome/esphome/pull/1210) by [@trylika](https://github.com/trylika) +- esphome: Fix prometheus has wrong setup priority [esphome#1211](https://github.com/esphome/esphome/pull/1211) +- esphome: Downgrade FastLED to 3.3.2 [esphome#1212](https://github.com/esphome/esphome/pull/1212) +- docs: Fix old screenshots [esphome-docs#716](https://github.com/esphome/esphome-docs/pull/716) by [@glmnet](https://github.com/glmnet) +- docs: Add tuya platforms to changelog table [esphome-docs#715](https://github.com/esphome/esphome-docs/pull/715) by [@jesserockz](https://github.com/jesserockz) +- esphome: Fix sdist missing requirements.txt [esphome#1214](https://github.com/esphome/esphome/pull/1214) +- docs: Include new v1.15 components from diff [esphome-docs#718](https://github.com/esphome/esphome-docs/pull/718) by [@glmnet](https://github.com/glmnet) +- esphome: renamed icon molecule co2 [esphome#1217](https://github.com/esphome/esphome/pull/1217) by [@glmnet](https://github.com/glmnet) +- esphome: Add job to update HassIO addon repo [esphome#1218](https://github.com/esphome/esphome/pull/1218) +- esphome: Stop infinite loop in light on_turn_on [esphome#1219](https://github.com/esphome/esphome/pull/1219) by [@WizKid](https://github.com/WizKid) +- esphome: Bump ESPAsyncWebServer-esphome to v1.2.7 [esphome#1221](https://github.com/esphome/esphome/pull/1221) +- docs: Added hint that not the subsensor id is meant. [esphome-docs#720](https://github.com/esphome/esphome-docs/pull/720) by [@ei-ke](https://github.com/ei-ke) +- esphome: wpa2 enterprise fixes: also copy eap parameters, don't require psk password to be set [esphome#1215](https://github.com/esphome/esphome/pull/1215) by [@dr-oblivium](https://github.com/dr-oblivium) +- esphome: Bump base image to 2.4.1 [esphome#1224](https://github.com/esphome/esphome/pull/1224) +- esphome: Fix release.yml invalid bash syntax [esphome#1226](https://github.com/esphome/esphome/pull/1226) +- esphome: Bump ESP8266 Arduino framework from 2.7.2 to 2.7.3 [esphome#1229](https://github.com/esphome/esphome/pull/1229) +- docs: Update docs for community Hass.io add-ons [esphome-docs#721](https://github.com/esphome/esphome-docs/pull/721) +- esphome: Bump ESPAsyncTCP from 1.2.2 to 1.2.3 [esphome#1227](https://github.com/esphome/esphome/pull/1227) +- esphome: Fix ESP8266 core has a broken settimeofday implementation [esphome#1231](https://github.com/esphome/esphome/pull/1231) +- docs: Cookbook: BME280 Environment added dew point calculations [esphome-docs#629](https://github.com/esphome/esphome-docs/pull/629) by [@rradar](https://github.com/rradar) +- esphome: Fix tuya.cpp compile warning [esphome#1232](https://github.com/esphome/esphome/pull/1232) +- esphome: Script mode fix [esphome#1238](https://github.com/esphome/esphome/pull/1238) by [@jesserockz](https://github.com/jesserockz) +- esphome: make powered on assume public [esphome#1240](https://github.com/esphome/esphome/pull/1240) by [@glmnet](https://github.com/glmnet) +- esphome: Bump docker base image to 2.6.0 [esphome#1245](https://github.com/esphome/esphome/pull/1245) +- esphome: Image bit dephts [esphome#1241](https://github.com/esphome/esphome/pull/1241) by [@glmnet](https://github.com/glmnet) +- docs: add image type [esphome-docs#730](https://github.com/esphome/esphome-docs/pull/730) by [@glmnet](https://github.com/glmnet) +- esphome: fixes deg symbol not shown [esphome#1248](https://github.com/esphome/esphome/pull/1248) by [@glmnet](https://github.com/glmnet) +- docs: Update diy.rst [esphome-docs#736](https://github.com/esphome/esphome-docs/pull/736) by [@emorydunn](https://github.com/emorydunn) +- docs: Add a note about setting dns in manual ip mode [esphome-docs#735](https://github.com/esphome/esphome-docs/pull/735) by [@martgras](https://github.com/martgras) +- docs: Change example ota id [esphome-docs#737](https://github.com/esphome/esphome-docs/pull/737) by [@jesserockz](https://github.com/jesserockz) +- esphome: Fix SSD1306 post-setup brightness control [esphome#1090](https://github.com/esphome/esphome/pull/1090) by [@kbx81](https://github.com/kbx81) +- esphome: Fix esp8266_restore_from_flash [esphome#638](https://github.com/esphome/esphome/pull/638) +- esphome: Fix stack trace decode for latest platformio [esphome#830](https://github.com/esphome/esphome/pull/830) +- docs: Update diy.rst [esphome-docs#748](https://github.com/esphome/esphome-docs/pull/748) by [@galagaking](https://github.com/galagaking) +- docs: Add carrier_frequency for IR device example [esphome-docs#734](https://github.com/esphome/esphome-docs/pull/734) by [@abmantis](https://github.com/abmantis) +- docs: Added Arlec Grid Connect Smart Plug [esphome-docs#749](https://github.com/esphome/esphome-docs/pull/749) by [@freerangeeggs](https://github.com/freerangeeggs) + +## All changes + +- esphome: Add lint check for integer constants [esphome#775](https://github.com/esphome/esphome/pull/775) +- esphome: Wizard board name fixes [esphome#787](https://github.com/esphome/esphome/pull/787) by [@scop](https://github.com/scop) +- esphome: Logger on_message trigger [esphome#729](https://github.com/esphome/esphome/pull/729) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Logger on_message trigger [esphome-docs#374](https://github.com/esphome/esphome-docs/pull/374) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Add Fujitsu General Climate component docs [esphome-docs#307](https://github.com/esphome/esphome-docs/pull/307) by [@31337Ghost](https://github.com/31337Ghost) +- docs: fix logger.rst ref link [esphome-docs#379](https://github.com/esphome/esphome-docs/pull/379) by [@glmnet](https://github.com/glmnet) +- esphome: Added more power data to the atm90e32 component [esphome#799](https://github.com/esphome/esphome/pull/799) by [@CircuitSetup](https://github.com/CircuitSetup) +- docs: added reactive power, power factor, chip temp... [esphome-docs#380](https://github.com/esphome/esphome-docs/pull/380) by [@CircuitSetup](https://github.com/CircuitSetup) +- esphome: service uuid based ble tracking [esphome#800](https://github.com/esphome/esphome/pull/800) by [@Lumpusz](https://github.com/Lumpusz) +- docs: Ble rssi svc [esphome-docs#377](https://github.com/esphome/esphome-docs/pull/377) by [@Lumpusz](https://github.com/Lumpusz) +- docs: Typo fix pzemac [esphome-docs#388](https://github.com/esphome/esphome-docs/pull/388) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Typo fix pzemdc [esphome-docs#389](https://github.com/esphome/esphome-docs/pull/389) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Document UART stop_bits [esphome-docs#396](https://github.com/esphome/esphome-docs/pull/396) +- docs: Document missing servo restore option [esphome-docs#398](https://github.com/esphome/esphome-docs/pull/398) +- esphome: Fix stack trace decode for latest platformio [esphome#830](https://github.com/esphome/esphome/pull/830) +- esphome: Add MAX31865 sensor support, fix MAX31855 sensor [esphome#832](https://github.com/esphome/esphome/pull/832) by [@DAVe3283](https://github.com/DAVe3283) +- docs: Add MAX31865, update MAX31855 [esphome-docs#399](https://github.com/esphome/esphome-docs/pull/399) by [@DAVe3283](https://github.com/DAVe3283) +- esphome: Add support for INA226 Current/Power Monitor [esphome#801](https://github.com/esphome/esphome/pull/801) by [@sergio303](https://github.com/sergio303) +- docs: Add INA226 current/power monitor [esphome-docs#403](https://github.com/esphome/esphome-docs/pull/403) by [@sergio303](https://github.com/sergio303) +- esphome: implemented ruuvi_ble and ruuvitag with RAWv1 and RAWv2 protocol [esphome#810](https://github.com/esphome/esphome/pull/810) by [@Alex9779](https://github.com/Alex9779) (new-integration) +- docs: added docs for ruuvitag [esphome-docs#383](https://github.com/esphome/esphome-docs/pull/383) by [@Alex9779](https://github.com/Alex9779) +- esphome: http_request component [esphome#719](https://github.com/esphome/esphome/pull/719) by [@Anonym-tsk](https://github.com/Anonym-tsk) (new-integration) +- docs: http_request component [esphome-docs#392](https://github.com/esphome/esphome-docs/pull/392) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: fix esphome better error out [esphome#843](https://github.com/esphome/esphome/pull/843) by [@glmnet](https://github.com/glmnet) +- esphome: Add climate dry fan [esphome#845](https://github.com/esphome/esphome/pull/845) by [@glmnet](https://github.com/glmnet) +- esphome: Decode DHT11 decimal part [esphome#861](https://github.com/esphome/esphome/pull/861) by [@airy10](https://github.com/airy10) +- docs: add climate core docs fan, swing [esphome-docs#415](https://github.com/esphome/esphome-docs/pull/415) by [@glmnet](https://github.com/glmnet) +- esphome: fix chip_temperature for atm90e32 component [esphome#865](https://github.com/esphome/esphome/pull/865) by [@CircuitSetup](https://github.com/CircuitSetup) +- esphome: add position action and lambda - tested [esphome#877](https://github.com/esphome/esphome/pull/877) by [@KristopherMackowiak](https://github.com/KristopherMackowiak) +- esphome: added idle action for climate [esphome#859](https://github.com/esphome/esphome/pull/859) by [@danielkucera](https://github.com/danielkucera) +- esphome: Fix MAX31865 edge case. [esphome#882](https://github.com/esphome/esphome/pull/882) by [@DAVe3283](https://github.com/DAVe3283) +- docs: Added Documentation for QMC5883L + HMC5883L Doc improvements [esphome-docs#301](https://github.com/esphome/esphome-docs/pull/301) by [@timpur](https://github.com/timpur) +- esphome: Add QMC5883L Sensor + Improvements to HMC5883L [esphome#671](https://github.com/esphome/esphome/pull/671) by [@timpur](https://github.com/timpur) +- esphome: Add B/W support for Waveshare 2.90in (B) screen [esphome#889](https://github.com/esphome/esphome/pull/889) by [@akomelj](https://github.com/akomelj) +- docs: Add B/W support for Waveshare 2.90in (B) screen [esphome-docs#426](https://github.com/esphome/esphome-docs/pull/426) by [@akomelj](https://github.com/akomelj) +- esphome: Add support for Sensirion SPS30 Particulate Matter sensors [esphome#891](https://github.com/esphome/esphome/pull/891) by [@valordk](https://github.com/valordk) (new-integration) +- docs: Add documentation for Sensirion SPS30 Particulate Matter sensors [esphome-docs#424](https://github.com/esphome/esphome-docs/pull/424) by [@valordk](https://github.com/valordk) +- docs: Add TM1651 docs [esphome-docs#429](https://github.com/esphome/esphome-docs/pull/429) by [@freekode](https://github.com/freekode) +- esphome: Add TM1561 support [esphome#893](https://github.com/esphome/esphome/pull/893) by [@freekode](https://github.com/freekode) (new-integration) +- esphome: Add magic value REPLACEME [esphome#881](https://github.com/esphome/esphome/pull/881) +- esphome: Pulse counter validate not both disabled [esphome#902](https://github.com/esphome/esphome/pull/902) +- esphome: Optimize application loop speed [esphome#860](https://github.com/esphome/esphome/pull/860) +- esphome: Better/stricter pin validation [esphome#903](https://github.com/esphome/esphome/pull/903) +- esphome: Disable default wait_time for rc_switch [esphome#900](https://github.com/esphome/esphome/pull/900) +- esphome: Update python dependencies [esphome#906](https://github.com/esphome/esphome/pull/906) +- esphome: Handle yaml merge keys correcly. [esphome#888](https://github.com/esphome/esphome/pull/888) by [@edge90](https://github.com/edge90) +- esphome: Allow loading esphome version from a fork [esphome#907](https://github.com/esphome/esphome/pull/907) by [@jesserockz](https://github.com/jesserockz) +- esphome: Clean up YAML Mapping construction [esphome#910](https://github.com/esphome/esphome/pull/910) +- docs: Add doc for slow_pwm output component [esphome-docs#427](https://github.com/esphome/esphome-docs/pull/427) by [@nickw444](https://github.com/nickw444) +- esphome: Add slow_pwm output component [esphome#894](https://github.com/esphome/esphome/pull/894) by [@nickw444](https://github.com/nickw444) (new-integration) +- esphome: ESP32 GPIOs 33 to 38 can be used for deep sleep wakeup [esphome#911](https://github.com/esphome/esphome/pull/911) by [@adamgreg](https://github.com/adamgreg) +- esphome: Drop Python 2 Support [esphome#793](https://github.com/esphome/esphome/pull/793) (breaking-change) +- esphome: Add RFBridge component [esphome#896](https://github.com/esphome/esphome/pull/896) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- docs: Add docs for RF Bridge [esphome-docs#433](https://github.com/esphome/esphome-docs/pull/433) by [@jesserockz](https://github.com/jesserockz) +- esphome: ct_clamp: Check sample() return value is not NaN [esphome#921](https://github.com/esphome/esphome/pull/921) by [@balrog-kun](https://github.com/balrog-kun) +- docs: merge all ir climates in a single doc [esphome-docs#385](https://github.com/esphome/esphome-docs/pull/385) by [@glmnet](https://github.com/glmnet) +- esphome: Climate Mitsubishi [esphome#725](https://github.com/esphome/esphome/pull/725) by [@glmnet](https://github.com/glmnet) (new-integration) +- esphome: fix: only decode when not str already [esphome#923](https://github.com/esphome/esphome/pull/923) by [@wilmardo](https://github.com/wilmardo) +- esphome: fix climate-ir bad merge [esphome#935](https://github.com/esphome/esphome/pull/935) by [@glmnet](https://github.com/glmnet) +- esphome: http_request: fix memory allocation [esphome#916](https://github.com/esphome/esphome/pull/916) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: http_request: version validation fix [esphome#917](https://github.com/esphome/esphome/pull/917) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: PID Climate [esphome#885](https://github.com/esphome/esphome/pull/885) (new-integration) +- docs: not a display component [esphome-docs#462](https://github.com/esphome/esphome-docs/pull/462) by [@glmnet](https://github.com/glmnet) +- esphome: Fix for wizard via dashboard not decoding strings [esphome#941](https://github.com/esphome/esphome/pull/941) by [@timsavage](https://github.com/timsavage) +- esphome: Adding the espressif 2.6.3 [esphome#944](https://github.com/esphome/esphome/pull/944) by [@Valcob](https://github.com/Valcob) +- esphome: extract and use current version of python 3 [esphome#938](https://github.com/esphome/esphome/pull/938) by [@gitolicious](https://github.com/gitolicious) +- esphome: Inverted output in neopixelbus [esphome#895](https://github.com/esphome/esphome/pull/895) by [@voibit](https://github.com/voibit) +- docs: Added support for inverted output in neopixelbus [esphome-docs#441](https://github.com/esphome/esphome-docs/pull/441) by [@voibit](https://github.com/voibit) +- esphome: Added degree symbol for MAX7219 7-segment display. [esphome#764](https://github.com/esphome/esphome/pull/764) by [@cyberplant](https://github.com/cyberplant) +- esphome: Fix dump/tx of 64 bit codes [esphome#940](https://github.com/esphome/esphome/pull/940) by [@andrasbiro](https://github.com/andrasbiro) +- esphome: Update hdc1080.cpp [esphome#887](https://github.com/esphome/esphome/pull/887) by [@dmkif](https://github.com/dmkif) +- esphome: add tcl112 support for dry, fan and swing [esphome#939](https://github.com/esphome/esphome/pull/939) by [@glmnet](https://github.com/glmnet) +- esphome: Fix SGP30 incorrect baseline reading/writing [esphome#936](https://github.com/esphome/esphome/pull/936) by [@panuruj](https://github.com/panuruj) (breaking-change) +- docs: Update SGP30 for the correct eCO2 and TVOC baseline [esphome-docs#458](https://github.com/esphome/esphome-docs/pull/458) by [@panuruj](https://github.com/panuruj) +- docs: change docs to suggest logger config [esphome-docs#378](https://github.com/esphome/esphome-docs/pull/378) by [@glmnet](https://github.com/glmnet) +- esphome: Add register_*_effect to allow registering custom effects [esphome#947](https://github.com/esphome/esphome/pull/947) by [@ayufan](https://github.com/ayufan) +- esphome: Bugfix/normalize core comparisons (and Python 3 update fixes) [esphome#952](https://github.com/esphome/esphome/pull/952) by [@timsavage](https://github.com/timsavage) +- esphome: Add transmit pioneer [esphome#922](https://github.com/esphome/esphome/pull/922) by [@kbx81](https://github.com/kbx81) +- docs: Add transmit pioneer [esphome-docs#446](https://github.com/esphome/esphome-docs/pull/446) by [@kbx81](https://github.com/kbx81) +- docs: add tm1637 docs [esphome-docs#467](https://github.com/esphome/esphome-docs/pull/467) by [@glmnet](https://github.com/glmnet) +- esphome: Display tm1637 [esphome#946](https://github.com/esphome/esphome/pull/946) by [@glmnet](https://github.com/glmnet) (new-integration) +- esphome: Support a further variant of Xiaomi CGG1 [esphome#930](https://github.com/esphome/esphome/pull/930) by [@mario-tux](https://github.com/mario-tux) +- docs: Add Daikin IR Climate documentation [esphome-docs#476](https://github.com/esphome/esphome-docs/pull/476) by [@hectorgimenez](https://github.com/hectorgimenez) +- esphome: Daikin climate ir component [esphome#964](https://github.com/esphome/esphome/pull/964) by [@hectorgimenez](https://github.com/hectorgimenez) (new-integration) +- esphome: fix tm1637 missing __init__.py [esphome#975](https://github.com/esphome/esphome/pull/975) by [@glmnet](https://github.com/glmnet) +- esphome: sim800l: Add support of roaming-registered SIM cards [esphome#977](https://github.com/esphome/esphome/pull/977) by [@andriej](https://github.com/andriej) +- esphome: BME280: fix typos, use forced mode constant [esphome#974](https://github.com/esphome/esphome/pull/974) by [@GMTA](https://github.com/GMTA) +- esphome: MQTT climate features [esphome#913](https://github.com/esphome/esphome/pull/913) by [@puuu](https://github.com/puuu) +- esphome: Revert default ESP32 upload baud rate [esphome#978](https://github.com/esphome/esphome/pull/978) +- esphome: Add TM1651 simple level, turn on, turn off actions [esphome#920](https://github.com/esphome/esphome/pull/920) by [@freekode](https://github.com/freekode) +- esphome: Webserver - include css, js in index [esphome#932](https://github.com/esphome/esphome/pull/932) by [@Elkropac](https://github.com/Elkropac) +- docs: web_server - css_include and js_include: add new options and example [esphome-docs#459](https://github.com/esphome/esphome-docs/pull/459) by [@Elkropac](https://github.com/Elkropac) +- docs: Add new action for TM1651 [esphome-docs#442](https://github.com/esphome/esphome-docs/pull/442) by [@freekode](https://github.com/freekode) +- docs: Added equal symbol for MAX7219 7-segment display [esphome-docs#503](https://github.com/esphome/esphome-docs/pull/503) by [@egeltje](https://github.com/egeltje) +- esphome: Added equal symbol for MAX7219 7-segment display [esphome#986](https://github.com/esphome/esphome/pull/986) by [@egeltje](https://github.com/egeltje) +- esphome: Output from platformio idedata command does not need to be decoded [esphome#953](https://github.com/esphome/esphome/pull/953) by [@brandond](https://github.com/brandond) +- esphome: Allow custom lights to be addressable [esphome#954](https://github.com/esphome/esphome/pull/954) by [@brandond](https://github.com/brandond) +- esphome: Fix esphome/issues#947 - RGBW(W) white brightness [esphome#925](https://github.com/esphome/esphome/pull/925) by [@pauln](https://github.com/pauln) +- esphome: Add support for TTGO epaper boards with B73 revision [esphome#928](https://github.com/esphome/esphome/pull/928) by [@thomasklingbeil](https://github.com/thomasklingbeil) +- esphome: Fix OTA updates getting killed by task_wdt [esphome#959](https://github.com/esphome/esphome/pull/959) by [@Skaronator](https://github.com/Skaronator) +- esphome: Bugfix/1077 decode called on str fetching platformio stacktrace [esphome#991](https://github.com/esphome/esphome/pull/991) by [@timsavage](https://github.com/timsavage) +- esphome: Add support for Tuya ceiling fan controllers [esphome#989](https://github.com/esphome/esphome/pull/989) by [@buxtronix](https://github.com/buxtronix) +- esphome: Fixed iBeacon struct and major and minor parsing [esphome#987](https://github.com/esphome/esphome/pull/987) by [@sekkr1](https://github.com/sekkr1) +- esphome: http_request http fix [esphome#980](https://github.com/esphome/esphome/pull/980) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Rgbww color fix [esphome#967](https://github.com/esphome/esphome/pull/967) by [@quinnhosler](https://github.com/quinnhosler) +- esphome: add time cover assumed_state option [esphome#979](https://github.com/esphome/esphome/pull/979) by [@glmnet](https://github.com/glmnet) +- esphome: Add on_rc_switch trigger [esphome#983](https://github.com/esphome/esphome/pull/983) by [@escoand](https://github.com/escoand) +- esphome: SCD30 fixes and improvements [esphome#962](https://github.com/esphome/esphome/pull/962) by [@Sizurka](https://github.com/Sizurka) +- docs: cover time based add assumed state option [esphome-docs#490](https://github.com/esphome/esphome-docs/pull/490) by [@glmnet](https://github.com/glmnet) +- esphome: pzemac total energy support [esphome#933](https://github.com/esphome/esphome/pull/933) by [@yekm](https://github.com/yekm) +- docs: docs for Tuya fan, update tuya light [esphome-docs#502](https://github.com/esphome/esphome-docs/pull/502) by [@buxtronix](https://github.com/buxtronix) +- docs: Next [esphome-docs#491](https://github.com/esphome/esphome-docs/pull/491) by [@CircuitSetup](https://github.com/CircuitSetup) +- docs: add energy support to pzemac [esphome-docs#478](https://github.com/esphome/esphome-docs/pull/478) by [@yekm](https://github.com/yekm) +- docs: Added examples for uart text sensor [esphome-docs#468](https://github.com/esphome/esphome-docs/pull/468) by [@tomludd](https://github.com/tomludd) +- docs: Add docs for TMP117 sensor [esphome-docs#505](https://github.com/esphome/esphome-docs/pull/505) by [@Azimath](https://github.com/Azimath) +- esphome: Add TMP117 component [esphome#992](https://github.com/esphome/esphome/pull/992) by [@Azimath](https://github.com/Azimath) (new-integration) +- esphome: Unittests for esphome python code [esphome#931](https://github.com/esphome/esphome/pull/931) by [@timsavage](https://github.com/timsavage) +- esphome: Corrections to default register values of ATM90E32 component [esphome#982](https://github.com/esphome/esphome/pull/982) by [@CircuitSetup](https://github.com/CircuitSetup) +- esphome: Support for AHT10 temperature and humidity sensor [esphome#949](https://github.com/esphome/esphome/pull/949) by [@gmasse](https://github.com/gmasse) (new-integration) +- docs: Add documentation for AHT10 sensor [esphome-docs#466](https://github.com/esphome/esphome-docs/pull/466) by [@gmasse](https://github.com/gmasse) +- esphome: Retry connecting if the connection is not valid [esphome#994](https://github.com/esphome/esphome/pull/994) by [@abmantis](https://github.com/abmantis) +- esphome: Support for pcd8544 (nokia 5110 and 3310) screen [esphome#973](https://github.com/esphome/esphome/pull/973) by [@pax0r](https://github.com/pax0r) +- esphome: fix servo bug restoring state and starting servo detached [esphome#1008](https://github.com/esphome/esphome/pull/1008) by [@glmnet](https://github.com/glmnet) (breaking-change) +- docs: Documentation for PCD8544 [esphome-docs#485](https://github.com/esphome/esphome-docs/pull/485) by [@pax0r](https://github.com/pax0r) +- esphome: VSCode devcontainer support [esphome#914](https://github.com/esphome/esphome/pull/914) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: removes comments from lambda [esphome#998](https://github.com/esphome/esphome/pull/998) by [@glmnet](https://github.com/glmnet) +- esphome: Add HM3301 laser dust detection sensor [esphome#963](https://github.com/esphome/esphome/pull/963) by [@freekode](https://github.com/freekode) (new-integration) +- docs: Add docs HM3301 [esphome-docs#529](https://github.com/esphome/esphome-docs/pull/529) by [@freekode](https://github.com/freekode) +- esphome: Constant brightness [esphome#1007](https://github.com/esphome/esphome/pull/1007) by [@kroimon](https://github.com/kroimon) +- docs: Add webserver-v1.js click handlers for Cover buttons [esphome-docs#521](https://github.com/esphome/esphome-docs/pull/521) by [@balrog-kun](https://github.com/balrog-kun) +- esphome: web_server: Add cover calls to REST API [esphome#999](https://github.com/esphome/esphome/pull/999) by [@balrog-kun](https://github.com/balrog-kun) +- esphome: Add AC Dimmer support [esphome#880](https://github.com/esphome/esphome/pull/880) (new-feature) (new-integration) +- docs: add ac_dimmer [esphome-docs#536](https://github.com/esphome/esphome-docs/pull/536) by [@glmnet](https://github.com/glmnet) +- docs: Add documentation for cwww and rgbww constant_brightness variables. (… [esphome-docs#540](https://github.com/esphome/esphome-docs/pull/540) by [@glmnet](https://github.com/glmnet) +- esphome: feat: Add support for MCP23016 IO Expander [esphome#1012](https://github.com/esphome/esphome/pull/1012) by [@reidprojects](https://github.com/reidprojects) (new-integration) +- docs: feat: Added documentation to support for MCP23016 [esphome-docs#537](https://github.com/esphome/esphome-docs/pull/537) by [@reidprojects](https://github.com/reidprojects) +- docs: Kristopher mackowiak next [esphome-docs#544](https://github.com/esphome/esphome-docs/pull/544) by [@glmnet](https://github.com/glmnet) +- docs: fix copy paste void [esphome-docs#545](https://github.com/esphome/esphome-docs/pull/545) by [@glmnet](https://github.com/glmnet) +- esphome: Daikin climate receiver support [esphome#1001](https://github.com/esphome/esphome/pull/1001) by [@puuu](https://github.com/puuu) +- docs: ir_climate: describe daikin receive support [esphome-docs#522](https://github.com/esphome/esphome-docs/pull/522) by [@puuu](https://github.com/puuu) +- esphome: Tests for CPP Code generation and some Python3 improvements [esphome#961](https://github.com/esphome/esphome/pull/961) by [@timsavage](https://github.com/timsavage) +- esphome: Climate whirlpool [esphome#1029](https://github.com/esphome/esphome/pull/1029) by [@glmnet](https://github.com/glmnet) (new-integration) +- docs: add whirlpool climate [esphome-docs#552](https://github.com/esphome/esphome-docs/pull/552) by [@glmnet](https://github.com/glmnet) +- docs: add mac address info [esphome-docs#554](https://github.com/esphome/esphome-docs/pull/554) by [@glmnet](https://github.com/glmnet) +- esphome: add mac address to wifi info [esphome#1030](https://github.com/esphome/esphome/pull/1030) by [@glmnet](https://github.com/glmnet) +- esphome: SHTC3: Wake up the sensor during setup [esphome#993](https://github.com/esphome/esphome/pull/993) by [@Sizurka](https://github.com/Sizurka) +- esphome: Change buffer sending process for waveshare_epaper (2.70in) [esphome#1031](https://github.com/esphome/esphome/pull/1031) by [@ukewea](https://github.com/ukewea) +- docs: add light on off triggers docs [esphome-docs#559](https://github.com/esphome/esphome-docs/pull/559) by [@glmnet](https://github.com/glmnet) +- esphome: add lights on off triggers [esphome#1037](https://github.com/esphome/esphome/pull/1037) by [@glmnet](https://github.com/glmnet) (new-feature) +- docs: Bluetooth advertising automation [esphome-docs#512](https://github.com/esphome/esphome-docs/pull/512) by [@puuu](https://github.com/puuu) +- esphome: Bluetooth advertising automation [esphome#995](https://github.com/esphome/esphome/pull/995) by [@puuu](https://github.com/puuu) +- esphome: Fix missing yield in ESP32 UART timeout code causing watchdog resets when blocking for serial data. [esphome#1016](https://github.com/esphome/esphome/pull/1016) by [@fake-name](https://github.com/fake-name) +- docs: Make initial run variable available to addressable_lambda [esphome-docs#558](https://github.com/esphome/esphome-docs/pull/558) by [@Skaronator](https://github.com/Skaronator) +- esphome: Make initial run variable available to addressable_lambda [esphome#1035](https://github.com/esphome/esphome/pull/1035) by [@Skaronator](https://github.com/Skaronator) +- esphome: Dashboard Updates [esphome#1025](https://github.com/esphome/esphome/pull/1025) by [@jonathanadams](https://github.com/jonathanadams) (new-feature) (notable-change) +- docs: remote_receiver: describe memory_block configuration [esphome-docs#523](https://github.com/esphome/esphome-docs/pull/523) by [@puuu](https://github.com/puuu) +- esphome: esp32 remote: make RMT memory blocks configureable [esphome#1002](https://github.com/esphome/esphome/pull/1002) by [@puuu](https://github.com/puuu) +- esphome: test disable no delay [esphome#1026](https://github.com/esphome/esphome/pull/1026) by [@glmnet](https://github.com/glmnet) +- esphome: http_request ESP32 insecure requests fix [esphome#1041](https://github.com/esphome/esphome/pull/1041) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Update FastLED Library 3.3.3 [esphome#1020](https://github.com/esphome/esphome/pull/1020) by [@teamsuperpanda](https://github.com/teamsuperpanda) +- docs: Max7219 intensity change update [esphome-docs#546](https://github.com/esphome/esphome-docs/pull/546) by [@buxtronix](https://github.com/buxtronix) +- esphome: Some max7219 updates. [esphome#1021](https://github.com/esphome/esphome/pull/1021) by [@buxtronix](https://github.com/buxtronix) +- docs: 5.83in Waveshare add [esphome-docs#572](https://github.com/esphome/esphome-docs/pull/572) by [@sredfern](https://github.com/sredfern) +- esphome: Extending Support to 5.83in Waveshare eink B/W displays [esphome#1009](https://github.com/esphome/esphome/pull/1009) by [@sredfern](https://github.com/sredfern) +- esphome: Allow tm1637 to use pins from IO expanders [esphome#1058](https://github.com/esphome/esphome/pull/1058) by [@jesserockz](https://github.com/jesserockz) +- esphome: Fix fan oscillation trait not being used [esphome#1048](https://github.com/esphome/esphome/pull/1048) by [@blejdfist](https://github.com/blejdfist) +- esphome: Update tm1637.cpp [esphome#1044](https://github.com/esphome/esphome/pull/1044) by [@nepozs](https://github.com/nepozs) +- esphome: dht: Fix sensor reading from DHT22 [esphome#926](https://github.com/esphome/esphome/pull/926) by [@robinsmidsrod](https://github.com/robinsmidsrod) +- docs: dht: Add DHT22_TYPE2 model [esphome-docs#563](https://github.com/esphome/esphome-docs/pull/563) by [@robinsmidsrod](https://github.com/robinsmidsrod) +- esphome: Add lambda to devcontainer config [esphome#1059](https://github.com/esphome/esphome/pull/1059) by [@jesserockz](https://github.com/jesserockz) +- docs: Ble scanner doc [esphome-docs#611](https://github.com/esphome/esphome-docs/pull/611) by [@TheKuko](https://github.com/TheKuko) +- esphome: Ble scanner [esphome#976](https://github.com/esphome/esphome/pull/976) by [@TheKuko](https://github.com/TheKuko) (new-feature) +- docs: Update arduino framework versions [esphome-docs#575](https://github.com/esphome/esphome-docs/pull/575) by [@Skaronator](https://github.com/Skaronator) +- docs: Fix pcf8574 mode [esphome-docs#616](https://github.com/esphome/esphome-docs/pull/616) by [@glmnet](https://github.com/glmnet) +- docs: Dallas autosetup [esphome-docs#551](https://github.com/esphome/esphome-docs/pull/551) by [@krahabb](https://github.com/krahabb) +- esphome: Expose mac address via discovery (mDNS) [esphome#1038](https://github.com/esphome/esphome/pull/1038) by [@ctalkington](https://github.com/ctalkington) +- docs: ESP32 DAC output documentation [esphome-docs#617](https://github.com/esphome/esphome-docs/pull/617) by [@napieraj](https://github.com/napieraj) +- esphome: Add support for ESP32 DAC [esphome#1071](https://github.com/esphome/esphome/pull/1071) by [@napieraj](https://github.com/napieraj) (new-integration) +- esphome: Uart improvments [esphome#1024](https://github.com/esphome/esphome/pull/1024) by [@0hax](https://github.com/0hax) (notable-change) +- docs: Uart improvments [esphome-docs#571](https://github.com/esphome/esphome-docs/pull/571) by [@0hax](https://github.com/0hax) +- esphome: Adding support for MAX31856 Thermocouple Temperature Sensor (feature #700) [esphome#1039](https://github.com/esphome/esphome/pull/1039) by [@declanshanaghy](https://github.com/declanshanaghy) (new-integration) +- esphome: Add support for additional Xiaomi BLE sensors [esphome#1027](https://github.com/esphome/esphome/pull/1027) by [@ahpohl](https://github.com/ahpohl) (new-integration) (notable-change) +- docs: Add support for additional Xiaomi BLE sensors [esphome-docs#576](https://github.com/esphome/esphome-docs/pull/576) by [@ahpohl](https://github.com/ahpohl) +- esphome: Explicitly set language to English [esphome#1073](https://github.com/esphome/esphome/pull/1073) by [@gitolicious](https://github.com/gitolicious) +- docs: Added TTGO-Camera Plus PIN configuration [esphome-docs#510](https://github.com/esphome/esphome-docs/pull/510) by [@rudgr](https://github.com/rudgr) +- esphome: Added support for ssd1327 [esphome#985](https://github.com/esphome/esphome/pull/985) by [@igg](https://github.com/igg) +- docs: added energy in pzem004 documentation [esphome-docs#547](https://github.com/esphome/esphome-docs/pull/547) by [@adriancuzman](https://github.com/adriancuzman) +- esphome: added energy reading for pzem004 [esphome#1022](https://github.com/esphome/esphome/pull/1022) by [@adriancuzman](https://github.com/adriancuzman) +- esphome: BH1750 Measurement time [esphome#997](https://github.com/esphome/esphome/pull/997) by [@rradar](https://github.com/rradar) +- docs: BH1750 Measurement time doc updates [esphome-docs#515](https://github.com/esphome/esphome-docs/pull/515) by [@rradar](https://github.com/rradar) +- esphome: Sort keys in dicts in output yaml for 'config' command [esphome#1049](https://github.com/esphome/esphome/pull/1049) by [@ivan4th](https://github.com/ivan4th) +- esphome: Extend uart: with rx_buffer_size: [esphome#1006](https://github.com/esphome/esphome/pull/1006) by [@ayufan](https://github.com/ayufan) +- docs: Document `uart.rx_buffer_size` [esphome-docs#528](https://github.com/esphome/esphome-docs/pull/528) by [@ayufan](https://github.com/ayufan) +- esphome: Add Prometheus /metrics-Endpoint [esphome#1032](https://github.com/esphome/esphome/pull/1032) by [@margau](https://github.com/margau) (new-feature) +- docs: Add Prometheus-Documentation [esphome-docs#556](https://github.com/esphome/esphome-docs/pull/556) by [@margau](https://github.com/margau) +- esphome: Turn off PN532 RF field when not expecting a tag [esphome#1046](https://github.com/esphome/esphome/pull/1046) by [@apeeters](https://github.com/apeeters) +- docs: Docs for CS Optional [esphome-docs#644](https://github.com/esphome/esphome-docs/pull/644) by [@igg](https://github.com/igg) +- esphome: making SPI CS optional [esphome#988](https://github.com/esphome/esphome/pull/988) by [@igg](https://github.com/igg) +- esphome: AQI calculator for HM3301 [esphome#1011](https://github.com/esphome/esphome/pull/1011) by [@freekode](https://github.com/freekode) +- docs: AQI calculator for HM3301 [esphome-docs#535](https://github.com/esphome/esphome-docs/pull/535) by [@freekode](https://github.com/freekode) +- esphome: Fix gamma_correct when using constant_brightness option [esphome#1043](https://github.com/esphome/esphome/pull/1043) by [@Skaronator](https://github.com/Skaronator) +- esphome: Add E1.31 support [esphome#950](https://github.com/esphome/esphome/pull/950) by [@ayufan](https://github.com/ayufan) (new-integration) +- esphome: Add `adalight` light effect [esphome#956](https://github.com/esphome/esphome/pull/956) by [@ayufan](https://github.com/ayufan) (new-integration) +- docs: Add documentation about E1.31, Adalight and WLED [esphome-docs#646](https://github.com/esphome/esphome-docs/pull/646) by [@ayufan](https://github.com/ayufan) +- esphome: Add WLED support [esphome#1092](https://github.com/esphome/esphome/pull/1092) by [@ayufan](https://github.com/ayufan) (new-integration) +- docs: PID Climate Controller [esphome-docs#432](https://github.com/esphome/esphome-docs/pull/432) +- docs: Added Etekcity Voltson cookbook [esphome-docs#628](https://github.com/esphome/esphome-docs/pull/628) by [@gitolicious](https://github.com/gitolicious) +- esphome: Update docker base image [esphome#1093](https://github.com/esphome/esphome/pull/1093) by [@Skaronator](https://github.com/Skaronator) +- esphome: SenseAir: flush input buffer on read error [esphome#1017](https://github.com/esphome/esphome/pull/1017) by [@ferbar](https://github.com/ferbar) +- docs: Add documentation for fan direction [esphome-docs#580](https://github.com/esphome/esphome-docs/pull/580) by [@blejdfist](https://github.com/blejdfist) +- esphome: Add support for controlling fan direction [esphome#1051](https://github.com/esphome/esphome/pull/1051) by [@blejdfist](https://github.com/blejdfist) +- esphome: Add API component to logging error message [esphome#1062](https://github.com/esphome/esphome/pull/1062) by [@JeffResc](https://github.com/JeffResc) +- docs: Added MCP3008 [esphome-docs#591](https://github.com/esphome/esphome-docs/pull/591) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Add MCP3008 I/O Expander [esphome#1057](https://github.com/esphome/esphome/pull/1057) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: ADE7953: Fix dereferencing of a null pointer [esphome#1086](https://github.com/esphome/esphome/pull/1086) by [@rnauber](https://github.com/rnauber) +- esphome: sgp30 baseline write bug fix (#1157) [esphome#1078](https://github.com/esphome/esphome/pull/1078) by [@korellas](https://github.com/korellas) +- esphome: fix for ESP32 'Association Leave' [esphome#1081](https://github.com/esphome/esphome/pull/1081) by [@MasterTim17](https://github.com/MasterTim17) +- esphome: Climate bang bang enhancements [esphome#1061](https://github.com/esphome/esphome/pull/1061) by [@kbx81](https://github.com/kbx81) +- docs: Climate bang bang enhancements [esphome-docs#595](https://github.com/esphome/esphome-docs/pull/595) by [@kbx81](https://github.com/kbx81) +- esphome: Fix decode and encode for RC5-protocol [esphome#1047](https://github.com/esphome/esphome/pull/1047) by [@LukasK13](https://github.com/LukasK13) +- esphome: Add esp8266 huzzah gpio pins [esphome#1096](https://github.com/esphome/esphome/pull/1096) by [@halkeye](https://github.com/halkeye) +- esphome: fix percentage handling [esphome#1094](https://github.com/esphome/esphome/pull/1094) by [@ssieb](https://github.com/ssieb) +- docs: Add support for command-line-substitutions [esphome-docs#538](https://github.com/esphome/esphome-docs/pull/538) by [@AlexMekkering](https://github.com/AlexMekkering) +- esphome: Add support for command-line substitutions [esphome#1014](https://github.com/esphome/esphome/pull/1014) by [@AlexMekkering](https://github.com/AlexMekkering) (new-feature) +- esphome: Add LG Climate IR [esphome#1097](https://github.com/esphome/esphome/pull/1097) by [@square99](https://github.com/square99) (new-integration) +- docs: Add LG Climate IR [esphome-docs#655](https://github.com/esphome/esphome-docs/pull/655) by [@square99](https://github.com/square99) +- esphome: ESP32: Conditionally log on services to avoid OOM crashes [esphome#1098](https://github.com/esphome/esphome/pull/1098) by [@buxtronix](https://github.com/buxtronix) +- esphome: Release BT controller unused memory in the right place [esphome#1095](https://github.com/esphome/esphome/pull/1095) by [@buxtronix](https://github.com/buxtronix) +- docs: add documentation for component sn74hc595 [esphome-docs#637](https://github.com/esphome/esphome-docs/pull/637) by [@phjr](https://github.com/phjr) +- esphome: add support for SN74HC595 shift register [esphome#1083](https://github.com/esphome/esphome/pull/1083) by [@phjr](https://github.com/phjr) (new-integration) +- esphome: Max7219 in Dot Matrix configuration [esphome#1053](https://github.com/esphome/esphome/pull/1053) by [@rspaargaren](https://github.com/rspaargaren) +- docs: Max7219 new documentation [esphome-docs#585](https://github.com/esphome/esphome-docs/pull/585) by [@rspaargaren](https://github.com/rspaargaren) +- esphome: Add support for ST7789V display module (as on TTGO T-Display) [esphome#1050](https://github.com/esphome/esphome/pull/1050) by [@kbx81](https://github.com/kbx81) +- docs: Add documentation for ST7789V display module (as on TTGO T-Display) [esphome-docs#594](https://github.com/esphome/esphome-docs/pull/594) by [@kbx81](https://github.com/kbx81) +- esphome: Vl53 long range [esphome#1055](https://github.com/esphome/esphome/pull/1055) by [@rspaargaren](https://github.com/rspaargaren) +- docs: Update vl53l0x.rst [esphome-docs#592](https://github.com/esphome/esphome-docs/pull/592) by [@rspaargaren](https://github.com/rspaargaren) +- esphome: fix shunt voltage / current / power reading in INA3221 [esphome#1101](https://github.com/esphome/esphome/pull/1101) by [@Vxider](https://github.com/Vxider) (breaking-change) +- esphome: Fix current / power reading in INA219 [esphome#1103](https://github.com/esphome/esphome/pull/1103) by [@Vxider](https://github.com/Vxider) +- esphome: Fix: Component script not stopped in certain situations [esphome#1004](https://github.com/esphome/esphome/pull/1004) by [@balrog-kun](https://github.com/balrog-kun) (breaking-change) +- docs: add script.stop breaking change [esphome-docs#659](https://github.com/esphome/esphome-docs/pull/659) by [@glmnet](https://github.com/glmnet) +- esphome: Fixes esphome/issues#1192 - Save on upload bug [esphome#1107](https://github.com/esphome/esphome/pull/1107) by [@jonathanadams](https://github.com/jonathanadams) +- esphome: Revert "Climate bang bang enhancements" [esphome#1106](https://github.com/esphome/esphome/pull/1106) by [@glmnet](https://github.com/glmnet) +- esphome: Use default average mode in INA3221 [esphome#1102](https://github.com/esphome/esphome/pull/1102) by [@Vxider](https://github.com/Vxider) +- esphome: Thermostat component [esphome#1105](https://github.com/esphome/esphome/pull/1105) by [@kbx81](https://github.com/kbx81) (new-integration) +- docs: Added thermostat component doc [esphome-docs#665](https://github.com/esphome/esphome-docs/pull/665) by [@kbx81](https://github.com/kbx81) +- esphome: unpin mbedtls version [esphome#1114](https://github.com/esphome/esphome/pull/1114) by [@glmnet](https://github.com/glmnet) +- esphome: Fix ethernet logging too many warn messages [esphome#1112](https://github.com/esphome/esphome/pull/1112) by [@glmnet](https://github.com/glmnet) +- esphome: add click dependency [esphome#1111](https://github.com/esphome/esphome/pull/1111) by [@glmnet](https://github.com/glmnet) +- docs: Add documentation for climate.pid.reset_integral_term action [esphome-docs#660](https://github.com/esphome/esphome-docs/pull/660) by [@carlos-sarmiento](https://github.com/carlos-sarmiento) +- esphome: Add Integral Reset Action to PIDClimate [esphome#1104](https://github.com/esphome/esphome/pull/1104) by [@carlos-sarmiento](https://github.com/carlos-sarmiento) +- docs: color interlock [esphome-docs#653](https://github.com/esphome/esphome-docs/pull/653) by [@peq123](https://github.com/peq123) +- esphome: RGBWW - added channel interlock for RGB vs white [esphome#1042](https://github.com/esphome/esphome/pull/1042) by [@peq123](https://github.com/peq123) +- docs: Add documentation for new WPA2-EAP authentication. [esphome-docs#633](https://github.com/esphome/esphome-docs/pull/633) by [@tomtom5152](https://github.com/tomtom5152) +- docs: SSD1325 documentation update for grayscale support [esphome-docs#596](https://github.com/esphome/esphome-docs/pull/596) by [@kbx81](https://github.com/kbx81) +- esphome: SSD1325 grayscale support [esphome#1064](https://github.com/esphome/esphome/pull/1064) by [@kbx81](https://github.com/kbx81) +- docs: Cleaned up ESP32 DAC docs [esphome-docs#618](https://github.com/esphome/esphome-docs/pull/618) by [@napieraj](https://github.com/napieraj) +- docs: Added SSD1351 doc [esphome-docs#663](https://github.com/esphome/esphome-docs/pull/663) by [@kbx81](https://github.com/kbx81) +- esphome: Add SSD1351 OLED display support [esphome#1100](https://github.com/esphome/esphome/pull/1100) by [@kbx81](https://github.com/kbx81) (new-integration) +- esphome: Add cryptography requirement to the setup.py file [esphome#1116](https://github.com/esphome/esphome/pull/1116) by [@jesserockz](https://github.com/jesserockz) +- docs: Support ssd1327 docs [esphome-docs#664](https://github.com/esphome/esphome-docs/pull/664) by [@igg](https://github.com/igg) +- esphome: Revert "Add ESP32 support for WPA2-EAP Enterprise WiFi authentication" [esphome#1117](https://github.com/esphome/esphome/pull/1117) by [@glmnet](https://github.com/glmnet) +- esphome: Revert "Add cryptography requirement to the setup.py file" [esphome#1118](https://github.com/esphome/esphome/pull/1118) by [@glmnet](https://github.com/glmnet) +- esphome: Install updated git version in lint image [esphome#1122](https://github.com/esphome/esphome/pull/1122) by [@jesserockz](https://github.com/jesserockz) +- docs: documentation for version sensor hide timestamp option [esphome-docs#640](https://github.com/esphome/esphome-docs/pull/640) by [@Wauter](https://github.com/Wauter) +- esphome: fixes script wait not waiting [esphome#1123](https://github.com/esphome/esphome/pull/1123) by [@glmnet](https://github.com/glmnet) +- docs: Split the Tuya component documentation [esphome-docs#631](https://github.com/esphome/esphome-docs/pull/631) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add support for Tuya Switches [esphome#1074](https://github.com/esphome/esphome/pull/1074) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- docs: Add Tuya Switch docs [esphome-docs#625](https://github.com/esphome/esphome-docs/pull/625) by [@jesserockz](https://github.com/jesserockz) +- esphome: fix script.wait action [esphome#1120](https://github.com/esphome/esphome/pull/1120) by [@ssieb](https://github.com/ssieb) +- esphome: Add support for Tuya Climate devices [esphome#1076](https://github.com/esphome/esphome/pull/1076) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- docs: Add Tuya Climate docs [esphome-docs#632](https://github.com/esphome/esphome-docs/pull/632) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add support for Tuya Sensors [esphome#1088](https://github.com/esphome/esphome/pull/1088) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- docs: Add Tuya Sensor docs [esphome-docs#661](https://github.com/esphome/esphome-docs/pull/661) by [@jesserockz](https://github.com/jesserockz) +- docs: Add Tuya Binary Sensor docs [esphome-docs#662](https://github.com/esphome/esphome-docs/pull/662) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add support for Tuya Binary Sensors [esphome#1089](https://github.com/esphome/esphome/pull/1089) by [@jesserockz](https://github.com/jesserockz) (new-integration) +- esphome: feature request 398 add 'hide timestamp' option for version text sensor [esphome#1085](https://github.com/esphome/esphome/pull/1085) by [@Wauter](https://github.com/Wauter) +- esphome: Add 7.5inch v2 waveshare [esphome#1077](https://github.com/esphome/esphome/pull/1077) by [@PaulAntonDeen](https://github.com/PaulAntonDeen) +- docs: Added new version of 7.5inch waveshare epaper [esphome-docs#675](https://github.com/esphome/esphome-docs/pull/675) by [@PaulAntonDeen](https://github.com/PaulAntonDeen) +- esphome: Move CI/CD to GitHub Actions [esphome#1125](https://github.com/esphome/esphome/pull/1125) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add PR labels based on files changed [esphome#1127](https://github.com/esphome/esphome/pull/1127) by [@jesserockz](https://github.com/jesserockz) +- esphome: Brightness support for Nextion display [esphome#1109](https://github.com/esphome/esphome/pull/1109) by [@Vxider](https://github.com/Vxider) +- docs: Brightness support for Nextion display [esphome-docs#668](https://github.com/esphome/esphome-docs/pull/668) by [@Vxider](https://github.com/Vxider) +- esphome: Revert "Add PR labels based on files changed" [esphome#1128](https://github.com/esphome/esphome/pull/1128) by [@jesserockz](https://github.com/jesserockz) +- docs: Add Toshiba climate [esphome-docs#681](https://github.com/esphome/esphome-docs/pull/681) by [@JoppyFurr](https://github.com/JoppyFurr) +- esphome: Add support for Toshiba heat pumps [esphome#1121](https://github.com/esphome/esphome/pull/1121) by [@JoppyFurr](https://github.com/JoppyFurr) (new-integration) +- esphome: Packages feature [esphome#1052](https://github.com/esphome/esphome/pull/1052) by [@corvis](https://github.com/corvis) (new-feature) (notable-change) +- docs: Added documentation for packages feature [esphome-docs#582](https://github.com/esphome/esphome-docs/pull/582) by [@corvis](https://github.com/corvis) +- esphome: Allow updating pid control params [esphome#1115](https://github.com/esphome/esphome/pull/1115) by [@carlos-sarmiento](https://github.com/carlos-sarmiento) +- esphome: Github actions repo [esphome#1130](https://github.com/esphome/esphome/pull/1130) by [@jesserockz](https://github.com/jesserockz) +- esphome: Feature/fix unit tests [esphome#1129](https://github.com/esphome/esphome/pull/1129) by [@pkuehne](https://github.com/pkuehne) +- esphome: GH Actions Update [esphome#1134](https://github.com/esphome/esphome/pull/1134) +- esphome: Bug/fix internal flag in binary sensor [esphome#1136](https://github.com/esphome/esphome/pull/1136) by [@pkuehne](https://github.com/pkuehne) +- esphome: Use inclusive terminology [esphome#1137](https://github.com/esphome/esphome/pull/1137) +- esphome: Add exposure notifications [esphome#1135](https://github.com/esphome/esphome/pull/1135) (new-integration) +- esphome: Fix adding another mbedtls [esphome#1131](https://github.com/esphome/esphome/pull/1131) +- esphome: Tuya Sensor remove commented out code (style guide) [esphome#1132](https://github.com/esphome/esphome/pull/1132) +- docs: Add exposure notifications docs [esphome-docs#683](https://github.com/esphome/esphome-docs/pull/683) +- docs: Improve RGBW(W) docs [esphome-docs#682](https://github.com/esphome/esphome-docs/pull/682) +- esphome: add mqtt speed topics for fan [esphome#1140](https://github.com/esphome/esphome/pull/1140) by [@ssieb](https://github.com/ssieb) +- esphome: Bump pytest from 5.4.1 to 5.4.3 [esphome#1144](https://github.com/esphome/esphome/pull/1144) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump hypothesis from 5.10.4 to 5.19.3 [esphome#1146](https://github.com/esphome/esphome/pull/1146) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump protobuf from 3.11.3 to 3.12.2 [esphome#1147](https://github.com/esphome/esphome/pull/1147) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump ifaddr from 0.1.6 to 0.1.7 [esphome#1148](https://github.com/esphome/esphome/pull/1148) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytest-cov from 2.8.1 to 2.10.0 [esphome#1145](https://github.com/esphome/esphome/pull/1145) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix Waveshare 7.50inV2 [esphome#1143](https://github.com/esphome/esphome/pull/1143) +- esphome: Load setup.py requirements from requirements.txt [esphome#1149](https://github.com/esphome/esphome/pull/1149) +- esphome: Add pytest to CI [esphome#1138](https://github.com/esphome/esphome/pull/1138) +- esphome: Feature/component test fixture [esphome#1142](https://github.com/esphome/esphome/pull/1142) by [@pkuehne](https://github.com/pkuehne) +- esphome: Use more layer caching for esphome/esphome Dockerfile [esphome#1150](https://github.com/esphome/esphome/pull/1150) +- esphome: Don't remove location information for packages [esphome#1133](https://github.com/esphome/esphome/pull/1133) +- esphome: Add tasmota magic bits to short circuit compat check [esphome#1152](https://github.com/esphome/esphome/pull/1152) +- esphome: Fix executable bits on some hassio files [esphome#1151](https://github.com/esphome/esphome/pull/1151) +- esphome: Don't run deploy job when repository is not esphome/esphome [esphome#1157](https://github.com/esphome/esphome/pull/1157) by [@jesserockz](https://github.com/jesserockz) +- docs: Docs for Setting control parameters on PID [esphome-docs#674](https://github.com/esphome/esphome-docs/pull/674) by [@carlos-sarmiento](https://github.com/carlos-sarmiento) +- esphome: Bump pytest-mock from 1.13.0 to 3.2.0 [esphome#1159](https://github.com/esphome/esphome/pull/1159) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pylint from 2.5.0 to 2.5.3 [esphome#1160](https://github.com/esphome/esphome/pull/1160) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump tzlocal from 2.0.0 to 2.1 [esphome#1162](https://github.com/esphome/esphome/pull/1162) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix unit test warning for hypothesis deprecation [esphome#1163](https://github.com/esphome/esphome/pull/1163) by [@pkuehne](https://github.com/pkuehne) +- esphome: Bump flake8 from 3.7.9 to 3.8.3 [esphome#1161](https://github.com/esphome/esphome/pull/1161) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump FastLED from 3.2.9 to 3.3.3 [esphome#1164](https://github.com/esphome/esphome/pull/1164) +- esphome: Arduino dev branch changed [esphome#1139](https://github.com/esphome/esphome/pull/1139) by [@glmnet](https://github.com/glmnet) +- esphome: Add bump version script [esphome#1153](https://github.com/esphome/esphome/pull/1153) +- esphome: fix(cover yaml validation): adds gate to coincide with Home Assistant [esphome#1175](https://github.com/esphome/esphome/pull/1175) by [@erasmuswill](https://github.com/erasmuswill) +- esphome: http_request fix urls caching [esphome#1174](https://github.com/esphome/esphome/pull/1174) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Fix rf_bridge send and receive [esphome#1180](https://github.com/esphome/esphome/pull/1180) by [@vicfergar](https://github.com/vicfergar) +- esphome: mdi:timer icon replaced with mdi:timer-outline [esphome#1181](https://github.com/esphome/esphome/pull/1181) by [@Troon](https://github.com/Troon) +- esphome: Bump hypothesis from 5.19.3 to 5.20.3 [esphome#1176](https://github.com/esphome/esphome/pull/1176) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix Home Assistant API disconnects when using st7789v display. [esphome#1179](https://github.com/esphome/esphome/pull/1179) by [@dr-oblivium](https://github.com/dr-oblivium) +- esphome: Fixed type mismatch between result field and preference of integration sensor [esphome#1178](https://github.com/esphome/esphome/pull/1178) by [@FrankBakkerNl](https://github.com/FrankBakkerNl) +- esphome: Feature/wizard tests [esphome#1167](https://github.com/esphome/esphome/pull/1167) by [@pkuehne](https://github.com/pkuehne) +- esphome: Add HassIO by-id serial port paths to serial ports listing [esphome#1155](https://github.com/esphome/esphome/pull/1155) +- esphome: Bump NeoPixelBus from 2.5.2 to 2.5.7 [esphome#1165](https://github.com/esphome/esphome/pull/1165) +- esphome: Bump colorlog from 4.1.0 to 4.2.1 [esphome#1183](https://github.com/esphome/esphome/pull/1183) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump hypothesis from 5.20.3 to 5.21.0 [esphome#1184](https://github.com/esphome/esphome/pull/1184) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: ESP8266 Disable Pin Initialization on Boot to fix pin toggling [esphome#1185](https://github.com/esphome/esphome/pull/1185) +- esphome: Fix dashboard logout button and py3.8 removed hmac.new digestmod [esphome#1156](https://github.com/esphome/esphome/pull/1156) +- docs: WPA2 Enterprise Attempt 2 [esphome-docs#704](https://github.com/esphome/esphome-docs/pull/704) +- esphome: WPA2 Enterprise Attempt 2 [esphome#1158](https://github.com/esphome/esphome/pull/1158) (new-feature) +- esphome: Remove symlink_ops.py [esphome#1196](https://github.com/esphome/esphome/pull/1196) +- esphome: Fix senseair flush input buffer wrong log level [esphome#1194](https://github.com/esphome/esphome/pull/1194) +- esphome: Fix WLED minor issues [esphome#1193](https://github.com/esphome/esphome/pull/1193) +- esphome: Clean up UART Improvements code [esphome#1190](https://github.com/esphome/esphome/pull/1190) +- esphome: Partially revert make SPI CS pin optional [esphome#1187](https://github.com/esphome/esphome/pull/1187) +- esphome: New script modes POC [esphome#1168](https://github.com/esphome/esphome/pull/1168) (breaking-change) (new-feature) +- docs: Add script modes and timers [esphome-docs#693](https://github.com/esphome/esphome-docs/pull/693) by [@glmnet](https://github.com/glmnet) +- esphome: Revert "Sort keys in dicts in output yaml for 'config' command (#1049)" [esphome#1191](https://github.com/esphome/esphome/pull/1191) +- esphome: Fix SN74HC595 doesn't use ESPHome HAL and add lint checks for it [esphome#1188](https://github.com/esphome/esphome/pull/1188) +- docs: Partially Revert make SPI CS pin optional [esphome-docs#706](https://github.com/esphome/esphome-docs/pull/706) +- esphome: Enlarge ESP32 app partitions [esphome#1197](https://github.com/esphome/esphome/pull/1197) +- esphome: Add CODEOWNERS mechanism [esphome#1199](https://github.com/esphome/esphome/pull/1199) +- esphome: rtttl player [esphome#1171](https://github.com/esphome/esphome/pull/1171) by [@glmnet](https://github.com/glmnet) (new-integration) +- docs: add buzzer rtttl docs [esphome-docs#700](https://github.com/esphome/esphome-docs/pull/700) by [@glmnet](https://github.com/glmnet) +- esphome: Add @glmnet components [esphome#1200](https://github.com/esphome/esphome/pull/1200) by [@glmnet](https://github.com/glmnet) +- docs: fix merge: climate devices moved to climate-ir [esphome-docs#710](https://github.com/esphome/esphome-docs/pull/710) by [@glmnet](https://github.com/glmnet) +- esphome: Add @jesserockz to codeowners [esphome#1202](https://github.com/esphome/esphome/pull/1202) by [@jesserockz](https://github.com/jesserockz) +- esphome: Fix set point logging issue [esphome#1201](https://github.com/esphome/esphome/pull/1201) by [@kbx81](https://github.com/kbx81) +- docs: Revert "Dallas autosetup (#551)" [esphome-docs#709](https://github.com/esphome/esphome-docs/pull/709) +- esphome: Revert "Added auto discovery and setup to Dallas Platform (#1028)" [esphome#1189](https://github.com/esphome/esphome/pull/1189) + +## Release 1.15.1 - September 14 + +- esphome: fix sntp timezone [esphome#1266](https://github.com/esphome/esphome/pull/1266) by [@glmnet](https://github.com/glmnet) +- esphome: Fix for Ruuvi voltage parsing of RAWv2 format [esphome#1267](https://github.com/esphome/esphome/pull/1267) by [@akoivist](https://github.com/akoivist) +- docs: Adds Tuya Climate temperature multiplier [esphome-docs#756](https://github.com/esphome/esphome-docs/pull/756) by [@jesserockz](https://github.com/jesserockz) +- esphome: Adds support for Tuya Climate temperature multiplier [esphome#1276](https://github.com/esphome/esphome/pull/1276) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.15.2 - September 20 + +- docs: Light triggers referenced in the "automation" guide. [esphome-docs#746](https://github.com/esphome/esphome-docs/pull/746) by [@demikl](https://github.com/demikl) +- docs: specific MacOS Docker command to launch dashboard [esphome-docs#553](https://github.com/esphome/esphome-docs/pull/553) by [@oncleben31](https://github.com/oncleben31) +- docs: Update index.rst [esphome-docs#757](https://github.com/esphome/esphome-docs/pull/757) by [@3ative](https://github.com/3ative) +- esphome: Adds new homeassistant.tag_scanned action [esphome#1281](https://github.com/esphome/esphome/pull/1281) by [@jesserockz](https://github.com/jesserockz) +- docs: add custom uart id usage [esphome-docs#765](https://github.com/esphome/esphome-docs/pull/765) by [@glmnet](https://github.com/glmnet) +- esphome: Readds the battery level for xiaomi_hhccjcy01 [esphome#1288](https://github.com/esphome/esphome/pull/1288) by [@jesserockz](https://github.com/jesserockz) +- esphome: fix(remote_receiver): Add missing pin setup for ESP32 [esphome#1252](https://github.com/esphome/esphome/pull/1252) by [@lwfitzgerald](https://github.com/lwfitzgerald) +- docs: Add docs for homeassistant.tag_scanned action [esphome-docs#763](https://github.com/esphome/esphome-docs/pull/763) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.15.3 - October 22 + +- docs: Mention CODEOWNERS magic symbol [esphome-docs#767](https://github.com/esphome/esphome-docs/pull/767) by [@glmnet](https://github.com/glmnet) +- docs: using docker image to build esphome-docs locally [esphome-docs#747](https://github.com/esphome/esphome-docs/pull/747) by [@demikl](https://github.com/demikl) +- docs: Add missing doc for rc_switch event [esphome-docs#740](https://github.com/esphome/esphome-docs/pull/740) by [@micw](https://github.com/micw) +- docs: Remove unneeded parameters [esphome-docs#752](https://github.com/esphome/esphome-docs/pull/752) by [@KTibow](https://github.com/KTibow) +- docs: Enable color_interlock for the Teckin SB50 example [esphome-docs#743](https://github.com/esphome/esphome-docs/pull/743) by [@CarlosGS](https://github.com/CarlosGS) +- docs: clarify esp8266_restore_from_flash with restore_value [esphome-docs#754](https://github.com/esphome/esphome-docs/pull/754) by [@pille](https://github.com/pille) +- docs: Update mirabella-genio-bulb.rst [esphome-docs#732](https://github.com/esphome/esphome-docs/pull/732) by [@DotNetDann](https://github.com/DotNetDann) +- docs: Fix APDS9960 datasheet link [esphome-docs#772](https://github.com/esphome/esphome-docs/pull/772) by [@JonathanTreffler](https://github.com/JonathanTreffler) +- docs: Update uart.rst [esphome-docs#771](https://github.com/esphome/esphome-docs/pull/771) by [@sublime93](https://github.com/sublime93) +- docs: Update index.rst [esphome-docs#773](https://github.com/esphome/esphome-docs/pull/773) by [@damanti-me](https://github.com/damanti-me) +- docs: HM3301 - Change type to calculation_type [esphome-docs#769](https://github.com/esphome/esphome-docs/pull/769) by [@rdehuyss](https://github.com/rdehuyss) +- docs: Update diy.rst [esphome-docs#781](https://github.com/esphome/esphome-docs/pull/781) by [@Dilbert66](https://github.com/Dilbert66) +- docs: Update docker architectures in getting started [esphome-docs#780](https://github.com/esphome/esphome-docs/pull/780) by [@jesserockz](https://github.com/jesserockz) +- docs: Remove bh7150 API reference [esphome-docs#784](https://github.com/esphome/esphome-docs/pull/784) by [@JeffResc](https://github.com/JeffResc) +- docs: Add 2.13in-ttgo-b73 to list of waveshare models [esphome-docs#786](https://github.com/esphome/esphome-docs/pull/786) by [@davewongillies](https://github.com/davewongillies) +- docs: Typo: connedted -> connected [esphome-docs#787](https://github.com/esphome/esphome-docs/pull/787) by [@johanvanderkuijl](https://github.com/johanvanderkuijl) +- docs: Update edit URL on Sonoff Basic page [esphome-docs#785](https://github.com/esphome/esphome-docs/pull/785) by [@JeffResc](https://github.com/JeffResc) +- docs: Update Sonoff Mini [esphome-docs#783](https://github.com/esphome/esphome-docs/pull/783) by [@debsahu](https://github.com/debsahu) +- docs: Set correct link to ESPColor struct [esphome-docs#788](https://github.com/esphome/esphome-docs/pull/788) by [@cdrfun](https://github.com/cdrfun) +- docs: Add battery_level note for xiaomi_hhccjcy01 [esphome-docs#761](https://github.com/esphome/esphome-docs/pull/761) by [@axilleas](https://github.com/axilleas) +- docs: Corrected the example pin mapping to GPIO mapping. [esphome-docs#789](https://github.com/esphome/esphome-docs/pull/789) by [@shaeed](https://github.com/shaeed) +- esphome: fix chip_rotation: 180 [esphome#1321](https://github.com/esphome/esphome/pull/1321) by [@ssieb](https://github.com/ssieb) +- docs: Fix links, moved to gists [esphome-docs#802](https://github.com/esphome/esphome-docs/pull/802) by [@glmnet](https://github.com/glmnet) +- docs: Update wifi.rst [esphome-docs#795](https://github.com/esphome/esphome-docs/pull/795) by [@Frankster-NL](https://github.com/Frankster-NL) +- docs: BME680 default address is 0x76 [esphome-docs#792](https://github.com/esphome/esphome-docs/pull/792) by [@trvrnrth](https://github.com/trvrnrth) +- docs: Individual BMXXXXX sensor configs are optional [esphome-docs#791](https://github.com/esphome/esphome-docs/pull/791) by [@trvrnrth](https://github.com/trvrnrth) +- esphome: Fix Light Trigger [esphome#1308](https://github.com/esphome/esphome/pull/1308) by [@MartinWelsch](https://github.com/MartinWelsch) +- esphome: Fix Xiaomi merged packet parsing [esphome#1293](https://github.com/esphome/esphome/pull/1293) by [@Alex9779](https://github.com/Alex9779) +- docs: Correct pull-up value [esphome-docs#811](https://github.com/esphome/esphome-docs/pull/811) by [@tomlut](https://github.com/tomlut) +- esphome: Fix color_interlock behavior [esphome#1325](https://github.com/esphome/esphome/pull/1325) by [@margau](https://github.com/margau) +- esphome: Fix scheduler with too many cancelled timers [esphome#1309](https://github.com/esphome/esphome/pull/1309) by [@glmnet](https://github.com/glmnet) +- esphome: fix config check in OnlyWith configuration helper [esphome#1304](https://github.com/esphome/esphome/pull/1304) by [@akomelj](https://github.com/akomelj) +- esphome: fix: Incorrect time delay conversion breaks remote_transmitter_esp8266.cpp [esphome#1322](https://github.com/esphome/esphome/pull/1322) by [@thejonesyboy](https://github.com/thejonesyboy) +- esphome: fix hm3301 AQICalculator is off by 1 [esphome#1331](https://github.com/esphome/esphome/pull/1331) by [@ikatkov](https://github.com/ikatkov) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.16.0.mdx b/src/content/docs/changelog/v1.16.0.mdx new file mode 100644 index 0000000000..3253a7cdba --- /dev/null +++ b/src/content/docs/changelog/v1.16.0.mdx @@ -0,0 +1,386 @@ +--- +description: "Changelog for ESPHome version 1.16.0." +title: "Changelog - Version 1.16.0 - February 3, 2021" +pagefind: false +slug: "changelog/v1.16.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +Hello, hello. Jesse Hills ([@jesserockz](https://github.com/jesserockz)) here. Yet another new name doing the next release. + +Hopefully from this point forward, we are looking at releasing monthly on the first Wednesday of each month, +we got the idea from Home Assistant! Thanks guys! + +There are a few new components in this release, but there was a lot of bugfixing and improvements overall and +we have a lot of PRs to go through for new features for next months release. + +Thank you to all contributors, bug reporters and patrons! Without you this project would not be possible! + +Until next month. + +## New Features + +- esphome: Enable reverse display of the Max7219 digit [esphome#1234](https://github.com/esphome/esphome/pull/1234) by [@rspaargaren](https://github.com/rspaargaren) (new-feature) +- esphome: Pulse_counter measure total pulses [esphome#1173](https://github.com/esphome/esphome/pull/1173) by [@FrankBakkerNl](https://github.com/FrankBakkerNl) (new-feature) +- esphome: Support I2C transactions with combined reads and writes [esphome#996](https://github.com/esphome/esphome/pull/996) by [@la7dja](https://github.com/la7dja) (new-feature) + +## New Integrations + +- esphome: Added tmp102 temperature sensor support [esphome#929](https://github.com/esphome/esphome/pull/929) by [@timsavage](https://github.com/timsavage) (new-integration) +- esphome: Add MCP9808 temperature sensor [esphome#1169](https://github.com/esphome/esphome/pull/1169) by [@k7hpn](https://github.com/k7hpn) (new-integration) +- esphome: Add rc522 [esphome#1298](https://github.com/esphome/esphome/pull/1298) by [@glmnet](https://github.com/glmnet) (new-integration) +- esphome: Pn532 upgrades [esphome#1302](https://github.com/esphome/esphome/pull/1302) by [@jesserockz](https://github.com/jesserockz) (breaking-change) (new-integration) +- esphome: Add support for ATC_MiThermometer [esphome#1291](https://github.com/esphome/esphome/pull/1291) by [@ahpohl](https://github.com/ahpohl) (new-integration) +- esphome: Hbridge christmas light [esphome#1251](https://github.com/esphome/esphome/pull/1251) by [@DotNetDann](https://github.com/DotNetDann) (new-integration) +- esphome: add Ili9341 display [esphome#1233](https://github.com/esphome/esphome/pull/1233) by [@Valcob](https://github.com/Valcob) (new-integration) +- esphome: components: teleinfo: electrical counter information. [esphome#1108](https://github.com/esphome/esphome/pull/1108) by [@0hax](https://github.com/0hax) (new-integration) +- esphome: add support for EZO sensor circuits [esphome#1239](https://github.com/esphome/esphome/pull/1239) by [@ssieb](https://github.com/ssieb) (new-integration) +- esphome: Add climate.hitachi_ac344 [esphome#1336](https://github.com/esphome/esphome/pull/1336) by [@honomoa](https://github.com/honomoa) (new-integration) +- esphome: SSD1331 display support [esphome#1244](https://github.com/esphome/esphome/pull/1244) by [@kbx81](https://github.com/kbx81) (new-integration) +- esphome: New display ST7735 [esphome#1066](https://github.com/esphome/esphome/pull/1066) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (new-integration) +- esphome: MCP23SXX I/O Expander - SPI [esphome#1068](https://github.com/esphome/esphome/pull/1068) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (new-integration) +- esphome: Add GIF Animation Support [esphome#1378](https://github.com/esphome/esphome/pull/1378) by [@Syndlex](https://github.com/Syndlex) (new-integration) +- esphome: Canbus + MCP2515 including ExtID support [esphome#1384](https://github.com/esphome/esphome/pull/1384) by [@danielschramm](https://github.com/danielschramm) (new-integration) +- esphome: Add full SSD1327 display support [esphome#1406](https://github.com/esphome/esphome/pull/1406) by [@kbx81](https://github.com/kbx81) (new-integration) +- esphome: SSD1322 display support [esphome#1405](https://github.com/esphome/esphome/pull/1405) by [@kbx81](https://github.com/kbx81) (new-integration) +- esphome: DS1307 real time clock component [esphome#1441](https://github.com/esphome/esphome/pull/1441) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) (new-integration) +- esphome: Add rc522 i2c [esphome#1432](https://github.com/esphome/esphome/pull/1432) by [@glmnet](https://github.com/glmnet) (cherry-picked) (new-integration) +- esphome: Add NDEF reading and writing to PN532 [esphome#1351](https://github.com/esphome/esphome/pull/1351) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) (new-integration) +- esphome: Inkplate 6 support for ESPHome [esphome#1283](https://github.com/esphome/esphome/pull/1283) by [@davidzovko](https://github.com/davidzovko) (cherry-picked) (new-integration) +- esphome: Support for MHO-C401 (fix) [esphome#1486](https://github.com/esphome/esphome/pull/1486) by [@nikito7](https://github.com/nikito7) (cherry-picked) (new-integration) + +## Breaking Changes + +- esphome: Replace CENTER_LEFT with TOP_LEFT to match other printf function [esphome#1295](https://github.com/esphome/esphome/pull/1295) by [@TheZoker](https://github.com/TheZoker) (breaking-change) +- esphome: Float output: Fix min_power and max_power adjusting when output is inverted [esphome#1250](https://github.com/esphome/esphome/pull/1250) by [@dubit0](https://github.com/dubit0) (breaking-change) +- esphome: Pn532 upgrades [esphome#1302](https://github.com/esphome/esphome/pull/1302) by [@jesserockz](https://github.com/jesserockz) (breaking-change) (new-integration) +- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler [esphome#1387](https://github.com/esphome/esphome/pull/1387) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (breaking-change) (cherry-picked) + +## Beta Fixes + +- esphome: fix safe_mode [esphome#1421](https://github.com/esphome/esphome/pull/1421) by [@alexyao2015](https://github.com/alexyao2015) (cherry-picked) +- esphome: DS1307 real time clock component [esphome#1441](https://github.com/esphome/esphome/pull/1441) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) (new-integration) +- docs: DS1307 real time clock component [esphome-docs#910](https://github.com/esphome/esphome-docs/pull/910) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- esphome: Add encode_uint32 method, similar to encode_uint16 [esphome#1427](https://github.com/esphome/esphome/pull/1427) by [@e28eta](https://github.com/e28eta) (cherry-picked) +- esphome: Rotary Encoder: Don't call callbacks in the isr [esphome#1456](https://github.com/esphome/esphome/pull/1456) by [@mknjc](https://github.com/mknjc) (cherry-picked) +- esphome: API: copy the data to send into the tcp internal buffer [esphome#1455](https://github.com/esphome/esphome/pull/1455) by [@mknjc](https://github.com/mknjc) (cherry-picked) +- esphome: Revert esptool to 2.8 [esphome#1460](https://github.com/esphome/esphome/pull/1460) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- esphome: Whirlpool ac [esphome#1467](https://github.com/esphome/esphome/pull/1467) by [@mmanza](https://github.com/mmanza) (cherry-picked) +- esphome: Bump pytest-mock from 3.3.1 to 3.5.1 [esphome#1458](https://github.com/esphome/esphome/pull/1458) by [@dependabot[bot]](https://github.com/dependabot[bot]) (cherry-picked) +- esphome: Add rc522 i2c [esphome#1432](https://github.com/esphome/esphome/pull/1432) by [@glmnet](https://github.com/glmnet) (cherry-picked) (new-integration) +- docs: add rc522 i2c config variant [esphome-docs#933](https://github.com/esphome/esphome-docs/pull/933) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- esphome: make time components polling components [esphome#1443](https://github.com/esphome/esphome/pull/1443) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler [esphome#1387](https://github.com/esphome/esphome/pull/1387) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (breaking-change) (cherry-picked) +- docs: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler [esphome-docs#874](https://github.com/esphome/esphome-docs/pull/874) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) +- esphome: Add NDEF reading and writing to PN532 [esphome#1351](https://github.com/esphome/esphome/pull/1351) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) (new-integration) +- docs: Add docs for pn532 NDEF functionality [esphome-docs#936](https://github.com/esphome/esphome-docs/pull/936) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- esphome: Inkplate 6 support for ESPHome [esphome#1283](https://github.com/esphome/esphome/pull/1283) by [@davidzovko](https://github.com/davidzovko) (cherry-picked) (new-integration) +- docs: Adding Inkplate 6 docs [esphome-docs#778](https://github.com/esphome/esphome-docs/pull/778) by [@nitko12](https://github.com/nitko12) (cherry-picked) +- esphome: time sync notification [esphome#1442](https://github.com/esphome/esphome/pull/1442) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- docs: update time (sync) documentation [esphome-docs#924](https://github.com/esphome/esphome-docs/pull/924) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- esphome: rename read/write to read/time/write_time [esphome#1468](https://github.com/esphome/esphome/pull/1468) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- esphome: Improve ccs811 precision [esphome#1428](https://github.com/esphome/esphome/pull/1428) by [@TheNetAdmin](https://github.com/TheNetAdmin) (cherry-picked) +- esphome: make fade_to*, lighten, and darken const [esphome#1450](https://github.com/esphome/esphome/pull/1450) by [@toelke](https://github.com/toelke) (cherry-picked) +- esphome: SPI wasnt being disabled after display update [esphome#1493](https://github.com/esphome/esphome/pull/1493) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) +- esphome: Add support for string-type Tuya datapoints [esphome#1488](https://github.com/esphome/esphome/pull/1488) by [@pauln](https://github.com/pauln) (cherry-picked) +- esphome: Add healthcheck [esphome#1492](https://github.com/esphome/esphome/pull/1492) by [@Klarstein](https://github.com/Klarstein) (cherry-picked) +- esphome: Support for MHO-C401 (fix) [esphome#1486](https://github.com/esphome/esphome/pull/1486) by [@nikito7](https://github.com/nikito7) (cherry-picked) (new-integration) +- docs: Add MHO-C401 [esphome-docs#957](https://github.com/esphome/esphome-docs/pull/957) by [@nikito7](https://github.com/nikito7) (cherry-picked) +- esphome: Allow SCD30 sensors to be optional [esphome#1502](https://github.com/esphome/esphome/pull/1502) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- docs: Update scd30 docs to show sensors are optional [esphome-docs#970](https://github.com/esphome/esphome-docs/pull/970) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- esphome: fix esp8266 remote_transmitter using incorrect timings [esphome#1465](https://github.com/esphome/esphome/pull/1465) by [@hcoohb](https://github.com/hcoohb) (cherry-picked) +- esphome: rc522 increased retry loop count [esphome#1506](https://github.com/esphome/esphome/pull/1506) by [@glmnet](https://github.com/glmnet) (cherry-picked) + +## Release 1.16.1 - February 14 + +- esphome: Fix PN532 SPI communication [esphome#1511](https://github.com/esphome/esphome/pull/1511) by [@jesserockz](https://github.com/jesserockz) +- esphome: Update Dockerfile [esphome#1517](https://github.com/esphome/esphome/pull/1517) by [@Klarstein](https://github.com/Klarstein) +- esphome: Fixed transfer_byte to write_byte for 8266 [esphome#1529](https://github.com/esphome/esphome/pull/1529) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Added Energy sensor to hlw8012 [esphome#1198](https://github.com/esphome/esphome/pull/1198) by [@FrankBakkerNl](https://github.com/FrankBakkerNl) (new-feature) +- docs: Added Energy sensor to hlw8012 [esphome-docs#707](https://github.com/esphome/esphome-docs/pull/707) by [@FrankBakkerNl](https://github.com/FrankBakkerNl) +- esphome: MCP230xx open drain interrupt pins [esphome#1243](https://github.com/esphome/esphome/pull/1243) by [@kbx81](https://github.com/kbx81) +- docs: MCP230xx open drain interrupt pins [esphome-docs#728](https://github.com/esphome/esphome-docs/pull/728) by [@kbx81](https://github.com/kbx81) + +## Release 1.16.2 - February 20 + +- docs: Incomplete sentence [esphome-docs#1004](https://github.com/esphome/esphome-docs/pull/1004) by [@jkmaxwell](https://github.com/jkmaxwell) +- esphome: auto_detect check was backwards [esphome#1536](https://github.com/esphome/esphome/pull/1536) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- docs: Make explicit examples for splitting and joining using partitions [esphome-docs#1008](https://github.com/esphome/esphome-docs/pull/1008) by [@jesserockz](https://github.com/jesserockz) +- docs: Title for Connecting your device to Home Assistant [esphome-docs#1013](https://github.com/esphome/esphome-docs/pull/1013) by [@jesserockz](https://github.com/jesserockz) +- esphome: Added Waveshare 2.90inch V2 e-ink display [esphome#1538](https://github.com/esphome/esphome/pull/1538) by [@K-r-i-s-t-i-a-n](https://github.com/K-r-i-s-t-i-a-n) +- docs: Added documentation for Waveshare 2.90inch V2 e-ink display [esphome-docs#1010](https://github.com/esphome/esphome-docs/pull/1010) by [@K-r-i-s-t-i-a-n](https://github.com/K-r-i-s-t-i-a-n) +- esphome: Add reverse_enable for max7219 [esphome#1489](https://github.com/esphome/esphome/pull/1489) by [@ssieb](https://github.com/ssieb) +- docs: Add reverse_enable for max7219 [esphome-docs#983](https://github.com/esphome/esphome-docs/pull/983) by [@ssieb](https://github.com/ssieb) +- esphome: Fix safe mode ota flashing under certain configurations [esphome#1534](https://github.com/esphome/esphome/pull/1534) by [@jesserockz](https://github.com/jesserockz) + +## All changes + +- docs: Update bang_bang doc, changelog fix [esphome-docs#667](https://github.com/esphome/esphome-docs/pull/667) by [@kbx81](https://github.com/kbx81) +- esphome: Update cryptography requirement from \<3,\>=2.0.0 to \>=2.0.0,\<4 [esphome#1206](https://github.com/esphome/esphome/pull/1206) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: fix dashboard select drop down [esphome#1205](https://github.com/esphome/esphome/pull/1205) by [@glmnet](https://github.com/glmnet) +- docs: New prometheus configuration [esphome-docs#713](https://github.com/esphome/esphome-docs/pull/713) +- esphome: Cleanup web server prometheus integration [esphome#1192](https://github.com/esphome/esphome/pull/1192) +- esphome: Remove overview job from CI [esphome#1216](https://github.com/esphome/esphome/pull/1216) +- esphome: Bump pytest from 5.4.3 to 6.0.0 [esphome#1220](https://github.com/esphome/esphome/pull/1220) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix ci-custom.py const.py ordered check and improve code [esphome#1222](https://github.com/esphome/esphome/pull/1222) +- esphome: Add hyphen to supported name characters [esphome#1223](https://github.com/esphome/esphome/pull/1223) by [@ianleeder](https://github.com/ianleeder) +- docs: Add hyphen to supported name characters [esphome-docs#719](https://github.com/esphome/esphome-docs/pull/719) by [@ianleeder](https://github.com/ianleeder) +- esphome: Bump protobuf from 3.12.2 to 3.12.4 [esphome#1230](https://github.com/esphome/esphome/pull/1230) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Clean up ALLOWED_CHARS [esphome#1235](https://github.com/esphome/esphome/pull/1235) by [@ianleeder](https://github.com/ianleeder) +- esphome: Bump pytest from 6.0.0 to 6.0.1 [esphome#1236](https://github.com/esphome/esphome/pull/1236) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytest-mock from 3.2.0 to 3.3.1 [esphome#1263](https://github.com/esphome/esphome/pull/1263) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump protobuf from 3.12.4 to 3.13.0 [esphome#1254](https://github.com/esphome/esphome/pull/1254) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- docs: Update diy.rst [esphome-docs#760](https://github.com/esphome/esphome-docs/pull/760) by [@kquinsland](https://github.com/kquinsland) +- esphome: Bump pylint from 2.5.3 to 2.6.0 [esphome#1262](https://github.com/esphome/esphome/pull/1262) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytest from 6.0.1 to 6.0.2 [esphome#1280](https://github.com/esphome/esphome/pull/1280) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump platformio from 4.3.4 to 5.0.1 [esphome#1275](https://github.com/esphome/esphome/pull/1275) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Update max31855.cpp [esphome#1273](https://github.com/esphome/esphome/pull/1273) by [@EmbeddedDevver](https://github.com/EmbeddedDevver) +- esphome: Add Fan and Swing Support to fujitsu-general Component [esphome#1287](https://github.com/esphome/esphome/pull/1287) by [@kpelzel](https://github.com/kpelzel) +- esphome: Replace CENTER_LEFT with TOP_LEFT to match other printf function [esphome#1295](https://github.com/esphome/esphome/pull/1295) by [@TheZoker](https://github.com/TheZoker) (breaking-change) +- esphome: Enable reverse display of the Max7219 digit [esphome#1234](https://github.com/esphome/esphome/pull/1234) by [@rspaargaren](https://github.com/rspaargaren) (new-feature) +- docs: update Max7219 digit with reverse option [esphome-docs#726](https://github.com/esphome/esphome-docs/pull/726) by [@rspaargaren](https://github.com/rspaargaren) +- esphome: Bump paho-mqtt from 1.5.0 to 1.5.1 [esphome#1297](https://github.com/esphome/esphome/pull/1297) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytest-cov from 2.10.0 to 2.10.1 [esphome#1253](https://github.com/esphome/esphome/pull/1253) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: CI - Don't fast fail testing so results are not hidden in matrix builds [esphome#1286](https://github.com/esphome/esphome/pull/1286) by [@jesserockz](https://github.com/jesserockz) +- esphome: Support Daikin horizontal swing in climate_ir [esphome#1247](https://github.com/esphome/esphome/pull/1247) by [@buxtronix](https://github.com/buxtronix) +- esphome: Table row wasn't closed [esphome#1310](https://github.com/esphome/esphome/pull/1310) by [@Ivo-tje](https://github.com/Ivo-tje) +- esphome: Typo in the pm2.5 grid [esphome#1311](https://github.com/esphome/esphome/pull/1311) by [@jamesgao](https://github.com/jamesgao) +- esphome: Float output: Fix min_power and max_power adjusting when output is inverted [esphome#1250](https://github.com/esphome/esphome/pull/1250) by [@dubit0](https://github.com/dubit0) (breaking-change) +- esphome: Add new time.has_time condition [esphome#1255](https://github.com/esphome/esphome/pull/1255) by [@ashmckenzie](https://github.com/ashmckenzie) +- docs: Add time.has_time documentation [esphome-docs#782](https://github.com/esphome/esphome-docs/pull/782) by [@ashmckenzie](https://github.com/ashmckenzie) +- esphome: handle windows filenames [esphome#1307](https://github.com/esphome/esphome/pull/1307) by [@glmnet](https://github.com/glmnet) +- esphome: Bump flake8 from 3.8.3 to 3.8.4 [esphome#1319](https://github.com/esphome/esphome/pull/1319) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytest from 6.0.2 to 6.1.1 [esphome#1320](https://github.com/esphome/esphome/pull/1320) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump colorlog from 4.2.1 to 4.4.0 [esphome#1323](https://github.com/esphome/esphome/pull/1323) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Add LYWSD02 battery sensor [esphome#1334](https://github.com/esphome/esphome/pull/1334) by [@Alex9779](https://github.com/Alex9779) +- docs: add battery sensor for lywsd02 [esphome-docs#821](https://github.com/esphome/esphome-docs/pull/821) by [@sermayoral](https://github.com/sermayoral) +- docs: Small typo fixes for Sonoff T1 UK 3 Gang [esphome-docs#815](https://github.com/esphome/esphome-docs/pull/815) by [@r15ch13](https://github.com/r15ch13) +- esphome: Added tmp102 temperature sensor support [esphome#929](https://github.com/esphome/esphome/pull/929) by [@timsavage](https://github.com/timsavage) (new-integration) +- docs: Added tmp102 Temperature sensor docs [esphome-docs#451](https://github.com/esphome/esphome-docs/pull/451) by [@timsavage](https://github.com/timsavage) +- esphome: Add MCP9808 temperature sensor [esphome#1169](https://github.com/esphome/esphome/pull/1169) by [@k7hpn](https://github.com/k7hpn) (new-integration) +- docs: Add documentation for MCP9808 sensor [esphome-docs#691](https://github.com/esphome/esphome-docs/pull/691) by [@k7hpn](https://github.com/k7hpn) +- esphome: Add rc522 [esphome#1298](https://github.com/esphome/esphome/pull/1298) by [@glmnet](https://github.com/glmnet) (new-integration) +- docs: add rc522 docs [esphome-docs#810](https://github.com/esphome/esphome-docs/pull/810) by [@glmnet](https://github.com/glmnet) +- esphome: Add new codeowners [esphome#1335](https://github.com/esphome/esphome/pull/1335) by [@jesserockz](https://github.com/jesserockz) +- esphome: Pn532 upgrades [esphome#1302](https://github.com/esphome/esphome/pull/1302) by [@jesserockz](https://github.com/jesserockz) (breaking-change) (new-integration) +- docs: Update PN532 docs to add I2C [esphome-docs#798](https://github.com/esphome/esphome-docs/pull/798) by [@jesserockz](https://github.com/jesserockz) +- esphome: Fixed CLIMATE_SWING_HORIZONTAL typo [esphome#1340](https://github.com/esphome/esphome/pull/1340) by [@rob-deutsch](https://github.com/rob-deutsch) +- esphome: add illuminance for xiaomi_mjyd02yla [esphome#1299](https://github.com/esphome/esphome/pull/1299) by [@al-one](https://github.com/al-one) +- docs: add illuminance for xiaomi_mjyd02yla [esphome-docs#779](https://github.com/esphome/esphome-docs/pull/779) by [@al-one](https://github.com/al-one) +- esphome: Add support for WPA2-EAP enterprise WiFi to ESP8266s. [esphome#1332](https://github.com/esphome/esphome/pull/1332) by [@tomtom5152](https://github.com/tomtom5152) +- docs: Update enterprise authentication docs to indicate support for ESP8266s [esphome-docs#814](https://github.com/esphome/esphome-docs/pull/814) by [@tomtom5152](https://github.com/tomtom5152) +- esphome: Pulse_counter measure total pulses [esphome#1173](https://github.com/esphome/esphome/pull/1173) by [@FrankBakkerNl](https://github.com/FrankBakkerNl) (new-feature) +- docs: Added docs for pulse_counter total [esphome-docs#705](https://github.com/esphome/esphome-docs/pull/705) by [@FrankBakkerNl](https://github.com/FrankBakkerNl) +- esphome: Add on_clockwise and on_anticlockwise triggers to rotary encoder [esphome#1330](https://github.com/esphome/esphome/pull/1330) by [@jesserockz](https://github.com/jesserockz) +- docs: Add docs for rotary encoder on_clockwise and on_anticlockwise triggers [esphome-docs#807](https://github.com/esphome/esphome-docs/pull/807) by [@jesserockz](https://github.com/jesserockz) +- esphome: FastLED: Add YAML option for data rate [esphome#1338](https://github.com/esphome/esphome/pull/1338) by [@youknow0](https://github.com/youknow0) +- docs: FastLED: Add docs for new YAML option data_rate [esphome-docs#824](https://github.com/esphome/esphome-docs/pull/824) by [@youknow0](https://github.com/youknow0) +- esphome: [Image] add dither option for image processing [esphome#1317](https://github.com/esphome/esphome/pull/1317) by [@zhujunsan](https://github.com/zhujunsan) +- docs: [Image] add dither option for image processing [esphome-docs#796](https://github.com/esphome/esphome-docs/pull/796) by [@zhujunsan](https://github.com/zhujunsan) +- esphome: Update actions to move away from set-env [esphome#1349](https://github.com/esphome/esphome/pull/1349) by [@jesserockz](https://github.com/jesserockz) +- esphome: Move CONF_CONTRAST to const.py [esphome#1352](https://github.com/esphome/esphome/pull/1352) by [@jesserockz](https://github.com/jesserockz) +- esphome: Bump platformio from 5.0.1 to 5.0.2 [esphome#1355](https://github.com/esphome/esphome/pull/1355) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- docs: Fix connection typo in FAQ [esphome-docs#831](https://github.com/esphome/esphome-docs/pull/831) by [@KTibow](https://github.com/KTibow) +- docs: Add TuyaMCU sample config for WF-DS01 [esphome-docs#829](https://github.com/esphome/esphome-docs/pull/829) by [@davet2001](https://github.com/davet2001) +- docs: Link to Winsen ZE08-CH2O custom component [esphome-docs#833](https://github.com/esphome/esphome-docs/pull/833) by [@cretep](https://github.com/cretep) +- esphome: Adds support for RF Bridge advanced codes [esphome#1246](https://github.com/esphome/esphome/pull/1246) by [@jesserockz](https://github.com/jesserockz) +- docs: Update RF Bridge documentation for advanced codes [esphome-docs#731](https://github.com/esphome/esphome-docs/pull/731) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add contrast option to PCD8544 [esphome#1348](https://github.com/esphome/esphome/pull/1348) by [@dzervas](https://github.com/dzervas) +- docs: Add contrast option docs to PCD8544 [esphome-docs#834](https://github.com/esphome/esphome-docs/pull/834) by [@dzervas](https://github.com/dzervas) +- esphome: Add support for ATC_MiThermometer [esphome#1291](https://github.com/esphome/esphome/pull/1291) by [@ahpohl](https://github.com/ahpohl) (new-integration) +- docs: Add support for ATC_MiThermometer, update bindkey generation procedure [esphome-docs#777](https://github.com/esphome/esphome-docs/pull/777) by [@ahpohl](https://github.com/ahpohl) +- esphome: Bump pytest from 6.1.1 to 6.1.2 [esphome#1342](https://github.com/esphome/esphome/pull/1342) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump voluptuous from 0.11.7 to 0.12.0 [esphome#1296](https://github.com/esphome/esphome/pull/1296) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytz from 2020.1 to 2020.4 [esphome#1354](https://github.com/esphome/esphome/pull/1354) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Add a datapoint to sync the Tuya MCU minimum brightness [esphome#1347](https://github.com/esphome/esphome/pull/1347) by [@cprussin](https://github.com/cprussin) +- docs: Document tuya dimmer min_value_datapoint [esphome-docs#832](https://github.com/esphome/esphome-docs/pull/832) by [@cprussin](https://github.com/cprussin) +- esphome: Support I2C transactions with combined reads and writes [esphome#996](https://github.com/esphome/esphome/pull/996) by [@la7dja](https://github.com/la7dja) (new-feature) +- esphome: Hbridge christmas light [esphome#1251](https://github.com/esphome/esphome/pull/1251) by [@DotNetDann](https://github.com/DotNetDann) (new-integration) +- docs: Hbridge christmas light [esphome-docs#733](https://github.com/esphome/esphome-docs/pull/733) by [@DotNetDann](https://github.com/DotNetDann) +- docs: Add a note about INPUT_PULLUP [esphome-docs#830](https://github.com/esphome/esphome-docs/pull/830) by [@wodor](https://github.com/wodor) +- docs: Update waveshare_epaper.rst [esphome-docs#813](https://github.com/esphome/esphome-docs/pull/813) by [@thedexboy](https://github.com/thedexboy) +- docs: added warning to waveshare 2.7 inch display [esphome-docs#818](https://github.com/esphome/esphome-docs/pull/818) by [@damanti-me](https://github.com/damanti-me) +- docs: Update to I2C docs to explain I2C daisy chaining [esphome-docs#812](https://github.com/esphome/esphome-docs/pull/812) by [@the-impaler](https://github.com/the-impaler) +- docs: I2c text update [esphome-docs#839](https://github.com/esphome/esphome-docs/pull/839) by [@jesserockz](https://github.com/jesserockz) +- esphome: add Ili9341 display [esphome#1233](https://github.com/esphome/esphome/pull/1233) by [@Valcob](https://github.com/Valcob) (new-integration) +- esphome: Correcting Hertz symbol [esphome#1364](https://github.com/esphome/esphome/pull/1364) by [@robdejonge](https://github.com/robdejonge) +- docs: remove use_custom_code [esphome-docs#841](https://github.com/esphome/esphome-docs/pull/841) by [@glmnet](https://github.com/glmnet) +- esphome: Bump colorlog from 4.4.0 to 4.6.2 [esphome#1367](https://github.com/esphome/esphome/pull/1367) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Add support for Tuya MCU 0x1C (obtain local time) [esphome#1344](https://github.com/esphome/esphome/pull/1344) by [@Yarikx](https://github.com/Yarikx) +- docs: Specify clock to be used in Tuya MCU [esphome-docs#827](https://github.com/esphome/esphome-docs/pull/827) by [@Yarikx](https://github.com/Yarikx) +- esphome: Separate Tuya climate temperature_multiplier to current/target multiplier [esphome#1345](https://github.com/esphome/esphome/pull/1345) by [@Yarikx](https://github.com/Yarikx) +- docs: Add separate current/target Tuya Climate multipliers [esphome-docs#828](https://github.com/esphome/esphome-docs/pull/828) by [@Yarikx](https://github.com/Yarikx) +- esphome: Add bounds check for X [esphome#1371](https://github.com/esphome/esphome/pull/1371) by [@ssieb](https://github.com/ssieb) +- esphome: scd30: Allow setting ambient pressure compensation [esphome#1365](https://github.com/esphome/esphome/pull/1365) by [@matoxp](https://github.com/matoxp) +- docs: scd30: Add missing configuration variables [esphome-docs#842](https://github.com/esphome/esphome-docs/pull/842) by [@matoxp](https://github.com/matoxp) +- esphome: components: teleinfo: electrical counter information. [esphome#1108](https://github.com/esphome/esphome/pull/1108) by [@0hax](https://github.com/0hax) (new-integration) +- docs: Teleinfo [esphome-docs#666](https://github.com/esphome/esphome-docs/pull/666) by [@0hax](https://github.com/0hax) +- esphome: Adding ADE7953 irq_pin [esphome#1359](https://github.com/esphome/esphome/pull/1359) by [@djwmarcx](https://github.com/djwmarcx) +- docs: Adding ADE7953 irq_pin [esphome-docs#848](https://github.com/esphome/esphome-docs/pull/848) by [@djwmarcx](https://github.com/djwmarcx) +- docs: Fix MCP23008 example [esphome-docs#845](https://github.com/esphome/esphome-docs/pull/845) by [@djtef](https://github.com/djtef) +- esphome: add support for EZO sensor circuits [esphome#1239](https://github.com/esphome/esphome/pull/1239) by [@ssieb](https://github.com/ssieb) (new-integration) +- docs: add docs for new EZO sensor circuits [esphome-docs#727](https://github.com/esphome/esphome-docs/pull/727) by [@ssieb](https://github.com/ssieb) +- esphome: Bump platformio from 5.0.2 to 5.0.3 [esphome#1372](https://github.com/esphome/esphome/pull/1372) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- docs: Add Hitachi AC344 IR Climate documentation [esphome-docs#822](https://github.com/esphome/esphome-docs/pull/822) by [@honomoa](https://github.com/honomoa) +- esphome: Add climate.hitachi_ac344 [esphome#1336](https://github.com/esphome/esphome/pull/1336) by [@honomoa](https://github.com/honomoa) (new-integration) +- esphome: add CODEOWNER for new ezo component [esphome#1379](https://github.com/esphome/esphome/pull/1379) by [@ssieb](https://github.com/ssieb) +- esphome: SSD1331 display support [esphome#1244](https://github.com/esphome/esphome/pull/1244) by [@kbx81](https://github.com/kbx81) (new-integration) +- docs: Add SSD1331 docs [esphome-docs#729](https://github.com/esphome/esphome-docs/pull/729) by [@kbx81](https://github.com/kbx81) +- esphome: Add kbx81 to CODEOWNERS [esphome#1380](https://github.com/esphome/esphome/pull/1380) by [@kbx81](https://github.com/kbx81) +- esphome: Added 332 color conversion and RGB/BGR/GRB formats [esphome#1381](https://github.com/esphome/esphome/pull/1381) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Fixed logger broken by colorama [esphome#1385](https://github.com/esphome/esphome/pull/1385) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- esphome: Formatted test yaml files [esphome#1382](https://github.com/esphome/esphome/pull/1382) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- docs: Updated link to ble_monitor (previous mitemp_bt) [esphome-docs#849](https://github.com/esphome/esphome-docs/pull/849) by [@Ernst79](https://github.com/Ernst79) +- docs: Fix ac dimmer example code [esphome-docs#852](https://github.com/esphome/esphome-docs/pull/852) by [@rradar](https://github.com/rradar) +- docs: DIY: Add Blogpost for SP501E as WS2812 LED Controller [esphome-docs#854](https://github.com/esphome/esphome-docs/pull/854) by [@margau](https://github.com/margau) +- docs: Replace Hass.io [esphome-docs#853](https://github.com/esphome/esphome-docs/pull/853) by [@fabaff](https://github.com/fabaff) +- docs: Update deep_sleep.rst [esphome-docs#850](https://github.com/esphome/esphome-docs/pull/850) by [@anekinloewe](https://github.com/anekinloewe) +- docs: Adding IAQ board in cookbook section [esphome-docs#844](https://github.com/esphome/esphome-docs/pull/844) by [@nkitanov](https://github.com/nkitanov) +- esphome: New display ST7735 [esphome#1066](https://github.com/esphome/esphome/pull/1066) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (new-integration) +- docs: Fix broken YAML in MQTT on_json_message example [esphome-docs#620](https://github.com/esphome/esphome-docs/pull/620) by [@napieraj](https://github.com/napieraj) +- esphome: Configurable OTA Safe Mode [esphome#1393](https://github.com/esphome/esphome/pull/1393) by [@alexyao2015](https://github.com/alexyao2015) +- docs: Update docs for Configurable OTA Safe Mode [esphome-docs#859](https://github.com/esphome/esphome-docs/pull/859) by [@alexyao2015](https://github.com/alexyao2015) +- docs: Update ethernet.rst [esphome-docs#863](https://github.com/esphome/esphome-docs/pull/863) by [@adezerega](https://github.com/adezerega) +- esphome: Add option to suppress embedded MCU updates on certain datapoints [esphome#1396](https://github.com/esphome/esphome/pull/1396) by [@stubs12](https://github.com/stubs12) +- docs: Documentation for tuya ignore_mcu_update_on_datapoints setting [esphome-docs#868](https://github.com/esphome/esphome-docs/pull/868) by [@stubs12](https://github.com/stubs12) +- esphome: scd30: Allow setting temperature offset [esphome#1400](https://github.com/esphome/esphome/pull/1400) by [@matoxp](https://github.com/matoxp) +- docs: scd30: Document temperature_offset setting [esphome-docs#864](https://github.com/esphome/esphome-docs/pull/864) by [@matoxp](https://github.com/matoxp) +- esphome: fix HTTP Request reusing connections with different hosts [esphome#1383](https://github.com/esphome/esphome/pull/1383) by [@Anonym-tsk](https://github.com/Anonym-tsk) +- docs: Ili9341 doc update [esphome-docs#870](https://github.com/esphome/esphome-docs/pull/870) by [@kbx81](https://github.com/kbx81) +- esphome: MCP23SXX I/O Expander - SPI [esphome#1068](https://github.com/esphome/esphome/pull/1068) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (new-integration) +- docs: MCP23S08-Docs [esphome-docs#613](https://github.com/esphome/esphome-docs/pull/613) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Bump pyserial from 3.4 to 3.5 [esphome#1394](https://github.com/esphome/esphome/pull/1394) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix Tuya initialisation regression [esphome#1408](https://github.com/esphome/esphome/pull/1408) by [@rmounce](https://github.com/rmounce) +- docs: Update max31856.rst [esphome-docs#883](https://github.com/esphome/esphome-docs/pull/883) by [@emuehlstein](https://github.com/emuehlstein) +- docs: Fix one of the commens in code block [esphome-docs#881](https://github.com/esphome/esphome-docs/pull/881) by [@HepoH3](https://github.com/HepoH3) +- docs: Update wifi.rst [esphome-docs#873](https://github.com/esphome/esphome-docs/pull/873) by [@Pack3tL0ss](https://github.com/Pack3tL0ss) +- docs: Update mirabella-genio-bulb.rst [esphome-docs#857](https://github.com/esphome/esphome-docs/pull/857) by [@kalebzettl](https://github.com/kalebzettl) +- docs: Update teckin sb50 entry as they cannot be flashed anymore [esphome-docs#878](https://github.com/esphome/esphome-docs/pull/878) by [@justyns](https://github.com/justyns) +- docs: Change all instances of travis to github actions [esphome-docs#860](https://github.com/esphome/esphome-docs/pull/860) by [@alexyao2015](https://github.com/alexyao2015) +- docs: Improve obtaining bind key [esphome-docs#843](https://github.com/esphome/esphome-docs/pull/843) by [@abelmatser](https://github.com/abelmatser) +- docs: Add clarification about "update_interval" to SDS011 sensor documentation [esphome-docs#770](https://github.com/esphome/esphome-docs/pull/770) by [@maurice-schleussinger](https://github.com/maurice-schleussinger) +- docs: Cookbook: Light Strip [esphome-docs#805](https://github.com/esphome/esphome-docs/pull/805) by [@lein1013](https://github.com/lein1013) +- docs: Optimize images [esphome-docs#799](https://github.com/esphome/esphome-docs/pull/799) by [@JeffResc](https://github.com/JeffResc) +- docs: Add troubleshooting help with light partition [esphome-docs#851](https://github.com/esphome/esphome-docs/pull/851) by [@TheLastGimbus](https://github.com/TheLastGimbus) +- docs: Update bang_bang.rst [esphome-docs#524](https://github.com/esphome/esphome-docs/pull/524) by [@xheronimo](https://github.com/xheronimo) +- docs: Fixed docs to match xiaomi rename [esphome-docs#606](https://github.com/esphome/esphome-docs/pull/606) by [@WoLpH](https://github.com/WoLpH) +- docs: add another example without MQTT [esphome-docs#573](https://github.com/esphome/esphome-docs/pull/573) by [@adonno](https://github.com/adonno) +- docs: Show example of calling HA script [esphome-docs#688](https://github.com/esphome/esphome-docs/pull/688) by [@glmnet](https://github.com/glmnet) +- docs: Update pulse_counter.rst [esphome-docs#689](https://github.com/esphome/esphome-docs/pull/689) by [@neographikal](https://github.com/neographikal) +- docs: More descriptive information for noobs [esphome-docs#658](https://github.com/esphome/esphome-docs/pull/658) by [@haryadoon](https://github.com/haryadoon) +- esphome: Run task for VS Code [esphome#1361](https://github.com/esphome/esphome/pull/1361) by [@gitolicious](https://github.com/gitolicious) +- docs: esp32_dac.rst - Add light component to example [esphome-docs#885](https://github.com/esphome/esphome-docs/pull/885) by [@ferbar](https://github.com/ferbar) +- docs: Update ethernet.rst [esphome-docs#887](https://github.com/esphome/esphome-docs/pull/887) by [@dziobson](https://github.com/dziobson) +- docs: Adding gif animation docs [esphome-docs#856](https://github.com/esphome/esphome-docs/pull/856) by [@Syndlex](https://github.com/Syndlex) +- esphome: Add GIF Animation Support [esphome#1378](https://github.com/esphome/esphome/pull/1378) by [@Syndlex](https://github.com/Syndlex) (new-integration) +- docs: Update diy.rst [esphome-docs#888](https://github.com/esphome/esphome-docs/pull/888) by [@pieterbrink123](https://github.com/pieterbrink123) +- esphome: Bump tornado from 6.0.4 to 6.1 [esphome#1353](https://github.com/esphome/esphome/pull/1353) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix mDNS webserver port and expose prometheus service [esphome#1389](https://github.com/esphome/esphome/pull/1389) by [@richardweinberger](https://github.com/richardweinberger) +- esphome: Bump esptool from 2.8 to 3.0 [esphome#1357](https://github.com/esphome/esphome/pull/1357) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- docs: Update diy.rst [esphome-docs#891](https://github.com/esphome/esphome-docs/pull/891) by [@lairsdragon](https://github.com/lairsdragon) +- docs: Update sim800l.rst [esphome-docs#893](https://github.com/esphome/esphome-docs/pull/893) by [@tyomikh](https://github.com/tyomikh) +- docs: docs: necessary registration of node in HA [esphome-docs#741](https://github.com/esphome/esphome-docs/pull/741) by [@torwag](https://github.com/torwag) +- docs: display: st7789v: Set GPIO0 as INPUT_PULLUP [esphome-docs#759](https://github.com/esphome/esphome-docs/pull/759) by [@kylemanna](https://github.com/kylemanna) +- docs: clarify VCC, wrt #1452 [esphome-docs#753](https://github.com/esphome/esphome-docs/pull/753) by [@pille](https://github.com/pille) +- docs: Update docs about MQTT lambdas [esphome-docs#809](https://github.com/esphome/esphome-docs/pull/809) by [@matikij](https://github.com/matikij) +- docs: Add manual for Sonoff T3 EU 3 Gang [esphome-docs#816](https://github.com/esphome/esphome-docs/pull/816) by [@r15ch13](https://github.com/r15ch13) +- docs: Add get_setup_priority() to Custom sensor docs [esphome-docs#819](https://github.com/esphome/esphome-docs/pull/819) by [@mjkl-gh](https://github.com/mjkl-gh) +- docs: Change on_message topics into a yaml list for deep_sleep docs [esphome-docs#867](https://github.com/esphome/esphome-docs/pull/867) by [@mrrsm](https://github.com/mrrsm) +- docs: Update pzem Example configuration entry (bad stop bit) [esphome-docs#872](https://github.com/esphome/esphome-docs/pull/872) by [@Francis-labo](https://github.com/Francis-labo) +- docs: Update next from current 20201221 [esphome-docs#894](https://github.com/esphome/esphome-docs/pull/894) by [@jesserockz](https://github.com/jesserockz) +- docs: Update sonof_basic.rst - incorrect example [esphome-docs#892](https://github.com/esphome/esphome-docs/pull/892) by [@bvansambeek](https://github.com/bvansambeek) +- docs: Update apds9960.rst [esphome-docs#895](https://github.com/esphome/esphome-docs/pull/895) by [@DrRob](https://github.com/DrRob) +- esphome: Canbus + MCP2515 including ExtID support [esphome#1384](https://github.com/esphome/esphome/pull/1384) by [@danielschramm](https://github.com/danielschramm) (new-integration) +- docs: Canbus + MCP2515 [esphome-docs#823](https://github.com/esphome/esphome-docs/pull/823) by [@danielschramm](https://github.com/danielschramm) +- esphome: Add "ESPHOME_NOGITIGNORE" env var to prevent .gitignore creation [esphome#1425](https://github.com/esphome/esphome/pull/1425) by [@acshef](https://github.com/acshef) +- esphome: Add full SSD1327 display support [esphome#1406](https://github.com/esphome/esphome/pull/1406) by [@kbx81](https://github.com/kbx81) (new-integration) +- docs: Add SSD1327 display docs [esphome-docs#875](https://github.com/esphome/esphome-docs/pull/875) by [@kbx81](https://github.com/kbx81) +- esphome: SSD1322 display support [esphome#1405](https://github.com/esphome/esphome/pull/1405) by [@kbx81](https://github.com/kbx81) (new-integration) +- docs: Add SSD1322 doc [esphome-docs#869](https://github.com/esphome/esphome-docs/pull/869) by [@kbx81](https://github.com/kbx81) +- esphome: Expose port 6052 to make reverse proxy work [esphome#1437](https://github.com/esphome/esphome/pull/1437) by [@Klarstein](https://github.com/Klarstein) +- esphome: rc_switch: Fix Sync signal sent after the code [esphome#1426](https://github.com/esphome/esphome/pull/1426) by [@M95D](https://github.com/M95D) +- docs: added slow mode and detach time to servo [esphome-docs#896](https://github.com/esphome/esphome-docs/pull/896) by [@andreashergert1984](https://github.com/andreashergert1984) +- esphome: added slow mode and detach time to servo [esphome#1413](https://github.com/esphome/esphome/pull/1413) by [@andreashergert1984](https://github.com/andreashergert1984) +- esphome: Bump pytz from 2020.4 to 2020.5 [esphome#1430](https://github.com/esphome/esphome/pull/1430) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytest from 6.1.2 to 6.2.1 [esphome#1422](https://github.com/esphome/esphome/pull/1422) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- docs: Update diy.rst [esphome-docs#913](https://github.com/esphome/esphome-docs/pull/913) by [@mikosoft83](https://github.com/mikosoft83) +- docs: Add note about default settings in remote transmitter [esphome-docs#901](https://github.com/esphome/esphome-docs/pull/901) by [@darthsebulba04](https://github.com/darthsebulba04) +- docs: st7735 Docs [esphome-docs#608](https://github.com/esphome/esphome-docs/pull/608) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Bump platformio from 5.0.3 to 5.0.4 [esphome#1444](https://github.com/esphome/esphome/pull/1444) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix SN74HC595 with optional OE pin [esphome#1454](https://github.com/esphome/esphome/pull/1454) by [@rradar](https://github.com/rradar) +- esphome: Fix stepper half half step mode [esphome#1397](https://github.com/esphome/esphome/pull/1397) by [@Fractal147](https://github.com/Fractal147) +- esphome: fix safe_mode [esphome#1421](https://github.com/esphome/esphome/pull/1421) by [@alexyao2015](https://github.com/alexyao2015) (cherry-picked) +- esphome: DS1307 real time clock component [esphome#1441](https://github.com/esphome/esphome/pull/1441) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) (new-integration) +- docs: DS1307 real time clock component [esphome-docs#910](https://github.com/esphome/esphome-docs/pull/910) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- esphome: Add encode_uint32 method, similar to encode_uint16 [esphome#1427](https://github.com/esphome/esphome/pull/1427) by [@e28eta](https://github.com/e28eta) (cherry-picked) +- esphome: Rotary Encoder: Don't call callbacks in the isr [esphome#1456](https://github.com/esphome/esphome/pull/1456) by [@mknjc](https://github.com/mknjc) (cherry-picked) +- esphome: API: copy the data to send into the tcp internal buffer [esphome#1455](https://github.com/esphome/esphome/pull/1455) by [@mknjc](https://github.com/mknjc) (cherry-picked) +- esphome: Revert esptool to 2.8 [esphome#1460](https://github.com/esphome/esphome/pull/1460) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- docs: fixed duplicate id in example for dac output [esphome-docs#909](https://github.com/esphome/esphome-docs/pull/909) by [@dmannock](https://github.com/dmannock) +- docs: Add example for human readable uptime sensor [esphome-docs#923](https://github.com/esphome/esphome-docs/pull/923) by [@fredrike](https://github.com/fredrike) +- docs: Update diy.rst [esphome-docs#922](https://github.com/esphome/esphome-docs/pull/922) by [@omarghader](https://github.com/omarghader) +- docs: Spelling and grammar fixes [esphome-docs#928](https://github.com/esphome/esphome-docs/pull/928) by [@scop](https://github.com/scop) +- docs: Fix duplicated "on_ble" in on_ble_service_data_advertise heading [esphome-docs#927](https://github.com/esphome/esphome-docs/pull/927) by [@scop](https://github.com/scop) +- docs: Add hint for swapped data and clock pin [esphome-docs#914](https://github.com/esphome/esphome-docs/pull/914) by [@DirkHeinke](https://github.com/DirkHeinke) +- docs: Update nextion.rst [esphome-docs#912](https://github.com/esphome/esphome-docs/pull/912) by [@wernight](https://github.com/wernight) +- docs: Update mirabella-genio-bulb.rst to show potential use of GPIO14 instead of GPIO13 for specific monochromatic dimmable globes [esphome-docs#911](https://github.com/esphome/esphome-docs/pull/911) by [@imeekle](https://github.com/imeekle) +- esphome: Whirlpool ac [esphome#1467](https://github.com/esphome/esphome/pull/1467) by [@mmanza](https://github.com/mmanza) (cherry-picked) +- esphome: Bump pytest-mock from 3.3.1 to 3.5.1 [esphome#1458](https://github.com/esphome/esphome/pull/1458) by [@dependabot[bot]](https://github.com/dependabot[bot]) (cherry-picked) +- esphome: Add rc522 i2c [esphome#1432](https://github.com/esphome/esphome/pull/1432) by [@glmnet](https://github.com/glmnet) (cherry-picked) (new-integration) +- docs: add rc522 i2c config variant [esphome-docs#933](https://github.com/esphome/esphome-docs/pull/933) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- esphome: make time components polling components [esphome#1443](https://github.com/esphome/esphome/pull/1443) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- docs: add cli link [esphome-docs#937](https://github.com/esphome/esphome-docs/pull/937) by [@glmnet](https://github.com/glmnet) +- esphome: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler [esphome#1387](https://github.com/esphome/esphome/pull/1387) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (breaking-change) (cherry-picked) +- docs: Updated Mcp3008 to support reference_voltage and voltage_sampler::VoltageSampler [esphome-docs#874](https://github.com/esphome/esphome-docs/pull/874) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) +- docs: cli.rst add --help [esphome-docs#939](https://github.com/esphome/esphome-docs/pull/939) by [@foxsam21](https://github.com/foxsam21) +- esphome: Add NDEF reading and writing to PN532 [esphome#1351](https://github.com/esphome/esphome/pull/1351) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) (new-integration) +- docs: Add docs for pn532 NDEF functionality [esphome-docs#936](https://github.com/esphome/esphome-docs/pull/936) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- esphome: Inkplate 6 support for ESPHome [esphome#1283](https://github.com/esphome/esphome/pull/1283) by [@davidzovko](https://github.com/davidzovko) (cherry-picked) (new-integration) +- docs: Adding Inkplate 6 docs [esphome-docs#778](https://github.com/esphome/esphome-docs/pull/778) by [@nitko12](https://github.com/nitko12) (cherry-picked) +- esphome: time sync notification [esphome#1442](https://github.com/esphome/esphome/pull/1442) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- docs: update time (sync) documentation [esphome-docs#924](https://github.com/esphome/esphome-docs/pull/924) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- esphome: rename read/write to read/time/write_time [esphome#1468](https://github.com/esphome/esphome/pull/1468) by [@badbadc0ffee](https://github.com/badbadc0ffee) (cherry-picked) +- docs: Add directions for handling text strings [esphome-docs#955](https://github.com/esphome/esphome-docs/pull/955) by [@poldim](https://github.com/poldim) +- esphome: Improve ccs811 precision [esphome#1428](https://github.com/esphome/esphome/pull/1428) by [@TheNetAdmin](https://github.com/TheNetAdmin) (cherry-picked) +- esphome: make fade_to*, lighten, and darken const [esphome#1450](https://github.com/esphome/esphome/pull/1450) by [@toelke](https://github.com/toelke) (cherry-picked) +- docs: fix typo 5062 => 6052 [esphome-docs#956](https://github.com/esphome/esphome-docs/pull/956) by [@Scarbous](https://github.com/Scarbous) +- docs: Fix of typo in documentation of SPS30 [esphome-docs#954](https://github.com/esphome/esphome-docs/pull/954) by [@teffcz](https://github.com/teffcz) +- docs: Remove reference to measuring humidity [esphome-docs#953](https://github.com/esphome/esphome-docs/pull/953) by [@tomlut](https://github.com/tomlut) +- docs: Fix human-readable uptime example so it compiles [esphome-docs#949](https://github.com/esphome/esphome-docs/pull/949) by [@oddsockmachine](https://github.com/oddsockmachine) +- esphome: SPI wasnt being disabled after display update [esphome#1493](https://github.com/esphome/esphome/pull/1493) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) +- esphome: Add support for string-type Tuya datapoints [esphome#1488](https://github.com/esphome/esphome/pull/1488) by [@pauln](https://github.com/pauln) (cherry-picked) +- esphome: Add healthcheck [esphome#1492](https://github.com/esphome/esphome/pull/1492) by [@Klarstein](https://github.com/Klarstein) (cherry-picked) +- docs: Add link to baseboard thermostat by rjmurph2241 [esphome-docs#958](https://github.com/esphome/esphome-docs/pull/958) by [@rjmurph2241](https://github.com/rjmurph2241) +- docs: Document color_temp [esphome-docs#951](https://github.com/esphome/esphome-docs/pull/951) by [@alexyao2015](https://github.com/alexyao2015) +- docs: Update tuya.rst [esphome-docs#950](https://github.com/esphome/esphome-docs/pull/950) by [@ricovangenugten](https://github.com/ricovangenugten) +- docs: Minor uptime docs fixes [esphome-docs#948](https://github.com/esphome/esphome-docs/pull/948) by [@foxsam21](https://github.com/foxsam21) +- esphome: Support for MHO-C401 (fix) [esphome#1486](https://github.com/esphome/esphome/pull/1486) by [@nikito7](https://github.com/nikito7) (cherry-picked) (new-integration) +- docs: Update image type for st7789 display [esphome-docs#945](https://github.com/esphome/esphome-docs/pull/945) by [@gerard33](https://github.com/gerard33) +- docs: Add MHO-C401 [esphome-docs#957](https://github.com/esphome/esphome-docs/pull/957) by [@nikito7](https://github.com/nikito7) (cherry-picked) +- esphome: Allow SCD30 sensors to be optional [esphome#1502](https://github.com/esphome/esphome/pull/1502) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- docs: Update scd30 docs to show sensors are optional [esphome-docs#970](https://github.com/esphome/esphome-docs/pull/970) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- esphome: fix esp8266 remote_transmitter using incorrect timings [esphome#1465](https://github.com/esphome/esphome/pull/1465) by [@hcoohb](https://github.com/hcoohb) (cherry-picked) +- esphome: rc522 increased retry loop count [esphome#1506](https://github.com/esphome/esphome/pull/1506) by [@glmnet](https://github.com/glmnet) (cherry-picked) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.17.0.mdx b/src/content/docs/changelog/v1.17.0.mdx new file mode 100644 index 0000000000..90e6c5e34f --- /dev/null +++ b/src/content/docs/changelog/v1.17.0.mdx @@ -0,0 +1,218 @@ +--- +description: "Changelog for ESPHome version 1.17.0." +title: "Changelog - Version 1.17.0 - 4th May 2021" +pagefind: false +slug: "changelog/v1.17.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +So, ESPHome was acquired by Nabu Casa. That was big and unexpected, but awesome news for the project as now I have been hired +by Nabu Casa full-time to work on ESPHome. I know I said this in the last release, but hopefully now that it is literally +my job, the releases will move to a (yet to be defined) schedule. + +A lot of fixes and updates to existing components in this release, and a couple of new integrations and features too. Check them out +if you have the hardware but could not use it before. + +Hopefully I can get some help and pointers from the Nabu Casa team to tidy up these release notes and make them all fancy and +actually something to look forward to reading. + +Jesse + +## New Features + +- esphome: Vl53l0x change address [esphome#1126](https://github.com/esphome/esphome/pull/1126) by [@kkellner](https://github.com/kkellner) (new-feature) +- esphome: Background calibration & ABC commands for SenseAir S8 [esphome#1623](https://github.com/esphome/esphome/pull/1623) by [@nmaggioni](https://github.com/nmaggioni) (new-feature) +- esphome: Add trigger for http actions to receive the status code [esphome#1599](https://github.com/esphome/esphome/pull/1599) by [@jesserockz](https://github.com/jesserockz) (new-feature) + +## New Integrations + +- esphome: Adding support for the Inkbird IBS-TH1 Mini sensor [esphome#1099](https://github.com/esphome/esphome/pull/1099) by [@fkirill](https://github.com/fkirill) (new-integration) +- esphome: Add MCP4725 DAC Component [esphome#1418](https://github.com/esphome/esphome/pull/1418) by [@JJK801](https://github.com/JJK801) (new-integration) +- esphome: Add Xiaomi Miscale v1 and v2 [esphome#1368](https://github.com/esphome/esphome/pull/1368) by [@dckiller51](https://github.com/dckiller51) (new-integration) +- esphome: Add support for the SM300D2 7-in-1 sensor module [esphome#1524](https://github.com/esphome/esphome/pull/1524) by [@moritzgloeckl](https://github.com/moritzgloeckl) (new-integration) +- esphome: Midea climate support [esphome#1328](https://github.com/esphome/esphome/pull/1328) by [@dudanov](https://github.com/dudanov) (new-integration) +- esphome: Add addressable_light display platform [esphome#1272](https://github.com/esphome/esphome/pull/1272) by [@justfalter](https://github.com/justfalter) (new-integration) (notable-change) +- esphome: Implement pulse_meter as an improvement on pulse_counter and pulse_width for meters [esphome#1434](https://github.com/esphome/esphome/pull/1434) by [@stevebaxter](https://github.com/stevebaxter) (new-integration) + +## Breaking Changes + +- esphome: MCP23XXX Refactor [esphome#1560](https://github.com/esphome/esphome/pull/1560) by [@jesserockz](https://github.com/jesserockz) (breaking-change) + +## Notable Changes + +- esphome: Device class attribute for sensor component [esphome#1525](https://github.com/esphome/esphome/pull/1525) by [@marecabo](https://github.com/marecabo) (notable-change) +- esphome: Add default device classes to sensor components [esphome#1533](https://github.com/esphome/esphome/pull/1533) by [@marecabo](https://github.com/marecabo) (notable-change) +- esphome: Add addressable_light display platform [esphome#1272](https://github.com/esphome/esphome/pull/1272) by [@justfalter](https://github.com/justfalter) (new-integration) (notable-change) + +## Release 1.17.1 - May 5 + +- esphome: Fix BLE UUID matching [esphome#1637](https://github.com/esphome/esphome/pull/1637) by [@buxtronix](https://github.com/buxtronix) +- esphome: Add optional bindkey support for CGG1. [esphome#1407](https://github.com/esphome/esphome/pull/1407) by [@Flameeyes](https://github.com/Flameeyes) +- docs: Update CGG1 documentation around bindkey [esphome-docs#876](https://github.com/esphome/esphome-docs/pull/876) by [@Flameeyes](https://github.com/Flameeyes) +- esphome: buffer allocation and TRUEFALSE templates [esphome#1644](https://github.com/esphome/esphome/pull/1644) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: fix servo not reattaching with same target [esphome#1649](https://github.com/esphome/esphome/pull/1649) by [@glmnet](https://github.com/glmnet) +- esphome: Fix colorlog removing colors and refactor color code [esphome#1671](https://github.com/esphome/esphome/pull/1671) +- esphome: Fix servo detach chopped PWM [esphome#1650](https://github.com/esphome/esphome/pull/1650) by [@glmnet](https://github.com/glmnet) +- esphome: Fix sensor.sensor_schema interface changed [esphome#1659](https://github.com/esphome/esphome/pull/1659) +- esphome: Sensor Average Filter Fix Floating Pointer Error Accumulating [esphome#1624](https://github.com/esphome/esphome/pull/1624) +- esphome: Added / to default glyphs [esphome#1691](https://github.com/esphome/esphome/pull/1691) by [@richardklingler](https://github.com/richardklingler) +- esphome: RC522 fixes [esphome#1479](https://github.com/esphome/esphome/pull/1479) by [@glmnet](https://github.com/glmnet) +- docs: Fixed typo in 1.17.0 changelogs [esphome-docs#1132](https://github.com/esphome/esphome-docs/pull/1132) by [@spacegaier](https://github.com/spacegaier) +- esphome: Do not call component update on failed components [esphome#1392](https://github.com/esphome/esphome/pull/1392) by [@alexyao2015](https://github.com/alexyao2015) + +## Release 1.17.2 - May 9 + +- esphome: fixes #858 - esphome crashes with neolightbus and RMT [esphome#1667](https://github.com/esphome/esphome/pull/1667) by [@angelnu](https://github.com/angelnu) +- docs: Fix abundant apostrophes [esphome-docs#1137](https://github.com/esphome/esphome-docs/pull/1137) by [@jmartens](https://github.com/jmartens) +- docs: Add output part to binary light example [esphome-docs#1061](https://github.com/esphome/esphome-docs/pull/1061) by [@klaasnicolaas](https://github.com/klaasnicolaas) + +## All changes + +- esphome: Bump voluptuous from 0.12.0 to 0.12.1 [esphome#1411](https://github.com/esphome/esphome/pull/1411) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: add http request tests [esphome#1448](https://github.com/esphome/esphome/pull/1448) by [@glmnet](https://github.com/glmnet) +- esphome: codegen: Lambda improvements [esphome#1476](https://github.com/esphome/esphome/pull/1476) by [@balrog-kun](https://github.com/balrog-kun) +- docs: Add options to control pulse duration on Climate_IR_LG Component [esphome-docs#963](https://github.com/esphome/esphome-docs/pull/963) by [@mhentschke](https://github.com/mhentschke) +- esphome: Add options to control pulse duration on Climate_IR_LG Component [esphome#1470](https://github.com/esphome/esphome/pull/1470) by [@mhentschke](https://github.com/mhentschke) +- esphome: Adding support for the Inkbird IBS-TH1 Mini sensor [esphome#1099](https://github.com/esphome/esphome/pull/1099) by [@fkirill](https://github.com/fkirill) (new-integration) +- docs: Adding documentation for Inkbird IBS-TH1 Mini sensor [esphome-docs#657](https://github.com/esphome/esphome-docs/pull/657) by [@fkirill](https://github.com/fkirill) +- esphome: Add config validator location [esphome#1490](https://github.com/esphome/esphome/pull/1490) by [@glmnet](https://github.com/glmnet) +- esphome: Add MCP4725 DAC Component [esphome#1418](https://github.com/esphome/esphome/pull/1418) by [@JJK801](https://github.com/JJK801) (new-integration) +- docs: Add MCP4725 docs [esphome-docs#889](https://github.com/esphome/esphome-docs/pull/889) by [@JJK801](https://github.com/JJK801) +- docs: Fix format consistency [esphome-docs#989](https://github.com/esphome/esphome-docs/pull/989) by [@glmnet](https://github.com/glmnet) +- esphome: Added codeowners to max7219digit [esphome#1487](https://github.com/esphome/esphome/pull/1487) by [@rspaargaren](https://github.com/rspaargaren) +- esphome: Correct Native API Wire Format Documentation [esphome#1528](https://github.com/esphome/esphome/pull/1528) by [@justin-gerhardt](https://github.com/justin-gerhardt) +- esphome: st7735_conf_fixes [esphome#1530](https://github.com/esphome/esphome/pull/1530) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- docs: ST7735 Changed configuration items to snake_case [esphome-docs#1000](https://github.com/esphome/esphome-docs/pull/1000) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Device class attribute for sensor component [esphome#1525](https://github.com/esphome/esphome/pull/1525) by [@marecabo](https://github.com/marecabo) (notable-change) +- docs: Add doc for device_class attribute of sensor [esphome-docs#996](https://github.com/esphome/esphome-docs/pull/996) by [@marecabo](https://github.com/marecabo) +- docs: Add sleep duration to enter deep sleep action [esphome-docs#995](https://github.com/esphome/esphome-docs/pull/995) by [@nuttytree](https://github.com/nuttytree) +- esphome: Add duration option to action start deep sleep [esphome#1526](https://github.com/esphome/esphome/pull/1526) by [@nuttytree](https://github.com/nuttytree) +- esphome: fix substitution losing track of document range [esphome#1547](https://github.com/esphome/esphome/pull/1547) by [@glmnet](https://github.com/glmnet) +- docs: Update esp32_camera.rst [esphome-docs#1020](https://github.com/esphome/esphome-docs/pull/1020) by [@lukaszrud](https://github.com/lukaszrud) +- docs: Fix format next [esphome-docs#1023](https://github.com/esphome/esphome-docs/pull/1023) by [@glmnet](https://github.com/glmnet) +- docs: Add another project to diy.rst [esphome-docs#1019](https://github.com/esphome/esphome-docs/pull/1019) by [@shish](https://github.com/shish) +- docs: Update esphome-configs URL [esphome-docs#1018](https://github.com/esphome/esphome-docs/pull/1018) by [@shish](https://github.com/shish) +- docs: Icon is ignored by HA when device class is set [esphome-docs#1011](https://github.com/esphome/esphome-docs/pull/1011) by [@marecabo](https://github.com/marecabo) +- docs: Update pid.rst [esphome-docs#1006](https://github.com/esphome/esphome-docs/pull/1006) by [@boradwell](https://github.com/boradwell) +- docs: Mention that Hyperion.NG works with E1.31 [esphome-docs#975](https://github.com/esphome/esphome-docs/pull/975) by [@rradar](https://github.com/rradar) +- esphome: Add Xiaomi Miscale v1 and v2 [esphome#1368](https://github.com/esphome/esphome/pull/1368) by [@dckiller51](https://github.com/dckiller51) (new-integration) +- docs: Add docs for Xiaomi Miscale v1 and v2 [esphome-docs#1021](https://github.com/esphome/esphome-docs/pull/1021) by [@dckiller51](https://github.com/dckiller51) +- docs: Add missing closing parenthesis in example [esphome-docs#1029](https://github.com/esphome/esphome-docs/pull/1029) by [@lepinkainen](https://github.com/lepinkainen) +- docs: Update Inkplate.rst [esphome-docs#1026](https://github.com/esphome/esphome-docs/pull/1026) by [@jakommo](https://github.com/jakommo) +- docs: typo in st7735 model number [esphome-docs#1025](https://github.com/esphome/esphome-docs/pull/1025) by [@wjcarpenter](https://github.com/wjcarpenter) +- docs: Fix mcp23sXX id config [esphome-docs#1017](https://github.com/esphome/esphome-docs/pull/1017) by [@jesserockz](https://github.com/jesserockz) +- docs: Update bme680.rst [esphome-docs#1007](https://github.com/esphome/esphome-docs/pull/1007) by [@wifwucite](https://github.com/wifwucite) +- docs: Sim800l dial [esphome-docs#1027](https://github.com/esphome/esphome-docs/pull/1027) by [@spilin](https://github.com/spilin) +- esphome: Add dial support for sim800l component [esphome#1558](https://github.com/esphome/esphome/pull/1558) by [@spilin](https://github.com/spilin) +- esphome: Climate IR LG -keep previous temp and fan if swing [esphome#1556](https://github.com/esphome/esphome/pull/1556) by [@Otamay](https://github.com/Otamay) +- esphome: Vl53l0x change address [esphome#1126](https://github.com/esphome/esphome/pull/1126) by [@kkellner](https://github.com/kkellner) (new-feature) +- docs: Update vl53l0x docs [esphome-docs#679](https://github.com/esphome/esphome-docs/pull/679) by [@kkellner](https://github.com/kkellner) +- esphome: tuya: Use queue for sending command messages [esphome#1404](https://github.com/esphome/esphome/pull/1404) by [@stubs12](https://github.com/stubs12) +- esphome: Replace substitutions in substitutions first [esphome#1567](https://github.com/esphome/esphome/pull/1567) by [@edenhaus](https://github.com/edenhaus) +- esphome: Added heater to climate_ir_lg [esphome#1555](https://github.com/esphome/esphome/pull/1555) by [@Otamay](https://github.com/Otamay) +- esphome: More yaml validation [esphome#1568](https://github.com/esphome/esphome/pull/1568) by [@glmnet](https://github.com/glmnet) +- esphome: Add default device classes to sensor components [esphome#1533](https://github.com/esphome/esphome/pull/1533) by [@marecabo](https://github.com/marecabo) (notable-change) +- docs: Document recurring data in uart switch [esphome-docs#986](https://github.com/esphome/esphome-docs/pull/986) by [@gabe565](https://github.com/gabe565) +- esphome: Add support for recurring data in uart switch [esphome#1514](https://github.com/esphome/esphome/pull/1514) by [@gabe565](https://github.com/gabe565) +- esphome: Added samsung36 ir protocol [esphome#1438](https://github.com/esphome/esphome/pull/1438) by [@tuxBurner](https://github.com/tuxBurner) +- docs: Added remote samsung36 protocol docs [esphome-docs#904](https://github.com/esphome/esphome-docs/pull/904) by [@tuxBurner](https://github.com/tuxBurner) +- docs: Add IWOOLE Table Lamp cookbook entry [esphome-docs#947](https://github.com/esphome/esphome-docs/pull/947) by [@Deinara](https://github.com/Deinara) +- docs: Update uart.rst example to read all available characters [esphome-docs#1031](https://github.com/esphome/esphome-docs/pull/1031) by [@RoganDawes](https://github.com/RoganDawes) +- esphome: ADC fix: GPIO0 not usable as output if ADC_VCC is used [esphome#1557](https://github.com/esphome/esphome/pull/1557) by [@ferbar](https://github.com/ferbar) +- esphome: Add constants for device classes of binary_sensor [esphome#1549](https://github.com/esphome/esphome/pull/1549) by [@marecabo](https://github.com/marecabo) +- esphome: fix path on windows escape [esphome#1573](https://github.com/esphome/esphome/pull/1573) by [@glmnet](https://github.com/glmnet) +- esphome: Migrate ESPColor to Color [esphome#1551](https://github.com/esphome/esphome/pull/1551) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- docs: Migrate ESPColor to Color [esphome-docs#1036](https://github.com/esphome/esphome-docs/pull/1036) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Add support for the SM300D2 7-in-1 sensor module [esphome#1524](https://github.com/esphome/esphome/pull/1524) by [@moritzgloeckl](https://github.com/moritzgloeckl) (new-integration) +- docs: Added documentation for the SM300D2 sensor [esphome-docs#993](https://github.com/esphome/esphome-docs/pull/993) by [@moritzgloeckl](https://github.com/moritzgloeckl) +- esphome: changed color temp from float to int [esphome#1522](https://github.com/esphome/esphome/pull/1522) by [@codyjamestechnical](https://github.com/codyjamestechnical) +- esphome: Bump pytest-cov from 2.10.1 to 2.11.1 [esphome#1483](https://github.com/esphome/esphome/pull/1483) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump colorlog from 4.6.2 to 4.7.2 [esphome#1473](https://github.com/esphome/esphome/pull/1473) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: pins: Add three new boards [esphome#1576](https://github.com/esphome/esphome/pull/1576) by [@balrog-kun](https://github.com/balrog-kun) +- esphome: Bump pytest from 6.2.1 to 6.2.2 [esphome#1574](https://github.com/esphome/esphome/pull/1574) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pytz from 2020.5 to 2021.1 [esphome#1575](https://github.com/esphome/esphome/pull/1575) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix for waveshare 2.13in-ttgo-b73 [esphome#1543](https://github.com/esphome/esphome/pull/1543) by [@nikito7](https://github.com/nikito7) +- docs: Added new blogpost [esphome-docs#1038](https://github.com/esphome/esphome-docs/pull/1038) by [@pieterbrink123](https://github.com/pieterbrink123) +- esphome: Add min/max filters [esphome#1569](https://github.com/esphome/esphome/pull/1569) by [@gabe565](https://github.com/gabe565) +- docs: Document new min/max filters [esphome-docs#1032](https://github.com/esphome/esphome-docs/pull/1032) by [@gabe565](https://github.com/gabe565) +- esphome: Bump pylint from 2.6.0 to 2.7.2 [esphome#1582](https://github.com/esphome/esphome/pull/1582) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Extend 'uart:' with 'invert:' for esp32 [esphome#1586](https://github.com/esphome/esphome/pull/1586) by [@needspeed](https://github.com/needspeed) +- docs: Uart invert option for ESP32 [esphome-docs#1039](https://github.com/esphome/esphome-docs/pull/1039) by [@Mynasru](https://github.com/Mynasru) +- esphome: Bump platformio from 5.0.4 to 5.1.0 [esphome#1581](https://github.com/esphome/esphome/pull/1581) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: fix servo warning [esphome#1591](https://github.com/esphome/esphome/pull/1591) by [@glmnet](https://github.com/glmnet) +- docs: add-black [esphome-docs#1044](https://github.com/esphome/esphome-docs/pull/1044) by [@glmnet](https://github.com/glmnet) +- esphome: add-black [esphome#1593](https://github.com/esphome/esphome/pull/1593) by [@glmnet](https://github.com/glmnet) +- esphome: MCP23XXX Refactor [esphome#1560](https://github.com/esphome/esphome/pull/1560) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- docs: Update MCP23XXX docs with interrupts and pin schemas [esphome-docs#1028](https://github.com/esphome/esphome-docs/pull/1028) by [@jesserockz](https://github.com/jesserockz) +- esphome: Improve error checking: too many component id candidates [esphome#1570](https://github.com/esphome/esphome/pull/1570) by [@glmnet](https://github.com/glmnet) +- esphome: Schema dump [esphome#1564](https://github.com/esphome/esphome/pull/1564) by [@glmnet](https://github.com/glmnet) +- docs: Dump schema [esphome-docs#1030](https://github.com/esphome/esphome-docs/pull/1030) by [@glmnet](https://github.com/glmnet) +- docs: Update i2c.rst [esphome-docs#1043](https://github.com/esphome/esphome-docs/pull/1043) by [@webeling67](https://github.com/webeling67) +- docs: Update rf_bridge.rst [esphome-docs#1042](https://github.com/esphome/esphome-docs/pull/1042) by [@samnewman86](https://github.com/samnewman86) +- esphome: Inkplate 6 Optimizations [esphome#1592](https://github.com/esphome/esphome/pull/1592) by [@Sizurka](https://github.com/Sizurka) +- docs: Fix RF Bridge link to Portisch Repo [esphome-docs#1045](https://github.com/esphome/esphome-docs/pull/1045) by [@jesserockz](https://github.com/jesserockz) +- docs: pin schema and other fixes [esphome-docs#1047](https://github.com/esphome/esphome-docs/pull/1047) by [@glmnet](https://github.com/glmnet) +- esphome: schema-dump-pins [esphome#1596](https://github.com/esphome/esphome/pull/1596) by [@glmnet](https://github.com/glmnet) +- docs: Adding that mpr121_id is a valid option for binary_sensor [esphome-docs#966](https://github.com/esphome/esphome-docs/pull/966) by [@minideezel](https://github.com/minideezel) +- esphome: change lcd clear() to clear the buffer [esphome#1600](https://github.com/esphome/esphome/pull/1600) by [@ssieb](https://github.com/ssieb) +- esphome: PN532 - don't read extra page and fix size [esphome#1565](https://github.com/esphome/esphome/pull/1565) by [@ssieb](https://github.com/ssieb) +- docs: schema-filters [esphome-docs#1052](https://github.com/esphome/esphome-docs/pull/1052) by [@glmnet](https://github.com/glmnet) +- esphome: Fix component_tests config [esphome#1608](https://github.com/esphome/esphome/pull/1608) by [@madron](https://github.com/madron) +- esphome: Added receive for Fujitsu ACs [esphome#1577](https://github.com/esphome/esphome/pull/1577) by [@alex-richards](https://github.com/alex-richards) +- esphome: Change COLOR_ON to be 255 values instead of 1 [esphome#1594](https://github.com/esphome/esphome/pull/1594) by [@jesserockz](https://github.com/jesserockz) +- esphome: a4988 wait 1ms when coming out of sleep [esphome#1597](https://github.com/esphome/esphome/pull/1597) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) +- docs: Remove cs_pin from rc522 i2c example [esphome-docs#1059](https://github.com/esphome/esphome-docs/pull/1059) by [@jesserockz](https://github.com/jesserockz) +- esphome: Support fan speed levels [esphome#1541](https://github.com/esphome/esphome/pull/1541) by [@blejdfist](https://github.com/blejdfist) +- docs: Documentation for fan speed levels [esphome-docs#1056](https://github.com/esphome/esphome-docs/pull/1056) by [@blejdfist](https://github.com/blejdfist) +- docs: Add CLI logs section [esphome-docs#1060](https://github.com/esphome/esphome-docs/pull/1060) by [@Tmin10](https://github.com/Tmin10) +- esphome: Add option to suffix name with mac address [esphome#1615](https://github.com/esphome/esphome/pull/1615) by [@jesserockz](https://github.com/jesserockz) +- esphome: Midea climate support [esphome#1328](https://github.com/esphome/esphome/pull/1328) by [@dudanov](https://github.com/dudanov) (new-integration) +- docs: Midea Climate support [esphome-docs#804](https://github.com/esphome/esphome-docs/pull/804) by [@dudanov](https://github.com/dudanov) +- docs: Add docs for `name_add_mac_suffix` config [esphome-docs#1058](https://github.com/esphome/esphome-docs/pull/1058) by [@jesserockz](https://github.com/jesserockz) +- esphome: SPI transfer fix. Use write when no miso pin is set [esphome#1563](https://github.com/esphome/esphome/pull/1563) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: SPI Improvements [esphome#1617](https://github.com/esphome/esphome/pull/1617) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Add addressable_light display platform [esphome#1272](https://github.com/esphome/esphome/pull/1272) by [@justfalter](https://github.com/justfalter) (new-integration) (notable-change) +- docs: Add docs for addressable_light display [esphome-docs#755](https://github.com/esphome/esphome-docs/pull/755) by [@justfalter](https://github.com/justfalter) +- esphome: Implement pulse_meter as an improvement on pulse_counter and pulse_width for meters [esphome#1434](https://github.com/esphome/esphome/pull/1434) by [@stevebaxter](https://github.com/stevebaxter) (new-integration) +- esphome: e131: fix issue 1579: limitation of maximum light count [esphome#1619](https://github.com/esphome/esphome/pull/1619) by [@docteurzoidberg](https://github.com/docteurzoidberg) +- docs: Add documentation for pulse_meter [esphome-docs#900](https://github.com/esphome/esphome-docs/pull/900) by [@stevebaxter](https://github.com/stevebaxter) +- esphome: Bump platformio from 5.1.0 to 5.1.1 [esphome#1618](https://github.com/esphome/esphome/pull/1618) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Fix pulse-meter with device_class and black [esphome#1621](https://github.com/esphome/esphome/pull/1621) by [@jesserockz](https://github.com/jesserockz) +- esphome: Declare Color objects in main.cpp [esphome#1395](https://github.com/esphome/esphome/pull/1395) by [@kbx81](https://github.com/kbx81) +- esphome: Add 2.13in-ttgo-b1 waveshare epaper module. [esphome#1326](https://github.com/esphome/esphome/pull/1326) by [@matikij](https://github.com/matikij) +- docs: Add docs for ttgo-b1 version (next branch) [esphome-docs#808](https://github.com/esphome/esphome-docs/pull/808) by [@matikij](https://github.com/matikij) +- esphome: Bump flake8 from 3.8.4 to 3.9.0 [esphome#1612](https://github.com/esphome/esphome/pull/1612) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bundle platformio lib_deps in docker images [esphome#1625](https://github.com/esphome/esphome/pull/1625) +- esphome: Bump protobuf from 3.13.0 to 3.15.6 [esphome#1607](https://github.com/esphome/esphome/pull/1607) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump pyyaml from 5.3.1 to 5.4.1 [esphome#1482](https://github.com/esphome/esphome/pull/1482) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Switch docker images to debian [esphome#1626](https://github.com/esphome/esphome/pull/1626) +- esphome: Background calibration & ABC commands for SenseAir S8 [esphome#1623](https://github.com/esphome/esphome/pull/1623) by [@nmaggioni](https://github.com/nmaggioni) (new-feature) +- docs: SenseAir: background calibration & ABC commands [esphome-docs#1066](https://github.com/esphome/esphome-docs/pull/1066) by [@nmaggioni](https://github.com/nmaggioni) +- esphome: Add trigger for http actions to receive the status code [esphome#1599](https://github.com/esphome/esphome/pull/1599) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- docs: Add docs for http_request on_response trigger [esphome-docs#1049](https://github.com/esphome/esphome-docs/pull/1049) by [@jesserockz](https://github.com/jesserockz) +- docs: Fix typo lambada -> lambda in multiple display compoments [esphome-docs#1071](https://github.com/esphome/esphome-docs/pull/1071) by [@rheinz](https://github.com/rheinz) +- docs: Consistent spelling of "ID" [esphome-docs#1068](https://github.com/esphome/esphome-docs/pull/1068) by [@spacegaier](https://github.com/spacegaier) +- docs: Change GREYSCALE to GRAYSCALE [esphome-docs#1073](https://github.com/esphome/esphome-docs/pull/1073) by [@adrienbrault](https://github.com/adrienbrault) +- docs: SPI: fix Example [esphome-docs#1076](https://github.com/esphome/esphome-docs/pull/1076) by [@ferbar](https://github.com/ferbar) +- docs: Update diy.rst [esphome-docs#1106](https://github.com/esphome/esphome-docs/pull/1106) by [@electrofun-smart](https://github.com/electrofun-smart) +- docs: Make changelog banner dismissable [esphome-docs#1113](https://github.com/esphome/esphome-docs/pull/1113) by [@manutenfruits](https://github.com/manutenfruits) +- docs: Correct typo: "between between" -> "between" [esphome-docs#1109](https://github.com/esphome/esphome-docs/pull/1109) by [@janosrusiczki](https://github.com/janosrusiczki) +- docs: Update canbus.rst [esphome-docs#1115](https://github.com/esphome/esphome-docs/pull/1115) by [@meijerwynand](https://github.com/meijerwynand) +- docs: Update diy.rst [esphome-docs#1114](https://github.com/esphome/esphome-docs/pull/1114) by [@murilobaliego](https://github.com/murilobaliego) +- docs: Update email addresses [esphome-docs#1122](https://github.com/esphome/esphome-docs/pull/1122) by [@jesserockz](https://github.com/jesserockz) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.18.0.mdx b/src/content/docs/changelog/v1.18.0.mdx new file mode 100644 index 0000000000..b9fb43b4f6 --- /dev/null +++ b/src/content/docs/changelog/v1.18.0.mdx @@ -0,0 +1,171 @@ +--- +description: "Changelog for ESPHome version 1.18.0." +title: "Changelog - Version 1.18.0 - 19th May 2021" +pagefind: false +slug: "changelog/v1.18.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +It feels like I was just writing the release notes for 1.17 not long ago, so here's to getting ESPHome going on a regular schedule. + +Releases will be set for the 3rd Wednesday of each month, with a beta release starting 1 week earlier for those who would like to test +that and help make sure it is stable. + +Apart from a few new sensors, we now have built in support for [External Components](/components/external_components/), check it out. Thanks [@OttoWinter](https://github.com/OttoWinter) and [@glmnet](https://github.com/glmnet) + +Also now, an ESPHome device is able to connect to other BLE devices and become a [Ble Client](/components/ble_client/), reading sensors and controlling switches etc. +You can read basic sensor values using the [Ble Client](/components/sensor/ble_client/) component or use the data displayed in the logs to build a new native component +that provides the sensors/switches/etc directly. + +Jesse + +## New Integrations + +- esphome: Add I2CMultiplexer in general and the TCA9548A in special [esphome#1410](https://github.com/esphome/esphome/pull/1410) by [@andreashergert1984](https://github.com/andreashergert1984) (new-integration) +- esphome: Add BME680 via BSEC integration [esphome#1313](https://github.com/esphome/esphome/pull/1313) by [@trvrnrth](https://github.com/trvrnrth) (new-integration) +- esphome: Adds support for b-parasite soil moisture sensor [esphome#1666](https://github.com/esphome/esphome/pull/1666) by [@rbaron](https://github.com/rbaron) (new-integration) +- esphome: Sgp40 [esphome#1513](https://github.com/esphome/esphome/pull/1513) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (new-integration) +- esphome: Add support for SHT4X [esphome#1512](https://github.com/esphome/esphome/pull/1512) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- esphome: Add Grow Fingerprint Reader [esphome#1356](https://github.com/esphome/esphome/pull/1356) by [@loongyh](https://github.com/loongyh) (new-integration) +- esphome: Support for TOF10120 distance sensor [esphome#1375](https://github.com/esphome/esphome/pull/1375) by [@wstrzalka](https://github.com/wstrzalka) (new-integration) +- esphome: BLE client support on ESP32 [esphome#1177](https://github.com/esphome/esphome/pull/1177) by [@buxtronix](https://github.com/buxtronix) (new-integration) +- esphome: Implement external custom components installing from YAML [esphome#1630](https://github.com/esphome/esphome/pull/1630) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- esphome: Add sm2135 component [esphome#1736](https://github.com/esphome/esphome/pull/1736) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) (new-integration) + +## Breaking Changes + +- esphome: Raise minimum python version to 3.7 [esphome#1673](https://github.com/esphome/esphome/pull/1673) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- esphome: Change wifi signal strength unit to dBm [esphome#1734](https://github.com/esphome/esphome/pull/1734) by [@mbo18](https://github.com/mbo18) (breaking-change) +- esphome: Use core constants for sample duration on bh1750 [esphome#1764](https://github.com/esphome/esphome/pull/1764) by [@yuvalabou](https://github.com/yuvalabou) (breaking-change) (cherry-picked) + +## Beta Fixes + +- docs: Update allowed characters for node names [esphome-docs#1072](https://github.com/esphome/esphome-docs/pull/1072) by [@pkuehne](https://github.com/pkuehne) (cherry-picked) +- docs: Fix missed merge conflict [esphome-docs#1155](https://github.com/esphome/esphome-docs/pull/1155) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- docs: Replaced set_password with new_password [esphome-docs#1157](https://github.com/esphome/esphome-docs/pull/1157) by [@PaulAntonDeen](https://github.com/PaulAntonDeen) (cherry-picked) +- esphome: Fix build issues for idf 4.2 (Support ESP32-S2) [esphome#1433](https://github.com/esphome/esphome/pull/1433) by [@misery](https://github.com/misery) (cherry-picked) +- esphome: Upgrade the version of AsyncTCP-esphome to v1.2.2 [esphome#1762](https://github.com/esphome/esphome/pull/1762) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- esphome: Use core constants for sample duration on bh1750 [esphome#1764](https://github.com/esphome/esphome/pull/1764) by [@yuvalabou](https://github.com/yuvalabou) (breaking-change) (cherry-picked) +- esphome: Add sm2135 component [esphome#1736](https://github.com/esphome/esphome/pull/1736) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) (new-integration) +- docs: Add sm2135 component [esphome-docs#1127](https://github.com/esphome/esphome-docs/pull/1127) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) +- docs: Some clarification added to external components. [esphome-docs#1165](https://github.com/esphome/esphome-docs/pull/1165) by [@mmakaay](https://github.com/mmakaay) (cherry-picked) +- esphome: Allow RC522 components to have multiple configurations [esphome#1782](https://github.com/esphome/esphome/pull/1782) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) + +## All changes + +- esphome: Add I2CMultiplexer in generel and the TCA9548A in special [esphome#1410](https://github.com/esphome/esphome/pull/1410) by [@andreashergert1984](https://github.com/andreashergert1984) (new-integration) +- docs: Add i2c multiplexer [esphome-docs#897](https://github.com/esphome/esphome-docs/pull/897) by [@andreashergert1984](https://github.com/andreashergert1984) +- esphome: Add the display.is_displaying_page condition [esphome#1646](https://github.com/esphome/esphome/pull/1646) by [@numo68](https://github.com/numo68) +- docs: Add documentation for the display.is_displaying_page condition [esphome-docs#1079](https://github.com/esphome/esphome-docs/pull/1079) by [@numo68](https://github.com/numo68) +- esphome: Add BME680 via BSEC integration [esphome#1313](https://github.com/esphome/esphome/pull/1313) by [@trvrnrth](https://github.com/trvrnrth) (new-integration) +- docs: Add BME680 BSEC docs [esphome-docs#793](https://github.com/esphome/esphome-docs/pull/793) by [@trvrnrth](https://github.com/trvrnrth) +- esphome: Fixed CustomComponentConstructor::get_component() [esphome#1653](https://github.com/esphome/esphome/pull/1653) by [@dataway](https://github.com/dataway) +- esphome: Bump pytest from 6.2.2 to 6.2.3 [esphome#1663](https://github.com/esphome/esphome/pull/1663) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Bump protobuf from 3.15.6 to 3.15.7 [esphome#1662](https://github.com/esphome/esphome/pull/1662) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Rewrite sun component calculations [esphome#1661](https://github.com/esphome/esphome/pull/1661) by [@OttoWinter](https://github.com/OttoWinter) +- esphome: Raise minimum python version to 3.7 [esphome#1673](https://github.com/esphome/esphome/pull/1673) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) +- esphome: Adds support for b-parasite soil moisture sensor [esphome#1666](https://github.com/esphome/esphome/pull/1666) by [@rbaron](https://github.com/rbaron) (new-integration) +- docs: Adds docs for the b-parasite soil moisture sensor [esphome-docs#1086](https://github.com/esphome/esphome-docs/pull/1086) by [@rbaron](https://github.com/rbaron) +- esphome: mqtt_client: Added MQTTClientComponent::unsubscribe() [esphome#1672](https://github.com/esphome/esphome/pull/1672) by [@dataway](https://github.com/dataway) +- esphome: Disallow _ in node name [esphome#1632](https://github.com/esphome/esphome/pull/1632) by [@pkuehne](https://github.com/pkuehne) +- esphome: Receive long MQTT payload [esphome#1590](https://github.com/esphome/esphome/pull/1590) by [@gaco79](https://github.com/gaco79) +- esphome: Daylight Saving Time spelling fix [esphome#1677](https://github.com/esphome/esphome/pull/1677) by [@dashdrum](https://github.com/dashdrum) +- esphome: Support custom build_flags for bme680_bsec [esphome#1678](https://github.com/esphome/esphome/pull/1678) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Add Arduino ESP32 version mapping [esphome#1679](https://github.com/esphome/esphome/pull/1679) by [@OttoWinter](https://github.com/OttoWinter) +- esphome: Automate building and publishing of esphome-lint docker image [esphome#1680](https://github.com/esphome/esphome/pull/1680) by [@OttoWinter](https://github.com/OttoWinter) +- esphome: Sgp40 [esphome#1513](https://github.com/esphome/esphome/pull/1513) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (new-integration) +- docs: sgp40 [esphome-docs#985](https://github.com/esphome/esphome-docs/pull/985) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) +- esphome: Bump protobuf from 3.15.7 to 3.15.8 [esphome#1682](https://github.com/esphome/esphome/pull/1682) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- esphome: Implementing the remainder of GPS data for the GPS component. [esphome#1676](https://github.com/esphome/esphome/pull/1676) by [@coogle](https://github.com/coogle) +- docs: Updating docs for the gps component. [esphome-docs#1094](https://github.com/esphome/esphome-docs/pull/1094) by [@coogle](https://github.com/coogle) +- esphome: Bump AsyncTCP-esphome to 1.2.1. [esphome#1693](https://github.com/esphome/esphome/pull/1693) by [@mmakaay](https://github.com/mmakaay) +- esphome: Revert "Bump AsyncTCP-esphome to 1.2.1." [esphome#1709](https://github.com/esphome/esphome/pull/1709) by [@glmnet](https://github.com/glmnet) +- esphome: Fix name_add_mac_suffix using_ instead of - [esphome#1702](https://github.com/esphome/esphome/pull/1702) by [@glmnet](https://github.com/glmnet) +- docs: Update name_add_mac_suffix use dash [esphome-docs#1111](https://github.com/esphome/esphome-docs/pull/1111) by [@glmnet](https://github.com/glmnet) +- esphome: Add monochromatic effects: Pulse, Random [esphome#1616](https://github.com/esphome/esphome/pull/1616) by [@ferbar](https://github.com/ferbar) +- docs: Add 'pulse' effect doc [esphome-docs#1067](https://github.com/esphome/esphome-docs/pull/1067) by [@ferbar](https://github.com/ferbar) +- esphome: Add support for SHT4X [esphome#1512](https://github.com/esphome/esphome/pull/1512) by [@sjtrny](https://github.com/sjtrny) (new-integration) +- docs: Add docs for SHT4X [esphome-docs#1002](https://github.com/esphome/esphome-docs/pull/1002) by [@sjtrny](https://github.com/sjtrny) +- esphome: Addition of forward and reverse active energy counters to ATM90E32 sensor component [esphome#1271](https://github.com/esphome/esphome/pull/1271) by [@elyorkhakimov](https://github.com/elyorkhakimov) +- docs: Add Atm90e32 energy docs [esphome-docs#1120](https://github.com/esphome/esphome-docs/pull/1120) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add Grow Fingerprint Reader [esphome#1356](https://github.com/esphome/esphome/pull/1356) by [@loongyh](https://github.com/loongyh) (new-integration) +- docs: Add Grow fingerprint reader docs [esphome-docs#835](https://github.com/esphome/esphome-docs/pull/835) by [@loongyh](https://github.com/loongyh) +- esphome: Support for TOF10120 distance sensor [esphome#1375](https://github.com/esphome/esphome/pull/1375) by [@wstrzalka](https://github.com/wstrzalka) (new-integration) +- docs: Documentation for TOF10120 support [esphome-docs#846](https://github.com/esphome/esphome-docs/pull/846) by [@wstrzalka](https://github.com/wstrzalka) +- esphome: Swap fan and swing fields for Fujitu ACs [esphome#1635](https://github.com/esphome/esphome/pull/1635) by [@alex-richards](https://github.com/alex-richards) +- esphome: BLE client support on ESP32 [esphome#1177](https://github.com/esphome/esphome/pull/1177) by [@buxtronix](https://github.com/buxtronix) (new-integration) +- docs: Ble client docs [esphome-docs#702](https://github.com/esphome/esphome-docs/pull/702) by [@buxtronix](https://github.com/buxtronix) +- esphome: Update email addresses [esphome#1733](https://github.com/esphome/esphome/pull/1733) by [@jesserockz](https://github.com/jesserockz) +- esphome: Ble client fixes [esphome#1739](https://github.com/esphome/esphome/pull/1739) by [@buxtronix](https://github.com/buxtronix) +- esphome: Fix #1940: Implement speed_count in TuyaFan [esphome#1654](https://github.com/esphome/esphome/pull/1654) by [@0x0a11c0de](https://github.com/0x0a11c0de) +- docs: Add speed_count to tuya fan [esphome-docs#1080](https://github.com/esphome/esphome-docs/pull/1080) by [@0x0a11c0de](https://github.com/0x0a11c0de) +- docs: Fix mcp3008 reference [esphome-docs#1131](https://github.com/esphome/esphome-docs/pull/1131) by [@jesserockz](https://github.com/jesserockz) +- esphome: Add Hyperion Support [esphome#1339](https://github.com/esphome/esphome/pull/1339) by [@d-two](https://github.com/d-two) +- docs: Add note about hyperion classic udp port [esphome-docs#1135](https://github.com/esphome/esphome-docs/pull/1135) by [@jesserockz](https://github.com/jesserockz) +- esphome: Call `Stepper::should_step_` every loop iteration [esphome#1373](https://github.com/esphome/esphome/pull/1373) by [@akonradi](https://github.com/akonradi) +- esphome: Add support for controlling Tuya fan direction [esphome#1409](https://github.com/esphome/esphome/pull/1409) by [@rmounce](https://github.com/rmounce) +- docs: Document Tuya fan direction datapoint [esphome-docs#877](https://github.com/esphome/esphome-docs/pull/877) by [@rmounce](https://github.com/rmounce) +- esphome: Change wifi signal strength unit to dBm [esphome#1734](https://github.com/esphome/esphome/pull/1734) by [@mbo18](https://github.com/mbo18) (breaking-change) +- docs: Change wifi signal strength unit to dBm [esphome-docs#1125](https://github.com/esphome/esphome-docs/pull/1125) by [@mbo18](https://github.com/mbo18) +- esphome: Added an option to disable mDNS [esphome#1716](https://github.com/esphome/esphome/pull/1716) by [@dnetguru](https://github.com/dnetguru) +- docs: Added docs for enable_mdns option [esphome-docs#1118](https://github.com/esphome/esphome-docs/pull/1118) by [@dnetguru](https://github.com/dnetguru) +- docs: add External components docs [esphome-docs#1107](https://github.com/esphome/esphome-docs/pull/1107) by [@glmnet](https://github.com/glmnet) +- esphome: Implement external custom components installing from YAML [esphome#1630](https://github.com/esphome/esphome/pull/1630) by [@OttoWinter](https://github.com/OttoWinter) (new-integration) +- esphome: Update copyright year [esphome#1760](https://github.com/esphome/esphome/pull/1760) by [@bonanitech](https://github.com/bonanitech) +- docs: Fixed datasheet link for RC522 [esphome-docs#1144](https://github.com/esphome/esphome-docs/pull/1144) by [@0nikola1](https://github.com/0nikola1) +- docs: Added receive for Fujitsu ACs [esphome-docs#1037](https://github.com/esphome/esphome-docs/pull/1037) by [@alex-richards](https://github.com/alex-richards) +- docs: Update allowed characters for node names [esphome-docs#1072](https://github.com/esphome/esphome-docs/pull/1072) by [@pkuehne](https://github.com/pkuehne) (cherry-picked) +- docs: Update docs: Add references to alternative ICs to HLW8012 and CSE7766 [esphome-docs#902](https://github.com/esphome/esphome-docs/pull/902) by [@kubik369](https://github.com/kubik369) +- docs: Update pulse_counter.rst [esphome-docs#1089](https://github.com/esphome/esphome-docs/pull/1089) by [@Chupaka](https://github.com/Chupaka) +- docs: Remove deprecated board_flash_mode from configuration example [esphome-docs#1149](https://github.com/esphome/esphome-docs/pull/1149) by [@frenck](https://github.com/frenck) +- docs: Update deep_sleep.rst [esphome-docs#1152](https://github.com/esphome/esphome-docs/pull/1152) by [@theOzzieRat](https://github.com/theOzzieRat) +- docs: Utalize pip3 for commands [esphome-docs#1143](https://github.com/esphome/esphome-docs/pull/1143) by [@rradar](https://github.com/rradar) +- docs: FAQ page: Converting from "I" to "we" wording [esphome-docs#1103](https://github.com/esphome/esphome-docs/pull/1103) by [@spacegaier](https://github.com/spacegaier) +- docs: thermostat min/max temperature clarification [esphome-docs#1057](https://github.com/esphome/esphome-docs/pull/1057) by [@larsonmpdx](https://github.com/larsonmpdx) +- docs: Added compatibility notes [esphome-docs#1033](https://github.com/esphome/esphome-docs/pull/1033) by [@Dezorian](https://github.com/Dezorian) +- docs: Specify format for BSSID entries. [esphome-docs#1046](https://github.com/esphome/esphome-docs/pull/1046) by [@marcteale](https://github.com/marcteale) +- docs: add font to usage example [esphome-docs#1050](https://github.com/esphome/esphome-docs/pull/1050) by [@azrael783](https://github.com/azrael783) +- docs: Fix missed merge conflict [esphome-docs#1155](https://github.com/esphome/esphome-docs/pull/1155) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- docs: Sample codeblock has incorrect variables [esphome-docs#1156](https://github.com/esphome/esphome-docs/pull/1156) by [@jcallaghan](https://github.com/jcallaghan) +- docs: Replaced set_password with new_password [esphome-docs#1157](https://github.com/esphome/esphome-docs/pull/1157) by [@PaulAntonDeen](https://github.com/PaulAntonDeen) (cherry-picked) +- docs: pulse counter: Show how calculations are made [esphome-docs#861](https://github.com/esphome/esphome-docs/pull/861) by [@fredrike](https://github.com/fredrike) +- esphome: Upgrade the version of AsyncTCP-esphome to v1.2.2 [esphome#1762](https://github.com/esphome/esphome/pull/1762) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- esphome: Fix build issues for idf 4.2 (Support ESP32-S2) [esphome#1433](https://github.com/esphome/esphome/pull/1433) by [@misery](https://github.com/misery) (cherry-picked) +- esphome: Use core constants for sample duration on bh1750 [esphome#1764](https://github.com/esphome/esphome/pull/1764) by [@yuvalabou](https://github.com/yuvalabou) (breaking-change) (cherry-picked) +- docs: Fix docs for inkplate [esphome-docs#1158](https://github.com/esphome/esphome-docs/pull/1158) by [@NobodysNightmare](https://github.com/NobodysNightmare) +- docs: Fixed wrong link in i2c_id [esphome-docs#1163](https://github.com/esphome/esphome-docs/pull/1163) by [@petrepa](https://github.com/petrepa) +- docs: Explain where to upload .ttf font files [esphome-docs#1133](https://github.com/esphome/esphome-docs/pull/1133) by [@TheGroundZero](https://github.com/TheGroundZero) +- esphome: Add sm2135 component [esphome#1736](https://github.com/esphome/esphome/pull/1736) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) (new-integration) +- docs: Add sm2135 component [esphome-docs#1127](https://github.com/esphome/esphome-docs/pull/1127) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) +- docs: Some clarification added to external components. [esphome-docs#1165](https://github.com/esphome/esphome-docs/pull/1165) by [@mmakaay](https://github.com/mmakaay) (cherry-picked) +- docs: Add new disconnect reasons to the FAQ. [esphome-docs#1129](https://github.com/esphome/esphome-docs/pull/1129) by [@mmakaay](https://github.com/mmakaay) +- esphome: Allow RC522 components to have multiple configurations [esphome#1782](https://github.com/esphome/esphome/pull/1782) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- docs: Update max frequency [esphome-docs#1172](https://github.com/esphome/esphome-docs/pull/1172) by [@bookcasey](https://github.com/bookcasey) +- docs: Update web-api id component [esphome-docs#1168](https://github.com/esphome/esphome-docs/pull/1168) by [@meijerwynand](https://github.com/meijerwynand) +- docs: Fix docker build failure [esphome-docs#1179](https://github.com/esphome/esphome-docs/pull/1179) by [@martgras](https://github.com/martgras) +- docs: Update ifan02 example with new fan speed options [esphome-docs#1177](https://github.com/esphome/esphome-docs/pull/1177) by [@workingmanrob](https://github.com/workingmanrob) +- docs: Document missing use_address in Ethernet component [esphome-docs#1176](https://github.com/esphome/esphome-docs/pull/1176) by [@xsnoopy](https://github.com/xsnoopy) +- docs: Lambda over multiple lines. added [esphome-docs#1173](https://github.com/esphome/esphome-docs/pull/1173) by [@klenaers](https://github.com/klenaers) +- docs: changed LG example to existing, working code [esphome-docs#1171](https://github.com/esphome/esphome-docs/pull/1171) by [@qqgg231](https://github.com/qqgg231) +- docs: GPIO Switch: simplify Momentary Switch example [esphome-docs#1121](https://github.com/esphome/esphome-docs/pull/1121) by [@ianchi](https://github.com/ianchi) +- docs: Added warning: GPIOs are LIVE in power measurement devices [esphome-docs#583](https://github.com/esphome/esphome-docs/pull/583) by [@CarlosGS](https://github.com/CarlosGS) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.19.0.mdx b/src/content/docs/changelog/v1.19.0.mdx new file mode 100644 index 0000000000..be000cfffb --- /dev/null +++ b/src/content/docs/changelog/v1.19.0.mdx @@ -0,0 +1,253 @@ +--- +description: "Changelog for ESPHome version 1.19.0." +title: "Changelog - Version 1.19.0 - 16th June 2021" +pagefind: false +slug: "changelog/v1.19.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +Wow. Ok, so this release may not look big, but there are a number of new features that are not new components. + +## Improv + +[Improv Wi-Fi](/components/esp32_improv/) is a new standard that stands for **Improved Provisioning of Wi-Fi +Credentials**. What it does is allow you to provision Wi-Fi credentials to the device by using Bluetooth LE. +Check out the website for more details at [improv-wifi.com](https://www.improv-wifi.com/). + +## Home Assistant Sensor Attributes + +For a long time now one of the top requested features was to be able to read attributes from Home Assistant +entities into a local sensor in ESPHome. For example the brightness of a light, or the current temperature +of a climate device. [@frenck](https://github.com/frenck) decided to take a stab and as long as you are running at least ESPHome +1.19.0 and Home Assistant 2021.6 then you can do this. Thanks Frenck! + +```yaml +# Example configuration entry +sensor: + - platform: homeassistant + id: current_temperature + entity_id: climate.living_room + attribute: current_temperature +``` + +## For the Creators + +There have been a few additions to the ESPHome codebase that make it easier for creators to make projects +in ESPHome and distribute them pre-installed and ready to use. See the [new page here](/guides/creators/). + +## The Web Experience + +We have been working hard on some new tooling to make it easier for everyone to install ESPHome and other DIY +firmwares onto their ESP-based devices. To do this we have created the +[ESP Web Tools](https://esphome.github.io/esp-web-tools/). Big shoutout to [@balloob](https://github.com/balloob) on most of that work! + +Because of these new tools, the ESPHome dashboard has gotten a slight makeover when you choose to install to a device. +You are now given the option to install directly via WebSerial to the ESP from the browser. No more plugging into the +server/VM running ESPHome and restarting container etc. It just works. (Provided you are using Chrome or Edge). + +## Command Line Interface + +Thanks to [@oxan](https://github.com/oxan) for making some change to the ESPHome CLI. Instead of `esphome config.yaml run` +we now have `esphome run config.yaml`. The old format is still accepted and will be removed in a future release, +but there is a **breaking change** with this release which is the arguments `--upload-port` and `--serial-port` have been +combined and changed to `--device`. + +## Release 1.19.1 - June 18 + +- Update dashboard to 20210617.0 [esphome#1930](https://github.com/esphome/esphome/pull/1930) by [@balloob](https://github.com/balloob) +- Fix: midea_ac: fixed query status frame [esphome#1922](https://github.com/esphome/esphome/pull/1922) by [@dudanov](https://github.com/dudanov) +- Improve config final validation [esphome#1917](https://github.com/esphome/esphome/pull/1917) by [@OttoWinter](https://github.com/OttoWinter) +- Replace CLIMATE_MODE_AUTO with CLIMATE_MODE_HEAT_COOL in most cases [esphome#1933](https://github.com/esphome/esphome/pull/1933) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.19.2 - June 21 + +- Don't send Tuya commands while currently receiving a message [esphome#1886](https://github.com/esphome/esphome/pull/1886) by [@nuttytree](https://github.com/nuttytree) +- Fix midea_ac query frame [esphome#1940](https://github.com/esphome/esphome/pull/1940) by [@dudanov](https://github.com/dudanov) +- Allow wifi setup to proceed when there is no sta or ap [esphome#1931](https://github.com/esphome/esphome/pull/1931) by [@jesserockz](https://github.com/jesserockz) +- Fix bad climate control enum [esphome#1942](https://github.com/esphome/esphome/pull/1942) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.19.3 - June 23 + +- Bump esphome-dashboard to 20210622.0 [esphome#1955](https://github.com/esphome/esphome/pull/1955) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.19.4 - June 24 + +- Rework climate traits [esphome#1941](https://github.com/esphome/esphome/pull/1941) by [@OttoWinter](https://github.com/OttoWinter) +- API raise minor version for climate changes [esphome#1947](https://github.com/esphome/esphome/pull/1947) by [@OttoWinter](https://github.com/OttoWinter) +- Disallow power_save_mode NONE if used together with BLE [esphome#1950](https://github.com/esphome/esphome/pull/1950) by [@OttoWinter](https://github.com/OttoWinter) +- Add climate preset NONE again [esphome#1951](https://github.com/esphome/esphome/pull/1951) by [@OttoWinter](https://github.com/OttoWinter) +- Compat argv parsing improvements [esphome#1952](https://github.com/esphome/esphome/pull/1952) by [@OttoWinter](https://github.com/OttoWinter) +- Bump dashboard to 20210623.0 [esphome#1958](https://github.com/esphome/esphome/pull/1958) by [@jesserockz](https://github.com/jesserockz) + +## Full list of changes + +### New Components + +- Add sm2135 component [esphome#1736](https://github.com/esphome/esphome/pull/1736) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) (new-integration) +- Add support for the XPT2046 touchscreen controller [esphome#1542](https://github.com/esphome/esphome/pull/1542) by [@numo68](https://github.com/numo68) (new-integration) +- Add support for SDMXXX energy meters [esphome#1260](https://github.com/esphome/esphome/pull/1260) by [@polyfaces](https://github.com/polyfaces) (new-integration) +- Add CS5460A power-meter component [esphome#1474](https://github.com/esphome/esphome/pull/1474) by [@balrog-kun](https://github.com/balrog-kun) (new-integration) +- Added support for Xiaomi CGDK2 [esphome#1451](https://github.com/esphome/esphome/pull/1451) by [@zaluthar](https://github.com/zaluthar) (new-integration) +- Improv - BLE WiFi provisioning [esphome#1807](https://github.com/esphome/esphome/pull/1807) by [@jesserockz](https://github.com/jesserockz) (new-integration) (notable-change) + +### Breaking Changes + +- Drop 128x160 ESP-32 camera resolution [esphome#1813](https://github.com/esphome/esphome/pull/1813) by [@oxan](https://github.com/oxan) (breaking-change) +- teleinfo: use text_sensor and sensor. [esphome#1403](https://github.com/esphome/esphome/pull/1403) by [@0hax](https://github.com/0hax) (breaking-change) +- CLI user experience improvements [esphome#1805](https://github.com/esphome/esphome/pull/1805) by [@oxan](https://github.com/oxan) (breaking-change) (notable-change) + +### Notable Changes + +- Add attribute support to Home Assistant sensors [esphome#1770](https://github.com/esphome/esphome/pull/1770) by [@frenck](https://github.com/frenck) (notable-change) +- CLI user experience improvements [esphome#1805](https://github.com/esphome/esphome/pull/1805) by [@oxan](https://github.com/oxan) (breaking-change) (notable-change) +- Improv - BLE WiFi provisioning [esphome#1807](https://github.com/esphome/esphome/pull/1807) by [@jesserockz](https://github.com/jesserockz) (new-integration) (notable-change) + +### Beta Fixes + +- Upgrade the version of AsyncTCP-esphome to v1.2.2 [esphome#1762](https://github.com/esphome/esphome/pull/1762) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- Fix build issues for idf 4.2 (Support ESP32-S2) [esphome#1433](https://github.com/esphome/esphome/pull/1433) by [@misery](https://github.com/misery) (cherry-picked) +- Use core constants for sample duration on bh1750 [esphome#1764](https://github.com/esphome/esphome/pull/1764) by [@yuvalabou](https://github.com/yuvalabou) (breaking-change) (cherry-picked) +- Add sm2135 component [esphome#1736](https://github.com/esphome/esphome/pull/1736) by [@BoukeHaarsma23](https://github.com/BoukeHaarsma23) (cherry-picked) (new-integration) +- Allow RC522 components to have multiple configurations [esphome#1782](https://github.com/esphome/esphome/pull/1782) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Simplify LightCall validation [esphome#1874](https://github.com/esphome/esphome/pull/1874) by [@oxan](https://github.com/oxan) (cherry-picked) +- Simplify LightCall validation [esphome#1874](https://github.com/esphome/esphome/pull/1874) by [@oxan](https://github.com/oxan) (cherry-picked) +- BLE loop use [esphome#1882](https://github.com/esphome/esphome/pull/1882) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- BLE loop use [esphome#1882](https://github.com/esphome/esphome/pull/1882) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Add support for waveshare_epaper 1.54v2 [esphome#1843](https://github.com/esphome/esphome/pull/1843) by [@geoffdavis](https://github.com/geoffdavis) (cherry-picked) +- Add support for waveshare_epaper 1.54v2 [esphome#1843](https://github.com/esphome/esphome/pull/1843) by [@geoffdavis](https://github.com/geoffdavis) (cherry-picked) +- Ensure wifi is in at least station mode before starting improv [esphome#1899](https://github.com/esphome/esphome/pull/1899) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Ensure wifi is in at least station mode before starting improv [esphome#1899](https://github.com/esphome/esphome/pull/1899) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Move esp32_ble_server to its own component [esphome#1898](https://github.com/esphome/esphome/pull/1898) by [@jesserockz](https://github.com/jesserockz) (breaking-change) (cherry-picked) (new-integration) +- Move esp32_ble_server to its own component [esphome#1898](https://github.com/esphome/esphome/pull/1898) by [@jesserockz](https://github.com/jesserockz) (breaking-change) (cherry-picked) (new-integration) +- Add new wizard + allow installing firmware over webserial [esphome#1887](https://github.com/esphome/esphome/pull/1887) by [@balloob](https://github.com/balloob) (cherry-picked) +- Add new wizard + allow installing firmware over webserial [esphome#1887](https://github.com/esphome/esphome/pull/1887) by [@balloob](https://github.com/balloob) (cherry-picked) +- Allow no networks or AP to be set. [esphome#1908](https://github.com/esphome/esphome/pull/1908) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Allow no networks or AP to be set. [esphome#1908](https://github.com/esphome/esphome/pull/1908) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Validate that either networks, ap, or improv is set up [esphome#1910](https://github.com/esphome/esphome/pull/1910) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Validate that either networks, ap, or improv is set up [esphome#1910](https://github.com/esphome/esphome/pull/1910) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Bump frontend to 20210614.0 [esphome#1912](https://github.com/esphome/esphome/pull/1912) by [@balloob](https://github.com/balloob) (cherry-picked) +- Bump frontend to 20210614.0 [esphome#1912](https://github.com/esphome/esphome/pull/1912) by [@balloob](https://github.com/balloob) (cherry-picked) +- fixes compatibility with esphome cfg vscode [esphome#1911](https://github.com/esphome/esphome/pull/1911) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- fixes compatibility with esphome cfg vscode [esphome#1911](https://github.com/esphome/esphome/pull/1911) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- Bump dashboard to 20210615.0 [esphome#1918](https://github.com/esphome/esphome/pull/1918) by [@balloob](https://github.com/balloob) (cherry-picked) +- Shorten the ble name to prevent crash with long device names [esphome#1920](https://github.com/esphome/esphome/pull/1920) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Fix update-all from dashboard [esphome#1924](https://github.com/esphome/esphome/pull/1924) by [@frenck](https://github.com/frenck) + +### All changes + +- Bump black from 20.8b1 to 21.5b0 [esphome#1745](https://github.com/esphome/esphome/pull/1745) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pylint from 2.7.2 to 2.8.2 [esphome#1729](https://github.com/esphome/esphome/pull/1729) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Fix error when using %% in printf format. [esphome#1713](https://github.com/esphome/esphome/pull/1713) by [@mmakaay](https://github.com/mmakaay) +- Update const.py [esphome#1748](https://github.com/esphome/esphome/pull/1748) by [@cciprian5](https://github.com/cciprian5) +- Allow duration for deep_sleep.enter to be templatable [esphome#1765](https://github.com/esphome/esphome/pull/1765) by [@jesserockz](https://github.com/jesserockz) +- Bump black from 21.5b0 to 21.5b1 [esphome#1768](https://github.com/esphome/esphome/pull/1768) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump flake8 from 3.9.0 to 3.9.2 [esphome#1763](https://github.com/esphome/esphome/pull/1763) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest from 6.2.3 to 6.2.4 [esphome#1769](https://github.com/esphome/esphome/pull/1769) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Adding delay to aht10.cpp (issue #1635) [esphome#1498](https://github.com/esphome/esphome/pull/1498) by [@krunkel](https://github.com/krunkel) +- Mitsubishi Heat Pump - Fixed default transmit_state to be generic instead of for a specific type of heat pump [esphome#1414](https://github.com/esphome/esphome/pull/1414) by [@RubyBailey](https://github.com/RubyBailey) +- Add function to set SDS011 sensor in sleeping mode [esphome#1416](https://github.com/esphome/esphome/pull/1416) by [@onde2rock](https://github.com/onde2rock) +- Autorepeat filter for the binary sensors [esphome#1681](https://github.com/esphome/esphome/pull/1681) by [@numo68](https://github.com/numo68) +- Add action to set total pulses on pulse_meter [esphome#1757](https://github.com/esphome/esphome/pull/1757) by [@jesserockz](https://github.com/jesserockz) +- Add more json schema generation features [esphome#1690](https://github.com/esphome/esphome/pull/1690) by [@glmnet](https://github.com/glmnet) +- Generate protobuf code closer to formatted files [esphome#1790](https://github.com/esphome/esphome/pull/1790) by [@jesserockz](https://github.com/jesserockz) +- Add attribute support to Home Assistant sensors [esphome#1770](https://github.com/esphome/esphome/pull/1770) by [@frenck](https://github.com/frenck) (notable-change) +- Bump Arduino SDK for ESP32 to 1.0.6 [esphome#1789](https://github.com/esphome/esphome/pull/1789) by [@agners](https://github.com/agners) +- Added bottom segment to digit 9 [esphome#1787](https://github.com/esphome/esphome/pull/1787) by [@testbughub](https://github.com/testbughub) +- Add support for the XPT2046 touchscreen controller [esphome#1542](https://github.com/esphome/esphome/pull/1542) by [@numo68](https://github.com/numo68) (new-integration) +- Revert "Added bottom segment to digit 9" [esphome#1791](https://github.com/esphome/esphome/pull/1791) by [@jesserockz](https://github.com/jesserockz) +- Introduce new async-def coroutine syntax [esphome#1657](https://github.com/esphome/esphome/pull/1657) by [@OttoWinter](https://github.com/OttoWinter) +- Add on_tag_removed trigger to pn532 [esphome#1436](https://github.com/esphome/esphome/pull/1436) by [@romerod](https://github.com/romerod) +- Do not use Serial2 for ESP32C3, too [esphome#1798](https://github.com/esphome/esphome/pull/1798) by [@misery](https://github.com/misery) +- Use latest version of upstream NeoPixelBus library [esphome#1701](https://github.com/esphome/esphome/pull/1701) by [@agners](https://github.com/agners) +- Added fan triggers on_turn_on and on_turn_off [esphome#1726](https://github.com/esphome/esphome/pull/1726) by [@dataway](https://github.com/dataway) +- tm1637 - support 6 character displays [esphome#1803](https://github.com/esphome/esphome/pull/1803) by [@dataway](https://github.com/dataway) +- Convert core components to async-def coroutine syntax [esphome#1658](https://github.com/esphome/esphome/pull/1658) by [@OttoWinter](https://github.com/OttoWinter) +- Lights & GPIO Switch inverted restore mode [esphome#1810](https://github.com/esphome/esphome/pull/1810) by [@frenck](https://github.com/frenck) +- allow default option for typed_schema [esphome#1700](https://github.com/esphome/esphome/pull/1700) by [@wifwucite](https://github.com/wifwucite) +- Refactor font creation to save stack space [esphome#1707](https://github.com/esphome/esphome/pull/1707) by [@numo68](https://github.com/numo68) +- BME680 BSEC: Allow sample rate overrides for T/P/H sensors [esphome#1710](https://github.com/esphome/esphome/pull/1710) by [@trvrnrth](https://github.com/trvrnrth) +- Add the on_page_change display trigger [esphome#1687](https://github.com/esphome/esphome/pull/1687) by [@numo68](https://github.com/numo68) +- Allow segments in a light partition to be reversed [esphome#1484](https://github.com/esphome/esphome/pull/1484) by [@jimbauwens](https://github.com/jimbauwens) +- Document considerations when changing recommended framework version [esphome#1822](https://github.com/esphome/esphome/pull/1822) by [@OttoWinter](https://github.com/OttoWinter) +- Convert components to async-def syntax [esphome#1821](https://github.com/esphome/esphome/pull/1821) by [@OttoWinter](https://github.com/OttoWinter) +- Bump protobuf from 3.15.8 to 3.17.0 [esphome#1776](https://github.com/esphome/esphome/pull/1776) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Convert components to async-def syntax [esphome#1823](https://github.com/esphome/esphome/pull/1823) by [@OttoWinter](https://github.com/OttoWinter) +- Update sensor device classes from HA [esphome#1825](https://github.com/esphome/esphome/pull/1825) by [@OttoWinter](https://github.com/OttoWinter) +- Update platformio.ini settings and fix test apps [esphome#1815](https://github.com/esphome/esphome/pull/1815) by [@oxan](https://github.com/oxan) +- lambda condition should return [esphome#1833](https://github.com/esphome/esphome/pull/1833) by [@glmnet](https://github.com/glmnet) +- fix dallas pin validation [esphome#1692](https://github.com/esphome/esphome/pull/1692) by [@glmnet](https://github.com/glmnet) +- Fix typo in wizard [esphome#1836](https://github.com/esphome/esphome/pull/1836) by [@ThomDietrich](https://github.com/ThomDietrich) +- add validate to components [esphome#1631](https://github.com/esphome/esphome/pull/1631) by [@glmnet](https://github.com/glmnet) +- Added bottom segment to digit 9 [esphome#1847](https://github.com/esphome/esphome/pull/1847) by [@testbughub](https://github.com/testbughub) +- Add support for SDMXXX energy meters [esphome#1260](https://github.com/esphome/esphome/pull/1260) by [@polyfaces](https://github.com/polyfaces) (new-integration) +- Add CS5460A power-meter component [esphome#1474](https://github.com/esphome/esphome/pull/1474) by [@balrog-kun](https://github.com/balrog-kun) (new-integration) +- Drop 128x160 ESP-32 camera resolution [esphome#1813](https://github.com/esphome/esphome/pull/1813) by [@oxan](https://github.com/oxan) (breaking-change) +- Rf Bridge: add bucket sniffing and beep functionality [esphome#1819](https://github.com/esphome/esphome/pull/1819) by [@ianchi](https://github.com/ianchi) +- Use built-in validation for altitude [esphome#1831](https://github.com/esphome/esphome/pull/1831) by [@agners](https://github.com/agners) +- Don't check uart settings for modbus [esphome#1850](https://github.com/esphome/esphome/pull/1850) by [@jesserockz](https://github.com/jesserockz) +- I2c raw cmds with multiplexer [esphome#1817](https://github.com/esphome/esphome/pull/1817) by [@mmakaay](https://github.com/mmakaay) +- Update fingerprint count after enroll [esphome#1811](https://github.com/esphome/esphome/pull/1811) by [@rwagnervm](https://github.com/rwagnervm) +- teleinfo: use text_sensor and sensor. [esphome#1403](https://github.com/esphome/esphome/pull/1403) by [@0hax](https://github.com/0hax) (breaking-change) +- Copy missing BLE client characteristic read data [esphome#1818](https://github.com/esphome/esphome/pull/1818) by [@buxtronix](https://github.com/buxtronix) +- Added support for Xiaomi CGDK2 [esphome#1451](https://github.com/esphome/esphome/pull/1451) by [@zaluthar](https://github.com/zaluthar) (new-integration) +- Fix ble client esp_gatt_if comparison [esphome#1852](https://github.com/esphome/esphome/pull/1852) by [@jesserockz](https://github.com/jesserockz) +- Add optional lambda to BLESensor for raw data parsing [esphome#1851](https://github.com/esphome/esphome/pull/1851) by [@torfbolt](https://github.com/torfbolt) +- Support Tuya light color temperature control [esphome#1412](https://github.com/esphome/esphome/pull/1412) by [@rmounce](https://github.com/rmounce) +- Tuya improvements [esphome#1491](https://github.com/esphome/esphome/pull/1491) by [@trvrnrth](https://github.com/trvrnrth) +- Use size_t for length parameter [esphome#1799](https://github.com/esphome/esphome/pull/1799) by [@misery](https://github.com/misery) +- Added vol +/- control to dfplayer [esphome#1856](https://github.com/esphome/esphome/pull/1856) by [@foxsam21](https://github.com/foxsam21) +- Support raw datapoints for tuya components [esphome#1669](https://github.com/esphome/esphome/pull/1669) by [@kroimon](https://github.com/kroimon) +- Add support for Sensor state class [esphome#1835](https://github.com/esphome/esphome/pull/1835) by [@frenck](https://github.com/frenck) +- make crc16 function accessible [esphome#1857](https://github.com/esphome/esphome/pull/1857) by [@ssieb](https://github.com/ssieb) +- Add preset, custom_preset and custom_fan_mode support to climate [esphome#1471](https://github.com/esphome/esphome/pull/1471) by [@Lumpusz](https://github.com/Lumpusz) +- Avoid unnecessary waits to stabilize the VOC algorithm [esphome#1834](https://github.com/esphome/esphome/pull/1834) by [@agners](https://github.com/agners) +- Fix SCD30 configuration on ESP32 [esphome#1830](https://github.com/esphome/esphome/pull/1830) by [@agners](https://github.com/agners) +- Bump Docker base version to 3.1.0 [esphome#1864](https://github.com/esphome/esphome/pull/1864) by [@agners](https://github.com/agners) +- CLI user experience improvements [esphome#1805](https://github.com/esphome/esphome/pull/1805) by [@oxan](https://github.com/oxan) (breaking-change) (notable-change) +- Improv - BLE WiFi provisioning [esphome#1807](https://github.com/esphome/esphome/pull/1807) by [@jesserockz](https://github.com/jesserockz) (new-integration) (notable-change) +- Implement versioning for esphome/esphome-lint docker images [esphome#1877](https://github.com/esphome/esphome/pull/1877) by [@OttoWinter](https://github.com/OttoWinter) +- Bump base image to 3.4.0 [esphome#1879](https://github.com/esphome/esphome/pull/1879) by [@OttoWinter](https://github.com/OttoWinter) +- Use Clang 11 [esphome#1846](https://github.com/esphome/esphome/pull/1846) by [@agners](https://github.com/agners) +- Remove explain changes section from PR template [esphome#1876](https://github.com/esphome/esphome/pull/1876) by [@OttoWinter](https://github.com/OttoWinter) +- Fixes for BLE/improv [esphome#1878](https://github.com/esphome/esphome/pull/1878) by [@jesserockz](https://github.com/jesserockz) +- Fix Clang 11 finds [esphome#1880](https://github.com/esphome/esphome/pull/1880) by [@agners](https://github.com/agners) +- Allow setting creator project name and version into code [esphome#1872](https://github.com/esphome/esphome/pull/1872) by [@jesserockz](https://github.com/jesserockz) +- Add platform and board to mdns response when API is used [esphome#1871](https://github.com/esphome/esphome/pull/1871) by [@jesserockz](https://github.com/jesserockz) +- Update total_pulses at every detected pulse [esphome#1875](https://github.com/esphome/esphome/pull/1875) by [@rklomp](https://github.com/rklomp) +- Simplify LightCall validation [esphome#1874](https://github.com/esphome/esphome/pull/1874) by [@oxan](https://github.com/oxan) (cherry-picked) +- BLE loop use [esphome#1882](https://github.com/esphome/esphome/pull/1882) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Add support for waveshare_epaper 1.54v2 [esphome#1843](https://github.com/esphome/esphome/pull/1843) by [@geoffdavis](https://github.com/geoffdavis) (cherry-picked) +- Update ambiguous command [esphome#1889](https://github.com/esphome/esphome/pull/1889) by [@jesserockz](https://github.com/jesserockz) +- Configure clang-format for consistent pointer alignment [esphome#1890](https://github.com/esphome/esphome/pull/1890) by [@OttoWinter](https://github.com/OttoWinter) +- Activate some clang-tidy checks [esphome#1884](https://github.com/esphome/esphome/pull/1884) by [@OttoWinter](https://github.com/OttoWinter) +- Avoid non-const globals and enable clang-tidy check [esphome#1892](https://github.com/esphome/esphome/pull/1892) by [@agners](https://github.com/agners) +- Convert st7735.cpp to use Unix line separators [esphome#1894](https://github.com/esphome/esphome/pull/1894) by [@oxan](https://github.com/oxan) +- Ensure wifi is in at least station mode before starting improv [esphome#1899](https://github.com/esphome/esphome/pull/1899) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Move esp32_ble_server to its own component [esphome#1898](https://github.com/esphome/esphome/pull/1898) by [@jesserockz](https://github.com/jesserockz) (breaking-change) (cherry-picked) (new-integration) +- Add new wizard + allow installing firmware over webserial [esphome#1887](https://github.com/esphome/esphome/pull/1887) by [@balloob](https://github.com/balloob) (cherry-picked) +- Split files in light component [esphome#1893](https://github.com/esphome/esphome/pull/1893) by [@oxan](https://github.com/oxan) +- Fix CI by avoiding non-const global [esphome#1907](https://github.com/esphome/esphome/pull/1907) by [@oxan](https://github.com/oxan) +- Adds support cpp to vscode [esphome#1828](https://github.com/esphome/esphome/pull/1828) by [@dentra](https://github.com/dentra) +- Allow no networks or AP to be set. [esphome#1908](https://github.com/esphome/esphome/pull/1908) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Validate that either networks, ap, or improv is set up [esphome#1910](https://github.com/esphome/esphome/pull/1910) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Support ESP8266 Arduino 3.0.0 [esphome#1897](https://github.com/esphome/esphome/pull/1897) by [@agners](https://github.com/agners) +- Bump frontend to 20210614.0 [esphome#1912](https://github.com/esphome/esphome/pull/1912) by [@balloob](https://github.com/balloob) (cherry-picked) +- Run script/setup in devcontainer instead of pip install [esphome#1913](https://github.com/esphome/esphome/pull/1913) by [@OttoWinter](https://github.com/OttoWinter) +- fixes compatibility with esphome cfg vscode [esphome#1911](https://github.com/esphome/esphome/pull/1911) by [@glmnet](https://github.com/glmnet) (cherry-picked) +- Bump dashboard to 20210615.0 [esphome#1918](https://github.com/esphome/esphome/pull/1918) by [@balloob](https://github.com/balloob) (cherry-picked) +- Shorten the ble name to prevent crash with long device names [esphome#1920](https://github.com/esphome/esphome/pull/1920) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Fix update-all from dashboard [esphome#1924](https://github.com/esphome/esphome/pull/1924) by [@frenck](https://github.com/frenck) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.20.0.mdx b/src/content/docs/changelog/v1.20.0.mdx new file mode 100644 index 0000000000..7fae026bd5 --- /dev/null +++ b/src/content/docs/changelog/v1.20.0.mdx @@ -0,0 +1,221 @@ +--- +description: "Changelog for ESPHome version 1.20.0." +title: "Changelog - Version 1.20.0 - 21st July 2021" +pagefind: false +slug: "changelog/v1.20.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +import { Image } from 'astro:assets'; +import onlineIndicatorImg from './images/online-indicator.png'; + +{/* markdownlint-disable MD013 */} + +Here's to another timely release bringing a few new components and a whole bunch of changes under +the hood to existing ones. + +## Number Entities + +Creating `number` entities in Home Assistant from ESPHome is now supported. This basically replaces +creating an `input_number` and then importing that sensor into ESPHome as a sensor with +`platform: homeassistant`. The state of the number can also be updated directly on the ESPHome device +and will be reflected in Home Assistant. + +I would like to see what other platforms people can come up with for the number component, +I have a few ideas myself. + +## Light Changes + +Unfortunately, some breaking changes had to be made: + +- For addressable RGBW lights, the brightness now also applies to the white channel (this was already the case for + non-addressable RGBW lights). If you want to control only the brightness of the color channel, use the new `color_brightness` option. + +- For RGBW lights, the white channel is no longer normalized by the color intensity in the `light.turn_on` and + `light.control` actions. In previous versions, if the red value was set to 60% and the white value to 30%, this + would result in the white channel being at 50% brightness. Starting with this version, this will result in the + white channel being set to 30%, as expected. + +## ESPHome Dashboard + +Thanks [@balloob](https://github.com/balloob) for making a small, but very significant change to the dashboard cards so now people who suffer from color-blindness +will know whether or not the node is online. + + + +## Nextion + +The Nextion component has had a major rewrite this release bringing many more features to those that use the displays. +I am not sure how to describe the changes except for listing the main change points from the PR and linking to the docs +for you to read yourself. [Nextion](/components/display/nextion/) + +- Sensors/binary sensors/switch/text sensors and touch have all been added. +- Over the air TFT file upload +- Polling has been added to all the components +- Display on_wake/on_sleep +- Many API helpers (get_string/get_int) have been added + +## Release 1.20.1 - July 27 + +- Fix git pull for external_components [esphome#2055](https://github.com/esphome/esphome/pull/2055) by [@mmakaay](https://github.com/mmakaay) +- midea_ac: fix presets implementation [esphome#2054](https://github.com/esphome/esphome/pull/2054) by [@dudanov](https://github.com/dudanov) +- Fixes new auto mode COOL and HEAT after [esphome#1994](https://github.com/esphome/esphome/pull/1994) [esphome#2053](https://github.com/esphome/esphome/pull/2053) by [@carstenschroeder](https://github.com/carstenschroeder) +- Log warning about lack of support for Anova nano [esphome#2063](https://github.com/esphome/esphome/pull/2063) by [@buxtronix](https://github.com/buxtronix) +- Couple more updates for the Tuya component [esphome#2065](https://github.com/esphome/esphome/pull/2065) by [@nuttytree](https://github.com/nuttytree) +- Fix MQTT climate custom fan modes without regular ones [esphome#2071](https://github.com/esphome/esphome/pull/2071) by [@OttoWinter](https://github.com/OttoWinter) + +## Release 1.20.2 - July 29 + +- More Tuya MCU robustness [esphome#2080](https://github.com/esphome/esphome/pull/2080) by [@jkl1337](https://github.com/jkl1337) +- Bump esphome dashboard to 20210728.0 [esphome#2081](https://github.com/esphome/esphome/pull/2081) by [@jesserockz](https://github.com/jesserockz) +- HLW8012 - Dump energy sensor config [esphome#2082](https://github.com/esphome/esphome/pull/2082) by [@jesserockz](https://github.com/jesserockz) +- Use sensor_schema for total_daily_energy [esphome#2090](https://github.com/esphome/esphome/pull/2090) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.20.3 - July 30 + +- Set pulse meter total to use state class measurement and last reset type auto [esphome#2097](https://github.com/esphome/esphome/pull/2097) by [@jesserockz](https://github.com/jesserockz) + +## Release 1.20.4 - August 4 + +- Correctly invert esp32 RMT TX [esphome#2022](https://github.com/esphome/esphome/pull/2022) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) +- Move configure_rmt() into setup() [esphome#2028](https://github.com/esphome/esphome/pull/2028) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) +- Fix climate restore schema changed resulting in invalid restore [esphome#2068](https://github.com/esphome/esphome/pull/2068) by [@OttoWinter](https://github.com/OttoWinter) +- Fix PID climate breaks when restoring old modes [esphome#2086](https://github.com/esphome/esphome/pull/2086) by [@OttoWinter](https://github.com/OttoWinter) +- fix diplay trigger missing base class [esphome#2099](https://github.com/esphome/esphome/pull/2099) by [@glmnet](https://github.com/glmnet) +- Fix min/max keys in MQTT Number to match Home Assistant [esphome#2102](https://github.com/esphome/esphome/pull/2102) by [@paulmonigatti](https://github.com/paulmonigatti) +- Use proper schema for the analog pin shorthand [esphome#2103](https://github.com/esphome/esphome/pull/2103) by [@nonameplum](https://github.com/nonameplum) +- [duty_cycle] initialize two missing variables [esphome#2088](https://github.com/esphome/esphome/pull/2088) by [@CarlosGS](https://github.com/CarlosGS) +- Fix time.on_time triggering if time jumped back [esphome#1806](https://github.com/esphome/esphome/pull/1806) by [@brambo123](https://github.com/brambo123) +- Fix external components not refreshing with default or high refresh time [esphome#2122](https://github.com/esphome/esphome/pull/2122) by [@OttoWinter](https://github.com/OttoWinter) + +## Full list of changes + +### New Features + +- Allow WiFi AP to use device name [esphome#1990](https://github.com/esphome/esphome/pull/1990) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Add Number entities (from Home Assistant) [esphome#1971](https://github.com/esphome/esphome/pull/1971) by [@jesserockz](https://github.com/jesserockz) (new-feature) (new-integration) (notable-change) +- Nextion upload and sensors [esphome#1464](https://github.com/esphome/esphome/pull/1464) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) (new-feature) (notable-change) +- Adding last_reset_type to sensors that should support it. [esphome#2039](https://github.com/esphome/esphome/pull/2039) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) (new-feature) + +### New Components + +- Climate component for Ballu air conditioners with remote model YKR-K/002E [esphome#1939](https://github.com/esphome/esphome/pull/1939) by [@bazuchan](https://github.com/bazuchan) (new-integration) +- Anova ble component [esphome#1752](https://github.com/esphome/esphome/pull/1752) by [@buxtronix](https://github.com/buxtronix) (new-integration) +- Add Number entities (from Home Assistant) [esphome#1971](https://github.com/esphome/esphome/pull/1971) by [@jesserockz](https://github.com/jesserockz) (new-feature) (new-integration) (notable-change) +- Added support for havells_solar sensor [esphome#1988](https://github.com/esphome/esphome/pull/1988) by [@sourabhjaiswal](https://github.com/sourabhjaiswal) (new-integration) + +### Breaking Changes + +- remote_receiver use config parent receiver for registering dumpers [esphome#1980](https://github.com/esphome/esphome/pull/1980) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Change color model to fix white channel issues [esphome#1895](https://github.com/esphome/esphome/pull/1895) by [@oxan](https://github.com/oxan) (breaking-change) +- Remove a whole bunch of deprecated/removed stuff [esphome#1981](https://github.com/esphome/esphome/pull/1981) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- catch 0.0 in float set_level pre-adjustment [esphome#2013](https://github.com/esphome/esphome/pull/2013) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (breaking-change) +- Climate mode meaning was changed [esphome#1995](https://github.com/esphome/esphome/pull/1995) by [@OttoWinter](https://github.com/OttoWinter) (breaking-change) + +### Beta Fixes + +- Nextion upload and sensors [esphome#1464](https://github.com/esphome/esphome/pull/1464) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) (new-feature) (notable-change) +- Fix ethernet component hostname handling [esphome#2010](https://github.com/esphome/esphome/pull/2010) by [@flacjacket](https://github.com/flacjacket) (cherry-picked) +- Refactor docker build system and workflows [esphome#2023](https://github.com/esphome/esphome/pull/2023) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- GH Actions CI use GHCR [esphome#2027](https://github.com/esphome/esphome/pull/2027) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Dashboard disable assets caching [esphome#2025](https://github.com/esphome/esphome/pull/2025) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Improve external components error messages [esphome#2026](https://github.com/esphome/esphome/pull/2026) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Number and Template Number updates [esphome#2036](https://github.com/esphome/esphome/pull/2036) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Add restore_value to template number [esphome#2041](https://github.com/esphome/esphome/pull/2041) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- midea_ac: Fix turbo boost mode. Preset PRESET_BOOST. [esphome#2029](https://github.com/esphome/esphome/pull/2029) by [@dudanov](https://github.com/dudanov) (cherry-picked) +- Bump dashboard to 20210719.0 [esphome#2043](https://github.com/esphome/esphome/pull/2043) by [@balloob](https://github.com/balloob) (cherry-picked) +- Correct ADS1115 handling of multiple sensors in continuous mode [esphome#2016](https://github.com/esphome/esphome/pull/2016) by [@flacjacket](https://github.com/flacjacket) (cherry-picked) +- ESP32 ADC use esp-idf [esphome#2024](https://github.com/esphome/esphome/pull/2024) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Fix white value transition for addressable lights [esphome#2045](https://github.com/esphome/esphome/pull/2045) by [@oxan](https://github.com/oxan) (cherry-picked) +- Adding last_reset_type to sensors that should support it. [esphome#2039](https://github.com/esphome/esphome/pull/2039) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) (new-feature) +- Remove superfluous polling on ADS1115 [esphome#2015](https://github.com/esphome/esphome/pull/2015) by [@flacjacket](https://github.com/flacjacket) (cherry-picked) + +### Notable Changes + +- Add Number entities (from Home Assistant) [esphome#1971](https://github.com/esphome/esphome/pull/1971) by [@jesserockz](https://github.com/jesserockz) (new-feature) (new-integration) (notable-change) +- Nextion upload and sensors [esphome#1464](https://github.com/esphome/esphome/pull/1464) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) (new-feature) (notable-change) + +### All changes + +- Update ambiguous command [esphome#1889](https://github.com/esphome/esphome/pull/1889) by [@jesserockz](https://github.com/jesserockz) +- Configure clang-format for consistent pointer alignment [esphome#1890](https://github.com/esphome/esphome/pull/1890) by [@OttoWinter](https://github.com/OttoWinter) +- Activate some clang-tidy checks [esphome#1884](https://github.com/esphome/esphome/pull/1884) by [@OttoWinter](https://github.com/OttoWinter) +- Avoid non-const globals and enable clang-tidy check [esphome#1892](https://github.com/esphome/esphome/pull/1892) by [@agners](https://github.com/agners) +- Convert st7735.cpp to use Unix line separators [esphome#1894](https://github.com/esphome/esphome/pull/1894) by [@oxan](https://github.com/oxan) +- Split files in light component [esphome#1893](https://github.com/esphome/esphome/pull/1893) by [@oxan](https://github.com/oxan) +- Fix CI by avoiding non-const global [esphome#1907](https://github.com/esphome/esphome/pull/1907) by [@oxan](https://github.com/oxan) +- Adds support cpp to vscode [esphome#1828](https://github.com/esphome/esphome/pull/1828) by [@dentra](https://github.com/dentra) +- Support ESP8266 Arduino 3.0.0 [esphome#1897](https://github.com/esphome/esphome/pull/1897) by [@agners](https://github.com/agners) +- Run script/setup in devcontainer instead of pip install [esphome#1913](https://github.com/esphome/esphome/pull/1913) by [@OttoWinter](https://github.com/OttoWinter) +- Fix typo in test3.yaml [esphome#1928](https://github.com/esphome/esphome/pull/1928) by [@loongyh](https://github.com/loongyh) +- Fix error print in script/helpers.py [esphome#1935](https://github.com/esphome/esphome/pull/1935) by [@agners](https://github.com/agners) +- Add variable bit width for Samsung protocol [esphome#1927](https://github.com/esphome/esphome/pull/1927) by [@kbx81](https://github.com/kbx81) +- Add data sizes to log message [esphome#1938](https://github.com/esphome/esphome/pull/1938) by [@jesserockz](https://github.com/jesserockz) +- Update generation script to add const [esphome#1945](https://github.com/esphome/esphome/pull/1945) by [@jesserockz](https://github.com/jesserockz) +- Bump dashboard to 20210621.0 [esphome#1946](https://github.com/esphome/esphome/pull/1946) by [@balloob](https://github.com/balloob) +- Improve DHT read timings [esphome#1901](https://github.com/esphome/esphome/pull/1901) by [@agners](https://github.com/agners) +- More VSCode devcontainer improvements [esphome#1934](https://github.com/esphome/esphome/pull/1934) by [@agners](https://github.com/agners) +- Validate color temperature values for RGBWW/CWWW lights [esphome#1957](https://github.com/esphome/esphome/pull/1957) by [@oxan](https://github.com/oxan) +- Fix on_multi_click min_length [esphome#1960](https://github.com/esphome/esphome/pull/1960) by [@jesserockz](https://github.com/jesserockz) +- Climate component for Ballu air conditioners with remote model YKR-K/002E [esphome#1939](https://github.com/esphome/esphome/pull/1939) by [@bazuchan](https://github.com/bazuchan) (new-integration) +- Simplify initializing glyph_data [esphome#1970](https://github.com/esphome/esphome/pull/1970) by [@gladhorn](https://github.com/gladhorn) +- Add device_class support for MQTT integration [esphome#1832](https://github.com/esphome/esphome/pull/1832) by [@definitio](https://github.com/definitio) +- Rename master branch to release [esphome#1976](https://github.com/esphome/esphome/pull/1976) by [@OttoWinter](https://github.com/OttoWinter) +- Fix tuya fan speed send [esphome#1978](https://github.com/esphome/esphome/pull/1978) by [@trvrnrth](https://github.com/trvrnrth) +- Time Based Cover: Fixed apparent race condition on ESP32 chips [esphome#1984](https://github.com/esphome/esphome/pull/1984) by [@pdoidge](https://github.com/pdoidge) +- Fix invalid escape sequences in regex (fix pytest warning) [esphome#1814](https://github.com/esphome/esphome/pull/1814) by [@oxan](https://github.com/oxan) +- Bump hypothesis from 5.21.0 to 5.49.0 [esphome#1753](https://github.com/esphome/esphome/pull/1753) by [@mweinelt](https://github.com/mweinelt) +- Bump pytest-mock from 3.5.1 to 3.6.1 [esphome#1754](https://github.com/esphome/esphome/pull/1754) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- hlw8012: fix constants for BL0937 [esphome#1973](https://github.com/esphome/esphome/pull/1973) by [@ianchi](https://github.com/ianchi) +- Anova ble component [esphome#1752](https://github.com/esphome/esphome/pull/1752) by [@buxtronix](https://github.com/buxtronix) (new-integration) +- Add stepper.set_acceleration and stepper.set_deceleration to stepper component [esphome#1977](https://github.com/esphome/esphome/pull/1977) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) +- remote_receiver use config parent receiver for registering dumpers [esphome#1980](https://github.com/esphome/esphome/pull/1980) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- Don't try compat parsing for "esphome version" [esphome#1966](https://github.com/esphome/esphome/pull/1966) by [@oxan](https://github.com/oxan) +- Change color model to fix white channel issues [esphome#1895](https://github.com/esphome/esphome/pull/1895) by [@oxan](https://github.com/oxan) (breaking-change) +- Allow WiFi AP to use device name [esphome#1990](https://github.com/esphome/esphome/pull/1990) by [@jesserockz](https://github.com/jesserockz) (new-feature) +- Support custom fan modes in mqtt_climate [esphome#1989](https://github.com/esphome/esphome/pull/1989) by [@mgorven](https://github.com/mgorven) +- Bump protobuf from 3.17.0 to 3.17.3 [esphome#1986](https://github.com/esphome/esphome/pull/1986) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-cov from 2.11.1 to 2.12.1 [esphome#1855](https://github.com/esphome/esphome/pull/1855) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Bump pytest-asyncio from 0.14.0 to 0.15.1 [esphome#1793](https://github.com/esphome/esphome/pull/1793) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Improve climate mode code docs [esphome#1995](https://github.com/esphome/esphome/pull/1995) by [@OttoWinter](https://github.com/OttoWinter) +- Climate modes COOL and HEAT are auto modes [esphome#1994](https://github.com/esphome/esphome/pull/1994) by [@carstenschroeder](https://github.com/carstenschroeder) +- Add state callback to ota component [esphome#1816](https://github.com/esphome/esphome/pull/1816) by [@mmakaay](https://github.com/mmakaay) +- Fix deprecation message for old climate swing mode methods [esphome#2003](https://github.com/esphome/esphome/pull/2003) by [@oxan](https://github.com/oxan) +- Add Number entities (from Home Assistant) [esphome#1971](https://github.com/esphome/esphome/pull/1971) by [@jesserockz](https://github.com/jesserockz) (new-feature) (new-integration) (notable-change) +- Fixed lolin32 lite key [esphome#2001](https://github.com/esphome/esphome/pull/2001) by [@monkeyclass](https://github.com/monkeyclass) +- Add support for IBS-TH1 External Sensor [esphome#1983](https://github.com/esphome/esphome/pull/1983) by [@MikkoTervala](https://github.com/MikkoTervala) +- Bang bang climate new mode meanings [esphome#1996](https://github.com/esphome/esphome/pull/1996) by [@OttoWinter](https://github.com/OttoWinter) +- Sgp30 sensor improvements [esphome#1510](https://github.com/esphome/esphome/pull/1510) by [@huubeikens](https://github.com/huubeikens) +- Color brightness fixes [esphome#2008](https://github.com/esphome/esphome/pull/2008) by [@oxan](https://github.com/oxan) +- Bump black from 21.5b1 to 21.6b0 [esphome#2011](https://github.com/esphome/esphome/pull/2011) by [@dependabot[bot]](https://github.com/dependabot[bot]) +- Added support for havells_solar sensor [esphome#1988](https://github.com/esphome/esphome/pull/1988) by [@sourabhjaiswal](https://github.com/sourabhjaiswal) (new-integration) +- Remove a whole bunch of deprecated/removed stuff [esphome#1981](https://github.com/esphome/esphome/pull/1981) by [@jesserockz](https://github.com/jesserockz) (breaking-change) +- catch 0.0 in float set_level pre-adjustment [esphome#2013](https://github.com/esphome/esphome/pull/2013) by [@WeekendWarrior1](https://github.com/WeekendWarrior1) (breaking-change) +- Introduce clamp as a template function [esphome#1953](https://github.com/esphome/esphome/pull/1953) by [@agners](https://github.com/agners) +- [Teleinfo] do not stop parsing frame if there is only a CRC error on … [esphome#1999](https://github.com/esphome/esphome/pull/1999) by [@St4n](https://github.com/St4n) +- Nextion upload and sensors [esphome#1464](https://github.com/esphome/esphome/pull/1464) by [@SenexCrenshaw](https://github.com/SenexCrenshaw) (cherry-picked) (new-feature) (notable-change) +- Fix ethernet component hostname handling [esphome#2010](https://github.com/esphome/esphome/pull/2010) by [@flacjacket](https://github.com/flacjacket) (cherry-picked) +- Refactor docker build system and workflows [esphome#2023](https://github.com/esphome/esphome/pull/2023) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- GH Actions CI use GHCR [esphome#2027](https://github.com/esphome/esphome/pull/2027) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Dashboard disable assets caching [esphome#2025](https://github.com/esphome/esphome/pull/2025) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Improve external components error messages [esphome#2026](https://github.com/esphome/esphome/pull/2026) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Number and Template Number updates [esphome#2036](https://github.com/esphome/esphome/pull/2036) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- Add restore_value to template number [esphome#2041](https://github.com/esphome/esphome/pull/2041) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) +- midea_ac: Fix turbo boost mode. Preset PRESET_BOOST. [esphome#2029](https://github.com/esphome/esphome/pull/2029) by [@dudanov](https://github.com/dudanov) (cherry-picked) +- Bump dashboard to 20210719.0 [esphome#2043](https://github.com/esphome/esphome/pull/2043) by [@balloob](https://github.com/balloob) (cherry-picked) +- Correct ADS1115 handling of multiple sensors in continuous mode [esphome#2016](https://github.com/esphome/esphome/pull/2016) by [@flacjacket](https://github.com/flacjacket) (cherry-picked) +- ESP32 ADC use esp-idf [esphome#2024](https://github.com/esphome/esphome/pull/2024) by [@OttoWinter](https://github.com/OttoWinter) (cherry-picked) +- Fix white value transition for addressable lights [esphome#2045](https://github.com/esphome/esphome/pull/2045) by [@oxan](https://github.com/oxan) (cherry-picked) +- Adding last_reset_type to sensors that should support it. [esphome#2039](https://github.com/esphome/esphome/pull/2039) by [@jesserockz](https://github.com/jesserockz) (cherry-picked) (new-feature) +- Remove superfluous polling on ADS1115 [esphome#2015](https://github.com/esphome/esphome/pull/2015) by [@flacjacket](https://github.com/flacjacket) (cherry-picked) + +{/* markdownlint-enable MD013 */} diff --git a/content/changelog/v1.7.0.md b/src/content/docs/changelog/v1.7.0.mdx similarity index 75% rename from content/changelog/v1.7.0.md rename to src/content/docs/changelog/v1.7.0.mdx index 136a52fc34..0a5af326a1 100644 --- a/content/changelog/v1.7.0.md +++ b/src/content/docs/changelog/v1.7.0.mdx @@ -1,11 +1,23 @@ --- description: "Changelog for esphomelib version 1.7.0." title: "Version 1.7.0" -params: - seo: - description: Changelog for esphomelib version 1.7.0. +pagefind: false +slug: "changelog/v1.7.0" --- +import ImgTable from "@components/ImgTable.astro"; + + + + Wow, what a week! As you may know, I wrote a blog post on the [Home Assistant web site](https://www.home-assistant.io/blog/2018/06/05/esphomelib/) and since then, the amount of esphomelib users has grown sixfold according to the number of GitHub clones! @@ -18,36 +30,26 @@ lights into Home Assistant. In the next couple of weeks I unfortunately won't be able to "innovate" as quickly as in the previous weeks, as I will be travelling a lot (and enjoying my vacation 😎), so don't expect too many awesome features 😸 -{{< imgtable >}} -"ESP32 BLE Beacon","components/esp32_ble_beacon","bluetooth.svg","dark-invert" -"Status LED","components/status_led","led-on.svg","dark-invert" -"WiFi Signal Strength","components/sensor/wifi_signal","network-wifi.svg","dark-invert" -"Duty Cycle Sensor","components/sensor/duty_cycle","percent.svg","dark-invert" -"Pulse Counter for ESP8266","components/sensor/pulse_counter","pulse.svg","dark-invert" -"Remote Transmitter","components/remote_transmitter","remote.svg","dark-invert" -"Remote Receiver","components/remote_receiver","remote.svg","dark-invert" -{{< /imgtable >}} - ## New Components -- New {{< docref "/components/sensor/wifi_signal" "WiFi signal strength sensor" >}} by +- New [WiFi signal strength sensor](/components/sensor/wifi_signal/) by [@brandond](https://github.com/brandond). So now you can monitor how strong the WiFi signal is for your node 📶 - You can now create a BLE iBeacon with your ESP32s using the new - {{< docref "/components/esp32_ble_beacon" "BLE Beacon component" >}}. + [BLE Beacon component](/components/esp32_ble_beacon/). -- esphomelib has finally gained support for a {{< docref "/components/status_led" "status LED" >}}. Now +- esphomelib has finally gained support for a [status LED](/components/status_led/). Now you can quickly identify if everything is OK with your ESP with a quick look at this LED. Happy blinking! -- The {{< docref "/components/sensor/pulse_counter" "pulse counter sensor" >}} has been back-ported to the +- The [pulse counter sensor](/components/sensor/pulse_counter/) has been back-ported to the ESP8266, so now you can observe the number of pulses and frequency on any pin 🔢 -- A new {{< docref "/components/sensor/duty_cycle" "duty cycle sensor" >}} has been added, allowing you to +- A new [duty cycle sensor](/components/sensor/duty_cycle/) has been added, allowing you to measure how much of the time a specific pin is HIGH or LOW. Can for example be used to detect if a status LED on an external device is blinking or permanently on. -- The new {{< docref "/components/remote_receiver" "remote receiver" >}} and - {{< docref "/components/remote_transmitter" "remote transmitter" >}} components now allows you to use any 433MHz +- The new [remote receiver](/components/remote_receiver/) and + [remote transmitter](/components/remote_transmitter/) components now allows you to use any 433MHz receivers and senders with ESPHome. Currently, you will need to use the `raw` data as described in this guide, but in the future more protocols will be supported out of the box. @@ -58,7 +60,7 @@ be travelling a lot (and enjoying my vacation 😎), so don't expect too many aw been rewritten to allow for automations to be executed asynchronously, while the device is still connecting to WiFi. - The Hass.io add-on now has a new `password` option with which you can secure your installation. See - {{< docref "/guides/getting_started_hassio" >}}. 🔒 + [Getting Started Hassio](/guides/getting_started_hassio/). 🔒 - Binary Sensors now have filters too. They can now be used to debounce any binary sensor and do some more complicated actions using lambdas. See [Binary Sensor Filters](/components/binary_sensor#binary_sensor-filters). ⛹️‍ @@ -66,7 +68,7 @@ be travelling a lot (and enjoying my vacation 😎), so don't expect too many aw - All components can now be flagged `internal`. Doing so will prevent them from being represented in the front-end (like MQTT). Useful for [on-device automations](/automations). See 😎 -- The {{< docref "/components/deep_sleep" >}} now has a `wakeup_pin_mode` option for the ESP32. This option +- The [Deep Sleep](/components/deep_sleep/) now has a `wakeup_pin_mode` option for the ESP32. This option can be used to tell esphomelib what to do if the wakeup pin is already in the wakeup level when attempting to enter deep sleep. 🛌 @@ -75,14 +77,14 @@ be travelling a lot (and enjoying my vacation 😎), so don't expect too many aw on boot and shutdown of the node. - All Hass.io add-on builds have now been more or less completely automated using a private Gitlab server. You - can find all the new docker files at . + can find all the new docker files at [https://github.com/OttoWinter/esphomeyaml/tree/master/docker](https://github.com/OttoWinter/esphomeyaml/tree/master/docker). - Added a new `build_path` option in the `esphomeyaml` section with which you can customize where - esphomeyaml stores the platformio project files. See {{< docref "/components/esphome" >}}. + esphomeyaml stores the platformio project files. See [Esphome](/components/esphome/). ## Breaking Changes -- Fixed the {{< docref "/components/sensor/sht3xd" "SHT3x-D" >}} component and removed the `accuracy` +- Fixed the [SHT3x-D](/components/sensor/sht3xd/) component and removed the `accuracy` parameter. The accuracy now defaults to `HIGH`. - The `inverted` option of binary sensors has been moved into the `filters:` section. So instead of @@ -105,17 +107,17 @@ be travelling a lot (and enjoying my vacation 😎), so don't expect too many aw ``` - The `esp32_ble` component and platform have been renamed to - {{< docref "/components/esp32_ble_tracker" "esp32_ble_tracker" >}} in order to make the naming clearer - with the new {{< docref "/components/esp32_ble_beacon" "esp32_ble_beacon" >}} component. + [esp32_ble_tracker](/components/esp32_ble_tracker/) in order to make the naming clearer + with the new [esp32_ble_beacon](/components/esp32_ble_beacon/) component. -- The `receive_timeout` option has been removed from the {{< docref "/components/i2c" "i2c component" >}} as it +- The `receive_timeout` option has been removed from the [i2c component](/components/i2c/) as it turns out it didn't actually do anything. - The `ir_transmitter` component has been renamed to - {{< docref "/components/remote_transmitter" "remote_transmitter" >}} as it now works with all kinds of protocols, + [remote_transmitter](/components/remote_transmitter/) as it now works with all kinds of protocols, not just infrared-based ones. -- The `pull_mode` option of the {{< docref "/components/sensor/pulse_counter" "Pulse Counter" >}} has been removed, +- The `pull_mode` option of the [Pulse Counter](/components/sensor/pulse_counter/) has been removed, please use the [Pin Schema](/guides/configuration-types#pin-schema) now instead. Additionally, the `internal_filter` option now only accepts [time](/guides/configuration-types#time) units. @@ -149,6 +151,6 @@ be travelling a lot (and enjoying my vacation 😎), so don't expect too many aw And last but not least, check out this awesome video by [The Hook Up](https://www.youtube.com/channel/UC2gyzKcHbYfqoXA5xbyGXtQ) for using esphomeyaml to create a simple wireless doorbell: - +{/* markdownlint-disable-next-line MD033 */} diff --git a/src/content/docs/changelog/v1.8.0.mdx b/src/content/docs/changelog/v1.8.0.mdx new file mode 100644 index 0000000000..f37917de54 --- /dev/null +++ b/src/content/docs/changelog/v1.8.0.mdx @@ -0,0 +1,243 @@ +--- +description: "Changelog for esphomelib version 1.8.0." +title: "Version 1.8.0" +pagefind: false +slug: "changelog/v1.8.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +Hi everyone, + +Today I have a new version of esphomelib with lots of new features and tons of time put in to present to you and +I hope you're as excited as I am to try these new things out :) + +This release mainly focuses on these new features: + +- Lots of Bug Fixes - Now that most of the hardware has arrived from china, I was able to fix a bunch + of bugs with a lot of integrations. + +- [Displays!](/components/display/) +- NFC/RFID Readers ([PN532](/components/binary_sensor/pn532/) and [RDM6300](/components/binary_sensor/rdm6300/)) +- New [ESP32 BLE integrations](/components/esp32_ble_tracker/) like [Xiaomi HHCCJCY01](/components/sensor/xiaomi_hhccjcy01/) +- Core Changes like the addition of the [SPI bus](/components/spi) and [UART bus](/components/uart) +- Lots of new [light effects](/components/light#light-effects) and support for cold-white/warm-white lights. +- A LOGO FOR THIS PROJECT!!! Thanks a lot to [@messimore](https://github.com/messismore) for + this visual masterpiece. + +And if you find esphomelib great and have some of your projects using it, please do spread the word online +(like [Christoph Dahlen did](https://www.dahlen.org/2018/08/esp8266-via-esphomelib-mit-home-assistant-verbinden/)) +and/or create [cookbook](/components#cookbook) entries so that others can learn from your work. Of course the main objective +of this website is to document esphomelib's features, but my vision is that it also inspires others to start +awesome projects ☀️ + +Special thanks to all the contributors for this release: + +- esphomeyaml: Add `only-generate` parameter to generate command to only generate the C++ code + [OttoWinter/esphomeyaml#84](https://github.com/OttoWinter/esphomeyaml/pull/84) by [@apeeters](https://github.com/apeeters) + +- esphomeyaml: Fix esphomeyaml logs for tls enabled mqtt brokers + [OttoWinter/esphomeyaml#118](https://github.com/OttoWinter/esphomeyaml/pull/118) by [@johnerikhalse](https://github.com/johnerikhalse) + +- esphomelib: Add Samsung IR codes [OttoWinter/esphomelib#141](https://github.com/OttoWinter/esphomelib/pull/141) + by [@escoand](https://github.com/escoand) + +- esphomelib: Add support for SNTP and RTC [OttoWinter/esphomelib#76](https://github.com/OttoWinter/esphomelib/pull/76) + by [@brandond](https://github.com/brandond) + +- esphomelib: Run travis jobs in parallel [OttoWinter/esphomelib#123](https://github.com/OttoWinter/esphomelib/pull/123) + by [@lobradov](https://github.com/lobradov) + +- esphomelib: Fix typo in dallas error message [OttoWinter/esphomelib#125](https://github.com/OttoWinter/esphomelib/pull/125) + by [@janpieper](https://github.com/janpieper) + +- esphomelib: Fix esphomelib examples [OttoWinter/esphomelib#124](https://github.com/OttoWinter/esphomelib/pull/124) + by [@lobradov](https://github.com/lobradov) + +- esphomelib: Fix panic in binary_sensor template [OttoWinter/esphomelib#111](https://github.com/OttoWinter/esphomelib/pull/111) + by [@nunofgs](https://github.com/nunofgs) + +- esphomelib: Add ESP8266 library dependency to Arduino IDE instructions [OttoWinter/esphomelib#99](https://github.com/OttoWinter/esphomelib/pull/99) + by [@per1234](https://github.com/per1234) + +- esphomelib: Fixing I2C readings [OttoWinter/esphomelib#98](https://github.com/OttoWinter/esphomelib/pull/98) + by [@exxamalte](https://github.com/exxamalte) + +- esphomedocs: Note added about resetting the ESP after serial upload before OTA upload + [OttoWinter/esphomedocs#14](https://github.com/OttoWinter/esphomedocs/pull/14) by [@exxamalte](https://github.com/exxamalte) + +- esphomedocs: Add cookbook for dual relay cover [OttoWinter/esphomedocs#10](https://github.com/OttoWinter/esphomedocs/pull/10) + by [@aequitas](https://github.com/aequitas) + +And in some more personal news, you might have noticed that I was not very active in online communications (github, discord, ...) +and that's partly been due to me concentrating on other stuff (university applications, work and +[this year's international olympiad of informatics](http://blog.ocg.at/2018/09/dritter-blog-von-der-ioi-in-tsukuba-japan/)). +But admittedly I must say being constantly active online is just very exhausting. As the next few weeks (or even months) +will leave me with little time to due to the start of my studies, I plan on primarily focusing on GitHub communications. +Plus I want to put an extra focus on reviewing PRs so that code submitters don't have to wait for weeks. + +## Other notable changes + +- Fixed certain occasions where esphomeyaml could run into recursive dependencies +- Fixed i2c scans not showing up via MQTT +- Improved build times by about 60%. Now, the build time should depend on the amount of components you're using, + not the total esphomelib code base size. + +- Fixed ESP32 Touch setup mode +- Fixed template binary sensors +- Added the option to specify `never` for `update_interval` to never +- Added `deep_sleep.prevent` and `deep_sleep.enter` actions +- Fixed ESP32BLETracker surpassing the maximum code size +- Fixed ESP32BLETracker/Beacon throwing an exception when a warning occurs. +- Fixed FastLED effects not taking into account the light brightness +- Fixed compatibility with Arduino core versions below 2.0.4 +- Added `output.turn_on`, `output.turn_off` and `output.set_level` actions. +- Fixed the remote transmitter/receiver using the heap inefficiently on the ESP8266 (was causing reboots) +- Fixed reliability with reading data from BME280s +- Fixed gas resistance readings from BME680s +- Fixed HTU21D readings only working in very verbose mode +- Sometimes the ESP would create a WiFi hotspot even though it was not configured to do so. That should be fixed now. +- You can now also have conditional actions. See [`if` Action](/automations/actions#if_action). +- The esphomeyaml dashboard and Hass.io add-on now can be configured with a password. +- Fixed YAML anchors not working (you can now prefix keys with `.` to make esphomeyaml ignore them) +- Made Dallas and DHT temperature sensor a bit more reliable by making the code a bit more efficient and thus resolving some timing issues. +- A `heartbeat` filter has been added to [binary sensors](/components/binary_sensor#binary_sensor-filters). +- The [`on_loop`](/components/esphome#esphome-on_loop) trigger has been added. +- esphomeyaml now know about more ESP8266/ESP32 boards, so now you can use the board-specific pin + names with even more board types. + +- The mqtt client has a new option `shutdown_message` which will be sent when the board shuts down safely. + +- In actions, instead of + +```yaml + on_...: + then: + - switch.turn_on: + id: my_switch +``` + + You can now write: + +```yaml + on_...: + then: + - switch.turn_on: my_switch +``` + + Or even shorter: + +```yaml + on_...: + - switch.turn_on: my_switch +``` + +## Breaking Changes + +- The [core configuration](/components/esphome/) has been reworked a bit to a) + make using different arduino framework version easier and b) make editing your local esphomelib + copy easier. + +- Light Effects now need to be manually declared in the config and will no longer show up automatically. Please see [Light Effects](/components/light#light-effects) +- MAX6675 has been migrated to use the new SPI bus (and fixed!). Please see the docs for how to use it now. + +## Changes in 1.8.1 + +- esphomeyaml: Limit upload speed to 115200 [OttoWinter/esphomeyaml#122](https://github.com/OttoWinter/esphomeyaml/pull/122) +- esphomeyaml: Fix docker installs using old platformio version [OttoWinter/esphomeyaml#125](https://github.com/OttoWinter/esphomeyaml/pull/125) +- esphomedocs: Waveshare E-Paper: 1.54in display works [OttoWinter/esphomedocs#22](https://github.com/OttoWinter/esphomedocs/pull/22) by [@fabaff](https://github.com/fabaff) + +## Changes in 1.8.2 + +- esphomedocs: Update custom sensor docs [OttoWinter/esphomedocs#25](https://github.com/OttoWinter/esphomedocs/pull/25) +- esphomedocs: Fix typo in warning message [OttoWinter/esphomedocs#18](https://github.com/OttoWinter/esphomedocs/pull/18) by [@janpieper](https://github.com/janpieper) +- esphomedocs: Add alternative SPI pin names [OttoWinter/esphomedocs#24](https://github.com/OttoWinter/esphomedocs/pull/24) +- esphomelib: Add toggle payload to MQTT switch component [OttoWinter/esphomelib#152](https://github.com/OttoWinter/esphomelib/pull/152) +- esphomelib: Update custom sensor example [OttoWinter/esphomelib#154](https://github.com/OttoWinter/esphomelib/pull/154) +- esphomelib: Optimize MQTT client memory consumption a bit [OttoWinter/esphomelib#155](https://github.com/OttoWinter/esphomelib/pull/155) +- esphomelib: Fix binary sensor initial value reporting [OttoWinter/esphomelib#156](https://github.com/OttoWinter/esphomelib/pull/156) +- esphomeyaml: Fix binary sensor heartbeat not working [OttoWinter/esphomeyaml#130](https://github.com/OttoWinter/esphomeyaml/pull/130) +- esphomeyaml: Fix MQTT discovery enabled when discovery_retain in config [OttoWinter/esphomeyaml#131](https://github.com/OttoWinter/esphomeyaml/pull/131) +- esphomelib: Fix binary sensor heartbeat filter [OttoWinter/esphomelib#157](https://github.com/OttoWinter/esphomelib/pull/157) +- esphomelib: Fix SSD1306 reset order for i2c [OttoWinter/esphomelib#159](https://github.com/OttoWinter/esphomelib/pull/159) +- esphomeyaml: Fix SSD1306 lambda [OttoWinter/esphomeyaml#132](https://github.com/OttoWinter/esphomeyaml/pull/132) +- esphomeyaml: Enable Travis Tests [OttoWinter/esphomeyaml#133](https://github.com/OttoWinter/esphomeyaml/pull/133) +- esphomedocs: Fix typo in display docs [OttoWinter/esphomedocs#26](https://github.com/OttoWinter/esphomedocs/pull/26) by [@jblb](https://github.com/jblb) +- esphomeyaml: Auto-Update esphomelib dev version [OttoWinter/esphomeyaml#134](https://github.com/OttoWinter/esphomeyaml/pull/134) +- esphomeyaml: Add SSD1306 64x48 display [OttoWinter/esphomeyaml#136](https://github.com/OttoWinter/esphomeyaml/pull/136) +- esphomedocs: Typo in display docs [OttoWinter/esphomedocs#28](https://github.com/OttoWinter/esphomedocs/pull/28) by [@yuanl](https://github.com/yuanl) +- esphomedocs: Typo fix. [OttoWinter/esphomedocs#33](https://github.com/OttoWinter/esphomedocs/pull/33) by [@corbanmailloux](https://github.com/corbanmailloux) +- esphomelib: Fix typo "noting" [OttoWinter/esphomelib#172](https://github.com/OttoWinter/esphomelib/pull/172) by [@TheJulianJES](https://github.com/TheJulianJES) +- esphomedocs: Added docker local USB port mapping [OttoWinter/esphomedocs#31](https://github.com/OttoWinter/esphomedocs/pull/31) + by [@ladefoged81](https://github.com/ladefoged81) + +- esphomedocs: Fixed typo [OttoWinter/esphomedocs#30](https://github.com/OttoWinter/esphomedocs/pull/30) + by [@ladefoged81](https://github.com/ladefoged81) + +- esphomedocs: Add missing (required) name to example. [OttoWinter/esphomedocs#29](https://github.com/OttoWinter/esphomedocs/pull/29) + by [@corbanmailloux](https://github.com/corbanmailloux) + +- esphomedocs: Add ESP32 BLE workaround docs [OttoWinter/esphomedocs#34](https://github.com/OttoWinter/esphomedocs/pull/34) +- esphomelib: Apply effect after changing colors [OttoWinter/esphomelib#169](https://github.com/OttoWinter/esphomelib/pull/169) + by [@TheJulianJES](https://github.com/TheJulianJES) + +- esphomelib: Add 64x48 SSD1306 Display [OttoWinter/esphomelib#161](https://github.com/OttoWinter/esphomelib/pull/161) +- esphomedocs: Fix output link [OttoWinter/esphomedocs#35](https://github.com/OttoWinter/esphomedocs/pull/35) +- esphomedocs: Fix pulse counter API typo [OttoWinter/esphomedocs#36](https://github.com/OttoWinter/esphomedocs/pull/36) +- esphomedocs: Fix display docs format typo [OttoWinter/esphomedocs#37](https://github.com/OttoWinter/esphomedocs/pull/37) +- esphomeyaml: Fix serial monitor opening when logger disabled [OttoWinter/esphomeyaml#138](https://github.com/OttoWinter/esphomeyaml/pull/138) +- esphomeyaml: Add clean MQTT button to dashboard [OttoWinter/esphomeyaml#139](https://github.com/OttoWinter/esphomeyaml/pull/139) +- esphomeyaml: Fix using unicode in lambdas [OttoWinter/esphomeyaml#141](https://github.com/OttoWinter/esphomeyaml/pull/141) +- esphomeyaml: Bump platformio-espressif32 to 1.4.0 [OttoWinter/esphomeyaml#142](https://github.com/OttoWinter/esphomeyaml/pull/142) +- esphomeyaml: Docker default to starting dashboard [OttoWinter/esphomeyaml#143](https://github.com/OttoWinter/esphomeyaml/pull/143) +- esphomedocs: Improve WiFi&Manual IP docs [OttoWinter/esphomedocs#38](https://github.com/OttoWinter/esphomedocs/pull/38) +- esphomedocs: Fix PN532 update_interval typo [OttoWinter/esphomedocs#39](https://github.com/OttoWinter/esphomedocs/pull/39) +- esphomedocs: Fix Sonoff S20/4CH example configurations [OttoWinter/esphomedocs#40](https://github.com/OttoWinter/esphomedocs/pull/40) +- esphomelib: Split FastLED header from source [OttoWinter/esphomelib#175](https://github.com/OttoWinter/esphomelib/pull/175) +- esphomelib: Fix WiFi AP-only mode [OttoWinter/esphomelib#177](https://github.com/OttoWinter/esphomelib/pull/177) +- esphomelib: Fix RC Switch Transmitters [OttoWinter/esphomelib#178](https://github.com/OttoWinter/esphomelib/pull/178) +- esphomelib: Use dynamic JSON buffer [OttoWinter/esphomelib#179](https://github.com/OttoWinter/esphomelib/pull/179) +- esphomelib: Web Server Print incoming requests [OttoWinter/esphomelib#180](https://github.com/OttoWinter/esphomelib/pull/180) +- esphomelib: Add option to have different log level over MQTT [OttoWinter/esphomelib#176](https://github.com/OttoWinter/esphomelib/pull/176) +- esphomelib: Fix MQTT login with anonymous credentials [OttoWinter/esphomelib#182](https://github.com/OttoWinter/esphomelib/pull/182) +- esphomelib: WiFi: Add power save mode option [OttoWinter/esphomelib#181](https://github.com/OttoWinter/esphomelib/pull/181) +- esphomeyaml: Fix component loader value error [OttoWinter/esphomeyaml#149](https://github.com/OttoWinter/esphomeyaml/pull/149) +- esphomelib: Fix VectorJsonBuffer for ESP8266 (unaligned address) [OttoWinter/esphomelib#183](https://github.com/OttoWinter/esphomelib/pull/183) +- esphomedocs: WiFi: Add power save mode option [OttoWinter/esphomedocs#41](https://github.com/OttoWinter/esphomedocs/pull/41) +- esphomedocs: Add SSD1306 64x48 Display [OttoWinter/esphomedocs#27](https://github.com/OttoWinter/esphomedocs/pull/27) +- esphomeyaml: WiFi: Add power save mode option [OttoWinter/esphomeyaml#150](https://github.com/OttoWinter/esphomeyaml/pull/150) + +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/changelog/v1.9.0.mdx b/src/content/docs/changelog/v1.9.0.mdx new file mode 100644 index 0000000000..648f3b8fb4 --- /dev/null +++ b/src/content/docs/changelog/v1.9.0.mdx @@ -0,0 +1,325 @@ +--- +description: "Changelog for esphomelib version 1.9.0." +title: "Changelog - Version 1.9.0" +pagefind: false +slug: "changelog/v1.9.0" +--- + +import ImgTable from "@components/ImgTable.astro"; + + + + +{/* markdownlint-disable MD013 */} + +It's time for another release of esphomelib: 1.9.0. This release is quite different from the last one, +it doesn't focus that much on new integrations with a "modest" amount of 7 new integrations. No, most of the +development has been focused on improving the core architecture and making the esphomelib ecosystem easier to use. +Because that's my main goal of this project: Providing a great user-experience so that you can focus on building +awesome things with DIY hardware! + +The features I'm particularly excited about are: + +* `esphomeflasher` - Experiencing problems flashing esphomelib firmwares using esphomeyaml? + No problem, esphomeflasher is a tool designed to make that super easy. Just let esphomeyaml generate the binary and flash + from your PC. + +* [Over-the-Air Updates](/components/ota/) have been completely re-written to make them a lot more stable. +* A lot of work has been put in to provide more context in YAML validation errors. Sometimes, esphomeyaml will even + try to give you suggestions for how to fix a validation error! + +* A new release cycle: esphomeyaml now also has a [beta release channel](/guides/faq#faq-beta) kind of like Home Assistant. This helps to + iron out the most important bugs before each stable release + +* And of course, lots of stability improvements and bug fixes :) + +Thank you very much to everybody who contributed to this release with new code or by +[reporting bugs](/guides/faq#faq-bug_report)! + +## New Components + +* There's a new base component called [text sensors](/components/text_sensor/) for using + text-based inputs, not just numbers like the generic [sensors](/components/sensor/) did + ([esphome#166](https://github.com/esphome/esphome/pull/166), [esphome-docs#52](https://github.com/esphome/esphome-docs/pull/52)) + +* The new MQTT Subscribe Sensors allow you to get external data into esphomelib's ecosystem via MQTT + ([esphome-core#193](https://github.com/esphome/esphome-core/pull/193), [esphome#175](https://github.com/esphome/esphome/pull/175), [esphome-docs#50](https://github.com/esphome/esphome-docs/pull/50)) + +* Added [CSE7766 Power Sensor](/components/sensor/cse7766/) to support power measurements + on the Sonoff Pow R2 ([esphome-core#277](https://github.com/esphome/esphome-core/pull/277), [esphome#190](https://github.com/esphome/esphome/pull/190), [esphome-docs#59](https://github.com/esphome/esphome-docs/pull/59)) + +* Thanks to [@puuu](https://github.com/puuu), the LED driver in the Sonoff B1 (MY9231) is now supported! + ([esphome-core#266](https://github.com/esphome/esphome-core/pull/266), [esphome#227](https://github.com/esphome/esphome/pull/227), [esphome-docs#80](https://github.com/esphome/esphome-docs/pull/80)) + +* Added the [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) + ([esphome-core#229](https://github.com/esphome/esphome-core/pull/229), [esphome#192](https://github.com/esphome/esphome/pull/192), [esphome-docs#58](https://github.com/esphome/esphome-docs/pull/58)) + +* Added support for [A4988 Stepper Motors](/components/stepper/) ([esphome-core#239](https://github.com/esphome/esphome-core/pull/239), + [esphome#206](https://github.com/esphome/esphome/pull/206), [esphome-docs#68](https://github.com/esphome/esphome-docs/pull/68)) + +* Added [total daily energy sensor](/components/sensor/total_daily_energy/) to accumulate the total + power usage over one day ([esphome-core#256](https://github.com/esphome/esphome-core/pull/256), [esphome#220](https://github.com/esphome/esphome/pull/220)) + +## New Features + +* Compiling for ESP32s is now possible on RPis 🎉 + +* esphomelib now has a new tool: [esphomeflasher](https://github.com/esphome/esphome-flasher) to simplify + flashing on Windows/MacOS machines **without having to install esphomeyaml**. So if esphomeyaml for some reason + can't find your USB port, you now can use the esphomeflasher app. See `esphomeflasher`. + +* ESP8266s now save the states of lights/switches/... internally and restores them on boot. + Additionally, esphomelib can now operate in fully offline mode if your WiFi network goes down + or the MQTT broker is unreachable, see [Do Automations Work Without a Network Connection](/automations/actions#automation-networkless) + ([esphome-core#258](https://github.com/esphome/esphome-core/pull/258), [esphome-core#267](https://github.com/esphome/esphome-core/pull/267), [esphome#229](https://github.com/esphome/esphome/pull/229)) + +* The [Over-the-Air Update](/components/ota/) process was quite buggy sometimes and the Arduino-library + esphomelib used was doing some weird stuff. The OTA-process has now been completely re-written to be more stable + ([esphome-core#204](https://github.com/esphome/esphome-core/pull/204), [esphome#177](https://github.com/esphome/esphome/pull/177)). + +* Add support for the Home Assistant device registry. If you're using [Home Assistant 0.81.0](https://www.home-assistant.io/blog/2018/10/26/release-81/) + or higher you will see a list of all components for each esphomelib node in the integrations screen + ([esphome-core#233](https://github.com/esphome/esphome-core/pull/233)). + +* The current esphomelib version and compilation time are now printed on each boot + ([esphome-core#189](https://github.com/esphome/esphome-core/pull/189), [esphome#159](https://github.com/esphome/esphome/pull/159)): + +```text + [13:57:33][I][application:092]: You're running esphomelib v1.9.0 compiled on Nov 3 2018, 13:55:11 +``` + +* Stack traces in the USB logs are now automatically decoded to make debugging easier + ([esphome#214](https://github.com/esphome/esphome/pull/214)) + +* Added [`on_json_message` Trigger](/components/mqtt#mqtt-on_json_message) and [`mqtt.publish_json` Action](/components/mqtt#mqtt-publish_json_action) to make using JSON for MQTT payloads easier + ([esphome-core#230](https://github.com/esphome/esphome-core/pull/230), [esphome#193](https://github.com/esphome/esphome/pull/193), [esphome-docs#60](https://github.com/esphome/esphome-docs/pull/60)) + +* The remote (IR) components have received support for Samsung's IR protocol + ([esphome#176](https://github.com/esphome/esphome/pull/176), [esphome-docs#48](https://github.com/esphome/esphome-docs/pull/48)) + +* Added [`component.update` Action](/automations/actions#component-update_action), [`logger.log` Action](/components/logger#logger-log_action) and [`script.execute` Action](/components/script#script-execute_action) for simplifying + automations + ([esphome-core#232](https://github.com/esphome/esphome-core/pull/232), [esphome#196](https://github.com/esphome/esphome/pull/196), [esphome#198](https://github.com/esphome/esphome/pull/198), [esphome-docs#61](https://github.com/esphome/esphome-docs/pull/61), [esphome-docs#63](https://github.com/esphome/esphome-docs/pull/63)) + +* Added [`on_multi_click`](/components/binary_sensor#binary_sensor-on_multi_click) trigger to distinguish between double, long, and single clicks. + ([esphome-core#262](https://github.com/esphome/esphome-core/pull/262), [esphome-docs#77](https://github.com/esphome/esphome-docs/pull/77), [esphome#226](https://github.com/esphome/esphome/pull/226)) + +* Added an [pn532-on_tag](/components/binary_sensor/pn532#pn532-on_tag) to [PN532 NFC Readers](/components/binary_sensor/pn532/) so that automations + can directly use the NFC tag ID + ([esphome-core#194](https://github.com/esphome/esphome-core/pull/194), [esphome#189](https://github.com/esphome/esphome/pull/189), [esphome-docs#57](https://github.com/esphome/esphome-docs/pull/57)) + +* Added a `hass-config` command which generates a Home Assistant configuration for your esphomeyaml nodes. + Useful if you're not using MQTT discovery ([esphome#208](https://github.com/esphome/esphome/pull/208)) + +* All documentation pages now have comment systems powered by [disqus](https://disqus.com/) + ([esphome-docs#47](https://github.com/esphome/esphome-docs/pull/47)) + +* You now have to option to have a different log level for log messages sent over MQTT ([docs](/components/mqtt#mqtt-message), + [esphome#167](https://github.com/esphome/esphome/pull/167), [esphome-docs#51](https://github.com/esphome/esphome-docs/pull/51)) + +* Added a color correction option to [FastLED addressable lights](/components/light/fastled/) + ([esphome-core#234](https://github.com/esphome/esphome-core/pull/234), [esphome#200](https://github.com/esphome/esphome/pull/200), [esphome-docs#64](https://github.com/esphome/esphome-docs/pull/64)) + +* Added a `clean` command to esphomeyaml to fix some occasional build errors + ([esphome#181](https://github.com/esphome/esphome/pull/181)) + +* Added a `send_first_at` option to sliding window moving average sensor filters + ([esphome-core#240](https://github.com/esphome/esphome-core/pull/240), [esphome#207](https://github.com/esphome/esphome/pull/207), [esphome-docs#69](https://github.com/esphome/esphome-docs/pull/69)) + +* You can now upload OTA firmware files with the [web server component](/components/web_server/) + +* Added the ability to define global variables in esphomeyaml: [Globals](/components/globals/). + +* Added a `frequency` option to the [Esp8266 Pwm](/components/output/esp8266_pwm/). + +## Breaking Changes + +* As part of the rewrite of Over-The-Air updates, the old OTA protocol is incompatible with the new one - + But fear not, esphomeyaml still supports the legacy OTA update process. On your first OTA upload with 1.9.0, you will + see esphomeyaml try with the new OTA method and fail. After that, esphomeyaml will fall back to the old OTA + process and upload correctly ([esphome-core#204](https://github.com/esphome/esphome-core/pull/204)). + +* esphomelib's naming convention has been made more consistent. If you're not using any [lambdas](/automations/templates#config-lambda), + everything will still work. However, if you're using the C++ API, there are a couple of breaking changes: + + For sensors and binary sensors, `id(my_sensor).value` has been deprecated and `id(my_sensor).state` should be used + instead. Additionally, the syntax for toggling lights and switches through C++ has been changed. Please see + the [esphome-docs#62](https://github.com/esphome/esphome-docs/pull/62) changeset for more information + ([esphome-core#231](https://github.com/esphome/esphome-core/pull/231), [esphome-docs#62](https://github.com/esphome/esphome-docs/pull/62), [esphome#197](https://github.com/esphome/esphome/pull/197)) + +## Release 1.9.1 - November 19 + +* lib: Fix RDM6300 not reporting cards [esphome-core#278](https://github.com/esphome/esphome-core/pull/278) +* lib: Fix SNTP with less than 3 servers [esphome-core#279](https://github.com/esphome/esphome-core/pull/279) +* lib: Fix update interval log missing time unit [esphome-core#280](https://github.com/esphome/esphome-core/pull/280) +* lib: Fix CSE7766 spamming logs [esphome-core#281](https://github.com/esphome/esphome-core/pull/281) +* lib: Fix outdated links [esphome-core#282](https://github.com/esphome/esphome-core/pull/282) +* yaml: Fix SNTP servers option [esphome#237](https://github.com/esphome/esphome/pull/237) + +## Release 1.9.2 - November 25 + +* lib: Fix crashing when logger not being used [esphome-core#285](https://github.com/esphome/esphome-core/pull/285) +* lib: Fix template cover spamming logs [esphome-core#287](https://github.com/esphome/esphome-core/pull/287) +* lib: Improve ESP32 BLE tracker stability [esphome-core#289](https://github.com/esphome/esphome-core/pull/289) +* lib: Fix sensor filters using C++ undefined behavior [esphome-core#293](https://github.com/esphome/esphome-core/pull/293) + +## Release 1.9.3 - December 1 + +* docs: Fix Sonoff Basic pinouts [esphome-docs#88](https://github.com/esphome/esphome-docs/pull/88) by [@sherbang](https://github.com/sherbang) +* docs: Update cwww.rst [esphome-docs#85](https://github.com/esphome/esphome-docs/pull/85) by [@Melkor82](https://github.com/Melkor82) +* lib: Fix PMSX003 [esphome-core#300](https://github.com/esphome/esphome-core/pull/300) +* lib: Fix issue with filters introduced in 1.9.2 [esphome-core#296](https://github.com/esphome/esphome-core/pull/296) +* lib: Fix BMP085 pressure value [esphome-core#292](https://github.com/esphome/esphome-core/pull/292) +* yaml: CSE7766 update interval [esphome#250](https://github.com/esphome/esphome/pull/250) +* docs: CSE7766 Update Interval [esphome-docs#91](https://github.com/esphome/esphome-docs/pull/91) + +## All changes + +* docs: Clarify ESP32 BLE Tracker comment [esphome-docs#42](https://github.com/esphome/esphome-docs/pull/42) +* yaml: Add a link to Home Assistant in README [esphome#152](https://github.com/esphome/esphome/pull/152) by [@jonnyair](https://github.com/jonnyair) +* lib: Add a link to Home Assistant in README.md [esphome-core#184](https://github.com/esphome/esphome-core/pull/184) by [@jonnyair](https://github.com/jonnyair) +* docs: Fix time docs 12-hour clock strftime format [esphome-docs#43](https://github.com/esphome/esphome-docs/pull/43) +* lib: Fix ESP32 BLE Presence detection always on [esphome-core#185](https://github.com/esphome/esphome-core/pull/185) +* lib: Fix LCD display include [esphome-core#186](https://github.com/esphome/esphome-core/pull/186) +* lib: Fix template switch spamming output [esphome-core#187](https://github.com/esphome/esphome-core/pull/187) +* lib: Fix using HTU21D for SI7021 [esphome-core#188](https://github.com/esphome/esphome-core/pull/188) +* lib: Fix components sending invalid state on startup if integration not ready yet [esphome-core#195](https://github.com/esphome/esphome-core/pull/195) +* lib: Log esphomelib version and compilation time on boot [esphome-core#189](https://github.com/esphome/esphome-core/pull/189) (new-feature) +* yaml: Log esphomelib version and compilation time on boot [esphome#159](https://github.com/esphome/esphome/pull/159) (new-feature) +* yaml: Fix raw remote receiver [esphome#158](https://github.com/esphome/esphome/pull/158) +* lib: Add Code of Conduct (Contributor Covenant) [esphome-core#196](https://github.com/esphome/esphome-core/pull/196) +* lib: Create CONTRIBUTING.md [esphome-core#197](https://github.com/esphome/esphome-core/pull/197) +* lib: Create issue templates [esphome-core#198](https://github.com/esphome/esphome-core/pull/198) +* lib: Create pull request template [esphome-core#199](https://github.com/esphome/esphome-core/pull/199) +* yaml: Create Pull Request Template [esphome#172](https://github.com/esphome/esphome/pull/172) +* yaml: Create CONTRIBUTING.md [esphome#169](https://github.com/esphome/esphome/pull/169) +* yaml: Add Code of Conduct (Contributor Covenant) [esphome#168](https://github.com/esphome/esphome/pull/168) +* yaml: Create issue templates [esphome#171](https://github.com/esphome/esphome/pull/171) +* docs: Add Code of Conduct (Contributor Covenant) [esphome-docs#44](https://github.com/esphome/esphome-docs/pull/44) +* docs: Create Pull Request Template [esphome-docs#45](https://github.com/esphome/esphome-docs/pull/45) +* yaml: Fix readme broken link [esphome#174](https://github.com/esphome/esphome/pull/174) +* lib: Fix pulse counter counting inverted on ESP8266 [esphome-core#200](https://github.com/esphome/esphome-core/pull/200) +* yaml: Add use_build_flags removal notice [esphome#173](https://github.com/esphome/esphome/pull/173) +* docs: Highlight update_interval gotchas [esphome-docs#46](https://github.com/esphome/esphome-docs/pull/46) +* docs: Add Disqus and cleanup [esphome-docs#47](https://github.com/esphome/esphome-docs/pull/47) (new-feature) +* lib: Fix PN532 not logging discovered tags [esphome-core#202](https://github.com/esphome/esphome-core/pull/202) +* yaml: Add Samsung IR protocol [esphome#176](https://github.com/esphome/esphome/pull/176) by [@escoand](https://github.com/escoand) (new-feature) +* docs: add samsung ir protocol [esphome-docs#48](https://github.com/esphome/esphome-docs/pull/48) by [@escoand](https://github.com/escoand) (new-feature) +* lib: Bump FastLED to 3.2.0 [esphome-core#203](https://github.com/esphome/esphome-core/pull/203) +* yaml: Fix Wifi power_save_mode option [esphome#178](https://github.com/esphome/esphome/pull/178) +* lib: Fix application sort order [esphome-core#211](https://github.com/esphome/esphome-core/pull/211) +* docs: Improve pulse counter docs [esphome-docs#49](https://github.com/esphome/esphome-docs/pull/49) +* lib: Fix ESP32 BLE Controller Init [esphome-core#213](https://github.com/esphome/esphome-core/pull/213) +* lib: Fix Web Server Creating Infinite Print Loop [esphome-core#214](https://github.com/esphome/esphome-core/pull/214) +* lib: Add TOGGLE payload to more components [esphome-core#212](https://github.com/esphome/esphome-core/pull/212) (new-feature) +* lib: ESP8266 Pulse Counter Improve Timing [esphome-core#205](https://github.com/esphome/esphome-core/pull/205) +* lib: Add MQTT Subscribe Sensor [esphome-core#193](https://github.com/esphome/esphome-core/pull/193) (new-feature) +* docs: Add MQTT Subscribe sensor [esphome-docs#50](https://github.com/esphome/esphome-docs/pull/50) (new-feature) +* yaml: Add MQTT Subscribe sensor [esphome#175](https://github.com/esphome/esphome/pull/175) (new-feature) +* yaml: MQTT different log level [esphome#167](https://github.com/esphome/esphome/pull/167) (new-feature) +* docs: Add option to have different log level over MQTT [esphome-docs#51](https://github.com/esphome/esphome-docs/pull/51) (new-feature) +* yaml: Add clean build files command and auto-clean on version change [esphome#181](https://github.com/esphome/esphome/pull/181) (new-feature) +* lib: Add power on value to switch [esphome-core#207](https://github.com/esphome/esphome-core/pull/207) (new-feature) +* lib: Rework OTA to be more stable [esphome-core#204](https://github.com/esphome/esphome-core/pull/204) (breaking-change) (new-feature) +* yaml: Rework OTA to be more stable [esphome#177](https://github.com/esphome/esphome/pull/177) (new-feature) +* lib: Fix WiFi not working when GPIO 0 connected [esphome-core#215](https://github.com/esphome/esphome-core/pull/215) +* lib: Fix MiFlora illuminance reading [esphome-core#220](https://github.com/esphome/esphome-core/pull/220) +* lib: Remove invalid file headers [esphome-core#219](https://github.com/esphome/esphome-core/pull/219) +* yaml: Fix config dump time output [esphome#184](https://github.com/esphome/esphome/pull/184) +* lib: GPIO Switch Rewrite [esphome-core#217](https://github.com/esphome/esphome-core/pull/217) +* docs: Add power on value to GPIO Switch [esphome-docs#55](https://github.com/esphome/esphome-docs/pull/55) (new-feature) +* yaml: Decentralize Automation Generator Code [esphome#182](https://github.com/esphome/esphome/pull/182) +* lib: Add PN532 On Tag Trigger [esphome-core#226](https://github.com/esphome/esphome-core/pull/226) (new-feature) +* lib: Add text sensors [esphome-core#194](https://github.com/esphome/esphome-core/pull/194) (new-feature) +* docs: Add Text sensors [esphome-docs#52](https://github.com/esphome/esphome-docs/pull/52) (new-feature) +* lib: Fix PCF8574 assert. [esphome-core#223](https://github.com/esphome/esphome-core/pull/223) by [@lobradov](https://github.com/lobradov) +* lib: Unify Xiaomi MiJia&MiFlora Implementations [esphome-core#225](https://github.com/esphome/esphome-core/pull/225) +* docs: Unify xiaomi implementations [esphome-docs#56](https://github.com/esphome/esphome-docs/pull/56) +* yaml: Unify Xiaomi implementations [esphome#188](https://github.com/esphome/esphome/pull/188) +* lib: Add CSE7766 for Sonoff Pow R2 [esphome-core#227](https://github.com/esphome/esphome-core/pull/227) (new-feature) +* docs: Add CSE7766 for Sonoff Pow R2 [esphome-docs#59](https://github.com/esphome/esphome-docs/pull/59) (new-feature) +* docs: Add PN532 On Tag Trigger [esphome-docs#57](https://github.com/esphome/esphome-docs/pull/57) (new-feature) +* yaml: Add CSE776 for Sonoff Pow R2 [esphome#190](https://github.com/esphome/esphome/pull/190) (new-feature) +* yaml: Add Text Sensors [esphome#166](https://github.com/esphome/esphome/pull/166) (new-feature) +* yaml: Add PN532 On Tag Trigger [esphome#189](https://github.com/esphome/esphome/pull/189) (new-feature) +* lib: Add MQTT publish JSON action and subscribe JSON trigger [esphome-core#230](https://github.com/esphome/esphome-core/pull/230) (new-feature) +* yaml: Add MQTT publish JSON action and subscribe JSON trigger [esphome#193](https://github.com/esphome/esphome/pull/193) (new-feature) +* docs: Add MQTT publish JSON action and subscribe JSON trigger [esphome-docs#60](https://github.com/esphome/esphome-docs/pull/60) (new-feature) +* lib: Add PMSX003 Particulate Matter Sensor [esphome-core#229](https://github.com/esphome/esphome-core/pull/229) (new-feature) +* docs: Add PMSX003 Particulate Matter Sensor [esphome-docs#58](https://github.com/esphome/esphome-docs/pull/58) (new-feature) +* lib: Add update component action and scripts [esphome-core#232](https://github.com/esphome/esphome-core/pull/232) (new-feature) +* docs: Add update component action and scripts [esphome-docs#61](https://github.com/esphome/esphome-docs/pull/61) (new-feature) +* lib: Implement HASS device registry for MQTT components [esphome-core#233](https://github.com/esphome/esphome-core/pull/233) (new-feature) +* lib: Add FastLED color correction option [esphome-core#234](https://github.com/esphome/esphome-core/pull/234) (new-feature) +* docs: Add FastLED color correction option [esphome-docs#64](https://github.com/esphome/esphome-docs/pull/64) (new-feature) +* yaml: Add update component action and scripts [esphome#196](https://github.com/esphome/esphome/pull/196) (new-feature) +* yaml: Add PMSX003 Particulate Matter Sensor [esphome#192](https://github.com/esphome/esphome/pull/192) (new-feature) +* yaml: Add FastLED color correction option [esphome#200](https://github.com/esphome/esphome/pull/200) (new-feature) +* yaml: Fix triggers being interpreted as a sequence of automations [esphome#199](https://github.com/esphome/esphome/pull/199) +* yaml: Fix value range trigger :expressionless: [esphome#201](https://github.com/esphome/esphome/pull/201) +* lib: Make naming convention consistent [esphome-core#231](https://github.com/esphome/esphome-core/pull/231) (breaking-change) +* docs: Make naming convention consistent [esphome-docs#62](https://github.com/esphome/esphome-docs/pull/62) (breaking-change) +* docs: Fix some typos [esphome-docs#65](https://github.com/esphome/esphome-docs/pull/65) +* yaml: Improve API naming convention consistency [esphome#197](https://github.com/esphome/esphome/pull/197) (breaking-change) +* yaml: Fix some typos [esphome#202](https://github.com/esphome/esphome/pull/202) +* docs: Add logger.log action [esphome-docs#63](https://github.com/esphome/esphome-docs/pull/63) (new-feature) +* yaml: Add logger.log action [esphome#198](https://github.com/esphome/esphome/pull/198) (new-feature) +* docs: Fix template sensor docs [esphome-docs#66](https://github.com/esphome/esphome-docs/pull/66) +* docs: Fix text sensor outdated API docs [esphome-docs#70](https://github.com/esphome/esphome-docs/pull/70) +* docs: Add Stepper Support [esphome-docs#68](https://github.com/esphome/esphome-docs/pull/68) (new-feature) +* lib: Add stepper motor support [esphome-core#239](https://github.com/esphome/esphome-core/pull/239) (new-feature) +* lib: Add send_first_at option to sliding window sensor filter [esphome-core#240](https://github.com/esphome/esphome-core/pull/240) (new-feature) +* docs: Add send_first_at option to sliding window sensor filter [esphome-docs#69](https://github.com/esphome/esphome-docs/pull/69) (new-feature) +* lib: Fix display line drawing algorithm [esphome-core#241](https://github.com/esphome/esphome-core/pull/241) +* lib: Fix availability calculation [esphome-core#242](https://github.com/esphome/esphome-core/pull/242) +* yaml: Add Stepper Motor Support [esphome#206](https://github.com/esphome/esphome/pull/206) (new-feature) +* yaml: Add send_first_at option to sliding window sensor filter [esphome#207](https://github.com/esphome/esphome/pull/207) (new-feature) +* docs: Switch example to Dehumidifier, minor grammar/puncuation [esphome-docs#67](https://github.com/esphome/esphome-docs/pull/67) by [@rorpage](https://github.com/rorpage) +* docs: Tiny typo fix. [esphome-docs#73](https://github.com/esphome/esphome-docs/pull/73) by [@corbanmailloux](https://github.com/corbanmailloux) +* yaml: Auto-Decode stacktraces [esphome#214](https://github.com/esphome/esphome/pull/214) (new-feature) +* docs: Fix a broken link to setting up a BLE tracker. [esphome-docs#72](https://github.com/esphome/esphome-docs/pull/72) by [@corbanmailloux](https://github.com/corbanmailloux) +* yaml: Add generate home assistant config command [esphome#208](https://github.com/esphome/esphome/pull/208) (new-feature) +* yaml: Update Gitlab Build Script [esphome#215](https://github.com/esphome/esphome/pull/215) +* lib: Fix status binary sensor always reporting false internally [esphome-core#257](https://github.com/esphome/esphome-core/pull/257) +* yaml: Fix HLW8012 Voltage Divider option not being added to source [esphome#224](https://github.com/esphome/esphome/pull/224) +* lib: Fix HLW8012 Initial Value Reporting [esphome-core#254](https://github.com/esphome/esphome-core/pull/254) +* lib: Clean up Time API [esphome-core#253](https://github.com/esphome/esphome-core/pull/253) +* yaml: Better typing to components [esphome#225](https://github.com/esphome/esphome/pull/225) +* lib: Support uploading OTA updates over web server [esphome-core#255](https://github.com/esphome/esphome-core/pull/255) (new-feature) +* lib: Save and Restore states from RTC memory [esphome-core#258](https://github.com/esphome/esphome-core/pull/258) (new-feature) +* docs: Revert add power_on_value to gpio switch [esphome-docs#78](https://github.com/esphome/esphome-docs/pull/78) +* lib: Improve default log levels and log sources [esphome-core#264](https://github.com/esphome/esphome-core/pull/264) +* lib: OTA Read back server acknowledgement [esphome-core#263](https://github.com/esphome/esphome-core/pull/263) +* lib: Add Multi Click Trigger to binary sensor [esphome-core#262](https://github.com/esphome/esphome-core/pull/262) (new-feature) +* docs: Add binary sensor on multi click trigger [esphome-docs#77](https://github.com/esphome/esphome-docs/pull/77) (new-feature) +* lib: ESP32 BLE Release Bluetooth Classic Memory [esphome-core#261](https://github.com/esphome/esphome-core/pull/261) +* yaml: Add restore state option to template switch [esphome#222](https://github.com/esphome/esphome/pull/222) +* docs: Advertise esphomeflasher [esphome-docs#76](https://github.com/esphome/esphome-docs/pull/76) (new-feature) +* docs: Replace table generator with custom RST directive [esphome-docs#75](https://github.com/esphome/esphome-docs/pull/75) +* yaml: Clean up time API [esphome#221](https://github.com/esphome/esphome/pull/221) +* yaml: Revert Add power on value to GPIO switch [esphome#223](https://github.com/esphome/esphome/pull/223) +* yaml: Add binary sensor multi click trigger [esphome#226](https://github.com/esphome/esphome/pull/226) (new-feature) +* lib: Add Total Daily Energy Sensor [esphome-core#256](https://github.com/esphome/esphome-core/pull/256) (new-feature) +* yaml: Add total daily energy sensor [esphome#220](https://github.com/esphome/esphome/pull/220) (new-feature) +* docs: Add total daily energy sensor [esphome-docs#79](https://github.com/esphome/esphome-docs/pull/79) +* lib: Introduce new setup phase: "dump config" to allow fully-offline operation [esphome-core#267](https://github.com/esphome/esphome-core/pull/267) +* yaml: Let esphomeyaml know about class inheritance [esphome#229](https://github.com/esphome/esphome/pull/229) +* docs: ESP32 deep sleep wake up multiple pins [esphome-docs#81](https://github.com/esphome/esphome-docs/pull/81) +* yaml: Deep Sleep Wake Up From Multiple Pins [esphome#230](https://github.com/esphome/esphome/pull/230) +* lib: Deep Sleep Multi Wakeup [esphome-core#268](https://github.com/esphome/esphome-core/pull/268) +* lib: MY9231/MY9291 LED driver support [esphome-core#266](https://github.com/esphome/esphome-core/pull/266) by [@puuu](https://github.com/puuu) (new-feature) +* yaml: Add MY9231 support [esphome#227](https://github.com/esphome/esphome/pull/227) by [@puuu](https://github.com/puuu) (new-feature) +* docs: MY9231/MY9291 LED driver documentation [esphome-docs#80](https://github.com/esphome/esphome-docs/pull/80) by [@puuu](https://github.com/puuu) (new-feature) +* docs: SEO Optimization [esphome-docs#82](https://github.com/esphome/esphome-docs/pull/82) + +{/* markdownlint-enable MD013 */} diff --git a/content/components/alarm_control_panel/_index.md b/src/content/docs/components/alarm_control_panel/index.mdx similarity index 85% rename from content/components/alarm_control_panel/_index.md rename to src/content/docs/components/alarm_control_panel/index.mdx index 39111b67d2..537103c6cd 100644 --- a/content/components/alarm_control_panel/_index.md +++ b/src/content/docs/components/alarm_control_panel/index.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up generic Alarm Control Panels in ESPHome." title: "Alarm Control Panel Component" -params: - seo: - description: Instructions for setting up generic Alarm Control Panels in ESPHome. - image: alarm-panel.svg +sidebar: + label: "Alarm Control Panel Component" --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "config-alarm_control_panel" >}} + + ## Base Alarm Control Panel Configuration @@ -65,7 +65,7 @@ Configuration variables: ## Automation -{{< anchor "alarm_control_panel_on_state_trigger" >}} + ### `on_state` Trigger @@ -79,7 +79,7 @@ alarm_control_panel: - logger.log: "Alarm Panel State Changed!" ``` -{{< anchor "alarm_control_panel_on_pending_trigger" >}} + ### `on_pending` Trigger @@ -93,7 +93,7 @@ alarm_control_panel: - logger.log: "Alarm Pending!" ``` -{{< anchor "alarm_control_panel_on_arming_trigger" >}} + ### `on_arming` Trigger @@ -107,7 +107,7 @@ alarm_control_panel: - logger.log: "Alarm Arming!" ``` -{{< anchor "alarm_control_panel_on_armed_home_trigger" >}} + ### `on_armed_home` Trigger @@ -121,7 +121,7 @@ alarm_control_panel: - logger.log: "Alarm armed_home!" ``` -{{< anchor "alarm_control_panel_on_armed_night_trigger" >}} + ### `on_armed_night` Trigger @@ -135,7 +135,7 @@ alarm_control_panel: - logger.log: "Alarm armed_night!" ``` -{{< anchor "alarm_control_panel_on_armed_away_trigger" >}} + ### `on_armed_away` Trigger @@ -149,7 +149,7 @@ alarm_control_panel: - logger.log: "Alarm armed_away!" ``` -{{< anchor "alarm_control_panel_on_triggered_trigger" >}} + ### `on_triggered` Trigger @@ -163,7 +163,7 @@ alarm_control_panel: - logger.log: "Alarm Triggered!" ``` -{{< anchor "alarm_control_panel_on_cleared_trigger" >}} + ### `on_cleared` Trigger @@ -177,7 +177,7 @@ alarm_control_panel: - logger.log: "Alarm Cleared!" ``` -{{< anchor "alarm_control_panel_on_disarmed_trigger" >}} + ### `on_disarmed` Trigger @@ -191,7 +191,7 @@ alarm_control_panel: - logger.log: "Alarm Disarmed!" ``` -{{< anchor "alarm_control_panel_on_ready_trigger" >}} + ### `on_ready` Trigger @@ -208,7 +208,7 @@ alarm_control_panel: ESP_LOGI("AlarmPanel", "Sensor ready change to: %s", ((id(acp1).get_all_sensors_ready()) ? (const char *) "True" : (const char *) "False")); ``` -{{< anchor "alarm_control_panel_on_chime_trigger" >}} + ### `on_chime` Trigger @@ -223,7 +223,7 @@ alarm_control_panel: - logger.log: "Alarm Chime!" ``` -{{< anchor "alarm_control_panel_arm_away_action" >}} + ### `arm_away` Action @@ -237,7 +237,7 @@ on_...: code: "1234" ``` -{{< anchor "alarm_control_panel_arm_home_action" >}} + ### `arm_home` Action @@ -251,7 +251,7 @@ on_...: code: "1234" ``` -{{< anchor "alarm_control_panel_arm_night_action" >}} + ### `arm_night` Action @@ -265,7 +265,7 @@ on_...: code: "1234" ``` -{{< anchor "alarm_control_panel_disarm_action" >}} + ### `disarm` Action @@ -279,7 +279,7 @@ on_...: code: "1234" ``` -{{< anchor "alarm_control_panel_pending_action" >}} + ### `pending` Action @@ -291,7 +291,7 @@ on_...: - alarm_control_panel.pending: acp1 ``` -{{< anchor "alarm_control_panel_triggered_action" >}} + ### `triggered` Action @@ -303,7 +303,7 @@ on_...: - alarm_control_panel.triggered: acp1 ``` -{{< anchor "alarm_control_panel_is_armed_condition" >}} + ### `is_armed` Condition @@ -316,7 +316,7 @@ on_...: alarm_control_panel.is_armed: acp1 ``` -{{< anchor "alarm_control_panel_lambda_calls" >}} + ### lambda calls @@ -340,5 +340,5 @@ bool all_sensors_ready = id(acp1).get_all_sensors_ready(); ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "alarm_control_panel/alarm_control_panel.h" "alarm_control_panel/alarm_control_panel.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/alarm_control_panel/template.md b/src/content/docs/components/alarm_control_panel/template.mdx similarity index 94% rename from content/components/alarm_control_panel/template.md rename to src/content/docs/components/alarm_control_panel/template.mdx index 1b69f571b5..226d6896fe 100644 --- a/content/components/alarm_control_panel/template.md +++ b/src/content/docs/components/alarm_control_panel/template.mdx @@ -1,12 +1,10 @@ --- description: "Instructions for setting up template Alarm Control Panels in ESPHome." title: "Template Alarm Control Panel" -params: - seo: - description: Instructions for setting up template Alarm Control Panels in ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` alarm control panel platform allows you to turn your binary sensors into a state machine managed alarm control panel. @@ -60,7 +58,7 @@ alarm_control_panel: > If `binary_sensors` is omitted then you're expected to trigger the alarm using > [`pending` Action](/components/alarm_control_panel#alarm_control_panel_pending_action) or [`triggered` Action](/components/alarm_control_panel#alarm_control_panel_triggered_action). -{{< anchor "template_alarm_control_panel-trigger_modes" >}} + ## Trigger Modes @@ -99,7 +97,7 @@ entered the premises in an unusual manner. Likewise, if someone enters the premi trigger mode, and then triggers the PIR, the alarm will stay in the `pending` state until either they disarm the alarm, or the pending timer expires. -{{< anchor "template_alarm_control_panel-state_flow" >}} + ## State Flow @@ -239,7 +237,6 @@ switch: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "template/alarm_control_panel/template_alarm_control_panel.h" - "template/alarm_control_panel/template_alarm_control_panel.h" >}} +- [Alarm Control Panel Component](/components/alarm_control_panel/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/animation.md b/src/content/docs/components/animation.mdx similarity index 99% rename from content/components/animation.md rename to src/content/docs/components/animation.mdx index 2b832b5620..09c6051fdc 100644 --- a/content/components/animation.md +++ b/src/content/docs/components/animation.mdx @@ -3,7 +3,7 @@ description: "Animation" title: "Animation" --- -{{< anchor "display-animation" >}} + Allows to use animated images on displays. Animation inherits all options from the image component. It adds additional lambda methods: `next_frame()`, `prev_frame()` and `set_frame()` to change the shown picture of a gif. diff --git a/content/components/api.md b/src/content/docs/components/api.mdx similarity index 97% rename from content/components/api.md rename to src/content/docs/components/api.mdx index 60025560cf..904d929ecf 100644 --- a/content/components/api.md +++ b/src/content/docs/components/api.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up the native ESPHome API for communication with Home Assistant." title: "Native API Component" -params: - seo: - description: Instructions for setting up the native ESPHome API for communication with Home Assistant. - image: server-network.svg --- +import APIKeyGenerator from '@components/APIKeyGenerator.astro'; +import APIRef from '@components/APIRef.astro'; + The ESPHome native API is used to communicate with clients directly, with a highly-optimized network protocol. Currently, only the ESPHome tool, Home Assistant and ioBroker use this native API. @@ -14,7 +13,7 @@ After adding an `api:` line to your ESPHome configuration you can go to the Home web interface and navigate to the "Integrations" screen in the "Configuration" panel. Then wait for the ESPHome device to show up under the discovered section (can take up to 5 minutes) or add the device manually by choosing "ESPHome" from the integration overview and entering -".local" or the IP address of the unit in the "Host" field. +"\.local" or the IP address of the unit in the "Host" field. The ESPHome native API is based on a custom TCP protocol using protocol buffers. You can find the protocol data structure definitions here: [api.proto](https://github.com/esphome/esphome/blob/dev/esphome/components/api/api.proto) @@ -62,7 +61,7 @@ api: - `5` for ESP8266/RP2040, - `8` for ESP32/BK72xx/LN882x/nRF52/RTL87xx, - `16` for host platform. - + This prevents memory exhaustion when a client is slow or network-stalled. Each queued message uses approximately 8-12 bytes of overhead plus the message size. @@ -79,7 +78,7 @@ api: If you need a key, you can use the key below; it is randomly generated by your browser each time this page loads: -{{< api-key-input >}} + > [!NOTE] > Support for configuring the encryption key on-the-fly will be implemented in a future release of Home Assistant. @@ -115,7 +114,7 @@ api: - **on_client_disconnected** (*Optional*, [Action](/automations/actions#all-actions)): An automation to perform when a client disconnects from the API. See [`on_client_disconnected` Trigger](#api-on_client_disconnected_trigger). -{{< anchor "api-actions" >}} + ## Actions @@ -140,7 +139,7 @@ Then: 1. Then click "submit" -{{< anchor "api-homeassistant_event_action" >}} + ### `homeassistant.event` Action @@ -171,7 +170,7 @@ on_...: - **variables** (*Optional*, mapping): Optional variables that can be used in the `data_template`. Values are [lambdas](/automations/templates#config-lambda) and will be evaluated before sending the request. -{{< anchor "api-homeassistant_action-action" >}} + ### `homeassistant.action` Action @@ -328,7 +327,7 @@ on_...: When `response_template` is used, the processed result is available in `response["response"]`. -{{< anchor "api-homeassistant_tag_scanned_action" >}} + ### `homeassistant.tag_scanned` Action @@ -352,7 +351,7 @@ on_...: ## Triggers -{{< anchor "api-on_client_connected_trigger" >}} + ### `on_client_connected` Trigger @@ -371,7 +370,7 @@ api: args: ["client_info.c_str()", "client_address.c_str()"] ``` -{{< anchor "api-on_client_disconnected_trigger" >}} + ### `on_client_disconnected` Trigger @@ -390,7 +389,7 @@ api: ## Conditions -{{< anchor "api-connected_condition" >}} + ### `api.connected` Condition @@ -433,7 +432,7 @@ The lambda equivalent for this is `id(api_id).is_connected(true)`. - Use `state_subscription_only: false` (default) to detect any API connection - Use `state_subscription_only: true` when you need to ensure Home Assistant (or other connections that subscribe to states) is connected before sending events or calling services, preventing errors from logger-only connections -{{< anchor "api-device-actions" >}} + ## User-defined Actions @@ -665,4 +664,4 @@ never be removed. Features of native API (vs. MQTT): ## See Also -- {{< apiref "api/api_server.h" "api/api_server.h" >}} +- diff --git a/content/components/at581x.md b/src/content/docs/components/at581x.mdx similarity index 85% rename from content/components/at581x.md rename to src/content/docs/components/at581x.mdx index b4c8e79ad4..44b667610a 100644 --- a/content/components/at581x.md +++ b/src/content/docs/components/at581x.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up AirTouch AT581x Radar" title: "AirTouch AT581x Radar" -params: - seo: - description: Instructions for setting up AirTouch AT581x Radar - image: at581x.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The [AirTouch AT581x radar](https://en.airtouching.com/product/32.html) (aka `AT581x` ) is a family of 5.8GHz radar which can be used for human presence detection. It can detect tiny movements and compared to a PIR sensor **it can detect presence continuously**. This can be useful, for example, to turn @@ -18,9 +17,16 @@ It's installed in many low cost appliance, like the ESP32S3-BOX-3, and can be fo like the MoreSense MS58-3909S68U4. It is possible to use this sensor with only a single GPIO pin; however, if you wish to change its settings, -a {{< docref "/components/i2c" >}} component (and its requisite GPIO pins) is required in your device's configuration. +a [I2C](/components/i2c/) component (and its requisite GPIO pins) is required in your device's configuration. -{{< img src="at581x.png" alt="Image" caption="AirTouch AT581x Radar / presence detection sensor" width="75%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -29,17 +35,17 @@ at581x: i2c_id: bus_a ``` -{{< anchor "at581x-component" >}} + ## Component/Hub You need to have the hub component (`at581x:` entry) defined to be able to change the sensor's settings, get it listed as an motion entity or being able to turn on/off the radio frequency emmission. -A {{< docref "/components/binary_sensor/gpio" >}} alone could be sufficient if you only want +A [Gpio](/components/binary_sensor/gpio/) alone could be sufficient if you only want to determine presence/occupancy. When you define `at581x:` you'll need to have a `i2c:` entry in your configuration with both the SDA and SCL pins defined. -Multiple instances of this component may be defined if multiple {{< docref "/components/i2c" >}} components are available: +Multiple instances of this component may be defined if multiple [I2C](/components/i2c/) components are available: ```yaml at581x: @@ -57,10 +63,10 @@ at581x: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. Necessary if you want to define multiple instances of this component. -- **i2c_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the {{< docref "/components/i2c" >}} if you want +- **i2c_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [I2C](/components/i2c/) if you want to use multiple I2C buses. -{{< anchor "at581x-binary_sensor" >}} + ## Binary Sensor (GPIO) @@ -73,9 +79,9 @@ binary_sensor: pin: GPIOXX ``` -- Refer to other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor) and {{< docref "/components/binary_sensor/gpio" "GPIO Binary Sensor" >}}. +- Refer to other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor) and [GPIO Binary Sensor](/components/binary_sensor/gpio/). -{{< anchor "at581x-switch" >}} + ## Switch @@ -95,11 +101,11 @@ switch: - All other options from [Switch](/components/switch#config-switch). -{{< anchor "at581x-actions" >}} + ## Actions -{{< anchor "at581x-action_settings" >}} + ### `at581x.settings` Action @@ -162,6 +168,6 @@ on_...: ## See Also - [I2C bus](/components/i2c) -- [Binary Sensor](/components/binary_sensor#config-binary_sensor) -- {{< docref "/components/binary_sensor/gpio" "GPIO Binary Sensor" >}} +- [Binary Sensor Component](/components/binary_sensor#config-binary_sensor) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [ID](/guides/configuration-types#id) diff --git a/content/components/audio_adc/es7210.md b/src/content/docs/components/audio_adc/es7210.mdx similarity index 85% rename from content/components/audio_adc/es7210.md rename to src/content/docs/components/audio_adc/es7210.mdx index 68734ed27a..bc7d16acee 100644 --- a/content/components/audio_adc/es7210.md +++ b/src/content/docs/components/audio_adc/es7210.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for using ESPHome's ES7210 platform to configure microphone inputs." title: "ES7210" -params: - seo: - description: Instructions for using ESPHome's ES7210 platform to configure microphone inputs. - image: es7210.svg --- +import APIRef from '@components/APIRef.astro'; + The `es7210` platform allows your ESPHome devices to use the ES7210 high performance four channel audio ADC ([datasheet](http://www.everest-semi.com/pdf/ES7210%20PB.pdf)). -This allows attached microphones to be used as a microphone input via {{< docref "/components/microphone/i2s_audio" >}}. +This allows attached microphones to be used as a microphone input via [I2S Audio](/components/microphone/i2s_audio/). The [I²C bus](/components/i2c) is required in your configuration as this is used to communicate with the ES7210. @@ -19,7 +17,7 @@ audio_adc: - platform: es7210 ``` -{{< anchor "config-es7210" >}} + ## Configuration variables @@ -67,5 +65,5 @@ microphone: ## See Also -- {{< docref "index/" >}} -- {{< apiref "es7210/es7210.h" "es7210/es7210.h" >}} +- [Audio Adc Component](/components/audio_adc/) +- diff --git a/content/components/audio_adc/es7243e.md b/src/content/docs/components/audio_adc/es7243e.mdx similarity index 84% rename from content/components/audio_adc/es7243e.md rename to src/content/docs/components/audio_adc/es7243e.mdx index 763e758404..0652ac1849 100644 --- a/content/components/audio_adc/es7243e.md +++ b/src/content/docs/components/audio_adc/es7243e.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for using ESPHome's ES7243E platform to configure microphone inputs." title: "ES7243E" -params: - seo: - description: Instructions for using ESPHome's ES7243E platform to configure microphone inputs. - image: es7243e.svg --- +import APIRef from '@components/APIRef.astro'; + The `es7243e` platform allows your ESPHome devices to use the ES7243E high performance four channel audio ADC ([datasheet](https://www.lcsc.com/datasheet/lcsc_datasheet_2410121611_Everest-semi-Everest-Semiconductor-ES7243E_C2929446.pdf)). -This allows attached microphones to be used as a microphone input via {{< docref "/components/microphone/i2s_audio" >}}. +This allows attached microphones to be used as a microphone input via [I2S Audio](/components/microphone/i2s_audio/). The [I²C bus](/components/i2c) is required in your configuration as this is used to communicate with the ES7243e. @@ -19,7 +17,7 @@ audio_adc: - platform: es7243e ``` -{{< anchor "config-es7243e" >}} + ## Configuration variables @@ -61,5 +59,5 @@ microphone: ## See Also -- {{< docref "index/" >}} -- {{< apiref "es7243e/es7243e.h" "es7243e/es7243e.h" >}} +- [Audio Adc Component](/components/audio_adc/) +- diff --git a/content/components/audio_adc/_index.md b/src/content/docs/components/audio_adc/index.mdx similarity index 81% rename from content/components/audio_adc/_index.md rename to src/content/docs/components/audio_adc/index.mdx index 84e9a9088e..6f280747d3 100644 --- a/content/components/audio_adc/_index.md +++ b/src/content/docs/components/audio_adc/index.mdx @@ -1,10 +1,8 @@ --- description: "Instructions for using ESPHome's Audio ADC Core component." title: "Audio ADC Core" -params: - seo: - description: Instructions for using ESPHome's Audio ADC Core component. - image: i2s_audio.svg +sidebar: + label: "Audio ADC Core" --- The `audio_adc` component allows your ESPHome devices to use audio ADC hardware components, allowing the @@ -18,13 +16,13 @@ audio_adc: ## Platforms -{{< anchor "config-audio_adc" >}} + ## Configuration variables - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -{{< anchor "automations-audio_adc" >}} + ## Automations @@ -37,5 +35,3 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the `audio_adc` platform. - **mic_gain** (**Required**, percentage, [templatable](/automations/templates)): The desired gain level in decibels for the input. - -## See Also diff --git a/content/components/audio_dac/aic3204.md b/src/content/docs/components/audio_dac/aic3204.mdx similarity index 79% rename from content/components/audio_dac/aic3204.md rename to src/content/docs/components/audio_dac/aic3204.mdx index 6511000d29..a832562bce 100644 --- a/content/components/audio_dac/aic3204.md +++ b/src/content/docs/components/audio_dac/aic3204.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for using ESPHome's AIC3204 audio DAC platform to play media from your devices." title: "AIC3204" -params: - seo: - description: Instructions for using ESPHome's AIC3204 audio DAC platform to play media from your devices. - image: i2s_audio.svg --- +import APIRef from '@components/APIRef.astro'; + The `aic3204` platform allows your ESPHome devices to use the AIC3204 ultra low power stereo audio codec (DAC). This allows the playback of audio via the microcontroller from a range of sources via -{{< docref "/components/media_player" >}}. +[Media Player](/components/media_player/). The [I²C bus](/components/i2c) is required in your configuration as this is used to communicate with the AIC3204. @@ -19,7 +17,7 @@ audio_dac: - platform: aic3204 ``` -{{< anchor "config-aic3204" >}} + ## Configuration variables @@ -45,6 +43,6 @@ All [Audio DAC Automations](/components/audio_dac#automations-audio_dac) are sup ## See Also -- {{< docref "index/" >}} -- {{< apiref "aic3204/aic3204.h" "aic3204/aic3204.h" >}} -- {{< apiref "audio_dac/audio_dac.h" "audio_dac/audio_dac.h" >}} +- [Audio Dac Component](/components/audio_dac/) +- +- diff --git a/content/components/audio_dac/es8156.md b/src/content/docs/components/audio_dac/es8156.mdx similarity index 77% rename from content/components/audio_dac/es8156.md rename to src/content/docs/components/audio_dac/es8156.mdx index 3f66649a75..c58292e81d 100644 --- a/content/components/audio_dac/es8156.md +++ b/src/content/docs/components/audio_dac/es8156.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for using ESPHome's ES8156 audio DAC platform to play media from your devices." title: "ES8156" -params: - seo: - description: Instructions for using ESPHome's ES8156 audio DAC platform to play media from your devices. - image: es8156.svg --- +import APIRef from '@components/APIRef.astro'; + The `es8156` platform allows your ESPHome devices to use the ES8156 low power mono audio codec. -This allows the playback of audio via the microcontroller from a range of sources via {{< docref "/components/speaker" >}} or -{{< docref "/components/media_player" >}}. +This allows the playback of audio via the microcontroller from a range of sources via [Speaker](/components/speaker/) or +[Media Player](/components/media_player/). The [I²C bus](/components/i2c) is required in your configuration as this is used to communicate with the ES8156. @@ -19,7 +17,7 @@ audio_dac: - platform: es8156 ``` -{{< anchor "config-es8156" >}} + ## Configuration variables @@ -66,6 +64,6 @@ switch: ## See Also -- {{< docref "index/" >}} -- {{< apiref "es8156/es8156.h" "es8156/es8156.h" >}} -- {{< apiref "audio_dac/audio_dac.h" "audio_dac/audio_dac.h" >}} +- [Audio Dac Component](/components/audio_dac/) +- +- diff --git a/content/components/audio_dac/es8311.md b/src/content/docs/components/audio_dac/es8311.mdx similarity index 83% rename from content/components/audio_dac/es8311.md rename to src/content/docs/components/audio_dac/es8311.mdx index 30c57e3b16..7dcd10f4b9 100644 --- a/content/components/audio_dac/es8311.md +++ b/src/content/docs/components/audio_dac/es8311.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for using ESPHome's ES8311 audio DAC platform to play media from your devices." title: "ES8311" -params: - seo: - description: Instructions for using ESPHome's ES8311 audio DAC platform to play media from your devices. - image: es8311.svg --- +import APIRef from '@components/APIRef.astro'; + The `es8311` platform allows your ESPHome devices to use the ES8311 low power mono audio codec. -This allows the playback of audio via the microcontroller from a range of sources via {{< docref "/components/speaker" >}} or -{{< docref "/components/media_player" >}}. +This allows the playback of audio via the microcontroller from a range of sources via [Speaker](/components/speaker/) or +[Media Player](/components/media_player/). The [I²C bus](/components/i2c) is required in your configuration as this is used to communicate with the ES8311. @@ -19,7 +17,7 @@ audio_dac: - platform: es8311 ``` -{{< anchor "config-es8311" >}} + ## Configuration variables @@ -73,6 +71,6 @@ switch: ## See Also -- {{< docref "index/" >}} -- {{< apiref "es8311/es8311.h" "es8311/es8311.h" >}} -- {{< apiref "audio_dac/audio_dac.h" "audio_dac/audio_dac.h" >}} +- [Audio Dac Component](/components/audio_dac/) +- +- diff --git a/content/components/audio_dac/es8388.md b/src/content/docs/components/audio_dac/es8388.mdx similarity index 82% rename from content/components/audio_dac/es8388.md rename to src/content/docs/components/audio_dac/es8388.mdx index e766c2e0ba..00ad10e135 100644 --- a/content/components/audio_dac/es8388.md +++ b/src/content/docs/components/audio_dac/es8388.mdx @@ -1,19 +1,17 @@ --- description: "Instructions for using ESPHome's es8388 audio DAC platform to play media from your devices and to configure microphone inputs." title: "ES8388" -params: - seo: - description: Instructions for using ESPHome's es8388 audio DAC platform to play media from your devices and to configure microphone inputs. - image: es8388.svg --- +import APIRef from '@components/APIRef.astro'; + The `es8388` component allows your ESPHome devices to use the es8388 low power audio codec ([datasheet](http://www.everest-semi.com/pdf/ES8388%20DS.pdf)) -This allows the playback of audio through two channel high performance audio DAC output via the microcontroller from a range of sources via {{< docref "/components/speaker" >}} or -{{< docref "/components/media_player" >}}. +This allows the playback of audio through two channel high performance audio DAC output via the microcontroller from a range of sources via [Speaker](/components/speaker/) or +[Media Player](/components/media_player/). It also allows your ESPHome devices to use the `es8388` high performance two channel audio ADC. -This allows attached microphones to be used as a microphone input via {{< docref "/components/microphone/i2s_audio" >}}. +This allows attached microphones to be used as a microphone input via [I2S Audio](/components/microphone/i2s_audio/). The [I²C bus](/components/i2c) is required in your configuration as this is used to communicate with the es8388. @@ -33,7 +31,7 @@ audio_dac: ## Select -The `es8388` select allows you to control the `dac output` and the `adc input_mic` of your {{< docref "es8388/" >}}. +The `es8388` select allows you to control the `dac output` and the `adc input_mic` of your [Es8388](/components/audio_dac/es8388/). ```yaml select: @@ -47,7 +45,7 @@ select: ### Configuration variables -- **es8388_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "es8388/" >}} component. +- **es8388_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Es8388](/components/audio_dac/es8388/) component. - **dac_output** (*Optional*): Control the DAC Audio output. - `LINE1` (default) @@ -128,6 +126,6 @@ switch: ## See Also -- {{< docref "index/" >}} -- {{< apiref "es8388/es8388.h" "es8388/es8388.h" >}} -- {{< apiref "audio_dac/audio_dac.h" "audio_dac/audio_dac.h" >}} +- [Audio Dac Component](/components/audio_dac/) +- +- diff --git a/content/components/audio_dac/_index.md b/src/content/docs/components/audio_dac/index.mdx similarity index 80% rename from content/components/audio_dac/_index.md rename to src/content/docs/components/audio_dac/index.mdx index b42aed5c35..be723dd5a3 100644 --- a/content/components/audio_dac/_index.md +++ b/src/content/docs/components/audio_dac/index.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for using ESPHome's Audio DAC Core component." title: "Audio DAC Core" -params: - seo: - description: Instructions for using ESPHome's Audio DAC Core component. - image: i2s_audio.svg +sidebar: + label: "Audio DAC Core" --- The `audio_dac` component allows your ESPHome devices to use audio DAC hardware components, allowing the playback of -audio via the microcontroller from a range of sources via {{< docref "/components/media_player" >}}. +audio via the microcontroller from a range of sources via [Media Player](/components/media_player/). ```yaml # Example configuration entry @@ -18,13 +16,13 @@ audio_dac: ## Platforms -{{< anchor "config-audio_dac" >}} + ## Configuration variables - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -{{< anchor "automations-audio_dac" >}} + ## Automations @@ -53,5 +51,3 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the `audio_dac` platform. - **volume** (**Required**, percentage, [templatable](/automations/templates)): The desired volume level for the output from 0% to 100%. - -## See Also diff --git a/content/components/binary_sensor/analog_threshold.md b/src/content/docs/components/binary_sensor/analog_threshold.mdx similarity index 86% rename from content/components/binary_sensor/analog_threshold.md rename to src/content/docs/components/binary_sensor/analog_threshold.mdx index bf9dae4634..ed273265e5 100644 --- a/content/components/binary_sensor/analog_threshold.md +++ b/src/content/docs/components/binary_sensor/analog_threshold.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up an analog threshold binary sensors." title: "Analog Threshold Binary Sensor" -params: - seo: - description: Instructions for setting up an analog threshold binary sensors. - image: analog_threshold.svg --- +import APIRef from '@components/APIRef.astro'; + The `analog_threshold` binary sensor platform allows you to convert analog values -(i.e. {{< docref "/components/sensor/index" "sensor" >}} readings) +(i.e. [sensor](/components/sensor/) readings) into boolean values, using a threshold as a reference. When the signal is above or equal to the threshold the binary sensor is `true` (this behavior can be changed by adding an `invert` filter). @@ -65,7 +63,7 @@ binary_sensor: ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< docref "/components/sensor" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [Sensor Component](/components/sensor/) - [Automation](/automations) -- {{< apiref "analog_threshold/analog_threshold_binary_sensor.h" "analog_threshold/analog_threshold_binary_sensor.h" >}} +- diff --git a/content/components/binary_sensor/ble_presence.md b/src/content/docs/components/binary_sensor/ble_presence.mdx similarity index 87% rename from content/components/binary_sensor/ble_presence.md rename to src/content/docs/components/binary_sensor/ble_presence.mdx index 751e06e58e..8caeb200b5 100644 --- a/content/components/binary_sensor/ble_presence.md +++ b/src/content/docs/components/binary_sensor/ble_presence.mdx @@ -1,22 +1,22 @@ --- description: "Instructions for setting up BLE binary sensors for the ESP32." title: "ESP32 Bluetooth Low Energy Device" -params: - seo: - description: Instructions for setting up BLE binary sensors for the ESP32. - image: bluetooth.svg --- +import { Image } from 'astro:assets'; +import esp32BleUiImg from './images/esp32_ble-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `ble_presence` binary sensor platform lets you track the presence of a Bluetooth Low Energy device. > [!WARNING] > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. -{{< img src="esp32_ble-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -78,7 +78,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "esp32_ble_tracker-setting_up_devices" >}} + ## Setting Up Devices @@ -114,7 +114,7 @@ changes, they can't be tracked by the MAC address. However, if you know the devi Key" (IRK), you can check if the generated private MAC address belongs to the device with the IRK. There is no support to obtain the key with ESPHome. For now you will have to use one of the options -described in the ESPresense project: +described in the ESPresense project: [https://espresense.com/beacons](https://espresense.com/beacons) Alternatively you can: @@ -124,14 +124,14 @@ Alternatively you can: - Create an iBeacon and track it based on its iBeacon UUID. You can also optionally specify major and minor numbers to match if additional filtering is required. ESPHome offers this - functionality via the {{< docref "/components/esp32_ble_beacon" "ESP32 Bluetooth Low Energy Beacon" >}} + functionality via the [ESP32 Bluetooth Low Energy Beacon](/components/esp32_ble_beacon/) component. Several iOS and Android applications, including the open source Home Assistant mobile application also provide means to create iBeacons. ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/esp32_ble_beacon" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "ble_presence/ble_presence.h" "ble_presence/ble_presence.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [ESP32 Bluetooth Low Energy Beacon](/components/esp32_ble_beacon/) +- [Binary Sensor Component](/components/binary_sensor/) - [ESP32 BLE for Arduino](https://github.com/nkolban/ESP32_BLE_Arduino) by [Neil Kolban](https://github.com/nkolban). +- diff --git a/content/components/binary_sensor/cap1188.md b/src/content/docs/components/binary_sensor/cap1188.mdx similarity index 85% rename from content/components/binary_sensor/cap1188.md rename to src/content/docs/components/binary_sensor/cap1188.mdx index b082dfaa3d..dba97f9248 100644 --- a/content/components/binary_sensor/cap1188.md +++ b/src/content/docs/components/binary_sensor/cap1188.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up CAP1188 Capacitive Touch Sensor" title: "CAP1188 Capacitive Touch Sensor" -params: - seo: - description: Instructions for setting up CAP1188 Capacitive Touch Sensor - image: cap1188.jpg --- -{{< anchor "cap1188-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import cap1188FullImg from './images/cap1188-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -16,7 +17,12 @@ The `cap1188` sensor platform allows you to use your CAP1188 [Adafruit](https://learn.adafruit.com/adafruit-cap1188-breakout/overview)) Capacitive Touch Sensor with ESPHome. The [I²C](/components/i2c) bus is required to be set up in your configuration for this sensor to work. -{{< img src="cap1188-full.jpg" alt="Image" caption="CAP1188 Capacitive Touch Sensor. Image by [Adafruit](https://www.adafruit.com)." width="75%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -68,5 +74,5 @@ Configuration variables: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "cap1188/cap1188.h" "cap1188/cap1188.h" >}} - [Adafruit CAP1188 Library](https://github.com/adafruit/Adafruit_CAP1188_Library) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/binary_sensor/esp32_touch.md b/src/content/docs/components/binary_sensor/esp32_touch.mdx similarity index 94% rename from content/components/binary_sensor/esp32_touch.md rename to src/content/docs/components/binary_sensor/esp32_touch.mdx index 4661536840..3afb02545b 100644 --- a/content/components/binary_sensor/esp32_touch.md +++ b/src/content/docs/components/binary_sensor/esp32_touch.mdx @@ -1,19 +1,20 @@ --- description: "Instructions for setting up the touch pad on the ESP32" title: "ESP32 Touch Pad" -params: - seo: - description: Instructions for setting up the touch pad on the ESP32 - image: touch.svg --- +import { Image } from 'astro:assets'; +import esp32TouchUiImg from './images/esp32_touch-ui.png'; +import esp32TouchFindingThresholdsImg from './images/esp32_touch-finding_thresholds.png'; +import APIRef from '@components/APIRef.astro'; + Capacitive touch detection is possible on ESP32, ESP32-S2 or ESP32-S3 processors. In ESPHome, it is configured in two parts: - [Component/Hub](#esp32-touch-component) - [Binary Sensor](#esp32-touch-binary-sensor) -{{< anchor "esp32-touch-component" >}} + ## Component/Hub @@ -116,7 +117,7 @@ Waterproof configuration: For a more detailed explanation of the waterproof configuration, please see the [ESP-IDF documentation.](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/peripherals/touch_pad.html#_CPPv420touch_pad_waterproof) -{{< anchor "esp32-touch-binary-sensor" >}} + ## Binary Sensor @@ -128,7 +129,7 @@ you can add individual touch pads as binary sensors. When a touch is detected on sensor will report an `ON` state. And, of course, if no touch is detected, the binary sensor will report an `OFF` state. -{{< img src="esp32_touch-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -183,7 +184,7 @@ One example of use is a wide area pressure sensor that integrates a number of sm of aluminium foil that sandwich paper, and connect one wire to a touch pin and the other to ground. Set up several sensors under a flexible object like a plastic mat, add the raw values, and apply a threshold. -{{< anchor "esp32-touch-pad-pins" >}} + ## Touch Pad Pins @@ -194,7 +195,7 @@ Various pins on the ESP32, ESP32-S2 and ESP32-S3 can be used to detect touches. | --------------------------------------------------------------------------- | -------------- | -------------- | | GPIO4, GPIO0, GPIO2, GPIO15, GPIO13, GPIO12, GPIO14, GPIO27, GPIO33, GPIO32 | GPIO1 - GPIO14 | GPIO1 - GPIO14 | -{{< anchor "esp32-finding-thresholds" >}} + ## Finding Thresholds @@ -228,7 +229,7 @@ Touching the sensor's pins/pads should result in a (significant) change in the v different amounts of force applied to the touch pad; a pattern should emerge, revealing a value that falls between "touched" and "not touched" which the binary sensor will then use to differentiate between the two states. -{{< img src="esp32_touch-finding_thresholds.png" alt="Image" class="align-center" >}} + Once you've determined an appropriate value, update the threshold parameter in your configuration and test the updated configuration. You may need to repeat this process a few times to fine-tune the behavior and get it just right. @@ -236,7 +237,7 @@ configuration. You may need to repeat this process a few times to fine-tune the Finally, don't forget to disable the `setup_mode` option by setting it back to `false` ; leaving it enabled will reduce the ESP's overall performance. -{{< anchor "esp32-note-about-variants" >}} + ## S2 and S3 Variants @@ -286,6 +287,6 @@ found to work across many S2/S3 devices, though specific parameters may still ne ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "esp32_touch/esp32_touch.h" "esp32_touch/esp32_touch.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) - [esp-idf Touch Sensor API](https://esp-idf.readthedocs.io/en/latest/api-reference/peripherals/touch_pad.html) +- diff --git a/content/components/binary_sensor/gpio.md b/src/content/docs/components/binary_sensor/gpio.mdx similarity index 93% rename from content/components/binary_sensor/gpio.md rename to src/content/docs/components/binary_sensor/gpio.mdx index a1d417b7d9..1c18c08219 100644 --- a/content/components/binary_sensor/gpio.md +++ b/src/content/docs/components/binary_sensor/gpio.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up GPIO binary sensors with ESPHome." title: "GPIO Binary Sensor" -params: - seo: - description: Instructions for setting up GPIO binary sensors with ESPHome. - image: gpio.svg --- -{{< anchor "gpio-binary-sensor" >}} +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + + The GPIO Binary Sensor platform allows you to use any input pin on your device as a binary sensor. By default, it uses hardware interrupts for efficient state change detection with minimal CPU usage. -{{< img src="gpio-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -163,6 +162,6 @@ binary_sensor: ## See Also -- {{< docref "/components/binary_sensor" >}} +- [Binary Sensor Component](/components/binary_sensor/) - [Pin Schema](/guides/configuration-types#pin-schema) -- {{< apiref "gpio/binary_sensor/gpio_binary_sensor.h" "gpio/binary_sensor/gpio_binary_sensor.h" >}} +- diff --git a/content/components/binary_sensor/haier.md b/src/content/docs/components/binary_sensor/haier.mdx similarity index 87% rename from content/components/binary_sensor/haier.md rename to src/content/docs/components/binary_sensor/haier.mdx index 4721e9cea7..bc1184bb47 100644 --- a/content/components/binary_sensor/haier.md +++ b/src/content/docs/components/binary_sensor/haier.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for setting up additional binary sensors for Haier climate devices." title: "Haier Climate Binary Sensors" -params: - seo: - description: Instructions for setting up additional binary sensors for Haier climate devices. - image: haier.svg --- +import { Image } from 'astro:assets'; + Additional sensors for Haier Climate device. **These sensors are supported only by the hOn protocol**. -{{< img src="haier-climate.jpg" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -53,4 +51,4 @@ binary_sensor: ## See Also -- {{< docref "/components/climate/haier" "Haier Climate" >}} +- [Haier Climate](/components/climate/haier/) diff --git a/content/components/binary_sensor/homeassistant.md b/src/content/docs/components/binary_sensor/homeassistant.mdx similarity index 77% rename from content/components/binary_sensor/homeassistant.md rename to src/content/docs/components/binary_sensor/homeassistant.mdx index e80ad0ee03..b81389cd27 100644 --- a/content/components/binary_sensor/homeassistant.md +++ b/src/content/docs/components/binary_sensor/homeassistant.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up Home Assistant binary sensors with ESPHome that import states from your Home Assistant instance." title: "Home Assistant Binary Sensor" -params: - seo: - description: Instructions for setting up Home Assistant binary sensors with ESPHome that import states from your Home Assistant instance. - image: home-assistant.svg --- +import APIRef from '@components/APIRef.astro'; + The `homeassistant` binary sensor platform allows you to create binary sensors that **import** -states from your Home Assistant instance using the {{< docref "/components/api" "native API" >}}. +states from your Home Assistant instance using the [native API](/components/api/). > [!NOTE] > Although you might not plan to *export* states from the node and you do not need an entity of the node @@ -45,4 +43,4 @@ binary_sensor: ## See Also - [Automation](/automations) -- {{< apiref "homeassistant/binary_sensor/homeassistant_binary_sensor.h" "homeassistant/binary_sensor/homeassistant_binary_sensor.h" >}} +- diff --git a/content/components/binary_sensor/hydreon_rgxx.md b/src/content/docs/components/binary_sensor/hydreon_rgxx.mdx similarity index 81% rename from content/components/binary_sensor/hydreon_rgxx.md rename to src/content/docs/components/binary_sensor/hydreon_rgxx.mdx index c1dc0e3cd5..65f3a866a5 100644 --- a/content/components/binary_sensor/hydreon_rgxx.md +++ b/src/content/docs/components/binary_sensor/hydreon_rgxx.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up Hydreon rain sensors" title: "Hydreon Rain Sensor Binary Sensor" -params: - seo: - description: Instructions for setting up Hydreon rain sensors - image: hydreon_rg9.jpg --- The `hydreon_rgxx` binary sensor platform gives access to information provided by a Hydreon Rain Sensor. -For this sensor to work, a {{< docref "/components/sensor/hydreon_rgxx" >}} must be set up. +For this sensor to work, a [Hydreon Rgxx](/components/sensor/hydreon_rgxx/) must be set up. ```yaml # Example RG-9 entry @@ -46,5 +42,5 @@ binary_sensor: ## See Also -- {{< docref "/components/sensor/hydreon_rgxx" >}} -- {{< docref "index/" >}} +- [Hydreon Rain Sensor](/components/sensor/hydreon_rgxx/) +- [Binary Sensor Component](/components/binary_sensor/) diff --git a/content/components/binary_sensor/images/cap1188-full.jpg b/src/content/docs/components/binary_sensor/images/cap1188-full.jpg similarity index 100% rename from content/components/binary_sensor/images/cap1188-full.jpg rename to src/content/docs/components/binary_sensor/images/cap1188-full.jpg diff --git a/content/components/binary_sensor/images/esp32_ble-ui.png b/src/content/docs/components/binary_sensor/images/esp32_ble-ui.png similarity index 100% rename from content/components/binary_sensor/images/esp32_ble-ui.png rename to src/content/docs/components/binary_sensor/images/esp32_ble-ui.png diff --git a/content/components/binary_sensor/images/esp32_touch-finding_thresholds.png b/src/content/docs/components/binary_sensor/images/esp32_touch-finding_thresholds.png similarity index 100% rename from content/components/binary_sensor/images/esp32_touch-finding_thresholds.png rename to src/content/docs/components/binary_sensor/images/esp32_touch-finding_thresholds.png diff --git a/content/components/binary_sensor/images/esp32_touch-ui.png b/src/content/docs/components/binary_sensor/images/esp32_touch-ui.png similarity index 100% rename from content/components/binary_sensor/images/esp32_touch-ui.png rename to src/content/docs/components/binary_sensor/images/esp32_touch-ui.png diff --git a/content/components/binary_sensor/images/mpr121-full.jpg b/src/content/docs/components/binary_sensor/images/mpr121-full.jpg similarity index 100% rename from content/components/binary_sensor/images/mpr121-full.jpg rename to src/content/docs/components/binary_sensor/images/mpr121-full.jpg diff --git a/content/components/binary_sensor/images/pn532-full.jpg b/src/content/docs/components/binary_sensor/images/pn532-full.jpg similarity index 100% rename from content/components/binary_sensor/images/pn532-full.jpg rename to src/content/docs/components/binary_sensor/images/pn532-full.jpg diff --git a/content/components/binary_sensor/images/pn532-spi.jpg b/src/content/docs/components/binary_sensor/images/pn532-spi.jpg similarity index 100% rename from content/components/binary_sensor/images/pn532-spi.jpg rename to src/content/docs/components/binary_sensor/images/pn532-spi.jpg diff --git a/content/components/binary_sensor/images/rc522-full.jpg b/src/content/docs/components/binary_sensor/images/rc522-full.jpg similarity index 100% rename from content/components/binary_sensor/images/rc522-full.jpg rename to src/content/docs/components/binary_sensor/images/rc522-full.jpg diff --git a/content/components/binary_sensor/images/rdm6300-full.jpg b/src/content/docs/components/binary_sensor/images/rdm6300-full.jpg similarity index 100% rename from content/components/binary_sensor/images/rdm6300-full.jpg rename to src/content/docs/components/binary_sensor/images/rdm6300-full.jpg diff --git a/content/components/binary_sensor/images/rdm6300-ui.png b/src/content/docs/components/binary_sensor/images/rdm6300-ui.png similarity index 100% rename from content/components/binary_sensor/images/rdm6300-ui.png rename to src/content/docs/components/binary_sensor/images/rdm6300-ui.png diff --git a/content/components/binary_sensor/images/status-ui.png b/src/content/docs/components/binary_sensor/images/status-ui.png similarity index 100% rename from content/components/binary_sensor/images/status-ui.png rename to src/content/docs/components/binary_sensor/images/status-ui.png diff --git a/content/components/binary_sensor/images/ttp229-full.jpg b/src/content/docs/components/binary_sensor/images/ttp229-full.jpg similarity index 100% rename from content/components/binary_sensor/images/ttp229-full.jpg rename to src/content/docs/components/binary_sensor/images/ttp229-full.jpg diff --git a/content/components/binary_sensor/_index.md b/src/content/docs/components/binary_sensor/index.mdx similarity index 94% rename from content/components/binary_sensor/_index.md rename to src/content/docs/components/binary_sensor/index.mdx index 66420e914c..ce83769e72 100644 --- a/content/components/binary_sensor/_index.md +++ b/src/content/docs/components/binary_sensor/index.mdx @@ -1,17 +1,17 @@ --- description: "Information about the base representation of all binary sensors." title: "Binary Sensor Component" -params: - seo: - description: Information about the base representation of all binary sensors. - image: folder-open.svg +sidebar: + label: "Binary Sensor Component" --- +import APIRef from '@components/APIRef.astro'; + With ESPHome you can use different types of binary sensors. They will automatically appear in the Home Assistant front-end and have several configuration options. -{{< anchor "config-binary_sensor" >}} + ## Base Binary Sensor Configuration @@ -35,7 +35,7 @@ Configuration variables: > you want the binary sensor to use that name, you can set `name: None`. - **device_class** (*Optional*, string): The device class for the - sensor. See + sensor. See [https://www.home-assistant.io/integrations/binary_sensor/#device-class](https://www.home-assistant.io/integrations/binary_sensor/#device-class) for a list of available options. - **icon** (*Optional*, icon): Manually set the icon to use for the binary sensor in the frontend. @@ -80,7 +80,7 @@ Advanced options: a `binary_sensor.invalidate_state` action has been executed. The default is `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -89,7 +89,7 @@ Advanced options: ## Actions -{{< anchor "binary_sensor-invalidate_state-action" >}} + ### `binary_sensor.invalidate_state` Action @@ -103,7 +103,7 @@ on_...: The state may also be invalidated by an API call in a lambda - see the API reference linked below. -{{< anchor "binary_sensor-filters" >}} + ## Binary Sensor Filters @@ -250,7 +250,7 @@ For example, a `press` is triggered in the first moment when the button on your You can access the current state of the binary sensor in [lambdas](/automations/templates#config-lambda) using `id(binary_sensor_id).state`. -{{< anchor "binary_sensor-on_press" >}} + ### `on_press` @@ -268,7 +268,7 @@ binary_sensor: Configuration variables: See [Automation](/automations). -{{< anchor "binary_sensor-on_release" >}} + ### `on_release` @@ -286,7 +286,7 @@ binary_sensor: Configuration variables: See [Automation](/automations). -{{< anchor "binary_sensor-on_state" >}} + ### `on_state` @@ -306,7 +306,7 @@ binary_sensor: Configuration variables: See [Automation](/automations). -{{< anchor "binary_sensor-on_state_change" >}} + ### `on_state_change` @@ -330,7 +330,7 @@ binary_sensor: Configuration variables: See [Automation](/automations). -{{< anchor "binary_sensor-on_click" >}} + ### `on_click` @@ -374,7 +374,7 @@ Configuration variables: > - switch.turn_on: relay_1 > ``` -{{< anchor "binary_sensor-on_double_click" >}} + ### `on_double_click` @@ -399,7 +399,7 @@ Configuration variables: - **max_length** (*Optional*, [Time](/guides/configuration-types#time)): The maximum duration the click should last. Defaults to `350ms`. - See [Automation](/automations). -{{< anchor "binary_sensor-on_multi_click" >}} + ### `on_multi_click` @@ -498,8 +498,8 @@ binary_sensor: - delay: 0.1s ``` -{{< anchor "binary_sensor-is_on_condition" >}} -{{< anchor "binary_sensor-is_off_condition" >}} + + ### `binary_sensor.is_on` / `binary_sensor.is_off` Condition @@ -514,7 +514,7 @@ on_...: binary_sensor.is_on: my_binary_sensor ``` -{{< anchor "binary_sensor-lambda_calls" >}} + ### lambda calls @@ -545,4 +545,4 @@ advanced stuff. ## See Also -- {{< apiref "binary_sensor/binary_sensor.h" "binary_sensor/binary_sensor.h" >}} +- diff --git a/content/components/binary_sensor/lvgl.md b/src/content/docs/components/binary_sensor/lvgl.mdx similarity index 60% rename from content/components/binary_sensor/lvgl.md rename to src/content/docs/components/binary_sensor/lvgl.mdx index 64fbf2f4d4..b06d22f3e3 100644 --- a/content/components/binary_sensor/lvgl.md +++ b/src/content/docs/components/binary_sensor/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL widget binary sensor." title: "LVGL Binary Sensor" -params: - seo: - description: Instructions for setting up an LVGL widget binary sensor. - image: ../images/lvgl_c_bns.png --- The `lvgl` binary sensor platform creates a binary sensor from an LVGL widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widget is [`button`](/components/lvgl/widgets#lvgl-widget-button). A single binary sensor supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome binary sensor component. @@ -28,12 +24,12 @@ binary_sensor: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Button widget](/components/lvgl/widgets#lvgl-widget-button) -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) diff --git a/content/components/binary_sensor/modbus_controller.md b/src/content/docs/components/binary_sensor/modbus_controller.mdx similarity index 82% rename from content/components/binary_sensor/modbus_controller.md rename to src/content/docs/components/binary_sensor/modbus_controller.mdx index 69b59ce821..ec6dda7d95 100644 --- a/content/components/binary_sensor/modbus_controller.md +++ b/src/content/docs/components/binary_sensor/modbus_controller.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up a modbus_controller device binary sensor." title: "Modbus Controller Binary Sensor" -params: - seo: - description: Instructions for setting up a modbus_controller device binary sensor. - image: modbus.png --- +import APIClass from '@components/APIClass.astro'; + The `modbus_controller` binary sensor platform creates a binary sensor from a modbus_controller component -and requires {{< docref "/components/modbus_controller" >}} to be configured. +and requires [Modbus Controller](/components/modbus_controller/) to be configured. ## Configuration variables @@ -33,7 +31,7 @@ and requires {{< docref "/components/modbus_controller" >}} to be configured. Lambda to be evaluated every update interval to get the new value of the sensor. Parameters: - **x** (bool): The parsed float value of the modbus data - - **data** (std::vector): vector containing the complete raw modbus response bytes for this sensor + - **data** (`std::vector`): vector containing the complete raw modbus response bytes for this sensor - **item** (const pointer to a ModbusBinarySensor object): The sensor object itself. Possible return values for the lambda: @@ -58,13 +56,13 @@ binary_sensor: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} -- -- {{< apiclass "modbus_controller::ModbusBinarySensor" "modbus_controller::ModbusBinarySensor" >}} +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) +- [https://www.modbustools.com/modbus.html](https://www.modbustools.com/modbus.html) +- diff --git a/content/components/binary_sensor/mpr121.md b/src/content/docs/components/binary_sensor/mpr121.mdx similarity index 90% rename from content/components/binary_sensor/mpr121.md rename to src/content/docs/components/binary_sensor/mpr121.mdx index aa5e49175c..6a03401b52 100644 --- a/content/components/binary_sensor/mpr121.md +++ b/src/content/docs/components/binary_sensor/mpr121.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up MPR121 Capacitive Touch Sensor" title: "MPR121 Capacitive Touch Sensor" -params: - seo: - description: Instructions for setting up MPR121 Capacitive Touch Sensor - image: mpr121.jpg --- -{{< anchor "mpr121-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import mpr121FullImg from './images/mpr121-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -16,7 +17,12 @@ The `mpr121` sensor platform allows you to use your MPR121 [Adafruit](https://learn.adafruit.com/adafruit-mpr121-12-key-capacitive-touch-sensor-breakout-tutorial/overview)) Capacitive Touch Sensor with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="mpr121-full.jpg" alt="Image" caption="MPR121 Capacitive Touch Sensor. Image by [Adafruit](https://www.adafruit.com)." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -100,5 +106,5 @@ For example: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "mpr121/mpr121.h" "mpr121/mpr121.h" >}} - [Adafruit MPR121 Library](https://github.com/adafruit/Adafruit_MPR121_Library) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/binary_sensor/nextion.md b/src/content/docs/components/binary_sensor/nextion.mdx similarity index 89% rename from content/components/binary_sensor/nextion.md rename to src/content/docs/components/binary_sensor/nextion.mdx index e8e721692f..216f60841d 100644 --- a/content/components/binary_sensor/nextion.md +++ b/src/content/docs/components/binary_sensor/nextion.mdx @@ -1,18 +1,16 @@ --- description: "Instructions for setting up Nextion binary sensor." title: "Nextion Binary Sensor Component" -params: - seo: - description: Instructions for setting up Nextion binary sensor. - image: nextion.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "nextion_binary_sensor" >}} + + The `nextion` binary sensor platform supports the many switched components in the Nextion as well as integer variables (>0 == true). It can be a component or variable in the Nextion display. It is best to set the components vscope to global in the Nextion Editor. This way the component will be available if the page is shown or not. -See {{< docref "/components/display/nextion" >}} for setting up the display +See [Nextion](/components/display/nextion/) for setting up the display ```yaml # Example configuration entry @@ -82,7 +80,7 @@ should be prefixed with the page name (page0/page1). *Example:* `nextion_component_name: page0.r0` -{{< anchor "binary_sensor-nextion-publish_action" >}} + ## `binary_sensor.nextion.publish` Action @@ -125,22 +123,22 @@ on_...: > [!NOTE] > This action can also be written in lambdas. See [Lambda Calls](#nextion_binary_sensor_lambda_calls) -{{< anchor "nextion_binary_sensor_lambda_calls" >}} + ## Lambda Calls From [lambdas](/automations/templates#config-lambda), you can call several methods to access some -more advanced functions (see the full {{< apiref "nextion/binary_sensor/nextion_binarysensor.h" "nextion/binary_sensor/nextion_binarysensor.h" >}} for more info). +more advanced functions (see the full for more info). -{{< anchor "nextion_binary_sensor_set_state" >}} + - `set_state(bool value, bool publish, bool send_to_nextion)` : Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion. -{{< anchor "nextion_binary_sensor_update" >}} + - `update()` : Poll from the Nextion -{{< anchor "nextion_binary_sensor_settings" >}} + - `set_background_color(Color color)` : Sets the background color to **Color** - `set_background_pressed_color(Color color)` : Sets the background color to **Color** @@ -148,7 +146,7 @@ more advanced functions (see the full {{< apiref "nextion/binary_sensor/nextion_ - `set_foreground_pressed_color(Color color)` : Sets the background color to **Color** - `set_visible(bool visible)` : Sets visible or not. If set to false, no updates will be sent to the component -{{< anchor "nextion_binary_sensor_how_things_update" >}} + ## How things Update @@ -174,7 +172,7 @@ Using the above yaml example: > [!NOTE] > No updates will be sent to the Nextion if it is sleeping. Once it wakes the components will be updated. If a component is invisible, `visible(false)`, then it won't update until it is set to be visible. -{{< anchor "nextion_custom_binary_sensor_protocol" >}} + ## Nextion Custom Binary Sensor Protocol @@ -198,6 +196,6 @@ printh FF FF FF ## See Also -- {{< docref "/components/display/nextion" >}} -- {{< docref "index/" >}} -- {{< apiref "nextion/binary_sensor/nextion_binarysensor.h" "nextion/binary_sensor/nextion_binarysensor.h" >}} +- [Nextion TFT LCD Display](/components/display/nextion/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/binary_sensor/nfc.md b/src/content/docs/components/binary_sensor/nfc.mdx similarity index 79% rename from content/components/binary_sensor/nfc.md rename to src/content/docs/components/binary_sensor/nfc.mdx index 3ec825c132..76904bb0d9 100644 --- a/content/components/binary_sensor/nfc.md +++ b/src/content/docs/components/binary_sensor/nfc.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up a NFC binary sensor in ESPHome" title: "NFC Binary Sensor" -params: - seo: - description: Instructions for setting up a NFC binary sensor in ESPHome - image: nfc.png --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "nfc-platform" >}} + + The `nfc` binary sensor platform provides an easy way for you to determine if an NFC tag is presented to the reader. The tag may be identified in one of three ways: @@ -16,7 +14,7 @@ The tag may be identified in one of three ways: - By a given NDEF tag "name", or... - By a given string contained in the tag's NDEF message/data -Note that this platform is currently supported by the {{< docref "../pn7150" "PN7150" >}} and {{< docref "../pn7160" "PN716x" >}} only; +Note that this platform is currently supported by the [PN7150](/components/pn7150/) and [PN716x](/components/pn7160/) only; one of these components must be present in your device's configuration in order to use it. ```yaml @@ -47,7 +45,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "nfc-setting_up_tags" >}} + ## Setting Up Tags @@ -56,7 +54,7 @@ prepared using the Home Assistant Companion app) or (part of) a string that is c To obtain a tag's UID: -- Set up a simple NFC component (such as the {{< docref "pn532" "PN532" >}}, {{< docref "../pn7150" "PN7150" >}} or {{< docref "../pn7160" "PN716x" >}}) +- Set up a simple NFC component (such as the [PN532](/components/binary_sensor/pn532/), [PN7150](/components/pn7150/) or [PN716x](/components/pn7160/)) configuration without any binary sensors. - Approach the NFC reader with an NFC tag. When the tag is sufficiently close to the reader, you'll see a message in the @@ -83,10 +81,10 @@ cards/tags to share the same message. ## See Also -- {{< docref "index/" >}} -- {{< docref "pn532/" >}} -- {{< docref "../pn7150" >}} -- {{< docref "../pn7160" >}} -- {{< apiref "pn532/pn532.h" "pn532/pn532.h" >}} -- {{< apiref "pn7150/pn7150.h" "pn7150/pn7150.h" >}} -- {{< apiref "pn7160/pn7160.h" "pn7160/pn7160.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [PN532 NFC/RFID](/components/binary_sensor/pn532/) +- [PN7150 NFC](/components/pn7150/) +- [PN7160 NFC](/components/pn7160/) +- +- +- diff --git a/content/components/binary_sensor/packet_transport.md b/src/content/docs/components/binary_sensor/packet_transport.mdx similarity index 91% rename from content/components/binary_sensor/packet_transport.md rename to src/content/docs/components/binary_sensor/packet_transport.mdx index a471b9805b..caab070545 100644 --- a/content/components/binary_sensor/packet_transport.md +++ b/src/content/docs/components/binary_sensor/packet_transport.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up a packet transport binary sensor." title: "Packet Transport Binary Sensor" -params: - seo: - description: Instructions for setting up a packet transport binary sensor. - image: packet_transport.svg --- The `packet_transport` binary sensor platform allows you to receive binary sensor data directly from another ESPHome node. @@ -52,6 +48,6 @@ configured. ## See Also -- {{< docref "/components/packet_transport" >}} -- {{< docref "/components/sensor" >}} +- [Packet Transport Component](/components/packet_transport/) +- [Sensor Component](/components/sensor/) - [Automation](/automations) diff --git a/content/components/binary_sensor/pn532.md b/src/content/docs/components/binary_sensor/pn532.mdx similarity index 90% rename from content/components/binary_sensor/pn532.md rename to src/content/docs/components/binary_sensor/pn532.mdx index 3974aa5e72..26f45a93f0 100644 --- a/content/components/binary_sensor/pn532.md +++ b/src/content/docs/components/binary_sensor/pn532.mdx @@ -1,13 +1,15 @@ --- description: "Instructions for setting up PN532 NFC tag readers and tags in ESPHome" title: "PN532 NFC/RFID" -params: - seo: - description: Instructions for setting up PN532 NFC tag readers and tags in ESPHome - image: pn532.jpg --- -{{< anchor "pn532-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import pn532FullImg from './images/pn532-full.jpg'; +import pn532SpiImg from './images/pn532-spi.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -17,7 +19,7 @@ with ESPHome. This component is a global hub that establishes the connection to outputs its data. Using the [PN532 binary sensors](#pn532-tag) you can then create individual binary sensors that track if an NFC/RFID tag is currently detected by the PN532. -{{< img src="pn532-full.jpg" alt="Image" width="60.0%" class="align-center" >}} + See [Setting Up Tags](#pn532-setting_up_tags) for information on how to setup individual binary sensors for this component. @@ -65,9 +67,14 @@ binary_sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this component. -{{< img src="pn532-spi.jpg" alt="Image" caption="Example for hooking up the PN532 via SPI. Notice the position of the two switches on the right." width="80.0%" class="align-center" >}} +
    -{{< anchor "pn532-on_tag" >}} + ## Over I²C @@ -133,7 +140,7 @@ pn532_...: ``` Alternatively you could also send the value directly to Home Assistant via a -{{< docref "/components/sensor/template" "template sensor" >}}. +[template sensor](/components/sensor/template/). ```yaml pn532_...: @@ -150,7 +157,7 @@ text_sensor: id: rfid_tag ``` -{{< anchor "pn532-on_tag_removed" >}} + ## `on_tag_removed` @@ -170,7 +177,7 @@ pn532: payload: !lambda 'return x;' ``` -{{< anchor "pn532-tag" >}} + ## `pn532` Binary Sensor @@ -201,7 +208,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "pn532-setting_up_tags" >}} + ## Setting Up Tags @@ -217,13 +224,13 @@ Found new tag '74-10-37-94' Then copy this id and create a `binary_sensor` entry as in the configuration example. Repeat this process for each tag. -{{< anchor "pn532-ndef" >}} + ## NDEF The PN532 supports reading and writing NDEF formatted data into the cards. -{{< anchor "pn532-ndef_reading" >}} + ### NDEF reading @@ -252,7 +259,7 @@ pn532_...: return x; ``` -{{< anchor "pn532-ndef_writing" >}} + ### NDEF Writing @@ -287,7 +294,7 @@ on_... ## See Also -- {{< docref "index/" >}} -- {{< docref "rdm6300/" >}} -- {{< docref "rc522/" >}} -- {{< apiref "pn532/pn532.h" "pn532/pn532.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [RDM6300 NFC/RFID](/components/binary_sensor/rdm6300/) +- [RC522 NFC/RFID](/components/binary_sensor/rc522/) +- diff --git a/content/components/binary_sensor/qwiic_pir.md b/src/content/docs/components/binary_sensor/qwiic_pir.mdx similarity index 84% rename from content/components/binary_sensor/qwiic_pir.md rename to src/content/docs/components/binary_sensor/qwiic_pir.mdx index 2b0b9cbdeb..91c34ca4c3 100644 --- a/content/components/binary_sensor/qwiic_pir.md +++ b/src/content/docs/components/binary_sensor/qwiic_pir.mdx @@ -1,16 +1,23 @@ --- description: "Instructions for setting up the Qwiic PIR Motion binary sensor." title: "Qwiic PIR Motion Binary Sensor" -params: - seo: - description: Instructions for setting up the Qwiic PIR Motion binary sensor. - image: qwiic_pir.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The Qwiic PIR Motion binary sensor allows you to use your Qwiic PIR ([EKMC4607112K based](https://www.sparkfun.com/products/17374), [EKMB1107112 based](https://www.sparkfun.com/products/17375), [firmware documentation](https://github.com/sparkfun/Qwiic_PIR)) sensors from SparkFun with ESPHome. -{{< img src="qwiic_pir.jpg" alt="Image" caption="SparkFun Qwiic PIR sensor. (Credit: [Sparkfun](https://www.sparkfun.com/products/17374), image cropped and compressed)" width="30.0%" class="align-center" >}} +
    The SparkFun Qwiic PIR Motion binary sensor uses PIR sensors to detect motion. It communicates over I²C. There are two models currently available. One uses the [Panasonic EKMC4607112K sensor](https://cdn.sparkfun.com/assets/7/2/a/4/3/EKMC460711xK_Spec.pdf), and the other uses the [Panasonic EKMB1107112 sensor](https://cdn.sparkfun.com/assets/c/e/8/7/5/EKMB110711x_Spec.pdf). @@ -32,7 +39,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "debounce-modes" >}} + ### Debounce Modes @@ -59,6 +66,6 @@ There are three options for `debounce_mode`. ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "qwiic_pir/qwiic_pir.h" "qwiic_pir/qwiic_pir.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) - [SparkFun Qwiic PIR Library](https://github.com/sparkfun/SparkFun_Qwiic_PIR_Arduino_Library) by [SparkFun](https://www.sparkfun.com/) +- diff --git a/content/components/binary_sensor/rc522.md b/src/content/docs/components/binary_sensor/rc522.mdx similarity index 92% rename from content/components/binary_sensor/rc522.md rename to src/content/docs/components/binary_sensor/rc522.mdx index 710c44f746..5cb0c011dd 100644 --- a/content/components/binary_sensor/rc522.md +++ b/src/content/docs/components/binary_sensor/rc522.mdx @@ -1,15 +1,15 @@ --- description: "Instructions for setting up RC522 NFC/RFID tag readers and tags in ESPHome" title: "RC522 NFC/RFID" -params: - seo: - description: Instructions for setting up RC522 NFC/RFID tag readers and tags in ESPHome - image: rc522.jpg --- -{{< anchor "rc522-component" >}} +import { Image } from 'astro:assets'; +import rc522FullImg from './images/rc522-full.jpg'; +import APIRef from '@components/APIRef.astro'; -{{< img src="rc522-full.jpg" alt="Image" width="60.0%" class="align-center" >}} + + + The `rc522` component allows you to use RC522 NFC/RFID controllers ([datasheet](https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf), [Ali Express](https://www.aliexpress.com/item/1260729519.html)) @@ -108,7 +108,7 @@ binary_sensor: ## Triggers -{{< anchor "rc522-on_tag" >}} + ### `on_tag` Trigger @@ -138,7 +138,7 @@ rc522_spi: # or rc522_i2c - homeassistant.tag_scanned: !lambda 'return x;' ``` -{{< anchor "rc522-on_tag_removed" >}} + ### `on_tag_removed` Trigger @@ -157,7 +157,7 @@ rc522_spi: # or rc522_i2c payload: !lambda 'return x;' ``` -{{< anchor "rc522-binary_sensor" >}} + ## `rc522` Binary Sensor @@ -188,7 +188,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "rc522-setting_up_tags" >}} + ## Setting Up Tags @@ -205,7 +205,7 @@ Then copy this id and create a `binary_sensor` entry as in the configuration exa ## See Also -- {{< docref "index/" >}} -- {{< docref "rdm6300/" >}} -- {{< docref "pn532/" >}} -- {{< apiref "rc522/rc522.h" "rc522/rc522.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [RDM6300 NFC/RFID](/components/binary_sensor/rdm6300/) +- [PN532 NFC/RFID](/components/binary_sensor/pn532/) +- diff --git a/content/components/binary_sensor/rdm6300.md b/src/content/docs/components/binary_sensor/rdm6300.mdx similarity index 84% rename from content/components/binary_sensor/rdm6300.md rename to src/content/docs/components/binary_sensor/rdm6300.mdx index ce5434aa54..779e81dbbd 100644 --- a/content/components/binary_sensor/rdm6300.md +++ b/src/content/docs/components/binary_sensor/rdm6300.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up RDM6300 NFC/RFID tag readers and tags in ESPHome." title: "RDM6300 NFC/RFID" -params: - seo: - description: Instructions for setting up RDM6300 NFC/RFID tag readers and tags in ESPHome. - image: rdm6300.jpg --- -{{< anchor "rdm6300-component" >}} +import { Image } from 'astro:assets'; +import rdm6300FullImg from './images/rdm6300-full.jpg'; +import rdm6300UiImg from './images/rdm6300-ui.png'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -17,7 +18,7 @@ with ESPHome. This component is a global hub that establishes the connection to translates the received data. Using the [RDM6300 binary sensors](#rdm6300-tag) you can then create individual binary sensors that track if an NFC/RFID tag is currently detected by the RDM6300. -{{< img src="rdm6300-full.jpg" alt="Image" width="60.0%" class="align-center" >}} + See [Setting Up Tags](#rdm6300-setting_up_tags) for information on how to setup individual binary sensors for this component. @@ -49,7 +50,7 @@ binary_sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this component. -{{< anchor "rdm6300-on_tag" >}} + ## `on_tag` @@ -79,7 +80,7 @@ rdm6300: - homeassistant.tag_scanned: !lambda 'return to_string(x);' ``` -{{< anchor "rdm6300-tag" >}} + ## `rdm6300` Binary Sensor @@ -105,7 +106,7 @@ binary_sensor: - **uid** (**Required**, int): The unique ID of the NFC/RFID tag. - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "rdm6300-setting_up_tags" >}} + ## Setting Up Tags @@ -121,10 +122,10 @@ Found new tag with ID '7616525' Then copy this id and create a `binary_sensor` entry as in the configuration example. Repeat this process for each tag. -{{< img src="rdm6300-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ## See Also -- {{< docref "pn532/" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "rdm6300/rdm6300.h" "rdm6300/rdm6300.h" >}} +- [PN532 NFC/RFID](/components/binary_sensor/pn532/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/binary_sensor/sdl.md b/src/content/docs/components/binary_sensor/sdl.mdx similarity index 81% rename from content/components/binary_sensor/sdl.md rename to src/content/docs/components/binary_sensor/sdl.mdx index fb793b20ff..e240347cf4 100644 --- a/content/components/binary_sensor/sdl.md +++ b/src/content/docs/components/binary_sensor/sdl.mdx @@ -1,9 +1,6 @@ --- description: "Instructions for setting up an SDL keyboard binary sensor." title: "SDL Binary Sensor" -params: - seo: - description: Instructions for setting up an SDL keyboard binary sensor. --- The `sdl` binary sensor platform creates a binary sensor from keyboard presses on the host platform. @@ -25,5 +22,5 @@ binary_sensor: ## See Also -- {{< docref "/components/host" "Host Platform" >}} +- [Host Platform](/components/host/) - [SDL display](/components/display/sdl#sdl) diff --git a/content/components/binary_sensor/status.md b/src/content/docs/components/binary_sensor/status.mdx similarity index 54% rename from content/components/binary_sensor/status.md rename to src/content/docs/components/binary_sensor/status.mdx index 8d545918a8..c55435d083 100644 --- a/content/components/binary_sensor/status.md +++ b/src/content/docs/components/binary_sensor/status.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up status binary sensors." title: "Status Binary Sensor" -params: - seo: - description: Instructions for setting up status binary sensors. - image: server-network.svg --- +import { Image } from 'astro:assets'; +import statusUiImg from './images/status-ui.png'; +import APIRef from '@components/APIRef.astro'; + The Status Binary Sensor exposes the node state (if it's connected to via MQTT/native API) for Home Assistant. -{{< img src="status-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -21,12 +21,12 @@ binary_sensor: ## Configuration variables -- **update_interval** (*Optional*, {{< docref "/guides/configuration-types#time" "Time" >}}): The interval +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the connection status. Defaults to `1s`. - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). (Inverted mode is not supported) ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< docref "/components/mqtt" >}} -- {{< apiref "status/status_binary_sensor.h" "status/status_binary_sensor.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [MQTT Client Component](/components/mqtt/) +- diff --git a/content/components/binary_sensor/switch.md b/src/content/docs/components/binary_sensor/switch.mdx similarity index 69% rename from content/components/binary_sensor/switch.md rename to src/content/docs/components/binary_sensor/switch.mdx index aa3010724c..5c4d9cf6c4 100644 --- a/content/components/binary_sensor/switch.md +++ b/src/content/docs/components/binary_sensor/switch.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up switch binary sensors with ESPHome." title: "Switch Binary Sensor" -params: - seo: - description: Instructions for setting up switch binary sensors with ESPHome. --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "switch-binary-sensor" >}} + + The Switch Binary Sensor platform allows you to view the state of any switch component as a read-only binary sensor. @@ -31,5 +30,5 @@ switch: ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "switch/binary_sensor/switch_binary_sensor.h" "switch/binary_sensor/switch_binary_sensor.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/binary_sensor/template.md b/src/content/docs/components/binary_sensor/template.mdx similarity index 88% rename from content/components/binary_sensor/template.md rename to src/content/docs/components/binary_sensor/template.mdx index 270deaa487..33b0c86f4c 100644 --- a/content/components/binary_sensor/template.md +++ b/src/content/docs/components/binary_sensor/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template binary sensors." title: "Template Binary Sensor" -params: - seo: - description: Instructions for setting up template binary sensors. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` binary sensor platform allows you to define a boolean condition and use it to provide a binary sensor. The condition may be expressed as a C++ lambda, or as a [YAML expression](/automations/actions#all-conditions). @@ -55,7 +53,7 @@ binary_sensor: - **condition** (*Optional*, [Condition](/automations/actions#all-conditions)): The condition to check to determine the value of the binary sensor. `lambda` and `condition` may not both be present in the configuration. - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "binary_sensor-template-publish_action" >}} + ## `binary_sensor.template.publish` Action @@ -96,7 +94,7 @@ Configuration options: ## See Also -- {{< docref "/components/binary_sensor" >}} -- {{< docref "/components/sensor/template" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [Template Sensor](/components/sensor/template/) - [Automation](/automations) -- {{< apiref "template/binary_sensor/template_binary_sensor.h" "template/binary_sensor/template_binary_sensor.h" >}} +- diff --git a/content/components/binary_sensor/ttp229.md b/src/content/docs/components/binary_sensor/ttp229.mdx similarity index 82% rename from content/components/binary_sensor/ttp229.md rename to src/content/docs/components/binary_sensor/ttp229.mdx index 8564ee7ade..1b081593ae 100644 --- a/content/components/binary_sensor/ttp229.md +++ b/src/content/docs/components/binary_sensor/ttp229.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up TTP229 Capacitive Touch Sensor" title: "TTP229 Capacitive Touch Sensor" -params: - seo: - description: Instructions for setting up TTP229 Capacitive Touch Sensor - image: ttp229.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ttp229FullImg from './images/ttp229-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ttp229` component allows you to use your TTP229 [datasheet](https://www.tontek.com.tw/uploads/product/106/TTP229-LSF_V1.0_EN.pdf) Capacitive Touch Sensor with ESPHome. @@ -15,7 +16,12 @@ There are two types of this sensor: - **ttp229_lsf**: The [I²C](/components/i2c) version of the sensor, uses SDA+SCL pins. - **ttp229_bsf**: The pin-based version of the sensor, uses SDO+SCL pins. -{{< img src="ttp229-full.jpg" alt="Image" caption="TTP229 Capacitive Touch Sensor. Image by RobotDyn." width="50.0%" class="align-center" >}} +
    ## `ttp229_lsf` Component @@ -80,5 +86,5 @@ Configuration variables: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ttp229_lsf/ttp229_lsf.h" "ttp229_lsf/ttp229_lsf.h" >}} -- {{< apiref "ttp229_bsf/ttp229_bsf.h" "ttp229_bsf/ttp229_bsf.h" >}} +- +- diff --git a/content/components/binary_sensor/tuya.md b/src/content/docs/components/binary_sensor/tuya.mdx similarity index 61% rename from content/components/binary_sensor/tuya.md rename to src/content/docs/components/binary_sensor/tuya.mdx index e3d6434b5b..57b3ea4fe3 100644 --- a/content/components/binary_sensor/tuya.md +++ b/src/content/docs/components/binary_sensor/tuya.mdx @@ -1,13 +1,12 @@ --- description: "Instructions for setting up a Tuya device binary sensor." title: "Tuya Binary Sensor" -params: - seo: - description: Instructions for setting up a Tuya device binary sensor. --- +import APIRef from '@components/APIRef.astro'; + The `tuya` binary sensor platform creates a binary sensor from a -tuya component and requires {{< docref "/components/tuya" >}} to be configured. +tuya component and requires [Tuya](/components/tuya/) to be configured. You can create the binary sensor as follows: @@ -26,6 +25,6 @@ binary_sensor: ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "tuya/binary_sensor/tuya_binary_sensor.h" "tuya/binary_sensor/tuya_binary_sensor.h" >}} +- [Tuya MCU](/components/tuya/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/ble_client.md b/src/content/docs/components/ble_client.mdx similarity index 92% rename from content/components/ble_client.md rename to src/content/docs/components/ble_client.mdx index d5e5ed1b03..e2a8775227 100644 --- a/content/components/ble_client.md +++ b/src/content/docs/components/ble_client.mdx @@ -1,11 +1,9 @@ --- description: "Configuration of the BLE client on ESP32." title: "BLE Client" -params: - seo: - description: Configuration of the BLE client on ESP32. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `ble_client` component enables connections to Bluetooth Low Energy devices in order to query and control them. This component does not expose any sensors or output components itself, but merely manages @@ -15,7 +13,7 @@ connections to them for use by other components. > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. > [!NOTE] @@ -25,7 +23,7 @@ connections to them for use by other components. > This component supports devices that require a 6 digit PIN code for authentication. > > Currently, devices connected with the client cannot be supported by other components based on -> {{< docref "/components/esp32_ble_tracker" >}} as they listen to advertisements which are only sent by devices +> [Esp32 Ble Tracker](/components/esp32_ble_tracker/) as they listen to advertisements which are only sent by devices > without an active connection. Despite the last point above, the `ble_client` component requires the `esp32_ble_tracker` component in order @@ -43,7 +41,7 @@ ble_client: ## Configuration variables - **mac_address** (**Required**, MAC Address): The MAC address of the BLE device to connect to. -- **auto_connect** (*Optional*, boolean): If true the device will be automatically connected when found by the {{< docref "/components/esp32_ble_tracker" >}}. Defaults to true. +- **auto_connect** (*Optional*, boolean): If true the device will be automatically connected when found by the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). Defaults to true. - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID to use for code generation, and for reference by dependent components. Automations: @@ -65,7 +63,7 @@ Automations: ## BLE Client Automation -{{< anchor "ble_client-on_connect" >}} + ### `on_connect` @@ -81,7 +79,7 @@ ble_client: ESP_LOGD("ble_client_lambda", "Connected to BLE device"); ``` -{{< anchor "ble_client-on_disconnect" >}} + ### `on_disconnect` @@ -97,7 +95,7 @@ ble_client: ESP_LOGD("ble_client_lambda", "Disconnected from BLE device"); ``` -{{< anchor "ble_client-on_passkey_request" >}} + ### `on_passkey_request` @@ -114,7 +112,7 @@ ble_client: passkey: 123456 ``` -{{< anchor "ble_client-on_passkey_notification" >}} + ### `on_passkey_notification` @@ -131,7 +129,7 @@ ble_client: args: [ passkey ] ``` -{{< anchor "ble_client-on_numeric_comparison_request" >}} + ### `on_numeric_comparison_request` @@ -151,7 +149,7 @@ ble_client: accept: True ``` -{{< anchor "ble_client-connect_action" >}} + ## `ble_client.connect` Action @@ -193,14 +191,14 @@ Any actions after the `connect` action will proceed only after the connect succe fails the subsequent actions in the automation block will *not* be executed. This should be considered if scanning has been stopped - another mechanism may be required to restart it. -{{< anchor "ble_client-disconnect_action" >}} + ## `ble_client.disconnect` Action This action disconnects a device that was connected with the `ble_client.connect` action. Execution of the automation block sequence resumes after the disconnect has completed. -{{< anchor "ble_client-ble_write_action" >}} + ## `ble_client.ble_write` Action @@ -243,7 +241,7 @@ switch: - **characteristic_uuid** (**Required**, UUID): UUID of the service's characteristic to write to. - **value** (**Required**, Array of bytes or [lambda](/automations/templates#config-lambda)): The value to be written. -{{< anchor "ble_client-passkey_reply_action" >}} + ## `ble_client.passkey_reply` Action @@ -264,7 +262,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): ID of the associated BLE client. - **passkey** (**Required**, int): The 6-digit passkey. -{{< anchor "ble_client-numeric_comparison_reply_action" >}} + ## `ble_client.numeric_comparison_reply` Action @@ -286,7 +284,7 @@ on_...: - **accept** (**Required**, boolean): Should be `true` if the passkeys displayed on both BLE devices are matching. -{{< anchor "ble_client-remove_bond_action" >}} + ## `ble_client.remove_bond` Action @@ -362,12 +360,12 @@ characteristics and descriptors also provide a small 2-byte ## Setting Up Devices Whilst the component can connect to most BLE devices, useful functionality -is only obtained through dependent components, such as {{< docref "/components/sensor/ble_client" >}}. +is only obtained through dependent components, such as [Ble Client](/components/sensor/ble_client/). See the documentation for these components for details on setting up specific devices. In order to use the `ble_client` component, you need to enable the -{{< docref "/components/esp32_ble_tracker" >}} component. This will also allow you to discover +[Esp32 Ble Tracker](/components/esp32_ble_tracker/) component. This will also allow you to discover the MAC address of the device. When you have discovered the MAC address of the device, you can add it @@ -418,7 +416,7 @@ display them in the log: The discovered services can then be used to enable and configure other ESPHome components, for example Service UUID 0xFFE0 is used for iTag style -keychain button events, used by the {{< docref "/components/sensor/ble_client" >}} component. +keychain button events, used by the [Ble Client](/components/sensor/ble_client/) component. ## Passkey examples @@ -493,6 +491,6 @@ ble_client: ## See Also -- {{< docref "/components/sensor/ble_client" >}} +- [BLE Client Sensor](/components/sensor/ble_client/) - [Automation](/automations) -- {{< apiref "ble_client/ble_client.h" "ble_client/ble_client.h" >}} +- diff --git a/content/components/ble_nus.md b/src/content/docs/components/ble_nus.mdx similarity index 73% rename from content/components/ble_nus.md rename to src/content/docs/components/ble_nus.mdx index 017ac6f853..86d13e6585 100644 --- a/content/components/ble_nus.md +++ b/src/content/docs/components/ble_nus.mdx @@ -1,10 +1,6 @@ --- description: "Nordic UART Service (NUS)" title: "Nordic UART Service (NUS)" -params: - seo: - description: BLE UART support using Nordic UART Service (NUS) for ESPHome logging and communication. - image: uart.svg --- The BLE NUS component provides a Bluetooth Low Energy UART interface based on the Nordic UART Service. @@ -36,4 +32,4 @@ esphome logs d.yaml --device 00:11:22:33:44:55 ## See Also -- Nordic UART Service +- Nordic UART Service [https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/bluetooth/services/nus.html](https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/bluetooth/services/nus.html) diff --git a/content/components/bluetooth_proxy.md b/src/content/docs/components/bluetooth_proxy.mdx similarity index 96% rename from content/components/bluetooth_proxy.md rename to src/content/docs/components/bluetooth_proxy.mdx index 0c9b80e5ef..0ff737cef9 100644 --- a/content/components/bluetooth_proxy.md +++ b/src/content/docs/components/bluetooth_proxy.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the Bluetooth Proxy in ESPHome." title: "Bluetooth Proxy" -params: - seo: - description: Instructions for setting up the Bluetooth Proxy in ESPHome. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + Home Assistant can expand its Bluetooth reach by communicating through the Bluetooth proxy component in ESPHome. The individual device integrations in Home Assistant (such as BTHome) will receive the data from the Bluetooth @@ -202,6 +200,6 @@ is supported, please search for it in the ## See Also -- [ESP32 BLE Tracker](/components/esp32_ble_tracker) -- {{< apiref "bluetooth_proxy/bluetooth_proxy.h" "bluetooth_proxy/bluetooth_proxy.h" >}} -- BTHome +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker) +- BTHome [https://bthome.io/](https://bthome.io/) +- diff --git a/content/components/button/factory_reset.md b/src/content/docs/components/button/factory_reset.mdx similarity index 65% rename from content/components/button/factory_reset.md rename to src/content/docs/components/button/factory_reset.mdx index 95f5530a77..b5dc6a3ebe 100644 --- a/content/components/button/factory_reset.md +++ b/src/content/docs/components/button/factory_reset.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up buttons that can remotely invalidate all ESPHome preferences stored in flash and reboot ESP." title: "Factory Reset Button" -params: - seo: - description: Instructions for setting up buttons that can remotely invalidate all ESPHome preferences stored in flash and reboot ESP. - image: restart.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `factory_reset` button allows you to remotely invalidate (reset) all ESPHome [preferences](/components/esphome#preferences-flash_write_interval) stored in flash memory and reboot your node. After reboot all states, parameters and variables will be reinitialized with their default values. This is useful: @@ -18,10 +17,10 @@ After reboot all states, parameters and variables will be reinitialized with the > **USE WITH GREAT CAUTION!** All credentials, global variables, counters and saved states stored in non-volatile memory will be lost with no chance of recovering them. > Even raw reading of flash memory with `esptool` will not help, since data is physically erased from flash memory. > -> For devices configured using {{< docref "/components/captive_portal" "captive portal" >}}, this will reset WiFi settings as well, thus making such devices offline. +> For devices configured using [captive portal](/components/captive_portal/), this will reset WiFi settings as well, thus making such devices offline. > You'll need to be in close proximity to your device to configure it again using a built-in WiFi access point and captive portal. -{{< img src="factory-rst-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -36,10 +35,10 @@ button: ## See Also -- {{< docref "/components/factory_reset" >}} -- {{< docref "shutdown/" >}} -- {{< docref "restart/" >}} -- {{< docref "safe_mode/" >}} -- {{< docref "/components/switch/factory_reset" >}} -- {{< docref "template/" >}} -- {{< apiref "factory_reset/factory_reset_button.h" "factory_reset/factory_reset_button.h" >}} +- [Factory Reset](/components/factory_reset/) +- [Shutdown Button](/components/button/shutdown/) +- [Restart Button](/components/button/restart/) +- [Safe Mode Button](/components/button/safe_mode/) +- [Factory Reset Switch](/components/switch/factory_reset/) +- [Template Button](/components/button/template/) +- diff --git a/content/components/button/haier.md b/src/content/docs/components/button/haier.mdx similarity index 82% rename from content/components/button/haier.md rename to src/content/docs/components/button/haier.mdx index cc620d4cf0..7eef070e46 100644 --- a/content/components/button/haier.md +++ b/src/content/docs/components/button/haier.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up additional buttons for Haier climate devices." title: "Haier Climate Buttons" -params: - seo: - description: Instructions for setting up additional buttons for Haier climate devices. - image: haier.svg --- Additional buttons for Haier AC cleaning. **These buttons are supported only by the hOn protocol**. @@ -31,4 +27,4 @@ button: ## See Also -- {{< docref "/components/climate/haier" "Haier Climate" >}} +- [Haier Climate](/components/climate/haier/) diff --git a/content/components/button/images/generic-ui.png b/src/content/docs/components/button/images/generic-ui.png similarity index 100% rename from content/components/button/images/generic-ui.png rename to src/content/docs/components/button/images/generic-ui.png diff --git a/content/components/button/_index.md b/src/content/docs/components/button/index.mdx similarity index 85% rename from content/components/button/_index.md rename to src/content/docs/components/button/index.mdx index 4274d15fc5..d02e36f23e 100644 --- a/content/components/button/_index.md +++ b/src/content/docs/components/button/index.mdx @@ -1,15 +1,15 @@ --- description: "Instructions for setting up button components in ESPHome." title: "Button Component" -params: - seo: - description: Instructions for setting up button components in ESPHome. - image: folder-open.svg +sidebar: + label: "Button Component" --- +import APIRef from '@components/APIRef.astro'; + > [!NOTE] > To attach a physical button to ESPHome, see -> {{< docref "/components/binary_sensor/gpio" "GPIO Binary Sensor" >}}. +> [GPIO Binary Sensor](/components/binary_sensor/gpio/). ESPHome has support for components to create button entities in Home Assistant. A button entity is represented in ESPHome as a momentary switch with no state and can be triggered in Home Assistant @@ -18,7 +18,7 @@ via the UI or automations. > [!NOTE] > Home Assistant Core 2021.12 or higher is required for ESPHome button entities to work. -{{< anchor "config-button" >}} + ## Base Button Configuration @@ -55,11 +55,11 @@ Configuration variables: (usually Home Assistant) without the user manually enabling it (via the Home Assistant UI). - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - **device_class** (*Optional*, string): The device class for the button. - See + See [https://www.home-assistant.io/integrations/button/#device-class](https://www.home-assistant.io/integrations/button/#device-class) for a list of available options. - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). @@ -75,7 +75,7 @@ MQTT options: ## Button Automation -{{< anchor "button-on_press" >}} + ### `on_press` @@ -92,7 +92,7 @@ button: Configuration variables: see [Automation](/automations). -{{< anchor "button-press_action" >}} + ### `button.press` Action @@ -112,7 +112,7 @@ Configuration variables: > Assistant. If you want to trigger an automation in Home Assistant, you should use a > [Home Assistant event](/components/api#api-homeassistant_event_action) instead. -{{< anchor "button-lambda_calls" >}} + ### lambda calls @@ -127,4 +127,4 @@ From [lambdas](/automations/templates#config-lambda), you can press a button. ## See Also -- {{< apiref "button/button.h" "button/button.h" >}} +- diff --git a/content/components/button/output.md b/src/content/docs/components/button/output.mdx similarity index 68% rename from content/components/button/output.md rename to src/content/docs/components/button/output.mdx index 715a2867a6..7b30acb075 100644 --- a/content/components/button/output.md +++ b/src/content/docs/components/button/output.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up generic output buttons in ESPHome that control an output component." title: "Generic Output Button" -params: - seo: - description: Instructions for setting up generic output buttons in ESPHome that control an output component. - image: upload.svg --- +import { Image } from 'astro:assets'; +import genericUiImg from './images/generic-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `output` button platform allows you to use any output component as a button. This can for example be used to momentarily set a GPIO pin using a button. -{{< img src="generic-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -33,11 +33,11 @@ button: - All other options from [Button](/components/button#config-button). > [!NOTE] -> When used with a {{< docref "/components/output/gpio" >}}, the pin will be low by default and pulled high when the button is +> When used with a [Gpio](/components/output/gpio/), the pin will be low by default and pulled high when the button is > pressed. To invert this behaviour and have the pin pulled low when the button is pressed, set the `inverted` option > in the [Pin Schema](/guides/configuration-types#pin-schema). ## See Also -- {{< docref "/components/output" >}} -- {{< apiref "output/button/output_button.h" "output/button/output_button.h" >}} +- [Output Component](/components/output/) +- diff --git a/content/components/button/restart.md b/src/content/docs/components/button/restart.mdx similarity index 52% rename from content/components/button/restart.md rename to src/content/docs/components/button/restart.mdx index 463dd763c8..82a992f66d 100644 --- a/content/components/button/restart.md +++ b/src/content/docs/components/button/restart.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up buttons that can remotely reboot the ESP in ESPHome." title: "Restart Button" -params: - seo: - description: Instructions for setting up buttons that can remotely reboot the ESP in ESPHome. - image: restart.svg --- +import APIRef from '@components/APIRef.astro'; + The `restart` button platform allows you to restart your node remotely through Home Assistant. @@ -23,9 +21,9 @@ button: ## See Also -- {{< docref "shutdown/" >}} -- {{< docref "safe_mode/" >}} -- {{< docref "factory_reset/" >}} -- {{< docref "/components/switch/restart" >}} -- {{< docref "template/" >}} -- {{< apiref "restart/button/restart_button.h" "restart/button/restart_button.h" >}} +- [Shutdown Button](/components/button/shutdown/) +- [Safe Mode Button](/components/button/safe_mode/) +- [Factory Reset Button](/components/button/factory_reset/) +- [Restart Switch](/components/switch/restart/) +- [Template Button](/components/button/template/) +- diff --git a/src/content/docs/components/button/safe_mode.mdx b/src/content/docs/components/button/safe_mode.mdx new file mode 100644 index 0000000000..01637291e7 --- /dev/null +++ b/src/content/docs/components/button/safe_mode.mdx @@ -0,0 +1,34 @@ +--- +description: "Instructions for setting up buttons that can remotely reboot the ESP in ESPHome into safe mode." +title: "Safe Mode Button" +--- + +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + +The `safe_mode` button allows you to remotely reboot your node into [Safe Mode](/components/safe_mode/). This is useful in certain situations +where a misbehaving component is preventing Over-The-Air updates from completing successfully. + +This component requires [Safe Mode](/components/safe_mode/) to be configured. + + + +```yaml +# Example configuration entry +button: + - platform: safe_mode + name: "Living Room Restart (Safe Mode)" +``` + +## Configuration variables + +- All options from [Button](/components/button#config-button). + +## See Also + +- [Shutdown Button](/components/button/shutdown/) +- [Restart Button](/components/button/restart/) +- [Factory Reset Button](/components/button/factory_reset/) +- [Safe Mode Switch](/components/switch/safe_mode/) +- [Template Button](/components/button/template/) +- diff --git a/content/components/button/shutdown.md b/src/content/docs/components/button/shutdown.mdx similarity index 55% rename from content/components/button/shutdown.md rename to src/content/docs/components/button/shutdown.mdx index e8e2723e29..bf03af141d 100644 --- a/content/components/button/shutdown.md +++ b/src/content/docs/components/button/shutdown.mdx @@ -1,18 +1,17 @@ --- description: "Instructions for setting up buttons that can remotely shut down the ESP." title: "Shutdown Button" -params: - seo: - description: Instructions for setting up buttons that can remotely shut down the ESP. - image: power_settings.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `shutdown` button platform allows you to shutdown your node remotely through Home Assistant. It does this by putting the node into deep sleep mode with no wakeup source selected. After enabling, the only way to startup the ESP again is by pressing the reset button or restarting the power supply. -{{< img src="shutdown-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -27,9 +26,9 @@ button: ## See Also -- {{< docref "restart/" >}} -- {{< docref "safe_mode/" >}} -- {{< docref "factory_reset/" >}} -- {{< docref "/components/switch/shutdown" >}} -- {{< docref "template/" >}} -- {{< apiref "shutdown/shutdown_button.h" "shutdown/shutdown_button.h" >}} +- [Restart Button](/components/button/restart/) +- [Safe Mode Button](/components/button/safe_mode/) +- [Factory Reset Button](/components/button/factory_reset/) +- [Shutdown Switch](/components/switch/shutdown/) +- [Template Button](/components/button/template/) +- diff --git a/content/components/button/template.md b/src/content/docs/components/button/template.mdx similarity index 73% rename from content/components/button/template.md rename to src/content/docs/components/button/template.mdx index 773d5b353b..cc71f73b1d 100644 --- a/content/components/button/template.md +++ b/src/content/docs/components/button/template.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up template buttons that can execute arbitrary actions when pressed." title: "Template Button" -params: - seo: - description: Instructions for setting up template buttons that can execute arbitrary actions when pressed. - image: description.svg --- The `template` button platform allows you to create simple buttons out of just actions. Once defined, @@ -25,5 +21,5 @@ button: ## See Also -- {{< docref "/automations" >}} -- {{< docref "/components/button" >}} +- [Automation](/automations/) +- [Button Component](/components/button/) diff --git a/content/components/button/uart.md b/src/content/docs/components/button/uart.mdx similarity index 70% rename from content/components/button/uart.md rename to src/content/docs/components/button/uart.mdx index 31f96139d2..ffcabc7730 100644 --- a/content/components/button/uart.md +++ b/src/content/docs/components/button/uart.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up UART buttons in ESPHome that can output arbitrary UART sequences when activated." title: "UART Button" -params: - seo: - description: Instructions for setting up UART buttons in ESPHome that can output arbitrary UART sequences when activated. - image: uart.svg --- +import APIRef from '@components/APIRef.astro'; + The `uart` button platform allows you to send a pre-defined sequence of bytes on a -{{< docref "/components/uart" "UART bus" >}} when triggered. +[UART bus](/components/uart/) when triggered. ```yaml # Example configuration entry @@ -31,5 +29,5 @@ button: ## See Also -- {{< docref "/components/uart" >}} -- {{< apiref "uart/button/uart_button.h" "uart/button/uart_button.h" >}} +- [UART Bus](/components/uart/) +- diff --git a/content/components/button/wake_on_lan.md b/src/content/docs/components/button/wake_on_lan.mdx similarity index 71% rename from content/components/button/wake_on_lan.md rename to src/content/docs/components/button/wake_on_lan.mdx index f41a61f9c8..1b98fe187f 100644 --- a/content/components/button/wake_on_lan.md +++ b/src/content/docs/components/button/wake_on_lan.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up buttons that can send wakeup packets to computers on the network." title: "Wake-on-LAN Button" -params: - seo: - description: Instructions for setting up buttons that can send wakeup packets to computers on the network. - image: radio-tower.svg --- +import APIRef from '@components/APIRef.astro'; + The `wake_on_lan` button platform allows you to send a Wake-on-LAN magic packet to a computer on the network by specifying its MAC address. @@ -25,5 +23,5 @@ button: ## See Also -- {{< docref "template/" >}} -- {{< apiref "wake_on_lan/wake_on_lan.h" "wake_on_lan/wake_on_lan.h" >}} +- [Template Button](/components/button/template/) +- diff --git a/content/components/camera/camera_encoder.md b/src/content/docs/components/camera/camera_encoder.mdx similarity index 86% rename from content/components/camera/camera_encoder.md rename to src/content/docs/components/camera/camera_encoder.mdx index c108dd4316..28f6c4c7da 100644 --- a/content/components/camera/camera_encoder.md +++ b/src/content/docs/components/camera/camera_encoder.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the camera encoder component in ESPHome." title: "Camera Encoder" -params: - seo: - description: Instructions for setting up the camera encoder component in ESPHome. - image: camera.svg --- +import APIRef from '@components/APIRef.astro'; + The `camera_encoder` component provides image compression support for software-based cameras or cameras without internal compression. It allows raw camera frames to be compressed into a format suitable for transmission to API @@ -45,5 +43,5 @@ camera_encoder: ## See Also -- {{< apiref "camera/encoder.h" "camera/encoder.h" >}} -- {{< apiref "camera_encoder/esp32_camera_jpeg_encoder.h" "camera_encoder/esp32_camera_jpeg_encoder.h" >}} +- +- diff --git a/content/components/camera/_index.md b/src/content/docs/components/camera/index.mdx similarity index 64% rename from content/components/camera/_index.md rename to src/content/docs/components/camera/index.mdx index 0370df074d..7fec2de0c0 100644 --- a/content/components/camera/_index.md +++ b/src/content/docs/components/camera/index.mdx @@ -1,22 +1,22 @@ --- description: "Instructions for setting up cameras in ESPHome." title: "Camera Component" -params: - seo: - description: Instructions for setting up cameras in ESPHome. - image: camera.svg +sidebar: + label: "Camera Component" --- +import APIRef from '@components/APIRef.astro'; + The `camera` component is the base abstraction layer for camera implementations in ESPHome. It provides a standardized interface between camera hardware/software implementations and the ESPHome API layer. > [!NOTE] > This component cannot be used directly. It serves as the base platform that specific camera -> implementations (like {{< docref "/components/esp32_camera" >}}) build upon. +> implementations (like [Esp32 Camera](/components/esp32_camera/)) build upon. ## Overview -The camera component acts as a foundation for camera integrations, with {{< docref "/components/esp32_camera" >}} being the +The camera component acts as a foundation for camera integrations, with [Esp32 Camera](/components/esp32_camera/) being the first implementation using this framework. All camera implementations in ESPHome inherit from this base component, ensuring a consistent API @@ -26,6 +26,6 @@ for image capture and transmission to Home Assistant or other consumers. ## See Also -- {{< docref "/components/esp32_camera" >}} -- {{< docref "/components/esp32_camera_web_server" >}} -- {{< apiref "camera/camera.h" "camera/camera.h" >}} +- [ESP32 Camera Component](/components/esp32_camera/) +- [ESP32 Camera Web Server Component](/components/esp32_camera_web_server/) +- diff --git a/content/components/canbus/esp32_can.md b/src/content/docs/components/canbus/esp32_can.mdx similarity index 90% rename from content/components/canbus/esp32_can.md rename to src/content/docs/components/canbus/esp32_can.mdx index 4ba85c6456..43ca573e7d 100644 --- a/content/components/canbus/esp32_can.md +++ b/src/content/docs/components/canbus/esp32_can.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up the ESP32 CAN bus platform in ESPHome" title: "ESP32 CAN" -params: - seo: - description: Instructions for setting up the ESP32 CAN bus platform in ESPHome - image: canbus.svg --- -{{< anchor "esp32-can" >}} +import { Image } from 'astro:assets'; +import canbusEsp325vImg from './images/canbus_esp32_5v.png'; +import canbusEsp323v3Img from './images/canbus_esp32_3v3.png'; +import APIRef from '@components/APIRef.astro'; + + The ESP32 has an integrated CAN controller and therefore doesn't necessarily need an external controller. Some variants (ESP32-C5, ESP32-C6, ESP32-P4) have multiple CAN controllers - see [Multiple CAN Controllers](#multiple-can-controllers) below. @@ -75,7 +76,7 @@ canbus: > [!TIP] > The `tx_pin` is still required even in listen-only mode, as the ESP32 TWAI driver requires both pins for initialization. However, no data will be transmitted on this pin when using `LISTENONLY` mode. -{{< anchor "esp32-can-bit-rate" >}} + The following table lists the bit rates supported by the component for ESP32 variants: @@ -124,13 +125,13 @@ board with 5V this is the preferred option. R501 is important to reduce the 5V logic level down to 3.3V, to avoid damaging the ESP32. You can alternatively use a voltage divider here instead. -{{< img src="canbus_esp32_5v.png" alt="Image" class="align-center" >}} + If you prefer to only have a 3.3V power supply, special 3.3V CAN transceivers are available. -{{< img src="canbus_esp32_3v3.png" alt="Image" class="align-center" >}} + ## See Also -- {{< docref "index/" >}} -- {{< apiref "canbus/canbus.h" "canbus/canbus.h" >}} +- [Canbus Component](/components/canbus/) +- diff --git a/content/components/canbus/images/canbus_esp32_3v3.png b/src/content/docs/components/canbus/images/canbus_esp32_3v3.png similarity index 100% rename from content/components/canbus/images/canbus_esp32_3v3.png rename to src/content/docs/components/canbus/images/canbus_esp32_3v3.png diff --git a/content/components/canbus/images/canbus_esp32_5v.png b/src/content/docs/components/canbus/images/canbus_esp32_5v.png similarity index 100% rename from content/components/canbus/images/canbus_esp32_5v.png rename to src/content/docs/components/canbus/images/canbus_esp32_5v.png diff --git a/content/components/canbus/images/canbus_mcp2515_resistor.png b/src/content/docs/components/canbus/images/canbus_mcp2515_resistor.png similarity index 100% rename from content/components/canbus/images/canbus_mcp2515_resistor.png rename to src/content/docs/components/canbus/images/canbus_mcp2515_resistor.png diff --git a/content/components/canbus/images/canbus_mcp2515_txs0108e.png b/src/content/docs/components/canbus/images/canbus_mcp2515_txs0108e.png similarity index 100% rename from content/components/canbus/images/canbus_mcp2515_txs0108e.png rename to src/content/docs/components/canbus/images/canbus_mcp2515_txs0108e.png diff --git a/content/components/canbus/_index.md b/src/content/docs/components/canbus/index.mdx similarity index 97% rename from content/components/canbus/_index.md rename to src/content/docs/components/canbus/index.mdx index 628d719541..c16a046dcf 100644 --- a/content/components/canbus/_index.md +++ b/src/content/docs/components/canbus/index.mdx @@ -1,11 +1,11 @@ --- description: "Instructions for setting up an CAN bus in ESPHome" title: "CAN Bus" -params: - seo: - description: Instructions for setting up an CAN bus in ESPHome - image: canbus.svg +sidebar: + label: "CAN Bus" --- +import APIRef from '@components/APIRef.astro'; + The Controller Area Network (CAN) bus is a serial bus protocol to connect individual systems and sensors as an alternative to conventional multi-wire looms. It allows automotive components to communicate on a @@ -51,7 +51,7 @@ canbus: ESP_LOGD("can id 500", "%s", &b[0] ); ``` -{{< anchor "config-canbus" >}} + **Configuration variables:** @@ -90,13 +90,13 @@ canbus: - **on_frame** (*Optional*, [Automation](/automations)): An automation to perform when a CAN frame is received. See [`on_frame` Trigger](#canbus-on-frame). -{{< anchor "platforms-canbus" >}} + ## Platforms ## Automations -{{< anchor "canbus-on-frame" >}} + ### `on_frame` Trigger @@ -351,4 +351,4 @@ cover: ## See Also -- {{< apiref "canbus/canbus.h" "canbus/canbus.h" >}} +- diff --git a/content/components/canbus/mcp2515.md b/src/content/docs/components/canbus/mcp2515.mdx similarity index 83% rename from content/components/canbus/mcp2515.md rename to src/content/docs/components/canbus/mcp2515.mdx index 9075a5bb71..0f6b7f4da1 100644 --- a/content/components/canbus/mcp2515.md +++ b/src/content/docs/components/canbus/mcp2515.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up the MCP2515 CAN bus platform in ESPHome" title: "MCP2515" -params: - seo: - description: Instructions for setting up the MCP2515 CAN bus platform in ESPHome - image: canbus.svg --- +import { Image } from 'astro:assets'; +import canbusMcp2515ResistorImg from './images/canbus_mcp2515_resistor.png'; +import canbusMcp2515Txs0108eImg from './images/canbus_mcp2515_txs0108e.png'; +import APIRef from '@components/APIRef.astro'; + The MCP2515 communicates with ESPHome via the [SPI bus](/components/spi); to use it, you must have at least one [SPI bus](/components/spi) with both the `mosi_pin` and `miso_pin` defined in your ESPHome configuration. @@ -61,20 +62,20 @@ canbus: > compile time. Check your ESPHome device's logs for a message like `Invalid frequency/bitrate combination` > if you suspect this is an issue. -{{< anchor "mcp2515-wiring" >}} + ## Wiring options The easiest approach is to use fully assembled boards and just add one resistor on the MISO line. This runs MOSI, SCK and CS out of specification which is rarely a problem. -{{< img src="canbus_mcp2515_resistor.png" alt="Image" class="align-center" >}} + A more complex option is to properly convert the 3.3V and 5V logic levels with a level shifter. -{{< img src="canbus_mcp2515_txs0108e.png" alt="Image" class="align-center" >}} + ## See Also -- {{< docref "index/" >}} -- {{< apiref "canbus/canbus.h" "canbus/canbus.h" >}} +- [Canbus Component](/components/canbus/) +- diff --git a/content/components/captive_portal.md b/src/content/docs/components/captive_portal.mdx similarity index 73% rename from content/components/captive_portal.md rename to src/content/docs/components/captive_portal.mdx index 13048245f8..4344798e07 100644 --- a/content/components/captive_portal.md +++ b/src/content/docs/components/captive_portal.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up the Captive Portal fallback mechanism in ESPHome." title: "Captive Portal" -params: - seo: - description: Instructions for setting up the Captive Portal fallback mechanism in ESPHome. - image: wifi-strength-alert-outline.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The captive portal component in ESPHome is a fallback mechanism for when connecting to the -configured {{< docref "wifi" "WiFi" >}} fails. +configured [WiFi](/components/wifi/) fails. After 1 minute of unsuccessful WiFi connection attempts, the ESP will start a WiFi hotspot (with the credentials from your configuration) -{{< img src="captive_portal-ui.png" alt="Image" width="70.0%" class="align-center" >}} + In this web interface, you can manually override the WiFi settings of the device (please note this will be overwritten by any subsequent serial upload so make sure to also update your YAML configuration). @@ -21,7 +20,7 @@ this will be overwritten by any subsequent serial upload so make sure to also up Additionally, you can upload a new firmware file. When you connect to the fallback network, the web interface should open automatically (see also -login to network notifications). If that does not work, you can also navigate to +login to network notifications). If that does not work, you can also navigate to [http://192.168.4.1/](http://192.168.4.1/) manually in your browser. ```yaml @@ -44,7 +43,7 @@ captive_portal: ## See Also -- {{< docref "wifi/" >}} -- {{< docref "improv_serial/" >}} -- {{< docref "esp32_improv/" >}} -- {{< apiref "captive_portal/captive_portal.h" "captive_portal/captive_portal.h" >}} +- [WiFi Component](/components/wifi/) +- [Improv via Serial](/components/improv_serial/) +- [Improv via BLE](/components/esp32_improv/) +- diff --git a/content/components/cc1101.md b/src/content/docs/components/cc1101.mdx similarity index 98% rename from content/components/cc1101.md rename to src/content/docs/components/cc1101.mdx index 82d26d0f59..fdf4303bcf 100644 --- a/content/components/cc1101.md +++ b/src/content/docs/components/cc1101.mdx @@ -5,6 +5,8 @@ image: cc1101.webp keywords: [cc1101] --- +import { Image } from 'astro:assets'; + The **CC1101** component provides a driver for the **Texas Instruments CC1101** Sub-1 GHz RF Transceiver ([datasheet](https://www.ti.com/lit/ds/symlink/cc1101.pdf)). The CC1101 is a low-cost, low-power radio chip commonly used for wireless communication in the 300-928 MHz frequency bands, including the popular @@ -21,7 +23,7 @@ The component supports two operating modes: - **Packet Mode**: Built-in packet handling with sync word detection, CRC, and the `on_packet` trigger. Best for FSK/GFSK modulation when communicating with other packet-based radios. -{{< img src="cc1101.webp" alt="CC1101 Module" width="50.0%" class="align-center" >}} +CC1101 Module ## Component Configuration diff --git a/content/components/ch422g.md b/src/content/docs/components/ch422g.mdx similarity index 88% rename from content/components/ch422g.md rename to src/content/docs/components/ch422g.mdx index ad30c85e65..68fc0c45ec 100644 --- a/content/components/ch422g.md +++ b/src/content/docs/components/ch422g.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up CH422G digital port expanders in ESPHome." title: "CH422G I/O Expander" -params: - seo: - description: Instructions for setting up CH422G digital port expanders in ESPHome. - image: ch422g.svg --- +import APIRef from '@components/APIRef.astro'; + The CH422G component allows you to use the **CH422G** I/O expander in ESPHome. It uses an [I²C Bus](/components/i2c) for communication. The I²C address is not configurable as the CH422G has a separate address for each internal register. @@ -48,10 +46,10 @@ switch: Open drain mode is supported only on pins 8-11. Input is supported only on pins 0-7. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [CH422G datasheet](https://www.wch-ic.com/downloads/file/315.html?time=2024-07-29%2002:02:32&code=Fxex1sTRHysGLS6ALgh7PTOOZnAACY6KTQx05vzD) -- {{< apiref "ch422g/ch422g.h" "ch422g/ch422g.h" >}} +- diff --git a/content/components/ch423.md b/src/content/docs/components/ch423.mdx similarity index 88% rename from content/components/ch423.md rename to src/content/docs/components/ch423.mdx index 8a3ce3e737..c78ab66ebe 100644 --- a/content/components/ch423.md +++ b/src/content/docs/components/ch423.mdx @@ -1,11 +1,11 @@ --- description: "Instructions for setting up CH423 digital port expanders in ESPHome." title: "CH423 I/O Expander" -params: - seo: - description: Instructions for setting up CH423 digital port expanders in ESPHome. --- +import APIClass from '@components/APIClass.astro'; +import APIRef from '@components/APIRef.astro'; + The CH423 component allows you to use the **CH423** I/O expander in ESPHome. It uses an [I²C Bus](/components/i2c) for communication. The I²C address is not configurable as the CH423 has a separate address for each internal register. @@ -58,10 +58,11 @@ The CH423 has hardware limitations where certain settings apply globally: These restrictions are enforced at configuration validation time. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [CH423 datasheet](https://www.wch-ic.com/downloads/CH423DS1_PDF.html) -- {{< apiref "ch423/ch423.h" "ch423/ch423.h" >}} +- +- diff --git a/content/components/climate/anova.md b/src/content/docs/components/climate/anova.mdx similarity index 85% rename from content/components/climate/anova.md rename to src/content/docs/components/climate/anova.mdx index 5562aa121b..9b77efb386 100644 --- a/content/components/climate/anova.md +++ b/src/content/docs/components/climate/anova.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up an Anova sous-vide cooker." title: "Anova Cooker" -params: - seo: - description: Instructions for setting up an Anova sous-vide cooker. - image: anova.png --- +import APIRef from '@components/APIRef.astro'; + The `anova` climate platform creates a climate device which can be used to control a BLE Anova sous-vide stick. Whilst not strictly a climate @@ -25,7 +23,7 @@ This platform uses the BLE peripheral on an ESP32, so you also need to enable this component. Please see the BLE Client docs for how to discover the MAC address of your Anova device. You cannot use the Anova app over BLE whilst this component is connected, you -should disconnect it first. To setup a (dis-)connect switch, see {{< docref "/components/switch/ble_client" >}}. +should disconnect it first. To setup a (dis-)connect switch, see [Ble Client](/components/switch/ble_client/). You need to specify unit_of_measurement as 'c' or 'f'. This ensures the stick's display uses the unit you intend. All values within ESPHome are converted to Celsius so you may @@ -54,6 +52,6 @@ climate: ## See Also -- {{< docref "/components/ble_client" >}} -- {{< docref "/components/climate" >}} -- {{< apiref "anova/anova.h" "anova/anova.h" >}} +- [BLE Client](/components/ble_client/) +- [Climate Component](/components/climate/) +- diff --git a/content/components/climate/bang_bang.md b/src/content/docs/components/climate/bang_bang.mdx similarity index 91% rename from content/components/climate/bang_bang.md rename to src/content/docs/components/climate/bang_bang.mdx index 57cf234219..e4f90d4dbe 100644 --- a/content/components/climate/bang_bang.md +++ b/src/content/docs/components/climate/bang_bang.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up Bang Bang climate controllers with ESPHome." title: "Bang Bang Climate Controller" -params: - seo: - description: Instructions for setting up Bang Bang climate controllers with ESPHome. - image: air-conditioner.svg --- +import { Image } from 'astro:assets'; +import climateUiImg from './images/climate-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `bang_bang` climate platform allows you to regulate a value with a [bang-bang controller](https://en.wikipedia.org/wiki/Bang%E2%80%93bang_control) (also called hysteresis controller). > [!NOTE] -> The {{< docref "thermostat" "thermostat" >}} component behaves more like a common thermostat; it is +> The [thermostat](/components/climate/thermostat/) component behaves more like a common thermostat; it is > essentially two bang-bang controllers in one. Please see the [Bang-bang vs. Thermostat](#bang-bang-vs-thermostat) section below > if you are not sure which is appropriate for your application. @@ -47,7 +47,7 @@ There are three types of bang bang controllers this platform can represent: Do note that the actions are only called when the current temperature leaves the target temperature range. -{{< img src="climate-ui.png" alt="Image" width="60.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -108,7 +108,7 @@ Advanced options: The behavior of the bang-bang controller is a topic that has surfaced on the ESPHome Discord server countless times -- many people have been confused by what it does. While they are similar, there are -two key differences between the bang-bang component and the {{< docref "thermostat" "thermostat" >}} component: +two key differences between the bang-bang component and the [thermostat](/components/climate/thermostat/) component: - When actions are triggered - How the set points are used by the controller @@ -147,7 +147,7 @@ hysteresis window, or going past the set point in either direction, should be ex that is turned off after it reaches its set point. The heating element will remain hot (potentially for quite a while), and as such will continue to heat the air until the element fully cools down to match the ambient air/room temperature. -The {{< docref "thermostat" "thermostat" >}} component differs in that there is hysteresis around *each* set point. For example, +The [thermostat](/components/climate/thermostat/) component differs in that there is hysteresis around *each* set point. For example, if the `target_temperature_low` set point is 20 °C, and the (default) hysteresis value of 0.5 °C is used, `heat_action` is called at a temperature of 19.5 °C and `idle_action` is called at 20.5 °C. If cooling, as defined by `target_temperature_high`, is set to 22 °C, `cool_action` would be called at 22.5 °C and `idle_action` called @@ -159,7 +159,7 @@ Behavioral differences aside, there is another important difference between thes The interaction with this component via the Home Assistant user interface is also different than what is seen on most common residential thermostats. Generally speaking, most thermostats allow either one or two set points -- one of them -is associated with heating while the other with cooling, and this is exactly how the {{< docref "thermostat" "thermostat" >}} +is associated with heating while the other with cooling, and this is exactly how the [thermostat](/components/climate/thermostat/) component uses them. If you set the "heat" set point to 20 °C, most people assume this means the heating system will keep the temperature as close to 20 °C as possible. The same is true for the upper set point, for cooling: if you set a temperature of 22 °C, most people assume the cooling system will keep the temperature as close to 22 °C as possible. @@ -175,14 +175,14 @@ departs from what most people seem to expect. It comes down to two points: - If you have a dual-function system (both heating and cooling), you'll almost certainly want to use the - {{< docref "thermostat" "thermostat" >}} component. + [thermostat](/components/climate/thermostat/) component. - If you have a single-function system *and* have a specific need or desire to manually control both the upper and lower bounds for hysteresis, use the bang-bang controller. -In all other situations, the {{< docref "thermostat" "thermostat" >}} component is probably best. +In all other situations, the [thermostat](/components/climate/thermostat/) component is probably best. ## See Also -- {{< docref "/components/climate" >}} -- {{< apiref "bang_bang/bang_bang_climate.h" "bang_bang/bang_bang_climate.h" >}} +- [Climate Component](/components/climate/) +- diff --git a/content/components/climate/bedjet.md b/src/content/docs/components/climate/bedjet.mdx similarity index 92% rename from content/components/climate/bedjet.md rename to src/content/docs/components/climate/bedjet.mdx index 49220610fb..b40bf5fdac 100644 --- a/content/components/climate/bedjet.md +++ b/src/content/docs/components/climate/bedjet.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a BedJet climate device." title: "BedJet" -params: - seo: - description: Instructions for setting up a BedJet climate device. - image: bedjet.png --- +import APIRef from '@components/APIRef.astro'; + The `bedjet` component allows you to communicate with a BedJet V3 Climate Comfort Sleep System. @@ -19,7 +17,7 @@ This component supports the following functionality: - Show the current status of the BedJet This component uses the BLE peripheral on an ESP32, so you also need to enable -this component. Please see the {{< docref "/components/ble_client" >}} docs for how to discover the MAC +this component. Please see the [Ble Client](/components/ble_client/) docs for how to discover the MAC address of your BedJet device. ## Component/Hub @@ -43,7 +41,7 @@ bedjet: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. - **ble_client_id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the BLE Client. -- **time_id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/time" >}} which +- **time_id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Time](/components/time/) which can be used to set the time on the BedJet device. - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to dispatch status @@ -182,7 +180,7 @@ sensor: > use the BedJet mobile app to monitor or control the BedJet device while this component > is connected. To use the mobile app, you should disconnect the ESP client first. > -> To set up a (dis-)connect switch, see {{< docref "/components/switch/ble_client" >}}. +> To set up a (dis-)connect switch, see [Ble Client](/components/switch/ble_client/). > [!NOTE] > When more than one device is configured and connected, the ESP device may become @@ -205,6 +203,6 @@ sensor: ## See Also -- {{< docref "/components/ble_client" >}} -- {{< docref "/components/climate" >}} -- {{< apiref "bedjet/bedjet.h" "bedjet/bedjet.h" >}} +- [BLE Client](/components/ble_client/) +- [Climate Component](/components/climate/) +- diff --git a/content/components/climate/climate_ir.md b/src/content/docs/components/climate/climate_ir.mdx similarity index 89% rename from content/components/climate/climate_ir.md rename to src/content/docs/components/climate/climate_ir.mdx index 2bc4bc3fc3..058d0861bf 100644 --- a/content/components/climate/climate_ir.md +++ b/src/content/docs/components/climate/climate_ir.mdx @@ -1,16 +1,16 @@ --- description: "Controls a variety of compatible Climate devices via IR" title: "IR Remote Climate" -params: - seo: - description: Controls a variety of compatible Climate devices via IR - image: air-conditioner-ir.svg --- +import { Image } from 'astro:assets'; +import climateUiImg from './images/climate-ui.png'; +import APIRef from '@components/APIRef.astro'; + This climate component allows you to control compatible AC units by sending an infrared (IR) control signal, just as the unit's handheld remote controller would. -{{< img src="climate-ui.png" alt="Image" width="40.0%" class="align-center" >}} + There is a growing list of compatible units. If your unit is not listed below you should submit a feature request (see FAQ). @@ -39,13 +39,13 @@ submit a feature request (see FAQ). | [ZH/LT-01](#zhlt01) | `zhlt01` | yes | | [Arduino-HeatpumpIR](#heatpumpir) library | `heatpumpir` | | -This component requires that you have configured a {{< docref "/components/remote_transmitter" >}}. +This component requires that you have configured a [Remote Transmitter](/components/remote_transmitter/). Due to the unidirectional nature of IR remote controllers, this component cannot determine the actual state of the device and will assume the state of the device is the latest state requested. The assumed state can be restored at boot. -However, when receiver is supported, you can optionally add a {{< docref "/components/remote_receiver" >}} +However, when receiver is supported, you can optionally add a [Remote Receiver](/components/remote_receiver/) component so the climate state will be tracked when it is operated with the original remote controller unit. @@ -78,7 +78,7 @@ climate: - **transmitter_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the remote transmitter. -{{< anchor "climate_ir_lg" >}} + ### `climate_ir_lg` @@ -98,7 +98,7 @@ climate: header_low: 9856us ``` -{{< anchor "daikin_brc" >}} + ### `daikin_brc` @@ -115,19 +115,19 @@ climate: use_fahrenheit: true ``` -{{< anchor "delonghi_ir" >}} + ### `delonghi` The `delonghi` climate currently supports the protocol used by some Delonghi portable units, known working with Delonghi PAC WE 120HP. -{{< anchor "daikin_arc" >}} + ### `daikin_arc` The Daikin ARC remotes (`daikin_arc` climate, `daikin_arc417`, `daikin_arc480` protocols of [Arduino-HeatpumpIR](#heatpumpir)) are used by the japanese model of Daikin. -{{< anchor "gree_ir" >}} + ### `gree` @@ -174,7 +174,7 @@ switch: name: "AC X-Fan" ``` -{{< anchor "midea_ir" >}} + ### `midea_ir` @@ -192,16 +192,14 @@ climate: ``` > [!NOTE] -> > - See [Transmit Midea](/components/remote_transmitter#remote_transmitter-transmit_midea) to send custom commands, including Follow Me mode. > - See [Toshiba](#toshiba) below if you are looking for compatibility with Midea model MAP14HS1TBL or similar. -{{< anchor "mitsubishi" >}} + ### `mitsubishi` > [!NOTE] -> > - When using this component with Mitsubishi units that only support cooling mode, the Off command may not work. Set **supports_heat** to `false` to resolve that issue. - **set_fan_mode** (*Optional*, string): Select the fan modes desired or that are supported on your remote. Defaults to `3levels` @@ -223,7 +221,6 @@ climate: - Options are: `down`, `middle-down`, `middle`, `middle-up`, `up`, `auto` > [!NOTE] -> > - This climate IR component is also known to work with some Stiebel Eltron Units. It has been tested with Stiebel Eltron IR-Remote `KM07F` and unit `ACW 25 i` ```yaml @@ -238,7 +235,7 @@ climate: vertical_default: "down" ``` -{{< anchor "toshiba" >}} + ### `toshiba` @@ -250,7 +247,6 @@ climate: - `RAS-2819T` : Temperature range is from 18 to 30; supports two-packet IR protocol > [!NOTE] -> > - While they are identified as separate models here, the `RAC-PT1411HWRU-C` and `RAC-PT1411HWRU-F` are > in fact the same physical model/unit. They are separated here only because different IR codes are used > depending on the desired unit of measurement. This only affects how temperature is displayed on the unit itself. @@ -261,7 +257,7 @@ climate: > transmitted to the `RAC-PT1411HWRU` in the same manner as the original remote controller. How often the > temperature is transmitted is determined by the `update_interval` assigned to the `sensor`. Note that > `update_interval` must be less than seven minutes or the `RAC-PT1411HWRU` will revert to using its own -> internal temperature sensor; a value of 30 seconds seems to work well. See {{< docref "/components/sensor" >}} +> internal temperature sensor; a value of 30 seconds seems to work well. See [Sensor](/components/sensor/) > for more information. > > - The `RAS-2819T` model uses a two-packet IR protocol where most commands send a primary packet (containing @@ -280,7 +276,7 @@ climate: sensor: room_temperature ``` -{{< anchor "whirlpool" >}} + ### `whirlpool` @@ -289,7 +285,7 @@ climate: - `DG11J1-3A` : Temperature range is from 18 to 32 (default) - `DG11J1-91` : Temperature range is from 16 to 30 -{{< anchor "whynter" >}} + ### `whynter` @@ -305,13 +301,13 @@ climate: supports_heat: true ``` -{{< anchor "zhlt01" >}} + ### `zhlt01` The `zhlt01` climate and protocol, based on the ZH/LT-01 remote controller, is used with many locally branded airconditioners, like: Eurom, Chigo, Tristar, Tecnomaster, Elgin, Geant, Tekno, Topair, Proma, Sumikura, JBS, Turbo Air, Nakatomy, Celestial Air, Ager, Blueway, Airlux, etc. -{{< anchor "ir-receiver_id" >}} + ## Using a Receiver @@ -319,7 +315,7 @@ The `zhlt01` climate and protocol, based on the ZH/LT-01 remote controller, is u > This is only supported with select climate devices, see "Supports receiver" in the table at the top of the page. Optionally, some platforms can listen to data the climate device sends over infrared to update their state ( -for example what mode the device is in). By setting up a {{< docref "/components/remote_receiver" "remote_receiver" >}} +for example what mode the device is in). By setting up a [remote_receiver](/components/remote_receiver/) and passing its ID to the climate platform you can enable this mode. When using a receiver it is recommended to put the IR receiver as close as possible to the equipment's @@ -344,7 +340,7 @@ climate: receiver_id: rcvr ``` -{{< anchor "heatpumpir" >}} + ## Arduino-HeatpumpIR @@ -379,26 +375,26 @@ Additional configuration must be specified for this platform: > transmitted to the `greeyac` device in the same manner as the original remote controller. How often the > temperature is transmitted is determined by the `update_interval` assigned to the `sensor`. Note that > `update_interval` must be less than 10 minutes or the `greeyac` device will revert to using its own -> internal temperature sensor; a value of 2 minutes seems to work well. See {{< docref "/components/sensor" >}} +> internal temperature sensor; a value of 2 minutes seems to work well. See [Sensor](/components/sensor/) > for more information. ## See Also -- {{< docref "/components/climate" >}} -- {{< docref "/components/remote_receiver" >}} -- {{< docref "/components/remote_transmitter" >}} -- {{< docref "/components/sensor" >}} -- {{< apiref "ballu.h" "ballu/ballu.h" >}} -- {{< apiref "climate_ir_lg.h" "climate_ir_lg/climate_ir_lg.h" >}} -- {{< apiref "coolix.h" "coolix/coolix.h" >}} -- {{< apiref "daikin.h" "daikin/daikin.h" >}} -- {{< apiref "fujitsu_general.h" "fujitsu_general/fujitsu_general.h" >}} -- {{< apiref "gree.h" "gree/gree.h" >}} -- {{< apiref "hitachi_ac344.h" "hitachi_ac344/hitachi_ac344.h" >}} -- {{< apiref "midea_ir.h" "midea_ir/midea_ir.h" >}} -- {{< apiref "mitsubishi.h" "mitsubishi/mitsubishi.h" >}} -- {{< apiref "tcl112.h" "tcl112/tcl112.h" >}} -- {{< apiref "toshiba.h" "toshiba/toshiba.h" >}} -- {{< apiref "whirlpool.h" "whirlpool/whirlpool.h" >}} -- {{< apiref "whynter.h" "whynter/whynter.h" >}} -- {{< apiref "yashima.h" "yashima/yashima.h" >}} +- [Climate Component](/components/climate/) +- [Remote Receiver](/components/remote_receiver/) +- [Remote Transmitter](/components/remote_transmitter/) +- [Sensor Component](/components/sensor/) +- +- +- +- +- +- +- +- +- +- +- +- +- +- diff --git a/content/components/climate/haier.md b/src/content/docs/components/climate/haier.mdx similarity index 92% rename from content/components/climate/haier.md rename to src/content/docs/components/climate/haier.mdx index fc3b21da6f..af024d8218 100644 --- a/content/components/climate/haier.md +++ b/src/content/docs/components/climate/haier.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up Haier climate devices." title: "Haier Climate" -params: - seo: - description: Instructions for setting up Haier climate devices. - image: air-conditioner.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import usbPinoutImg from './images/usb_pinout.png'; +import haierPinoutImg from './images/haier_pinout.jpg'; +import APIRef from '@components/APIRef.astro'; + This is an implementation of the ESPHome component to control HVAC on the base of the SmartAir2 and hOn Haier protocols (AC that is controlled by the hOn or SmartAir2 application). There are two versions of the Haier protocol: the older version uses an application called SmartAir2 while the newer version uses an application called hOn. Both protocols are compatible on the transport level but utilize different commands to control appliances. @@ -22,13 +24,23 @@ Older Haier models controlled by the SmartAir2 application are using the KZW-W00 | TX | DATA+ | green | RX | | RX | DATA- | white | TX | -{{< img src="usb_pinout.png" alt="Image" caption="KZW-W002 module pinout" width="70.0%" class="align-center" >}} +
    Newer Haier models using a module called ESP32-for-Haier. It is an ESP32 single-core board with an ESP32-S0WD chip. In some cases, you can reuse this module and flash it with ESPHome, but some new modules don't support this. They look the same but have encryption enabled. **Warning!** The new generation of ESP32-Haier devices has encryption enabled, so they can only be flashed with firmware that is signed with a private key. There is no way to make them work with ESPHome, so if you try to do it, the board will get into a boot loop with the error `rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)` The only way to recover this board is to flash it with the original image. So before starting your experiments make a backup image. -{{< img src="haier_pinout.jpg" alt="Image" caption="ESP32-for-Haier UART0 pinout" width="70.0%" class="align-center" >}} +
    Also, you can use any other ESP32, ESP8266, or an RPI pico W board. In this case, you will need to cut the original wire or make a connector yourself (the board has a JST SM04B-GHS-TB connector) @@ -107,7 +119,7 @@ climate: ## Automations -{{< anchor "haier-on_alarm_start" >}} + ### `on_alarm_start` Trigger @@ -124,7 +136,7 @@ climate: args: [ 'code', 'message' ] ``` -{{< anchor "haier-on_alarm_end" >}} + ### `on_alarm_end` Trigger @@ -141,7 +153,7 @@ climate: args: [ 'code', 'message' ] ``` -{{< anchor "haier-on_status_message" >}} + ### `on_status_message` Trigger @@ -296,10 +308,10 @@ on_...: ## See Also - [haier-esphome](https://github.com/paveldn/haier-esphome) -- {{< docref "/components/sensor/haier" "Haier Climate Sensors" >}} -- {{< docref "/components/binary_sensor/haier" "Haier Climate Binary Sensors" >}} -- {{< docref "/components/text_sensor/haier" "Haier Climate Text Sensors" >}} -- {{< docref "/components/button/haier" "Haier Climate Buttons" >}} -- {{< docref "/components/switch/haier" "Haier Climate Switches" >}} -- {{< docref "/components/climate" >}} -- {{< apiref "haier/climate/haier_base.h" "haier/climate/haier_base.h" >}} +- [Haier Climate Sensors](/components/sensor/haier/) +- [Haier Climate Binary Sensors](/components/binary_sensor/haier/) +- [Haier Climate Text Sensors](/components/text_sensor/haier/) +- [Haier Climate Buttons](/components/button/haier/) +- [Haier Climate Switches](/components/switch/haier/) +- [Climate Component](/components/climate/) +- diff --git a/content/components/climate/images/climate-ui.png b/src/content/docs/components/climate/images/climate-ui.png similarity index 100% rename from content/components/climate/images/climate-ui.png rename to src/content/docs/components/climate/images/climate-ui.png diff --git a/content/components/climate/images/deadband1.png b/src/content/docs/components/climate/images/deadband1.png similarity index 100% rename from content/components/climate/images/deadband1.png rename to src/content/docs/components/climate/images/deadband1.png diff --git a/content/components/climate/images/deadband2.png b/src/content/docs/components/climate/images/deadband2.png similarity index 100% rename from content/components/climate/images/deadband2.png rename to src/content/docs/components/climate/images/deadband2.png diff --git a/content/components/climate/images/haier_pinout.jpg b/src/content/docs/components/climate/images/haier_pinout.jpg similarity index 100% rename from content/components/climate/images/haier_pinout.jpg rename to src/content/docs/components/climate/images/haier_pinout.jpg diff --git a/content/components/climate/images/usb_pinout.png b/src/content/docs/components/climate/images/usb_pinout.png similarity index 100% rename from content/components/climate/images/usb_pinout.png rename to src/content/docs/components/climate/images/usb_pinout.png diff --git a/content/components/climate/_index.md b/src/content/docs/components/climate/index.mdx similarity index 94% rename from content/components/climate/_index.md rename to src/content/docs/components/climate/index.mdx index 025e03baf9..1c4cdd6b8c 100644 --- a/content/components/climate/_index.md +++ b/src/content/docs/components/climate/index.mdx @@ -1,22 +1,30 @@ --- description: "Information about the base representation of all climate devices." title: "Climate Component" -params: - seo: - description: Information about the base representation of all climate devices. - image: folder-open.svg +sidebar: + label: "Climate Component" --- +import { Image } from 'astro:assets'; +import climateUiImg from './images/climate-ui.png'; +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; + ESPHome has support for climate devices. Climate devices can represent different types of hardware, but the defining factor is that climate devices have a settable target temperature and can be put in different modes like `HEAT`, `COOL`, `HEAT_COOL` or `OFF`. -{{< img src="climate-ui.png" alt="Image" caption="Climate Device UI in Home Assistant." width="60.0%" class="align-center" >}} +
    > [!NOTE] > Not all climate components support all possible features. Check the corresponding documentation page for details on what is supported. -{{< anchor "config-climate" >}} + ## Base Climate Configuration @@ -83,7 +91,7 @@ Advanced options: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -152,7 +160,7 @@ MQTT options: ## Climate Automation -{{< anchor "climate-control_action" >}} + ### `climate.control` Action @@ -208,7 +216,7 @@ Configuration variables: - **swing_mode** (*Optional*, string, [templatable](/automations/templates)): Set the swing mode of the climate device. One of `OFF`, `BOTH`, `VERTICAL`, `HORIZONTAL`. -{{< anchor "climate-lambda_calls" >}} + ### lambda calls @@ -281,7 +289,7 @@ advanced stuff. call.perform(); ``` -{{< anchor "climate-on_state_trigger" >}} + ### `climate.on_state` Trigger @@ -300,7 +308,7 @@ climate: id(some_binary_sensor).publish_state(true); ``` -{{< anchor "climate-on_control_trigger" >}} + ### `climate.on_control` Trigger @@ -326,4 +334,4 @@ climate: ## See Also -- {{< apiref "climate/climate.h" "climate/climate.h" >}} +- diff --git a/content/components/climate/midea.md b/src/content/docs/components/climate/midea.mdx similarity index 89% rename from content/components/climate/midea.md rename to src/content/docs/components/climate/midea.mdx index fbf56eacc3..63242837a4 100644 --- a/content/components/climate/midea.md +++ b/src/content/docs/components/climate/midea.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a Midea climate device" title: "Midea Air Conditioner" -params: - seo: - description: Instructions for setting up a Midea climate device - image: air-conditioner.svg --- +import APIRef from '@components/APIRef.astro'; + The `midea` component creates a Midea air conditioner climate device. @@ -69,10 +67,10 @@ climate: ## Configuration variables -- **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the {{< docref "../uart" >}} if you want +- **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [Uart](/components/uart/) if you want to use multiple UART buses. -- **transmitter_id** (*Optional*, [ID](/guides/configuration-types#id)): Defined and used automatically when using {{< docref "../remote_transmitter" >}} component for IR commands transmit. +- **transmitter_id** (*Optional*, [ID](/guides/configuration-types#id)): Defined and used automatically when using [Remote Transmitter](/components/remote_transmitter/) component for IR commands transmit. - **period** (*Optional*, [Time](/guides/configuration-types#time)): Minimal period between requests to the appliance. Defaults to `1s`. - **timeout** (*Optional*, [Time](/guides/configuration-types#time)): Request response timeout until next request attempt. Defaults to `2s`. - **num_attempts** (*Optional*, int): Number of request attempts between 1 and 5 inclusive. Defaults to `3`. @@ -101,7 +99,7 @@ climate: ## Automations -{{< anchor "midea_ac-power_on_action" >}} + ### `midea_ac.power_on` Action @@ -113,7 +111,7 @@ on_...: - midea_ac.power_on: ``` -{{< anchor "midea_ac-power_off_action" >}} + ### `midea_ac.power_off` Action @@ -125,7 +123,7 @@ on_...: - midea_ac.power_off: ``` -{{< anchor "midea_ac-power_toggle_action" >}} + ### `midea_ac.power_toggle` Action @@ -137,7 +135,7 @@ on_...: - midea_ac.power_toggle: ``` -{{< anchor "midea_ac-follow_me_action" >}} + ### `midea_ac.follow_me` Action @@ -167,11 +165,11 @@ Configuration variables: - **beeper** (*Optional*, boolean, [templatable](/automations/templates)): Sets beep on update. Defaults to `false`. -{{< anchor "midea_ac-display_toggle_action" >}} + ### `midea_ac.display_toggle` Action -This action toggle ac screen. Works via UART if supported or {{< docref "../remote_transmitter" >}}. +This action toggle ac screen. Works via UART if supported or [Remote Transmitter](/components/remote_transmitter/). ```yaml on_...: @@ -179,11 +177,11 @@ on_...: - midea_ac.display_toggle: ``` -{{< anchor "midea_ac-swing_step_action" >}} + ### `midea_ac.swing_step` Action -This action adjust the louver by one step. {{< docref "../remote_transmitter" >}} required. +This action adjust the louver by one step. [Remote Transmitter](/components/remote_transmitter/) required. ```yaml on_...: @@ -191,7 +189,7 @@ on_...: - midea_ac.swing_step: ``` -{{< anchor "midea_ac-beeper_on_action" >}} + ### `midea_ac.beeper_on` Action @@ -203,7 +201,7 @@ on_...: - midea_ac.beeper_on: ``` -{{< anchor "midea_ac-beeper_off_action" >}} + ### `midea_ac.beeper_off` Action @@ -218,7 +216,7 @@ on_...: ## Additional control options using IR commands It is possible to use the FollowMe function and some other features available only through IR commands. -Below is an example of how to send FollowMe commands with the values of your sensor using the {{< docref "../remote_transmitter" >}} +Below is an example of how to send FollowMe commands with the values of your sensor using the [Remote Transmitter](/components/remote_transmitter/) component, as well as control the light of the LED display. ```yaml @@ -281,5 +279,5 @@ Special thanks to the project [IRremoteESP8266](https://github.com/crankyoldgit/ ## See Also -- {{< docref "/components/climate" >}} -- {{< apiref "climate/midea_ac.h" "climate/midea_ac.h" >}} +- [Climate Component](/components/climate/) +- diff --git a/content/components/climate/pid.md b/src/content/docs/components/climate/pid.mdx similarity index 94% rename from content/components/climate/pid.md rename to src/content/docs/components/climate/pid.mdx index faca100dbd..0121d0c87c 100644 --- a/content/components/climate/pid.md +++ b/src/content/docs/components/climate/pid.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up PID climate controllers with ESPHome." title: "PID Climate" -params: - seo: - description: Instructions for setting up PID climate controllers with ESPHome. - image: function.svg --- +import { Image } from 'astro:assets'; +import deadband1Img from './images/deadband1.png'; +import deadband2Img from './images/deadband2.png'; +import APIRef from '@components/APIRef.astro'; + The `pid` climate platform allows you to regulate a value with a [PID controller](https://en.wikipedia.org/wiki/PID_controller). @@ -114,7 +115,7 @@ climate: - All other options from [Climate](/components/climate#config-climate). -{{< anchor "pid-setup" >}} + ## PID Controller Setup @@ -122,7 +123,7 @@ To set up a PID climate controller, you need a couple of components: - A [Sensor](/components/sensor) to read the current temperature (`sensor` ). - At least one [float output](/components/output#config-output) to drive for heating or cooling (or both). - This could for example be a PWM output via {{< docref "/components/output/sigma_delta_output" >}} or {{< docref "/components/output/slow_pwm" >}} that drives a heating unit. + This could for example be a PWM output via [Sigma Delta Output](/components/output/sigma_delta_output/) or [Slow Pwm](/components/output/slow_pwm/) that drives a heating unit. Please note the output *must* be controllable with continuous value (not only ON/OFF, but any state in between for example 50% heating power). @@ -131,7 +132,7 @@ To set up a PID climate controller, you need a couple of components: > The sensor should have a short update interval. The PID update frequency is tied to the update > interval of the sensor. Set a short `update_interval` like `5s` on the sensor. > -> We recommend putting a filter on the sensor (see filters in {{< docref "/components/sensor" >}}) and +> We recommend putting a filter on the sensor (see filters in [Sensor](/components/sensor/)) and > using `output_averaging_samples` to calm the PID sensor from a noisy input sensor. ## Deadband Setup @@ -161,7 +162,7 @@ deadband_parameters: In this example the deadband is between `20.0°C - 21.5°C`. The PID controller will limit any output variation inside this deadband. How it limits depends on how you set the [Deadband Multipliers](#deadband-multipliers). -{{< img src="deadband1.png" alt="Image" >}} + ### Deadband Multipliers @@ -192,7 +193,7 @@ deadband_parameters: deadband_output_averaging_samples: 15 # average the output over 15 samples within the deadband ``` -{{< img src="deadband2.png" alt="Image" >}} + ### Deadband Output Averaging Samples @@ -200,7 +201,7 @@ Since we expect the PID Controller to be at equilibrium while inside the deadban average the output over a longer range of samples, like 15 samples. This helps even further with temperature and controller stability. -{{< anchor "pid-autotune" >}} + ## Autotuning @@ -227,7 +228,7 @@ To autotune the control parameters: kd: 0.0 ``` -1. Create a {{< docref "/components/button/template" "template button" >}} to start autotuning later: +1. Create a [template button](/components/button/template/) to start autotuning later: ```yaml button: @@ -437,8 +438,8 @@ Advanced options: - Åström, K. J. and T. Hägglund (1984a), 'Automatic tuning of simple regulators', Proceedings of IFAC 9th World Congress, Budapest, 1867-1872 -- {{< docref "/components/climate" >}} -- {{< docref "/components/output/sigma_delta_output" >}} -- {{< docref "/components/output/slow_pwm" >}} -- {{< apiref "pid/pid_climate.h" "pid/pid_climate.h" >}} -- {{< apiref "PID Autotuner" "pid/pid_autotuner.h" >}} +- [Climate Component](/components/climate/) +- [Sigma-Delta Output](/components/output/sigma_delta_output/) +- [Slow PWM Output](/components/output/slow_pwm/) +- +- diff --git a/content/components/climate/thermostat.md b/src/content/docs/components/climate/thermostat.mdx similarity index 97% rename from content/components/climate/thermostat.md rename to src/content/docs/components/climate/thermostat.mdx index 30714e96bd..c580416b55 100644 --- a/content/components/climate/thermostat.md +++ b/src/content/docs/components/climate/thermostat.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up Thermostat climate controllers with ESPHome." title: "Thermostat Climate Controller" -params: - seo: - description: Instructions for setting up Thermostat climate controllers with ESPHome. - image: air-conditioner.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import climateUiImg from './images/climate-ui.png'; + The `thermostat` climate platform allows you to control a climate control system in much the same manner as a -physical thermostat. Its operation is similar to the {{< docref "bang_bang" "Bang-Bang" >}} controller; a sensor measures a value +physical thermostat. Its operation is similar to the [Bang-Bang](/components/climate/bang_bang/) controller; a sensor measures a value (the air temperature) and the controller will try to keep this value within a range defined by the set point(s). To do this, the controller can activate devices like a heating unit and/or a cooling unit to change the value observed by the sensor. -When configured for both heating and cooling, it is essentially two {{< docref "bang_bang" "Bang-Bang" >}} controllers in one; it +When configured for both heating and cooling, it is essentially two [Bang-Bang](/components/climate/bang_bang/) controllers in one; it differs, however, in that interaction with the thermostat component is nearly identical to that of a real thermostat. This component can operate in one of two ways: @@ -30,7 +30,12 @@ are configured -- more on this in a moment. Two parameters define the set points front-end user interface. The screenshot below illustrates a thermostat controller in dual-point mode, where two set points are available. -{{< img src="climate-ui.png" alt="Image" caption="Dual-setpoint climate UI" width="60.0%" class="align-center" >}} +
    This component works by triggering a number of [actions](/automations/actions#all-actions) as required to keep the observed temperature above/below/within the target range as defined by the set point(s). In general, when the observed temperature @@ -327,7 +332,7 @@ to activate humidification **or** dehumidification. difference between the lower set point and the current temperature exceeds this value, `supplemental_heating_action` will be called immediately. -{{< anchor "thermostat-preset" >}} + ### Presets @@ -547,7 +552,7 @@ climate: any given fan mode must be active before it may be changed. Note that `min_temperature` and `max_temperature` from the base climate component are used to define -the range of allowed temperature values in the thermostat component. See {{< docref "/components/climate" >}}. +the range of allowed temperature values in the thermostat component. See [Climate](/components/climate/). ### Hysteresis Values @@ -567,21 +572,20 @@ the range of allowed temperature values in the thermostat component. See {{< doc before calling the respective humidity control [action](/automations/actions#config-action). Defaults to 1%. > [!NOTE] -> > - While this platform uses the term temperature everywhere, it can also be used to regulate other values. > For example, controlling humidity is also possible with this platform. > > - `min_temperature` and `max_temperature` from the base climate component are used the define the range of > adjustability and the defaults will probably not make sense for control of things like humidity. See -> {{< docref "/components/climate" >}}. +> [Climate](/components/climate/). ## Bang-Bang vs. Thermostat -Please see the {{< docref "bang_bang" "Bang-Bang" >}} component's documentation for a detailed comparison of these two components. +Please see the [Bang-Bang](/components/climate/bang_bang/) component's documentation for a detailed comparison of these two components. ## See Also -- {{< docref "/components/climate" >}} -- {{< docref "/components/sensor" >}} -- {{< docref "bang_bang" "Bang-Bang" >}} +- [Climate Component](/components/climate/) +- [Sensor Component](/components/sensor/) +- [Bang-Bang](/components/climate/bang_bang/) - [All Actions](/automations/actions#all-actions) diff --git a/content/components/climate/tuya.md b/src/content/docs/components/climate/tuya.mdx similarity index 93% rename from content/components/climate/tuya.md rename to src/content/docs/components/climate/tuya.mdx index 8ff5b08169..1ce8d8e096 100644 --- a/content/components/climate/tuya.md +++ b/src/content/docs/components/climate/tuya.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for setting up a Tuya climate device." title: "Tuya Climate" -params: - seo: - description: Instructions for setting up a Tuya climate device. - image: air-conditioner.svg --- +import APIRef from '@components/APIRef.astro'; + The `tuya` climate platform creates a climate device from a tuya component. -Tuya climate requires a {{< docref "/components/tuya" >}} to be configured. +Tuya climate requires a [Tuya](/components/tuya/) to be configured. ```text [11:45:14][C][tuya:041]: Tuya: @@ -31,7 +29,7 @@ On this controller (BAC-002-ELW), the data points are: - 3 represents the current temperature. - 4 represents the schedule mode but is not yet available to be used in ESPHome. - 5 represents the ECO mode switch. -- 6 represents the child lock switch. (use the {{< docref "/components/switch/tuya" >}} component to control this) +- 6 represents the child lock switch. (use the [Tuya](/components/switch/tuya/) component to control this) - 102 represents the HVAC mode (heating, cooling, fan-only, etc.). - 103 represents the fan speed (auto, low, medium, high, etc.). @@ -111,7 +109,7 @@ If the device has different multipliers for current and target temperatures, **t - All other options from [Climate](/components/climate#config-climate). -{{< anchor "active_state_detection" >}} + ## Active state detection @@ -124,7 +122,7 @@ If none of the above variables are set, the active state is inferred from the di - If **supports_heat** is `True` and the current temperature is more than 1 °C below the target temperature, the device is expected to be heating. - If **supports_cool** is `True` and the current temperature is more than 1 °C above the target temperature, the device is expected to be cooling. -{{< anchor "temperature-multiplier" >}} + ## Temperature multiplier @@ -133,6 +131,6 @@ integers for data reporting and to get a .5 temperature you need to divide by 2 ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/climate" >}} -- {{< apiref "tuya/climate/tuya_climate.h" "tuya/climate/tuya_climate.h" >}} +- [Tuya MCU](/components/tuya/) +- [Climate Component](/components/climate/) +- diff --git a/content/components/copy.md b/src/content/docs/components/copy.mdx similarity index 96% rename from content/components/copy.md rename to src/content/docs/components/copy.mdx index 3186836601..e5cc4a74c7 100644 --- a/content/components/copy.md +++ b/src/content/docs/components/copy.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up the copy component in ESPHome" title: "Copy Component" -params: - seo: - description: Instructions for setting up the copy component in ESPHome - image: content-copy.svg --- The `copy` component can be used to copy an existing component (like a sensor, switch, etc.) @@ -118,7 +114,7 @@ select: - **source_id** (**Required**, [ID](/guides/configuration-types#id)): The select that should be mirrored. - All other options from [Select](/components/select#config-select). -{{< anchor "copy-sensor" >}} + ## Copy Sensor @@ -179,5 +175,3 @@ text: - **source_id** (**Required**, [ID](/guides/configuration-types#id)): The text that should be mirrored. - All other options from [Text](/components/text#config-text). - -## See Also diff --git a/content/components/cover/am43.md b/src/content/docs/components/cover/am43.mdx similarity index 86% rename from content/components/cover/am43.md rename to src/content/docs/components/cover/am43.mdx index 2ca9dab4e7..94773b2fab 100644 --- a/content/components/cover/am43.md +++ b/src/content/docs/components/cover/am43.mdx @@ -1,12 +1,11 @@ --- description: "Setting up AM43/BLE covers in ESPHome." title: "AM43 Cover" -params: - seo: - description: Setting up AM43/BLE covers in ESPHome. - image: am43.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `am43` cover platform allows you to control an AM43 based BLE cover motor. These devices are sold under various brands, such as Zemismart and A-OK. The platform connects to the device over the @@ -18,7 +17,7 @@ and state of the motor. > as the protocol is completely different. If your device is controlled > with the SmartLife app, then it will not work. -{{< img src="am43.jpg" alt="Image" class="align-right" >}} + ```yaml # Example configuration entry @@ -47,7 +46,7 @@ See [Setting up devices](/components/binary_sensor/ble_presence#esp32_ble_tracke how to discover the MAC address. To make use of the battery and light level sensors, see the -{{< docref "/components/sensor/am43" >}} component. +[Am43](/components/sensor/am43/) component. ## Configuration variables @@ -64,6 +63,6 @@ To make use of the battery and light level sensors, see the ## See Also -- {{< docref "index/" >}} +- [Cover Component](/components/cover/) - [Automation](/automations) -- {{< apiref "am43/am43_cover.h" "am43/am43_cover.h" >}} +- diff --git a/content/components/cover/current_based.md b/src/content/docs/components/cover/current_based.mdx similarity index 91% rename from content/components/cover/current_based.md rename to src/content/docs/components/cover/current_based.mdx index 4285449610..e0d4b88ff5 100644 --- a/content/components/cover/current_based.md +++ b/src/content/docs/components/cover/current_based.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up current-based covers in ESPHome." title: "Current Based Cover" -params: - seo: - description: Instructions for setting up current-based covers in ESPHome. - image: window-open.svg --- +import { Image } from 'astro:assets'; +import moreInfoUiImg from './images/more-info-ui.png'; +import shelly25Img from './images/shelly2.5.png'; +import APIRef from '@components/APIRef.astro'; + The `current_based` cover platform allows you to create covers with position control by using current sensors to detect the fully-open and fully-closed states. This is pretty useful when using motors with integrated mechanical endstops. During cover operation, the component monitors the current consumption @@ -17,7 +18,7 @@ consuming goes below a certain amount. The amount of current needs to be specifi Open and close durations can be specified to allow ESPHome to approximate the current position of the cover. -{{< img src="more-info-ui.png" alt="Image" width="75.0%" class="align-center" >}} + This type of cover also provides safety features like current-based obstacle detection with automatic configurable rollback as well as relay malfunction detection: operation cancels if there's a current flowing in the opposite @@ -108,17 +109,17 @@ cover: ## Use with Shelly 2.5 The Shelly 2.5 is the perfect hardware for this platform. It features two outputs with current monitoring -(thanks to an embedded {{< docref "/components/sensor/ade7953" "ADE7953" >}}) in a very small form factor (39mm x 36mm x 17 mm). -It also features an {{< docref "/components/sensor/ntc" "NTC temperature sensor" >}}. +(thanks to an embedded [ADE7953](/components/sensor/ade7953/)) in a very small form factor (39mm x 36mm x 17 mm). +It also features an [NTC temperature sensor](/components/sensor/ntc/). -{{< img src="shelly2.5.png" alt="Image" width="30.0%" class="align-center" >}} + These devices typically run hot (~55Cº at 20ºC room temperature). Long-term heavy loads (near to its rated limit) can overheat the device. It is strongly recommended to monitor the device temperature using the NTC temperature sensor, shutting down the device if it exceeds 90ºC. This safety feature is also present in the original firmware. > [!WARNING] -> The ADE7953 IRQ line is connected to the GPIO16. The `irq_pin` parameter for the {{< docref "/components/sensor/ade7953" "ADE7953" >}} MUST be +> The ADE7953 IRQ line is connected to the GPIO16. The `irq_pin` parameter for the [ADE7953](/components/sensor/ade7953/) MUST be > set to GPIO16 to prevent device overheat (>70ºC idling). Configuration example: @@ -252,8 +253,8 @@ status_led: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/cover/template" >}} -- {{< docref "/components/sensor/ade7953" >}} +- [Cover Component](/components/cover/) +- [Template Cover](/components/cover/template/) +- [ADE7953 Power Sensor](/components/sensor/ade7953/) - [Automation](/automations) -- {{< apiref "current_based/current_based_cover.h" "current_based/current_based_cover.h" >}} +- diff --git a/content/components/cover/endstop.md b/src/content/docs/components/cover/endstop.mdx similarity index 90% rename from content/components/cover/endstop.md rename to src/content/docs/components/cover/endstop.mdx index e07b2e0ffe..5e5b8839af 100644 --- a/content/components/cover/endstop.md +++ b/src/content/docs/components/cover/endstop.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up time-based covers in ESPHome." title: "Endstop Cover" -params: - seo: - description: Instructions for setting up time-based covers in ESPHome. - image: electric-switch.svg --- +import { Image } from 'astro:assets'; +import moreInfoUiImg from './images/more-info-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `endstop` cover platform allows you to create covers with position control that have endstops at both ends of the cover to detect the fully-open and fully-closed states. When any of these endstops are reached, the cover is stopped (via `stop_action` ) @@ -20,7 +20,7 @@ the current position can be approximated. Additionally, open and close durations must be specified to allow ESPHome to approximate the current position of the cover. -{{< img src="more-info-ui.png" alt="Image" width="75.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -73,6 +73,6 @@ cover: ## See Also -- {{< docref "index/" >}} +- [Cover Component](/components/cover/) - [Automation](/automations) -- {{< apiref "endstop/endstop_cover.h" "endstop/endstop_cover.h" >}} +- diff --git a/content/components/cover/feedback.md b/src/content/docs/components/cover/feedback.mdx similarity index 93% rename from content/components/cover/feedback.md rename to src/content/docs/components/cover/feedback.mdx index 95e254af0b..b2bfec91ce 100644 --- a/content/components/cover/feedback.md +++ b/src/content/docs/components/cover/feedback.mdx @@ -1,11 +1,12 @@ --- description: "Instructions for setting up feedback covers in ESPHome." title: "Feedback Cover" -params: - seo: - description: Instructions for setting up feedback covers in ESPHome. --- +import { Image } from 'astro:assets'; +import moreInfoUiImg from './images/more-info-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `feedback` cover platform allows you to create covers with position control that can optionally have feedback from sensors to detect the fully-open and fully-closed states (endstops), and from sensors to detect actual movement (opening/closing). In all the cases the current @@ -13,7 +14,7 @@ position is approximated with the time the cover has been moving in a direction. It supports *open*, *close*, *stop* and *toggle* actions. Tilt control is not supported. -{{< img src="more-info-ui.png" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -46,7 +47,7 @@ It is a versatile cover that can accommodate for a number of DIY setups, or moni Simplest case, when no sensors are available. The state is thus assumed. -It is a drop-in replacement of {{< docref "/components/cover/time_based" >}} +It is a drop-in replacement of [Time Based](/components/cover/time_based/) ### Endstop Sensors @@ -58,7 +59,7 @@ The extension also handles the case where the cover has builtin endstops, which the component's logic. In this case, when the cover is fully closed (either if timed based or sensor based) the `stop_action` is not triggered. -It is a drop-in replacement of {{< docref "/components/cover/endstop" >}}. +It is a drop-in replacement of [Endstop](/components/cover/endstop/). ### Movement Sensors @@ -72,7 +73,7 @@ When the movement stops (with no stop action being requested) it is assumed that the builtin endstops, and so the close/open state (according to current direction) was reached. This function is activated setting `infer_endstop` to True. -It can be used to replace a {{< docref "/components/cover/current_based" >}}, with some modifications in the yaml. See [Migrating Current-Based Cover](#migrating_current_based) +It can be used to replace a [Current Based](/components/cover/current_based/), with some modifications in the yaml. See [Migrating Current-Based Cover](#migrating_current_based) ## Safety Features @@ -167,13 +168,13 @@ Additional options: ## Example Configurations -{{< anchor "migrating_current_based" >}} + ### Migrating Current-Based Cover Most options can be left untouched, but some modifications are needed: -1. All current sensing related options must be moved to auxiliary {{< docref "/components/binary_sensor/analog_threshold" >}}, +1. All current sensing related options must be moved to auxiliary [Analog Threshold](/components/binary_sensor/analog_threshold/), to convert current readings to binary sensors, using the corresponding thresholds and delays. If there where any open/close obstacle current threshold defined, a separate binary sensor with that threshold should be defined. @@ -260,6 +261,6 @@ Most options can be left untouched, but some modifications are needed: ## See Also -- {{< docref "index/" >}} +- [Cover Component](/components/cover/) - [Automation](/automations) -- {{< apiref "feedback/feedback_cover.h" "feedback/feedback_cover.h" >}} +- diff --git a/content/components/cover/he60r.md b/src/content/docs/components/cover/he60r.mdx similarity index 91% rename from content/components/cover/he60r.md rename to src/content/docs/components/cover/he60r.mdx index 8ac5c755cb..9df4867ea4 100644 --- a/content/components/cover/he60r.md +++ b/src/content/docs/components/cover/he60r.mdx @@ -1,13 +1,12 @@ --- description: "Setting up a Chamberlain HomEntry HE60R and similar garage door openers" title: "HE60R Garage Door Opener" -params: - seo: - description: Setting up a Chamberlain HomEntry HE60R and similar garage door openers - image: he60r.jpg --- -{{< img src="he60r.jpg" alt="Image" class="align-right" >}} +import { Image } from 'astro:assets'; +import he60rSchImg from './images/he60r-sch.jpg'; + + The `he60r` cover platform allows you to control a HomEntry HE60R garage door opener. These units were made by Chamberlain and sold through Bunnings. It is *likely* that this @@ -53,7 +52,7 @@ the ESP32 via USB from 5V. This circuit also includes a manual control button co Any microcontroller board supported by ESPHome should be suitable for this application. -{{< img src="he60r-sch.jpg" alt="Image" >}} + Note that this circuit inverts the TX line. A configuration for this would look something like: @@ -95,6 +94,6 @@ binary_sensor: ## See Also -- {{< docref "index/" >}} +- [Cover Component](/components/cover/) - [Automation](/automations) - [GPIO Binary Sensor](/components/binary_sensor/gpio#gpio-binary-sensor) diff --git a/content/components/cover/images/cover-ui.png b/src/content/docs/components/cover/images/cover-ui.png similarity index 100% rename from content/components/cover/images/cover-ui.png rename to src/content/docs/components/cover/images/cover-ui.png diff --git a/content/components/cover/images/he60r-sch.jpg b/src/content/docs/components/cover/images/he60r-sch.jpg similarity index 100% rename from content/components/cover/images/he60r-sch.jpg rename to src/content/docs/components/cover/images/he60r-sch.jpg diff --git a/content/components/cover/images/more-info-ui.png b/src/content/docs/components/cover/images/more-info-ui.png similarity index 100% rename from content/components/cover/images/more-info-ui.png rename to src/content/docs/components/cover/images/more-info-ui.png diff --git a/content/components/cover/images/shelly2.5.png b/src/content/docs/components/cover/images/shelly2.5.png similarity index 100% rename from content/components/cover/images/shelly2.5.png rename to src/content/docs/components/cover/images/shelly2.5.png diff --git a/content/components/cover/_index.md b/src/content/docs/components/cover/index.mdx similarity index 90% rename from content/components/cover/_index.md rename to src/content/docs/components/cover/index.mdx index 7aaa128437..e961b3cbda 100644 --- a/content/components/cover/_index.md +++ b/src/content/docs/components/cover/index.mdx @@ -1,19 +1,22 @@ --- description: "Instructions for setting up base covers in ESPHome." title: "Cover Component" -params: - seo: - description: Instructions for setting up base covers in ESPHome. - image: folder-open.svg +sidebar: + label: "Cover Component" --- +import { Image } from 'astro:assets'; +import coverUiImg from './images/cover-ui.png'; +import APIClass from '@components/APIClass.astro'; +import APIRef from '@components/APIRef.astro'; + The `cover` component is a generic representation of covers in ESPHome. A cover can (currently) either be *closed* or *open* and supports three types of commands: *open*, *close* and *stop*. -{{< img src="cover-ui.png" alt="Image" width="75.0%" class="align-center" >}} + -{{< anchor "config-cover" >}} + ## Base Cover Configuration @@ -35,7 +38,7 @@ Configuration variables: > you want the cover to use that name, you can set `name: None`. - **device_class** (*Optional*, string): The device class for the - sensor. See for a list of available options. + sensor. See [https://www.home-assistant.io/integrations/cover/#device-class](https://www.home-assistant.io/integrations/cover/#device-class) for a list of available options. - **icon** (*Optional*, icon): Manually set the icon to use for the cover in the frontend. @@ -50,7 +53,7 @@ Advanced options: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -83,8 +86,6 @@ MQTT options: ## Actions -{{< anchor "cover-open_action" >}} - ### `cover.open` Action This [action](/automations/actions#all-actions) opens the cover with the given ID when executed. @@ -104,8 +105,6 @@ on_...: > call.perform(); > ``` -{{< anchor "cover-close_action" >}} - ### `cover.close` Action This [action](/automations/actions#all-actions) closes the cover with the given ID when executed. @@ -125,8 +124,6 @@ on_...: > call.perform(); > ``` -{{< anchor "cover-stop_action" >}} - ### `cover.stop` Action This [action](/automations/actions#all-actions) stops the cover with the given ID when executed. @@ -146,8 +143,6 @@ on_...: > call.perform(); > ``` -{{< anchor "cover-toggle_action" >}} - ### `cover.toggle` Action This [action](/automations/actions#all-actions) toggles the cover with the given ID when executed, @@ -169,8 +164,6 @@ on_...: > call.perform(); > ``` -{{< anchor "cover-control_action" >}} - ### `cover.control` Action This [action](/automations/actions#all-actions) is a more generic version of the other cover actions and @@ -209,8 +202,6 @@ Configuration variables: ## Conditions -{{< anchor "cover-is_open_condition" >}} - ### `cover.is_open` Condition This [condition](/automations/actions#all-conditions) checks if the cover with the given ID is fully open. @@ -228,8 +219,6 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The cover to check. -{{< anchor "cover-is_closed_condition" >}} - ### `cover.is_closed` Condition This [condition](/automations/actions#all-conditions) checks if the cover with the given ID is fully closed. @@ -249,8 +238,6 @@ Configuration variables: ## Triggers -{{< anchor "cover-on_opened_trigger" >}} - ### `cover.on_opened` Trigger This trigger is activated each time the cover reaches a fully open state. @@ -263,8 +250,6 @@ cover: - logger.log: "Cover is fully open!" ``` -{{< anchor "cover-on_closed_trigger" >}} - ### `cover.on_closed` Trigger This trigger is activated each time the cover reaches a fully closed state. @@ -277,8 +262,6 @@ cover: - logger.log: "Cover is fully closed!" ``` -{{< anchor "cover-on_opening_trigger" >}} - ### `cover.on_opening` Trigger This trigger is activated each time the cover starts opening. @@ -291,8 +274,6 @@ cover: - logger.log: "Cover started opening" ``` -{{< anchor "cover-on_closing_trigger" >}} - ### `cover.on_closing` Trigger This trigger is activated each time the cover starts closing. @@ -305,8 +286,6 @@ cover: - logger.log: "Cover started closing" ``` -{{< anchor "cover-on_idle_trigger" >}} - ### `cover.on_idle` Trigger This trigger is activated each time the cover stops moving and becomes idle. @@ -322,8 +301,6 @@ cover: > [!NOTE] > The `on_open` trigger is deprecated and will be removed in a future release. Please use `on_opened` instead. -{{< anchor "cover-lambda_calls" >}} - ## Lambdas From [lambdas](/automations/templates#config-lambda), you can access the current state of the cover (note that these @@ -357,4 +334,5 @@ fields are read-only, if you want to act on the cover, use the `make_call()` met ## See Also -- {{< apiref "cover/cover.h" "cover/cover.h" >}} +- +- diff --git a/content/components/cover/template.md b/src/content/docs/components/cover/template.mdx similarity index 92% rename from content/components/cover/template.md rename to src/content/docs/components/cover/template.mdx index 69d72bae26..c044688d42 100644 --- a/content/components/cover/template.md +++ b/src/content/docs/components/cover/template.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up template covers in ESPHome." title: "Template Cover" -params: - seo: - description: Instructions for setting up template covers in ESPHome. - image: description.svg --- +import { Image } from 'astro:assets'; +import coverUiImg from './images/cover-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `template` cover platform allows you to create simple covers out of just a few actions and a value lambda. Once defined, it will automatically appear in Home Assistant as a cover and can be controlled through the frontend. -{{< img src="cover-ui.png" alt="Image" width="75.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -82,7 +82,7 @@ Possible return values for the optional lambda: - All other options from [Cover](/components/cover#config-cover). -{{< anchor "cover-template-publish_action" >}} + ## `cover.template.publish` Action @@ -134,7 +134,7 @@ Configuration options: ## See Also -- {{< docref "/components/cover" >}} +- [Cover Component](/components/cover/) - [Automation](/automations) -- {{< docref "/cookbook/garage-door" >}} -- {{< apiref "template/cover/template_cover.h" "template/cover/template_cover.h" >}} +- [Garage-Door](/cookbook/garage-door/) +- diff --git a/content/components/cover/time_based.md b/src/content/docs/components/cover/time_based.mdx similarity index 92% rename from content/components/cover/time_based.md rename to src/content/docs/components/cover/time_based.mdx index 159d8d1986..bf4ebf21fe 100644 --- a/content/components/cover/time_based.md +++ b/src/content/docs/components/cover/time_based.mdx @@ -1,18 +1,18 @@ --- description: "Instructions for setting up time-based covers in ESPHome." title: "Time Based Cover" -params: - seo: - description: Instructions for setting up time-based covers in ESPHome. - image: timer.svg --- +import { Image } from 'astro:assets'; +import moreInfoUiImg from './images/more-info-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `time_based` cover platform allows you to create covers with position control that do not have any position feedback. The state of the cover is thus always an assumed one, the current position is approximated with the time the cover has been moving in a direction. The state of the cover can be restored at node reboot. -{{< img src="more-info-ui.png" alt="Image" width="75.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -93,6 +93,6 @@ stop_action: ## See Also -- {{< docref "index/" >}} +- [Cover Component](/components/cover/) - [Automation](/automations) -- {{< apiref "time_based/time_based_cover.h" "time_based/time_based_cover.h" >}} +- diff --git a/content/components/cover/tormatic.md b/src/content/docs/components/cover/tormatic.mdx similarity index 90% rename from content/components/cover/tormatic.md rename to src/content/docs/components/cover/tormatic.mdx index b162983e8e..b69959427d 100644 --- a/content/components/cover/tormatic.md +++ b/src/content/docs/components/cover/tormatic.mdx @@ -1,12 +1,12 @@ --- description: "Setting up Tormatic and Novoferm covers in ESPHome." title: "Tormatic/Novoferm Cover" -params: - seo: - description: Setting up Tormatic and Novoferm covers in ESPHome. - image: tormatic.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `tormatic` cover platform allows you to control Tormatic and Novoferm garage door drives manufactured in 2016 onwards. The following models should be supported: @@ -16,7 +16,14 @@ be supported: * Novoferm Novomatic 563 S * Novoferm Novoport IV -{{< img src="tormatic.png" alt="Image" caption="Tormatic Black 600 Garage Door Drive" class="align-center" >}} +
    > [!NOTE] > This component was written against a Novoferm 423. It has been successfully @@ -95,6 +102,6 @@ can be bent 90 degrees to sit parallel to the PCB, keeping a low profile. ## See Also -* {{< docref "index/" >}} -* [Automation](/automations) -* {{< apiref "tormatic/tormatic_cover.h" "tormatic/tormatic_cover.h" >}} +- [Cover Component](/components/cover/) +- [Automation](/automations) +- diff --git a/content/components/cover/tuya.md b/src/content/docs/components/cover/tuya.mdx similarity index 91% rename from content/components/cover/tuya.md rename to src/content/docs/components/cover/tuya.mdx index 6a7315ffda..999abf6a52 100644 --- a/content/components/cover/tuya.md +++ b/src/content/docs/components/cover/tuya.mdx @@ -1,15 +1,14 @@ --- description: "Instructions for setting up a Tuya cover motor." title: "Tuya Cover" -params: - seo: - description: Instructions for setting up a Tuya cover motor. --- +import APIRef from '@components/APIRef.astro'; + The `tuya` cover platform creates a simple position-only cover from a tuya serial component. -This requires the {{< docref "/components/tuya" >}} component to be set up before you can use this platform. +This requires the [Tuya](/components/tuya/) component to be set up before you can use this platform. Here is an example output for a Tuya M515EGWT (motor for chain roller blinds): @@ -73,6 +72,6 @@ In this condition, it will go into an error / uncalibrated state when it next tr ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/cover" >}} -- {{< apiref "tuya/cover/tuya_cover.h" "tuya/cover/tuya_cover.h" >}} +- [Tuya MCU](/components/tuya/) +- [Cover Component](/components/cover/) +- diff --git a/content/components/datetime/_index.md b/src/content/docs/components/datetime/index.mdx similarity index 87% rename from content/components/datetime/_index.md rename to src/content/docs/components/datetime/index.mdx index 84750fe399..612e1e3acf 100644 --- a/content/components/datetime/_index.md +++ b/src/content/docs/components/datetime/index.mdx @@ -1,19 +1,21 @@ --- description: "Instructions for setting up datetime components in ESPHome." title: "Datetime Component" -params: - seo: - description: Instructions for setting up datetime components in ESPHome. - image: folder-open.svg +sidebar: + label: "Datetime Component" --- +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; +import APIClass from '@components/APIClass.astro'; + ESPHome has support for components to create a datetime entity. A datetime entity currently represents a date that can be set by the user/frontend. > [!NOTE] > Requires Home Assistant 2024.4 or newer. -{{< anchor "config-datetime" >}} + ## Base Datetime Configuration @@ -46,7 +48,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -62,13 +64,13 @@ MQTT Options: Time and DateTime Options: - **on_time** (*Optional*, [Automation](/automations)): Automation to run when the current datetime or time matches the current state. - Only valid on `time` or `datetime` types. Use of `on_time` causes `time_id` to be required, `time_id` will be automatically assigned if a time source exists in the config, and will cause an invalid configuration if there is no {{< docref "/components/time" >}} configured. + Only valid on `time` or `datetime` types. Use of `on_time` causes `time_id` to be required, `time_id` will be automatically assigned if a time source exists in the config, and will cause an invalid configuration if there is no [Time](/components/time/) configured. ## Automation You can access the most recent state as a `ESPTime` object by `id(datetime_id).state_as_esptime()` -{{< anchor "datetime-on_value" >}} + ### `on_value` @@ -93,7 +95,7 @@ Configuration variables: See [Automation](/automations). ## Date Automation -{{< anchor "datetime-date_set_action" >}} + ### `datetime.date.set` Action @@ -128,7 +130,7 @@ Configuration variables: - **date** (**Required**, string, date parts, [templatable](/automations/templates)): The value to set the datetime to. -{{< anchor "datetime-lambda_calls" >}} + ### lambda calls @@ -150,7 +152,7 @@ advanced stuff (see the full API Reference for more info). - `.year` : Retrieve the current year of the `date`. It will be `0` if no value has been set. - `.month` : Retrieve the current month of the `date`. It will be `0` if no value has been set. - `.day` : Retrieve the current day of the `date`. It will be `0` if no value has been set. -- `.state_as_esptime()` : Retrieve the current value of the datetime as a {{< apistruct "ESPTime" "ESPTime" >}} object. +- `.state_as_esptime()` : Retrieve the current value of the datetime as a object. ```cpp // For example, create a custom log message when a value is received: @@ -159,7 +161,7 @@ advanced stuff (see the full API Reference for more info). ## Time Automation -{{< anchor "datetime-time_set_action" >}} + ### `datetime.time.set` Action @@ -194,7 +196,7 @@ Configuration variables: - **time** (**Required**, string, time parts, [templatable](/automations/templates)): The value to set the datetime to. -{{< anchor "datetime-time-lambda_calls" >}} + ### lambda calls @@ -216,7 +218,7 @@ advanced stuff (see the full API Reference for more info). - `.hour` : Retrieve the current hour of the `time`. It will be `0` if no value has been set. - `.minute` : Retrieve the current minute of the `time`. It will be `0` if no value has been set. - `.second` : Retrieve the current second of the `time`. It will be `0` if no value has been set. -- `.state_as_esptime()` : Retrieve the current value of the datetime as a {{< apistruct "ESPTime" "ESPTime" >}} object. +- `.state_as_esptime()` : Retrieve the current value of the datetime as a object. ```cpp // For example, create a custom log message when a value is received: @@ -225,7 +227,7 @@ advanced stuff (see the full API Reference for more info). ## DateTime Automation -{{< anchor "datetime-datetime_set_action" >}} + ### `datetime.datetime.set` Action @@ -263,7 +265,7 @@ Configuration variables: - **datetime** (**Required**, string, datetime parts, [templatable](/automations/templates)): The value to set the datetime to. -{{< anchor "datetime-datetime-lambda_calls" >}} + ### Lambda calls @@ -287,7 +289,7 @@ For more complex use cases, several methods are available for use on datetimes f - `.hour` : Retrieve the current hour of the `datetime`. It will be `0` if no value has been set. - `.minute` : Retrieve the current minute of the `datetime`. It will be `0` if no value has been set. - `.second` : Retrieve the current second of the `datetime`. It will be `0` if no value has been set. -- `.state_as_esptime()` : Retrieve the current value of the datetime as a {{< apistruct "ESPTime" "ESPTime" >}} object. +- `.state_as_esptime()` : Retrieve the current value of the datetime as a object. ```cpp // For example, create a custom log message when a value is received: @@ -298,10 +300,10 @@ For more complex use cases, several methods are available for use on datetimes f ## See Also -- {{< apiref "DateTimeBase" "datetime/datetime_base.h" >}} -- {{< apiref "DateEntity" "datetime/date_entity.h" >}} -- {{< apiref "DateCall" "datetime/date_entity.h" >}} -- {{< apiref "TimeEntity" "datetime/time_entity.h" >}} -- {{< apiref "TimeCall" "datetime/time_entity.h" >}} -- {{< apiref "DateTimeEntity" "datetime/datetime_entity.h" >}} -- {{< apiref "DateTimeCall" "datetime/datetime_entity.h" >}} +- +- +- +- +- +- +- diff --git a/content/components/datetime/template.md b/src/content/docs/components/datetime/template.mdx similarity index 93% rename from content/components/datetime/template.md rename to src/content/docs/components/datetime/template.mdx index 5b8cfa0a0d..4c0a619b76 100644 --- a/content/components/datetime/template.md +++ b/src/content/docs/components/datetime/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template datetime with ESPHome." title: "Template Datetime" -params: - seo: - description: Instructions for setting up template datetime with ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` datetime platform allows you to create a datetime with templated values using [lambdas](/automations/templates#config-lambda). @@ -107,4 +105,4 @@ datetime: ## See Also - [Automation](/automations) -- {{< apiref "template/datetime/template_date.h" "template/datetime/template_date.h" >}} +- diff --git a/content/components/debug.md b/src/content/docs/components/debug.mdx similarity index 87% rename from content/components/debug.md rename to src/content/docs/components/debug.mdx index e1836d947e..925edf549e 100644 --- a/content/components/debug.md +++ b/src/content/docs/components/debug.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up the debug component in ESPHome" title: "Debug Component" -params: - seo: - description: Instructions for setting up the debug component in ESPHome - image: bug-report.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import debugImg from './images/debug.png'; +import APIRef from '@components/APIRef.astro'; + The `debug` component can be used to debug problems with ESPHome. At startup, it prints a bunch of useful information like reset reason, free heap size, ESPHome version and so on. It also allows you to get the same information as a text sensor, and to monitor the state of the ESP heap memory (free space, maximum free block size and fragmentation level) and the main-loop timing. Monitoring can be done via the logger or web server component if it has been configured. -{{< img src="debug.png" alt="Image" caption="Example debug component output." class="align-center" >}} +
    ```yaml # Example configuration entry @@ -106,6 +112,6 @@ Enables logging output over **SEGGER RTT** (Real Time Transfer), allowing non-in ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "logger/" >}} -- {{< docref "/guides/troubleshooting" >}} - Troubleshooting guide for debugging crashes and boot failures -- {{< apiref "debug/debug_component.h" "debug/debug_component.h" >}} +- [Logger Component](/components/logger/) +- [Troubleshooting](/guides/troubleshooting/) - Troubleshooting guide for debugging crashes and boot failures +- diff --git a/content/components/deep_sleep.md b/src/content/docs/components/deep_sleep.mdx similarity index 95% rename from content/components/deep_sleep.md rename to src/content/docs/components/deep_sleep.mdx index d86824b8be..32b3829b72 100644 --- a/content/components/deep_sleep.md +++ b/src/content/docs/components/deep_sleep.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up the deep sleep support for minimizing power consumption on ESPs." title: "Deep Sleep Component" -params: - seo: - description: Instructions for setting up the deep sleep support for minimizing power consumption on ESPs. - image: hotel.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "deep_sleep-component" >}} + + The `deep_sleep` component can be used to automatically enter a deep sleep mode on the ESP8266/ESP32/BK72xx after a certain amount of time. This is especially useful with nodes that operate @@ -75,7 +73,7 @@ Advanced features: > [!NOTE] > Only one deep sleep component may be configured. -{{< anchor "deep_sleep-esp32_wakeup_pin_mode" >}} + ## ESP32/BK72xx Wakeup Pin Mode @@ -141,7 +139,7 @@ The following integers are the wakeup causes: - **11** - `ESP_SLEEP_WAKEUP_COCPU_TRAP_TRIG` : Wakeup caused by COCPU crash - **12** - `ESP_SLEEP_WAKEUP_BT` : Wakeup caused by BT (light sleep only) -{{< anchor "deep_sleep-enter_action" >}} + ## `deep_sleep.enter` Action @@ -176,7 +174,7 @@ Configuration options: - **until** (*Optional*, string): The time of day to wake up. Only on ESP32. - **time_id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of the time component to use for the `until` option. Only on ESP32. -{{< anchor "deep_sleep-prevent_action" >}} + ## `deep_sleep.prevent` Action @@ -220,7 +218,7 @@ on_...: > - deep_sleep.enter: deep_sleep_1 > ``` -{{< anchor "deep_sleep-allow_action" >}} + ## `deep_sleep.allow` Action @@ -234,6 +232,6 @@ on_...: ## See Also -- {{< docref "switch/shutdown" >}} +- [Shutdown Switch](/components/switch/shutdown/) - [Automation](/automations) -- {{< apiref "deep_sleep/deep_sleep_component.h" "deep_sleep/deep_sleep_component.h" >}} +- diff --git a/content/components/demo.md b/src/content/docs/components/demo.mdx similarity index 59% rename from content/components/demo.md rename to src/content/docs/components/demo.mdx index 68c5d4a7c3..a173352339 100644 --- a/content/components/demo.md +++ b/src/content/docs/components/demo.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up the demo component in ESPHome" title: "Demo Component" -params: - seo: - description: Instructions for setting up the demo component in ESPHome - image: description.svg --- +import { Image } from 'astro:assets'; +import demoUiImg from './images/demo-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `demo` component can be used for testing to generate sample instances of many different components (sensors, lights, ...) -{{< img src="demo-ui.png" alt="Image" width="70.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -23,4 +23,4 @@ This component has no configuration variables ## See Also -- {{< apiref "demo/demo_sensor.h" "demo/demo_sensor.h" >}} +- diff --git a/content/components/dfplayer.md b/src/content/docs/components/dfplayer.mdx similarity index 96% rename from content/components/dfplayer.md rename to src/content/docs/components/dfplayer.mdx index d47025bdef..3ece728819 100644 --- a/content/components/dfplayer.md +++ b/src/content/docs/components/dfplayer.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up DF Player Mini component in ESPHome." title: "DF-Player mini" -params: - seo: - description: Instructions for setting up DF Player Mini component in ESPHome. - image: dfplayer.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import dfplayerFullImg from './images/dfplayer-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `dfplayer` ([datasheet](https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299)), component allows you to play sound and music stored in an SD card or USB flash drive. -{{< img src="dfplayer-full.jpg" alt="Image" caption="DF-Player mini Module." width="50.0%" class="align-center" >}} +
    For this component to work you need to have set up a [UART bus](/components/uart) in your configuration. @@ -406,4 +412,4 @@ api: ## See Also -- {{< apiref "dfplayer/dfplayer.h" "dfplayer/dfplayer.h" >}} +- diff --git a/content/components/dfrobot_sen0395.md b/src/content/docs/components/dfrobot_sen0395.mdx similarity index 86% rename from content/components/dfrobot_sen0395.md rename to src/content/docs/components/dfrobot_sen0395.mdx index 8fed68d4d7..7bb18dcb87 100644 --- a/content/components/dfrobot_sen0395.md +++ b/src/content/docs/components/dfrobot_sen0395.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up DFRobot mmWave Radar" title: "DFRobot mmWave Radar" -params: - seo: - description: Instructions for setting up DFRobot mmWave Radar - image: dfrobot_sen0395.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import dfrobotSen0395FullImg from './images/dfrobot_sen0395-full.jpg'; + The [DFRobot mmWave Radar](https://wiki.dfrobot.com/mmWave_Radar_Human_Presence_Detection_SKU_SEN0395) (aka `SEN0395` ) is a 24GHz radar which can be used for human presence detection. It can detect tiny movements and compared to a PIR sensor **it can detect presence continuously**. This can be useful, for example, to turn @@ -14,9 +14,14 @@ the lights on when you enter a room, keep them on as long as you are there (with sensor) and turn them off almost immediately after you leave the room. It is possible to use this sensor with only a single GPIO pin; however, if you wish to change its settings, -a {{< docref "/components/uart" >}} component (and its requisite GPIO pins) is required in your device's configuration. +a [Uart](/components/uart/) component (and its requisite GPIO pins) is required in your device's configuration. -{{< img src="dfrobot_sen0395-full.jpg" alt="Image" caption="DFRobot mmWave Radar / presence detection sensor" width="75%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -41,16 +46,16 @@ switch: name: Mmwave Active ``` -{{< anchor "dfrobot_sen0395-component" >}} + ## Hub Component You only need to have the hub component (`dfrobot_sen0395:` entry) defined if you want to change the sensor's -settings or read its state via the UART. A {{< docref "/components/binary_sensor/gpio" >}} alone is sufficient if you only want +settings or read its state via the UART. A [Gpio](/components/binary_sensor/gpio/) alone is sufficient if you only want to determine presence/occupancy. When you define `dfrobot_sen0395:` you'll need to have a `uart:` entry in your configuration with both the TX and RX pins defined and the baud rate must be set to `115200`. -Multiple instances of this component may be defined if multiple {{< docref "/components/uart" >}} components are available: +Multiple instances of this component may be defined if multiple [Uart](/components/uart/) components are available: ```yaml dfrobot_sen0395: @@ -66,18 +71,18 @@ dfrobot_sen0395: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. Necessary if you want to define multiple instances of this component. -- **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the {{< docref "/components/uart" >}} if you want +- **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [Uart](/components/uart/) if you want to use multiple UART buses. -{{< anchor "dfrobot_sen0395-binary_sensor" >}} + ## Binary Sensor -{{< anchor "dfrobot_sen0395-via_gpio" >}} + ### Via GPIO -To determine presence, you can simply use a {{< docref "/components/binary_sensor/gpio" >}} and connect a single GPIO pin +To determine presence, you can simply use a [Gpio](/components/binary_sensor/gpio/) and connect a single GPIO pin from your processor to the IO2 pin of the mmWave radar. Using a dedicated GPIO pin may offer an advantage since it may wake the processor from sleep. @@ -94,7 +99,7 @@ binary_sensor: mode: INPUT_PULLDOWN ``` -{{< anchor "dfrobot_sen0395-via_uart" >}} + ### Via UART @@ -102,7 +107,7 @@ Connecting the sensor via the serial connection (UART) allows both changing its Note, however, that the UART peripheral cannot wake the processor; if you plan on sleeping the processor, you'll likely still need to use the [GPIO pin](#dfrobot_sen0395-via_gpio) approach described above (in addition to the UART). -First, setup a {{< docref "/components/uart" >}} and [Hub Component](#dfrobot_sen0395-component) and then use its binary sensor platform +First, setup a [Uart](/components/uart/) and [Hub Component](#dfrobot_sen0395-component) and then use its binary sensor platform to create individual binary sensors for each presence sensor. ```yaml @@ -118,7 +123,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "dfrobot_sen0395-switch" >}} + ## Switch @@ -151,11 +156,11 @@ switch: - All other options from [Switch](/components/switch#config-switch). -{{< anchor "dfrobot_sen0395-actions" >}} + ## Actions -{{< anchor "dfrobot_sen0395-action_settings" >}} + ### `dfrobot_sen0395.settings` Action @@ -250,6 +255,6 @@ on_...: ## See Also - [UART bus](/components/uart) -- [Binary Sensor](/components/binary_sensor#config-binary_sensor) +- [Binary Sensor Component](/components/binary_sensor#config-binary_sensor) - [ID](/guides/configuration-types#id) - [DFRobot mmWave Radar Wiki page](https://wiki.dfrobot.com/mmWave_Radar_Human_Presence_Detection_SKU_SEN0395) diff --git a/content/components/display/addressable_light.md b/src/content/docs/components/display/addressable_light.mdx similarity index 76% rename from content/components/display/addressable_light.md rename to src/content/docs/components/display/addressable_light.mdx index 461778f4a2..fde77e71b9 100644 --- a/content/components/display/addressable_light.md +++ b/src/content/docs/components/display/addressable_light.mdx @@ -1,19 +1,29 @@ --- description: "Instructions for setting up displays using addressable lights and LED matrix" title: "Addressable Light" -params: - seo: - description: Instructions for setting up displays using addressable lights and LED matrix - image: addressable_light.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import addressableLightPixelMapDefaultImg from './images/addressable_light_pixel_map_default.png'; +import addressableLightPixelMap8x32Img from './images/addressable_light_pixel_map_8x32.png'; +import APIClass from '@components/APIClass.astro'; +import APIRef from '@components/APIRef.astro'; + The `addressable_light` display platform allows to display text and graphics on an addressable light that has been arranged in a display matrix. -The display requires that an {{< apiclass "AddressableLight" "light::AddressableLight" >}} component, such as -{{< docref "/components/light/fastled" >}} or {{< docref "/components/light/neopixelbus" >}}, be defined. +The display requires that an component, such as +[Fastled](/components/light/fastled/) or [Neopixelbus](/components/light/neopixelbus/), be defined. -{{< img src="addressable_light.jpg" alt="Image" caption="WS2812B Addressable Light Display" width="75.0%" class="align-center" >}} +
    ```yaml display: @@ -52,7 +62,7 @@ display: given the supplied the `x` and `y` pixel coordinate. By default, a left-to-right direct pixel mapper is used. - **lambda** (*Optional*, [lambda](/automations/templates#config-lambda)): The lambda to use for rendering the content on the display. - `it` will be an instance of {{< apiclass "DisplayBuffer" "display::DisplayBuffer" >}}. + `it` will be an instance of . See [Display Rendering Engine](/components/display#display-engine) for more information. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. @@ -81,13 +91,23 @@ Determining the correct algorithm for the pixel mapper for your matrix will hope The default pixel mapper assumes that the led matrix is addressed starting with the top left LED, moving to the right, and then starting with the left-most row of the next row. -{{< img src="addressable_light_pixel_map_default.png" alt="Image" caption="Default pixel_mapper as used with a 4x4 led matrix" width="75.0%" class="align-center" >}} +
    ### BTF-Lighting 8x32 WS2812B Flexible LED Matrix The following image illustrates the path the addressable strip takes through the common the BTF-Lighting 8x32 matrix. -{{< img src="addressable_light_pixel_map_8x32.png" alt="Image" caption="LED layout for BTF-Lighting 8x32 WS2812B Flexible LED Matrix" width="75.0%" class="align-center" >}} +
    Below is a definition that includes a pixel_mapper suitable for these 8x32 matrices. @@ -128,8 +148,8 @@ display: ## See Also -- {{< apiref "addressable_light/addressable_light_display.h" "addressable_light/addressable_light_display.h" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/fastled" >}} -- {{< docref "/components/light/neopixelbus" >}} -- {{< docref "/components/light/partition" >}} +- [Light Component](/components/light/) +- [FastLED Light](/components/light/fastled/) +- [NeoPixelBus Light](/components/light/neopixelbus/) +- [Light Partition](/components/light/partition/) +- diff --git a/content/components/display/epaper_spi.md b/src/content/docs/components/display/epaper_spi.mdx similarity index 80% rename from content/components/display/epaper_spi.md rename to src/content/docs/components/display/epaper_spi.mdx index d69367a2a1..58af346f3d 100644 --- a/content/components/display/epaper_spi.md +++ b/src/content/docs/components/display/epaper_spi.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up ePaper SPI displays in ESPHome." title: "ePaper SPI Display" -params: - seo: - description: Instructions for setting up ePaper SPI displays with improved architecture in ESPHome. - image: epaper.svg --- +import APIRef from '@components/APIRef.astro'; + The `epaper_spi` display platform provides a new ePaper display component architecture with improved state management and non-blocking operation. This component implements a @@ -31,11 +29,11 @@ display: These are the supported controller chips. Using just the chip name as the model will require full configuration with pins and dimensions specified. -| Chip name | Manufacturer | Product Description | -|------------------------|--------------|----------------------------------------------------------| -| JD79660 | Jadard | (B2B, see vendors instead) | -| Spectra-E6 | Eink | | -| SSD1677 | Solomon | | +| Chip name | Manufacturer | Product Description | +|------------------------|--------------|----------------------------------------------------| +| JD79660 | Jadard | [https://www.tdytech.com/en/](https://www.tdytech.com/en/) (B2B, see vendors instead) | +| Spectra-E6 | Eink | [https://www.eink.com/brand/detail/Spectra6](https://www.eink.com/brand/detail/Spectra6) | +| SSD1677 | Solomon | [https://www.solomon-systech.com/product/ssd1677/](https://www.solomon-systech.com/product/ssd1677/) | ## Supported display panels @@ -44,9 +42,9 @@ the pins used to interface to the display to be specified. | Display name | Manufacturer | Product Description | |---------------------|--------------|----------------------------------------------------| -| Waveshare-1.54in-G | Waveshare | | -| Waveshare-2.13in-v3 | Waveshare | | -| Waveshare-4.26in | Waveshare | | +| Waveshare-1.54in-G | Waveshare | [https://www.waveshare.com/1.54inch-e-paper-g.htm](https://www.waveshare.com/1.54inch-e-paper-g.htm) | +| Waveshare-2.13in-v3 | Waveshare | [https://www.waveshare.com/pico-epaper-2.13.htm](https://www.waveshare.com/pico-epaper-2.13.htm) | +| Waveshare-4.26in | Waveshare | [https://www.waveshare.com/4.26inch-e-paper.htm](https://www.waveshare.com/4.26inch-e-paper.htm) | ## Supported integrated display boards @@ -55,8 +53,8 @@ a minimum only the model name need be configured. Other options can be overridde | Model name | Manufacturer | Product Description | | ---------------------- |--------------| ---------------------------------------------------------------------------------------------------------------------------- | -| Seeed-reTerminal-E1002 | Seeed Studio | | -| Seeed-ee04-mono-4.26 | Seeed Studio | Seeed EE04 board with Waveshare 4.26" mono epaper. | +| Seeed-reTerminal-E1002 | Seeed Studio | [https://www.seeedstudio.com/reTerminal-E1002-p-6533.html](https://www.seeedstudio.com/reTerminal-E1002-p-6533.html) | +| Seeed-ee04-mono-4.26 | Seeed Studio | Seeed EE04 board with Waveshare 4.26" mono epaper. [https://www.seeedstudio.com/XIAO-ePaper-Display-Board-EE04-p-6560.html](https://www.seeedstudio.com/XIAO-ePaper-Display-Board-EE04-p-6560.html) | ## Configuration variables @@ -117,6 +115,6 @@ display: ## See Also -- {{< apiref "epaper_spi/epaper_spi.h" "epaper_spi/epaper_spi.h" >}} - [ESPHome Display Rendering Engine](/components/display#display-engine) -- {{< docref "components/lvgl" >}} +- [LVGL Graphics](/components/lvgl/) +- diff --git a/content/components/display/hub75.md b/src/content/docs/components/display/hub75.mdx similarity index 97% rename from content/components/display/hub75.md rename to src/content/docs/components/display/hub75.mdx index a5f5dabb34..58572c7b96 100644 --- a/content/components/display/hub75.md +++ b/src/content/docs/components/display/hub75.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up HUB75 RGB LED matrix displays." title: "HUB75 RGB LED Matrix Display" -params: - seo: - description: Instructions for setting up HUB75 RGB LED matrix displays. - image: hub75.svg --- +import APIRef from '@components/APIRef.astro'; + The `hub75` display platform allows you to use HUB75 RGB LED matrix panels with ESPHome. This component uses a high-performance DMA-based driver that provides efficient, low-CPU-overhead driving of LED matrix panels. @@ -287,7 +285,7 @@ display: ## Using with LVGL -When using this display with {{< docref "/components/lvgl/index" "LVGL" >}}, you must configure the display as follows: +When using this display with [LVGL](/components/lvgl/), you must configure the display as follows: ```yaml display: @@ -430,7 +428,7 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/lvgl/index" "LVGL Component" >}} -- {{< apiref "hub75/hub75_component.h" "hub75/hub75_component.h" >}} +- [Display Component](/components/display/) +- [LVGL Component](/components/lvgl/) - [HUB75 ESP32 Driver Library](https://github.com/stuartparmenter/hub75-esp32) +- diff --git a/content/components/display/ili9xxx.md b/src/content/docs/components/display/ili9xxx.mdx similarity index 95% rename from content/components/display/ili9xxx.md rename to src/content/docs/components/display/ili9xxx.mdx index 2a92f653fb..3e50752eb9 100644 --- a/content/components/display/ili9xxx.md +++ b/src/content/docs/components/display/ili9xxx.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up ILI9xxx like TFT LCD display drivers." title: "ILI9xxx TFT LCD Series" -params: - seo: - description: Instructions for setting up ILI9xxx like TFT LCD display drivers. - image: ili9341.jpg --- -{{< anchor "ili9xxx" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ili9341FullImg from './images/ili9341-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Models @@ -50,14 +51,19 @@ beyond the basic SPI connections, and a reasonable amount of RAM, it is not well > [!NOTE] > PSRAM is not automatically enabled on the ESP32 (this changed with the 2025.2 release.) If PSRAM is available, you -> should enable it with the {{< docref "/components/psram" "PSRAM configuration" >}}. +> should enable it with the [PSRAM configuration](/components/psram/). > Use of 16 bit colors requires twice the amount of RAM as 8 bit, and may not be usable unless PSRAM is available. > [!NOTE] > The default color depth is 16 bit (RGB565). 8 bit color is also supported, but the color palette must be set to one of the available options. > Use of 16 bit colors requires twice the amount of RAM as 8 bit, and may not be usable unless PSRAM is available. -{{< img src="ili9341-full.jpg" alt="Image" caption="ILI9341 display" width="75.0%" class="align-center" >}} +
    ```yaml # Example minimal configuration entry @@ -283,5 +289,5 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "ili9xxx/ili9xxx_display.h" "ili9xxx/ili9xxx_display.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/images/addressable_light_pixel_map_8x32.png b/src/content/docs/components/display/images/addressable_light_pixel_map_8x32.png similarity index 100% rename from content/components/display/images/addressable_light_pixel_map_8x32.png rename to src/content/docs/components/display/images/addressable_light_pixel_map_8x32.png diff --git a/content/components/display/images/addressable_light_pixel_map_default.png b/src/content/docs/components/display/images/addressable_light_pixel_map_default.png similarity index 100% rename from content/components/display/images/addressable_light_pixel_map_default.png rename to src/content/docs/components/display/images/addressable_light_pixel_map_default.png diff --git a/content/components/display/images/display_rendering_colors.png b/src/content/docs/components/display/images/display_rendering_colors.png similarity index 100% rename from content/components/display/images/display_rendering_colors.png rename to src/content/docs/components/display/images/display_rendering_colors.png diff --git a/content/components/display/images/display_rendering_line.png b/src/content/docs/components/display/images/display_rendering_line.png similarity index 100% rename from content/components/display/images/display_rendering_line.png rename to src/content/docs/components/display/images/display_rendering_line.png diff --git a/content/components/display/images/display_rendering_shapes.png b/src/content/docs/components/display/images/display_rendering_shapes.png similarity index 100% rename from content/components/display/images/display_rendering_shapes.png rename to src/content/docs/components/display/images/display_rendering_shapes.png diff --git a/content/components/display/images/display_rendering_text.png b/src/content/docs/components/display/images/display_rendering_text.png similarity index 100% rename from content/components/display/images/display_rendering_text.png rename to src/content/docs/components/display/images/display_rendering_text.png diff --git a/content/components/display/images/ili9341-full.jpg b/src/content/docs/components/display/images/ili9341-full.jpg similarity index 100% rename from content/components/display/images/ili9341-full.jpg rename to src/content/docs/components/display/images/ili9341-full.jpg diff --git a/content/components/display/images/lcd-hello_world.jpg b/src/content/docs/components/display/images/lcd-hello_world.jpg similarity index 100% rename from content/components/display/images/lcd-hello_world.jpg rename to src/content/docs/components/display/images/lcd-hello_world.jpg diff --git a/content/components/display/images/lcd-pcf8574.jpg b/src/content/docs/components/display/images/lcd-pcf8574.jpg similarity index 100% rename from content/components/display/images/lcd-pcf8574.jpg rename to src/content/docs/components/display/images/lcd-pcf8574.jpg diff --git a/content/components/display/images/lcd_gpio.svg b/src/content/docs/components/display/images/lcd_gpio.svg similarity index 100% rename from content/components/display/images/lcd_gpio.svg rename to src/content/docs/components/display/images/lcd_gpio.svg diff --git a/content/components/display/images/max7219-full.jpg b/src/content/docs/components/display/images/max7219-full.jpg similarity index 100% rename from content/components/display/images/max7219-full.jpg rename to src/content/docs/components/display/images/max7219-full.jpg diff --git a/content/components/display/images/max7219digit.png b/src/content/docs/components/display/images/max7219digit.png similarity index 100% rename from content/components/display/images/max7219digit.png rename to src/content/docs/components/display/images/max7219digit.png diff --git a/content/components/display/images/nextion-full.jpg b/src/content/docs/components/display/images/nextion-full.jpg similarity index 100% rename from content/components/display/images/nextion-full.jpg rename to src/content/docs/components/display/images/nextion-full.jpg diff --git a/content/components/display/images/pcd8544-full.jpg b/src/content/docs/components/display/images/pcd8544-full.jpg similarity index 100% rename from content/components/display/images/pcd8544-full.jpg rename to src/content/docs/components/display/images/pcd8544-full.jpg diff --git a/content/components/display/images/ssd1306-full.jpg b/src/content/docs/components/display/images/ssd1306-full.jpg similarity index 100% rename from content/components/display/images/ssd1306-full.jpg rename to src/content/docs/components/display/images/ssd1306-full.jpg diff --git a/content/components/display/images/ssd1322-full.jpg b/src/content/docs/components/display/images/ssd1322-full.jpg similarity index 100% rename from content/components/display/images/ssd1322-full.jpg rename to src/content/docs/components/display/images/ssd1322-full.jpg diff --git a/content/components/display/images/ssd1325-full.jpg b/src/content/docs/components/display/images/ssd1325-full.jpg similarity index 100% rename from content/components/display/images/ssd1325-full.jpg rename to src/content/docs/components/display/images/ssd1325-full.jpg diff --git a/content/components/display/images/ssd1327-full.jpg b/src/content/docs/components/display/images/ssd1327-full.jpg similarity index 100% rename from content/components/display/images/ssd1327-full.jpg rename to src/content/docs/components/display/images/ssd1327-full.jpg diff --git a/content/components/display/images/ssd1331-full.jpg b/src/content/docs/components/display/images/ssd1331-full.jpg similarity index 100% rename from content/components/display/images/ssd1331-full.jpg rename to src/content/docs/components/display/images/ssd1331-full.jpg diff --git a/content/components/display/images/ssd1351-full.jpg b/src/content/docs/components/display/images/ssd1351-full.jpg similarity index 100% rename from content/components/display/images/ssd1351-full.jpg rename to src/content/docs/components/display/images/ssd1351-full.jpg diff --git a/content/components/display/images/st7567-full.jpg b/src/content/docs/components/display/images/st7567-full.jpg similarity index 100% rename from content/components/display/images/st7567-full.jpg rename to src/content/docs/components/display/images/st7567-full.jpg diff --git a/content/components/display/images/st7789v-full.jpg b/src/content/docs/components/display/images/st7789v-full.jpg similarity index 100% rename from content/components/display/images/st7789v-full.jpg rename to src/content/docs/components/display/images/st7789v-full.jpg diff --git a/content/components/display/images/st7920-full.jpg b/src/content/docs/components/display/images/st7920-full.jpg similarity index 100% rename from content/components/display/images/st7920-full.jpg rename to src/content/docs/components/display/images/st7920-full.jpg diff --git a/content/components/display/images/t-display-amoled.jpg b/src/content/docs/components/display/images/t-display-amoled.jpg similarity index 100% rename from content/components/display/images/t-display-amoled.jpg rename to src/content/docs/components/display/images/t-display-amoled.jpg diff --git a/content/components/display/images/tab5-version-label.jpg b/src/content/docs/components/display/images/tab5-version-label.jpg similarity index 100% rename from content/components/display/images/tab5-version-label.jpg rename to src/content/docs/components/display/images/tab5-version-label.jpg diff --git a/content/components/display/images/test_card.jpg b/src/content/docs/components/display/images/test_card.jpg similarity index 100% rename from content/components/display/images/test_card.jpg rename to src/content/docs/components/display/images/test_card.jpg diff --git a/content/components/display/images/tm1621-full.jpg b/src/content/docs/components/display/images/tm1621-full.jpg similarity index 100% rename from content/components/display/images/tm1621-full.jpg rename to src/content/docs/components/display/images/tm1621-full.jpg diff --git a/content/components/display/images/tm1637-full.jpg b/src/content/docs/components/display/images/tm1637-full.jpg similarity index 100% rename from content/components/display/images/tm1637-full.jpg rename to src/content/docs/components/display/images/tm1637-full.jpg diff --git a/content/components/display/images/tm1637_2devices.png b/src/content/docs/components/display/images/tm1637_2devices.png similarity index 100% rename from content/components/display/images/tm1637_2devices.png rename to src/content/docs/components/display/images/tm1637_2devices.png diff --git a/content/components/display/images/tm1637_3plus_devices.png b/src/content/docs/components/display/images/tm1637_3plus_devices.png similarity index 100% rename from content/components/display/images/tm1637_3plus_devices.png rename to src/content/docs/components/display/images/tm1637_3plus_devices.png diff --git a/content/components/display/images/tm1637_key_connections.png b/src/content/docs/components/display/images/tm1637_key_connections.png similarity index 100% rename from content/components/display/images/tm1637_key_connections.png rename to src/content/docs/components/display/images/tm1637_key_connections.png diff --git a/content/components/display/images/tm1638-full.jpg b/src/content/docs/components/display/images/tm1638-full.jpg similarity index 100% rename from content/components/display/images/tm1638-full.jpg rename to src/content/docs/components/display/images/tm1638-full.jpg diff --git a/content/components/display/images/waveshare_epaper-full.jpg b/src/content/docs/components/display/images/waveshare_epaper-full.jpg similarity index 100% rename from content/components/display/images/waveshare_epaper-full.jpg rename to src/content/docs/components/display/images/waveshare_epaper-full.jpg diff --git a/content/components/display/images/waveshare_epaper-pins.jpg b/src/content/docs/components/display/images/waveshare_epaper-pins.jpg similarity index 100% rename from content/components/display/images/waveshare_epaper-pins.jpg rename to src/content/docs/components/display/images/waveshare_epaper-pins.jpg diff --git a/content/components/display/images/waveshare_epaper_7color_acep-full.jpg b/src/content/docs/components/display/images/waveshare_epaper_7color_acep-full.jpg similarity index 100% rename from content/components/display/images/waveshare_epaper_7color_acep-full.jpg rename to src/content/docs/components/display/images/waveshare_epaper_7color_acep-full.jpg diff --git a/content/components/display/_index.md b/src/content/docs/components/display/index.mdx similarity index 90% rename from content/components/display/_index.md rename to src/content/docs/components/display/index.mdx index 87d87f84be..1b541d627e 100644 --- a/content/components/display/_index.md +++ b/src/content/docs/components/display/index.mdx @@ -1,32 +1,38 @@ --- description: "Instructions for setting up the display component." title: "Display Component" -params: - seo: - description: Instructions for setting up the display component. - image: folder-open.svg +sidebar: + label: "Display Component" --- +import { Image } from 'astro:assets'; +import displayRenderingLineImg from './images/display_rendering_line.png'; +import displayRenderingShapesImg from './images/display_rendering_shapes.png'; +import displayRenderingColorsImg from './images/display_rendering_colors.png'; +import displayRenderingTextImg from './images/display_rendering_text.png'; +import testCardImg from './images/test_card.jpg'; +import APIRef from '@components/APIRef.astro'; + The `display` component houses ESPHome's graphical rendering and display engine. It caters for a wide range of different display types, from simple character displays to graphical displays with fully addressable pixels. -- Character displays like {{< docref "max7219" "7-Segment displays" >}} or - {{< docref "lcd_display" "LCD displays" >}}. +- Character displays like [7-Segment displays](/components/display/max7219/) or + [LCD displays](/components/display/lcd_display/). -- Serial displays like {{< docref "nextion/" >}} that have their own processors for graphics rendering. +- Serial displays like [Nextion](/components/display/nextion/) that have their own processors for graphics rendering. - Graphical displays with fully addressable pixels, such as - {{< docref "mipi_spi" "SPI interfaced LCDs" >}}, - {{< docref "waveshare_epaper" "E-Paper" >}}, - {{< docref "hub75" "HUB75 LED matrices" >}}, - and {{< docref "ssd1306" "OLED" >}}. + [SPI interfaced LCDs](/components/display/mipi_spi/), + [E-Paper](/components/display/waveshare_epaper/), + [HUB75 LED matrices](/components/display/hub75/), + and [OLED](/components/display/ssd1306/). For graphical displays, which offer the greatest flexibility, there are two options for displaying content: - ESPHome's [own rendering engine](#display-engine) -- {{< docref "/components/lvgl/index" "LVGL" >}} - Light and Versatile Graphics Library +- [LVGL](/components/lvgl/) - Light and Versatile Graphics Library -{{< anchor "display-configuration" >}} + ## Configuration variables @@ -44,7 +50,7 @@ All *graphical* displays also inherit these configuration variables. - **rotation** (*Optional*, integer): The rotation of the display in degrees, one of 0, 90, 180 or 270. Defaults to `0`. - **pages** (*Optional*, list): Pages configuration - see below. -{{< anchor "display-engine" >}} + ### Display Rendering Engine @@ -73,7 +79,7 @@ this behavior by setting `auto_clear_enabled: false`. In the lambda, you can write code like in any [lambda](/automations/templates#config-lambda) in ESPHome. Display lambdas are additionally passed a variable called `it` which represents the rendering engine object. -{{< img src="display_rendering_line.png" alt="Image" class="align-center" >}} + ```yaml display: @@ -104,7 +110,7 @@ the rendering engine is always first specify the `x` coordinate and then the `y` Now that you know a bit more about ESPHome's coordinate system, let's draw some basic shapes like lines, rectangles, circles or even polygons: -{{< img src="display_rendering_shapes.png" alt="Image" class="align-center" >}} + ```yaml display: @@ -163,7 +169,7 @@ display: For color displays (e.g. TFT displays), you can use the Color class. -{{< img src="display_rendering_colors.png" alt="Image" class="align-center" >}} + ```yaml display: @@ -198,7 +204,7 @@ display: You can view the full API documentation for the rendering engine in the "API Reference" in the See Also section. -{{< anchor "display-static_text" >}} + ### Drawing Static Text @@ -256,9 +262,9 @@ display: it.print(0, 0, id(my_font_with_icons), COLOR_ON, TextAlign::CENTER, "Just\U000f05d4here. Already\U000F02D1this.", COLOR_OFF); ``` -{{< img src="display_rendering_text.png" alt="Image" class="align-center" >}} + -{{< anchor "display-printf" >}} + ### Formatted Text @@ -289,7 +295,7 @@ stuff after it is encountered, it is magically replaced by the argument after th Every time you type a percent sign `%` in a printf format string, it will treat the following letters as a format tag until a so-called "specifier" is encountered (in this case `f` ). You can read more about it -at , +at [https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm](https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm), but for ESPHome there are really just a few things you need to know. Let's break `%.1f` down: @@ -370,15 +376,15 @@ display: > [!NOTE] > For displaying external data on the display, for example data from your Home Assistant instance, -> you can use the {{< docref "/components/text_sensor/mqtt_subscribe" >}} (see the example there for more information). +> you can use the [Mqtt Subscribe](/components/text_sensor/mqtt_subscribe/) (see the example there for more information). -{{< anchor "display-strftime" >}} + ### Displaying Time You can display current time using a time component. Please see the example on the [time documentation](/components/time#strftime). -{{< anchor "clipping" >}} + ### Screen Clipping @@ -431,7 +437,7 @@ class Rect { With `is_clipping();` tells you if clipping is activated. -{{< anchor "config-color" >}} + ### Color @@ -480,7 +486,7 @@ Configuration variables: RGB displays use red, green, and blue, while grayscale displays may use white. -{{< anchor "display-pages" >}} + ### Display Pages @@ -547,7 +553,7 @@ on_...: > - component.update: my_display > ``` -{{< anchor "display-is_displaying_page-condition" >}} + **display.is_displaying_page**: This condition returns true while the specified page is being shown. @@ -568,7 +574,7 @@ on_...: ... ``` -{{< anchor "display-on_page_change-trigger" >}} + **on_page_change**: This automation will be triggered when the page that is shown changes. @@ -599,7 +605,7 @@ If you're experiencing issues with your color display, the `show_test_card: true - Together with that it will show the letters "**R**", "**G**" and "**B**" to validate the display geometry. - There will be a rectangle around the corners of the display with a marker at the 0,0 corner which should be at the top left of the screen. -{{< img src="test_card.jpg" alt="Image" width="50.0%" class="align-center" >}} + When all points above are shown correctly then the display is working as expected. To help the graphics display team determine the best way to help you, **a picture of the result of this option is very helpful.** @@ -613,16 +619,16 @@ be sure to **include a link to where you purchased the display** so that we can > [!NOTE] > For displays in 8 bit mode you will see distinct color blocks rather than a smooth gradient. -### See Also +## See Also -- {{< apiref "display/display_buffer.h" "display/display_buffer.h" >}} -- {{< docref "/components/lvgl/index" >}} -- {{< docref "/components/display/mipi_spi" >}} -- {{< docref "/components/display/mipi_rgb" >}} -- {{< docref "/components/display/mipi_dsi" >}} +- [LVGL](/components/lvgl/) +- [MIPI SPI Display Driver](/components/display/mipi_spi/) +- [MIPI RGB Display Driver](/components/display/mipi_rgb/) +- [MIPI DSI Display Driver](/components/display/mipi_dsi/) - [Fonts](/components/font#display-fonts) - [Graph Component](/components/graph#display-graphs) - [QR Code Component](/components/qr_code#display-qrcode) - [Image Component](/components/image#display-image) - [Animation Component](/components/animation#display-animation) -- [Online Image](/components/online_image#online_image) +- [Online Image Component](/components/online_image#online_image) +- diff --git a/content/components/display/inkplate.md b/src/content/docs/components/display/inkplate.mdx similarity index 97% rename from content/components/display/inkplate.md rename to src/content/docs/components/display/inkplate.mdx index b654b3e04c..d1147b2f85 100644 --- a/content/components/display/inkplate.md +++ b/src/content/docs/components/display/inkplate.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up Inkplate E-Paper displays in ESPHome." title: "Inkplate 5, 6, 10 and 6 Plus" -params: - seo: - description: Instructions for setting up Inkplate E-Paper displays in ESPHome. - image: inkplate6.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + All-in-one e-paper display `Inkplate 5`, `Inkplate 6`, `Inkplate 10` and `Inkplate 6 Plus`. The Inkplate 5, 6, 10 and 6 Plus are powerful, Wi-Fi enabled ESP32 based six-inch e-paper displays - @@ -14,7 +13,14 @@ recycled from a Kindle e-reader. Its main feature is simplicity. Learn more at [Inkplate's documentation website](https://inkplate.readthedocs.io/en/stable/) -{{< img src="inkplate6.jpg" alt="Image" caption="Inkplate 6" width="75.0%" class="align-center" >}} +
    ```yaml # Example minimal configuration entry @@ -520,8 +526,8 @@ display: number: 5 ``` -### See Also +## See Also -- {{< docref "index/" >}} -- {{< docref "/components/touchscreen/ektf2232" >}} +- [Display Component](/components/display/) +- [EKTF2232 Touchscreen Controller](/components/touchscreen/ektf2232/) - [Inkplate Arduino library](https://github.com/SolderedElectronics/Inkplate-Arduino-library) by [Soldered Electronics](https://soldered.com/) diff --git a/content/components/display/lcd_display.md b/src/content/docs/components/display/lcd_display.mdx similarity index 91% rename from content/components/display/lcd_display.md rename to src/content/docs/components/display/lcd_display.mdx index 675e0fdd86..c43ff5d930 100644 --- a/content/components/display/lcd_display.md +++ b/src/content/docs/components/display/lcd_display.mdx @@ -1,17 +1,20 @@ --- description: "Instructions for setting up character-based HD44780 LCDs." title: "Character-Based LCD Display" -params: - seo: - description: Instructions for setting up character-based HD44780 LCDs. - image: lcd.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import lcdHelloWorldImg from './images/lcd-hello_world.jpg'; +import lcdPcf8574Img from './images/lcd-pcf8574.jpg'; +import lcdGpioImg from './images/lcd_gpio.svg'; +import APIRef from '@components/APIRef.astro'; + The `lcd_pcf8574` and `lcd_gpio` display components allow you to use HD44780-compatible, character-based LCDs with ESPHome. This component is only for LCDs that display individual characters on a screen (usually 8-40 columns and 2-4 rows), and not for LCDs that can control each pixel individually. -{{< img src="lcd-hello_world.jpg" alt="Image" width="60.0%" class="align-center" >}} + > [!NOTE] > Multiple versions of the display exist, supporting different character sets: @@ -22,7 +25,7 @@ with ESPHome. This component is only for LCDs that display individual characters > > It is also possible to add eight user-defined characters. -{{< anchor "lcd-pcf8574" >}} + ## lcd_pcf8574 Component @@ -30,7 +33,12 @@ with ESPHome. This component is only for LCDs that display individual characters benefit that you only need to connect two data wires to the ESP instead of the six or ten as with the [lcd_gpio Component](#lcd-gpio). The communication happens via [I²C Bus](/components/i2c), you need to have an `i2c:` section in your configuration. -{{< img src="lcd-pcf8574.jpg" alt="Image" caption="LCD Display with a PCF8574 board attached on the back" width="75.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -62,7 +70,7 @@ display: > If you're not seeing anything on the display, try turning the contrast potentiometer around on the > PCF8574 board. -{{< anchor "lcd-gpio" >}} + ## lcd_gpio Component @@ -70,7 +78,12 @@ The `lcd_gpio` version of this component addresses the screen directly and does Each of the data pins of the LCD needs a dedicated GPIO pin on the ESP. Connecting the screen this way offers faster refresh, especially in conjunction with an [LCD Menu](/components/display_menu/lcd_menu#lcd_menu). -{{< img src="lcd_gpio.svg" alt="Image" caption="LCD Display GPIO pinout" width="75.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -111,7 +124,7 @@ display: > If you're not seeing anything on the display, make sure you apply `3.3V` to the `VEE` (`03` ) contrast control > pin of the board. You can use a potentiometer to make it adjustable. -{{< anchor "display-lcd_lambda" >}} + ## Rendering Lambda @@ -245,14 +258,14 @@ binary_sensor: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/switch/gpio" >}} -- {{< docref "/components/binary_sensor/gpio" >}} +- [Display Component](/components/display/) +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [LCD Menu](/components/display_menu/lcd_menu#lcd_menu) - [Add pages to LCD display](/cookbook/lambda_magic#lambda_magic_pages) -- {{< docref "/components/pcf8574" >}} +- [PCF8574 I/O Expander](/components/pcf8574/) - [HD44780U (LCD-II) datasheet](https://www.sparkfun.com/datasheets/LCD/HD44780.pdf) - [Charset cheatsheet](https://user-images.githubusercontent.com/1550668/173113487-9c98e866-8ee4-4a3c-a83f-61fe62057c5f.png) - [Custom Character Generator](https://omerk.github.io/lcdchargen/) - [Arduino LiquidCrystal Library](https://www.arduino.cc/en/Reference/LiquidCrystal) -- {{< apiref "lcd_base/lcd_display.h" "lcd_base/lcd_display.h" >}} +- diff --git a/src/content/docs/components/display/max7219.mdx b/src/content/docs/components/display/max7219.mdx new file mode 100644 index 0000000000..d0edc2d30c --- /dev/null +++ b/src/content/docs/components/display/max7219.mdx @@ -0,0 +1,191 @@ +--- +description: "Instructions for setting up MAX7219 7-segment displays." +title: "MAX7219 7-Segment Display" +--- + +import { Image } from 'astro:assets'; +import max7219FullImg from './images/max7219-full.jpg'; +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; + +The `max7219` display platform allows you to use MAX7219 7-segment display drivers ( +[datasheet](https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf), +[hobbycomponents](https://hobbycomponents.com/displays/597-max7219-8-digit-seven-segment-display-module)) +with ESPHome. Please note that this component is *only* for 7-segment display, not matrix configurations. + +
    + +As the communication with the MAX7219 is done using SPI for this component, you need +to have an [SPI bus](/components/spi) in your configuration with both the **mosi_pin** set (miso_pin is not required). +Connect VCC to 3.3V (the manufacturer recommends 4+ V, but 3.3V seems to work fine), DIN to your `mosi_pin` and +CS to your set `cs_pin` and finally GND to GND. + +You can even daisy-chain multiple MAX7219s by connecting the DOUT of the previous chip in the chain to the +next DIN. With more than ~3 chips the 3.3V will probably not be enough, so then you will have to potentially +use a logic level converted. + +```yaml +# Example configuration entry +spi: + clk_pin: D0 + mosi_pin: D1 + +display: + - platform: max7219 + cs_pin: D2 + num_chips: 1 + lambda: |- + it.print("01234567"); +``` + +## Configuration variables + +- **cs_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The pin you have the CS line hooked up to. +- **num_chips** (*Optional*, int): The number of chips you wish to use for daisy chaining. Defaults to + `1`. + +- **intensity** (*Optional*, int): The intensity with which the MAX7219 should drive the outputs. Range is from + 0 (least intense) to 15 (the default). + +- **lambda** (*Optional*, [lambda](/automations/templates#config-lambda)): The lambda to use for rendering the content on the MAX7219. + See [Rendering Lambda](#display-max7219_lambda) for more information. + +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to re-draw the screen. Defaults to `1s`. +- **spi_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [SPI Component](/components/spi) if you want + to use multiple SPI buses. + +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. +- **reverse_enable** (*Optional*, boolean): For some displays the order of the chips is reversed so you'll see "56781234" instead of "12345678". This option will adjust the output to compensate. Defaults to `false`. + + + +## Rendering Lambda + +The MAX7219 has a similar API to the fully fledged [Display Rendering Engine](/components/display#display-engine), but it's only a subset as the MAX7219 +7-segment displays don't have a concept of individual pixels. In the lambda you're passed a variable called `it` +as with all other displays. In this case however, `it` is an MAX7219 instance (see API Reference). + +The most basic operation with the MAX7219 is wiring a simple number to the screen as in the configuration example +at the top of this page. But even though you're passing in a string (here `"01234567"` ), ESPHome converts it +into a representation that the MAX7219 can understand: The exact pixels that should be turned on. And of course, +not all characters can be represented. You can see a full list of characters [below](#display-max7219_characters). + +Each of the three methods (`print`, `printf` and `strftime` ) all optionally take a position argument at the +beginning which can be used to print the text at a specific position. This argument is `0` by default which +means the first character of the first MAX7219. For example to start the first character of your text at +the end of the first MAX7219, you would write `it.print(7, "0");`. + +Also note that the `.` (dot) character is special because when ESPHome encounters it in the string the dot +segment of the previous position will be enabled. + +```yaml +display: + - platform: max7219 + # ... + lambda: |- + // Print 0 at position 0 (left) + it.print("0"); + // Result: "0 " + + // Print 1 at position 1 (second character) + it.print(1, "1"); + // Result: "01 " + + // Let's write a sensor value (let's assume it's 42.1) + it.printf(3, "%.1f", id(my_sensor).state); + // Result: "01 42.1 " (the dot will appear on the "2" segment) + + // Overwrite the previous content with blank + it.print(" "); + // Print a right-padded sensor value with 0 digits after the decimal + it.printf("SENS%4.0f", id(my_sensor).state); + // Result: "SENS 42" + + // Print the current time + it.print(" "); + it.strftime("%H.%M.%S", id(esptime).now()); + // Result for 10:06:42 -> "10.06.42 " + + // Change the display intnsity based on another id. + // Value should be from 0-15. + it.set_intensity(id(my_brightness)); +``` + +Please see [Formatted Text](/components/display#display-printf) for a quick introduction into the `printf` formatting rules and +[Displaying Time](/components/display#display-strftime) for an introduction into the `strftime` time formatting. + + + +## All 7-Segment Characters + +| **MAX7219 Representation** | **Character** | +| --------------------------------------- | ----------------- | +| | *(space)* | +| | `.` | +| | `!` | +| | `0`, `O` | +| | `1`, `I` | +| | `2`, `Z` | +| | `3` | +| | `4` | +| | `5`, `S`, `s` | +| | `6` | +| | `7` | +| | `8` | +| | `9` | +| | `H` | +| | `(`, `[`, `C` | +| | `{` | +| | `)`, `]` | +| | `}`, `T`, `t` | +| | `` ` `` | +| | `'` | +| | `"` | +| | `@` | +| | `?` | +| | `,`, `i` | +| | `%` | +| | `*` | +| | `:` | +| | `;` | +| | `A`, `a` | +| | `B`, `b` | +| | `D`, `d` | +| | `E`, `e` | +| | `F`, `f` | +| | `G`, `g` | +| | `J`, `j` | +| | `L`, `l` | +| | `N`, `n` | +| | `P`, `p` | +| | `Q` | +| | `R`, `r` | +| | `U`, `V` | +| | `W` | +| | `Y`, `y` | +| | `-` | +| | `_` | +| | `=` | +| | `\|` | +| | `c` | +| | `h` | +| | `o` | +| | `u`, `v` | +| | `~` | + +> [!NOTE] +> Original 7-segment display base image taken from Wikipedia at [https://de.wikipedia.org/wiki/Datei:7_Segment_Display.svg](https://de.wikipedia.org/wiki/Datei:7_Segment_Display.svg) +> by user [h2g2bob](https://commons.wikimedia.org/wiki/User:H2g2bob) under +> [Creative Commons BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.de) and modified +> for this documentation. + +## See Also + +- [Display Component](/components/display/) +- [MAX7219 Library](https://github.com/nickgammon/MAX7219) by [Nick Gammon](https://github.com/nickgammon) +- diff --git a/content/components/display/max7219digit.md b/src/content/docs/components/display/max7219digit.mdx similarity index 93% rename from content/components/display/max7219digit.md rename to src/content/docs/components/display/max7219digit.mdx index bd0520ed66..688118125e 100644 --- a/content/components/display/max7219digit.md +++ b/src/content/docs/components/display/max7219digit.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up MAX7219 Digit displays." title: "MAX7219 Digit Display" -params: - seo: - description: Instructions for setting up MAX7219 Digit displays. - image: max7219digit.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import max7219digitImg from './images/max7219digit.png'; +import APIRef from '@components/APIRef.astro'; + The `max7219` display platform allows you to use MAX7219 digit with ESPHome. Please note that this component -is *only* for the digit "matrix" display, for the 7 segment display see {{< docref "max7219/" >}}. +is *only* for the digit "matrix" display, for the 7 segment display see [Max7219](/components/display/max7219/). -{{< img src="max7219digit.png" alt="Image" caption="MAX7219 Digit Display." width="75.0%" class="align-center" >}} +
    As the communication with the MAX7219 Digit is done using SPI for this component, you need to have an [SPI bus](/components/spi) in your configuration with both the **mosi_pin** set (miso_pin is not required). @@ -71,7 +77,7 @@ display: to use multiple SPI buses. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -- **num_chip_lines** (*Optional*, int): Number of lines if you want to use the displays in Multiline Mode. Defaults to `1` Example: +- **num_chip_lines** (*Optional*, int): Number of lines if you want to use the displays in Multiline Mode. Defaults to `1` Example: [https://github.com/esphome/esphome/pull/1622#issue-836179156](https://github.com/esphome/esphome/pull/1622#issue-836179156) - **chip_lines_style** (*Optional*): How are the lines in Multiline Mode connected? Possible values are `zigzag` and `snake`. Defaults to `snake` - **flip_x** (*Optional*, boolean): Flip the horizontal axis on the screen. Defaults to `false`. @@ -100,7 +106,7 @@ The intensity of the screen can be set "dynamically" within the lambda code with - **intensity** (int): The intensity with which the MAX7219 should drive the outputs. Range is from `0`, least intense to `15` the brightest. Defaults to `15`. -{{< anchor "display-max7219digit_lambda" >}} + ## Rendering Lambda @@ -237,6 +243,6 @@ Please see [Formatted Text](/components/display#display-printf) for a quick intr ## See Also -- {{< docref "index/" >}} -- {{< apiref "max7219/max7219.h" "max7219/max7219.h" >}} +- [Display Component](/components/display/) - [MAX7219 Library](https://github.com/nickgammon/MAX7219) by [Nick Gammon](https://github.com/nickgammon) +- diff --git a/content/components/display/mipi_dsi.md b/src/content/docs/components/display/mipi_dsi.mdx similarity index 76% rename from content/components/display/mipi_dsi.md rename to src/content/docs/components/display/mipi_dsi.mdx index e666ac1f60..42c2a01634 100644 --- a/content/components/display/mipi_dsi.md +++ b/src/content/docs/components/display/mipi_dsi.mdx @@ -1,19 +1,27 @@ --- description: "Details for the MIPI DSI display driver component in ESPHome" title: "MIPI DSI Display Driver" -params: - seo: - description: Details for the MIPI DSI display driver component in ESPHome - image: tab5.jpg --- -{{< anchor "mipi_dsi" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tab5VersionLabelImg from './images/tab5-version-label.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Introduction This driver is for displays that use the MIPI DSI display interface available in the ESP32-P4. -{{< img src="tab5.jpg" alt="Image" caption="M5STACK-TAB5 with ESP32-P4" width="75.0%" class="align-center" >}} +
    ## Background @@ -40,18 +48,18 @@ specified, or a custom init sequence can be provided. ### Boards with integrated displays -| Model | Manufacturer | Product Description | -|-----------------------------------------|--------------|-------------------------------------------------------------------------------| -| JC1060P470 | Guition | | -| JC4880P443 | Guition | | -| JC8012P4A1 | Guition | | -| M5STACK-TAB5 | M5Stack | | -| M5STACK-TAB5-V2 | M5Stack | | -| WAVESHARE-P4-NANO-10.1 | Waveshare | | -| WAVESHARE-P4-86-PANEL | Waveshare | | -| WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B | Waveshare | | -| WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-3.4C | Waveshare | | -| WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-4C | Waveshare | | +| Model | Manufacturer | Product Description | +| ---------------------- | ------------ | ----------------------------------------------------------------------------- | +| JC1060P470 | Guition | [https://aliexpress.com/item/1005008328088576.html](https://aliexpress.com/item/1005008328088576.html) | +| JC4880P443 | Guition | [https://aliexpress.com/item/1005009618259341.html](https://aliexpress.com/item/1005009618259341.html) | +| JC8012P4A1 | Guition | [https://aliexpress.com/item/1005008789890066.html](https://aliexpress.com/item/1005008789890066.html) | +| M5STACK-TAB5 | M5Stack | [https://shop.m5stack.com/products/m5stack-tab5-iot-development-kit-esp32-p4](https://shop.m5stack.com/products/m5stack-tab5-iot-development-kit-esp32-p4) | +| M5STACK-TAB5-V2 | M5Stack | [https://shop.m5stack.com/products/m5stack-tab5-iot-development-kit-esp32-p4](https://shop.m5stack.com/products/m5stack-tab5-iot-development-kit-esp32-p4) | +| WAVESHARE-P4-NANO-10.1 | Waveshare | [https://www.waveshare.com/esp32-p4-nano.htm?sku=29031](https://www.waveshare.com/esp32-p4-nano.htm?sku=29031) | +| WAVESHARE-P4-86-PANEL | Waveshare | [https://www.waveshare.com/esp32-p4-wifi6-touch-lcd-4b.htm?sku=31570](https://www.waveshare.com/esp32-p4-wifi6-touch-lcd-4b.htm?sku=31570) | +| WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-7B | Waveshare | [https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-7B](https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-7B) | +| WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-3.4C | Waveshare | [https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-3.4C](https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-3.4C) | +| WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD-4C | Waveshare | [https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-4C](https://www.waveshare.com/wiki/ESP32-P4-WIFI6-Touch-LCD-4C) | > [!NOTE] The M5Stack Tab5 has two hardware revisions with different display chips requiring different model selections. @@ -66,7 +74,7 @@ Selection of the wrong display driver model will cause the display to simply fai Selection of the wrong touchscreen driver however will display an error message in the log output, so if in doubt, verify the correct touchscreen driver first to accurately identify the board before configuring the display driver. -{{< img src="tab5-version-label.jpg" alt="Tab5 version label showing model identification" width="50%" class="align-center" >}} +Tab5 version label showing model identification ## Configuration @@ -163,14 +171,14 @@ dimensions: Many displays have an integrated backlight, which may need to be turned on for the display to show. This backlight is not controlled by the driver, but can be controlled by a separate GPIO pin. Depending on the display, the backlight may be active high or active low, and may -be able to be dimmed using a {{< docref "/components/light/monochromatic" >}} with a {{< docref "/components/output/ledc" >}}. +be able to be dimmed using a [Monochromatic](/components/light/monochromatic/) with a [Ledc](/components/output/ledc/). ## Touchscreens -A touchscreen, if present, must be configured separately. See the {{< docref "/components/touchscreen" >}} documentation for more information. +A touchscreen, if present, must be configured separately. See the [Touchscreen](/components/touchscreen/) documentation for more information. ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/lvgl" >}} -- {{< apiref "mipi_dsi/mipi_dsi.h" "mipi_dsi/mipi_dsi.h" >}} +- [Display Component](/components/display/) +- [LVGL Graphics](/components/lvgl/) +- diff --git a/content/components/display/mipi_rgb.md b/src/content/docs/components/display/mipi_rgb.mdx similarity index 82% rename from content/components/display/mipi_rgb.md rename to src/content/docs/components/display/mipi_rgb.mdx index dbdf76e6cf..d056925b83 100644 --- a/content/components/display/mipi_rgb.md +++ b/src/content/docs/components/display/mipi_rgb.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up 16 bit \"RGB\" parallel displays" title: "MIPI RGB Display Driver" -params: - seo: - description: Instructions for setting up 16 bit "RGB" parallel displays - image: indicator.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + ## Types of Display This display driver supports displays with 16 bit parallel interfaces, often referred to as "RGB". @@ -41,23 +41,30 @@ option is `model`. | Board | Driver Chip | Manufacturer | Product link | |------------------------------|-------------| ------------ |------------------------------------------------------------------| -| GUITION-4848S040 | ST7701s | Guition | | -| T-PANEL-S3 | ST7701s | Lilygo | | -| T-RGB-2.1 | ST7701s | Lilygo | | -| T-RGB-2.8 | ST7701s | Lilygo | | -| SEEED-INDICATOR-D1 | ST7701s | Seeed Studio | | -| ESP32-S3-TOUCH-LCD-4.3 | RPI | Waveshare | | -| ESP32-S3-TOUCH-LCD-7-800X480 | RPI | Waveshare | | -| WAVESHARE-3.16-320X820 | ST7701s | Waveshare | | -| WAVESHARE-4-480X480 | RPI | Waveshare | | -| WAVESHARE-5-1024X600 | RPI | Waveshare | | +| GUITION-4848S040 | ST7701s | Guition | [https://devices.esphome.io/devices/Guition-ESP32-S3-4848S040](https://devices.esphome.io/devices/Guition-ESP32-S3-4848S040) | +| T-PANEL-S3 | ST7701s | Lilygo | [https://lilygo.cc/products/t-panel-s3](https://lilygo.cc/products/t-panel-s3) | +| T-RGB-2.1 | ST7701s | Lilygo | [https://lilygo.cc/products/t-rgb](https://lilygo.cc/products/t-rgb) | +| T-RGB-2.8 | ST7701s | Lilygo | [https://lilygo.cc/products/t-rgb](https://lilygo.cc/products/t-rgb) | +| SEEED-INDICATOR-D1 | ST7701s | Seeed Studio | [https://www.seeedstudio.com/SenseCAP-Indicator-D1L-p-5646.html](https://www.seeedstudio.com/SenseCAP-Indicator-D1L-p-5646.html) | +| ESP32-S3-TOUCH-LCD-4.3 | RPI | Waveshare | [https://www.waveshare.com/esp32-s3-touch-lcd-4.3.htm](https://www.waveshare.com/esp32-s3-touch-lcd-4.3.htm) | +| ESP32-S3-TOUCH-LCD-7-800X480 | RPI | Waveshare | [https://www.waveshare.com/esp32-s3-touch-lcd-7.htm](https://www.waveshare.com/esp32-s3-touch-lcd-7.htm) | +| WAVESHARE-3.16-320X820 | ST7701s | Waveshare | [https://www.waveshare.com/esp32-s3-lcd-3.16.htm](https://www.waveshare.com/esp32-s3-lcd-3.16.htm) | +| WAVESHARE-4-480X480 | RPI | Waveshare | [https://www.waveshare.com/esp32-s3-touch-lcd-4.htm](https://www.waveshare.com/esp32-s3-touch-lcd-4.htm) | +| WAVESHARE-5-1024X600 | RPI | Waveshare | [https://www.waveshare.com/esp32-s3-touch-lcd-5.htm](https://www.waveshare.com/esp32-s3-touch-lcd-5.htm) | ## Usage This component requires an ESP32 (usually an ESP32-S3 because of the number of GPIO pins required) and the use of ESP-IDF. PSRAM is a requirement due to the size of the display buffer. -{{< img src="indicator.jpg" alt="Image" caption="Sensecap Indicator display" width="75.0%" class="align-center" >}} +
    ```yaml # Example minimal configuration entry @@ -226,5 +233,5 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "mipi_rgb/mipi_rgb.h" "mipi_rgb/mipi_rgb.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/mipi_spi.md b/src/content/docs/components/display/mipi_spi.mdx similarity index 75% rename from content/components/display/mipi_spi.md rename to src/content/docs/components/display/mipi_spi.mdx index 0444a1d556..e87fce1fe5 100644 --- a/content/components/display/mipi_spi.md +++ b/src/content/docs/components/display/mipi_spi.mdx @@ -1,13 +1,11 @@ --- description: "Details for the MIPI SPI display driver component in ESPHome" title: "MIPI SPI Display Driver" -params: - seo: - description: Details for the MIPI SPI display driver component in ESPHome - image: ili9341.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "mipi_spi" >}} + + ## Introduction @@ -64,42 +62,42 @@ the pins used to interface to the display to be specified. | Panel | Manufacturer | Product Description | | ------------------------------------ | ------------ | ----------------------------------------------------------------- | -| WAVESHARE-1.83-V2 | Waveshare | | +| WAVESHARE-1.83-V2 | Waveshare | [https://www.waveshare.com/1.83inch-LCD-Module.htm](https://www.waveshare.com/1.83inch-LCD-Module.htm) | ### Boards with integrated displays | Model | Manufacturer | Product Description | -|--------------------------------------|--------------|-------------------------------------------------------------------| -| ADAFRUIT-S2-TFT-FEATHER | Adafruit | | -| ADAFRUIT-FUNHOUSE | Adafruit | | -| M5CORE | M5Stack | | -| M5CORE2 | M5Stack | | -| S3BOX | Espressif | | -| S3BOXLITE | Espressif | | -| WAVESHARE-4-TFT | Waveshare | | -| PICO-RESTOUCH-LCD-3.5 | Waveshare | | -| WAVESHARE-ESP32-S3-TOUCH-AMOLED-1.75 | Waveshare | | -| WAVESHARE-ESP32-S3-TOUCH-LCD-3.49 | Waveshare | | -| WT32-SC01-PLUS | Wireless-Tag | | +| ------------------------------------ | ------------ | ----------------------------------------------------------------- | +| ADAFRUIT-S2-TFT-FEATHER | Adafruit | [https://www.adafruit.com/product/6312](https://www.adafruit.com/product/6312) | +| ADAFRUIT-FUNHOUSE | Adafruit | [https://www.adafruit.com/product/4985](https://www.adafruit.com/product/4985) | +| M5CORE | M5Stack | [https://docs.m5stack.com/en/core/BASIC%20v2.6](https://docs.m5stack.com/en/core/BASIC%20v2.6) | +| M5CORE2 | M5Stack | [https://docs.m5stack.com/en/core/core2](https://docs.m5stack.com/en/core/core2) | +| S3BOX | Espressif | [https://www.espressif.com/en/products/devkits/esp32-s3-box](https://www.espressif.com/en/products/devkits/esp32-s3-box) | +| S3BOXLITE | Espressif | [https://www.espressif.com/en/products/devkits/esp32-s3-box-lite](https://www.espressif.com/en/products/devkits/esp32-s3-box-lite) | +| WAVESHARE-4-TFT | Waveshare | [https://www.waveshare.com/4inch-tft-touch-shield.htm](https://www.waveshare.com/4inch-tft-touch-shield.htm) | +| PICO-RESTOUCH-LCD-3.5 | Waveshare | [https://www.waveshare.com/pico-restouch-lcd-3.5.htm](https://www.waveshare.com/pico-restouch-lcd-3.5.htm) | +| WAVESHARE-ESP32-S3-TOUCH-AMOLED-1.75 | Waveshare | [https://www.waveshare.com/esp32-s3-touch-amoled-1.75.htm](https://www.waveshare.com/esp32-s3-touch-amoled-1.75.htm) | +| WAVESHARE-ESP32-S3-TOUCH-LCD-3.49 | Waveshare | [https://www.waveshare.com/esp32-s3-touch-lcd-3.49.htm](https://www.waveshare.com/esp32-s3-touch-lcd-3.49.htm) | +| WT32-SC01-PLUS | Wireless-Tag | [https://www.wireless-tag.com/portfolio/wt32-sc01-plus/](https://www.wireless-tag.com/portfolio/wt32-sc01-plus/) | | ESP32-2432S028 | Sunton | 2.8" CYD. Original micro-USB version with ILI9341 controller. | | ESP32-2432S028-7789 | Sunton | Dual-USB version with ST7789V. | | ESP32-2432S028-9342 | Sunton | Dual-USB version with ILI9342. | -| JC3248W535 | Guition | | -| JC3636W518 | Guition | | -| JC3636W518V2 | Guition | | -| JC4827W543 | Guition | | -| LANBON-L8 | Lanbon | | -| T4-S3 | Lilygo | | -| T-EMBED | Lilygo | | -| T-DISPLAY | Lilygo | | -| T-DISPLAY-S3 | Lilygo | | -| T-DISPLAY-S3-PRO | Lilygo | | -| T-DISPLAY-S3-AMOLED | Lilygo | | -| T-DISPLAY-S3-AMOLED-PLUS | Lilygo | | +| JC3248W535 | Guition | [https://www.aliexpress.com/item/1005007566332450.html](https://www.aliexpress.com/item/1005007566332450.html) | +| JC3636W518 | Guition | [https://www.aliexpress.com/item/1005007890666293.html](https://www.aliexpress.com/item/1005007890666293.html) | +| JC3636W518V2 | Guition | [https://www.aliexpress.com/item/1005007890666293.html](https://www.aliexpress.com/item/1005007890666293.html) | +| JC4827W543 | Guition | [https://www.aliexpress.com/item/1005006729377800.html](https://www.aliexpress.com/item/1005006729377800.html) | +| LANBON-L8 | Lanbon | [https://www.lanbon.cn/product/lanbon-l8](https://www.lanbon.cn/product/lanbon-l8) | +| T4-S3 | Lilygo | [https://www.lilygo.cc/products/t4-s3](https://www.lilygo.cc/products/t4-s3) | +| T-EMBED | Lilygo | [https://www.lilygo.cc/products/t-embed](https://www.lilygo.cc/products/t-embed) | +| T-DISPLAY | Lilygo | [https://www.lilygo.cc/products/t-display](https://www.lilygo.cc/products/t-display) | +| T-DISPLAY-S3 | Lilygo | [https://www.lilygo.cc/products/t-display-s3](https://www.lilygo.cc/products/t-display-s3) | +| T-DISPLAY-S3-PRO | Lilygo | [https://www.lilygo.cc/products/t-display-s3-pro](https://www.lilygo.cc/products/t-display-s3-pro) | +| T-DISPLAY-S3-AMOLED | Lilygo | [https://www.lilygo.cc/products/t-display-s3-amoled](https://www.lilygo.cc/products/t-display-s3-amoled) | +| T-DISPLAY-S3-AMOLED-PLUS | Lilygo | [https://www.lilygo.cc/products/t-display-s3-amoled-plus](https://www.lilygo.cc/products/t-display-s3-amoled-plus) | ## SPI Bus -An {{< docref "/components/spi" >}} is used to communicate with the display driver chip. The driver supports single bit SPI, quad SPI and octal SPI. The SPI +An [Spi](/components/spi/) is used to communicate with the display driver chip. The driver supports single bit SPI, quad SPI and octal SPI. The SPI bus must be configured separately, and must be of the correct type for the display driver chip. ## Configuration @@ -170,7 +168,7 @@ most of the configuration will be set by default, but can be overridden if neede ## Buffer Size -The display driver writes data from a buffer to the display chip. When using {{< docref "/components/lvgl" >}} no buffer is required in the display driver itself, as LVGL will +The display driver writes data from a buffer to the display chip. When using [Lvgl](/components/lvgl/) no buffer is required in the display driver itself, as LVGL will allocate and use its own buffer. When instead using a lambda function to update the display (and not LVGL), a buffer is required to be allocated by the display driver. The size of this buffer is determined by the `buffer_size` option. The default is `100%` when PSRAM is configured, and otherwise will be calculated to @@ -226,15 +224,15 @@ When using the `CUSTOM` model with rotation, if the chip does not support hardwa Many displays have an integrated backlight, which may need to be turned on for the display to show. This backlight is not controlled by the driver, but can be controlled by a separate GPIO pin. Depending on the display, the backlight may be active high or active low, and may -be able to be dimmed using a {{< docref "/components/light/monochromatic" >}} with a {{< docref "/components/output/ledc" >}}. AMOLED displays do not have a backlight but +be able to be dimmed using a [Monochromatic](/components/light/monochromatic/) with a [Ledc](/components/output/ledc/). AMOLED displays do not have a backlight but their brightness can be set using the `brightness` option. This may also be controlled by a lambda API call. ## Touchscreens -A touchscreen, if present, must be configured separately. See the {{< docref "/components/touchscreen" >}} documentation for more information. +A touchscreen, if present, must be configured separately. See the [Touchscreen](/components/touchscreen/) documentation for more information. ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/lvgl" >}} -- {{< apiref "mipi_spi/mipi_spi.h" "mipi_spi/mipi_spi.h" >}} +- [Display Component](/components/display/) +- [LVGL Graphics](/components/lvgl/) +- diff --git a/content/components/display/nextion.md b/src/content/docs/components/display/nextion.mdx similarity index 91% rename from content/components/display/nextion.md rename to src/content/docs/components/display/nextion.mdx index 901309fa6f..774651b221 100644 --- a/content/components/display/nextion.md +++ b/src/content/docs/components/display/nextion.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up Nextion TFT LCD displays" title: "Nextion TFT LCD Display" -params: - seo: - description: Instructions for setting up Nextion TFT LCD displays - image: nextion.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import nextionFullImg from './images/nextion-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `nextion` display platform allows you to use Nextion LCD displays ([datasheet](https://nextion.itead.cc/resources/datasheets/), [iTead](https://www.itead.cc/display/nextion.html)) with ESPHome. -{{< img src="nextion-full.jpg" alt="Image" caption="Nextion display" width="75.0%" class="align-center" >}} +
    Communication with the Nextion display is done via a serial interface, so you'll need to have a [UART Bus](/components/uart) in your configuration with both `rx_pin` and `tx_pin` configured. These pins must then be connected to the @@ -82,7 +88,7 @@ display: - **max_queue_age** (*Optional*, [Time](/guides/configuration-types#time)): Maximum age in milliseconds for queued commands before they are automatically removed. This helps prevent stale commands from being executed after delays. Set to ``0`` to disable age-based - removal (commands are only limited by queue size). **Note:** Very low values (e.g., <50ms) may cause commands + removal (commands are only limited by queue size). **Note:** Very low values (e.g., \<50ms) may cause commands to be dropped before transmission due to ESPHome's loop timing (~16ms). Recommended minimum is 100ms when enabled. Range: 0-65535. Defaults to ``8000`` (8 seconds). @@ -90,7 +96,7 @@ display: if it hasn't responded to the connection handshake. Set to ``0`` to disable the override and wait indefinitely for the handshake. This is useful for displays with slower startup sequences or to enforce strict handshake requirements. Range: 0-65535. Defaults to ``8000`` (8 seconds). - + - **skip_connection_handshake** (*Optional*, boolean): Sets whether the initial display connection handshake process is skipped. When set to `true`, the connection will be established without performing the handshake. This can be useful when using Nextion Simulator. Defaults to `false`. @@ -114,7 +120,7 @@ display: - **dump_device_info** (*Optional*, boolean): Shows device information (model, firmware version, serial number, flash size) in the configuration dump. When disabled, device info is only logged during connection establishment to save memory. Defaults to `false`. -{{< anchor "display-nextion_lambda" >}} + ## Rendering Lambda @@ -152,14 +158,14 @@ an introduction to `strftime` time formatting. ### Using Lambdas Several methods are available for use within [lambdas](/automations/templates#config-lambda); these permit advanced functionality beyond -simple display updates. There are too many to cover here; please see the {{< apiref "nextion/nextion.h" "nextion/nextion.h" >}} for more detail. +simple display updates. There are too many to cover here; please see the for more detail. The list below calls out a few commonly-used methods: -{{< anchor "nextion_upload_tft" >}} + - `upload_tft` : Start the process to upload a new TFT file to the Nextion; see [Uploading A TFT File](#nextion_upload_tft_file) below. -{{< anchor "nextion_update_all_components" >}} + - `update_all_components()` : All the components will publish their states. @@ -167,7 +173,7 @@ The list below calls out a few commonly-used methods: id(nextion1).update_all_components(); ``` -{{< anchor "update_components_by_prefix" >}} + - `update_components_by_prefix(std::string page)` : This will send the current state of any **component_name** matching the prefix. Some settings like background color need to be resent on page change; this is a good hook to use @@ -177,7 +183,7 @@ The list below calls out a few commonly-used methods: id(nextion1).update_components_by_prefix("page0."); ``` -{{< anchor "set_nextion_sensor_state" >}} + - Set various sensor states (See [Queue Types](#queue-types) below): @@ -220,7 +226,7 @@ The list below calls out a few commonly-used methods: | `WAVEFORM_SENSOR` | `4` | | `NO_RESULT` | `5` | -{{< anchor "display-nextion_automation" >}} + ## Nextion Automations @@ -228,7 +234,7 @@ The list below calls out a few commonly-used methods: Several [Triggers](/automations/actions#actions-trigger) are available for use with your Nextion display. -{{< anchor "nextion-on_setup" >}} + #### `on_setup` @@ -258,7 +264,7 @@ display: } ``` -{{< anchor "nextion-on_sleep" >}} + #### `on_sleep` / `on_wake` @@ -266,7 +272,7 @@ These automations will be triggered upon sleep or upon wake (respectively). The updates while in sleep mode; these triggers may be used to cope with this. For example, you could use them to [force an update](#nextion_update_all_components), refreshing the display's content upon wake-up. -{{< anchor "nextion-on_page" >}} + #### `on_page` @@ -303,7 +309,7 @@ Given the page ID, the appropriate components can be updated. Two strategies are } ``` -{{< anchor "nextion-on_touch" >}} + #### `on_touch` @@ -329,7 +335,7 @@ on_touch: ESP_LOGD("nextion.on_touch", "Event type: %s", touch_event ? "Press" : "Release"); ``` -{{< anchor "nextion-on_buffer_overflow" >}} + #### `on_buffer_overflow` @@ -349,7 +355,7 @@ on_buffer_overflow: ### Actions -{{< anchor "nextion-set_brightness" >}} + #### `display.nextion.set_brightness` @@ -371,14 +377,14 @@ on_...: brightness: 50% ``` -{{< anchor "nextion_upload_tft_file" >}} + ## Uploading A TFT File This will use the file specified for `tft_url` to update ("OTA") the Nextion. Once completed, both ESPHome and the Nextion will reboot. ESPHome will be unresponsive during the upload process and no -logging or other {{< docref "/automations/index" "automations" >}} will occur. This process uses the same protocol as the +logging or other [automations](/automations/) will occur. This process uses the same protocol as the [Nextion Editor](https://nextion.tech/nextion-editor/) and only transfers required portions of the TFT file. > [!WARNING] @@ -391,7 +397,7 @@ logging or other {{< docref "/automations/index" "automations" >}} will occur. T You can use Home Assistant itself or any other web server to host the TFT file. When using HTTPS (generally recommended), you may notice reduced upload speeds as the encryption consumes more resources on the microcontroller. -We suggest using a {{< docref "/components/button/template" >}} to trigger this process. For example: +We suggest using a [Template](/components/button/template/) to trigger this process. For example: ```yaml button: @@ -421,7 +427,7 @@ This library supports a few different components allowing communication between > updates are sent. To work around this, after the Nextion wakes up, all components will send their states to the > Nextion. -With the exception of the {{< docref "../binary_sensor/nextion" >}} that has the `page_id` /`component_id` options configured, +With the exception of the [Nextion](/components/binary_sensor/nextion/) that has the `page_id` /`component_id` options configured, the example below illustrates: - Polling the Nextion for updates @@ -445,12 +451,12 @@ the individual components (linked below) for more detail. ## See Also -- {{< docref "index/" >}} -- {{< docref "../binary_sensor/nextion" >}} -- {{< docref "../sensor/nextion" >}} -- {{< docref "../switch/nextion" >}} -- {{< docref "../text_sensor/nextion" >}} -- {{< docref "../uart" >}} -- {{< apiref "nextion/nextion.h" "nextion/nextion.h" >}} +- [Display Component](/components/display/) +- [Nextion Binary Sensor Component](/components/binary_sensor/nextion/) +- [Nextion Sensor Component](/components/sensor/nextion/) +- [Nextion Switch Component](/components/switch/nextion/) +- [Nextion Text Sensor Component](/components/text_sensor/nextion/) +- [UART Bus](/components/uart/) - [Simple Nextion Library](https://github.com/bborncr/nextion) by [Bentley Born](https://github.com/bborncr) - [Official Nextion Library](https://github.com/itead/ITEADLIB_Arduino_Nextion) by [iTead](https://www.itead.cc/) +- diff --git a/content/components/display/pcd8544.md b/src/content/docs/components/display/pcd8544.mdx similarity index 80% rename from content/components/display/pcd8544.md rename to src/content/docs/components/display/pcd8544.mdx index 68c51659fa..7a4b5d22aa 100644 --- a/content/components/display/pcd8544.md +++ b/src/content/docs/components/display/pcd8544.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up PCD8544 display drivers." title: "PCD 8544 Display (Nokia 5110/3310)" -params: - seo: - description: Instructions for setting up PCD8544 display drivers. - image: pcd8544.jpg --- -{{< anchor "pcd8544" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import pcd8544FullImg from './images/pcd8544-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Usage @@ -19,7 +20,12 @@ It's a monochrome LCD display was used in old Nokia 5110/3310 cell phones. The resolution of the display is 84x48 pixels. -{{< img src="pcd8544-full.jpg" alt="Image" caption="PCD8544 Display" width="75.0%" class="align-center" >}} +
    Connect CLK, DIN, CS (CE), DC, and RST to pins on your ESP. For power, connect VCC to 3.3V and GND to GND. @@ -42,7 +48,7 @@ display: ### Backlight -To use a backlight LIGHT pin needs to be connected to ground. If connected to GPIO pin it can be controlled from ESPHome. See {{< docref "/components/light/monochromatic" >}}. +To use a backlight LIGHT pin needs to be connected to ground. If connected to GPIO pin it can be controlled from ESPHome. See [Monochromatic](/components/light/monochromatic/). ### Configuration variables @@ -59,7 +65,7 @@ To use a backlight LIGHT pin needs to be connected to ground. If connected to GP ## See Also -- {{< docref "index/" >}} -- {{< apiref "pcd8544/pcd_8544.h" "pcd8544/pcd_8544.h" >}} +- [Display Component](/components/display/) - [Tutorial from Adafruit](https://learn.adafruit.com/nokia-5110-3310-monochrome-lcd) - [PCD8544 Library](https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/display/pvvx_mithermometer.md b/src/content/docs/components/display/pvvx_mithermometer.mdx similarity index 92% rename from content/components/display/pvvx_mithermometer.md rename to src/content/docs/components/display/pvvx_mithermometer.mdx index 7fac478a7c..9f985037d0 100644 --- a/content/components/display/pvvx_mithermometer.md +++ b/src/content/docs/components/display/pvvx_mithermometer.mdx @@ -1,15 +1,22 @@ --- description: "Instructions for setting up BLE devices with PVVX MiThermometer custom firmware as displays." title: "PVVX MiThermometer Display" -params: - seo: - description: Instructions for setting up BLE devices with PVVX MiThermometer custom firmware as displays. - image: /components/sensor/images/xiaomi_lywsd03mmc.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `pvvx_mithermometer` display platform allows you to use devices running the [ATC_MiThermometer firmware](https://github.com/pvvx/ATC_MiThermometer) by pvvx as display drivers with ESPHome. -{{< img src="xiaomi_lywsd03mmc.jpg" alt="Image" caption="Xiaomi LYWSD03MMC." width="75.0%" class="align-center" >}} +
    The data to be displayed is transmitted as external data via BLE. To do this, a `ble_client` component must be set up. @@ -44,7 +51,7 @@ display: ## Configuration variables - **ble_client_id** (**Required**, [ID](/guides/configuration-types#id)): ID of the associated BLE client. -- **time_id** (*Optional*, [ID](/guides/configuration-types#id)): ID of a {{< docref "/components/time" >}}. If set, the time will be synchronized with every connection. +- **time_id** (*Optional*, [ID](/guides/configuration-types#id)): ID of a [Time](/components/time/). If set, the time will be synchronized with every connection. - **disconnect_delay** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time the BLE connection is maintained before being disconnected again. Defaults to `5s`. - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to transmit the display data. Defaults to `60s`. - **validity_period** (*Optional*, [Time](/guides/configuration-types#time)): The time periode for which the pvvx device should display the information. Defaults to `5min`. @@ -56,7 +63,7 @@ display: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -{{< anchor "display-pvvx_mithermometer_lambda" >}} + ## Rendering Lambda @@ -214,8 +221,8 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/ble_client" >}} -- {{< docref "/components/sensor/xiaomi_ble" >}} -- {{< apiref "pvvx_mithermometer/display/pvvx_display.h" "pvvx_mithermometer/display/pvvx_display.h" >}} +- [Display Component](/components/display/) +- [BLE Client](/components/ble_client/) +- [Xiaomi Mijia BLE Sensors](/components/sensor/xiaomi_ble/) - [ATC_MiThermometer firmware](https://github.com/pvvx/ATC_MiThermometer) by [pvvx](https://github.com/pvvx) +- diff --git a/content/components/display/qspi_dbi.md b/src/content/docs/components/display/qspi_dbi.mdx similarity index 90% rename from content/components/display/qspi_dbi.md rename to src/content/docs/components/display/qspi_dbi.mdx index 927558ae45..bd58112f1b 100644 --- a/content/components/display/qspi_dbi.md +++ b/src/content/docs/components/display/qspi_dbi.mdx @@ -1,20 +1,21 @@ --- description: "Instructions for setting up quad SPI displays." title: "Quad SPI Displays" -params: - seo: - description: Instructions for setting up quad SPI displays. - image: t4-s3.jpg --- -{{< anchor "qspi_dbi" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tDisplayAmoledImg from './images/t-display-amoled.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Models This display driver supports AMOLED and LCD displays with quad SPI interfaces, using the MIPI DBI interface. > [!WARNING] -> This component has been made redundant since this class of displays is now supported by the {{< docref "mipi_spi" >}} +> This component has been made redundant since this class of displays is now supported by the [Mipi Spi](/components/display/mipi_spi/) > This component will be removed in a future release. This driver has been tested with the following displays: @@ -29,9 +30,21 @@ This driver has been tested with the following displays: This component requires an ESP32 and the use of ESP-IDF. PSRAM is a requirement due to the size of the display buffer. A [quad SPI bus](/components/spi) interface must be configured. -{{< img src="t4-s3.jpg" alt="Image" caption="Lilygo T4-S3" width="75.0%" class="align-center" >}} - -{{< img src="t-display-amoled.jpg" alt="Image" caption="Lilygo T-Display S3 AMOLED" width="75.0%" class="align-center" >}} +
    + +
    ```yaml # Example configuration entry @@ -221,5 +234,5 @@ touchscreen: ## See Also -- {{< docref "index/" >}} -- {{< apiref "qspi_dbi/qspi_dbi.h" "qspi_dbi/qspi_dbi.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/rpi_dpi_rgb.md b/src/content/docs/components/display/rpi_dpi_rgb.mdx similarity index 93% rename from content/components/display/rpi_dpi_rgb.md rename to src/content/docs/components/display/rpi_dpi_rgb.mdx index bdd3866be8..37e266bb74 100644 --- a/content/components/display/rpi_dpi_rgb.md +++ b/src/content/docs/components/display/rpi_dpi_rgb.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up 16 bit \"RPI_DPI_RGB\" parallel displays" title: "RPI_DPI_RGB Display Driver" -params: - seo: - description: Instructions for setting up 16 bit "RPI_DPI_RGB" parallel displays - image: waveshare_touch-s3.jpg --- -{{< anchor "rpi_dpi_rgb" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + ## Models @@ -15,7 +15,7 @@ This display driver supports displays with 16 bit parallel interfaces, often ref These have a parallel interface but no SPI interface and require no configuration of the driver chip. > [!WARNING] -> This component has been made redundant since this class of displays is now supported by the {{< docref "mipi_rgb" >}} +> This component has been made redundant since this class of displays is now supported by the [Mipi Rgb](/components/display/mipi_rgb/) > This component will be removed in a future release. This driver has been tested with the following displays: @@ -28,7 +28,14 @@ This driver has been tested with the following displays: This component requires an ESP32 (usually an ESP32-S3 because of the number of GPIO pins required) and the use of ESP-IDF. PSRAM is a requirement due to the size of the display buffer. -{{< img src="waveshare_touch-s3.jpg" alt="Image" caption="Waveshare ESP32-S3 Touch 4.3" width="75.0%" class="align-center" >}} +
    ```yaml # Example minimal configuration entry @@ -200,5 +207,5 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "rpi_dpi_rgb/rpi_dpi_rgb.h" "rpi_dpi_rgb/rpi_dpi_rgb.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/sdl.md b/src/content/docs/components/display/sdl.mdx similarity index 90% rename from content/components/display/sdl.md rename to src/content/docs/components/display/sdl.mdx index d696ad08c3..374c874fb5 100644 --- a/content/components/display/sdl.md +++ b/src/content/docs/components/display/sdl.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up SDL2 display on host" title: "SDL2 Display on host platform" -params: - seo: - description: Instructions for setting up SDL2 display on host - image: sdl.png --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "sdl" >}} + + ## Usage @@ -89,7 +87,7 @@ You can check installation with the command `sdl2-config --libs --cflags`. Although SDL2 is supported, natively running ESPHome on Windows isn't easy. However the *Windows Subsystem for Linux* (WSL) can be used to install and use a Linux development environment on Windows, which will enable use of ESPHome and SDL2 as per the -Linux instructions above. See for more information on WSL. +Linux instructions above. See [https://learn.microsoft.com/en-us/windows/wsl/install](https://learn.microsoft.com/en-us/windows/wsl/install) for more information on WSL. ## Build and run @@ -98,6 +96,6 @@ The `esphome run yourfile.yaml` command will compile and automatically run the b ## See Also - [SDL touchscreen](/components/touchscreen/sdl#sdl_touchscreen) -- {{< docref "/components/binary_sensor/sdl" "SDL binary sensor" >}} -- {{< docref "index/" >}} -- {{< apiref "sdl/sdl_esphome.h" "sdl/sdl_esphome.h" >}} +- [SDL binary sensor](/components/binary_sensor/sdl/) +- [Display Component](/components/display/) +- diff --git a/content/components/display/ssd1306.md b/src/content/docs/components/display/ssd1306.mdx similarity index 93% rename from content/components/display/ssd1306.md rename to src/content/docs/components/display/ssd1306.mdx index b49d0ee100..85d1d407c5 100644 --- a/content/components/display/ssd1306.md +++ b/src/content/docs/components/display/ssd1306.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up SSD1306 OLED display drivers." title: "SSD1306 OLED Display" -params: - seo: - description: Instructions for setting up SSD1306 OLED display drivers. - image: ssd1306.jpg --- -{{< anchor "ssd1306-i2c" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ssd1306FullImg from './images/ssd1306-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Over I²C @@ -21,7 +22,12 @@ and SH1106 ([datasheet](https://www.elecrow.com/download/SH1106%20datasheet.pdf) displays with ESPHome. Note that this component is for displays that are connected via the [I²C Bus](/components/i2c). If your SSD1306/SSD1305 or SH1106 is connected via the 4-Wire [SPI bus](/components/spi), see [Over SPI](#ssd1306-spi). -{{< img src="ssd1306-full.jpg" alt="Image" caption="SSD1306 OLED Display" width="75.0%" class="align-center" >}} +
    Connect D2 to the SCL pin you chose for the [I²C Bus](/components/i2c), and connect D1 to the SDA pin. For power, connect VCC to 3.3V and GND to GND. Optionally you can also connect the `RESET` pin to a pin on the ESP which may @@ -85,7 +91,7 @@ display: > [!NOTE] > To speed up the display update process you can select higher I²C frequencies. -{{< anchor "ssd1306-spi" >}} + ## Over SPI @@ -96,7 +102,12 @@ and SH1106 ([datasheet](https://www.elecrow.com/download/SH1106%20datasheet.pdf) displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire [SPI bus](/components/spi). If your SSD1306 or SH1106 is connected via the [I²C Bus](/components/i2c), see [Over I²C](#ssd1306-i2c). -{{< img src="ssd1306-full.jpg" alt="Image" caption="SSD1306 OLED Display" width="75.0%" class="align-center" >}} +
    Connect D0 to the CLK pin you chose for the [SPI bus](/components/spi), connect D1 to the MOSI pin and `DC` and `CS` to some GPIO pins on the ESP. For power, connect @@ -165,8 +176,8 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "ssd1306_base/ssd1306_base.h" "ssd1306_base/ssd1306_base.h" >}} +- [Display Component](/components/display/) - [SH110x Library](https://github.com/adafruit/Adafruit_SH110x) by [Adafruit](https://www.adafruit.com/) - [SSD1306 Library](https://github.com/adafruit/Adafruit_SSD1306) by [Adafruit](https://www.adafruit.com/) - [SSD1305 Library](https://github.com/adafruit/Adafruit_SSD1305) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/display/ssd1322.md b/src/content/docs/components/display/ssd1322.mdx similarity index 82% rename from content/components/display/ssd1322.md rename to src/content/docs/components/display/ssd1322.mdx index c1a7a2534d..0891126e21 100644 --- a/content/components/display/ssd1322.md +++ b/src/content/docs/components/display/ssd1322.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up SSD1322 OLED display drivers." title: "SSD1322 OLED Display" -params: - seo: - description: Instructions for setting up SSD1322 OLED display drivers. - image: ssd1322.jpg --- -{{< anchor "ssd1322-spi" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ssd1322FullImg from './images/ssd1322-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## `ssd1322_spi` Component @@ -16,7 +17,12 @@ SSD1322 ([datasheet](https://www.newhavendisplay.com/specs/NHD-3.12-25664UCW2.pd [Newhaven Display](https://www.newhavendisplay.com/nhd31225664ucw2-p-9583.html)) displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire [SPI bus](/components/spi). -{{< img src="ssd1322-full.jpg" alt="Image" caption="SSD1322 OLED Display" width="75.0%" class="align-center" >}} +
    Connect CLK, DIN, CS, DC, and RST to pins on your ESP. For power, connect VCC to 3.3V and GND to GND. @@ -55,6 +61,6 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "ssd1322_base/ssd1322_base.h" "ssd1322_base/ssd1322_base.h" >}} +- [Display Component](/components/display/) - [SSD1322 Display documentation](https://www.newhavendisplay.com/specs/NHD-3.12-25664UCW2.pdf) at [Newhaven Display](https://www.newhavendisplay.com/nhd31225664ucw2-p-9583.html) +- diff --git a/content/components/display/ssd1325.md b/src/content/docs/components/display/ssd1325.mdx similarity index 90% rename from content/components/display/ssd1325.md rename to src/content/docs/components/display/ssd1325.mdx index 38209dc410..6198bc6242 100644 --- a/content/components/display/ssd1325.md +++ b/src/content/docs/components/display/ssd1325.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up SSD1325/7 OLED display drivers." title: "SSD1325/7 OLED Display" -params: - seo: - description: Instructions for setting up SSD1325/7 OLED display drivers. - image: ssd1325.jpg --- -{{< anchor "ssd1325-spi" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ssd1325FullImg from './images/ssd1325-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## `ssd1325_spi` Component @@ -16,7 +17,12 @@ SSD1325 ([datasheet](https://cdn-shop.adafruit.com/datasheets/SSD1325.pdf), [Adafruit](https://www.adafruit.com/product/2674)) displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire [SPI bus](/components/spi). -{{< img src="ssd1325-full.jpg" alt="Image" caption="SSD1325 OLED Display" width="75.0%" class="align-center" >}} +
    Connect CLK, DIN, CS, DC, and RST to pins on your ESP. For power, connect VCC to 3.3V and GND to GND. Note that two jumper resistors on the back of the @@ -139,6 +145,6 @@ The last argument of the `Color` constructor is the intensity of the white eleme ## See Also -- {{< docref "index/" >}} -- {{< apiref "ssd1325_base/ssd1325_base.h" "ssd1325_base/ssd1325_base.h" >}} +- [Display Component](/components/display/) - [SSD1325 Library](https://github.com/adafruit/Adafruit_SSD1325) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/display/ssd1327.md b/src/content/docs/components/display/ssd1327.mdx similarity index 92% rename from content/components/display/ssd1327.md rename to src/content/docs/components/display/ssd1327.mdx index 7ccb6bf299..75f9d53c3c 100644 --- a/content/components/display/ssd1327.md +++ b/src/content/docs/components/display/ssd1327.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up SSD1327 OLED display drivers." title: "SSD1327 OLED Display" -params: - seo: - description: Instructions for setting up SSD1327 OLED display drivers. - image: ssd1327.jpg --- -{{< anchor "ssd1327-i2c" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ssd1327FullImg from './images/ssd1327-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Over I²C @@ -17,7 +18,12 @@ SSD1327 ([datasheet](https://cdn.sparkfun.com/assets/1/a/5/d/4/DS-15890-Zio_OLED displays that are connected via the [I²C Bus](/components/i2c). If your SSD1327 is connected via the 4-Wire [SPI bus](/components/spi), see [Over SPI](#ssd1327-spi). -{{< img src="ssd1327-full.jpg" alt="Image" caption="SSD1327 OLED Display" width="75.0%" class="align-center" >}} +
    Connect CLK to the SCL (clock) pin you chose for the [I²C Bus](/components/i2c) and connect DIN to the SDA (data) pin. For power, connect VCC to 3.3V and GND to GND. You may also connect the `RESET` pin to an available pin on the @@ -60,7 +66,7 @@ display: > [!NOTE] > To speed up the display update process you can select higher I²C frequencies. -{{< anchor "ssd1327-spi" >}} + ## Over SPI @@ -69,7 +75,12 @@ SSD1327 ([datasheet](https://cdn.sparkfun.com/assets/1/a/5/d/4/DS-15890-Zio_OLED displays with ESPHome. Note that this component is for displays that are connected via the 4-Wire [SPI bus](/components/spi). If your SSD1327 is connected via the [I²C Bus](/components/i2c), see [Over I²C](#ssd1327-i2c). -{{< img src="ssd1327-full.jpg" alt="Image" caption="SSD1327 OLED Display" width="75.0%" class="align-center" >}} +
    Connect CLK to the SCK (clock) pin you chose for the [SPI bus](/components/spi), connect DIN to the MOSI/SDO pin, and connect `DC` to another pin of your choosing. `CS` may connect to a pin on the ESP or it may connect to ground if the display is the only @@ -192,5 +203,5 @@ The last argument of the `Color` constructor is the intensity of the white eleme ## See Also -- {{< docref "index/" >}} -- {{< apiref "ssd1327_base/ssd1327_base.h" "ssd1327_base/ssd1327_base.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/ssd1331.md b/src/content/docs/components/display/ssd1331.mdx similarity index 85% rename from content/components/display/ssd1331.md rename to src/content/docs/components/display/ssd1331.mdx index 87ca49b9b2..7d0089c703 100644 --- a/content/components/display/ssd1331.md +++ b/src/content/docs/components/display/ssd1331.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up SSD1331 OLED display drivers." title: "SSD1331 OLED Display" -params: - seo: - description: Instructions for setting up SSD1331 OLED display drivers. - image: ssd1331.jpg --- -{{< anchor "ssd1331-spi" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ssd1331FullImg from './images/ssd1331-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Usage @@ -16,7 +17,12 @@ SSD1331 ([datasheet](https://cdn-shop.adafruit.com/datasheets/SSD1331_1.2.pdf), [Adafruit](https://www.adafruit.com/product/684)) displays with ESPHome. This component is for displays that are connected via the 4-Wire [SPI bus](/components/spi). -{{< img src="ssd1331-full.jpg" alt="Image" caption="SSD1331 96x64 OLED Display" width="75.0%" class="align-center" >}} +
    Connect CLK (CK), MOSI (SI), CS (OC), DC, and RST (R) to pins on your ESP. For power, the Adafruit modules require 5 volts connected to their `+` pin. Connect the GND or G pin to ground. @@ -89,6 +95,6 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "ssd1331_base/ssd1331_base.h" "ssd1331_base/ssd1331_base.h" >}} +- [Display Component](/components/display/) - [SSD1331 Library](https://github.com/adafruit/Adafruit-SSD1331-OLED-Driver-Library-for-Arduino) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/display/ssd1351.md b/src/content/docs/components/display/ssd1351.mdx similarity index 87% rename from content/components/display/ssd1351.md rename to src/content/docs/components/display/ssd1351.mdx index f9fd2fe8c3..0535e7e144 100644 --- a/content/components/display/ssd1351.md +++ b/src/content/docs/components/display/ssd1351.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up SSD1351 OLED display drivers." title: "SSD1351 OLED Display" -params: - seo: - description: Instructions for setting up SSD1351 OLED display drivers. - image: ssd1351.jpg --- -{{< anchor "ssd1351-spi" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ssd1351FullImg from './images/ssd1351-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## `ssd1351_spi` Component @@ -18,7 +19,12 @@ SSD1351 ([datasheet](https://cdn-shop.adafruit.com/datasheets/SSD1351-Revision+1 [Waveshare 128x128](https://www.waveshare.com/1.5inch-rgb-oled-module.htm)) displays with ESPHome. This component is for displays that are connected via the 4-Wire [SPI bus](/components/spi). -{{< img src="ssd1351-full.jpg" alt="Image" caption="SSD1351 OLED Display" width="75.0%" class="align-center" >}} +
    Connect CLK, DIN, CS, DC, and RST to pins on your ESP. For power, the Adafruit modules have two pins; connect 3.3 volts to their `3v` **or** connect 5 volts to their `+` pin. The Waveshare modules have only a Vcc pin @@ -95,6 +101,6 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "ssd1351_base/ssd1351_base.h" "ssd1351_base/ssd1351_base.h" >}} +- [Display Component](/components/display/) - [SSD1351 Library](https://github.com/adafruit/Adafruit-SSD1351-library) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/display/st7567.md b/src/content/docs/components/display/st7567.mdx similarity index 93% rename from content/components/display/st7567.md rename to src/content/docs/components/display/st7567.mdx index 66ca7bb452..3cca7ba134 100644 --- a/content/components/display/st7567.md +++ b/src/content/docs/components/display/st7567.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up ST7567 Mono STN-LCD display drivers." title: "ST7567 LCD Graphic Display" -params: - seo: - description: Instructions for setting up ST7567 Mono STN-LCD display drivers. - image: st7567.jpg --- -{{< anchor "st7567" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import st7567FullImg from './images/st7567-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Usage @@ -19,7 +20,12 @@ Note that this component is for displays that are connected via the [I²C Bus](/ or 3-Wire or 4-Wire [SPI bus](/components/spi) (see [Over SPI](#st7567-spi)). It's a monochrome LCD graphic display. -{{< img src="st7567-full.jpg" alt="Image" caption="ST7567A based LCD Graphic Display (I²C)" width="75.0%" class="align-center" >}} +
    > [!NOTE] > **Voltage:** Check your module specs for required power. Most of the modules are tolerant to range of voltages from 3.3V to 5V, but some might require either 5V or 3.3V. @@ -32,7 +38,7 @@ It's a monochrome LCD graphic display. > You can plan refresh by using `interval:` section and calling `request_refresh()` function, after that it will perform display > refresh sequence on next component update. -{{< anchor "st7567-i2c" >}} + ## Over I²C @@ -101,7 +107,7 @@ display: it.print(0, 0, id(my_font), "Hello World!"); ``` -{{< anchor "st7567-spi" >}} + ## Over SPI @@ -166,9 +172,9 @@ display: ## See Also -- {{< docref "index/" >}} +- [Display Component](/components/display/) - [Display Rendering Engine](/components/display#display-engine) - [Display Menu](/components/display_menu#display_menu) - [I²C Bus](/components/i2c) - [SPI Bus](/components/spi) -- {{< apiref "st7567/st7567.h" "st7567/st7567.h" >}} +- diff --git a/content/components/display/st7701s.md b/src/content/docs/components/display/st7701s.mdx similarity index 94% rename from content/components/display/st7701s.md rename to src/content/docs/components/display/st7701s.mdx index 5aaece3470..6a7bf77b90 100644 --- a/content/components/display/st7701s.md +++ b/src/content/docs/components/display/st7701s.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up ST7701S 16 bit \"RGB\" parallel displays" title: "ST7701S Display Driver" -params: - seo: - description: Instructions for setting up ST7701S 16 bit "RGB" parallel displays - image: indicator.jpg --- -{{< anchor "st7701s" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + ## Models @@ -15,7 +15,7 @@ This display driver supports displays with 16 bit parallel interfaces, often ref supports the ST7701S chip. > [!WARNING] -> This component has been made redundant since the ST7701S is now supported by the {{< docref "mipi_rgb" >}}. +> This component has been made redundant since the ST7701S is now supported by the [Mipi Rgb](/components/display/mipi_rgb/). > This component will be removed in a future release. This driver has been tested with the following displays: @@ -28,7 +28,14 @@ This driver has been tested with the following displays: This component requires an ESP32 (usually an ESP32-S3 because of the number of GPIO pins required) and the use of ESP-IDF. PSRAM is a requirement due to the size of the display buffer. -{{< img src="indicator.jpg" alt="Image" caption="Sensecap Indicator display" width="75.0%" class="align-center" >}} +
    ```yaml # Example minimal configuration entry @@ -180,5 +187,5 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "st7701s/st7701s.h" "st7701s/st7701s.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/st7735.md b/src/content/docs/components/display/st7735.mdx similarity index 86% rename from content/components/display/st7735.md rename to src/content/docs/components/display/st7735.mdx index 3f91c391da..617adf9a31 100644 --- a/content/components/display/st7735.md +++ b/src/content/docs/components/display/st7735.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up a ST7735 display drivers." title: "ST7735 Display" -params: - seo: - description: Instructions for setting up a ST7735 display drivers. - image: st7735.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + ST7735 Display Driver. ## Usage @@ -16,10 +16,17 @@ The ST7735 component allows you to use a ST7735 display [Adafruit](https://www.adafruit.com/product/358)) in ESPHome. It uses the [SPI Bus](/components/spi) for communication. -{{< img src="st7735.jpg" alt="Image" caption="ST7735 Display" width="75.0%" class="align-center" >}} +
    > [!WARNING] -> This component has been made redundant since the ST7735 is now supported by the {{< docref "mipi_spi" >}}. +> This component has been made redundant since the ST7735 is now supported by the [Mipi Spi](/components/display/mipi_spi/). > This component will be removed in a future release. There are numerous board types out there. Some initialize differently as well. This driver will take a few options to narrow down the right settings. @@ -82,5 +89,5 @@ display: ## See Also - [SPI Bus](/components/spi) -- {{< docref "/components/display" >}} -- {{< apiref "st7735/st7735.h" "st7735/st7735.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/st7789v.md b/src/content/docs/components/display/st7789v.mdx similarity index 95% rename from content/components/display/st7789v.md rename to src/content/docs/components/display/st7789v.mdx index c196ecf8e3..00c4e4dbf3 100644 --- a/content/components/display/st7789v.md +++ b/src/content/docs/components/display/st7789v.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up ST7789V TFT LCD display drivers." title: "ST7789V TFT LCD" -params: - seo: - description: Instructions for setting up ST7789V TFT LCD display drivers. - image: st7789v.jpg --- -{{< anchor "st7789v" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import st7789vFullImg from './images/st7789v-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Usage @@ -16,7 +17,12 @@ ST7789V ([datasheet](https://github.com/Xinyuan-LilyGO/TTGO-T-Display), [Tindie](https://www.tindie.com/products/ttgo/lilygor-ttgo-t-display/)) displays with ESPHome. Note that this component utilizes the 4-Wire [SPI bus](/components/spi). -{{< img src="st7789v-full.jpg" alt="Image" caption="ST7789V TFT LCD on TTGO T-Display module" width="75.0%" class="align-center" >}} +
    The TTGO T-Display module shown has the display attached to the module's board and its connections to the ESP32 cannot be changed. Other display modules have pin headers or other connectors which must be connected appropriately @@ -85,7 +91,7 @@ If you do specify them they will override any default. - **backlight_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The display's backlight pin. May be required depending on the hardware configuration. To disable a preset backlight pin (e.g. if controlled by another component) set this to `no`. -- **power_supply** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/power_supply" "power supply" >}} to connect to +- **power_supply** (*Optional*, [ID](/guides/configuration-types#id)): The [power supply](/components/power_supply/) to connect to this display if required by hardware. The power supply will be turned on before attempting to initialize the display. - **lambda** (*Optional*, [lambda](/automations/templates#config-lambda)): The lambda to use for rendering the content on the display. @@ -297,6 +303,6 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/power_supply" "Power Supply Component" >}} -- {{< apiref "st7789v_base/st7789v_base.h" "st7789v_base/st7789v_base.h" >}} +- [Display Component](/components/display/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/display/st7920.md b/src/content/docs/components/display/st7920.mdx similarity index 83% rename from content/components/display/st7920.md rename to src/content/docs/components/display/st7920.mdx index b37455925f..d281ae2eaa 100644 --- a/content/components/display/st7920.md +++ b/src/content/docs/components/display/st7920.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up ST7920 LCD display drivers." title: "ST7920 LCD Graphic Display" -params: - seo: - description: Instructions for setting up ST7920 LCD display drivers. - image: st7920.jpg --- -{{< anchor "st7920" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import st7920FullImg from './images/st7920-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Usage @@ -17,7 +18,12 @@ ST7920 ([datasheet](http://www.elecrow.com/download/SPE_IM120424014_EONE_12864_G displays with ESPHome. Note that this component is for displays that are connected via the 3-Wire [SPI bus](/components/spi). It's a monochrome LCD graphic display. -{{< img src="st7920-full.jpg" alt="Image" caption="ST7920 LCD Graphic Display" width="75.0%" class="align-center" >}} +
    Connect D5 to the E pin you chose for the [SPI bus](/components/spi), connect D7 to the R/W pin and `RS` to some GPIO pins on the ESP. For SPI communication it's important to connect PSB on the LCD to GND. @@ -54,5 +60,5 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< apiref "st7920/st7920.h" "st7920/st7920.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/tm1621.md b/src/content/docs/components/display/tm1621.mdx similarity index 88% rename from content/components/display/tm1621.md rename to src/content/docs/components/display/tm1621.mdx index 33e641f8f3..5accbccc0b 100644 --- a/content/components/display/tm1621.md +++ b/src/content/docs/components/display/tm1621.mdx @@ -1,15 +1,21 @@ --- description: "Instructions for setting up TM1621 LCD Display." title: "TM1621 LCD Display" -params: - seo: - description: Instructions for setting up TM1621 LCD Display. - image: tm1621.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tm1621FullImg from './images/tm1621-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `tm1621` display platform allows you to use the popular TM1621 LCD display drivers with ESPHome, that can find in Sonoff device like THR316D, THR320D, POWR316D or POWR320D -{{< img src="tm1621-full.jpg" alt="Image" caption="TM1621 LCD Display." width="75.0%" class="align-center" >}} +
    The LCD have four signal, `cs` for chip select, `data` for data signal, `read` for reading data dir and `write` for writing data dir @@ -41,7 +47,7 @@ display: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to re-draw the screen. Defaults to `1s`. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -{{< anchor "display-tm1621_lambda" >}} + ## Rendering Lambda @@ -82,5 +88,5 @@ Also we have five function to display or not some unites: ## See Also -- {{< docref "index/" >}} -- {{< apiref "tm1621/tm1621.h" "tm1621/tm1621.h" >}} +- [Display Component](/components/display/) +- diff --git a/content/components/display/tm1637.md b/src/content/docs/components/display/tm1637.mdx similarity index 86% rename from content/components/display/tm1637.md rename to src/content/docs/components/display/tm1637.mdx index 6452d93ed0..ba3e4e2198 100644 --- a/content/components/display/tm1637.md +++ b/src/content/docs/components/display/tm1637.mdx @@ -1,15 +1,24 @@ --- description: "Instructions for setting up TM1637 7-segment displays." title: "TM1637 7-Segment Display" -params: - seo: - description: Instructions for setting up TM1637 7-segment displays. - image: tm1637.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tm1637FullImg from './images/tm1637-full.jpg'; +import tm1637KeyConnectionsImg from './images/tm1637_key_connections.png'; +import tm16372devicesImg from './images/tm1637_2devices.png'; +import tm16373plusDevicesImg from './images/tm1637_3plus_devices.png'; +import APIRef from '@components/APIRef.astro'; + The `tm1637` display platform allows you to use the popular TM1637 7-segment display drivers with ESPHome. -{{< img src="tm1637-full.jpg" alt="Image" caption="TM1637 7-Segment Display." width="75.0%" class="align-center" >}} +
    The module can be powered with 5v or with 3.3v too. To display the colon punctuation use the `.` in the colon place. (See clock example below) @@ -49,7 +58,12 @@ display: The TM1637 LED display controller also includes a special circuit with keyboard scan interface and enhanced identification circuit with anti-interference keys. This circuit uses the 8 segment lines that also drive the LED display. But combined with the K1 and K2 pins we can add 16 keys that can be used as binary sensors in esphome. -{{< img src="tm1637_key_connections.png" alt="Image" caption="TM1637 display keyboard connections" width="50.0%" class="align-center" >}} +
    ```yaml binary_sensor: @@ -70,7 +84,7 @@ binary_sensor: - All other options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "display-tm1637_lambda" >}} + ## Rendering Lambda @@ -149,7 +163,12 @@ display: To connect multiple TM1636 displays you need as many control lines as you have displays. This is achived by sharing control-lines for clk and dio between displays. -{{< img src="tm1637_2devices.png" alt="Image" caption="Two TM1637 displays on only 2 control lines" width="50.0%" class="align-center" >}} +
    When using the pins more than once, the configuration must reflect the fact: @@ -177,10 +196,15 @@ display: When using more than 2 devices like 3 or more you add a control-line for the Dio pin and share this with the next display Clk pin. The last displays Dio pin shares the Clk pin of the first display. -{{< img src="tm1637_3plus_devices.png" alt="Image" caption="Three TM1637 displays on 3 control lines" width="50.0%" class="align-center" >}} +
    ## See Also -- {{< docref "index/" >}} -- {{< apiref "tm1637/tm1637.h" "tm1637/tm1637.h" >}} +- [Display Component](/components/display/) - [TD1637 Library](https://github.com/avishorp/TM1637) by [Avishay](https://github.com/avishorp) +- diff --git a/content/components/display/tm1638.md b/src/content/docs/components/display/tm1638.mdx similarity index 87% rename from content/components/display/tm1638.md rename to src/content/docs/components/display/tm1638.mdx index ac711572e9..14a06732a9 100644 --- a/content/components/display/tm1638.md +++ b/src/content/docs/components/display/tm1638.mdx @@ -1,15 +1,21 @@ --- description: "Instructions for setting up TM1638 7 Segment Display Keypad & LED Module" title: "TM1638 7 Segment Display Keypad & LED Module" -params: - seo: - description: Instructions for setting up TM1638 7 Segment Display Keypad & LED Module - image: tm1638.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tm1638FullImg from './images/tm1638-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `tm1638` display platform allows you to use the popular TM1638 7 Segment Display Keypad & LED Module with ESPHome. -{{< img src="tm1638-full.jpg" alt="Image" caption="TM1638 8-Segment Display Keypad & LED Module." width="75.0%" class="align-center" >}} +
    The module can be powered with 5v DC. To display the colon punctuation use the `.` in the colon place. (See clock example below) @@ -42,7 +48,7 @@ display: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to re-draw the screen. Defaults to `1s`. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -{{< anchor "display-tm1638_lambda" >}} + ## Rendering Lambda @@ -120,7 +126,7 @@ display: ## LEDs -The TM1638 7 Segment Display Keypad & LED Module has 8 LED lights across the top or middle of the display, depending on the board. These LEDs can be exposed as {{< docref "/components/switch/index" "switches" >}} or {{< docref "/components/output/index" "outputs" >}} with the led property set between 0 and 7. The board has the LEDs labelled 1-8, but the leds use zero based addressing. The LED labelled "1" is LED 0 in the configuration. +The TM1638 7 Segment Display Keypad & LED Module has 8 LED lights across the top or middle of the display, depending on the board. These LEDs can be exposed as [switches](/components/switch/) or [outputs](/components/output/) with the led property set between 0 and 7. The board has the LEDs labelled 1-8, but the leds use zero based addressing. The LED labelled "1" is LED 0 in the configuration. ```yaml switch: @@ -136,7 +142,7 @@ output: ## Buttons -The TM1638 7 Segment Display Keypad & LED Module has 8 buttons across the top or middle of the display, depending on the board. These buttons are exposed as binary sensor components with the key property set between 0 and 7, They can be accessed via the binary sensor component configuration. As with the LEDs the buttons are labeled 1-8 on the board, but use zero based addressing. Therefore the button labelled "1" is key 0 in the configuration. See {{< docref "/components/binary_sensor" >}} +The TM1638 7 Segment Display Keypad & LED Module has 8 buttons across the top or middle of the display, depending on the board. These buttons are exposed as binary sensor components with the key property set between 0 and 7, They can be accessed via the binary sensor component configuration. As with the LEDs the buttons are labeled 1-8 on the board, but use zero based addressing. Therefore the button labelled "1" is key 0 in the configuration. See [Binary Sensor](/components/binary_sensor/) ```yaml binary_sensor: @@ -169,7 +175,7 @@ binary_sensor: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/switch" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "tm1638/tm1638.h" "tm1638/tm1638.h" >}} +- [Display Component](/components/display/) +- [Switch Component](/components/switch/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/display/waveshare_epaper.md b/src/content/docs/components/display/waveshare_epaper.mdx similarity index 90% rename from content/components/display/waveshare_epaper.md rename to src/content/docs/components/display/waveshare_epaper.mdx index c52e2c76d2..4c15651ca6 100644 --- a/content/components/display/waveshare_epaper.md +++ b/src/content/docs/components/display/waveshare_epaper.mdx @@ -1,12 +1,15 @@ --- description: "Instructions for setting up Waveshare E-Paper displays in ESPHome." title: "Waveshare E-Paper Display" -params: - seo: - description: Instructions for setting up Waveshare E-Paper displays in ESPHome. - image: waveshare_epaper.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import waveshareEpaperFullImg from './images/waveshare_epaper-full.jpg'; +import waveshareEpaper7colorAcepFullImg from './images/waveshare_epaper_7color_acep-full.jpg'; +import waveshareEpaperPinsImg from './images/waveshare_epaper-pins.jpg'; +import APIRef from '@components/APIRef.astro'; + The `waveshare_epaper` display platform allows you to use some E-Paper displays sold by [Waveshare](https://www.waveshare.com/product/displays/e-paper.htm) with ESPHome. The 2.13" [TTGO module](https://github.com/lewisxhe/TTGO-EPaper-Series) and the @@ -20,9 +23,19 @@ Similar modules sold by other vendors might also work but not have been tested y Currently, most displays managed by Esphome are single-color E-Ink displays; but Esphome also supports E-Ink displays capable of showing up to 7 colors. -{{< img src="waveshare_epaper-full.jpg" alt="Image" caption="Waveshare E-Paper 2.9 Inch E-Paper Display." width="75.0%" class="align-center" >}} +
    -{{< img src="waveshare_epaper_7color_acep-full.jpg" alt="Image" caption="Waveshare E-Paper 7.3 Inch ACeP 7-Color E-Paper Display." width="75.0%" class="align-center" >}} +
    The communication ESPHome has chosen to use for this integration is 4-wire [SPI](/components/spi), as it's the most stable and high-speed. So you need to make sure your board is set to the 4-wire SPI mode and have an `spi:` section in your configuration. @@ -38,7 +51,7 @@ configuration. | `BUSY` (Optional) | Any GPIO | `busy_pin` | | `RESET` (Optional) | Any GPIO | `reset_pin` | -{{< img src="waveshare_epaper-pins.jpg" alt="Image" width="60.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -161,6 +174,6 @@ lambda: |- ## See Also -- {{< docref "index/" >}} -- {{< apiref "waveshare_epaper/waveshare_epaper.h" "waveshare_epaper/waveshare_epaper.h" >}} +- [Display Component](/components/display/) - [Arduino Waveshare E-Paper library](https://github.com/soonuse/epd-library-arduino) by [Yehui (@soonuse)](https://github.com/soonuse) +- diff --git a/content/components/display_menu/graphical_display_menu.md b/src/content/docs/components/display_menu/graphical_display_menu.mdx similarity index 92% rename from content/components/display_menu/graphical_display_menu.md rename to src/content/docs/components/display_menu/graphical_display_menu.mdx index 2680858c45..9cb219e698 100644 --- a/content/components/display_menu/graphical_display_menu.md +++ b/src/content/docs/components/display_menu/graphical_display_menu.mdx @@ -1,20 +1,19 @@ --- description: "Instructions for setting up a simple hierarchical menu on displays." title: "Graphical Display Menu" -params: - seo: - description: Instructions for setting up a simple hierarchical menu on displays. - image: lcd_menu.png --- -{{< anchor "graphical_display_menu" >}} +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + + The component provides an infrastructure for setting up a hierarchical menu on graphical displays. This offers the user an interactive method to display labels, control entities like `switch`, `select`, `number` available locally on the ESPHome node, without the requirement of a network connection. -{{< img src="graphical_display_menu.png" alt="Image" width="60.0%" class="align-center" >}} + ## Overview @@ -23,7 +22,7 @@ a hierarchical menu primarily intended to be controlled either by a rotary encod with a button or a five-button joystick controller. The component needs to be connected to an instance of a display supporting ESPHome's rendering -engine such as {{< docref "/components/display/waveshare_epaper" "E-Paper displays" >}} or {{< docref "/components/display/ssd1306" "OLED displays" >}}. +engine such as [E-Paper displays](/components/display/waveshare_epaper/) or [OLED displays](/components/display/ssd1306/). ```yaml # Example configuration entry @@ -60,7 +59,7 @@ Automations: Additional configuration is described in the [Display Menu](/components/display_menu#display_menu) component. -{{< anchor "drawing_modes" >}} + ## Drawing Modes @@ -226,7 +225,7 @@ binary_sensor: ## See Also - [Display Menu](/components/display_menu#display_menu) -- [Display](/components/display#display-engine) +- [Display Component](/components/display#display-engine) - [Font Renderer Component](/components/font#display-fonts) - [Display Pages](/components/display#display-pages) -- {{< apiref "graphical_display_menu/graphical_display_menu.h" "graphical_display_menu/graphical_display_menu.h" >}} +- diff --git a/content/components/display_menu/_index.md b/src/content/docs/components/display_menu/index.mdx similarity index 96% rename from content/components/display_menu/_index.md rename to src/content/docs/components/display_menu/index.mdx index d6a6ed8297..3536ce6ee9 100644 --- a/content/components/display_menu/_index.md +++ b/src/content/docs/components/display_menu/index.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up a simple hierarchical menu on displays." title: "Display Menu" -params: - seo: - description: Instructions for setting up a simple hierarchical menu on displays. - image: lcd_menu.png +sidebar: + label: "Display Menu" --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "display_menu" >}} + + The component provides a menu primarily intended to be controlled either by a rotary encoder with a button or a five-button joystick controller. It allows to navigate a hierarchy of items @@ -114,7 +114,7 @@ The component manages a hierarchy of menu items. The common configuration variab for the menu item. If a lambda is specified it gets an `it` argument pointing to the `MenuItem` that is being drawn. -{{< anchor "display_menu-edit_mode" >}} + ### Editing values @@ -457,7 +457,7 @@ Automations: ## Automations -{{< anchor "display_menu-on_enter" >}} + ### `on_enter` @@ -478,7 +478,7 @@ lcd_menu: lambda: 'ESP_LOGI("display_menu", "enter: %s", it->get_text().c_str());' ``` -{{< anchor "display_menu-on_leave" >}} + ### `on_leave` @@ -500,7 +500,7 @@ lcd_menu: lambda: 'ESP_LOGI("display_menu", "leave: %s", it->get_text().c_str());' ``` -{{< anchor "display_menu-on_value" >}} + ### `on_value` @@ -519,7 +519,7 @@ lcd_menu: lambda: 'ESP_LOGI("display_menu", "select value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());' ``` -{{< anchor "display_menu-on_next" >}} + ### `on_next` @@ -537,7 +537,7 @@ lcd_menu: lambda: 'some_state++;' ``` -{{< anchor "display_menu-on_prev" >}} + ### `on_prev` @@ -555,7 +555,7 @@ lcd_menu: lambda: 'some_state--;' ``` -{{< anchor "display_menu-up_action" >}} + ### `display_menu.up` Action @@ -575,7 +575,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of the menu to navigate. -{{< anchor "display_menu-down_action" >}} + ### `display_menu.down` Action @@ -595,7 +595,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of the menu to navigate. -{{< anchor "display_menu-left_action" >}} + ### `display_menu.left` Action @@ -618,7 +618,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of the menu to navigate. -{{< anchor "display_menu-right_action" >}} + ### `display_menu.right` Action @@ -640,7 +640,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of the menu to navigate. -{{< anchor "display_menu-enter_action" >}} + ### `display_menu.enter` Action @@ -731,7 +731,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The ID of the menu to hide. -{{< anchor "display_menu-is_active" >}} + ### `display_menu.is_active` Condition @@ -748,4 +748,4 @@ on_press: ## See Also -- {{< apiref "display_menu_base/display_menu_base.h" "display_menu_base/display_menu_base.h" >}} +- diff --git a/content/components/display_menu/lcd_menu.md b/src/content/docs/components/display_menu/lcd_menu.mdx similarity index 91% rename from content/components/display_menu/lcd_menu.md rename to src/content/docs/components/display_menu/lcd_menu.mdx index 100e6b3eef..adccdca490 100644 --- a/content/components/display_menu/lcd_menu.md +++ b/src/content/docs/components/display_menu/lcd_menu.mdx @@ -1,20 +1,19 @@ --- description: "Instructions for setting up a simple hierarchical menu on displays." title: "LCD Menu" -params: - seo: - description: Instructions for setting up a simple hierarchical menu on displays. - image: lcd_menu.png --- -{{< anchor "lcd_menu" >}} +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + + The component provides an infrastructure for setting up a hierarchical menu on character based LCD displays. This offers the user an interactive method to display labels, control entities like `switch`, `select`, `number` available locally on the ESPHome node, without the requirement of a network connection. -{{< img src="lcd_menu.png" alt="Image" width="60.0%" class="align-center" >}} + ## Overview @@ -116,6 +115,6 @@ The menu inherits the dimensions of the connected LCD display and uses the entir - [lcd_pcf8574 Component](/components/display/lcd_display#lcd-pcf8574) - [lcd_gpio Component](/components/display/lcd_display#lcd-gpio) - [Display Menu](/components/display_menu#display_menu) -- {{< docref "/components/sensor/rotary_encoder" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "lcd_menu/lcd_menu.h" "lcd_menu/lcd_menu.h" >}} +- [Rotary Encoder Sensor](/components/sensor/rotary_encoder/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/emc2101.md b/src/content/docs/components/emc2101.mdx similarity index 81% rename from content/components/emc2101.md rename to src/content/docs/components/emc2101.mdx index 70cc3aa35d..66b11e3236 100644 --- a/content/components/emc2101.md +++ b/src/content/docs/components/emc2101.mdx @@ -1,22 +1,28 @@ --- description: "Instructions for setting up EMC2101 fan controller and temperature sensor in ESPHome." title: "EMC2101 Fan Controller and Temperature sensor" -params: - seo: - description: Instructions for setting up EMC2101 fan controller and temperature sensor in ESPHome. - image: emc2101.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import emc2101FullImg from './images/emc2101-full.png'; +import APIRef from '@components/APIRef.astro'; + The `emc2101` component allows you to control a cooling fan from ESPHome ([datasheet](https://ww1.microchip.com/downloads/aemDocuments/documents/MSLD/ProductDocuments/DataSheets/EMC2101-Data-Sheet-DS20006703.pdf)). It also provides temperature sensors and a tachometer. The fan can be controlled either by a PWM signal or by outputing a DC voltage using its DAC. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="emc2101-full.png" alt="Image" caption="EMC2101 Fan Controller and Temperature sensor" width="50.0%" class="align-center" >}} +
    > [!NOTE] -> Original image at created by +> Original image at [https://learn.adafruit.com/assets/97827](https://learn.adafruit.com/assets/97827) created by > by user [Bryan Siepert](https://learn.adafruit.com/u/siddacious) under > [Creative Commons BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) and modified > for this documentation. @@ -46,16 +52,16 @@ emc2101: The PWM signal frequency is determined by the following formula: -{{< math >}} -\text{PWM Frequency} = \frac{360KHz}{2 \times resolution \times divider} +$$ +\text{PWM Frequency} = \frac{360\text{ KHz}}{2 \times \text{resolution} \times \text{divider}} +$$ -{{< /math >}} And the PWM resolution, the steps in the duty cycle, is calculated by the following formula: -{{< math >}} -\text{PWM resolution} = \frac{100\%}{2 \times resolution} +$$ +\text{PWM resolution} = \frac{100\%}{2 \times \text{resolution}} +$$ -{{< /math >}} So, with the default values the PWM signal will have a frequency of 7.83KHz and a resolution of 2.17%. The maximum resolution value is `31` which will configure a frequency of 5.81KHz with a resolution of 1.61%. @@ -72,7 +78,7 @@ output: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID to use for code generation, and for reference by dependent components. > [!NOTE] -> When using the `emc2101` output with a {{< docref "/components/fan/speed" >}} it is advised to configure the **speed_count** +> When using the `emc2101` output with a [Speed](/components/fan/speed/) it is advised to configure the **speed_count** > as twice the **resolution** so the number of speeds in the fan matches the number of steps in the fan controller. ## EMC2101 Sensors @@ -111,5 +117,5 @@ sensor: ## See Also - [Base Sensor Configuration](/components/sensor) -- {{< docref "/components/fan/speed" >}} -- {{< apiref "emc2101/emc2101.h" "emc2101/emc2101.h" >}} +- [Speed Fan](/components/fan/speed/) +- diff --git a/content/components/esp32.md b/src/content/docs/components/esp32.mdx similarity index 96% rename from content/components/esp32.md rename to src/content/docs/components/esp32.mdx index 1610092d30..dcedee9d68 100644 --- a/content/components/esp32.md +++ b/src/content/docs/components/esp32.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the ESP32 platform for ESPHome." title: "ESP32 Platform" -params: - seo: - description: Configuration for the ESP32 platform for ESPHome. - image: esp32.svg --- This component contains platform-specific options for the ESP32 platform. @@ -43,7 +39,7 @@ esp32: - **framework** (*Optional*): Options for the underlying framework used by ESPHome. See [Framework](#esp32-framework). -{{< anchor "esp32-framework" >}} + ## Framework @@ -53,7 +49,7 @@ ESPHome supports two framework options for ESP32 chips: ESP-IDF is Espressif's native development framework. It is required for ESP32-C2, ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2, and ESP32-P4 variants, as these are not supported by the Arduino framework. It is the default and recommended for -all ESP32 chips when possible. See the {{< docref "/guides/esp32_arduino_to_idf" "migration guide" >}} for help transitioning from Arduino. +all ESP32 chips when possible. See the [migration guide](/guides/esp32_arduino_to_idf/) for help transitioning from Arduino. ```yaml # Example configuration entry @@ -114,7 +110,7 @@ esp32: - **advanced** (*Optional*, mapping): See [Advanced Configuration](#esp32-advanced_configuration) below. - **components** (*Optional*, list of components): See [IDF Components](#esp32-idf_components) below. -{{< anchor "esp32-advanced_configuration" >}} + ## Advanced Configuration @@ -253,7 +249,7 @@ The following options disable unused VFS features to save flash memory: bundle. By default, ESPHome uses the CMN (common CAs) bundle which includes only Certificate Authorities with greater than 1% market share. This covers approximately 99% of websites including Let's Encrypt, DigiCert, Google Trust Services, Amazon Trust Services, and other major CAs. The CMN bundle is sufficient for most use cases including GitHub - (commonly used for OTA updates via {{< docref "/components/http_request" >}}), Home Assistant Cloud, and typical HTTPS + (commonly used for OTA updates via [HTTP Request](/components/http_request/)), Home Assistant Cloud, and typical HTTPS endpoints. Set to `true` only if connecting to services that use uncommon Certificate Authorities. Defaults to `false` (CMN bundle saves ~51 KB flash). @@ -376,7 +372,7 @@ When using the Arduino framework, ESPHome uses selective compilation to only bui Previously, many Arduino libraries were compiled even though ESPHome never called them. In most Arduino configs, none of these libraries were actually used, yet they bloated the binary by 50% or more and consumed significant RAM. -Components that need specific Arduino libraries automatically enable them. For edge cases where a library isn't auto-detected (e.g., custom lambdas using Arduino APIs), you can explicitly enable libraries using the {{< docref "/components/esphome#libraries" "libraries" >}} configuration option. +Components that need specific Arduino libraries automatically enable them. For edge cases where a library isn't auto-detected (e.g., custom lambdas using Arduino APIs), you can explicitly enable libraries using the [libraries](/components/esphome#libraries) configuration option. ```yaml # Example: Enabling Arduino libraries for custom lambda code @@ -394,7 +390,7 @@ esp32: > [!NOTE] > If you were already adding libraries via `libraries` config or calling `cg.add_library()`, no action is needed. If you were previously using Arduino library APIs directly in lambdas (e.g. `Preferences`, `Wire`, `SPI`) without adding them to the `libraries` config, you will need to explicitly add them. -{{< anchor "esp32-idf_components" >}} + ## IDF Components @@ -452,9 +448,9 @@ Some notes about the pins on the original ESP32: - `GPIO34` to `GPIO39` : These pins **cannot** be used as outputs (yes, even though GPIO stands for "general purpose input/**output**"...). -- `GPIO32` to `GPIO39` : These pins can be used with the {{< docref "/components/sensor/adc" >}} to measure voltages. +- `GPIO32` to `GPIO39` : These pins can be used with the [Adc](/components/sensor/adc/) to measure voltages. - `GPIO2` : On the `esp32dev` board, this pin is connected to the blue LED. It also supports the - {{< docref "/components/binary_sensor/esp32_touch" "touch pad binary sensor" >}} (in addition to a few other pins). + [touch pad binary sensor](/components/binary_sensor/esp32_touch/) (in addition to a few other pins). ```yaml # Example configuration entry @@ -466,4 +462,4 @@ binary_sensor: ## See Also -- {{< docref "esphome/" >}} +- [ESPHome Core Configuration](/components/esphome/) diff --git a/content/components/esp32_ble.md b/src/content/docs/components/esp32_ble.mdx similarity index 87% rename from content/components/esp32_ble.md rename to src/content/docs/components/esp32_ble.mdx index 2fbfb63abc..11e2cf9027 100644 --- a/content/components/esp32_ble.md +++ b/src/content/docs/components/esp32_ble.mdx @@ -1,20 +1,18 @@ --- description: "Instructions for setting up Bluetooth LE in ESPHome." title: "BLE Component" -params: - seo: - description: Instructions for setting up Bluetooth LE in ESPHome. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; -The `esp32_ble` component in ESPHome sets up the Bluetooth LE stack on the device so that a {{< docref "esp32_ble_server/" >}} + +The `esp32_ble` component in ESPHome sets up the Bluetooth LE stack on the device so that a [Esp32 Ble Server](/components/esp32_ble_server/) can run. > [!WARNING] > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -59,7 +57,7 @@ esp32_ble: > [!NOTE] > The `connection_timeout` option is particularly important when using ESPHome as a Bluetooth proxy. The default of 20 seconds matches the timeout used by aioesphomeapi and bleak-retry-connector. If a connection attempt times out on the client side but ESP-IDF continues trying to connect, the connection slot remains occupied and unavailable for new connections. Setting this to match your client timeout ensures connection slots are freed immediately when a connection fails. -- **advertising** (*Optional*, boolean): Manually enable BLE advertising support. This is automatically enabled when using {{< docref "esp32_ble_server/" >}} or {{< docref "esp32_ble_beacon/" >}}. Only set this to `true` if you need advertising functionality without those components. Defaults to `false`. +- **advertising** (*Optional*, boolean): Manually enable BLE advertising support. This is automatically enabled when using [Esp32 Ble Server](/components/esp32_ble_server/) or [Esp32 Ble Beacon](/components/esp32_ble_beacon/). Only set this to `true` if you need advertising functionality without those components. Defaults to `false`. > [!NOTE] > The `advertising` option is an advanced feature that manually enables BLE advertising compilation. In most cases, you don't need to set this as advertising is automatically enabled when using components that require it (like `esp32_ble_server` or `esp32_ble_beacon` ). This option is primarily useful for custom components or special use cases where you need advertising functionality without the standard server or beacon components. @@ -70,7 +68,7 @@ esp32_ble: - Range: 1 to 9 - Each connection slot consumes approximately 1KB of RAM - - This limit is shared between {{< docref "esp32_ble_tracker/" >}} (BLE client), {{< docref "bluetooth_proxy/" >}}, and {{< docref "esp32_ble_server/" >}} (BLE server) + - This limit is shared between [Esp32 Ble Tracker](/components/esp32_ble_tracker/) (BLE client), [Bluetooth Proxy](/components/bluetooth_proxy/), and [Esp32 Ble Server](/components/esp32_ble_server/) (BLE server) - Total BLE instances (ADV/SCAN + connections) is limited to 10 on ESP32-C3/S3 - It is recommended not to exceed `5` connection slots to avoid memory issues @@ -112,7 +110,7 @@ on_...: > [!NOTE] > The configuration option `enable_on_boot` can be set to `false` if you do not want BLE to be enabled on boot. -{{< anchor "ble-enabled_condition" >}} + ## `ble.enabled` Condition @@ -132,6 +130,6 @@ The lambda equivalent for this is `id(ble_id).is_active()`. ## See Also -- {{< docref "esp32_ble_server/" >}} -- {{< docref "esp32_improv/" >}} -- {{< apiref "esp32_ble/ble.h" "esp32_ble/ble.h" >}} +- [BLE Server](/components/esp32_ble_server/) +- [Improv via BLE](/components/esp32_improv/) +- diff --git a/content/components/esp32_ble_beacon.md b/src/content/docs/components/esp32_ble_beacon.mdx similarity index 83% rename from content/components/esp32_ble_beacon.md rename to src/content/docs/components/esp32_ble_beacon.mdx index 75e9cc1736..ef4057c37b 100644 --- a/content/components/esp32_ble_beacon.md +++ b/src/content/docs/components/esp32_ble_beacon.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up Bluetooth Low Energy iBeacons using the BLE feature on ESP32s." title: "ESP32 Bluetooth Low Energy Beacon" -params: - seo: - description: Instructions for setting up Bluetooth Low Energy iBeacons using the BLE feature on ESP32s. - image: bluetooth.svg --- +import { Image } from 'astro:assets'; +import esp32BleBeaconIbeaconImg from './images/esp32_ble_beacon-ibeacon.png'; +import APIRef from '@components/APIRef.astro'; + The `esp32_ble_beacon` component creates a Bluetooth Low Energy Beacon with your ESP32 device. Beacons are BLE devices that repeatedly just send out a pre-defined packet of data. This packet can then be received by devices like smartphones and can then be used to track a phone's location. @@ -15,7 +15,7 @@ can then be received by devices like smartphones and can then be used to track a > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -63,11 +63,10 @@ Advanced options: First, you'll need to set up the configuration for ESPHome. Just copy the configuration above and change the UUID to something unique. For example, you can copy this randomly generated UUID: - - - - Then, just compile and flash the ESP32. @@ -90,11 +89,11 @@ For using these beacons to track the location of your phone, you will need to us know when I'm home or away. Another nice Android app is [Beacon MQTT](https://turbo-lab.github.io/android-beacon-mqtt/). It can work with multiple beacons simultaneously. -{{< img src="esp32_ble_beacon-ibeacon.png" alt="Image" width="75.0%" class="align-center" >}} + ## See Also -- {{< docref "esp32_ble_tracker/" >}} -- {{< docref "binary_sensor/ble_presence" >}} -- {{< apiref "esp32_ble_beacon/esp32_ble_beacon.h" "esp32_ble_beacon/esp32_ble_beacon.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [ESP32 Bluetooth Low Energy Device](/components/binary_sensor/ble_presence/) - [ESP32 BLE for Arduino](https://github.com/nkolban/ESP32_BLE_Arduino) by [Neil Kolban](https://github.com/nkolban). +- diff --git a/content/components/esp32_ble_server.md b/src/content/docs/components/esp32_ble_server.mdx similarity index 94% rename from content/components/esp32_ble_server.md rename to src/content/docs/components/esp32_ble_server.mdx index 5ded1901df..6414d399d0 100644 --- a/content/components/esp32_ble_server.md +++ b/src/content/docs/components/esp32_ble_server.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Bluetooth LE GATT Server in ESPHome." title: "BLE Server" -params: - seo: - description: Instructions for setting up Bluetooth LE GATT Server in ESPHome. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `esp32_ble_server` component in ESPHome sets up a BLE GATT server that exposes the device name, manufacturer and board. BLE GATT services and characteristics can be added to the server to expose data and control. @@ -14,7 +12,7 @@ manufacturer and board. BLE GATT services and characteristics can be added to th > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -45,7 +43,7 @@ esp32_ble_server: - **on_disconnect** (*Optional*, [Automation](/automations)): An action to be performed when a client disconnects from the BLE server. It provides the `id` variable which contains the ID of the client that disconnected. - **services** (*Optional*, list of [Service Configuration](#esp32_ble_server-service)): A list of services to expose on the BLE GATT server. -{{< anchor "esp32_ble_server-service" >}} + ## Service Configuration @@ -69,7 +67,7 @@ esp32_ble_server: - **advertise** (*Optional*, boolean): If the service should be advertised. Defaults to `false`. - **characteristics** (*Optional*, list of [Characteristic Configuration](#esp32_ble_server-characteristic)): A list of characteristics to expose in this service. -{{< anchor "esp32_ble_server-characteristic" >}} + ## Characteristic Configuration @@ -110,7 +108,7 @@ esp32_ble_server: - **descriptors** (*Optional*, list of [Descriptor Configuration](#esp32_ble_server-descriptor)): A list of descriptors to expose in this characteristic. - **on_write** (*Optional*, [Automation](/automations)): An action to be performed when the characteristic is written to. The characteristic must have the `write` property. See [`on_write` Trigger](#esp32_ble_server-characteristic-on_write). -{{< anchor "esp32_ble_server-descriptor" >}} + ## Descriptor Configuration @@ -134,7 +132,7 @@ esp32_ble_server: - **uuid** (**Required**, string, int): The UUID of the descriptor. - **value** (**Required**, [Value Configuration](#esp32_ble_server-value)): The value of the descriptor. [templatable](/automations/templates) values are not allowed. In order to set the value of a descriptor dynamically, use the [`ble_server.descriptor.set_value` Action](#esp32_ble_server-descriptor-set_value) action. -{{< anchor "esp32_ble_server-value" >}} + ## Value Configuration @@ -182,7 +180,7 @@ esp32_ble_server: - **endianness** (*Optional*, string): The endianness of the value. Can be `BIG` or `LITTLE`. Defaults to `LITTLE`. - **string_encoding** (*Optional*, string): The encoding of the string. Only applicable if the type is `string`. The conversion is done in Python before compilation, so the encoding must be a valid [Python encoding](https://docs.python.org/3/library/codecs.html#standard-encodings). Defaults to `utf-8`. -{{< anchor "esp32_ble_server-characteristic-on_write" >}} + ## `on_write` Trigger @@ -233,7 +231,7 @@ on_...: - **id** (**Required**, string): The ID of the characteristic to notify the client about (must have the `notify` property). -{{< anchor "esp32_ble_server-descriptor-set_value" >}} + ## `ble_server.descriptor.set_value` Action @@ -254,6 +252,6 @@ on_...: ## See Also -- {{< docref "esp32_ble/" >}} -- {{< docref "esp32_improv/" >}} -- {{< apiref "esp32_ble/ble.h" "esp32_ble/ble.h" >}} +- [BLE Component](/components/esp32_ble/) +- [Improv via BLE](/components/esp32_improv/) +- diff --git a/content/components/esp32_ble_tracker.md b/src/content/docs/components/esp32_ble_tracker.mdx similarity index 88% rename from content/components/esp32_ble_tracker.md rename to src/content/docs/components/esp32_ble_tracker.mdx index fb63c9b4cb..801367c335 100644 --- a/content/components/esp32_ble_tracker.md +++ b/src/content/docs/components/esp32_ble_tracker.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up ESP32 bluetooth low energy device trackers using ESPHome." title: "ESP32 Bluetooth Low Energy Tracker Hub" -params: - seo: - description: Instructions for setting up ESP32 bluetooth low energy device trackers using ESPHome. - image: bluetooth.svg --- +import APIClass from '@components/APIClass.astro'; +import APIRef from '@components/APIRef.astro'; + The `esp32_ble_tracker` component creates a global hub so that you can track bluetooth low energy devices using your ESP32 node. @@ -17,7 +16,7 @@ the MAC address of a device and track it using ESPHome. > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -60,7 +59,7 @@ sensor: > resized. Please flash the ESP32 via USB when adding this to your configuration. After that, > you can use OTA updates again. -{{< anchor "config-esp32_ble_tracker" >}} + ## Configuration variables @@ -93,7 +92,7 @@ sensor: Defaults to `true`. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this ESP32 BLE Hub. -- **max_connections** (*Optional*, int): **DEPRECATED** - This option has been moved to the {{< docref "esp32_ble/" >}} component. +- **max_connections** (*Optional*, int): **DEPRECATED** - This option has been moved to the [Esp32 Ble](/components/esp32_ble/) component. Please configure `max_connections` there instead. This option is kept for backward compatibility only. This option will be removed in ESPHome 2026.10.0. Automations: @@ -114,12 +113,12 @@ Automations: ## ESP32 Bluetooth Low Energy Tracker Automation -{{< anchor "esp32_ble_tracker-on_ble_advertise" >}} + ### `on_ble_advertise` Trigger This automation will be triggered when a Bluetooth advertising is received. A variable `x` of type -{{< apiclass "esp32_ble_tracker::ESPBTDevice" "esp32_ble_tracker::ESPBTDevice" >}} is passed to the automation for use in lambdas. + is passed to the automation for use in lambdas. ```yaml esp32_ble_tracker: @@ -151,7 +150,7 @@ esp32_ble_tracker: - **mac_address** (*Optional*, list of MAC Address): The MAC address to filter for this automation. - See [Automation](/automations). -{{< anchor "esp32_ble_tracker-on_ble_manufacturer_data_advertise" >}} + ### `on_ble_manufacturer_data_advertise` Trigger @@ -181,7 +180,7 @@ esp32_ble_tracker: - **manufacturer_id** (**Required**, string): 16 bit, 32 bit, or 128 bit BLE Manufacturer ID. - See [Automation](/automations). -{{< anchor "esp32_ble_tracker-on_ble_service_data_advertise" >}} + ### `on_ble_service_data_advertise` Trigger @@ -292,15 +291,15 @@ api: ## See Also -- {{< docref "text_sensor/ble_scanner" >}} -- {{< docref "sensor/ble_rssi" >}} -- {{< docref "sensor/b_parasite" >}} -- {{< docref "sensor/xiaomi_ble" >}} -- {{< docref "sensor/xiaomi_miscale" >}} -- {{< docref "sensor/inkbird_ibsth1_mini" >}} -- {{< docref "sensor/mopeka_pro_check" >}} -- {{< docref "sensor/ruuvitag" >}} -- {{< docref "ble_client/" >}} -- {{< docref "bluetooth_proxy/" >}} -- {{< apiref "esp32_ble_tracker/esp32_ble_tracker.h" "esp32_ble_tracker/esp32_ble_tracker.h" >}} +- [ESP32 Bluetooth Low Energy Scanner](/components/text_sensor/ble_scanner/) +- [ESP32 Bluetooth Low Energy RSSI Sensor](/components/sensor/ble_rssi/) +- [b-parasite](/components/sensor/b_parasite/) +- [Xiaomi Mijia BLE Sensors](/components/sensor/xiaomi_ble/) +- [Xiaomi Miscale Sensors](/components/sensor/xiaomi_miscale/) +- [Inkbird IBS-TH1, IBS-TH1 Mini, and IBS-TH2 BLE Sensor](/components/sensor/inkbird_ibsth1_mini/) +- [Mopeka Pro Check BLE Sensor](/components/sensor/mopeka_pro_check/) +- [RuuviTag Open Source BLE Sensor](/components/sensor/ruuvitag/) +- [BLE Client](/components/ble_client/) +- [Bluetooth Proxy](/components/bluetooth_proxy/) - [ESP32 BLE for Arduino](https://github.com/nkolban/ESP32_BLE_Arduino) by [Neil Kolban](https://github.com/nkolban). +- diff --git a/content/components/esp32_camera.md b/src/content/docs/components/esp32_camera.mdx similarity index 95% rename from content/components/esp32_camera.md rename to src/content/docs/components/esp32_camera.mdx index 8e766a2474..564912f504 100644 --- a/content/components/esp32_camera.md +++ b/src/content/docs/components/esp32_camera.mdx @@ -1,16 +1,15 @@ --- description: "Instructions for setting up the ESP32 Cameras in ESPHome" title: "ESP32 Camera Component" -params: - seo: - description: Instructions for setting up the ESP32 Cameras in ESPHome - image: camera.svg --- +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + The `esp32_camera` component allows you to use ESP32-based camera boards in ESPHome that directly integrate into Home Assistant through the native API. -Requires an {{< docref "/components/i2c" >}} and {{< docref "/components/psram" >}} to be configured. +Requires an [I2C](/components/i2c/) and [Psram](/components/psram/) to be configured. ```yaml # Example configuration entry @@ -42,7 +41,7 @@ esp32_camera: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -174,7 +173,7 @@ Automations: - **on_stream_stop** (*Optional*, [Automation](/automations)): An automation to perform when a stream stops. -- **on_image** (*Optional*, [Automation](/automations)): An automation called when image taken. Image is available as `image` variable of type {{< apistruct "esp32_camera::CameraImageData" "esp32_camera::CameraImageData" >}}. +- **on_image** (*Optional*, [Automation](/automations)): An automation called when image taken. Image is available as `image` variable of type . Test Setting: @@ -191,7 +190,7 @@ Test Setting: > [!WARNING] > GPIO16 on this board (and possibly other boards below) is connected to onboard PSRAM. > Using this GPIO for other purposes (eg as a button) will trigger the watchdog. -> Further information on pin notes can be found here: +> Further information on pin notes can be found here: [https://github.com/raphaelbs/esp32-cam-ai-thinker/blob/master/docs/esp32cam-pin-notes.md](https://github.com/raphaelbs/esp32-cam-ai-thinker/blob/master/docs/esp32cam-pin-notes.md) ```yaml # Example configuration entry @@ -558,4 +557,4 @@ esp32_camera: ## See Also -- {{< apiref "esp32_camera/esp32_camera.h" "esp32_camera/esp32_camera.h" >}} +- diff --git a/content/components/esp32_camera_web_server.md b/src/content/docs/components/esp32_camera_web_server.mdx similarity index 80% rename from content/components/esp32_camera_web_server.md rename to src/content/docs/components/esp32_camera_web_server.mdx index 82ce3c5e7f..0a51d35519 100644 --- a/content/components/esp32_camera_web_server.md +++ b/src/content/docs/components/esp32_camera_web_server.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the ESP32 Camera Web Server in ESPHome" title: "ESP32 Camera Web Server Component" -params: - seo: - description: Instructions for setting up the ESP32 Camera Web Server in ESPHome - image: camera.svg --- +import APIRef from '@components/APIRef.astro'; + The `esp32_camera_web_server` component allows you to use expose web server of ESP32-based camera boards in ESPHome that directly can be integrated into external @@ -41,4 +39,4 @@ esp32_camera_web_server: ## See Also -- {{< apiref "esp32_camera_web_server/camera_web_server.h" "esp32_camera_web_server/camera_web_server.h" >}} +- diff --git a/content/components/esp32_hosted.md b/src/content/docs/components/esp32_hosted.mdx similarity index 86% rename from content/components/esp32_hosted.md rename to src/content/docs/components/esp32_hosted.mdx index d86bd2824f..0ca2a72edd 100644 --- a/content/components/esp32_hosted.md +++ b/src/content/docs/components/esp32_hosted.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up ESP32 hosted in ESPHome." title: "ESP32 Hosted" -params: - seo: - description: Instructions for setting up ESP32 hosted in ESPHome. - image: network-wifi.svg --- ESP32 Hosted ([ESP-Hosted-MCU](https://github.com/espressif/esp-hosted-mcu)) is a @@ -30,7 +26,7 @@ wifi: password: !secret wifi_password ``` -{{< anchor "esp32_hosted-configuration_variables" >}} + ## Configuration variables @@ -50,13 +46,13 @@ wifi: ## Updating co-processor firmware -You can update the firmware on your ESP32 co-processor using the {{< docref "update/esp32_hosted/" >}} +You can update the firmware on your ESP32 co-processor using the [Esp32 Hosted](/components/update/esp32_hosted/) platform. This allows you to deploy firmware updates to the co-processor without manually reflashing it. ## See Also -- {{< docref "wifi/" >}} -- {{< docref "network/" >}} -- {{< docref "ethernet/" >}} -- {{< docref "update/esp32_hosted/" >}} +- [WiFi Component](/components/wifi/) +- [Network component](/components/network/) +- [Ethernet Component](/components/ethernet/) +- [ESP32 Hosted Co-processor Update](/components/update/esp32_hosted/) - [ESP-Hosted-MCU](https://github.com/espressif/esp-hosted-mcu) by [Espressif Systems](https://www.espressif.com/) diff --git a/content/components/esp32_improv.md b/src/content/docs/components/esp32_improv.mdx similarity index 84% rename from content/components/esp32_improv.md rename to src/content/docs/components/esp32_improv.mdx index 9d0c7085c0..2f12192037 100644 --- a/content/components/esp32_improv.md +++ b/src/content/docs/components/esp32_improv.mdx @@ -1,22 +1,20 @@ --- description: "Instructions for setting up Improv via BLE in ESPHome." title: "Improv via BLE" -params: - seo: - description: Instructions for setting up Improv via BLE in ESPHome. - image: improv-social.png --- +import APIRef from '@components/APIRef.astro'; + The `esp32_improv` component in ESPHome implements the open [Improv standard](https://www.improv-wifi.com/) for configuring Wi-Fi on an ESP32 device by using Bluetooth Low Energy (BLE) to receive the credentials. -The `esp32_improv` component will automatically set up the {{< docref "esp32_ble" "BLE Server" >}}. +The `esp32_improv` component will automatically set up the [BLE Server](/components/esp32_ble/). > [!WARNING] > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -30,13 +28,13 @@ esp32_improv: ## Configuration variables -- **authorizer** (**Required**, [ID](/guides/configuration-types#id)): A {{< docref "binary_sensor/index" "binary sensor" >}} to authorize with. +- **authorizer** (**Required**, [ID](/guides/configuration-types#id)): A [binary sensor](/components/binary_sensor/) to authorize with. Also accepts `none` to skip authorization. - **authorized_duration** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time until authorization times out and needs to be re-authorized. Defaults to `1min`. -- **status_indicator** (*Optional*, [ID](/guides/configuration-types#id)): An {{< docref "output/index" "output" >}} to display feedback to the user. +- **status_indicator** (*Optional*, [ID](/guides/configuration-types#id)): An [output](/components/output/) to display feedback to the user. - **identify_duration** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time to identify for. Defaults to `10s`. - **wifi_timeout** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time to wait before starting the Improv service after Wi-Fi is no longer connected. Defaults to `90s`. @@ -58,14 +56,14 @@ esp32_improv: - **on_state** (*Optional*, [Automation](/automations)): An action to be performed when an Improv state change happens. See [`on_state`](#improv-on_state). -{{< anchor "improv-automations" >}} + ## Improv Automations The ESP32 Improv component provides various [automations](/automations) that can be used to provide feedback during the Improv provisioning process. -{{< anchor "improv-on_start" >}} + ### `on_start` @@ -79,7 +77,7 @@ esp32_improv: - logger.log: "Improv awaiting authorization/authorized" ``` -{{< anchor "improv-on_provisioned" >}} + ### `on_provisioned` @@ -92,7 +90,7 @@ esp32_improv: - logger.log: "Improv provisioned" ``` -{{< anchor "improv-on_provisioning" >}} + ### `on_provisioning` @@ -105,7 +103,7 @@ esp32_improv: - logger.log: "Improv provisioning" ``` -{{< anchor "improv-on_stop" >}} + ### `on_stop` @@ -118,7 +116,7 @@ esp32_improv: - logger.log: "Improv stopped" ``` -{{< anchor "improv-on_state" >}} + ### `on_state` @@ -166,8 +164,8 @@ The `status_indicator` has the following patterns: ## See Also -- {{< docref "wifi/" >}} -- {{< docref "improv_serial/" >}} -- {{< docref "captive_portal/" >}} +- [WiFi Component](/components/wifi/) +- [Improv via Serial](/components/improv_serial/) +- [Captive Portal](/components/captive_portal/) - [Improv Wi-Fi](https://www.improv-wifi.com/) -- {{< apiref "esp32_improv/esp32_improv_component.h" "esp32_improv/esp32_improv_component.h" >}} +- diff --git a/content/components/esp8266.md b/src/content/docs/components/esp8266.mdx similarity index 94% rename from content/components/esp8266.md rename to src/content/docs/components/esp8266.mdx index 616cf5863f..fb2dfdd5c2 100644 --- a/content/components/esp8266.md +++ b/src/content/docs/components/esp8266.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the ESP8266 platform for ESPHome." title: "ESP8266 Platform" -params: - seo: - description: Configuration for the ESP8266 platform for ESPHome. - image: esp8266.svg --- This component contains platform-specific options for the ESP8266 platform. @@ -30,8 +26,8 @@ esp8266: - **version** (*Optional*, string): The base framework version number to use, from [esp8266 arduino releases](https://github.com/esp8266/Arduino/releases). Defaults to `recommended`. Additional values - - `dev` : Use the latest commit from , note this may break at any time - - `latest` : Use the latest *release* from , even if it hasn't been recommended yet. + - `dev` : Use the latest commit from [https://github.com/esp8266/Arduino](https://github.com/esp8266/Arduino), note this may break at any time + - `latest` : Use the latest *release* from [https://github.com/esp8266/Arduino/releases](https://github.com/esp8266/Arduino/releases), even if it hasn't been recommended yet. - `recommended` : Use the recommended framework version. - **source** (*Optional*, string): The PlatformIO package or repository to use for the framework. This can be used to use a custom or patched version of the framework. @@ -56,7 +52,7 @@ Some notes on the pins: - `GPIO6` - `GPIO11`, `GPIO0`, `GPIO2` and `GPIO15` are often already used by the internal flash interface and boot mode detection. So it's best to avoid using these pins. -- `GPIO17` additionally has an ADC connected to it. See the {{< docref "/components/sensor/adc" >}} +- `GPIO17` additionally has an ADC connected to it. See the [Adc](/components/sensor/adc/) to read voltages (in the range from 0 to 1.0V) on this pin. ```yaml @@ -163,4 +159,4 @@ The internal pull up/down resistors have values of 30kΩ to 100kΩ ## See Also -- {{< docref "esphome/" >}} +- [ESPHome Core Configuration](/components/esphome/) diff --git a/content/components/esp_ldo.md b/src/content/docs/components/esp_ldo.mdx similarity index 89% rename from content/components/esp_ldo.md rename to src/content/docs/components/esp_ldo.mdx index 25e3fc547e..ffa234621b 100644 --- a/content/components/esp_ldo.md +++ b/src/content/docs/components/esp_ldo.mdx @@ -1,10 +1,9 @@ --- description: "Configuration for the ESP32-P4 LDO peripherals for ESPHome." title: "ESP32-P4 LDO" -params: - seo: - description: Configuration for the ESP32-P4 LDO peripherals for ESPHome. --- +import APIRef from '@components/APIRef.astro'; + The ESP32-P4 has 4 Low-Dropout linear regulators that can be used to power on- and off-chip peripherals. This component allows those regulators to be configured and enabled. @@ -41,4 +40,4 @@ on_...: ## See Also -- {{< apiref "esp_ldo/esp_ldo.h" "esp_ldo/esp_ldo.h" >}} +- diff --git a/content/components/esphome.md b/src/content/docs/components/esphome.mdx similarity index 93% rename from content/components/esphome.md rename to src/content/docs/components/esphome.mdx index 152d15649b..52ac19a812 100644 --- a/content/components/esphome.md +++ b/src/content/docs/components/esphome.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up the core ESPHome configuration." title: "ESPHome Core Configuration" -params: - seo: - description: Instructions for setting up the core ESPHome configuration. - image: cloud-circle.svg --- Here you specify some core information that ESPHome needs to create @@ -19,7 +15,7 @@ esphome: area: Living Room ``` -{{< anchor "esphome-configuration_variables" >}} + ## Configuration variables @@ -100,7 +96,7 @@ Automations: - **on_loop** (*Optional*, [Automation](/automations)): An automation to perform on each `loop()` iteration. See [`on_loop`](#esphome-on_loop). -{{< anchor "esphome-on_boot" >}} + ## `on_boot` @@ -132,12 +128,12 @@ esphome: - See [Automation](/automations). -{{< anchor "esphome-on_shutdown" >}} + ## `on_shutdown` This automation will be triggered when the ESP is about to shut down. Shutting down is usually caused by -too many WiFi/MQTT connection attempts, Over-The-Air updates being applied or through the {{< docref "deep_sleep/" >}}. +too many WiFi/MQTT connection attempts, Over-The-Air updates being applied or through the [Deep Sleep](/components/deep_sleep/). > [!NOTE] > It's not guaranteed that all components are in a connected state when this automation is triggered. For @@ -162,7 +158,7 @@ esphome: - See [Automation](/automations). -{{< anchor "esphome-on_loop" >}} + ## `on_loop` @@ -176,7 +172,7 @@ esphome: # do something ``` -{{< anchor "esphome-platformio_options" >}} + ## `platformio_options` @@ -184,7 +180,7 @@ PlatformIO supports a number of options in its `platformio.ini` file. With the ` parameter you can tell ESPHome what options to pass into the `env` section of the PlatformIO file (note you can also do this by editing the `platformio.ini` file manually). -You can view a full list of PlatformIO options here: +You can view a full list of PlatformIO options here: [https://docs.platformio.org/en/latest/projectconf/section_env.html](https://docs.platformio.org/en/latest/projectconf/section_env.html) ```yaml # Example configuration entry @@ -195,7 +191,7 @@ esphome: board_build.f_flash: 80000000L ``` -{{< anchor "esphome-environment_variables" >}} + ## `environment_variables` @@ -216,7 +212,7 @@ esphome: > Environment variables set here are only available during the build process. They do not affect > the runtime behavior of your device. -{{< anchor "esphome-includes" >}} + ## `includes` @@ -251,7 +247,7 @@ This option behaves differently depending on what the included file is pointing AND compiled into the binary. This way implementation of classes and functions in header files can be provided. -{{< anchor "esphome-libraries" >}} + ## `libraries` @@ -284,7 +280,7 @@ By default, ESPHome does not include any libraries into the project. This means Arduino, such as `Wire` or `EEPROM`, aren't available. If you need to use them, you should list them manually under this option. If they are used by another library, they should be listed before the library that uses them. -{{< anchor "preferences-flash_write_interval" >}} + ## Preferences Component @@ -316,14 +312,14 @@ results in fewer flash writes, preserving the flash health. This behavior can be modified by setting `flash_write_interval` to `0s` to commit the changes to flash as soon as possible, however, be aware that this may lead to increased flash wearing and a shortened device lifespan! -For {{< docref "/components/esp8266" "ESP8266" >}}, `restore_from_flash` must also be set to `true` for states to be written to flash. +For [ESP8266](/components/esp8266/), `restore_from_flash` must also be set to `true` for states to be written to flash. -{{< anchor "esphome-changing_node_name" >}} + ## Changing ESPHome Node Name Trying to change the name of a node or its address in the network? -You can do so with the `use_address` option of the {{< docref "wifi" "WiFi configuration" >}}. +You can do so with the `use_address` option of the [WiFi configuration](/components/wifi/). Change the device name or address in your YAML to the new value and additionally set `use_address` to point to the old address like so: @@ -357,11 +353,11 @@ wifi: The same procedure can be done for changing the static IP of a device. -{{< anchor "esphome-mac_suffix" >}} + ## Adding the MAC address as a suffix to the device name -Using `name_add_mac_suffix` allows {{< docref "/guides/creators" "creators" >}} to +Using `name_add_mac_suffix` allows [creators](/guides/creators/) to provision multiple devices at the factory with a single firmware and still have unique identification for customer installs. @@ -371,7 +367,7 @@ have unique identification for customer installs. > for end users. This allows them to easily update their devices as new features are made available > upstream. -{{< anchor "esphome-creators_project" >}} + ## Project information @@ -388,7 +384,7 @@ esphome: version: "1.0.0" ``` -{{< anchor "esphome-min_version" >}} + ## Minimum ESPHome version @@ -402,7 +398,7 @@ esphome: min_version: 2025.11.0 ``` -{{< anchor "esphome-area" >}} + ## Area Configuration @@ -434,7 +430,7 @@ Configuration variables (structured format): - **id** (**Required**, string): Unique identifier for the area. - **name** (**Required**, string): Display name for the area. -{{< anchor "esphome-devices" >}} + ## Sub-Devices @@ -523,5 +519,3 @@ sensor: name: "Humidity" device_id: living_room_device ``` - -## See Also diff --git a/content/components/espnow.md b/src/content/docs/components/espnow.mdx similarity index 90% rename from content/components/espnow.md rename to src/content/docs/components/espnow.mdx index ef7f516c2c..614606721a 100644 --- a/content/components/espnow.md +++ b/src/content/docs/components/espnow.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up the basic ESPNow component in ESPHome." title: "ESPNow communication Component" -params: - seo: - description: Instructions for setting up the basic ESPNow component in ESPHome. - image: esp-now.svg --- +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + The ESPNow component allows ESPHome to communicate with esp32 devices in a simple and unrestricted way. It enables the option to interact with other esp32 devices over the Espressif's ESP-NOW protocol, see [documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_now.html). @@ -25,7 +24,7 @@ espnow: ## Configuration variables - **channel** (*Optional*, int): The Wi-Fi channel that the esp-now communication will use to send/receive data packets. - Cannot be set when the {{< docref "wifi/" >}} is used, as it will use the same channel as the wifi network. + Cannot be set when the [Wifi](/components/wifi/) is used, as it will use the same channel as the wifi network. - **auto_add_peer** (*Optional*, boolean): This will allow the esp-now component to automatically add any new incoming device as a peer. See [Peers](#espnow-peers) below. Defaults to `false`. @@ -46,7 +45,7 @@ Automations: There will be 3 variables available to automations. Their memory will be cleaned up after the automation is done and will not be available if there are any `delay` actions or others that do work "asynchronously" in the automation. -- **info**: {{< apistruct "espnow::ESPNowRecvInfo" "espnow::ESPNowRecvInfo" >}} with information about the received packet. +- **info**: with information about the received packet. - **data**: A `const uint8_t *` - pointer to the data. - **size**: The size of the data in bytes. @@ -64,7 +63,7 @@ espnow: info.rx_ctrl->rssi); ``` -{{< anchor "espnow-on_receive" >}} + ### `on_receive` @@ -74,13 +73,13 @@ This automation will be triggered when data is received from a registered peer. - **address** (*Optional*, MAC Address): Filter this trigger to packets where the source address matches. If not set, it will match any device. -{{< anchor "espnow-on_unknown_peer" >}} + ### `on_unknown_peer` This automation will be triggered when data is received from a peer that is not in the list of known peers. This trigger gives you one possibility to decide if the unknown peer can be added or not. -{{< anchor "espnow-on_broadcast" >}} + ### `on_broadcast` @@ -90,7 +89,7 @@ This automation will be triggered when a broadcast packet is received. - **address** (*Optional*, MAC Address): Filter this trigger to packets where the source address matches. If not set, it will match any device. -{{< anchor "espnow-send-action" >}} + ### `espnow.send` Action @@ -128,7 +127,7 @@ Automations: - **on_sent** (*Optional*, [Automation](/automations)): An automation to perform when the data is sent successfully. - **on_error** (*Optional*, [Automation](/automations)): An automation to perform when the data could not be sent. -{{< anchor "espnow-broadcast-action" >}} + ### `espnow.broadcast` Action @@ -148,7 +147,7 @@ on_...: - **data** (**Required**, [templatable](/automations/templates), string or list of bytes): The data to be sent. -{{< anchor "espnow-peer_add-action" >}} + ### `espnow.peer.add` Action @@ -166,7 +165,7 @@ on_...: - **address** (**Required**, MAC Address): The Peer address that needs to be added to the list of allowed peers. -{{< anchor "espnow-peer_delete-action" >}} + ### `espnow.peer.delete` Action @@ -184,7 +183,7 @@ on_...: - **address** (**Required**, MAC Address): The Peer address that needs to be removed from the list of allowed peers. -{{< anchor "espnow-set_channel-action" >}} + ### `espnow.set_channel` Action @@ -201,7 +200,7 @@ on_...: - **channel** (**Required**, int): This can be a value between `0` and `15`. The maximum channel number depends on the country or region where you are using the device (for example, channels 1-11 are allowed in the US and most of Europe, 1-13 in many other countries, and 1-14 in Japan). For details, see the [Wi-Fi channel regulations by country](https://en.wikipedia.org/wiki/List_of_WLAN_channels) or consult the [Espressif ESP-NOW documentation](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_now.html). `0` means that espnow will set the channel number itself (most of the time it would be `1` ). -{{< anchor "espnow-peers" >}} + ## Peers @@ -216,5 +215,5 @@ automatically add any peer that data is sent to. ## See Also -- {{< apiref "espnow/espnow.h" "espnow/espnow.h" >}} -- {{< docref "/components/packet_transport/espnow" >}} +- [ESP-NOW Packet Transport Platform](/components/packet_transport/espnow/) +- diff --git a/content/components/ethernet.md b/src/content/docs/components/ethernet.mdx similarity index 96% rename from content/components/ethernet.md rename to src/content/docs/components/ethernet.mdx index 10d5074c3e..fceb39a9cc 100644 --- a/content/components/ethernet.md +++ b/src/content/docs/components/ethernet.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the Ethernet configuration for your ESP32 node in ESPHome." title: "Ethernet Component" -params: - seo: - description: Instructions for setting up the Ethernet configuration for your ESP32 node in ESPHome. - image: ethernet.svg --- +import APIRef from '@components/APIRef.astro'; + This ESPHome component enables *wired* Ethernet connections for ESP32s. @@ -155,7 +153,7 @@ If you are using a framework that does not support SPI-based ethernet modules wi > information and wiring details refer to the link in the *See also* section. > [!NOTE] -> SPI based chips do *not* use {{< docref "spi/" >}}. This means that SPI pins can't be shared with other devices. +> SPI based chips do *not* use [Spi](/components/spi/). This means that SPI pins can't be shared with other devices. ## Configuration examples @@ -421,7 +419,7 @@ ethernet: ## See Also -- {{< docref "network/" >}} -- {{< docref "text_sensor/ethernet_info" >}} -- {{< apiref "ethernet/ethernet_component.h" "ethernet/ethernet_component.h" >}} +- [Network component](/components/network/) +- [Ethernet Info Text Sensor](/components/text_sensor/ethernet_info/) - [ESP32 Ethernet PHY connection info](https://pcbartists.com/design/embedded/esp32-ethernet-phy-schematic-design/) +- diff --git a/content/components/event/_index.md b/src/content/docs/components/event/index.mdx similarity index 90% rename from content/components/event/_index.md rename to src/content/docs/components/event/index.mdx index c532898c76..e8fcc61575 100644 --- a/content/components/event/_index.md +++ b/src/content/docs/components/event/index.mdx @@ -1,11 +1,11 @@ --- description: "Instructions for setting up event components in ESPHome." title: "Event Component" -params: - seo: - description: Instructions for setting up event components in ESPHome. - image: folder-open.svg +sidebar: + label: "Event Component" --- +import APIRef from '@components/APIRef.astro'; + ESPHome supports the creation of event entities in Home Assistant. These entities allow for the triggering of custom events within the Home Assistant ecosystem, @@ -21,7 +21,7 @@ triggered in Home Assistant via automations. > [!NOTE] > Home Assistant Core 2024.5 or higher is required for ESPHome event entities to work. -{{< anchor "config-event" >}} + ## Base Event Configuration @@ -62,7 +62,7 @@ One of `id` or `name` is required. (usually Home Assistant) without the user manually enabling it (via the Home Assistant UI). - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - **device_class** (*Optional*, string): The device class for the event. The following device classes are supported by event entities: @@ -72,7 +72,7 @@ One of `id` or `name` is required. - `doorbell` : Specifically for buttons that are used as a doorbell. - `motion` : For motion events detected by a motion sensor. - See + See [https://www.home-assistant.io/integrations/event/#device-class](https://www.home-assistant.io/integrations/event/#device-class) for a list of available options. - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). @@ -87,7 +87,7 @@ MQTT options: ## Event Automation -{{< anchor "event-on_event" >}} + ### `on_event` @@ -121,7 +121,7 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the event. - **event_type** (**Required**, string): The type of event to trigger. -{{< anchor "event-lambda_calls" >}} + ### lambda Calls @@ -149,4 +149,4 @@ From [lambdas](/automations/templates#config-lambda), you can interact with an e ## See Also -- {{< apiref "event/event.h" "event/event.h" >}} +- diff --git a/content/components/event/template.md b/src/content/docs/components/event/template.mdx similarity index 80% rename from content/components/event/template.md rename to src/content/docs/components/event/template.mdx index b946b0e6f8..3fe72ffbd2 100644 --- a/content/components/event/template.md +++ b/src/content/docs/components/event/template.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up template events that can trigger arbitrary automations when an event occurs." title: "Template Event" -params: - seo: - description: Instructions for setting up template events that can trigger arbitrary automations when an event occurs. - image: description.svg --- The `template` event platform enables you to define events that trigger specific automations or actions within Home Assistant. These custom events can be utilized to orchestrate complex behaviors across your smart home ecosystem based on conditions or sequences defined in your ESPHome configuration. @@ -26,5 +22,5 @@ event: ## See Also -- {{< docref "/automations" >}} -- {{< docref "/components/event" >}} +- [Automation](/automations/) +- [Event Component](/components/event/) diff --git a/content/components/event/uart.md b/src/content/docs/components/event/uart.mdx similarity index 84% rename from content/components/event/uart.md rename to src/content/docs/components/event/uart.mdx index 5302c505c7..0061949233 100644 --- a/content/components/event/uart.md +++ b/src/content/docs/components/event/uart.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up UART event in ESPHome that can be triggered based on incoming UART data." title: "UART Event" -params: - seo: - description: Instructions for setting up UART event in ESPHome that can be triggered based on incoming UART data. - image: uart.svg --- +import APIRef from '@components/APIRef.astro'; + The `uart` event platform monitors incoming data on the [UART bus](/components/uart) and triggers events when predefined byte sequences are detected. Patterns are matched @@ -35,5 +33,5 @@ event: ## See Also -- {{< docref "/components/uart" >}} -- {{< apiref "uart/event/uart_event.h" "uart/event/uart_event.h" >}} +- [UART Bus](/components/uart/) +- diff --git a/content/components/exposure_notifications.md b/src/content/docs/components/exposure_notifications.mdx similarity index 79% rename from content/components/exposure_notifications.md rename to src/content/docs/components/exposure_notifications.mdx index cb924cf8e1..a4dc531b1d 100644 --- a/content/components/exposure_notifications.md +++ b/src/content/docs/components/exposure_notifications.mdx @@ -1,13 +1,12 @@ --- description: "Instructions for setting up exposure notification listeners for ESPHome." title: "Exposure Notification Listener" -params: - seo: - description: Instructions for setting up exposure notification listeners for ESPHome. - image: exposure_notifications.png --- -The `exposure_notifications` component uses the {{< docref "/components/esp32_ble_tracker" >}} to discover +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + +The `exposure_notifications` component uses the [Esp32 Ble Tracker](/components/esp32_ble_tracker/) to discover nearby COVID-19 exposure notification bluetooth messages sent by phones running the [Google/Apple Exposure Notification service](https://www.google.com/covid19/exposurenotifications/). @@ -29,7 +28,7 @@ exposure_notifications: - **on_exposure_notification** (*Optional*, [Automation](/automations)): An automation to run when an exposure notification bluetooth message is received. - A variable `x` of type {{< apistruct "exposure_notifications::ExposureNotification" "exposure_notifications::ExposureNotification" >}} is passed to the automation. + A variable `x` of type is passed to the automation. An exposure notification payload contains: @@ -76,5 +75,5 @@ exposure_notifications: ## See Also -- {{< docref "esp32_ble_tracker/" >}} -- {{< apiref "exposure_notifications/exposure_notifications.h" "exposure_notifications/exposure_notifications.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- diff --git a/content/components/external_components.md b/src/content/docs/components/external_components.mdx similarity index 96% rename from content/components/external_components.md rename to src/content/docs/components/external_components.mdx index 23b2d24adf..d9152d4fe2 100644 --- a/content/components/external_components.md +++ b/src/content/docs/components/external_components.mdx @@ -1,9 +1,6 @@ --- description: "Instructions for setting up ESPHome External Components." title: "External Components" -params: - seo: - description: Instructions for setting up ESPHome External Components. --- You can easily import community or personal components using the external components feature. @@ -67,7 +64,7 @@ external_components: - **refresh** (*Optional*, [Time](/guides/configuration-types#time)): The interval the source will be checked. Has no effect on `local`. See [Refresh](#external-components_refresh). for more info. Defaults to `1day`. -{{< anchor "external-components_local" >}} + ## Local @@ -109,7 +106,7 @@ Given the above example of `my_components`, the folder structure must look like: └── switch.py ``` -{{< anchor "external-components_git" >}} + ## Git @@ -200,7 +197,7 @@ server using the `username` and `password` fields. This is most useful when comb security measure; your username and password will necessarily be stored in clear text within the `.esphome` directory. -{{< anchor "external-components_refresh" >}} + ### Refresh @@ -214,5 +211,3 @@ excessive repository checks. Likewise, you can set this setting to `never` and ESPHome will never **update** the repository, useful e.g. when `ref` points to a **tag**. - -## See Also diff --git a/content/components/ezo_pmp.md b/src/content/docs/components/ezo_pmp.mdx similarity index 91% rename from content/components/ezo_pmp.md rename to src/content/docs/components/ezo_pmp.mdx index 1a985c64b3..d13755f021 100644 --- a/content/components/ezo_pmp.md +++ b/src/content/docs/components/ezo_pmp.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up an Atlas Scientific Peristaltic Pump in ESPHome" title: "Atlas Scientific Peristaltic Pump" -params: - seo: - description: Instructions for setting up an Atlas Scientific Peristaltic Pump in ESPHome - image: ezo-pmp.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `ezo_pmp` component allows you to use an Atlas Scientific Peristaltic Pump with ESPHome. Both the EZO-PMP ([datasheet](https://files.atlas-scientific.com/EZO_PMP_Datasheet.pdf)) and EZO-PMP-L ([datasheet](https://files.atlas-scientific.com/EZO_PMP_L_Datasheet.pdf)) are supported. @@ -17,7 +16,7 @@ The [I²C Bus](/components/i2c) is required to be set up in your configuration f > Home Assistant doesn't have support for pumps. In order to control the pump from the frontend you will need to use > templates to offer access to the actions you need. Please see [Home Assistant Configuration](#ezo-pmp-ha-config). -{{< img src="ezo-pmp.jpg" alt="Image" width="80.0%" class="align-center" >}} + ## Component/Hub @@ -41,7 +40,7 @@ Since the EZO-PMP offers a large number of sensors and each sensor needs to be p optimized not to update a sensor that is not defined in the config. If you need very quick updates from the pump (under 3 seconds) only enable the sensors that you actually need. -{{< anchor "ezo_pmp-current_volume_dosed_sensor" >}} + ### `current_volume_dosed` @@ -60,7 +59,7 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Set the ID of this sensor for use in lambdas. - All other options from [Sensor](/components/sensor). -{{< anchor "ezo_pmp-total_volume_dosed_sensor" >}} + ### `total_volume_dosed` @@ -80,7 +79,7 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Set the ID of this sensor for use in lambdas. - All other options from [Sensor](/components/sensor). -{{< anchor "ezo_pmp-absolute_total_volume_dosed_sensor" >}} + ### `absolute_total_volume_dosed` @@ -99,7 +98,7 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Set the ID of this sensor for use in lambdas. - All other options from [Sensor](/components/sensor). -{{< anchor "ezo_pmp-last_volume_requested_sensor" >}} + ### `last_volume_requested` @@ -119,7 +118,7 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Set the ID of this sensor for use in lambdas. - All other options from [Sensor](/components/sensor). -{{< anchor "ezo_pmp-max_flow_rate_sensor" >}} + ### `max_flow_rate` @@ -140,7 +139,7 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Set the ID of this sensor for use in lambdas. - All other options from [Sensor](/components/sensor). -{{< anchor "ezo_pmp-pump_voltage_sensor" >}} + ### `pump_voltage` @@ -160,7 +159,7 @@ sensor: ## Binary Sensor -{{< anchor "ezo_pmp-pump_state_binary_sensor" >}} + ### `pump_state` @@ -178,7 +177,7 @@ binary_sensor: - All options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "ezo_pmp-is_paused_binary_sensor" >}} + ### `is_paused` @@ -198,7 +197,7 @@ binary_sensor: ## Text Sensor -{{< anchor "ezo_pmp-dosing_mode_text_sensor" >}} + ### `dosing_mode` @@ -216,7 +215,7 @@ text_sensor: - All options from [Text Sensor](/components/text_sensor#config-text_sensor). -{{< anchor "ezo_pmp-calibration_status_text_sensor" >}} + ### `calibration_status` @@ -236,7 +235,7 @@ text_sensor: ## Actions -{{< anchor "ezo_pmp-dose_continuously_action" >}} + ### `ezo_pmp.dose_continuously` Action @@ -255,7 +254,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. -{{< anchor "ezo_pmp-dose_volume_action" >}} + ### `ezo_pmp.dose_volume` Action @@ -281,7 +280,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. - **volume** (**Required**, float, [templatable](/automations/templates)): The volume to dose in milliliters. If negative, pump will run in reverse. -{{< anchor "ezo_pmp-dose_volume_over_time_action" >}} + ### `ezo_pmp.dose_volume_over_time` Action @@ -312,7 +311,7 @@ on_...: - **volume** (**Required**, float, [templatable](/automations/templates)): The volume to dose in milliliters. If negative, pump will run in reverse. - **duration** (**Required**, int, [templatable](/automations/templates)): The time (in minutes) the pump will take to dose the volume requested. -{{< anchor "ezo_pmp-dose_with_constant_flow_rate_action" >}} + ### `ezo_pmp.dose_with_constant_flow_rate` Action @@ -343,7 +342,7 @@ on_...: - **volume_per_minute** (**Required**, float, [templatable](/automations/templates)): The volume to dose in milliliters every minute. If negative, pump will run in reverse. - **duration** (**Required**, int, [templatable](/automations/templates)): The time (in minutes) the pump will dose the volume requested every minute. -{{< anchor "ezo_pmp-pause_dosing_action" >}} + ### `ezo_pmp.pause_dosing` Action @@ -361,7 +360,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. -{{< anchor "ezo_pmp-stop_dosing_action" >}} + ### `ezo_pmp.stop_dosing` Action @@ -378,7 +377,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. -{{< anchor "ezo_pmp-clear_total_volume_dosed_action" >}} + ### `ezo_pmp.clear_total_volume_dosed` Action @@ -396,7 +395,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. -{{< anchor "ezo_pmp-set_calibration_volume_action" >}} + ### `ezo_pmp.set_calibration_volume` Action @@ -423,7 +422,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. - **volume** (**Required**, float, [templatable](/automations/templates)): The volume measured as part of the calibration process. -{{< anchor "ezo_pmp-clear_calibration_action" >}} + ### `ezo_pmp.clear_calibration` Action @@ -441,7 +440,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. -{{< anchor "ezo_pmp-find_action" >}} + ### `ezo_pmp.find` Action @@ -458,7 +457,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. -{{< anchor "ezo_pmp-change_i2c_address_action" >}} + ### `ezo_pmp.change_i2c_address` Action @@ -478,7 +477,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pump. - **address** (**Required**, int, [templatable](/automations/templates)): The new I2C address for the pump. -{{< anchor "ezo-pmp-ha-config" >}} + ## Home Assistant Configuration @@ -520,7 +519,7 @@ button: return id(duration).state; ``` -{{< anchor "ezo_pmp-lambda_calls" >}} + ## lambda calls @@ -530,4 +529,4 @@ of the actions in YAML config. ## See Also -- {{< apiref "ezo_pmp/ezo_pmp.h" "ezo_pmp/ezo_pmp.h" >}} +- diff --git a/content/components/factory_reset.md b/src/content/docs/components/factory_reset.mdx similarity index 80% rename from content/components/factory_reset.md rename to src/content/docs/components/factory_reset.mdx index 03634384fc..305fec1bb2 100644 --- a/content/components/factory_reset.md +++ b/src/content/docs/components/factory_reset.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up conditions that can remotely invalidate all ESPHome preferences stored in flash and reboot ESP." title: "Factory Reset" -params: - seo: - description: Instructions for setting up conditions that can remotely invalidate all ESPHome preferences stored in flash and reboot ESP. --- +import APIRef from '@components/APIRef.astro'; + The `factory_reset` component allows you to invalidate (reset) all ESPHome [preferences](/components/esphome#preferences-flash_write_interval) stored in flash memory and reboot your node. After reboot all states, parameters and variables will be reinitialized with their default values. This is useful: @@ -17,7 +16,7 @@ After reboot all states, parameters and variables will be reinitialized with the > **USE WITH GREAT CAUTION!** All credentials, global variables, counters and saved states stored in non-volatile memory will be lost with no chance of recovering them. > Even raw reading of flash memory with `esptool` will not help, since data is physically erased from flash memory. > -> For devices configured using {{< docref "/components/captive_portal" "captive portal" >}}, this will reset WiFi settings as well, thus making such devices offline. +> For devices configured using [captive portal](/components/captive_portal/), this will reset WiFi settings as well, thus making such devices offline. > You'll need to be in close proximity to your device to configure it again using a built-in WiFi access point and captive portal. ## Reset by Fast Power Cycling @@ -34,7 +33,7 @@ connected with a serial cable. The required number of power cycles and the maxim or if the device remains powered on and running for longer than the maximum delay. - Not available on RP2040 and RP2350 as the reset cause is not able to be determined. -- On ESP8266 this feature requires the `restore_from_flash` feature to be enabled in the {{< docref "/components/esp8266" "ESP8266 platform" >}}. +- On ESP8266 this feature requires the `restore_from_flash` feature to be enabled in the [ESP8266 platform](/components/esp8266/). ```yaml factory_reset: @@ -68,11 +67,11 @@ factory_reset: args: [x, target] ``` -### See Also +## See Also -- {{< docref "/components/switch/factory_reset" >}} -- {{< docref "/components/button/factory_reset" >}} -- {{< docref "/components/button/shutdown" >}} -- {{< docref "/components/button/restart" >}} -- {{< docref "/components/button/safe_mode" >}} -- {{< apiref "factory_reset/factory_reset.h" "factory_reset/factory_reset.h" >}} +- [Factory Reset Switch](/components/switch/factory_reset/) +- [Factory Reset Button](/components/button/factory_reset/) +- [Shutdown Button](/components/button/shutdown/) +- [Restart Button](/components/button/restart/) +- [Safe Mode Button](/components/button/safe_mode/) +- diff --git a/content/components/fan/binary.md b/src/content/docs/components/fan/binary.mdx similarity index 54% rename from content/components/fan/binary.md rename to src/content/docs/components/fan/binary.mdx index cf3636e0fd..89ac30c957 100644 --- a/content/components/fan/binary.md +++ b/src/content/docs/components/fan/binary.mdx @@ -1,15 +1,15 @@ --- description: "Instructions for setting up binary fans." title: "Binary Fan" -params: - seo: - description: Instructions for setting up binary fans. - image: fan.svg --- -The `binary` fan platform lets you represent any binary [Output Component](/components/output#output) as a fan. +import { Image } from 'astro:assets'; +import fanUiImg from './images/fan-ui.png'; +import APIRef from '@components/APIRef.astro'; -{{< img src="fan-ui.png" alt="Image" width="80.0%" class="align-center" >}} +The `binary` fan platform lets you represent any binary [Output Component](/components/output/) as a fan. + + ```yaml # Example configuration entry @@ -25,16 +25,16 @@ fan: binary output component to use for this fan. - **oscillation_output** (*Optional*, [ID](/guides/configuration-types#id)): The id of the - [output](/components/output#output) to use for the oscillation state of this fan. Default is empty. + [output](/components/output/) to use for the oscillation state of this fan. Default is empty. - **direction_output** (*Optional*, [ID](/guides/configuration-types#id)): The id of the - [output](/components/output#output) to use for the direction state of the fan. Default is empty. + [output](/components/output/) to use for the direction state of the fan. Default is empty. - All other options from [Fan Component](/components/fan#config-fan). ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/gpio" >}} -- {{< docref "/components/fan" >}} -- {{< apiref "fan/fan_state.h" "fan/fan_state.h" >}} +- [Output Component](/components/output/) +- [GPIO Output](/components/output/gpio/) +- [Fan Component](/components/fan/) +- diff --git a/content/components/fan/hbridge.md b/src/content/docs/components/fan/hbridge.mdx similarity index 64% rename from content/components/fan/hbridge.md rename to src/content/docs/components/fan/hbridge.mdx index eb9a56f507..30a52cfd0f 100644 --- a/content/components/fan/hbridge.md +++ b/src/content/docs/components/fan/hbridge.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up hbridge controlled fans (or motors)." title: "H-bridge Fan" -params: - seo: - description: Instructions for setting up hbridge controlled fans (or motors). - image: fan.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import l298nModuleImg from './images/L298N_module.jpg'; +import fanUiImg from './images/fan-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `hbridge` fan platform allows you to use a compatible *h-bridge* (L298N, DRV8871, MX1508, BTS7960, L9110S, DRV8833, TB6612, etc.) to control a fan (or motor/solenoid). -{{< img src="L298N_module.jpg" alt="Image" caption="L298N H-bridge module. Image by kuongshun." width="50.0%" class="align-center" >}} +
    -{{< img src="fan-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -28,13 +35,13 @@ fan: ## Configuration variables - **pin_a** (**Required**, [ID](/guides/configuration-types#id)): The id of the - [float output](/components/output#output) connected to Pin A (alternatively IN1, etc.) of the h-bridge. + [float output](/components/output/) connected to Pin A (alternatively IN1, etc.) of the h-bridge. - **pin_b** (**Required**, [ID](/guides/configuration-types#id)): The id of the - [float output](/components/output#output) connected to Pin B (alternatively IN2, etc.) of the h-bridge. + [float output](/components/output/) connected to Pin B (alternatively IN2, etc.) of the h-bridge. - **enable_pin** (*Optional*, [ID](/guides/configuration-types#id)): The id of the - [float output](/components/output#output) connected to the Enable pin of the h-bridge (if h-bridge uses enable). + [float output](/components/output/) connected to the Enable pin of the h-bridge (if h-bridge uses enable). - **decay_mode** (*Optional*, string): The decay mode you want to use with the h-bridge. Either `slow` (coasting) or `fast` (braking). Defaults to `slow`. @@ -46,7 +53,7 @@ fan: - **preset_modes** (*Optional*): A list of preset modes for this fan. Preset modes can be used in automations (i.e. `on_preset_set` ). - All other options from [Fan Component](/components/fan#config-fan). -{{< anchor "fan-hbridge_brake_action" >}} + ## `fan.hbridge.brake` Action @@ -60,9 +67,9 @@ on_...: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/fan" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< apiref "fan/fan_state.h" "fan/fan_state.h" >}} +- [Output Component](/components/output/) +- [Fan Component](/components/fan/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) - [Adafruit's excellent H-bridge tutorial](https://learn.adafruit.com/improve-brushed-dc-motor-performance) +- diff --git a/content/components/fan/images/L298N_module.jpg b/src/content/docs/components/fan/images/L298N_module.jpg similarity index 100% rename from content/components/fan/images/L298N_module.jpg rename to src/content/docs/components/fan/images/L298N_module.jpg diff --git a/content/components/fan/images/fan-ui.png b/src/content/docs/components/fan/images/fan-ui.png similarity index 100% rename from content/components/fan/images/fan-ui.png rename to src/content/docs/components/fan/images/fan-ui.png diff --git a/content/components/fan/images/tuyafan.jpg b/src/content/docs/components/fan/images/tuyafan.jpg similarity index 100% rename from content/components/fan/images/tuyafan.jpg rename to src/content/docs/components/fan/images/tuyafan.jpg diff --git a/content/components/fan/_index.md b/src/content/docs/components/fan/index.mdx similarity index 92% rename from content/components/fan/_index.md rename to src/content/docs/components/fan/index.mdx index c0763e3545..6478d762ac 100644 --- a/content/components/fan/_index.md +++ b/src/content/docs/components/fan/index.mdx @@ -1,20 +1,23 @@ --- description: "Instructions for setting up the base fan component." title: "Fan Component" -params: - seo: - description: Instructions for setting up the base fan component. - image: folder-open.svg +sidebar: + label: "Fan Component" --- +import APIClass from '@components/APIClass.astro'; +import { Image } from 'astro:assets'; +import fanUiImg from './images/fan-ui.png'; +import APIRef from '@components/APIRef.astro'; + With the `fan` domain you can create components that appear as fans in the Home Assistant frontend. A fan can be switched on or off, optionally has a speed between 1 and the maximum supported speed of the fan, and can have an oscillation and direction output. -{{< img src="fan-ui.png" alt="Image" class="align-center" >}} + -{{< anchor "config-fan" >}} + ## Base Fan Configuration @@ -53,7 +56,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -110,7 +113,7 @@ Automation triggers: - **on_preset_set** (*Optional*, [Action](/automations/actions#all-actions)): An automation to perform when the fan preset mode is changed. See [`fan.on_preset_set` Trigger](#fan-on_preset_set_trigger). -{{< anchor "fan-toggle_action" >}} + ## `fan.toggle` Action @@ -122,7 +125,7 @@ on_...: - fan.toggle: fan_1 ``` -{{< anchor "fan-turn_off_action" >}} + ## `fan.turn_off` Action @@ -134,7 +137,7 @@ on_...: - fan.turn_off: fan_1 ``` -{{< anchor "fan-turn_on_action" >}} + ## `fan.turn_on` Action @@ -161,7 +164,7 @@ Configuration options: - **direction** (*Optional*, string, [templatable](/automations/templates)): Set the direction of the fan. Can be either `forward` or `reverse`. Defaults to not changing the direction. -{{< anchor "fan-cycle_speed_action" >}} + ## `fan.cycle_speed` Action @@ -182,8 +185,8 @@ Configuration options: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the fan. - **off_speed_cycle** (*Optional*, boolean, [templatable](/automations/templates)): Determines if the fan will cycle off after cycling though its highest speed. Can be `true` or `false`. If `false` fan will cycle to its lowest speed instead of turning off. Defaults to `true`. -{{< anchor "fan-is_on_condition" >}} -{{< anchor "fan-is_off_condition" >}} + + ## `fan.is_on` / `fan.is_off` Condition @@ -200,7 +203,7 @@ on_...: - script.execute: my_script ``` -{{< anchor "fan-on_state_trigger" >}} + ## `fan.on_state` Trigger @@ -217,7 +220,7 @@ fan: args: [ x->speed ] ``` -{{< anchor "fan-on_turn_on_off_trigger" >}} + ## `fan.on_turn_on` / `fan.on_turn_off` Trigger @@ -234,7 +237,7 @@ fan: - logger.log: "Fan Turned Off!" ``` -{{< anchor "fan-on_direction_set_trigger" >}} + ## `fan.on_direction_set` Trigger @@ -251,7 +254,7 @@ fan: args: [ 'x == FanDirection::FORWARD ? "FORWARD" : "REVERSE"' ] ``` -{{< anchor "fan-on_oscillating_set_trigger" >}} + ## `fan.on_oscillating_set` Trigger @@ -268,7 +271,7 @@ fan: args: [ ONOFF(x) ] ``` -{{< anchor "fan-on_speed_set_trigger" >}} + ## `fan.on_speed_set` Trigger @@ -285,7 +288,7 @@ fan: args: [ x ] ``` -{{< anchor "fan-on_preset_set_trigger" >}} + ## `fan.on_preset_set` Trigger @@ -405,4 +408,5 @@ advanced stuff (see the full API Reference for more info). ## See Also -- {{< apiref "fan/fan.h" "fan/fan.h" >}} +- +- diff --git a/content/components/fan/speed.md b/src/content/docs/components/fan/speed.mdx similarity index 57% rename from content/components/fan/speed.md rename to src/content/docs/components/fan/speed.mdx index 49b1252f1b..c2c2170c86 100644 --- a/content/components/fan/speed.md +++ b/src/content/docs/components/fan/speed.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up speed-controllable fans." title: "Speed Fan" -params: - seo: - description: Instructions for setting up speed-controllable fans. - image: fan.svg --- -The `speed` fan platform lets you represent any float [Output Component](/components/output#output) as a fan that +import { Image } from 'astro:assets'; +import fanUiImg from './images/fan-ui.png'; +import APIRef from '@components/APIRef.astro'; + +The `speed` fan platform lets you represent any float [Output Component](/components/output/) as a fan that supports speed settings. -{{< img src="fan-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -22,12 +22,12 @@ fan: ## Configuration variables -- **output** (**Required**, [ID](/guides/configuration-types#id)): The id of the [float output](/components/output#output) to use for this fan. +- **output** (**Required**, [ID](/guides/configuration-types#id)): The id of the [float output](/components/output/) to use for this fan. - **oscillation_output** (*Optional*, [ID](/guides/configuration-types#id)): The id of the - [output](/components/output#output) to use for the oscillation state of this fan. Default is empty. + [output](/components/output/) to use for the oscillation state of this fan. Default is empty. - **direction_output** (*Optional*, [ID](/guides/configuration-types#id)): The id of the - [output](/components/output#output) to use for the direction state of the fan. Default is empty. + [output](/components/output/) to use for the direction state of the fan. Default is empty. - **speed_count** (*Optional*, int): Set the number of supported discrete speed levels. The value is used to calculate the percentages for each speed. E.g. `2` means that you have 50% and 100% while `100` @@ -38,9 +38,9 @@ fan: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/fan" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< apiref "fan/fan_state.h" "fan/fan_state.h" >}} +- [Output Component](/components/output/) +- [Fan Component](/components/fan/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- diff --git a/content/components/fan/template.md b/src/content/docs/components/fan/template.mdx similarity index 76% rename from content/components/fan/template.md rename to src/content/docs/components/fan/template.mdx index 5424550237..15c6732c43 100644 --- a/content/components/fan/template.md +++ b/src/content/docs/components/fan/template.mdx @@ -1,15 +1,15 @@ --- description: "Instructions for setting up template fans." title: "Template Fan" -params: - seo: - description: Instructions for setting up template fans. - image: fan.svg --- +import { Image } from 'astro:assets'; +import fanUiImg from './images/fan-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `template` fan platform lets you create a fan interface using only triggers. -{{< img src="fan-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -32,5 +32,5 @@ fan: ## See Also -- {{< docref "/components/fan" >}} -- {{< apiref "template/fan/template_fan.h" "template/fan/template_fan.h" >}} +- [Fan Component](/components/fan/) +- diff --git a/content/components/fan/tuya.md b/src/content/docs/components/fan/tuya.mdx similarity index 74% rename from content/components/fan/tuya.md rename to src/content/docs/components/fan/tuya.mdx index 1b69ce5f28..e25db8def9 100644 --- a/content/components/fan/tuya.md +++ b/src/content/docs/components/fan/tuya.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up a Tuya ceiling fan switch." title: "Tuya Fan" -params: - seo: - description: Instructions for setting up a Tuya ceiling fan switch. - image: fan.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tuyafanImg from './images/tuyafan.jpg'; +import APIRef from '@components/APIRef.astro'; + The `tuya` fan platform creates a variable speed fan from a tuya component. -{{< img src="tuyafan.jpg" alt="Image" caption="A Tuya based fan controller wall plate." width="40%" class="align-center" >}} +
    -The Tuya fan requires a {{< docref "/components/tuya" >}} to be configured. +The Tuya fan requires a [Tuya](/components/tuya/) to be configured. Here is an example output for a Tuya fan controller: @@ -30,7 +36,7 @@ On this controller, the data points are: - 1 represents the fan on/off state. - 3 represents the speed setting. -- 9 represents the additional light switch. (use the {{< docref "/components/light/tuya" >}} component to control this) +- 9 represents the additional light switch. (use the [Tuya](/components/light/tuya/) component to control this) - 6 & 7 are unknown and don't seem to affect the state. Based on this, you can create the fan as follows: @@ -63,6 +69,6 @@ fan: ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/fan" >}} -- {{< apiref "tuya/fan/tuya_fan.h" "tuya/fan/tuya_fan.h" >}} +- [Tuya MCU](/components/tuya/) +- [Fan Component](/components/fan/) +- diff --git a/content/components/fingerprint_grow.md b/src/content/docs/components/fingerprint_grow.mdx similarity index 91% rename from content/components/fingerprint_grow.md rename to src/content/docs/components/fingerprint_grow.mdx index 732648abaf..ad68dc5dce 100644 --- a/content/components/fingerprint_grow.md +++ b/src/content/docs/components/fingerprint_grow.mdx @@ -1,17 +1,30 @@ --- description: "Instructions for setting up Grow Fingerprint Reader component in ESPHome." title: "Grow Fingerprint Reader" -params: - seo: - description: Instructions for setting up Grow Fingerprint Reader component in ESPHome. - image: fingerprint.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import r307FullImg from './images/r307-full.jpg'; +import r503FullImg from './images/r503-full.jpg'; +import fingeprintGrowSleepModeWiringImg from './images/fingeprint_grow-sleep_mode_wiring.jpg'; +import APIRef from '@components/APIRef.astro'; + The `fingerprint_grow` component allows you to use your R307, R503, R503-RGB, ZFM-20, ... fingerprint sensors with ESPHome. -{{< img src="r307-full.jpg" alt="Image" caption="R307/ZFM-20 Optical Fingerprint Reader ([datasheet](https://cdn-shop.adafruit.com/datasheets/ZFM+user+manualV15.pdf), [Adafruit](https://www.adafruit.com/product/751)). Image by [Adafruit](https://www.adafruit.com/product/751)." width="50.0%" class="align-center" >}} +
    -{{< img src="r503-full.jpg" alt="Image" caption="R503 Capacitive Fingerprint Reader with Bi-Color Aura LED ([datasheet](https://cdn-shop.adafruit.com/product-files/4651/4651_R503+fingerprint+module+user+manual.pdf), [Adafruit](https://www.adafruit.com/product/4651)). Image by [Adafruit](https://www.adafruit.com/product/4651)." width="50.0%" class="align-center" >}} +
    ## Component/Hub @@ -96,7 +109,7 @@ Base Configuration: - **security_level**: The integer representation of the currently configured security level of the reader. Higher security levels reduce the false acceptance rate (FAR) at the expense of increasing the false rejection rate (FRR). Range is 1 (lowest) to 5 (highest). All options from [Sensor](/components/sensor). -{{< anchor "fingerprint_grow-sleep_mode" >}} + ## Sleep Mode @@ -105,7 +118,7 @@ To implement this feature, you will need one more free GPIO pin to toggle the se This is a wiring example for the R503 and below you can find the respective configuration: -{{< img src="fingeprint_grow-sleep_mode_wiring.jpg" alt="Image" width="50.0%" class="align-center" >}} + ```yaml uart: @@ -121,7 +134,7 @@ fingerprint_grow: idle_period_to_sleep: 5s ``` -{{< anchor "fingerprint_grow-set_new_password" >}} + ## Setting a New Password @@ -145,7 +158,7 @@ fingerprint_grow: ## Triggers -{{< anchor "fingerprint_grow-on_finger_scan_start" >}} + ### `on_finger_scan_start` Trigger @@ -160,7 +173,7 @@ on_finger_scan_start: count: 0 ``` -{{< anchor "fingerprint_grow-on_finger_scan_invalid" >}} + ### `on_finger_scan_invalid` Trigger @@ -173,7 +186,7 @@ on_finger_scan_invalid: state: "Invalid finger" ``` -{{< anchor "fingerprint_grow-on_finger_scan_matched" >}} + ### `on_finger_scan_matched` Trigger @@ -202,7 +215,7 @@ on_finger_scan_matched: } ``` -{{< anchor "fingerprint_grow-on_finger_scan_unmatched" >}} + ### `on_finger_scan_unmatched` Trigger @@ -215,7 +228,7 @@ on_finger_scan_unmatched: state: "Unauthorized finger" ``` -{{< anchor "fingerprint_grow-on_finger_scan_misplaced" >}} + ### `on_finger_scan_misplaced` Trigger @@ -229,7 +242,7 @@ on_finger_scan_misplaced: state: "Misplaced finger" ``` -{{< anchor "fingerprint_grow-on_enrollment_scan" >}} + ### `on_enrollment_scan` Trigger @@ -243,7 +256,7 @@ on_enrollment_scan: state: !lambda 'return "Enrolling into slot " + to_string(finger_id) + ", scanned " + to_string(scan_num) + " time(s)";' ``` -{{< anchor "fingerprint_grow-on_enrollment_done" >}} + ### `on_enrollment_done` Trigger @@ -257,7 +270,7 @@ on_enrollment_done: state: !lambda 'return "Enrolled into slot " + to_string(finger_id);' ``` -{{< anchor "fingerprint_grow-on_enrollment_failed" >}} + ### `on_enrollment_failed` Trigger @@ -357,7 +370,7 @@ on_...: - **state** (**Required**, boolean, [templatable](/automations/templates)): The state to set the LED. -{{< anchor "fingerprint_grow-aura_led_control" >}} + ### `fingerprint_grow.aura_led_control` Action @@ -514,6 +527,6 @@ api: ## See Also -- {{< apiref "fingerprint_grow/fingerprint_grow.h" "fingerprint_grow/fingerprint_grow.h" >}} - [Tutorial from Adafruit](https://learn.adafruit.com/adafruit-optical-fingerprint-sensor) - [Adafruit Fingerprint Sensor Library](https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/font.md b/src/content/docs/components/font.mdx similarity index 95% rename from content/components/font.md rename to src/content/docs/components/font.mdx index 439261a717..43bd971b33 100644 --- a/content/components/font.md +++ b/src/content/docs/components/font.mdx @@ -1,17 +1,18 @@ --- description: "Instructions for setting up fonts in ESPHome." title: "Font Renderer Component" -params: - seo: - description: Instructions for setting up fonts in ESPHome. - image: format-font.svg --- -{{< anchor "display-fonts" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import fontmetricsImg from './images/fontmetrics.png'; +import APIRef from '@components/APIRef.astro'; + + ESPHome's graphical rendering engine also has a powerful font drawer which integrates seamlessly into the system. You have the option to use **any** OpenType/TrueType (`.ttf`, `.otf`, `.woff` ) font file at **any** size, as well as fixed-size [PCF](https://en.wikipedia.org/wiki/Portable_Compiled_Format) and [BDF](https://en.wikipedia.org/wiki/Glyph_Bitmap_Distribution_Format) bitmap fonts. -These fonts can be used in ESPHome's [own rendering engine](/components/display#display-engine) or in the {{< docref "/components/lvgl/index" "LVGL Graphics" >}} component. +These fonts can be used in ESPHome's [own rendering engine](/components/display#display-engine) or in the [LVGL Graphics](/components/lvgl/) component. To use fonts you can either @@ -141,7 +142,12 @@ it.horizontal_line(0, descender, it.get_width()); it.horizontal_line(0, height, it.get_width()); ``` -{{< img src="fontmetrics.png" alt="Image" caption="The fontmetric values provided by ESPHome." width="60.0%" class="align-center" >}} +
    ## Configuration variables @@ -232,9 +238,9 @@ it.horizontal_line(0, height, it.get_width()); ## See Also -- {{< apiref "display/display_buffer.h" "display/display_buffer.h" >}} - [Display Rendering Engine](/components/display#display-engine) -- {{< docref "/components/lvgl" >}} +- [LVGL Graphics](/components/lvgl/) - [MDI cheatsheet](https://pictogrammers.com/library/mdi/) - [MDI font repository](https://github.com/Pictogrammers/pictogrammers.github.io/tree/main/%40mdi/font/) - [Google Fonts Glyphsets](https://github.com/googlefonts/glyphsets/blob/main/GLYPHSETS.md) +- diff --git a/content/components/globals.md b/src/content/docs/components/globals.mdx similarity index 95% rename from content/components/globals.md rename to src/content/docs/components/globals.mdx index e37c1e4f39..a0b0794086 100644 --- a/content/components/globals.md +++ b/src/content/docs/components/globals.mdx @@ -58,7 +58,7 @@ globals: Within lambdas globals don’t have a state attribute, just a value. Note in the example above the use of id(my_global_int) where other components would require id(my_component).state. -{{< anchor "globals-set_action" >}} + ## `globals.set` Action @@ -87,6 +87,5 @@ on_...: ## See Also -- {{< docref "index/" >}} -- {{< docref "/automations/actions" >}} -- {{< docref "/automations/templates" >}} +- [Actions, Triggers, Conditions](/automations/actions/) +- [Templates](/automations/templates/) diff --git a/content/components/gps.md b/src/content/docs/components/gps.mdx similarity index 82% rename from content/components/gps.md rename to src/content/docs/components/gps.mdx index eb67f3c97f..2c52081200 100644 --- a/content/components/gps.md +++ b/src/content/docs/components/gps.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up GPS component in ESPHome." title: "GPS Component" -params: - seo: - description: Instructions for setting up GPS component in ESPHome. - image: crosshairs-gps.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import gpsFullImg from './images/gps-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `gps` component allows you to connect GPS modules to your ESPHome project. Any GPS module that uses the standardized NMEA communication protocol will work. -{{< img src="gps-full.jpg" alt="Image" caption="GPS Module. Image by [Adafruit](https://www.adafruit.com)" width="50.0%" class="align-center" >}} +
    For this component to work you need to have set up a [UART bus](/components/uart) in your configuration - only the RX pin should be necessary. @@ -39,7 +45,7 @@ In addition to retrieving GPS position data, the module can also be used as a time platform to get the current date and time via the very accurate GPS clocks without a network connection. -See {{< docref "time/gps" >}} for config options for the GPS time source. +See [Gps](/components/time/gps/) for config options for the GPS time source. ## Configuration variables @@ -77,4 +83,4 @@ See {{< docref "time/gps" >}} for config options for the GPS time source. - [Sensor Filters](/components/sensor#sensor-filters) - [TinyGPS++ library](https://github.com/esphome/TinyGPSPlus) -- {{< apiref "gps/gps.h" "gps/gps.h" >}} +- diff --git a/content/components/graph.md b/src/content/docs/components/graph.mdx similarity index 96% rename from content/components/graph.md rename to src/content/docs/components/graph.mdx index fe73c12877..797fd9c431 100644 --- a/content/components/graph.md +++ b/src/content/docs/components/graph.mdx @@ -1,20 +1,19 @@ --- description: "Instructions for displaying graphs in ESPHome." title: "Graph Component" -params: - seo: - description: Instructions for displaying graphs in ESPHome. - image: chart-line.svg --- -{{< anchor "display-graphs" >}} +import { Image } from 'astro:assets'; +import displayRenderingGraphImg from './images/display_rendering_graph.png'; + + You can display a graph of a sensor value(s) using this component. The states used for the graph are stored in memory at the time the sensor updates and will be lost when the device reboots. Examples: -{{< img src="display_rendering_graph.png" alt="Image" class="align-center" >}} + Graph component with options for grids, border and line-types. diff --git a/content/components/grove_tb6612fng.md b/src/content/docs/components/grove_tb6612fng.mdx similarity index 90% rename from content/components/grove_tb6612fng.md rename to src/content/docs/components/grove_tb6612fng.mdx index aac97d3f3c..51f12e3dc1 100644 --- a/content/components/grove_tb6612fng.md +++ b/src/content/docs/components/grove_tb6612fng.mdx @@ -1,16 +1,14 @@ --- description: "Instructions for setting up Grove TB6612FNG Motor Driver in ESPHome." title: "Grove TB6612FNG Motor Drive" -params: - seo: - description: Instructions for setting up Grove TB6612FNG Motor Driver in ESPHome. - image: grove_tb6612fng.jpg --- +import { Image } from 'astro:assets'; + The Grove TBB6612FNG a runs over I²C bus and has the capability to control DC and Stepper motors. At the current stage of implementation only DC motor is implemented. -{{< img src="grove_tb6612fng.jpg" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration @@ -108,7 +106,7 @@ on_...: id: test_motor ``` -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) diff --git a/content/components/hlk_fm22x.md b/src/content/docs/components/hlk_fm22x.mdx similarity index 71% rename from content/components/hlk_fm22x.md rename to src/content/docs/components/hlk_fm22x.mdx index 28e1d7bdd9..bb5c307ae7 100644 --- a/content/components/hlk_fm22x.md +++ b/src/content/docs/components/hlk_fm22x.mdx @@ -1,21 +1,33 @@ --- description: "Instructions for setting up an HLK-FM22x Face Recognition component in ESPHome." title: "HLK-FM22x Face Recognition Module" -params: - seo: - description: Instructions for setting up an HLK-FM22x Face Recognition component in ESPHome. - image: face.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; +import hlkFm225Img from './images/hlk-fm225.jpg'; +import hlkFm223Img from './images/hlk-fm223.jpg'; + The `hlk_fm22x` component allows you to use your HLK-FM225 and HLK-FM223 face recognition modules with ESPHome. -{{< img src="hlk-fm225.jpg" alt="HLK-FM225 Face Recognition Module" caption="HLK-FM225 Face Recognition Module ([datasheet](https://h.hlktech.com/Mobile/download/fdetail/294.html), [AliExpress](https://www.aliexpress.com/item/1005007267992270.html)). Image by [AliExpress](https://www.aliexpress.com/item/1005007267992270.html)." width="50.0%" class="align-center" >}} +
    -{{< img src="hlk-fm223.jpg" alt="HLK-FM223 Face Recognition Module" caption="HLK-FM223 Face Recognition Module ([datasheet](https://h.hlktech.com/Mobile/download/fdetail/295.html), [AliExpress](https://www.aliexpress.com/item/3256806438681135.html)). Image by [AliExpress](https://www.aliexpress.com/item/3256806438681135.html)." width="50.0%" class="align-center" >}} +
    ## Component/Hub -The module can be powered by the 5V output. As the communication with the reader is done using UART (default baud rate is 115200), you need to have an [UART bus](uart) in your configuration with the `rx_pin` connected to the reader's `TX` and the `tx_pin` connected to the reader's `RX`. +The module can be powered by the 5V output. As the communication with the reader is done using UART (default baud rate is 115200), you need to have an [UART bus](/components/uart/) in your configuration with the `rx_pin` connected to the reader's `TX` and the `tx_pin` connected to the reader's `RX`. ```yaml # Example configuration entry @@ -42,42 +54,42 @@ The configuration is made up of three parts: The central component, optional ind - **uart_id** (*Optional*, ID): Manually specify the ID of the UART hub. - **id** (*Optional*, ID): Manually specify the ID used for code generation. -- **on_face_scan_matched** (*Optional*, [Automation](automations)): An action to be performed when an enrolled face is scanned and recognized. See [`on_face_scan_matched`](#on_face_scan_matched-trigger). -- **on_face_scan_unmatched** (*Optional*, [Automation](automations)): An action to be performed when an unknown face is scanned. See [`on_face_scan_unmatched`](#on_face_scan_unmatched-trigger). -- **on_face_scan_invalid** (*Optional*, [Automation](automations)): An action to be performed when the face scan failed. See [`on_face_scan_invalid`](#on_face_scan_invalid-trigger). -- **on_face_info** (*Optional*, [Automation](automations)): An action to be performed when face information is available. See [`on_face_info`](#on_face_info-trigger). -- **on_enrollment_done** (*Optional*, [Automation](automations)): An action to be performed when a face enrollment step is successful. See [`on_enrollment_done`](#on_enrollment_done-trigger). -- **on_enrollment_failed** (*Optional*, [Automation](automations)): An action to be performed when a face enrollment step failed. See [`on_enrollment_failed`](#on_enrollment_failed-trigger). +- **on_face_scan_matched** (*Optional*, [Automation](/automations/)): An action to be performed when an enrolled face is scanned and recognized. See [`on_face_scan_matched`](#on_face_scan_matched-trigger). +- **on_face_scan_unmatched** (*Optional*, [Automation](/automations/)): An action to be performed when an unknown face is scanned. See [`on_face_scan_unmatched`](#on_face_scan_unmatched-trigger). +- **on_face_scan_invalid** (*Optional*, [Automation](/automations/)): An action to be performed when the face scan failed. See [`on_face_scan_invalid`](#on_face_scan_invalid-trigger). +- **on_face_info** (*Optional*, [Automation](/automations/)): An action to be performed when face information is available. See [`on_face_info`](#on_face_info-trigger). +- **on_enrollment_done** (*Optional*, [Automation](/automations/)): An action to be performed when a face enrollment step is successful. See [`on_enrollment_done`](#on_enrollment_done-trigger). +- **on_enrollment_failed** (*Optional*, [Automation](/automations/)): An action to be performed when a face enrollment step failed. See [`on_enrollment_failed`](#on_enrollment_failed-trigger). ## Binary Sensor **Configuration variables:** -- All options from [Binary Sensor](binary_sensor/index). +- All options from [Binary Sensor](/components/binary_sensor/). ## Sensor - **face_count**: The number of enrolled faces stored on the module. -- All options from [Sensor](sensor/index). +- All options from [Sensor](/components/sensor/). - **last_face_id**: The last matched enrolled face as set by [`on_face_scan_matched`](#on_face_scan_matched-trigger). -- All options from [Sensor](sensor/index). +- All options from [Sensor](/components/sensor/). - **status**: The integer representation of the internal status register of the module. -- All options from [Sensor](sensor/index). +- All options from [Sensor](/components/sensor/). ## Text Sensor - **version**: The module's firmware version. -- All options from [Text Sensor](text_sensor/index). +- All options from [Text Sensor](/components/text_sensor/). - **last_face_name**: The last matched enrolled face as set by [`on_face_scan_matched`](#on_face_scan_matched-trigger). -- All options from [Text Sensor](text_sensor/index). +- All options from [Text Sensor](/components/text_sensor/). ## `on_face_scan_matched` Trigger With this configuration option you can write complex automations whenever a face scan is matched to an enrolled face. -To use the variables, use a [lambda](lambda) template, the matched face id is available inside that lambda under the variable named `face_id` and the face name under the variable named `name`. +To use the variables, use a [lambda](/automations/templates) template, the matched face id is available inside that lambda under the variable named `face_id` and the face name under the variable named `name`. ```yaml on_face_scan_matched: @@ -111,7 +123,7 @@ on_face_scan_unmatched: ## `on_face_scan_invalid` Trigger With this configuration option you can write complex automations whenever a scan fails, e.g. when no face is visible. This is different from `on_face_scan_unmatched` which is triggered when an unknown face is scanned. -To use the variable, use a [lambda](lambda) template, the error number is available inside that lambda under the variable named `error`. +To use the variable, use a [lambda](/automations/templates) template, the error number is available inside that lambda under the variable named `error`. ```yaml on_face_scan_invalid: @@ -124,7 +136,7 @@ on_face_scan_invalid: With this configuration option you can write complex automations whenever face information is available. The module sends face info during enrollment and scanning, and it's mostly useful for debugging. -To use the variables, use a [lambda](lambda) template, the status is available inside that lambda under the variable named `status`. +To use the variables, use a [lambda](/automations/templates) template, the status is available inside that lambda under the variable named `status`. A zero value means normal, and the datasheet contains various error status codes (e.g. 6 for the face being too far). There are additional values to determine the position (`left`, `top`, `right`, `bottom`) of the face in the frame as well as its rotation (`yaw`, `pitch`, `roll`). @@ -151,7 +163,7 @@ on_face_info: ## `on_enrollment_done` Trigger With this configuration option you can write complex automations whenever an enrollment step for a face is successful. -To use the variables, use a [lambda](lambda) template, the slot number enrolled into is available inside that lambda under the variable named `face_id`. +To use the variables, use a [lambda](/automations/templates) template, the slot number enrolled into is available inside that lambda under the variable named `face_id`. Note that the value is only valid after the face has been enrolled in all directions (otherwise it will be -1). The direction value is a bitmask representing the directions that have been captured so far. A value of `0x1f` means all directions have been captured and the face id should be valid. @@ -165,7 +177,7 @@ on_enrollment_done: ## `on_enrollment_failed` Trigger With this configuration option you can write complex automations whenever a face failed to be enrolled. -To use the variable, use a [lambda](lambda) template, the error number is available inside that lambda under the variable named `error`. +To use the variable, use a [lambda](/automations/templates) template, the error number is available inside that lambda under the variable named `error`. ```yaml on_enrollment_failed: @@ -334,4 +346,4 @@ api: ## See Also -- {{< apiref "hlk_fm22x/hlk_fm22x.h" >}} +- diff --git a/content/components/host.md b/src/content/docs/components/host.mdx similarity index 87% rename from content/components/host.md rename to src/content/docs/components/host.mdx index f2d1cb3e77..76172733f5 100644 --- a/content/components/host.md +++ b/src/content/docs/components/host.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the host platform for ESPHome." title: "Host Platform" -params: - seo: - description: Configuration for the host platform for ESPHome. - image: host.svg --- The `host` platform allows ESPHome configurations to be compiled and run on a desktop computer. This is known @@ -18,7 +14,7 @@ configuration to Home Assistant (the native MAC address is not readily available > to add it explicitly using the IP address of your host computer. If HA cannot establish a connection when > adding the device manually, the firewall settings of the local host computer may be the cause. The > ESPHome *API* port (`6053` ) must be allowed through the firewall. -> See {{< docref "/components/api" >}} for details. +> See [Api](/components/api/) for details. Many components, especially those interfacing to actual hardware, will not be available when using `host`. Do not configure wifi - network will automatically be available using the host computer. @@ -40,5 +36,5 @@ The `esphome run yourfile.yaml` command will compile and automatically run the b ## See Also - [SDL display](/components/display/sdl#sdl) -- {{< docref "esphome/" >}} -- {{< docref "/components/time/host" >}} +- [ESPHome Core Configuration](/components/esphome/) +- [Host Time Source](/components/time/host/) diff --git a/content/components/http_request.md b/src/content/docs/components/http_request.mdx similarity index 95% rename from content/components/http_request.md rename to src/content/docs/components/http_request.mdx index e6f223272a..b1277d1698 100644 --- a/content/components/http_request.md +++ b/src/content/docs/components/http_request.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up HTTP Requests in ESPHome" title: "HTTP Request" -params: - seo: - description: Instructions for setting up HTTP Requests in ESPHome - image: connection.svg --- +import APIRef from '@components/APIRef.astro'; + The `http_request` component lets you make HTTP/HTTPS requests. To do so, you need to add it to your device's configuration: @@ -14,7 +12,7 @@ The `http_request` component lets you make HTTP/HTTPS requests. To do so, you ne http_request: ``` -{{< anchor "http_request-configuration_variables" >}} + ## Configuration variables @@ -85,7 +83,7 @@ http_request: The `http_request` component supports a number of [actions](/automations/actions#all-actions) that can be used to send requests. -{{< anchor "http_request-get_action" >}} + ### `http_request.get` Action @@ -122,7 +120,7 @@ on_...: - **on_response** (*Optional*, [Automation](/automations)): An automation to perform after the request is received. - **on_error** (*Optional*, [Automation](/automations)): An automation to perform if the request cannot be completed. -{{< anchor "http_request-post_action" >}} + ### `http_request.post` Action @@ -148,7 +146,7 @@ on_...: - All other options from [`http_request.get` Action](#http_request-get_action). -{{< anchor "http_request-send_action" >}} + ### `http_request.send` Action @@ -171,7 +169,7 @@ on_...: ## Triggers -{{< anchor "http_request-on_response" >}} + ### `on_response` Trigger @@ -209,7 +207,7 @@ on_... - logger.log: "Request failed!" ``` -{{< anchor "http_request-on_error" >}} + ### `on_error` Trigger @@ -218,7 +216,7 @@ or the server is not reachable. This will *not* be triggered if the request completes, even if the response code is not 200. No information on the type of error is available and no variables are available for use in [lambdas](/automations/templates#config-lambda). See example usage above. -{{< anchor "http_request-examples" >}} + ## Examples @@ -316,6 +314,5 @@ on_...: ## See Also -- {{< docref "index/" >}} -- {{< apiref "http_request/http_request.h" "http_request/http_request.h" >}} -- {{< docref "/components/json" >}} +- [json Component](/components/json/) +- diff --git a/content/components/i2c.md b/src/content/docs/components/i2c.mdx similarity index 90% rename from content/components/i2c.md rename to src/content/docs/components/i2c.mdx index 2397c98866..08271620f0 100644 --- a/content/components/i2c.md +++ b/src/content/docs/components/i2c.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up the I²C bus to communicate with 2-wire devices in ESPHome" title: "I²C Bus" -params: - seo: - description: Instructions for setting up the I²C bus to communicate with 2-wire devices in ESPHome - image: i2c.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "i2c" >}} + + This component sets up the I²C bus for your ESP32, ESP8266, RP2040 or NRF52. In order for these components to work correctly, you need to define the I²C bus in your configuration. On ESP32 (both Arduino and ESP-IDF @@ -80,10 +78,10 @@ i2c: > # ... > ``` -For I²C multiplexing see {{< docref "/components/tca9548a" >}}. +For I²C multiplexing see [Tca9548A](/components/tca9548a/). ## See Also -- {{< docref "/components/tca9548a" >}} -- {{< docref "/components/i2c_device" >}} -- {{< apiref "i2c/i2c.h" "i2c/i2c.h" >}} +- [TCA9548A I²C Multiplexer](/components/tca9548a/) +- [Generic I²C device component](/components/i2c_device/) +- diff --git a/content/components/i2c_device.md b/src/content/docs/components/i2c_device.mdx similarity index 79% rename from content/components/i2c_device.md rename to src/content/docs/components/i2c_device.mdx index 195c177843..744f807541 100644 --- a/content/components/i2c_device.md +++ b/src/content/docs/components/i2c_device.mdx @@ -2,8 +2,10 @@ description: Generic I²C device component title: Generic I²C device component --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "i2c_device" >}} + + General-purpose I²C device component that can be used to communicate with hardware not supported by a specific component. It allows selection of the I²C address. Reads and writes on the device can be performed with lambdas. For example: @@ -32,5 +34,5 @@ i2c_device: ## See Also -- {{< docref "/components/i2c" >}} -- {{< apiref "i2c_device/i2c_device.h" "i2c_device/i2c_device.h" >}} +- [I²C Bus](/components/i2c/) +- diff --git a/content/components/i2s_audio.md b/src/content/docs/components/i2s_audio.mdx similarity index 82% rename from content/components/i2s_audio.md rename to src/content/docs/components/i2s_audio.mdx index 42d4ca7fec..ac95abf264 100644 --- a/content/components/i2s_audio.md +++ b/src/content/docs/components/i2s_audio.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for setting up I²S based devices in ESPHome." title: "I²S Audio Component" -params: - seo: - description: Instructions for setting up I²S based devices in ESPHome. - image: i2s_audio.svg --- -{{< anchor "i2s_audio" >}} + The `i2s_audio` component allows for sending and receiving audio via I²S. This component only works on ESP32 based chips. @@ -27,8 +23,8 @@ i2s_audio: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this I²S bus if you need multiple. - **use_legacy** (*Optional, boolean*): Use the legacy I²S driver when using esp-idf framework version 5.x.x. Not valid for Arduino framework or esp-idf version < 5. All `i2s_audio` components need to use the same setting. Defaults to `false`. -## See also +## See Also -- {{< docref "microphone/i2s_audio" >}} -- {{< docref "media_player/i2s_audio" >}} -- {{< docref "speaker/i2s_audio" >}} +- [I²S Audio Microphone](/components/microphone/i2s_audio/) +- [I²S Audio Media Player](/components/media_player/i2s_audio/) +- [I²S Audio Speaker](/components/speaker/i2s_audio/) diff --git a/content/components/image.md b/src/content/docs/components/image.mdx similarity index 94% rename from content/components/image.md rename to src/content/docs/components/image.mdx index d03d7de50e..962e1b4e0b 100644 --- a/content/components/image.md +++ b/src/content/docs/components/image.mdx @@ -1,13 +1,9 @@ --- description: "Instructions to display static images on ESPHome" title: "Images" -params: - seo: - description: Instructions to display static images on ESPHome - image: image-outline.svg --- -{{< anchor "display-image" >}} + Use this component to store graphical images on the device, you can then draw the images on compatible displays. @@ -143,7 +139,7 @@ image: ## Displaying Images -Images may be used in LVGL configurations wherever an image is required. See the {{< docref "/components/lvgl/index" "LVGL" >}} documentation for more information. +Images may be used in LVGL configurations wherever an image is required. See the [LVGL](/components/lvgl/) documentation for more information. To display an image directly on an ESPHome display, you can use the `image` method in the display lambda. @@ -198,6 +194,6 @@ as the additional parameters. By default transparency is not used. If `transparency: chroma_key` is set then a specific colour will be used to replace any transparent or partially transparent portions of the image. This will not be drawn when rendering the image, allowing the background to be visible. -If `transparency: alpha_channel` is set, then each pixel of the image will be assigned an additional byte with a transparency value. This is useful mainly when using {{< docref "/components/lvgl/index" "LVGL" >}} as the `alpha_channel` transparency will enable smooth blending of transparent images with the background. This choice is not available for binary images. +If `transparency: alpha_channel` is set, then each pixel of the image will be assigned an additional byte with a transparency value. This is useful mainly when using [LVGL](/components/lvgl/) as the `alpha_channel` transparency will enable smooth blending of transparent images with the background. This choice is not available for binary images. When using the display lambda image drawing functions these will draw or not draw the pixel, no blending with the background will be done. The `BINARY` format with `chroma_key` transparency effectively turns the image into an alpha mask with one bit per pixel. GRAYSCALE images with transparency store the alpha channel only, and remain 1 byte per pixel. diff --git a/content/components/images/DFR0627.jpg b/src/content/docs/components/images/DFR0627.jpg similarity index 100% rename from content/components/images/DFR0627.jpg rename to src/content/docs/components/images/DFR0627.jpg diff --git a/content/components/images/debug.png b/src/content/docs/components/images/debug.png similarity index 100% rename from content/components/images/debug.png rename to src/content/docs/components/images/debug.png diff --git a/content/components/images/demo-ui.png b/src/content/docs/components/images/demo-ui.png similarity index 100% rename from content/components/images/demo-ui.png rename to src/content/docs/components/images/demo-ui.png diff --git a/content/components/images/dfplayer-full.jpg b/src/content/docs/components/images/dfplayer-full.jpg similarity index 100% rename from content/components/images/dfplayer-full.jpg rename to src/content/docs/components/images/dfplayer-full.jpg diff --git a/content/components/images/dfrobot_sen0395-full.jpg b/src/content/docs/components/images/dfrobot_sen0395-full.jpg similarity index 100% rename from content/components/images/dfrobot_sen0395-full.jpg rename to src/content/docs/components/images/dfrobot_sen0395-full.jpg diff --git a/content/components/images/display_rendering_graph.png b/src/content/docs/components/images/display_rendering_graph.png similarity index 100% rename from content/components/images/display_rendering_graph.png rename to src/content/docs/components/images/display_rendering_graph.png diff --git a/src/content/docs/components/images/display_time_temp_oled_2.jpg b/src/content/docs/components/images/display_time_temp_oled_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be4831587fa871e81682db650cba42653ff6bc78 GIT binary patch literal 10104 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 IFR#o02h!PyyZ`_I literal 0 HcmV?d00001 diff --git a/content/components/images/emc2101-full.png b/src/content/docs/components/images/emc2101-full.png similarity index 100% rename from content/components/images/emc2101-full.png rename to src/content/docs/components/images/emc2101-full.png diff --git a/content/components/images/esp32_ble_beacon-ibeacon.png b/src/content/docs/components/images/esp32_ble_beacon-ibeacon.png similarity index 100% rename from content/components/images/esp32_ble_beacon-ibeacon.png rename to src/content/docs/components/images/esp32_ble_beacon-ibeacon.png diff --git a/content/components/images/fingeprint_grow-sleep_mode_wiring.jpg b/src/content/docs/components/images/fingeprint_grow-sleep_mode_wiring.jpg similarity index 100% rename from content/components/images/fingeprint_grow-sleep_mode_wiring.jpg rename to src/content/docs/components/images/fingeprint_grow-sleep_mode_wiring.jpg diff --git a/content/components/images/fontmetrics.png b/src/content/docs/components/images/fontmetrics.png similarity index 100% rename from content/components/images/fontmetrics.png rename to src/content/docs/components/images/fontmetrics.png diff --git a/src/content/docs/components/images/garage-variant.svg b/src/content/docs/components/images/garage-variant.svg new file mode 100644 index 0000000000..eb3715fd2d --- /dev/null +++ b/src/content/docs/components/images/garage-variant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/components/images/gps-full.jpg b/src/content/docs/components/images/gps-full.jpg similarity index 100% rename from content/components/images/gps-full.jpg rename to src/content/docs/components/images/gps-full.jpg diff --git a/src/content/docs/components/images/head-lightbulb-outline.svg b/src/content/docs/components/images/head-lightbulb-outline.svg new file mode 100644 index 0000000000..be351a7529 --- /dev/null +++ b/src/content/docs/components/images/head-lightbulb-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/components/images/hlk-fm223.jpg b/src/content/docs/components/images/hlk-fm223.jpg similarity index 100% rename from content/components/images/hlk-fm223.jpg rename to src/content/docs/components/images/hlk-fm223.jpg diff --git a/content/components/images/hlk-fm225.jpg b/src/content/docs/components/images/hlk-fm225.jpg similarity index 100% rename from content/components/images/hlk-fm225.jpg rename to src/content/docs/components/images/hlk-fm225.jpg diff --git a/src/content/docs/components/images/ili9341.svg b/src/content/docs/components/images/ili9341.svg new file mode 100644 index 0000000000..a1675d7de3 --- /dev/null +++ b/src/content/docs/components/images/ili9341.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/content/docs/components/images/ili9342.svg b/src/content/docs/components/images/ili9342.svg new file mode 100644 index 0000000000..16ab024abd --- /dev/null +++ b/src/content/docs/components/images/ili9342.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/content/docs/components/images/ili9481.svg b/src/content/docs/components/images/ili9481.svg new file mode 100644 index 0000000000..652be42068 --- /dev/null +++ b/src/content/docs/components/images/ili9481.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/content/docs/components/images/image-multiple-outline.svg b/src/content/docs/components/images/image-multiple-outline.svg new file mode 100644 index 0000000000..6cdf937044 --- /dev/null +++ b/src/content/docs/components/images/image-multiple-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/content/docs/components/images/json.svg b/src/content/docs/components/images/json.svg new file mode 100644 index 0000000000..f74c815576 --- /dev/null +++ b/src/content/docs/components/images/json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/components/images/key_collector.svg b/src/content/docs/components/images/key_collector.svg similarity index 100% rename from content/components/images/key_collector.svg rename to src/content/docs/components/images/key_collector.svg diff --git a/content/cookbook/images/leak-detector-m5stickC_dry.jpg b/src/content/docs/components/images/leak-detector-m5stickC_main_index.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_dry.jpg rename to src/content/docs/components/images/leak-detector-m5stickC_main_index.jpg diff --git a/content/components/images/lightwaverf.jpg b/src/content/docs/components/images/lightwaverf.jpg similarity index 100% rename from content/components/images/lightwaverf.jpg rename to src/content/docs/components/images/lightwaverf.jpg diff --git a/content/components/images/ltr559.jpg b/src/content/docs/components/images/ltr559.jpg similarity index 100% rename from content/components/images/ltr559.jpg rename to src/content/docs/components/images/ltr559.jpg diff --git a/src/content/docs/components/images/mcp23sxx.svg b/src/content/docs/components/images/mcp23sxx.svg new file mode 100644 index 0000000000..1709c0c358 --- /dev/null +++ b/src/content/docs/components/images/mcp23sxx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/content/docs/components/images/mcp2515.svg b/src/content/docs/components/images/mcp2515.svg new file mode 100644 index 0000000000..a4c7b92e04 --- /dev/null +++ b/src/content/docs/components/images/mcp2515.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/components/images/micronova_optocouplers.png b/src/content/docs/components/images/micronova_optocouplers.png similarity index 100% rename from content/components/images/micronova_optocouplers.png rename to src/content/docs/components/images/micronova_optocouplers.png diff --git a/content/components/images/micronova_serial.png b/src/content/docs/components/images/micronova_serial.png similarity index 100% rename from content/components/images/micronova_serial.png rename to src/content/docs/components/images/micronova_serial.png diff --git a/content/components/images/micronova_serial_layout.png b/src/content/docs/components/images/micronova_serial_layout.png similarity index 100% rename from content/components/images/micronova_serial_layout.png rename to src/content/docs/components/images/micronova_serial_layout.png diff --git a/content/components/images/mqtt-availability.png b/src/content/docs/components/images/mqtt-availability.png similarity index 100% rename from content/components/images/mqtt-availability.png rename to src/content/docs/components/images/mqtt-availability.png diff --git a/content/components/images/number-slider-popup-input-field.png b/src/content/docs/components/images/number-slider-popup-input-field.png similarity index 100% rename from content/components/images/number-slider-popup-input-field.png rename to src/content/docs/components/images/number-slider-popup-input-field.png diff --git a/content/components/images/number-slider-popup.png b/src/content/docs/components/images/number-slider-popup.png similarity index 100% rename from content/components/images/number-slider-popup.png rename to src/content/docs/components/images/number-slider-popup.png diff --git a/content/components/images/opentherm-shield.png b/src/content/docs/components/images/opentherm-shield.png similarity index 100% rename from content/components/images/opentherm-shield.png rename to src/content/docs/components/images/opentherm-shield.png diff --git a/content/components/images/pcf8574-full.jpg b/src/content/docs/components/images/pcf8574-full.jpg similarity index 100% rename from content/components/images/pcf8574-full.jpg rename to src/content/docs/components/images/pcf8574-full.jpg diff --git a/content/components/images/pn7150-full.jpg b/src/content/docs/components/images/pn7150-full.jpg similarity index 100% rename from content/components/images/pn7150-full.jpg rename to src/content/docs/components/images/pn7150-full.jpg diff --git a/content/components/images/pn716x-full.jpg b/src/content/docs/components/images/pn716x-full.jpg similarity index 100% rename from content/components/images/pn716x-full.jpg rename to src/content/docs/components/images/pn716x-full.jpg diff --git a/content/components/images/power_supply-atx.jpg b/src/content/docs/components/images/power_supply-atx.jpg similarity index 100% rename from content/components/images/power_supply-atx.jpg rename to src/content/docs/components/images/power_supply-atx.jpg diff --git a/content/components/images/r307-full.jpg b/src/content/docs/components/images/r307-full.jpg similarity index 100% rename from content/components/images/r307-full.jpg rename to src/content/docs/components/images/r307-full.jpg diff --git a/content/components/images/r503-full.jpg b/src/content/docs/components/images/r503-full.jpg similarity index 100% rename from content/components/images/r503-full.jpg rename to src/content/docs/components/images/r503-full.jpg diff --git a/content/components/images/resol_vbus_adapter_schematic.png b/src/content/docs/components/images/resol_vbus_adapter_schematic.png similarity index 100% rename from content/components/images/resol_vbus_adapter_schematic.png rename to src/content/docs/components/images/resol_vbus_adapter_schematic.png diff --git a/content/components/images/rf_bridge-full.jpg b/src/content/docs/components/images/rf_bridge-full.jpg similarity index 100% rename from content/components/images/rf_bridge-full.jpg rename to src/content/docs/components/images/rf_bridge-full.jpg diff --git a/content/components/images/rj45_pinout.jpg b/src/content/docs/components/images/rj45_pinout.jpg similarity index 100% rename from content/components/images/rj45_pinout.jpg rename to src/content/docs/components/images/rj45_pinout.jpg diff --git a/content/components/images/seeed-mr24hpc1-card.png b/src/content/docs/components/images/seeed-mr24hpc1-card.png similarity index 100% rename from content/components/images/seeed-mr24hpc1-card.png rename to src/content/docs/components/images/seeed-mr24hpc1-card.png diff --git a/content/components/images/seeed-mr24hpc1-mmwave-kit.png b/src/content/docs/components/images/seeed-mr24hpc1-mmwave-kit.png similarity index 100% rename from content/components/images/seeed-mr24hpc1-mmwave-kit.png rename to src/content/docs/components/images/seeed-mr24hpc1-mmwave-kit.png diff --git a/content/components/images/sensor-history-graph.png b/src/content/docs/components/images/sensor-history-graph.png similarity index 100% rename from content/components/images/sensor-history-graph.png rename to src/content/docs/components/images/sensor-history-graph.png diff --git a/content/components/images/sim800l-full.jpg b/src/content/docs/components/images/sim800l-full.jpg similarity index 100% rename from content/components/images/sim800l-full.jpg rename to src/content/docs/components/images/sim800l-full.jpg diff --git a/content/components/images/sml-log.png b/src/content/docs/components/images/sml-log.png similarity index 100% rename from content/components/images/sml-log.png rename to src/content/docs/components/images/sml-log.png diff --git a/content/components/images/sn74hc595-full.jpg b/src/content/docs/components/images/sn74hc595-full.jpg similarity index 100% rename from content/components/images/sn74hc595-full.jpg rename to src/content/docs/components/images/sn74hc595-full.jpg diff --git a/content/components/images/sprinkler-ui.jpg b/src/content/docs/components/images/sprinkler-ui.jpg similarity index 100% rename from content/components/images/sprinkler-ui.jpg rename to src/content/docs/components/images/sprinkler-ui.jpg diff --git a/content/components/images/sprinkler.png b/src/content/docs/components/images/sprinkler.png similarity index 100% rename from content/components/images/sprinkler.png rename to src/content/docs/components/images/sprinkler.png diff --git a/src/content/docs/components/images/st7796.svg b/src/content/docs/components/images/st7796.svg new file mode 100644 index 0000000000..5291761625 --- /dev/null +++ b/src/content/docs/components/images/st7796.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/components/images/sun-sensor-ui.png b/src/content/docs/components/images/sun-sensor-ui.png similarity index 100% rename from content/components/images/sun-sensor-ui.png rename to src/content/docs/components/images/sun-sensor-ui.png diff --git a/content/components/images/sun-text_sensor-ui.png b/src/content/docs/components/images/sun-text_sensor-ui.png similarity index 100% rename from content/components/images/sun-text_sensor-ui.png rename to src/content/docs/components/images/sun-text_sensor-ui.png diff --git a/content/components/images/sun_gtil2_controller_board.png b/src/content/docs/components/images/sun_gtil2_controller_board.png similarity index 100% rename from content/components/images/sun_gtil2_controller_board.png rename to src/content/docs/components/images/sun_gtil2_controller_board.png diff --git a/content/components/images/sun_gtil2_display_board.png b/src/content/docs/components/images/sun_gtil2_display_board.png similarity index 100% rename from content/components/images/sun_gtil2_display_board.png rename to src/content/docs/components/images/sun_gtil2_display_board.png diff --git a/content/components/images/sun_gtil2_schematic.png b/src/content/docs/components/images/sun_gtil2_schematic.png similarity index 100% rename from content/components/images/sun_gtil2_schematic.png rename to src/content/docs/components/images/sun_gtil2_schematic.png diff --git a/content/components/images/sx126x-full.png b/src/content/docs/components/images/sx126x-full.png similarity index 100% rename from content/components/images/sx126x-full.png rename to src/content/docs/components/images/sx126x-full.png diff --git a/content/components/images/sx127x-full.png b/src/content/docs/components/images/sx127x-full.png similarity index 100% rename from content/components/images/sx127x-full.png rename to src/content/docs/components/images/sx127x-full.png diff --git a/content/components/images/sx1509-full.jpg b/src/content/docs/components/images/sx1509-full.jpg similarity index 100% rename from content/components/images/sx1509-full.jpg rename to src/content/docs/components/images/sx1509-full.jpg diff --git a/content/components/images/sx1509-keypad.jpg b/src/content/docs/components/images/sx1509-keypad.jpg similarity index 100% rename from content/components/images/sx1509-keypad.jpg rename to src/content/docs/components/images/sx1509-keypad.jpg diff --git a/content/components/images/tab-header-expand-cloapsed.png b/src/content/docs/components/images/tab-header-expand-cloapsed.png similarity index 100% rename from content/components/images/tab-header-expand-cloapsed.png rename to src/content/docs/components/images/tab-header-expand-cloapsed.png diff --git a/content/components/images/tab-header-expand-controls-expanded.png b/src/content/docs/components/images/tab-header-expand-controls-expanded.png similarity index 100% rename from content/components/images/tab-header-expand-controls-expanded.png rename to src/content/docs/components/images/tab-header-expand-controls-expanded.png diff --git a/content/components/images/tab-header-expand-logs-expanded.png b/src/content/docs/components/images/tab-header-expand-logs-expanded.png similarity index 100% rename from content/components/images/tab-header-expand-logs-expanded.png rename to src/content/docs/components/images/tab-header-expand-logs-expanded.png diff --git a/content/components/images/tm1651-battery-display.jpg b/src/content/docs/components/images/tm1651-battery-display.jpg similarity index 100% rename from content/components/images/tm1651-battery-display.jpg rename to src/content/docs/components/images/tm1651-battery-display.jpg diff --git a/content/components/images/vbus_serial_optocoupler.png b/src/content/docs/components/images/vbus_serial_optocoupler.png similarity index 100% rename from content/components/images/vbus_serial_optocoupler.png rename to src/content/docs/components/images/vbus_serial_optocoupler.png diff --git a/content/components/images/web_server-v2.png b/src/content/docs/components/images/web_server-v2.png similarity index 100% rename from content/components/images/web_server-v2.png rename to src/content/docs/components/images/web_server-v2.png diff --git a/content/components/images/web_server-v3.png b/src/content/docs/components/images/web_server-v3.png similarity index 100% rename from content/components/images/web_server-v3.png rename to src/content/docs/components/images/web_server-v3.png diff --git a/content/components/images/web_server.png b/src/content/docs/components/images/web_server.png similarity index 100% rename from content/components/images/web_server.png rename to src/content/docs/components/images/web_server.png diff --git a/content/components/images/xiaomi_miscale1&2.jpg b/src/content/docs/components/images/xiaomi_miscale1&2.jpg similarity index 100% rename from content/components/images/xiaomi_miscale1&2.jpg rename to src/content/docs/components/images/xiaomi_miscale1&2.jpg diff --git a/content/components/improv_serial.md b/src/content/docs/components/improv_serial.mdx similarity index 82% rename from content/components/improv_serial.md rename to src/content/docs/components/improv_serial.mdx index 047d8b85fd..94b3887383 100644 --- a/content/components/improv_serial.md +++ b/src/content/docs/components/improv_serial.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Improv via Serial in ESPHome." title: "Improv via Serial" -params: - seo: - description: Instructions for setting up Improv via Serial in ESPHome. - image: improv-social.png --- +import APIRef from '@components/APIRef.astro'; + The `improv_serial` component in ESPHome implements the open [Improv standard](https://www.improv-wifi.com/) for configuring Wi-Fi on an ESPHome device by using a serial connection to the device, eg. USB. @@ -43,8 +41,8 @@ improv_serial: ## See Also -- {{< docref "wifi/" >}} -- {{< docref "captive_portal/" >}} -- {{< docref "esp32_improv/" >}} +- [WiFi Component](/components/wifi/) +- [Captive Portal](/components/captive_portal/) +- [Improv via BLE](/components/esp32_improv/) - [Improv Wi-Fi](https://www.improv-wifi.com/) -- {{< apiref "improv_serial/improv_serial_component.h" "improv_serial/improv_serial_component.h" >}} +- diff --git a/src/content/docs/components/index.mdx b/src/content/docs/components/index.mdx new file mode 100644 index 0000000000..d8607512ff --- /dev/null +++ b/src/content/docs/components/index.mdx @@ -0,0 +1,1120 @@ +--- +description: "Browse all ESPHome components - sensors, switches, lights, displays, climate controllers, and more for ESP32, ESP8266, and RP2040." +title: "ESPHome Docs" +--- + +import ImgTable from "@components/ImgTable.astro"; + +This is the top-level ESPHome documentation index. Browse the tables below, use the sidebar menu, or the search +function to find the information you're looking for. + +### Help improve this documentation + +If you find any errors in this site, corrections are welcome. You can submit a *Pull Request* (PR) in the +[GitHub repo](https://github.com/esphome/esphome-docs) with corrections. If you don't know how to create a PR you +can just use the "Edit this page on GitHub" link on the page in question which will take you to the source file +for that page. + +Alternatively, post in the *Documentation* channel in the [Discord](https://discord.gg/KhAMKrd) server. + +## ESPHome Configuration + +ESPHome is configured in YAML files - use these links for basic and advanced +information about ESPHome configuration files. + + + + + +## Supported Microcontrollers + + + +## Microcontroller Peripherals + +Peripherals which directly support the operation of the microcontroller's processor(s). + + + +## ESPHome Automations + +*"When this happens, I want it to do that..."* + +Automations are how we customize ESPHome devices to respond/behave exactly how you want them to. + + + +## ESPHome Components + +ESPHome-specific components or components supporting ESPHome device provisioning post-installation. + + + +## Network Hardware + + + +## Network Protocols + + + +## Bluetooth/BLE + + + +## Management and Monitoring + + + +## Update Installation + +Install updates over-the-air (OTA). + + + +## Update Management + +Create update entities simplifying management of OTA updates. + + + +## Hardware Peripheral Interfaces/Busses + + + +## I/O Expanders/Multiplexers + + + +## 1-Wire Bus + +Platforms which specifically support or extend the [index](/components/one_wire/), allowing communication with +1-Wire-based devices. + + + +## CAN Bus + +Platforms which specifically support or extend the [index](/components/canbus/), allowing communication with +CAN-based devices. + + + +## Sensor Components + +Sensors are organized into categories; if a given sensor fits into more than one category, it will appear multiple times. + +### Core + + + +### Air Quality + + + +### Analogue + + + +### Bluetooth Low Energy (BLE) + + + +### Digital Signals + + + +### Distance + + + +### Electricity + + + +### Environmental + + + +### Health/Safety + + + +### Light + + + +### Magnetic + + + +### Miscellaneous + + + +### Motion + + + +### Thermocouple + + + +### Weight + + + +Looking for a sensor that outputs its values as an analog voltage? Have a look at the +[ADC Sensor](/components/sensor/adc/) together with a formula like in the [TEMT6000 configuration](https://devices.esphome.io/devices/temt6000). + +## Binary Sensor Components + +Binary Sensors are organized into categories; if a given sensor fits into more than one category, it will appear multiple times. + +### Core + + + +### Capacitive Touch + + + +### Mechanical + + + +### NFC/RFID + +Often known as "tag" or "card" readers within the community. + + + +### Touchscreen + + + +### Presence Detection + + + +### Miscellaneous + + + +## Alarm Control Panel Components + + + +## Audio ADC Components + + + +## Audio DAC Components + + + +## Button Components + + + +## Climate Components + + + +## Cover Components + + + +## Datetime Components + + + +## Display Components + + + + + +## Display Hardware Platforms + + + +## Electromechanical + + + +## Energy/Solar Management + + + +## Event Components + + + +## Fan Components + + + +## Home Assistant Components + +Components specifically for interacting with Home Assistant. + + + +## Infrared Components + +Used for creating infrared (IR) remote control transmitters and/or receivers. + + + +## Light Components + + + +**Looking for WS2811 and similar individually addressable lights?** For the ESP32 and its variants, we recommend the +[ESP32 RMT Led Strip](/components/light/esp32_rmt_led_strip/) or [SPI Led Strip](/components/light/spi_led_strip/); for other processors, have a look at the +[FastLED Light](/components/light/fastled/). + +## Lock Components + + + +## Media Player Components + + + +## Microphone Components + + + +## Number Components + + + +## Output Components + + + +## Select Components + + + +## Speaker Components + + + +## Switch Components + + + +## Text Components + + + +## Text Sensor Components + + + +## Time Components + + + +## Touchscreen Components + + + +## Valve Components + + + +## Water Heater Components + + + +## Wireless Communication + +Used for creating infrared (IR) or radio frequency (RF) remote control transmitters and/or receivers, or to connect +ESPHome to cellular networks. **Does not encompass Wi-Fi.** + + + +## Miscellaneous Components + + + + + +## Cookbook + + + +## Contributing + +ESPHome depends on and welcomes contributions from our community. If you'd like to contribute, please see our +[developer site](https://developers.esphome.io). diff --git a/content/components/infrared/_index.md b/src/content/docs/components/infrared/index.mdx similarity index 92% rename from content/components/infrared/_index.md rename to src/content/docs/components/infrared/index.mdx index 209ff31563..cb7b269eff 100644 --- a/content/components/infrared/_index.md +++ b/src/content/docs/components/infrared/index.mdx @@ -1,11 +1,11 @@ --- description: "Instructions for setting up infrared components in ESPHome." title: "Infrared Component" -params: - seo: - description: Instructions for setting up infrared components in ESPHome. - image: folder-open.svg +sidebar: + label: "Infrared Component" --- +import APIRef from '@components/APIRef.astro'; + > [!IMPORTANT] > This component is EXPERIMENTAL. The API may change at any time @@ -21,7 +21,7 @@ The infrared platform provides base infrastructure for IR/RF communication, esta interface between ESPHome devices and API clients. This enables runtime signal transmission without recompiling firmware, making it ideal for learning and replaying IR/RF commands. -{{< anchor "config-infrared" >}} + ## Base Infrared Configuration @@ -56,7 +56,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. ## How It Works @@ -97,4 +97,4 @@ Reception is non-blocking and can operate alongside other signal processing comp - [Remote Transmitter](/components/remote_transmitter) - [Remote Receiver](/components/remote_receiver) -- {{< apiref "infrared/infrared.h" "infrared/infrared.h" >}} +- diff --git a/content/components/interval.md b/src/content/docs/components/interval.mdx similarity index 90% rename from content/components/interval.md rename to src/content/docs/components/interval.mdx index 48f81cc3db..9ee33c0efa 100644 --- a/content/components/interval.md +++ b/src/content/docs/components/interval.mdx @@ -25,6 +25,5 @@ If a startup delay is configured, the first execution of the actions will not oc ## See Also -- {{< docref "index/" >}} -- {{< docref "/automations/actions" >}} -- {{< docref "/automations/templates" >}} +- [Actions, Triggers, Conditions](/automations/actions/) +- [Templates](/automations/templates/) diff --git a/content/components/ir_rf_proxy.md b/src/content/docs/components/ir_rf_proxy.mdx similarity index 96% rename from content/components/ir_rf_proxy.md rename to src/content/docs/components/ir_rf_proxy.mdx index 3a13acaba2..b4612a3e88 100644 --- a/content/components/ir_rf_proxy.md +++ b/src/content/docs/components/ir_rf_proxy.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the IR/RF Proxy in ESPHome." title: "IR/RF Proxy" -params: - seo: - description: Instructions for setting up the IR/RF Proxy in ESPHome. - image: infrared.svg --- +import APIRef from '@components/APIRef.astro'; + > [!IMPORTANT] > This component is EXPERIMENTAL. The API may change at any time @@ -111,4 +109,4 @@ You can create separate instances for different purposes: - [Remote Transmitter](/components/remote_transmitter) - [Remote Receiver](/components/remote_receiver) -- {{< apiref "ir_rf_proxy/ir_rf_proxy.h" "ir_rf_proxy/ir_rf_proxy.h" >}} +- diff --git a/content/components/json.md b/src/content/docs/components/json.mdx similarity index 93% rename from content/components/json.md rename to src/content/docs/components/json.mdx index efdfec0a7f..d6d4c831f9 100644 --- a/content/components/json.md +++ b/src/content/docs/components/json.mdx @@ -1,11 +1,10 @@ --- description: "Instructions for parsing and building json within ESPHome." title: "json Component" -params: - seo: - description: Instructions for parsing and building json within ESPHome. --- +import APIRef from '@components/APIRef.astro'; + The `json` component enables ESPHome to work with JSON data in automations, sensors, and HTTP requests. This is particularly useful for: - Processing API responses @@ -122,7 +121,6 @@ Another important resource is [JSONLint](https://jsonlint.com/). It will help yo ## See Also -- {{< docref "index/" >}} -- {{< apiref "HTTP Request" "http_request/http_request.h" >}} -- {{< apiref "json_util.h" "json/json_util.h" >}} - [ArduinoJson](https://arduinojson.org/) +- +- diff --git a/content/components/key_collector.md b/src/content/docs/components/key_collector.mdx similarity index 94% rename from content/components/key_collector.md rename to src/content/docs/components/key_collector.mdx index a9bc4fc4b0..f203412275 100644 --- a/content/components/key_collector.md +++ b/src/content/docs/components/key_collector.mdx @@ -1,15 +1,12 @@ --- description: "Key collector component" title: "Key collector component" -params: - seo: - description: Key collector component --- -{{< anchor "key_collector" >}} + The `key_collector` component collects key presses from components -like [Matrix keypad](/components/matrix_keypad#matrix_keypad), {{< docref "/components/wiegand" "Wiegand keypad" >}} +like [Matrix keypad](/components/matrix_keypad#matrix_keypad), [Wiegand keypad](/components/wiegand/) or LVGL [Button Matrix](/components/lvgl/widgets#lvgl-widget-buttonmatrix), [Keyboard](/components/lvgl/widgets#lvgl-widget-keyboard) widgets. It allows you to process key sequences and treat them as one, for example to allow inputting of a PIN code or a passkey. The component outputs @@ -129,8 +126,8 @@ that publishes the collected key sequence when a successful result occurs. ## See Also -- {{< docref "/components/text_sensor/key_collector" >}} -- {{< docref "/components/matrix_keypad" >}} -- {{< docref "/components/wiegand" >}} +- [Key Collector Text Sensor](/components/text_sensor/key_collector/) +- [Matrix keypad](/components/matrix_keypad/) +- [Wiegand keypad and tag reader](/components/wiegand/) - [LVGL Button Matrix widget](/components/lvgl/widgets#lvgl-widget-buttonmatrix) - [LVGL Keyboard widget](/components/lvgl/widgets#lvgl-widget-keyboard) diff --git a/content/components/libretiny.md b/src/content/docs/components/libretiny.mdx similarity index 88% rename from content/components/libretiny.md rename to src/content/docs/components/libretiny.mdx index b6983b4d43..f4c26072a1 100644 --- a/content/components/libretiny.md +++ b/src/content/docs/components/libretiny.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the LibreTiny platform for ESPHome." title: "LibreTiny Platform" -params: - seo: - description: Configuration for the LibreTiny platform for ESPHome. - image: libretiny.svg --- This component contains platform-specific options for the [LibreTiny](https://docs.libretiny.eu/) platform. @@ -47,8 +43,8 @@ ln882x: - **version** (*Optional*, string): The LibreTiny version number to use, from [LibreTiny platform releases](https://github.com/kuba2k2/libretiny/releases). Defaults to `recommended`. Additional values - - `dev` : Use the latest commit from , note this may break at any time - - `latest` : Use the latest *release* from , even if it hasn't been recommended yet. + - `dev` : Use the latest commit from [https://github.com/kuba2k2/libretiny](https://github.com/kuba2k2/libretiny), note this may break at any time + - `latest` : Use the latest *release* from [https://github.com/kuba2k2/libretiny/releases](https://github.com/kuba2k2/libretiny/releases), even if it hasn't been recommended yet. - `recommended` : Use the recommended framework version. - **source** (*Optional*, string): The PlatformIO package or repository to use for the framework. This can be used to use a custom or patched version of the framework. @@ -102,14 +98,14 @@ The `Pin functions` table outlines all GPIOs available on the chosen board. Some notes about the pins on BK72xx: -- `TX2 (P0)` and `RX2 (P1)` are used for the default {{< docref "/components/logger" >}} UART port. -- `TX1 (P11)` and `RX1 (P10)` are used for flashing firmware, as well as for {{< docref "/components/tuya" >}}. -- `ADC3 (P23)` is the only {{< docref "/components/sensor/adc" >}} available on BK7231. +- `TX2 (P0)` and `RX2 (P1)` are used for the default [Logger](/components/logger/) UART port. +- `TX1 (P11)` and `RX1 (P10)` are used for flashing firmware, as well as for [Tuya](/components/tuya/). +- `ADC3 (P23)` is the only [Adc](/components/sensor/adc/) available on BK7231. Some notes about the pins on RTL8710BN/BX: - `TX2 (PA30)` and `RX2 (PA29)` are used for flashing the firmware, - as well as the default {{< docref "/components/logger" >}} UART port. + as well as the default [Logger](/components/logger/) UART port. - `TX2 (PA30)` is additionally used to determine the boot mode on startup (similar to ESP32). Pulling it LOW on startup will enter "download mode". @@ -117,7 +113,7 @@ Some notes about the pins on RTL8710BN/BX: Some notes about the pins on LN882H: - `TX0 (PA2)` and `RX0 (PA3)` are used for flashing the firmware, - as well as the default {{< docref "/components/logger" >}} UART port. + as well as the default [Logger](/components/logger/) UART port. - `BOOT1 (PA9)` is additionally used to determine the boot mode on startup (similar to ESP32). Pulling it LOW on startup will enter "download mode". @@ -163,7 +159,7 @@ uart: tuya: ``` -{{< anchor "advanced-options" >}} + ## Advanced options @@ -210,7 +206,7 @@ bk72xx: - **uart_port** (*Optional*, int): Choose the default UART port of the framework. This affects LibreTiny logging messages, **as well as the default port for** - {{< docref "/components/logger" "ESPHome logger" >}} (e.g. if you don't specify any other). + [ESPHome logger](/components/logger/) (e.g. if you don't specify any other). One of 0, 1, 2. The default value is chip-specific and is chosen by LibreTiny appropriately. - **gpio_recover** (*Optional*, boolean): Disable JTAG/SWD debugging peripherals. This may be needed @@ -222,8 +218,8 @@ bk72xx: ## See Also -- {{< docref "esphome/" >}} -- {{< docref "/components/output/libretiny_pwm" >}} -- {{< docref "/components/text_sensor/libretiny" >}} +- [ESPHome Core Configuration](/components/esphome/) +- [LibreTiny PWM Output](/components/output/libretiny_pwm/) +- [LibreTiny Text Sensor](/components/text_sensor/libretiny/) - [LibreTiny Documentation](https://docs.libretiny.eu/) (external) -- {{< docref "/components/tuya" >}} +- [Tuya MCU](/components/tuya/) diff --git a/content/components/light/beken_spi_led_strip.md b/src/content/docs/components/light/beken_spi_led_strip.mdx similarity index 81% rename from content/components/light/beken_spi_led_strip.md rename to src/content/docs/components/light/beken_spi_led_strip.mdx index 4ed85da224..fd6f58003f 100644 --- a/content/components/light/beken_spi_led_strip.md +++ b/src/content/docs/components/light/beken_spi_led_strip.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up addressable lights like NEOPIXEL on a Beken chip using the SPI DMA interface." title: "Beken SPI LED Strip" -params: - seo: - description: Instructions for setting up addressable lights like NEOPIXEL on a Beken chip using the SPI DMA interface. - image: color_lens.svg --- +import APIRef from '@components/APIRef.astro'; + This is a component using the Beken SPI DMA interface to drive addressable LED strips. @@ -51,6 +49,6 @@ light: ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "beken_spi_led_strip/beken_spi_led_strip.h" "beken_spi_led_strip/beken_spi_led_strip.h" >}} +- [Light Component](/components/light/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/src/content/docs/components/light/binary.mdx b/src/content/docs/components/light/binary.mdx new file mode 100644 index 0000000000..cb2d56b65f --- /dev/null +++ b/src/content/docs/components/light/binary.mdx @@ -0,0 +1,34 @@ +--- +description: "Instructions for setting up binary ON/OFF lights in ESPHome." +title: "Binary Light" +--- + +import { Image } from 'astro:assets'; +import binaryUiImg from './images/binary-ui.png'; +import APIRef from '@components/APIRef.astro'; + +The `binary` light platform creates a simple ON/OFF-only light from a +[binary output component](/components/output/). + + + +```yaml +# Example configuration entry +light: + - platform: binary + name: "Desk Lamp" + output: light_output +``` + +## Configuration variables + +- **output** (**Required**, [ID](/guides/configuration-types#id)): The id of the binary [Output Component](/components/output/) to use for this light. +- All other options from [Light](/components/light#config-light). + +## See Also + +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [GPIO Output](/components/output/gpio/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/light/color_temperature.md b/src/content/docs/components/light/color_temperature.mdx similarity index 55% rename from content/components/light/color_temperature.md rename to src/content/docs/components/light/color_temperature.mdx index 571f3fab8e..64043e3b6d 100644 --- a/content/components/light/color_temperature.md +++ b/src/content/docs/components/light/color_temperature.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up Color Temperature lights." title: "Color Temperature Light" -params: - seo: - description: Instructions for setting up Color Temperature lights. - image: brightness-medium.svg --- +import APIRef from '@components/APIRef.astro'; + The `color_temperature` light platform creates a Color Temperature -light from 2 [float output components](/components/output#output). One channel controls the LED temperature, +light from 2 [float output components](/components/output/). One channel controls the LED temperature, and the other channel controls the brightness. ```yaml @@ -24,8 +22,8 @@ light: ## Configuration variables -- **color_temperature** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the color temperature. It returns a float from 0 to 1 in the mired scale. Hereby 0 corresponds to the cold white temperature and 1 to the warm white temperature. -- **brightness** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the brightness. It returns a float from 0 to 1. +- **color_temperature** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the color temperature. It returns a float from 0 to 1 in the mired scale. Hereby 0 corresponds to the cold white temperature and 1 to the warm white temperature. +- **brightness** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the brightness. It returns a float from 0 to 1. - **cold_white_color_temperature** (**Required**, float): The coldest color temperature supported by this light. This is the lowest value when expressed in [mireds](https://en.wikipedia.org/wiki/Mired), or the highest value when expressed in Kelvin. @@ -38,16 +36,16 @@ light: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/cwww" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/light/rgbct" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< apiref "color_temperature/ct_light_output.h" "color_temperature/ct_light_output.h" >}} +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [Cold White + Warm White Light](/components/light/cwww/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [RGBCT Light](/components/light/rgbct/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- diff --git a/content/components/light/cwww.md b/src/content/docs/components/light/cwww.mdx similarity index 70% rename from content/components/light/cwww.md rename to src/content/docs/components/light/cwww.mdx index a6dfb3a736..f777693d4f 100644 --- a/content/components/light/cwww.md +++ b/src/content/docs/components/light/cwww.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up Cold White + Warm White lights." title: "Cold White + Warm White Light" -params: - seo: - description: Instructions for setting up Cold White + Warm White lights. - image: brightness-medium.svg --- +import APIRef from '@components/APIRef.astro'; + The `cwww` light platform creates a cold white + warm white light from 2 -[float output components](/components/output#output) (one for each channel). The two channels +[float output components](/components/output/) (one for each channel). The two channels can be controlled individually or together. ```yaml @@ -23,7 +21,7 @@ light: constant_brightness: true ``` -{{< anchor "cwww_mixing" >}} + ## Mixing @@ -36,8 +34,8 @@ calculation assumes that both lights have the same illuminance, which might not ## Configuration variables -- **cold_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the cold white channel. -- **warm_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the warm white channel. +- **cold_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the cold white channel. +- **warm_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the warm white channel. - **cold_white_color_temperature** (*Optional*, float): The color temperature (in [mireds](https://en.wikipedia.org/wiki/Mired) or Kelvin) of the cold white channel. Note that this option is required to control the mixing from Home Assistant. @@ -49,16 +47,16 @@ calculation assumes that both lights have the same illuminance, which might not ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/light/rgbct" >}} -- {{< docref "/components/light/color_temperature" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< apiref "cwww/cwww_light_output.h" "cwww/cwww_light_output.h" >}} +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [RGBCT Light](/components/light/rgbct/) +- [Color Temperature Light](/components/light/color_temperature/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- diff --git a/content/components/light/esp32_rmt_led_strip.md b/src/content/docs/components/light/esp32_rmt_led_strip.mdx similarity index 91% rename from content/components/light/esp32_rmt_led_strip.md rename to src/content/docs/components/light/esp32_rmt_led_strip.mdx index e881367992..7628f18766 100644 --- a/content/components/light/esp32_rmt_led_strip.md +++ b/src/content/docs/components/light/esp32_rmt_led_strip.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up addressable lights like NEOPIXEL on an ESP32 using the RMT peripheral." title: "ESP32 RMT LED Strip" -params: - seo: - description: Instructions for setting up addressable lights like NEOPIXEL on an ESP32 using the RMT peripheral. - image: color_lens.svg --- +import APIRef from '@components/APIRef.astro'; + This is a component using the ESP32 RMT peripheral to drive most addressable LED strips. @@ -72,7 +70,7 @@ light: - All other options from [Light](/components/light#config-light). -{{< anchor "esp32-rmt-led-strip-manual_timings" >}} + ### Manual Timings @@ -91,6 +89,6 @@ please consider adding support to the codebase and add it to the list above. ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "esp32_rmt_led_strip/esp32_rmt_led_strip.h" "esp32_rmt_led_strip/esp32_rmt_led_strip.h" >}} +- [Light Component](/components/light/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/light/fastled.md b/src/content/docs/components/light/fastled.mdx similarity index 78% rename from content/components/light/fastled.md rename to src/content/docs/components/light/fastled.mdx index 0130ef0cd7..6a5d781578 100644 --- a/content/components/light/fastled.md +++ b/src/content/docs/components/light/fastled.mdx @@ -1,14 +1,15 @@ --- description: "Instructions for setting up FastLED addressable lights like NEOPIXEL." title: "FastLED Light" -params: - seo: - description: Instructions for setting up FastLED addressable lights like NEOPIXEL. - image: color_lens.svg --- +import { Image } from 'astro:assets'; +import fastledClocklessUiImg from './images/fastled_clockless-ui.png'; +import fastledSpiUiImg from './images/fastled_spi-ui.png'; +import APIRef from '@components/APIRef.astro'; + > [!WARNING] -> FastLED does **not** work as expected with Arduino 3 or newer for ESP8266. For now, you can either downgrade the arduino version or use {{< docref "neopixelbus/" >}}. +> FastLED does **not** work as expected with Arduino 3 or newer for ESP8266. For now, you can either downgrade the arduino version or use [Neopixelbus](/components/light/neopixelbus/). > > ```yaml > esp8266: @@ -18,15 +19,15 @@ params: > > See these related issues: > -> - -> - +> - [FastLED/FastLED#1322](https://github.com/FastLED/FastLED/issues/1322) +> - [FastLED/FastLED#1264](https://github.com/FastLED/FastLED/issues/1264) > [!WARNING] > FastLED does **not** work with ESP-IDF. > -> For addressable lights, you can use {{< docref "esp32_rmt_led_strip/" >}} or for SPI LEDs see {{< docref "spi_led_strip/" >}}.. +> For addressable lights, you can use [Esp32 Rmt Led Strip](/components/light/esp32_rmt_led_strip/) or for SPI LEDs see [Spi Led Strip](/components/light/spi_led_strip/).. -{{< anchor "fastled-clockless" >}} + ## Clockless @@ -36,7 +37,7 @@ in ESPHome for a [number of supported chipsets](#fastled_clockless-chipsets). Clockless FastLED lights differ from the [SPI](#fastled-spi) in that they only have a single data wire to connect, and not separate data and clock wires. -{{< img src="fastled_clockless-ui.png" alt="Image" width="60.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -67,7 +68,7 @@ light: - All other options from [Light](/components/light#config-light). -{{< anchor "fastled_clockless-chipsets" >}} + ### Supported Chipsets @@ -97,20 +98,20 @@ light: - `UCS2903` - `SM16703` -{{< anchor "fastled-spi" >}} + ## SPI The `fastled_spi` light platform allows you to create RGB lights in ESPHome for a [number of supported chipsets](#fastled_spi-chipsets). -See {{< docref "/components/light/spi_led_strip" >}} for an alternative component that works on ESP-IDF (and Arduino.) +See [Spi Led Strip](/components/light/spi_led_strip/) for an alternative component that works on ESP-IDF (and Arduino.) SPI FastLED lights differ from the [Clockless](#fastled-clockless) in that they require two pins to be connected, one for a data and one for a clock signal whereas the clockless lights only need a single pin. -{{< img src="fastled_spi-ui.png" alt="Image" width="60.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -145,7 +146,7 @@ light: - **effects** (*Optional*, list): A list of [light effects](/components/light#light-effects) to use for this light. - All other options from [Light](/components/light#config-light). -{{< anchor "fastled_spi-chipsets" >}} + ### Supported Chipsets @@ -160,8 +161,8 @@ light: ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/light/spi_led_strip" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "fastled_base/fastled_light.h" "fastled_base/fastled_light.h" >}} +- [Light Component](/components/light/) +- [SPI LED Strip Light](/components/light/spi_led_strip/) +- [Power Supply Component](/components/power_supply/) - [Arduino FastLED library](https://github.com/FastLED/FastLED) +- diff --git a/content/components/light/hbridge.md b/src/content/docs/components/light/hbridge.mdx similarity index 74% rename from content/components/light/hbridge.md rename to src/content/docs/components/light/hbridge.mdx index 3a315ae062..e12996c843 100644 --- a/content/components/light/hbridge.md +++ b/src/content/docs/components/light/hbridge.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up a hbridge light." title: "H-bridge Light" -params: - seo: - description: Instructions for setting up a hbridge light. - image: brightness-medium.svg --- +import { Image } from 'astro:assets'; +import hbridgeUiImg from './images/hbridge-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `hbridge` light platform creates a dual color brightness controlled light from two -[float output component](/components/output#output). +[float output component](/components/output/). -{{< img src="hbridge-ui.png" alt="Image" width="40.0%" class="align-center" >}} + H-bridge lights are very common for Christmas lighting and they use 2 wires for a bunch of LEDs. The pins are switched alternatively to allow two sets of lights to operate. @@ -32,8 +32,8 @@ control the colors in the [light control actions](/components/light#light-turn_o ## Configuration variables -- **pin_a** (**Required**, [ID](/guides/configuration-types#id)): The id of the first float [Output Component](/components/output#output) to use for this light. -- **pin_b** (**Required**, [ID](/guides/configuration-types#id)): The id of the second float [Output Component](/components/output#output) to use for this light. +- **pin_a** (**Required**, [ID](/guides/configuration-types#id)): The id of the first float [Output Component](/components/output/) to use for this light. +- **pin_b** (**Required**, [ID](/guides/configuration-types#id)): The id of the second float [Output Component](/components/output/) to use for this light. - All other options from [Light](/components/light#config-light). > [!NOTE] @@ -41,6 +41,6 @@ control the colors in the [light control actions](/components/light#light-turn_o ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< apiref "hbridge/light/hbridge_light.h" "hbridge/light/hbridge_light.h" >}} +- [Light Component](/components/light/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- diff --git a/content/components/light/images/binary-ui.png b/src/content/docs/components/light/images/binary-ui.png similarity index 100% rename from content/components/light/images/binary-ui.png rename to src/content/docs/components/light/images/binary-ui.png diff --git a/content/components/light/images/fastled_clockless-ui.png b/src/content/docs/components/light/images/fastled_clockless-ui.png similarity index 100% rename from content/components/light/images/fastled_clockless-ui.png rename to src/content/docs/components/light/images/fastled_clockless-ui.png diff --git a/content/components/light/images/fastled_spi-ui.png b/src/content/docs/components/light/images/fastled_spi-ui.png similarity index 100% rename from content/components/light/images/fastled_spi-ui.png rename to src/content/docs/components/light/images/fastled_spi-ui.png diff --git a/content/components/light/images/hbridge-ui.png b/src/content/docs/components/light/images/hbridge-ui.png similarity index 100% rename from content/components/light/images/hbridge-ui.png rename to src/content/docs/components/light/images/hbridge-ui.png diff --git a/content/components/light/images/kitchen-lights.png b/src/content/docs/components/light/images/kitchen-lights.png similarity index 100% rename from content/components/light/images/kitchen-lights.png rename to src/content/docs/components/light/images/kitchen-lights.png diff --git a/content/components/light/images/monochromatic-detail.jpg b/src/content/docs/components/light/images/monochromatic-detail.jpg similarity index 100% rename from content/components/light/images/monochromatic-detail.jpg rename to src/content/docs/components/light/images/monochromatic-detail.jpg diff --git a/content/components/light/images/monochromatic-strip.jpg b/src/content/docs/components/light/images/monochromatic-strip.jpg similarity index 100% rename from content/components/light/images/monochromatic-strip.jpg rename to src/content/docs/components/light/images/monochromatic-strip.jpg diff --git a/content/components/light/images/rgb-detail.jpg b/src/content/docs/components/light/images/rgb-detail.jpg similarity index 100% rename from content/components/light/images/rgb-detail.jpg rename to src/content/docs/components/light/images/rgb-detail.jpg diff --git a/content/components/light/images/rgb-strip.jpg b/src/content/docs/components/light/images/rgb-strip.jpg similarity index 100% rename from content/components/light/images/rgb-strip.jpg rename to src/content/docs/components/light/images/rgb-strip.jpg diff --git a/content/components/light/images/rgb-ui.png b/src/content/docs/components/light/images/rgb-ui.png similarity index 100% rename from content/components/light/images/rgb-ui.png rename to src/content/docs/components/light/images/rgb-ui.png diff --git a/content/components/light/images/sonoff_d1_gpio0.jpg b/src/content/docs/components/light/images/sonoff_d1_gpio0.jpg similarity index 100% rename from content/components/light/images/sonoff_d1_gpio0.jpg rename to src/content/docs/components/light/images/sonoff_d1_gpio0.jpg diff --git a/content/components/light/images/sonoff_d1_serial.jpg b/src/content/docs/components/light/images/sonoff_d1_serial.jpg similarity index 100% rename from content/components/light/images/sonoff_d1_serial.jpg rename to src/content/docs/components/light/images/sonoff_d1_serial.jpg diff --git a/content/components/light/_index.md b/src/content/docs/components/light/index.mdx similarity index 96% rename from content/components/light/_index.md rename to src/content/docs/components/light/index.mdx index b38b11c09d..7b51059d42 100644 --- a/content/components/light/_index.md +++ b/src/content/docs/components/light/index.mdx @@ -1,18 +1,20 @@ --- description: "Instructions for setting up lights and light effects in ESPHome." title: "Light Component" -params: - seo: - description: Instructions for setting up lights and light effects in ESPHome. - image: folder-open.svg +sidebar: + label: "Light Component" --- +import APIClass from '@components/APIClass.astro'; +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + In ESPHome, `light` components allow you to create lights usable from Home Assistant's frontend and have many features such as colors, transitions and even effects. This component can restore its state on reboot/reset if configured to do so. -{{< anchor "config-light" >}} + ## Base Light Configuration @@ -76,7 +78,7 @@ light: maximum brightness of each channel. For example `[100%, 50%, 100%]` would set the green channel to be at most at 50% brightness. -- **power_supply** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/power_supply" >}} to connect to this light. When +- **power_supply** (*Optional*, [ID](/guides/configuration-types#id)): The [Power Supply](/components/power_supply/) to connect to this light. When the light is turned on, the power supply will automatically be switched on too. **Advanced options:** @@ -92,9 +94,9 @@ light: - If MQTT enabled, all other options from [MQTT Component](/components/mqtt#config-mqtt-component). - If Webserver enabled and [version 3](/components/web_server#config-webserver-version-3-options) is selected, all other options from - {{< docref "/components/web_server" >}}. + [Web Server](/components/web_server/). -{{< anchor "light-state_config" >}} + **Light state:** @@ -154,7 +156,7 @@ explicitly set them to zero. ## Light Automations -{{< anchor "light-toggle_action" >}} + ### `light.toggle` Action @@ -184,7 +186,7 @@ on_...: > call.perform(); > ``` -{{< anchor "light-turn_on_action" >}} + ### `light.turn_on` Action @@ -264,7 +266,7 @@ on_...: > white: 75% > ``` -{{< anchor "light-turn_off_action" >}} + ### `light.turn_off` Action @@ -296,7 +298,7 @@ on_...: > call.perform(); > ``` -{{< anchor "light-control_action" >}} + ### `light.control` Action @@ -317,7 +319,7 @@ on_...: - **state** (*Optional*, [templatable](/automations/templates), boolean): Change the ON/OFF state of the light. - All other options from [light state](#light-state_config). -{{< anchor "light-dim_relative_action" >}} + ### `light.dim_relative` Action @@ -373,7 +375,7 @@ on_...: > - delay: 0.1s > ``` -{{< anchor "light-addressable_set_action" >}} + ### `light.addressable_set` Action @@ -411,8 +413,8 @@ on_...: ## Light Conditions -{{< anchor "light-is_on_condition" >}} -{{< anchor "light-is_off_condition" >}} + + ### `light.is_on` / `light.is_off` Condition @@ -430,7 +432,7 @@ on_...: ## Light Triggers -{{< anchor "light-on_turn_on_off_trigger" >}} + ### `light.on_turn_on` / `light.on_turn_off` Trigger @@ -447,7 +449,7 @@ light: - logger.log: "Light Turned Off!" ``` -{{< anchor "light-on_state_trigger" >}} + ### `light.on_state` Trigger @@ -464,7 +466,7 @@ light: - logger.log: "Light State Changed!" ``` -{{< anchor "light-effects" >}} + ## Light Effects @@ -686,7 +688,7 @@ light: - **lambda** (**Required**, [lambda](/automations/templates#config-lambda)): The code to execute. `static` variables are especially useful. -{{< anchor "light-effect-get_name" >}} + #### Accessing Effect Names @@ -934,13 +936,13 @@ This effect allows you to access each LED individually in a custom light effect. Available variables in the lambda: -- **it** - {{< apiclass "AddressableLight" "light::AddressableLight" >}} instance (see API reference for more info). -- **current_color** - {{< apistruct "ESPColor" "light::ESPColor" >}} instance (see API reference for more info). +- **it** - instance (see API reference for more info). +- **current_color** - instance (see API reference for more info). - **initial_run** - A bool which is true on the first execution of the lambda. Useful to reset static variables when restarting an effect. > [!NOTE] -> ESPColor has been migrated to Color. See {{< apistruct "Color" "Color" >}} for more information. +> ESPColor has been migrated to Color. See for more information. ```yaml light: @@ -1034,7 +1036,7 @@ light: - **sequence** (*Optional*, [Action](/automations/actions#all-actions)): The actions to perform in sequence until the effect is stopped. -{{< anchor "e131-light-effect" >}} + ### E1.31 Effect @@ -1158,5 +1160,5 @@ The following realtime protocols are supported: ## See Also -- {{< apiref "light/light_state.h" "light/light_state.h" >}} - [WS2812FX library](https://github.com/kitesurfer1404/WS2812FX) by [@kitesurfer1404](https://github.com/kitesurfer1404) +- diff --git a/content/components/light/lvgl.md b/src/content/docs/components/light/lvgl.mdx similarity index 60% rename from content/components/light/lvgl.md rename to src/content/docs/components/light/lvgl.mdx index 76134cabfd..fdac4ff950 100644 --- a/content/components/light/lvgl.md +++ b/src/content/docs/components/light/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL widget light." title: "LVGL Light" -params: - seo: - description: Instructions for setting up an LVGL widget light. - image: ../images/lvgl_c_lig.png --- The `lvgl` light platform creates a light from an LVGL widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widget is [`led`](/components/lvgl/widgets#lvgl-widget-led). A single light supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome light component. @@ -31,12 +27,12 @@ light: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [LED widget](/components/lvgl/widgets#lvgl-widget-led) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) diff --git a/src/content/docs/components/light/monochromatic.mdx b/src/content/docs/components/light/monochromatic.mdx new file mode 100644 index 0000000000..bee9391e38 --- /dev/null +++ b/src/content/docs/components/light/monochromatic.mdx @@ -0,0 +1,51 @@ +--- +description: "Instructions for setting up monochromatic (brightness-only) lights." +title: "Monochromatic Light" +--- + +import { Image } from 'astro:assets'; +import monochromaticStripImg from './images/monochromatic-strip.jpg'; +import kitchenLightsImg from './images/kitchen-lights.png'; +import monochromaticDetailImg from './images/monochromatic-detail.jpg'; +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; + +The `monochromatic` light platform creates a simple brightness-only light from a +[float output component](/components/output/). + +
    + + + +```yaml +# Example configuration entry +light: + - platform: monochromatic + name: "Kitchen Lights" + output: output_component1 +``` + +## Configuration variables + +- **output** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for this light. +- All other options from [Light](/components/light#config-light). + +## See Also + + + +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [Binary Light](/components/light/binary/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- [MY9231/MY9291 LED driver](/components/output/my9231/) +- diff --git a/content/components/light/neopixelbus.md b/src/content/docs/components/light/neopixelbus.mdx similarity index 91% rename from content/components/light/neopixelbus.md rename to src/content/docs/components/light/neopixelbus.mdx index e9c60d3360..41305066ea 100644 --- a/content/components/light/neopixelbus.md +++ b/src/content/docs/components/light/neopixelbus.mdx @@ -1,21 +1,19 @@ --- description: "Instructions for setting up Neopixel addressable lights." title: "NeoPixelBus Light" -params: - seo: - description: Instructions for setting up Neopixel addressable lights. - image: color_lens.svg --- +import APIRef from '@components/APIRef.astro'; + > [!WARNING] > NeoPixelBus does **not** work with ESP-IDF. > -> For clockless lights, you can use {{< docref "esp32_rmt_led_strip/" >}}, and for SPI LEDs see {{< docref "spi_led_strip/" >}}. +> For clockless lights, you can use [Esp32 Rmt Led Strip](/components/light/esp32_rmt_led_strip/), and for SPI LEDs see [Spi Led Strip](/components/light/spi_led_strip/). The `neopixelbus` light platform allows you to create RGB lights in ESPHome for individually addressable lights like NeoPixel or WS2812. -It is very similar to the {{< docref "fastled/" >}} platform. +It is very similar to the [Fastled](/components/light/fastled/) platform. In fact, most addressable lights are supported through both light platforms. The difference is that they use different libraries: while the fastled platform uses the [FastLED](https://github.com/FastLED/FastLED) library, this component uses @@ -90,7 +88,7 @@ If you have one line, only specify `pin`, otherwise specify both `clock_pin` and > On ESP8266 it's highly recommended to connect the light strip to pin > GPIO3 to reduce flickering. -{{< anchor "neopixelbus-methods" >}} + ## Methods @@ -165,8 +163,8 @@ this method is no longer recommended, but documented here for reference purposes ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/light/fastled" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "neopixelbus/neopixelbus_light.h" "neopixelbus/neopixelbus_light.h" >}} +- [Light Component](/components/light/) +- [FastLED Light](/components/light/fastled/) +- [Power Supply Component](/components/power_supply/) - [NeoPixelBus library](https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods) +- diff --git a/content/components/light/partition.md b/src/content/docs/components/light/partition.mdx similarity index 88% rename from content/components/light/partition.md rename to src/content/docs/components/light/partition.mdx index 7e83f34950..19473b6052 100644 --- a/content/components/light/partition.md +++ b/src/content/docs/components/light/partition.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up light partitions." title: "Light Partition" -params: - seo: - description: Instructions for setting up light partitions. - image: color_lens.svg --- +import APIRef from '@components/APIRef.astro'; + The `partition` light platform allows you to combine multiple addressable light segments -(like {{< docref "fastled/" >}} or {{< docref "neopixelbus/" >}}) and/or individual lights (like {{< docref "rgb/" >}}) into a single addressable light. +(like [Fastled](/components/light/fastled/) or [Neopixelbus](/components/light/neopixelbus/)) and/or individual lights (like [Rgb](/components/light/rgb/)) into a single addressable light. This platform also allows splitting up an addressable light into multiple segments, so that segments can be individually controlled. @@ -116,7 +114,7 @@ light: ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/light/fastled" >}} -- {{< docref "/components/light/neopixelbus" >}} -- {{< apiref "partition/light_partition.h" "partition/light_partition.h" >}} +- [Light Component](/components/light/) +- [FastLED Light](/components/light/fastled/) +- [NeoPixelBus Light](/components/light/neopixelbus/) +- diff --git a/content/components/light/rgb.md b/src/content/docs/components/light/rgb.mdx similarity index 52% rename from content/components/light/rgb.md rename to src/content/docs/components/light/rgb.mdx index c8097b4304..9bb353699b 100644 --- a/content/components/light/rgb.md +++ b/src/content/docs/components/light/rgb.mdx @@ -1,18 +1,26 @@ --- description: "Instructions for setting up RGB lights in ESPHome." title: "RGB Light" -params: - seo: - description: Instructions for setting up RGB lights in ESPHome. - image: rgb.png --- -The `rgb` light platform creates an RGB light from 3 [float output components](/components/output#output) +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import rgbStripImg from './images/rgb-strip.jpg'; +import rgbUiImg from './images/rgb-ui.png'; +import rgbDetailImg from './images/rgb-detail.jpg'; +import APIRef from '@components/APIRef.astro'; + +The `rgb` light platform creates an RGB light from 3 [float output components](/components/output/) (one for each color channel). -{{< img src="rgb-strip.jpg" alt="Image" caption="Example of an RGB LED strip that can be used with this component." width="75.0%" class="align-center" >}} +
    -{{< img src="rgb-ui.png" alt="Image" width="40.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -52,25 +60,25 @@ output: ## Configuration variables -- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the red channel. -- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the green channel. -- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the blue channel. +- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the red channel. +- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the green channel. +- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the blue channel. - All other options from [Light](/components/light#config-light). ## See Also -{{< img src="rgb-detail.jpg" alt="Image" width="75.0%" class="align-center" >}} + -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/light/rgbct" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< docref "/components/output/my9231" >}} -- {{< docref "/components/output/sm16716" >}} -- {{< apiref "rgb/rgb_light_output.h" "rgb/rgb_light_output.h" >}} +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [RGBCT Light](/components/light/rgbct/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- [MY9231/MY9291 LED driver](/components/output/my9231/) +- [SM16716 LED driver](/components/output/sm16716/) +- diff --git a/content/components/light/rgbct.md b/src/content/docs/components/light/rgbct.mdx similarity index 62% rename from content/components/light/rgbct.md rename to src/content/docs/components/light/rgbct.mdx index e96f82cd31..ef3c945e1d 100644 --- a/content/components/light/rgbct.md +++ b/src/content/docs/components/light/rgbct.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up RGBCT lights." title: "RGBCT Light" -params: - seo: - description: Instructions for setting up RGBCT lights. - image: rgbw.png --- +import APIRef from '@components/APIRef.astro'; + The `rgbct` light platform creates an RGBWT (color temperature + white brightness) -light from 5 [float output components](/components/output#output) (one for each channel). +light from 5 [float output components](/components/output/) (one for each channel). ```yaml # Example configuration entry @@ -26,13 +24,13 @@ light: ## Configuration variables -- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the red channel. -- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the green channel. -- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the blue channel. -- **color_temperature** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the +- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the red channel. +- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the green channel. +- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the blue channel. +- **color_temperature** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the color temperature channel. -- **white_brightness** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the brightness +- **white_brightness** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the brightness of the white leds. - **cold_white_color_temperature** (**Required**, float): The coldest color temperature supported by this light. This @@ -50,16 +48,16 @@ light: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< docref "/components/output/my9231" >}} -- {{< docref "/components/output/sm16716" >}} -- {{< apiref "rgbct/rgbct_light_output.h" "rgbct/rgbct_light_output.h" >}} +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- [MY9231/MY9291 LED driver](/components/output/my9231/) +- [SM16716 LED driver](/components/output/sm16716/) +- diff --git a/content/components/light/rgbw.md b/src/content/docs/components/light/rgbw.mdx similarity index 67% rename from content/components/light/rgbw.md rename to src/content/docs/components/light/rgbw.mdx index a4381a0cb7..7ff122b824 100644 --- a/content/components/light/rgbw.md +++ b/src/content/docs/components/light/rgbw.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up RGB + White-Channel lights." title: "RGBW Light" -params: - seo: - description: Instructions for setting up RGB + White-Channel lights. - image: rgbw.png --- +import APIRef from '@components/APIRef.astro'; -The `rgbw` light platform creates an RGBW light from 4 [float output components](/components/output#output) (one for each channel). + +The `rgbw` light platform creates an RGBW light from 4 [float output components](/components/output/) (one for each channel). ```yaml # Example configuration entry @@ -46,7 +44,7 @@ output: > [!NOTE] > Remember that `gamma_correct` is enabled by default (`γ=2.8` ), and you may want take it into account for the calibration. For instance if you command a light to *50%* brightness and want it to be the new maximum: `max_PWM_power = max_light_power^2.8 = 0.5^2.8 = 0.144`, then you would set `max_power` to *14.4%*. -{{< anchor "rgbw_color_interlock" >}} + ## Color Interlock @@ -62,10 +60,10 @@ the `color_mode` option of the [light control actions](/components/light#light-t ## Configuration variables -- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the red channel. -- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the green channel. -- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the blue channel. -- **white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the white channel. +- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the red channel. +- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the green channel. +- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the blue channel. +- **white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the white channel. - **color_interlock** (*Optional*, boolean): When enabled, this will prevent white leds being on at the same time as RGB leds. See [Color Interlock](#rgbw_color_interlock) for more information. Defaults to `false`. @@ -73,18 +71,18 @@ the `color_mode` option of the [light control actions](/components/light#light-t ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/cwww" >}} -- {{< docref "/components/light/color_temperature" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/light/rgbct" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< docref "/components/output/my9231" >}} -- {{< docref "/components/output/sm16716" >}} -- {{< apiref "rgbw/rgb_light_output.h" "rgbw/rgb_light_output.h" >}} +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [Cold White + Warm White Light](/components/light/cwww/) +- [Color Temperature Light](/components/light/color_temperature/) +- [RGB Light](/components/light/rgb/) +- [RGBWW Light](/components/light/rgbww/) +- [RGBCT Light](/components/light/rgbct/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- [MY9231/MY9291 LED driver](/components/output/my9231/) +- [SM16716 LED driver](/components/output/sm16716/) +- diff --git a/content/components/light/rgbww.md b/src/content/docs/components/light/rgbww.mdx similarity index 79% rename from content/components/light/rgbww.md rename to src/content/docs/components/light/rgbww.mdx index 4b691f2c15..446ddf5a98 100644 --- a/content/components/light/rgbww.md +++ b/src/content/docs/components/light/rgbww.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up RGBWW lights." title: "RGBWW Light" -params: - seo: - description: Instructions for setting up RGBWW lights. - image: rgbw.png --- +import APIRef from '@components/APIRef.astro'; + The `rgbww` light platform creates an RGBWW (cold white + warm white) -light from 5 [float output components](/components/output#output) (one for each channel). The cold and warm +light from 5 [float output components](/components/output/) (one for each channel). The cold and warm white channels can be controlled individually or together, see [Mixing](/components/light/cwww#cwww_mixing) for more information. ```yaml @@ -65,13 +63,13 @@ the `color_mode` option of the [light control actions](/components/light#light-t ## Configuration variables -- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the red channel. -- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the green channel. -- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the blue channel. -- **cold_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the cold +- **red** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the red channel. +- **green** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the green channel. +- **blue** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the blue channel. +- **cold_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the cold white channel. -- **warm_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output#output) to use for the warm +- **warm_white** (**Required**, [ID](/guides/configuration-types#id)): The id of the float [Output Component](/components/output/) to use for the warm white channel. - **cold_white_color_temperature** (*Optional*, float): The color temperature (in @@ -94,15 +92,15 @@ the `color_mode` option of the [light control actions](/components/light#light-t ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< docref "/components/output/my9231" >}} -- {{< docref "/components/output/sm16716" >}} -- {{< apiref "rgbww/rgbww_light_output.h" "rgbww/rgbww_light_output.h" >}} +- [Output Component](/components/output/) +- [Light Component](/components/light/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [Power Supply Component](/components/power_supply/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- [MY9231/MY9291 LED driver](/components/output/my9231/) +- [SM16716 LED driver](/components/output/sm16716/) +- diff --git a/content/components/light/rp2040_pio_led_strip.md b/src/content/docs/components/light/rp2040_pio_led_strip.mdx similarity index 88% rename from content/components/light/rp2040_pio_led_strip.md rename to src/content/docs/components/light/rp2040_pio_led_strip.mdx index 77402bab17..10a32925b8 100644 --- a/content/components/light/rp2040_pio_led_strip.md +++ b/src/content/docs/components/light/rp2040_pio_led_strip.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up addressable lights like NEOPIXEL on an RP2040 using the PIO peripheral." title: "RP2040 PIO LED Strip" -params: - seo: - description: Instructions for setting up addressable lights like NEOPIXEL on an RP2040 using the PIO peripheral. - image: color_lens.svg --- This is a component using the RP2040 PIO peripheral to drive most addressable LED strips. @@ -57,5 +53,5 @@ please consider adding support to the codebase and add it to the list above. ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/power_supply" >}} +- [Light Component](/components/light/) +- [Power Supply Component](/components/power_supply/) diff --git a/content/components/light/shelly_dimmer.md b/src/content/docs/components/light/shelly_dimmer.mdx similarity index 90% rename from content/components/light/shelly_dimmer.md rename to src/content/docs/components/light/shelly_dimmer.mdx index 25f1b6ac3b..5c4129c6b9 100644 --- a/content/components/light/shelly_dimmer.md +++ b/src/content/docs/components/light/shelly_dimmer.mdx @@ -1,18 +1,17 @@ --- description: "Instructions for setting up a Shelly Dimmer 2." title: "Shelly Dimmer" -params: - seo: - description: Instructions for setting up a Shelly Dimmer 2. - image: shellydimmer2.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `shelly_dimmer` component adds support for the dimming and power-metering functionality that can be found the [Shelly Dimmer 2](https://shelly.cloud/knowledge-base/devices/shelly-dimmer-2/). The interaction with mains is done via an STM32 microcontroller that is automatically (when configured) flashed with an [open source firmware](https://github.com/jamesturton/shelly-dimmer-stm32). -A detailed analysis of the Shelly Dimmer 2 hardware is given on. +A detailed analysis of the Shelly Dimmer 2 hardware is given on [arendst/Tasmota#6914](https://github.com/arendst/Tasmota/issues/6914). Warning!!! At the time of writing there seems to be no way to revert back to the "stock firmware", because there seems to be no way to revert to firmware of the STM32 co-processor. -{{< img src="shellydimmer2.jpg" alt="Image" width="40.0%" class="align-center" >}} + An example of a configuration of this component: @@ -89,5 +88,5 @@ light: ## See Also -- {{< docref "/components/light" >}} -- {{< apiref "shelly_dimmer/light/shelly_dimmer.h" "shelly_dimmer/light/shelly_dimmer.h" >}} +- [Light Component](/components/light/) +- diff --git a/content/components/light/sonoff_d1.md b/src/content/docs/components/light/sonoff_d1.mdx similarity index 75% rename from content/components/light/sonoff_d1.md rename to src/content/docs/components/light/sonoff_d1.mdx index f1dc0e2e2a..828bda2d95 100644 --- a/content/components/light/sonoff_d1.md +++ b/src/content/docs/components/light/sonoff_d1.mdx @@ -1,18 +1,26 @@ --- description: "Instructions for setting up a Sonoff D1 dimmer switch." title: "Sonoff D1 Dimmer" -params: - seo: - description: Instructions for setting up a Sonoff D1 dimmer switch. - image: brightness-medium.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sonoffD1Gpio0Img from './images/sonoff_d1_gpio0.jpg'; +import sonoffD1SerialImg from './images/sonoff_d1_serial.jpg'; + The `sonoff_d1` light platform creates a simple brightness-only light for the hardware found in [Sonoff D1 dimmer](https://itead.cc/product/sonoff-d1-smart-dimmer-switch/). Installations with Sonoff RM433 433MHz radio remotes are also supported. Use this component to integrate Sonoff D1 dimmer into ESPHome / Home Assistant ecosystem. -{{< img src="sonoff_d1.jpg" alt="Image" caption="Sonoff D1 dimmer front and back view. Image by [ITEAD](https://itead.cc/product/sonoff-d1-smart-dimmer-switch/)." width="100.0%" class="align-center" >}} +
    Sonoff D1 uses another MCU for light dimming and handling of radio commands. It's hooked up to ESP8266 via UART bus with default RX / TX pins being used on @@ -22,16 +30,26 @@ translates between HA light commands and serial messages. To replace the stock firmware with ESPHome you will need to locate GPIO0 pin and serial port. Photos below should help. -{{< img src="sonoff_d1_gpio0.jpg" alt="Image" caption="Photo of GPIO 0, images by [klotzma](https://github.com/arendst/Tasmota/issues/7598#issuecomment-578433417)." width="100.0%" class="align-center" >}} +
    -{{< img src="sonoff_d1_serial.jpg" alt="Image" caption="Photo of serial port pins, images by [klotzma](https://github.com/arendst/Tasmota/issues/7598#issuecomment-578433417)." width="100.0%" class="align-center" >}} +
    Before using this components make sure: - board is configured to `esp8285` - [UART bus](/components/uart) is configured with default RX / TX pins and 9600 baud rate -- {{< docref "/components/logger" "logger" >}} to the serial port is disabled by setting `baud_rate` to `0` -- in case you need light state restoration on power up, make sure `restore_from_flash` is set to `true` in the {{< docref "/components/esp8266" "ESP8266 platform" >}} +- [logger](/components/logger/) to the serial port is disabled by setting `baud_rate` to `0` +- in case you need light state restoration on power up, make sure `restore_from_flash` is set to `true` in the [ESP8266 platform](/components/esp8266/) This component is useless for devices other than Sonoff D1 dimmer. @@ -103,7 +121,7 @@ light: ## See Also -- {{< docref "/components/light" >}} -- {{< docref "/components/uart" >}} -- {{< docref "/components/logger" >}} -- {{< docref "/components/esp8266" >}} +- [Light Component](/components/light/) +- [UART Bus](/components/uart/) +- [Logger Component](/components/logger/) +- [ESP8266 Platform](/components/esp8266/) diff --git a/content/components/light/spi_led_strip.md b/src/content/docs/components/light/spi_led_strip.mdx similarity index 69% rename from content/components/light/spi_led_strip.md rename to src/content/docs/components/light/spi_led_strip.mdx index 6ec874a28c..6ea9afb7a4 100644 --- a/content/components/light/spi_led_strip.md +++ b/src/content/docs/components/light/spi_led_strip.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up SPI LED RGB lights in ESPHome." title: "SPI LED Strip Light" -params: - seo: - description: Instructions for setting up SPI LED RGB lights in ESPHome. - image: ../components/light/images/apa102.jpg --- +import { Image } from 'astro:assets'; +import rgbDetailImg from './images/rgb-detail.jpg'; +import APIRef from '@components/APIRef.astro'; + The `spi_led_strip` light platform drives one or more SPI interfaced RGB LEDs. These LEDs are often used in strips, where each LED is individually addressable. This component requires an SPI interface to be configured. This component has been tested with APA102 LEDs and the P9813 LED driver. It should also work with HD107 and SK9822 type LEDs, or any others with a similar interface - SPI, 8 bits per colour and BGR ordering. -{{< img src="apa102.jpg" alt="Image" width="75.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -46,13 +46,13 @@ APA102 and friends do not have a `CS` input, and are write-only so the SPI `miso ## See Also -{{< img src="rgb-detail.jpg" alt="Image" width="75.0%" class="align-center" >}} + -- {{< docref "/components/light" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/pca9685" >}} -- {{< docref "/components/output/tlc59208f" >}} -- {{< docref "/components/output/my9231" >}} -- {{< docref "/components/output/sm16716" >}} -- {{< apiref "rgb/rgb_light_output.h" "rgb/rgb_light_output.h" >}} +- [Light Component](/components/light/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [PCA9685](/components/output/pca9685/) +- [TLC59208F](/components/output/tlc59208f/) +- [MY9231/MY9291 LED driver](/components/output/my9231/) +- [SM16716 LED driver](/components/output/sm16716/) +- diff --git a/content/components/light/status_led.md b/src/content/docs/components/light/status_led.mdx similarity index 68% rename from content/components/light/status_led.md rename to src/content/docs/components/light/status_led.mdx index e5eb57d0e7..8735111c12 100644 --- a/content/components/light/status_led.md +++ b/src/content/docs/components/light/status_led.mdx @@ -1,19 +1,17 @@ --- description: "Instructions for setting up a Status LED shared also as binary ON/OFF light in ESPHome." title: "Status LED Light" -params: - seo: - description: Instructions for setting up a Status LED shared also as binary ON/OFF light in ESPHome. - image: led-on.svg --- +import APIRef from '@components/APIRef.astro'; + The `status_led` light platform allows a single LED to indicate the status of the device (such as an error/warning state) or as a binary light (such as an OK state). This is useful for devices with only one LED available. -You can also use a binary [Output Component](/components/output#output). +You can also use a binary [Output Component](/components/output/). -It provides the combined functionality of {{< docref "/components/status_led" "status_led component" >}} and a -{{< docref "/components/light/binary" "binary light component" >}} over a single shared GPIO led. +It provides the combined functionality of [status_led component](/components/status_led/) and a +[binary light component](/components/light/binary/) over a single shared GPIO led. When the device is in error/warning state, the function of `status_led` will take precedence and control the blinking of the LED. When the device is in OK state, the LED will be restored to the state of the `binary light` function and can be controlled as such. @@ -35,7 +33,7 @@ light: ## Configuration variables - **pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The GPIO pin to control the LED on. -- **output** (*Optional*, [ID](/guides/configuration-types#id)): The id of the binary [Output Component](/components/output#output) to use for this light. +- **output** (*Optional*, [ID](/guides/configuration-types#id)): The id of the binary [Output Component](/components/output/) to use for this light. - All other options from [Light](/components/light#config-light). > [!NOTE] @@ -50,7 +48,7 @@ light: ## See Also -- {{< docref "/components/status_led" >}} -- {{< docref "/components/light/binary" >}} -- {{< docref "/components/light" >}} -- {{< apiref "status_led/light/status_led_light.h" "status_led/light/status_led_light.h" >}} +- [Status LED](/components/status_led/) +- [Binary Light](/components/light/binary/) +- [Light Component](/components/light/) +- diff --git a/content/components/light/tuya.md b/src/content/docs/components/light/tuya.mdx similarity index 91% rename from content/components/light/tuya.md rename to src/content/docs/components/light/tuya.mdx index cb0bce62ff..41ecfd7514 100644 --- a/content/components/light/tuya.md +++ b/src/content/docs/components/light/tuya.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a Tuya dimmer switch." title: "Tuya Dimmer" -params: - seo: - description: Instructions for setting up a Tuya dimmer switch. - image: brightness-medium.svg --- +import APIRef from '@components/APIRef.astro'; + The `tuya` light platform creates a simple brightness-only light from a tuya serial component. @@ -17,7 +15,7 @@ tuya serial component. > The dimmer switch I got would hang if the logger was configured to use the serial port > which meant it was bricked until I cut it open. -This requires the {{< docref "/components/tuya" >}} component to be set up before you can use this platform. +This requires the [Tuya](/components/tuya/) component to be set up before you can use this platform. Here is an example output for a Tuya dimmer: @@ -97,6 +95,6 @@ light: ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/light" >}} -- {{< apiref "tuya/light/tuya_light.h" "tuya/light/tuya_light.h" >}} +- [Tuya MCU](/components/tuya/) +- [Light Component](/components/light/) +- diff --git a/content/components/lightwaverf.md b/src/content/docs/components/lightwaverf.mdx similarity index 89% rename from content/components/lightwaverf.md rename to src/content/docs/components/lightwaverf.mdx index d9cc6bc56f..9580ec1214 100644 --- a/content/components/lightwaverf.md +++ b/src/content/docs/components/lightwaverf.mdx @@ -1,15 +1,14 @@ --- description: "LightWaveRF Switch Lights" title: "LightWaveRF" -params: - seo: - description: LightWaveRF Switch Lights - image: brightness-medium.svg --- +import { Image } from 'astro:assets'; +import lightwaverfImg from './images/lightwaverf.jpg'; + The `LightWaveRF` light platform creates a module to dump and send commands to light switches -{{< img src="lightwaverf.jpg" alt="Image" width="40.0%" class="align-center" >}} + LightwaveRF switches are very common in UK automation. They allow control of lights, sockets, relays and more via RF remote or via a hub. Using an inexpensive RF transmitter and receiver you can control your devices via ESPHome. @@ -66,4 +65,4 @@ Compatible receiver: ## See Also -- {{< docref "/components/light" >}} +- [Light Component](/components/light/) diff --git a/content/components/lock/_index.md b/src/content/docs/components/lock/index.mdx similarity index 87% rename from content/components/lock/_index.md rename to src/content/docs/components/lock/index.mdx index 64a499c531..61f7a17b00 100644 --- a/content/components/lock/_index.md +++ b/src/content/docs/components/lock/index.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up generic locks in ESPHome." title: "Lock Component" -params: - seo: - description: Instructions for setting up generic locks in ESPHome. - image: folder-open.svg +sidebar: + label: "Lock Component" --- +import APIRef from '@components/APIRef.astro'; + The `lock` domain includes all platforms that should function like a lock with lock/unlock actions. -{{< anchor "config-lock" >}} + ## Base Lock Configuration @@ -47,13 +47,13 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - If MQTT enabled, All other options from [MQTT Component](/components/mqtt#config-mqtt-component). - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). -{{< anchor "lock-lock_action" >}} + ### `lock.lock` Action @@ -65,7 +65,7 @@ on_...: - lock.lock: deadbolt_1 ``` -{{< anchor "lock-unlock_action" >}} + ### `lock.unlock` Action @@ -77,7 +77,7 @@ on_...: - lock.unlock: deadbolt_1 ``` -{{< anchor "lock-open_action" >}} + ### `lock.open` Action @@ -89,8 +89,8 @@ on_...: - lock.open: doorlock_1 ``` -{{< anchor "lock-is_locked_condition" >}} -{{< anchor "lock-is_unlocked_condition" >}} + + ### `lock.is_locked` / `lock.is_unlocked` Condition @@ -105,7 +105,7 @@ on_...: lock.is_locked: my_lock ``` -{{< anchor "lock-lambda_calls" >}} + ### lambda calls @@ -140,7 +140,7 @@ advanced stuff (see the full API Reference for more info). id(my_lock).open(); ``` -{{< anchor "lock-on_lock_unlock_trigger" >}} + ### `lock.on_lock` / `lock.on_unlock` Trigger @@ -159,4 +159,4 @@ lock: ## See Also -- {{< apiref "lock/lock.h" "lock/lock.h" >}} +- diff --git a/content/components/lock/output.md b/src/content/docs/components/lock/output.mdx similarity index 64% rename from content/components/lock/output.md rename to src/content/docs/components/lock/output.mdx index 4c74cc5f36..b005ceefcf 100644 --- a/content/components/lock/output.md +++ b/src/content/docs/components/lock/output.mdx @@ -1,15 +1,14 @@ --- description: "Instructions for setting up generic output locks in ESPHome that control an output component." title: "Generic Output Lock" -params: - seo: - description: Instructions for setting up generic output locks in ESPHome that control an output component. - image: upload.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `output` lock platform allows you to use any output component as a lock. -{{< img src="output-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -30,5 +29,5 @@ lock: ## See Also -- {{< docref "/components/output" >}} -- {{< apiref "output/lock/output_lock.h" "output/lock/output_lock.h" >}} +- [Output Component](/components/output/) +- diff --git a/content/components/lock/template.md b/src/content/docs/components/lock/template.mdx similarity index 89% rename from content/components/lock/template.md rename to src/content/docs/components/lock/template.mdx index 59155086e7..1b520917e7 100644 --- a/content/components/lock/template.md +++ b/src/content/docs/components/lock/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template locks that can execute arbitrary actions when locked, unlocked, or opened" title: "Template Lock" -params: - seo: - description: Instructions for setting up template locks that can execute arbitrary actions when locked, unlocked, or opened - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` lock platform allows you to create simple locks out of just actions and an optional value lambda. Once defined, it will automatically appear in Home Assistant @@ -63,7 +61,7 @@ Possible return values for the optional lambda: - All other options from [Lock](/components/lock#config-lock). -{{< anchor "lock-template-publish_action" >}} + ## `lock.template.publish` Action @@ -105,7 +103,7 @@ Configuration options: ## See Also -- {{< docref "/automations" >}} -- {{< docref "/components/lock" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "template/lock/template_lock.h" "template/lock/template_lock.h" >}} +- [Automation](/automations/) +- [Lock Component](/components/lock/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/logger.md b/src/content/docs/components/logger.mdx similarity index 94% rename from content/components/logger.md rename to src/content/docs/components/logger.mdx index c84607fbfb..eb4b10e59d 100644 --- a/content/components/logger.md +++ b/src/content/docs/components/logger.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up the central logging component in ESPHome." title: "Logger Component" -params: - seo: - description: Instructions for setting up the central logging component in ESPHome. - image: file-document-box.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "logger" >}} + + The logger component automatically logs all log messages through the serial port and through MQTT topics (if there is an MQTT client in the @@ -70,7 +68,7 @@ Advanced settings: Note: Deassert typically means a TTL high level level since RTS/DTR are usually low active signals. -{{< anchor "logger-hardware_uarts" >}} + ## Hardware UARTs @@ -99,7 +97,7 @@ so if you use any other configuration you will not get log messages over the on- *Undefined* means that the logger component cannot use this hardware UART at this time. -{{< anchor "logger-default_hardware_interfaces" >}} + ## Default Hardware Interfaces @@ -122,7 +120,7 @@ the original ESP32 or ESP8266) continue to use USB-to-serial bridge ICs for comm | RP2040 | `USB_CDC` | | NRF52 | `USB_CDC` | -{{< anchor "logger-log_levels" >}} + ## Log Levels @@ -141,7 +139,7 @@ Possible log levels are (sorted by severity): > [!WARNING] > Using `VERY_VERBOSE` can significantly impact device performance and may cause connection instability. -{{< anchor "logger-manual_tag_specific_levels" >}} + ## Manual Tag-Specific Log Levels @@ -178,7 +176,7 @@ logger: Here, `VERBOSE` logs are compiled, but not shown (because of `initial_level: ERROR`) However, the `wifi` tag has `VERBOSE` level enabled, and shown. -{{< anchor "logger-log_action" >}} + ## `logger.log` Action @@ -233,7 +231,7 @@ on_...: ## Logger Automation -{{< anchor "logger-on_message" >}} + ### `on_message` @@ -259,7 +257,7 @@ logger: ## See Also -- {{< docref "/components/uart" >}} -- {{< docref "/components/select/logger" >}} -- {{< docref "/guides/troubleshooting" >}} - Troubleshooting guide for debugging crashes and boot failures -- {{< apiref "logger/logger.h" "logger/logger.h" >}} +- [UART Bus](/components/uart/) +- [Logger Select](/components/select/logger/) +- [Troubleshooting](/guides/troubleshooting/) - Troubleshooting guide for debugging crashes and boot failures +- diff --git a/content/components/lvgl/images/canvas.png b/src/content/docs/components/lvgl/images/canvas.png similarity index 100% rename from content/components/lvgl/images/canvas.png rename to src/content/docs/components/lvgl/images/canvas.png diff --git a/content/components/lvgl/images/lvgl_align.png b/src/content/docs/components/lvgl/images/lvgl_align.png similarity index 100% rename from content/components/lvgl/images/lvgl_align.png rename to src/content/docs/components/lvgl/images/lvgl_align.png diff --git a/content/components/lvgl/images/lvgl_animimg.gif b/src/content/docs/components/lvgl/images/lvgl_animimg.gif similarity index 100% rename from content/components/lvgl/images/lvgl_animimg.gif rename to src/content/docs/components/lvgl/images/lvgl_animimg.gif diff --git a/content/components/lvgl/images/lvgl_arc.png b/src/content/docs/components/lvgl/images/lvgl_arc.png similarity index 100% rename from content/components/lvgl/images/lvgl_arc.png rename to src/content/docs/components/lvgl/images/lvgl_arc.png diff --git a/content/components/lvgl/images/lvgl_bar.png b/src/content/docs/components/lvgl/images/lvgl_bar.png similarity index 100% rename from content/components/lvgl/images/lvgl_bar.png rename to src/content/docs/components/lvgl/images/lvgl_bar.png diff --git a/content/components/lvgl/images/lvgl_baseobj.png b/src/content/docs/components/lvgl/images/lvgl_baseobj.png similarity index 100% rename from content/components/lvgl/images/lvgl_baseobj.png rename to src/content/docs/components/lvgl/images/lvgl_baseobj.png diff --git a/content/components/lvgl/images/lvgl_boxmodel.png b/src/content/docs/components/lvgl/images/lvgl_boxmodel.png similarity index 100% rename from content/components/lvgl/images/lvgl_boxmodel.png rename to src/content/docs/components/lvgl/images/lvgl_boxmodel.png diff --git a/content/components/lvgl/images/lvgl_button.png b/src/content/docs/components/lvgl/images/lvgl_button.png similarity index 100% rename from content/components/lvgl/images/lvgl_button.png rename to src/content/docs/components/lvgl/images/lvgl_button.png diff --git a/content/components/lvgl/images/lvgl_buttonmatrix.png b/src/content/docs/components/lvgl/images/lvgl_buttonmatrix.png similarity index 100% rename from content/components/lvgl/images/lvgl_buttonmatrix.png rename to src/content/docs/components/lvgl/images/lvgl_buttonmatrix.png diff --git a/content/components/lvgl/images/lvgl_checkbox.png b/src/content/docs/components/lvgl/images/lvgl_checkbox.png similarity index 100% rename from content/components/lvgl/images/lvgl_checkbox.png rename to src/content/docs/components/lvgl/images/lvgl_checkbox.png diff --git a/content/components/lvgl/images/lvgl_dropdown.png b/src/content/docs/components/lvgl/images/lvgl_dropdown.png similarity index 100% rename from content/components/lvgl/images/lvgl_dropdown.png rename to src/content/docs/components/lvgl/images/lvgl_dropdown.png diff --git a/content/components/lvgl/images/lvgl_grid_layout.png b/src/content/docs/components/lvgl/images/lvgl_grid_layout.png similarity index 100% rename from content/components/lvgl/images/lvgl_grid_layout.png rename to src/content/docs/components/lvgl/images/lvgl_grid_layout.png diff --git a/content/components/lvgl/images/lvgl_image.png b/src/content/docs/components/lvgl/images/lvgl_image.png similarity index 100% rename from content/components/lvgl/images/lvgl_image.png rename to src/content/docs/components/lvgl/images/lvgl_image.png diff --git a/content/components/lvgl/images/lvgl_keyboard.png b/src/content/docs/components/lvgl/images/lvgl_keyboard.png similarity index 100% rename from content/components/lvgl/images/lvgl_keyboard.png rename to src/content/docs/components/lvgl/images/lvgl_keyboard.png diff --git a/content/components/lvgl/images/lvgl_label.png b/src/content/docs/components/lvgl/images/lvgl_label.png similarity index 100% rename from content/components/lvgl/images/lvgl_label.png rename to src/content/docs/components/lvgl/images/lvgl_label.png diff --git a/content/components/lvgl/images/lvgl_led.png b/src/content/docs/components/lvgl/images/lvgl_led.png similarity index 100% rename from content/components/lvgl/images/lvgl_led.png rename to src/content/docs/components/lvgl/images/lvgl_led.png diff --git a/content/components/lvgl/images/lvgl_line.png b/src/content/docs/components/lvgl/images/lvgl_line.png similarity index 100% rename from content/components/lvgl/images/lvgl_line.png rename to src/content/docs/components/lvgl/images/lvgl_line.png diff --git a/content/components/lvgl/images/lvgl_main_screenshot.png b/src/content/docs/components/lvgl/images/lvgl_main_screenshot.png similarity index 100% rename from content/components/lvgl/images/lvgl_main_screenshot.png rename to src/content/docs/components/lvgl/images/lvgl_main_screenshot.png diff --git a/content/components/lvgl/images/lvgl_meter.png b/src/content/docs/components/lvgl/images/lvgl_meter.png similarity index 100% rename from content/components/lvgl/images/lvgl_meter.png rename to src/content/docs/components/lvgl/images/lvgl_meter.png diff --git a/content/components/lvgl/images/lvgl_msgbox.png b/src/content/docs/components/lvgl/images/lvgl_msgbox.png similarity index 100% rename from content/components/lvgl/images/lvgl_msgbox.png rename to src/content/docs/components/lvgl/images/lvgl_msgbox.png diff --git a/content/components/lvgl/images/lvgl_roller.png b/src/content/docs/components/lvgl/images/lvgl_roller.png similarity index 100% rename from content/components/lvgl/images/lvgl_roller.png rename to src/content/docs/components/lvgl/images/lvgl_roller.png diff --git a/content/components/lvgl/images/lvgl_slider.png b/src/content/docs/components/lvgl/images/lvgl_slider.png similarity index 100% rename from content/components/lvgl/images/lvgl_slider.png rename to src/content/docs/components/lvgl/images/lvgl_slider.png diff --git a/content/components/lvgl/images/lvgl_spinbox.png b/src/content/docs/components/lvgl/images/lvgl_spinbox.png similarity index 100% rename from content/components/lvgl/images/lvgl_spinbox.png rename to src/content/docs/components/lvgl/images/lvgl_spinbox.png diff --git a/content/components/lvgl/images/lvgl_spinner.gif b/src/content/docs/components/lvgl/images/lvgl_spinner.gif similarity index 100% rename from content/components/lvgl/images/lvgl_spinner.gif rename to src/content/docs/components/lvgl/images/lvgl_spinner.gif diff --git a/content/components/lvgl/images/lvgl_symbols.png b/src/content/docs/components/lvgl/images/lvgl_symbols.png similarity index 100% rename from content/components/lvgl/images/lvgl_symbols.png rename to src/content/docs/components/lvgl/images/lvgl_symbols.png diff --git a/content/components/lvgl/images/lvgl_tabview.png b/src/content/docs/components/lvgl/images/lvgl_tabview.png similarity index 100% rename from content/components/lvgl/images/lvgl_tabview.png rename to src/content/docs/components/lvgl/images/lvgl_tabview.png diff --git a/content/components/lvgl/images/lvgl_textarea.png b/src/content/docs/components/lvgl/images/lvgl_textarea.png similarity index 100% rename from content/components/lvgl/images/lvgl_textarea.png rename to src/content/docs/components/lvgl/images/lvgl_textarea.png diff --git a/content/components/lvgl/_index.md b/src/content/docs/components/lvgl/index.mdx similarity index 88% rename from content/components/lvgl/_index.md rename to src/content/docs/components/lvgl/index.mdx index b62025dbeb..0d0a0738c3 100644 --- a/content/components/lvgl/_index.md +++ b/src/content/docs/components/lvgl/index.mdx @@ -1,16 +1,19 @@ --- description: "LVGL - ESPHome Displays showing contents created with Light and Versatile Graphics Library" title: "LVGL Graphics" -params: - seo: - description: LVGL - ESPHome Displays showing contents created with Light and Versatile Graphics Library - image: /images/lvgl.png +sidebar: + label: "LVGL Graphics" --- +import { Image } from 'astro:assets'; +import lvglMainScreenshotImg from './images/lvgl_main_screenshot.png'; +import lvglSymbolsImg from './images/lvgl_symbols.png'; +import lvglBoxmodelImg from './images/lvgl_boxmodel.png'; + [LVGL](https://lvgl.io/) (Light and Versatile Graphics Library) is a free and open-source embedded graphics library to create beautiful UIs for any MCU, MPU and display type. ESPHome supports [LVGL version 8](https://docs.lvgl.io/8.4/). -{{< img src="lvgl_main_screenshot.png" alt="Image" >}} + ## Prerequisites @@ -21,7 +24,7 @@ The LVGL component will take care of the display rendering. For most displays, t set to `never`, but note that some displays such as OLED and e-paper will need the update interval set to a suitable interval, or make use of the [`on_draw_end`](#on_draw_end) trigger to manually update the display. -For interactivity, a {{< docref "/components/touchscreen/index" "Touchscreen" >}} (capacitive highly preferred), a {{< docref "/components/sensor/rotary_encoder" >}} or a custom keypad made up from discrete {{< docref "/components/binary_sensor/index" "Binary Sensors" >}} can be used. +For interactivity, a [Touchscreen](/components/touchscreen/) (capacitive highly preferred), a [Rotary Encoder](/components/sensor/rotary_encoder/) or a custom keypad made up from discrete [Binary Sensors](/components/binary_sensor/) can be used. Check out the detailed examples in [the Cookbook](/cookbook/lvgl#lvgl-cookbook) which demonstrate a number of ways you can integrate your environment with LVGL and ESPHome. @@ -40,7 +43,7 @@ display: update_interval: never ``` -{{< img src="lvgl-hello.png" width="400" >}} + To make LVGL your own you will need to add widgets to the display. For example, to show a label with the text "Hello World!" in the center of the screen: @@ -56,7 +59,7 @@ Now read on to learn more about the configuration options and how to customize y ## Basics -In LVGL, graphical elements like buttons, labels, sliders, etc. are called widgets or objects. See {{< docref "/components/lvgl/widgets" >}} for a complete list of widgets supported within ESPHome. Not all LVGL widgets are implemented, just those commonly used to support home automation needs/tasks. +In LVGL, graphical elements like buttons, labels, sliders, etc. are called widgets or objects. See [Widgets](/components/lvgl/widgets/) for a complete list of widgets supported within ESPHome. Not all LVGL widgets are implemented, just those commonly used to support home automation needs/tasks. Every widget has a parent object where it is created. For example, if a label is created on a button, the button is the parent of the label. Complex widgets internally consist of several smaller/simpler widgets; these are known as parts, each of which can have separate properties from the main widget. @@ -68,12 +71,12 @@ Some widgets integrate also as native ESPHome components: | LVGL Widget | ESPHome component | | -------------------------- | ------------------------------------------------------------------------------------------------------------------ | -| `button` | {{< docref "/components/switch/lvgl" "Switch" >}}, {{< docref "/components/binary_sensor/lvgl" "Binary Sensor" >}} | -| `switch` , `checkbox` | {{< docref "/components/switch/lvgl" "Switch" >}} | -| `slider`, `arc`, `spinbox` | {{< docref "/components/number/lvgl" "Number" >}}, {{< docref "/components/sensor/lvgl" "Sensor" >}} | -| `dropdown`, `roller` | {{< docref "/components/select/lvgl" "Select" >}} | -| `label`, `textarea` | {{< docref "/components/text/lvgl" "Text" >}}, {{< docref "/components/text_sensor/lvgl" "Text Sensor" >}} | -| `led` | {{< docref "/components/light/lvgl" "Light" >}} | +| `button` | [Switch](/components/switch/lvgl/), [Binary Sensor](/components/binary_sensor/lvgl/) | +| `switch` , `checkbox` | [Switch](/components/switch/lvgl/) | +| `slider`, `arc`, `spinbox` | [Number](/components/number/lvgl/), [Sensor](/components/sensor/lvgl/) | +| `dropdown`, `roller` | [Select](/components/select/lvgl/) | +| `label`, `textarea` | [Text](/components/text/lvgl/), [Text Sensor](/components/text_sensor/lvgl/) | +| `led` | [Light](/components/light/lvgl/) | These are useful with [Home Assistant automations](https://www.home-assistant.io/docs/automation/) interacting directly with the widgets. @@ -93,28 +96,28 @@ The following configuration variables apply to the main `lvgl` component, in ord - **long_press_time** (*Optional*, [Time](/guides/configuration-types#time)): For the touchscreen, delay after which the `on_long_pressed` [interaction trigger](/components/lvgl/widgets#lvgl-automation-triggers) will be called. Defaults to `400ms`. - **long_press_repeat_time** (*Optional*, [Time](/guides/configuration-types#time)): For the touchscreen, repeated interval after `long_press_time`, when `on_long_pressed_repeat` [interaction trigger](/components/lvgl/widgets#lvgl-automation-triggers) will be called. Defaults to `100ms`. - **encoders** (*Optional*, list): A list of rotary encoders interacting with the LVGL widgets on the display. - - **group** (*Optional*, string): A name for a group of widgets which will interact with the input device. See the {{< docref "/components/lvgl/widgets" "common properties" >}} of the widgets for more information on groups. + - **group** (*Optional*, string): A name for a group of widgets which will interact with the input device. See the [common properties](/components/lvgl/widgets/) of the widgets for more information on groups. - **initial_focus** (*Optional*, [ID](/guides/configuration-types#id)): An optional ID for a widget to be given focus on startup (especially useful if there is only one focusable widget.) - - **enter_button** (**Required**, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `ENTER` key. - - **sensor** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/sensor/rotary_encoder" >}}; or a list with buttons for left/right interaction with the widgets: - - **left_button** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `LEFT` key. - - **right_button** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `RIGHT` key. + - **enter_button** (**Required**, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `ENTER` key. + - **sensor** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Rotary Encoder](/components/sensor/rotary_encoder/); or a list with buttons for left/right interaction with the widgets: + - **left_button** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `LEFT` key. + - **right_button** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `RIGHT` key. - **long_press_time** (*Optional*, [Time](/guides/configuration-types#time)): For the rotary encoder, delay after which the `on_long_pressed` [interaction trigger](/components/lvgl/widgets#lvgl-automation-triggers) will be called. Defaults to `400ms`. Can be disabled with `never`. - **long_press_repeat_time** (*Optional*, [Time](/guides/configuration-types#time)): For the rotary encoder, repeated interval after `long_press_time`, when `on_long_pressed_repeat` [interaction trigger](/components/lvgl/widgets#lvgl-automation-triggers) will be called. Defaults to `100ms`. Can be disabled with `never`. - **keypads** (*Optional*, list): A list of keypads interacting with the LVGL widgets on the display. - - **group** (*Optional*, string): A name for a group of widgets which will interact with the input device. See the {{< docref "/components/lvgl/widgets" "common properties" >}} of the widgets for more information on groups. - - **up** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `UP` key. - - **down** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `DOWN` key. - - **right** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `RIGHT` key. - - **left** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `LEFT` key. - - **esc** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `ESC` key. - - **del** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `DEL` key. - - **backspace** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `BACKSPACE` key. - - **enter** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `ENTER` key. - - **next** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `NEXT` key. - - **prev** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `PREV` key. - - **home** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `HOME` key. - - **end** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a {{< docref "/components/binary_sensor/index" "Binary Sensor" >}}, to be used as `END` key. + - **group** (*Optional*, string): A name for a group of widgets which will interact with the input device. See the [common properties](/components/lvgl/widgets/) of the widgets for more information on groups. + - **up** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `UP` key. + - **down** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `DOWN` key. + - **right** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `RIGHT` key. + - **left** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `LEFT` key. + - **esc** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `ESC` key. + - **del** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `DEL` key. + - **backspace** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `BACKSPACE` key. + - **enter** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `ENTER` key. + - **next** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `NEXT` key. + - **prev** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `PREV` key. + - **home** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `HOME` key. + - **end** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a [Binary Sensor](/components/binary_sensor/), to be used as `END` key. - **long_press_time** (*Optional*, [Time](/guides/configuration-types#time)): For the keypad, delay after which the `on_long_pressed` [interaction trigger](/components/lvgl/widgets#lvgl-automation-triggers) will be called. Defaults to `400ms`. Can be disabled with `never`. - **long_press_repeat_time** (*Optional*, [Time](/guides/configuration-types#time)): For the keypad, repeated interval after `long_press_time`, when `on_long_pressed_repeat` [interaction trigger](/components/lvgl/widgets#lvgl-automation-triggers) will be called. Defaults to `100ms`. Can be disabled with `never`. @@ -131,7 +134,7 @@ The following configuration variables apply to the main `lvgl` component, in ord > - If you press the encoder on a complex object (like a list, message box, etc.) the object will go to edit mode whereby you can adjust the value of the object by turning the encoder. > - To leave edit mode, long press the button. -- **update_when_display_idle** (*Optional*, boolean): When using the {{< docref "/components/display/epaper_spi" >}} +- **update_when_display_idle** (*Optional*, boolean): When using the [Epaper Spi](/components/display/epaper_spi/) or other displays with long update times, setting this option to `true` will cause the display to only be updated if the display is idle. During the update LVGL will pause. The display `update_interval` should be set to `never` when this is used, as the display will be updated automatically @@ -149,16 +152,16 @@ The following configuration variables apply to the main `lvgl` component, in ord - **style_definitions** (*Optional*, list): A batch of style definitions to use in LVGL widget's `styles` configuration. See [below](#lvgl-theme) for more details. - **gradients** (*Optional*, list): A list of gradient definitions to use in *bg_grad* styles. See [below](#lvgl-gradients) for more details. - **theme** (*Optional*, list): A list of styles to be applied to all widgets. See [below](#lvgl-theme) for more details. -- **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the root display. May not be used if `pages` (below) is configured. +- **widgets** (*Optional*, list): A list of [Widgets](/components/lvgl/widgets/) to be drawn on the root display. May not be used if `pages` (below) is configured. - **pages** (*Optional*, list): A list of page IDs. Each page acts as a parent for widgets placed on it. May not be used with `widgets` (above). Options for each page: - **skip** (*Optional*, boolean): Option to skip this page when navigating between them with [`lvgl.page.next`, `lvgl.page.previous`](#lvgl-page-next-previous-action). - **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - - **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the page. + - **widgets** (*Optional*, list): A list of [Widgets](/components/lvgl/widgets/) to be drawn on the page. - All other options from [Style properties](#lvgl-styling) to be applied to this page. - **page_wrap** (*Optional*, boolean): Wrap from the last to the first page when navigating between them with [`lvgl.page.next`, `lvgl.page.previous`](#lvgl-page-next-previous-action). Defaults to `true`. - **top_layer** (*Optional*, list): A special kind of *Always on Top* page, which acts as a parent for widgets placed on it. It's shown above all the pages, which may be useful for widgets which always need to be visible. - **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - - **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the page. + - **widgets** (*Optional*, list): A list of [Widgets](/components/lvgl/widgets/) to be drawn on the page. - All other options from [Style properties](#lvgl-styling) to be applied to this page. - **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - All other options from [Style properties](#lvgl-styling) to be applied to all widgets directly. @@ -196,7 +199,7 @@ A buffer size less than 100% can also be useful when PSRAM *is* available to *im RAM if possible, which will increase the speed of display redraws, since internal RAM is much faster to access than PSRAM. This may however reduce the internal RAM available for other components. A buffer size greater than 25% will be always allocated in PSRAM if available. -{{< anchor "lvgl-multi-conf" >}} + ### Multiple LVGL configurations @@ -216,7 +219,7 @@ lvgl: text: 'Hello World #2!' ``` -{{< anchor "lvgl-color" >}} + ### Colors @@ -225,7 +228,7 @@ Colors can be specified anywhere in the LVGL configuration either by referencing You may also use any of the [standard CSS color names](https://developer.mozilla.org/en-US/docs/Web/CSS/named-color), e.g. `springgreen`. When using a lambda to provide a color you can use the `lv_color_hex` function to convert a hex value, or -return a [Color](/components/display#config-color) ID - this is useful when using the {{< docref "/components/mapping" >}}. Examples: +return a [Color](/components/display#config-color) ID - this is useful when using the [Mapping](/components/mapping/). Examples: ```yaml label: @@ -240,7 +243,7 @@ on_...: color: !lambda return id(mapping_color_map)[x]; ``` -{{< anchor "lvgl-opacity" >}} + ### Opacity @@ -253,7 +256,7 @@ Various parts of the widgets (like background, borders etc.) support opacity. It Default values depend on widget specifics. -{{< anchor "lvgl-fonts" >}} + ### Fonts @@ -298,7 +301,7 @@ The binary will only include any of the above if used in the configuration. You can display the embedded symbols among the text by their codepoint address preceded by `\u`. For example: `\uF00C` : -{{< img src="lvgl_symbols.png" alt="Image" class="align-center" >}} + > [!NOTE] > The `text_font` parameter affects the size of symbols, since all the built-in font arrays based on Montserrat include these symbols at the respective sizes. If you set `text_font` on a widget to a custom ESPHome font, these symbols will likely not display, unless you include them manually from a FontAwesome OpenType file. @@ -312,13 +315,13 @@ In addition to the above, the following special fonts are available from LVGL as - `simsun_16_cjk` : 16 px font with normal range + 1000 most common [CJK Radicals](https://en.wikipedia.org/wiki/CJK_Radicals_Supplement). - `dejavu_16_persian_hebrew` : 16 px font with normal range + Hebrew, Arabic, Persian letters and all their forms. -{{< anchor "lvgl-styling" >}} + ### Style properties LVGL follows CSS's [border-box model](https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing). A widget's *box* is built from the following parts: -{{< img src="lvgl_boxmodel.png" alt="Image" class="align-center" >}} + - *bounding box*: the box defined with `width` and `height` of the widgets (pixels or parent content area percentage; not drawn, just for calculations). - *border*: the border line, drawn on the inner side of the bounding box (pixels). @@ -401,7 +404,7 @@ These style properties may be applied to any widget, though not all widgets use - **translate_x** (*Optional*, int16 or percentage): Movement of the widget with this value in horizontal direction. - **translate_y** (*Optional*, int16 or percentage): Movement of the widget with this value in vertical direction. -{{< anchor "lvgl-theme" >}} + ### Themes @@ -506,7 +509,7 @@ on_...: border_color: 0x00FF00 ``` -{{< anchor "lvgl-gradients" >}} + ### Gradients @@ -546,15 +549,15 @@ A gradient is a sequence of colors which can be applied to an object using the ` ## Widgets -LVGL supports a list of {{< docref "/components/lvgl/widgets" >}} which can be used to draw interactive objects on the screen. +LVGL supports a list of [Widgets](/components/lvgl/widgets/) which can be used to draw interactive objects on the screen. ## Actions -Widgets support [general or specific](/components/lvgl/widgets#lvgl-automation-actions) actions - see the {{< docref "/components/lvgl/widgets" >}} section for more information. +Widgets support [general or specific](/components/lvgl/widgets#lvgl-automation-actions) actions - see the [Widgets](/components/lvgl/widgets/) section for more information. Several actions are available for the LVGL component itself, these are outlined below. Note that if multiple LVGL instances are configured, an **lvgl_id** config entry will be required to specify which instance the action relates to. This is not required if there is only a single LVGL instance configured. -{{< anchor "lvgl-redraw-action" >}} + ### `lvgl.widget.redraw` @@ -571,7 +574,7 @@ on_...: lvgl_id: lvgl1 # optional when only one LVGL instance is configured ``` -{{< anchor "lvgl-refresh-action" >}} + ### `lvgl.widget.refresh` @@ -593,7 +596,7 @@ on_...: - lvgl.widget.refresh: label1 # will update the label text using the lambda. ``` -{{< anchor "lvgl-pause-action" >}} + ### `lvgl.pause` @@ -609,7 +612,7 @@ on_...: show_snow: true ``` -{{< anchor "lvgl-resume-action" >}} + ### `lvgl.resume` @@ -637,7 +640,7 @@ on_...: disp_bg_image: cat_image ``` -{{< anchor "lvgl-page-next-previous-action" >}} + ### `lvgl.page.next`, `lvgl.page.previous` @@ -660,7 +663,7 @@ on_...: time: 300ms ``` -{{< anchor "lvgl-page-show-action" >}} + ### `lvgl.page.show` @@ -681,7 +684,7 @@ on_...: - lvgl.page.show: secret_page # shorthand version ``` -{{< anchor "lvgl-widget-focus-action" >}} + ### `lvgl.widget.focus` @@ -728,11 +731,11 @@ on_...: - lvgl.widget.focus: previous ``` -{{< anchor "lvgl-conditions" >}} + ## Conditions -{{< anchor "lvgl-is-idle-condition" >}} + ### `lvgl.is_idle` @@ -755,7 +758,7 @@ on_...: transition_length: 3s ``` -{{< anchor "lvgl-is-paused-condition" >}} + ### `lvgl.is_paused` @@ -794,7 +797,7 @@ on_...: Widget level [interaction triggers](/components/lvgl/widgets#lvgl-automation-triggers) are available, plus a few for the LVGL component itself: -{{< anchor "lvgl-on-idle-trigger" >}} + ### `on_idle` @@ -819,13 +822,13 @@ lvgl: See [Turn off screen when idle](/cookbook/lvgl#lvgl-cookbook-idlescreen) for an example which demonstrates how to implement screen saving with idle settings. -{{< anchor "lvgl_on_pause_trigger" >}} + ### `on_pause` This [trigger](/components/lvgl/widgets#lvgl-automation-triggers) is triggered when LVGL is paused. This can be used to perform any desired actions when the screen is locked, such as turning off the display backlight. -{{< anchor "lvgl_on_resume_trigger" >}} + ### `on_resume` @@ -853,8 +856,8 @@ lvgl: ## See Also -- {{< docref "/cookbook/lvgl" "LVGL Examples in the Cookbook" >}} -- {{< docref "/components/display" >}} -- {{< docref "/components/touchscreen" >}} -- {{< docref "/components/sensor/rotary_encoder" >}} +- [LVGL Examples in the Cookbook](/cookbook/lvgl/) +- [Display Component](/components/display/) +- [Touchscreen Components](/components/touchscreen/) +- [Rotary Encoder Sensor](/components/sensor/rotary_encoder/) - [LVGL docs](https://docs.lvgl.io/) diff --git a/content/components/lvgl/layouts.md b/src/content/docs/components/lvgl/layouts.mdx similarity index 98% rename from content/components/lvgl/layouts.md rename to src/content/docs/components/lvgl/layouts.mdx index 0c4d2b66ca..a1fe95d9e7 100644 --- a/content/components/lvgl/layouts.md +++ b/src/content/docs/components/lvgl/layouts.mdx @@ -3,7 +3,10 @@ description: "LVGL Layouts" title: "LVGL Layouts" --- -{{< anchor "lvgl-layouts" >}} +import { Image } from 'astro:assets'; +import lvglGridLayoutImg from './images/lvgl_grid_layout.png'; + + ## LVGL Layouts @@ -257,7 +260,7 @@ Values for use with `grid_column_align`, `grid_row_align`, `grid_cell_x_align`, text: "row 2, col 1 (2/0 occupied)" ``` -{{< img src="lvgl_grid_layout.png" alt="Image" class="align-center" >}} + > [!TIP] > To visualize real, calculated sizes of transparent widgets you can temporarily set `outline_width: 1` on them. diff --git a/content/components/lvgl/widgets.md b/src/content/docs/components/lvgl/widgets.mdx similarity index 94% rename from content/components/lvgl/widgets.md rename to src/content/docs/components/lvgl/widgets.mdx index 94128fdd23..e6ef91fed4 100644 --- a/content/components/lvgl/widgets.md +++ b/src/content/docs/components/lvgl/widgets.mdx @@ -3,6 +3,31 @@ description: "LVGL Widgets" title: "LVGL Widgets" --- +import { Image } from 'astro:assets'; +import lvglAlignImg from './images/lvgl_align.png'; +import lvglAnimimgImg from './images/lvgl_animimg.gif'; +import lvglArcImg from './images/lvgl_arc.png'; +import lvglBarImg from './images/lvgl_bar.png'; +import lvglButtonImg from './images/lvgl_button.png'; +import lvglButtonmatrixImg from './images/lvgl_buttonmatrix.png'; +import canvasImg from './images/canvas.png'; +import lvglCheckboxImg from './images/lvgl_checkbox.png'; +import lvglDropdownImg from './images/lvgl_dropdown.png'; +import lvglImageImg from './images/lvgl_image.png'; +import lvglKeyboardImg from './images/lvgl_keyboard.png'; +import lvglLabelImg from './images/lvgl_label.png'; +import lvglLedImg from './images/lvgl_led.png'; +import lvglLineImg from './images/lvgl_line.png'; +import lvglMeterImg from './images/lvgl_meter.png'; +import lvglMsgboxImg from './images/lvgl_msgbox.png'; +import lvglBaseobjImg from './images/lvgl_baseobj.png'; +import lvglRollerImg from './images/lvgl_roller.png'; +import lvglSliderImg from './images/lvgl_slider.png'; +import lvglSpinboxImg from './images/lvgl_spinbox.png'; +import lvglSpinnerImg from './images/lvgl_spinner.gif'; +import lvglTabviewImg from './images/lvgl_tabview.png'; +import lvglTextareaImg from './images/lvgl_textarea.png'; + At the next level of the LVGL object hierarchy are the widgets, which support styling directly. They can have sub-parts, which may be styled separately. Usually styles are inherited, but this depends on widget specifics or functionality. The widget and its parts have states, and different styling can be set for different states. Widgets can have children, which can be any other widgets. Think of this as a nested structure. The child widgets move with the parent and, if the parent is hidden, its children will also be hidden. @@ -51,15 +76,15 @@ The properties below are common to all widgets. - **x** (*Optional*, int16 or percentage): Horizontal offset position. Default `0`. - **y** (*Optional*, int16 or percentage): Vertical offset position. Default `0`. -{{< img src="lvgl_align.png" alt="Image" class="align-center" >}} + -- **group** (*Optional*, string): The name of the group of widgets which will interact with a {{< docref "/components/sensor/rotary_encoder" >}}. In every group there is always one focused widget which receives the encoder actions. You need to associate an input device with a group. An input device can send key events to only one group but a group can receive data from more than one input device. If no group is specified for a widget or an encoder, an unnamed default group will be assigned, so in most cases where only one encoder is used it will not be necessary to explicitly specify a group. +- **group** (*Optional*, string): The name of the group of widgets which will interact with a [Rotary Encoder](/components/sensor/rotary_encoder/). In every group there is always one focused widget which receives the encoder actions. You need to associate an input device with a group. An input device can send key events to only one group but a group can receive data from more than one input device. If no group is specified for a widget or an encoder, an unnamed default group will be assigned, so in most cases where only one encoder is used it will not be necessary to explicitly specify a group. - **layout** (*Optional*): See [Layouts](/components/lvgl/layouts#lvgl-layouts) for details. Defaults to `NONE`. - **styles** (*Optional*, [ID](/guides/configuration-types#id)): The ID of a *style definition* from the main component configuration to override the theme styles. - **theme** (*Optional*, list): A list of styles to apply to the widget and children. Same configuration option as at the main component. - **widgets** (*Optional*, list): A list of LVGL widgets to be drawn as children of this widget. Same configuration option as at the main component. -{{< anchor "lvgl-widgetproperty-state" >}} + - **state** (*Optional*, dict): Widgets or their (sub)parts can have states, which support separate styling. These state styles inherit from the theme, but can be locally set or overridden within style definitions. Can be one of: - **checked** (*Optional*, boolean): Toggled or checked state. @@ -87,7 +112,7 @@ The state itself can be can be changed by interacting with the widget, or throug See [Cover status and control](/cookbook/lvgl#lvgl-cookbook-cover) for a cookbook example which demonstrates how to use styling and properties to show different states of a Home Assistant entity. -{{< anchor "lvgl-widget-flags" >}} + In addition to visual styling, each widget supports some boolean **flags** to influence the behavior: @@ -117,9 +142,9 @@ In addition to visual styling, each widget supports some boolean **flags** to in - **widget_1**, **widget_2** (*Optional*, boolean): custom flags, free to use by widget. > [!NOTE] -> LVGL only supports **integers** for numeric `value`. Visualizer widgets can't display floats directly, but they allow scaling by 10s. Some examples in the {{< docref "/cookbook/lvgl" "Cookbook" >}} cover how to do that. +> LVGL only supports **integers** for numeric `value`. Visualizer widgets can't display floats directly, but they allow scaling by 10s. Some examples in the [Cookbook](/cookbook/lvgl/) cover how to do that. -{{< anchor "lvgl-widget-parts" >}} + ## Widget parts @@ -159,7 +184,7 @@ specific to a widget are described in each section below. Some of these properti `lvgl..update` action, e.g. `lvgl.label.update` allows updating not only the common style properties, but also the `text` property of a label. -{{< anchor "text-property" >}} + ## Text property @@ -215,13 +240,13 @@ on_...: if_nan: "N/A" ``` -{{< anchor "lvgl-widget-animimg" >}} + ## `animimg` The animation image is similar to the normal `image` widget. The main difference is that instead of one source image, you set a list of multiple source images. You can also specify a duration and a repeat count. -{{< img src="lvgl_animimg.gif" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -272,13 +297,13 @@ on_...: See [Battery charging animation](/cookbook/lvgl#lvgl-cookbook-animbatt) in the Cookbook for a more detailed example. -{{< anchor "lvgl-widget-arc" >}} + ## `arc` The arc consists of a background and a foreground arc. The indicator foreground can be touch-adjusted with a knob. -{{< img src="lvgl_arc.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -358,17 +383,17 @@ on_...: > [!NOTE] > The `on_value` and `on_change` triggers are sent as the arc knob is dragged or changed with keys. The event is sent *continuously* while the arc knob is being dragged; this generally has a negative effect on performance. To mitigate this, consider using a [universal interaction trigger](#lvgl-automation-triggers) like `on_release`, to get the `x` variable once after the interaction has completed. -The `arc` can be also integrated as a {{< docref "/components/number/lvgl" "Number" >}} or {{< docref "/components/sensor/lvgl" "Sensor" >}} component. +The `arc` can be also integrated as a [Number](/components/number/lvgl/) or [Sensor](/components/sensor/lvgl/) component. See [Light brightness slider](/cookbook/lvgl#lvgl-cookbook-bright) and [Media player volume slider](/cookbook/lvgl#lvgl-cookbook-volume) for examples which demonstrate how to use a slider (or an arc) to control entities in Home Assistant. -{{< anchor "lvgl-widget-bar" >}} + ## `bar` The bar widget has a background and an indicator foreground on it. The size of the indicator is set according to the current `value` of the bar. -{{< img src="lvgl_bar.png" alt="Image" class="align-center" >}} + Vertical bars can be created if the width is smaller than the height. @@ -419,15 +444,15 @@ on_...: value: 55 ``` -The `bar` can be also integrated as {{< docref "/components/number/lvgl" "Number" >}} or {{< docref "/components/sensor/lvgl" "Sensor" >}} component. +The `bar` can be also integrated as [Number](/components/number/lvgl/) or [Sensor](/components/sensor/lvgl/) component. -{{< anchor "lvgl-widget-button" >}} + ## `button` Simple push (momentary) or toggle (two-states) button. -{{< img src="lvgl_button.png" alt="Image" class="align-center" >}} + A button has no inherent content so requires child widgets to be added. As a shorthand for a button with a single text label, the `text:` option may be used to add a single `label` child, otherwise the `widgets:` key must be used to add other @@ -481,7 +506,7 @@ To create an image button, add a child [`image`](#lvgl-widget-image) widget to i ``` -The `button` can be also integrated as a {{< docref "/components/binary_sensor/lvgl" "Binary Sensor" >}} or as a {{< docref "/components/switch/lvgl" "Switch" >}} component. +The `button` can be also integrated as a [Binary Sensor](/components/binary_sensor/lvgl/) or as a [Switch](/components/switch/lvgl/) component. > [!NOTE] > A binary sensor linked to a button reports its `pressed` state, while a switch linked to a button reports its `checked` state. @@ -509,13 +534,13 @@ See [Remote light button](/cookbook/lvgl#lvgl-cookbook-binent) for an example wh text: "Clicked" ``` -{{< anchor "lvgl-widget-buttonmatrix" >}} + ## `buttonmatrix` The button matrix widget is a lightweight way to display multiple buttons in rows and columns. It's lightweight because the buttons are not actually created but instead simply drawn on the fly. This reduces the memory footprint of each button from approximately 200 bytes (for both the button and its label widget) down to only eight bytes. -{{< img src="lvgl_buttonmatrix.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -644,7 +669,7 @@ The canvas widget provides a surface for custom drawing operations. It allows yo All options are templatable. Where a list of points is required, this can be provided in the form of a list of dictionaries, each with templatable `x` and `y` keys, or as a shorthand `x,y` pair (constant integers only.) -{{< img src="canvas.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -775,13 +800,13 @@ Where a list of points is required, this can be provided in the form of a list o color: red ``` -{{< anchor "lvgl-widget-checkbox" >}} + ## `checkbox` The checkbox widget is made internally from a *tick box* and a label. When the checkbox is clicked the tick box's `checked` state will be toggled. -{{< img src="lvgl_checkbox.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -833,9 +858,9 @@ on_...: > [!NOTE] > In case you configure `default_font` in the main section to a custom font, the checkmark will not be shown correctly when the checkbox is in the checked state. See [Restore checkbox mark](/cookbook/lvgl#lvgl-cookbook-ckboxmark) for how to easily resolve this. -The `checkbox` can be also integrated as a {{< docref "/components/switch/lvgl" "Switch" >}} component. +The `checkbox` can be also integrated as a [Switch](/components/switch/lvgl/) component. -{{< anchor "lvgl-widget-container" >}} + ## `container` @@ -864,7 +889,7 @@ it is invisible. It has a default width and height of 100%. - ... ``` -{{< anchor "lvgl-widget-dropdown" >}} + ## `dropdown` @@ -872,7 +897,7 @@ The dropdown widget allows the user to select one value from a list. The dropdown list is closed by default and displays a single value. When activated (by clicking on the drop-down list), a list is drawn from which the user may select one option. When the user selects a new value, the list is deleted from the screen. -{{< img src="lvgl_dropdown.png" alt="Image" class="align-center" >}} + The Dropdown widget is built internally from a *button* part and a *list* part (both not related to the actual widgets with the same name). @@ -942,15 +967,15 @@ on_...: args: [ x ] ``` -The `dropdown` can be also integrated as {{< docref "/components/select/lvgl" "Select" >}} component. +The `dropdown` can be also integrated as [Select](/components/select/lvgl/) component. -{{< anchor "lvgl-widget-image" >}} + ## `image` Images are the basic widgets used to display images. -{{< img src="lvgl_image.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1002,13 +1027,13 @@ on_...: > [!TIP] > `offset_x` and `offset_y` can be useful when the widget size is set to be smaller than the image source size. A "running image" effect can be created by animating these values. -{{< anchor "lvgl-widget-keyboard" >}} + ## `keyboard` The keyboard widget is a special Button matrix with predefined keymaps and other features to show an on-screen keyboard usable to type text into a [`textarea`](#lvgl-widget-textarea). -{{< img src="lvgl_keyboard.png" alt="Image" class="align-center" >}} + For styling, the `keyboard` widget uses the same settings as [`buttonmatrix`](#lvgl-widget-buttonmatrix). @@ -1067,13 +1092,13 @@ on_focus: > [!NOTE] > The Keyboard widget in ESPHome doesn't support popovers or custom layouts. -{{< anchor "lvgl-widget-label" >}} + ## `label` A label is the basic widget type that is used to display text. -{{< img src="lvgl_label.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1136,15 +1161,15 @@ on_...: args: [ 'id(wifi_signal_db).get_state()' ] ``` -The `label` can be also integrated as {{< docref "/components/text/lvgl" "Text" >}} or {{< docref "/components/text_sensor/lvgl" "Text Sensor" >}} component. +The `label` can be also integrated as [Text](/components/text/lvgl/) or [Text Sensor](/components/text_sensor/lvgl/) component. -{{< anchor "lvgl-widget-led" >}} + ## `led` The LED widgets are either circular or rectangular widgets whose brightness can be adjusted. As their brightness decreases, the colors become darker. -{{< img src="lvgl_led.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1180,20 +1205,20 @@ on_...: color: 0x00FF00 ``` -The `led` can be also integrated as {{< docref "/components/light/lvgl" "Light" >}} component. +The `led` can be also integrated as [Light](/components/light/lvgl/) component. > [!NOTE] > If configured as a light component, `color` and `brightness` are overridden by the light at startup, according to its `restore_mode` setting. Check out [A numeric input keypad](/cookbook/lvgl#lvgl-cookbook-keypad) in the Cookbook for an example which demonstrates how to change the `led` styling properties from an automation. -{{< anchor "lvgl-widget-line" >}} + ## `line` The line widget is capable of drawing straight lines between a set of points. -{{< img src="lvgl_line.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1232,13 +1257,13 @@ The points list may be defined with constants in the form `x, y` or as a list of line_rounded: true ``` -{{< anchor "lvgl-widget-meter" >}} + ## `meter` The meter widget can visualize data in very flexible ways. It can use arcs, needles, ticks, lines and/or labels. -{{< img src="lvgl_meter.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1348,13 +1373,13 @@ on_...: See [Semicircle gauge](/cookbook/lvgl#lvgl-cookbook-gauge), [Thermometer](/cookbook/lvgl#lvgl-cookbook-thermometer) and [An analog clock](/cookbook/lvgl#lvgl-cookbook-clock) in the Cookbook for examples which demonstrate how to effectively use this widget. -{{< anchor "lvgl-widget-msgbox" >}} + ## `msgboxes` The message boxes act as pop-ups. They are built from a background container, a title, an optional close button, a text and optional buttons. -{{< img src="lvgl_msgbox.png" alt="Image" class="align-center" >}} + The text will be broken into multiple lines automatically and the height will be set automatically to include the text and the buttons. The message box is modal (blocks clicks on the rest of the screen until closed). @@ -1401,13 +1426,13 @@ lvgl: > [!TIP] > You can create your own more complex dialogs with a full-screen sized, half-opaque `obj` with any child widgets on it, and the `hidden` flag set to `true` by default. For non-modal dialogs, simply set the `clickable` flag to `false` on it. -{{< anchor "lvgl-widget-obj" >}} + ## `obj` The base object is just a simple, empty widget. By default, it's nothing more than a rounded rectangle: -{{< img src="lvgl_baseobj.png" alt="Image" class="align-center" >}} + You can use it as a parent container for other widgets. By default, it catches touches. Since `obj` has default styling applied, you may choose to use [`container`](#container) instead if the role is simply to group other @@ -1434,7 +1459,7 @@ widgets. - ... ``` -{{< anchor "lvgl-widget-qrcode" >}} + ## `qrcode` @@ -1478,13 +1503,13 @@ on_...: text: home-assistant.io ``` -{{< anchor "lvgl-widget-roller" >}} + ## `roller` Roller allows you to simply select one option from a list by scrolling. -{{< img src="lvgl_roller.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1540,15 +1565,15 @@ on_...: args: [x, text.c_str()] ``` -The `roller` can be also integrated as {{< docref "/components/select/lvgl" "Select" >}} component. +The `roller` can be also integrated as [Select](/components/select/lvgl/) component. -{{< anchor "lvgl-widget-slider" >}} + ## `slider` The slider widget looks like a bar supplemented with a knob. The user can drag the knob to set a value. Just like bar, slider can be vertical or horizontal. The size of the indicator foreground and the knob position is set according to the current `value` of the slider. -{{< img src="lvgl_slider.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1611,17 +1636,17 @@ on_...: > [!NOTE] > The `on_value` trigger is sent as the slider is dragged or changed with keys. The event is sent *continuously* while the slider is being dragged; this generally has a negative effect on performance. To mitigate this, consider using a [universal interaction trigger](#lvgl-automation-triggers) like `on_release`, to get the `x` variable once after the interaction has completed. -The `slider` can be also integrated as {{< docref "/components/number/lvgl" "Number" >}} or {{< docref "/components/sensor/lvgl" "Sensor" >}} component. +The `slider` can be also integrated as [Number](/components/number/lvgl/) or [Sensor](/components/sensor/lvgl/) component. See [Light brightness slider](/cookbook/lvgl#lvgl-cookbook-bright) and [Media player volume slider](/cookbook/lvgl#lvgl-cookbook-volume) for examples which demonstrate how to use a slider to control entities in Home Assistant. -{{< anchor "lvgl-widget-spinbox" >}} + ## `spinbox` The spinbox contains a numeric value (as text) which can be increased or decreased through actions. You can, for example, use buttons labeled with plus and minus to call actions which increase or decrease the value as required. -{{< img src="lvgl_spinbox.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1689,17 +1714,17 @@ on_...: args: [ x ] ``` -The `spinbox` can be also integrated as a {{< docref "/components/number/lvgl" "Number" >}} or {{< docref "/components/sensor/lvgl" "Sensor" >}} component. +The `spinbox` can be also integrated as a [Number](/components/number/lvgl/) or [Sensor](/components/sensor/lvgl/) component. See [Climate control](/cookbook/lvgl#lvgl-cookbook-climate) for an example which demonstrates how to implement a thermostat control using the spinbox. -{{< anchor "lvgl-widget-spinner" >}} + ## `spinner` The Spinner widget is a spinning arc over a ring. -{{< img src="lvgl_spinner.gif" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1742,13 +1767,13 @@ on_...: arc_color: 0x31de70 ``` -{{< anchor "lvgl-widget-switch" >}} + ## `switch` The switch looks like a little slider and can be used to turn something on and off. -{{< img src="lvgl_switch.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1781,17 +1806,17 @@ The switch looks like a little slider and can be used to turn something on and o args: [ x ] ``` -The `switch` can be also integrated as a {{< docref "/components/switch/lvgl" "Switch" >}} component. +The `switch` can be also integrated as a [Switch](/components/switch/lvgl/) component. See [Local light switch](/cookbook/lvgl#lvgl-cookbook-relay) for an example which demonstrates how to use a switch to act on a local component. -{{< anchor "lvgl-widget-tabview" >}} + ## `tabview` The tab view object can be used to organize content in tabs. The tab buttons are internally generated with a [`buttonmatrix`](#lvgl-widget-buttonmatrix). -{{< img src="lvgl_tabview.png" alt="Image" class="align-center" >}} + The tabs are indexed (zero-based) in the order they appear in the configuration file. A new tab can be selected either by clicking on a tab button, by sliding horizontally on the content or via the `lvgl.tabview.select` [action](/automations/actions#actions-action), specifying the tab's index. @@ -1802,7 +1827,7 @@ The tabs are indexed (zero-based) in the order they appear in the configuration - **tabs** (**Required**, list): A list with (any number of) tabs to be added to tabview. - **name** (**Required**): The text to be shown on the button corresponding to the tab. - **id** (*Optional*): An ID for the tab itself. - - **widgets** (**Required**, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the tab, as children. + - **widgets** (**Required**, list): A list of [Widgets](/components/lvgl/widgets/) to be drawn on the tab, as children. - **tab_style** (*Optional*): Style settings for the tabs. - **items** (*Optional*, dict): Settings for the items *part*, the buttons all use the text and typical background style properties except translations and transformations. - **content_style** (*Optional*): Style settings for the content area. @@ -1861,13 +1886,13 @@ on_...: - logger.log: "Dog tab is now showing" ``` -{{< anchor "lvgl-widget-textarea" >}} + ## `textarea` The textarea is an extended label widget which displays a cursor and allows the user to input text. Long lines are wrapped and when the text becomes long enough the text area can be scrolled. It supports one line mode and password mode, where typed characters are replaced visually with bullets or asterisks. -{{< img src="lvgl_textarea.png" alt="Image" class="align-center" >}} + **Configuration variables:** @@ -1925,9 +1950,9 @@ on_...: args: [ text.c_str() ] ``` -The `textarea` can be also integrated as {{< docref "/components/text/lvgl" "Text" >}} or {{< docref "/components/text_sensor/lvgl" "Text Sensor" >}} component. +The `textarea` can be also integrated as [Text](/components/text/lvgl/) or [Text Sensor](/components/text_sensor/lvgl/) component. -{{< anchor "lvgl-widget-tileview" >}} + ## `tileview` @@ -1942,7 +1967,7 @@ If the tileview is screen sized, the user interface resembles what you may have - **row** (**Required**): Horizontal position of the tile in the tileview grid. - **dir** (*Optional*): Enable moving to adjacent tiles in the given direction by swiping/dragging. One (or multiple as YAML list) of `LEFT`, `RIGHT`, `TOP`, `BOTTOM`, `HOR`, `VER`, `ALL`. Defaults to `ALL`. - **id** (*Optional*): A tile ID to be used with the `lvgl.tileview.select` action. - - **widgets** (*Optional*, list): A list of {{< docref "/components/lvgl/widgets" >}} to be drawn on the tile, as children. + - **widgets** (*Optional*, list): A list of [Widgets](/components/lvgl/widgets/) to be drawn on the tile, as children. **Actions:** @@ -1994,11 +2019,11 @@ on_...: - logger.log: "Cat tile is now showing" ``` -{{< anchor "lvgl-automations" >}} + ## Automations -{{< anchor "lvgl-automation-actions" >}} + ### Actions @@ -2032,7 +2057,7 @@ on_...: Check out in the Cookbook [Remote light button](/cookbook/lvgl#lvgl-cookbook-binent) for an example which demonstrates how to use a template to update the state. -{{< anchor "lvgl-automation-shorthands" >}} + #### `lvgl.widget.hide`, `lvgl.widget.show` @@ -2072,7 +2097,7 @@ These [actions](/automations/actions#actions-action) are shorthands for toggling - id: my_button_2 ``` -{{< anchor "lvgl-automation-triggers" >}} + ### Triggers @@ -2136,13 +2161,13 @@ When used on a widget, it does not act specifically on that widget but can be us ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Main component](/components/lvgl/) +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) - [LVGL docs](https://docs.lvgl.io/) diff --git a/content/components/mapping.md b/src/content/docs/components/mapping.mdx similarity index 93% rename from content/components/mapping.md rename to src/content/docs/components/mapping.mdx index 561aeef496..29f96e9d5b 100644 --- a/content/components/mapping.md +++ b/src/content/docs/components/mapping.mdx @@ -40,7 +40,7 @@ text_sensor: You can also map to a class. This is useful when you want to map to a more complex type, such as an image or a color. There are several types of class specifiers you can use: -- `image` : Maps to an image as defined in the {{< docref "/components/image" >}} component. The values should each be an image ID. +- `image` : Maps to an image as defined in the [Image](/components/image/) component. The values should each be an image ID. - `color` : Maps to a predefined [Color](/components/display#config-color). The values should each be a color ID. - The name of a C++ class defined by ESPHome, e.g. `Component`. The values should each be a ID of that class. @@ -101,5 +101,4 @@ display: ## See Also -- {{< docref "index/" >}} -- {{< docref "/automations/actions" >}} +- [Actions, Triggers, Conditions](/automations/actions/) diff --git a/content/components/matrix_keypad.md b/src/content/docs/components/matrix_keypad.mdx similarity index 90% rename from content/components/matrix_keypad.md rename to src/content/docs/components/matrix_keypad.mdx index 87c2c94daf..db1cd45f29 100644 --- a/content/components/matrix_keypad.md +++ b/src/content/docs/components/matrix_keypad.mdx @@ -1,18 +1,17 @@ --- description: "Matrix key input panel" title: "Matrix keypad" -params: - seo: - description: Matrix key input panel --- -{{< anchor "matrix_keypad" >}} +import { Image } from 'astro:assets'; + + The `matrix_keypad` component allows you to integrate pads which have the keys connected at the intersection points of the rows and columns of a matrix. -{{< img src="matrix_keypad.jpg" alt="Image" class="align-center" >}} + ## Component/Hub @@ -93,5 +92,5 @@ Either the `row` and `col` parameters, or the `key` parameter has to be provided ## See Also -- {{< docref "/components/key_collector" >}} -- [Binary Sensor](/components/binary_sensor#config-binary_sensor) +- [Key collector component](/components/key_collector/) +- [Binary Sensor Component](/components/binary_sensor#config-binary_sensor) diff --git a/content/components/max6956.md b/src/content/docs/components/max6956.mdx similarity index 90% rename from content/components/max6956.md rename to src/content/docs/components/max6956.mdx index 0621d08b33..035b6dacdc 100644 --- a/content/components/max6956.md +++ b/src/content/docs/components/max6956.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up MAX6956 port expanders in ESPHome." title: "MAX6956 I/O Expander" -params: - seo: - description: Instructions for setting up MAX6956 port expanders in ESPHome. - image: max6956.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The MAX6956 component allows you to use MAX6956 I/O expanders ([datasheet](https://datasheets.maximintegrated.com/en/ds/MAX6956.pdf)) in ESPHome. It uses [I²C Bus](/components/i2c) for communication. @@ -21,7 +21,14 @@ Any option accepting a [Pin Schema](/guides/configuration-types#pin-schema) can ## Component/Hub -{{< img src="max6956.jpg" alt="Image" caption="MAX6956 I/O Expander." width="80.0%" class="align-center" >}} +
    The `max6956` is an [I²C Bus](/components/i2c) slave. Its address is configured using A0 and A1 hardware pins from 0x40 to 0x4F. @@ -247,9 +254,9 @@ light: ## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< docref "binary_sensor/gpio" >}} -- {{< docref "light/binary" >}} -- {{< docref "light/rgb" >}} -- {{< apiref "max6956/max6956.h" "max6956/max6956.h" >}} +- [GPIO Switch](/components/switch/gpio/) +- [Binary Sensor Component](/components/binary_sensor/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) +- [Binary Light](/components/light/binary/) +- [RGB Light](/components/light/rgb/) +- diff --git a/content/components/mcp230xx.md b/src/content/docs/components/mcp230xx.mdx similarity index 91% rename from content/components/mcp230xx.md rename to src/content/docs/components/mcp230xx.mdx index 03dc0b2fc2..9fbf323044 100644 --- a/content/components/mcp230xx.md +++ b/src/content/docs/components/mcp230xx.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up MCP23008, MCP23016 or MCP23017 digital port expander in ESPHome." title: "MCP230xx I/O Expander" -params: - seo: - description: Instructions for setting up MCP23008, MCP23016 or MCP23017 digital port expander in ESPHome. - image: mcp230xx.svg --- +import APIRef from '@components/APIRef.astro'; + The Microchip MCP230xx series of general purpose, parallel I/O expansion for I²C bus applications. @@ -15,7 +13,7 @@ The Microchip MCP230xx series of general purpose, parallel I/O expansion for I² - [MCP23016 Component](#mcp23016-label) - [MCP23017 Component](#mcp23017-label) -{{< anchor "mcp23008-label" >}} + ## MCP23008 Component @@ -74,7 +72,7 @@ binary_sensor: - **mode** (*Optional*, string): A pin mode to set for the pin at. One of `INPUT` or `OUTPUT`. -{{< anchor "mcp23016-label" >}} + ## MCP23016 Component @@ -126,7 +124,7 @@ binary_sensor: - **mcp23xxx** (**Required**, [ID](/guides/configuration-types#id)): The id of the MCP23016 component. - All other options from [Pin Schema](/guides/configuration-types#pin-schema) -{{< anchor "mcp23017-label" >}} + ## MCP23017 Component @@ -195,8 +193,8 @@ binary_sensor: ## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} -- {{< apiref "API Reference (MCP23008)" "mcp23008/mcp23008.h" >}} -- {{< apiref "API Reference (MCP23016)" "mcp23016/mcp23016.h" >}} -- {{< apiref "API Reference (MCP23017)" "mcp23017/mcp23017.h" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) +- +- +- diff --git a/content/components/mcp23Sxx.md b/src/content/docs/components/mcp23Sxx.mdx similarity index 90% rename from content/components/mcp23Sxx.md rename to src/content/docs/components/mcp23Sxx.mdx index 2ac9584eee..6a8dd780d3 100644 --- a/content/components/mcp23Sxx.md +++ b/src/content/docs/components/mcp23Sxx.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up MCP23S08, MCP23S16 or MCP23S17 digital port expander in ESPHome. This series features exactly the same API as the MCP230xx I/O Expander (I²C)" title: "MCP23Sxx I/O Expander" -params: - seo: - description: Instructions for setting up MCP23S08, MCP23S16 or MCP23S17 digital port expander in ESPHome. This series features exactly the same API as the MCP230xx I/O Expander (I²C) - image: mcp230xx.svg --- +import APIRef from '@components/APIRef.astro'; + The Microchip MCP23Sxx series of general purpose, parallel I/O expansion for SPI bus applications. This series features exactly the same API as the MCP230xx I/O Expander (I²C). @@ -15,7 +13,7 @@ This series features exactly the same API as the MCP230xx I/O Expander (I²C). - [MCP23S08 Component](#mcp23s08-label) - [MCP23S17 Component](#mcp23s17-label) -{{< anchor "mcp23s08-label" >}} + ## MCP23S08 Component @@ -73,7 +71,7 @@ binary_sensor: - **interrupt** (*Optional*): Set this pin to trigger the INT pin on the component. Can be one of `CHANGE`, `RISING`, `FALLING`. - All other options from [Pin Schema](/guides/configuration-types#pin-schema) -{{< anchor "mcp23s17-label" >}} + ## MCP23S17 Component @@ -141,7 +139,7 @@ binary_sensor: ## See Also - [SPI Bus](/components/spi) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} -- {{< apiref "API Reference (MCP23S08)" "mcp23S08/mcp23S08.h" >}} -- {{< apiref "API Reference (MCP23S17)" "mcp23S17/mcp23S17.h" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) +- +- diff --git a/content/components/mdns.md b/src/content/docs/components/mdns.mdx similarity index 87% rename from content/components/mdns.md rename to src/content/docs/components/mdns.mdx index b547f20bbb..c00f122148 100644 --- a/content/components/mdns.md +++ b/src/content/docs/components/mdns.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up the mDNS configuration for your ESP node in ESPHome." title: "mDNS Component" -params: - seo: - description: Instructions for setting up the mDNS configuration for your ESP node in ESPHome. - image: radio-tower.svg --- The `mdns` component makes the node announce itself on the local network using the multicast DNS (mDNS) protocol. @@ -21,7 +17,7 @@ mdns: disabled: false ``` -{{< anchor "mdns-configuration_variables" >}} + ## Services @@ -38,7 +34,7 @@ mdns: txt_key_1: txt_value_1 ``` -{{< anchor "mdns-custom_services" >}} + ## Configuration variables diff --git a/content/components/media_player/i2s_audio.md b/src/content/docs/components/media_player/i2s_audio.mdx similarity index 87% rename from content/components/media_player/i2s_audio.md rename to src/content/docs/components/media_player/i2s_audio.mdx index d037a23214..1b227d5cf9 100644 --- a/content/components/media_player/i2s_audio.md +++ b/src/content/docs/components/media_player/i2s_audio.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up I²S based media players in ESPHome." title: "I²S Audio Media Player" -params: - seo: - description: Instructions for setting up I²S based media players in ESPHome. - image: i2s_audio.svg --- The `i2s_audio` media player platform allows you to play media from webservers and web streams -via the {{< docref "/components/i2s_audio" >}}. This platform only works on ESP32 based chips. +via the [I2S Audio](/components/i2s_audio/). This platform only works on ESP32 based chips. ```yaml # Example configuration entry @@ -49,6 +45,6 @@ For best results, keep the wires as short as possible. - `right` - `stereo` -## See also +## See Also -- {{< docref "index/" >}} +- [Media Player Component](/components/media_player/) diff --git a/content/components/media_player/_index.md b/src/content/docs/components/media_player/index.mdx similarity index 84% rename from content/components/media_player/_index.md rename to src/content/docs/components/media_player/index.mdx index 719758dc03..425bc94bc9 100644 --- a/content/components/media_player/_index.md +++ b/src/content/docs/components/media_player/index.mdx @@ -1,10 +1,8 @@ --- description: "Instructions for setting up generic media players in ESPHome." title: "Media Player Components" -params: - seo: - description: Instructions for setting up generic media players in ESPHome. - image: folder-open.svg +sidebar: + label: "Media Player Components" --- The `media_player` domain includes all platforms that implement media player @@ -13,7 +11,7 @@ functionality. > [!NOTE] > ESPHome media players require Home Assistant 2022.6 or newer. -{{< anchor "config-media_player" >}} + ## Base Media Player Configuration @@ -44,10 +42,10 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. -{{< anchor "media_player-actions" >}} + ## Media Player Actions @@ -60,13 +58,13 @@ Configuration variables: **id** (*Optional*, [ID](/guides/configuration-types#id)): The media player to control. Defaults to the only one in YAML. -{{< anchor "media_player-play" >}} + ### `media_player.play` Action This action will resume playing the media player. -{{< anchor "media_player-play_media" >}} + ### `media_player.play_media` Action @@ -90,13 +88,13 @@ Configuration variables: **media_url** (**Required**, string): The media url to play. -{{< anchor "media_player-pause" >}} + ### `media_player.pause` Action This action pauses the current playback. -{{< anchor "media_player-stop" >}} + ### `media_player.stop` Action @@ -106,37 +104,37 @@ Configuration variables: **announcement** (*Optional*, boolean): Whether to target announcements or regular media files, if supported by the media player. Defaults to `false`. -{{< anchor "media_player-toggle" >}} + ### `media_player.toggle` Action This action will pause or resume the current playback. -{{< anchor "media_player-turn_off" >}} + ### `media_player.turn_off` Action This action will turn off the media player. -{{< anchor "media_player-turn_on" >}} + ### `media_player.turn_on` Action This action will turn on the media player. -{{< anchor "media_player-volume_up" >}} + ### `media_player.volume_up` Action This action will increase the volume of the media player. -{{< anchor "media_player-volume_down" >}} + ### `media_player.volume_down` Action This action will decrease the volume of the media player. -{{< anchor "media_player-volume_set" >}} + ### `media_player.volume_set` Action @@ -160,7 +158,7 @@ Configuration variables: **volume** (**Required**, percentage): The volume to set the media player to. -{{< anchor "media_player-on_state_trigger" >}} + ### `media_player.on_state` Trigger @@ -175,7 +173,7 @@ media_player: - logger.log: "State updated!" ``` -{{< anchor "media_player-on_play_trigger" >}} + ### `media_player.on_play` Trigger @@ -189,7 +187,7 @@ media_player: - logger.log: "Playback started!" ``` -{{< anchor "media_player-on_pause_trigger" >}} + ### `media_player.on_pause` Trigger @@ -203,7 +201,7 @@ media_player: - logger.log: "Playback paused!" ``` -{{< anchor "media_player-on_idle_trigger" >}} + ### `media_player.on_idle` Trigger @@ -217,7 +215,7 @@ media_player: - logger.log: "Playback finished!" ``` -{{< anchor "media_player-on_announcement_trigger" >}} + ### `media_player.on_announcement` Trigger @@ -231,7 +229,7 @@ media_player: - logger.log: "Announcing!" ``` -{{< anchor "media_player-on_turn_off_trigger" >}} + ### `media_player.on_turn_off` Trigger @@ -245,7 +243,7 @@ media_player: - logger.log: "Media Player is Turned Off" ``` -{{< anchor "media_player-on_turn_on_trigger" >}} + ### `media_player.on_turn_on` Trigger @@ -259,7 +257,7 @@ media_player: - logger.log: "Media Player is Turned On" ``` -{{< anchor "media_player-is_idle_condition" >}} + ### `media_player.is_idle` Condition @@ -273,7 +271,7 @@ on_...: media_player.is_idle: ``` -{{< anchor "media_player-is_playing_condition" >}} + ### `media_player.is_playing` Condition @@ -287,7 +285,7 @@ on_...: media_player.is_playing: ``` -{{< anchor "media_player-is_paused_condition" >}} + ### `media_player.is_paused` Condition @@ -301,7 +299,7 @@ on_...: media_player.is_paused: ``` -{{< anchor "media_player-is_announcing_condition" >}} + ### `media_player.is_announcing` Condition @@ -315,7 +313,7 @@ on_...: media_player.is_announcing: ``` -{{< anchor "media_player-is_off_condition" >}} + ### `media_player.is_off` Condition @@ -329,7 +327,7 @@ on_...: media_player.is_off: ``` -{{< anchor "media_player-is_on_condition" >}} + ### `media_player.is_on` Condition @@ -356,5 +354,3 @@ on_...: media_player.is_idle: - media_player.play_media: 'http://media-url/two.mp3' ``` - -## See Also diff --git a/content/components/media_player/speaker.md b/src/content/docs/components/media_player/speaker.mdx similarity index 85% rename from content/components/media_player/speaker.md rename to src/content/docs/components/media_player/speaker.mdx index 8e4b17e631..721c9ea85b 100644 --- a/content/components/media_player/speaker.md +++ b/src/content/docs/components/media_player/speaker.mdx @@ -1,19 +1,15 @@ --- description: "Instructions for setting up a speaker media player in ESPHome." title: "Speaker Audio Media Player" -params: - seo: - description: Instructions for setting up a speaker media player in ESPHome. - image: speaker.svg --- -The `speaker` media player platform allows you to play on-device and online audio media via {{< docref "/components/speaker/index" "speaker components" >}}. +The `speaker` media player platform allows you to play on-device and online audio media via [speaker components](/components/speaker/). This platform greatly benefits from having external PSRAM. See the [performance section](#media_player-speaker-performance) for details. It natively supports decoding `FLAC`, `MP3`, and `WAV` audio files. Home Assistant (since version 2024.10) can proxy any media it sends and transcode it to a specified format and sample rate to minimize the device's computational load. -It supports two different audio pipelines: announcement and media. Each audio pipeline must output to a unique speaker. Use a {{< docref "/components/speaker/mixer" "mixer speaker" >}} component to create two different speakers that output to a single audio speaker. +It supports two different audio pipelines: announcement and media. Each audio pipeline must output to a unique speaker. Use a [mixer speaker](/components/speaker/mixer/) component to create two different speakers that output to a single audio speaker. On-device files built directly into the firmware are played without a network connection. Encode on-device files with the configured sample rate, 1 or 2 channels, and 16 bits per sample. @@ -38,7 +34,7 @@ media_player: - **announcement_pipeline** (**Required**, Pipeline Schema): Configuration settings for the announcement pipeline. - - **speaker** (**Required**, [ID](/guides/configuration-types#id)): The {{< docref "/components/speaker/index" "speaker" >}} to output the audio. + - **speaker** (**Required**, [ID](/guides/configuration-types#id)): The [speaker](/components/speaker/) to output the audio. - **format** (*Optional*, enum): The audio format Home Assistant will transcode audio to before sending it to the device. One of `FLAC`, `MP3`, `WAV`, or `NONE`. `NONE` disables transcoding in Home Assistant. Defaults to `FLAC`. - **sample_rate** (*Optional*, positive integer): Sample rate for the transcoded audio. Should be supported by the configured `speaker` component. Defaults to the speaker's sample rate. - **num_channels** (*Optional*, positive integer): Number of channels for the transcoded audio. Must be either `1` or `2`. Defaults to the speaker's number of channels. @@ -59,11 +55,11 @@ media_player: - **on_volume** (*Optional*, [Automation](/automations)): An automation to perform when the volume is changed. - All other options from [Media Player](/components/media_player#config-media_player) -{{< anchor "media_player-speaker-examples" >}} + ## Example Configuration -This example outputs audio to an {{< docref "/components/speaker/i2s_audio" "I²S Audio Speaker" >}} configured with a 48000 Hz sample rate. It uses a `mixer` speaker component to handle combining the two different pipelines, and it uses `resampler` speaker components to ensure the source speakers uses the same sample rate. +This example outputs audio to an [I²S Audio Speaker](/components/speaker/i2s_audio/) configured with a 48000 Hz sample rate. It uses a `mixer` speaker component to handle combining the two different pipelines, and it uses `resampler` speaker components to ensure the source speakers uses the same sample rate. It adds a switch for playing an on-device file for an alarm notification. Any playing media is ducked while the alarm is activated. After the alarm is turned off, the media ducking will gradually stop. @@ -142,7 +138,7 @@ switch: ## Automations -{{< anchor "media_player-speaker-play_on_device_media_file" >}} + ### `media_player.speaker.play_on_device_media_file` Action @@ -165,7 +161,7 @@ Configuration variables: - **announcement** (*Optional*, boolean): Whether to play back the file as an announcement or media stream. Defaults to `false`. - **enqueue** (*Optional*, boolean): Whether to add the media file to the end of the pipeline's internal playlist. Defaults to `false`. -{{< anchor "media_player-speaker-performance" >}} + ## Performance @@ -175,10 +171,10 @@ Decoding audio files is CPU and memory intensive. PSRAM external memory is stron The speaker media player automatically enables high-performance networking to optimize audio streaming. This configures both WiFi and TCP/IP settings for better throughput and lower latency. The optimization level is PSRAM-aware: -- **With PSRAM guaranteed** ({{< docref "psram" >}} configured with `ignore_not_found: false`): Aggressive settings with 512KB TCP windows and 512 WiFi RX buffers +- **With PSRAM guaranteed** ([Psram](/components/psram/) configured with `ignore_not_found: false`): Aggressive settings with 512KB TCP windows and 512 WiFi RX buffers - **Without PSRAM guaranteed**: Conservative optimized settings with 65KB TCP windows and 64 WiFi buffers -If you experience out-of-memory issues, you can disable these optimizations by setting `enable_high_performance: false` in the {{< docref "network" >}} component configuration. +If you experience out-of-memory issues, you can disable these optimizations by setting `enable_high_performance: false` in the [Network](/components/network/) component configuration. ### Audio Codec Performance @@ -188,7 +184,7 @@ Increasing the buffer size may reduce stuttering, but do not set it to the entir Only set `task_stack_in_psram` to true if you have many components configured and your logs show that memory allocation failed. It is slower, especially if your PSRAM doesn't support `octal` mode. -{{< anchor "media_player-speaker-troubleshooting" >}} + ## Troubleshooting @@ -202,11 +198,11 @@ If the audio quality is poor, check your output speaker configuration. Experimen If there is a noticeable delay before a pause command takes effect, reduce the buffer duration in the output speaker. Be sure to adjust both the hardware speaker component settings and the `mixer` speaker component settings, if used. -If audio stutters, and your device has PSRAM, add ({{< docref "psram" >}} configured with `ignore_not_found: false`) so that the networking stack uses higher performance optimization settings. +If audio stutters, and your device has PSRAM, add ([Psram](/components/psram/) configured with `ignore_not_found: false`) so that the networking stack uses higher performance optimization settings. -## See also +## See Also -- {{< docref "/components/speaker" >}} -- {{< docref "/components/speaker/mixer" >}} -- {{< docref "/components/speaker/resampler" >}} -- {{< docref "index/" >}} +- [Speaker Components](/components/speaker/) +- [Mixer Speaker](/components/speaker/mixer/) +- [Resampler Speaker](/components/speaker/resampler/) +- [Media Player Component](/components/media_player/) diff --git a/content/components/micro_wake_word.md b/src/content/docs/components/micro_wake_word.mdx similarity index 94% rename from content/components/micro_wake_word.md rename to src/content/docs/components/micro_wake_word.mdx index 81f12a2325..4f28bc1532 100644 --- a/content/components/micro_wake_word.md +++ b/src/content/docs/components/micro_wake_word.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for creating a custom wake word using microWakeWord." title: "Micro Wake Word" -params: - seo: - description: Instructions for creating a custom wake word using microWakeWord. - image: voice-assistant.svg --- +import APIRef from '@components/APIRef.astro'; + ESPHome implements an on-device wake word detection framework from [microWakeWord](https://github.com/kahrendt/microWakeWord). This repository/library allows you to create a custom wake word for your ESPHome device. @@ -26,7 +24,7 @@ micro_wake_word: ## Configuration variables -- **microphone** (**Required**, [Microphone Source Configuration](/components/microphone#config-microphone-source)): The {{< docref "/components/microphone/index" "microphone" >}} settings to use for audio input. +- **microphone** (**Required**, [Microphone Source Configuration](/components/microphone#config-microphone-source)): The [microphone](/components/microphone/) settings to use for audio input. - **stop_after_detection** (*Optional*, boolean): Whether to stop the component after detecting a wake word. Defaults to `true`. - **models** (**Required**, list): The models to use. Only the first model is enabled by default on the first boot. Each model's enabled state is then saved/restored to/from the flash. @@ -171,5 +169,5 @@ The model JSON file contains the following fields that are all **required** unle ## See Also -- {{< docref "voice_assistant/" >}} -- {{< apiref "micro_wake_word/micro_wake_word.h" "micro_wake_word/micro_wake_word.h" >}} +- [Voice Assistant](/components/voice_assistant/) +- diff --git a/content/components/micronova.md b/src/content/docs/components/micronova.mdx similarity index 93% rename from content/components/micronova.md rename to src/content/docs/components/micronova.mdx index 6ad562d5ed..849ae39f25 100644 --- a/content/components/micronova.md +++ b/src/content/docs/components/micronova.mdx @@ -1,11 +1,14 @@ --- description: "Instructions for setting up a MicroNova board based pellet stove in ESPHome." title: "MicroNova based pellet stove" -params: - seo: - description: Instructions for setting up a MicroNova board based pellet stove in ESPHome. --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import micronovaSerialImg from './images/micronova_serial.png'; +import micronovaSerialLayoutImg from './images/micronova_serial_layout.png'; +import micronovaOptocouplersImg from './images/micronova_optocouplers.png'; + The MicroNova component allows you to integrate a pellet stove with a MicroNova board in ESPHome. It uses [UART](/components/uart) for communication. @@ -25,14 +28,19 @@ The [UART](/components/uart) must be configured with a baud rate 1200, 8 data bi Most MicroNova based pellet stoves have a serial output. In most cases this output has 4 pins: GND, 5v, 20V and DATA. -{{< img src="micronova_serial.png" alt="Image" width="50.0%" class="align-center" >}} + -{{< img src="micronova_serial_layout.png" alt="Image" width="50.0%" class="align-center" >}} + You will have to build a simple circuit to interface with your stove. It is based on optocouplers for galvanic separation and logic level shifting between 5v and 3V3. -{{< img src="micronova_optocouplers.png" alt="Image" caption="Optocoupler interface circuit (credit: philibertc)" width="100.0%" class="align-center" >}} +
    See the references below for all the details about te circuit. diff --git a/content/components/microphone/i2s_audio.md b/src/content/docs/components/microphone/i2s_audio.mdx similarity index 95% rename from content/components/microphone/i2s_audio.md rename to src/content/docs/components/microphone/i2s_audio.mdx index 9aba871dd1..be674805f2 100644 --- a/content/components/microphone/i2s_audio.md +++ b/src/content/docs/components/microphone/i2s_audio.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for setting up I²S based microphones in ESPHome." title: "I²S Audio Microphone" -params: - seo: - description: Instructions for setting up I²S based microphones in ESPHome. - image: i2s_audio.svg --- -The `i2s_audio` microphone platform allows you to receive audio via the {{< docref "/components/i2s_audio" >}}. +The `i2s_audio` microphone platform allows you to receive audio via the [I2S Audio](/components/i2s_audio/). This platform only works on ESP32 based chips. @@ -103,6 +99,6 @@ microphone: use_apll: true ``` -## See also +## See Also -- {{< docref "index/" >}} +- [Microphone Component](/components/microphone/) diff --git a/content/components/microphone/_index.md b/src/content/docs/components/microphone/index.mdx similarity index 82% rename from content/components/microphone/_index.md rename to src/content/docs/components/microphone/index.mdx index a5b6312e46..4793b47e24 100644 --- a/content/components/microphone/_index.md +++ b/src/content/docs/components/microphone/index.mdx @@ -1,16 +1,14 @@ --- description: "Instructions for setting up microphones in ESPHome." title: "Microphone Components" -params: - seo: - description: Instructions for setting up microphones in ESPHome. - image: folder-open.svg +sidebar: + label: "Microphone Components" --- The `microphone` domain contains common functionality shared across the microphone platforms. -{{< anchor "config-microphone" >}} + ## Base Microphone Configuration @@ -19,7 +17,7 @@ Configuration variables: - **on_data** (*Optional*, [Automation](/automations)): An automation to perform when new data is received. -{{< anchor "config-microphone-source" >}} + ## Microphone Source Configuration @@ -27,7 +25,7 @@ A microphone source configuration is used by components to ensure that it receiv Configuration variables: -- **microphone** (**Required**, [ID](/guides/configuration-types#id)): The {{< docref "/components/microphone/index" "microphone" >}} to use for input. +- **microphone** (**Required**, [ID](/guides/configuration-types#id)): The [microphone](/components/microphone/) to use for input. - **bits_per_sample** (*Optional*, int): The bits per sample to use as input to the component. May be restricted by the component to a specific value. @@ -38,7 +36,7 @@ Configuration variables: - **gain_factor** (*Optional*, int): The gain factor to apply to audio read from the microphone. Ranges from 1 to 64. Defaults to 1, no gain. -{{< anchor "microphone-actions" >}} + ## Microphone Actions @@ -49,36 +47,36 @@ Configuration variables: **id** (*Optional*, [ID](/guides/configuration-types#id)): The microphone to control. Defaults to the only one in YAML. -{{< anchor "microphone-capture" >}} + ### `microphone.capture` Action This action will start capturing audio data from the microphone. The data will be passed to any components listening and will be available in the `on_data` trigger. -{{< anchor "microphone-stop_capture" >}} + ### `microphone.stop_capture` Action This action will stop capturing audio data from the microphone. -{{< anchor "microphone-mute" >}} + ### `microphone.mute` Action This action will apply a software mute to the audio data from the microphone before passing it to any listening components. -{{< anchor "microphone-unmute" >}} + ### `microphone.unmute` Action This action will disable applying a software mute initiated with `microphone.mute`. -{{< anchor "microphone-triggers" >}} + ## Microphone Triggers -{{< anchor "microphone-on_data" >}} + ### `microphone.on_data` Trigger @@ -99,7 +97,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The microphone to check. Defaults to the only one in YAML. -{{< anchor "microphone-conditions" >}} + ## Microphone Conditions @@ -110,18 +108,16 @@ Configuration variables: **id** (*Optional*, [ID](/guides/configuration-types#id)): The microphone to check. Defaults to the only one in YAML. -{{< anchor "microphone-is_capturing" >}} + ### `microphone.is_capturing` Condition This condition will check if the microphone is currently capturing audio data. -{{< anchor "microphone-is_muted" >}} + ### `microphone.is_muted` Condition This condition will check if the microphone is currently apply a software mute. ## Platforms - -## See Also diff --git a/content/components/modbus.md b/src/content/docs/components/modbus.mdx similarity index 79% rename from content/components/modbus.md rename to src/content/docs/components/modbus.mdx index 3e2b589a4e..4761572294 100644 --- a/content/components/modbus.md +++ b/src/content/docs/components/modbus.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up Modbus in ESPHome." title: "Modbus Component" -params: - seo: - description: Instructions for setting up Modbus in ESPHome. --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "modbus" >}} + + The Modbus protocol is used by many consumer and industrial devices for communication. This component allows components in ESPHome to communicate to those devices via RTU protocol. You can access the coils, inputs, holding, read registers from your devices as sensors, switches, selects, numbers or various other ESPHome components and present them to your favorite Home Automation system. You can even write them as binary or float ouptputs from ESPHome. @@ -55,14 +54,14 @@ modbus: ## See Also -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) - [Modbus RTU Protocol Description](https://www.modbustools.com/modbus.html) - [UART Bus](/components/uart) -- {{< apiref "modbus/modbus.h" "modbus/modbus.h" >}} +- diff --git a/content/components/modbus_controller.md b/src/content/docs/components/modbus_controller.mdx similarity index 95% rename from content/components/modbus_controller.md rename to src/content/docs/components/modbus_controller.mdx index c89784dd33..197aec2af9 100644 --- a/content/components/modbus_controller.md +++ b/src/content/docs/components/modbus_controller.mdx @@ -1,26 +1,24 @@ --- description: "Instructions for setting up the Modbus Controller component." title: "Modbus Controller" -params: - seo: - description: Instructions for setting up the Modbus Controller component. - image: modbus.png --- +import { Image } from 'astro:assets'; + The `modbus_controller` component creates a RS485 connection to either: - control a Modbus server (slave) device, letting your ESPHome node to act as a Modbus client (master). You can access the coils, inputs, holding, read registers from your devices as sensors, switches, selects, numbers or various other ESPHome components and present them to your favorite Home Automation system. You can even write them as binary or float ouptputs from ESPHome. - let your ESPHome node act as a Modbus server, allowing a ModBUS client to read data (like sensor values) from your ESPHome node. -To choose the role, set the `role` attribute of the {{< docref "/components/modbus" >}} upon which this `modbus_controller` component relies. `client` is the default. +To choose the role, set the `role` attribute of the [Modbus](/components/modbus/) upon which this `modbus_controller` component relies. `client` is the default. -{{< img src="modbus.png" alt="Image" width="25%" class="align-center" >}} + ## Hardware setup You need an RS485 transceiver module: -{{< img src="rs485.jpg" alt="Image" >}} + See [How is this RS485 module working?](https://electronics.stackexchange.com/questions/244425/how-is-this-rs485-module-working) on stackexchange for more details. @@ -37,7 +35,7 @@ On the bus side, you need 120 Ohm termination resistors at the ends of the bus c > > Serial logging can be disabled by setting `baud_rate: 0`. > -> See {{< docref "logger/" >}} for more details +> See [Logger](/components/logger/) for more details > > ```yaml > logger: @@ -59,7 +57,7 @@ On the bus side, you need 120 Ohm termination resistors at the ends of the bus c - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval that the sensors should be checked. Defaults to 60 seconds. -{{< anchor "modbus_controller-offline_skip_updates" >}} + - **offline_skip_updates** (*Optional*, integer): When a slave doesn't respond to a command, it is marked as offline, you can specify how many updates will be skipped while it is offline. If using a bus with multiple @@ -273,7 +271,7 @@ binary_sensor: bitmask: 0x8000 ``` -{{< anchor "modbus_custom_command" >}} + ## Using `custom_command` @@ -342,7 +340,7 @@ sensors: accuracy_decimals: 1 ``` -{{< anchor "modbus_register_count" >}} + ## Optimizing modbus communications @@ -676,13 +674,13 @@ The response is mapped to the sensor based on `register_count` and offset in byt > - multiply: 0.01 > ``` -{{< anchor "modbusseealso" >}} + -{{< anchor "modbus_controller-automations" >}} + ## Automation -{{< anchor "modbus_controller-on_command_sent" >}} + ### `on_command_sent` @@ -698,7 +696,7 @@ modbus_controller: - number.increment: modbus_commands ``` -{{< anchor "modbus_controller-on_online" >}} + ### `on_online` @@ -714,7 +712,7 @@ modbus_controller: - logger.log: "Controller back online!" ``` -{{< anchor "modbus_controller-on_offline" >}} + ### `on_offline` @@ -732,14 +730,14 @@ modbus_controller: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} +- [Modbus Component](/components/modbus/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) - [Modbus RTU Protocol Description](https://www.modbustools.com/modbus.html) - [EPEVER MPPT Solar Charge Controller (Tracer-AN Series)](https://devices.esphome.io/devices/epever_mptt_tracer_an) - [Genvex, Nibe, Alpha-Innotec heat recovery ventilation](https://devices.esphome.io/devices/Genvex-Nibe-AlphaInnotec-heat-recovery-ventilation) diff --git a/content/components/mqtt.md b/src/content/docs/components/mqtt.mdx similarity index 96% rename from content/components/mqtt.md rename to src/content/docs/components/mqtt.mdx index 50a765d545..83181aab42 100644 --- a/content/components/mqtt.md +++ b/src/content/docs/components/mqtt.mdx @@ -1,18 +1,18 @@ --- description: "Instructions for setting up the MQTT client to communicate with the local network in ESPHome." title: "MQTT Client Component" -params: - seo: - description: Instructions for setting up the MQTT client to communicate with the local network in ESPHome. - image: mqtt.png --- +import { Image } from 'astro:assets'; +import mqttAvailabilityImg from './images/mqtt-availability.png'; +import APIRef from '@components/APIRef.astro'; + The MQTT Client Component sets up the MQTT connection to your broker. If you are connecting to Home Assistant, you may prefer to use the native API, in which case this is not needed. > [!WARNING] -> If you enable MQTT and you do *not* use the {{< docref "/components/api" >}}, you must +> If you enable MQTT and you do *not* use the [Api](/components/api/), you must > remove the `api:` configuration or set `reboot_timeout: 0s`, otherwise the ESP will > reboot every 15 minutes because no client connected to the native API. @@ -140,7 +140,7 @@ mqtt: - **wait_for_connection** (*Optional*, bool): Blocks other components from starting until the MQTT connection is established. Defaults to `false`. -{{< anchor "mqtt-message" >}} + ## MQTTMessage @@ -174,7 +174,7 @@ Configuration options: - **retain** (*Optional*, boolean): If the published message should have a retain flag on or not. Defaults to `true`. -{{< anchor "mqtt-device_discovery" >}} + ## MQTT device discovery @@ -225,7 +225,7 @@ JSON keys: - **project_version** (*Optional*, string): `dashboard_import.package_import_url`. - **api_encryption** (*Optional*, string): API encryption type. -{{< anchor "mqtt-using_device_discovery_with_home_assistant" >}} + ## Using device discovery with Home Assistant @@ -253,7 +253,7 @@ mqtt: discover_ip: True # enable device discovery ``` -{{< anchor "mqtt-using_with_home_assistant_entities" >}} + ## Using with Home Assistant MQTT entities @@ -305,7 +305,7 @@ in the ESPHome MQTT component configuration will cause Home Assistant to include in the generated entity names (e.g. `sensor.uptime` becomes `sensor._uptime` ), making it easier to distinguish the entities in various entity lists. -{{< anchor "mqtt-defaults" >}} + ## Defaults @@ -321,7 +321,7 @@ configuration. That way, you can use your existing wildcards like `home/+/#` together with ESPHome. All other features of ESPHome (like availability) should still work correctly. -{{< anchor "mqtt-last_will_birth" >}} + ## Last Will And Birth Messages @@ -330,7 +330,7 @@ and birth message feature of MQTT to achieve availability reporting for Home Assistant. If the node is not connected to MQTT, Home Assistant will show all its entities as unavailable (a feature 😉). -{{< img src="mqtt-availability.png" alt="Image" width="50.0%" class="align-center" >}} + By default, ESPHome will send a retained MQTT message to `/status` with payload `online`, and will tell the @@ -358,7 +358,7 @@ If the birth message and last will message have empty topics or topics that are different from each other, availability reporting will be disabled. -{{< anchor "mqtt-ssl_fingerprints" >}} + ## SSL Fingerprints @@ -385,7 +385,7 @@ mqtt: - a502ff13999f8b398ef1834f1123650b3236fc07 ``` -{{< anchor "mqtt-tls-idf" >}} + ## TLS (ESP32) @@ -446,7 +446,7 @@ mqtt: -----END CERTIFICATE----- ``` -{{< anchor "config-mqtt-component" >}} + ## MQTT Component Base Configuration @@ -513,7 +513,7 @@ command_retain: false ## Triggers -{{< anchor "mqtt-on_connect" >}} + ### `on_connect` Trigger @@ -534,7 +534,7 @@ mqtt: } ``` -{{< anchor "mqtt-on_disconnect" >}} + ### `on_disconnect` Trigger @@ -563,7 +563,7 @@ mqtt: } ``` -{{< anchor "mqtt-on_message" >}} + ### `on_message` Trigger @@ -621,7 +621,7 @@ mqtt: > }); > ``` -{{< anchor "mqtt-on_json_message" >}} + ## `on_json_message` Trigger @@ -689,7 +689,7 @@ mqtt: ## Actions -{{< anchor "mqtt-publish_action" >}} + ### `mqtt.publish` Action @@ -737,7 +737,7 @@ on_...: > id(mqtt_client).publish("the/topic", "The Payload"); > ``` -{{< anchor "mqtt-publish_json_action" >}} + ### `mqtt.publish_json` Action @@ -837,7 +837,7 @@ on_...: ## Conditions -{{< anchor "mqtt-connected_condition" >}} + ### `mqtt.connected` Condition @@ -870,4 +870,4 @@ on_...: ## See Also -- {{< apiref "mqtt/mqtt_client.h" "mqtt/mqtt_client.h" >}} +- diff --git a/content/components/network.md b/src/content/docs/components/network.mdx similarity index 92% rename from content/components/network.md rename to src/content/docs/components/network.mdx index f1b0dafc14..9cfe77ce7e 100644 --- a/content/components/network.md +++ b/src/content/docs/components/network.mdx @@ -1,10 +1,6 @@ --- description: "Network component" title: "Network component" -params: - seo: - description: - image: network-wifi.svg --- The network component is a global configuration for all types of @@ -30,7 +26,7 @@ The network component can automatically apply optimized settings for components ### PSRAM-Aware Optimizations -The optimization level depends on whether PSRAM is guaranteed to be available (configured via the {{< docref "psram" >}} component with `ignore_not_found: false`): +The optimization level depends on whether PSRAM is guaranteed to be available (configured via the [Psram](/components/psram/) component with `ignore_not_found: false`): **With PSRAM guaranteed:** @@ -53,5 +49,5 @@ The optimization level depends on whether PSRAM is guaranteed to be available (c ## See Also -- {{< docref "wifi/" >}} -- {{< docref "ethernet/" >}} +- [WiFi Component](/components/wifi/) +- [Ethernet Component](/components/ethernet/) diff --git a/content/components/nrf52.md b/src/content/docs/components/nrf52.mdx similarity index 97% rename from content/components/nrf52.md rename to src/content/docs/components/nrf52.mdx index dd771aae10..b52db48459 100644 --- a/content/components/nrf52.md +++ b/src/content/docs/components/nrf52.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the NRF52 platform for ESPHome." title: "NRF52 Platform" -params: - seo: - description: Configuration for the NRF52 platform for ESPHome. - image: nrf52.svg --- This component contains platform-specific options for the NRF52 platform. @@ -211,6 +207,6 @@ nrf52: ## See Also -- {{< docref "esphome/" >}} +- [ESPHome Core Configuration](/components/esphome/) - [Guidelines for Adafruit Bootloader Memory Map](https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather?view=all#hathach-memory-map) diff --git a/content/components/number/homeassistant.md b/src/content/docs/components/number/homeassistant.mdx similarity index 84% rename from content/components/number/homeassistant.md rename to src/content/docs/components/number/homeassistant.mdx index c051d630e7..1ef8c7d512 100644 --- a/content/components/number/homeassistant.md +++ b/src/content/docs/components/number/homeassistant.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Home Assistant numbers with ESPHome." title: "Home Assistant Number" -params: - seo: - description: Instructions for setting up Home Assistant numbers with ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `homeassistant` number platform allows you to create a number that is synchronized with Home Assistant. Min, Max and Step are not configurable for this platform because they are taken from the Home Assistant entity. @@ -36,4 +34,4 @@ with the [`number.set` Action](/components/number#number-set_action). ## See Also - [Automation](/automations) -- {{< apiref "homeassistant/number/homeassistant_number.h" "homeassistant/number/homeassistant_number.h" >}} +- diff --git a/content/components/number/_index.md b/src/content/docs/components/number/index.mdx similarity index 89% rename from content/components/number/_index.md rename to src/content/docs/components/number/index.mdx index a6a1cf3694..321709d9d0 100644 --- a/content/components/number/_index.md +++ b/src/content/docs/components/number/index.mdx @@ -1,11 +1,12 @@ --- description: "Instructions for setting up number components in ESPHome." title: "Number Component" -params: - seo: - description: Instructions for setting up number components in ESPHome. - image: folder-open.svg +sidebar: + label: "Number Component" --- +import APIRef from '@components/APIRef.astro'; +import APIClass from '@components/APIClass.astro'; + ESPHome has support for components to create a number entity. A number entity is like a sensor that can read a value from a device, but is useful when that value @@ -14,7 +15,7 @@ can be set by the user/frontend. > [!NOTE] > Home Assistant Core 2021.7 or higher is required for ESPHome number entities to work. -{{< anchor "config-number" >}} + ## Base Number Configuration @@ -47,7 +48,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -55,12 +56,12 @@ Configuration variables: of measurement for the number. - **mode** (*Optional*, string): Defines how the number should be displayed in the frontend. - See + See [https://developers.home-assistant.io/docs/core/entity/number/#properties](https://developers.home-assistant.io/docs/core/entity/number/#properties) for a list of available options. Defaults to `"auto"`. - **device_class** (*Optional*, string): The device class for the number. - See + See [https://www.home-assistant.io/integrations/number/#device-class](https://www.home-assistant.io/integrations/number/#device-class) for a list of available options. - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). @@ -82,7 +83,7 @@ MQTT Options: You can access the most recent state of the number in [lambdas](/automations/templates#config-lambda) using `id(number_id).state`. -{{< anchor "number-on_value" >}} + ### `on_value` @@ -102,7 +103,7 @@ number: Configuration variables: See [Automation](/automations). -{{< anchor "number-on_value_range" >}} + ### `on_value_range` @@ -132,7 +133,7 @@ Configuration variables: - **below** (*Optional*, float): The maximum for the trigger. - See [Automation](/automations). -{{< anchor "number-in_range_condition" >}} + ### `number.in_range` Condition @@ -158,7 +159,7 @@ Configuration variables: - **above** (*Optional*, float): The minimum for the condition. - **below** (*Optional*, float): The maximum for the condition. -{{< anchor "number-set_action" >}} + ### `number.set` Action @@ -176,7 +177,7 @@ Configuration variables: - **value** (**Required**, float, [templatable](/automations/templates)): The value to set the number to. -{{< anchor "number-increment_action" >}} + ### `number.increment` Action @@ -200,7 +201,7 @@ Configuration variables: work when the number component uses a minimum and maximum value. Defaults to `true`. -{{< anchor "number-decrement_action" >}} + ### `number.decrement` Action @@ -224,7 +225,7 @@ Configuration variables: work when the number component uses a minimum and maximum value. Defaults to `true`. -{{< anchor "number-to-min_action" >}} + ### `number.to_min` Action @@ -243,7 +244,7 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the number component to update. -{{< anchor "number-to-max_action" >}} + ### `number.to_max` Action @@ -262,7 +263,7 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the number component to update. -{{< anchor "number-operation_action" >}} + ### `number.operation` Action @@ -299,7 +300,7 @@ Configuration variables: wrap around the value when respectively the minimum or maximum value of the number is exceeded. -{{< anchor "number-lambda_calls" >}} + ### lambda calls @@ -329,5 +330,5 @@ advanced stuff (see the full API Reference for more info). ## See Also -- {{< apiref "Number" "number/number.h" >}} -- {{< apiref "NumberCall" "number/number_call.h" >}} +- +- diff --git a/content/components/number/lvgl.md b/src/content/docs/components/number/lvgl.mdx similarity index 76% rename from content/components/number/lvgl.md rename to src/content/docs/components/number/lvgl.mdx index 5986736c6a..9d33e2d656 100644 --- a/content/components/number/lvgl.md +++ b/src/content/docs/components/number/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL widget number component." title: "LVGL Number" -params: - seo: - description: Instructions for setting up an LVGL widget number component. - image: ../images/lvgl_c_num.png --- The `lvgl` number platform creates a number component from an LVGL widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widgets are [`arc`](/components/lvgl/widgets#lvgl-widget-arc), [`bar`](/components/lvgl/widgets#lvgl-widget-bar), [`slider`](/components/lvgl/widgets#lvgl-widget-slider) and [`spinbox`](/components/lvgl/widgets#lvgl-widget-spinbox). A single number supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome number component. @@ -34,15 +30,15 @@ number: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Arc widget](/components/lvgl/widgets#lvgl-widget-arc) - [Bar widget](/components/lvgl/widgets#lvgl-widget-bar) - [Slider widget](/components/lvgl/widgets#lvgl-widget-slider) - [Spinbox widget](/components/lvgl/widgets#lvgl-widget-spinbox) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) diff --git a/content/components/number/modbus_controller.md b/src/content/docs/components/number/modbus_controller.mdx similarity index 87% rename from content/components/number/modbus_controller.md rename to src/content/docs/components/number/modbus_controller.mdx index 212b7c4dce..aa320943d0 100644 --- a/content/components/number/modbus_controller.md +++ b/src/content/docs/components/number/modbus_controller.mdx @@ -1,9 +1,6 @@ --- description: "Instructions for setting up a modbus_controller device sensor." title: "Modbus Controller Number" -params: - seo: - description: Instructions for setting up a modbus_controller device sensor. --- The `modbus_controller` platform creates a Number from a modbus_controller. @@ -47,7 +44,7 @@ When the Number is updated a modbus write command is created sent to the device. Parameters passed into the lambda - **x** (float): The parsed float value of the modbus data - - **data** (std::vector`): vector containing the complete raw modbus response bytes for this sensor *note:* because the response contains data for all registers in the same range you have to use `data[item->offset]` to get the first response byte for your sensor. - **item** (const pointer to a SensorItem derived object): The sensor object itself. @@ -63,7 +60,7 @@ When the Number is updated a modbus write command is created sent to the device. Parameters passed into the lambda - **x** (float): The float value to be sent to the modbus device - - **payload** (`std::vector&payload` ): empty vector for the payload. The lambda can add 16 bit raw modbus register words. + - **payload** (`std::vector &payload`): empty vector for the payload. The lambda can add 16 bit raw modbus register words. *note:* because the response contains data for all registers in the same range you have to use `data[item->offset]` to get the first response byte for your sensor. - **item** (const pointer to a SensorItem derived object): The sensor object itself. @@ -104,13 +101,13 @@ number: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) -- +- [https://www.modbustools.com/modbus.html](https://www.modbustools.com/modbus.html) diff --git a/content/components/number/template.md b/src/content/docs/components/number/template.mdx similarity index 91% rename from content/components/number/template.md rename to src/content/docs/components/number/template.mdx index 2d2cb91d5a..53c0af1be0 100644 --- a/content/components/number/template.md +++ b/src/content/docs/components/number/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template numbers with ESPHome." title: "Template Number" -params: - seo: - description: Instructions for setting up template numbers with ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` number platform allows you to create a number with templated values using [lambdas](/automations/templates#config-lambda). @@ -57,4 +55,4 @@ with the [`number.set` Action](/components/number#number-set_action). ## See Also - [Automation](/automations) -- {{< apiref "template/number/template_number.h" "template/number/template_number.h" >}} +- diff --git a/content/components/number/tuya.md b/src/content/docs/components/number/tuya.mdx similarity index 90% rename from content/components/number/tuya.md rename to src/content/docs/components/number/tuya.mdx index 730335de46..7147854bf4 100644 --- a/content/components/number/tuya.md +++ b/src/content/docs/components/number/tuya.mdx @@ -1,16 +1,14 @@ --- description: "Instructions for setting up a Tuya device integer or enum datapoint.." title: "Tuya Number" -params: - seo: - description: Instructions for setting up a Tuya device integer or enum datapoint.. - image: upload.svg --- +import APIRef from '@components/APIRef.astro'; + The `tuya` number platform allows you to create a number that controls -a tuya serial component. This platform requires {{< docref "/components/tuya" >}} to be configured. +a tuya serial component. This platform requires [Tuya](/components/tuya/) to be configured. -When {{< docref "/components/tuya" >}} has been properly configured, it will output a list of +When [Tuya](/components/tuya/) has been properly configured, it will output a list of valid data points to the log after start-up. ```text @@ -101,5 +99,5 @@ Therefore there is also an option to store them on the ESPHome side and they wil ## See Also -- {{< docref "/components/number" >}} -- {{< apiref "tuya/number/tuya_number.h" "tuya/number/tuya_number.h" >}} +- [Number Component](/components/number/) +- diff --git a/content/components/one_wire/ds2484.md b/src/content/docs/components/one_wire/ds2484.mdx similarity index 75% rename from content/components/one_wire/ds2484.md rename to src/content/docs/components/one_wire/ds2484.mdx index 23490d7272..7a827573b8 100644 --- a/content/components/one_wire/ds2484.md +++ b/src/content/docs/components/one_wire/ds2484.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a Dallas (Analog Devices) 1-Wire bus via a DS2484 IC to communicate with 1-wire devices in ESPHome" title: "1-Wire Bus via DS2484" -params: - seo: - description: Instructions for setting up a Dallas (Analog Devices) 1-Wire bus via a DS2484 IC to communicate with 1-wire devices in ESPHome - image: one-wire.svg --- +import APIRef from '@components/APIRef.astro'; + The `ds2484` platform provides access to 1-Wire busses via DS2484 device using the [I²C Bus](/components/i2c) for communication. @@ -25,12 +23,11 @@ one_wire: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. Required if you have multiple 1-Wire busses. -- **i2c_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the {{< docref "/components/i2c" >}}. Required if you +- **i2c_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [I2C](/components/i2c/). Required if you have configured multiple I2C busses. -### See Also - -- {{< docref "index/" >}} -- {{< apiref "one_wire/one_wire_bus.h" "one_wire/one_wire_bus.h" >}} +## See Also +- [One Wire Component](/components/one_wire/) - [Guidelines for Reliable Long Line 1-Wire Networks](https://www.analog.com/en/technical-articles/guidelines-for-reliable-long-line-1wire-networks.html) +- diff --git a/content/components/one_wire/gpio.md b/src/content/docs/components/one_wire/gpio.mdx similarity index 77% rename from content/components/one_wire/gpio.md rename to src/content/docs/components/one_wire/gpio.mdx index d7bd77df9b..f44d37a3af 100644 --- a/content/components/one_wire/gpio.md +++ b/src/content/docs/components/one_wire/gpio.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a Dallas (Analog Devices) 1-Wire bus via a GPIO pin to communicate with 1-wire devices in ESPHome" title: "1-Wire Bus via GPIO" -params: - seo: - description: Instructions for setting up a Dallas (Analog Devices) 1-Wire bus via a GPIO pin to communicate with 1-wire devices in ESPHome - image: one-wire.svg --- +import APIRef from '@components/APIRef.astro'; + The `gpio` platform uses the CPU to generate the bus signals on an on-board GPIO pin. @@ -25,9 +23,8 @@ one_wire: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. Required if you have multiple busses. -### See Also - -- {{< docref "index/" >}} -- {{< apiref "one_wire/one_wire_bus.h" "one_wire/one_wire_bus.h" >}} +## See Also +- [One Wire Component](/components/one_wire/) - [Guidelines for Reliable Long Line 1-Wire Networks](https://www.analog.com/en/technical-articles/guidelines-for-reliable-long-line-1wire-networks.html) +- diff --git a/content/components/one_wire/images/dallas-log.png b/src/content/docs/components/one_wire/images/dallas-log.png similarity index 100% rename from content/components/one_wire/images/dallas-log.png rename to src/content/docs/components/one_wire/images/dallas-log.png diff --git a/content/components/one_wire/_index.md b/src/content/docs/components/one_wire/index.mdx similarity index 80% rename from content/components/one_wire/_index.md rename to src/content/docs/components/one_wire/index.mdx index 9fcf979b95..f0382f235f 100644 --- a/content/components/one_wire/_index.md +++ b/src/content/docs/components/one_wire/index.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up a Dallas (Analog Devices) 1-Wire bus to communicate with 1-wire devices in ESPHome" title: "1-Wire Bus" -params: - seo: - description: Instructions for setting up a Dallas (Analog Devices) 1-Wire bus to communicate with 1-wire devices in ESPHome - image: one-wire.svg +sidebar: + label: "1-Wire Bus" --- +import { Image } from 'astro:assets'; +import dallasLogImg from './images/dallas-log.png'; +import APIRef from '@components/APIRef.astro'; + The `one_wire` component allows you to use supported 1-Wire devices in ESPHome. ## Hardware @@ -28,10 +30,9 @@ sensors configured. Here's an example log: -{{< img src="dallas-log.png" alt="Image" >}} + ## See Also -- {{< apiref "one_wire/one_wire_bus.h" "one_wire/one_wire_bus.h" >}} - - [Guidelines for Reliable Long Line 1-Wire Networks](https://www.analog.com/en/technical-articles/guidelines-for-reliable-long-line-1wire-networks.html) +- diff --git a/content/components/online_image.md b/src/content/docs/components/online_image.mdx similarity index 91% rename from content/components/online_image.md rename to src/content/docs/components/online_image.mdx index 031db54367..678d7f8dd0 100644 --- a/content/components/online_image.md +++ b/src/content/docs/components/online_image.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for displaying images downloaded at runtime in ESPHome." title: "Online Image Component" -params: - seo: - description: Instructions for displaying images downloaded at runtime in ESPHome. - image: image-sync-outline.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "online_image" >}} + + With this component you can define images that will be downloaded, decoded and drawn at runtime. @@ -26,7 +24,7 @@ With this component you can define images that will be downloaded, decoded and d > [!WARNING] > This component requires a fair amount of RAM; both for downloading the image, and for storing the decoded image. It might work on devices without PSRAM, but there is no guarantee. -This component has a dependency to {{< docref "/components/http_request" >}}; the configuration options you set to the `http_request` component will also apply here. +This component has a dependency to [Http Request](/components/http_request/); the configuration options you set to the `http_request` component will also apply here. ```yaml online_image: @@ -50,7 +48,7 @@ online_image: - **resize** (*Optional*, string): If set, this will resize the image to fit inside the given dimensions `WIDTHxHEIGHT` and preserve the aspect ratio. -- **placeholder** (*Optional*, [ID](/guides/configuration-types#id)): ID of an {{< docref "/components/image" "Image" >}} to display while the downloaded image is not yet ready. +- **placeholder** (*Optional*, [ID](/guides/configuration-types#id)): ID of an [Image](/components/image/) to display while the downloaded image is not yet ready. This placeholder image will **not** be resized; regardless of the `resize` option value for the `online_image`. - **type** (*Required*): Specifies how to encode image internally. @@ -177,9 +175,9 @@ display: By default `online_image` is configured to not automatically update/download the image; in order to do the initial download, you can either: -- Add a `component.update ` in the `on_connect:` action on the {{< docref "/components/wifi" >}} component. +- Add a `component.update ` in the `on_connect:` action on the [Wifi](/components/wifi/) component. - Explicitly set an `update_interval`. -- Call `component.update ` in an {{< docref "/components/interval" >}} block. +- Call `component.update ` in an [Interval](/components/interval/) block. - Call `component.update ` where you need the image to be downloaded/updated. ```yaml @@ -190,6 +188,6 @@ wifi: ## See Also -- {{< apiref "online_image/online_image.h" "online_image/online_image.h" >}} -- {{< docref "image" "Image Component" >}} -- {{< docref "animation" "Animation Component" >}} +- [Image Component](/components/image/) +- [Animation Component](/components/animation/) +- diff --git a/content/components/opentherm.md b/src/content/docs/components/opentherm.mdx similarity index 93% rename from content/components/opentherm.md rename to src/content/docs/components/opentherm.mdx index 8118d2267e..4b7b15b201 100644 --- a/content/components/opentherm.md +++ b/src/content/docs/components/opentherm.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up OpenTherm bridge in ESPHome." title: "OpenTherm" -params: - seo: - description: Instructions for setting up OpenTherm bridge in ESPHome. - image: ../components/images/opentherm-shield.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import openthermShieldImg from './images/opentherm-shield.png'; +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + OpenTherm (OT) is a standard communications protocol used in central heating systems for the communication between central heating appliances and a thermostatic controller. As a standard, OpenTherm is independent of any single manufacturer. A controller from manufacturer A can in principle be used to control a boiler from manufacturer B. @@ -18,7 +20,12 @@ ready-made adapters or roll your own: - [Ihor Melnyk's OpenTherm Adapter](http://ihormelnyk.com/opentherm_adapter) - [Jiří Praus' OpenTherm Gateway Arduino Shield](https://www.tindie.com/products/jiripraus/opentherm-gateway-arduino-shield/) -{{< img src="opentherm-shield.png" alt="Image" caption="DIYLESS Master OpenTherm Shield." width="50.0%" class="align-center" >}} +
    > [!NOTE] > This component acts only as an OpenTherm master (for example, a thermostat or controller) and not as a slave or @@ -103,8 +110,8 @@ logger: The most important function for a thermostat is to set the boiler temperature setpoint. This component has three ways to provide this input: using a Home Assistant sensor from which the setpoint can be read, using a -{{< docref "/components/number" >}}, or defining an output to which other components can write. For most users, the last -option is the most useful one, as it can be combined with the {{< docref "/components/climate/pid" >}} component to create a +[Number](/components/number/), or defining an output to which other components can write. For most users, the last +option is the most useful one, as it can be combined with the [Pid](/components/climate/pid/) component to create a thermostat that works as you would expect a thermostat to work. See [Basic PID thermostat](#thermostat-pid-basic) for an example. ### Numerical values @@ -335,7 +342,7 @@ available: - `otc_hc_ratio_ub` : OTC heat curve ratio upper bound - `otc_hc_ratio_lb` : OTC heat curve ratio lower bound -{{< anchor "on-the-fly-message-editing" >}} + ## On-the-fly Message Editing @@ -370,7 +377,7 @@ opentherm: } ``` -You can check the {{< apistruct "OpenthermData" "opentherm::OpenthermData" >}} for the list of all available fields. +You can check the for the list of all available fields. ## Examples @@ -391,7 +398,7 @@ number: name: "Boiler Control setpoint" ``` -{{< anchor "thermostat-pid-basic" >}} + ### Basic PID thermostat @@ -473,13 +480,13 @@ climate: ## See Also -- {{< apiref "API Reference: OpenthermHub" "opentherm/hub.h" >}} -- {{< apiref "API Reference: OpenthermInput" "opentherm/input.h" >}} -- {{< apiref "API Reference: OpenthermNumber" "opentherm/number/number.h" >}} -- {{< apiref "API Reference: OpenthermOutput" "opentherm/output/output.h" >}} -- {{< apiref "API Reference: OpenthermSwitch" "opentherm/switch/switch.h" >}} - [OpenTherm thermostat with ESPHome and Home Assistant](https://olegtarasov.me/opentherm-thermostat-esphome/) — real-world use case for this component. - [Development repository](https://github.com/olegtarasov/esphome-opentherm) — new features will be tested here before proposing them to ESPHome core. +- +- +- +- +- diff --git a/content/components/openthread.md b/src/content/docs/components/openthread.mdx similarity index 86% rename from content/components/openthread.md rename to src/content/docs/components/openthread.mdx index d4ff03d6da..09b844b6c9 100644 --- a/content/components/openthread.md +++ b/src/content/docs/components/openthread.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up OpenThread component." title: "OpenThread Component" -params: - seo: - description: Instructions for setting up OpenThread component. - image: openthread.png --- +import APIRef from '@components/APIRef.astro'; + [Thread](https://www.threadgroup.org) is a low-power mesh networking standard for IoT devices. The low-power aspect is important for battery-powered smart home devices. However, it’s also low-bandwidth, making it ideal for applications that don’t send a lot of data, like switches or motion sensors. -Thread uses the same RF technology as Zigbee (IEEE 802.15.4), but provides IPv6 connectivity similar to Wi-Fi. Unlike Zigbee, Thread by itself does not allow controlling devices: It is just a communication protocol. To control the Thread devices, a higher-level protocol is required: Matter or Apple HomeKit or {{< docref "/components/api" "ESPHome API" >}}. +Thread uses the same RF technology as Zigbee (IEEE 802.15.4), but provides IPv6 connectivity similar to Wi-Fi. Unlike Zigbee, Thread by itself does not allow controlling devices: It is just a communication protocol. To control the Thread devices, a higher-level protocol is required: Matter or Apple HomeKit or [ESPHome API](/components/api/). -This component allows ESPHome nodes to communicate with Home Assistant over a Thread network. It permits sending sensor state to Home Assistant and receiving {{< docref "/components/ota/index" "Over-the-Air Updates (OTA)" >}}. This OpenThread component relies on [OpenThread](https://openthread.io) which is an open-source implementation of Thread. +This component allows ESPHome nodes to communicate with Home Assistant over a Thread network. It permits sending sensor state to Home Assistant and receiving [Over-the-Air Updates (OTA)](/components/ota/). This OpenThread component relies on [OpenThread](https://openthread.io) which is an open-source implementation of Thread. > [!NOTE] > You will need a [Thread border router](https://www.home-assistant.io/integrations/thread#about-thread-border-routers) to connect your node to a Thread network. The border router adapts IPv6 packets on your Home Assistant network to 6LoWPAN packets on your Thread network, allowing communication across both networks. @@ -29,7 +27,7 @@ esp32: type: esp-idf ``` -{{< anchor "config-openthread" >}} + ## Full Configuration @@ -87,7 +85,7 @@ openthread: ## OpenThread Device Type -See +See [https://openthread.io/guides/thread-primer/node-roles-and-types](https://openthread.io/guides/thread-primer/node-roles-and-types) - **FTD** - Full Thread Device, sets CONFIG_OPENTHREAD_FTD, observed behavior is that this enables a REED (Router Eligible End Device) and can be promoted to a Router. - **MTD** - Minimal Thread Device, sets CONFIG_OPENTHREAD_MTD, cannot be promoted to Router. Switching back from MTD to FTD will not result in a REED unless Non Volatile Storage (NVS) is cleared. @@ -99,7 +97,7 @@ If the device is always awake, the API timeout is 60 seconds, so a ping request ## See Also -- {{< docref "/components/text_sensor/openthread_info" >}} -- {{< docref "/components/network" >}} -- {{< apiref "openthread/openthread.h" "openthread/openthread.h" >}} -- +- [OpenThread Info Text Sensor](/components/text_sensor/openthread_info/) +- [Network component](/components/network/) +- [https://openthread.io/](https://openthread.io/) +- diff --git a/content/components/ota/esphome.md b/src/content/docs/components/ota/esphome.mdx similarity index 85% rename from content/components/ota/esphome.md rename to src/content/docs/components/ota/esphome.mdx index 655e003b9d..bea44f23d2 100644 --- a/content/components/ota/esphome.md +++ b/src/content/docs/components/ota/esphome.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up ESPHome's Over-The-Air (OTA) platform to allow remote updating of devices." title: "ESPHome OTA Updates" -params: - seo: - description: Instructions for setting up ESPHome's Over-The-Air (OTA) platform to allow remote updating of devices. - image: system-update.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "config-ota_esphome" >}} + + ESPHome's Over-The-Air (OTA) platform allows you to remotely install modified/updated firmware binaries onto your ESPHome devices over their network interface (Wi-Fi / Ethernet / Thread). @@ -17,7 +15,7 @@ This platform is used by both the ESPHome dashboard as well as the command line In addition to OTA updates, ESPHome also supports a "safe mode" to help with recovery if/when updates don't work as expected. This is automatically enabled by this component, but it may be disabled if desired. See -{{< docref "/components/safe_mode" >}} for details. +[Safe Mode](/components/safe_mode/) for details. ```yaml # Example configuration entry @@ -43,7 +41,7 @@ ota: - **version** (*Optional*, int): Version of OTA protocol to use. Version 2 is more stable. To downgrade to legacy ESPHome, the device should be updated with OTA version 1 first. Defaults to `2`. -- All [automations](/automations) supported by {{< docref "/components/ota" >}}. +- All [automations](/automations) supported by [Ota](/components/ota/). > [!NOTE] > After a serial upload, ESP8266 modules must be reset before OTA updates will work. If you attempt to perform an OTA @@ -88,7 +86,7 @@ If OTA is already enabled without a password, simply add a `password:` line to t ## See Also -- {{< apiref "ota/ota_component.h" "ota/ota_component.h" >}} -- {{< docref "/components/ota" >}} -- {{< docref "/components/ota/http_request" >}} -- {{< docref "/components/safe_mode" >}} +- [Over-the-Air Updates](/components/ota/) +- [OTA Update via HTTP Request](/components/ota/http_request/) +- [Safe Mode](/components/safe_mode/) +- diff --git a/content/components/ota/http_request.md b/src/content/docs/components/ota/http_request.mdx similarity index 87% rename from content/components/ota/http_request.md rename to src/content/docs/components/ota/http_request.mdx index 6766fe6692..daa167dfcc 100644 --- a/content/components/ota/http_request.md +++ b/src/content/docs/components/ota/http_request.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Over-The-Air (OTA) updates for ESPs to download firmwares remotely by HTTP." title: "OTA Update via HTTP Request" -params: - seo: - description: Instructions for setting up Over-The-Air (OTA) updates for ESPs to download firmwares remotely by HTTP. - image: system-update.svg --- +import APIRef from '@components/APIRef.astro'; + The OTA (Over The Air) via HTTP Request update component allows your devices to install updated firmware on their own. To use it, in your device's configuration, you specify a URL from which the device will download the binary @@ -15,7 +13,7 @@ download and installation of the new firmware. Once complete, the device is rebo Since the device functions as an HTTP(S) client, it can be on a foreign network or behind a firewall. This mechanism is primarily useful with either standalone or MQTT-only devices. -To use this platform, the {{< docref "http_request/" >}} component must be present in your configuration. +To use this platform, the [Http Request](/components/http_request/) component must be present in your configuration. ```yaml # Example configuration entry @@ -25,9 +23,9 @@ ota: ## Configuration variables -- All [automations](/automations) supported by {{< docref "/components/ota" >}}. +- All [automations](/automations) supported by [Ota](/components/ota/). -{{< anchor "ota_http_request-flash_action" >}} + ## `ota.http_request.flash` Action @@ -63,7 +61,6 @@ on_...: authentication. > [!NOTE] -> > - You can obtain the `firmware.ota.bin` file from either: > > - **ESPHome dashboard** (HA add-on): download in *"OTA format"* (formerly "legacy format") @@ -107,7 +104,7 @@ on_...: ## See Also -- {{< apiref "ota/ota_component.h" "ota/ota_component.h" >}} -- {{< docref "/components/ota" >}} -- {{< docref "/components/ota/esphome" >}} -- {{< docref "/components/safe_mode" >}} +- [Over-the-Air Updates](/components/ota/) +- [ESPHome OTA Updates](/components/ota/esphome/) +- [Safe Mode](/components/safe_mode/) +- diff --git a/content/components/ota/_index.md b/src/content/docs/components/ota/index.mdx similarity index 90% rename from content/components/ota/_index.md rename to src/content/docs/components/ota/index.mdx index 63c9ac7343..7dc5d207af 100644 --- a/content/components/ota/_index.md +++ b/src/content/docs/components/ota/index.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up the Over-The-Air (OTA) component to allow remote updating of devices." title: "Over-the-Air Updates" -params: - seo: - description: Instructions for setting up the Over-The-Air (OTA) component to allow remote updating of devices. - image: system-update.svg +sidebar: + label: "Over-the-Air Updates" --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "config-ota" >}} + + ESPHome supports remotely updating a device "over-the-air" (OTA). Each update mechanism is a *platform* of the base `ota` component and will have its own configuration variables. @@ -46,7 +46,7 @@ ota: - **on_state_change** (*Optional*, [Automation](/automations)): An action to be performed when an OTA update state change happens. See [`on_state_change`](#ota-on_state_change). -{{< anchor "ota-automations" >}} + ## OTA Automations @@ -60,7 +60,7 @@ update process. When using these automation triggers, note that: - Your automation action(s) must not consume any significant amount of time; if they do, OTA updates may fail. -{{< anchor "ota-on_begin" >}} + ### `on_begin` @@ -74,7 +74,7 @@ ota: - logger.log: "OTA start" ``` -{{< anchor "ota-on_progress" >}} + ### `on_progress` @@ -91,7 +91,7 @@ ota: args: ["x"] ``` -{{< anchor "ota-on_end" >}} + ### `on_end` @@ -110,7 +110,7 @@ ota: - logger.log: "OTA end" ``` -{{< anchor "ota-on_error" >}} + ### `on_error` @@ -129,7 +129,7 @@ ota: args: ["x"] ``` -{{< anchor "ota-on_state_change" >}} + ### `on_state_change` @@ -157,9 +157,9 @@ ota: In addition to OTA updates, ESPHome also supports a "safe mode" to help with recovery if/when updates don't work as expected. This is automatically enabled by the `ota` component, but it may be disabled if desired. See -{{< docref "/components/safe_mode" >}} for details. +[Safe Mode](/components/safe_mode/) for details. ## See Also -- {{< apiref "ota/ota_component.h" "ota/ota_component.h" >}} -- {{< docref "/components/safe_mode" >}} +- [Safe Mode](/components/safe_mode/) +- diff --git a/content/components/ota/web_server.md b/src/content/docs/components/ota/web_server.mdx similarity index 82% rename from content/components/ota/web_server.md rename to src/content/docs/components/ota/web_server.mdx index 937d30dda9..67da0b122d 100644 --- a/content/components/ota/web_server.md +++ b/src/content/docs/components/ota/web_server.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up Over-The-Air (OTA) updates via the ESPHome web interface." title: "Web Server OTA Updates" -params: - seo: - description: Instructions for setting up Over-The-Air (OTA) updates via the ESPHome web interface. - image: system-update.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "config-ota_web_server" >}} + + The Web Server OTA platform allows you to upload new firmware binaries to your ESPHome devices directly through the web interface. This provides a user-friendly way to update devices without needing command-line tools or the ESPHome @@ -37,10 +35,10 @@ ota: ## Configuration variables - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -- All [automations](/automations) supported by {{< docref "/components/ota" >}}. +- All [automations](/automations) supported by [Ota](/components/ota/). > [!NOTE] -> This platform requires the {{< docref "/components/web_server" >}} component to be configured in your device. +> This platform requires the [Web Server](/components/web_server/) component to be configured in your device. ## Migration from Legacy Configuration @@ -105,15 +103,14 @@ ota: 1. Wait for the upload to complete - the device will automatically reboot with the new firmware > [!WARNING] -> > - Always use `firmware.bin` or `firmware.ota.bin` files for OTA updates, not `firmware.factory.bin` files > - The web interface may become unresponsive during the update process - this is normal > - Do not power off the device during an update ## See Also -- {{< apiref "ota/ota_component.h" "ota/ota_component.h" >}} -- {{< docref "/components/ota" >}} -- {{< docref "/components/ota/esphome" >}} -- {{< docref "/components/web_server" >}} -- {{< docref "/components/safe_mode" >}} +- [Over-the-Air Updates](/components/ota/) +- [ESPHome OTA Updates](/components/ota/esphome/) +- [Web Server Component](/components/web_server/) +- [Safe Mode](/components/safe_mode/) +- diff --git a/content/components/output/ac_dimmer.md b/src/content/docs/components/output/ac_dimmer.mdx similarity index 83% rename from content/components/output/ac_dimmer.md rename to src/content/docs/components/output/ac_dimmer.mdx index c37bc87dbc..0e6115ab13 100644 --- a/content/components/output/ac_dimmer.md +++ b/src/content/docs/components/output/ac_dimmer.mdx @@ -1,19 +1,25 @@ --- description: "Instructions for setting up AC Dimmer component in ESPHome." title: "AC Dimmer Component" -params: - seo: - description: Instructions for setting up AC Dimmer component in ESPHome. - image: ac_dimmer.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import robotdynDimmerImg from './images/robotdyn_dimmer.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ac_dimmer` component allows you to connect a dimmable light or other load which supports phase control dimming to your ESPHome project. There are several already made boards which are compatible with this component, such as the [RobotDyn dimmer](https://robotdyn.com/ac-light-dimmer-module-1-channel-3-3v-5v-logic-ac-50-60hz-220v-110v.html). -{{< img src="robotdyn_dimmer.jpg" alt="Image" caption="RobotDyn Module. Image by RobotDyn" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -66,6 +72,6 @@ the monochromatic light. ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< apiref "ac_dimmer/ac_dimmer.h" "ac_dimmer/ac_dimmer.h" >}} +- [Output Component](/components/output/) +- [Monochromatic Light](/components/light/monochromatic/) +- diff --git a/content/components/output/ble_client.md b/src/content/docs/components/output/ble_client.mdx similarity index 79% rename from content/components/output/ble_client.md rename to src/content/docs/components/output/ble_client.mdx index 2656bace96..3d513f8492 100644 --- a/content/components/output/ble_client.md +++ b/src/content/docs/components/output/ble_client.mdx @@ -1,21 +1,17 @@ --- description: "Writes a binary value to a BLE device." title: "BLE Client Binary Output" -params: - seo: - description: Writes a binary value to a BLE device. - image: bluetooth.svg --- The `ble_client` component is a output that can write a binary value to service characteristics of BLE devices. -For more information on BLE services and characteristics, see {{< docref "/components/ble_client" >}}. +For more information on BLE services and characteristics, see [Ble Client](/components/ble_client/). > [!WARNING] > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -46,5 +42,5 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/ble_client" >}} +- [Output Component](/components/output/) +- [BLE Client](/components/ble_client/) diff --git a/content/components/output/bp1658cj.md b/src/content/docs/components/output/bp1658cj.mdx similarity index 88% rename from content/components/output/bp1658cj.md rename to src/content/docs/components/output/bp1658cj.mdx index 65d268c09a..fe55f73d7a 100644 --- a/content/components/output/bp1658cj.md +++ b/src/content/docs/components/output/bp1658cj.mdx @@ -1,12 +1,9 @@ --- description: "Instructions for setting up BP1658CJ LED drivers in ESPHome." title: "BP1658CJ LED driver" -params: - seo: - description: Instructions for setting up BP1658CJ LED drivers in ESPHome. --- -{{< anchor "bp1658cj-component" >}} + ## Component/Hub @@ -89,7 +86,7 @@ bp1658cj: | 14 | 140 mA | | 15 | 150 mA | -{{< anchor "bp1658cj-output" >}} + ## Output @@ -123,10 +120,10 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/sm2135" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [SM2135 LED driver](/components/output/sm2135/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) diff --git a/content/components/output/bp5758d.md b/src/content/docs/components/output/bp5758d.mdx similarity index 84% rename from content/components/output/bp5758d.md rename to src/content/docs/components/output/bp5758d.mdx index 0a7f503b57..7cf70f462d 100644 --- a/content/components/output/bp5758d.md +++ b/src/content/docs/components/output/bp5758d.mdx @@ -1,12 +1,9 @@ --- description: "Instructions for setting up BP5758D LED drivers in ESPHome." title: "BP5758D LED driver" -params: - seo: - description: Instructions for setting up BP5758D LED drivers in ESPHome. --- -{{< anchor "bp5758d-component" >}} + ## Component/Hub @@ -43,7 +40,7 @@ bp5758d: > and increase slowly, comparing to a stock bulb to verify > what is safe for your model. -{{< anchor "bp5758d-output" >}} + ## Output @@ -79,10 +76,10 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/sm2135" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [SM2135 LED driver](/components/output/sm2135/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) diff --git a/content/components/output/dac7678.md b/src/content/docs/components/output/dac7678.mdx similarity index 93% rename from content/components/output/dac7678.md rename to src/content/docs/components/output/dac7678.mdx index 802b721f2c..296c58d152 100644 --- a/content/components/output/dac7678.md +++ b/src/content/docs/components/output/dac7678.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for setting up the DAC7678." title: "DAC7678" -params: - seo: - description: Instructions for setting up the DAC7678. - image: dac7678.svg --- -{{< anchor "dac7678-component" >}} + ## Component/Hub @@ -44,7 +40,7 @@ output: - **internal_reference** (*Optional*, bool): State of the internal reference. Defaults to `false`. -{{< anchor "dac7678-output" >}} + ## DAC7678 Output @@ -109,4 +105,4 @@ output: ## See Also -- {{< docref "/components/output" >}} +- [Output Component](/components/output/) diff --git a/content/components/output/esp32_dac.md b/src/content/docs/components/output/esp32_dac.mdx similarity index 75% rename from content/components/output/esp32_dac.md rename to src/content/docs/components/output/esp32_dac.mdx index 8ff018c704..c3dfa33904 100644 --- a/content/components/output/esp32_dac.md +++ b/src/content/docs/components/output/esp32_dac.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up ESP32 digital-to-analog converter." title: "ESP32 DAC" -params: - seo: - description: Instructions for setting up ESP32 digital-to-analog converter. - image: dac.svg --- +import APIRef from '@components/APIRef.astro'; + The ESP32 DAC platform allows you to output analog voltages using the 8-bit digital-to-analog -converter of the ESP32. Unlike the {{< docref "/components/output/ledc" >}}, which can simulate an analog +converter of the ESP32. Unlike the [Ledc](/components/output/ledc/), which can simulate an analog signal by using a fast switching frequency, the hardware DAC can output a *real* analog signal with no need for additional filtering. @@ -50,7 +48,7 @@ light: ## Use Cases - Generating a specific (and dynamic) reference voltage for an external sensor or ADC, such as the - {{< docref "/components/sensor/ads1115" >}} + [Ads1115](/components/sensor/ads1115/) - Controlling the bias of a transistor - Driving a bar graph or large amount of LEDs using an analog-controlled LED driver like the LM3914 @@ -61,10 +59,10 @@ light: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "esp32_dac/esp32_dac.h" "esp32_dac/esp32_dac.h" >}} +- [Output Component](/components/output/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/esp8266_pwm.md b/src/content/docs/components/output/esp8266_pwm.mdx similarity index 78% rename from content/components/output/esp8266_pwm.md rename to src/content/docs/components/output/esp8266_pwm.mdx index 55e15ca304..bd88bcba6f 100644 --- a/content/components/output/esp8266_pwm.md +++ b/src/content/docs/components/output/esp8266_pwm.mdx @@ -1,16 +1,14 @@ --- description: "Instructions for setting up ESP8266 software-based PWMs." title: "ESP8266 Software PWM Output" -params: - seo: - description: Instructions for setting up ESP8266 software-based PWMs. - image: pwm.png --- +import APIRef from '@components/APIRef.astro'; + The ESP8266 Software PWM platform allows you to use a software PWM on the pins GPIO0-GPIO16 on your ESP8266. Note that this is a software PWM, so there can be some flickering during periods of high WiFi activity. Hardware PWMs -like the one on the ESP32 (see {{< docref "ledc/" >}}) are preferred. +like the one on the ESP32 (see [Ledc](/components/output/ledc/)) are preferred. ```yaml # Example configuration entry @@ -43,7 +41,7 @@ light: > A hard reset fixes the problem - if you have this issue please power cycle the device, that > should fix it. -{{< anchor "output-esp8266_pwm-set_frequency_action" >}} + ## `output.esp8266_pwm.set_frequency` Action @@ -65,9 +63,9 @@ Configuration variables: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "esp8266_pwm/esp8266_pwm.h" "esp8266_pwm/esp8266_pwm.h" >}} +- [Output Component](/components/output/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/gp8403.md b/src/content/docs/components/output/gp8403.mdx similarity index 84% rename from content/components/output/gp8403.md rename to src/content/docs/components/output/gp8403.mdx index fd75e770fe..bf6d168573 100644 --- a/content/components/output/gp8403.md +++ b/src/content/docs/components/output/gp8403.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up GP8403 outputs in ESPHome." title: "GP8403 Component" -params: - seo: - description: Instructions for setting up GP8403 outputs in ESPHome. - image: gp8403.svg --- The ``gp8403`` (12-bit) and ``gp8413`` (15-bit) are 2-channel DAC output modules respectively. They -require an {{< docref "/components/i2c" >}} to be setup. +require an [I2C](/components/i2c/) to be setup. ## Component/Hub @@ -49,5 +45,5 @@ Configuration variables: ## See Also -- {{< docref "/components/output/esp32_dac" >}} -- {{< docref "/components/output" >}} +- [ESP32 DAC](/components/output/esp32_dac/) +- [Output Component](/components/output/) diff --git a/content/components/output/gpio.md b/src/content/docs/components/output/gpio.mdx similarity index 59% rename from content/components/output/gpio.md rename to src/content/docs/components/output/gpio.mdx index 33bedbd07c..dcb9c53b93 100644 --- a/content/components/output/gpio.md +++ b/src/content/docs/components/output/gpio.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for setting up binary outputs for GPIO pins." title: "GPIO Output" -params: - seo: - description: Instructions for setting up binary outputs for GPIO pins. - image: gpio.svg --- +import APIRef from '@components/APIRef.astro'; + The GPIO output component is quite simple: It exposes a single GPIO pin as an output component. Note that output components are **not** switches and -will not show up in Home Assistant. See {{< docref "/components/switch/gpio" >}}. +will not show up in Home Assistant. See [Gpio](/components/switch/gpio/). ```yaml # Example configuration entry @@ -28,15 +26,15 @@ output: > [!WARNING] > This is an **output component** and will not be visible from the frontend. Output components are intermediary > components that can be attached to for example lights. To have a GPIO pin in the Home Assistant frontend, please -> see the {{< docref "/components/switch/gpio" >}}. +> see the [Gpio](/components/switch/gpio/). ## See Also -- {{< docref "/components/switch/gpio" >}} -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/light/binary" >}} -- {{< docref "/components/fan/binary" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "gpio/output/gpio_binary_output.h" "gpio/output/gpio_binary_output.h" >}} +- [GPIO Switch](/components/switch/gpio/) +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Binary Light](/components/light/binary/) +- [Binary Fan](/components/fan/binary/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/images/pca9685-full.jpg b/src/content/docs/components/output/images/pca9685-full.jpg similarity index 100% rename from content/components/output/images/pca9685-full.jpg rename to src/content/docs/components/output/images/pca9685-full.jpg diff --git a/content/components/output/images/robotdyn_dimmer.jpg b/src/content/docs/components/output/images/robotdyn_dimmer.jpg similarity index 100% rename from content/components/output/images/robotdyn_dimmer.jpg rename to src/content/docs/components/output/images/robotdyn_dimmer.jpg diff --git a/content/components/output/images/sigma-delta-example.png b/src/content/docs/components/output/images/sigma-delta-example.png similarity index 100% rename from content/components/output/images/sigma-delta-example.png rename to src/content/docs/components/output/images/sigma-delta-example.png diff --git a/content/components/output/images/tlc59208f-full.jpg b/src/content/docs/components/output/images/tlc59208f-full.jpg similarity index 100% rename from content/components/output/images/tlc59208f-full.jpg rename to src/content/docs/components/output/images/tlc59208f-full.jpg diff --git a/content/components/output/_index.md b/src/content/docs/components/output/index.mdx similarity index 67% rename from content/components/output/_index.md rename to src/content/docs/components/output/index.mdx index 3bcd201ba2..af83dff22d 100644 --- a/content/components/output/_index.md +++ b/src/content/docs/components/output/index.mdx @@ -1,20 +1,17 @@ --- description: "Instructions for setting up generic outputs in ESPHome" title: "Output Component" -params: - seo: - description: Instructions for setting up generic outputs in ESPHome - image: folder-open.svg +sidebar: + label: "Output Component" --- - -{{< anchor "output" >}} +import APIRef from '@components/APIRef.astro'; Each platform of the `output` domain exposes some output to ESPHome. These are grouped into two categories: `binary` outputs (that can only be ON/OFF) and `float` outputs (like PWM, can output any rational value between 0 and 1). -{{< anchor "config-output" >}} + ## Base Output Configuration @@ -34,7 +31,7 @@ output: Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The id to use for this output component. -- **power_supply** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/power_supply" "power supply" >}} to connect to +- **power_supply** (*Optional*, [ID](/guides/configuration-types#id)): The [power supply](/components/power_supply/) to connect to this output. When the output is enabled, the power supply will automatically be switched on too. @@ -56,7 +53,7 @@ Float outputs only: > The `min_power` and `max_power` values are automatically clamped to ensure `0.0 ≤ min_power ≤ max_power ≤ 1.0`. > This prevents invalid configurations and ensures stable output behavior. -{{< anchor "output-turn_on_action" >}} + ### `output.turn_on` Action @@ -75,7 +72,7 @@ on_...: > id(light_1).turn_on(); > ``` -{{< anchor "output-turn_off_action" >}} + ### `output.turn_off` Action @@ -94,16 +91,16 @@ on_...: > id(light_1).turn_off(); > ``` -{{< anchor "output-set_level_action" >}} + ### `output.set_level` Action This action sets the float output to the given level when executed. > [!NOTE] -> This only works with floating point outputs like {{< docref "/components/output/ac_dimmer" >}}, -> {{< docref "/components/output/esp8266_pwm" >}}, {{< docref "/components/output/ledc" >}}, -> {{< docref "/components/output/sigma_delta_output" >}}, {{< docref "/components/output/slow_pwm" >}}. +> This only works with floating point outputs like [Ac Dimmer](/components/output/ac_dimmer/), +> [Esp8266 Pwm](/components/output/esp8266_pwm/), [Ledc](/components/output/ledc/), +> [Sigma Delta Output](/components/output/sigma_delta_output/), [Slow Pwm](/components/output/slow_pwm/). ```yaml on_...: @@ -121,7 +118,7 @@ on_...: > id(light_1).set_level(0.5); > ``` -{{< anchor "output-set_min_power_action" >}} + ### `output.set_min_power` Action @@ -129,9 +126,9 @@ This action sets the minimum output power level for the specified float output p It allows you to dynamically adjust the `min_power` configuration variable at runtime. > [!NOTE] -> This only works with floating point outputs like {{< docref "/components/output/ac_dimmer" >}}, -> {{< docref "/components/output/esp8266_pwm" >}}, {{< docref "/components/output/ledc" >}}, -> {{< docref "/components/output/sigma_delta_output" >}}, {{< docref "/components/output/slow_pwm" >}}. +> This only works with floating point outputs like [Ac Dimmer](/components/output/ac_dimmer/), +> [Esp8266 Pwm](/components/output/esp8266_pwm/), [Ledc](/components/output/ledc/), +> [Sigma Delta Output](/components/output/sigma_delta_output/), [Slow Pwm](/components/output/slow_pwm/). ```yaml on_...: @@ -149,7 +146,7 @@ on_...: > id(light_1).set_min_power(0.2); > ``` -{{< anchor "output-set_max_power_action" >}} + ### `output.set_max_power` Action @@ -157,9 +154,9 @@ This action sets the maximum output power level for the specified float output p It allows you to dynamically adjust the `max_power` configuration variable at runtime. > [!NOTE] -> This only works with floating point outputs like {{< docref "/components/output/ac_dimmer" >}}, -> {{< docref "/components/output/esp8266_pwm" >}}, {{< docref "/components/output/ledc" >}}, -> {{< docref "/components/output/sigma_delta_output" >}}, {{< docref "/components/output/slow_pwm" >}}. +> This only works with floating point outputs like [Ac Dimmer](/components/output/ac_dimmer/), +> [Esp8266 Pwm](/components/output/esp8266_pwm/), [Ledc](/components/output/ledc/), +> [Sigma Delta Output](/components/output/sigma_delta_output/), [Slow Pwm](/components/output/slow_pwm/). ```yaml on_...: @@ -177,14 +174,14 @@ on_...: > id(light_1).set_max_power(0.8); > ``` -## Full Output Index - -- {{< docref "/components/switch/output" >}} -- {{< docref "/components/power_supply" >}} -- {{< docref "/components/light/binary" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/fan/binary" >}} -- {{< docref "/components/fan/speed" >}} -- {{< apiref "binary_output.h" "output/binary_output.h" >}}, - {{< apiref "float_output.h" "output/float_output.h" >}} +## See Also + +- [Generic Output Switch](/components/switch/output/) +- [Power Supply Component](/components/power_supply/) +- [Binary Light](/components/light/binary/) +- [Monochromatic Light](/components/light/monochromatic/) +- [RGB Light](/components/light/rgb/) +- [Binary Fan](/components/fan/binary/) +- [Speed Fan](/components/fan/speed/) +- +- diff --git a/content/components/output/ledc.md b/src/content/docs/components/output/ledc.mdx similarity index 89% rename from content/components/output/ledc.md rename to src/content/docs/components/output/ledc.mdx index aa7ee5e955..5092950ad6 100644 --- a/content/components/output/ledc.md +++ b/src/content/docs/components/output/ledc.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up LEDC hardware PWM outputs on the ESP32." title: "ESP32 LEDC Output" -params: - seo: - description: Instructions for setting up LEDC hardware PWM outputs on the ESP32. - image: pwm.png --- +import APIRef from '@components/APIRef.astro'; + The LEDC output component exposes a [LEDC PWMchannel](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/ledc.html) of the ESP32 as an output component. @@ -30,7 +28,7 @@ Advanced options: Note: When configuring custom frequencies for two or more outputs, ensure that you manually specify channel 0, 2, 4, 6 for each output. This will prevent issues that arise from automatic selection, which chooses adjacent channels with shared timers. See -[Issue #3114](https://github.com/esphome/issues/issues/3114) for more details. +[issues#3114](https://github.com/esphome/issues/issues/3114) for more details. - **phase_angle** (*Optional*, float): Set a phase angle to the other channel of this timer. Range 0-360°, defaults to 0° @@ -104,7 +102,7 @@ a long transition, e.g. turning slowly off. The ESP8266 for instance has *usually* a frequency of 1000Hz with a resolution of 10 bits. This means that there are only 4 steps between each value. -{{< anchor "output-ledc-set_frequency_action" >}} + ## `output.ledc.set_frequency` Action @@ -126,10 +124,10 @@ Configuration variables: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "ledc/ledc_output.h" "ledc/ledc_output.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) - [esp-idf LEDC API docs](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/ledc.html) +- diff --git a/content/components/output/libretiny_pwm.md b/src/content/docs/components/output/libretiny_pwm.mdx similarity index 78% rename from content/components/output/libretiny_pwm.md rename to src/content/docs/components/output/libretiny_pwm.mdx index 60843d9638..fe6c57eb4d 100644 --- a/content/components/output/libretiny_pwm.md +++ b/src/content/docs/components/output/libretiny_pwm.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up LibreTiny hardware PWMs." title: "LibreTiny PWM Output" -params: - seo: - description: Instructions for setting up LibreTiny hardware PWMs. - image: pwm.png --- +import APIRef from '@components/APIRef.astro'; + The LibreTiny PWM platform allows you to use a hardware PWM on BK72xx and RTL87xx chips. Refer to [LibreTiny/Boards](https://docs.libretiny.eu/link/boards) to find your board @@ -35,7 +33,7 @@ light: - All other options from [Output](/components/output#config-output). -{{< anchor "output-libretiny_pwm-set_frequency_action" >}} + ## `output.libretiny_pwm.set_frequency` Action @@ -57,9 +55,9 @@ Configuration variables: ## See Also -- {{< docref "/components/libretiny" >}} -- {{< docref "/components/output" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "libretiny_pwm/libretiny_pwm.h" "libretiny_pwm/libretiny_pwm.h" >}} +- [LibreTiny Platform](/components/libretiny/) +- [Output Component](/components/output/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/mcp4461.md b/src/content/docs/components/output/mcp4461.mdx similarity index 92% rename from content/components/output/mcp4461.md rename to src/content/docs/components/output/mcp4461.mdx index ce8de244bb..9dadfe4e99 100644 --- a/content/components/output/mcp4461.md +++ b/src/content/docs/components/output/mcp4461.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up MCP4461 outputs on the ESP." title: "MCP4461 Component" -params: - seo: - description: Instructions for setting up MCP4461 outputs on the ESP. - image: mcp4461.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "mcp4461-component" >}} + + The MCP4461 output component enables the use of an 8‑bit external quad digital potentiometer/rheostat via I²C. See the [MCP4461 Datasheet](https://www.microchip.com/en-us/product/mcp4461) for more information. @@ -116,6 +114,6 @@ esphome: ## See Also -- {{< docref "/components/output" >}} -- {{< apiref "mcp4461/mcp4461.h" "mcp4461/mcp4461.h" >}} -- {{< apiref "mcp4461/output/mcp4461_output.h" "mcp4461/output/mcp4461_output.h" >}} +- [Output Component](/components/output/) +- +- diff --git a/content/components/output/mcp4725.md b/src/content/docs/components/output/mcp4725.mdx similarity index 87% rename from content/components/output/mcp4725.md rename to src/content/docs/components/output/mcp4725.mdx index d8dcb810b5..8a1885f57d 100644 --- a/content/components/output/mcp4725.md +++ b/src/content/docs/components/output/mcp4725.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up MCP4725 outputs on the ESP." title: "MCP4725 Output" -params: - seo: - description: Instructions for setting up MCP4725 outputs on the ESP. - image: mcp4725.jpg --- The MCP4725 output component allows to use [12bit external DAC](https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-guide/all) @@ -49,5 +45,5 @@ in this case only `TX` channels are bi-directional (so you must use 2 `TX` chann ## See Also -- {{< docref "/components/output/esp32_dac" >}} -- {{< docref "/components/output/esp8266_pwm" >}} +- [ESP32 DAC](/components/output/esp32_dac/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) diff --git a/content/components/output/mcp4728.md b/src/content/docs/components/output/mcp4728.mdx similarity index 91% rename from content/components/output/mcp4728.md rename to src/content/docs/components/output/mcp4728.mdx index 30d7cb7dbe..666ebd055c 100644 --- a/content/components/output/mcp4728.md +++ b/src/content/docs/components/output/mcp4728.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up MCP4728 outputs on the ESP." title: "MCP4728 Component" -params: - seo: - description: Instructions for setting up MCP4728 outputs on the ESP. - image: mcp4728.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "mcp4728-component" >}} + + The MCP4728 output component allows to use [12bit external quad DAC](https://www.adafruit.com/product/4470) in order to have analog outputs on any board by using [I²C](/components/i2c). Devices default address is `0x60`. @@ -93,6 +91,6 @@ When `vref=internal`, output voltage will range from 0.000V to 2.048V with `gain ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp32_dac" >}} -- {{< apiref "mcp4728/mcp4728.h" "mcp4728/mcp4728.h" >}} +- [Output Component](/components/output/) +- [ESP32 DAC](/components/output/esp32_dac/) +- diff --git a/content/components/output/mcp47a1.md b/src/content/docs/components/output/mcp47a1.mdx similarity index 79% rename from content/components/output/mcp47a1.md rename to src/content/docs/components/output/mcp47a1.mdx index 2049c6c4e5..2e287c1043 100644 --- a/content/components/output/mcp47a1.md +++ b/src/content/docs/components/output/mcp47a1.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up MCP47A1 outputs on the ESP." title: "MCP47A1 Output" -params: - seo: - description: Instructions for setting up MCP47A1 outputs on the ESP. - image: mcp47a1.svg --- The `mcp47a1` output component allows to use [6bit external DAC](https://www.microchip.com/en-us/product/MCP47A1) @@ -42,6 +38,6 @@ on_...: ## See Also -- {{< docref "/components/output/mcp4725" >}} -- {{< docref "/components/output/esp32_dac" >}} -- {{< docref "/components/output/esp8266_pwm" >}} +- [MCP4725 Output](/components/output/mcp4725/) +- [ESP32 DAC](/components/output/esp32_dac/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) diff --git a/content/components/output/modbus_controller.md b/src/content/docs/components/output/modbus_controller.mdx similarity index 86% rename from content/components/output/modbus_controller.md rename to src/content/docs/components/output/modbus_controller.mdx index 888bc1b72d..c872ad70e5 100644 --- a/content/components/output/modbus_controller.md +++ b/src/content/docs/components/output/modbus_controller.mdx @@ -1,9 +1,6 @@ --- description: "Instructions for setting up a modbus_controller device output." title: "Modbus Controller Output" -params: - seo: - description: Instructions for setting up a modbus_controller device output. --- The `modbus_controller` platform creates an output from a modbus_controller. The goal is to write a value to a modbus register on a device. @@ -33,13 +30,13 @@ The `modbus_controller` platform creates an output from a modbus_controller. The - **multiply** (*Optional*, float): multiply the incoming value with this factor before writing it to the device. Ignored if `write_lambda` is defined. Only valid for `register_type: holding`. - **use_write_multiple** (*Optional*, boolean): By default the modbus command *Function Code 6 (Preset Single Registers)* is used for setting the holding register if only one register is set. If your device only supports *Function Code 16 (Preset Multiple Registers)* set this option to `true`. - **write_lambda** (*Optional*, [lambda](/automations/templates#config-lambda)): - Lambda is evaluated before the modbus write command is created. The value is passed in as `float x` and an empty vector is passed in as `std::vector&payload`. + Lambda is evaluated before the modbus write command is created. The value is passed in as `float x` and an empty vector is passed in as `std::vector &payload`. You can directly define the payload by adding data to payload then the return value is ignored and the content of payload is used. Parameters passed into the lambda - **x** (float or bool): The float value to be sent to the modbus device for `register_type: holding` or the boolean value to be sent to the modbus device for `register_type: coil` - - **payload** (`std::vector&payload`): + - **payload** (`std::vector &payload`): - for `register_type: holding` : empty vector for the payload. The lamdba can add 16 bit raw modbus register words. - for `register_type: coil` : empty vector for the payload. If payload is set in the lambda it is sent as a custom command and must include all required bytes for a modbus request @@ -87,12 +84,12 @@ output: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} -- +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) +- [https://www.modbustools.com/modbus.html](https://www.modbustools.com/modbus.html) diff --git a/content/components/output/my9231.md b/src/content/docs/components/output/my9231.mdx similarity index 90% rename from content/components/output/my9231.md rename to src/content/docs/components/output/my9231.mdx index b0331c1eb1..bfa01085c1 100644 --- a/content/components/output/my9231.md +++ b/src/content/docs/components/output/my9231.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up MY9231 and MY9291 LED drives in ESPHome." title: "MY9231/MY9291 LED driver" -params: - seo: - description: Instructions for setting up MY9231 and MY9291 LED drives in ESPHome. - image: my9231.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "my9231-component" >}} + + ## Component/Hub @@ -55,7 +53,7 @@ my9231: this `my9231` component. Use this if you have multiple MY9231/MY9291 chains connected at the same time. -{{< anchor "my9231-output" >}} + ## Output @@ -197,11 +195,11 @@ light: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "my9231/my9231.h" "my9231/my9231.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) - [MY92XX LED driver library for Arduino AVR and ESP8266](https://github.com/xoseperez/my92xx) by [@xoseperez](https://github.com/xoseperez) +- diff --git a/content/components/output/pca9685.md b/src/content/docs/components/output/pca9685.mdx similarity index 84% rename from content/components/output/pca9685.md rename to src/content/docs/components/output/pca9685.mdx index 9f785c28f6..52ca7e2c5a 100644 --- a/content/components/output/pca9685.md +++ b/src/content/docs/components/output/pca9685.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up PCA9685 LED PWM drivers." title: "PCA9685" -params: - seo: - description: Instructions for setting up PCA9685 LED PWM drivers. - image: pca9685.jpg --- -{{< anchor "pca9685-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import pca9685FullImg from './images/pca9685-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -96,7 +97,7 @@ to set the phase angle of each output: where no PWM is generated if the start angle is higher than the stop angle. - `none`: The phase angle is always 0°. This is the safer option if you control LED lights. -{{< anchor "pca9685-output" >}} + ## PCA9685 Output @@ -104,7 +105,12 @@ The PCA9685 output component exposes a PCA9685 PWM channel of a global [PCA9685 hub](#pca9685-component) as a float output. -{{< img src="pca9685-full.jpg" alt="Image" caption="PCA9685 16-Channel PWM Driver." width="75.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -151,11 +157,11 @@ light: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "pca9685/pca9685_output.h" "pca9685/pca9685_output.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) - [PCA9685 Arduino Library](https://github.com/NachtRaveVL/PCA9685-Arduino) by [@NachtRaveVL](https://github.com/NachtRaveVL) +- diff --git a/content/components/output/sigma_delta_output.md b/src/content/docs/components/output/sigma_delta_output.mdx similarity index 73% rename from content/components/output/sigma_delta_output.md rename to src/content/docs/components/output/sigma_delta_output.mdx index c79a0be5fc..fa58949370 100644 --- a/content/components/output/sigma_delta_output.md +++ b/src/content/docs/components/output/sigma_delta_output.mdx @@ -3,14 +3,24 @@ description: "Sigma-Delta Output" title: "Sigma-Delta Output" --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sigmaDeltaExampleImg from './images/sigma-delta-example.png'; +import APIRef from '@components/APIRef.astro'; + This component uses [sigma-delta modulation](https://en.wikipedia.org/wiki/Delta-sigma_modulation) -to output a floating-point value on a binary output. Unlike with {{< docref "/components/output/slow_pwm" >}}, +to output a floating-point value on a binary output. Unlike with [Slow Pwm](/components/output/slow_pwm/), it is possible to update the output value with each update cycle, not just at the end of a longer period. -{{< img src="sigma-delta-example.png" alt="Image" caption="Comparison between a *Slow PWM* with a period of 100s and a *sigma-delta output* with an update interval of 1s" width="65.0%" class="align-center" >}} +
    For example, if you choose to toggle the output at most once every 1 second and decide on a -PWM period of 10 seconds, for reasonably frequent updates, with {{< docref "/components/output/slow_pwm" >}} +PWM period of 10 seconds, for reasonably frequent updates, with [Slow Pwm](/components/output/slow_pwm/) there are only 10 possible levels, and for higher precision a longer update interval is needed, restricting the update rate. @@ -20,7 +30,7 @@ being constrained by a calculation timeframe (=period). So instead of having to define a `period` where the width of the pulse determines the output level, here you choose an `update_interval` which acts like a clock signal from where the pulse density determines the output level. -This component can be used as a drop-in replacement for {{< docref "/components/output/slow_pwm" >}} by changing the `platform` to +This component can be used as a drop-in replacement for [Slow Pwm](/components/output/slow_pwm/) by changing the `platform` to `sigma_delta_output` and changing `period` to `update_interval` (you usually want to set the *sigma-delta*'s `update_interval` as a fraction of *Slow PWM*'s `period` for similar results) @@ -57,24 +67,23 @@ Configuration variables: - All options from [Output](/components/output#config-output). > [!NOTE] -> > - If `pin` is defined, the GPIO pin state is written before any action is executed. > - `state_change_action` and `turn_on_action` /`turn_off_action` can be used together. `state_change_action` is called before `turn_on_action` /`turn_off_action`. It's recommended to use either `state_change_action` or `turn_on_action` /`turn_off_action` to change the state of an output. Using both automations together is only recommended for monitoring. > [!NOTE] > If the output must not be active for more than some fixed time before it has -> to be off for a while to e.g. cool down, {{< docref "/components/output/slow_pwm" >}} +> to be off for a while to e.g. cool down, [Slow Pwm](/components/output/slow_pwm/) > should be used with a `max_power` setting to better control the duty > cycle. ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/slow_pwm" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Slow PWM Output](/components/output/slow_pwm/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) - [Sigma-Delta](https://en.wikipedia.org/wiki/Delta-sigma_modulation) -- {{< apiref "sigma_delta_output/sigma_delta_output.h" "sigma_delta_output/sigma_delta_output.h" >}} +- diff --git a/content/components/output/slow_pwm.md b/src/content/docs/components/output/slow_pwm.mdx similarity index 79% rename from content/components/output/slow_pwm.md rename to src/content/docs/components/output/slow_pwm.mdx index e3ddee4a27..27b799cd29 100644 --- a/content/components/output/slow_pwm.md +++ b/src/content/docs/components/output/slow_pwm.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up slow pwm outputs for GPIO pins." title: "Slow PWM Output" -params: - seo: - description: Instructions for setting up slow pwm outputs for GPIO pins. - image: pwm.png --- +import APIRef from '@components/APIRef.astro'; + Similar to PWM, the Slow PWM Output platform allows you to control GPIO pins by pulsing them on/off over a longer time period. It could be used to control a @@ -15,8 +13,8 @@ heating element through a relay where a fast PWM update cycle would not be appro > This is for **slow** PWM output. For fast-switching PWM outputs (for example, > lights), see these outputs: > -> - ESP32: {{< docref "ledc/" >}} -> - ESP8266: {{< docref "esp8266_pwm/" >}} +> - ESP32: [Ledc](/components/output/ledc/) +> - ESP8266: [Esp8266 Pwm](/components/output/esp8266_pwm/) ```yaml # Example configuration entry @@ -43,7 +41,6 @@ output: - All other options from [Output](/components/output#config-output). > [!NOTE] -> > - If `pin` is defined the GPIO pin state is written before any action is executed. > - `state_change_action` and `turn_on_action` /`turn_off_action` can be used together. `state_change_action` is called before `turn_on_action` /`turn_off_action`. It's recommended to use either `state_change_action` or `turn_on_action` /`turn_off_action` to change the state of an output. Using both automations together is only recommended for monitoring. @@ -64,18 +61,18 @@ output: > [!NOTE] > If the duty cycle is not constrained to a maximum value, the -> {{< docref "/components/output/sigma_delta_output" >}} component offers faster updates and +> [Sigma Delta Output](/components/output/sigma_delta_output/) component offers faster updates and > greater control over the switching frequency. This is better for loads that > need some time to fully change between on and off, like eletric thermal > actuator heads or fans. ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/output/sigma_delta_output" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "slow_pwm/slow_pwm_output.h" "slow_pwm/slow_pwm_output.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Sigma-Delta Output](/components/output/sigma_delta_output/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/sm16716.md b/src/content/docs/components/output/sm16716.mdx similarity index 91% rename from content/components/output/sm16716.md rename to src/content/docs/components/output/sm16716.mdx index 63bd34a2b6..eed6c3b708 100644 --- a/content/components/output/sm16716.md +++ b/src/content/docs/components/output/sm16716.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up SM16716 LED drivers in ESPHome." title: "SM16716 LED driver" -params: - seo: - description: Instructions for setting up SM16716 LED drivers in ESPHome. - image: sm16716.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "sm16716-component" >}} + + ## Component/Hub @@ -49,7 +47,7 @@ sm16716: this `sm16716` component. Use this if you have multiple SM16716 chains connected at the same time. -{{< anchor "sm16716-output" >}} + ## Output @@ -209,11 +207,11 @@ power_supply: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "output/sm16716_output_component.h" "output/sm16716_output_component.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) - [An Arduino controller for SM16716-based LED strings.](https://github.com/sowbug/sm16716) by [@snowbug](https://github.com/sowbug) +- diff --git a/content/components/output/sm2135.md b/src/content/docs/components/output/sm2135.mdx similarity index 86% rename from content/components/output/sm2135.md rename to src/content/docs/components/output/sm2135.mdx index 8518deae0e..103b4ae03f 100644 --- a/content/components/output/sm2135.md +++ b/src/content/docs/components/output/sm2135.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up SM2135 LED drivers in ESPHome." title: "SM2135 LED driver" -params: - seo: - description: Instructions for setting up SM2135 LED drivers in ESPHome. --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "sm2135-component" >}} + + ## Component/Hub @@ -52,7 +51,7 @@ sm2135: Defaults to `true`, keep it at `true` if your SM2135 chip variant does not support simultaneous CW and RGB modes (e.g. SM2135E). Set this to `false` when your SM2135 chip variant supports having CW and RGB leds on at the same time (e.g. SM2135EH/SM2135EJ). -{{< anchor "sm2135-output" >}} + ## Output @@ -110,11 +109,11 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/sm16716" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "output/sm2135_output_component.h" "output/sm2135_output_component.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [SM16716 LED driver](/components/output/sm16716/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/sm2235.md b/src/content/docs/components/output/sm2235.mdx similarity index 85% rename from content/components/output/sm2235.md rename to src/content/docs/components/output/sm2235.mdx index 7d5c184358..51160ea3e3 100644 --- a/content/components/output/sm2235.md +++ b/src/content/docs/components/output/sm2235.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up SM2235 LED drivers in ESPHome." title: "SM2235 LED driver" -params: - seo: - description: Instructions for setting up SM2235 LED drivers in ESPHome. --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "sm2235-component" >}} + + ## Component/Hub @@ -86,7 +85,7 @@ sm2235: | 14 | 60 mA | | 15 | 64 mA | -{{< anchor "sm2235-output" >}} + ## Output @@ -120,12 +119,12 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/sm2135" >}} -- {{< docref "/components/output/sm2335" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "output/sm2235_output_component.h" "output/sm2235_output_component.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [SM2135 LED driver](/components/output/sm2135/) +- [SM2335 LED driver](/components/output/sm2335/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/sm2335.md b/src/content/docs/components/output/sm2335.mdx similarity index 87% rename from content/components/output/sm2335.md rename to src/content/docs/components/output/sm2335.mdx index 606053d0da..c808792ed1 100644 --- a/content/components/output/sm2335.md +++ b/src/content/docs/components/output/sm2335.mdx @@ -1,12 +1,9 @@ --- description: "Instructions for setting up SM2335 LED drivers in ESPHome." title: "SM2335 LED driver" -params: - seo: - description: Instructions for setting up SM2335 LED drivers in ESPHome. --- -{{< anchor "sm2335-component" >}} + ## Component/Hub @@ -89,7 +86,7 @@ sm2335: | 14 | 150 mA | | 15 | 160 mA | -{{< anchor "sm2335-output" >}} + ## Output @@ -123,11 +120,11 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/sm2135" >}} -- {{< docref "/components/output/sm2235" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/light/rgbw" >}} -- {{< docref "/components/light/rgbww" >}} -- {{< docref "/components/power_supply" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [SM2135 LED driver](/components/output/sm2135/) +- [SM2235 LED driver](/components/output/sm2235/) +- [RGB Light](/components/light/rgb/) +- [RGBW Light](/components/light/rgbw/) +- [RGBWW Light](/components/light/rgbww/) +- [Power Supply Component](/components/power_supply/) diff --git a/content/components/output/template.md b/src/content/docs/components/output/template.mdx similarity index 84% rename from content/components/output/template.md rename to src/content/docs/components/output/template.mdx index cf74fb9f65..f65b7e7be6 100644 --- a/content/components/output/template.md +++ b/src/content/docs/components/output/template.mdx @@ -1,12 +1,10 @@ --- description: "Instructions for setting up template outputs with ESPHome." title: "Template Output" -params: - seo: - description: Instructions for setting up template outputs with ESPHome. - image: description.svg --- +import APIClass from '@components/APIClass.astro'; + The `template` output component can be used to create templated binary and float outputs in ESPHome. ```yaml @@ -38,13 +36,13 @@ output: - All other options from [Output](/components/output#config-output). -See {{< apiclass "output::BinaryOutput" "output::BinaryOutput" >}} and {{< apiclass "output::FloatOutput" "output::FloatOutput" >}}. +See and . > [!WARNING] > This is an **output component** and will not be visible from the frontend. Output components are intermediary > components that can be attached to for example lights. -{{< anchor "output-template-on_write_action" >}} + ## `write_action` Trigger @@ -69,5 +67,5 @@ Complete example: [Sonoff Dual Light Switch](https://devices.esphome.io/devices/ ## See Also -- {{< docref "/components/output" >}} +- [Output Component](/components/output/) - [Automation](/automations) diff --git a/content/components/output/tlc59208f.md b/src/content/docs/components/output/tlc59208f.mdx similarity index 76% rename from content/components/output/tlc59208f.md rename to src/content/docs/components/output/tlc59208f.mdx index dd8c4be80f..5d1f014495 100644 --- a/content/components/output/tlc59208f.md +++ b/src/content/docs/components/output/tlc59208f.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up TLC59208F LED PWM drivers." title: "TLC59208F" -params: - seo: - description: Instructions for setting up TLC59208F LED PWM drivers. - image: tlc59208f.jpg --- -{{< anchor "tlc59208f-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tlc59208fFullImg from './images/tlc59208f-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -41,7 +42,7 @@ output: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The id to use for this tlc59208f component. Use this if you have multiple TLC59208Fs connected at the same time -{{< anchor "tlc59208f-output" >}} + ## TLC59208F Output @@ -49,7 +50,12 @@ The TLC59208F output component exposes a TLC59208F PWM channel of a global [TLC59208F chip](#tlc59208f-component) as a float output. -{{< img src="tlc59208f-full.jpg" alt="Image" caption="Sample application of a TLC59208F 8-Channel PWM Driver." width="75.0%" class="align-center" >}} +
    ```yaml # Complete example configuration entry for 3 drivers and 4 outputs @@ -104,11 +110,11 @@ light: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/output/esp8266_pwm" >}} -- {{< docref "/components/output/ledc" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/light/rgb" >}} -- {{< docref "/components/fan/speed" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "tlc59208f/tlc59208f_output.h" "tlc59208f/tlc59208f_output.h" >}} +- [Output Component](/components/output/) +- [ESP8266 Software PWM Output](/components/output/esp8266_pwm/) +- [ESP32 LEDC Output](/components/output/ledc/) +- [Monochromatic Light](/components/light/monochromatic/) +- [RGB Light](/components/light/rgb/) +- [Speed Fan](/components/fan/speed/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/tlc5947.md b/src/content/docs/components/output/tlc5947.mdx similarity index 80% rename from content/components/output/tlc5947.md rename to src/content/docs/components/output/tlc5947.mdx index 2f5860ed1b..b0e053cf67 100644 --- a/content/components/output/tlc5947.md +++ b/src/content/docs/components/output/tlc5947.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up TLC5947 LED drivers in ESPHome." title: "TLC5947 LED driver" -params: - seo: - description: Instructions for setting up TLC5947 LED drivers in ESPHome. - image: tlc5947.jpg --- -{{< anchor "tlc5947-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub -{{< img src="tlc5947.jpg" alt="Image" caption="Adafruit's TLC5947 board" width="75.0%" class="align-center" >}} +
    This component represents a chain of [TLC5947 24-Channel, 12-Bit PWM LED Drivers](https://www.ti.com/lit/ds/symlink/tlc5947.pdf), which is used e.g. on this [board from Adafruit](https://www.adafruit.com/product/1429). @@ -41,7 +48,7 @@ tlc5947: this `tlc5947` component. Use this if you have multiple TLC5947 chains connected at the same time. -{{< anchor "tlc5947-output" >}} + ## Output @@ -76,7 +83,7 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "tlc5947/tlc5947.h" "tlc5947/tlc5947.h" >}} +- [Output Component](/components/output/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/tlc5971.md b/src/content/docs/components/output/tlc5971.mdx similarity index 78% rename from content/components/output/tlc5971.md rename to src/content/docs/components/output/tlc5971.mdx index c2395b0c97..51d2e9c16f 100644 --- a/content/components/output/tlc5971.md +++ b/src/content/docs/components/output/tlc5971.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up TLC5971 LED drivers in ESPHome." title: "TLC5971 LED driver" -params: - seo: - description: Instructions for setting up TLC5971 LED drivers in ESPHome. - image: tlc5971.jpg --- -{{< anchor "tlc5971-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub -{{< img src="tlc5971.jpg" alt="Image" caption="Adafruit's TLC59711 board" width="75.0%" class="align-center" >}} +
    This component represents a chain of [TLC5971 12-Channel, 16-Bit PWM LED Drivers](https://www.ti.com/lit/ds/symlink/tlc5971.pdf), which is used e.g. on this [board from Adafruit](https://www.adafruit.com/product/1455). @@ -38,7 +45,7 @@ tlc5971: this `tlc5971` component. Use this if you have multiple TLC5971 chains connected at the same time. -{{< anchor "tlc5971-output" >}} + ## Output @@ -73,7 +80,7 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/power_supply" >}} -- {{< apiref "tlc5971/tlc5971.h" "tlc5971/tlc5971.h" >}} +- [Output Component](/components/output/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Power Supply Component](/components/power_supply/) +- diff --git a/content/components/output/x9c.md b/src/content/docs/components/output/x9c.mdx similarity index 81% rename from content/components/output/x9c.md rename to src/content/docs/components/output/x9c.mdx index 5627e47b8b..2b54f4c09b 100644 --- a/content/components/output/x9c.md +++ b/src/content/docs/components/output/x9c.mdx @@ -1,15 +1,22 @@ --- description: "Instructions for setting up a X9C digital potentiometer with ESPHome." title: "X9C Potentiometer Output" -params: - seo: - description: Instructions for setting up a X9C digital potentiometer with ESPHome. - image: description.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `x9c` output platform allows you to add an output that controls a [X9C digital potentiometer](https://www.renesas.com/us/en/document/dst/x9c102-x9c103-x9c104-x9c503-datasheet). -{{< img src="x9c.jpg" alt="Image" caption="X9C digital potentiometer" width="70.0%" class="align-center" >}} +
    The X9C family of digital potentiometers are available in different resistance values. @@ -45,5 +52,5 @@ output: ## See Also -- {{< docref "/components/output" >}} -- {{< apiref "x9c/x9c.h" "x9c/x9c.h" >}} +- [Output Component](/components/output/) +- diff --git a/content/components/packages.md b/src/content/docs/components/packages.mdx similarity index 95% rename from content/components/packages.md rename to src/content/docs/components/packages.mdx index a2d5aa4bf3..f3c260bdaa 100644 --- a/content/components/packages.md +++ b/src/content/docs/components/packages.mdx @@ -1,10 +1,6 @@ --- description: "How to use packages in ESPHome" title: "Packages" -params: - seo: - description: How to use packages in ESPHome - image: settings.svg --- When you have many ESPHome devices (or are producing and distributing them at scale), a common need tends to surface: @@ -75,12 +71,12 @@ api: key: !secret api_encryption_key ``` -{{< anchor "config-git_packages" >}} + ## Remote/Git Packages Packages can also be loaded from a Git repository by utilizing the correct configuration syntax. -{{< docref "/components/substitutions" >}} can be used inside the remote packages which allows users to override +[Substitutions](/components/substitutions/) can be used inside the remote packages which allows users to override them locally with their own substitution value. > [!NOTE] @@ -191,7 +187,7 @@ The above utilizes a [Jinja expression](/components/substitutions#jinja-expressi `left_garage_door` package is actually included. `enable_extra_door` can be set from the [command line](/components/substitutions#command-line-substitutions) as well. -{{< anchor "config-packages_extend" >}} + ## Extend @@ -270,7 +266,7 @@ switch: name: "Mains switch" ``` -{{< anchor "config-packages_remove" >}} + ## Remove @@ -335,6 +331,5 @@ switch: ## See Also -- {{< docref "/index" "ESPHome index" >}} -- {{< docref "/guides/getting_started_command_line" >}} -- {{< docref "/guides/faq" >}} +- [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) +- [Frequently Asked Questions](/guides/faq/) diff --git a/content/components/packet_transport/espnow.md b/src/content/docs/components/packet_transport/espnow.mdx similarity index 89% rename from content/components/packet_transport/espnow.md rename to src/content/docs/components/packet_transport/espnow.mdx index d479e993f1..ddef359284 100644 --- a/content/components/packet_transport/espnow.md +++ b/src/content/docs/components/packet_transport/espnow.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up an ESP-NOW packet transport platform on ESPHome" title: "ESP-NOW Packet Transport Platform" -params: - seo: - description: Instructions for setting up an ESP-NOW packet transport platform on ESPHome - image: espnow.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "espnow-packet-transport" >}} + + The [Packet Transport Component](/components/packet_transport) platform allows ESPHome nodes to directly communicate with each over a communication channel. The ESP-NOW implementation of the platform uses ESP-NOW as a communication medium. -See the [Packet Transport Component](/components/packet_transport) and {{< docref "/components/espnow" >}} for more information. +See the [Packet Transport Component](/components/packet_transport) and [Espnow](/components/espnow/) for more information. ESP-NOW provides low-latency, low-power wireless communication between ESP32 devices without requiring a Wi-Fi connection. This makes it ideal for battery-powered sensors or applications where Wi-Fi overhead would impact @@ -52,7 +50,7 @@ sensor: - All other options from the [Packet Transport Component](/components/packet_transport) > **Note:** -> Peers must be registered with the {{< docref "/components/espnow" >}} component before +> Peers must be registered with the [Espnow](/components/espnow/) component before > they can receive packets. The `peer_address` only controls which peer(s) receive transmitted data; > incoming packets are accepted from all registered peers. @@ -193,9 +191,9 @@ sensor: ## See Also - [Packet Transport Component](/components/packet_transport) -- {{< docref "/components/espnow" >}} -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} +- [ESPNow communication Component](/components/espnow/) +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) - [UDP Packet Transport](/components/packet_transport/udp#udp-packet-transport) - [Automation](/automations#automation) -- {{< apiref "packet_transport/espnow_transport.h" "packet_transport/espnow_transport.h" >}} +- diff --git a/content/components/packet_transport/_index.md b/src/content/docs/components/packet_transport/index.mdx similarity index 94% rename from content/components/packet_transport/_index.md rename to src/content/docs/components/packet_transport/index.mdx index a2bdd819cc..db9b339f5e 100644 --- a/content/components/packet_transport/_index.md +++ b/src/content/docs/components/packet_transport/index.mdx @@ -1,18 +1,18 @@ --- description: "Instructions for setting up a packet transport component on ESPHome" title: "Packet Transport Component" -params: - seo: - description: Instructions for setting up a packet transport component on ESPHome - image: packet_transport.svg +sidebar: + label: "Packet Transport Component" --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "packet-transport" >}} + + The purpose of this component is to allow ESPHome nodes to directly communicate with each over a communication channel. It permits the state of sensors and binary sensors to be transmitted from one node to another, without the need for a central server or broker. The actual transport channel is provided by another component. Currently the supported -transports are {{< docref "/components/espnow" >}}, {{< docref "/components/sx126x" >}}, {{< docref "/components/sx127x" >}}, {{< docref "/components/uart" >}} and {{< docref "/components/udp" >}}. +transports are [Espnow](/components/espnow/), [Sx126X](/components/sx126x/), [Sx127X](/components/sx127x/), [Uart](/components/uart/) and [Udp](/components/udp/). Nodes may be *providers* which transmit or broadcast sensor data, or *consumers* which receive sensor data from one or more providers. A node may be both a provider and a consumer. Optional security is provided by one or more of: @@ -280,9 +280,9 @@ binary_sensor: ## See Also -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} -- {{< docref "/automations" >}} -- {{< apiref "packet_transport/packet_transport.h" "packet_transport/packet_transport.h" >}} +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) +- [Automation](/automations/) +- [^f1]: As known in 2025.02. diff --git a/src/content/docs/components/packet_transport/sx126x.mdx b/src/content/docs/components/packet_transport/sx126x.mdx new file mode 100644 index 0000000000..f814be2729 --- /dev/null +++ b/src/content/docs/components/packet_transport/sx126x.mdx @@ -0,0 +1,56 @@ +--- +description: "Instructions for setting up a sx126x packet transport platform on ESPHome" +title: "SX126x Packet Transport Platform" +--- + +import APIRef from '@components/APIRef.astro'; + +The [Packet Transport](/components/packet_transport/) platform allows ESPHome nodes to directly communicate with each over a +communication channel. The [Sx126X](/components/sx126x/) implementation of the platform uses FSK or +LoRa as a communication medium. See the [Packet Transport](/components/packet_transport/) and [Sx126X](/components/sx126x/) for more information. + +## Example Configuration + +```yaml +# Example configuration entry +sx126x: + dio1_pin: GPIO14 + cs_pin: GPIO8 + busy_pin: GPIO13 + rst_pin: GPIO12 + pa_power: 3 + bandwidth: 125_0kHz + crc_enable: true + frequency: 433.92MHz + modulation: LORA + hw_version: sx1262 + rf_switch: true + sync_value: [0x14, 0x24] + preamble_size: 8 + spreading_factor: 7 + coding_rate: CR_4_6 + tcxo_voltage: 1_8V + tcxo_delay: 5ms + +packet_transport: + platform: sx126x + sensors: + - dht_temp + +sensor: + - platform: dht + id: dht + pin: GPIOXX + temperature: + name: "Temperature" + id: dht_temp +``` + +## See Also + +- [Packet Transport Component](/components/packet_transport/) +- [SX126x Component](/components/sx126x/) +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) +- [Automation](/automations/) +- diff --git a/src/content/docs/components/packet_transport/sx127x.mdx b/src/content/docs/components/packet_transport/sx127x.mdx new file mode 100644 index 0000000000..24f9588a0d --- /dev/null +++ b/src/content/docs/components/packet_transport/sx127x.mdx @@ -0,0 +1,52 @@ +--- +description: "Instructions for setting up a sx127x packet transport platform on ESPHome" +title: "SX127x Packet Transport Platform" +--- + +import APIRef from '@components/APIRef.astro'; + +The [Packet Transport](/components/packet_transport/) platform allows ESPHome nodes to directly communicate with each over a +communication channel. The [Sx127X](/components/sx127x/) implementation of the platform uses FSK, OOK or +LoRa as a communication medium. See the [Packet Transport](/components/packet_transport/) and [Sx127X](/components/sx127x/) for more information. + +## Example Configuration + +```yaml +# Example configuration entry +sx127x: + dio0_pin: GPIO26 + cs_pin: GPIO18 + rst_pin: GPIO23 + pa_pin: BOOST + pa_power: 8 + bandwidth: 125_0kHz + crc_enable: true + frequency: 433.92MHz + modulation: LORA + rx_start: true + sync_value: 0x33 + spreading_factor: 7 + coding_rate: CR_4_5 + +packet_transport: + platform: sx127x + sensors: + - dht_temp + +sensor: + - platform: dht + id: dht + pin: GPIOXX + temperature: + name: "Temperature" + id: dht_temp +``` + +## See Also + +- [Packet Transport Component](/components/packet_transport/) +- [SX127x Component](/components/sx127x/) +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) +- [Automation](/automations/) +- diff --git a/src/content/docs/components/packet_transport/uart.mdx b/src/content/docs/components/packet_transport/uart.mdx new file mode 100644 index 0000000000..9daeb0809d --- /dev/null +++ b/src/content/docs/components/packet_transport/uart.mdx @@ -0,0 +1,43 @@ +--- +description: "Instructions for setting up a UART packet transport platform on ESPHome" +title: "UART Packet Transport Platform" +--- + +import APIRef from '@components/APIRef.astro'; + + + +The [Packet Transport](/components/packet_transport/) platform allows ESPHome nodes to directly communicate with each over a communication channel. +The UART implementation of the platform uses a serial port as a communication medium. See the [Packet Transport](/components/packet_transport/) and [Uart](/components/uart/) for more information. + +## Example Configuration + +```yaml +# Example configuration entry +packet_transport: + platform: uart + sensors: + - dht_temp + +uart: + tx_pin: GPIOXX + rx_pin: GPIOXX + baud_rate: 9600 + +sensor: + - platform: dht + id: dht + pin: GPIOXX + temperature: + name: "Temperature" + id: dht_temp +``` + +## See Also + +- [Packet Transport Component](/components/packet_transport/) +- [UART Bus](/components/uart/) +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) +- [Automation](/automations/) +- diff --git a/src/content/docs/components/packet_transport/udp.mdx b/src/content/docs/components/packet_transport/udp.mdx new file mode 100644 index 0000000000..4a2c1aeb32 --- /dev/null +++ b/src/content/docs/components/packet_transport/udp.mdx @@ -0,0 +1,40 @@ +--- +description: "Instructions for setting up a udp packet transport platform on ESPHome" +title: "UDP Packet Transport Platform" +--- + +import APIRef from '@components/APIRef.astro'; + + + +The [Packet Transport](/components/packet_transport/) platform allows ESPHome nodes to directly communicate with each over a communication channel. +The UDP implementation of the platform uses UDP as a communication medium. See the [Packet Transport](/components/packet_transport/) and [Udp](/components/udp/) for more information. + +## Example Configuration + +```yaml +# Example configuration entry +packet_transport: + platform: udp + sensors: + - dht_temp + +udp: + +sensor: + - platform: dht + id: dht + pin: GPIOXX + temperature: + name: "Temperature" + id: dht_temp +``` + +## See Also + +- [Packet Transport Component](/components/packet_transport/) +- [UDP Component](/components/udp/) +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) +- [Automation](/automations/) +- diff --git a/content/components/pca6416a.md b/src/content/docs/components/pca6416a.mdx similarity index 90% rename from content/components/pca6416a.md rename to src/content/docs/components/pca6416a.mdx index 269fd79dfb..9e3dc03ffb 100644 --- a/content/components/pca6416a.md +++ b/src/content/docs/components/pca6416a.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up PCA6416A and PCAL6416A, digital port expanders in ESPHome." title: "PCA6416A I/O Expander" -params: - seo: - description: Instructions for setting up PCA6416A and PCAL6416A, digital port expanders in ESPHome. - image: pca6416a.svg --- +import APIRef from '@components/APIRef.astro'; + The PCA6416A component allows you to use **PCA6416A** or **PCAL6416A** I/O expanders in ESPHome. It uses [I²C Bus](/components/i2c) for communication. @@ -87,11 +85,11 @@ switch: - **mode** (*Optional*, string): A pin mode to set for the pin at. One of `INPUT` or `OUTPUT`. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [PCA6416A datasheet](https://www.nxp.com/docs/en/data-sheet/PCA6416A.pdf) - [PCAL6416A datasheet](https://www.nxp.com/docs/en/data-sheet/PCAL6416A.pdf) -- {{< apiref "pca6416a/pca6416a.h" "pca6416a/pca6416a.h" >}} +- diff --git a/content/components/pca9554.md b/src/content/docs/components/pca9554.mdx similarity index 88% rename from content/components/pca9554.md rename to src/content/docs/components/pca9554.mdx index 121e32c386..bd1cdb1b3e 100644 --- a/content/components/pca9554.md +++ b/src/content/docs/components/pca9554.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up PCA9554, PCA9554A, PCA9536 digital port expanders in ESPHome." title: "PCA9554 I/O Expander" -params: - seo: - description: Instructions for setting up PCA9554, PCA9554A, PCA9536 digital port expanders in ESPHome. - image: ../images/pca9554a.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The PCA9554 component allows you to use a variety of Texas Instrument I/O expanders in ESPHome using the [I²C Bus](/components/i2c) for communication. @@ -14,7 +14,14 @@ Devices tested as working with this component include **PCA9554**, **PCA9554A**, Equivalent TI I/O expanders with the same command interface and up to 16 I/O pins such as the **TCA9554** and **TCA9535** should also work. -{{< img src="pca9554a.jpg" alt="Image" caption="PCA9554A I/O Expander chip" class="align-center" >}} +
    Once configured, you can use any of the **16** (PCA9535), **8** (PCA9554, PCA9554A) or **4** (PCA9536) pins within your projects. Within ESPHome they emulate a real internal GPIO pin @@ -84,13 +91,13 @@ switch: - **mode** (*Optional*, string): A pin mode to set for the pin at. One of `INPUT` or `OUTPUT`. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [PCA9554 datasheet](https://www.ti.com/lit/ds/symlink/pca9554.pdf) - [PCA9554A datasheet](https://www.ti.com/lit/ds/symlink/pca9554a.pdf) - [PCA9535 datasheet](https://www.ti.com/lit/ds/symlink/pca9535.pdf) - [PCA9536 datasheet](https://www.ti.com/lit/ds/symlink/pca9536.pdf) -- {{< apiref "pca9554/pca9554.h" "pca9554/pca9554.h" >}} +- diff --git a/content/components/pcf8574.md b/src/content/docs/components/pcf8574.mdx similarity index 82% rename from content/components/pcf8574.md rename to src/content/docs/components/pcf8574.mdx index b371eae57b..aa867d9c57 100644 --- a/content/components/pcf8574.md +++ b/src/content/docs/components/pcf8574.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up PCF8574 digital port expanders in ESPHome." title: "PCF8574 I/O Expander" -params: - seo: - description: Instructions for setting up PCF8574 digital port expanders in ESPHome. - image: pcf8574.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import pcf8574FullImg from './images/pcf8574-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The PCF8574 component allows you to use PCF8574 or PCF8575 I/O expanders ([datasheet](http://www.ti.com/lit/ds/symlink/pcf8574.pdf), [SparkFun](https://www.sparkfun.com/products/retired/8130)) in ESPHome. It uses [I²C Bus](/components/i2c) for communication. @@ -20,7 +21,12 @@ Any option accepting a [Pin Schema](/guides/configuration-types#pin-schema) can complicated components that do communication through this I/O expander will not work. -{{< img src="pcf8574-full.jpg" alt="Image" caption="PCF8574 I/O Expander." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -63,10 +69,10 @@ switch: - **mode** (*Optional*, string): A pin mode to set for the pin at. One of `INPUT` or `OUTPUT`. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [PCF8574 Arduino Library](https://github.com/skywodd/pcf8574_arduino_library) by [Fabien Batteix](https://github.com/skywodd) -- {{< apiref "pcf8574/pcf8574.h" "pcf8574/pcf8574.h" >}} +- diff --git a/content/components/pi4ioe5v6408.md b/src/content/docs/components/pi4ioe5v6408.mdx similarity index 92% rename from content/components/pi4ioe5v6408.md rename to src/content/docs/components/pi4ioe5v6408.mdx index f95921ce09..4f875d29c7 100644 --- a/content/components/pi4ioe5v6408.md +++ b/src/content/docs/components/pi4ioe5v6408.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up PI4IOE5V6408 8-bit I2C I/O expander in ESPHome." title: "PI4IOE5V6408 8-Bit I2C I/O Expander" -params: - seo: - description: Instructions for setting up PI4IOE5V6408 8-bit I2C I/O expander in ESPHome. --- +import APIRef from '@components/APIRef.astro'; + The PI4IOE5V6408 component allows you to use the Diodes Incorporated PI4IOE5V6408 8-bit I2C I/O expander in ESPHome using the [I²C Bus](/components/i2c) for communication. @@ -105,10 +104,10 @@ switch: inverted: true ``` -#### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [PI4IOE5V6408 datasheet](https://www.diodes.com/assets/Datasheets/PI4IOE5V6408.pdf) -- {{< apiref "pi4ioe5v6408/pi4ioe5v6408.h" "pi4ioe5v6408/pi4ioe5v6408.h" >}} +- diff --git a/content/components/pipsolar.md b/src/content/docs/components/pipsolar.mdx similarity index 97% rename from content/components/pipsolar.md rename to src/content/docs/components/pipsolar.mdx index b1c29a17fb..92b9dd1062 100644 --- a/content/components/pipsolar.md +++ b/src/content/docs/components/pipsolar.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up PipSolar Compatible PV Inverter in ESPHome." title: "PipSolar PV Inverter" -params: - seo: - description: Instructions for setting up PipSolar Compatible PV Inverter in ESPHome. - image: pipsolar.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The PipSolar component allows you to integrate PIP-compatible Inverters in ESPHome. It uses [UART](/components/uart) for communication. @@ -17,7 +16,14 @@ Once configured, you can use sensors, binary sensors, switches and outputs as de > If you configure a lot of the possible sensors etc. from below it could be that you run out of memory (on esp8266). > If you configure more than one if this devices with nearly all sensors etc. you run in a stack-size issue. In this case you have to increase stack size. -{{< img src="pipsolar.jpg" alt="Image" caption="pip4048 compatible PV Inverter." width="50.0%" class="align-center" >}} +
    ## Overview @@ -297,7 +303,7 @@ All sensors are normal text sensors... so all text sensor variables are working - **possible_values** (*Optional*, list): a list of possible values default: 00.0,48.0,49,50.0,51.0,52,53,54,55,56,57,58 -{{< anchor "pipsolaroutput_set_level_action" >}} + ## `output.pipsolar.set_level` Action diff --git a/content/components/pn7150.md b/src/content/docs/components/pn7150.mdx similarity index 87% rename from content/components/pn7150.md rename to src/content/docs/components/pn7150.mdx index d5e19c1a87..93921f9f05 100644 --- a/content/components/pn7150.md +++ b/src/content/docs/components/pn7150.mdx @@ -1,20 +1,20 @@ --- description: "Instructions for setting up PN7150 NFC tag readers and tags in ESPHome" title: "PN7150 NFC" -params: - seo: - description: Instructions for setting up PN7150 NFC tag readers and tags in ESPHome - image: pn7150.jpg --- -{{< anchor "pn7150-component" >}} +import { Image } from 'astro:assets'; +import pn7150FullImg from './images/pn7150-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub The `pn7150` component allows you to use PN7150 NFC controllers with ESPHome. This component is a global hub that establishes a connection to the PN7150 via [I²C](/components/i2c). -{{< img src="pn7150-full.jpg" alt="Image" width="70.0%" class="align-center" >}} + An [I²C](/components/i2c) bus must be defined within your device's ESPHome configuration to use the PN7150. @@ -23,7 +23,7 @@ only read/write mode is enabled; card/tag emulation is enabled only if the `emul variable is defined (see below). Regardless, reader/writer (polling) mode and card/tag emulation mode may be independently enabled and disabled by using the corresponding [Actions](#pn7150-actions) (see below). -In addition, the {{< docref "binary_sensor/nfc" >}} platform may be used to quickly and easily identify tags presented to the reader. +In addition, the [Nfc](/components/binary_sensor/nfc/) platform may be used to quickly and easily identify tags presented to the reader. ```yaml pn7150_i2c: @@ -64,11 +64,11 @@ pn7150_i2c: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this component. -{{< anchor "pn7150-actions" >}} + ## Actions -{{< anchor "pn7150-set_clean_mode" >}} + ### `tag.set_clean_mode` Action @@ -81,7 +81,7 @@ on_...: - tag.set_clean_mode: my_pn7150_id ``` -{{< anchor "pn7150-set_format_mode" >}} + ### `tag.set_format_mode` Action @@ -94,7 +94,7 @@ on_...: - tag.set_format_mode: my_pn7150_id ``` -{{< anchor "pn7150-set_read_mode" >}} + ### `tag.set_read_mode` Action @@ -107,7 +107,7 @@ on_...: - tag.set_read_mode: my_pn7150_id ``` -{{< anchor "pn7150-set_write_message" >}} + ### `tag.set_write_message` Action @@ -127,7 +127,7 @@ on_...: - **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android operating systems. Defaults to `true`. -{{< anchor "pn7150-set_write_mode" >}} + ### `tag.set_write_mode` Action @@ -141,7 +141,7 @@ on_...: - tag.set_write_mode: my_pn7150_id ``` -{{< anchor "pn7150-set_emulation_message" >}} + ### `tag.set_emulation_message` Action @@ -161,7 +161,7 @@ on_...: - **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android operating systems. Defaults to `true`. -{{< anchor "pn7150-emulation_off" >}} + ### `tag.emulation_off` Action @@ -174,7 +174,7 @@ on_...: - tag.emulation_off: my_pn7150_id ``` -{{< anchor "pn7150-emulation_on" >}} + ### `tag.emulation_on` Action @@ -191,7 +191,7 @@ on_...: - tag.emulation_on: my_pn7150_id ``` -{{< anchor "pn7150-polling_off" >}} + ### `tag.polling_off` Action @@ -203,7 +203,7 @@ on_...: - tag.polling_off: my_pn7150_id ``` -{{< anchor "pn7150-polling_on" >}} + ### `tag.polling_on` Action @@ -217,7 +217,7 @@ on_...: ## Triggers -{{< anchor "pn7150-on_tag" >}} + ### `on_tag` Trigger @@ -250,7 +250,7 @@ pn7150_i2c: - homeassistant.tag_scanned: !lambda 'return x;' ``` -You could also send the value to Home Assistant via a {{< docref "/components/sensor/template" "template sensor" >}}: +You could also send the value to Home Assistant via a [template sensor](/components/sensor/template/): ```yaml pn7150_i2c: @@ -267,7 +267,7 @@ text_sensor: id: nfc_tag ``` -{{< anchor "pn7150-on_tag_removed" >}} + ### `on_tag_removed` Trigger @@ -287,7 +287,7 @@ pn7150_i2c: payload: !lambda 'return x;' ``` -{{< anchor "pn7150-on_emulated_tag_scan" >}} + ### `on_emulated_tag_scan` Trigger @@ -303,13 +303,13 @@ pn7150_i2c: - rtttl.play: "alert:d=32,o=5,b=160:e6,p,e6,p,e6" ``` -{{< anchor "pn7150-ndef" >}} + ## NDEF The PN7150 supports reading NDEF messages from and writing NDEF messages to cards/tags. -{{< anchor "pn7150-ndef_reading" >}} + ### NDEF Reading @@ -327,12 +327,12 @@ pn7150_i2c: - homeassistant.tag_scanned: !lambda "return tag.has_ha_tag_id() ? tag.get_ha_tag_id() : x;" ``` -{{< anchor "pn7150-ndef_writing" >}} + ### NDEF Writing The examples below illustrate how NDEF messages may be written to cards/tags via the PN7150. Note that a -{{< docref "/components/button/index" "button" >}} is a great mechanism to use to trigger these actions. +[button](/components/button/) is a great mechanism to use to trigger these actions. The first example will write a simple, fixed NDEF message to a tag. @@ -358,8 +358,7 @@ on_... ## See Also -- {{< docref "index/" >}} -- {{< docref "binary_sensor/pn532" >}} -- {{< docref "binary_sensor/rc522" >}} -- {{< docref "binary_sensor/rdm6300" >}} -- {{< apiref "pn7150/pn7150.h" "pn7150/pn7150.h" >}} +- [PN532 NFC/RFID](/components/binary_sensor/pn532/) +- [RC522 NFC/RFID](/components/binary_sensor/rc522/) +- [RDM6300 NFC/RFID](/components/binary_sensor/rdm6300/) +- diff --git a/content/components/pn7160.md b/src/content/docs/components/pn7160.mdx similarity index 89% rename from content/components/pn7160.md rename to src/content/docs/components/pn7160.mdx index e79854cca1..c20c161207 100644 --- a/content/components/pn7160.md +++ b/src/content/docs/components/pn7160.mdx @@ -1,20 +1,20 @@ --- description: "Instructions for setting up PN7160 NFC tag readers and tags in ESPHome" title: "PN7160 NFC" -params: - seo: - description: Instructions for setting up PN7160 NFC tag readers and tags in ESPHome - image: pn716x.jpg --- -{{< anchor "pn7160-component" >}} +import { Image } from 'astro:assets'; +import pn716xFullImg from './images/pn716x-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub The `pn7160` component allows you to use PN7160 NFC controllers with ESPHome. This component is a global hub that establishes a connection to the PN7160 via [SPI](/components/spi) or [I²C](/components/i2c). -{{< img src="pn716x-full.jpg" alt="Image" width="70.0%" class="align-center" >}} + Within ESPHome, the PN7160 can be configured to use either the SPI **or** I²C protocol for data communication. Note that there are different versions of the IC for each bus type, each with a different part number; in other @@ -28,9 +28,9 @@ only read/write mode is enabled; card/tag emulation is enabled only if the `emul variable is defined (see below). Regardless, reader/writer (polling) mode and card/tag emulation mode may be independently enabled and disabled by using the corresponding [Actions](#pn7160-actions) (see below). -In addition, the {{< docref "binary_sensor/nfc" >}} platform may be used to quickly and easily identify tags presented to the reader. +In addition, the [Nfc](/components/binary_sensor/nfc/) platform may be used to quickly and easily identify tags presented to the reader. -{{< anchor "pn7160-spi" >}} + ## Over SPI @@ -81,7 +81,7 @@ pn7160_spi: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this component. -{{< anchor "pn7160-i2c" >}} + ## Over I²C @@ -128,11 +128,11 @@ pn7160_i2c: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this component. -{{< anchor "pn7160-actions" >}} + ## Actions -{{< anchor "pn7160-set_clean_mode" >}} + ### `tag.set_clean_mode` Action @@ -145,7 +145,7 @@ on_...: - tag.set_clean_mode: my_pn7160_id ``` -{{< anchor "pn7160-set_format_mode" >}} + ### `tag.set_format_mode` Action @@ -158,7 +158,7 @@ on_...: - tag.set_format_mode: my_pn7160_id ``` -{{< anchor "pn7160-set_read_mode" >}} + ### `tag.set_read_mode` Action @@ -171,7 +171,7 @@ on_...: - tag.set_read_mode: my_pn7160_id ``` -{{< anchor "pn7160-set_write_message" >}} + ### `tag.set_write_message` Action @@ -191,7 +191,7 @@ on_...: - **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android operating systems. Defaults to `true`. -{{< anchor "pn7160-set_write_mode" >}} + ### `tag.set_write_mode` Action @@ -205,7 +205,7 @@ on_...: - tag.set_write_mode: my_pn7160_id ``` -{{< anchor "pn7160-set_emulation_message" >}} + ### `tag.set_emulation_message` Action @@ -225,7 +225,7 @@ on_...: - **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android operating systems. Defaults to `true`. -{{< anchor "pn7160-emulation_off" >}} + ### `tag.emulation_off` Action @@ -238,7 +238,7 @@ on_...: - tag.emulation_off: my_pn7160_id ``` -{{< anchor "pn7160-emulation_on" >}} + ### `tag.emulation_on` Action @@ -255,7 +255,7 @@ on_...: - tag.emulation_on: my_pn7160_id ``` -{{< anchor "pn7160-polling_off" >}} + ### `tag.polling_off` Action @@ -267,7 +267,7 @@ on_...: - tag.polling_off: my_pn7160_id ``` -{{< anchor "pn7160-polling_on" >}} + ### `tag.polling_on` Action @@ -281,7 +281,7 @@ on_...: ## Triggers -{{< anchor "pn7160-on_tag" >}} + ### `on_tag` Trigger @@ -314,7 +314,7 @@ pn7160_...: - homeassistant.tag_scanned: !lambda 'return x;' ``` -You could also send the value to Home Assistant via a {{< docref "/components/sensor/template" "template sensor" >}}: +You could also send the value to Home Assistant via a [template sensor](/components/sensor/template/): ```yaml pn7160_...: @@ -331,7 +331,7 @@ text_sensor: id: nfc_tag ``` -{{< anchor "pn7160-on_tag_removed" >}} + ### `on_tag_removed` Trigger @@ -351,7 +351,7 @@ pn7160_...: payload: !lambda 'return x;' ``` -{{< anchor "pn7160-on_emulated_tag_scan" >}} + ### `on_emulated_tag_scan` Trigger @@ -367,13 +367,13 @@ pn7160_...: - rtttl.play: "alert:d=32,o=5,b=160:e6,p,e6,p,e6" ``` -{{< anchor "pn7160-ndef" >}} + ## NDEF The PN7160 supports reading NDEF messages from and writing NDEF messages to cards/tags. -{{< anchor "pn7160-ndef_reading" >}} + ### NDEF Reading @@ -391,12 +391,12 @@ pn7160_...: - homeassistant.tag_scanned: !lambda "return tag.has_ha_tag_id() ? tag.get_ha_tag_id() : x;" ``` -{{< anchor "pn7160-ndef_writing" >}} + ### NDEF Writing The examples below illustrate how NDEF messages may be written to cards/tags via the PN7160. Note that a -{{< docref "/components/button/index" "button" >}} is a great mechanism to use to trigger these actions. +[button](/components/button/) is a great mechanism to use to trigger these actions. The first example will write a simple, fixed NDEF message to a tag. @@ -422,8 +422,7 @@ on_... ## See Also -- {{< docref "index/" >}} -- {{< docref "binary_sensor/pn532" >}} -- {{< docref "binary_sensor/rc522" >}} -- {{< docref "binary_sensor/rdm6300" >}} -- {{< apiref "pn7160/pn7160.h" "pn7160/pn7160.h" >}} +- [PN532 NFC/RFID](/components/binary_sensor/pn532/) +- [RC522 NFC/RFID](/components/binary_sensor/rc522/) +- [RDM6300 NFC/RFID](/components/binary_sensor/rdm6300/) +- diff --git a/content/components/power_supply.md b/src/content/docs/components/power_supply.mdx similarity index 87% rename from content/components/power_supply.md rename to src/content/docs/components/power_supply.mdx index 8d5e3fea45..7a2fbfb9c4 100644 --- a/content/components/power_supply.md +++ b/src/content/docs/components/power_supply.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up power supplies which will automatically turn on together with outputs." title: "Power Supply Component" -params: - seo: - description: Instructions for setting up power supplies which will automatically turn on together with outputs. - image: power.svg --- +import { Image } from 'astro:assets'; +import powerSupplyAtxImg from './images/power_supply-atx.jpg'; +import APIRef from '@components/APIRef.astro'; + The `power_supply` component allows you to have a high power mode for certain outputs. For example, if you're using an [ATX powersupply](https://en.wikipedia.org/wiki/ATX) to power your LED strips, you usually don't want to have the power supply on all the time while the output is not on. The power supply component can be attached to any -[Output Component](/components/output#output) and +[Output Component](/components/output/) and will automatically switch on if any of the outputs are on. Furthermore, it also has a cooldown time that keeps the power supply on for a while after the last output has been disabled. @@ -50,7 +50,7 @@ for information on how to apply the power supply for a specific output. ## ATX Power Supplies -{{< img src="power_supply-atx.jpg" alt="Image" width="80.0%" class="align-center" >}} + The power supply component will default to pulling the specified GPIO pin up when high power mode is needed. Most ATX power supplies however @@ -71,5 +71,5 @@ in between to protect the ESP board. ## See Also -- {{< docref "output/" >}} -- {{< apiref "power_supply/power_supply.h" "power_supply/power_supply.h" >}} +- [Output Component](/components/output/) +- diff --git a/content/components/prometheus.md b/src/content/docs/components/prometheus.mdx similarity index 96% rename from content/components/prometheus.md rename to src/content/docs/components/prometheus.mdx index 60ef05e582..65dedf3d8d 100644 --- a/content/components/prometheus.md +++ b/src/content/docs/components/prometheus.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up a prometheus exporter with ESPHome." title: "Prometheus Component" -params: - seo: - description: Instructions for setting up a prometheus exporter with ESPHome. - image: prometheus.svg --- +import APIRef from '@components/APIRef.astro'; + The `prometheus` component enables an HTTP endpoint for the -{{< docref "web_server/" >}} in order to integrate a [Prometheus](https://prometheus.io/) installation. +[Web Server](/components/web_server/) in order to integrate a [Prometheus](https://prometheus.io/) installation. This can be used to scrape data directly into your Prometheus-based monitoring and alerting-system, without the need of any other software. @@ -79,7 +77,7 @@ This is useful if you want to have different metric names or IDs than those show You can relabel metric name or ID labels by adding a `relabel` block in the `prometheus` configuration, and then adding a block with `id` and/or `name` fields for each sensor whose labels your want to override. -{{< anchor "prometheus-relabel" >}} + ### `relabel` @@ -182,8 +180,8 @@ esphome_event_value{id="template_event",area="Dev",node="devidfprometheus",name= ## See Also -- {{< docref "/components/web_server" >}} +- [Web Server Component](/components/web_server/) - [REST API](/web-api#api-rest) -- {{< docref "/components/http_request" >}} -- {{< apiref "prometheus/prometheus_handler.h" "prometheus/prometheus_handler.h" >}} +- [HTTP Request](/components/http_request/) - [Prometheus](https://prometheus.io/) +- diff --git a/content/components/psram.md b/src/content/docs/components/psram.mdx similarity index 95% rename from content/components/psram.md rename to src/content/docs/components/psram.mdx index d3ce9aba88..e39bdf801c 100644 --- a/content/components/psram.md +++ b/src/content/docs/components/psram.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the ESP32 PSRAM platform for ESPHome." title: "PSRAM" -params: - seo: - description: Configuration for the ESP32 PSRAM platform for ESPHome. - image: psram.svg --- This component enables and configures PSRAM if/when available on ESP32 modules/boards. @@ -54,5 +50,3 @@ the datasheet for the module you are using to be sure. - 120MHz is not available with octal mode, unless using ESP-IDF and the `enable_idf_experimental_features` is enabled in the ESP-IDF platform [Advanced Configuration](/components/esp32#esp32-advanced_configuration). - Configuring an unsupported speed will usually result in the PSRAM running at the default speed. - -## See Also diff --git a/content/components/pylontech.md b/src/content/docs/components/pylontech.mdx similarity index 92% rename from content/components/pylontech.md rename to src/content/docs/components/pylontech.mdx index 895d577539..11fb4cc2d7 100644 --- a/content/components/pylontech.md +++ b/src/content/docs/components/pylontech.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up Pylontech Battery in ESPHome." title: "Pylontech Battery" -params: - seo: - description: Instructions for setting up Pylontech Battery in ESPHome. - image: pylontech.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import rj45PinoutImg from './images/rj45_pinout.jpg'; + The Pylontech component allows you to pull data from Pylontech Batteries into ESPHome. It uses [UART](/components/uart) for communication. Once configured, you can use sensors as described below for your projects. -{{< img src="pylontech.jpg" alt="Image" caption="Pylontech Batteries" width="50.0%" class="align-center" >}} +
    ## Hardware Setup @@ -33,7 +40,12 @@ If you have multiple batteries you need to connect to the master battery's conso | 6 | Green | Orange | Pylontech RX | ESPHome TX via transceiver | | 8 | Brown | Brown | GND | GND | -{{< img src="rj45_pinout.jpg" alt="Image" caption="RJ45 pinout" width="70.0%" class="align-center" >}} +
    ### Pylontech RJ11 Console Pinout (US2000B, US2000) @@ -113,8 +125,8 @@ text_sensor: ## Energy Monitoring -By combining {{< docref "/components/sensor/template" "template sensors" >}} and -{{< docref "/components/sensor/integration" "integration sensors" >}} +By combining [template sensors](/components/sensor/template/) and +[integration sensors](/components/sensor/integration/) one can monitor the energy flowing into and out of all batteries combined, ready for [Homeassistant Energy Monitoring](https://www.home-assistant.io/docs/energy/battery/). diff --git a/content/components/qr_code.md b/src/content/docs/components/qr_code.mdx similarity index 92% rename from content/components/qr_code.md rename to src/content/docs/components/qr_code.mdx index 92d8f76c73..f0bd5401ca 100644 --- a/content/components/qr_code.md +++ b/src/content/docs/components/qr_code.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for displaying a QR Code in ESPHome" title: "QR Code Component" -params: - seo: - description: Instructions for displaying a QR Code in ESPHome - image: qr-code.svg --- -{{< anchor "display-qrcode" >}} + Use this component to generate a QR-code containing a string on the device, which can then be drawn on compatible displays. diff --git a/content/components/remote_receiver.md b/src/content/docs/components/remote_receiver.mdx similarity index 88% rename from content/components/remote_receiver.md rename to src/content/docs/components/remote_receiver.mdx index 6e079b30ec..a1b7199ac4 100644 --- a/content/components/remote_receiver.md +++ b/src/content/docs/components/remote_receiver.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up remote receiver binary sensors for infrared and RF codes." title: "Remote Receiver" -params: - seo: - description: Instructions for setting up remote receiver binary sensors for infrared and RF codes. - image: remote.svg --- +import APIClass from '@components/APIClass.astro'; +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + The `remote_receiver` component lets you receive and decode various common remote control signals, such as infrared or 433 MHz radio frequency (RF) signals. @@ -150,92 +150,92 @@ To enable signal demodulation, configure the signal carrier frequency and duty c ## Automations - **on_abbwelcome** (*Optional*, [Automation](/automations)): An automation to perform when a - ABB-Welcome code has been decoded. A variable `x` of type {{< apiclass "remote_base::ABBWelcomeData" "remote_base::ABBWelcomeData" >}} + ABB-Welcome code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_aeha** (*Optional*, [Automation](/automations)): An automation to perform when a - AEHA remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::AEHAData" "remote_base::AEHAData" >}} + AEHA remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_beo4** (*Optional*, [Automation](/automations)): An automation to perform when a - B&O Beo4 infrared remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::Beo4Data" "remote_base::Beo4Data" >}} + B&O Beo4 infrared remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_byronsx** (*Optional*, [Automation](/automations)): An automation to perform when a - Byron SX doorbell RF code has been decoded. A variable `x` of type {{< apistruct "remote_base::ByronSXData" "remote_base::ByronSXData" >}} + Byron SX doorbell RF code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_canalsat** (*Optional*, [Automation](/automations)): An automation to perform when a - CanalSat remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::CanalSatData" "remote_base::CanalSatData" >}} + CanalSat remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_canalsatld** (*Optional*, [Automation](/automations)): An automation to perform when a - CanalSatLD remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::CanalSatLDData" "remote_base::CanalSatLDData" >}} + CanalSatLD remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_coolix** (*Optional*, [Automation](/automations)): An automation to perform when a - Coolix remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::CoolixData" "remote_base::CoolixData" >}} + Coolix remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_dish** (*Optional*, [Automation](/automations)): An automation to perform when a - dish network remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::DishData" "remote_base::DishData" >}} + dish network remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. Beware that Dish remotes use a different carrier frequency (57.6kHz) that many receiver hardware don't decode. - **on_dooya** (*Optional*, [Automation](/automations)): An automation to perform when a - Dooya RF remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::DooyaData" "remote_base::DooyaData" >}} + Dooya RF remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_drayton** (*Optional*, [Automation](/automations)): An automation to perform when a - Drayton Digistat RF code has been decoded. A variable `x` of type {{< apistruct "remote_base::DraytonData" "remote_base::DraytonData" >}} + Drayton Digistat RF code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_dyson** (*Optional*, [Automation](/automations)): An automation to perform when a - Dyson cool AM07 code has been decoded. A variable `x` of type {{< apistruct "remote_base::DysonData" "remote_base::DysonData" >}} + Dyson cool AM07 code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_gobox** (*Optional*, [Automation](/automations)): An automation to perform when a - Go-Box remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::GoboxData" "remote_base::GoboxData" >}} + Go-Box remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_jvc** (*Optional*, [Automation](/automations)): An automation to perform when a - JVC remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::JVCData" "remote_base::JVCData" >}} + JVC remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_keeloq** (*Optional*, [Automation](/automations)): An automation to perform when a - KeeLoq RF code has been decoded. A variable `x` of type {{< apistruct "remote_base::KeeloqData" "remote_base::KeeloqData" >}} + KeeLoq RF code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_haier** (*Optional*, [Automation](/automations)): An automation to perform when a - Haier remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::HaierData" "remote_base::HaierData" >}} + Haier remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_lg** (*Optional*, [Automation](/automations)): An automation to perform when a - LG remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::LGData" "remote_base::LGData" >}} + LG remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_magiquest** (*Optional*, [Automation](/automations)): An automation to perform when a - MagiQuest wand remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::MagiQuestData" "remote_base::MagiQuestData" >}} + MagiQuest wand remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_midea** (*Optional*, [Automation](/automations)): An automation to perform when a - Midea remote code has been decoded. A variable `x` of type {{< apiclass "remote_base::MideaData" "remote_base::MideaData" >}} + Midea remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_nec** (*Optional*, [Automation](/automations)): An automation to perform when a - NEC remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::NECData" "remote_base::NECData" >}} + NEC remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_nexa** (*Optional*, [Automation](/automations)): An automation to perform when a - Nexa RF code has been decoded. A variable `x` of type {{< apistruct "remote_base::NexaData" "remote_base::NexaData" >}} + Nexa RF code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_panasonic** (*Optional*, [Automation](/automations)): An automation to perform when a - Panasonic remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::PanasonicData" "remote_base::PanasonicData" >}} + Panasonic remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_pioneer** (*Optional*, [Automation](/automations)): An automation to perform when a - pioneer remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::PioneerData" "remote_base::PioneerData" >}} + pioneer remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_pronto** (*Optional*, [Automation](/automations)): An automation to perform when a @@ -247,47 +247,47 @@ To enable signal demodulation, configure the signal carrier frequency and duty c is passed to the automation for use in lambdas. - **on_rc5** (*Optional*, [Automation](/automations)): An automation to perform when a - RC5 remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::RC5Data" "remote_base::RC5Data" >}} + RC5 remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_rc6** (*Optional*, [Automation](/automations)): An automation to perform when a - RC6 remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::RC6Data" "remote_base::RC6Data" >}} + RC6 remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_rc_switch** (*Optional*, [Automation](/automations)): An automation to perform when a - RCSwitch RF code has been decoded. A variable `x` of type {{< apistruct "remote_base::RCSwitchData" "remote_base::RCSwitchData" >}} + RCSwitch RF code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_roomba** (*Optional*, [Automation](/automations)): An automation to perform when a - Roomba remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::RoombaData" "remote_base::RoombaData" >}} + Roomba remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_samsung** (*Optional*, [Automation](/automations)): An automation to perform when a - Samsung remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::SamsungData" "remote_base::SamsungData" >}} + Samsung remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_samsung36** (*Optional*, [Automation](/automations)): An automation to perform when a - Samsung36 remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::Samsung36Data" "remote_base::Samsung36Data" >}} + Samsung36 remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_sony** (*Optional*, [Automation](/automations)): An automation to perform when a - Sony remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::SonyData" "remote_base::SonyData" >}} + Sony remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_symphony** (*Optional*, [Automation](/automations)): An automation to perform when a - Symphony remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::SymphonyData" "remote_base::SymphonyData" >}} + Symphony remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_toshiba_ac** (*Optional*, [Automation](/automations)): An automation to perform when a - Toshiba AC remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::ToshibaAcData" "remote_base::ToshibaAcData" >}} + Toshiba AC remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_mirage** (*Optional*, [Automation](/automations)): An automation to perform when a - Mirage remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::MirageData" "remote_base::MirageData" >}} + Mirage remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. - **on_toto** (*Optional*, [Automation](/automations)): An automation to perform when a - Toto remote code has been decoded. A variable `x` of type {{< apistruct "remote_base::TotoData" "remote_base::TotoData" >}} + Toto remote code has been decoded. A variable `x` of type is passed to the automation for use in lambdas. ```yaml @@ -305,7 +305,7 @@ remote_receiver: - ... ``` -{{< anchor "remote-receiver-binary-sensor" >}} + ## Binary Sensor @@ -316,7 +316,7 @@ Each time the pre-defined signal is received, the binary sensor will briefly go > [!NOTE] > **For IR Remote Binary Sensors**: If you're using binary sensors to track IR remote button presses and > experiencing issues with rapid button presses not being detected (e.g., quick ON→OFF transitions being missed), -> consider setting `batch_delay: 0ms` in your {{< docref "/components/api" "API configuration" >}}. This will send state +> consider setting `batch_delay: 0ms` in your [API configuration](/components/api/). This will send state > changes immediately instead of batching them, ensuring rapid transitions are preserved. However, this increases > network traffic and should only be used when necessary. > @@ -667,10 +667,9 @@ Remote code selection (exactly one of these has to be included): ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/remote_transmitter" >}} +- [Remote Transmitter](/components/remote_transmitter/) - [Setting up IR Devices](/guides/setting_up_rmt_devices#remote-setting-up-infrared) - [Setting up RF Devices](/guides/setting_up_rmt_devices#remote-setting-up-rf) -- {{< docref "/components/rf_bridge" >}} +- [RF Bridge Component](/components/rf_bridge/) - [RCSwitch](https://github.com/sui77/rc-switch) by [Suat Özgür](https://github.com/sui77) -- {{< apiref "remote/remote_receiver.h" "remote/remote_receiver.h" >}} +- diff --git a/content/components/remote_transmitter.md b/src/content/docs/components/remote_transmitter.mdx similarity index 94% rename from content/components/remote_transmitter.md rename to src/content/docs/components/remote_transmitter.mdx index 5f3af8a167..19ada6765c 100644 --- a/content/components/remote_transmitter.md +++ b/src/content/docs/components/remote_transmitter.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up configurations that send out pre-defined sequences of IR or RF signals" title: "Remote Transmitter" -params: - seo: - description: Instructions for setting up configurations that send out pre-defined sequences of IR or RF signals - image: remote.svg --- +import APIRef from '@components/APIRef.astro'; + The `remote_transmitter` component lets you send various common remote control signals, such as infrared or 433 MHz radio frequency (RF) signals. @@ -86,7 +84,7 @@ remote_transmitter: - switch.turn_off: tx_enable ``` -{{< anchor "remote_transmitter-transmit_action" >}} + ## Remote Transmitter Actions @@ -117,7 +115,7 @@ on_...: If you're looking for the same functionality as is default in the `rpi_rf` integration in Home Assistant, you'll want to set the **times** to 10 and the **wait_time** to 0s. -{{< anchor "remote_transmitter-transmit_abbwelcome" >}} + ### `remote_transmitter.transmit_abbwelcome` **Action** @@ -171,7 +169,7 @@ on_...: > A custom receiver and transmitter circuit is required. > [More info](https://github.com/Mat931/esp32-doorbell-bus-interface) -{{< anchor "remote_transmitter-transmit_aeha" >}} + ### `remote_transmitter.transmit_aeha` **Action** @@ -196,7 +194,7 @@ on_...: AEHA refers to the Association for Electric Home Appliances in Japan, a format used by Panasonic and many other companies. -{{< anchor "remote_transmitter-transmit_beo4" >}} + ### `remote_transmitter.transmit_beo4` **Action** @@ -215,7 +213,7 @@ on_...: - **command** (**Required**, int): The command to send, e.g. 0x01=num1, 0x0d=mute,..., see dumper output for more info. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_byronsx" >}} + ### `remote_transmitter.transmit_byronsx` **Action** @@ -234,7 +232,7 @@ on_...: - **command** (**Required**, int): The command to send, see dumper output for more info. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_canalsat" >}} + ### `remote_transmitter.transmit_canalsat` **Action** @@ -261,7 +259,7 @@ on_...: - **command** (**Required**, int): The command to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_canalsatld" >}} + ### `remote_transmitter.transmit_canalsatld` **Action** @@ -288,7 +286,7 @@ on_...: - **command** (**Required**, int): The command to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_coolix" >}} + ### `remote_transmitter.transmit_coolix` **Action** @@ -311,7 +309,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_dish" >}} + ### `remote_transmitter.transmit_dish` **Action** @@ -333,7 +331,7 @@ on_...: You can find a list of commands in the [LIRC project](https://sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/dishnet/Dish_Network.lircd.conf). -{{< anchor "remote_transmitter-transmit_dooya" >}} + ### `remote_transmitter.transmit_dooya` **Action** @@ -358,7 +356,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_drayton" >}} + ### `remote_transmitter.transmit_drayton` **Action** @@ -379,7 +377,7 @@ on_...: - **command** (**Required**, int): The command to send, between 0 and 63 inclusive. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_dyson" >}} + ### `remote_transmitter.transmit_dyson` **Action** @@ -407,7 +405,7 @@ on_...: > random manner. On every transmit the **index** variable must loop to let the **..transmit_dyson** function > generate a code that differs from the previous one. -{{< anchor "remote_transmitter-transmit_gobox" >}} + ### `remote_transmitter.transmit_gobox` **Action** @@ -438,7 +436,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_jvc" >}} + ### `remote_transmitter.transmit_jvc` **Action** @@ -455,7 +453,7 @@ on_...: - **data** (**Required**, int): The JVC code to send, see dumper output for more info. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_keeloq" >}} + ### `remote_transmitter.transmit_keeloq` **Action** @@ -481,7 +479,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). - A repeat **wait_time** of 15ms as shown replicates the repetition of an HCS301. -{{< anchor "remote_transmitter-transmit_haier" >}} + ### `remote_transmitter.transmit_haier` **Action** @@ -499,7 +497,7 @@ on_...: - **code** (**Required**, list): The 13 byte Haier code to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_lg" >}} + ### `remote_transmitter.transmit_lg` **Action** @@ -518,7 +516,7 @@ on_...: - **nbits** (*Optional*, int): The number of bits to send. Defaults to `28`. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_magiquest" >}} + ### `remote_transmitter.transmit_magiquest` **Action** @@ -539,7 +537,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_midea" >}} + ### `remote_transmitter.transmit_midea` **Action** @@ -619,7 +617,7 @@ on_...: - **level** (**Required**, int): The Nexa level code to send, see dumper output for more info. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_panasonic" >}} + ### `remote_transmitter.transmit_panasonic` **Action** @@ -638,7 +636,7 @@ on_...: - **command** (**Required**, int): The command to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_pioneer" >}} + ### `remote_transmitter.transmit_pioneer` **Action** @@ -669,7 +667,7 @@ At the time this action was created, Pioneer maintained listings of [IR codes](h If unable to find your specific device in the documentation, find a device in the same class; the codes are largely shared among devices within a given class. -{{< anchor "remote_transmitter-transmit_pronto" >}} + ### `remote_transmitter.transmit_pronto` **Action** @@ -684,11 +682,11 @@ on_...: #### Configuration variables - **data** (**Required**, string): The raw code to send specified as a string. Many remote control Pronto codes can be - found on + found on [http://remotecentral.com](http://remotecentral.com) - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_raw" >}} + ### `remote_transmitter.transmit_raw` **Action** @@ -717,7 +715,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc5" >}} + ### `remote_transmitter.transmit_rc5` **Action** @@ -736,7 +734,7 @@ on_...: - **command** (**Required**, int): The RC5 command to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc6" >}} + ### `remote_transmitter.transmit_rc6` **Action** @@ -755,7 +753,7 @@ on_...: - **command** (**Required**, int): The RC6 command to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc_switch_raw" >}} + ### `remote_transmitter.transmit_rc_switch_raw` **Action** @@ -777,7 +775,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc_switch_type_a" >}} + ### `remote_transmitter.transmit_rc_switch_type_a` **Action** @@ -803,7 +801,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc_switch_type_b" >}} + ### `remote_transmitter.transmit_rc_switch_type_b` **Action** @@ -829,7 +827,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc_switch_type_c" >}} + ### `remote_transmitter.transmit_rc_switch_type_c` **Action** @@ -857,7 +855,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_rc_switch_type_d" >}} + ### `remote_transmitter.transmit_rc_switch_type_d` **Action** @@ -883,7 +881,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_roomba" >}} + ### `remote_transmitter.transmit_roomba` **Action** @@ -911,7 +909,7 @@ on_...: - While `wait_time` is optional, the Roomba Remote uses a 17 ms wait time between commands. However, it appears to work without this parameter. -{{< anchor "remote_transmitter-transmit_samsung" >}} + ### `remote_transmitter.transmit_samsung` **Action** @@ -934,7 +932,7 @@ on_...: - **nbits** (*Optional*, int): The number of bits to send. Defaults to `32`. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_samsung36" >}} + ### `remote_transmitter.transmit_samsung36` **Action** @@ -954,7 +952,7 @@ on_...: - **command** (**Required**, int): The Samsung36 command to send, see dumper output for more details. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_symphony" >}} + ### `remote_transmitter.transmit_symphony` **Action** @@ -980,7 +978,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_sony" >}} + ### `remote_transmitter.transmit_sony` **Action** @@ -999,7 +997,7 @@ on_...: - **nbits** (*Optional*, int): The number of bits to send. Defaults to `12`. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_toshiba_ac" >}} + ### `remote_transmitter.transmit_toshiba_ac` **Action** @@ -1023,7 +1021,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_mirage" >}} + ### `remote_transmitter.transmit_mirage` **Action** @@ -1041,7 +1039,7 @@ on_...: - **code** (**Required**, list): The 14 byte Mirage code to send. - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -{{< anchor "remote_transmitter-transmit_toto" >}} + ### `remote_transmitter.transmit_toto` **Action** @@ -1066,7 +1064,7 @@ on_...: > [!NOTE] > Toto remotes repeat all codes three times at a 36ms interval. This behavior will occur by default, but may be overridden by specifying `repeat` and `wait time` configuration variables. -{{< anchor "remote_transmitter-digital_write" >}} + ### `remote_transmitter.digital_write` **Action** @@ -1085,7 +1083,7 @@ on_...: - **value** (**Required**, bool): The output value of the pin. -{{< anchor "remote_transmitter-rc_switch-protocol" >}} + ### RC Switch Protocol @@ -1144,11 +1142,10 @@ call.perform(); ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/remote_receiver" >}} +- [Remote Receiver](/components/remote_receiver/) - [Setting up IR Devices](/guides/setting_up_rmt_devices#remote-setting-up-infrared) - [Setting up RF Devices](/guides/setting_up_rmt_devices#remote-setting-up-rf) -- {{< docref "/components/rf_bridge" >}} +- [RF Bridge Component](/components/rf_bridge/) - [Delaying Remote Transmissions](/cookbook/lambda_magic#lambda_magic_rf_queues) - [RCSwitch](https://github.com/sui77/rc-switch) by [Suat Özgür](https://github.com/sui77) -- {{< apiref "remote_transmitter/remote_transmitter.h" "remote_transmitter/remote_transmitter.h" >}} +- diff --git a/content/components/rf_bridge.md b/src/content/docs/components/rf_bridge.mdx similarity index 92% rename from content/components/rf_bridge.md rename to src/content/docs/components/rf_bridge.mdx index d2674620a2..86b795dc23 100644 --- a/content/components/rf_bridge.md +++ b/src/content/docs/components/rf_bridge.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up the RF Bridge in ESPHome." title: "RF Bridge Component" -params: - seo: - description: Instructions for setting up the RF Bridge in ESPHome. - image: rf_bridge.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; +import rfBridgeFullImg from './images/rf_bridge-full.jpg'; + The `RF Bridge` component provides the ability to send and receive 433MHz signals (like RF remotes/key fobs) using radio microcontrollers found on RF bridge devices ( eg., Sonoff RF Bridge). * The black Sonoff RF Bridge (R1, R2 V1.0) has an ESP8266 (for WIFI/ESPHome) and an embedded EFM8BB1 microcontroller (433 MHz). @@ -14,14 +15,19 @@ The `RF Bridge` component provides the ability to send and receive 433MHz signal This component implements a communication protocol between the ESP8266 and the firmware of `EFM8BB1` or `OB38S003`. The radio microcontroller is connected to the ESP8266 via the -{{< docref "/components/uart" "UART bus" >}}. The uart bus must be configured at the same speed of the module +[UART bus](/components/uart/). The uart bus must be configured at the same speed of the module which is 19200bps. > [!WARNING] -> If you are using the {{< docref "logger/" >}} make sure you disable the uart logging with the +> If you are using the [Logger](/components/logger/) make sure you disable the uart logging with the > `baud_rate: 0` option. -{{< img src="rf_bridge-full.jpg" alt="Image" caption="Sonoff RF Bridge 433 (version R1 or R2 V1.0)" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -43,7 +49,7 @@ rf_bridge: * **on_code_received** (*Optional*, [Automation](/automations)): An action to be performed when a code is received. See [`on_code_received` Trigger](#rf_bridge-on_code_received). -{{< anchor "rf_bridge-on_code_received" >}} + ## `on_code_received` Trigger @@ -63,7 +69,7 @@ on_code_received: code: !lambda 'char buf[9]; return format_hex_to(buf, data.code);' ``` -{{< anchor "rf_bridge-send_code_action" >}} + ## `rf_bridge.send_code` Action @@ -94,7 +100,7 @@ Configuration options: > id(my_rf_bridge).send_code(0x700, 0x800, 0x1000, 0xABC123); > ``` -{{< anchor "rf_bridge-beep_action" >}} + ## `rf_bridge.beep` Action @@ -119,7 +125,7 @@ Configuration options: > id(my_rf_bridge).beep(100); > ``` -{{< anchor "rf_bridge-learn_action" >}} + ## `rf_bridge.learn` Action @@ -143,7 +149,7 @@ Configuration options: > id(my_rf_bridge).learn(); > ``` -{{< anchor "rf_bridge-send_raw_action" >}} + ## `rf_bridge.send_raw` Action @@ -181,7 +187,7 @@ If you have flashed the secondary MCU with the [Portisch firmware](https://githu ESPHome is able to receive the extra protocols that can be decoded as well as activate the other modes supported. The below Triggers/actions are only for Portisch firmware. You can see a list of available commands and format in the [Portisch Wiki](https://github.com/Portisch/RF-Bridge-EFM8BB1/wiki/Commands) -{{< anchor "rf_bridge-on_advanced_code_received" >}} + ### `on_advanced_code_received` Trigger @@ -199,7 +205,7 @@ on_advanced_code_received: code: !lambda 'return data.code;' ``` -{{< anchor "rf_bridge-send_advanced_code_action" >}} + ### `rf_bridge.send_advanced_code` Action @@ -228,7 +234,7 @@ Configuration options: > id(my_rf_bridge).send_advanced_code({0x04, 0x01, "ABC123"}); > ``` -{{< anchor "rf_bridge-start_advanced_sniffing_action" >}} + ### `rf_bridge.start_advanced_sniffing` Action @@ -252,7 +258,7 @@ Configuration options: > id(my_rf_bridge).start_advanced_sniffing(); > ``` -{{< anchor "rf_bridge-stop_advanced_sniffing_action" >}} + ### `rf_bridge.stop_advanced_sniffing` Action @@ -275,7 +281,7 @@ Configuration options: > id(my_rf_bridge).stop_advanced_sniffing(); > ``` -{{< anchor "rf_bridge-start_bucket_sniffing_action" >}} + ### `rf_bridge.start_bucket_sniffing` Action @@ -307,7 +313,7 @@ Configuration options: > id(my_rf_bridge).start_bucket_sniffing(); > ``` -{{< anchor "rf_bridge-restart_radio_controller" >}} + ### Reset radio @@ -483,10 +489,10 @@ cover: ## See Also -* {{< apiref "rf_bridge/rf_bridge.h" "rf_bridge/rf_bridge.h" >}} +* * [Delaying Remote Transmissions](/cookbook/lambda_magic#lambda_magic_rf_queues) * [RF-Bridge-EFM8BB1](https://github.com/Portisch/RF-Bridge-EFM8BB1) by [Portisch](https://github.com/Portisch) * [Mightymos firmware](https://github.com/mightymos/RF-Bridge-OB38S003) -* {{< docref "/components/uart" >}} -* {{< docref "/components/remote_receiver" >}} -* {{< docref "/components/remote_transmitter" >}} +* [UART Bus](/components/uart/) +* [Remote Receiver](/components/remote_receiver/) +* [Remote Transmitter](/components/remote_transmitter/) diff --git a/content/components/rp2040.md b/src/content/docs/components/rp2040.mdx similarity index 92% rename from content/components/rp2040.md rename to src/content/docs/components/rp2040.mdx index 096c323ea8..c331898206 100644 --- a/content/components/rp2040.md +++ b/src/content/docs/components/rp2040.mdx @@ -1,10 +1,6 @@ --- description: "Configuration for the RP2040 platform for ESPHome." title: "RP2040 Platform" -params: - seo: - description: Configuration for the RP2040 platform for ESPHome. - image: rp2040.svg --- This component contains platform-specific options for the RP2040 platform. @@ -48,4 +44,4 @@ rp2040: ## See Also -- {{< docref "esphome/" >}} +- [ESPHome Core Configuration](/components/esphome/) diff --git a/content/components/rtttl.md b/src/content/docs/components/rtttl.mdx similarity index 95% rename from content/components/rtttl.md rename to src/content/docs/components/rtttl.mdx index 834a03aa11..ac1a22b2c1 100644 --- a/content/components/rtttl.md +++ b/src/content/docs/components/rtttl.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up a buzzer to play tones and RTTTL songs with ESPHome." title: "RTTTL Buzzer" -params: - seo: - description: Instructions for setting up a buzzer to play tones and RTTTL songs with ESPHome. - image: buzzer.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `rtttl` component allows you to easily connect a passive piezo buzzer to your microcontroller and play monophonic songs. It accepts the Ring Tone Text Transfer Language, RTTTL format ([Wikipedia](https://en.wikipedia.org/wiki/Ring_Tone_Transfer_Language)) which allows to store simple melodies. -{{< img src="buzzer.jpg" alt="Image" caption="Buzzer Module" width="50.0%" class="align-center" >}} +
    ## Overview Using a Passive Buzzer @@ -212,4 +219,4 @@ api: - [ESP8266 Software PWM Output](/components/output/esp8266_pwm) - [ESP32 LEDC Output](/components/output/ledc) - [Speaker Components](/components/speaker) -- {{< apiref "rtttl/rtttl.h" "rtttl/rtttl.h" >}} +- diff --git a/content/components/runtime_stats.md b/src/content/docs/components/runtime_stats.mdx similarity index 93% rename from content/components/runtime_stats.md rename to src/content/docs/components/runtime_stats.mdx index 11a2dfca4e..288a2d3dea 100644 --- a/content/components/runtime_stats.md +++ b/src/content/docs/components/runtime_stats.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the runtime statistics component to analyze component performance in ESPHome." title: "Runtime Statistics" -params: - seo: - description: Instructions for setting up the runtime statistics component to analyze component performance in ESPHome. - image: chart-line.svg --- +import APIRef from '@components/APIRef.astro'; + The `runtime_stats` component allows you to collect and analyze runtime performance statistics for all components in your ESPHome device. This is a powerful debugging and optimization tool that helps identify components that may be blocking the event loop or consuming excessive processing time. @@ -99,7 +97,7 @@ Components are sorted by total execution time (descending) to highlight the most ## See Also -- {{< docref "debug/" >}} -- {{< docref "logger/" >}} +- [Debug Component](/components/debug/) +- [Logger Component](/components/logger/) - [Automation](/automations) -- {{< apiref "runtime_stats/runtime_stats.h" "runtime_stats/runtime_stats.h" >}} +- diff --git a/content/components/safe_mode.md b/src/content/docs/components/safe_mode.mdx similarity index 72% rename from content/components/safe_mode.md rename to src/content/docs/components/safe_mode.mdx index 4c7183b677..1b199a3e09 100644 --- a/content/components/safe_mode.md +++ b/src/content/docs/components/safe_mode.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up ESPHome's Safe Mode to help recover from repeated boot failures." title: "Safe Mode" -params: - seo: - description: Instructions for setting up ESPHome's Safe Mode to help recover from repeated boot failures. - image: system-update.svg --- +import APIRef from '@components/APIRef.astro'; + Sometimes hardware and/or software doesn't behave as expected. ESPHome supports a "safe mode" to help recover from repeated boot failures/reboot loops. After a specified number (the default is ten) of boot failures, the safe mode may @@ -13,8 +11,8 @@ be invoked; in this mode, all components are disabled except serial logging, net component(s). In most cases, this will temporarily mitigate the issue, allowing you a chance to correct it, perhaps by uploading a new binary. -You can also force the invocation of safe mode by configuring a dedicated {{< docref "/components/button/safe_mode" "button" >}} -or {{< docref "/components/switch/safe_mode" "switch" >}} component and/or by repeatedly pressing the reset button on the board +You can also force the invocation of safe mode by configuring a dedicated [button](/components/button/safe_mode/) +or [switch](/components/switch/safe_mode/) component and/or by repeatedly pressing the reset button on the board for `num_attempts` times (see below). ```yaml @@ -22,11 +20,11 @@ for `num_attempts` times (see below). safe_mode: ``` -{{< anchor "safe_mode-configuration_variables" >}} + ## Configuration variables -- **disabled** (*Optional*, boolean): Set to `true` to disable safe_mode. {{< docref "/components/ota" >}} automatically +- **disabled** (*Optional*, boolean): Set to `true` to disable safe_mode. [Ota](/components/ota/) automatically sets up safe mode; this allows disabling it if/when it is not wanted. - **boot_is_good_after** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time after which the boot is considered successful. @@ -50,7 +48,7 @@ safe_mode: ## See Also -- {{< apiref "safe_mode/safe_mode.h" "safe_mode/safe_mode.h" >}} -- {{< docref "/components/button/safe_mode" >}} -- {{< docref "/components/switch/safe_mode" >}} -- {{< docref "/guides/troubleshooting" >}} - Troubleshooting guide for debugging crashes and boot failures +- [Safe Mode Button](/components/button/safe_mode/) +- [Safe Mode Switch](/components/switch/safe_mode/) +- [Troubleshooting](/guides/troubleshooting/) - Troubleshooting guide for debugging crashes and boot failures +- diff --git a/content/components/script.md b/src/content/docs/components/script.mdx similarity index 94% rename from content/components/script.md rename to src/content/docs/components/script.mdx index e8791e6ba5..79c10af048 100644 --- a/content/components/script.md +++ b/src/content/docs/components/script.mdx @@ -49,7 +49,7 @@ script: - **then** (**Required**, [Action](/automations/actions#all-actions)): The action to perform. -{{< anchor "script-parameters" >}} + ## Script Parameters @@ -81,7 +81,7 @@ script: - light.turn_off: status_light ``` -{{< anchor "script-execute_action" >}} + ## `script.execute` Action @@ -105,7 +105,7 @@ on_...: - lambda: id(blink_light)->execute(1000); ``` -{{< anchor "script-stop_action" >}} + ## `script.stop` Action @@ -134,7 +134,7 @@ on_...: lambda: 'id(my_script).stop();' ``` -{{< anchor "script-wait_action" >}} + ## `script.wait` Action @@ -161,7 +161,7 @@ on_...: This can't be used in a lambda as it would block all functioning of the device. The script wouldn't even get to run. -{{< anchor "script-is_running_condition" >}} + ## `script.is_running` Condition @@ -189,6 +189,5 @@ lambda: |- ## See Also -- {{< docref "index/" >}} -- {{< docref "/automations/actions" >}} -- {{< docref "/automations/templates" >}} +- [Actions, Triggers, Conditions](/automations/actions/) +- [Templates](/automations/templates/) diff --git a/content/components/seeed_mr24hpc1.md b/src/content/docs/components/seeed_mr24hpc1.mdx similarity index 94% rename from content/components/seeed_mr24hpc1.md rename to src/content/docs/components/seeed_mr24hpc1.mdx index be523e0836..bca97f95f5 100644 --- a/content/components/seeed_mr24hpc1.md +++ b/src/content/docs/components/seeed_mr24hpc1.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up MR24HPC1 mmWave (Kit)." title: "Seeed Studio MR24HPC1 mmWave (Kit)" -params: - seo: - description: Instructions for setting up MR24HPC1 mmWave (Kit). - image: seeed-mr24hpc1.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import seeedMr24hpc1MmwaveKitImg from './images/seeed-mr24hpc1-mmwave-kit.png'; +import seeedMr24hpc1CardImg from './images/seeed-mr24hpc1-card.png'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `seeed_mr24hpc1` platform allows you to use Seeed Studio 24GHz mmWave Sensor - @@ -16,9 +18,21 @@ Seeed Studio mmWave Human Detection Sensor Kit ([Product Page](https://www.seeed The [UART](/components/uart) is required to be set up in your configuration for this sensor to work, `parity` and `stop_bits` **must be** respectively `NONE` and `1`. You can use the ESP32 software or hardware serial to use this MR24HPC1, its default baud rate is 115200. -{{< img src="seeed-mr24hpc1.jpg" alt="Image" caption="Seeed Studio 24GHz mmWave Sensor - Human Static Presence Module Lite" width="50.0%" class="align-center" >}} - -{{< img src="seeed-mr24hpc1-mmwave-kit.png" alt="Image" caption="Seeed Studio mmWave Human Detection Sensor Kit" width="50.0%" class="align-center" >}} +
    + +
    ```yaml # Example configuration entry @@ -30,7 +44,7 @@ seeed_mr24hpc1: - **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) if you want to use multiple UART buses. -- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this {{< docref "seeed_mr24hpc1/" >}} component if you need multiple components. +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this [Seeed Mr24Hpc1](/components/seeed_mr24hpc1/) component if you need multiple components. ## Binary Sensor @@ -71,9 +85,9 @@ sensor: name: "Current Custom Mode" ``` -{{< anchor "seeed_mr24hpc1-spatial_static" >}} + -{{< anchor "seeed_mr24hpc1-spatial_mtion" >}} + ### Configuration variables @@ -111,9 +125,9 @@ sensor: - **custom_mode_num** (*Optional*, int): The custom mode number that the radar is currently in. If it is not in custom mode, then the value is 0. All options from [Sensor](/components/sensor). -{{< anchor "seeed_mr24hpc1-open_function" >}} + -{{< anchor "seeed_mr24hpc1-standard_mode" >}} + ## Switch @@ -157,7 +171,7 @@ number: name: "Time For Entering No Person State (Custom Mode)" ``` -{{< anchor "seeed_mr24hpc1-custom_mode" >}} + ### Configuration variables @@ -421,7 +435,7 @@ Then replace all instances of `{$DEVICE}` with your device name The result: -{{< img src="seeed-mr24hpc1-card.png" alt="Image" class="align-center" >}} + ## See Also @@ -430,4 +444,4 @@ The result: - [Product Detail Page for Seeed Studio 24GHz mmWave Sensor - Human Static Presence Module Lite](https://www.seeedstudio.com/24GHz-mmWave-Sensor-Human-Static-Presence-Module-Lite-p-5524.html) - [Product Detail Page for Seeed Studio mmWave Human Detection Sensor Kit](https://www.seeedstudio.com/mmWave-Human-Detection-Sensor-Kit-p-5773.html) - [Source of inspiration for implementation](https://github.com/limengdu/mmwave-kit-external-components/) -- {{< apiref "seeed_mr24hpc1/seeed_mr24hpc1.h" "seeed_mr24hpc1/seeed_mr24hpc1.h" >}} +- diff --git a/content/components/seeed_mr60bha2.md b/src/content/docs/components/seeed_mr60bha2.mdx similarity index 84% rename from content/components/seeed_mr60bha2.md rename to src/content/docs/components/seeed_mr60bha2.mdx index 06b0a32316..99d5bb6337 100644 --- a/content/components/seeed_mr60bha2.md +++ b/src/content/docs/components/seeed_mr60bha2.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up Seeed Studio MR60BHA2 60GHz mmWave Breathing and Heartbeat Detection Sensor Kit." title: "Seeed Studio MR60BHA2 60GHz mmWave Breathing and Heartbeat Detection Sensor Kit" -params: - seo: - description: Instructions for setting up Seeed Studio MR60BHA2 60GHz mmWave Breathing and Heartbeat Detection Sensor Kit. - image: seeed_mr60bha2.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `seeed_mr60bha2` platform allows you to use Seeed Studio MR60BHA2 60GHz mmWave Fall Detection Sensor Kit with XIAO ESP32C6 ([Product Page](https://www.seeedstudio.com/MR60BHA2-60GHz-mmWave-Sensor-Breathing-and-Heartbeat-Module-p-5945.html)) with ESPHome. @@ -14,7 +14,14 @@ The `seeed_mr60bha2` platform allows you to use Seeed Studio MR60BHA2 60GHz mmWa The [UART](/components/uart) is required to be set up in your configuration for this sensor to work, `parity` and `stop_bits` **must be** respectively `NONE` and `1`. You can use the ESP32 software or hardware serial to use this MR60BHA2, its default baud rate is 115200. -{{< img src="seeed_mr60bha2.jpg" alt="Image" caption="Seeed Studio MR60BHA2 60GHz mmWave Fall Detection Sensor Kit with XIAO ESP32C6" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -26,7 +33,7 @@ seeed_mr60bha2: - **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) if you want to use multiple UART buses. -- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this {{< docref "seeed_mr60bha2/" >}} component if you need multiple components. +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this [Seeed Mr60Bha2](/components/seeed_mr60bha2/) component if you need multiple components. ## Binary Sensor @@ -80,4 +87,4 @@ sensor: - [Official Using Documents for Seeed Studio MR60BHA2 60GHz mmWave Breathing and Heartbeat Detection Sensor Kit with XIAO ESP32C6](https://wiki.seeedstudio.com/getting_started_with_mr60bha2_mmwave_kit/) - [Product Detail Page for Seeed Studio MR60BHA2 60GHz mmWave Breathing and Heartbeat Detection Sensor Kit with XIAO ESP32C6](https://www.seeedstudio.com/MR60BHA2-60GHz-mmWave-Sensor-Breathing-and-Heartbeat-Module-p-5945.html) - [Source of inspiration for implementation](https://github.com/limengdu/MR60BHA2_ESPHome_external_components/) -- {{< apiref "seeed_mr60bha2/seeed_mr60bha2.h" "seeed_mr60bha2/seeed_mr60bha2.h" >}} +- diff --git a/content/components/seeed_mr60fda2.md b/src/content/docs/components/seeed_mr60fda2.mdx similarity index 88% rename from content/components/seeed_mr60fda2.md rename to src/content/docs/components/seeed_mr60fda2.mdx index 43e670cf87..7b0871dbfb 100644 --- a/content/components/seeed_mr60fda2.md +++ b/src/content/docs/components/seeed_mr60fda2.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up Seeed Studio MR60FDA2 60GHz mmWave Fall Detection Sensor Kit." title: "Seeed Studio MR60FDA2 60GHz mmWave Fall Detection Sensor Kit" -params: - seo: - description: Instructions for setting up Seeed Studio MR60FDA2 60GHz mmWave Fall Detection Sensor Kit. - image: seeed_mr60fda2.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `seeed_mr60fda2` platform allows you to use Seeed Studio's MR60FDA2 60GHz mmWave Fall Detection Sensor Kit with XIAO ESP32C6 ([Product Page](https://www.seeedstudio.com/MR60FDA2-60GHz-mmWave-Sensor-Fall-Detection-Module-p-5946.html)) with ESPHome. @@ -14,7 +14,14 @@ The `seeed_mr60fda2` platform allows you to use Seeed Studio's MR60FDA2 60GHz mm The [UART](/components/uart) is required to be set up in your configuration for this sensor to work, `parity` and `stop_bits` **must be** respectively `NONE` and `1`. You can use the ESP32 software or hardware (recommended) serial to use the MR60FDA2; its default baud rate is 115200. -{{< img src="seeed_mr60fda2.jpg" alt="Image" caption="Seeed Studio MR60FDA2 60GHz mmWave Fall Detection Sensor Kit with XIAO ESP32C6" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -26,7 +33,7 @@ seeed_mr60fda2: - **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) if you want to use multiple UART buses. -- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this {{< docref "seeed_mr60fda2/" >}} component if you need multiple components. +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this [Seeed Mr60Fda2](/components/seeed_mr60fda2/) component if you need multiple components. ## Binary Sensor @@ -101,4 +108,4 @@ select: - [Official Using Documents for Seeed Studio MR60FDA2 60GHz mmWave Fall Detection Sensor Kit with XIAO ESP32C6](https://wiki.seeedstudio.com/getting_started_with_mr60fda2_mmwave_kit/) - [Product Detail Page for Seeed Studio MR60FDA2 60GHz mmWave Fall Detection Sensor Kit with XIAO ESP32C6](https://www.seeedstudio.com/MR60FDA2-60GHz-mmWave-Sensor-Fall-Detection-Module-p-5946.html) - [Source of inspiration for implementation](https://github.com/limengdu/MR60FDA2_ESPHome_external_components) -- {{< apiref "seeed_mr60fda2/seeed_mr60fda2.h" "seeed_mr60fda2/seeed_mr60fda2.h" >}} +- diff --git a/content/components/select/_index.md b/src/content/docs/components/select/index.mdx similarity index 93% rename from content/components/select/_index.md rename to src/content/docs/components/select/index.mdx index 4be07f327d..713c52d7e4 100644 --- a/content/components/select/_index.md +++ b/src/content/docs/components/select/index.mdx @@ -1,11 +1,12 @@ --- description: "Instructions for setting up select components in ESPHome." title: "Select Component" -params: - seo: - description: Instructions for setting up select components in ESPHome. - image: folder-open.svg +sidebar: + label: "Select Component" --- +import APIRef from '@components/APIRef.astro'; +import APIClass from '@components/APIClass.astro'; + ESPHome has support for components to create a select entity. A select entity is basically an option list that can be set by either yaml, hardware or the user/frontend. @@ -13,7 +14,7 @@ basically an option list that can be set by either yaml, hardware or the user/fr > [!NOTE] > Home Assistant Core 2021.8 or higher is required for ESPHome select entities to work. -{{< anchor "config-select" >}} + ## Base Select Configuration @@ -47,7 +48,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -68,7 +69,7 @@ For more information on using lambdas with select, see [lambda calls](#select-la ## Triggers -{{< anchor "select-on_value" >}} + ### `on_value` @@ -116,7 +117,7 @@ on_...: condition: select.is: id: my_select - options: "Happy" # Single option + options: "Happy" # Single option then: - logger.log: "Select is exactly Happy" - if: @@ -130,7 +131,7 @@ on_...: ## Actions -{{< anchor "select-set_action" >}} + ### `select.set` Action @@ -151,7 +152,7 @@ Configuration variables: When a non-existing option value is used, a warning is logged and the state of the select is left as-is. -{{< anchor "select-set_index_action" >}} + ### `select.set_index` Action @@ -172,7 +173,7 @@ Configuration variables: When a non-existing index value is used, a warning is logged and the state of the select is left as-is. -{{< anchor "select-next_action" >}} + ### `select.next` Action @@ -193,7 +194,7 @@ Configuration variables: - **cycle** (*Optional*, boolean): Whether or not to jump back to the first option of the select when the last option is currently selected. Defaults to `true`. -{{< anchor "select-previous_action" >}} + ### `select.previous` Action @@ -215,7 +216,7 @@ Configuration variables: - **cycle** (*Optional*, boolean): Whether or not to jump to the last option of the select when the first option is currently selected. Defaults to `true`. -{{< anchor "select-first_action" >}} + ### `select.first` Action @@ -234,7 +235,7 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the select to set. -{{< anchor "select-last_action" >}} + ### `select.last` Action @@ -253,7 +254,7 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the select to set. -{{< anchor "select-operation_action" >}} + ### `select.operation` Action @@ -289,7 +290,7 @@ Configuration variables: wrap around the options list when respectively the last or first option in the select is currently active. -{{< anchor "select-lambda_calls" >}} + ## Using Selects in Lambdas @@ -407,5 +408,5 @@ select: ## See Also -- {{< apiref "Select" "select/select.h" >}} -- {{< apiref "SelectCall" "select/select_call.h" >}} +- +- diff --git a/content/components/select/logger.md b/src/content/docs/components/select/logger.mdx similarity index 77% rename from content/components/select/logger.md rename to src/content/docs/components/select/logger.mdx index ad4e1b613b..281138ed4b 100644 --- a/content/components/select/logger.md +++ b/src/content/docs/components/select/logger.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up a logger select in ESPHome." title: "Logger Select" -params: - seo: - description: Instructions for setting up a logger select in ESPHome. - image: description.svg --- The `logger` Select platform allows you to create a Select that can be used to change the log level of the logger component. @@ -22,4 +18,4 @@ select: ## See Also - [Automation](/automations) -- {{< docref "/components/logger" >}} +- [Logger Component](/components/logger/) diff --git a/content/components/select/lvgl.md b/src/content/docs/components/select/lvgl.mdx similarity index 68% rename from content/components/select/lvgl.md rename to src/content/docs/components/select/lvgl.mdx index e4e715b8ff..24697a880d 100644 --- a/content/components/select/lvgl.md +++ b/src/content/docs/components/select/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL widget select." title: "LVGL Select" -params: - seo: - description: Instructions for setting up an LVGL widget select. - image: ../images/lvgl_c_sel.png --- The `lvgl` select platform creates a select from an LVGL widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widgets are [`dropdown`](/components/lvgl/widgets#lvgl-widget-dropdown) and [`roller`](/components/lvgl/widgets#lvgl-widget-roller). A single select supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome select component. @@ -32,13 +28,13 @@ select: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Roller widget](/components/lvgl/widgets#lvgl-widget-roller) - [Dropdown widget](/components/lvgl/widgets#lvgl-widget-dropdown) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) diff --git a/content/components/select/modbus_controller.md b/src/content/docs/components/select/modbus_controller.mdx similarity index 86% rename from content/components/select/modbus_controller.md rename to src/content/docs/components/select/modbus_controller.mdx index 04db7067a1..57526ef87f 100644 --- a/content/components/select/modbus_controller.md +++ b/src/content/docs/components/select/modbus_controller.mdx @@ -1,9 +1,6 @@ --- description: "Instructions for setting up Modbus Controller Select(s) with ESPHome." title: "Modbus Controller Select" -params: - seo: - description: Instructions for setting up Modbus Controller Select(s) with ESPHome. --- The `modbus_controller` Select platform allows you to create a Select from modbus @@ -48,7 +45,7 @@ registers. Parameters passed into lambda - **x** (`int64_t` ): The parsed integer value of the modbus data. - - **data** (`const std::vector&` ): vector containing the complete raw modbus response bytes for this + - **data** (`const std::vector &`): vector containing the complete raw modbus response bytes for this sensor. Note: because the response contains data for all registers in the same range you have to use `data[item->offset]` to get the first response byte for your sensor. @@ -85,7 +82,7 @@ lambda: |- - **x** (`const std::string&` ): The option value to set for this Select. - **value** (`int64_t` ): The mapping value of `x` using `optionsmap`. -- **payload** (`std::vector& payload` ): Empty vector for the payload. The lamdba can add +- **payload** (`std::vector &payload`): Empty vector for the payload. The lambda can add 16 bit raw modbus register words which are send to the modbus device. - **item** (`ModbusSelect*const` ): The sensor object itself. @@ -138,13 +135,13 @@ select: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) - [Automation](/automations) -- +- [https://www.modbustools.com/modbus.html](https://www.modbustools.com/modbus.html) diff --git a/content/components/select/template.md b/src/content/docs/components/select/template.mdx similarity index 91% rename from content/components/select/template.md rename to src/content/docs/components/select/template.mdx index edd30f4aa9..4b4276caf4 100644 --- a/content/components/select/template.md +++ b/src/content/docs/components/select/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Template Select(s) with ESPHome." title: "Template Select" -params: - seo: - description: Instructions for setting up Template Select(s) with ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` Select platform allows you to create a Select with templated values using [lambdas](/automations/templates#config-lambda). @@ -60,4 +58,4 @@ with the [`select.set` Action](/components/select#select-set_action). ## See Also - [Automation](/automations) -- {{< apiref "template/select/template_select.h" "template/select/template_select.h" >}} +- diff --git a/content/components/select/tuya.md b/src/content/docs/components/select/tuya.mdx similarity index 89% rename from content/components/select/tuya.md rename to src/content/docs/components/select/tuya.mdx index 48d2cd41c4..0dc929fe08 100644 --- a/content/components/select/tuya.md +++ b/src/content/docs/components/select/tuya.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up a Tuya device select." title: "Tuya Select" -params: - seo: - description: Instructions for setting up a Tuya device select. - image: tuya.png --- +import APIRef from '@components/APIRef.astro'; + The `tuya` select platform creates a select from a tuya serial component -and requires {{< docref "/components/tuya" >}} to be configured. +and requires [Tuya](/components/tuya/) to be configured. ```text [08:51:09][C][tuya:032]: Tuya: @@ -67,5 +65,5 @@ select: ## See Also -- {{< docref "/components/select" >}} -- {{< apiref "tuya/select/tuya_select.h" "tuya/select/tuya_select.h" >}} +- [Select Component](/components/select/) +- diff --git a/content/components/sensor/a01nyub.md b/src/content/docs/components/sensor/a01nyub.mdx similarity index 76% rename from content/components/sensor/a01nyub.md rename to src/content/docs/components/sensor/a01nyub.mdx index 458cc9045f..65ee512741 100644 --- a/content/components/sensor/a01nyub.md +++ b/src/content/docs/components/sensor/a01nyub.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up A01NYUB waterproof ultrasonic distance sensor in ESPHome." title: "A01NYUB Waterproof Ultrasonic Sensor" -params: - seo: - description: Instructions for setting up A01NYUB waterproof ultrasonic distance sensor in ESPHome. - image: a01nyub.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import a01nyubFullImg from './images/a01nyub-full.jpg'; +import APIRef from '@components/APIRef.astro'; + This sensor allows you to use A01NYUB waterproof ultrasonic sensor by DFRobot ([datasheet](https://wiki.dfrobot.com/A01NYUB%20Waterproof%20Ultrasonic%20Sensor%20SKU_SEN0313)) with ESPHome to measure distances. This sensor can measure @@ -16,7 +17,12 @@ Since this sensor reads multiple times per second, [Sensor Filters](/components/ To use the sensor, first set up an [UART Bus](/components/uart) with a baud rate of 9600 and connect the sensor to the specified pin. -{{< img src="a01nyub-full.jpg" alt="Image" caption="A01NYUB Waterproof Ultrasonic Distance Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -36,4 +42,4 @@ sensor: - [Sensor Filters](/components/sensor#sensor-filters) - [UART Bus](/components/uart) -- {{< apiref "a01nyub/a01nyub.h" "a01nyub/a01nyub.h" >}} +- diff --git a/content/components/sensor/a02yyuw.md b/src/content/docs/components/sensor/a02yyuw.mdx similarity index 78% rename from content/components/sensor/a02yyuw.md rename to src/content/docs/components/sensor/a02yyuw.mdx index 7aefce5380..98e6c3b8f2 100644 --- a/content/components/sensor/a02yyuw.md +++ b/src/content/docs/components/sensor/a02yyuw.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up A02YYUW waterproof ultrasonic distance sensor in ESPHome." title: "A02YYUW Waterproof Ultrasonic Sensor" -params: - seo: - description: Instructions for setting up A02YYUW waterproof ultrasonic distance sensor in ESPHome. - image: a02yyuw.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import a02yyuwFullImg from './images/a02yyuw-full.jpg'; +import APIRef from '@components/APIRef.astro'; + This sensor allows you to use A02YYUW waterproof ultrasonic sensor by DFRobot ([datasheet](https://wiki.dfrobot.com/_A02YYUW_Waterproof_Ultrasonic_Sensor_SKU_SEN0311)) with ESPHome to measure distances. This sensor can measure @@ -16,7 +17,12 @@ Since this sensor reads multiple times per second, [Sensor Filters](/components/ To use the sensor, first set up an [UART Bus](/components/uart) with a baud rate of 9600 and connect the sensor to the specified pin. -{{< img src="a02yyuw-full.jpg" alt="Image" caption="A02YYUW Waterproof Ultrasonic Distance Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -39,4 +45,4 @@ sensor: - [Sensor Filters](/components/sensor#sensor-filters) - [UART Bus](/components/uart) -- {{< apiref "a02yyuw/a02yyuw.h" "a02yyuw/a02yyuw.h" >}} +- diff --git a/content/components/sensor/absolute_humidity.md b/src/content/docs/components/sensor/absolute_humidity.mdx similarity index 91% rename from content/components/sensor/absolute_humidity.md rename to src/content/docs/components/sensor/absolute_humidity.mdx index 443df874ff..62e486edfd 100644 --- a/content/components/sensor/absolute_humidity.md +++ b/src/content/docs/components/sensor/absolute_humidity.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up absolute humidity calculation" title: "Absolute Humidity" -params: - seo: - description: Instructions for setting up absolute humidity calculation - image: water-drop.svg --- +import APIRef from '@components/APIRef.astro'; + The `absolute_humidity` platform allows you to calculate absolute humidity from air temperature and relative humidity. @@ -48,8 +46,8 @@ There are several different equations for calculating saturated vapor pressure. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "absolute_humidity/absolute_humidity.h" "absolute_humidity/absolute_humidity.h" >}} - [NOAA Discussion on Humidity](https://www.weather.gov/lmk/humidity) - [Absolute humidity on Wikipedia](https://en.wikipedia.org/wiki/Humidity#Absolute_humidity) - [How to calculate absolute humidity](https://www.environmentalbiophysics.org/chalk-talk-how-to-calculate-absolute-humidity/) - [How to convert relative humidity to absolute humidity](https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/) +- diff --git a/content/components/sensor/adc.md b/src/content/docs/components/sensor/adc.mdx similarity index 94% rename from content/components/sensor/adc.md rename to src/content/docs/components/sensor/adc.mdx index b6c7b4b6c7..93cb0e0307 100644 --- a/content/components/sensor/adc.md +++ b/src/content/docs/components/sensor/adc.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up built-in analog voltage sensors." title: "Analog To Digital Sensor" -params: - seo: - description: Instructions for setting up built-in analog voltage sensors. - image: flash.svg --- +import { Image } from 'astro:assets'; +import adcUiImg from './images/adc-ui.png'; +import APIRef from '@components/APIRef.astro'; + The Analog To Digital (`adc` ) Sensor allows you to use the built-in ADC in your device to measure a voltage on certain pins. @@ -15,7 +15,7 @@ ADC in your device to measure a voltage on certain pins. - RP2040: GPIO26 through GPIO29 can be used. - nRF52840: AIN0 through AIN7, VDD, VDDHDIV5 can be used. -{{< img src="adc-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -61,7 +61,7 @@ sensor: > - multiply: 3.3 > ``` -{{< anchor "adc-esp32_attenuation" >}} + ## ESP32 Attenuation @@ -75,7 +75,7 @@ To simplify this, we provide the setting `attenuation: auto` for an automatic/se > In our tests, the usable ADC range was from ~0.075V to ~3.12V (with the `attenuation: auto` setting), and anything outside that range capped out at either end. > Even though the measurements are calibrated, the range *limits* are variable among chips due to differences in the internal voltage reference. -{{< anchor "adc-esp32_pins" >}} + ## ESP32 pins and Hardware Details @@ -102,7 +102,7 @@ This is handled automatically by the code, but it's worth noting if you're debug > [!WARNING] > On ESP32-C5, GPIO2 is a strapping pin used during boot. While it can be used as an ADC input, avoid connecting circuits that might interfere with the boot process. -{{< anchor "adc-raw" >}} + ## Different ESP32-ADC behavior since 2021.11 @@ -122,7 +122,7 @@ filters: Note we don't recommend this method as it will change between chips, and newer ESP32 modules have different ranges (i.e. 0-8191); it is better to use the new calibrated voltages and update any existing filters accordingly. -{{< anchor "adc-vcc" >}} + ## Measuring VCC @@ -202,6 +202,6 @@ This works on SKU:DFR0654. For more information see: [manufacturer's website](ht ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ads1115/" >}} -- {{< docref "max6675/" >}} -- {{< apiref "adc/adc_sensor.h" "adc/adc_sensor.h" >}} +- [ADS1115 4-Channel 16-Bit A/D Converter](/components/sensor/ads1115/) +- [MAX6675 K-Type Thermocouple Temperature Sensor](/components/sensor/max6675/) +- diff --git a/content/components/sensor/adc128s102.md b/src/content/docs/components/sensor/adc128s102.mdx similarity index 85% rename from content/components/sensor/adc128s102.md rename to src/content/docs/components/sensor/adc128s102.mdx index 3c0eae38c9..e993db5818 100644 --- a/content/components/sensor/adc128s102.md +++ b/src/content/docs/components/sensor/adc128s102.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up ADC128S102 12 Bit Analog to Digital Converter in ESPHome." title: "ADC128S102 8-Channel 12-Bit A/D Converter" -params: - seo: - description: Instructions for setting up ADC128S102 12 Bit Analog to Digital Converter in ESPHome. - image: adc128s102.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The ADC128S102 is a low-power, eight-channel CMOS 12-bit analog-to-digital converter specified for conversion throughput rates of 500 ksps to 1 MSPS. The converter is based on a successive-approximation register architecture with an internal track-and-hold circuit. -{{< img src="adc128s102.png" alt="Image" width="50.0%" class="align-center" >}} + -{{< anchor "adc128s102-component" >}} + ## Component/Hub @@ -61,4 +60,4 @@ Configuration variables: ## See Also - [SPI Bus](/components/spi) -- {{< apiref "adc128s102/adc128s102.h" "adc128s102/adc128s102.h" >}} +- diff --git a/content/components/sensor/ade7880.md b/src/content/docs/components/sensor/ade7880.mdx similarity index 98% rename from content/components/sensor/ade7880.md rename to src/content/docs/components/sensor/ade7880.mdx index 0716527482..dc38de007b 100644 --- a/content/components/sensor/ade7880.md +++ b/src/content/docs/components/sensor/ade7880.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up ADE7880 energy metering sensors" title: "ADE7880 Power Sensor" -params: - seo: - description: Instructions for setting up ADE7880 energy metering sensors --- +import APIRef from '@components/APIRef.astro'; + The `ade7880` sensor platform allows you to use ADE7880 voltage/current/power sensors ([datasheet](https://www.analog.com/media/en/technical-documentation/data-sheets/ADE7880.pdf)) with ESPHome. This sensor @@ -299,4 +298,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ade7880/ade7880.h" "ade7880/ade7880.h" >}} +- diff --git a/content/components/sensor/ade7953.md b/src/content/docs/components/sensor/ade7953.mdx similarity index 97% rename from content/components/sensor/ade7953.md rename to src/content/docs/components/sensor/ade7953.mdx index 24dfa8e95b..358d85e7c7 100644 --- a/content/components/sensor/ade7953.md +++ b/src/content/docs/components/sensor/ade7953.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up ADE7953 power sensors" title: "ADE7953 Power Sensor" -params: - seo: - description: Instructions for setting up ADE7953 power sensors - image: ade7953.svg --- +import APIRef from '@components/APIRef.astro'; + > [!NOTE] > This page is incomplete and could use some work. If you want to contribute, please see our @@ -257,7 +255,7 @@ There are three oddities with the Shelly 2.5: - Lastly, the ADE7953 IRQ line is connected to the GPIO16. The irq_pin MUST be set to GPIO16 to prevent device overheat (>70ºC idling). -Additionally, the device has an :{{< docref "ntc" "NTC temperature sensor" >}}. +Additionally, the device has an [NTC temperature sensor](/components/sensor/ntc/). ```yaml i2c: @@ -304,4 +302,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ade7953/ade7953.h" "ade7953/ade7953.h" >}} +- diff --git a/content/components/sensor/ads1115.md b/src/content/docs/components/sensor/ads1115.mdx similarity index 86% rename from content/components/sensor/ads1115.md rename to src/content/docs/components/sensor/ads1115.mdx index c0e7238416..00414d3a2a 100644 --- a/content/components/sensor/ads1115.md +++ b/src/content/docs/components/sensor/ads1115.mdx @@ -1,13 +1,15 @@ --- description: "Instructions for setting up ADS1115/ADS1015 multiplexed analog voltage sensors." title: "ADS1115 4-Channel 16-Bit A/D Converter" -params: - seo: - description: Instructions for setting up ADS1115/ADS1015 multiplexed analog voltage sensors. - image: ads1115.jpg --- -{{< anchor "ads1115-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ads1115FullImg from './images/ads1115-full.jpg'; +import ads1115UiImg from './images/ads1115-ui.png'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -15,7 +17,12 @@ The `ads1115` domain creates a global hub so that you can later create individual sensors using the [ADS1115 Sensor Platform](#ads1115-sensor). To use this hub, first setup the [I²C Bus](/components/i2c) and connect the sensor to the pins specified there. -{{< img src="ads1115-full.jpg" alt="Image" caption="ADS1115 16-Bit ADC." width="50.0%" class="align-center" >}} +
    ```yaml ads1115: @@ -28,13 +35,13 @@ ads1115: See [I²C Addresses](#ads1115_i2c_addresses) for more information. - **continuous_mode** (*Optional*, boolean): Set if the ADS1115 should continuously measure voltages or - only measure them when an update is called. Please enable this for the {{< docref "ct_clamp/" >}} component. + only measure them when an update is called. Please enable this for the [Ct Clamp](/components/sensor/ct_clamp/) component. Defaults to `off`. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this ADS1115 Hub. Use this if you want to use multiple ADS1115 hubs at once. -{{< anchor "ads1115_i2c_addresses" >}} + ## I²C Addresses @@ -47,7 +54,7 @@ change the i²c address. - If the address pin is tied to SDA, the address is `0x4a`. - If the address pin is tied to SCL, the address is `0x4B`. -{{< anchor "ads1115-sensor" >}} + ## Sensor @@ -57,7 +64,7 @@ First, setup an [ADS1115 Hub](#ads1115-component) for your ADS1115 sensor and th sensor platform to create individual sensors that will report the voltage to Home Assistant. -{{< img src="ads1115-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml ads1115: @@ -134,7 +141,7 @@ When using an ADS1015, the resolution has to be specified and should be defined ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "adc/" >}} -- {{< docref "max6675/" >}} -- {{< apiref "ads1115/ads1115.h" "ads1115/ads1115.h" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) +- [MAX6675 K-Type Thermocouple Temperature Sensor](/components/sensor/max6675/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/ads1118.md b/src/content/docs/components/sensor/ads1118.mdx similarity index 85% rename from content/components/sensor/ads1118.md rename to src/content/docs/components/sensor/ads1118.mdx index 3189b27060..26129bf37f 100644 --- a/content/components/sensor/ads1118.md +++ b/src/content/docs/components/sensor/ads1118.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up ADS1118 multiplexed analog voltage sensors." title: "ADS1118 4-Channel 16-Bit A/D Converter with Internal Temperature Sensor" -params: - seo: - description: Instructions for setting up ADS1118 multiplexed analog voltage sensors. - image: ads1118.jpg --- -{{< anchor "ads1118-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ads1118FullImg from './images/ads1118-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -16,7 +17,12 @@ The `ads1118` domain creates a global hub so that you can later create individual sensors using the [ADS1118 Sensor Platform](#ads1118-sensor). It uses the [SPI Bus](/components/spi) for communication. -{{< img src="ads1118-full.jpg" alt="Image" caption="ADS1118 16-Bit ADC." width="60.0%" class="align-center" >}} +
    ```yaml ads1118: @@ -29,7 +35,7 @@ ads1118: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this ADS1118 Hub. Use this if you want to use multiple ADS1118 hubs at once. -{{< anchor "ads1118-sensor" >}} + ## Sensor @@ -97,6 +103,6 @@ Additionally, the ADS1118 has a Programmable Gain Amplifier (PGA) that can help ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "adc/" >}} -- {{< docref "ads1115/" >}} -- {{< apiref "ads1118/ads1118.h" "ads1118/ads1118.h" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) +- [ADS1115 4-Channel 16-Bit A/D Converter](/components/sensor/ads1115/) +- diff --git a/content/components/sensor/ags10.md b/src/content/docs/components/sensor/ags10.mdx similarity index 87% rename from content/components/sensor/ags10.md rename to src/content/docs/components/sensor/ags10.mdx index f54f473fd5..2fad8a839f 100644 --- a/content/components/sensor/ags10.md +++ b/src/content/docs/components/sensor/ags10.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up AGS10 VOC sensors with ESPHome" title: "AGS10 Volatile Organic Compound (VOC) Sensor" -params: - seo: - description: Instructions for setting up AGS10 VOC sensors with ESPHome - image: ags10.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `ags10` sensor platform VOC sensor allows you to use your ASAIR AGS10 ([datasheet](http://www.aosong.com/userfiles/files/Datasheet%20AGS10.pdf), [ASAIR](http://www.aosong.com/en/products-86.html)) sensors with @@ -16,7 +16,14 @@ required to be set up in your configuration for this sensor to work. > [!NOTE] > The sensor supports up to 15kHz operation, so you should specify up to `frequency: 15kHz` in your `i2c` configuration. -{{< img src="ags10.jpg" alt="Image" caption="AGS10 VOC Sensor" width="30.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -45,7 +52,7 @@ sensor: ## Actions -{{< anchor "sensor-ags10setzeropointaction" >}} + ## `ags10.set_zero_point` Action @@ -77,7 +84,7 @@ Configuration option: - **value** (*Optional*, int): nominated resistance value to set (unit: 0.1 kΩ). -{{< anchor "sensor-ags10newi2caddressaction" >}} + ## `ags10.new_i2c_address` Action @@ -107,4 +114,4 @@ Configuration options: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ags10/ags10.h" "ags10/ags10.h" >}} +- diff --git a/content/components/sensor/aht10.md b/src/content/docs/components/sensor/aht10.mdx similarity index 75% rename from content/components/sensor/aht10.md rename to src/content/docs/components/sensor/aht10.mdx index a4ea9e2a97..8f9c9e6311 100644 --- a/content/components/sensor/aht10.md +++ b/src/content/docs/components/sensor/aht10.mdx @@ -1,20 +1,27 @@ --- description: "Instructions for setting up AHT10 temperature and humidity sensors" title: "AHT10 Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up AHT10 temperature and humidity sensors - image: aht10.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import aht10FullImg from './images/aht10-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The `aht10` Temperature+Humidity sensor allows you to use your AHT10 ([datasheet](http://www.aosong.com/userfiles/files/media/aht10%E8%A7%84%E6%A0%BC%E4%B9%A6v1_1%EF%BC%8820191015%EF%BC%89.pdf)), AHT20 ([datasheet](https://cdn-learn.adafruit.com/assets/assets/000/091/676/original/AHT20-datasheet-2020-4-16.pdf?1591047915)) or AHT30 ([datasheet](https://eleparts.co.kr/data/goods_attach/202306/good-pdf-12751003-1.pdf)) [I²C](/components/i2c)-based sensor with ESPHome. -The DHT20 ([datasheet](https://cdn.sparkfun.com/assets/8/a/1/5/0/DHT20.pdf)) sensor has the packaging of the {{< docref "dht/" >}} series, but has the AHT20 inside and is speaking [I²C](/components/i2c) as well. +The DHT20 ([datasheet](https://cdn.sparkfun.com/assets/8/a/1/5/0/DHT20.pdf)) sensor has the packaging of the [Dht](/components/sensor/dht/) series, but has the AHT20 inside and is speaking [I²C](/components/i2c) as well. -{{< img src="aht10-full.jpg" alt="Image" caption="AHT10 Temperature & Humidity Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + > [!NOTE] > When configured for humidity, the log *'Components should block for at most 20-30ms in loop().'* will be generated in verbose mode. This is due to technical specs of the sensor and can not be avoided. @@ -55,7 +62,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< apiref "aht10/aht10.h" "aht10/aht10.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) - [AHT10 Library](https://github.com/Thinary/AHT10) by [Thinary Electronic](https://github.com/Thinary) - [Unofficial Translated AHT10 Datasheet (en)](https://wiki.liutyi.info/download/attachments/30507639/Aosong_AHT10_en_draft_0c.pdf) +- diff --git a/content/components/sensor/airthings_ble.md b/src/content/docs/components/sensor/airthings_ble.mdx similarity index 91% rename from content/components/sensor/airthings_ble.md rename to src/content/docs/components/sensor/airthings_ble.mdx index 9be72e6366..b7d08b40e9 100644 --- a/content/components/sensor/airthings_ble.md +++ b/src/content/docs/components/sensor/airthings_ble.mdx @@ -1,11 +1,13 @@ --- description: "Instructions for setting up AirThings bluetooth-based sensors in ESPHome." title: "AirThings BLE Sensors" -params: - seo: - description: Instructions for setting up AirThings bluetooth-based sensors in ESPHome. --- +import { Image } from 'astro:assets'; +import airthingsWavePlusImg from './images/airthings_wave_plus.jpg'; +import airthingsWaveMiniImg from './images/airthings_wave_mini.jpg'; +import airthingsWaveRadonImg from './images/airthings_wave_radon.jpg'; + The `airthings_wave_plus` and `airthings_wave_mini` sensor platforms lets you track the output of AirThings Bluetooth Low Energy devices. This component will track radon, airborne chemicals, CO2, temperature and humidity and others depending on the device sensors. @@ -39,7 +41,7 @@ Once the device is found, remove the `airthings_ble` device tracker from your co AirThings Wave Plus tracks radon (24h and long term), airborne chemicals, CO2, temperature, atmospheric pressure and humidity. -{{< img src="airthings_wave_plus.jpg" alt="Image" width="60.0%" class="align-center" >}} + ### Configuration example @@ -80,7 +82,7 @@ esp32_ble_tracker: AirThings Wave Mini tracks airborne chemicals, temperature, pressure and humidity. -{{< img src="airthings_wave_mini.jpg" alt="Image" width="60.0%" class="align-center" >}} + Configuration example: @@ -128,7 +130,7 @@ AirThings Wave Radon (Gen 2) tracks radon (24h and long term), temperature, atmo > [!NOTE] > The Wave Gen2 device does NOT support CO2 or TVOC sensors - only radon, temperature, pressure, humidity, and illuminance are available. -{{< img src="airthings_wave_radon.jpg" alt="Image" width="60.0%" class="align-center" >}} + ## Configuration variables @@ -220,4 +222,4 @@ sensor: ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) diff --git a/content/components/sensor/alpha3.md b/src/content/docs/components/sensor/alpha3.mdx similarity index 89% rename from content/components/sensor/alpha3.md rename to src/content/docs/components/sensor/alpha3.mdx index c35fb04d2a..940483630d 100644 --- a/content/components/sensor/alpha3.md +++ b/src/content/docs/components/sensor/alpha3.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for monitoring a Grundfos Alpha3 Model B circulator pump." title: "Grundfos Alpha3" -params: - seo: - description: Instructions for monitoring a Grundfos Alpha3 Model B circulator pump. - image: alpha3.jpg --- +import APIRef from '@components/APIRef.astro'; + The `alpha3` component allows you to monitor a Grundfos Alpha3 Model B circulator pump over BLE. @@ -17,7 +15,7 @@ This component supports the following metrics: - speed (RPM) This component uses the BLE peripheral on an ESP32, so you also need to enable -this component. Please see the {{< docref "/components/ble_client" >}} docs for how to discover the MAC +this component. Please see the [Ble Client](/components/ble_client/) docs for how to discover the MAC address of your Alpha3 pump, or you can find the list of paired MAC addresses in the list of paried Bluetooth devices on your smartphone after using the GO Remote app. @@ -86,5 +84,5 @@ sensor: ## See Also -- {{< docref "/components/ble_client" >}} -- {{< apiref "alpha3/alpha3.h" "alpha3/alpha3.h" >}} +- [BLE Client](/components/ble_client/) +- diff --git a/content/components/sensor/am2315c.md b/src/content/docs/components/sensor/am2315c.mdx similarity index 52% rename from content/components/sensor/am2315c.md rename to src/content/docs/components/sensor/am2315c.mdx index b6812a29c7..d1441d2c81 100644 --- a/content/components/sensor/am2315c.md +++ b/src/content/docs/components/sensor/am2315c.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up AM2315C temperature and humidity sensors" title: "AM2315C Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up AM2315C temperature and humidity sensors - image: am2315c.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import am2315cFullImg from './images/am2315c-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The `am2315c` Temperature+Humidity sensor allows you to use your AM2315C ([datasheet](https://cdn-shop.adafruit.com/product-files/5182/5182_AM2315C.pdf)) I²C-based sensor with ESPHome. -{{< img src="am2315c-full.jpg" alt="Image" caption="AM2315C Temperature & Humidity Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -37,9 +44,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< apiref "am2315c/am2315c.h" "am2315c/am2315c.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- diff --git a/content/components/sensor/am2320.md b/src/content/docs/components/sensor/am2320.mdx similarity index 57% rename from content/components/sensor/am2320.md rename to src/content/docs/components/sensor/am2320.mdx index 786f200406..f7d9d3f3ec 100644 --- a/content/components/sensor/am2320.md +++ b/src/content/docs/components/sensor/am2320.mdx @@ -1,20 +1,26 @@ --- description: "Instructions for setting up AM2320 temperature and humidity sensors" title: "AM2320 Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up AM2320 temperature and humidity sensors - image: am2320.jpg --- +import { Image } from 'astro:assets'; +import am2320FullImg from './images/am2320-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; + The `am2320` Temperature+Humidity sensor allows you to use your AM2320 ([datasheet](https://cdn-shop.adafruit.com/product-files/3721/AM2320.pdf)) I²C-based sensor with ESPHome. -{{< img src="am2320-full.jpg" alt="Image" caption="AM2320 Temperature & Humidity Sensor." width="50.0%" -class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + > [!NOTE] > Logs might include some warnings about receiving a NACK from the sensor. @@ -47,18 +53,18 @@ sensor: ## Troubleshooting If you experience communication or reliability issues with the AM2320 sensor, the -{{< docref "i2c" >}} frequency may be too high. The AM2320 supports I²C standard-mode with a maximum +[I2C](/components/i2c/) frequency may be too high. The AM2320 supports I²C standard-mode with a maximum clock frequency of 100 kHz. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "i2c" >}} -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "am2320/am2320.h" "am2320/am2320.h" >}} +- [I²C Bus](/components/i2c/) +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [AM2320 Library](https://github.com/EngDial/AM2320) by [Aleksey](https://github.com/EngDial) +- diff --git a/content/components/sensor/am43.md b/src/content/docs/components/sensor/am43.mdx similarity index 77% rename from content/components/sensor/am43.md rename to src/content/docs/components/sensor/am43.mdx index 2b3686fd76..3d774b2c5e 100644 --- a/content/components/sensor/am43.md +++ b/src/content/docs/components/sensor/am43.mdx @@ -1,12 +1,11 @@ --- description: "Sensors on AM43/BLE covers in ESPHome." title: "AM43 Sensor" -params: - seo: - description: Sensors on AM43/BLE covers in ESPHome. - image: am43.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `am43` sensor platform allows you to read the light and battery sensors on an AM43 BLE cover motor. The platform connects to the device over the ESP32's BLE peripheral. @@ -16,7 +15,7 @@ to the device over the ESP32's BLE peripheral. > as the protocol is completely different. If your device is controlled > with the SmartLife app, then it will not work. -{{< img src="am43.jpg" alt="Image" class="align-right" >}} + ```yaml # Example configuration entry @@ -37,7 +36,7 @@ sensor: ``` For more details on setting up this device, see the -{{< docref "/components/cover/am43" >}} component. +[Am43](/components/cover/am43/) component. ## Configuration variables @@ -54,11 +53,11 @@ For more details on setting up this device, see the sensor. Defaults to `60s`. > [!NOTE] -> It is recommended to also setup the {{< docref "/components/cover/am43" >}}. +> It is recommended to also setup the [Am43](/components/cover/am43/). ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/cover/am43" >}} +- [Sensor Component](/components/sensor/) +- [AM43 Cover](/components/cover/am43/) - [Automation](/automations) -- {{< apiref "sensor/am43/am43.h" "sensor/am43/am43.h" >}} +- diff --git a/content/components/sensor/apds9306.md b/src/content/docs/components/sensor/apds9306.mdx similarity index 77% rename from content/components/sensor/apds9306.md rename to src/content/docs/components/sensor/apds9306.mdx index 32ab13ca41..f7d149f860 100644 --- a/content/components/sensor/apds9306.md +++ b/src/content/docs/components/sensor/apds9306.mdx @@ -1,20 +1,27 @@ --- description: "Instructions for setting up APDS9306 sensors." title: "APDS9306 Sensor" -params: - seo: - description: Instructions for setting up APDS9306 sensors. - image: apds9306.png --- -{{< anchor "apds9306-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + ## Component The `apds9306` sensor component allows you to use APDS9306 ambient light sensors ([datasheet](https://docs.broadcom.com/doc/AV02-4755EN), [Broadcom](https://www.broadcom.com/products/optical-sensors/ambient-light-photo-sensors/apds-9306-065)) with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="apds9306.png" alt="Image" caption="Image by Broadcom" width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -29,7 +36,7 @@ sensor: ## Configuration variables -The `apds9306` sensor allows you to use your {{< docref "apds9306/" >}} to perform ambient light measurements. +The `apds9306` sensor allows you to use your [Apds9306](/components/sensor/apds9306/) to perform ambient light measurements. - **address** (*Optional*, int): The I²C address of the sensor. Should be `0x52` according to datasheet ("Contact factory for other addressing options"). - **gain** (*Optional*, int): The gain of the ambient light sensor. One of 1, 3, 6, 9, 18. Defaults to `1`. @@ -57,4 +64,4 @@ The `apds9306` sensor allows you to use your {{< docref "apds9306/" >}} to perfo ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "apds9306/apds9306.h" "apds9306/apds9306.h" >}} +- diff --git a/content/components/sensor/apds9960.md b/src/content/docs/components/sensor/apds9960.mdx similarity index 82% rename from content/components/sensor/apds9960.md rename to src/content/docs/components/sensor/apds9960.mdx index 1c9944fde2..4856c8cbd1 100644 --- a/content/components/sensor/apds9960.md +++ b/src/content/docs/components/sensor/apds9960.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up APDS9960 sensors." title: "APDS9960 Sensor" -params: - seo: - description: Instructions for setting up APDS9960 sensors. - image: apds9960.jpg --- -{{< anchor "apds9960-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import apds9960FullImg from './images/apds9960-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -17,7 +18,12 @@ The `apds9960` sensor platform allows you to use your APDS9960 RGB and gesture s The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="apds9960-full.jpg" alt="Image" caption="Image by [SparkFun](https://www.sparkfun.com)." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -57,7 +63,7 @@ Base Configuration: ## Sensor -The `apds9960` sensor allows you to use your {{< docref "apds9960/" >}} to perform different +The `apds9960` sensor allows you to use your [Apds9960](/components/sensor/apds9960/) to perform different measurements. Configuration variables: @@ -74,7 +80,7 @@ Configuration variables: ## Binary Sensor -The `apds9960` binary sensor allows you to use your {{< docref "apds9960/" >}} to perform different +The `apds9960` binary sensor allows you to use your [Apds9960](/components/sensor/apds9960/) to perform different measurements. Configuration variables: @@ -95,4 +101,4 @@ With some APDS9960 modules the VL pin needs to be supplied with 3.3V for gesture ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "apds9960/apds9960.h" "apds9960/apds9960.h" >}} +- diff --git a/content/components/sensor/aqi.md b/src/content/docs/components/sensor/aqi.mdx similarity index 77% rename from content/components/sensor/aqi.md rename to src/content/docs/components/sensor/aqi.mdx index 1a29af5da1..b7ad3e8bff 100644 --- a/content/components/sensor/aqi.md +++ b/src/content/docs/components/sensor/aqi.mdx @@ -1,16 +1,15 @@ --- description: "Instructions for setting up an Air Quality Index (AQI) sensor" title: "Air Quality Index (AQI)" -params: - seo: - description: Instructions for setting up an Air Quality Index (AQI) sensor --- +import APIRef from '@components/APIRef.astro'; + The `aqi` sensor platform allows you to compute an Air Quality Index from PM2.5 and PM10 particulate matter sensor readings. This sensor works with -any PM sensor source, such as {{< docref "/components/sensor/pmsx003" >}}, -{{< docref "/components/sensor/hm3301" >}}, {{< docref "/components/sensor/sds011" >}}, -or {{< docref "/components/sensor/sps30" >}}. +any PM sensor source, such as [Pmsx003](/components/sensor/pmsx003/), +[Hm3301](/components/sensor/hm3301/), [Sds011](/components/sensor/sds011/), +or [Sps30](/components/sensor/sps30/). > [!NOTE] > This platform replaces the deprecated `aqi` option previously available in the @@ -43,10 +42,10 @@ sensor: ## Configuration variables -- **pm_2_5** (**Required**, [ID](/guides/configuration-types#id) of a {{< docref "/components/sensor" >}}): +- **pm_2_5** (**Required**, [ID](/guides/configuration-types#id) of a [Sensor](/components/sensor/)): The sensor providing PM2.5 concentration readings in µg/m³. -- **pm_10_0** (**Required**, [ID](/guides/configuration-types#id) of a {{< docref "/components/sensor" >}}): +- **pm_10_0** (**Required**, [ID](/guides/configuration-types#id) of a [Sensor](/components/sensor/)): The sensor providing PM10 concentration readings in µg/m³. - **calculation_type** (**Required**, enum): The AQI calculation standard to use. @@ -83,8 +82,8 @@ sensor: ## See Also -- {{< docref "/components/sensor/pmsx003" >}} -- {{< docref "/components/sensor/hm3301" >}} -- {{< docref "/components/sensor/sds011" >}} -- {{< docref "/components/sensor/sps30" >}} -- {{< apiref "aqi/aqi_sensor.h" "aqi/aqi_sensor.h" >}} +- [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) +- [The Grove - Laser PM2.5 Sensor (HM3301)](/components/sensor/hm3301/) +- [SDS011 Particulate Matter Sensor](/components/sensor/sds011/) +- [SPS30 Particulate Matter Sensor](/components/sensor/sps30/) +- diff --git a/content/components/sensor/as3935.md b/src/content/docs/components/sensor/as3935.mdx similarity index 96% rename from content/components/sensor/as3935.md rename to src/content/docs/components/sensor/as3935.mdx index 13c97306a3..ecc53f70d3 100644 --- a/content/components/sensor/as3935.md +++ b/src/content/docs/components/sensor/as3935.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up AS3935 lightning sensor" title: "AMS AS3935 Franklin Lightning Sensor" -params: - seo: - description: Instructions for setting up AS3935 lightning sensor - image: as3935.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The **AS3935** sensor platform allows you to use your AS3935 sensor ([datasheet](https://www.sciosense.com/wp-content/uploads/2024/01/AS3935-Datasheet.pdf)) in order to get notified when a thunderstorm is getting close. @@ -37,7 +37,14 @@ level and set up the ESPHome component for the chosen communication method. | A0 | I²C address selection LSB | | A1 | I²C address selection MSB | -{{< img src="as3935.jpg" alt="Image" caption="AS3935 Lightning Sensor." width="50.0%" class="align-center" >}} +
    ## Over SPI @@ -186,8 +193,8 @@ Configuration variables: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "as3935/as3935.h" "as3935/as3935.h" >}} - [Data Sheet](https://www.embeddedadventures.com/datasheets/AS3935_Datasheet_EN_v2.pdf) - [Little Arduino Projects](https://github.com/tardate/LittleArduinoProjects/tree/master/playground/AS3935) - [AMS AS3935](https://ams.com/as3935) - [SparkFun Library](https://github.com/sparkfun/SparkFun_AS3935_Lightning_Detector_Arduino_Library) +- diff --git a/content/components/sensor/as5600.md b/src/content/docs/components/sensor/as5600.mdx similarity index 90% rename from content/components/sensor/as5600.md rename to src/content/docs/components/sensor/as5600.mdx index 2d7e76e658..967e4ddfe1 100644 --- a/content/components/sensor/as5600.md +++ b/src/content/docs/components/sensor/as5600.mdx @@ -1,13 +1,17 @@ --- description: "Instructions for setting up AS5600 magnetic position sensor / encoder." title: "AS5600 12-Bit Magnetic Position Sensor" -params: - seo: - description: Instructions for setting up AS5600 magnetic position sensor / encoder. - image: as5600.jpg --- -{{< anchor "as5600-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import as5600FullImg from './images/as5600-full.jpg'; +import as5600MagnetPositionImg from './images/as5600-magnet-position.png'; +import as5600UiImg from './images/as5600-ui.jpg'; +import as5600UiDerivedImg from './images/as5600-ui-derived.jpg'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -17,7 +21,12 @@ The `as5600` sensor platform you to use your AS5600 ([datasheet](https://ams.com using the [AS5600 Sensor Platform](#as5600-sensor). To use this hub, first setup the [I²C Bus](/components/i2c) and connect the sensor to the pins specified there. -{{< img src="as5600-full.jpg" alt="Image" caption="AS5600 12-Bit Magnetic Position Sensor." width="50.0%" class="align-center" >}} +
    ```yaml as5600: @@ -88,7 +97,7 @@ as5600: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this AS5600 Hub. - All other options for I²C devices described at [I²C Bus](/components/i2c). -{{< anchor "as5600_direction" >}} + ## Direction @@ -99,11 +108,11 @@ to encounter erratic behavior. If you would like the ESP controller to pull that pin high or low, you may configure the `dir_pin` and optionally, the `direction` option to have the ESP controller pull the pin high or low. -{{< anchor "as5600_position_range" >}} + ## Position / Range -{{< img src="as5600-magnet-position.png" alt="Image" width="80.0%" class="align-center" >}} + Position and range may be configured as one of the following: @@ -145,14 +154,14 @@ as5600: > The datasheet calls out that the minimum angle that can be configured (start and end position, or start and range) it 18 degrees. > Configuring anything less than that may yield un-expected results. -{{< anchor "as5600_i2c_addresses" >}} + ## I²C Addresses The AS5600 address is not configurable and must be `0x36`. However, if using an AS5600L, the default address should be `0x40` and it is configurable. -{{< anchor "as5600-sensor" >}} + ## Sensor @@ -160,7 +169,7 @@ The `as5600` sensor allows you to publish the angle/position measurement from yo First, setup an [AS5600 Hub](#as5600-component) for your AS5600 sensor and then use this sensor platform to create individual sensors that will report the position to Home Assistant. -{{< img src="as5600-ui.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml as5600: @@ -179,7 +188,7 @@ sensor: name: Status ``` -{{< anchor "as5600-sensor-config" >}} + ### Configuration variables @@ -213,7 +222,7 @@ sensor: - All other options from [Sensor](/components/sensor). - All other options from [Sensor](/components/sensor). -{{< anchor "as5600-out-of-range-mode" >}} + ### Out of Range Mode @@ -225,7 +234,7 @@ splits that range in half and reports `0` while in the half of the "out-of-range `4095` while in the half of the "out-of-range" range closest to the `end_position` / end of the `range`. Alternatively, you may set to `nan` mode where the sensor will publish `NAN` (i.e. "Unknown") when the position falls outside the narrowed range. -{{< anchor "as5600-magnet-status" >}} + ### Magnet Status @@ -236,14 +245,14 @@ The magnet status should report one of the following values: - `5` indicates that the magnet was detected, but is too strong. Measurements may appear to be stuck if the magnet is too strong. - `6` indicates that the magnet was detected, but is too weak. Measurements may still be possible in this state. -{{< anchor "as5600-converting-position" >}} + ### Converting Position You may desire the position to be converted from the native `0` thru `4095` to degrees, or perhaps a percentage of the allowable range. Here are some examples to make that happen: -{{< img src="as5600-ui-derived.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml as5600: @@ -279,4 +288,4 @@ sensor: - [I²C Bus](/components/i2c) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "as5600/as5600.h" "as5600/as5600.h" >}} +- diff --git a/content/components/sensor/as7341.md b/src/content/docs/components/sensor/as7341.mdx similarity index 87% rename from content/components/sensor/as7341.md rename to src/content/docs/components/sensor/as7341.mdx index 619b96e615..59e7f73503 100644 --- a/content/components/sensor/as7341.md +++ b/src/content/docs/components/sensor/as7341.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up AS7341 spectral color sensor." title: "AS7341 Spectral Color Sensor" -params: - seo: - description: Instructions for setting up AS7341 spectral color sensor. - image: as7341.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import as7341FullImg from './images/as7341-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `as7341` sensor platform allows you to use your AS7341 spectral color sensor ([datasheet](https://look.ams-osram.com/m/24266a3e584de4db/original/AS7341-DS000504.pdf), [Adafruit](https://www.adafruit.com/product/4698)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="as7341-full.jpg" alt="Image" caption="AS7341 Spectral Color Sensor" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -74,14 +80,13 @@ sensor: The integration time determines how long a channel measurement takes and depends on `ATIME` and `ASTEP`. The formula for the total integration time is: -{{< math >}} -\text{t} = \text{(ATIME + 1)} \times \text{(ASTEP + 1)} \times \text{2.78µS} - -{{< /math >}} +$$ +t = (\text{ATIME} + 1) \times (\text{ASTEP} + 1) \times 2.78\mu S +$$ ## See Also - [Sensor Filters](/components/sensor#sensor-filters) - [Adafruit_AS7341](https://github.com/adafruit/Adafruit_AS7341) - [SparkFun_AS7341X_Arduino_Library](https://github.com/sparkfun/SparkFun_AS7341X_Arduino_Library) -- {{< apiref "as7341/as7341.h" "as7341/as7341.h" >}} +- diff --git a/content/components/sensor/atm90e26.md b/src/content/docs/components/sensor/atm90e26.mdx similarity index 98% rename from content/components/sensor/atm90e26.md rename to src/content/docs/components/sensor/atm90e26.mdx index f15fe17b06..04fb01736d 100644 --- a/content/components/sensor/atm90e26.md +++ b/src/content/docs/components/sensor/atm90e26.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up ATM90E26 energy metering sensors" title: "ATM90E26 Power Sensor" -params: - seo: - description: Instructions for setting up ATM90E26 energy metering sensors - image: atm90e26.jpg --- +import APIRef from '@components/APIRef.astro'; + The `atm90e26` sensor platform allows you to use your ATM90E26 voltage/current and power sensors ([datasheet](https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-46002-SE-M90E26-Datasheet.pdf)) with @@ -170,4 +168,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "atm90e26/atm90e26.h" "atm90e26/atm90e26.h" >}} +- diff --git a/content/components/sensor/atm90e32.md b/src/content/docs/components/sensor/atm90e32.mdx similarity index 97% rename from content/components/sensor/atm90e32.md rename to src/content/docs/components/sensor/atm90e32.mdx index 172714b85d..ed87918204 100644 --- a/content/components/sensor/atm90e32.md +++ b/src/content/docs/components/sensor/atm90e32.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up ATM90E32 energy metering sensors" title: "ATM90E32 Power Sensor" -params: - seo: - description: Instructions for setting up ATM90E32 energy metering sensors - image: atm90e32.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import atm90e32Cs2chanFullImg from './images/atm90e32-cs-2chan-full.jpg'; +import atm90e32Cs6chanFullImg from './images/atm90e32-cs-6chan-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `atm90e32` sensor platform allows you to use your ATM90E32 voltage/current and power sensors ([datasheet](http://ww1.microchip.com/downloads/en/devicedoc/Atmel-46003-SE-M90E32AS-Datasheet.pdf)) with ESPHome. This sensor is commonly found in CircuitSetup 2 and 6 channel energy meters and the [Gelidus Research](https://www.gelidus.ca/) 2 channel power meter. @@ -20,11 +22,21 @@ household. Three current measurements are read via CT clamps. The [CircuitSetup Split Single Phase Energy Meter](https://circuitsetup.us/product/split-single-phase-real-time-whole-house-energy-meter-v1-2/) can read 2 current channels and 1 (expandable to 2) voltage channel. -{{< img src="atm90e32-cs-2chan-full.jpg" alt="Image" caption="CircuitSetup Split Single Phase Real Time Whole House Energy Meter." width="50.0%" class="align-center" >}} +
    The [CircuitSetup 6-Channel Energy Meter](https://circuitsetup.us/product/expandable-6-channel-esp32-energy-meter/) can read 6 current channels and 2 voltage channels at a time, this board has two ATM90E32 ICs and requires two sensors to be configured in ESPHome. -{{< img src="atm90e32-cs-6chan-full.jpg" alt="Image" caption="CircuitSetup Expandable 6 Channel ESP32 Energy Meter Main Board." width="50.0%" class="align-center" >}} +
    ## Configuration variables @@ -136,8 +148,8 @@ Configuration variables: - **Over current**: Detected when current ≥ 65.53 A. - **Over voltage / Voltage Sag**: Based on the configured `line_frequency`. For example: - - At `60Hz` (120V expected), sag = <78%, over = >122%. - - At `50Hz` (220V expected), sag = <78%, over = >122%. + - At `60Hz` (120V expected), sag = \<78%, over = \>122%. + - At `50Hz` (220V expected), sag = \<78%, over = \>122%. - **Phase Loss**: Indicates if the phase has dropped out. @@ -278,7 +290,7 @@ The new voltage gain value is saved to ESP flash memory and applied immediately. Copy the value into `gain_voltage` in your YAML config to persist it across reflashes (OTA updates do not erase flash memory). Here are common voltage calibrations for the **Split Single Energy Meter**: - For meter <= v1.3: + For meter ≤ v1.3: - 42080 - 9v AC Transformer - Jameco 112336 - 32428 - 12v AC Transformer - Jameco 167151 @@ -287,12 +299,12 @@ Here are common voltage calibrations for the **Split Single Energy Meter**: - 37106 - 9v AC Transformer - Jameco 157041 - 38302 - 9v AC Transformer - Jameco 112336 - 29462 - 12v AC Transformer - Jameco 167151 - For Meters >= v1.4 rev.3 + For Meters ≥ v1.4 rev.3 - 3920 - 9v AC Transformer - Jameco 157041 Here are common voltage calibrations for the **Expandable 6 Channel Energy Meter**: - For meter <= v1.2: + For meter ≤ v1.2: - 42080 - 9v AC Transformer - Jameco 112336 - 32428 - 12v AC Transformer - Jameco 167151 @@ -1048,4 +1060,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "atm90e32/atm90e32.h" "atm90e32/atm90e32.h" >}} +- diff --git a/content/components/sensor/b_parasite.md b/src/content/docs/components/sensor/b_parasite.mdx similarity index 85% rename from content/components/sensor/b_parasite.md rename to src/content/docs/components/sensor/b_parasite.mdx index c4cd369944..4fb0c6ed3e 100644 --- a/content/components/sensor/b_parasite.md +++ b/src/content/docs/components/sensor/b_parasite.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up the b-parasite soil moisture sensor in ESPHome." title: "b-parasite" -params: - seo: - description: Instructions for setting up the b-parasite soil moisture sensor in ESPHome. - image: b_parasite.jpg --- +import { Image } from 'astro:assets'; + [b-parasite](https://github.com/rbaron/b-parasite) is an open source soil moisture and ambient temperature/humidity/light sensor. The `b_parasite` sensor platform tracks b-parasite's Bluetooth Low Energy (BLE) advertisement packets. These packets contain soil moisture, air temperature/humidity and battery voltage data. Some b-parasite versions have light sensors, in which case the ambient illuminance is also present in the BLE advertisement data. -{{< img src="b_parasite.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration. @@ -60,5 +58,5 @@ sensor: ## See Also - [b-parasite on GitHub](https://github.com/rbaron/b-parasite) -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "absolute_humidity/" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Absolute Humidity](/components/sensor/absolute_humidity/) diff --git a/content/components/sensor/bh1750.md b/src/content/docs/components/sensor/bh1750.mdx similarity index 64% rename from content/components/sensor/bh1750.md rename to src/content/docs/components/sensor/bh1750.mdx index 662f1c555c..220b8e8d2d 100644 --- a/content/components/sensor/bh1750.md +++ b/src/content/docs/components/sensor/bh1750.mdx @@ -1,22 +1,29 @@ --- description: "Instructions for setting up BH1750 ambient light sensors in ESPHome." title: "BH1750 Ambient Light Sensor" -params: - seo: - description: Instructions for setting up BH1750 ambient light sensors in ESPHome. - image: bh1750.jpg --- -{{< anchor "bh1750" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bh1750FullImg from './images/bh1750-full.jpg'; +import bh1750UiImg from './images/bh1750-ui.png'; +import APIRef from '@components/APIRef.astro'; + + The `bh1750` sensor platform allows you to use your BH1750 ([datasheet](http://www.mouser.com/ds/2/348/bh1750fvi-e-186247.pdf)) ambient light sensor with ESPHome. The [I²C bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="bh1750-full.jpg" alt="Image" caption="BH1750 Ambient Light Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="bh1750-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -41,8 +48,8 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "opt3001/" >}} -- {{< docref "tsl2561/" >}} -- {{< docref "tsl2591/" >}} -- {{< apiref "bh1750/bh1750.h" "bh1750/bh1750.h" >}} +- [OPT3001 Ambient Light Sensor](/components/sensor/opt3001/) +- [TSL2561 Ambient Light Sensor](/components/sensor/tsl2561/) +- [TSL2591 Ambient Light Sensor](/components/sensor/tsl2591/) - [BH1750 Library](https://github.com/claws/BH1750) by [@claws](https://github.com/claws) +- diff --git a/content/components/sensor/bh1900nux.md b/src/content/docs/components/sensor/bh1900nux.mdx similarity index 83% rename from content/components/sensor/bh1900nux.md rename to src/content/docs/components/sensor/bh1900nux.mdx index b3b07b80d5..6c5086b6cc 100644 --- a/content/components/sensor/bh1900nux.md +++ b/src/content/docs/components/sensor/bh1900nux.mdx @@ -1,18 +1,18 @@ --- description: "Instructions for setting up the Rohm Semiconductor BH1900NUX temperature sensor in ESPHome." title: "BH1900NUX Temperature Sensor" -params: - seo: - description: Instructions for setting up the Rohm Semiconductor BH1900NUX temperature sensor in ESPHome - image: bh1900nux-evk-001.png --- -{{< anchor "bh1900nux" >}} + +import { Image } from 'astro:assets'; +import bh1900nuxEvk001Img from './images/bh1900nux-evk-001.png'; + + The `bh1900nux` sensor platform allows you to use the **BH1900NUX** ([datasheet](https://fscdn.rohm.com/en/products/databook/datasheet/ic/sensor/temperature/bh1900nux-e.pdf)) **temperature sensor** from Rohm Semiconductor with ESPHome. The [I²C bus](/components/i2c) must be set up in your configuration for this sensor to work. -{{< img src="bh1900nux-evk-001.png" alt="BH1900NUX-EVK-001 Evaluation Board" class="align-center" >}} +BH1900NUX-EVK-001 Evaluation Board ```yaml # Example configuration entry @@ -32,7 +32,7 @@ sensor: - All other options from [Sensor](/components/sensor#config-sensor). > [!NOTE] -> The following features are **not supported**: `ALERT` pin functionality and `TLOW`/`THIGH` configuration (thermostat mode). +> The following features are **not supported**: `ALERT` pin functionality and `TLOW`/`THIGH` configuration (thermostat mode). ## Configurable I²C Addresses diff --git a/content/components/sensor/binary_sensor_map.md b/src/content/docs/components/sensor/binary_sensor_map.mdx similarity index 85% rename from content/components/sensor/binary_sensor_map.md rename to src/content/docs/components/sensor/binary_sensor_map.mdx index 55e4b6e474..8ae2311307 100644 --- a/content/components/sensor/binary_sensor_map.md +++ b/src/content/docs/components/sensor/binary_sensor_map.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up a Binary Sensor Map" title: "Binary Sensor Map" -params: - seo: - description: Instructions for setting up a Binary Sensor Map - image: binary_sensor_map.jpg --- +import APIRef from '@components/APIRef.astro'; -The `binary_sensor_map` sensor platform allows you to map multiple {{< docref "/components/binary_sensor/index" "binary sensor" >}} + +The `binary_sensor_map` sensor platform allows you to map multiple [binary sensor](/components/binary_sensor/) to an individual value. Depending on the state of each binary sensor, its associated configured parameters, and this sensor's mapping type, the `binary_sensor_map` publishes a single numerical value. @@ -21,7 +19,7 @@ When using the `BAYESIAN` type, add your binary sensors as `observations` to the If you use the `GROUP` or `SUM` type, add your binary sensors as `channels`. The maximum amount of observations/channels supported is 64. -- `BAYESIAN` This type replicates Home Assistant's [Bayesian sensor](https://www.home-assistant.io/integrations/bayesian/). Based on the observation states, this sensor returns the Bayesian probability of a particular event occurring. The configured `prior:` probability is the likelihood that the Bayesian event is true, ignoring all external influences. Every observation has its own `prob_given_true` and `prob_given_false` parameters. The `prob_given_true:` value is the probability that the observation's binary sensor is `ON` when the Bayesian event is `true`. The `prob_given_false:` value is the probability that the observation's binary sensor is `ON` when the Bayesian event is `false`. Use an {{< docref "/components/binary_sensor/analog_threshold" >}} to convert this sensor's probability to a binary `ON` or `OFF` by setting an appropriate threshold. +- `BAYESIAN` This type replicates Home Assistant's [Bayesian sensor](https://www.home-assistant.io/integrations/bayesian/). Based on the observation states, this sensor returns the Bayesian probability of a particular event occurring. The configured `prior:` probability is the likelihood that the Bayesian event is true, ignoring all external influences. Every observation has its own `prob_given_true` and `prob_given_false` parameters. The `prob_given_true:` value is the probability that the observation's binary sensor is `ON` when the Bayesian event is `true`. The `prob_given_false:` value is the probability that the observation's binary sensor is `ON` when the Bayesian event is `false`. Use an [Analog Threshold](/components/binary_sensor/analog_threshold/) to convert this sensor's probability to a binary `ON` or `OFF` by setting an appropriate threshold. ```yaml # Example configuration entry @@ -125,14 +123,14 @@ binary_sensor: - **type** (**Required**, string): The sensor type. Should be one of: `BAYESIAN`, `GROUP`, or `SUM`. - **channels** (**Required for GROUP or SUM types**): A list of channels that are mapped to certain values. - - **binary_sensor** (**Required**): The id of the {{< docref "/components/binary_sensor/index" "binary sensor" >}} + - **binary_sensor** (**Required**): The id of the [binary sensor](/components/binary_sensor/) to add as a channel for this sensor. - **value** (**Required**): The value this channel should report when its binary sensor is active. - **prior** (**Required for BAYESIAN type**, float between 0 and 1): The prior probability of the event. - **observations** (**Required for BAYESIAN type**): A list of observations that influence the Bayesian probability of the event. - - **binary_sensor** (**Required**): The id of the {{< docref "/components/binary_sensor/index" "binary sensor" >}} + - **binary_sensor** (**Required**): The id of the [binary sensor](/components/binary_sensor/) to add as an observation. - **prob_given_true** (**Required**, float between 0 and 1): Assuming the event is true, the probability this observation is on. @@ -142,8 +140,8 @@ binary_sensor: ## See Also -- {{< docref "/components/binary_sensor/mpr121" >}} -- {{< docref "/components/binary_sensor/analog_threshold" >}} +- [MPR121 Capacitive Touch Sensor](/components/binary_sensor/mpr121/) +- [Analog Threshold Binary Sensor](/components/binary_sensor/analog_threshold/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "binary_sensor_map/binary_sensor_map.h" "binary_sensor_map/binary_sensor_map.h" >}} - [Bayesian sensor in Home Assistant](https://www.home-assistant.io/integrations/bayesian/) +- diff --git a/content/components/sensor/bl0906.md b/src/content/docs/components/sensor/bl0906.mdx similarity index 89% rename from content/components/sensor/bl0906.md rename to src/content/docs/components/sensor/bl0906.mdx index 5fdcb06309..7337a7abd2 100644 --- a/content/components/sensor/bl0906.md +++ b/src/content/docs/components/sensor/bl0906.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up BL0906 energy monitor for the Athom Energy Meter" title: "Belling BL0906 Energy Monitor" -params: - seo: - description: Instructions for setting up BL0906 energy monitor for the Athom Energy Meter - image: bl0906.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import athomEm2Img from './images/athom-em2.png'; +import athomEm6Img from './images/athom-em6.png'; +import APIRef from '@components/APIRef.astro'; + The `bl0906` sensor platform allows you to use your BL0906 voltage/current/power and energy sensors with ESPHome. This sensor is commonly found in [Athom EM2 Energy Meter](https://www.athom.tech/blank-1/2-ch-energy-meter-made-for-esphome) and [Athom EM6 Energy Meter](https://www.athom.tech/blank-1/6-ch-energy-meter-made-for-esphome) @@ -19,11 +21,21 @@ Additionally, you need to set the baud rate to 19200. The [Athom EM2 Energy Meter](https://www.athom.tech/blank-1/2-ch-energy-meter-made-for-esphome) can read 1 voltage channel and 2 Current channels. -{{< img src="athom-em2.png" alt="Image" caption="Athom Single Phase 2 channels Real Time Whole House Energy Meter." width="20.0%" class="align-center" >}} +
    The [Athom EM6 Energy Meter](https://www.athom.tech/blank-1/6-ch-energy-meter-made-for-esphome) can read 1 voltage channel and 6 Current channels. -{{< img src="athom-em6.png" alt="Image" caption="Athom Single Phase 6 channels Real Time Whole House Energy Meter." width="30.0%" class="align-center" >}} +
    ## Configuration variables @@ -211,7 +223,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "cse7761/" >}} -- {{< docref "bl0939/" >}} -- {{< docref "bl0940/" >}} -- {{< apiref "bl0906/bl0906.h" "bl0906/bl0906.h" >}} +- [CSE7761 Power Sensor](/components/sensor/cse7761/) +- [BL0939 Power Sensor](/components/sensor/bl0939/) +- [Belling BL0940 Energy Monitor](/components/sensor/bl0940/) +- diff --git a/content/components/sensor/bl0939.md b/src/content/docs/components/sensor/bl0939.mdx similarity index 92% rename from content/components/sensor/bl0939.md rename to src/content/docs/components/sensor/bl0939.mdx index 619f43a63b..25df3f24cb 100644 --- a/content/components/sensor/bl0939.md +++ b/src/content/docs/components/sensor/bl0939.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up BL0939 power sensors for the Sonoff Dual R3 v2" title: "BL0939 Power Sensor" -params: - seo: - description: Instructions for setting up BL0939 power sensors for the Sonoff Dual R3 v2 - image: bl0939.png --- +import APIRef from '@components/APIRef.astro'; + The `bl0939` sensor platform allows you to use your BL0939 voltage/current/power and energy sensors with ESPHome. This sensor is commonly found in Sonoff Dual R3 v2. @@ -77,6 +75,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "cse7761/" >}} -- {{< docref "bl0940/" >}} -- {{< apiref "bl0939/bl0939.h" "bl0939/bl0939.h" >}} +- [CSE7761 Power Sensor](/components/sensor/cse7761/) +- [Belling BL0940 Energy Monitor](/components/sensor/bl0940/) +- diff --git a/content/components/sensor/bl0940.md b/src/content/docs/components/sensor/bl0940.mdx similarity index 98% rename from content/components/sensor/bl0940.md rename to src/content/docs/components/sensor/bl0940.mdx index f8f8916050..fa28dff571 100644 --- a/content/components/sensor/bl0940.md +++ b/src/content/docs/components/sensor/bl0940.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up BL0940 power monitors." title: "Belling BL0940 Energy Monitor" -params: - seo: - description: Instructions for setting up BL0940 power monitors. - image: bl0940.png --- +import APIRef from '@components/APIRef.astro'; + The `bl0940` component allows you to use BL0940 energy monitors sensors with ESPHome. These are used in some Tuya-devices (e.g. the power metering BW-SHP10) and the Vaiotech Rowi2 Smart Plug. @@ -187,4 +185,4 @@ button: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "bl0940/bl0940.h" "bl0940/bl0940.h" >}} +- diff --git a/content/components/sensor/bl0942.md b/src/content/docs/components/sensor/bl0942.mdx similarity index 97% rename from content/components/sensor/bl0942.md rename to src/content/docs/components/sensor/bl0942.mdx index 085ec5898c..a161340c6d 100644 --- a/content/components/sensor/bl0942.md +++ b/src/content/docs/components/sensor/bl0942.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up BL0942 power monitors." title: "Belling BL0942 Energy Monitor" -params: - seo: - description: Instructions for setting up BL0942 power monitors. - image: bl0942.png --- +import APIRef from '@components/APIRef.astro'; + The `bl0942` sensor platform allows you to use BL0942 energy monitors sensors with ESPHome. These are used in some Tuya-devices (e.g. Aubess Tuya WiFi Mini Smart Switch With Energy Monitor) @@ -59,7 +57,7 @@ sensor: - **power_reference** (*Optional*, float): The calibration parameter for power readings. Defaults to `623.3937992` unless either `current_reference` or `voltage_reference` are explicitly set, in which case it is calculated. See [Calibration](#bl0942-calibration) for more details. - **energy_reference** (*Optional*, float): The calibration parameter for cumulative energy readings. Defaults to `5350.631898` unless any of `current_reference`, `voltage_reference` or `power_reference` are explicitly set, in which case it is calculated. See [Calibration](#bl0942-calibration) for more details. -{{< anchor "bl0942-calibration" >}} + ## Calibration @@ -130,4 +128,4 @@ used as a sanity check for the values found from the firmware. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "bl0942/bl0942.h" "bl0942/bl0942.h" >}} +- diff --git a/content/components/sensor/ble_client.md b/src/content/docs/components/sensor/ble_client.mdx similarity index 85% rename from content/components/sensor/ble_client.md rename to src/content/docs/components/sensor/ble_client.mdx index af4fddc7fc..6ad1ebd0c0 100644 --- a/content/components/sensor/ble_client.md +++ b/src/content/docs/components/sensor/ble_client.mdx @@ -1,24 +1,22 @@ --- description: "Fetch numeric values from BLE devices." title: "BLE Client Sensor" -params: - seo: - description: Fetch numeric values from BLE devices. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `ble_client` component is a sensor platform that can query BLE devices for RSSI or specific values of service characteristics. -For text/string values, see {{< docref "/components/text_sensor/ble_client" >}}. +For text/string values, see [Ble Client](/components/text_sensor/ble_client/). -For more information on BLE services and characteristics, see {{< docref "/components/ble_client" >}}. +For more information on BLE services and characteristics, see [Ble Client](/components/ble_client/). > [!WARNING] > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -74,7 +72,7 @@ Automations: - **on_notify** (*Optional*, [Automation](/automations)): An automation to perform when a notify message is received from the device. See [`on_notify`](#ble_sensor-on_notify). -{{< anchor "ble-sensor-lambda" >}} + ## Raw Data Parsing Lambda @@ -99,7 +97,7 @@ sensor: ## BLE Sensor Automation -{{< anchor "ble_sensor-on_notify" >}} + ### `on_notify` @@ -123,7 +121,7 @@ Some common ones: ## See Also -- {{< docref "/components/ble_client" >}} -- {{< docref "/components/text_sensor/ble_client" >}} +- [BLE Client](/components/ble_client/) +- [BLE Client Text Sensor](/components/text_sensor/ble_client/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ble_sensor/ble_sensor.h" "ble_sensor/ble_sensor.h" >}} +- diff --git a/content/components/sensor/ble_rssi.md b/src/content/docs/components/sensor/ble_rssi.mdx similarity index 88% rename from content/components/sensor/ble_rssi.md rename to src/content/docs/components/sensor/ble_rssi.mdx index 84eab26fff..6d26a16e2c 100644 --- a/content/components/sensor/ble_rssi.md +++ b/src/content/docs/components/sensor/ble_rssi.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up RSSI sensors for the ESP32 BLE." title: "ESP32 Bluetooth Low Energy RSSI Sensor" -params: - seo: - description: Instructions for setting up RSSI sensors for the ESP32 BLE. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `ble_rssi` sensor platform lets you track the RSSI value or signal strength of a BLE device. See [the binary sensor setup](/components/binary_sensor/ble_presence#esp32_ble_tracker-setting_up_devices) for @@ -15,7 +13,7 @@ instructions for setting up this platform. > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -74,6 +72,6 @@ sensor: ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} -- {{< apiref "ble_rssi/ble_rssi_sensor.h" "ble_rssi/ble_rssi_sensor.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) +- diff --git a/content/components/sensor/bme280.md b/src/content/docs/components/sensor/bme280.mdx similarity index 84% rename from content/components/sensor/bme280.md rename to src/content/docs/components/sensor/bme280.mdx index c0db892281..75cf481b8e 100644 --- a/content/components/sensor/bme280.md +++ b/src/content/docs/components/sensor/bme280.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up BME280 temperature, pressure and humidity sensors" title: "BME280 Temperature+Pressure+Humidity Sensor" -params: - seo: - description: Instructions for setting up BME280 temperature, pressure and humidity sensors - image: bme280.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bme280FullImg from './images/bme280-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `bme280` sensor platform allows you to use your BME280 ([datasheet](https://cdn-shop.adafruit.com/datasheets/BST-BME280_DS001-10.pdf), [Adafruit](https://www.adafruit.com/product/2652)) temperature, pressure and humidity sensors with ESPHome. The sensor @@ -16,7 +17,12 @@ required to be set up in your configuration for this sensor to work. **Note:** In [I²C](/components/i2c) mode pulling CSB to 3V is recommended, in order to avoid `[E][sensor.bme280:155]: Communication with BME280 failed!` error. See the *Connection diagram* chapter in datasheet above. -{{< img src="bme280-full.jpg" alt="Image" caption="BME280 Temperature, Pressure & Humidity Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry I2C @@ -79,7 +85,7 @@ SPI Configuration variables: - **cs_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The CS pin of the BME280 sensor. -{{< anchor "bme280-oversampling" >}} + ## Oversampling Options @@ -96,9 +102,9 @@ configure this amount. Possible oversampling values: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "bme680/" >}} -- {{< docref "bmp085/" >}} -- {{< apiref "bme280/bme280.h" "bme280/bme280.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) - [Adafruit BME280 Library](https://github.com/adafruit/Adafruit_BME280_Library) by [Adafruit](https://www.adafruit.com/) - [SparkFun BME280 Library](https://github.com/sparkfun/SparkFun_BME280_Arduino_Library) by [SparkFun](https://www.sparkfun.com/) +- diff --git a/content/components/sensor/bme680.md b/src/content/docs/components/sensor/bme680.mdx similarity index 86% rename from content/components/sensor/bme680.md rename to src/content/docs/components/sensor/bme680.mdx index 44a509317b..ed62759942 100644 --- a/content/components/sensor/bme680.md +++ b/src/content/docs/components/sensor/bme680.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up BME680 temperature, humidity, pressure and gas sensors." title: "BME680 Temperature+Pressure+Humidity+Gas Sensor" -params: - seo: - description: Instructions for setting up BME680 temperature, humidity, pressure and gas sensors. - image: bme680.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bme680FullImg from './images/bme680-full.jpg'; +import bme680UiImg from './images/bme680-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `bme680` sensor platform allows you to use your BME680 ([datasheet](https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf), [Adafruit](https://www.adafruit.com/product/3660)) temperature, pressure and humidity sensors with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="bme680-full.jpg" alt="Image" caption="BME680 Temperature, Pressure & Humidity Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -76,9 +83,9 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. -{{< img src="bme680-ui.png" alt="Image" width="80.0%" class="align-center" >}} + -{{< anchor "bme680-oversampling" >}} + ## Oversampling Options @@ -92,7 +99,7 @@ configure this amount. Possible oversampling values: - `8x` - `16x` (default) -{{< anchor "bme680-advanced-configuration" >}} + ## Advanced Configuration @@ -157,9 +164,9 @@ text_sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "bme280/" >}} -- {{< docref "bmp085/" >}} -- {{< apiref "bme680/bme680.h" "bme680/bme680.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) - [BME680 Sensor API](https://github.com/BoschSensortec/BME680_driver) by [Bosch Sensortec](https://www.bosch-sensortec.com/) - [Custom BME680 component with indoor air quality sensor](https://github.com/trvrnrth/esphome-bsec-bme680) +- diff --git a/content/components/sensor/bme680_bsec.md b/src/content/docs/components/sensor/bme680_bsec.mdx similarity index 94% rename from content/components/sensor/bme680_bsec.md rename to src/content/docs/components/sensor/bme680_bsec.mdx index b77e911517..dc2dcf9c28 100644 --- a/content/components/sensor/bme680_bsec.md +++ b/src/content/docs/components/sensor/bme680_bsec.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up BME680 temperature, humidity, pressure, and gas sensors via BSEC." title: "BME680 Temperature+Pressure+Humidity+Gas Sensor via BSEC" -params: - seo: - description: Instructions for setting up BME680 temperature, humidity, pressure, and gas sensors via BSEC. - image: bme680.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bme680FullImg from './images/bme680-full.jpg'; +import bme680BsecUiImg from './images/bme680-bsec-ui.png'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `bme680_bsec` sensor platform allows you to use your BME680 @@ -17,16 +19,20 @@ gas resistance sensor's response to specific Volatile Organic Compounds (VOC). T for CO₂ and Breath Volatile Organic Compounds (b-VOC) using a correlation between VOC and CO₂ in a human's exhaled breath. > [!NOTE] -> > - The BSEC library is only available for use after accepting its software license agreement. By enabling this component, > you are explicitly agreeing to the terms of the [BSEC license agreement](https://www.bosch-sensortec.com/media/boschsensortec/downloads/software/bme688_development_software/2024_12/20241219_clickthrough_license_terms_bsec_bme680_bme688_bme690.pdf). You must not distribute any compiled firmware > binaries that include this component. > -> - We recommend using the newer {{< docref "bme68x_bsec2" "bme68x_bsec2" >}} component whenever possible. +> - We recommend using the newer [bme68x_bsec2](/components/sensor/bme68x_bsec2/) component whenever possible. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="bme680-full.jpg" alt="Image" caption="BME680 Temperature, Pressure, Humidity & Gas Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Minimal example configuration with common sensors @@ -162,7 +168,7 @@ Configuration variables: - All options from [TextSensor](/components/text_sensor#config-text_sensor). -{{< img src="bme680-bsec-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ## Advanced configuration @@ -375,7 +381,7 @@ The selected b-VOC gasses are as follows: | [Acetone](https://en.wikipedia.org/wiki/Acetone) | 50 ppm | | [Carbon Monoxide](https://en.wikipedia.org/wiki/Carbon_monoxide) | 15 ppm | -{{< anchor "bsec-calibration" >}} + ## IAQ Accuracy and Calibration @@ -396,9 +402,9 @@ so that the process does not have to start from zero on device restart. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "bme680/" >}} -- {{< apiref "bme680_bsec/bme680_bsec.h" "bme680_bsec/bme680_bsec.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) - [BME680 Datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf) - [BSEC Arduino Library](https://github.com/BoschSensortec/BSEC-Arduino-library) by [Bosch Sensortec](https://www.bosch-sensortec.com/) - [Bosch Sensortec Community](https://community.bosch-sensortec.com/) +- diff --git a/content/components/sensor/bme68x_bsec2.md b/src/content/docs/components/sensor/bme68x_bsec2.mdx similarity index 93% rename from content/components/sensor/bme68x_bsec2.md rename to src/content/docs/components/sensor/bme68x_bsec2.mdx index a619429d3f..27ccfb8118 100644 --- a/content/components/sensor/bme68x_bsec2.md +++ b/src/content/docs/components/sensor/bme68x_bsec2.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up BME68x temperature, humidity, pressure, and gas sensors via BSEC2." title: "BME68x Temperature, Humidity, Pressure & Gas Sensor via BSEC2" -params: - seo: - description: Instructions for setting up BME68x temperature, humidity, pressure, and gas sensors via BSEC2. - image: bme680.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bme680FullImg from './images/bme680-full.jpg'; +import bme680BsecUiImg from './images/bme680-bsec-ui.png'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `bme68x_bsec2_i2c` sensor platform allows you to use your @@ -25,9 +27,19 @@ The [I²C](/components/i2c) is required to be set up in your configuration for t > component in your configuration, you are explicitly agreeing to the terms of the [BSEC license agreement](https://www.bosch-sensortec.com/media/boschsensortec/downloads/software/bme688_development_software/2024_12/20241219_clickthrough_license_terms_bsec_bme680_bme688_bme690.pdf). Note > that the license forbids distribution of any compiled firmware binaries that include this component. -{{< img src="bme680-full.jpg" alt="Image" caption="BME680 Temperature, Pressure, Humidity & Gas Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="bme680-bsec-ui.png" alt="Image" caption="Example UI" width="80.0%" class="align-center" >}} +
    ```yaml # Minimal example configuration with common sensors @@ -216,7 +228,7 @@ The selected b-VOC gasses are as follows: | [Acetone](https://en.wikipedia.org/wiki/Acetone) | 50 ppm | | [Carbon Monoxide](https://en.wikipedia.org/wiki/Carbon_monoxide) | 15 ppm | -{{< anchor "bsec2-calibration" >}} + ## IAQ Accuracy and Calibration @@ -237,10 +249,10 @@ saved to flash so that the process does not have to start from scratch on device ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "bme680/" >}} -- {{< apiref "bme68x_bsec2_i2c/bme68x_bsec2_i2c.h" "bme68x_bsec2_i2c/bme68x_bsec2_i2c.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) - [BME680 datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf) - [BME688 datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme688-ds000.pdf) - [Bosch BSEC2 Library](https://github.com/boschsensortec/Bosch-BSEC2-Library) by [Bosch Sensortec](https://www.bosch-sensortec.com/) - [Bosch Sensortec Community](https://community.bosch-sensortec.com/) +- diff --git a/content/components/sensor/bmi160.md b/src/content/docs/components/sensor/bmi160.mdx similarity index 81% rename from content/components/sensor/bmi160.md rename to src/content/docs/components/sensor/bmi160.mdx index 6cca982c14..6ebc9b3d5e 100644 --- a/content/components/sensor/bmi160.md +++ b/src/content/docs/components/sensor/bmi160.mdx @@ -1,25 +1,32 @@ --- description: "Instructions for setting up BMI160 Accelerometer and Gyroscope sensors." title: "BMI160 Accelerometer/Gyroscope Sensor" -params: - seo: - description: Instructions for setting up BMI160 Accelerometer and Gyroscope sensors. - image: bmi160.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bmi160FullImg from './images/bmi160-full.jpg'; +import bmi160UiImg from './images/bmi160-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `bmi160` sensor platform allows you to use your BMI160 Accelerometer/Gyroscope ([datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmi160-ds000.pdf), [SparkFun](https://www.sparkfun.com/products/18794)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. This component only does some basic filtering and no calibration. Due to the complexity of this sensor and the amount -of possible configuration options, you should probably create an {{< docref "/components/external_components" "external component" >}} +of possible configuration options, you should probably create an [external component](/components/external_components/) by copying and modifying the existing code if you want a specific new feature. Supporting all possible use cases would be quite hard. -{{< img src="bmi160-full.jpg" alt="Image" caption="BMI160 Accelerometer/Gyroscope Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="bmi160-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -76,7 +83,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< docref "ultrasonic/" >}} -- {{< apiref "bmi160/bmi160.h" "bmi160/bmi160.h" >}} +- [Template Sensor](/components/sensor/template/) +- [Ultrasonic Distance Sensor](/components/sensor/ultrasonic/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/bmp085.md b/src/content/docs/components/sensor/bmp085.mdx similarity index 70% rename from content/components/sensor/bmp085.md rename to src/content/docs/components/sensor/bmp085.mdx index 89f17f5299..23628ba8b7 100644 --- a/content/components/sensor/bmp085.md +++ b/src/content/docs/components/sensor/bmp085.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up BMP085 temperature and temperature sensors" title: "BMP085 Temperature+Pressure Sensor" -params: - seo: - description: Instructions for setting up BMP085 temperature and temperature sensors - image: bmp180.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bmp180FullImg from './images/bmp180-full.jpg'; +import temperaturePressureImg from './images/temperature-pressure.png'; +import APIRef from '@components/APIRef.astro'; + The BMP085 sensor platform allows you to use your BMP085 ([datasheet](https://www.sparkfun.com/datasheets/Components/General/BST-BMP085-DS000-05.pdf), [Adafruit](https://www.adafruit.com/product/391)) and BMP180 @@ -15,9 +17,14 @@ The BMP085 sensor platform allows you to use your BMP085 pressure sensors with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="bmp180-full.jpg" alt="Image" caption="BMP180 Temperature & Pressure Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-pressure.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -49,7 +56,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bme280/" >}} -- {{< docref "bme680/" >}} -- {{< apiref "bmp085/bmp085.h" "bmp085/bmp085.h" >}} +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/bmp280.md b/src/content/docs/components/sensor/bmp280.mdx similarity index 77% rename from content/components/sensor/bmp280.md rename to src/content/docs/components/sensor/bmp280.mdx index aa4cf1cb6c..146d7b1f9b 100644 --- a/content/components/sensor/bmp280.md +++ b/src/content/docs/components/sensor/bmp280.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up BMP280 temperature and pressure sensors with ESPHome" title: "BMP280 Temperature+Pressure Sensor" -params: - seo: - description: Instructions for setting up BMP280 temperature and pressure sensors with ESPHome - image: bmp280.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import bmp280FullImg from './images/bmp280-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `bmp280` sensor platform allows you to use your BMP280 ([datasheet](https://cdn-shop.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf), [Adafruit](https://www.adafruit.com/product/2651)) temperature and pressure sensors with ESPHome. The [I²C](/components/i2c) or [SPI](/components/spi) is required to be set up in your configuration for this sensor to work. -{{< img src="bmp280-full.jpg" alt="Image" caption="BMP280 Temperature and Pressure Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry I2C @@ -70,9 +76,14 @@ SPI Configuration variables: - **cs_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The CS pin of the BMP280 sensor. -{{< img src="bmp280-full.jpg" alt="Image" caption="Pins on the BMP280. Only VCC, GND, SCL, and SDA need to be connected." width="60.0%" class="align-center" >}} +
    -{{< anchor "bmp280-oversampling" >}} + ## Oversampling Options @@ -89,8 +100,8 @@ configure this amount. Possible oversampling values: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bme280/" >}} -- {{< docref "bme680/" >}} -- {{< docref "bmp085/" >}} -- {{< apiref "bmp280/bmp280.h" "bmp280/bmp280.h" >}} +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) - [BMP280 Library](https://github.com/adafruit/Adafruit_BMP280_Library) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/sensor/bmp3xx.md b/src/content/docs/components/sensor/bmp3xx.mdx similarity index 85% rename from content/components/sensor/bmp3xx.md rename to src/content/docs/components/sensor/bmp3xx.mdx index 53dfda613e..c90392d8b5 100644 --- a/content/components/sensor/bmp3xx.md +++ b/src/content/docs/components/sensor/bmp3xx.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up BMP388 or BMP390 temperature and pressure sensors with ESPHome" title: "BMP388 / BMP390 Temperature+Pressure Sensor" -params: - seo: - description: Instructions for setting up BMP388 or BMP390 temperature and pressure sensors with ESPHome - image: bmp388.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `bmp3xx` sensor platform allows you to use your BMP388 or BMP390 ([datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp390-ds002.pdf), [BMP390 product page](https://www.bosch-sensortec.com/products/environmental-sensors/pressure-sensors/bmp390/)) temperature and pressure sensors with ESPHome. Either [I²C](/components/i2c) bus or [SPI](/components/spi) bus is required to be set up in your configuration for this sensor to work. -{{< img src="bmp388.jpg" alt="Image" caption="BMP388/BMP390 Temperature and Pressure Sensor." width="50.0%" class="align-center" >}} +
    ## Over I²C @@ -98,7 +105,7 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. -{{< anchor "bmp3xx-oversampling" >}} + ## Oversampling Options @@ -115,10 +122,10 @@ configure this amount. Possible oversampling values: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bme280/" >}} -- {{< docref "bmp280/" >}} -- {{< docref "bme680/" >}} -- {{< docref "bmp085/" >}} -- {{< apiref "bmp3xx_base/bmp3xx_base.h" "bmp3xx_base/bmp3xx_base.h" >}} +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BMP280 Temperature+Pressure Sensor](/components/sensor/bmp280/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) - [BMP3 sensor API](https://github.com/BoschSensortec/BMP3-Sensor-API) - [BMP388/BMP390 Library](https://github.com/MartinL1/BMP388_DEV) by Martin Lindupp +- diff --git a/content/components/sensor/bmp581.md b/src/content/docs/components/sensor/bmp581.mdx similarity index 86% rename from content/components/sensor/bmp581.md rename to src/content/docs/components/sensor/bmp581.mdx index 1a6a563956..f1352cdbfe 100644 --- a/content/components/sensor/bmp581.md +++ b/src/content/docs/components/sensor/bmp581.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up BMP581 temperature and pressure sensors with ESPHome" title: "BMP581 Temperature+Pressure Sensor" -params: - seo: - description: Instructions for setting up BMP581 temperature and pressure sensors with ESPHome - image: bmp581.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `bmp581` sensor platform allows you to use your BMP581 ([datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp581-ds004.pdf), [SparkFun](https://www.sparkfun.com/products/20170) or [Adafruit](https://www.adafruit.com/product/6407)) temperature and pressure sensors with ESPHome. The [I²C](/components/i2c) bus is required to be set up in your configuration for this sensor to work. While technically possible, ESPHome does not yet support communication with this sensor via the SPI bus. -{{< img src="bmp581.jpg" alt="Image" caption="BMP581 Temperature and Pressure Sensor. (Credit: [SparkFun](https://www.sparkfun.com/products/20170), image cropped and compressed)" width="50.0%" class="align-center" >}} +
    ## Over I²C @@ -53,7 +59,7 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. -{{< anchor "bmp581-oversampling" >}} + ## Oversampling Options @@ -86,7 +92,7 @@ The datasheet (page 19) gives suggestions for oversampling combinations: > [!NOTE] > High oversampling rates increase power consumption and the time it takes for the sensor to measure temperature and pressure. For example, with no oversampling enabled, the measurement time is approximately 3 ms. The measurement time is approximately 107 ms if the temperature and pressure oversampling rates are `128x`. The BMP581 component waits the minimum time necessary for the specfically configured oversampling rates before attempting to read a measurement. Consider using lower oversampling rates to reduce power consumption or to speed up measurements for small update intervals. -{{< anchor "bmp581-iir" >}} + ## Infinite Impule Response Filter Options @@ -107,9 +113,9 @@ The BMP581's Infinite Impulse Response filter reduces noise in measurement value ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bme280/" >}} -- {{< docref "bmp280/" >}} -- {{< docref "bmp3xx/" >}} -- {{< docref "bme680/" >}} -- {{< docref "bmp085/" >}} +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BMP280 Temperature+Pressure Sensor](/components/sensor/bmp280/) +- [BMP388 / BMP390 Temperature+Pressure Sensor](/components/sensor/bmp3xx/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) - [BMP5 sensor API](https://github.com/boschsensortec/BMP5-Sensor-API) diff --git a/content/components/sensor/ccs811.md b/src/content/docs/components/sensor/ccs811.mdx similarity index 89% rename from content/components/sensor/ccs811.md rename to src/content/docs/components/sensor/ccs811.mdx index c853ed778d..778be47ae6 100644 --- a/content/components/sensor/ccs811.md +++ b/src/content/docs/components/sensor/ccs811.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up CCS811 sensors." title: "CCS811 eCO_2 and Volatile Organic Compound Sensor" -params: - seo: - description: Instructions for setting up CCS811 sensors. - image: ccs811.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ccs811FullImg from './images/ccs811-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ccs811` sensor platform allows you to use CCS811 eCO_2 and volatile organic compound sensors ([Adafruit](https://www.adafruit.com/product/3566)) with ESPHome. @@ -15,7 +16,12 @@ The `ccs811` sensor platform allows you to use CCS811 eCO_2 and volatile organic > Outside low-power scenarios, connecting WAK to ground is the recommended configuration. For low power installations, > pulling WAK low should happen in software prior to taking the measures. -{{< img src="ccs811-full.jpg" alt="Image" caption="CCS811 Sensor. Image by [Adafruit](https://www.adafruit.com)" width="50.0%" class="align-center" >}} +
    The communication with this sensor is done via [I²C Bus](/components/i2c), so you need to have an `i2c:` section in your config for this component to work. @@ -61,7 +67,7 @@ Advanced: - **humidity** (*Optional*, [ID](/guides/configuration-types#id)): Give an external humidity sensor ID here. This can improve the sensor's internal calculations. -{{< anchor "ccs811-calibrating" >}} + ## Calibrating Baseline @@ -96,4 +102,4 @@ re-calibrated because the internal sensor has a slight value drift over time. - [Sensor Filters](/components/sensor#sensor-filters) - [CCS811 Application Note](https://cdn.sparkfun.com/datasheets/BreakoutBoards/CCS811_Programming_Guide.pdf) -- {{< apiref "ccs811/ccs811.h" "ccs811/ccs811.h" >}} +- diff --git a/content/components/sensor/cd74hc4067.md b/src/content/docs/components/sensor/cd74hc4067.mdx similarity index 85% rename from content/components/sensor/cd74hc4067.md rename to src/content/docs/components/sensor/cd74hc4067.mdx index f0ebfaa652..d2ffc501bd 100644 --- a/content/components/sensor/cd74hc4067.md +++ b/src/content/docs/components/sensor/cd74hc4067.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up cd74hc4067 Analog Multiplexer and sensors." title: "cd74hc4067 Analog Multiplexer" -params: - seo: - description: Instructions for setting up cd74hc4067 Analog Multiplexer and sensors. - image: cd74hc4067.jpg --- The `cd74hc4067` Analog Multiplexer component allows you to attach up to 16 analog input sensors to a single ADC pin. @@ -16,7 +12,7 @@ and there are also some guides around like the one from [Adam Meyer](http://adam Actually, the chip is bidirectional and could also be used as output, but this is not supported by the component yet. First, you need to configure the component with the digital pins that control the multiplexer. -Then you need to set up a voltage sensor source (e.g. {{< docref "adc" "ADC sensor" >}}) and pass it to the cd74hc4067 sensors with the `sensor` option. +Then you need to set up a voltage sensor source (e.g. [ADC sensor](/components/sensor/adc/)) and pass it to the cd74hc4067 sensors with the `sensor` option. Each cd74hc4067 sensor is configured for one of the 16 input pins of the multiplexer. ```yaml @@ -53,7 +49,7 @@ sensor: ### Configuration Variables -- **sensor** (**Required**, [ID](/guides/configuration-types#id)): The source sensor to measure voltage values from, e.g. {{< docref "adc" "ADC sensor" >}}. +- **sensor** (**Required**, [ID](/guides/configuration-types#id)): The source sensor to measure voltage values from, e.g. [ADC sensor](/components/sensor/adc/). - **cd74hc4067_id** (**Required**, [ID](/guides/configuration-types#id)): The id of the cd74hc4067 component to use for this sensor. - **number** (**Required**, int): The number of the cd74hc4067 input pin (0-15) - All other options from [Sensor](/components/sensor). @@ -63,7 +59,7 @@ sensor: In this example, the component is used to measure the AC power output of two solar inverters to integrate them as energy sources in [Home Assistant](https://www.home-assistant.io/docs/energy/solar-panels/). -For this purpose, {{< docref "ct_clamp" "CT clamp sensors" >}} are attached on each of the sensors. +For this purpose, [CT clamp sensors](/components/sensor/ct_clamp/) are attached on each of the sensors. Filters are needed to calibrate the output and cut off the noise of near-zero values. The `adc` and `cd74hc4067` sensors updates are triggered by the `ct_clamp` sensors and have a very high internal update frequency. @@ -110,6 +106,6 @@ sensor: ## See Also -- {{< docref "adc/" >}} -- {{< docref "ads1115/" >}} -- {{< docref "ct_clamp/" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) +- [ADS1115 4-Channel 16-Bit A/D Converter](/components/sensor/ads1115/) +- [CT Clamp Current Sensor](/components/sensor/ct_clamp/) diff --git a/content/components/sensor/cm1106.md b/src/content/docs/components/sensor/cm1106.mdx similarity index 86% rename from content/components/sensor/cm1106.md rename to src/content/docs/components/sensor/cm1106.mdx index 4ca9d4557d..de9ba0f2a5 100644 --- a/content/components/sensor/cm1106.md +++ b/src/content/docs/components/sensor/cm1106.mdx @@ -1,15 +1,22 @@ --- description: "Instructions for setting up CM1106 CO2 sensors" title: "CUBIC CM1106 Single Beam NDIR CO2 Sensor Module" -params: - seo: - description: Instructions for setting up CM1106 CO2 sensors - image: cm1106.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `cm1106` sensor platform allows you to use CM1106 CO2 sensors with ESPHome. -{{< img src="cm1106.png" alt="Image" caption="CUBIC CM1106 Single Beam NDIR CO2 Sensor Module." width="50.0%" class="align-center" >}} +
    Communication with the CM1106 sensor is done via UART, so you need to define a [UART bus](/components/uart) in your configuration. Connect the `rx_pin` to the TX pin of the CM1106 @@ -37,7 +44,7 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for actions. -{{< anchor "cm1106-calibrate_zero_action" >}} + ## `cm1106.calibrate_zero` Action @@ -99,4 +106,4 @@ binary_sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "cm1106/cm1106.h" "cm1106/cm1106.h" >}} +- diff --git a/content/components/sensor/combination.md b/src/content/docs/components/sensor/combination.mdx similarity index 95% rename from content/components/sensor/combination.md rename to src/content/docs/components/sensor/combination.mdx index a1efc82eec..7ea6c6694e 100644 --- a/content/components/sensor/combination.md +++ b/src/content/docs/components/sensor/combination.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up a combination sensor" title: "Combine the state of several sensors" -params: - seo: - description: Instructions for setting up a combination sensor --- +import APIRef from '@components/APIRef.astro'; + The `combination` sensor platform allows you to combine the state of several sensors into one. To use this sensor, specify the combination type and add your source sensors. @@ -77,7 +76,7 @@ sensor: - **sources** (**Required**, list): A list of sensors to use as source. - - **source** (**Required**, [ID](/guides/configuration-types#id) of a {{< docref "/components/sensor" >}}): The + - **source** (**Required**, [ID](/guides/configuration-types#id) of a [Sensor](/components/sensor/)): The sensor id that is used as sample source. - **error** (**Required**, only for `KALMAN` type, float, [templatable](/automations/templates)): @@ -104,4 +103,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "combination/combination.h" "combination/combination.h" >}} +- diff --git a/content/components/sensor/cs5460a.md b/src/content/docs/components/sensor/cs5460a.mdx similarity index 95% rename from content/components/sensor/cs5460a.md rename to src/content/docs/components/sensor/cs5460a.mdx index 51d5d4d243..dfd7c07328 100644 --- a/content/components/sensor/cs5460a.md +++ b/src/content/docs/components/sensor/cs5460a.mdx @@ -1,18 +1,25 @@ --- description: "CS5460A component configuration" title: "CS5460A Power Sensor" -params: - seo: - description: CS5460A component configuration - image: cs5460a.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `cs5460a` sensor platform allows you to use a CS5460A AC voltage, current and power meter chip ([datasheet](https://statics.cirrus.com/pubs/proDatasheet/CS5460A_F5.pdf)) with ESPHome. The chip is usually sold on a breakout board with a 4.096 MHz crystal. However it requires a few extra components, specifically a current sensing circuit and a voltage sensing circuit. -{{< img src="cs5460a.png" alt="Image" caption="CS5460A Single-Phase Power/Energy IC module" width="30.0%" class="align-center" >}} +
    > [!WARNING] > Do not work near live mains connections and only modify existing electrical installations if @@ -127,7 +134,7 @@ sensor: > `sliding_window_moving_average` filters are some options. Additionally the `delta` > filter is almost always a good idea for all numeric sensors regardless of Home Assistant. -{{< anchor "cs5460a-restart_action" >}} + ## `cs5460a.restart` Action @@ -147,4 +154,4 @@ cycle that uses current samples only from the new CD74HC4067 multiplexer channel ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "cs5460a/cs5460a.h" "cs5460a/cs5460a.h" >}} +- diff --git a/content/components/sensor/cse7761.md b/src/content/docs/components/sensor/cse7761.mdx similarity index 92% rename from content/components/sensor/cse7761.md rename to src/content/docs/components/sensor/cse7761.mdx index 3149182f21..3b808144fd 100644 --- a/content/components/sensor/cse7761.md +++ b/src/content/docs/components/sensor/cse7761.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up CSE7761 power sensors for the Sonoff Dual R3 v1.x" title: "CSE7761 Power Sensor" -params: - seo: - description: Instructions for setting up CSE7761 power sensors for the Sonoff Dual R3 v1.x - image: cse7761.svg --- +import APIRef from '@components/APIRef.astro'; + The `cse7761` sensor platform allows you to use your CSE7761 voltage/current and power sensors with ESPHome. This sensor is commonly found in Sonoff Dual R3 v1.x. @@ -62,4 +60,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "cse7761/cse7761.h" "cse7761/cse7761.h" >}} +- diff --git a/content/components/sensor/cse7766.md b/src/content/docs/components/sensor/cse7766.mdx similarity index 94% rename from content/components/sensor/cse7766.md rename to src/content/docs/components/sensor/cse7766.mdx index ecd8d66e3f..4af02addac 100644 --- a/content/components/sensor/cse7766.md +++ b/src/content/docs/components/sensor/cse7766.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up CSE7766 power sensors for the Sonoff Pow R2" title: "CSE7766 Power Sensor" -params: - seo: - description: Instructions for setting up CSE7766 power sensors for the Sonoff Pow R2 - image: cse7766.svg --- +import APIRef from '@components/APIRef.astro'; + The `cse7766` sensor platform allows you to use your CSE7766 voltage/current and power sensors ([datasheet](https://itead.cc/wp-content/uploads/2022/05/CSE7766.pdf)) sensors with @@ -98,4 +96,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "cse7766/cse7766.h" "cse7766/cse7766.h" >}} +- diff --git a/content/components/sensor/ct_clamp.md b/src/content/docs/components/sensor/ct_clamp.mdx similarity index 76% rename from content/components/sensor/ct_clamp.md rename to src/content/docs/components/sensor/ct_clamp.mdx index 0041cea9da..78f074ebde 100644 --- a/content/components/sensor/ct_clamp.md +++ b/src/content/docs/components/sensor/ct_clamp.mdx @@ -1,22 +1,22 @@ --- description: "Instructions for setting up ct clamp sensors." title: "CT Clamp Current Sensor" -params: - seo: - description: Instructions for setting up ct clamp sensors. - image: ct_clamp.jpg --- +import { Image } from 'astro:assets'; +import ctClampUiImg from './images/ct_clamp-ui.png'; +import APIRef from '@components/APIRef.astro'; + The Current Transformer Clamp (`ct_clamp` ) sensor allows you to hook up a CT Clamp to an analog -voltage sensor (like the {{< docref "adc" "ADC sensor" >}}) and convert the readings to measured single phase AC current. +voltage sensor (like the [ADC sensor](/components/sensor/adc/)) and convert the readings to measured single phase AC current. -First, you need to set up a voltage sensor source ({{< docref "adc" "ADC sensor" >}}, but for example also -{{< docref "ads1115" "ADS1115" >}}) and pass it to the CT clamp sensor with the `sensor` option. +First, you need to set up a voltage sensor source ([ADC sensor](/components/sensor/adc/), but for example also +[ADS1115](/components/sensor/ads1115/)) and pass it to the CT clamp sensor with the `sensor` option. Please also see [this guide](https://learn.openenergymonitor.org/electricity-monitoring/ct-sensors/introduction) as an introduction to the working principle of CT clamp sensors and how to hook them up to your device. -{{< img src="ct_clamp-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -74,6 +74,6 @@ Recompile and upload, now your CT clamp sensor is calibrated! - [EMonLib](https://github.com/openenergymonitor/EmonLib) - [CT Clamp Guide](https://learn.openenergymonitor.org/electricity-monitoring/ct-sensors/introduction) -- {{< docref "adc/" >}} -- {{< docref "ads1115/" >}} -- {{< apiref "sensor/ct_clamp_sensor.h" "sensor/ct_clamp_sensor.h" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) +- [ADS1115 4-Channel 16-Bit A/D Converter](/components/sensor/ads1115/) +- diff --git a/content/components/sensor/dallas_temp.md b/src/content/docs/components/sensor/dallas_temp.mdx similarity index 80% rename from content/components/sensor/dallas_temp.md rename to src/content/docs/components/sensor/dallas_temp.mdx index 0310adf24e..fb6125f2a4 100644 --- a/content/components/sensor/dallas_temp.md +++ b/src/content/docs/components/sensor/dallas_temp.mdx @@ -1,16 +1,14 @@ --- description: "Instructions for setting up Dallas 1-Wire temperature sensors" title: "Dallas Temperature Sensor" -params: - seo: - description: Instructions for setting up Dallas 1-Wire temperature sensors - image: dallas.jpg --- +import APIRef from '@components/APIRef.astro'; + The `dallas_temp` component allows you to use [DS18B20](https://www.adafruit.com/product/374) ([datasheet](https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf)) -and similar 1-Wire temperature sensors. A {{< docref "/components/one_wire/index" "1-Wire bus" >}} is +and similar 1-Wire temperature sensors. A [1-Wire bus](/components/one_wire/) is required to be set up in your configuration for this sensor to work. ```yaml @@ -41,14 +39,13 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval that the sensors should be checked. Defaults to 60 seconds. -- **one_wire_id** (*Optional*, {{< docref "/components/one_wire" >}}): The ID of the 1-Wire bus to use. +- **one_wire_id** (*Optional*, [One Wire](/components/one_wire/)): The ID of the 1-Wire bus to use. Required if there is more than one bus. - All other options from [Sensor](/components/sensor). -### See Also +## See Also - [Arduino DallasTemperature library](https://github.com/milesburton/Arduino-Temperature-Control-Library) by [Miles Burton](https://github.com/milesburton) - -- {{< apiref "dallas_temp/dallas_temp.h" "dallas_temp/dallas_temp.h" >}} +- diff --git a/content/components/sensor/daly_bms.md b/src/content/docs/components/sensor/daly_bms.mdx similarity index 95% rename from content/components/sensor/daly_bms.md rename to src/content/docs/components/sensor/daly_bms.mdx index b7dae20d66..5a4cb8bcc1 100644 --- a/content/components/sensor/daly_bms.md +++ b/src/content/docs/components/sensor/daly_bms.mdx @@ -1,19 +1,21 @@ --- description: "Instructions for setting up a Daly Smart BMS" title: "Daly BMS Sensor" -params: - seo: - description: Instructions for setting up a Daly Smart BMS - image: daly_bms.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import dalyBmsExampleImg from './images/daly_bms_example.png'; +import dalyBmsPinoutImg from './images/daly_bms_pinout.png'; +import APIRef from '@components/APIRef.astro'; + The `daly_bms` sensor platform allows you to use a Daly Smart BMS ([more info](https://dalyelec.en.made-in-china.com/)) with ESPHome. The BMS communicates via [UART](/components/uart). -{{< img src="daly_bms_example.png" alt="Image" width="100.0%" class="align-center" >}} + ## Component/Hub @@ -290,7 +292,12 @@ select: Connect RX from BMS to TX in ESP board and TX from BMS to RX in ESP board -{{< img src="daly_bms_pinout.png" alt="Image" caption="Uart Pinout." width="100.0%" class="align-center" >}} +
    **3.3v Warning:** some BMS 3.3v cant source large currents and may not work to properly power the ESP. If you are having WIFI connection issues or similar, try a different power source. There is 12-15v available on the Daly connector which via a proper step-down converter can properly power the ESP. @@ -306,4 +313,4 @@ uart: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "daly_bms/daly_bms.h" "daly_bms/daly_bms.h" >}} +- diff --git a/content/components/sensor/dht.md b/src/content/docs/components/sensor/dht.mdx similarity index 79% rename from content/components/sensor/dht.md rename to src/content/docs/components/sensor/dht.mdx index bbed1e33bb..b3d4da50d9 100644 --- a/content/components/sensor/dht.md +++ b/src/content/docs/components/sensor/dht.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up DHT11 and DHT22 temperature and humidity sensors." title: "DHT Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up DHT11 and DHT22 temperature and humidity sensors. - image: dht.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import dhtFullImg from './images/dht-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The DHT Temperature+Humidity sensor allows you to use your - DHT11 ([datasheet](https://www.makerhero.com/img/files/download/DHT11-Datasheet.pdf), [Adafruit](https://www.adafruit.com/product/386)), @@ -18,13 +20,18 @@ The DHT Temperature+Humidity sensor allows you to use your sensors with ESPHome. -{{< img src="dht-full.jpg" alt="Image" caption="DHT22 Temperature & Humidity Sensor." width="50.0%" class="align-center" >}} +
    The DHT22 and DHT11 require external pull up resistors on the data line. To do this, solder a resistor with *about* 4.7kΩ (anything in the range from 1kΩ to 10kΩ probably works fine, but if you're having issues try the 4.7kΩ recommended by the manufacturer) between `DATA` and `3.3V`. -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -71,10 +78,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "dht/dht.h" "dht/dht.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [Arduino DHTLib](https://playground.arduino.cc/Main/DHTLib) +- diff --git a/content/components/sensor/dht12.md b/src/content/docs/components/sensor/dht12.mdx similarity index 58% rename from content/components/sensor/dht12.md rename to src/content/docs/components/sensor/dht12.mdx index 61f4efe584..3a551afd7a 100644 --- a/content/components/sensor/dht12.md +++ b/src/content/docs/components/sensor/dht12.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up DHT12 temperature and humidity sensors" title: "DHT12 Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up DHT12 temperature and humidity sensors - image: dht12.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import dht12FullImg from './images/dht12-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The `dht12` Temperature+Humidity sensor allows you to use your DHT12 ([datasheet](http://www.robototehnika.ru/file/DHT12.pdf), [electrodragon](http://www.electrodragon.com/product/dht12/)) I²C-based sensor with ESPHome. This sensor is also called AM2320 by some sellers. -{{< img src="dht12-full.jpg" alt="Image" caption="DHT12 Temperature & Humidity Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -41,10 +48,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "dht12/dht12.h" "dht12/dht12.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [DHT12 Library](https://github.com/dplasa/dht) by [Daniel Plasa](https://github.com/dplasa) +- diff --git a/content/components/sensor/dlms_meter.md b/src/content/docs/components/sensor/dlms_meter.mdx similarity index 91% rename from content/components/sensor/dlms_meter.md rename to src/content/docs/components/sensor/dlms_meter.mdx index 53f7068f82..3cf5ec1f1f 100644 --- a/content/components/sensor/dlms_meter.md +++ b/src/content/docs/components/sensor/dlms_meter.mdx @@ -1,12 +1,12 @@ --- title: "DLMS Meter" description: "Instructions for setting up DLMS (COSEM) smart meter integration using an M-Bus to UART adapter." -params: - seo: - description: Instructions for setting up DLMS Meter component in ESPHome. - image: dlms_meter.jpg --- +import APIClass from '@components/APIClass.astro'; +import APIRef from '@components/APIRef.astro'; +import { Image } from 'astro:assets'; + The `dlms_meter` component connects to smart meters which use the encrypted **DLMS/COSEM** protocol over UART. These smart meters are (for example) widely deployed in Austria. @@ -16,7 +16,7 @@ energy provider / grid operator. This component is passive; it does not transmit data to the meter. The meter periodically broadcasts frames (often about every 5 seconds). ESPHome listens, decrypts and updates the configured sensors as data arrives. -![Smart meter with M-Bus adapter board to ESP32](/images/dlms_meter.jpg) +Smart meter with M-Bus adapter board to ESP32 ## Example (Generic Provider) @@ -157,4 +157,5 @@ All text sensor entries are *optional* and support standard [Text Sensor](/compo ## See Also -- {{< apiref "dlms_meter/dlms_meter.h" "dlms_meter/dlms_meter.h" >}} +- +- diff --git a/content/components/sensor/dps310.md b/src/content/docs/components/sensor/dps310.mdx similarity index 66% rename from content/components/sensor/dps310.md rename to src/content/docs/components/sensor/dps310.mdx index 791ad46e45..bff175b4b4 100644 --- a/content/components/sensor/dps310.md +++ b/src/content/docs/components/sensor/dps310.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up DPS310 atmospheric pressure sensors" title: "DPS310 Atmospheric Pressure Sensor" -params: - seo: - description: Instructions for setting up DPS310 atmospheric pressure sensors - image: dps310.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import dps310FullImg from './images/dps310-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `dps310` sensor platform allows you to use both the temperature and pressure sensors on your DPS310 atmospheric pressure sensor ([Adafruit](https://www.adafruit.com/product/4494)) with ESPHome. The [I²C](/components/i2c) component is required to be set up in your configuration. -{{< img src="dps310-full.jpg" alt="Image" caption="DPS310 Atmospheric Pressure Sensor board from [Adafruit](https://www.adafruit.com/product/4494)" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -45,7 +51,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bmp280/" >}} -- {{< docref "bme680/" >}} -- {{< docref "bmp085/" >}} -- {{< apiref "dps310/dps310.h" "dps310/dps310.h" >}} +- [BMP280 Temperature+Pressure Sensor](/components/sensor/bmp280/) +- [BME680 Temperature+Pressure+Humidity+Gas Sensor](/components/sensor/bme680/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) +- diff --git a/content/components/sensor/dsmr.md b/src/content/docs/components/sensor/dsmr.mdx similarity index 98% rename from content/components/sensor/dsmr.md rename to src/content/docs/components/sensor/dsmr.mdx index 275a973d87..ab87daace3 100644 --- a/content/components/sensor/dsmr.md +++ b/src/content/docs/components/sensor/dsmr.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up DSMR Meter component in ESPHome." title: "DSMR Component" -params: - seo: - description: Instructions for setting up DSMR Meter component in ESPHome. - image: dsmr.svg --- +import { Image } from 'astro:assets'; +import dsmrRequestPinCircuitExampleImg from './images/dsmr-request-pin-circuit-example.png'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The DSMR component connects to Dutch Smart Meters which comply to DSMR (Dutch Smart Meter @@ -397,7 +397,7 @@ text_sensor: name: "gas delivered raw" ``` -{{< anchor "sensor-dsmr-request_pin" >}} + ## P1 Data Request pin @@ -428,12 +428,12 @@ mode from a GPIO, then this GPIO can be configured as the `request_pin`. Best results have been achieved by using an optocoupler circuit to handle the switching. Direct GPIO output or a transistor-based circuit are not feasible options. Here's an example circuit design: -{{< img src="dsmr-request-pin-circuit-example.png" alt="Image" >}} + When using a type of MCU that provides 5V on the GPIO outputs instead of 3.3V, then use a 330 Ohm resistor instead of the 200 Ohm resistor. -{{< anchor "sensor-dsmr-improving_reader_results" >}} + ## Improving reader results @@ -521,4 +521,4 @@ text_sensor: ## See Also -- {{< apiref "dsmr/dsmr.h" "dsmr/dsmr.h" >}} +- diff --git a/content/components/sensor/duty_cycle.md b/src/content/docs/components/sensor/duty_cycle.mdx similarity index 77% rename from content/components/sensor/duty_cycle.md rename to src/content/docs/components/sensor/duty_cycle.mdx index c0f488771d..ddd44076ea 100644 --- a/content/components/sensor/duty_cycle.md +++ b/src/content/docs/components/sensor/duty_cycle.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up duty cycle sensors in ESPHome" title: "Duty Cycle Sensor" -params: - seo: - description: Instructions for setting up duty cycle sensors in ESPHome - image: percent.svg --- +import { Image } from 'astro:assets'; +import dutyCycleUiImg from './images/duty_cycle-ui.png'; +import APIRef from '@components/APIRef.astro'; + The duty cycle sensor allows you to measure for what percentage of time a signal on a GPIO pin is HIGH or LOW. For example, you can measure if a status LED of a pool controller is permanently active (indicating that the pump is on) or blinking. -{{< img src="duty_cycle-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -36,4 +36,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "duty_cycle/duty_cycle_sensor.h" "duty_cycle/duty_cycle_sensor.h" >}} +- diff --git a/content/components/sensor/duty_time.md b/src/content/docs/components/sensor/duty_time.mdx similarity index 87% rename from content/components/sensor/duty_time.md rename to src/content/docs/components/sensor/duty_time.mdx index 720f89b5da..36d8e18ee5 100644 --- a/content/components/sensor/duty_time.md +++ b/src/content/docs/components/sensor/duty_time.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a sensor that tracks the duty time of some object." title: "Duty Time" -params: - seo: - description: Instructions for setting up a sensor that tracks the duty time of some object. - image: timer-play-outline.svg --- +import APIRef from '@components/APIRef.astro'; + The `duty_time` sensor allows you to track the total duty time of some object, for example, a light bulb, in seconds. Able to calculate the last turn-on time when an optional sensor `last_time` is included in the configuration. @@ -53,7 +51,7 @@ sensor: In addition to all basic [sensor automations](/components/sensor#sensor-automations), the component supports the automations below. -{{< anchor "sensor-duty_time-start_action" >}} + ### `sensor.duty_time.start` Action @@ -65,7 +63,7 @@ on_...: - sensor.duty_time.start: my_climate_work_time ``` -{{< anchor "sensor-duty_time-stop_action" >}} + ### `sensor.duty_time.stop` Action @@ -77,7 +75,7 @@ on_...: - sensor.duty_time.stop: my_climate_work_time ``` -{{< anchor "sensor-duty_time-reset_action" >}} + ### `sensor.duty_time.reset` Action @@ -89,8 +87,8 @@ on_...: - sensor.duty_time.reset: my_climate_work_time ``` -{{< anchor "sensor-duty_time-is_running_action" >}} -{{< anchor "sensor-duty_time-is_not_running_action" >}} + + ### `sensor.duty_time.is_running` / `sensor.duty_time.is_not_running` Condition @@ -110,5 +108,5 @@ on_...: - [Base Sensor Configuration](/components/sensor) - [Templates](/automations/templates#config-lambda) - [Automation](/automations) -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "duty_time/duty_time_sensor.h" "duty_time/duty_time_sensor.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/sensor/ee895.md b/src/content/docs/components/sensor/ee895.mdx similarity index 75% rename from content/components/sensor/ee895.md rename to src/content/docs/components/sensor/ee895.mdx index a92dd8a093..db2347919b 100644 --- a/content/components/sensor/ee895.md +++ b/src/content/docs/components/sensor/ee895.mdx @@ -1,18 +1,17 @@ --- description: "Instructions for setting up EE895 CO₂ Temperature and Pressure" title: "EE895 CO₂, Temperature and Pressure Sensor" -params: - seo: - description: Instructions for setting up EE895 CO₂ Temperature and Pressure - image: EE895.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `ee895` sensor platform allows you to use your EE895 CO₂ ([datasheet](https://www.epluse.com/fileadmin/data/product/ee895/BA_EE895.pdf), [E+E EE895](https://www.epluse.com/products/co2-measurement/co2-modules-and-probes/ee895/)) sensor with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. We recommend the use of pull up resistors. -{{< img src="EE895.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -49,8 +48,8 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "tee501/" >}} -- {{< docref "hte501/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< apiref "ee895/ee895.h" "ee895/ee895.h" >}} +- [TEE501 Temperature Sensor](/components/sensor/tee501/) +- [HTE501 Temperature+Humidity Sensor](/components/sensor/hte501/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- diff --git a/content/components/sensor/ens160.md b/src/content/docs/components/sensor/ens160.mdx similarity index 88% rename from content/components/sensor/ens160.md rename to src/content/docs/components/sensor/ens160.mdx index 41076e0d61..f0c747afea 100644 --- a/content/components/sensor/ens160.md +++ b/src/content/docs/components/sensor/ens160.mdx @@ -1,11 +1,12 @@ --- description: "Instructions for setting up ENS160 air-quality sensors" title: "ENS160 Volatile Organic Compound (VOC) and eCO₂ Sensor" -params: - seo: - description: Instructions for setting up ENS160 air-quality sensors --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `ens160` sensor platform allows you to use your ENS160 ([datasheet](https://www.sciosense.com/wp-content/uploads/2023/12/ENS160-Datasheet.pdf)) air-quality sensors with ESPHome. The [I²C](/components/i2c) or [SPI](/components/spi) is required to be set up in your configuration for this sensor to work. @@ -15,7 +16,14 @@ The [I²C](/components/i2c) or [SPI](/components/spi) is required to be set up i > For subsequent starts or reboots, there is a 3 minute warm up period before readings are available. Also, be aware that the > ENS160 can take up to 1 second for sucessive data measurements to be ready. -{{< img src="ens160.jpg" alt="Image" caption="ENS160 Air Quality Sensor." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry I2C @@ -104,6 +112,6 @@ text_sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ccs811/" >}} -- {{< docref "sgp30/" >}} -- {{< apiref "ens160/ens160.h" "ens160/ens160.h" >}} +- [CCS811 eCO_2 and Volatile Organic Compound Sensor](/components/sensor/ccs811/) +- [SGP30 CO₂ and Volatile Organic Compound Sensor](/components/sensor/sgp30/) +- diff --git a/content/components/sensor/ens210.md b/src/content/docs/components/sensor/ens210.mdx similarity index 68% rename from content/components/sensor/ens210.md rename to src/content/docs/components/sensor/ens210.mdx index 2b83a17b69..50d723b4ad 100644 --- a/content/components/sensor/ens210.md +++ b/src/content/docs/components/sensor/ens210.mdx @@ -1,18 +1,26 @@ --- description: "Instructions for setting up ENS210 temperature and humidity sensors" title: "ENS210 Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up ENS210 temperature and humidity sensors - image: ens210.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The `ENS210` Temperature+Humidity sensor allows you to use your ENS210 ([datasheet](https://www.sciosense.com/wp-content/uploads/2023/12/ENS210-Datasheet.pdf)) i2c-based sensor with ESPHome. -{{< img src="ens210.jpg" alt="Image" caption="ENS210 Temperature & Humidity Sensor." width="80.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -40,6 +48,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< apiref "ENS210/ENS210.h" "ENS210/ENS210.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) - [ENS210 Library](https://github.com/maarten-pennings/ENS210) by [Maarten Pennings](https://github.com/maarten-pennings) +- diff --git a/content/components/sensor/ezo.md b/src/content/docs/components/sensor/ezo.mdx similarity index 94% rename from content/components/sensor/ezo.md rename to src/content/docs/components/sensor/ezo.mdx index d60ee2961e..d208ebeb74 100644 --- a/content/components/sensor/ezo.md +++ b/src/content/docs/components/sensor/ezo.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up EZO sensor circuits in esphome" title: "EZO sensor circuits" -params: - seo: - description: Instructions for setting up EZO sensor circuits in esphome - image: ezo-ph-circuit.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `ezo` sensor platform allows you to use your EZO sensor circuits with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. All embedded solutions from EZO can be found [on their website](https://atlas-scientific.com/embedded-solutions/). If a certain command is not supported directly, it can be executed with the `send_custom()` method call. -{{< img src="ezo-ph-circuit.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -61,7 +60,7 @@ Automation triggers: - **on_custom** (*Optional*, [Action](/automations/actions#all-actions)): Triggered when the result of `get_custom()` is ready. The result is provided as a `std::string` variable named `x`. -{{< anchor "ezo_lambda_calls" >}} + ## Lambda calls @@ -174,4 +173,4 @@ with the information retrieved from the sensor. For more information on the comm ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ezo/ezo.h" "ezo/ezo.h" >}} +- diff --git a/content/components/sensor/filter/calibrate_linear.md b/src/content/docs/components/sensor/filter/calibrate_linear.mdx similarity index 82% rename from content/components/sensor/filter/calibrate_linear.md rename to src/content/docs/components/sensor/filter/calibrate_linear.mdx index 8682416bd9..41bbe6d3de 100644 --- a/content/components/sensor/filter/calibrate_linear.md +++ b/src/content/docs/components/sensor/filter/calibrate_linear.mdx @@ -1,7 +1,11 @@ --- -description: "" -headless: true +title: "Calibrate Linear Filter" +description: "Calibrate your sensor values using linear interpolation" --- +### Calibrate Linear Filter + + +import { Image } from 'astro:assets'; Calibrate your sensor values by using values you measured with an accurate "truth" source. @@ -38,4 +42,4 @@ or connect the values exactly using multiple linear equations. You need to suppl values. When using `least_squares` and more than two values are given a linear solution will be calculated and may not represent each value exactly. -{{< img src="sensor_filter_calibrate_linear.png" alt="Image" width="50.0%" class="align-center" >}} + diff --git a/content/components/sensor/filter/calibrate_polynomial.md b/src/content/docs/components/sensor/filter/calibrate_polynomial.mdx similarity index 80% rename from content/components/sensor/filter/calibrate_polynomial.md rename to src/content/docs/components/sensor/filter/calibrate_polynomial.mdx index 79bf8b65df..f5352485d0 100644 --- a/content/components/sensor/filter/calibrate_polynomial.md +++ b/src/content/docs/components/sensor/filter/calibrate_polynomial.mdx @@ -1,9 +1,11 @@ --- -description: "" -headless: true +title: "Calibrate Polynomial Filter" +description: "Sensor filter documentation" --- +### Calibrate Polynomial Filter -{{< anchor "sensor-filter-calibrate_polynomial" >}} + + Calibrate your sensor values by fitting them to polynomial functions. This is similar to the `calibrate_linear` filter, but also allows for higher-order functions like quadratic polynomials. diff --git a/content/components/sensor/filter/clamp.md b/src/content/docs/components/sensor/filter/clamp.mdx similarity index 93% rename from content/components/sensor/filter/clamp.md rename to src/content/docs/components/sensor/filter/clamp.mdx index 2052abde3b..95e65f1c43 100644 --- a/content/components/sensor/filter/clamp.md +++ b/src/content/docs/components/sensor/filter/clamp.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Clamp Filter" +description: "Sensor filter documentation" --- +### Clamp Filter + Limits the value to the inclusive range between `min_value` and `max_value`. diff --git a/content/components/sensor/filter/debounce.md b/src/content/docs/components/sensor/filter/debounce.mdx similarity index 76% rename from content/components/sensor/filter/debounce.md rename to src/content/docs/components/sensor/filter/debounce.mdx index 387a3f27f6..7991832753 100644 --- a/content/components/sensor/filter/debounce.md +++ b/src/content/docs/components/sensor/filter/debounce.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Debounce Filter" +description: "Sensor filter documentation" --- +### Debounce Filter + Only send values if the last incoming value is at least `specified time period` old. For example if two values come in at almost the same time, this filter will only output diff --git a/content/components/sensor/filter/delta.md b/src/content/docs/components/sensor/filter/delta.mdx similarity index 96% rename from content/components/sensor/filter/delta.md rename to src/content/docs/components/sensor/filter/delta.mdx index 241364a723..d4bb3e3b60 100644 --- a/content/components/sensor/filter/delta.md +++ b/src/content/docs/components/sensor/filter/delta.mdx @@ -1,14 +1,16 @@ --- -description: "" -headless: true +title: "Delta Filter" +description: "Sensor filter documentation" --- +### Delta Filter + This filter stores the last value passed through this filter and only passes incoming values through if incoming value is sufficiently different from the previously passed one. This difference can be calculated in two ways an absolute difference or a percentage difference, and with respect to a minimum, `min_value` and maximum value, `max_value`. -## Configuration variables +Configuration variables: - **min_value** (*Optional*, float, percent): The minimum absolute or percentage difference required (default is `0.0`) - **max_value** (*Optional*, float, percent): The maximum absolute or percentage difference allowed (default is infinity) diff --git a/content/components/sensor/filter/exponential_moving_average.md b/src/content/docs/components/sensor/filter/exponential_moving_average.mdx similarity index 86% rename from content/components/sensor/filter/exponential_moving_average.md rename to src/content/docs/components/sensor/filter/exponential_moving_average.mdx index 26d952687a..b1c2602b2d 100644 --- a/content/components/sensor/filter/exponential_moving_average.md +++ b/src/content/docs/components/sensor/filter/exponential_moving_average.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Exponential Moving Average Filter" +description: "Sensor filter documentation" --- +### Exponential Moving Average Filter + A simple [exponential moving average](https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average) over the last few values. It can be used to have a short update interval on the sensor but only push diff --git a/content/components/sensor/filter/filter_out.md b/src/content/docs/components/sensor/filter/filter_out.mdx similarity index 80% rename from content/components/sensor/filter/filter_out.md rename to src/content/docs/components/sensor/filter/filter_out.mdx index ccd7e64d10..9bba4404a4 100644 --- a/content/components/sensor/filter/filter_out.md +++ b/src/content/docs/components/sensor/filter/filter_out.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Filter Out Filter" +description: "Sensor filter documentation" --- +### Filter Out Filter + (**Required**, number): Filter out specific values to be displayed, e.g., filtering out the value `85.0` diff --git a/content/components/sensor/filter/heartbeat.md b/src/content/docs/components/sensor/filter/heartbeat.mdx similarity index 92% rename from content/components/sensor/filter/heartbeat.md rename to src/content/docs/components/sensor/filter/heartbeat.mdx index 4db73688ff..710a909cf2 100644 --- a/content/components/sensor/filter/heartbeat.md +++ b/src/content/docs/components/sensor/filter/heartbeat.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Heartbeat Filter" +description: "Sensor filter documentation" --- +### Heartbeat Filter + Send the sensor value periodically at the specified time interval. If the sensor value changes during this interval, the timer will not reset — the last known value of the sensor will still diff --git a/content/components/sensor/filter/lambda.md b/src/content/docs/components/sensor/filter/lambda.mdx similarity index 86% rename from content/components/sensor/filter/lambda.md rename to src/content/docs/components/sensor/filter/lambda.mdx index 4e14dfb908..fc4142170b 100644 --- a/content/components/sensor/filter/lambda.md +++ b/src/content/docs/components/sensor/filter/lambda.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Lambda Filter" +description: "Sensor filter documentation" --- +### Lambda Filter + Perform a simple mathematical operation over the sensor values. The input value is `x` and the result of the lambda is used as the output (use `return` ). diff --git a/content/components/sensor/filter/max.md b/src/content/docs/components/sensor/filter/max.mdx similarity index 90% rename from content/components/sensor/filter/max.md rename to src/content/docs/components/sensor/filter/max.mdx index 55b4b5b097..4ff8037cea 100644 --- a/content/components/sensor/filter/max.md +++ b/src/content/docs/components/sensor/filter/max.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Max Filter" +description: "Sensor filter documentation" --- +### Max Filter + A moving maximum over the last few values. A large window size will make the filter slow to react to input changes. diff --git a/content/components/sensor/filter/median.md b/src/content/docs/components/sensor/filter/median.mdx similarity index 93% rename from content/components/sensor/filter/median.md rename to src/content/docs/components/sensor/filter/median.mdx index ab64a92690..af21371d5e 100644 --- a/content/components/sensor/filter/median.md +++ b/src/content/docs/components/sensor/filter/median.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Median Filter" +description: "Sensor filter documentation" --- +### Median Filter + A [simple moving median](https://en.wikipedia.org/wiki/Median_filter#Worked_1D_example) over the last few values. This can be used to filter outliers from the received sensor data. A large diff --git a/content/components/sensor/filter/min.md b/src/content/docs/components/sensor/filter/min.mdx similarity index 92% rename from content/components/sensor/filter/min.md rename to src/content/docs/components/sensor/filter/min.mdx index 8ccd730fe9..204d33bfc5 100644 --- a/content/components/sensor/filter/min.md +++ b/src/content/docs/components/sensor/filter/min.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Min Filter" +description: "Sensor filter documentation" --- +### Min Filter + A moving minimum over the last few values. A large window size will make the filter slow to react to input changes. diff --git a/src/content/docs/components/sensor/filter/multiply.mdx b/src/content/docs/components/sensor/filter/multiply.mdx new file mode 100644 index 0000000000..619fe38516 --- /dev/null +++ b/src/content/docs/components/sensor/filter/multiply.mdx @@ -0,0 +1,10 @@ +--- +title: "Multiply Filter" +description: "Sensor filter documentation" +--- +### Multiply Filter + + +Multiplies each value by a templatable value. + + diff --git a/content/components/sensor/filter/offset.md b/src/content/docs/components/sensor/filter/offset.mdx similarity index 72% rename from content/components/sensor/filter/offset.md rename to src/content/docs/components/sensor/filter/offset.mdx index e918f6e935..3896c3442a 100644 --- a/content/components/sensor/filter/offset.md +++ b/src/content/docs/components/sensor/filter/offset.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Offset Filter" +description: "Sensor filter documentation" --- +### Offset Filter + Adds a value to each sensor value. The value may be a constant or a lambda returning a float. diff --git a/content/components/sensor/filter/or.md b/src/content/docs/components/sensor/filter/or.mdx similarity index 79% rename from content/components/sensor/filter/or.md rename to src/content/docs/components/sensor/filter/or.mdx index 097071f9b6..8bfa44fd7d 100644 --- a/content/components/sensor/filter/or.md +++ b/src/content/docs/components/sensor/filter/or.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Or Filter" +description: "Sensor filter documentation" --- +### Or Filter + Pass forward a value with the first child filter that returns. Below example will only pass forward values that are *either* at least 1s old or are if the absolute diff --git a/content/components/sensor/filter/quantile.md b/src/content/docs/components/sensor/filter/quantile.mdx similarity index 93% rename from content/components/sensor/filter/quantile.md rename to src/content/docs/components/sensor/filter/quantile.mdx index 875b36187c..1e7036aafc 100644 --- a/content/components/sensor/filter/quantile.md +++ b/src/content/docs/components/sensor/filter/quantile.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Quantile Filter" +description: "Sensor filter documentation" --- +### Quantile Filter + A [simple moving quantile](https://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/quantile.htm) over the last few values. This can be used to filter outliers from the received sensor data. A large diff --git a/content/components/sensor/filter/round.md b/src/content/docs/components/sensor/filter/round.mdx similarity index 64% rename from content/components/sensor/filter/round.md rename to src/content/docs/components/sensor/filter/round.mdx index 4033686bab..4099283da6 100644 --- a/content/components/sensor/filter/round.md +++ b/src/content/docs/components/sensor/filter/round.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Round Filter" +description: "Sensor filter documentation" --- +### Round Filter + Rounds the value to the given decimal places. diff --git a/content/components/sensor/filter/round_to_multiple_of.md b/src/content/docs/components/sensor/filter/round_to_multiple_of.mdx similarity index 72% rename from content/components/sensor/filter/round_to_multiple_of.md rename to src/content/docs/components/sensor/filter/round_to_multiple_of.mdx index 3c55a35b61..6db75e3f7a 100644 --- a/content/components/sensor/filter/round_to_multiple_of.md +++ b/src/content/docs/components/sensor/filter/round_to_multiple_of.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Round To Multiple Of Filter" +description: "Sensor filter documentation" --- +### Round To Multiple Of Filter + Rounds the value to the nearest multiple. Takes a float greater than zero. diff --git a/content/components/sensor/filter/skip_initial.md b/src/content/docs/components/sensor/filter/skip_initial.mdx similarity index 76% rename from content/components/sensor/filter/skip_initial.md rename to src/content/docs/components/sensor/filter/skip_initial.mdx index 0cdd3bd806..766f0112d8 100644 --- a/content/components/sensor/filter/skip_initial.md +++ b/src/content/docs/components/sensor/filter/skip_initial.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Skip Initial Filter" +description: "Sensor filter documentation" --- +### Skip Initial Filter + A simple skip filter; `skip_initial: N` skips the first `N` sensor readings and passes on the rest. This can be used when the sensor needs a few readings to 'warm up'. After the initial diff --git a/content/components/sensor/filter/sliding_window_moving_average.md b/src/content/docs/components/sensor/filter/sliding_window_moving_average.mdx similarity index 83% rename from content/components/sensor/filter/sliding_window_moving_average.md rename to src/content/docs/components/sensor/filter/sliding_window_moving_average.mdx index 60169f2119..d0d259e69c 100644 --- a/content/components/sensor/filter/sliding_window_moving_average.md +++ b/src/content/docs/components/sensor/filter/sliding_window_moving_average.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Sliding Window Moving Average Filter" +description: "Sensor filter documentation" --- +### Sliding Window Moving Average Filter + A [simple moving average](https://en.wikipedia.org/wiki/Moving_average#Simple_moving_average) over the last few values. It can be used to have a short update interval on the sensor but only push @@ -30,4 +32,4 @@ Configuration variables: published. With this parameter you can specify when the very first value is to be sent. Defaults to `1`. -{{< anchor "sensor-filter-exponential_moving_average" >}} + diff --git a/content/components/sensor/filter/throttle.md b/src/content/docs/components/sensor/filter/throttle.mdx similarity index 77% rename from content/components/sensor/filter/throttle.md rename to src/content/docs/components/sensor/filter/throttle.mdx index 251f459913..72c6cadecc 100644 --- a/content/components/sensor/filter/throttle.md +++ b/src/content/docs/components/sensor/filter/throttle.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Throttle Filter" +description: "Sensor filter documentation" --- +### Throttle Filter + Throttle the incoming values. When this filter gets an incoming value, it checks if the last incoming value is at least `specified time period` old. diff --git a/content/components/sensor/filter/throttle_average.md b/src/content/docs/components/sensor/filter/throttle_average.mdx similarity index 90% rename from content/components/sensor/filter/throttle_average.md rename to src/content/docs/components/sensor/filter/throttle_average.mdx index afb04dfdc7..7f0348456c 100644 --- a/content/components/sensor/filter/throttle_average.md +++ b/src/content/docs/components/sensor/filter/throttle_average.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Throttle Average Filter" +description: "Sensor filter documentation" --- +### Throttle Average Filter + An average over the `specified time period`, potentially throttling incoming values. When this filter gets incoming values, it sums up all values and pushes out the average after the `specified time period` passed. There are two edge cases to consider within the `specified time period` : diff --git a/content/components/sensor/filter/throttle_with_priority.md b/src/content/docs/components/sensor/filter/throttle_with_priority.mdx similarity index 81% rename from content/components/sensor/filter/throttle_with_priority.md rename to src/content/docs/components/sensor/filter/throttle_with_priority.mdx index 7107d57872..b04bb01b43 100644 --- a/content/components/sensor/filter/throttle_with_priority.md +++ b/src/content/docs/components/sensor/filter/throttle_with_priority.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Throttle With Priority Filter" +description: "Sensor filter documentation" --- +### Throttle With Priority Filter + Throttle the incoming values unless they match a prioritized value. When this filter gets an incoming value, it first checks if it matches one of the prioritized values. If so, the value is passed through immediately. Otherwise, it diff --git a/content/components/sensor/filter/timeout.md b/src/content/docs/components/sensor/filter/timeout.mdx similarity index 90% rename from content/components/sensor/filter/timeout.md rename to src/content/docs/components/sensor/filter/timeout.mdx index c0ae5c669c..5cb8e79566 100644 --- a/content/components/sensor/filter/timeout.md +++ b/src/content/docs/components/sensor/filter/timeout.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "Timeout Filter" +description: "Sensor filter documentation" --- +### Timeout Filter + After the first value has been sent, if no subsequent value is published within the specified `timeout` period, send a templatable value which defaults to `NaN`. The value may also be set to `last`, which will result in the last diff --git a/content/components/sensor/filter/to_ntc_resistance.md b/src/content/docs/components/sensor/filter/to_ntc_resistance.mdx similarity index 92% rename from content/components/sensor/filter/to_ntc_resistance.md rename to src/content/docs/components/sensor/filter/to_ntc_resistance.mdx index 881ea1a404..d96c1bf4dc 100644 --- a/content/components/sensor/filter/to_ntc_resistance.md +++ b/src/content/docs/components/sensor/filter/to_ntc_resistance.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "To Ntc Resistance Filter" +description: "Sensor filter documentation" --- +### To Ntc Resistance Filter + Convert your sensor values available as temperature into corresponding resistance values using an NTC characteristic curve. @@ -57,7 +59,7 @@ To send the resistance value generated by this sensor to an output component, e. digital potentiometer or a DAC, the sensor automation [`on_value`](/components/sensor#sensor-on_value) can be used. This makes it possible, for example, to replace a physical NTC and thus make it `smart`. -An output component can accept values in the range of `0..1` (see [`output.set_level` Action](/components/output#output-set_level_action)), +An output component can accept values in the range of `0..1` (see [`output.set_level` Action](/components/output#outputset_level-action)), so that scaling with the actual resistance value of the simulated NTC is required. ```yaml diff --git a/content/components/sensor/filter/to_ntc_temperature.md b/src/content/docs/components/sensor/filter/to_ntc_temperature.mdx similarity index 93% rename from content/components/sensor/filter/to_ntc_temperature.md rename to src/content/docs/components/sensor/filter/to_ntc_temperature.mdx index a7198b9a09..33b0640e8f 100644 --- a/content/components/sensor/filter/to_ntc_temperature.md +++ b/src/content/docs/components/sensor/filter/to_ntc_temperature.mdx @@ -1,7 +1,9 @@ --- -description: "" -headless: true +title: "To Ntc Temperature Filter" +description: "Sensor filter documentation" --- +### To Ntc Temperature Filter + Convert your sensor values available as resistance values into corresponding temperatures using an NTC characteristic curve. diff --git a/content/components/sensor/fs3000.md b/src/content/docs/components/sensor/fs3000.mdx similarity index 79% rename from content/components/sensor/fs3000.md rename to src/content/docs/components/sensor/fs3000.mdx index 11129dbc2b..27403aafe4 100644 --- a/content/components/sensor/fs3000.md +++ b/src/content/docs/components/sensor/fs3000.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up the FS3000 Air Velocity sensor." title: "FS3000 Air Velocity Sensor" -params: - seo: - description: Instructions for setting up the FS3000 Air Velocity sensor. - image: fs3000.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The FS3000 Air Velocity sensor allows you to use your FS3000 ([datasheet](https://www.renesas.com/kr/en/document/dst/fs3000-datasheet?r=1395551), [sparkfun](https://www.sparkfun.com/products/18377)) sensors with ESPHome. -{{< img src="fs3000.jpg" alt="Image" caption="FS3000 Air Velocity Sensor. (Credit: [SparkFun](https://www.sparkfun.com/products/18377), image compressed)" width="30.0%" class="align-center" >}} +
    The FS3000 is a solid state air velocity sensor that communicates over over I²C. It is based on a MEMS thermopile sensor. There are two subtypes available: the FS3000-1005 measures air velocities between 0 meters/second and 7.23 meters/second, and the FS3000-1015 measures air velocities between 0 meters/second and 15 meters/second. @@ -37,5 +44,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "fs3000/fs3000.h" "fs3000/fs3000.h" >}} - [SparkFun FS3000 Library](https://github.com/sparkfun/SparkFun_FS3000_Arduino_Library) by [SparkFun](https://www.sparkfun.com/) +- diff --git a/content/components/sensor/gcja5.md b/src/content/docs/components/sensor/gcja5.mdx similarity index 92% rename from content/components/sensor/gcja5.md rename to src/content/docs/components/sensor/gcja5.mdx index 162196d2f5..71472da116 100644 --- a/content/components/sensor/gcja5.md +++ b/src/content/docs/components/sensor/gcja5.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Panasonic SN-GCJA5 Particulate matter sensors" title: "Panasonic SN-GCJA5 Particulate Matter Sensor" -params: - seo: - description: Instructions for setting up Panasonic SN-GCJA5 Particulate matter sensors - image: gcja5.svg --- +import APIRef from '@components/APIRef.astro'; + The `gcja5` sensor platform allows you to use your Panasonic SN-GCJA5 laser based particulate matter sensor ([datasheet](https://industrial.panasonic.com/ww/products/pt/dust-sensor/pm_laser)) @@ -63,6 +61,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/aqi" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "gcja5/gcja5.h" "gcja5/gcja5.h" >}} +- diff --git a/content/components/sensor/gdk101.md b/src/content/docs/components/sensor/gdk101.mdx similarity index 93% rename from content/components/sensor/gdk101.md rename to src/content/docs/components/sensor/gdk101.mdx index f0b45359bb..1367a27af9 100644 --- a/content/components/sensor/gdk101.md +++ b/src/content/docs/components/sensor/gdk101.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up GDK101 Gamma Radiation Sensor Module" title: "FTLab GDK101 Gamma Radiation Sensor Module" -params: - seo: - description: Instructions for setting up GDK101 Gamma Radiation Sensor Module - image: gdk101.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The **GDK101** sensor platform allows you to use your GDK101 sensor to monitor radiation levels at your place. The GDK101 can measure average dose rate per 1 and 10 minutes, it also detect vibrations that can disturb the measurement. @@ -33,7 +33,14 @@ The GDK101 requires setting up [I²C](/components/i2c) for data communication. | 0x1A | A0 Short, A1 Open | | 0x1B | A0 Open, A1 Open | -{{< img src="gdk101.jpg" alt="Image" caption="GDK101 Gamma Radiation Sensor Module." width="50.0%" class="align-center" >}} +
    ## Component/Hub @@ -156,7 +163,7 @@ text_sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "gdk101/gdk101.h" "gdk101/gdk101.h" >}} - [Data Sheet](https://www.eleparts.co.kr/data/goods_old/design/product_file/Hoon/AN_GDK101_V1.0_I2C.pdf) - [Application Notes](https://merona.blob.core.windows.net/radonftlab-web/GDK101.zip) - [Arduino Sensors for Everyone blog post](https://arduino.steamedu123.com/entry/GDK101-Radiation-Sensor) +- diff --git a/content/components/sensor/gl_r01.md b/src/content/docs/components/sensor/gl_r01.mdx similarity index 78% rename from content/components/sensor/gl_r01.md rename to src/content/docs/components/sensor/gl_r01.mdx index bf7dba7c02..16f02a2dc8 100644 --- a/content/components/sensor/gl_r01.md +++ b/src/content/docs/components/sensor/gl_r01.mdx @@ -3,6 +3,10 @@ description: "GL-R01 I²C - Time Of Flight Mini LiDAR Laser Ranging Sensor" title: "GL-R01 I²C - Time Of Flight Mini LiDAR Laser Ranging Sensor" --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `GL-R01 I²C` sensor platform allows you to use your GL-R01 I²C Time Of Flight Mini LiDAR Laser Ranging sensor with ESPHome. @@ -16,7 +20,14 @@ GL-R01 is sold in three versions - IIC (I²C), UART Automatic and UART Controlle This integration supports only IIC (I²C) version at the moment. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="gl_r01.jpg" alt="Image" caption="GL-R01 I²C - Time Of Flight Mini LiDAR Laser Ranging Sensor" width="50.0%" class="align-center" >}} +
    ```yaml sensor: @@ -41,5 +52,5 @@ I²C Configuration variables: - [Sensor Filters](/components/sensor#sensor-filters) - [I2C bus](/components/i2c) -- {{< apiref "gl_r01_i2c/gl_r01_i2c.h" "gl_r01_i2c/gl_r01_i2c.h" >}} -- {{< apiref "gl_r01_i2c/gl_r01_i2c.cpp" "gl_r01_i2c/gl_r01_i2c.cpp" >}} +- +- diff --git a/content/components/sensor/gp2y1010au0f.md b/src/content/docs/components/sensor/gp2y1010au0f.mdx similarity index 71% rename from content/components/sensor/gp2y1010au0f.md rename to src/content/docs/components/sensor/gp2y1010au0f.mdx index d6ba984205..dce6af94cc 100644 --- a/content/components/sensor/gp2y1010au0f.md +++ b/src/content/docs/components/sensor/gp2y1010au0f.mdx @@ -1,19 +1,17 @@ --- description: "Instructions for setting up Sharp GP2Y1010AU0F particulate matter sensor" title: "Sharp GP2Y1010AU0F PM2.5 Sensor" -params: - seo: - description: Instructions for setting up Sharp GP2Y1010AU0F particulate matter sensor - image: gp2y1010au0f.png --- +import APIRef from '@components/APIRef.astro'; + The `gp2y1010au0f` sensor platform allows you to use your Sharp GP2Y1010AU0F particulate matter sensor with ESPHome. -It is a very cheap (read: inaccurate) optical (infrared LED and phototransistor) sensor suitable for detecting fine particulate matter like dust and smoke. There are many much better sensors on the market and [supported by ESPHome](/search.html?q=Particulate), but this is one of the most common and cheapest ones you will find. +It is a very cheap (read: inaccurate) optical (infrared LED and phototransistor) sensor suitable for detecting fine particulate matter like dust and smoke. There are many much better sensors on the market and supported by ESPHome, but this is one of the most common and cheapest ones you will find. While the official [datasheet](https://global.sharp/products/device/lineup/data/pdf/datasheet/gp2y1010au_e.pdf) doesn't mention its sensing resolution (whether it can detect PM2.5 particle or not), some vendors (e.g., [Waveshare](https://www.waveshare.com/wiki/Dust_Sensor)) say it can detect particle larger than 0.8 μm in diameter. To make things easier, we'll assume it's capable of that and let the sensor use the PM2.5 device class, reporting in "µg/m³" with 0 accuracy decimals as default. -To use this sensor, you need to setup a voltage sensor source ({{< docref "adc" "ADC sensor" >}}, but for example also {{< docref "ads1115" "ADS1115" >}}) and pass it to the sensor with the `sensor` option, in order to measure the sensor's output voltage pulses; you also need a binary [Output Component](/components/output#output) to control the sensor's internal IR LED. +To use this sensor, you need to setup a voltage sensor source ([ADC sensor](/components/sensor/adc/), but for example also [ADS1115](/components/sensor/ads1115/)) and pass it to the sensor with the `sensor` option, in order to measure the sensor's output voltage pulses; you also need a binary [Output Component](/components/output/) to control the sensor's internal IR LED. ```yaml sensor: @@ -28,7 +26,7 @@ sensor: - **sensor** (**Required**, [ID](/guides/configuration-types#id)): The ADC sensor to measure the sensor's output voltage pulses from. - **adc_voltage_offset** (*Optional*, float): The voltage offset of the ADC sensor used for calibration. Defaults to `0`. - **adc_voltage_multiplier** (*Optional*, float): The voltage multiplier of the ADC sensor used for calibration. Defaults to `1.0`. -- **output** (**Required**, [ID](/guides/configuration-types#id)): The binary [Output Component](/components/output#output) to control the sensor's internal IR LED. +- **output** (**Required**, [ID](/guides/configuration-types#id)): The binary [Output Component](/components/output/) to control the sensor's internal IR LED. - All other options from [Sensor](/components/sensor). ## See Also @@ -37,6 +35,6 @@ sensor: - [Application note](https://global.sharp/products/device/lineup/data/pdf/datasheet/gp2y1010au_appl_e.pdf) - [Research notes by Chris Nafis](https://www.howmuchsnow.com/arduino/airquality/) - [Interfacing with Arduino](https://electropeak.com/learn/interfacing-gp2y1010au0f-optical-dust-sensor-module-with-arduino/) -- {{< docref "adc/" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "gp2y1010au0f/gp2y1010au0f.h" "gp2y1010au0f/gp2y1010au0f.h" >}} +- diff --git a/content/components/sensor/grove_gas_mc_v2.md b/src/content/docs/components/sensor/grove_gas_mc_v2.mdx similarity index 86% rename from content/components/sensor/grove_gas_mc_v2.md rename to src/content/docs/components/sensor/grove_gas_mc_v2.mdx index dc80e7606a..e3b5eba579 100644 --- a/content/components/sensor/grove_gas_mc_v2.md +++ b/src/content/docs/components/sensor/grove_gas_mc_v2.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up Grove Multichannel Gas Sensor V2 that" title: "Grove Multichannel Gas Sensor V2" -params: - seo: - description: Instructions for setting up Grove Multichannel Gas Sensor V2 that - image: grove-gas-mc-v2.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `grove_gas_mc_v2` sensor platform allows you to use your [Grove Multichannel GasSensor V2](https://wiki.seeedstudio.com/Grove-Multichannel-Gas-Sensor-V2) with ESPHome. It exposes 4 different gas sensors for qualitatively measuring Nitrogen Dioxide (NO2), Carbon Monoxide (CO), Ethanol (C2H5OH), and Volatile Organic @@ -18,7 +18,14 @@ Compounds (VOCs). > of measurement, such as PPM (parts per million). If you have known baseline readings > for any of the gases, [Sensor Filters](/components/sensor#sensor-filters) could be used to calibrate the raw readings. -{{< img src="grove-gas-mc-v2.png" alt="Image" caption="Grove Multichannel Gas Sensor V2" width="50.0%" class="align-center" >}} +
    The communication with this sensor is done via [I²C Bus](/components/i2c), so you need to have an `i2c:` section in your config for this integration to work. @@ -58,7 +65,7 @@ Advanced: - **address** (*Optional*, int): The [I²C](/components/i2c) address of the sensor. Defaults to `0x08` -{{< anchor "grove-gas-mc-v2-preheating" >}} + ## Preheating @@ -74,4 +81,4 @@ than 6 months. - [Sensor Filters](/components/sensor#sensor-filters) - [Grove Multichannel V2 Library](https://github.com/Seeed-Studio/Seeed_Arduino_MultiGas) -- {{< apiref "grove_gas_mc_v2/grove_gas_mc_v2.h" "grove_gas_mc_v2/grove_gas_mc_v2.h" >}} +- diff --git a/content/components/sensor/growatt_solar.md b/src/content/docs/components/sensor/growatt_solar.mdx similarity index 95% rename from content/components/sensor/growatt_solar.md rename to src/content/docs/components/sensor/growatt_solar.mdx index 65a5d53eaf..47026e7413 100644 --- a/content/components/sensor/growatt_solar.md +++ b/src/content/docs/components/sensor/growatt_solar.mdx @@ -1,15 +1,21 @@ --- description: "Instructions for setting up a Growatt inverter reading on modbus." title: "Growatt Solar" -params: - seo: - description: Instructions for setting up a Growatt inverter reading on modbus. - image: growatt.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `Growatt Inverter` sensor platform allows you to use growatt inverter data reading on modbus with ESPHome. -{{< img src="growatt.jpg" alt="Image" caption="Growatt Logo" width="50.0%" class="align-center" >}} +
    The communication with this component is done over a [UART bus](/components/uart) using [Modbus](/components/modbus#modbus). You must therefore have a `uart:` and `modbus:` entry in your configuration with both the TX and RX pins set diff --git a/content/components/sensor/haier.md b/src/content/docs/components/sensor/haier.mdx similarity index 92% rename from content/components/sensor/haier.md rename to src/content/docs/components/sensor/haier.mdx index e64f1456ab..b9592b0e3d 100644 --- a/content/components/sensor/haier.md +++ b/src/content/docs/components/sensor/haier.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for setting up additional sensors for Haier climate devices." title: "Haier Climate Sensors" -params: - seo: - description: Instructions for setting up additional sensors for Haier climate devices. - image: haier.svg --- +import { Image } from 'astro:assets'; + Additional sensors for Haier Climate device. **These sensors are supported only by the hOn protocol**. -{{< img src="haier-climate.jpg" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -78,5 +76,5 @@ sensor: ## See Also -- {{< docref "/components/climate/haier" "Haier Climate" >}} +- [Haier Climate](/components/climate/haier/) - [Sensor Filters](/components/sensor#sensor-filters) diff --git a/content/components/sensor/havells_solar.md b/src/content/docs/components/sensor/havells_solar.mdx similarity index 96% rename from content/components/sensor/havells_solar.md rename to src/content/docs/components/sensor/havells_solar.mdx index f811956d7b..f303e113bb 100644 --- a/content/components/sensor/havells_solar.md +++ b/src/content/docs/components/sensor/havells_solar.mdx @@ -1,17 +1,22 @@ --- description: "Instructions for setting up Havells inverter reading on modbus." title: "Havells Solar" -params: - seo: - description: Instructions for setting up Havells inverter reading on modbus. - image: havellsgti5000d_s.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import havellsgti5000dImg from './images/havellsgti5000d.jpg'; + The `Havells Inverter` sensor platform allows you to use Havells inverter data reading on modbus ([website](https://havells.com/business/discover-solar-solutions)) with ESPHome. -{{< img src="havellsgti5000d.jpg" alt="Image" caption="Havells On Grid Solar Inverter." width="50.0%" class="align-center" >}} +
    The communication with this component is done via a [UART](/components/uart) using [Modbus](/components/modbus#modbus). You must therefore have a `uart:` and `modbus:` entry in your configuration with both the TX and RX pins set diff --git a/content/components/sensor/hc8.md b/src/content/docs/components/sensor/hc8.mdx similarity index 87% rename from content/components/sensor/hc8.md rename to src/content/docs/components/sensor/hc8.mdx index 140533a43e..cefa156d4a 100644 --- a/content/components/sensor/hc8.md +++ b/src/content/docs/components/sensor/hc8.mdx @@ -1,15 +1,21 @@ --- description: "Instructions for setting up HC8 CO2 sensors" title: "HC8 CO₂ Sensor" -params: - seo: - description: Instructions for setting up HC8 CO2 sensors - image: hc8.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import hc8FullImg from './images/hc8-full.png'; +import APIRef from '@components/APIRef.astro'; + The `hc8` sensor platform allows you to use HC8 CO₂ sensors. -{{< img src="hc8-full.png" alt="HC8 CO₂ Sensor" caption="HC8 CO₂ Sensor." width="50.0%" class="align-center" >}} +
    As the communication with the HC8 sensor is done using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the @@ -39,7 +45,7 @@ sensor: - **warmup_time** (*Optional*, [Time](/guides/configuration-types#time)): The sensor has a warmup period during which it returns inaccurate readings (e.g., 500ppm, 505ppm). This setting discards readings until the warmup time has elapsed (returning `NaN` during warmup). The datasheet specifies a 10-minute preheating time for full accuracy, with 90% accuracy achieved after 3 minutes. Empirical evidence shows that reasonable values are usually returned after about 1 minute. Defaults to `75s`. -{{< anchor "hc8-calibrate_action" >}} + ## `hc8.calibrate` Action @@ -76,4 +82,4 @@ api: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "hc8/hc8.h" "hc8/hc8.h" >}} +- diff --git a/content/components/sensor/hdc1080.md b/src/content/docs/components/sensor/hdc1080.mdx similarity index 67% rename from content/components/sensor/hdc1080.md rename to src/content/docs/components/sensor/hdc1080.mdx index a2eb37e84e..9fa7512566 100644 --- a/content/components/sensor/hdc1080.md +++ b/src/content/docs/components/sensor/hdc1080.mdx @@ -1,21 +1,28 @@ --- description: "Instructions for setting up HDC1080 temperature and humidity sensors." title: "HDC1080 Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up HDC1080 temperature and humidity sensors. - image: hdc1080.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import hdc1080FullImg from './images/hdc1080-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The HDC1080 Temperature+Humidity sensor allows you to use your HDC1080 ([datasheet](http://www.ti.com/lit/ds/symlink/hdc1080.pdf), [Adafruit](https://www.adafruit.com/product/2635)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="hdc1080-full.jpg" alt="Image" caption="HDC1080 Temperature & Humidity Sensor. Image by [Adafruit](https://www.adafruit.com)." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -63,10 +70,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "hdc1080/hdc1080.h" "hdc1080/hdc1080.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [HDC1080 Library](https://github.com/closedcube/ClosedCube_HDC1080_Arduino) by [ClosedCube](https://www.tindie.com/stores/closedcube/) +- diff --git a/src/content/docs/components/sensor/hdc2010.mdx b/src/content/docs/components/sensor/hdc2010.mdx new file mode 100644 index 0000000000..4b08fa851c --- /dev/null +++ b/src/content/docs/components/sensor/hdc2010.mdx @@ -0,0 +1,58 @@ +--- +description: "Instructions for setting up HDC2010 temperature and humidity sensors." +title: "HDC2010 High Precision Temperature and Humidity Sensor" +--- + +import { Image } from 'astro:assets'; +import hdc2010FullImg from './images/hdc2010-full.png'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; +import Figure from '@components/Figure.astro'; + +The HDC2010 Temperature and Humidity sensor allows you to use your HDC2010 +([datasheet](https://www.ti.com/lit/ds/symlink/hdc2010.pdf), +[Itbrainpower](https://itbrainpower.net/a-gsm/Arduino-HDC2010-sensor_howto)) sensors with +ESPHome. The [I2C](/components/i2c/) is +required to be set up in your configuration for this sensor to work. + +
    + + + +```yaml +# Example configuration entry +sensor: + - platform: hdc2010 + temperature: + name: "Living Room Temperature" + humidity: + name: "Living Room Humidity" + update_interval: 60s +``` + +## Configuration variables + +- **temperature** (**Required**): The information for the temperature sensor. + + - All options from [Sensor](/components/sensor/). + +- **humidity** (**Required**): The information for the humidity sensor + + - All options from [Sensor](/components/sensor/). + +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. + +## See Also + +- [Sensor Filters](/components/sensor/#sensor-filters) +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- diff --git a/src/content/docs/components/sensor/hlw8012.mdx b/src/content/docs/components/sensor/hlw8012.mdx new file mode 100644 index 0000000000..a98d06cc0d --- /dev/null +++ b/src/content/docs/components/sensor/hlw8012.mdx @@ -0,0 +1,185 @@ +--- +description: "Instructions for setting up HLW8012 power sensors for the Sonoff Pow R1" +title: "HLW8012 Power Sensor" +--- + +import HLW8012Calculator from '@components/HLW8012Calculator.astro'; +import APIRef from '@components/APIRef.astro'; + +The `hlw8012` sensor platform allows you to use your HLW8012 voltage/current and power sensors +([datasheet](https://github.com/xoseperez/hlw8012/blob/master/docs/HLW8012.pdf)) sensors with +ESPHome. This sensor is commonly found in Sonoff POWs. CSE7759 and BL0937 are similar to HLW8012 +and work with this component. Beware that CSE7759B is different and should be used with the +[CSE7766](/components/sensor/cse7766/) component. + +> [!NOTE] +> SAFETY HAZARD: Some devices such as Sonoff POWs/Shelly/etc, have the digital GND connected directly to mains +> voltage so **the GPIOs become LIVE during normal operation**. Our advice is to mark these boards to prevent +> any use of the dangerous digital pins. + +This sensor has two data outputs which both encode values using the frequency of a modulated signal: CF and CF1. +CF's frequency is proportional to the (active) power measured and CF1 is proportional to the current/voltage. Using +the SEL pin, one can choose between which mode to use. + +ESPHome will continuously cycle the state of the SEL pin to measure current *and* voltage, though both cannot +be measured at the same exact points in time. + +```yaml +# Example configuration entry +sensor: + - platform: hlw8012 + sel_pin: GPIOXX + cf_pin: GPIOXX + cf1_pin: GPIOXX + current: + name: "HLW8012 Current" + voltage: + name: "HLW8012 Voltage" + power: + name: "HLW8012 Power" + energy: + name: "HLW8012 Energy" + update_interval: 60s +``` + +> [!NOTE] +> The configuration above should work for Sonoff POWs (R1). + +## Configuration variables + +- **sel_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The pin SEL is connected to. +- **cf_pin** (**Required**, [Pin](/guides/configuration-types#pin)): The pin CF is connected to. +- **cf1_pin** (**Required**, [Pin](/guides/configuration-types#pin)): The pin CF1 is connected to. +- **current** (*Optional*): Use the current value of the sensor in amperes. All options from + [Sensor](/components/sensor). + +- **power** (*Optional*): Use the (active) power value of the sensor in watts. All options from + [Sensor](/components/sensor). + +- **voltage** (*Optional*): Use the voltage value of the sensor in V (RMS). + All options from [Sensor](/components/sensor). + +- **energy** (*Optional*): Use the total energy value of the sensor in Wh. + All options from [Sensor](/components/sensor). + +- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. + +Advanced Options: + +- **current_resistor** (*Optional*, float): The value of the shunt resistor for current measurement. + Defaults to the Sonoff POW's value `0.001 ohm`. + +- **voltage_divider** (*Optional*, float): The value of the voltage divider on the board as `(R_upstream + R_downstream) / R_downstream`. + Defaults to the Sonoff POW's value `2351`. + +- **model** (*Optional*, string): The sensor model on the board, to set internal constant factors to convert pulses to measurements. + Possible values are `HLW8012`, `CSE7759`, `BL0937`. Defaults to `HLW8012`. + CSE7759 uses same constants and it also works with default. Must be set for BL0937 to be able to calibrate all three measurements at the same time. + +- **change_mode_every** (*Optional*, int): After how many updates to cycle between the current/voltage measurement mode. + Note that the first value after switching is discarded because it is often inaccurate. When set to `"never"` the measurement mode will stay at the + set `initial_mode`. Defaults to `8`. + +- **initial_mode** (*Optional*, string): The initial measurement mode. Defaults to `VOLTAGE`. + Possible initial measurement modes are `VOLTAGE` or `CURRENT`. + +## Permanent SEL Pin + +Some devices have the SEL pin permanently pulled high or low. If this is the case, you can configure +the initial measurement mode to match whichever mode the device uses, and disable mode switching. + +```yaml +# Example configuration entry for device with fixed measurement mode +sensor: + - platform: hlw8012 + sel_pin: GPIOXX + cf_pin: GPIOXX + cf1_pin: GPIOXX + current: + name: "HLW8012 Current" + voltage: + name: "HLW8012 Voltage" + power: + name: "HLW8012 Power" + update_interval: 60s + initial_mode: CURRENT + change_mode_every: "never" +``` + +## SEL Pin Inversion + +If using model `BL0937` the function of the SEL pin is inverted compared to default. When SEL=0 current is measured, +when SEL=1 voltage is measured. To accommodate this change use the following configuration: + +```yaml +# Example configuration entry for device BL0937 using inverted SEL pin functionality +sensor: + - platform: hlw8012 + model: BL0937 + sel_pin: + number: GPIOXX + inverted: true + cf_pin: GPIOXX + cf1_pin: GPIOXX + current: + name: "BL0937 Current" + voltage: + name: "BL0937 Voltage" + power: + name: "BL0937 Power" + update_interval: 60s +``` + +## Calibration + +What you need: + +- Your ESPHome power measurement plug +- A calibrated power meter that can measure voltage, current, power and power factor +- A large resistive load like an electric heater or kettle, ideally over 1000W + +Steps: + +- Find the currently used calibration values for `current_resistor` and `voltage_divider` in your device's YAML configuration or upload a new firmware with some known calibration values to the ESP. +- Plug the ESP power measurement plug into the calibrated power meter. +- Plug the load into the ESP plug. +- Turn on the load and make sure the power factor (PF) displayed on the power meter is 1.0. If it's not, you need to pick a different load. +- Wait for the readings to settle on both the power meter and the ESP. +- Write down the voltage reading of the power meter and the ESP at the same time. +- Write down the power reading of the power meter and the ESP at the same time. +- Write down the current reading of the power meter and the ESP at the same time. +- Use the calculator below to calculate the new calibration values for the ESP. These values will help it accurately measure power, voltage and current in the future. +- Upload the new values to the ESP. + + + +Example Config: + +```yaml +substitutions: + voltage_divider: "2351" + current_resistor: "0.001" + current_multiply: "1.0" + +sensor: + - platform: hlw8012 + current_resistor: ${current_resistor} + voltage_divider: ${voltage_divider} + current: + name: "HLW8012 Current" + filters: + - multiply: ${current_multiply} + voltage: + name: "HLW8012 Voltage" + power: + name: "HLW8012 Power" + energy: + name: "HLW8012 Energy" + update_interval: 60s +``` + +## See Also + +- [Sensor Filters](/components/sensor#sensor-filters) +- [HLW8012 Library](https://github.com/xoseperez/hlw8012) by [Xose Pérez](https://github.com/xoseperez) +- diff --git a/content/components/sensor/hlw8032.md b/src/content/docs/components/sensor/hlw8032.mdx similarity index 90% rename from content/components/sensor/hlw8032.md rename to src/content/docs/components/sensor/hlw8032.mdx index a06c283591..554effdcea 100644 --- a/content/components/sensor/hlw8032.md +++ b/src/content/docs/components/sensor/hlw8032.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up HLW8032 power sensors" title: "HLW8032 Power Sensor" -params: - seo: - description: Instructions for setting up HLW8032 power sensors - image: hlw8032.png --- +import { Image } from 'astro:assets'; +import hlw8032Img from './images/hlw8032.png'; +import APIRef from '@components/APIRef.astro'; + The `hlw8032` sensor platform allows you to use your HLW8032 voltage/current and power sensors ([datasheet](https://datasheet.lcsc.com/lcsc/2307271600_Hiliwei-Tech-HLW8032_C128023.pdf)) with ESPHome. This sensor is commonly found in M5Stack modules. -{{< img src="images/hlw8032.png" alt="HLW8032 board" width="50.0%" class="align-center" >}} +HLW8032 board > [!WARNING] > SAFETY HAZARD: Some devices have the digital GND connected directly to mains @@ -95,6 +95,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- [Pulse Meter](/components/sensor/pulse_meter) -- [Total Daily Energy](/components/sensor/total_daily_energy) -- {{< apiref "hlw8032/hlw8032.h" "hlw8032/hlw8032.h" >}} +- [Pulse Meter Sensor](/components/sensor/pulse_meter) +- [Total Daily Energy Sensor](/components/sensor/total_daily_energy) +- diff --git a/content/components/sensor/hm3301.md b/src/content/docs/components/sensor/hm3301.mdx similarity index 92% rename from content/components/sensor/hm3301.md rename to src/content/docs/components/sensor/hm3301.mdx index c172c49f49..5e5c25ef09 100644 --- a/content/components/sensor/hm3301.md +++ b/src/content/docs/components/sensor/hm3301.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up HM3301 Particulate matter sensor" title: "The Grove - Laser PM2.5 Sensor (HM3301)" -params: - seo: - description: Instructions for setting up HM3301 Particulate matter sensor - image: hm3301.jpg --- +import APIRef from '@components/APIRef.astro'; + The `HM3301` sensor platform allows you to use your HM3301 particulate matter sensor ([more info](http://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301)) @@ -104,7 +102,7 @@ sensor: ## See Also -- {{< docref "/components/sensor/aqi" >}} -- {{< docref "/components/sensor/sds011" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) +- [SDS011 Particulate Matter Sensor](/components/sensor/sds011/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "hm3301/hm3301.h" "hm3301/hm3301.h" >}} +- diff --git a/content/components/sensor/hmc5883l.md b/src/content/docs/components/sensor/hmc5883l.mdx similarity index 87% rename from content/components/sensor/hmc5883l.md rename to src/content/docs/components/sensor/hmc5883l.mdx index aa2d841434..4376ca4621 100644 --- a/content/components/sensor/hmc5883l.md +++ b/src/content/docs/components/sensor/hmc5883l.mdx @@ -1,20 +1,27 @@ --- description: "Instructions for setting up HMC5883L IMU compass sensors." title: "HMC5883L Magnetometer" -params: - seo: - description: Instructions for setting up HMC5883L IMU compass sensors. - image: hmc5883l.jpg --- -{{< anchor "hmc5883l" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + The `hmc5883l` allows you to use your HMC5883L triple-axis magnetometers ([datasheet](https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf), [Adafruit](https://www.adafruit.com/product/1746)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="hmc5883l.jpg" alt="Image" caption="HMC5883L Magnetometer." width="30.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -86,6 +93,6 @@ configure this amount. Possible values: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< apiref "hmc5883l/hmc5883l.h" "hmc5883l/hmc5883l.h" >}} +- [Template Sensor](/components/sensor/template/) - [HMC5883L Library](https://github.com/jarzebski/Arduino-HMC5883L) by [Korneliusz Jarzębski](https://github.com/jarzebski) +- diff --git a/content/components/sensor/homeassistant.md b/src/content/docs/components/sensor/homeassistant.mdx similarity index 79% rename from content/components/sensor/homeassistant.md rename to src/content/docs/components/sensor/homeassistant.mdx index b17f57d39a..cd6c746ff6 100644 --- a/content/components/sensor/homeassistant.md +++ b/src/content/docs/components/sensor/homeassistant.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up Home Assistant sensors with ESPHome that import states from your Home Assistant instance." title: "Home Assistant Sensor" -params: - seo: - description: Instructions for setting up Home Assistant sensors with ESPHome that import states from your Home Assistant instance. - image: home-assistant.svg --- +import APIRef from '@components/APIRef.astro'; + The `homeassistant` sensor platform allows you to create sensors that import -states from your Home Assistant instance using the {{< docref "/components/api" "native API" >}}. +states from your Home Assistant instance using the [native API](/components/api/). > [!NOTE] > Although you might not plan to *export* states from the node and you do not need an entity of the node @@ -36,7 +34,7 @@ sensor: > [!NOTE] > This component is only for numeral states. If you want to import arbitrary text states -> from Home Assistant, use the {{< docref "/components/text_sensor/homeassistant" "Home Assistant Text Sensor" >}}. +> from Home Assistant, use the [Home Assistant Text Sensor](/components/text_sensor/homeassistant/). ## Configuration variables @@ -56,4 +54,4 @@ sensor: - [Sensor Filters](/components/sensor#sensor-filters) - [Automation](/automations) -- {{< apiref "homeassistant/sensor/homeassistant_sensor.h" "homeassistant/sensor/homeassistant_sensor.h" >}} +- diff --git a/content/components/sensor/honeywell_hih_i2c.md b/src/content/docs/components/sensor/honeywell_hih_i2c.mdx similarity index 84% rename from content/components/sensor/honeywell_hih_i2c.md rename to src/content/docs/components/sensor/honeywell_hih_i2c.mdx index a76d0da1c8..ec6ca4642d 100644 --- a/content/components/sensor/honeywell_hih_i2c.md +++ b/src/content/docs/components/sensor/honeywell_hih_i2c.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Honeywell HumidIcon temperature and humidity sensors." title: "Honeywell HumidIcon (I2C HIH series) Temperature & Humidity Sensor" -params: - seo: - description: Instructions for setting up Honeywell HumidIcon temperature and humidity sensors. - image: honeywellhih.jpg --- +import APIRef from '@components/APIRef.astro'; + Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensors with ESPHome ([datasheet](https://prod-edam.honeywell.com/content/dam/honeywell-edam/sps/siot/en-us/products/sensors/humidity-with-temperature-sensors/common/documents/sps-siot-humidity-sensors-line-guide-009034-7-en-ciid-54931.pdf?download=false)). @@ -36,4 +34,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "honeywell_hih_i2c/honeywell_hih.h" "honeywell_hih_i2c/honeywell_hih.h" >}} +- diff --git a/content/components/sensor/honeywellabp.md b/src/content/docs/components/sensor/honeywellabp.mdx similarity index 86% rename from content/components/sensor/honeywellabp.md rename to src/content/docs/components/sensor/honeywellabp.mdx index aa6b726267..b9f1f95c70 100644 --- a/content/components/sensor/honeywellabp.md +++ b/src/content/docs/components/sensor/honeywellabp.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up Honeywell ABP Pressure sensors" title: "Honeywell ABP Pressure Sensors" -params: - seo: - description: Instructions for setting up Honeywell ABP Pressure sensors - image: honeywellabp.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `honeywellabp` sensor platform allows you to use your Honeywell ABP ([datasheet](https://prod-edam.honeywell.com/content/dam/honeywell-edam/sps/siot/en-us/products/sensors/pressure-sensors/board-mount-pressure-sensors/basic-abp-series/documents/sps-siot-basic-board-mount-pressure-abp-series-datasheet-32305128-ciid-155789.pdf?download=false), [Mouser](https://www.mouser.ca/new/honeywell/honeywell-abp-pressure-sensors/)) pressure and temperature sensors with ESPHome. The [SPI](/components/spi) is required to be set up in your configuration for this sensor to work -{{< img src="honeywellabp.jpg" alt="Image" caption="Honeywell ABP Pressure and Temperature Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -54,4 +61,4 @@ datasheet indicates that the sensor does not measure temperature. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "honeywellabp/honeywellabp.h" "honeywellabp/honeywellabp.h" >}} +- diff --git a/content/components/sensor/honeywellabp2_i2c.md b/src/content/docs/components/sensor/honeywellabp2_i2c.mdx similarity index 85% rename from content/components/sensor/honeywellabp2_i2c.md rename to src/content/docs/components/sensor/honeywellabp2_i2c.mdx index 2e435da79b..6e9dd74c23 100644 --- a/content/components/sensor/honeywellabp2_i2c.md +++ b/src/content/docs/components/sensor/honeywellabp2_i2c.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up Honeywell ABP2 Pressure sensors" title: "Honeywell ABP 2 Pressure Sensors" -params: - seo: - description: Instructions for setting up Honeywell ABP2 Pressure sensors - image: honeywellabp.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `honeywellabp2_i2c` sensor platform allows you to use your Honeywell ABP2 ([datasheet](https://prod-edam.honeywell.com/content/dam/honeywell-edam/sps/siot/en-us/products/sensors/pressure-sensors/board-mount-pressure-sensors/basic-abp2-series/documents/sps-siot-abp2-series-datasheet-32350268-en.pdf?download=false)) pressure and temperature sensors with ESPHome. The [I2C](/components/i2c) is required to be set up in your configuration for this sensor to work -{{< img src="honeywellabp.jpg" alt="Image" caption="Honeywell ABP Pressure and Temperature Sensor." width="50.0%" class="align-center" >}} +
    ```yaml sensor: @@ -51,4 +58,4 @@ datasheet indicates that the sensor does not measure temperature. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "honeywellabp/honeywellabp2.h" "honeywellabp/honeywellabp2.h" >}} +- diff --git a/content/components/sensor/hrxl_maxsonar_wr.md b/src/content/docs/components/sensor/hrxl_maxsonar_wr.mdx similarity index 73% rename from content/components/sensor/hrxl_maxsonar_wr.md rename to src/content/docs/components/sensor/hrxl_maxsonar_wr.mdx index 2646e1f322..794d09de04 100644 --- a/content/components/sensor/hrxl_maxsonar_wr.md +++ b/src/content/docs/components/sensor/hrxl_maxsonar_wr.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up MaxBotix HRXL or XL MaxSonar WR ultrasonic distance measurement sensors in ESPHome." title: "HRXL/XL MaxSonar WR Series" -params: - seo: - description: Instructions for setting up MaxBotix HRXL or XL MaxSonar WR ultrasonic distance measurement sensors in ESPHome. - image: hrxl_maxsonar_wr.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import hrxlMaxsonarWrFullImg from './images/hrxl_maxsonar_wr-full.jpg'; +import APIRef from '@components/APIRef.astro'; + This sensor allows you to use HRXL MaxSonar WR series ultrasonic sensors by MaxBotix ([datasheet](https://www.maxbotix.com/documents/HRXL-MaxSonar-WR_Datasheet.pdf)) or the XL MaxSonar WR series @@ -18,7 +19,12 @@ This sensor platform works with the **TTL versions** of those sensors and expect sensor's TTL pin to be wired to one of the ESP's input pins. Since these sensors read multiple times per second, filtering is highly recommended. -{{< img src="hrxl_maxsonar_wr-full.jpg" alt="Image" caption="MB7388 HRXL-MaxSonar-WRMLT Ultrasonic Distance Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -40,5 +46,5 @@ Advanced options: - [Sensor Filters](/components/sensor#sensor-filters) - [UART Bus](/components/uart) -- {{< docref "template/" >}} -- {{< apiref "hrxl_maxsonar_wr/hrxl_maxsonar_wr.h" "hrxl_maxsonar_wr/hrxl_maxsonar_wr.h" >}} +- [Template Sensor](/components/sensor/template/) +- diff --git a/content/components/sensor/hte501.md b/src/content/docs/components/sensor/hte501.mdx similarity index 70% rename from content/components/sensor/hte501.md rename to src/content/docs/components/sensor/hte501.mdx index bf31ea70e5..e80563fe95 100644 --- a/content/components/sensor/hte501.md +++ b/src/content/docs/components/sensor/hte501.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up HTE501 temperature and humidity sensors" title: "HTE501 Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up HTE501 temperature and humidity sensors - image: HTE501.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `hte501` sensor platform Temperature+Humidity sensor allows you to use your HTE501 ([datasheet](https://www.epluse.com/fileadmin/data/product/hte501/datasheet_HTE501.pdf), [E+E HTE501](https://www.epluse.com/products/humidity-instruments/humidity-sensing-elements/hte501/)) sensor with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="HTE501.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -44,9 +43,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "tee501/" >}} -- {{< docref "ee895/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< apiref "hte501/hte501.h" "hte501/hte501.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [TEE501 Temperature Sensor](/components/sensor/tee501/) +- [EE895 CO₂, Temperature and Pressure Sensor](/components/sensor/ee895/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- diff --git a/content/components/sensor/htu21d.md b/src/content/docs/components/sensor/htu21d.mdx similarity index 66% rename from content/components/sensor/htu21d.md rename to src/content/docs/components/sensor/htu21d.mdx index 254eadf31f..edf6dcbbdc 100644 --- a/content/components/sensor/htu21d.md +++ b/src/content/docs/components/sensor/htu21d.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up HTU21D temperature and humidity sensors." title: "HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor" -params: - seo: - description: Instructions for setting up HTU21D temperature and humidity sensors. - image: htu21d.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import htu21dFullImg from './images/htu21d-full.jpg'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The HTU21D Temperature & Humidity component allows you to use HTU21D, Si7021 and SHT21 sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. @@ -14,9 +16,14 @@ Example sensors: - ([Adafruit](https://www.adafruit.com/product/1899)) -{{< img src="htu21d-full.jpg" alt="Image" caption="HTU21D Temperature & Humidity Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -52,10 +59,10 @@ The heater may be enabled to help correct the reading; see the datasheet for mor ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "htu21d/htu21d.h" "htu21d/htu21d.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/htu31d.md b/src/content/docs/components/sensor/htu31d.mdx similarity index 54% rename from content/components/sensor/htu31d.md rename to src/content/docs/components/sensor/htu31d.mdx index 7a65e41f76..6f3872a5b9 100644 --- a/content/components/sensor/htu31d.md +++ b/src/content/docs/components/sensor/htu31d.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up HTU31D temperature and humidity sensors." title: "HTU31D Temperature & Humidity Sensor" -params: - seo: - description: Instructions for setting up HTU31D temperature and humidity sensors. - image: htu31d.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The HTU31D Temperature & Humidity component allows you to use HTU31D sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. @@ -14,9 +15,16 @@ Example sensors: - ([Adafruit](https://www.adafruit.com/product/4832)) -{{< img src="htu31d.jpg" alt="Image" caption="HTU31D Temperature & Humidity Sensor. Image by [Adafruit](https://www.adafruit.com)." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -41,11 +49,11 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "htu31d/htu31d.h" "htu31d/htu31d.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/hx711.md b/src/content/docs/components/sensor/hx711.mdx similarity index 81% rename from content/components/sensor/hx711.md rename to src/content/docs/components/sensor/hx711.mdx index 9aeaecb883..d579ef9193 100644 --- a/content/components/sensor/hx711.md +++ b/src/content/docs/components/sensor/hx711.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up HX711 load cell amplifiers with ESPHome" title: "HX711 Load Cell Amplifier" -params: - seo: - description: Instructions for setting up HX711 load cell amplifiers with ESPHome - image: hx711.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import hx711FullImg from './images/hx711-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `hx711` sensor platform allows you to use your HX711 load cell amplifier ([datasheet](https://www.mouser.com/ds/2/813/hx711_english-1022875.pdf), [SparkFun](https://www.sparkfun.com/products/13879)) with ESPHome -{{< img src="hx711-full.jpg" alt="Image" caption="HX711 Load Cell Amplifier. Image by [SparkFun](https://www.sparkfun.com) licensed and re-distributed under [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/)." width="60.0%" class="align-center" >}} +
    Connect `GND` to `GND`, `VCC` to `3.3V` and the other two `DOUT` (or `DT` for short) and `CLK` (or `SCK` ) to free GPIO pins. @@ -71,6 +77,6 @@ Replace the masses and values `120.0`, `810.0`, etc with your values. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "adc/" >}} -- {{< apiref "hx711/hx711.h" "hx711/hx711.h" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) - [HX711 Library](https://github.com/bogde/HX711) by [@bogde](https://github.com/bogde) +- diff --git a/content/components/sensor/hydreon_rgxx.md b/src/content/docs/components/sensor/hydreon_rgxx.mdx similarity index 90% rename from content/components/sensor/hydreon_rgxx.md rename to src/content/docs/components/sensor/hydreon_rgxx.mdx index fa62897842..a69904bfae 100644 --- a/content/components/sensor/hydreon_rgxx.md +++ b/src/content/docs/components/sensor/hydreon_rgxx.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up Hydreon rain sensors" title: "Hydreon Rain Sensor" -params: - seo: - description: Instructions for setting up Hydreon rain sensors - image: hydreon_rg9.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import hydreonRg9FullImg from './images/hydreon_rg9_full.jpg'; + The `hydreon_rgxx` sensor platform allows you to use rain sensors by Hydreon. Currently supported are the RG-9 and RG-15 sensors ([model comparison](https://rainsensors.com/products/model-comparison/)). These optical rain sensors use a UART connection at 3.3V. The [UART](/components/uart) is @@ -19,7 +19,12 @@ Supported firmware versions: [Device FAQ](https://rainsensors.com/support/rg-9-rg-15-faq/) -{{< img src="hydreon_rg9_full.jpg" alt="Image" caption="Hydreon RG-9 Rain Sensor. Image by [Hydreon](https://rainsensors.com/)." width="50.0%" class="align-center" >}} +
    ```yaml # Example RG-9 entry @@ -100,7 +105,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "../binary_sensor/hydreon_rgxx" >}} +- [Hydreon Rain Sensor Binary Sensor](/components/binary_sensor/hydreon_rgxx/) - [Hydreon RG-9](https://rainsensors.com/products/rg-9/) - [Hydreon RG-15](https://rainsensors.com/products/rg-15/) diff --git a/content/components/sensor/hyt271.md b/src/content/docs/components/sensor/hyt271.mdx similarity index 85% rename from content/components/sensor/hyt271.md rename to src/content/docs/components/sensor/hyt271.mdx index 05b0865062..b30fb600e2 100644 --- a/content/components/sensor/hyt271.md +++ b/src/content/docs/components/sensor/hyt271.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up HYT271 temperature and humidity sensors." title: "HYT271 Temperature & Humidity Sensor" -params: - seo: - description: Instructions for setting up HYT271 temperature and humidity sensors. - image: hyt271.jpg --- +import APIRef from '@components/APIRef.astro'; + The HYT271 Temperature & Humidity sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. @@ -37,5 +35,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "hyt271/hyt271.h" "hyt271/hyt271.h" >}} - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/iaqcore.md b/src/content/docs/components/sensor/iaqcore.mdx similarity index 82% rename from content/components/sensor/iaqcore.md rename to src/content/docs/components/sensor/iaqcore.mdx index 7c344130c8..0eb45f290c 100644 --- a/content/components/sensor/iaqcore.md +++ b/src/content/docs/components/sensor/iaqcore.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up the iAQ-Core sensor." title: "AMS iAQ-Core Indoor Air Quality Sensor" -params: - seo: - description: Instructions for setting up the iAQ-Core sensor. - image: iaqcore.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The AMS iAQ-Core sensor allows you to use your ([datasheet](https://www.digikey.com/en/htmldatasheets/production/1723318/0/0/1/iaq-core)) sensors with ESPHome. -{{< img src="iaqcore.jpg" alt="Image" caption="AMS iAQ-Core Indoor Air Quality Sensor." width="30.0%" class="align-center" >}} +
    The iAQ-Core sensor module is used to measure VOC levels and provide CO2 equivalent and TVOC equivalent predictions. The data is available via I²C bus. @@ -43,4 +49,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "/components/sensor" >}} +- [Sensor Component](/components/sensor/) diff --git a/content/components/sensor/images/LC709203f_battery_markings.jpg b/src/content/docs/components/sensor/images/LC709203f_battery_markings.jpg similarity index 100% rename from content/components/sensor/images/LC709203f_battery_markings.jpg rename to src/content/docs/components/sensor/images/LC709203f_battery_markings.jpg diff --git a/content/components/sensor/images/LC709203f_battery_profiles.jpg b/src/content/docs/components/sensor/images/LC709203f_battery_profiles.jpg similarity index 100% rename from content/components/sensor/images/LC709203f_battery_profiles.jpg rename to src/content/docs/components/sensor/images/LC709203f_battery_profiles.jpg diff --git a/content/components/sensor/images/LC709203f_feather_product_image.jpg b/src/content/docs/components/sensor/images/LC709203f_feather_product_image.jpg similarity index 100% rename from content/components/sensor/images/LC709203f_feather_product_image.jpg rename to src/content/docs/components/sensor/images/LC709203f_feather_product_image.jpg diff --git a/content/components/sensor/images/LC709203f_product_image.jpg b/src/content/docs/components/sensor/images/LC709203f_product_image.jpg similarity index 100% rename from content/components/sensor/images/LC709203f_product_image.jpg rename to src/content/docs/components/sensor/images/LC709203f_product_image.jpg diff --git a/content/components/sensor/images/LC709203f_thermistor_connection.jpg b/src/content/docs/components/sensor/images/LC709203f_thermistor_connection.jpg similarity index 100% rename from content/components/sensor/images/LC709203f_thermistor_connection.jpg rename to src/content/docs/components/sensor/images/LC709203f_thermistor_connection.jpg diff --git a/content/components/sensor/images/LC709203f_ui.jpg b/src/content/docs/components/sensor/images/LC709203f_ui.jpg similarity index 100% rename from content/components/sensor/images/LC709203f_ui.jpg rename to src/content/docs/components/sensor/images/LC709203f_ui.jpg diff --git a/content/components/sensor/images/a01nyub-full.jpg b/src/content/docs/components/sensor/images/a01nyub-full.jpg similarity index 100% rename from content/components/sensor/images/a01nyub-full.jpg rename to src/content/docs/components/sensor/images/a01nyub-full.jpg diff --git a/content/components/sensor/images/a02yyuw-full.jpg b/src/content/docs/components/sensor/images/a02yyuw-full.jpg similarity index 100% rename from content/components/sensor/images/a02yyuw-full.jpg rename to src/content/docs/components/sensor/images/a02yyuw-full.jpg diff --git a/content/components/sensor/images/adc-ui.png b/src/content/docs/components/sensor/images/adc-ui.png similarity index 100% rename from content/components/sensor/images/adc-ui.png rename to src/content/docs/components/sensor/images/adc-ui.png diff --git a/content/components/sensor/images/ads1115-full.jpg b/src/content/docs/components/sensor/images/ads1115-full.jpg similarity index 100% rename from content/components/sensor/images/ads1115-full.jpg rename to src/content/docs/components/sensor/images/ads1115-full.jpg diff --git a/content/components/sensor/images/ads1115-ui.png b/src/content/docs/components/sensor/images/ads1115-ui.png similarity index 100% rename from content/components/sensor/images/ads1115-ui.png rename to src/content/docs/components/sensor/images/ads1115-ui.png diff --git a/content/components/sensor/images/ads1118-full.jpg b/src/content/docs/components/sensor/images/ads1118-full.jpg similarity index 100% rename from content/components/sensor/images/ads1118-full.jpg rename to src/content/docs/components/sensor/images/ads1118-full.jpg diff --git a/content/components/sensor/images/aht10-full.jpg b/src/content/docs/components/sensor/images/aht10-full.jpg similarity index 100% rename from content/components/sensor/images/aht10-full.jpg rename to src/content/docs/components/sensor/images/aht10-full.jpg diff --git a/content/components/sensor/images/airthings_wave_mini.jpg b/src/content/docs/components/sensor/images/airthings_wave_mini.jpg similarity index 100% rename from content/components/sensor/images/airthings_wave_mini.jpg rename to src/content/docs/components/sensor/images/airthings_wave_mini.jpg diff --git a/content/components/sensor/images/airthings_wave_plus.jpg b/src/content/docs/components/sensor/images/airthings_wave_plus.jpg similarity index 100% rename from content/components/sensor/images/airthings_wave_plus.jpg rename to src/content/docs/components/sensor/images/airthings_wave_plus.jpg diff --git a/content/components/sensor/images/airthings_wave_radon.jpg b/src/content/docs/components/sensor/images/airthings_wave_radon.jpg similarity index 100% rename from content/components/sensor/images/airthings_wave_radon.jpg rename to src/content/docs/components/sensor/images/airthings_wave_radon.jpg diff --git a/content/components/sensor/images/am2315c-full.jpg b/src/content/docs/components/sensor/images/am2315c-full.jpg similarity index 100% rename from content/components/sensor/images/am2315c-full.jpg rename to src/content/docs/components/sensor/images/am2315c-full.jpg diff --git a/content/components/sensor/images/am2320-full.jpg b/src/content/docs/components/sensor/images/am2320-full.jpg similarity index 100% rename from content/components/sensor/images/am2320-full.jpg rename to src/content/docs/components/sensor/images/am2320-full.jpg diff --git a/content/components/sensor/images/apds9960-full.jpg b/src/content/docs/components/sensor/images/apds9960-full.jpg similarity index 100% rename from content/components/sensor/images/apds9960-full.jpg rename to src/content/docs/components/sensor/images/apds9960-full.jpg diff --git a/content/components/sensor/images/as5600-full.jpg b/src/content/docs/components/sensor/images/as5600-full.jpg similarity index 100% rename from content/components/sensor/images/as5600-full.jpg rename to src/content/docs/components/sensor/images/as5600-full.jpg diff --git a/content/components/sensor/images/as5600-magnet-position.png b/src/content/docs/components/sensor/images/as5600-magnet-position.png similarity index 100% rename from content/components/sensor/images/as5600-magnet-position.png rename to src/content/docs/components/sensor/images/as5600-magnet-position.png diff --git a/content/components/sensor/images/as5600-ui-derived.jpg b/src/content/docs/components/sensor/images/as5600-ui-derived.jpg similarity index 100% rename from content/components/sensor/images/as5600-ui-derived.jpg rename to src/content/docs/components/sensor/images/as5600-ui-derived.jpg diff --git a/content/components/sensor/images/as5600-ui.jpg b/src/content/docs/components/sensor/images/as5600-ui.jpg similarity index 100% rename from content/components/sensor/images/as5600-ui.jpg rename to src/content/docs/components/sensor/images/as5600-ui.jpg diff --git a/content/components/sensor/images/as7341-full.jpg b/src/content/docs/components/sensor/images/as7341-full.jpg similarity index 100% rename from content/components/sensor/images/as7341-full.jpg rename to src/content/docs/components/sensor/images/as7341-full.jpg diff --git a/content/components/sensor/images/athom-em2.png b/src/content/docs/components/sensor/images/athom-em2.png similarity index 100% rename from content/components/sensor/images/athom-em2.png rename to src/content/docs/components/sensor/images/athom-em2.png diff --git a/content/components/sensor/images/athom-em6.png b/src/content/docs/components/sensor/images/athom-em6.png similarity index 100% rename from content/components/sensor/images/athom-em6.png rename to src/content/docs/components/sensor/images/athom-em6.png diff --git a/content/components/sensor/images/atm90e32-cs-2chan-full.jpg b/src/content/docs/components/sensor/images/atm90e32-cs-2chan-full.jpg similarity index 100% rename from content/components/sensor/images/atm90e32-cs-2chan-full.jpg rename to src/content/docs/components/sensor/images/atm90e32-cs-2chan-full.jpg diff --git a/content/components/sensor/images/atm90e32-cs-6chan-full.jpg b/src/content/docs/components/sensor/images/atm90e32-cs-6chan-full.jpg similarity index 100% rename from content/components/sensor/images/atm90e32-cs-6chan-full.jpg rename to src/content/docs/components/sensor/images/atm90e32-cs-6chan-full.jpg diff --git a/content/components/sensor/images/bh1750-full.jpg b/src/content/docs/components/sensor/images/bh1750-full.jpg similarity index 100% rename from content/components/sensor/images/bh1750-full.jpg rename to src/content/docs/components/sensor/images/bh1750-full.jpg diff --git a/content/components/sensor/images/bh1750-ui.png b/src/content/docs/components/sensor/images/bh1750-ui.png similarity index 100% rename from content/components/sensor/images/bh1750-ui.png rename to src/content/docs/components/sensor/images/bh1750-ui.png diff --git a/content/components/sensor/images/bh1900nux-evk-001.png b/src/content/docs/components/sensor/images/bh1900nux-evk-001.png similarity index 100% rename from content/components/sensor/images/bh1900nux-evk-001.png rename to src/content/docs/components/sensor/images/bh1900nux-evk-001.png diff --git a/content/components/sensor/images/bl0940-cal.png b/src/content/docs/components/sensor/images/bl0940-cal.png similarity index 100% rename from content/components/sensor/images/bl0940-cal.png rename to src/content/docs/components/sensor/images/bl0940-cal.png diff --git a/content/components/sensor/images/bme280-full.jpg b/src/content/docs/components/sensor/images/bme280-full.jpg similarity index 100% rename from content/components/sensor/images/bme280-full.jpg rename to src/content/docs/components/sensor/images/bme280-full.jpg diff --git a/content/components/sensor/images/bme680-bsec-ui.png b/src/content/docs/components/sensor/images/bme680-bsec-ui.png similarity index 100% rename from content/components/sensor/images/bme680-bsec-ui.png rename to src/content/docs/components/sensor/images/bme680-bsec-ui.png diff --git a/content/components/sensor/images/bme680-full.jpg b/src/content/docs/components/sensor/images/bme680-full.jpg similarity index 100% rename from content/components/sensor/images/bme680-full.jpg rename to src/content/docs/components/sensor/images/bme680-full.jpg diff --git a/content/components/sensor/images/bme680-ui.png b/src/content/docs/components/sensor/images/bme680-ui.png similarity index 100% rename from content/components/sensor/images/bme680-ui.png rename to src/content/docs/components/sensor/images/bme680-ui.png diff --git a/content/components/sensor/images/bmi160-full.jpg b/src/content/docs/components/sensor/images/bmi160-full.jpg similarity index 100% rename from content/components/sensor/images/bmi160-full.jpg rename to src/content/docs/components/sensor/images/bmi160-full.jpg diff --git a/content/components/sensor/images/bmi160-ui.png b/src/content/docs/components/sensor/images/bmi160-ui.png similarity index 100% rename from content/components/sensor/images/bmi160-ui.png rename to src/content/docs/components/sensor/images/bmi160-ui.png diff --git a/content/components/sensor/images/bmp180-full.jpg b/src/content/docs/components/sensor/images/bmp180-full.jpg similarity index 100% rename from content/components/sensor/images/bmp180-full.jpg rename to src/content/docs/components/sensor/images/bmp180-full.jpg diff --git a/content/components/sensor/images/bmp280-full.jpg b/src/content/docs/components/sensor/images/bmp280-full.jpg similarity index 100% rename from content/components/sensor/images/bmp280-full.jpg rename to src/content/docs/components/sensor/images/bmp280-full.jpg diff --git a/content/components/sensor/images/ccs811-full.jpg b/src/content/docs/components/sensor/images/ccs811-full.jpg similarity index 100% rename from content/components/sensor/images/ccs811-full.jpg rename to src/content/docs/components/sensor/images/ccs811-full.jpg diff --git a/content/components/sensor/images/ct_clamp-ui.png b/src/content/docs/components/sensor/images/ct_clamp-ui.png similarity index 100% rename from content/components/sensor/images/ct_clamp-ui.png rename to src/content/docs/components/sensor/images/ct_clamp-ui.png diff --git a/content/components/sensor/images/daly_bms_example.png b/src/content/docs/components/sensor/images/daly_bms_example.png similarity index 100% rename from content/components/sensor/images/daly_bms_example.png rename to src/content/docs/components/sensor/images/daly_bms_example.png diff --git a/content/components/sensor/images/daly_bms_pinout.png b/src/content/docs/components/sensor/images/daly_bms_pinout.png similarity index 100% rename from content/components/sensor/images/daly_bms_pinout.png rename to src/content/docs/components/sensor/images/daly_bms_pinout.png diff --git a/content/components/sensor/images/dht-full.jpg b/src/content/docs/components/sensor/images/dht-full.jpg similarity index 100% rename from content/components/sensor/images/dht-full.jpg rename to src/content/docs/components/sensor/images/dht-full.jpg diff --git a/content/components/sensor/images/dht12-full.jpg b/src/content/docs/components/sensor/images/dht12-full.jpg similarity index 100% rename from content/components/sensor/images/dht12-full.jpg rename to src/content/docs/components/sensor/images/dht12-full.jpg diff --git a/content/components/sensor/images/dps310-full.jpg b/src/content/docs/components/sensor/images/dps310-full.jpg similarity index 100% rename from content/components/sensor/images/dps310-full.jpg rename to src/content/docs/components/sensor/images/dps310-full.jpg diff --git a/content/components/sensor/images/dsmr-request-pin-circuit-example.png b/src/content/docs/components/sensor/images/dsmr-request-pin-circuit-example.png similarity index 100% rename from content/components/sensor/images/dsmr-request-pin-circuit-example.png rename to src/content/docs/components/sensor/images/dsmr-request-pin-circuit-example.png diff --git a/content/components/sensor/images/duty_cycle-ui.png b/src/content/docs/components/sensor/images/duty_cycle-ui.png similarity index 100% rename from content/components/sensor/images/duty_cycle-ui.png rename to src/content/docs/components/sensor/images/duty_cycle-ui.png diff --git a/content/components/sensor/images/eco2-tvoc.png b/src/content/docs/components/sensor/images/eco2-tvoc.png similarity index 100% rename from content/components/sensor/images/eco2-tvoc.png rename to src/content/docs/components/sensor/images/eco2-tvoc.png diff --git a/content/components/sensor/images/havellsgti5000d.jpg b/src/content/docs/components/sensor/images/havellsgti5000d.jpg similarity index 100% rename from content/components/sensor/images/havellsgti5000d.jpg rename to src/content/docs/components/sensor/images/havellsgti5000d.jpg diff --git a/content/components/sensor/images/hc8-full.png b/src/content/docs/components/sensor/images/hc8-full.png similarity index 100% rename from content/components/sensor/images/hc8-full.png rename to src/content/docs/components/sensor/images/hc8-full.png diff --git a/content/components/sensor/images/hdc1080-full.jpg b/src/content/docs/components/sensor/images/hdc1080-full.jpg similarity index 100% rename from content/components/sensor/images/hdc1080-full.jpg rename to src/content/docs/components/sensor/images/hdc1080-full.jpg diff --git a/content/components/sensor/images/hdc2010-full.png b/src/content/docs/components/sensor/images/hdc2010-full.png similarity index 100% rename from content/components/sensor/images/hdc2010-full.png rename to src/content/docs/components/sensor/images/hdc2010-full.png diff --git a/content/components/sensor/images/hlw8032.png b/src/content/docs/components/sensor/images/hlw8032.png similarity index 100% rename from content/components/sensor/images/hlw8032.png rename to src/content/docs/components/sensor/images/hlw8032.png diff --git a/content/components/sensor/images/hrxl_maxsonar_wr-full.jpg b/src/content/docs/components/sensor/images/hrxl_maxsonar_wr-full.jpg similarity index 100% rename from content/components/sensor/images/hrxl_maxsonar_wr-full.jpg rename to src/content/docs/components/sensor/images/hrxl_maxsonar_wr-full.jpg diff --git a/content/components/sensor/images/htu21d-full.jpg b/src/content/docs/components/sensor/images/htu21d-full.jpg similarity index 100% rename from content/components/sensor/images/htu21d-full.jpg rename to src/content/docs/components/sensor/images/htu21d-full.jpg diff --git a/content/components/sensor/images/hx711-full.jpg b/src/content/docs/components/sensor/images/hx711-full.jpg similarity index 100% rename from content/components/sensor/images/hx711-full.jpg rename to src/content/docs/components/sensor/images/hx711-full.jpg diff --git a/content/components/sensor/images/hydreon_rg9_full.jpg b/src/content/docs/components/sensor/images/hydreon_rg9_full.jpg similarity index 100% rename from content/components/sensor/images/hydreon_rg9_full.jpg rename to src/content/docs/components/sensor/images/hydreon_rg9_full.jpg diff --git a/content/components/sensor/images/ikea-vindriktning.jpg b/src/content/docs/components/sensor/images/ikea-vindriktning.jpg similarity index 100% rename from content/components/sensor/images/ikea-vindriktning.jpg rename to src/content/docs/components/sensor/images/ikea-vindriktning.jpg diff --git a/content/components/sensor/images/ina219-full.jpg b/src/content/docs/components/sensor/images/ina219-full.jpg similarity index 100% rename from content/components/sensor/images/ina219-full.jpg rename to src/content/docs/components/sensor/images/ina219-full.jpg diff --git a/content/components/sensor/images/ina219-ui.png b/src/content/docs/components/sensor/images/ina219-ui.png similarity index 100% rename from content/components/sensor/images/ina219-ui.png rename to src/content/docs/components/sensor/images/ina219-ui.png diff --git a/content/components/sensor/images/ina226-full.jpg b/src/content/docs/components/sensor/images/ina226-full.jpg similarity index 100% rename from content/components/sensor/images/ina226-full.jpg rename to src/content/docs/components/sensor/images/ina226-full.jpg diff --git a/content/components/sensor/images/ina228-full.jpg b/src/content/docs/components/sensor/images/ina228-full.jpg similarity index 100% rename from content/components/sensor/images/ina228-full.jpg rename to src/content/docs/components/sensor/images/ina228-full.jpg diff --git a/content/components/sensor/images/ina260-full.png b/src/content/docs/components/sensor/images/ina260-full.png similarity index 100% rename from content/components/sensor/images/ina260-full.png rename to src/content/docs/components/sensor/images/ina260-full.png diff --git a/content/components/sensor/images/ina3221-full.jpg b/src/content/docs/components/sensor/images/ina3221-full.jpg similarity index 100% rename from content/components/sensor/images/ina3221-full.jpg rename to src/content/docs/components/sensor/images/ina3221-full.jpg diff --git a/content/components/sensor/images/ina3221-pins.jpg b/src/content/docs/components/sensor/images/ina3221-pins.jpg similarity index 100% rename from content/components/sensor/images/ina3221-pins.jpg rename to src/content/docs/components/sensor/images/ina3221-pins.jpg diff --git a/content/components/sensor/images/ina3221-ui.png b/src/content/docs/components/sensor/images/ina3221-ui.png similarity index 100% rename from content/components/sensor/images/ina3221-ui.png rename to src/content/docs/components/sensor/images/ina3221-ui.png diff --git a/content/components/sensor/images/inkbird_isbth1_mini-full.jpg b/src/content/docs/components/sensor/images/inkbird_isbth1_mini-full.jpg similarity index 100% rename from content/components/sensor/images/inkbird_isbth1_mini-full.jpg rename to src/content/docs/components/sensor/images/inkbird_isbth1_mini-full.jpg diff --git a/content/components/sensor/images/inkbird_isbth1_mini-ui.png b/src/content/docs/components/sensor/images/inkbird_isbth1_mini-ui.png similarity index 100% rename from content/components/sensor/images/inkbird_isbth1_mini-ui.png rename to src/content/docs/components/sensor/images/inkbird_isbth1_mini-ui.png diff --git a/content/components/sensor/images/internal_temperature-ui.png b/src/content/docs/components/sensor/images/internal_temperature-ui.png similarity index 100% rename from content/components/sensor/images/internal_temperature-ui.png rename to src/content/docs/components/sensor/images/internal_temperature-ui.png diff --git a/content/components/sensor/images/jsn-sr04t-v3-mode-select-pads.jpg b/src/content/docs/components/sensor/images/jsn-sr04t-v3-mode-select-pads.jpg similarity index 100% rename from content/components/sensor/images/jsn-sr04t-v3-mode-select-pads.jpg rename to src/content/docs/components/sensor/images/jsn-sr04t-v3-mode-select-pads.jpg diff --git a/content/components/sensor/images/jst6pin.png b/src/content/docs/components/sensor/images/jst6pin.png similarity index 100% rename from content/components/sensor/images/jst6pin.png rename to src/content/docs/components/sensor/images/jst6pin.png diff --git a/content/components/sensor/images/kamstrup_kmp_holder.svg b/src/content/docs/components/sensor/images/kamstrup_kmp_holder.svg similarity index 100% rename from content/components/sensor/images/kamstrup_kmp_holder.svg rename to src/content/docs/components/sensor/images/kamstrup_kmp_holder.svg diff --git a/content/components/sensor/images/kamstrup_kmp_sch.svg b/src/content/docs/components/sensor/images/kamstrup_kmp_sch.svg similarity index 100% rename from content/components/sensor/images/kamstrup_kmp_sch.svg rename to src/content/docs/components/sensor/images/kamstrup_kmp_sch.svg diff --git a/content/components/sensor/images/ld2410-card.png b/src/content/docs/components/sensor/images/ld2410-card.png similarity index 100% rename from content/components/sensor/images/ld2410-card.png rename to src/content/docs/components/sensor/images/ld2410-card.png diff --git a/content/components/sensor/images/ld2412.png b/src/content/docs/components/sensor/images/ld2412.png similarity index 100% rename from content/components/sensor/images/ld2412.png rename to src/content/docs/components/sensor/images/ld2412.png diff --git a/content/components/sensor/images/ltr303-full.jpg b/src/content/docs/components/sensor/images/ltr303-full.jpg similarity index 100% rename from content/components/sensor/images/ltr303-full.jpg rename to src/content/docs/components/sensor/images/ltr303-full.jpg diff --git a/content/components/sensor/images/ltr303-spectral.png b/src/content/docs/components/sensor/images/ltr303-spectral.png similarity index 100% rename from content/components/sensor/images/ltr303-spectral.png rename to src/content/docs/components/sensor/images/ltr303-spectral.png diff --git a/content/components/sensor/images/ltr303-ui.png b/src/content/docs/components/sensor/images/ltr303-ui.png similarity index 100% rename from content/components/sensor/images/ltr303-ui.png rename to src/content/docs/components/sensor/images/ltr303-ui.png diff --git a/content/components/sensor/images/ltr390-full.jpg b/src/content/docs/components/sensor/images/ltr390-full.jpg similarity index 100% rename from content/components/sensor/images/ltr390-full.jpg rename to src/content/docs/components/sensor/images/ltr390-full.jpg diff --git a/content/components/sensor/images/ltr501-full.jpg b/src/content/docs/components/sensor/images/ltr501-full.jpg similarity index 100% rename from content/components/sensor/images/ltr501-full.jpg rename to src/content/docs/components/sensor/images/ltr501-full.jpg diff --git a/content/components/sensor/images/ltr501-ui.png b/src/content/docs/components/sensor/images/ltr501-ui.png similarity index 100% rename from content/components/sensor/images/ltr501-ui.png rename to src/content/docs/components/sensor/images/ltr501-ui.png diff --git a/content/components/sensor/images/m5stack_8angle.jpg b/src/content/docs/components/sensor/images/m5stack_8angle.jpg similarity index 100% rename from content/components/sensor/images/m5stack_8angle.jpg rename to src/content/docs/components/sensor/images/m5stack_8angle.jpg diff --git a/content/components/sensor/images/max31856-full.jpg b/src/content/docs/components/sensor/images/max31856-full.jpg similarity index 100% rename from content/components/sensor/images/max31856-full.jpg rename to src/content/docs/components/sensor/images/max31856-full.jpg diff --git a/content/components/sensor/images/max31865-full.jpg b/src/content/docs/components/sensor/images/max31865-full.jpg similarity index 100% rename from content/components/sensor/images/max31865-full.jpg rename to src/content/docs/components/sensor/images/max31865-full.jpg diff --git a/content/components/sensor/images/max6675-full.jpg b/src/content/docs/components/sensor/images/max6675-full.jpg similarity index 100% rename from content/components/sensor/images/max6675-full.jpg rename to src/content/docs/components/sensor/images/max6675-full.jpg diff --git a/content/components/sensor/images/mcp3221.png b/src/content/docs/components/sensor/images/mcp3221.png similarity index 100% rename from content/components/sensor/images/mcp3221.png rename to src/content/docs/components/sensor/images/mcp3221.png diff --git a/content/components/sensor/images/mcp9808-full.jpg b/src/content/docs/components/sensor/images/mcp9808-full.jpg similarity index 100% rename from content/components/sensor/images/mcp9808-full.jpg rename to src/content/docs/components/sensor/images/mcp9808-full.jpg diff --git a/content/components/sensor/images/mhz19-full.jpg b/src/content/docs/components/sensor/images/mhz19-full.jpg similarity index 100% rename from content/components/sensor/images/mhz19-full.jpg rename to src/content/docs/components/sensor/images/mhz19-full.jpg diff --git a/content/components/sensor/images/mhz19-pins.jpg b/src/content/docs/components/sensor/images/mhz19-pins.jpg similarity index 100% rename from content/components/sensor/images/mhz19-pins.jpg rename to src/content/docs/components/sensor/images/mhz19-pins.jpg diff --git a/content/components/sensor/images/mlx90393-full.jpg b/src/content/docs/components/sensor/images/mlx90393-full.jpg similarity index 100% rename from content/components/sensor/images/mlx90393-full.jpg rename to src/content/docs/components/sensor/images/mlx90393-full.jpg diff --git a/content/components/sensor/images/mlx90393-resolution.svg b/src/content/docs/components/sensor/images/mlx90393-resolution.svg similarity index 100% rename from content/components/sensor/images/mlx90393-resolution.svg rename to src/content/docs/components/sensor/images/mlx90393-resolution.svg diff --git a/content/components/sensor/images/mopeka_pro_check_lippert.jpg b/src/content/docs/components/sensor/images/mopeka_pro_check_lippert.jpg similarity index 100% rename from content/components/sensor/images/mopeka_pro_check_lippert.jpg rename to src/content/docs/components/sensor/images/mopeka_pro_check_lippert.jpg diff --git a/content/components/sensor/images/mpl3115a2-full.jpg b/src/content/docs/components/sensor/images/mpl3115a2-full.jpg similarity index 100% rename from content/components/sensor/images/mpl3115a2-full.jpg rename to src/content/docs/components/sensor/images/mpl3115a2-full.jpg diff --git a/content/components/sensor/images/mpu6050-full.jpg b/src/content/docs/components/sensor/images/mpu6050-full.jpg similarity index 100% rename from content/components/sensor/images/mpu6050-full.jpg rename to src/content/docs/components/sensor/images/mpu6050-full.jpg diff --git a/content/components/sensor/images/mpu6050-ui.png b/src/content/docs/components/sensor/images/mpu6050-ui.png similarity index 100% rename from content/components/sensor/images/mpu6050-ui.png rename to src/content/docs/components/sensor/images/mpu6050-ui.png diff --git a/content/components/sensor/images/mpu6886-ui.png b/src/content/docs/components/sensor/images/mpu6886-ui.png similarity index 100% rename from content/components/sensor/images/mpu6886-ui.png rename to src/content/docs/components/sensor/images/mpu6886-ui.png diff --git a/content/components/sensor/images/ms5611-full.jpg b/src/content/docs/components/sensor/images/ms5611-full.jpg similarity index 100% rename from content/components/sensor/images/ms5611-full.jpg rename to src/content/docs/components/sensor/images/ms5611-full.jpg diff --git a/content/components/sensor/images/ms5611-ui.png b/src/content/docs/components/sensor/images/ms5611-ui.png similarity index 100% rename from content/components/sensor/images/ms5611-ui.png rename to src/content/docs/components/sensor/images/ms5611-ui.png diff --git a/content/components/sensor/images/ms8607-full.jpg b/src/content/docs/components/sensor/images/ms8607-full.jpg similarity index 100% rename from content/components/sensor/images/ms8607-full.jpg rename to src/content/docs/components/sensor/images/ms8607-full.jpg diff --git a/content/components/sensor/images/msa311-full.jpg b/src/content/docs/components/sensor/images/msa311-full.jpg similarity index 100% rename from content/components/sensor/images/msa311-full.jpg rename to src/content/docs/components/sensor/images/msa311-full.jpg diff --git a/content/components/sensor/images/msa3xx-ui.png b/src/content/docs/components/sensor/images/msa3xx-ui.png similarity index 100% rename from content/components/sensor/images/msa3xx-ui.png rename to src/content/docs/components/sensor/images/msa3xx-ui.png diff --git a/content/components/sensor/images/nau7802.png b/src/content/docs/components/sensor/images/nau7802.png similarity index 100% rename from content/components/sensor/images/nau7802.png rename to src/content/docs/components/sensor/images/nau7802.png diff --git a/content/components/sensor/images/opt3001-full.jpg b/src/content/docs/components/sensor/images/opt3001-full.jpg similarity index 100% rename from content/components/sensor/images/opt3001-full.jpg rename to src/content/docs/components/sensor/images/opt3001-full.jpg diff --git a/content/components/sensor/images/pmsa003i-full.jpg b/src/content/docs/components/sensor/images/pmsa003i-full.jpg similarity index 100% rename from content/components/sensor/images/pmsa003i-full.jpg rename to src/content/docs/components/sensor/images/pmsa003i-full.jpg diff --git a/content/components/sensor/images/pulse-counter.png b/src/content/docs/components/sensor/images/pulse-counter.png similarity index 100% rename from content/components/sensor/images/pulse-counter.png rename to src/content/docs/components/sensor/images/pulse-counter.png diff --git a/content/components/sensor/images/pulse-counter_vs_pulse-meter.png b/src/content/docs/components/sensor/images/pulse-counter_vs_pulse-meter.png similarity index 100% rename from content/components/sensor/images/pulse-counter_vs_pulse-meter.png rename to src/content/docs/components/sensor/images/pulse-counter_vs_pulse-meter.png diff --git a/content/components/sensor/images/pzem-ac.png b/src/content/docs/components/sensor/images/pzem-ac.png similarity index 100% rename from content/components/sensor/images/pzem-ac.png rename to src/content/docs/components/sensor/images/pzem-ac.png diff --git a/content/components/sensor/images/pzem-dc.png b/src/content/docs/components/sensor/images/pzem-dc.png similarity index 100% rename from content/components/sensor/images/pzem-dc.png rename to src/content/docs/components/sensor/images/pzem-dc.png diff --git a/content/components/sensor/images/radon_eye_rd200.jpg b/src/content/docs/components/sensor/images/radon_eye_rd200.jpg similarity index 100% rename from content/components/sensor/images/radon_eye_rd200.jpg rename to src/content/docs/components/sensor/images/radon_eye_rd200.jpg diff --git a/content/components/sensor/images/resistance-downstream.png b/src/content/docs/components/sensor/images/resistance-downstream.png similarity index 100% rename from content/components/sensor/images/resistance-downstream.png rename to src/content/docs/components/sensor/images/resistance-downstream.png diff --git a/content/components/sensor/images/rotary_encoder-ui.png b/src/content/docs/components/sensor/images/rotary_encoder-ui.png similarity index 100% rename from content/components/sensor/images/rotary_encoder-ui.png rename to src/content/docs/components/sensor/images/rotary_encoder-ui.png diff --git a/content/components/sensor/images/ruuvitag-full.jpg b/src/content/docs/components/sensor/images/ruuvitag-full.jpg similarity index 100% rename from content/components/sensor/images/ruuvitag-full.jpg rename to src/content/docs/components/sensor/images/ruuvitag-full.jpg diff --git a/content/components/sensor/images/ruuvitag-ui.jpg b/src/content/docs/components/sensor/images/ruuvitag-ui.jpg similarity index 100% rename from content/components/sensor/images/ruuvitag-ui.jpg rename to src/content/docs/components/sensor/images/ruuvitag-ui.jpg diff --git a/content/components/sensor/images/sdm220m-full.png b/src/content/docs/components/sensor/images/sdm220m-full.png similarity index 100% rename from content/components/sensor/images/sdm220m-full.png rename to src/content/docs/components/sensor/images/sdm220m-full.png diff --git a/content/components/sensor/images/sds011-full.jpg b/src/content/docs/components/sensor/images/sds011-full.jpg similarity index 100% rename from content/components/sensor/images/sds011-full.jpg rename to src/content/docs/components/sensor/images/sds011-full.jpg diff --git a/content/components/sensor/images/sen54-web.png b/src/content/docs/components/sensor/images/sen54-web.png similarity index 100% rename from content/components/sensor/images/sen54-web.png rename to src/content/docs/components/sensor/images/sen54-web.png diff --git a/content/components/sensor/images/senseair_s8-full.jpg b/src/content/docs/components/sensor/images/senseair_s8-full.jpg similarity index 100% rename from content/components/sensor/images/senseair_s8-full.jpg rename to src/content/docs/components/sensor/images/senseair_s8-full.jpg diff --git a/content/components/sensor/images/senseair_s8-pins.jpg b/src/content/docs/components/sensor/images/senseair_s8-pins.jpg similarity index 100% rename from content/components/sensor/images/senseair_s8-pins.jpg rename to src/content/docs/components/sensor/images/senseair_s8-pins.jpg diff --git a/content/components/sensor/images/sensirion-pm.png b/src/content/docs/components/sensor/images/sensirion-pm.png similarity index 100% rename from content/components/sensor/images/sensirion-pm.png rename to src/content/docs/components/sensor/images/sensirion-pm.png diff --git a/content/components/sensor/images/sht4x-full.jpg b/src/content/docs/components/sensor/images/sht4x-full.jpg similarity index 100% rename from content/components/sensor/images/sht4x-full.jpg rename to src/content/docs/components/sensor/images/sht4x-full.jpg diff --git a/content/components/sensor/images/sm300d2-full.jpg b/src/content/docs/components/sensor/images/sm300d2-full.jpg similarity index 100% rename from content/components/sensor/images/sm300d2-full.jpg rename to src/content/docs/components/sensor/images/sm300d2-full.jpg diff --git a/content/components/sensor/images/sm300d2-pins.jpg b/src/content/docs/components/sensor/images/sm300d2-pins.jpg similarity index 100% rename from content/components/sensor/images/sm300d2-pins.jpg rename to src/content/docs/components/sensor/images/sm300d2-pins.jpg diff --git a/content/components/sensor/images/sm300d2-ui.png b/src/content/docs/components/sensor/images/sm300d2-ui.png similarity index 100% rename from content/components/sensor/images/sm300d2-ui.png rename to src/content/docs/components/sensor/images/sm300d2-ui.png diff --git a/content/components/sensor/images/sps30-wiring.png b/src/content/docs/components/sensor/images/sps30-wiring.png similarity index 100% rename from content/components/sensor/images/sps30-wiring.png rename to src/content/docs/components/sensor/images/sps30-wiring.png diff --git a/content/components/sensor/images/stts22h.png b/src/content/docs/components/sensor/images/stts22h.png similarity index 100% rename from content/components/sensor/images/stts22h.png rename to src/content/docs/components/sensor/images/stts22h.png diff --git a/content/components/sensor/images/t6615-pins.png b/src/content/docs/components/sensor/images/t6615-pins.png similarity index 100% rename from content/components/sensor/images/t6615-pins.png rename to src/content/docs/components/sensor/images/t6615-pins.png diff --git a/content/components/sensor/images/t6615.png b/src/content/docs/components/sensor/images/t6615.png similarity index 100% rename from content/components/sensor/images/t6615.png rename to src/content/docs/components/sensor/images/t6615.png diff --git a/content/components/sensor/images/tc74-full.jpg b/src/content/docs/components/sensor/images/tc74-full.jpg similarity index 100% rename from content/components/sensor/images/tc74-full.jpg rename to src/content/docs/components/sensor/images/tc74-full.jpg diff --git a/content/components/sensor/images/tcs34725-full.jpg b/src/content/docs/components/sensor/images/tcs34725-full.jpg similarity index 100% rename from content/components/sensor/images/tcs34725-full.jpg rename to src/content/docs/components/sensor/images/tcs34725-full.jpg diff --git a/content/components/sensor/images/tcs34725-ui.png b/src/content/docs/components/sensor/images/tcs34725-ui.png similarity index 100% rename from content/components/sensor/images/tcs34725-ui.png rename to src/content/docs/components/sensor/images/tcs34725-ui.png diff --git a/content/components/sensor/images/teleinfo-full.jpg b/src/content/docs/components/sensor/images/teleinfo-full.jpg similarity index 100% rename from content/components/sensor/images/teleinfo-full.jpg rename to src/content/docs/components/sensor/images/teleinfo-full.jpg diff --git a/content/components/sensor/images/teleinfo-historical.jpg b/src/content/docs/components/sensor/images/teleinfo-historical.jpg similarity index 100% rename from content/components/sensor/images/teleinfo-historical.jpg rename to src/content/docs/components/sensor/images/teleinfo-historical.jpg diff --git a/content/components/sensor/images/teleinfo-standard.jpg b/src/content/docs/components/sensor/images/teleinfo-standard.jpg similarity index 100% rename from content/components/sensor/images/teleinfo-standard.jpg rename to src/content/docs/components/sensor/images/teleinfo-standard.jpg diff --git a/content/components/sensor/images/telink_flasher.jpg b/src/content/docs/components/sensor/images/telink_flasher.jpg similarity index 100% rename from content/components/sensor/images/telink_flasher.jpg rename to src/content/docs/components/sensor/images/telink_flasher.jpg diff --git a/content/components/sensor/images/temperature-humidity.png b/src/content/docs/components/sensor/images/temperature-humidity.png similarity index 100% rename from content/components/sensor/images/temperature-humidity.png rename to src/content/docs/components/sensor/images/temperature-humidity.png diff --git a/content/components/sensor/images/temperature-pressure.png b/src/content/docs/components/sensor/images/temperature-pressure.png similarity index 100% rename from content/components/sensor/images/temperature-pressure.png rename to src/content/docs/components/sensor/images/temperature-pressure.png diff --git a/content/components/sensor/images/temperature.png b/src/content/docs/components/sensor/images/temperature.png similarity index 100% rename from content/components/sensor/images/temperature.png rename to src/content/docs/components/sensor/images/temperature.png diff --git a/content/components/sensor/images/thermopro_tp357-full.jpg b/src/content/docs/components/sensor/images/thermopro_tp357-full.jpg similarity index 100% rename from content/components/sensor/images/thermopro_tp357-full.jpg rename to src/content/docs/components/sensor/images/thermopro_tp357-full.jpg diff --git a/content/components/sensor/images/tmp102-full.jpg b/src/content/docs/components/sensor/images/tmp102-full.jpg similarity index 100% rename from content/components/sensor/images/tmp102-full.jpg rename to src/content/docs/components/sensor/images/tmp102-full.jpg diff --git a/content/components/sensor/images/tof10120-full.jpg b/src/content/docs/components/sensor/images/tof10120-full.jpg similarity index 100% rename from content/components/sensor/images/tof10120-full.jpg rename to src/content/docs/components/sensor/images/tof10120-full.jpg diff --git a/content/components/sensor/images/tof10120-ui.png b/src/content/docs/components/sensor/images/tof10120-ui.png similarity index 100% rename from content/components/sensor/images/tof10120-ui.png rename to src/content/docs/components/sensor/images/tof10120-ui.png diff --git a/content/components/sensor/images/tsl2561-full.jpg b/src/content/docs/components/sensor/images/tsl2561-full.jpg similarity index 100% rename from content/components/sensor/images/tsl2561-full.jpg rename to src/content/docs/components/sensor/images/tsl2561-full.jpg diff --git a/content/components/sensor/images/tsl2561-ui.png b/src/content/docs/components/sensor/images/tsl2561-ui.png similarity index 100% rename from content/components/sensor/images/tsl2561-ui.png rename to src/content/docs/components/sensor/images/tsl2561-ui.png diff --git a/content/components/sensor/images/tsl2591-ui.jpg b/src/content/docs/components/sensor/images/tsl2591-ui.jpg similarity index 100% rename from content/components/sensor/images/tsl2591-ui.jpg rename to src/content/docs/components/sensor/images/tsl2591-ui.jpg diff --git a/content/components/sensor/images/ultrasonic-full.jpg b/src/content/docs/components/sensor/images/ultrasonic-full.jpg similarity index 100% rename from content/components/sensor/images/ultrasonic-full.jpg rename to src/content/docs/components/sensor/images/ultrasonic-full.jpg diff --git a/content/components/sensor/images/ultrasonic-ui.png b/src/content/docs/components/sensor/images/ultrasonic-ui.png similarity index 100% rename from content/components/sensor/images/ultrasonic-ui.png rename to src/content/docs/components/sensor/images/ultrasonic-ui.png diff --git a/content/components/sensor/images/veml7700-full.jpg b/src/content/docs/components/sensor/images/veml7700-full.jpg similarity index 100% rename from content/components/sensor/images/veml7700-full.jpg rename to src/content/docs/components/sensor/images/veml7700-full.jpg diff --git a/content/components/sensor/images/veml7700-spectral.png b/src/content/docs/components/sensor/images/veml7700-spectral.png similarity index 100% rename from content/components/sensor/images/veml7700-spectral.png rename to src/content/docs/components/sensor/images/veml7700-spectral.png diff --git a/content/components/sensor/images/veml7700-ui.png b/src/content/docs/components/sensor/images/veml7700-ui.png similarity index 100% rename from content/components/sensor/images/veml7700-ui.png rename to src/content/docs/components/sensor/images/veml7700-ui.png diff --git a/content/components/sensor/images/vl53l0x-full.jpg b/src/content/docs/components/sensor/images/vl53l0x-full.jpg similarity index 100% rename from content/components/sensor/images/vl53l0x-full.jpg rename to src/content/docs/components/sensor/images/vl53l0x-full.jpg diff --git a/content/components/sensor/images/vl53l0x-ui.png b/src/content/docs/components/sensor/images/vl53l0x-ui.png similarity index 100% rename from content/components/sensor/images/vl53l0x-ui.png rename to src/content/docs/components/sensor/images/vl53l0x-ui.png diff --git a/content/components/sensor/images/vl53l0x.png b/src/content/docs/components/sensor/images/vl53l0x.png similarity index 100% rename from content/components/sensor/images/vl53l0x.png rename to src/content/docs/components/sensor/images/vl53l0x.png diff --git a/content/components/sensor/images/wifi_signal-ui.png b/src/content/docs/components/sensor/images/wifi_signal-ui.png similarity index 100% rename from content/components/sensor/images/wifi_signal-ui.png rename to src/content/docs/components/sensor/images/wifi_signal-ui.png diff --git a/content/components/sensor/images/wts01-full.png b/src/content/docs/components/sensor/images/wts01-full.png similarity index 100% rename from content/components/sensor/images/wts01-full.png rename to src/content/docs/components/sensor/images/wts01-full.png diff --git a/content/components/sensor/images/xiaomi_cgd1.jpg b/src/content/docs/components/sensor/images/xiaomi_cgd1.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_cgd1.jpg rename to src/content/docs/components/sensor/images/xiaomi_cgd1.jpg diff --git a/content/components/sensor/images/xiaomi_cgdk2.jpg b/src/content/docs/components/sensor/images/xiaomi_cgdk2.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_cgdk2.jpg rename to src/content/docs/components/sensor/images/xiaomi_cgdk2.jpg diff --git a/content/components/sensor/images/xiaomi_cgpr1.png b/src/content/docs/components/sensor/images/xiaomi_cgpr1.png similarity index 100% rename from content/components/sensor/images/xiaomi_cgpr1.png rename to src/content/docs/components/sensor/images/xiaomi_cgpr1.png diff --git a/content/components/sensor/images/xiaomi_gcls002.jpg b/src/content/docs/components/sensor/images/xiaomi_gcls002.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_gcls002.jpg rename to src/content/docs/components/sensor/images/xiaomi_gcls002.jpg diff --git a/content/components/sensor/images/xiaomi_hhccpot002.jpg b/src/content/docs/components/sensor/images/xiaomi_hhccpot002.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_hhccpot002.jpg rename to src/content/docs/components/sensor/images/xiaomi_hhccpot002.jpg diff --git a/content/components/sensor/images/xiaomi_jqjcy01ym.jpg b/src/content/docs/components/sensor/images/xiaomi_jqjcy01ym.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_jqjcy01ym.jpg rename to src/content/docs/components/sensor/images/xiaomi_jqjcy01ym.jpg diff --git a/content/components/sensor/images/xiaomi_mhoc303.jpg b/src/content/docs/components/sensor/images/xiaomi_mhoc303.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_mhoc303.jpg rename to src/content/docs/components/sensor/images/xiaomi_mhoc303.jpg diff --git a/content/components/sensor/images/xiaomi_mhoc401.jpg b/src/content/docs/components/sensor/images/xiaomi_mhoc401.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_mhoc401.jpg rename to src/content/docs/components/sensor/images/xiaomi_mhoc401.jpg diff --git a/content/components/sensor/images/xiaomi_mjyd02yla.jpg b/src/content/docs/components/sensor/images/xiaomi_mjyd02yla.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_mjyd02yla.jpg rename to src/content/docs/components/sensor/images/xiaomi_mjyd02yla.jpg diff --git a/content/components/sensor/images/xiaomi_mue4094rt.jpg b/src/content/docs/components/sensor/images/xiaomi_mue4094rt.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_mue4094rt.jpg rename to src/content/docs/components/sensor/images/xiaomi_mue4094rt.jpg diff --git a/content/components/sensor/images/xiaomi_wx08zm.jpg b/src/content/docs/components/sensor/images/xiaomi_wx08zm.jpg similarity index 100% rename from content/components/sensor/images/xiaomi_wx08zm.jpg rename to src/content/docs/components/sensor/images/xiaomi_wx08zm.jpg diff --git a/content/components/sensor/images/xiaomi_xmwsdj04mmc.png b/src/content/docs/components/sensor/images/xiaomi_xmwsdj04mmc.png similarity index 100% rename from content/components/sensor/images/xiaomi_xmwsdj04mmc.png rename to src/content/docs/components/sensor/images/xiaomi_xmwsdj04mmc.png diff --git a/content/components/sensor/images/zgm053-connection.jpg b/src/content/docs/components/sensor/images/zgm053-connection.jpg similarity index 100% rename from content/components/sensor/images/zgm053-connection.jpg rename to src/content/docs/components/sensor/images/zgm053-connection.jpg diff --git a/content/components/sensor/images/zgm053-full.jpg b/src/content/docs/components/sensor/images/zgm053-full.jpg similarity index 100% rename from content/components/sensor/images/zgm053-full.jpg rename to src/content/docs/components/sensor/images/zgm053-full.jpg diff --git a/content/components/sensor/ina219.md b/src/content/docs/components/sensor/ina219.mdx similarity index 81% rename from content/components/sensor/ina219.md rename to src/content/docs/components/sensor/ina219.mdx index 5c1123cc2d..a24b8070b5 100644 --- a/content/components/sensor/ina219.md +++ b/src/content/docs/components/sensor/ina219.mdx @@ -1,21 +1,28 @@ --- description: "Instructions for setting up INA219 DC current sensors" title: "INA219 DC Current Sensor" -params: - seo: - description: Instructions for setting up INA219 DC current sensors - image: ina219.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ina219FullImg from './images/ina219-full.jpg'; +import ina219UiImg from './images/ina219-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `ina219` sensor platform allows you to use your INA219 High Side DC Current Sensor ([datasheet](https://cdn-learn.adafruit.com/downloads/pdf/adafruit-ina219-current-sensor-breakout.pdf), [Adafruit](https://www.adafruit.com/product/904)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ina219-full.jpg" alt="Image" caption="INA219 DC Current Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="ina219-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -65,6 +72,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ina3221/" >}} -- {{< apiref "ina219/ina219.h" "ina219/ina219.h" >}} +- [INA3221 3-Channel DC Current Sensor](/components/sensor/ina3221/) - [INA219 Arduino Library](https://github.com/adafruit/Adafruit_INA219) by [Adafruit](https://www.adafruit.com/) +- diff --git a/content/components/sensor/ina226.md b/src/content/docs/components/sensor/ina226.mdx similarity index 86% rename from content/components/sensor/ina226.md rename to src/content/docs/components/sensor/ina226.mdx index 217b4161fc..c474499eac 100644 --- a/content/components/sensor/ina226.md +++ b/src/content/docs/components/sensor/ina226.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up INA226 DC current and power sensors" title: "INA226 DC current and power sensor" -params: - seo: - description: Instructions for setting up INA226 DC current and power sensors - image: ina226.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ina226FullImg from './images/ina226-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ina226` sensor platform allows you to use your INA226 DC Current and Power Sensor ([datasheet](http://www.ti.com/lit/ds/symlink/ina226.pdf), [eBay](https://www.ebay.com)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ina226-full.jpg" alt="Image" caption="INA226 DC Current and Power Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -79,7 +85,7 @@ All other options from [Sensor](/components/sensor). ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ina219/" >}} -- {{< docref "ina3221/" >}} -- {{< apiref "ina226/ina226.h" "ina226/ina226.h" >}} +- [INA219 DC Current Sensor](/components/sensor/ina219/) +- [INA3221 3-Channel DC Current Sensor](/components/sensor/ina3221/) - [INA226 Arduino Library](https://github.com/SV-Zanshin/INA226) +- diff --git a/content/components/sensor/ina260.md b/src/content/docs/components/sensor/ina260.mdx similarity index 73% rename from content/components/sensor/ina260.md rename to src/content/docs/components/sensor/ina260.mdx index 418a4fec8c..35cd43a0a7 100644 --- a/content/components/sensor/ina260.md +++ b/src/content/docs/components/sensor/ina260.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up INA260 DC current and power sensors" title: "INA260 DC Current and Power sensor" -params: - seo: - description: Instructions for setting up INA260 DC current and power sensors - image: ina260.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ina260FullImg from './images/ina260-full.png'; +import APIRef from '@components/APIRef.astro'; + The `ina260` sensor platform allows you to use your INA260 DC Current and Power Sensor ([datasheet](https://www.ti.com/lit/ds/symlink/ina260.pdf), [Adafruit](https://www.adafruit.com/product/4226)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ina260-full.png" alt="Image" caption="INA260 DC Current and Power Sensor." width="65.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -43,8 +49,8 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ina219/" >}} -- {{< docref "ina226/" >}} -- {{< docref "ina3221/" >}} -- {{< apiref "ina260/ina260.h" "ina260/ina260.h" >}} +- [INA219 DC Current Sensor](/components/sensor/ina219/) +- [INA226 DC current and power sensor](/components/sensor/ina226/) +- [INA3221 3-Channel DC Current Sensor](/components/sensor/ina3221/) - [INA260 Arduino Library](https://github.com/adafruit/Adafruit_INA260) +- diff --git a/content/components/sensor/ina2xx.md b/src/content/docs/components/sensor/ina2xx.mdx similarity index 94% rename from content/components/sensor/ina2xx.md rename to src/content/docs/components/sensor/ina2xx.mdx index 2df8d6b830..b991f69e51 100644 --- a/content/components/sensor/ina2xx.md +++ b/src/content/docs/components/sensor/ina2xx.mdx @@ -1,13 +1,19 @@ --- description: "Instructions for setting up INA228, INA229, INA237, INA238, INA239 DC current, power, and charge sensors" title: "INA2xx family of digital power monitors" -params: - seo: - description: Instructions for setting up INA228, INA229, INA237, INA238, INA239 DC current, power, and charge sensors - image: ina228.jpg --- -{{< img src="ina228-full.jpg" alt="Image" caption="INA228 Module with integrated shunt from Adafruit" width="50.0%" class="align-center" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ina228FullImg from './images/ina228-full.jpg'; +import APIRef from '@components/APIRef.astro'; + +
    ## Supported devices @@ -183,7 +189,7 @@ To simplify the use of this function, you can use the following example to add a ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ina219/" >}} -- {{< docref "ina226/" >}} -- {{< docref "ina3221/" >}} -- {{< apiref "ina2xx_base/ina2xx_base.h" "ina2xx_base/ina2xx_base.h" >}} +- [INA219 DC Current Sensor](/components/sensor/ina219/) +- [INA226 DC current and power sensor](/components/sensor/ina226/) +- [INA3221 3-Channel DC Current Sensor](/components/sensor/ina3221/) +- diff --git a/content/components/sensor/ina3221.md b/src/content/docs/components/sensor/ina3221.mdx similarity index 75% rename from content/components/sensor/ina3221.md rename to src/content/docs/components/sensor/ina3221.mdx index 55f91ebbe5..a59f0d76e2 100644 --- a/content/components/sensor/ina3221.md +++ b/src/content/docs/components/sensor/ina3221.mdx @@ -1,21 +1,29 @@ --- description: "Instructions for setting up INA3221 3-channel DC current sensors." title: "INA3221 3-Channel DC Current Sensor" -params: - seo: - description: Instructions for setting up INA3221 3-channel DC current sensors. - image: ina3221.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ina3221FullImg from './images/ina3221-full.jpg'; +import ina3221UiImg from './images/ina3221-ui.png'; +import ina3221PinsImg from './images/ina3221-pins.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ina3221` sensor platform allows you to use your INA3221 3-Channel DC Current Sensor ([datasheet](http://www.ti.com/lit/ds/symlink/ina3221.pdf), [switchdoc](http://www.switchdoc.com/ina3221-breakout-board/)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ina3221-full.jpg" alt="Image" caption="INA3221 3-Channel DC Current Sensor" width="50.0%" class="align-center" >}} +
    -{{< img src="ina3221-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -63,11 +71,16 @@ sensor: - **channel_3** (*Optional*): The configuration options for the 3rd channel. Same options as 1st channel. - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. -{{< img src="ina3221-pins.jpg" alt="Image" caption="Pins on the INA3221. For communication only VS, GND, SCL and SDA need to be connected. Note that all 3 channels share the same GND reference." width="60.0%" class="align-center" >}} +
    ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "ina219/" >}} -- {{< apiref "ina3221/ina3221.h" "ina3221/ina3221.h" >}} +- [INA219 DC Current Sensor](/components/sensor/ina219/) - [INA3221 Arduino Library](https://github.com/switchdoclabs/SDL_Arduino_INA3221) by [SwitchDoc Labs](https://github.com/switchdoclabs) +- diff --git a/content/components/sensor/_index.md b/src/content/docs/components/sensor/index.mdx similarity index 82% rename from content/components/sensor/_index.md rename to src/content/docs/components/sensor/index.mdx index b72cd371b4..e26f4c606a 100644 --- a/content/components/sensor/_index.md +++ b/src/content/docs/components/sensor/index.mdx @@ -1,17 +1,19 @@ --- description: "Instructions for setting up sensor components in ESPHome." title: "Sensor Component" -params: - seo: - description: Instructions for setting up sensor components in ESPHome. - image: folder-open.svg +sidebar: + label: "Sensor Component" --- +import APIRef from '@components/APIRef.astro'; +import { Image } from 'astro:assets'; +import FilterList from '@components/FilterList.astro'; + ESPHome has support for many different sensors. Each of them is a platform of the `sensor` domain and each sensor has several base configuration options. -{{< anchor "config-sensor" >}} + ## Base Sensor Configuration @@ -51,11 +53,11 @@ Configuration variables: not actually do any maths (conversion between units). - **device_class** (*Optional*, string): The device class for the - sensor. See + sensor. See [https://www.home-assistant.io/integrations/sensor/#device-class](https://www.home-assistant.io/integrations/sensor/#device-class) for a list of available options. Set to `""` to remove the default device class of a sensor. - **state_class** (*Optional*, string): The state class for the - sensor. See + sensor. See [https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes](https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes) for a list of available options. Set to `""` to remove the default state class of a sensor. - **icon** (*Optional*, icon): Manually set the icon to use for the sensor in the frontend. @@ -86,7 +88,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -126,7 +128,7 @@ MQTT Options: > # ... > ``` -{{< anchor "sensor-filters" >}} + ## Sensor Filters @@ -182,109 +184,7 @@ filters: - lambda: return x * (9.0/5.0) + 32.0; ``` -### `calibrate_linear` - -{{< include "filter/calibrate_linear.md" >}} - -### `calibrate_polynomial` - -{{< include "filter/calibrate_polynomial.md" >}} - -### `clamp` - -{{< include "filter/clamp.md" >}} - -### `debounce` - -{{< include "filter/debounce.md" >}} - -### `delta` - -{{< include "filter/delta.md" >}} - -### `exponential_moving_average` - -{{< include "filter/exponential_moving_average.md" >}} - -### `filter_out` - -{{< include "filter/filter_out.md" >}} - -### `heartbeat` - -{{< include "filter/heartbeat.md" >}} - -### `lambda` - -{{< include "filter/lambda.md" >}} - -### `max` - -{{< include "filter/max.md" >}} - -### `median` - -{{< include "filter/median.md" >}} - -### `min` - -{{< include "filter/min.md" >}} - -### `multiply` - -{{< include "filter/multiply.md" >}} - -### `offset` - -{{< include "filter/offset.md" >}} - -### `or` - -{{< include "filter/or.md" >}} - -### `quantile` - -{{< include "filter/quantile.md" >}} - -### `round` - -{{< include "filter/round.md" >}} - -### `round_to_multiple_of` - -{{< include "filter/round_to_multiple_of.md" >}} - -### `skip_initial` - -{{< include "filter/skip_initial.md" >}} - -### `sliding_window_moving_average` - -{{< include "filter/sliding_window_moving_average.md" >}} - -### `throttle` - -{{< include "filter/throttle.md" >}} - -### `throttle_average` - -{{< include "filter/throttle_average.md" >}} - -### `throttle_with_priority` - -{{< include "filter/throttle_with_priority.md" >}} - -### `timeout` - -{{< include "filter/timeout.md" >}} - -### `to_ntc_resistance` - -{{< include "filter/to_ntc_resistance.md" >}} - -### `to_ntc_temperature` - -{{< include "filter/to_ntc_temperature.md" >}} + ## Example: Converting Celsius to Fahrenheit @@ -301,14 +201,14 @@ filters: unit_of_measurement: "°F" ``` -{{< anchor "sensor-automations" >}} + ## Sensor Automation You can access the most recent state of the sensor in [lambdas](/automations/templates#config-lambda) using `id(sensor_id).state` and the most recent raw state using `id(sensor_id).raw_state`. -{{< anchor "sensor-on_value" >}} + ### `on_value` @@ -329,7 +229,7 @@ sensor: Configuration variables: See [Automation](/automations). -{{< anchor "sensor-on_value_range" >}} + ### `on_value_range` @@ -366,7 +266,7 @@ Configuration variables: - **below** (*Optional*, float): The maximum for the trigger. - See [Automation](/automations). -{{< anchor "sensor-on_raw_value" >}} + ### `on_raw_value` @@ -387,7 +287,7 @@ sensor: Configuration variables: See [Automation](/automations). -{{< anchor "sensor-in_range_condition" >}} + ### `sensor.in_range` Condition @@ -413,7 +313,7 @@ Configuration variables: - **above** (*Optional*, float): The minimum for the condition. - **below** (*Optional*, float): The maximum for the condition. -{{< anchor "sensor-lambda_calls" >}} + ### Lambda calls @@ -446,5 +346,5 @@ advanced stuff (see the full API Reference for more info). ## See Also -- {{< docref "/components/sensor/aqi" >}} -- {{< apiref "sensor/sensor.h" "sensor/sensor.h" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) +- diff --git a/content/components/sensor/inkbird_ibsth1_mini.md b/src/content/docs/components/sensor/inkbird_ibsth1_mini.mdx similarity index 78% rename from content/components/sensor/inkbird_ibsth1_mini.md rename to src/content/docs/components/sensor/inkbird_ibsth1_mini.mdx index 6831f794b3..be8a114698 100644 --- a/content/components/sensor/inkbird_ibsth1_mini.md +++ b/src/content/docs/components/sensor/inkbird_ibsth1_mini.mdx @@ -1,14 +1,16 @@ --- description: "Instructions for setting up Inkbird IBS-TH1/TH2 Bluetooth-based temperature and humidity sensors in ESPHome." title: "Inkbird IBS-TH1, IBS-TH1 Mini, and IBS-TH2 BLE Sensor" -params: - seo: - description: Instructions for setting up Inkbird IBS-TH1/TH2 Bluetooth-based temperature and humidity sensors in ESPHome. - image: inkbird_isbth1_mini.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import inkbirdIsbth1MiniFullImg from './images/inkbird_isbth1_mini-full.jpg'; +import inkbirdIsbth1MiniUiImg from './images/inkbird_isbth1_mini-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `inkbird_ibsth1_mini` sensor platform lets you track the output of Inkbird IBS-TH1, IBS-TH1 Mini, and IBS-TH2 Bluetooth -Low Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. This component will track the +Low Energy devices using the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track the temperature, external temperature (non mini only), humidity and the battery level of the IBS-TH1 device every time the sensor sends out a BLE broadcast. Note that contrary to other implementations, ESPHome can track as many IBS-TH1/TH2 devices at once as you want. @@ -20,9 +22,14 @@ many IBS-TH1/TH2 devices at once as you want. > [!NOTE] > The external temperature sensor is not supported on the IBS-TH1 Mini or IBS-TH2 -{{< img src="inkbird_isbth1_mini-full.jpg" alt="Image" caption="Inkbird IBS-TH1 Mini Temperature and Humidity Sensor over BLE." width="80.0%" class="align-center" >}} +
    -{{< img src="inkbird_isbth1_mini-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -93,8 +100,8 @@ entry like in the configuration example at the top. ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} -- {{< docref "absolute_humidity/" >}} -- {{< apiref "inkbird_ibsth1_mini/inkbird_ibsth1_mini.h" "inkbird_ibsth1_mini/inkbird_ibsth1_mini.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) +- [Absolute Humidity](/components/sensor/absolute_humidity/) - [OpenMQTTGateway](https://github.com/1technophile/OpenMQTTGateway) by [@1technophile](https://github.com/1technophile) +- diff --git a/content/components/sensor/integration.md b/src/content/docs/components/sensor/integration.mdx similarity index 79% rename from content/components/sensor/integration.md rename to src/content/docs/components/sensor/integration.mdx index cdd6b44fa4..7b940fafa7 100644 --- a/content/components/sensor/integration.md +++ b/src/content/docs/components/sensor/integration.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up sensors that integrate values over time." title: "Integration Sensor" -params: - seo: - description: Instructions for setting up sensors that integrate values over time. - image: sigma.svg --- +import APIRef from '@components/APIRef.astro'; + The `integration` sensor is a helper sensor that can integrate values from other sensors over time. This can for example be useful to integrate the values of a water flow sensor (in m^3/s) over time (result is in m^3). -This component can be considered a more-generic version of the {{< docref "total_daily_energy/" >}}. +This component can be considered a more-generic version of the [Total Daily Energy](/components/sensor/total_daily_energy/). ```yaml # Example configuration entry @@ -42,7 +40,7 @@ sensor: - All other options from [Sensor](/components/sensor). -{{< anchor "sensor-integration-reset_action" >}} + ## `sensor.integration.reset` Action @@ -58,6 +56,6 @@ on_...: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "total_daily_energy/" >}} -- {{< docref "/cookbook/power_meter" >}} -- {{< apiref "integration/integration_sensor.h" "integration/integration_sensor.h" >}} +- [Total Daily Energy Sensor](/components/sensor/total_daily_energy/) +- [Non-Invasive Power Meter](/cookbook/power_meter/) +- diff --git a/content/components/sensor/internal_temperature.md b/src/content/docs/components/sensor/internal_temperature.mdx similarity index 78% rename from content/components/sensor/internal_temperature.md rename to src/content/docs/components/sensor/internal_temperature.mdx index 5195676921..13c7960435 100644 --- a/content/components/sensor/internal_temperature.md +++ b/src/content/docs/components/sensor/internal_temperature.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up the integrated temperature sensor of the ESP32, RP2040 and BK72XX." title: "Internal Temperature Sensor" -params: - seo: - description: Instructions for setting up the integrated temperature sensor of the ESP32, RP2040 and BK72XX. - image: thermometer.svg --- +import { Image } from 'astro:assets'; +import internalTemperatureUiImg from './images/internal_temperature-ui.png'; + The `internal_temperature` sensor platform allows you to use the integrated temperature sensor of the ESP32, RP2040 and BK72XX chip. @@ -14,7 +13,7 @@ temperature sensor of the ESP32, RP2040 and BK72XX chip. > Some ESP32 variants return a large amount of invalid temperature > values, including 53.3°C which equates to a raw value of 128. Invalid measurements are ignored by this component. -{{< img src="internal_temperature-ui.png" alt="Image" width="70.0%" class="align-center" >}} + ```yaml # Example configuration entry diff --git a/content/components/sensor/jsn_sr04t.md b/src/content/docs/components/sensor/jsn_sr04t.mdx similarity index 78% rename from content/components/sensor/jsn_sr04t.md rename to src/content/docs/components/sensor/jsn_sr04t.mdx index 6583d5373f..f8cf277ca7 100644 --- a/content/components/sensor/jsn_sr04t.md +++ b/src/content/docs/components/sensor/jsn_sr04t.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up JSN-SR04T waterproof ultrasonic distance sensor in ESPHome." title: "JSN-SR04T Waterproof Ultrasonic Range Finder" -params: - seo: - description: Instructions for setting up JSN-SR04T waterproof ultrasonic distance sensor in ESPHome. - image: jsn-sr04t-v3.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import jsnSr04tV3ModeSelectPadsImg from './images/jsn-sr04t-v3-mode-select-pads.jpg'; +import APIRef from '@components/APIRef.astro'; + This sensor allows you to use the JSN-SR04T and AJ_SR04M Waterproof Ultrasonic Range Finder **in Mode 1 and 2** with ESPHome to measure distances. This sensor can measure ranges between 25 centimeters and 600 centimeters with a resolution of 1 millimeter. @@ -29,7 +30,12 @@ Configure the AJ_SR04M for mode 2: - Add a 47k resistor to pad R19. -{{< img src="jsn-sr04t-v3-mode-select-pads.jpg" alt="Image" caption="JSN-SR04T Waterproof Ultrasonic Range Finder Mode Select Pads." width="50.0%" class="align-center" >}} +
    In mode 1 the module continuously takes measurements approximately every 100mS and outputs the distance on the TX pin at 9600 baud. In this mode [Sensor Filters](/components/sensor#sensor-filters) are highly recommended. @@ -39,7 +45,14 @@ The module then outputs the distance on its TX pin. The frequency of the measure To use the sensor, first set up an [UART Bus](/components/uart) with a baud rate of 9600 and connect the sensor to the specified pin. -{{< img src="jsn-sr04t-v3.jpg" alt="Image" caption="JSN-SR04T Waterproof Ultrasonic Range Finder." width="70.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -64,4 +77,4 @@ sensor: - [UART Bus](/components/uart) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "jsn_sr04t/jsn_sr04t.h" "jsn_sr04t/jsn_sr04t.h" >}} +- diff --git a/content/components/sensor/kamstrup_kmp.md b/src/content/docs/components/sensor/kamstrup_kmp.mdx similarity index 88% rename from content/components/sensor/kamstrup_kmp.md rename to src/content/docs/components/sensor/kamstrup_kmp.mdx index 14090f5ad9..3260948536 100644 --- a/content/components/sensor/kamstrup_kmp.md +++ b/src/content/docs/components/sensor/kamstrup_kmp.mdx @@ -3,7 +3,19 @@ description: "Kamstrup Meter Protocol [KMP]" title: "Kamstrup Meter Protocol [KMP]" --- -{{< img src="kamstrup_kmp.jpg" alt="Image" caption="Kamstrup MULTICAL 403" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import kamstrupKmpSchImg from './images/kamstrup_kmp_sch.svg'; +import kamstrupKmpHolderImg from './images/kamstrup_kmp_holder.svg'; + +
    The Kamstrup Meter Protocol (KMP) is used by certain Kamstrup utility meters and can be used to read measurements from the meter. @@ -76,7 +88,6 @@ Configuration variables: - **update_interval** (*Optional*): The polling interval. Defaults to `60s`. > [!NOTE] -> > - The uart baudrate has to be set to 1200 baud and the stop bits to 2. > It is recommended to use pins associated with a hardware UART. > For more information regarding uart configuration, refer to [UART](/components/uart). @@ -101,7 +112,12 @@ The Kamstrup meter uses an optical interface, just above the display. The requir optical transceiver can be made using the schematic below. Connect the RX and TX lines to the pins configured under the uart section in the config file. -{{< img src="kamstrup_kmp_sch.svg" alt="Image" caption="Optical reader schematic" >}} +
    To save energy, the optical interface of the Kamstrup meter is not active by default. To activate the interface, press a button on the device. The interface will now be @@ -111,7 +127,12 @@ circles are the LED and photo diode, which must be placed exactly on top of the optical interface window of the meter. The red circles indicate 6mm neodymium magnets. -{{< img src="kamstrup_kmp_holder.svg" alt="Image" caption="Magnet arrangement" >}} +
    ## See Also diff --git a/content/components/sensor/kmeteriso.md b/src/content/docs/components/sensor/kmeteriso.mdx similarity index 75% rename from content/components/sensor/kmeteriso.md rename to src/content/docs/components/sensor/kmeteriso.mdx index 0d3d8df89d..adc3f3e8b0 100644 --- a/content/components/sensor/kmeteriso.md +++ b/src/content/docs/components/sensor/kmeteriso.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up KMeterISO temperature sensors" title: "M5Stack KMeterISO I2C K-Type probe temperature sensor" -params: - seo: - description: Instructions for setting up KMeterISO temperature sensors - image: kmeteriso.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `kmeteriso` sensor platform allows you to use your KMeterISO ([product](https://docs.m5stack.com/en/unit/KMeterISO%20Unit), [M5Stack](https://docs.m5stack.com/en/unit/KMeterISO%20Unit)) K-Type thermocouple temperature sensor with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="kmeteriso.jpg" alt="Image" caption="M5Stack KMeterISO temperature sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -35,6 +42,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< apiref "kmeteriso/kmeteriso.h" "kmeteriso/kmeteriso.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) - [M5Stack Unit code](https://github.com/m5stack/M5Unit-KMeterISO) by [M5Stack](https://m5stack.com/) +- diff --git a/content/components/sensor/kuntze.md b/src/content/docs/components/sensor/kuntze.mdx similarity index 86% rename from content/components/sensor/kuntze.md rename to src/content/docs/components/sensor/kuntze.mdx index ab4e69a124..8e55d8b6fb 100644 --- a/content/components/sensor/kuntze.md +++ b/src/content/docs/components/sensor/kuntze.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up Kuntze pool monitor in ESPHome." title: "Kuntze pool monitor" -params: - seo: - description: Instructions for setting up Kuntze pool monitor in ESPHome. - image: kuntze.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `kuntze` component allows you to integrate the Kuntze water measurement instrument in ESPHome. It uses [UART](/components/uart) (ModBUS) for communication. Once configured you can use sensors as described below for your projects. -{{< img src="kuntze.jpg" alt="Image" caption="Kuntze Neon® Multi instrument" class="align-center" >}} +
    ## Overview @@ -27,7 +33,7 @@ The device communicates at `19200` baud `8E1`. To connect to ESPHome, an RS485 transceiver is needed. Choose a type which does not need a trigger to send and receive data, for example: -{{< img src="rs485.jpg" alt="Image" >}} + The controller connects to the UART of the MCU. For ESP32 GPIO `16` to `TXD` and `17` to RXD are the default ones but any other pins can be used as well. 3.3V to VCC and GND to GND. @@ -68,6 +74,6 @@ All sensors are *Optional* and support all other options from [Sensor](/componen - [UART Bus](/components/uart) - [Logger Component](/components/logger#logger) -- [Sensor](/components/sensor) +- [Sensor Component](/components/sensor) - [Kuntze manuals](https://www.kuntze.com/en/downloads-2/) - [Communication protocol](https://www.kuntze.com/wp-content/uploads/2021/05/2019_Manual_Modbus-RTU_ENG.pdf) diff --git a/content/components/sensor/lc709203f.md b/src/content/docs/components/sensor/lc709203f.mdx similarity index 76% rename from content/components/sensor/lc709203f.md rename to src/content/docs/components/sensor/lc709203f.mdx index 060b8fd06c..6127dd977b 100644 --- a/content/components/sensor/lc709203f.md +++ b/src/content/docs/components/sensor/lc709203f.mdx @@ -1,21 +1,25 @@ --- description: "Instructions for setting up LC709203F battery monitor." title: "LC709203F Battery Monitor" -params: - seo: - description: Instructions for setting up LC709203F battery monitor. - image: lc709203f.jpg --- +import { Image } from 'astro:assets'; +import lc709203fProductImageImg from './images/LC709203f_product_image.jpg'; +import lc709203fFeatherProductImageImg from './images/LC709203f_feather_product_image.jpg'; +import lc709203fUiImg from './images/LC709203f_ui.jpg'; +import lc709203fBatteryMarkingsImg from './images/LC709203f_battery_markings.jpg'; +import lc709203fBatteryProfilesImg from './images/LC709203f_battery_profiles.jpg'; +import lc709203fThermistorConnectionImg from './images/LC709203f_thermistor_connection.jpg'; + The `lc709203f` sensor platform allows you to use a LC709203F ([datasheet](https://cdn-learn.adafruit.com/assets/assets/000/094/597/original/LC709203F-D.PDF)) battery monitor with ESPHome. This device is available as a [standalone sensor](https://www.adafruit.com/product/4712) and it is also one of the battery monitor chips used on the [ESP32 Feather](https://www.adafruit.com/product/5477) dev boards. -{{< img src="images/LC709203f_product_image.jpg" alt="" width="30.0%" >}} + -{{< img src="images/LC709203f_feather_product_image.jpg" alt="" width="30.0%" >}} + > [!NOTE] > This device does not contain a temperature sensor. Only enable the temperature sensor option @@ -67,17 +71,17 @@ sensor: When properly set up, the sensor will report values to Home Assistant as shown: -{{< img src="images/LC709203f_ui.jpg" alt="" width="40.0%" >}} + -{{< anchor "pack-size-and-voltage" >}} + ## Pack Size and Nominal Voltage The pack size and nominal voltage of your battery is typically printed on the battery as shown below. -{{< img src="images/LC709203f_battery_markings.jpg" alt="" width="70.0%" >}} + -{{< anchor "pack-voltage" >}} + ## Pack Voltage @@ -85,19 +89,19 @@ You will need to configure your device with the correct nominal pack voltage. Th is used by the IC to improve the sensor's accuracy. The nominal voltage is used to set the `change of the parameter` register per table 8 in the datasheet. -{{< img src="images/LC709203f_battery_profiles.jpg" alt="" width="70.0%" >}} + We assume that the device is a `-01` or `-03` device. This is the correct setup for the Adafruit sensors and batteries. -{{< anchor "temperature-sensor" >}} + ## Temperature Sensor Information If you want to measure temperature of the battery, you **must** have a thermistor attached to the device as shown in figure 2 of the datasheet. -{{< img src="images/LC709203f_thermistor_connection.jpg" alt="" width="70.0%" >}} + ## Acknowledgments diff --git a/content/components/sensor/ld2410.md b/src/content/docs/components/sensor/ld2410.mdx similarity index 92% rename from content/components/sensor/ld2410.md rename to src/content/docs/components/sensor/ld2410.mdx index 5f48b8bb53..599d94b656 100644 --- a/content/components/sensor/ld2410.md +++ b/src/content/docs/components/sensor/ld2410.mdx @@ -1,15 +1,16 @@ --- description: "Instructions for setting up LD2410 sensors." title: "LD2410 Sensor" -params: - seo: - description: Instructions for setting up LD2410 sensors. - image: ld2410.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ld2410CardImg from './images/ld2410-card.png'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub -{{< anchor "ld2410-component" >}} + The `ld2410` sensor platform allows you to use HI-LINK LD2410 motion and presence sensors with ESPHome. There are three variants with similar communication protocols: @@ -23,7 +24,14 @@ The [UART](/components/uart) is required to be set up in your configuration for Use of hardware UART pins is highly recommended to best support the out-of-the-box 256000 baud rate of the sensor. -{{< img src="ld2410.jpg" alt="Image" caption="LD2410 motion and presence sensor" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -35,7 +43,7 @@ ld2410: - **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) if you want to use multiple UART buses. -- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this {{< docref "ld2410/" >}} component if you need multiple +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this [Ld2410](/components/sensor/ld2410/) component if you need multiple components. ## Binary Sensor @@ -71,11 +79,11 @@ binary_sensor: [light function](#ld2410-light-function) configuration. Might need to update to the latest firmware to use this. All options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. > [!NOTE] -> By default, each of the {{< docref "/components/binary_sensor/index" "Binary Sensor" >}} components above includes the +> By default, each of the [Binary Sensor](/components/binary_sensor/) components above includes the > following [filter](/components/binary_sensor#binary_sensor-filters) by default to prevent flooding Home Assistant with state updates: > > ```yaml @@ -153,7 +161,7 @@ sensor: name: G8 still energy ``` -{{< anchor "ld2410-sensors" >}} + ### Configuration variables @@ -190,11 +198,11 @@ sensor: the gate, otherwise `unknown`. Value between `0` and `100` inclusive. All options from [Sensor](/components/sensor). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. > [!NOTE] -> By default, each of the {{< docref "/components/sensor/index" "Sensor" >}} components above includes the following +> By default, each of the [Sensor](/components/sensor/) components above includes the following > [filter](/components/sensor#sensor-filters) by default to prevent flooding Home Assistant with state updates: > > ```yaml @@ -219,7 +227,7 @@ switch: name: Control bluetooth ``` -{{< anchor "ld2410-engineering-mode" >}} + ### Configuration variables @@ -229,14 +237,14 @@ switch: - **bluetooth** (*Optional*): Turn on/off the bluetooth adapter. Defaults to `true`. All options from [Switch](/components/switch#config-switch). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. -{{< anchor "ld2410-number" >}} + ## Number -The `ld2410` number allows you to control the configuration of your {{< docref "ld2410/" >}}. +The `ld2410` number allows you to control the configuration of your [Ld2410](/components/sensor/ld2410/). ```yaml number: @@ -296,7 +304,7 @@ number: name: G8 still threshold ``` -{{< anchor "ld2410-light-threshold" >}} + ### Configuration variables @@ -330,7 +338,7 @@ number: Value between `0` and `100` inclusive. See default values below. All options from [Number](/components/number#config-number). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. ### Default values for gate threshold @@ -373,7 +381,7 @@ button: - **query_params** (*Optional*): Refresh all sensors values of the device. All options from [Button](/components/button#config-button). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. ## Text Sensor @@ -397,7 +405,7 @@ text_sensor: - **mac_address** (*Optional*): The bluetooth mac address. Will be set to `unknown` when bluetooth is off. All options from [Text Sensor](/components/text_sensor#config-text_sensor). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. ## Select @@ -417,7 +425,7 @@ select: name: Out pin level ``` -{{< anchor "ld2410-light-function" >}} + ### Configuration variables @@ -435,7 +443,7 @@ select: - **out_pin_level** (*Optional*): Control OUT pin `away` value. Can be `low` or `high`. Defaults to `low`. All options from [Select](/components/select#config-select). -- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2410/" >}} component if you are +- **ld2410_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2410](/components/sensor/ld2410/) component if you are using multiple components. ## Automations @@ -452,7 +460,7 @@ This is an [Action](/automations/actions#all-actions) for setting the bluetooth Configuration variables: -- **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the {{< docref "ld2410/" >}} component to set. +- **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the [Ld2410](/components/sensor/ld2410/) component to set. - **password** (**Required**, string, [templatable](/automations/templates)): The password to set. Case sensitive. Must be exactly 6 characters long. Default password is `HiLink`. @@ -741,10 +749,10 @@ Then replace all instances of `DEVICE` with your device name The result: -{{< img src="ld2410-card.png" alt="Image" class="align-center" >}} + ## See Also - [Official Datasheet and user manuals](https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-) - [Source of inspiration for implementation](https://github.com/rain931215/ESPHome-LD2410) -- {{< apiref "ld2410/ld2410.h" "ld2410/ld2410.h" >}} +- diff --git a/content/components/sensor/ld2412.md b/src/content/docs/components/sensor/ld2412.mdx similarity index 95% rename from content/components/sensor/ld2412.md rename to src/content/docs/components/sensor/ld2412.mdx index 3e470bd6e3..cdc00e9a9e 100644 --- a/content/components/sensor/ld2412.md +++ b/src/content/docs/components/sensor/ld2412.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up LD2412 sensors for use with ESPHome." title: "LD2412 Sensor" -params: - seo: - description: Instructions for setting up LD2412 sensors for use with ESPHome. - image: ld2412.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ld2412Img from './images/ld2412.png'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `ld2412` sensor platform allows you to use HI-LINK LD2412 motion and presence sensors with ESPHome. @@ -16,7 +17,12 @@ The [UART](/components/uart) is required to be set up in your configuration for Use of a hardware UART is highly recommended as it best supports the default 115200 baud rate of the sensor module. -{{< img src="ld2412.png" alt="Image" caption="LD2412 motion and presence sensor" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -65,7 +71,7 @@ binary_sensor: components. > [!NOTE] -> By default, each of the target {{< docref "/components/binary_sensor/index" "Binary Sensor" >}} components above includes the +> By default, each of the target [Binary Sensor](/components/binary_sensor/) components above includes the > following [filter](/components/binary_sensor#binary_sensor-filters) by default to prevent flooding Home Assistant with state updates: > > ```yaml @@ -168,7 +174,7 @@ sensor: name: Gate 13 still energy ``` -{{< anchor "ld2412-sensors" >}} + ### Configuration variables @@ -206,7 +212,7 @@ sensor: components. > [!NOTE] -> By default, each of the {{< docref "/components/sensor/index" "Sensor" >}} components above includes the following +> By default, each of the [Sensor](/components/sensor/) components above includes the following > [filter](/components/sensor#sensor-filters) by default to prevent flooding Home Assistant with state updates: > > ```yaml @@ -231,7 +237,7 @@ switch: name: Bluetooth ``` -{{< anchor "ld2412-engineering-mode" >}} + ### Configuration variables @@ -242,7 +248,7 @@ switch: - **ld2412_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the component. Required when using multiple components. -{{< anchor "ld2412-number" >}} + ## Number @@ -431,7 +437,7 @@ select: name: Baud Rate ``` -{{< anchor "ld2412-light-function" >}} + ### Configuration variables @@ -480,5 +486,5 @@ itself. ## See Also - [Official Datasheet and user manuals](https://h.hlktech.com/Mobile/download/fdetail/296.html) -- [Source of inspiration for implementation](community.home-assistant.io/t/diy-human-sensor-l12-base-on-hlk-ld2412/758421/68) -- {{< apiref "ld2412/ld2412.h" "ld2412/ld2412.h" >}} +- [Source of inspiration for implementation](https://community.home-assistant.io/t/diy-human-sensor-l12-base-on-hlk-ld2412/758421/68) +- diff --git a/content/components/sensor/ld2420.md b/src/content/docs/components/sensor/ld2420.mdx similarity index 94% rename from content/components/sensor/ld2420.md rename to src/content/docs/components/sensor/ld2420.mdx index 6d0e66bca2..7a256faf37 100644 --- a/content/components/sensor/ld2420.md +++ b/src/content/docs/components/sensor/ld2420.mdx @@ -1,15 +1,14 @@ --- description: "Instructions for setting up LD2420 sensors." title: "LD2420 24GHz mmWave Radar Sensor" -params: - seo: - description: Instructions for setting up LD2420 sensors. - image: ld2420.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + ## Component -{{< anchor "ld2420-component" >}} + The `ld2420` sensor platform allows you to use the HLK-LD2420 motion and presence sensor. The [UART](/components/uart) is required to be set up in your configuration for this sensor to work. @@ -22,7 +21,14 @@ release we can dynamically calibrate gate still and move thresholds. This component has dynamic configuration functionality with a compact UI format. Select, number and button components provide configuration value inputs and control. -{{< img src="ld2420.jpg" alt="Image" caption="HLK-LD2420 Low power motion and presence sensor." width="50.0%" class="align-center" >}} +
    ## Module Pinouts @@ -263,7 +269,7 @@ Four button components are available enabling configuration controls for editing ### Factory Reset Values -{{< anchor "ld2420-default_values_for_gate_threshold" >}} + | Setting: | Value: | | ----------------- | ------ | @@ -292,7 +298,7 @@ Four button components are available enabling configuration controls for editing ## Sensor -The `ld2420` sensor allows you to use your {{< docref "ld2420/" >}} to approximate the distance +The `ld2420` sensor allows you to use your [Ld2420](/components/sensor/ld2420/) to approximate the distance between the sensor and an object moving within its field of detection. ```yaml @@ -309,7 +315,7 @@ sensor: ## Binary Sensor -The `ld2420` binary sensor allows you to use your {{< docref "ld2420/" >}} to sense presence. +The `ld2420` binary sensor allows you to use your [Ld2420](/components/sensor/ld2420/) to sense presence. ```yaml binary_sensor: @@ -326,7 +332,7 @@ binary_sensor: ## Text Sensor -The `ld2420` text sensor provides version information for the {{< docref "ld2420/" >}}. +The `ld2420` text sensor provides version information for the [Ld2420](/components/sensor/ld2420/). ```yaml text_sensor: @@ -337,7 +343,7 @@ text_sensor: ### Configuration variables -- **fw_version** (*Optional*): Allows you to retrieve the {{< docref "ld2420/" >}} firmware version. May contain any options from +- **fw_version** (*Optional*): Allows you to retrieve the [Ld2420](/components/sensor/ld2420/) firmware version. May contain any options from [Text Sensor](/components/text_sensor#config-text_sensor). ## Important Information diff --git a/content/components/sensor/ld2450.md b/src/content/docs/components/sensor/ld2450.mdx similarity index 90% rename from content/components/sensor/ld2450.md rename to src/content/docs/components/sensor/ld2450.mdx index 99c3cfb7eb..1e677f0730 100644 --- a/content/components/sensor/ld2450.md +++ b/src/content/docs/components/sensor/ld2450.mdx @@ -1,15 +1,15 @@ --- description: "Instructions for setting up LD2450 sensors." title: "LD2450 Sensor" -params: - seo: - description: Instructions for setting up LD2450 sensors. - image: ld2450.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + ## Component -{{< anchor "ld2450-component" >}} + The `ld2450` component allows you to use the [HLK-LD2450](https://www.hlktech.net/index.php?id=1157) human presence, motion detection and tracking radar module with ESPHome. @@ -23,7 +23,7 @@ for use indoors to enable the location tracking of moving human targets. [HLK-LD2450 official data sheet and user manuals](https://drive.google.com/drive/folders/1aItrdziwnEqI-ovDWf24Lj6ioALaljFA?usp=sharing) -{{< anchor "ld2450-mobile-apps" >}} + [HLKRadarTool Android App](https://play.google.com/store/apps/details?id=com.hlk.hlkradartool) @@ -33,7 +33,14 @@ for use indoors to enable the location tracking of moving human targets. > Ensure that the LD2450 firmware version is `V2.02.23090617` or later for proper integration functionality. You > can use the [HLKRadarTool mobile app](#ld2450-mobile-apps) to update the firmware. -{{< img src="ld2450.png" alt="Image" caption="HLK-LD2450 radar module" width="50.0%" class="align-center" >}} +
    The [UART](/components/uart) is required to be set up in your configuration for this sensor to work, `parity` and `stop_bits` **must be** respectively `NONE` and `1`. Use of hardware a UART is highly recommended in order to @@ -47,13 +54,13 @@ ld2450: ### Configuration variables -- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this {{< docref "ld2450/" >}} component. +- **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this [Ld2450](/components/sensor/ld2450/) component. - **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) to use. Required if you have multiple UARTs configured. - **on_data** (*Optional*, [Automation](/automations)): An automation to perform after each report is received. All target values are guaranteed to be up-to-date and consistent. -{{< anchor "ld2450-binary-sensors" >}} + ## Binary Sensor @@ -73,7 +80,7 @@ binary_sensor: ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component. +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component. - **has_target** (*Optional*): True if either target is still or in movement. All options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). @@ -84,7 +91,7 @@ binary_sensor: All options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). > [!NOTE] -> By default, each of the {{< docref "/components/binary_sensor/index" "Binary Sensor" >}} components above includes the +> By default, each of the [Binary Sensor](/components/binary_sensor/) components above includes the > following [filter](/components/binary_sensor#binary_sensor-filters) by default to prevent flooding Home Assistant with state updates: > > ```yaml @@ -96,7 +103,7 @@ binary_sensor: > > To remove the default filter for any given binary sensor instance, add `filters: []` to its configuration. -{{< anchor "ld2450-sensors" >}} + ## Sensor @@ -176,7 +183,7 @@ sensor: ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component. +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component. - **target_count** (*Optional*, int): Total targets detected, whether they are stationary or in motion. All options from [Sensor](/components/sensor). @@ -232,7 +239,7 @@ sensor: [Sensor](/components/sensor). > [!NOTE] -> By default, each of the {{< docref "/components/sensor/index" "Sensor" >}} components above includes the following +> By default, each of the [Sensor](/components/sensor/) components above includes the following > [filters](/components/sensor#sensor-filters) by default to prevent flooding Home Assistant with state updates: > > ```yaml @@ -247,11 +254,11 @@ sensor: > > To remove the default filters for any given sensor instance, add `filters: []` to its configuration. -{{< anchor "ld2450-switch" >}} + ## Switch -The `ld2450` switch allows you to control your {{< docref "ld2450/" >}} `Bluetooth` and `Multi/Single Target Tracking`. +The `ld2450` switch allows you to control your [Ld2450](/components/sensor/ld2450/) `Bluetooth` and `Multi/Single Target Tracking`. ```yaml switch: @@ -263,11 +270,11 @@ switch: name: "Multi Target Tracking" ``` -{{< anchor "ld2450-engineering-mode" >}} + ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component if you are +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component if you are using multiple components. - **bluetooth** (*Optional*): Turn on/off the bluetooth adapter. Defaults to `true`. All options from @@ -276,12 +283,12 @@ switch: - **multi_target** (*Optional*): Turn on/off the Multi Target Tracking option. The initial state set based on the corresponding setting as read from LD2450 module at boot. All options from [Switch](/components/switch#config-switch). -{{< anchor "ld2450-number" >}} + ## Number The `ld2450` number platform allows you to control the presence timeout and zone area configuration of your -{{< docref "ld2450/" >}}. +[Ld2450](/components/sensor/ld2450/). ```yaml number: @@ -320,7 +327,7 @@ number: ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component. +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component. - **presence_timeout** (**Required**, int): The duration, in seconds, for which the [presence states](#ld2450-binary-sensors) will persist even after the detection is cleared. Default is `5` seconds. All options from [Number](/components/number#config-number). @@ -352,7 +359,7 @@ number: ## Button -The `ld2450` button allows you to perform `restart` and `factory reset` actions on your {{< docref "ld2450/" >}}. +The `ld2450` button allows you to perform `restart` and `factory reset` actions on your [Ld2450](/components/sensor/ld2450/). ```yaml button: @@ -366,7 +373,7 @@ button: ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component. +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component. - **factory_reset** (*Optional*): Resets the `ld2450` to its factory default configuration/values. All options from [Button](/components/button#config-button). @@ -374,7 +381,7 @@ button: ## Text Sensor -The `ld2450` text sensor allows you to get information about your {{< docref "ld2450/" >}}. +The `ld2450` text sensor allows you to get information about your [Ld2450](/components/sensor/ld2450/). ```yaml text_sensor: @@ -397,7 +404,7 @@ text_sensor: ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component. +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component. - **version** (*Optional*): The `ld2450` firmware version. All options from [Text Sensor](/components/text_sensor#config-text_sensor). @@ -413,7 +420,7 @@ text_sensor: ## Select -The `ld2450` select allows you to control `baud rate` and `zone type` of your {{< docref "ld2450/" >}}. +The `ld2450` select allows you to control `baud rate` and `zone type` of your [Ld2450](/components/sensor/ld2450/). ```yaml select: @@ -425,11 +432,11 @@ select: name: "Zone Type" ``` -{{< anchor "ld2450-light-function" >}} + ### Configuration variables -- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the {{< docref "ld2450/" >}} component. +- **ld2450_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for the [Ld2450](/components/sensor/ld2450/) component. - **baud_rate** (*Optional*): Control the UART serial port baud rate. Defaults to `256000`. Once changed, all sensors will stop working until a fresh install with an updated [UART Component](/components/uart) configuration. All options from [Select](/components/select#config-select). @@ -441,7 +448,7 @@ select: ## Example configuration -Here is the complete example configuration for {{< docref "ld2450/" >}}. +Here is the complete example configuration for [Ld2450](/components/sensor/ld2450/). ```yaml esphome: @@ -639,4 +646,4 @@ sensor: ## See Also - [Official Datasheet and user manuals](https://drive.google.com/drive/folders/1aItrdziwnEqI-ovDWf24Lj6ioALaljFA?usp=sharing) -- {{< apiref "ld2450/ld2450.h" "ld2450/ld2450.h" >}} +- diff --git a/content/components/sensor/lm75b.md b/src/content/docs/components/sensor/lm75b.mdx similarity index 79% rename from content/components/sensor/lm75b.md rename to src/content/docs/components/sensor/lm75b.mdx index 40518c4a6f..adbb32bab7 100644 --- a/content/components/sensor/lm75b.md +++ b/src/content/docs/components/sensor/lm75b.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up LM75B temperature sensor." title: "LM75B Temperature Sensor" -params: - seo: - description: Instructions for setting up LM75B temperature sensor. - image: lm75b.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The LM75B Temperature sensor allows you to use your NXP Semiconductors LM75B ([datasheet](https://www.nxp.com/docs/en/data-sheet/LM75B.pdf)) sensor with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration @@ -19,7 +19,14 @@ overtemperature detection output. The temperature register always stores an 11-bit twos complement data giving a temperature resolution of 0.125 °C. -{{< img src="lm75b.jpg" alt="Image" caption="LM75B Temperature Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -38,5 +45,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "lm75b/lm75b.h" "lm75b/lm75b.h" >}} - [Datasheet](https://www.nxp.com/docs/en/data-sheet/LM75B.pdf) +- diff --git a/content/components/sensor/lps22.md b/src/content/docs/components/sensor/lps22.mdx similarity index 87% rename from content/components/sensor/lps22.md rename to src/content/docs/components/sensor/lps22.mdx index 81b27e2607..aa6339e344 100644 --- a/content/components/sensor/lps22.md +++ b/src/content/docs/components/sensor/lps22.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up LPS22 barometric pressure sensor" title: "LPS22 Barometric Pressure Sensor" -params: - seo: - description: Instructions for setting up LPS22 barometric pressure sensor --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `lps22` sensor platform allows you to use your LPS22HB or LPS22HH pressure sensor ([datasheet](https://www.st.com/resource/en/application_note/an4672-lps22hblps25hb-digital-pressure-sensors-hardware-guidelines-for-system-integration-stmicroelectronics.pdf)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="lps22.webp" alt="Image" class="align-center" >}} + ```yaml sensor: @@ -45,4 +45,4 @@ saving significant power. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "lps22/lps22.h" "lps22/lps22.h" >}} +- diff --git a/content/components/sensor/ltr390.md b/src/content/docs/components/sensor/ltr390.mdx similarity index 87% rename from content/components/sensor/ltr390.md rename to src/content/docs/components/sensor/ltr390.mdx index a66abf05d1..f0667bb6fd 100644 --- a/content/components/sensor/ltr390.md +++ b/src/content/docs/components/sensor/ltr390.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up LTR390 UV and light sensor" title: "LTR390 UV and Ambient Light Sensor" -params: - seo: - description: Instructions for setting up LTR390 UV and light sensor - image: ltr390.jpg --- +import { Image } from 'astro:assets'; +import ltr390FullImg from './images/ltr390-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ltr390` sensor platform allows you to use your LTR390 UV and ambient light sensor ([datasheet](https://optoelectronics.liteon.com/upload/download/DS86-2015-0004/LTR-390UV_Final_%20DS_V1%201.pdf), [Adafruit](https://www.adafruit.com/product/4831)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ltr390-full.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml sensor: @@ -64,14 +64,14 @@ sensor: ## Lux and UVI Formulas -{{< math >}} -\text{lux} = \frac{0.6 \times \text{als}}{\text{gain} \times \frac{\text{int}}{100} } \times \text{wfac} +$$ +\text{lux} = \frac{0.6 \times \text{als}}{\text{gain} \times \text{int}/100} \times \text{wfac} +$$ -{{< /math >}} -{{< math >}} +$$ \text{UVI} = \frac{\text{uv}}{\text{sensitivity}} \times \text{wfac} +$$ -{{< /math >}} where: - `als` and `uv` are the sensor values. @@ -85,11 +85,11 @@ the data sheet only provides accurate conversion formula for this combination. T this reference point when using other combinations of gain and resolution, which may be slightly inaccurate. The scaling formula is: -{{< math >}} +$$ \text{sensitivity} = 2300 \times \frac{\text{gain}}{18} \times \frac{\text{int}}{400} +$$ -{{< /math >}} -where :math:`2300` is the sensor count per UVI at the default configuration. +where `2300` is the sensor count per UVI at the default configuration. ## Gain @@ -113,8 +113,8 @@ where :math:`2300` is the sensor count per UVI at the default configuration. ## See Also -- {{< docref "/components/sensor/bh1750" >}} -- {{< docref "/components/sensor/tsl2561" >}} +- [BH1750 Ambient Light Sensor](/components/sensor/bh1750/) +- [TSL2561 Ambient Light Sensor](/components/sensor/tsl2561/) - [TEMT6000](https://devices.esphome.io/devices/temt6000) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ltr390/ltr390.h" "ltr390/ltr390.h" >}} +- diff --git a/content/components/sensor/ltr501.md b/src/content/docs/components/sensor/ltr501.mdx similarity index 94% rename from content/components/sensor/ltr501.md rename to src/content/docs/components/sensor/ltr501.mdx index 6213e9a82e..a727ce7e8f 100644 --- a/content/components/sensor/ltr501.md +++ b/src/content/docs/components/sensor/ltr501.mdx @@ -1,15 +1,27 @@ --- description: "Instructions for setting up LTR301, LTR501, LTR558 ambient light sensors/proximity sensors with ESPHome." title: "Lite-On Ambient Light & Proximity Sensors" -params: - seo: - description: Instructions for setting up LTR301, LTR501, LTR558 ambient light sensors/proximity sensors with ESPHome. - image: ltr501.jpg --- -{{< img src="ltr501-full.jpg" alt="Image" caption="LTR-501 on a breadboard from Olimex" width="60.0%" class="align-center" >}} - -{{< img src="ltr501-ui.png" alt="Image" caption="LTR-501 Sensor in Home Assistant UI." width="60.0%" class="align-center" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ltr501FullImg from './images/ltr501-full.jpg'; +import ltr501UiImg from './images/ltr501-ui.png'; +import APIRef from '@components/APIRef.astro'; + +
    + +
    The `ltr501` sensor platform allows you to use a range of LiteOn ambient light and proximity sensors with ESPHome. @@ -168,4 +180,4 @@ may simply use the shorthand syntax for the sensor. For example: `ambient_light: - [LTR-501ALS datasheet](https://github.com/latonita/datasheets-storage/blob/main/sensors/LTR-501ALS-01.pdf) - [LTR-558ALS datasheet](https://github.com/latonita/datasheets-storage/blob/main/sensors/ltr-558als-01%20LITE-S-A0000286415-1.pdf) - [LTR-301ALS datasheet](https://github.com/latonita/datasheets-storage/blob/main/sensors/LTR-301ALS-01_PrelimDS_ver1.pdf) -- {{< apiref "ltr501/ltr501.h" "ltr501/ltr501.h" >}} +- diff --git a/content/components/sensor/ltr_als_ps.md b/src/content/docs/components/sensor/ltr_als_ps.mdx similarity index 91% rename from content/components/sensor/ltr_als_ps.md rename to src/content/docs/components/sensor/ltr_als_ps.mdx index a69c62f367..676a7307dd 100644 --- a/content/components/sensor/ltr_als_ps.md +++ b/src/content/docs/components/sensor/ltr_als_ps.mdx @@ -1,15 +1,28 @@ --- description: "Instructions for setting up LTR303, LTR329, LTR553, LTR556, LTR559, LTR659 ambient light sensors/proximity sensors with ESPHome." title: "Lite-On Ambient Light & Proximity Sensors" -params: - seo: - description: Instructions for setting up LTR303, LTR329, LTR553, LTR556, LTR559, LTR659 ambient light sensors/proximity sensors with ESPHome. - image: ltr303.jpg --- -{{< img src="ltr303-full.jpg" alt="Image" caption="LTR-329 and LTR-303 Ambient Light Sensors." width="90.0%" class="align-center" >}} - -{{< img src="ltr303-ui.png" alt="Image" caption="LTR-303 Sensor in Home Assistant UI." width="60.0%" class="align-center" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ltr303FullImg from './images/ltr303-full.jpg'; +import ltr303UiImg from './images/ltr303-ui.png'; +import ltr303SpectralImg from './images/ltr303-spectral.png'; +import APIRef from '@components/APIRef.astro'; + +
    + +
    The `ltr_als_ps` sensor platform allows you to use a range of LiteOn ambient light and proximity sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. @@ -37,7 +50,12 @@ available for user to configure. Use higher gain for dimmer areas. The devices consist of two photodiodes: The _CH0_ diode is sensitive to both visible and infrared light and the _CH1_ diode is sensitive only to infrared light. -{{< img src="ltr303-spectral.png" alt="Image" caption="CH0 and CH1 typical spectral response" width="100.0%" class="align-center" >}} +
    ### Ambient light illuminance calculation @@ -163,4 +181,4 @@ may simply use the shorthand syntax for the sensor. For example: `ambient_light: - [LTR-303ALS datasheet](https://github.com/latonita/datasheets-storage/blob/main/sensors/LTR-303ALS-01_DS_V1.pdf) - Application note [LTR-303ALS & LTR-329ALS Appendix A](https://github.com/latonita/datasheets-storage/blob/main/sensors/LTR-303%20329_Appendix%20A%20Ver_1.0_22%20Feb%202013.pdf) - [LTR-559ALS datasheet](https://github.com/latonita/datasheets-storage/blob/main/sensors/ltr-559als-01_ds_v1.pdf) -- {{< apiref "ltr_als_ps/ltr_als_ps.h" "ltr_als_ps/ltr_als_ps.h" >}} +- diff --git a/content/components/sensor/lvgl.md b/src/content/docs/components/sensor/lvgl.mdx similarity index 70% rename from content/components/sensor/lvgl.md rename to src/content/docs/components/sensor/lvgl.mdx index dea2f800ca..9767b2092d 100644 --- a/content/components/sensor/lvgl.md +++ b/src/content/docs/components/sensor/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL widget sensor component." title: "LVGL Sensor" -params: - seo: - description: Instructions for setting up an LVGL widget sensor component. - image: ../images/lvgl_c_num.png --- The `lvgl` sensor platform creates a sensor component from an LVGL widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widgets are [`arc`](/components/lvgl/widgets#lvgl-widget-arc), [`bar`](/components/lvgl/widgets#lvgl-widget-bar), [`slider`](/components/lvgl/widgets#lvgl-widget-slider) and [`spinbox`](/components/lvgl/widgets#lvgl-widget-spinbox). A single sensor supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome sensor. @@ -31,15 +27,15 @@ sensor: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Arc widget](/components/lvgl/widgets#lvgl-widget-arc) - [Bar widget](/components/lvgl/widgets#lvgl-widget-bar) - [Slider widget](/components/lvgl/widgets#lvgl-widget-slider) - [Spinbox widget](/components/lvgl/widgets#lvgl-widget-spinbox) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) diff --git a/content/components/sensor/m5stack_8angle.md b/src/content/docs/components/sensor/m5stack_8angle.mdx similarity index 88% rename from content/components/sensor/m5stack_8angle.md rename to src/content/docs/components/sensor/m5stack_8angle.mdx index 43c6583152..d75b29b90c 100644 --- a/content/components/sensor/m5stack_8angle.md +++ b/src/content/docs/components/sensor/m5stack_8angle.mdx @@ -1,18 +1,24 @@ --- description: "Setting up the M5Stack Unit 8 Angle input device with 8 knobs." title: "M5Stack Unit 8 Angle" -params: - seo: - description: Setting up the M5Stack Unit 8 Angle input device with 8 knobs. - image: m5stack_8angle.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import m5stack8angleImg from './images/m5stack_8angle.jpg'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `m5stack_8angle` platform allows to use the [m5angle](https://docs.m5stack.com/en/unit/UNIT%208Angle) input device with ESPHome. It has 8 knobs, a switch and can individually drive 9 RGB LEDs. -{{< img src="m5stack_8angle.jpg" alt="Image" caption="The m5stack_8angle unit." width="75.0%" class="align-center" >}} +
    The `m5stack_8angle` component communicates through an [I²C](/components/i2c) bus and uses a default address of 0x43. @@ -124,7 +130,7 @@ light: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "/components/binary_sensor" >}} -- {{< docref "/components/light" >}} -- {{< docref "template/" >}} -- {{< apiref "m5stack_8angle/m5stack_8angle.h" "m5stack_8angle/m5stack_8angle.h" >}} +- [Binary Sensor Component](/components/binary_sensor/) +- [Light Component](/components/light/) +- [Template Sensor](/components/sensor/template/) +- diff --git a/content/components/sensor/max17043.md b/src/content/docs/components/sensor/max17043.mdx similarity index 92% rename from content/components/sensor/max17043.md rename to src/content/docs/components/sensor/max17043.mdx index 4e12205903..c087a60f5a 100644 --- a/content/components/sensor/max17043.md +++ b/src/content/docs/components/sensor/max17043.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up Analog Devices MAX17043 battery fuel gauge in ESPHome." title: "Analog Devices MAX17043 battery fuel gauge" -params: - seo: - description: Instructions for setting up Analog Devices MAX17043 battery fuel gauge in ESPHome. - image: max17043.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The MAX17043 platform allows you to use a MAX17043 to more accurately monitor the remaining capacity of a LIPO battery ([datasheet](https://www.analog.com/en/products/max17043.html#documentation), [DFRobot](https://www.dfrobot.com/product-1734.html)) in ESPHome. It uses the [I²C Bus](/components/i2c) for communication (the address is fixed at 0x36). @@ -23,7 +22,14 @@ This overcomes the reality that measured battery voltage does not correlate well > [!NOTE] > See hardware design discussion below - it's important to leave the MAX17043 powered on during deep sleep. -{{< img src="max17043.jpg" alt="Image" caption="DFRobot DFR0563 Gravity I2C 3.7V Li battery fuel gauge." width="60.0%" class="align-center" >}} +
    ## Configuration @@ -89,7 +95,7 @@ on_...: > > So, only call `sleep_mode()` when you intend to send the ESP into deep sleep. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "/components/deep_sleep" >}} +- [Deep Sleep Component](/components/deep_sleep/) diff --git a/content/components/sensor/max31855.md b/src/content/docs/components/sensor/max31855.mdx similarity index 76% rename from content/components/sensor/max31855.md rename to src/content/docs/components/sensor/max31855.mdx index ad8742c841..19d087b5c1 100644 --- a/content/components/sensor/max31855.md +++ b/src/content/docs/components/sensor/max31855.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up MAX31855 Thermocouple temperature sensors." title: "MAX31855 K-Type Thermocouple Temperature Sensor" -params: - seo: - description: Instructions for setting up MAX31855 Thermocouple temperature sensors. - image: max31855.jpg --- +import { Image } from 'astro:assets'; +import temperatureImg from './images/temperature.png'; +import APIRef from '@components/APIRef.astro'; + The `max31855` temperature sensor allows you to use your MAX31855 thermocouple temperature sensor ([datasheet](https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf)) with ESPHome @@ -16,7 +16,7 @@ to have an [SPI bus](/components/spi) in your configuration with the **miso_pin* Connect `GND` to `GND`, `VCC` to `3.3V` and the other three `MISO` (or `SO` for short), `CS` and `CLOCK` (or `CLK` ) to free GPIO pins. -{{< img src="temperature.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -45,9 +45,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "adc/" >}} -- {{< docref "max6675/" >}} -- {{< docref "max31865/" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [Analog To Digital Sensor](/components/sensor/adc/) +- [MAX6675 K-Type Thermocouple Temperature Sensor](/components/sensor/max6675/) +- [MAX31865 Platinum RTD Temperature Sensor](/components/sensor/max31865/) - [MAX31855 Library](https://github.com/adafruit/Adafruit-MAX31855-library) by [Adafruit](https://www.adafruit.com/) -- {{< apiref "max31855/max31855.h" "max31855/max31855.h" >}} +- diff --git a/content/components/sensor/max31856.md b/src/content/docs/components/sensor/max31856.mdx similarity index 72% rename from content/components/sensor/max31856.md rename to src/content/docs/components/sensor/max31856.mdx index 1139d8ed55..75dee8c174 100644 --- a/content/components/sensor/max31856.md +++ b/src/content/docs/components/sensor/max31856.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up MAX31856 Thermocouple temperature sensors." title: "MAX31856 Thermocouple Temperature Sensor" -params: - seo: - description: Instructions for setting up MAX31856 Thermocouple temperature sensors. - image: max31856.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import max31856FullImg from './images/max31856-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `MAX31856` temperature sensor allows you to use your MAX31856 Thermocouple temperature sensor ([datasheet](https://datasheets.maximintegrated.com/en/ds/MAX31856.pdf)) with ESPHome. -{{< img src="max31856-full.jpg" alt="Image" caption="MAX31856 Sensor. Image by [Adafruit](https://www.adafruit.com)" width="50.0%" class="align-center" >}} +
    As the communication with the MAX31856 is done using SPI, you need to have an [spi bus](/components/spi) in your configuration with both **miso_pin** and **mosi_pin** set. @@ -46,10 +52,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "adc/" >}} -- {{< docref "max6675/" >}} -- {{< docref "max31855/" >}} -- {{< docref "max31865/" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [Analog To Digital Sensor](/components/sensor/adc/) +- [MAX6675 K-Type Thermocouple Temperature Sensor](/components/sensor/max6675/) +- [MAX31855 K-Type Thermocouple Temperature Sensor](/components/sensor/max31855/) +- [MAX31865 Platinum RTD Temperature Sensor](/components/sensor/max31865/) - [MAX31856 Library](https://github.com/adafruit/Adafruit_MAX31856) by [Adafruit](https://www.adafruit.com/) -- {{< apiref "MAX31856/MAX31856.h" "MAX31856/MAX31856.h" >}} +- diff --git a/content/components/sensor/max31865.md b/src/content/docs/components/sensor/max31865.mdx similarity index 75% rename from content/components/sensor/max31865.md rename to src/content/docs/components/sensor/max31865.mdx index fec78bc679..0b5690bcb8 100644 --- a/content/components/sensor/max31865.md +++ b/src/content/docs/components/sensor/max31865.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up MAX31865 platinum RTD temperature sensors." title: "MAX31865 Platinum RTD Temperature Sensor" -params: - seo: - description: Instructions for setting up MAX31865 platinum RTD temperature sensors. - image: max31865.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import max31865FullImg from './images/max31865-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `max31865` temperature sensor allows you to use your max31865 RTD temperature sensor ([datasheet](https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf)) with ESPHome -{{< img src="max31865-full.jpg" alt="Image" caption="MAX31865 Sensor. Image by [Adafruit](https://www.adafruit.com)" width="50.0%" class="align-center" >}} +
    As the communication with the MAX31865 is done using SPI, you need to have an [spi bus](/components/spi) in your configuration with both **miso_pin** and **mosi_pin** set. @@ -53,10 +59,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "adc/" >}} -- {{< docref "max6675/" >}} -- {{< docref "max31855/" >}} -- {{< docref "max31856/" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [Analog To Digital Sensor](/components/sensor/adc/) +- [MAX6675 K-Type Thermocouple Temperature Sensor](/components/sensor/max6675/) +- [MAX31855 K-Type Thermocouple Temperature Sensor](/components/sensor/max31855/) +- [MAX31856 Thermocouple Temperature Sensor](/components/sensor/max31856/) - [MAX31865 Library](https://github.com/adafruit/Adafruit_MAX31865) by [Adafruit](https://www.adafruit.com/) -- {{< apiref "max31865/max31865.h" "max31865/max31865.h" >}} +- diff --git a/content/components/sensor/max44009.md b/src/content/docs/components/sensor/max44009.mdx similarity index 92% rename from content/components/sensor/max44009.md rename to src/content/docs/components/sensor/max44009.mdx index 44fa2930cd..4ad8454a63 100644 --- a/content/components/sensor/max44009.md +++ b/src/content/docs/components/sensor/max44009.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up MAX44009 ambient light sensors in ESPHome." title: "MAX44009 Ambient Light Sensor" -params: - seo: - description: Instructions for setting up MAX44009 ambient light sensors in ESPHome. - image: max44009.svg --- The `max44009` sensor platform allows you to use your MAX44009 @@ -38,5 +34,5 @@ The `max44009` sensor can operate in two modes: `low_power` (default) and `conti ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bh1750/" >}} +- [BH1750 Ambient Light Sensor](/components/sensor/bh1750/) - [MAX44009 Library](https://github.com/RobTillaart/Max44009) by [@RobTillaart](https://github.com/RobTillaart) diff --git a/content/components/sensor/max6675.md b/src/content/docs/components/sensor/max6675.mdx similarity index 71% rename from content/components/sensor/max6675.md rename to src/content/docs/components/sensor/max6675.mdx index 0c96083bbf..6ef7d9db20 100644 --- a/content/components/sensor/max6675.md +++ b/src/content/docs/components/sensor/max6675.mdx @@ -1,16 +1,23 @@ --- description: "Instructions for setting up MAX6675 Thermocouple temperature sensors." title: "MAX6675 K-Type Thermocouple Temperature Sensor" -params: - seo: - description: Instructions for setting up MAX6675 Thermocouple temperature sensors. - image: max6675.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import max6675FullImg from './images/max6675-full.jpg'; +import temperatureImg from './images/temperature.png'; +import APIRef from '@components/APIRef.astro'; + The `max6675` temperature sensor allows you to use your MAX6675 thermocouple temperature sensor ([datasheet](https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf), [SainSmart](https://www.sainsmart.com/products/max6675-module-k-type-thermocouple-thermocouple-sensor-temperature-0-1024-for-arduino)) with ESPHome -{{< img src="max6675-full.jpg" alt="Image" caption="MAX6675 K-Type Thermocouple Temperature Sensor." width="60.0%" class="align-center" >}} +
    As the communication with the MAX6675 is done using SPI, you need to have an [SPI bus](/components/spi) in your configuration with the **miso_pin** set (MOSI is not required). @@ -18,7 +25,7 @@ to have an [SPI bus](/components/spi) in your configuration with the **miso_pin* Connect `GND` to `GND`, `VCC` to `3.3V` and the other three `MISO` (or `SO` for short), `CS` and `CLOCK` (or `CLK` ) to free GPIO pins. -{{< img src="temperature.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -46,8 +53,8 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "adc/" >}} -- {{< docref "sht3xd/" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [Analog To Digital Sensor](/components/sensor/adc/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) - [MAX6675 Library](https://github.com/adafruit/MAX6675-library) by [Adafruit](https://www.adafruit.com/) -- {{< apiref "max6675/max6675.h" "max6675/max6675.h" >}} +- diff --git a/content/components/sensor/max9611.md b/src/content/docs/components/sensor/max9611.mdx similarity index 88% rename from content/components/sensor/max9611.md rename to src/content/docs/components/sensor/max9611.mdx index c878972380..268663b6d1 100644 --- a/content/components/sensor/max9611.md +++ b/src/content/docs/components/sensor/max9611.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up MAX9611 MAX9612 High-Side Current-Sense Amplifier" title: "MAX9611/9612 High Side Current+Voltage+Temperature Sensor" -params: - seo: - description: Instructions for setting up MAX9611 MAX9612 High-Side Current-Sense Amplifier - image: max9611.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `MAX9611` sensor platform allows you to use your MAX9611/MAX9612 ([datasheet](https://datasheets.maximintegrated.com/en/ds/MAX9611-MAX9612.pdf)) High-side current, voltage and temperature sensors with ESPHome. @@ -17,7 +16,14 @@ a 12-Bit integrated ADC with [I²C](/components/i2c), and is meant to act as a h The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="max9611.jpg" alt="Image" caption="MAX9611 High-Side Current-Sense Amplifier" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry diff --git a/content/components/sensor/mcp3008.md b/src/content/docs/components/sensor/mcp3008.mdx similarity index 90% rename from content/components/sensor/mcp3008.md rename to src/content/docs/components/sensor/mcp3008.mdx index e9d72fb2a3..247e94150b 100644 --- a/content/components/sensor/mcp3008.md +++ b/src/content/docs/components/sensor/mcp3008.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up MCP3008 10 Bit Analog to Digital Converter in ESPHome." title: "MCP3008 8-Channel 10-Bit A/D Converter" -params: - seo: - description: Instructions for setting up MCP3008 10 Bit Analog to Digital Converter in ESPHome. - image: mcp3008.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The Microchip Technology Inc. MCP3008 devices are successive approximation 10-bit Analog-to-Digital (A/D) converters with on-board sample and hold circuitry. -{{< img src="mcp3008.jpg" alt="Image" width="50.0%" class="align-center" >}} + -{{< anchor "mcp3008-component" >}} + ## Component/Hub @@ -86,4 +85,4 @@ Configuration variables: ## See Also - [SPI Bus](/components/spi) -- {{< apiref "mcp3008/mcp3008.h" "mcp3008/mcp3008.h" >}} +- diff --git a/content/components/sensor/mcp3204.md b/src/content/docs/components/sensor/mcp3204.mdx similarity index 92% rename from content/components/sensor/mcp3204.md rename to src/content/docs/components/sensor/mcp3204.mdx index 81838e6f1f..90f931f369 100644 --- a/content/components/sensor/mcp3204.md +++ b/src/content/docs/components/sensor/mcp3204.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up MCP3204 & MCP3208 12-Bit Analog to Digital Converter in ESPHome." title: "MCP3204 & MCP3208 12-Bit A/D Converters" -params: - seo: - description: Instructions for setting up MCP3204 & MCP3208 12-Bit Analog to Digital Converter in ESPHome. - image: mcp3204.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The Microchip Technology Inc. MCP3204 & MCP3208 devices are successive approximation 12-bit Analog-to-Digital (A/D) converters with on-board sample and hold circuitry. This component is common for both device types. Configure both devices as MCP3204 and observe the maximum number of channels as per variant used. -{{< img src="mcp3204.jpg" alt="Image" width="50.0%" class="align-center" >}} + -{{< anchor "mcp3204-component" >}} + ## Component/Hub @@ -103,4 +102,4 @@ Available differential pairs: ## See Also - [SPI Bus](/components/spi) -- {{< apiref "mcp3204/mcp3204.h" "mcp3204/mcp3204.h" >}} +- diff --git a/content/components/sensor/mcp3221.md b/src/content/docs/components/sensor/mcp3221.mdx similarity index 83% rename from content/components/sensor/mcp3221.md rename to src/content/docs/components/sensor/mcp3221.mdx index 9b7d458d66..bbe5b5de2b 100644 --- a/content/components/sensor/mcp3221.md +++ b/src/content/docs/components/sensor/mcp3221.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up MCP3221 ADC with ESPHome." title: "MCP3221 12-bit ADC" -params: - seo: - description: Instructions for setting up MCP3221 ADC with ESPHome. - image: mcp3221.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; +import mcp3221Img from './images/mcp3221.png'; + The Microchip Technology Inc. `mcp3221` sensor platform allows you to use your MCP3221 ADC ([datasheet](https://ww1.microchip.com/downloads/en/devicedoc/20001732e.pdf)) with ESPHome. -{{< img src="mcp3221.png" alt="Image" width="50.0%" class="align-center" >}} + ## Sensor @@ -40,4 +40,4 @@ sensor: ## See Also - [I2C Bus](/components/i2c) -- {{< apiref "mcp3221/mcp3221_sensor.h" >}} +- diff --git a/content/components/sensor/mcp9600.md b/src/content/docs/components/sensor/mcp9600.mdx similarity index 85% rename from content/components/sensor/mcp9600.md rename to src/content/docs/components/sensor/mcp9600.mdx index c8327ddbf5..069bd97092 100644 --- a/content/components/sensor/mcp9600.md +++ b/src/content/docs/components/sensor/mcp9600.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up the MCP9600 thermocouple amplifier" title: "MCP9600 Thermocouple Amplifier" -params: - seo: - description: Instructions for setting up the MCP9600 thermocouple amplifier - image: mcp9600.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `mcp9600` sensor platform allows you to use your MCP9600 and MCP9601 ([datasheet](https://cdn-learn.adafruit.com/assets/assets/000/105/040/original/MCP960X-Data-Sheet-20005426%281%29.pdf), [Adafruit](https://www.adafruit.com/product/4101)) to measure the temperature of a connected thermocouple while also measuring the ambient temperature around the sensor with ESPHome. [I²C](/components/i2c) is @@ -15,7 +15,14 @@ required to be set up in your configuration for this sensor to work. > [!NOTE] > The [I²C](/components/i2c) bus must be set to a minimum of `10kHz` due to the limitations of the MCP9600 and MCP9601. -{{< img src="mcp9600.jpg" alt="Image" caption="MCP9600 Thermocouple Amplifier" width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -52,6 +59,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "mcp9600/mcp9600.h" "mcp9600/mcp9600.h" >}} - [Adafruit MCP9600 Library](https://github.com/adafruit/Adafruit_MCP9600) by [Adafruit](https://www.adafruit.com/) - [SparkFun MCP9600 Library](https://github.com/sparkfun/SparkFun_MCP9600_Arduino_Library) by [SparkFun](https://www.sparkfun.com/) +- diff --git a/content/components/sensor/mcp9808.md b/src/content/docs/components/sensor/mcp9808.mdx similarity index 58% rename from content/components/sensor/mcp9808.md rename to src/content/docs/components/sensor/mcp9808.mdx index b97f6c0c7d..eebf37065b 100644 --- a/content/components/sensor/mcp9808.md +++ b/src/content/docs/components/sensor/mcp9808.mdx @@ -1,19 +1,25 @@ --- description: "Instructions for setting up MCP9808 temperature sensor." title: "MCP9808 Temperature Sensor" -params: - seo: - description: Instructions for setting up MCP9808 temperature sensor. - image: mcp9808.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import mcp9808FullImg from './images/mcp9808-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The MCP9808 Temperature sensor allows you to use your MCP9808 ([datasheet](http://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf), [Adafruit](https://www.adafruit.com/product/1782)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="mcp9808-full.jpg" alt="Image" caption="MCP9808 Temperature Sensor. Image by [Adafruit](https://www.adafruit.com)." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -32,10 +38,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< docref "hdc1080/" >}} -- {{< apiref "mcp9808/mcp9808.h" "mcp9808/mcp9808.h" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) - [MCP9808 Library](https://github.com/adafruit/Adafruit_MCP9808_Library) by [AdaFruit](https://www.adafruit.com/) +- diff --git a/content/components/sensor/mhz19.md b/src/content/docs/components/sensor/mhz19.mdx similarity index 86% rename from content/components/sensor/mhz19.md rename to src/content/docs/components/sensor/mhz19.mdx index 773f63a71a..77cd3f8d7b 100644 --- a/content/components/sensor/mhz19.md +++ b/src/content/docs/components/sensor/mhz19.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up MH-Z19 CO2 and temperature sensors" title: "MH-Z19 CO_2 and Temperature Sensor" -params: - seo: - description: Instructions for setting up MH-Z19 CO2 and temperature sensors - image: mhz19.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import mhz19FullImg from './images/mhz19-full.jpg'; +import mhz19PinsImg from './images/mhz19-pins.jpg'; +import APIRef from '@components/APIRef.astro'; + The `mhz19` sensor platform allows you to use MH-Z19 CO_2 and temperature sensors ([Revspace](https://revspace.nl/MHZ19)) with ESPHome. The CO_2 measurement also works with the MH-Z16 and MH-Z14 sensors. -{{< img src="mhz19-full.jpg" alt="Image" caption="MH-Z19 CO_2 and Temperature Sensor." width="50.0%" class="align-center" >}} +
    As the communication with the MH-Z19 is done using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the @@ -55,9 +62,14 @@ sensor: - **detection_range** (*Optional*): The CO_2 sensor can be configured to detect different ranges: 0-2000ppm, 0-5000ppm, or 0-10000ppm. Valid values are `2000ppm`, `5000ppm`, or `10000ppm`. Sensors come from the factory with one of these ranges pre-configured, and this setting persists in the sensor's non-volatile memory. If not specified, the previously configured range is used. -{{< img src="mhz19-pins.jpg" alt="Image" caption="Pins on the MH-Z19. Only the ones marked with a red circle need to be connected." width="80.0%" class="align-center" >}} +
    -{{< anchor "mhz19-calibrate_zero_action" >}} + ## `mhz19.calibrate_zero` Action @@ -82,7 +94,7 @@ api: - mhz19.calibrate_zero: my_mhz19_id ``` -{{< anchor "mhz19-abc_enable_action" >}} + ## `mhz19.abc_enable` Action @@ -94,7 +106,7 @@ on_...: - mhz19.abc_enable: my_mhz19_id ``` -{{< anchor "mhz19-abc_disable_action" >}} + ## `mhz19.abc_disable` Action @@ -119,7 +131,7 @@ switch: mhz19.abc_disable: my_mhz19_id ``` -{{< anchor "mhz19-detection_range_set_action" >}} + ## `mhz19.detection_range_set` Action @@ -137,4 +149,4 @@ on_...: - [Sensor Filters](/components/sensor#sensor-filters) - [MH-Z19 library](https://github.com/nara256/mhz19_uart) by [@nara356](https://github.com/nara256) -- {{< apiref "mhz19/mhz19.h" "mhz19/mhz19.h" >}} +- diff --git a/content/components/sensor/mics_4514.md b/src/content/docs/components/sensor/mics_4514.mdx similarity index 90% rename from content/components/sensor/mics_4514.md rename to src/content/docs/components/sensor/mics_4514.mdx index 7c5e5da82a..d0a05a34b7 100644 --- a/content/components/sensor/mics_4514.md +++ b/src/content/docs/components/sensor/mics_4514.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up MiCS 4514 Gas sensors." title: "MiCS 4514 Gas Sensor" -params: - seo: - description: Instructions for setting up MiCS 4514 Gas sensors. - image: mics_4514.jpg --- +import APIRef from '@components/APIRef.astro'; + This component exposes the different gas concentration sensors from the [MiCS-4514](https://www.dfrobot.com/product-2417.html). This is a differnet sensor than the MICS-4514 being sold on AliExpress. @@ -48,4 +46,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "mics_4514/mics_4514.h" "mics_4514/mics_4514.h" >}} +- diff --git a/content/components/sensor/mlx90393.md b/src/content/docs/components/sensor/mlx90393.mdx similarity index 92% rename from content/components/sensor/mlx90393.md rename to src/content/docs/components/sensor/mlx90393.mdx index 4acec4aa5b..c28978f07b 100644 --- a/content/components/sensor/mlx90393.md +++ b/src/content/docs/components/sensor/mlx90393.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up MLX90393 Triple-Axis magnetometer sensor." title: "MLX90393 Triple-axis Magnetometer" -params: - seo: - description: Instructions for setting up MLX90393 Triple-Axis magnetometer sensor. - image: mlx90393.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import mlx90393FullImg from './images/mlx90393-full.jpg'; +import mlx90393ResolutionImg from './images/mlx90393-resolution.svg'; + The `mlx90393` sensor platform allows you to use your MLX90393 ([datasheet](https://media.melexis.com/-/media/files/documents/datasheets/mlx90393-datasheet-melexis.pdf), [Adafruit](https://www.adafruit.com/product/4022)) three axis magnetometer with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="mlx90393-full.jpg" alt="Image" caption="MLX90393 Triple-axis Magnetometer" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -109,7 +115,12 @@ The **gain** option controls this amplifier. Too much amplification will cause s After amplification, the analog signal is digitized using a 19-bit ADC. Only 16 bits are sent to ESPHome. The **resolution** option chooses which bits are sent. -{{< img src="mlx90393-resolution.svg" alt="Image" caption="Resolution options and which bits they report to ESPHome. `DIV_8` sends the most significant 16 bits, while `DIV_1` sends the least significant bits." width="90.0%" class="align-center" >}} +
    Note that the ADC doesn't actually fill all its 19 bits. This causes `DIV_4` to have the same maximum field as `DIV_8`, while giving better sensitivity. Only `DIV_2` and `DIV_1` actually use all values, giving them the best dynamic range. However, both will cause integer overflows when the maximum field strength is exceeded. diff --git a/content/components/sensor/mlx90614.md b/src/content/docs/components/sensor/mlx90614.mdx similarity index 83% rename from content/components/sensor/mlx90614.md rename to src/content/docs/components/sensor/mlx90614.mdx index e16db4f2a3..572e0f32d5 100644 --- a/content/components/sensor/mlx90614.md +++ b/src/content/docs/components/sensor/mlx90614.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up Melexis MLX90614 non-contact thermometer." title: "MLX90614 non-contact thermometer" -params: - seo: - description: Instructions for setting up Melexis MLX90614 non-contact thermometer. - image: mlx90614.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `mlx90614` sensor platform allows you to use your Melexis MLX90614 non-contact infrared thermometer ([Datasheet](https://www.melexis.com/en/documents/documentation/datasheets/datasheet-mlx90614), [Product Page](https://www.melexis.com/en/product/MLX90614/Digital-Plug-Play-Infrared-Thermometer-TO-Can)) with ESPHome. Sensor measures both ambient and object temperature that can be enabled independently. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="mlx90614.jpg" alt="Image" caption="MLX90614 non-contact thermometer" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -44,4 +51,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "mlx90614/mlx90614.h" "mlx90614/mlx90614.h" >}} +- diff --git a/content/components/sensor/mmc5603.md b/src/content/docs/components/sensor/mmc5603.mdx similarity index 84% rename from content/components/sensor/mmc5603.md rename to src/content/docs/components/sensor/mmc5603.mdx index 5643cefc60..5a54063d0e 100644 --- a/content/components/sensor/mmc5603.md +++ b/src/content/docs/components/sensor/mmc5603.mdx @@ -1,20 +1,27 @@ --- description: "Instructions for setting up MMC5603 IMU compass sensors." title: "MMC5603 Magnetometer" -params: - seo: - description: Instructions for setting up MMC5603 IMU compass sensors. - image: mmc5603.jpg --- -{{< anchor "mmc5603" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + The `mmc5603` allows you to use your MMC5603 triple-axis magnetometers ([datasheet](https://cdn-learn.adafruit.com/assets/assets/000/113/957/original/MMC5603NJ_RevB_7-12-18.pdf?1659554945), [Adafruit](https://www.adafruit.com/product/5579)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="mmc5603.jpg" alt="Image" caption="MMC5603 Magnetometer." width="30.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -62,5 +69,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< apiref "mmc5603/mmc5603.h" "mmc5603/mmc5603.h" >}} +- [Template Sensor](/components/sensor/template/) +- diff --git a/content/components/sensor/mmc5983.md b/src/content/docs/components/sensor/mmc5983.mdx similarity index 79% rename from content/components/sensor/mmc5983.md rename to src/content/docs/components/sensor/mmc5983.mdx index f1d82f2e06..d72a935ce8 100644 --- a/content/components/sensor/mmc5983.md +++ b/src/content/docs/components/sensor/mmc5983.mdx @@ -1,20 +1,27 @@ --- description: "Instructions for setting up MMC5983 magnetometer." title: "MMC5983 Magnetometer" -params: - seo: - description: Instructions for setting up MMC5983 magnetometer. - image: mmc5983.jpg --- -{{< anchor "mmc5983" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + + The `mmc5983` component allows you to use your MMC5983 triple-axis magnetometer ([datasheet](https://www.memsic.com/Public/Uploads/uploadfile/files/20220119/MMC5983MADatasheetRevA.pdf), [SparkFun](https://www.sparkfun.com/products/19921)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up for this sensor to work. The device supports 400kHz operation, so you may specify up to `frequency: 400kHz` in your `i2c` configuration. -{{< img src="mmc5983.jpg" alt="Image" caption="MMC5983 Magnetometer." width="30.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -48,6 +55,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "mmc5603/" >}} -- {{< apiref "mmc5983/mmc5983.h" "mmc5983/mmc5983.h" >}} +- [MMC5603 Magnetometer](/components/sensor/mmc5603/) - [SparkFun MMC5983MA Magnetometer Arduino Library](https://github.com/sparkfun/SparkFun_MMC5983MA_Magnetometer_Arduino_Library) +- diff --git a/content/components/sensor/modbus_controller.md b/src/content/docs/components/sensor/modbus_controller.mdx similarity index 90% rename from content/components/sensor/modbus_controller.md rename to src/content/docs/components/sensor/modbus_controller.mdx index f6b6d97111..dc641f4c13 100644 --- a/content/components/sensor/modbus_controller.md +++ b/src/content/docs/components/sensor/modbus_controller.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up a modbus_controller device sensor." title: "Modbus Controller Sensor" -params: - seo: - description: Instructions for setting up a modbus_controller device sensor. - image: modbus.png --- The `modbus_controller` sensor platform creates a sensor from a modbus_controller component -and requires {{< docref "/components/modbus_controller" >}} to be configured. +and requires [Modbus Controller](/components/modbus_controller/) to be configured. ## Configuration variables @@ -46,7 +42,7 @@ and requires {{< docref "/components/modbus_controller" >}} to be configured. Parameters passed into the lambda - **x** (float): The parsed float value of the modbus data - - **data** (std::vector`): vector containing the complete raw modbus response bytes for this sensor *note:* because the response contains data for all registers in the same range you have to use `data[item->offset]` to get the first response byte for your sensor. - **item** (const pointer to a SensorItem derived object): The sensor object itself. @@ -123,12 +119,12 @@ sensor: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) - [EPEVER MPPT Solar Charge Controller (Tracer-AN Series)](https://devices.esphome.io/devices/epever_mptt_tracer_an) diff --git a/content/components/sensor/mopeka_pro_check.md b/src/content/docs/components/sensor/mopeka_pro_check.mdx similarity index 86% rename from content/components/sensor/mopeka_pro_check.md rename to src/content/docs/components/sensor/mopeka_pro_check.mdx index 5271e97312..1124a31690 100644 --- a/content/components/sensor/mopeka_pro_check.md +++ b/src/content/docs/components/sensor/mopeka_pro_check.mdx @@ -1,15 +1,16 @@ --- description: "Instructions for setting up Mopeka Pro Check or Lippert Propane Tank bluetooth-based sensors in ESPHome." title: "Mopeka Pro Check BLE Sensor" -params: - seo: - description: Instructions for setting up Mopeka Pro Check or Lippert Propane Tank bluetooth-based sensors in ESPHome. - image: mopeka_pro_check.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; +import mopekaProCheckLippertImg from './images/mopeka_pro_check_lippert.jpg'; + The `mopeka_pro_check` sensor platform lets you track the output of Mopeka Pro Check LP, Mopeka Pro Plus, Mopeka Pro Universal or Lippert Propane Tank Sensors, Bluetooth Low -Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. This component +Energy devices using the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track the tank level, distance, temperature, battery percentage, and sensor reading quality of a device every time the sensor sends out a BLE broadcast. There are additional configuration options to control handling of poor quality readings and reporting reading quality issues. @@ -24,11 +25,23 @@ to control handling of poor quality readings and reporting reading quality issue > > Sensors are calibrated for propane only. > -> See {{< docref "/components/sensor/mopeka_std_check" >}} for original Mopeka Check sensors support. - -{{< img src="mopeka_pro_check.jpg" alt="Image" caption="Mopeka Pro Check LP over BLE." class="align-center" >}} - -{{< img src="mopeka_pro_check_lippert.jpg" alt="Image" caption="Lippert™ Propane Tank Sensor" class="align-center" >}} +> See [Mopeka Std Check](/components/sensor/mopeka_std_check/) for original Mopeka Check sensors support. + +
    + +
    The original Mopeka Check sensors are not supported. @@ -172,8 +185,8 @@ Then just copy the address (`XX:XX:XX:XX:XX:XX` ) into a new ## See Also -+ {{< docref "/components/esp32_ble_tracker" >}} -+ {{< docref "/components/sensor" >}} -+ {{< apiref "mopeka_pro_check/mopeka_pro_check.h" "mopeka_pro_check/mopeka_pro_check.h" >}} -+ `Mopeka ` ++ [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) ++ [Sensor Component](/components/sensor/) ++ ++ [Mopeka](https://www.mopekaiot.com/shop) + [Lippert](https://store.lci1.com/lippert-propane-tank-sensor-2021130655) diff --git a/content/components/sensor/mopeka_std_check.md b/src/content/docs/components/sensor/mopeka_std_check.mdx similarity index 86% rename from content/components/sensor/mopeka_std_check.md rename to src/content/docs/components/sensor/mopeka_std_check.mdx index 7bdb653805..6f3cb40558 100644 --- a/content/components/sensor/mopeka_std_check.md +++ b/src/content/docs/components/sensor/mopeka_std_check.mdx @@ -1,23 +1,30 @@ --- description: "Instructions for setting up Mopeka Standard Check bluetooth-based sensors in ESPHome." title: "Mopeka Standard Check BLE Sensor" -params: - seo: - description: Instructions for setting up Mopeka Standard Check bluetooth-based sensors in ESPHome. - image: mopeka_std_check.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `mopeka_std_check` sensor platform lets you track the output of Mopeka Standard Check LP Bluetooth Low Energy devices using the -{{< docref "/components/esp32_ble_tracker" >}}. This component will track the tank level, +[Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track the tank level, distance, temperature, and battery percentage of a Mopeka Standard Check LP BLE device every time the sensor sends out a BLE broadcast. > [!WARNING] > This sensor component only supports the Mopeka Standard Check devices. -> See {{< docref "/components/sensor/mopeka_pro_check" >}} for Mopeka Pro Check sensors support. +> See [Mopeka Pro Check](/components/sensor/mopeka_pro_check/) for Mopeka Pro Check sensors support. -{{< img src="mopeka_std_check.jpg" alt="Image" caption="Mopeka Std Check LP over BLE." class="align-center" >}} +
    ```yaml esp32_ble_tracker: @@ -135,6 +142,6 @@ Then just copy the address (`XX:XX:XX:XX:XX:XX` ) into a new ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} -- {{< apiref "mopeka_std_check/mopeka_std_check.h" "mopeka_std_check/mopeka_std_check.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) +- diff --git a/content/components/sensor/mpl3115a2.md b/src/content/docs/components/sensor/mpl3115a2.mdx similarity index 69% rename from content/components/sensor/mpl3115a2.md rename to src/content/docs/components/sensor/mpl3115a2.mdx index cd6f7b8e77..2d746a3392 100644 --- a/content/components/sensor/mpl3115a2.md +++ b/src/content/docs/components/sensor/mpl3115a2.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up MPL3115A2 atmospheric pressure sensors." title: "MPL3115A2 Barometric Pressure/Altitude/Temperature Sensor" -params: - seo: - description: Instructions for setting up MPL3115A2 atmospheric pressure sensors. - image: mpl3115a2.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import mpl3115a2FullImg from './images/mpl3115a2-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `mpl3115a2` sensor platform allows you to use your MPL3115A2 atmospheric pressure sensors ([datasheet](https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf), [Adafruit](https://www.adafruit.com/product/1893)) temperature and pressure sensors with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="mpl3115a2-full.jpg" alt="Image" caption="MPL3115A2 Barometric Pressure/Altitude/Temperature Sensor" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -51,8 +57,8 @@ sensor is configured. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bmp280/" >}} -- {{< docref "bme280/" >}} -- {{< docref "bmp085/" >}} -- {{< docref "ms5611/" >}} -- {{< apiref "mpl3115a2/mpl3115a2.h" "mpl3115a2/mpl3115a2.h" >}} +- [BMP280 Temperature+Pressure Sensor](/components/sensor/bmp280/) +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) +- [MS5611 Atmospheric Pressure Sensor](/components/sensor/ms5611/) +- diff --git a/content/components/sensor/mpu6050.md b/src/content/docs/components/sensor/mpu6050.mdx similarity index 80% rename from content/components/sensor/mpu6050.md rename to src/content/docs/components/sensor/mpu6050.mdx index 7e8efc3df9..b344ab44c0 100644 --- a/content/components/sensor/mpu6050.md +++ b/src/content/docs/components/sensor/mpu6050.mdx @@ -1,25 +1,32 @@ --- description: "Instructions for setting up MPU6050 Accelerometer and Gyroscope sensors." title: "MPU6050 Accelerometer/Gyroscope Sensor" -params: - seo: - description: Instructions for setting up MPU6050 Accelerometer and Gyroscope sensors. - image: mpu6050.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import mpu6050FullImg from './images/mpu6050-full.jpg'; +import mpu6050UiImg from './images/mpu6050-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `mpu6050` sensor platform allows you to use your MPU6050 Accelerometer/Gyroscope ([datasheet](https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf), [SparkFun](https://www.sparkfun.com/products/11028)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. This component only does some basic filtering and no calibration. Due to the complexity of this sensor and the amount -of possible configuration options, you should probably create an {{< docref "/components/external_components" "external component" >}} +of possible configuration options, you should probably create an [external component](/components/external_components/) by copying and modifying [the existing code](https://github.com/esphome/esphome/tree/dev/esphome/components/mpu6050) if you want a specific new feature. Supporting all possible use cases would be quite hard. -{{< img src="mpu6050-full.jpg" alt="Image" caption="MPU6050 Accelerometer/Gyroscope Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="mpu6050-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -73,7 +80,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< docref "ultrasonic/" >}} -- {{< apiref "mpu6050/mpu6050.h" "mpu6050/mpu6050.h" >}} +- [Template Sensor](/components/sensor/template/) +- [Ultrasonic Distance Sensor](/components/sensor/ultrasonic/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/mpu6886.md b/src/content/docs/components/sensor/mpu6886.mdx similarity index 88% rename from content/components/sensor/mpu6886.md rename to src/content/docs/components/sensor/mpu6886.mdx index 90c7704928..6775236802 100644 --- a/content/components/sensor/mpu6886.md +++ b/src/content/docs/components/sensor/mpu6886.mdx @@ -1,25 +1,25 @@ --- description: "Instructions for setting up MPU6886 Accelerometer and Gyroscope sensors." title: "MPU6886 Accelerometer/Gyroscope Sensor" -params: - seo: - description: Instructions for setting up MPU6886 Accelerometer and Gyroscope sensors. - image: mpu6886.jpg --- +import { Image } from 'astro:assets'; +import mpu6886UiImg from './images/mpu6886-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `mpu6886` sensor platform allows you to use your MPU6886 Accelerometer/Gyroscope ([datasheet](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/MPU-6886-000193%2Bv1.1_GHIC_en.pdf), [M5Stack](https://docs.m5stack.com/en/unit/imu)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. This component only does some basic filtering and no calibration. Due to the complexity of this sensor and the amount -of possible configuration options, you should probably create an {{< docref "/components/external_components" "external component" >}} +of possible configuration options, you should probably create an [external component](/components/external_components/) by copying and modifying the existing code if you want a specific new feature. Supporting all possible use cases would be quite hard. The MPU6886 is built-in in various M5Stack units (e.g., M5Stick C, ATOM Matrix or M5Stack Core2). -{{< img src="mpu6886-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -73,6 +73,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< apiref "mpu6886/mpu6886.h" "mpu6886/mpu6886.h" >}} +- [Template Sensor](/components/sensor/template/) - [i2cdevlib](https://github.com/jrowberg/i2cdevlib) by [Jeff Rowberg](https://github.com/jrowberg) +- diff --git a/content/components/sensor/mqtt_subscribe.md b/src/content/docs/components/sensor/mqtt_subscribe.mdx similarity index 82% rename from content/components/sensor/mqtt_subscribe.md rename to src/content/docs/components/sensor/mqtt_subscribe.mdx index 5f2a980c71..a029d771e7 100644 --- a/content/components/sensor/mqtt_subscribe.md +++ b/src/content/docs/components/sensor/mqtt_subscribe.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up MQTT subscribe sensors" title: "MQTT Subscribe Sensor" -params: - seo: - description: Instructions for setting up MQTT subscribe sensors - image: mqtt.png --- +import APIRef from '@components/APIRef.astro'; + The `mqtt_subscribe` sensor platform allows you to get external data into ESPHome. The sensor will subscribe to messages on the given MQTT topic and parse each message into @@ -33,4 +31,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "mqtt_subscribe/sensor/mqtt_subscribe_sensor.h" "mqtt_subscribe/sensor/mqtt_subscribe_sensor.h" >}} +- diff --git a/content/components/sensor/ms5611.md b/src/content/docs/components/sensor/ms5611.mdx similarity index 68% rename from content/components/sensor/ms5611.md rename to src/content/docs/components/sensor/ms5611.mdx index 9307eb075b..30d400ef69 100644 --- a/content/components/sensor/ms5611.md +++ b/src/content/docs/components/sensor/ms5611.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up MS5611 atmospheric pressure sensors." title: "MS5611 Atmospheric Pressure Sensor" -params: - seo: - description: Instructions for setting up MS5611 atmospheric pressure sensors. - image: ms5611.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ms5611FullImg from './images/ms5611-full.jpg'; +import ms5611UiImg from './images/ms5611-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `ms5611` sensor platform allows you to use the MS5611 atmospheric pressure-and-temperature sensor with ESPHome (see the [datasheet](https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FMS5611-01BA03%7FB3%7Fpdf%7FEnglish%7FENG_DS_MS5611-01BA03_B3.pdf%7FCAT-BLPS0036) for technical details). The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ms5611-full.jpg" alt="Image" caption="MS5611 Atmospheric Pressure Sensor" width="50.0%" class="align-center" >}} +
    -{{< img src="ms5611-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -45,8 +52,8 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bmp280/" >}} -- {{< docref "bme280/" >}} -- {{< docref "bmp085/" >}} +- [BMP280 Temperature+Pressure Sensor](/components/sensor/bmp280/) +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) +- [BMP085 Temperature+Pressure Sensor](/components/sensor/bmp085/) - [Arduino MS5611 Library](https://github.com/jarzebski/Arduino-MS5611) by [Korneliusz Jarzębski](https://github.com/jarzebski) -- {{< apiref "ms5611/ms5611.h" "ms5611/ms5611.h" >}} +- diff --git a/content/components/sensor/ms8607.md b/src/content/docs/components/sensor/ms8607.mdx similarity index 86% rename from content/components/sensor/ms8607.md rename to src/content/docs/components/sensor/ms8607.mdx index 27391fa852..cabc5fb119 100644 --- a/content/components/sensor/ms8607.md +++ b/src/content/docs/components/sensor/ms8607.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up MS8607 temperature, humidity, and pressure sensors." title: "MS8607 Temperature+Pressure+Humidity Sensor" -params: - seo: - description: Instructions for setting up MS8607 temperature, humidity, and pressure sensors. - image: ms8607.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ms8607FullImg from './images/ms8607-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ms8607` sensor platform allows you to use your MS8607 ([datasheet](https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS8607-02BA01&DocType=DS&DocLang=English), [Adafruit](https://www.adafruit.com/product/4716)) temperature, pressure and humidity sensors with ESPHome. An [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="ms8607-full.jpg" alt="Image" caption="MS8607 Temperature, Pressure & Humidity Sensor. Image by [Adafruit](https://www.adafruit.com)" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -62,6 +68,6 @@ inside the humidity configuration block. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ms8607/ms8607.h" "ms8607/ms8607.h" >}} - [MS8607 Generic C Driver](https://github.com/TEConnectivity/MS8607_Generic_C_Driver) by [TE Connectivity](http://www.te.com/) - [Manufacturer's product page](https://www.te.com/usa-en/product-CAT-BLPS0018.html) +- diff --git a/content/components/sensor/msa3xx.md b/src/content/docs/components/sensor/msa3xx.mdx similarity index 91% rename from content/components/sensor/msa3xx.md rename to src/content/docs/components/sensor/msa3xx.mdx index fcf43b4924..e4a308a670 100644 --- a/content/components/sensor/msa3xx.md +++ b/src/content/docs/components/sensor/msa3xx.mdx @@ -1,13 +1,15 @@ --- description: "Instructions for setting up MSA301 and MSA311 digital tri-axial accelerometers." title: "MSA301 and MSA311 Sensors" -params: - seo: - description: Instructions for setting up MSA301 and MSA311 digital tri-axial accelerometers. - image: msa311.jpg --- -{{< anchor "msa3xx-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import msa311FullImg from './images/msa311-full.jpg'; +import msa3xxUiImg from './images/msa3xx-ui.png'; +import APIRef from '@components/APIRef.astro'; + + ## Component/Hub @@ -21,9 +23,19 @@ MSA301 and MSA311 are almost identical sensors. The only difference is the ADC r This component provides acceleration data in m/s², orientation information, and tap detection. XYZ axes can be calibrated and transformed to match the physical orientation of the sensor. -{{< img src="msa311-full.jpg" alt="Image" caption="Module breakout board with MSA311 sensor." width="80.0%" class="align-center" >}} +
    -{{< img src="msa3xx-ui.png" alt="Image" caption="Example of MSA3xx sensor representation in ESPHome dashboard." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -208,4 +220,4 @@ binary_sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "msa3xxx/msa3xxx.h" "msa3xxx/msa3xxx.h" >}} +- diff --git a/content/components/sensor/nau7802.md b/src/content/docs/components/sensor/nau7802.mdx similarity index 89% rename from content/components/sensor/nau7802.md rename to src/content/docs/components/sensor/nau7802.mdx index 8438647809..154a0daab4 100644 --- a/content/components/sensor/nau7802.md +++ b/src/content/docs/components/sensor/nau7802.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up NAU7802 ADC with ESPHome" title: "NAU7802 24-bit ADC" -params: - seo: - description: Instructions for setting up NAU7802 ADC with ESPHome - image: nau7802.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import nau7802Img from './images/nau7802.png'; +import APIRef from '@components/APIRef.astro'; + The `nau7802` sensor platform allows you to use your NAU7802 ADC ([datasheet](https://www.nuvoton.com/resource-files/NAU7802%20Data%20Sheet%20V1.7.pdf), [Adafruit](https://www.adafruit.com/product/4538)) with ESPHome. This ADC is typically used with strain gauges to act as a weight sensor. -{{< img src="nau7802.png" alt="Image" caption="NAU7802 on a breakout board. Image by [Adafruit](https://www.adafruit.com)" width="60.0%" class="align-center" >}} +
    Connect power pins (`VCC` /`GND` ) and I2C (`SDA` /`SCL` ). If using external reference voltage connect (`AV` /`AVDD` ). Interrupt (`INT` /`DRDY` ) is not supported. @@ -109,7 +115,7 @@ Replace the masses and values `120.0`, `810.0`, etc with your values. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "adc/" >}} -- {{< apiref "nau7802/nau7802.h" "nau7802/nau7802.h" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) - [Adafruit NAU7802 Library](https://github.com/adafruit/Adafruit_NAU7802) [NAU7802 Datasheet](https://www.nuvoton.com/resource-files/NAU7802%20Data%20Sheet%20V1.7.pdf) +- diff --git a/content/components/sensor/nextion.md b/src/content/docs/components/sensor/nextion.mdx similarity index 90% rename from content/components/sensor/nextion.md rename to src/content/docs/components/sensor/nextion.mdx index 199036735f..5f45168433 100644 --- a/content/components/sensor/nextion.md +++ b/src/content/docs/components/sensor/nextion.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up Nextion sensor." title: "Nextion Sensor Component" -params: - seo: - description: Instructions for setting up Nextion sensor. - image: nextion.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "nextion_sensor" >}} + + The `nextion` sensor platform supports integers or floats (Xfloat). It can be a component, a variable or a waveform in the Nextion display. It is best to set the component's vscope to global in the Nextion Editor. This way the component will be available @@ -17,7 +15,7 @@ if the page is shown or not. > The Nextion can receive an integer but it can only send 3 bytes for a negative integer. The range if using the [Nextion Custom Sensor Protocol](#nextion_custom_sensor_protocol) is: > -16777215 to 4294967295 -See {{< docref "/components/display/nextion" >}} for setting up the display +See [Nextion](/components/display/nextion/) for setting up the display ```yaml # Example configuration entry @@ -93,7 +91,7 @@ should be prefixed with the page name (page0/page1 or whatever you have changed *Example:* `component_name: page0.humidity` -{{< anchor "sensor-nextion-publish_action" >}} + ## `sensor.nextion.publish` Action @@ -136,28 +134,28 @@ Configuration variables: > [!NOTE] > This action can also be written in lambdas. See [Lambda Calls](#nextion_sensor_lambda_calls) -{{< anchor "nextion_sensor_lambda_calls" >}} + ### Lambda Calls From [lambdas](/automations/templates#config-lambda), you can call several methods to access -some more advanced functions (see the full {{< apiref "nextion/sensor/nextion_sensor.h" "nextion/sensor/nextion_sensor.h" >}} for more info). +some more advanced functions (see the full for more info). -{{< anchor "nextion_sensor_set_state" >}} + - `set_state(bool value, bool publish, bool send_to_nextion)` : Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion. -{{< anchor "nextion_sensor_update" >}} + - `update()` : Poll from the Nextion -{{< anchor "nextion_sensor_settings" >}} + - `set_background_color(Color color)` : Sets the background color to **Color** - `set_foreground_color(Color color)` : Sets the background color to **Color** - `set_visible(bool visible)` : Sets visible or not. If set to false, no updates will be sent to the component -{{< anchor "nextion_sensor_how_things_update" >}} + ## How things Update @@ -181,7 +179,7 @@ Using the above yaml example: > [!NOTE] > No updates will be sent to the Nextion if it is sleeping. Once it wakes, the components will be updated. If a component is invisible, `visible(false)`, then it won't update until it is set to be visible. -{{< anchor "nextion_custom_sensor_protocol" >}} + ## Nextion Custom Sensor Protocol @@ -205,6 +203,6 @@ printh FF FF FF ## See Also -- {{< docref "/components/display/nextion" >}} -- {{< docref "index/" >}} -- {{< apiref "nextion/sensor/nextion_sensor.h" "nextion/sensor/nextion_sensor.h" >}} +- [Nextion TFT LCD Display](/components/display/nextion/) +- [Sensor Component](/components/sensor/) +- diff --git a/content/components/sensor/npi19.md b/src/content/docs/components/sensor/npi19.mdx similarity index 92% rename from content/components/sensor/npi19.md rename to src/content/docs/components/sensor/npi19.mdx index d9fd388a15..3f7a7743c3 100644 --- a/content/components/sensor/npi19.md +++ b/src/content/docs/components/sensor/npi19.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up NPI-19 pressure sensors with ESPHome" title: "NPI-19 Pressure Sensor" -params: - seo: - description: Instructions for setting up NPI-19 pressure sensors with ESPHome - image: npi19.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `npi19` sensor platform allows you to use your NPI-19 ([datasheet](https://www.amphenol-sensors.com/hubfs/AAS-920-699F-NovaSensor-NPI-19-I2C-061322-web.pdf), [product page](https://www.amphenol-sensors.com/en/novasensor/pressure-sensors/3358-npi-19-i2c)) pressure sensors with ESPHome. -{{< img src="npi19.jpg" alt="Image" caption="NPI-19 Pressure Sensor." width="50.0%" class="align-center" >}} +
    ## Configuration @@ -41,7 +47,7 @@ sensor: - **address** (*Optional*, int): Manually specify the I²C address of the sensor. All known sensors currently configured to `0x28`. Defaults to `0x28`. -{{< anchor "npi19-converting" >}} + ## Converting units diff --git a/content/components/sensor/ntc.md b/src/content/docs/components/sensor/ntc.mdx similarity index 92% rename from content/components/sensor/ntc.md rename to src/content/docs/components/sensor/ntc.mdx index 90ac3e6443..c608753707 100644 --- a/content/components/sensor/ntc.md +++ b/src/content/docs/components/sensor/ntc.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up NTC thermistor sensor in ESPHome" title: "NTC Sensor" -params: - seo: - description: Instructions for setting up NTC thermistor sensor in ESPHome - image: ntc.jpg --- +import APIRef from '@components/APIRef.astro'; + The `ntc` platform is a helper sensor that allows you to convert resistance readings from a NTC thermistor to temperature readings. First, you need to get resistance readings from the sensor - you can set this up with the -{{< docref "resistance" "resistance" >}} and {{< docref "adc" "adc" >}} sensors. +[resistance](/components/sensor/resistance/) and [adc](/components/sensor/adc/) sensors. This platform will then convert the resistance values to temperature readings. It also requires calibration parameters for this conversion. There are two @@ -120,7 +118,7 @@ interval: ## See Also -- {{< docref "adc/" >}} -- {{< docref "resistance/" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) +- [Resistance Sensor](/components/sensor/resistance/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ntc/ntc.h" "ntc/ntc.h" >}} +- diff --git a/content/components/sensor/opt3001.md b/src/content/docs/components/sensor/opt3001.mdx similarity index 70% rename from content/components/sensor/opt3001.md rename to src/content/docs/components/sensor/opt3001.mdx index 41ccf72ee6..6c94935fb5 100644 --- a/content/components/sensor/opt3001.md +++ b/src/content/docs/components/sensor/opt3001.mdx @@ -1,20 +1,26 @@ --- description: "Instructions for setting up OPT3001 ambient light sensors in ESPHome." title: "OPT3001 Ambient Light Sensor" -params: - seo: - description: Instructions for setting up OPT3001 ambient light sensors in ESPHome. - image: opt3001.jpg --- -{{< anchor "opt3001" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import opt3001FullImg from './images/opt3001-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + The `opt3001` sensor platform allows you to use your OPT3001 ([datasheet](https://www.ti.com/lit/ds/symlink/opt3001.pdf)) ambient light sensor with ESPHome. The [I²C bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="opt3001-full.jpg" alt="Image" caption="OPT3001 Ambient Light Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -44,7 +50,7 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bh1750/" >}} -- {{< docref "tsl2561/" >}} -- {{< docref "tsl2591/" >}} -- {{< apiref "opt3001/opt3001.h" "opt3001/opt3001.h" >}} +- [BH1750 Ambient Light Sensor](/components/sensor/bh1750/) +- [TSL2561 Ambient Light Sensor](/components/sensor/tsl2561/) +- [TSL2591 Ambient Light Sensor](/components/sensor/tsl2591/) +- diff --git a/content/components/sensor/packet_transport.md b/src/content/docs/components/sensor/packet_transport.mdx similarity index 87% rename from content/components/sensor/packet_transport.md rename to src/content/docs/components/sensor/packet_transport.mdx index da5be07761..4d8d4dcebb 100644 --- a/content/components/sensor/packet_transport.md +++ b/src/content/docs/components/sensor/packet_transport.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up a packet transport sensor." title: "Packet Transport Sensor" -params: - seo: - description: Instructions for setting up a packet transport sensor. - image: packet_transport.svg --- The `packet_transport` sensor platform allows you to receive numeric sensor data directly from another ESPHome node. @@ -45,7 +41,7 @@ configured. ## See Also -- {{< docref "/components/packet_transport" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< docref "/components/udp" >}} +- [Packet Transport Component](/components/packet_transport/) +- [Binary Sensor Component](/components/binary_sensor/) +- [UDP Component](/components/udp/) - [Automation](/automations) diff --git a/content/components/sensor/pm1006.md b/src/content/docs/components/sensor/pm1006.mdx similarity index 79% rename from content/components/sensor/pm1006.md rename to src/content/docs/components/sensor/pm1006.mdx index 90ab26444b..3cc406e580 100644 --- a/content/components/sensor/pm1006.md +++ b/src/content/docs/components/sensor/pm1006.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up PM1006 Particulate matter sensors, such as in the IKEA VINDRIKTNING" title: "PM1006 Particulate Matter Sensor" -params: - seo: - description: Instructions for setting up PM1006 Particulate matter sensors, such as in the IKEA VINDRIKTNING - image: pm1006.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ikeaVindriktningImg from './images/ikea-vindriktning.jpg'; +import APIRef from '@components/APIRef.astro'; + The `pm1006` sensor platform allows you to use Cubic PM1006 particulate matter sensors ([datasheet](http://www.jdscompany.co.kr/download.asp?gubun=07&filename=PM1006_LED_PARTICLE_SENSOR_MODULE_SPECIFICATIONS.pdf)) with ESPHome. -{{< img src="ikea-vindriktning.jpg" alt="Image" caption="IKEA VINDRIKTNING Particulate Matter Sensor with PM1006 inside" width="50.0%" class="align-center" >}} +
    As the communication with the PM1006 is done using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the PM1006. The baud rate needs to be set to 9600. @@ -29,7 +35,7 @@ sensor: In common usage, with the IKEA VINDRIKTNING still controlling the pm1006 sensor, there is no update interval, and this implementation will passively pick up whatever the VINDRIKTNING MCU has requested from the sensor. -The implementation was inspired by ; you can also see the pinout there. +The implementation was inspired by [https://github.com/Hypfer/esp8266-vindriktning-particle-sensor](https://github.com/Hypfer/esp8266-vindriktning-particle-sensor); you can also see the pinout there. However, we recommend mounting your ESP below the fan (which blows out the front) so you do not obstruct the airflow. [This discussion thread on the HA forum](https://community.home-assistant.io/t/ikea-vindriktning-air-quality-sensor/324599) has several examples of how people have connected their ESP device to the IKEA sensor. @@ -66,6 +72,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/pmsx003" >}} +- [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "pm1006/pm1006.h" "pm1006/pm1006.h" >}} +- diff --git a/content/components/sensor/pm2005.md b/src/content/docs/components/sensor/pm2005.mdx similarity index 76% rename from content/components/sensor/pm2005.md rename to src/content/docs/components/sensor/pm2005.mdx index addb12ce05..182298136d 100644 --- a/content/components/sensor/pm2005.md +++ b/src/content/docs/components/sensor/pm2005.mdx @@ -1,15 +1,22 @@ --- description: "Instructions for setting up PM2005/PM2105 Particulate matter sensor" title: "CUBIC PM2005/PM2105 Laser Particle Sensor Module" -params: - seo: - description: Instructions for setting up PM2005/PM2105 Particulate matter sensor - image: pm2005.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `pm2005` sensor platform allows you to use your PM2005/PM2105 laser particulate matter sensor with ESPHome. -{{< img src="pm2005.png" alt="Image" caption="CUBIC PM2005/PM2105 Laser Particle Sensor Module." width="50.0%" class="align-center" >}} +
    The sensor communicates with the board via the [I²C](/components/i2c) protocol. @@ -46,6 +53,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/aqi" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "pm2005/pm2005.h" "pm2005/pm2005.h" >}} +- diff --git a/content/components/sensor/pmsa003i.md b/src/content/docs/components/sensor/pmsa003i.mdx similarity index 86% rename from content/components/sensor/pmsa003i.md rename to src/content/docs/components/sensor/pmsa003i.mdx index 41707f1f6d..a113971a5a 100644 --- a/content/components/sensor/pmsa003i.md +++ b/src/content/docs/components/sensor/pmsa003i.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up PMSX003 Particulate matter sensors" title: "PMSA003I Particulate Matter Sensor" -params: - seo: - description: Instructions for setting up PMSX003 Particulate matter sensors - image: pmsa003i.jpg --- +import { Image } from 'astro:assets'; +import pmsa003iFullImg from './images/pmsa003i-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `pmsa003i` sensor platform allows you to use your Plantower PMSA003I particulate matter sensor ([datasheet](https://cdn-shop.adafruit.com/product-files/4632/4505_PMSA003I_series_data_manual_English_V2.6.pdf), @@ -14,7 +14,7 @@ particulate matter sensor The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="pmsa003i-full.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -77,7 +77,7 @@ sensor: sensor. Defaults to `60s`. > [!NOTE] -> Standard vs environmental units from +> Standard vs environmental units from [https://publiclab.org/questions/samr/04-07-2019/how-to-interpret-pms5003-sensor-values#c23772](https://publiclab.org/questions/samr/04-07-2019/how-to-interpret-pms5003-sensor-values#c23772) > > "Standard" refers to the concentration "corrected" to the "standard atmosphere" which in the US is DEFINED as "having a temperature of 288.15 K at the sea level 0 km geo-potential height and 1013.25 hPa" details here > @@ -87,8 +87,8 @@ sensor: ## See Also -- {{< docref "/components/sensor/aqi" >}} -- {{< docref "/components/sensor/pmsx003" >}} -- {{< docref "/components/sensor/sds011" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) +- [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) +- [SDS011 Particulate Matter Sensor](/components/sensor/sds011/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "pmsa003i/pmsa003i.h" "pmsa003i/pmsa003i.h" >}} +- diff --git a/content/components/sensor/pmsx003.md b/src/content/docs/components/sensor/pmsx003.mdx similarity index 97% rename from content/components/sensor/pmsx003.md rename to src/content/docs/components/sensor/pmsx003.mdx index 61ef7e0f24..e9d4159627 100644 --- a/content/components/sensor/pmsx003.md +++ b/src/content/docs/components/sensor/pmsx003.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up PMSX003 Particulate matter sensors" title: "PMSX003 Particulate Matter Sensor" -params: - seo: - description: Instructions for setting up PMSX003 Particulate matter sensors - image: pmsx003.svg --- +import APIRef from '@components/APIRef.astro'; + The `pmsx003` sensor platform allows you to use your [Plantower](https://www.plantower.com/en/products_33/) [PMS1003](https://www.plantower.com/static/upload/file/20220627/1656292073878896.pdf), @@ -125,7 +123,7 @@ sensor: ## See Also -- {{< docref "/components/sensor/aqi" >}} -- {{< docref "/components/sensor/sds011" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) +- [SDS011 Particulate Matter Sensor](/components/sensor/sds011/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "pmsx003/pmsx003.h" "pmsx003/pmsx003.h" >}} +- diff --git a/content/components/sensor/pmwcs3.md b/src/content/docs/components/sensor/pmwcs3.mdx similarity index 86% rename from content/components/sensor/pmwcs3.md rename to src/content/docs/components/sensor/pmwcs3.mdx index 9e75ddf34f..28aaba53c1 100644 --- a/content/components/sensor/pmwcs3.md +++ b/src/content/docs/components/sensor/pmwcs3.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up PMWCS3 capacitive soil moisture sensor in ESPHome." title: "PMWCS3 Capacitive Soil Moisture and Temperature Sensor" -params: - seo: - description: Instructions for setting up PMWCS3 capacitive soil moisture sensor in ESPHome. - image: pmwcs3.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `pmwcs3` sensor platform allows you to use your PMWCS3 ([informations](https://tinovi.com/wp-content/uploads/2020/01/PM-WCS-3-I2C.pdf)) capacitive soil moisture and temperature sensor with ESPHome. The [I²C bus](/components/i2c) is required to be set up in your configuration for this sensor to work. Wiring scheme: red is 3.3V, black & shield is GND, green is SDA and white is SCL. 2.2kOhm resistors are advised to pullup both SDA & SDA lines. -{{< img src="pmwcs3.jpg" alt="Image" caption="PMWCS3 Capacitive Soil Moisture and Temperature Sensor." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -49,7 +56,7 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. -{{< anchor "sensor-pmwcs3aircalibrationaction" >}} + ## `pmwcs3.air_calibration` Action @@ -73,7 +80,7 @@ Configuration option: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pmwcs3 sensor. -{{< anchor "sensor-pmwcs3watercalibrationaction" >}} + ## `pmwcs3.water_calibration` Action @@ -97,7 +104,7 @@ Configuration option: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the pmwcs3 sensor. -{{< anchor "sensor-pmwcs3newi2caddressaction" >}} + ## `pmwcs3.new_i2c_address` Action @@ -125,6 +132,6 @@ Configuration options: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "pmwcs3/pmwcs3.h" "pmwcs3/pmwcs3.h" >}} - [Temperature Compensation for Conductivity](https://www.aqion.de/site/112) - [PMWCS3 Library](https://github.com/tinovi/i2cArduino) by [@tinovi](https://github.com/tinovi) +- diff --git a/content/components/sensor/pulse_counter.md b/src/content/docs/components/sensor/pulse_counter.mdx similarity index 90% rename from content/components/sensor/pulse_counter.md rename to src/content/docs/components/sensor/pulse_counter.mdx index 7180ec37ee..499aea5c5c 100644 --- a/content/components/sensor/pulse_counter.md +++ b/src/content/docs/components/sensor/pulse_counter.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up pulse counter sensors." title: "Pulse Counter Sensor" -params: - seo: - description: Instructions for setting up pulse counter sensors. - image: pulse.svg --- +import { Image } from 'astro:assets'; +import pulseCounterImg from './images/pulse-counter.png'; +import APIRef from '@components/APIRef.astro'; + The pulse counter sensor allows you to count the number of pulses and the frequency of a signal on any pin. On the ESP32, this sensor is even highly accurate because it's using the hardware [pulse counterperipheral](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/pcnt.html) on the ESP32. However, due to the use of the pulse counter peripheral, a maximum of 8 channels can be used! -{{< img src="pulse-counter.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -48,7 +48,7 @@ sensor: - All other options from [Sensor](/components/sensor). > [!NOTE] -> See {{< docref "/components/sensor/integration" "integration sensor" >}} for summing up pulse counter +> See [integration sensor](/components/sensor/integration/) for summing up pulse counter > values over time. ## Converting units @@ -155,7 +155,7 @@ circuiting the wire by mistake. ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "/components/sensor/pulse_meter" >}} -- {{< docref "rotary_encoder/" >}} +- [Pulse Meter Sensor](/components/sensor/pulse_meter/) +- [Rotary Encoder Sensor](/components/sensor/rotary_encoder/) - [esp-idf Pulse Counter API](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/pcnt.html). -- {{< apiref "pulse_counter/pulse_counter_sensor.h" "pulse_counter/pulse_counter_sensor.h" >}} +- diff --git a/content/components/sensor/pulse_meter.md b/src/content/docs/components/sensor/pulse_meter.mdx similarity index 88% rename from content/components/sensor/pulse_meter.md rename to src/content/docs/components/sensor/pulse_meter.mdx index d447309655..ba30cc95d4 100644 --- a/content/components/sensor/pulse_meter.md +++ b/src/content/docs/components/sensor/pulse_meter.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up pulse meter sensors." title: "Pulse Meter Sensor" -params: - seo: - description: Instructions for setting up pulse meter sensors. - image: pulse.svg --- +import { Image } from 'astro:assets'; +import pulseCounterVsPulseMeterImg from './images/pulse-counter_vs_pulse-meter.png'; +import APIRef from '@components/APIRef.astro'; + The pulse meter sensor allows you to count the number and frequency of pulses on any pin. It is intended to be a drop-in replacement -for the {{< docref "/components/sensor/pulse_counter" "pulse counter component" >}}. +for the [pulse counter component](/components/sensor/pulse_counter/). Rather than counting pulses over a fixed time interval, the pulse meter sensor measures the time between pulses. The precise manner in which this is done depends on the `internal_filter_mode` option. This leads to a higher resolution, especially for low pulse rates, as the pulse counter sensor is limited by the number of pulses within a time interval. Here's a comparison of the two sensors. The pulse meter is the smoother line. Both are set to an update interval of 10 seconds (using the `update_interval` and the `throttle_average` option respectively): -{{< img src="pulse-counter_vs_pulse-meter.png" alt="Image" width="50.0%" class="align-center" >}} + Please note that it is not possible to use both of these two sensors on the same pin at the same time. @@ -102,8 +102,8 @@ api: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "/components/sensor/pulse_counter" >}} -- {{< docref "/components/sensor/total_daily_energy" >}} -- {{< docref "/cookbook/power_meter" >}} +- [Pulse Counter Sensor](/components/sensor/pulse_counter/) +- [Total Daily Energy Sensor](/components/sensor/total_daily_energy/) +- [Non-Invasive Power Meter](/cookbook/power_meter/) - [Home Assistant Glow 🌟](https://github.com/klaasnicolaas/home-assistant-glow/). -- {{< apiref "pulse_meter/pulse_meter_sensor.h" "pulse_meter/pulse_meter_sensor.h" >}} +- diff --git a/content/components/sensor/pulse_width.md b/src/content/docs/components/sensor/pulse_width.mdx similarity index 86% rename from content/components/sensor/pulse_width.md rename to src/content/docs/components/sensor/pulse_width.mdx index 0d8a468e04..39268418db 100644 --- a/content/components/sensor/pulse_width.md +++ b/src/content/docs/components/sensor/pulse_width.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up pulse width sensors in ESPHome" title: "Pulse Width Sensor" -params: - seo: - description: Instructions for setting up pulse width sensors in ESPHome - image: pulse.svg --- +import APIRef from '@components/APIRef.astro'; + The `pulse_width` sensor allows you to measure how long a given digital signal is HIGH. For example this can be used to measure PWM signals to transmit some @@ -37,4 +35,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "pulse_width/pulse_width.h" "pulse_width/pulse_width.h" >}} +- diff --git a/content/components/sensor/pzem004t.md b/src/content/docs/components/sensor/pzem004t.mdx similarity index 90% rename from content/components/sensor/pzem004t.md rename to src/content/docs/components/sensor/pzem004t.mdx index 4156485be1..18721b8921 100644 --- a/content/components/sensor/pzem004t.md +++ b/src/content/docs/components/sensor/pzem004t.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up PZEM-004 and PZEM-004T V1 power monitors." title: "Peacefair PZEM-004T Energy Monitor" -params: - seo: - description: Instructions for setting up PZEM-004 and PZEM-004T V1 power monitors. - image: pzem004t.svg --- +import APIRef from '@components/APIRef.astro'; + > [!NOTE] > This page is incomplete and could use some work. If you want to contribute, please see our @@ -21,7 +19,7 @@ ESPHome. > [!WARNING] > This page refers to version V1 of the PZEM-004T, which has been out of stock for a while. > The PZEM-004, however, is still working (and selling) with this protocol and does not use modbus. -> For using the newer V3 variant of this sensor please see {{< docref "pzemac" "pzemac" >}}. +> For using the newer V3 variant of this sensor please see [pzemac](/components/sensor/pzemac/). The communication with this component is done via a [UART](/components/uart). You must therefore have a `uart:` entry in your configuration with both the TX and RX pins set @@ -80,6 +78,6 @@ Your ESP shall be powered by an external power supply and cannot be connected to ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "pzemac/" >}} -- {{< docref "pzemdc/" >}} -- {{< apiref "pzem004t/pzem004t.h" "pzem004t/pzem004t.h" >}} +- [Peacefair PZEM-004T V3 Energy Monitor](/components/sensor/pzemac/) +- [Peacefair PZEM-00X DC Energy Monitor](/components/sensor/pzemdc/) +- diff --git a/content/components/sensor/pzemac.md b/src/content/docs/components/sensor/pzemac.mdx similarity index 88% rename from content/components/sensor/pzemac.md rename to src/content/docs/components/sensor/pzemac.mdx index dde39df5e5..dc393d634a 100644 --- a/content/components/sensor/pzemac.md +++ b/src/content/docs/components/sensor/pzemac.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up PZEM-004T power monitors." title: "Peacefair PZEM-004T V3 Energy Monitor" -params: - seo: - description: Instructions for setting up PZEM-004T power monitors. - image: pzem-ac.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import pzemAcImg from './images/pzem-ac.png'; +import APIRef from '@components/APIRef.astro'; + > [!NOTE] > This page is incomplete and could use some work. If you want to contribute, please see our > [developer site](https://developers.esphome.io). This page is missing: @@ -24,11 +25,16 @@ for more information. > [!WARNING] > Please note that metering chip inside of PZEM module is powered from AC side and it has to be on during startup of ESPHome device, othervise measure results won't be visible. -{{< img src="pzem-ac.png" alt="Image" caption="PZEM-004T Version 3." width="80.0%" class="align-center" >}} +
    > [!WARNING] > This page refers to version V3 of the PZEM004T. -> For using the older V1 variant of this sensor please see {{< docref "pzem004t" "pzem004t" >}}. +> For using the older V1 variant of this sensor please see [pzem004t](/components/sensor/pzem004t/). The communication with this component is done via a [UART](/components/uart) using [Modbus](/components/modbus#modbus). You must therefore have a `uart:` entry in your configuration with both the TX and RX pins set @@ -88,7 +94,7 @@ sensor: - **modbus_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the Modbus hub. -{{< anchor "pzemac-reset_energy_action" >}} + ### `pzemac.reset_energy` Action @@ -154,6 +160,6 @@ modbus_controller: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "pzem004t/" >}} -- {{< docref "pzemdc/" >}} -- {{< apiref "pzemac/pzemac.h" "pzemac/pzemac.h" >}} +- [Peacefair PZEM-004T Energy Monitor](/components/sensor/pzem004t/) +- [Peacefair PZEM-00X DC Energy Monitor](/components/sensor/pzemdc/) +- diff --git a/content/components/sensor/pzemdc.md b/src/content/docs/components/sensor/pzemdc.mdx similarity index 81% rename from content/components/sensor/pzemdc.md rename to src/content/docs/components/sensor/pzemdc.mdx index ceec9a1332..b146597987 100644 --- a/content/components/sensor/pzemdc.md +++ b/src/content/docs/components/sensor/pzemdc.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up DC PZEM power monitors." title: "Peacefair PZEM-00X DC Energy Monitor" -params: - seo: - description: Instructions for setting up DC PZEM power monitors. - image: pzem-dc.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import pzemDcImg from './images/pzem-dc.png'; +import APIRef from '@components/APIRef.astro'; + > [!NOTE] > This page is incomplete and could use some work. If you want to contribute, please see our > [developer site](https://developers.esphome.io). This page is missing: @@ -20,7 +21,12 @@ The communication with this component is via a [UART](/components/uart). You must therefore have a `uart:` entry in your configuration with both the TX and RX pins set to some pins on your board and the baud rate set to 9600. -{{< img src="pzem-dc.png" alt="Image" caption="PZEM-0xx Energy Monitor." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -63,7 +69,7 @@ sensor: - **address** (*Optional*, int): The address of the sensor if multiple sensors are attached to the same UART bus. You will need to set the address of each device manually. Defaults to `1`. -{{< anchor "pzemdc-reset_energy_action" >}} + ### `pzemdc.reset_energy` Action @@ -78,6 +84,6 @@ on_...: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "pzem004t/" >}} -- {{< docref "pzemac/" >}} -- {{< apiref "pzemdc/pzemdc.h" "pzemdc/pzemdc.h" >}} +- [Peacefair PZEM-004T Energy Monitor](/components/sensor/pzem004t/) +- [Peacefair PZEM-004T V3 Energy Monitor](/components/sensor/pzemac/) +- diff --git a/content/components/sensor/qmc5883l.md b/src/content/docs/components/sensor/qmc5883l.mdx similarity index 90% rename from content/components/sensor/qmc5883l.md rename to src/content/docs/components/sensor/qmc5883l.mdx index f9030db679..57813e14b5 100644 --- a/content/components/sensor/qmc5883l.md +++ b/src/content/docs/components/sensor/qmc5883l.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up QMC5883L IMU compass sensors." title: "QMC5883L Magnetometer" -params: - seo: - description: Instructions for setting up QMC5883L IMU compass sensors. - image: qmc5883l.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `qmc5883l` allows you to use your QMC5883L triple-axis magnetometers ([datasheet](http://wiki.sunfounder.cc/images/7/72/QMC5883L-Datasheet-1.0.pdf)) with ESPHome. This sensor is very similar to the [HMC5883L](/components/sensor/hmc5883l#hmc5883l) sensor and is often found @@ -14,7 +14,14 @@ as a knock off replacement. The QMC5883L sensor performs on par to the HMC5883L though the configuration differs. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="qmc5883l.jpg" alt="Image" caption="QMC5883L Magnetometer." width="30.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -104,5 +111,5 @@ configure this amount. The result is the sensor will take the adverage of the x ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< apiref "qmc5883l/qmc5883l.h" "qmc5883l/qmc5883l.h" >}} +- [Template Sensor](/components/sensor/template/) +- diff --git a/content/components/sensor/qmp6988.md b/src/content/docs/components/sensor/qmp6988.mdx similarity index 85% rename from content/components/sensor/qmp6988.md rename to src/content/docs/components/sensor/qmp6988.mdx index 00ccd63c1d..9f24578fc3 100644 --- a/content/components/sensor/qmp6988.md +++ b/src/content/docs/components/sensor/qmp6988.mdx @@ -1,17 +1,25 @@ --- description: "Instructions for setting up QMP6988 temperature and pressure sensors with ESPHome" title: "QMP6988 Temperature+Pressure Sensor" -params: - seo: - description: Instructions for setting up QMP6988 temperature and pressure sensors with ESPHome --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `qmp6988` sensor platform allows you to use your QMP6988 ([datasheet](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/unit/enviii/QMP6988%20Datasheet.pdf), [M5Stack](https://docs.m5stack.com/en/unit/envIII)) temperature and pressure sensors with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="qmp6988_env3.png" alt="Image" caption="QMP6988 Temperature and Pressure Sensor." width="40.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -53,7 +61,7 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. -{{< anchor "qmp6988-oversampling" >}} + ## Oversampling Options @@ -72,5 +80,5 @@ configure this amount. Possible oversampling values: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "qmp6988/qmp6988.h" "qmp6988/qmp6988.h" >}} - [QMP6988 Library](https://github.com/m5stack/UNIT_ENV) by [M5Stack](https://m5stack.com) +- diff --git a/content/components/sensor/radon_eye_ble.md b/src/content/docs/components/sensor/radon_eye_ble.mdx similarity index 92% rename from content/components/sensor/radon_eye_ble.md rename to src/content/docs/components/sensor/radon_eye_ble.mdx index 99f9cd5fd7..923886f85d 100644 --- a/content/components/sensor/radon_eye_ble.md +++ b/src/content/docs/components/sensor/radon_eye_ble.mdx @@ -1,11 +1,11 @@ --- description: "Instructions for setting up Radon Eye bluetooth-based sensors in ESPHome." title: "Radon Eye BLE Sensors" -params: - seo: - description: Instructions for setting up Radon Eye bluetooth-based sensors in ESPHome. --- +import { Image } from 'astro:assets'; +import radonEyeRd200Img from './images/radon_eye_rd200.jpg'; + The `radon_eye_rd200` sensor platforms lets you track the output of Radon Eye RD200 Bluetooth Low Energy device. This component will track radon concentration. @@ -47,7 +47,7 @@ provides a 24hr measurement and a 1 month measurement. If the 1 month isn't available, it will use the 24hr. If the 24hr isn't available either, it will not publish the value. -{{< img src="radon_eye_rd200.jpg" alt="Image" width="60.0%" class="align-center" >}} + ### Configuration example diff --git a/content/components/sensor/rd03d.md b/src/content/docs/components/sensor/rd03d.mdx similarity index 94% rename from content/components/sensor/rd03d.md rename to src/content/docs/components/sensor/rd03d.mdx index 93452a3998..e13f22771e 100644 --- a/content/components/sensor/rd03d.md +++ b/src/content/docs/components/sensor/rd03d.mdx @@ -1,14 +1,13 @@ --- description: "Instructions for setting up RD-03D mmWave radar sensors." title: "RD-03D mmWave Radar" -params: - seo: - description: Instructions for setting up RD-03D mmWave radar sensors. --- +import APIRef from '@components/APIRef.astro'; + ## Component -{{< anchor "rd03d-component" >}} + The `rd03d` component allows you to use the Ai-Thinker RD-03D 24GHz millimeter-wave radar module with ESPHome for multi-target trajectory tracking. @@ -51,7 +50,7 @@ rd03d: The radar sends data very frequently; use this to reduce the update rate sent to Home Assistant. For example, ``500ms`` or ``1s``. -{{< anchor "rd03d-binary-sensors" >}} + ## Binary Sensor @@ -78,7 +77,7 @@ binary_sensor: - **target_N** (*Optional*): True if the specific target (N = 1 to 3) is detected: `target_1`, `target_2`, `target_3`. All options from [Binary Sensor](/components/binary_sensor#config-binary_sensor). -{{< anchor "rd03d-sensors" >}} + ## Sensor @@ -237,7 +236,7 @@ sensor: ## See Also - [RD-03D Datasheet](https://en.ai-thinker.com/Uploads/file/20231016/20231016032622_13559.pdf) -- {{< docref "/components/sensor/ld2410" >}} -- {{< docref "/components/sensor/ld2420" >}} -- {{< docref "/components/sensor/ld2450" >}} -- {{< apiref "rd03d/rd03d.h" "rd03d/rd03d.h" >}} +- [LD2410 Sensor](/components/sensor/ld2410/) +- [LD2420 24GHz mmWave Radar Sensor](/components/sensor/ld2420/) +- [LD2450 Sensor](/components/sensor/ld2450/) +- diff --git a/content/components/sensor/resistance.md b/src/content/docs/components/sensor/resistance.mdx similarity index 72% rename from content/components/sensor/resistance.md rename to src/content/docs/components/sensor/resistance.mdx index 77efa4b49d..4216fdb98c 100644 --- a/content/components/sensor/resistance.md +++ b/src/content/docs/components/sensor/resistance.mdx @@ -1,14 +1,15 @@ --- description: "Instructions for setting up resistance sensors in ESPHome" title: "Resistance Sensor" -params: - seo: - description: Instructions for setting up resistance sensors in ESPHome - image: omega.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import resistanceDownstreamImg from './images/resistance-downstream.png'; +import APIRef from '@components/APIRef.astro'; + The `resistance` platform is a helper sensor that allows you to convert readings -from a voltage sensor (such as the {{< docref "adc" "ADC Sensor" >}}) into resistance readings +from a voltage sensor (such as the [ADC Sensor](/components/sensor/adc/)) into resistance readings in Ω (ohm). In order to calculate the resistance, the circuit needs to be set up in a @@ -26,7 +27,12 @@ This consists of three parts: There are two kinds of configurations for this circuit: Either the variable resistor is close to GND (DOWNSTREAM) or it is closer to VCC (UPSTREAM). -{{< img src="resistance-downstream.png" alt="Image" caption="Example voltage divider configuration of type \"DOWNSTREAM\" and a voltage reference of 5V." width="25.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -45,7 +51,7 @@ sensor: ## Note -Some boards like NodeMCUv2 needs to multiply ADC reading by 3.3 to provide accurate result because they have built-in voltage divider on ADC pin () +Some boards like NodeMCUv2 needs to multiply ADC reading by 3.3 to provide accurate result because they have built-in voltage divider on ADC pin ([https://arduino.stackexchange.com/a/71952](https://arduino.stackexchange.com/a/71952)) ```yaml # Example source sensor: @@ -71,7 +77,7 @@ Some boards like NodeMCUv2 needs to multiply ADC reading by 3.3 to provide accur ## See Also -- {{< docref "adc/" >}} -- {{< docref "ntc/" >}} +- [Analog To Digital Sensor](/components/sensor/adc/) +- [NTC Sensor](/components/sensor/ntc/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "resistance/resistance_sensor.h" "resistance/resistance_sensor.h" >}} +- diff --git a/content/components/sensor/rotary_encoder.md b/src/content/docs/components/sensor/rotary_encoder.mdx similarity index 85% rename from content/components/sensor/rotary_encoder.md rename to src/content/docs/components/sensor/rotary_encoder.mdx index ef61c6ae60..d8efd9b667 100644 --- a/content/components/sensor/rotary_encoder.md +++ b/src/content/docs/components/sensor/rotary_encoder.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up rotary encoders." title: "Rotary Encoder Sensor" -params: - seo: - description: Instructions for setting up rotary encoders. - image: rotary_encoder.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import rotaryEncoderUiImg from './images/rotary_encoder-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `rotary_encoder` sensor platform allows you to use any continuous-rotation rotary encoders with ESPHome. These devices usually have two pins with which they encode the rotation. Every time the knob of the rotary encoder is turned, the @@ -14,9 +15,16 @@ signals of the two pins go HIGH and LOW in turn. See [this Arduino article](https://playground.arduino.cc/Main/RotaryEncoders) to gain a better understanding of these sensors. -{{< img src="rotary_encoder.jpg" alt="Image" caption="Example of a continuous rotary encoder. Pin `+` is connected to `3.3V`, `GND` is connected to `GND`, and `CLK` & `DT` are A & B." width="75.0%" class="align-center" >}} +
    -{{< img src="rotary_encoder-ui.png" alt="Image" width="75.0%" class="align-center" >}} + To use rotary encoders in ESPHome, first identify the two pins encoding the step value. These are often called `CLK` and `DT` as in above image. Note if the values this sensor @@ -86,7 +94,7 @@ pin_a: - All other options from [Sensor](/components/sensor). -{{< anchor "sensor-rotary_encoder-set_value_action" >}} + ## `sensor.rotary_encoder.set_value` Action @@ -119,7 +127,7 @@ Configuration options: - **value** (**Required**, int, [templatable](/automations/templates)): The value to set the internal counter to. -{{< anchor "sensor-rotary_encoder-triggers" >}} + ## `on_clockwise` and `on_anticlockwise` Triggers @@ -137,7 +145,7 @@ on_anticlockwise: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "pulse_counter/" >}} -- {{< docref "template/" >}} +- [Pulse Counter Sensor](/components/sensor/pulse_counter/) +- [Template Sensor](/components/sensor/template/) - [Mechanical Input Library](https://github.com/jkDesignDE/MechInputs) by [Jochen Krapf](https://github.com/JK-de) -- {{< apiref "rotary_encoder/rotary_encoder.h" "rotary_encoder/rotary_encoder.h" >}} +- diff --git a/content/components/sensor/ruuvitag.md b/src/content/docs/components/sensor/ruuvitag.mdx similarity index 84% rename from content/components/sensor/ruuvitag.md rename to src/content/docs/components/sensor/ruuvitag.mdx index 46f1e93a5b..923420318f 100644 --- a/content/components/sensor/ruuvitag.md +++ b/src/content/docs/components/sensor/ruuvitag.mdx @@ -1,22 +1,29 @@ --- description: "Instructions for setting up RuuviTag bluetooth-based sensors in ESPHome." title: "RuuviTag Open Source BLE Sensor" -params: - seo: - description: Instructions for setting up RuuviTag bluetooth-based sensors in ESPHome. - image: ruuvitag.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ruuvitagFullImg from './images/ruuvitag-full.jpg'; +import ruuvitagUiImg from './images/ruuvitag-ui.jpg'; +import APIRef from '@components/APIRef.astro'; + The `ruuvitag` sensor platform lets you track the output of RuuviTag -Bluetooth Low Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. +Bluetooth Low Energy devices using the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track the temperature, humidity, acceleration and battery voltage of a RuuviTag device with RAWv1 protocol every time the sensor sends out a BLE broadcast. RAWv2 protocol is supported too. Then tx power, movement count and measurement sequence number are also tracked. -{{< img src="ruuvitag-full.jpg" alt="Image" caption="RuuviTagSensor over BLE." width="80.0%" class="align-center" >}} +
    -{{< img src="ruuvitag-ui.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -140,8 +147,8 @@ Then just copy the address (`XX:XX:XX:XX:XX:XX` ) into a new ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} -- {{< docref "absolute_humidity/" >}} -- {{< apiref "ruuvitag/ruuvitag.h" "ruuvitag/ruuvitag.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) +- [Absolute Humidity](/components/sensor/absolute_humidity/) - [Ruuvi](https://ruuvi.com) +- diff --git a/content/components/sensor/scd30.md b/src/content/docs/components/sensor/scd30.mdx similarity index 83% rename from content/components/sensor/scd30.md rename to src/content/docs/components/sensor/scd30.mdx index 0ae4cb20ed..67fb74a793 100644 --- a/content/components/sensor/scd30.md +++ b/src/content/docs/components/sensor/scd30.mdx @@ -1,17 +1,16 @@ --- description: "Instructions for setting up SCD30 CO₂ Temperature and Relative Humidity Sensor" title: "SCD30 CO₂, Temperature and Relative Humidity Sensor" -params: - seo: - description: Instructions for setting up SCD30 CO₂ Temperature and Relative Humidity Sensor - image: scd30.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `scd30` sensor platform allows you to use your Sensirion SCD30 CO₂ ([datasheet](https://sensirion.com/media/documents/4EAF6AF8/61652C3C/Sensirion_CO2_Sensors_SCD30_Datasheet.pdf)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="scd30.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -96,9 +95,9 @@ number: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< apiref "scd30/scd30.h" "scd30/scd30.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- diff --git a/content/components/sensor/scd4x.md b/src/content/docs/components/sensor/scd4x.mdx similarity index 93% rename from content/components/sensor/scd4x.md rename to src/content/docs/components/sensor/scd4x.mdx index 192754db0c..c4259578c6 100644 --- a/content/components/sensor/scd4x.md +++ b/src/content/docs/components/sensor/scd4x.mdx @@ -1,17 +1,16 @@ --- description: "Instructions for setting up SCD4X CO₂ Temperature and Relative Humidity Sensor" title: "SCD4X CO₂, Temperature and Relative Humidity Sensor" -params: - seo: - description: Instructions for setting up SCD4X CO₂ Temperature and Relative Humidity Sensor - image: scd4x.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `scd4x` sensor platform allows you to use your Sensirion SCD4X CO₂ ([datasheet](https://sensirion.com/media/documents/48C4B7FB/67FE0194/CD_DS_SCD4x_Datasheet_D1.pdf)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="scd4x.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -80,7 +79,7 @@ sensor: ## Actions -{{< anchor "perform_forced_calibration_action" >}} + ## `perform_forced_calibration` Action @@ -112,7 +111,7 @@ api: id: my_scd41 ``` -{{< anchor "factory_reset_action" >}} + ## `factory_reset` Action @@ -172,6 +171,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "scd30/" >}} -- {{< apiref "scd4x/scd4x.h" "scd4x/scd4x.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [SCD30 CO₂, Temperature and Relative Humidity Sensor](/components/sensor/scd30/) +- diff --git a/content/components/sensor/sdm_meter.md b/src/content/docs/components/sensor/sdm_meter.mdx similarity index 93% rename from content/components/sensor/sdm_meter.md rename to src/content/docs/components/sensor/sdm_meter.mdx index c78587cb99..22c51c9635 100644 --- a/content/components/sensor/sdm_meter.md +++ b/src/content/docs/components/sensor/sdm_meter.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up SDM power monitors." title: "Eastron SDM Energy Monitor" -params: - seo: - description: Instructions for setting up SDM power monitors. - image: sdm220m.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sdm220mFullImg from './images/sdm220m-full.png'; +import APIRef from '@components/APIRef.astro'; + The `sdm_meter` sensor platform allows you to use Eastron SDM modbus energy monitors ([website](http://www.eastrongroup.com/product_detail.php?id=170&menu1=&menu2=)) with ESPHome. -{{< img src="sdm220m-full.png" alt="Image" caption="SDM230M Energy Monitor." width="50.0%" class="align-center" >}} +
    The communication with this component is done via a [UART](/components/uart) using the [Modbus protocol](/components/modbus#modbus) over RS485 wiring. You will need an RS485 to UART converter for communication. @@ -119,4 +125,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "sdm220m/sdm220m.h" "sdm220m/sdm220m.h" >}} +- diff --git a/content/components/sensor/sdp3x.md b/src/content/docs/components/sensor/sdp3x.mdx similarity index 75% rename from content/components/sensor/sdp3x.md rename to src/content/docs/components/sensor/sdp3x.mdx index 3787027b02..063c21cdb8 100644 --- a/content/components/sensor/sdp3x.md +++ b/src/content/docs/components/sensor/sdp3x.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up the SDP3x or SDP800 Series Differential Pressure sensor." title: "SDP3x / SDP800 Series Differential Pressure Sensor" -params: - seo: - description: Instructions for setting up the SDP3x or SDP800 Series Differential Pressure sensor. - image: sdp31.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The SDP3x Differential Pressure sensor allows you to use your SDP3x ([datasheet](https://sensirion.com/media/documents/4D045D69/6375F34F/DP_DS_SDP3x_digital_D1.pdf), [sparkfun](https://www.sparkfun.com/products/17874)) or SDP800 Series ([datasheet](https://sensirion.com/media/documents/90500156/6167E43B/Sensirion_Differential_Pressure_Datasheet_SDP8xx_Digital.pdf)) sensors with ESPHome. -{{< img src="sdp31.jpg" alt="Image" caption="SDP31 Differential Pressure Sensor. (Credit: [Sparkfun](https://www.sparkfun.com/products/17874), image cropped and compressed)" width="30.0%" class="align-center" >}} +
    To use the sensor, set up an [I²C Bus](/components/i2c) and connect the sensor to the specified pins. @@ -33,4 +40,4 @@ To use the sensor, set up an [I²C Bus](/components/i2c) and connect the sensor ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "sdp3x/sdp3x.h" "sdp3x/sdp3x.h" >}} +- diff --git a/content/components/sensor/sds011.md b/src/content/docs/components/sensor/sds011.mdx similarity index 85% rename from content/components/sensor/sds011.md rename to src/content/docs/components/sensor/sds011.mdx index c0ca28e8de..1ecd918778 100644 --- a/content/components/sensor/sds011.md +++ b/src/content/docs/components/sensor/sds011.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up SDS011 Particulate matter sensors" title: "SDS011 Particulate Matter Sensor" -params: - seo: - description: Instructions for setting up SDS011 Particulate matter sensors - image: sds011.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sds011FullImg from './images/sds011-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `sds011` sensor platform allows you to use SDS011 particulate matter sensors ([datasheet](https://nettigo.pl/attachments/398)) with ESPHome. -{{< img src="sds011-full.jpg" alt="Image" caption="SDS011 Particulate Matter Sensor" width="50.0%" class="align-center" >}} +
    As the communication with the SDS011 is done using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the @@ -67,8 +73,8 @@ Note that `update_interval` may not be set to `never`. ## See Also -- {{< docref "/components/sensor/aqi" >}} -- {{< docref "/components/sensor/pmsx003" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) +- [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) - [Sensor Filters](/components/sensor#sensor-filters) - [Laser Dust Sensor Control Protocol](https://nettigo.pl/attachments/415) -- {{< apiref "sds011/sds011.h" "sds011/sds011.h" >}} +- diff --git a/content/components/sensor/selec_meter.md b/src/content/docs/components/sensor/selec_meter.mdx similarity index 95% rename from content/components/sensor/selec_meter.md rename to src/content/docs/components/sensor/selec_meter.mdx index c353afd993..be955f7984 100644 --- a/content/components/sensor/selec_meter.md +++ b/src/content/docs/components/sensor/selec_meter.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up Selec power monitors." title: "Selec Energy Monitor" -params: - seo: - description: Instructions for setting up Selec power monitors. - image: selec_meter_em2m.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `selec_meter` sensor platform allows you to use Selec Modbus energy monitors ([website](https://www.selec.com/product-details/energy-meter-direct-operated-em2m)) with ESPHome. -{{< img src="selec_meter_em2m.jpg" alt="Image" caption="Selec EM2M Energy Monitor." width="50.0%" class="align-center" >}} +
    The communication with this component is done via a [UART](/components/uart) using [Modbus](/components/modbus#modbus). You must therefore have a `uart:` entry in your configuration with both the TX and RX pins set diff --git a/content/components/sensor/sen0321.md b/src/content/docs/components/sensor/sen0321.mdx similarity index 79% rename from content/components/sensor/sen0321.md rename to src/content/docs/components/sensor/sen0321.mdx index 08f72b7f5f..8563cd0be5 100644 --- a/content/components/sensor/sen0321.md +++ b/src/content/docs/components/sensor/sen0321.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up SEN0321 DFRobot ozone sensors" title: "SEN0321 DFRobot Ozone Sensor" -params: - seo: - description: Instructions for setting up SEN0321 DFRobot ozone sensors - image: sen0321.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `sen0321` sensor platform allows you to use your DFRobot ([product wiki](https://wiki.dfrobot.com/Gravity_IIC_Ozone_Sensor_(0-10ppm)%20SKU_SEN0321), [DFRobot](https://www.dfrobot.com/product-2005.html)) ozone sensors with ESPHome. The sensor is used in automatic mode where the sensor actively updates its measurements every 2 seconds. [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="sen0321.jpg" alt="Image" caption="DFRobot Ozone Sensor (sen0321)." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -37,5 +44,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "sen0321/sen0321.h" "sen0321/sen0321.h" >}} - [DFRobot SEN0321 Library](https://github.com/DFRobot/DFRobot_OzoneSensor/) by [DFRobot](https://www.dfrobot.com/) +- diff --git a/content/components/sensor/sen21231.md b/src/content/docs/components/sensor/sen21231.mdx similarity index 57% rename from content/components/sensor/sen21231.md rename to src/content/docs/components/sensor/sen21231.mdx index 84e0baa56f..40e3cb6881 100644 --- a/content/components/sensor/sen21231.md +++ b/src/content/docs/components/sensor/sen21231.mdx @@ -1,17 +1,24 @@ --- description: "Instructions for setting up a SEN21231 Person Sensor from Useful Sensors with ESPHome." title: "SEN21231 Person Sensor from Useful Sensors" -params: - seo: - description: Instructions for setting up a SEN21231 Person Sensor from Useful Sensors with ESPHome. - image: description.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + [Person Sensor (SEN21231) from Useful Sensors](https://www.sparkfun.com/person-sensor-by-useful-sensors.html) has built in facial recognition that can detect how many people are facing the sensor and relative positions of the faces. -{{< img src="sen21231.png" alt="Image" caption="Person Sensor" width="70.0%" class="align-center" >}} +
    -This sensor requires an {{< docref "/components/i2c" >}}. The I2C address is `0x62` +This sensor requires an [I2C](/components/i2c/). The I2C address is `0x62` ```yaml # Example configuration entry @@ -26,5 +33,5 @@ sensor: ## See Also -- {{< docref "/components/sensor" >}} -- {{< apiref "sen21231/sen21231.h" "sen21231/sen21231.h" >}} +- [Sensor Component](/components/sensor/) +- diff --git a/content/components/sensor/sen5x.md b/src/content/docs/components/sensor/sen5x.mdx similarity index 91% rename from content/components/sensor/sen5x.md rename to src/content/docs/components/sensor/sen5x.mdx index f666215fd4..dc4e754224 100644 --- a/content/components/sensor/sen5x.md +++ b/src/content/docs/components/sensor/sen5x.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up Sen5x Series Environmental sensor for PM, RH/T, VOC, and NOx measurements." title: "Sen5x Series Environmental sensor" -params: - seo: - description: Instructions for setting up Sen5x Series Environmental sensor for PM, RH/T, VOC, and NOx measurements. - image: sen54.jpg --- +import { Image } from 'astro:assets'; +import sen54WebImg from './images/sen54-web.png'; +import jst6pinImg from './images/jst6pin.png'; +import APIRef from '@components/APIRef.astro'; + The `sen5x` sensor platform allows you to use your Sensirion [SEN50](https://sensirion.com/products/catalog/SEN50/), [SEN54](https://sensirion.com/products/catalog/SEN54/) and @@ -17,7 +18,7 @@ sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. This sensor supports both UART and I²C communication. Only I²C communication is implemented in this component. -{{< img src="sen54-web.png" alt="Image" width="100.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -166,7 +167,7 @@ sensor: The sensor has a JST GHR-06V-S 6 pin type connector, with a 1.25mm pitch. The cable needs this connector: -{{< img src="jst6pin.png" alt="Image" width="50.0%" class="align-center" >}} + To force the sensor into I²C mode, the SEL pin (Interface Select pin no.5) must be shorted to ground (pin no.2). Pin 6 is not used. @@ -205,13 +206,13 @@ on_...: ## See Also -- {{< docref "/components/sensor/aqi" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "sds011/" >}} -- {{< docref "pmsx003/" >}} -- {{< docref "ccs811/" >}} -- {{< docref "scd4x/" >}} -- {{< docref "sps30/" >}} -- {{< docref "sgp4x/" >}} -- {{< apiref "sen5x/sen5x.h" "sen5x/sen5x.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [SDS011 Particulate Matter Sensor](/components/sensor/sds011/) +- [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) +- [CCS811 eCO_2 and Volatile Organic Compound Sensor](/components/sensor/ccs811/) +- [SCD4X CO₂, Temperature and Relative Humidity Sensor](/components/sensor/scd4x/) +- [SPS30 Particulate Matter Sensor](/components/sensor/sps30/) +- [SGP40 Volatile Organic Compound Sensor and SGP41 VOC and NOx Sensor](/components/sensor/sgp4x/) +- diff --git a/content/components/sensor/senseair.md b/src/content/docs/components/sensor/senseair.mdx similarity index 79% rename from content/components/sensor/senseair.md rename to src/content/docs/components/sensor/senseair.mdx index 01c73c209e..1b07b196b1 100644 --- a/content/components/sensor/senseair.md +++ b/src/content/docs/components/sensor/senseair.mdx @@ -1,16 +1,23 @@ --- description: "Instructions for setting up SenseAir S8 CO2 sensor" title: "SenseAir CO_2 Sensor" -params: - seo: - description: Instructions for setting up SenseAir S8 CO2 sensor - image: senseair_s8.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import senseairS8FullImg from './images/senseair_s8-full.jpg'; +import senseairS8PinsImg from './images/senseair_s8-pins.jpg'; +import APIRef from '@components/APIRef.astro'; + The `senseair` sensor platform allows you to use SenseAir CO_2 sensor ([website](https://senseair.com/products/size-counts/s8-residential/)) with ESPHome. -{{< img src="senseair_s8-full.jpg" alt="Image" caption="SenseAir S8 CO_2 Sensor." width="50.0%" class="align-center" >}} +
    As the communication with the SenseAir is done using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the @@ -39,12 +46,17 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for actions. -{{< img src="senseair_s8-pins.jpg" alt="Image" caption="Pins on the SenseAir S8. Only the ones marked with a red circle need to be connected." width="80.0%" class="align-center" >}} +
    > [!NOTE] > `G+` should be connected to power supply (supported voltage is 4.5 V to 5.25 V), `G0` to `GND` pin -{{< anchor "senseair-background_calibration_action" >}} + ## `senseair.background_calibration` Action @@ -58,7 +70,7 @@ on_...: - senseair.background_calibration: my_senseair_id ``` -{{< anchor "senseair-background_calibration_result_action" >}} + ## `senseair.background_calibration_result` Action @@ -73,7 +85,7 @@ on_...: - senseair.background_calibration_result: my_senseair_id ``` -{{< anchor "senseair-abc_get_period_action" >}} + ## `senseair.abc_get_period` Action @@ -86,7 +98,7 @@ on_...: - senseair.abc_get_period: my_senseair_id ``` -{{< anchor "senseair-abc_enable_action" >}} + ## `senseair.abc_enable` Action @@ -99,7 +111,7 @@ on_...: - senseair.abc_enable: my_senseair_id ``` -{{< anchor "senseair-abc_disable_action" >}} + ## `senseair.abc_disable` Action @@ -114,4 +126,4 @@ on_...: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "senseair/senseair.h" "senseair/senseair.h" >}} +- diff --git a/content/components/sensor/sfa30.md b/src/content/docs/components/sensor/sfa30.mdx similarity index 83% rename from content/components/sensor/sfa30.md rename to src/content/docs/components/sensor/sfa30.mdx index f618dd5109..a043298134 100644 --- a/content/components/sensor/sfa30.md +++ b/src/content/docs/components/sensor/sfa30.mdx @@ -1,18 +1,17 @@ --- description: "Instructions for setting up SFA30 Formaldehyde Sensor" title: "SFA30 Formaldehyde Sensor" -params: - seo: - description: Instructions for setting up SFA30 Formaldehyde Sensor - image: sfa30.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `sfa30` sensor platform allows you to use your Sensirion SFA30 Formaldehyde ([datasheet](https://sensirion.com/media/documents/DEB1C6D6/63D92360/Sensirion_formaldehyde_sensors_datasheet_SFA30.pdf)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. This sensor supports both UART and I²C communication. However, at the moment only I²C communication is implemented. -{{< img src="sfa30.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -46,5 +45,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< apiref "sfa30/sfa30.h" "sfa30/sfa30.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- diff --git a/content/components/sensor/sgp30.md b/src/content/docs/components/sensor/sgp30.mdx similarity index 88% rename from content/components/sensor/sgp30.md rename to src/content/docs/components/sensor/sgp30.mdx index 538afb7273..bb0fad77fd 100644 --- a/content/components/sensor/sgp30.md +++ b/src/content/docs/components/sensor/sgp30.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up SGP30 CO₂eq and Volatile Organic Compound sensor" title: "SGP30 CO₂ and Volatile Organic Compound Sensor" -params: - seo: - description: Instructions for setting up SGP30 CO₂eq and Volatile Organic Compound sensor - image: sgp30.jpg --- +import { Image } from 'astro:assets'; +import eco2TvocImg from './images/eco2-tvoc.png'; +import APIRef from '@components/APIRef.astro'; + The `sgp30` sensor platform allows you to use your Sensirion SGP30 multi-pixel gas ([datasheet](https://sensirion.com/media/documents/984E0DD5/61644B8B/Sensirion_Gas_Sensors_Datasheet_SGP30.pdf)) sensors or the SVM30 breakout-boards ([product page](https://sensirion.com/products/catalog/SVM30/)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="eco2-tvoc.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -66,7 +66,7 @@ Advanced: - **humidity_source** (*Optional*, [ID](/guides/configuration-types#id)): Give an external relative humidity sensor ID here. This can improve the sensor's internal calculations. -{{< anchor "sgp30-calibrating" >}} + ## Calibrating Baseline @@ -106,9 +106,9 @@ Please note while the sensor is off, baseline values are valid for a maximum of ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "sgp30/sgp30.h" "sgp30/sgp30.h" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- diff --git a/content/components/sensor/sgp4x.md b/src/content/docs/components/sensor/sgp4x.mdx similarity index 89% rename from content/components/sensor/sgp4x.md rename to src/content/docs/components/sensor/sgp4x.mdx index 265237b9a0..52567b0a63 100644 --- a/content/components/sensor/sgp4x.md +++ b/src/content/docs/components/sensor/sgp4x.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up SGP40/SGP41 Volatile Organic Compound and NOx sensor" title: "SGP40 Volatile Organic Compound Sensor and SGP41 VOC and NOx Sensor" -params: - seo: - description: Instructions for setting up SGP40/SGP41 Volatile Organic Compound and NOx sensor - image: sgp40.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `sgp4x` sensor platform allows you to use your Sensirion SGP40 ([datasheet](https://sensirion.com/media/documents/296373BB/6203C5DF/Sensirion_Gas_Sensors_Datasheet_SGP40.pdf)) or SGP41 ([datasheet](https://sensirion.com/media/documents/5FE8673C/61E96F50/Sensirion_Gas_Sensors_Datasheet_SGP41.pdf)) with ESPHome. @@ -20,7 +19,7 @@ The [I²C Bus](/components/i2c) is required to be set up in your configuration f > the front end at the update_interval, saving wifi power and network > communication. -{{< img src="sgp40.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -89,10 +88,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< docref "sht4x/" >}} -- {{< apiref "sgp4x/sgp4x.h" "sgp4x/sgp4x.h" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- [SHT4X Temperature and Humidity Sensor](/components/sensor/sht4x/) +- diff --git a/content/components/sensor/sht3xd.md b/src/content/docs/components/sensor/sht3xd.mdx similarity index 81% rename from content/components/sensor/sht3xd.md rename to src/content/docs/components/sensor/sht3xd.mdx index fad69a2729..ad947e1169 100644 --- a/content/components/sensor/sht3xd.md +++ b/src/content/docs/components/sensor/sht3xd.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up SHT31-D/SHT3x and SHT85 temperature and humidity sensors" title: "SHT3X-D Temperature+Humidity Sensor" -params: - seo: - description: Instructions for setting up SHT31-D/SHT3x and SHT85 temperature and humidity sensors - image: sht3xd.jpg --- +import { Image } from 'astro:assets'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The `sht3xd` sensor platform Temperature+Humidity sensor allows you to use your Sensirion SHT31-D/SHT3x ([datasheet](https://cdn-shop.adafruit.com/product-files/2857/Sensirion_Humidity_SHT3x_Datasheet_digital-767294.pdf), [Adafruit](https://www.adafruit.com/product/2857)) and SHT85 ([datasheet](https://sensirion.com/media/documents/4B40CEF3/640B2346/Sensirion_Humidity_Sensors_SHT85_Datasheet.pdf), [Sensirion](https://sensirion.com/products/catalog/SHT85/)) sensors with Esphome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -68,9 +68,9 @@ i2c: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< apiref "sht3xd/sht3xd.h" "sht3xd/sht3xd.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- diff --git a/content/components/sensor/sht4x.md b/src/content/docs/components/sensor/sht4x.mdx similarity index 83% rename from content/components/sensor/sht4x.md rename to src/content/docs/components/sensor/sht4x.mdx index 454957a843..3ff3cd4f69 100644 --- a/content/components/sensor/sht4x.md +++ b/src/content/docs/components/sensor/sht4x.mdx @@ -1,18 +1,18 @@ --- description: "Instructions for setting up SHT4X temperature and humidity sensor" title: "SHT4X Temperature and Humidity Sensor" -params: - seo: - description: Instructions for setting up SHT4X temperature and humidity sensor - image: sht4x.jpg --- +import { Image } from 'astro:assets'; +import sht4xFullImg from './images/sht4x-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `sht4x` sensor platform allows you to use your SHT4X temperature and humidity sensor ([datasheet](https://sensirion.com/media/documents/33FD6951/661CD142/HT_DS_Datasheet_SHT4x.pdf), [Adafruit](https://www.adafruit.com/product/4885)) with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="sht4x-full.jpg" alt="Image" width="80.0%" class="align-center" >}} + ```yaml sensor: @@ -55,8 +55,8 @@ for more information about heater operation. ## See Also -- {{< docref "/components/sensor/sht3xd" >}} -- {{< docref "/components/sensor/shtcx" >}} +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- [SHTCx Temperature+Humidity Sensors](/components/sensor/shtcx/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< apiref "sht4x/sht4x.h" "sht4x/sht4x.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- diff --git a/content/components/sensor/shtcx.md b/src/content/docs/components/sensor/shtcx.mdx similarity index 67% rename from content/components/sensor/shtcx.md rename to src/content/docs/components/sensor/shtcx.mdx index 52d85a0c44..d92c8837a8 100644 --- a/content/components/sensor/shtcx.md +++ b/src/content/docs/components/sensor/shtcx.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up SHTC1 and SHTC3 temperature and humidity sensors" title: "SHTCx Temperature+Humidity Sensors" -params: - seo: - description: Instructions for setting up SHTC1 and SHTC3 temperature and humidity sensors - image: shtc3.jpg --- +import { Image } from 'astro:assets'; +import temperatureHumidityImg from './images/temperature-humidity.png'; +import APIRef from '@components/APIRef.astro'; + The `shtcx` sensor platform Temperature+Humidity sensor allows you to use your Sensirion SHTC1 ([datasheet](https://sensirion.com/media/documents/21BF77EA/63A5A411/Datasheet_SHTC1.pdf), [Sensirion SHTC1](https://sensirion.com/products/catalog/SHTC1/)) and @@ -16,7 +16,7 @@ the newer SHTC3 ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="temperature-humidity.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -47,10 +47,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "shtcx/shtcx.h" "shtcx/shtcx.h" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- diff --git a/content/components/sensor/sm300d2.md b/src/content/docs/components/sensor/sm300d2.mdx similarity index 84% rename from content/components/sensor/sm300d2.md rename to src/content/docs/components/sensor/sm300d2.mdx index 4a5c9a271e..3b73a81e34 100644 --- a/content/components/sensor/sm300d2.md +++ b/src/content/docs/components/sensor/sm300d2.mdx @@ -1,17 +1,25 @@ --- description: "Instructions for setting up SM300D2 sensor to work with ESPHome" title: "SM300D2 7-in-1 Air Quality Sensor" -params: - seo: - description: Instructions for setting up SM300D2 sensor to work with ESPHome - image: sm300d2.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sm300d2FullImg from './images/sm300d2-full.jpg'; +import sm300d2UiImg from './images/sm300d2-ui.png'; +import sm300d2PinsImg from './images/sm300d2-pins.jpg'; +import APIRef from '@components/APIRef.astro'; + The `sm300d2` sensor platform allows you to use the SM300D2 7-in-1 Air Quality Sensor with ESPHome. -{{< img src="sm300d2-full.jpg" alt="Image" caption="SM300D2 7-in-1 Air Quality Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="sm300d2-ui.png" alt="Image" width="50.0%" class="align-center" >}} + Although the SM300D2 sensor supports connections via UART or RS485, this platform only supports UART connections. The LCD module which is often sold with/for these sensor boards can work over either UART @@ -90,9 +98,14 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for actions. -{{< img src="sm300d2-pins.jpg" alt="Image" caption="Pins on the SM300D2. UART RX is not in use." width="80.0%" class="align-center" >}} +
    -{{< anchor "pins-note" >}} + > [!NOTE] > The board's `GD` pin must be connected to a `GND` pin on the ESP. @@ -105,6 +118,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/aqi" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "sm300d2/sm300d2.h" "sm300d2/sm300d2.h" >}} +- diff --git a/content/components/sensor/smt100.md b/src/content/docs/components/sensor/smt100.mdx similarity index 88% rename from content/components/sensor/smt100.md rename to src/content/docs/components/sensor/smt100.mdx index b8e0ab58c8..924de68d31 100644 --- a/content/components/sensor/smt100.md +++ b/src/content/docs/components/sensor/smt100.mdx @@ -1,15 +1,14 @@ --- description: "Instructions for setting up SMT100 soil moisture and temperature sensor" title: "SMT100 Soil Moisture Sensor" -params: - seo: - description: Instructions for setting up SMT100 soil moisture and temperature sensor - image: smt100.jpg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The SMT100 sensor platform allows you to use the SMT100 soil moisture and temperature with ESPHome. -{{< img src="smt100.jpg" alt="Image" width="50.0%" class="align-center" >}} + The communication with this component is done via a [UART](/components/uart) using a simple ASCII protocol. You must therefore have a `uart:` entry in your configuration with both the TX and RX pins set to some pins on your @@ -65,6 +64,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/smt100" >}} +- [SMT100 Soil Moisture Sensor](/components/sensor/smt100/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "smt100/smt100.h" "smt100/smt100.h" >}} +- diff --git a/content/components/sensor/sound_level.md b/src/content/docs/components/sensor/sound_level.mdx similarity index 76% rename from content/components/sensor/sound_level.md rename to src/content/docs/components/sensor/sound_level.mdx index 3c5c61a09e..c6a78e5bc5 100644 --- a/content/components/sensor/sound_level.md +++ b/src/content/docs/components/sensor/sound_level.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up microphone sound level sensors with ESPHome" title: "Sound Level Sensor" -params: - seo: - description: Instructions for setting up microphone sound level sensors with ESPHome - image: waveform.svg --- +import APIRef from '@components/APIRef.astro'; -The `sound_level` sensor platform allows you to measure a {{< docref "/components/microphone/index" "microphone" >}}'s average and peak sound pressure levels over a specified measurement duration. The sensors output in **relative** `dB`, where `0 dB` represents the loudest sound the microphone can measure. + +The `sound_level` sensor platform allows you to measure a [microphone](/components/microphone/)'s average and peak sound pressure levels over a specified measurement duration. The sensors output in **relative** `dB`, where `0 dB` represents the loudest sound the microphone can measure. > [!WARNING] > Audio and voice components consume a significant amount of resources (RAM, CPU) on the device. @@ -29,7 +27,7 @@ sensor: ## Configuration variables -- **microphone** (**Required**, [Microphone Source Configuration](/components/microphone#config-microphone-source)): The {{< docref "/components/microphone/index" "microphone" >}} settings to use for input. Multiple channels may be selected. +- **microphone** (**Required**, [Microphone Source Configuration](/components/microphone#config-microphone-source)): The [microphone](/components/microphone/) settings to use for input. Multiple channels may be selected. - **measurement_duration** (*Optional*, [Time](/guides/configuration-types#time)): The time duration for each sound level measurement. Ranges from `50ms` to `60s`. Defaults to `1000ms`. - **passive** (**Required**, boolean). Whether passive mode is enabled. See [Passive Mode](#sound_level-passive). - **peak** (*Optional*): The information for the peak loudness sensor. @@ -40,7 +38,7 @@ sensor: - All options from [Sensor](/components/sensor). -{{< anchor "sound_level-passive" >}} + ## Passive Mode @@ -49,7 +47,7 @@ If the sound level component is configured in passive mode, then it will only me > [!WARNING] > Some devices do not support duplex audio, meaning they cannot output audio to a speaker at the same time as capturing audio from a microphone. On these devices, with passive mode disabled, you must take care to manually stop the `sound_level` component whenever you want to send audio to the speaker component. No manual management is necessary if you enable passive mode. -{{< anchor "sound_level-actions" >}} + ## Sound Level Actions @@ -67,4 +65,4 @@ Stops measuring sound levels. Does nothing in passive mode. - [Root Mean Square (Wikipedia)](https://en.wikipedia.org/wiki/Root_mean_square) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "sound_level/sound_level.h" "sound_level/sound_level.h" >}} +- diff --git a/content/components/sensor/sps30.md b/src/content/docs/components/sensor/sps30.mdx similarity index 90% rename from content/components/sensor/sps30.md rename to src/content/docs/components/sensor/sps30.mdx index 854d0bf62c..9520c3587d 100644 --- a/content/components/sensor/sps30.md +++ b/src/content/docs/components/sensor/sps30.mdx @@ -1,18 +1,19 @@ --- description: "Instructions for setting up SPS30 PM1.0, PM2.5, PM4, PM10 Particulate Matter sensors" title: "SPS30 Particulate Matter Sensor" -params: - seo: - description: Instructions for setting up SPS30 PM1.0, PM2.5, PM4, PM10 Particulate Matter sensors - image: sps30.jpg --- +import { Image } from 'astro:assets'; +import sensirionPmImg from './images/sensirion-pm.png'; +import sps30WiringImg from './images/sps30-wiring.png'; +import APIRef from '@components/APIRef.astro'; + The `sps30` sensor platform allows you to use your Sensirion SPS30 ([datasheet](https://sensirion.com/media/documents/8600FF88/64A3B8D6/Sensirion_PM_Sensors_Datasheet_SPS30.pdf)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. This sensor supports both UART and I²C communication. However, at the moment only I²C communication is implemented. -{{< img src="sensirion-pm.png" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -111,7 +112,7 @@ sensor: The sensor has a 5 pin JST ZHR type connector, with a 1.5mm pitch. ([Matching connector housing](https://octopart.com/zhr-5-jst-279203), [datasheet](http://www.farnell.com/datasheets/1393424.pdf)) To force the sensor into I²C mode, the SEL pin (Interface Select, pin no.4) should be shorted to ground (pin no.5) -{{< img src="sps30-wiring.png" alt="Image" width="50.0%" class="align-center" >}} + For better stability, the SDA and SCL lines require suitable pull-up resistors. Sensirion shows 10 kΩ resistors between VDD (5V, pin no.1) and SDA (pin no.2) and SCL (pin no.3) in the manual. @@ -121,7 +122,7 @@ The SPS30 sensor has an automatic fan-cleaning which will accelerate the built-i The default automatic-cleaning interval is 168 hours (1 week) of uninterrupted use. Switching off the sensor resets this time counter. Disabling of automatic-cleaning or setting a manual interval is not supported at the moment. -{{< anchor "sps30-start_fan_autoclean_action" >}} + ## Manual Cleaning @@ -189,10 +190,10 @@ on_...: ## See Also -- {{< docref "/components/sensor/aqi" >}} +- [Air Quality Index (AQI)](/components/sensor/aqi/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "sds011/" >}} -- {{< docref "pmsx003/" >}} -- {{< docref "ccs811/" >}} -- {{< docref "sgp30/" >}} -- {{< apiref "sps30/sps30.h" "sps30/sps30.h" >}} +- [SDS011 Particulate Matter Sensor](/components/sensor/sds011/) +- [PMSX003 Particulate Matter Sensor](/components/sensor/pmsx003/) +- [CCS811 eCO_2 and Volatile Organic Compound Sensor](/components/sensor/ccs811/) +- [SGP30 CO₂ and Volatile Organic Compound Sensor](/components/sensor/sgp30/) +- diff --git a/content/components/sensor/sts3x.md b/src/content/docs/components/sensor/sts3x.mdx similarity index 63% rename from content/components/sensor/sts3x.md rename to src/content/docs/components/sensor/sts3x.mdx index 11ea0c699b..9bb08171d8 100644 --- a/content/components/sensor/sts3x.md +++ b/src/content/docs/components/sensor/sts3x.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up STS3x-DIS temperature sensors" title: "STS3X Temperature Sensor" -params: - seo: - description: Instructions for setting up STS3x-DIS temperature sensors - image: sts3x.jpg --- +import { Image } from 'astro:assets'; +import temperatureImg from './images/temperature.png'; +import APIRef from '@components/APIRef.astro'; + The `sts3x` sensor platform Temperature sensor allows you to use your Sensirion STS30-DIS, STS31-DIS or STS35-DIS ([datasheet](https://sensirion.com/media/documents/1DA31AFD/65D613A8/Datasheet_STS3x_DIS.pdf), [Sensirion STS3x](https://www.sensirion.com/sts3x/)) sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="temperature.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -37,9 +37,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "sht3xd/" >}} -- {{< apiref "sts3x/sts3x.h" "sts3x/sts3x.h" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- diff --git a/content/components/sensor/stts22h.md b/src/content/docs/components/sensor/stts22h.mdx similarity index 84% rename from content/components/sensor/stts22h.md rename to src/content/docs/components/sensor/stts22h.mdx index 6c8a591b6b..694f240b8a 100644 --- a/content/components/sensor/stts22h.md +++ b/src/content/docs/components/sensor/stts22h.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up STTS22H temperature sensor from STMicroelectronics" title: "STTS22H Temperature Sensor" -params: - seo: - description: Instructions for setting up STTS22H temperature sensor from STMicroelectronics with ESPHome - image: stts22h.png --- +import { Image } from 'astro:assets'; +import stts22hImg from './images/stts22h.png'; +import Figure from '@components/Figure.astro'; + The `stts22h` sensor platform allows you to use a STTS22H temperature sensor ([datasheet](https://www.st.com/resource/en/datasheet/stts22h.pdf)) with ESPHome. This is a low-power, high-accuracy digital temperature sensor with ±0.5°C accuracy (typical at 25°C) and a temperature range @@ -14,8 +14,12 @@ from -40°C to +125°C. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="stts22h.png" alt="STTS22H Temperature Sensor" -caption="SparkFun STTS22H Temperature Sensor Breakout Boards" class="align-center" >}} +
    ```yaml # Example configuration entry diff --git a/content/components/sensor/sy6970.md b/src/content/docs/components/sensor/sy6970.mdx similarity index 97% rename from content/components/sensor/sy6970.md rename to src/content/docs/components/sensor/sy6970.mdx index 1a87fe0dd8..6b04cd094a 100644 --- a/content/components/sensor/sy6970.md +++ b/src/content/docs/components/sensor/sy6970.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up SY6970 Battery Management IC" title: "SY6970 Battery Management IC" -params: - seo: - description: Instructions for setting up SY6970 battery management and charging IC with ESPHome - image: sy6970.jpg --- The `sy6970` component allows you to use the SY6970 battery management and charging ICs [SY6970 Datasheet](https://github.com/Xinyuan-LilyGO/LilyGo-AMOLED-Series/blob/master/datasheet/SY6970%20Datasheet.pdf) with ESPHome. @@ -33,7 +29,7 @@ i2c: sy6970: id: pmu address: 0x6A - enable_status_led: true + enable_status_led: true input_current_limit: 1000 charge_voltage: 4200 charge_current: 500 @@ -189,7 +185,7 @@ sy6970: precharge_current: 128 charge_enabled: true enable_adc: true - + sensor: - platform: sy6970 sy6970_id: pmu @@ -280,10 +276,10 @@ The component directly implements the SY6970 register protocol: - **REG_12**: Charge current (50mA steps) - **REG_00-07**: Configuration registers for current limits, charge parameters, and safety timers -### See Also +## See Also - [SY6970 Datasheet](https://github.com/Xinyuan-LilyGO/LilyGo-AMOLED-Series/blob/master/datasheet/SY6970%20Datasheet.pdf) -- [Sensor](/components/sensor) -- [Binary Sensor](/components/binary_sensor) -- [Text Sensor](/components/text_sensor) +- [Sensor Component](/components/sensor) +- [Binary Sensor Component](/components/binary_sensor) +- [Text Sensor Component](/components/text_sensor) - [I²C Bus](/components/i2c) diff --git a/content/components/sensor/t6615.md b/src/content/docs/components/sensor/t6615.mdx similarity index 77% rename from content/components/sensor/t6615.md rename to src/content/docs/components/sensor/t6615.mdx index 4553d0ad49..e91e7d7abf 100644 --- a/content/components/sensor/t6615.md +++ b/src/content/docs/components/sensor/t6615.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up T6613 and T6615 sensors for ESPHome" title: "T6613/15 CO2 Sensors" -params: - seo: - description: Instructions for setting up T6613 and T6615 sensors for ESPHome - image: t6615.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import t6615Img from './images/t6615.png'; +import t6615PinsImg from './images/t6615-pins.png'; +import APIRef from '@components/APIRef.astro'; + The `t6615` sensor platform allows you to use T6613 and T6615 family sensors ([amphenol](https://amphenol-sensors.com/en/telaire/co2/525-co2-sensor-modules/319-t6615)) with ESPHome. T6613 sensors are unreferenced and require ABC to calibrate daily, while the T6615 sensors have a sealed reference gas and do not require ABC calibration. All ppm ranges are supported by this platform. -{{< img src="t6615.png" alt="Image" caption="T6615 CO_2 Sensor." width="50.0%" class="align-center" >}} +
    As the communication is done using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the device (pin 10) and the `tx_pin` connected to the RX Pin of the device (pin @@ -42,10 +49,15 @@ sensor: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for actions. -{{< img src="t6615-pins.png" alt="Image" caption="Pins on the T6615. Only the ones marked with a red circle need to be connected." width="80.0%" class="align-center" >}} +
    ## See Also - [Sensor Filters](/components/sensor#sensor-filters) - [UART Protocol Documentation](https://www.amphenol-sensors.com/hubfs/Documents/T63182-004-091614-web.pdf) -- {{< apiref "t6615/t6615.h" "t6615/t6615.h" >}} +- diff --git a/content/components/sensor/tc74.md b/src/content/docs/components/sensor/tc74.mdx similarity index 59% rename from content/components/sensor/tc74.md rename to src/content/docs/components/sensor/tc74.mdx index 92ea7e9613..f2110fa879 100644 --- a/content/components/sensor/tc74.md +++ b/src/content/docs/components/sensor/tc74.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up the TC74 temperature sensors." title: "TC74 Temperature Sensor" -params: - seo: - description: Instructions for setting up the TC74 temperature sensors. - image: tc74.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tc74FullImg from './images/tc74-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The TC74 sensor platform allows you to use your TC74 ([datasheet](https://ww1.microchip.com/downloads/en/DeviceDoc/21462D.pdf), [Adafruit](https://www.adafruit.com/product/4375)) temperature sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="tc74-full.jpg" alt="Image" caption="TC74 Temperature Sensor." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -35,10 +41,10 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "sht3xd/" >}} -- {{< docref "htu21d/" >}} -- {{< docref "tmp102/" >}} -- {{< apiref "tc74/tc74.h" "tc74/tc74.h" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- [TMP102 Temperature Sensor](/components/sensor/tmp102/) +- diff --git a/content/components/sensor/tcs34725.md b/src/content/docs/components/sensor/tcs34725.mdx similarity index 90% rename from content/components/sensor/tcs34725.md rename to src/content/docs/components/sensor/tcs34725.mdx index 280c497f92..8f122e94a2 100644 --- a/content/components/sensor/tcs34725.md +++ b/src/content/docs/components/sensor/tcs34725.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up TCS34725 RGB color sensors." title: "TCS34725 RGB Color Sensor" -params: - seo: - description: Instructions for setting up TCS34725 RGB color sensors. - image: tcs34725.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tcs34725FullImg from './images/tcs34725-full.jpg'; +import tcs34725UiImg from './images/tcs34725-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `tcs34725` sensor platform allows you to use your TCS34725 RGB color sensors ([datasheet](https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf), [Adafruit](https://www.adafruit.com/product/1334)), color temperature and illuminance sensors with ESPHome. The [I²C](/components/i2c) is @@ -18,9 +20,14 @@ and a `gain` of `1x` the sensor will max out at around 4100 lx. In this case the channels will show `100%`, the clear channel `25%`. The illumination in lux is shown as `0` as well as the color temperature in kelvin will show `0`. -{{< img src="tcs34725-full.jpg" alt="Image" caption="TCS34725 RGB Color Sensor" width="50.0%" class="align-center" >}} +
    -{{< img src="tcs34725-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -96,4 +103,4 @@ accumulation. Use faster timings only if fast readout is necessary with stable l - [Sensor Filters](/components/sensor#sensor-filters) - [TCS34725 library](https://github.com/adafruit/Adafruit_TCS34725) by [Adafruit](https://www.adafruit.com/) -- {{< apiref "tcs34725/tcs34725.h" "tcs34725/tcs34725.h" >}} +- diff --git a/content/components/sensor/tee501.md b/src/content/docs/components/sensor/tee501.mdx similarity index 67% rename from content/components/sensor/tee501.md rename to src/content/docs/components/sensor/tee501.mdx index f6e7f46aae..b50f815270 100644 --- a/content/components/sensor/tee501.md +++ b/src/content/docs/components/sensor/tee501.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up TEE501 temperature sensors" title: "TEE501 Temperature Sensor" -params: - seo: - description: Instructions for setting up TEE501 temperature sensors - image: TEE501.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `hte501` sensor platform Temperature sensor allows you to use your TEE501 ([datasheet](https://www.epluse.com/fileadmin/data/product/tee501/datasheet_TEE501.pdf), [E+E TEE501](https://www.epluse.com/products/temperature-measurement/temperature-sensing-element/tee501/)) sensor with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="TEE501.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -37,8 +36,8 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "hte501/" >}} -- {{< docref "ee895/" >}} -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< apiref "tee501/tee501.h" "tee501/tee501.h" >}} +- [HTE501 Temperature+Humidity Sensor](/components/sensor/hte501/) +- [EE895 CO₂, Temperature and Pressure Sensor](/components/sensor/ee895/) +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- diff --git a/content/components/sensor/teleinfo.md b/src/content/docs/components/sensor/teleinfo.mdx similarity index 79% rename from content/components/sensor/teleinfo.md rename to src/content/docs/components/sensor/teleinfo.mdx index 3bc558e820..9040d3dbca 100644 --- a/content/components/sensor/teleinfo.md +++ b/src/content/docs/components/sensor/teleinfo.mdx @@ -1,19 +1,27 @@ --- description: "Instructions for setting up French Teleinformation" title: "Teleinformation from Linky electrical counter." -params: - seo: - description: Instructions for setting up French Teleinformation - image: teleinfo.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import teleinfoFullImg from './images/teleinfo-full.jpg'; +import teleinfoStandardImg from './images/teleinfo-standard.jpg'; +import teleinfoHistoricalImg from './images/teleinfo-historical.jpg'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `teleinfo` component allows you to retrieve data from a French electrical counter using Teleinformation ([datasheet](https://www.enedis.fr/media/2035/download)). It works with Linky electrical counter but also legacy EDF electrical counter. -{{< img src="teleinfo-full.jpg" alt="Image" caption="Linky electrical counter" width="50.0%" class="align-center" >}} +
    .. @@ -29,11 +37,21 @@ mode or 1200bps in historical mode. To find out which mode you are using, simply press -/+ buttons on the counter and look for `Standard mode` or `Historical mode` as below. -{{< img src="teleinfo-standard.jpg" alt="Image" caption="Linky electrical counter configured in standard mode." width="50.0%" class="align-center" >}} +
    .. -{{< img src="teleinfo-historical.jpg" alt="Image" caption="Linky electrical counter configured in historical mode." width="50.0%" class="align-center" >}} +
    .. @@ -103,4 +121,4 @@ text_sensor: ## See Also -- {{< apiref "teleinfo/teleinfo.h" "teleinfo/teleinfo.h" >}} +- diff --git a/content/components/sensor/tem3200.md b/src/content/docs/components/sensor/tem3200.mdx similarity index 92% rename from content/components/sensor/tem3200.md rename to src/content/docs/components/sensor/tem3200.mdx index 001b0bfe86..99b6af6bf0 100644 --- a/content/components/sensor/tem3200.md +++ b/src/content/docs/components/sensor/tem3200.mdx @@ -1,16 +1,22 @@ --- description: "Instructions for setting up TE-M3200 pressure sensors with ESPHome" title: "TE-M3200 Pressure Sensor" -params: - seo: - description: Instructions for setting up TE-M3200 pressure sensors with ESPHome - image: tem3200.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `tem3200` sensor platform allows you to use your TE-M3200 ([datasheet](https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FM3200%7FA20%7Fpdf%7FEnglish%7FENG_DS_M3200_A20.pdf), [product page](https://www.te.com/en/product-CAT-PTT0068.html)) pressure sensors with ESPHome. -{{< img src="tem3200.jpg" alt="Image" caption="TE-M3200 Pressure Sensor." width="50.0%" class="align-center" >}} +
    ## Configuration @@ -41,7 +47,7 @@ sensor: - **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to `0x28`. See [datasheet](https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FM3200%7FA20%7Fpdf%7FEnglish%7FENG_DS_M3200_A20.pdf) (page 10). -{{< anchor "tem3200-converting" >}} + ## Converting units diff --git a/content/components/sensor/template.md b/src/content/docs/components/sensor/template.mdx similarity index 92% rename from content/components/sensor/template.md rename to src/content/docs/components/sensor/template.mdx index 11df2e0db9..babf1291b6 100644 --- a/content/components/sensor/template.md +++ b/src/content/docs/components/sensor/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template sensors with ESPHome." title: "Template Sensor" -params: - seo: - description: Instructions for setting up template sensors with ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` sensor platform allows you to create a sensor with templated values using [lambdas](/automations/templates#config-lambda). @@ -40,7 +38,7 @@ Possible return values for the lambda: - All other options from [Sensor](/components/sensor). -{{< anchor "sensor-template-publish_action" >}} + ## `sensor.template.publish` Action @@ -113,4 +111,4 @@ sensor: - [Sensor Filters](/components/sensor#sensor-filters) - [Automation](/automations) -- {{< apiref "template/sensor/template_sensor.h" "template/sensor/template_sensor.h" >}} +- diff --git a/content/components/sensor/thermopro_ble.md b/src/content/docs/components/sensor/thermopro_ble.mdx similarity index 85% rename from content/components/sensor/thermopro_ble.md rename to src/content/docs/components/sensor/thermopro_ble.mdx index 60c94b2544..d50ce9f414 100644 --- a/content/components/sensor/thermopro_ble.md +++ b/src/content/docs/components/sensor/thermopro_ble.mdx @@ -1,14 +1,15 @@ --- description: "Instructions for setting up ThermoPro Bluetooth-based temperature and humidity sensors in ESPHome." title: "ThermoPro BLE Sensors" -params: - seo: - description: Instructions for setting up ThermoPro Bluetooth-based temperature and humidity sensors in ESPHome. - image: thermopro_tp357.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import thermoproTp357FullImg from './images/thermopro_tp357-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The `thermopro_ble` sensor platform lets you track the output of ThermoPro Bluetooth -Low Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. This component will track the +Low Energy devices using the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track the temperature, humidity, battery level and signal strength of the ThermoPro device every time the sensor sends out a BLE broadcast. @@ -23,7 +24,12 @@ This component supports multiple ThermoPro BLE sensor models: All models support signal strength (RSSI) monitoring. -{{< img src="thermopro_tp357-full.jpg" alt="Image" caption="ThermoPro TP357 Temperature and Humidity Sensor over BLE." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -111,6 +117,6 @@ entry like in the configuration example at the top. ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} -- {{< apiref "thermopro_ble/thermopro_ble.h" "thermopro_ble/thermopro_ble.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) +- diff --git a/content/components/sensor/tmp102.md b/src/content/docs/components/sensor/tmp102.mdx similarity index 54% rename from content/components/sensor/tmp102.md rename to src/content/docs/components/sensor/tmp102.mdx index dd27fbe67a..e70c54288a 100644 --- a/content/components/sensor/tmp102.md +++ b/src/content/docs/components/sensor/tmp102.mdx @@ -1,20 +1,27 @@ --- description: "Instructions for setting up TMP102 temperature sensors." title: "TMP102 Temperature Sensor" -params: - seo: - description: Instructions for setting up TMP102 temperature sensors. - image: tmp102.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tmp102FullImg from './images/tmp102-full.jpg'; +import temperatureImg from './images/temperature.png'; +import APIRef from '@components/APIRef.astro'; + The TMP102 Temperature sensor allows you to use your TMP102 ([Sparkfun](https://www.sparkfun.com/products/13314)) and LM75 sensors with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="tmp102-full.jpg" alt="Image" caption="TMP102 Temperature Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="temperature.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -35,9 +42,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "dht/" >}} -- {{< docref "dht12/" >}} -- {{< docref "hdc1080/" >}} -- {{< docref "sht3xd/" >}} -- {{< docref "htu21d/" >}} -- {{< apiref "tmp102/tmp102.h" "tmp102/tmp102.h" >}} +- [DHT Temperature+Humidity Sensor](/components/sensor/dht/) +- [DHT12 Temperature+Humidity Sensor](/components/sensor/dht12/) +- [HDC1080 Temperature+Humidity Sensor](/components/sensor/hdc1080/) +- [SHT3X-D Temperature+Humidity Sensor](/components/sensor/sht3xd/) +- [HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor](/components/sensor/htu21d/) +- diff --git a/content/components/sensor/tmp1075.md b/src/content/docs/components/sensor/tmp1075.mdx similarity index 87% rename from content/components/sensor/tmp1075.md rename to src/content/docs/components/sensor/tmp1075.mdx index abfc3fbc74..3ad702e1c5 100644 --- a/content/components/sensor/tmp1075.md +++ b/src/content/docs/components/sensor/tmp1075.mdx @@ -1,17 +1,23 @@ --- description: "Instructions for setting up the TMP1075 Temperature sensor." title: "TMP1075 Temperature Sensor" -params: - seo: - description: Instructions for setting up the TMP1075 Temperature sensor. - image: tmp1075.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The TMP1075 Temperature sensor allows you to use your TMP1075 ([datasheet](https://www.ti.com/lit/gpn/tmp1075)) sensors with ESPHome. -{{< img src="tmp1075.jpg" alt="Image" caption="TMP1075 Temperature Sensor. (Credit: [Texas Instruments](https://www.ti.com/content/dam/ticom/images/products/ic/sensing-products/chips/tmp1075-technical-chip-shot.png), image cropped and compressed)" width="30.0%" class="align-center" >}} +
    The TMP1075 is a high precision temperature sensor that communicates over I²C. Each sensor is tested on a NIST tracable test setup during Texas Instruments' @@ -61,7 +67,7 @@ sensor: - **fault_count** (*Optional*, int): Number of measurements. required for the alert pin to act. Must be between `1` and `4`, inclusive. Defaults to `1`. - All other options from [Sensor](/components/sensor). -{{< anchor "tmp1075_i2c_addresses" >}} + ## I²C Addresses diff --git a/content/components/sensor/tmp117.md b/src/content/docs/components/sensor/tmp117.mdx similarity index 83% rename from content/components/sensor/tmp117.md rename to src/content/docs/components/sensor/tmp117.mdx index a7f32d2756..ad2d005068 100644 --- a/content/components/sensor/tmp117.md +++ b/src/content/docs/components/sensor/tmp117.mdx @@ -1,18 +1,24 @@ --- description: "Instructions for setting up the TMP117 Temperature sensor." title: "TMP117 Temperature Sensor" -params: - seo: - description: Instructions for setting up the TMP117 Temperature sensor. - image: tmp117.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The TMP117 Temperature sensor allows you to use your TMP117 ([datasheet](https://www.ti.com/lit/ds/symlink/tmp117.pdf), [sparkfun](https://www.sparkfun.com/products/15805)) sensors with ESPHome. -{{< img src="tmp117.jpg" alt="Image" caption="TMP117 Temperature Sensor. (Credit: [Sparkfun](https://www.sparkfun.com/products/15805), image cropped and compressed)" width="30.0%" class="align-center" >}} +
    The TMP117 is a high precision temperature sensor that communicates over I²C. Each sensor is tested on a NIST tracable test setup during Texas Instruments' production process. Accuracy should be at worst 0.1C across the -20C to +50C temperature range. @@ -36,7 +42,7 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Defaults to `60s`. The sensor component sets the maximum possible averaging in the sensor based on this. - All other options from [Sensor](/components/sensor). -{{< anchor "tmp117_i2c_addresses" >}} + ## I²C Addresses diff --git a/content/components/sensor/tof10120.md b/src/content/docs/components/sensor/tof10120.mdx similarity index 71% rename from content/components/sensor/tof10120.md rename to src/content/docs/components/sensor/tof10120.mdx index 628e120702..2731422b32 100644 --- a/content/components/sensor/tof10120.md +++ b/src/content/docs/components/sensor/tof10120.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up TOF10120 distance sensors in ESPHome." title: "TOF10120 Time Of Flight Distance Sensor" -params: - seo: - description: Instructions for setting up TOF10120 distance sensors in ESPHome. - image: tof10120.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tof10120FullImg from './images/tof10120-full.jpg'; +import tof10120UiImg from './images/tof10120-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `tof10120` sensor platform allows you to use TOF10120 optical time of flight sensor ([datasheet](https://github.com/SoyM/TOF10120/blob/master/TOF10120.pdf)) with ESPHome to measure distances. The sensor works optically by emitting short infrared pulses and measuring the time it takes the light to be reflected back. @@ -17,9 +19,14 @@ on several conditions like surface reflectance, field of view, temperature etc.. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="tof10120-full.jpg" alt="Image" caption="TOF10120 Time Of Flight Distance Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="tof10120-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -40,4 +47,4 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "tof10120/tof10120_sensor.h" "tof10120/tof10120_sensor.h" >}} +- diff --git a/content/components/sensor/total_daily_energy.md b/src/content/docs/components/sensor/total_daily_energy.mdx similarity index 68% rename from content/components/sensor/total_daily_energy.md rename to src/content/docs/components/sensor/total_daily_energy.mdx index 121efc59d3..4b5be41db7 100644 --- a/content/components/sensor/total_daily_energy.md +++ b/src/content/docs/components/sensor/total_daily_energy.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up sensors that track the total daily energy usage per day and accumulate the power usage." title: "Total Daily Energy Sensor" -params: - seo: - description: Instructions for setting up sensors that track the total daily energy usage per day and accumulate the power usage. - image: sigma.svg --- +import APIRef from '@components/APIRef.astro'; + The `total_daily_energy` sensor is a helper sensor that can use the power value of -other sensors like the {{< docref "hlw8012" "HLW8012" >}}, {{< docref "hlw8032" "HLW8032" >}}, {{< docref "cse7766" "CSE7766" >}}, {{< docref "atm90e32" "ATM90E32" >}}, etc and integrate +other sensors like the [HLW8012](/components/sensor/hlw8012/), [HLW8032](/components/sensor/hlw8032/), [CSE7766](/components/sensor/cse7766/), [ATM90E32](/components/sensor/atm90e32/), etc and integrate it over time. So this component allows you to convert readings in `W` or `kW` to readings of the total @@ -56,7 +54,7 @@ time: ## Converting from W to kW -Some sensors such as the {{< docref "hlw8012" "HLW8012" >}} expose their power sensor with a unit of measurement of +Some sensors such as the [HLW8012](/components/sensor/hlw8012/) expose their power sensor with a unit of measurement of `W`. To have your readings in `kW`, use a filter: ```yaml @@ -74,7 +72,7 @@ sensor: ## Lifetime instead of Daily -For a more-generic version of this component which does not reset every midnight, see {{< docref "integration/" >}}, which can provide device-lifetime values instead of daily values with the following example settings: +For a more-generic version of this component which does not reset every midnight, see [Integration](/components/sensor/integration/), which can provide device-lifetime values instead of daily values with the following example settings: ```yaml # Example configuration entry @@ -91,11 +89,11 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "hlw8012/" >}} -- {{< docref "cse7766/" >}} -- {{< docref "integration/" >}} -- {{< docref "/components/sensor/pulse_counter" >}} -- {{< docref "/components/sensor/pulse_meter" >}} -- {{< docref "/components/time/homeassistant" >}} -- {{< docref "/cookbook/power_meter" >}} -- {{< apiref "total_daily_energy/total_daily_energy.h" "total_daily_energy/total_daily_energy.h" >}} +- [HLW8012 Power Sensor](/components/sensor/hlw8012/) +- [CSE7766 Power Sensor](/components/sensor/cse7766/) +- [Integration Sensor](/components/sensor/integration/) +- [Pulse Counter Sensor](/components/sensor/pulse_counter/) +- [Pulse Meter Sensor](/components/sensor/pulse_meter/) +- [Home Assistant Time Source](/components/time/homeassistant/) +- [Non-Invasive Power Meter](/cookbook/power_meter/) +- diff --git a/content/components/sensor/tsl2561.md b/src/content/docs/components/sensor/tsl2561.mdx similarity index 71% rename from content/components/sensor/tsl2561.md rename to src/content/docs/components/sensor/tsl2561.mdx index 3d76e77081..d22f28f635 100644 --- a/content/components/sensor/tsl2561.md +++ b/src/content/docs/components/sensor/tsl2561.mdx @@ -1,21 +1,28 @@ --- description: "Instructions for setting up TSL2561 ambient light sensors in ESPHome." title: "TSL2561 Ambient Light Sensor" -params: - seo: - description: Instructions for setting up TSL2561 ambient light sensors in ESPHome. - image: tsl2561.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tsl2561FullImg from './images/tsl2561-full.jpg'; +import tsl2561UiImg from './images/tsl2561-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `tsl2561` sensor platform allows you to use your TSL2561 ([datasheet](https://cdn-shop.adafruit.com/datasheets/TSL2561.pdf), [Adafruit](https://www.adafruit.com/product/439)) ambient light sensor with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. -{{< img src="tsl2561-full.jpg" alt="Image" caption="TSL2561 Ambient Light Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="tsl2561-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -48,9 +55,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "bh1750/" >}} -- {{< docref "opt3001/" >}} -- {{< docref "tsl2591/" >}} -- {{< docref "adc/" >}} +- [BH1750 Ambient Light Sensor](/components/sensor/bh1750/) +- [OPT3001 Ambient Light Sensor](/components/sensor/opt3001/) +- [TSL2591 Ambient Light Sensor](/components/sensor/tsl2591/) +- [Analog To Digital Sensor](/components/sensor/adc/) - [SparkFun TSL2561 Arduino Library](https://github.com/sparkfun/SparkFun_TSL2561_Arduino_Library) by [SparkFun](https://sparkfun.com/) -- {{< apiref "tsl2561/tsl2561.h" "tsl2561/tsl2561.h" >}} +- diff --git a/content/components/sensor/tsl2591.md b/src/content/docs/components/sensor/tsl2591.mdx similarity index 93% rename from content/components/sensor/tsl2591.md rename to src/content/docs/components/sensor/tsl2591.mdx index eaa6067f94..72c3ee7fe1 100644 --- a/content/components/sensor/tsl2591.md +++ b/src/content/docs/components/sensor/tsl2591.mdx @@ -1,21 +1,34 @@ --- description: "Instructions for setting up TSL2591 ambient light sensors in ESPHome." title: "TSL2591 Ambient Light Sensor" -params: - seo: - description: Instructions for setting up TSL2591 ambient light sensors in ESPHome. - image: tsl2591.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import tsl2591UiImg from './images/tsl2591-ui.jpg'; +import APIRef from '@components/APIRef.astro'; + The `tsl2591` sensor platform allows you to use the AMS TSL2591 ambient light sensor with ESPHome. Communication with the device is over [I²C](/components/i2c), which must be present in your configuration. The TSL2591 device is available on breakout boards from a few vendors (for example, [Adafruit](http://www.adafruit.com/products/1980), [CQRobot](https://www.cqrobot.com/index.php?route=product/product&product_id=1112), [Waveshare](https://www.waveshare.net/shop/TSL25911-Light-Sensor.htm)). -{{< img src="tsl2591.jpg" alt="Image" caption="TSL2591 Ambient Light Sensor on a breakout board." width="50.0%" class="align-center" >}} - -{{< img src="tsl2591-ui.jpg" alt="Image" caption="TSL2591 sensors in Home Assistant UI." width="100.0%" class="align-center" >}} +
    + +
    The sensor claims a dynamic range of 600 million to 1 with an effective maximum of 88000 lux. It achieves that large range by having a configurable `gain` value. @@ -198,8 +211,8 @@ To see if delays are occurring, you can turn on debug logging. - [Radiometric vs. Photometric Units](https://www.thorlabs.de/catalogPages/506.pdf) - [Adafruit TSL2591 Arduino Library](https://github.com/adafruit/Adafruit_TSL2591_Library) by [Adafruit](https://adafruit.com/) _(for comparison only)_ - [Waveshare TSL2591 Libraries](https://github.com/waveshare/TSL2591X-Light-Sensor) by [Waveshare Electronics](https://www.waveshare.net/) _(for comparison only)_ -- {{< docref "bh1750/" >}} -- {{< docref "opt3001/" >}} -- {{< docref "tsl2561/" >}} +- [BH1750 Ambient Light Sensor](/components/sensor/bh1750/) +- [OPT3001 Ambient Light Sensor](/components/sensor/opt3001/) +- [TSL2561 Ambient Light Sensor](/components/sensor/tsl2561/) - [The Water Watcher (a DIY project using a TSL2591)](https://hackaday.io/project/176690-the-water-watcher) -- {{< apiref "tsl2591/tsl2591.h" "tsl2591/tsl2591.h" >}} +- diff --git a/content/components/sensor/tuya.md b/src/content/docs/components/sensor/tuya.mdx similarity index 78% rename from content/components/sensor/tuya.md rename to src/content/docs/components/sensor/tuya.mdx index 1fb7ae8990..2f91574237 100644 --- a/content/components/sensor/tuya.md +++ b/src/content/docs/components/sensor/tuya.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up a Tuya device sensor." title: "Tuya Sensor" -params: - seo: - description: Instructions for setting up a Tuya device sensor. - image: tuya.png --- +import APIRef from '@components/APIRef.astro'; + The `tuya` sensor platform creates a sensor from a tuya component -and requires {{< docref "/components/tuya" >}} to be configured. +and requires [Tuya](/components/tuya/) to be configured. ```text [13:46:01][C][tuya:023]: Tuya: @@ -41,6 +39,6 @@ sensor: ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/sensor" >}} -- {{< apiref "tuya/sensor/tuya_sensor.h" "tuya/sensor/tuya_sensor.h" >}} +- [Tuya MCU](/components/tuya/) +- [Sensor Component](/components/sensor/) +- diff --git a/content/components/sensor/tx20.md b/src/content/docs/components/sensor/tx20.mdx similarity index 86% rename from content/components/sensor/tx20.md rename to src/content/docs/components/sensor/tx20.mdx index 70aa5d6d98..1cc702e444 100644 --- a/content/components/sensor/tx20.md +++ b/src/content/docs/components/sensor/tx20.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up TX20/TX23 wind speed and direction sensors" title: "TX20/TX23 Wind Speed/Direction Sensor" -params: - seo: - description: Instructions for setting up TX20/TX23 wind speed and direction sensors - image: tx20.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `tx20` sensor platform allows you to use your TX20/TX23 wind direction and speed sensors with ESPHome. The only required pin is the black or brown cable (which is used to transmit data.) @@ -16,7 +16,14 @@ The difference from the TX20 to the TX23 seems to be that the green cable does n wind sensor is just sending a datagram every 2 seconds - pretty much the same as when the green cable was connected to GND in the TX20. -{{< img src="tx20.jpg" alt="Image" caption="TX20 / TX23 Wind Speed / Direction." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -57,7 +64,7 @@ sensor: > [!NOTE] > It appears that the manufacturer discontinued production of this sensor, as it doesn't seem to be available anymore for purchase. -> There are various alternatives though, and since ESPHome has a {{< docref "/components/modbus" >}}, any model supporting RS485 connection +> There are various alternatives though, and since ESPHome has a [Modbus](/components/modbus/), any model supporting RS485 connection > can be easily integrated. > > Check out in the ESPHome Devices database example configurations for @@ -67,5 +74,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "tx20/tx20.h" "tx20/tx20.h" >}} - [Datagram Tx20](http://www.sdpro.eu/jm/images/allegati/TX20_Documentazione.pdf) +- diff --git a/content/components/sensor/ufire_ec.md b/src/content/docs/components/sensor/ufire_ec.mdx similarity index 88% rename from content/components/sensor/ufire_ec.md rename to src/content/docs/components/sensor/ufire_ec.mdx index 43648e08b9..ef541e1906 100644 --- a/content/components/sensor/ufire_ec.md +++ b/src/content/docs/components/sensor/ufire_ec.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up uFire Isolated EC sensor in esphome" title: "uFire Isolated EC sensor" -params: - seo: - description: Instructions for setting up uFire Isolated EC sensor in esphome - image: ufire_ec.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `ufire_ec` sensor platform allows you to use your uFire Isolated EC sensor with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. It requires also to have a temperature sensor in the liquid tank; this can be on the same board or an external sensor linked to the uFire EC configuration. -{{< img src="ufire_ec.png" alt="Image" width="100.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -45,7 +44,7 @@ sensor: - **temperature_coefficient** (*Optional*, float): Set the temperature coefficient for the EC sensor. Defaults to `0.019`. -{{< anchor "sensor-ufire_ec-calibrate_probe_action" >}} + ## `ufire_ec.calibrate_probe` Action @@ -73,7 +72,7 @@ Configuration options: - **solution** (**Required**, float): Solution reference EC value. - **temperature** (**Required**, float): Solution current temperature. -{{< anchor "sensor-ufire_ec-reset_action" >}} + ## `ufire_ec.reset` Action @@ -99,4 +98,4 @@ Configuration options: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ufire_ec/ufire_ec.h" "ufire_ec/ufire_ec.h" >}} +- diff --git a/content/components/sensor/ufire_ise.md b/src/content/docs/components/sensor/ufire_ise.mdx similarity index 88% rename from content/components/sensor/ufire_ise.md rename to src/content/docs/components/sensor/ufire_ise.mdx index 311babf567..738b8806d2 100644 --- a/content/components/sensor/ufire_ise.md +++ b/src/content/docs/components/sensor/ufire_ise.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up uFire ISE pH sensor in esphome" title: "uFire ISE pH sensor" -params: - seo: - description: Instructions for setting up uFire ISE pH sensor in esphome - image: ufire_ise.png --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `ufire_ise` sensor platform allows you to use your uFire ISE pH sensor with ESPHome. The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. It required also to have an temperature sensor in the liquid tank; this can be on the same board or external sensor linked to the uFire ISE pH configuration. -{{< img src="ufire_ise.png" alt="Image" width="100.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -41,7 +40,7 @@ sensor: - **temperature** (*Optional*, [Sensor](/components/sensor)): Set the onboard temperature sensor configuration. All options from [Sensor](/components/sensor). Can't be used together with `temperature_sensor`. -{{< anchor "sensor-ufire_ise-calibrate_probe_high_action" >}} + ## `ufire_ise.calibrate_probe_high` Action @@ -68,7 +67,7 @@ Configuration options: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the ufire pH sensor. - **solution** (**Required**, float): Solution reference pH value. -{{< anchor "sensor-ufire_ise-calibrate_probe_low_action" >}} + ## `ufire_ise.calibrate_probe_low` Action @@ -95,7 +94,7 @@ Configuration options: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the ufire pH sensor. - **solution** (**Required**, float): Solution reference pH value. -{{< anchor "sensor-ufire_ise-reset_action" >}} + ## `ufire_ise.reset` Action @@ -121,4 +120,4 @@ Configuration options: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ufire_ise/ufire_ise.h" "ufire_ise/ufire_ise.h" >}} +- diff --git a/content/components/sensor/ultrasonic.md b/src/content/docs/components/sensor/ultrasonic.mdx similarity index 79% rename from content/components/sensor/ultrasonic.md rename to src/content/docs/components/sensor/ultrasonic.mdx index 12cece26e8..fc85502391 100644 --- a/content/components/sensor/ultrasonic.md +++ b/src/content/docs/components/sensor/ultrasonic.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up ultrasonic distance measurement sensors in ESPHome." title: "Ultrasonic Distance Sensor" -params: - seo: - description: Instructions for setting up ultrasonic distance measurement sensors in ESPHome. - image: ultrasonic.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import ultrasonicFullImg from './images/ultrasonic-full.jpg'; +import ultrasonicUiImg from './images/ultrasonic-ui.png'; +import APIRef from '@components/APIRef.astro'; + The ultrasonic distance sensor allows you to use simple ultrasonic sensors like the HC-SR04 ([datasheet](https://www.electroschematics.com/wp-content/uploads/2013/07/HC-SR04-datasheet-version-2.pdf), @@ -21,9 +23,14 @@ detected) the echo is never returned, this sensor has a timeout option which spe to wait for. If you set this too long, the sensor itself will timeout and it will appear as if there was a valid measurement. -{{< img src="ultrasonic-full.jpg" alt="Image" caption="HC-SR04 Ultrasonic Distance Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="ultrasonic-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -60,5 +67,5 @@ Advanced options: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} -- {{< apiref "ultrasonic/ultrasonic_sensor.h" "ultrasonic/ultrasonic_sensor.h" >}} +- [Template Sensor](/components/sensor/template/) +- diff --git a/content/components/sensor/uptime.md b/src/content/docs/components/sensor/uptime.mdx similarity index 74% rename from content/components/sensor/uptime.md rename to src/content/docs/components/sensor/uptime.mdx index 6042efde89..fe7e19b100 100644 --- a/content/components/sensor/uptime.md +++ b/src/content/docs/components/sensor/uptime.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a sensor that tracks the uptime of the ESP." title: "Uptime Sensor" -params: - seo: - description: Instructions for setting up a sensor that tracks the uptime of the ESP. - image: timer.svg --- +import APIRef from '@components/APIRef.astro'; + The `uptime` sensor allows you to track the time the ESP has stayed up for in seconds. Time rollovers are automatically handled. @@ -23,7 +21,7 @@ sensor: - **type** (*Optional*): Either: - `seconds` (*default*): A simple counter. - - `timestamp` : presents the time ESPHome last booted up. Requires a {{< docref "/components/time" >}}. + - `timestamp` : presents the time ESPHome last booted up. Requires a [Time](/components/time/). - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The sensor reporting interval. Defaults to `60s`. Valid only with `type: seconds`. @@ -32,6 +30,6 @@ sensor: ## See Also -- {{< docref "/components/text_sensor/uptime" >}} +- [Uptime Text Sensor](/components/text_sensor/uptime/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "uptime/uptime_sensor.h" "uptime/uptime_sensor.h" >}} +- diff --git a/content/components/sensor/veml3235.md b/src/content/docs/components/sensor/veml3235.mdx similarity index 89% rename from content/components/sensor/veml3235.md rename to src/content/docs/components/sensor/veml3235.mdx index 497c4785ff..ba1bb7cefa 100644 --- a/content/components/sensor/veml3235.md +++ b/src/content/docs/components/sensor/veml3235.mdx @@ -1,16 +1,23 @@ --- description: "Instructions for setting up VEML3235 ambient light sensors in ESPHome." title: "VEML3235 Ambient Light Sensor" -params: - seo: - description: Instructions for setting up VEML3235 ambient light sensors in ESPHome. - image: veml3235.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `veml3235` sensor platform allows you to use the Vishay VEML3235 ambient light sensor with ESPHome. Communication with the device is over [I²C](/components/i2c), which must be present in your configuration. -{{< img src="veml3235.jpg" alt="Image" caption="The VEML3235 Ambient Light Sensor" width="50.0%" class="align-center" >}} +
    This sensor provides a 16-bit dynamic range for ambient light detection ranging from 0 lx to nearly 18 klx, with a resolution as small as 0.0021 lx/counts. It achieves that range by having two configurable `gain` values and a range @@ -88,7 +95,7 @@ sensor: - [Vishay VEML3235 product page](https://www.vishay.com/en/product/80131/) - [Vishay VEML3235 datasheet](https://www.vishay.com/docs/80131/veml3235.pdf) - [Designing the VEML3235 Into an Application](https://www.vishay.com/docs/80222/designingveml3235.pdf) -- {{< docref "tsl2591/" >}} -- {{< docref "tsl2561/" >}} -- {{< docref "bh1750/" >}} -- {{< apiref "veml3235/veml3235.h" "veml3235/veml3235.h" >}} +- [TSL2591 Ambient Light Sensor](/components/sensor/tsl2591/) +- [TSL2561 Ambient Light Sensor](/components/sensor/tsl2561/) +- [BH1750 Ambient Light Sensor](/components/sensor/bh1750/) +- diff --git a/content/components/sensor/veml7700.md b/src/content/docs/components/sensor/veml7700.mdx similarity index 86% rename from content/components/sensor/veml7700.md rename to src/content/docs/components/sensor/veml7700.mdx index 00a6194738..ed6603076c 100644 --- a/content/components/sensor/veml7700.md +++ b/src/content/docs/components/sensor/veml7700.mdx @@ -1,12 +1,15 @@ --- description: "Instructions for setting up VEML7700 / VEML6030 ambient light sensors in ESPHome." title: "VEML7700 and VEML6030 Ambient Light Sensors" -params: - seo: - description: Instructions for setting up VEML7700 / VEML6030 ambient light sensors in ESPHome. - image: veml7700.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import veml7700FullImg from './images/veml7700-full.jpg'; +import veml7700UiImg from './images/veml7700-ui.png'; +import veml7700SpectralImg from './images/veml7700-spectral.png'; +import APIRef from '@components/APIRef.astro'; + The `veml7700` sensor platform allows you to use the Vishay VEML7700 and VEML6030 ambient light sensors with ESPHome. Communication with the device is over [I²C](/components/i2c), which must be present in your configuration. VEML7700 and VEML6030 are basically the same but in different packages. The VEML7700 uses a fixed address of `0x10`, while the smaller VEML6030 @@ -15,9 +18,19 @@ can be configured to use either `0x10` or `0x48`. The VEML 7700/6030 devices are available on breakout boards from a number of vendors including [Adafruit](http://www.adafruit.com/products/4162), [SparkFun](https://www.sparkfun.com/products/15436), [DFRobot](https://www.dfrobot.com/product-1620.html), and others. -{{< img src="veml7700-full.jpg" alt="Image" caption="VEML7700 Ambient Light Sensor on a board and standalone sensors." width="70.0%" class="align-center" >}} +
    -{{< img src="veml7700-ui.png" alt="Image" caption="VEML sensor in Home Assistant UI." width="60.0%" class="align-center" >}} +
    The sensor is a high accuracy ambient light digital 16-bit resolution sensor with dynamic range from 0 lux to about 120,000 lux. Its wide range of measurements is enabled by four configurable _gain_ levels and six different _integration time_ options. @@ -26,7 +39,12 @@ Higher gain values are typically used for lower light conditions. The sensor has two photodiodes with different spectral response represented by two channels: an _ALS_ channel and a _WHITE_ channel. The _ALS_, or _Ambient light_ channel follows a so-called human eye curve very closely. The _WHITE_ channel covers a much wider wavelength/spectrum, capturing quite a lot of near-infrared radiance. -{{< img src="veml7700-spectral.png" alt="Image" caption="ALS and WHITE channels spectral response" width="100.0%" class="align-center" >}} +
    Using this component's automatic measurement mode is advised; in this mode, proper _gain_ and _integration time_ are automatically selected by the component after taking several measurements. To do so, it follows a process recommended by the manufacturer. @@ -58,20 +76,16 @@ Starting values can be overridden by setting `gain` and `integration_time` param Lux compensation is done as recommended by the manufacturer, however it can be turned off by setting `lux_compensation: false` in your device's configuration. -{{< math >}} -\displaystyle \begin{array}{l} -lux & = & counts \times resolution(time, gain)\\ -lux_{comp} & =& 6.0135e \times 10^{-13} \times lux^4 - 9.3924e \times 10^{-9} \times lux^3\\ -& & + 8.1488e \times 10^{-5} \times lux^2 + 1.0023 \times lux\\ -\\ -\text{Where:} & & \\ -counts & - & \text{sensor readings, counts}\\ -resolution & - & \text{sensor resolution for given integration time and gain, lx/counts}\\ -lux & - & \text{calculated illumination, lx}\\ -lux_{comp} & - & \text{compensated illumniation, lx}\\ -\end{array} - -{{< /math >}} +``` +lux = counts × resolution(time, gain) +lux_comp = 6.0135e-13 × lux⁴ - 9.3924e-9 × lux³ + 8.1488e-5 × lux² + 1.0023 × lux +``` + +Where: +- `counts` - sensor readings, counts +- `resolution` - sensor resolution for given integration time and gain, lx/counts +- `lux` - calculated illumination, lx +- `lux_comp` - compensated illumination, lx ## Available data @@ -153,4 +167,4 @@ However, if you don't need any other options, you can just use shorthands like t - [VEML 6030 datasheet](https://github.com/latonita/datasheets-storage/blob/main/sensors/VEML6030.pdf) - Application note [Designing the VEML6030 Into an Application](https://github.com/latonita/datasheets-storage/blob/main/sensors/VEML6030-designing.pdf) - [Radiometric vs. Photometric Units](https://www.thorlabs.de/catalogPages/506.pdf) -- {{< apiref "veml7700/veml7700.h" "veml7700/veml7700.h" >}} +- diff --git a/content/components/sensor/vl53l0x.md b/src/content/docs/components/sensor/vl53l0x.mdx similarity index 87% rename from content/components/sensor/vl53l0x.md rename to src/content/docs/components/sensor/vl53l0x.mdx index fc6e72f77c..e9e5b33933 100644 --- a/content/components/sensor/vl53l0x.md +++ b/src/content/docs/components/sensor/vl53l0x.mdx @@ -1,12 +1,15 @@ --- description: "Instructions for setting up VL53L0X distance sensors in ESPHome." title: "VL53L0X Time Of Flight Distance Sensor" -params: - seo: - description: Instructions for setting up VL53L0X distance sensors in ESPHome. - image: vl53l0x.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import vl53l0xImg from './images/vl53l0x.png'; +import vl53l0xFullImg from './images/vl53l0x-full.jpg'; +import vl53l0xUiImg from './images/vl53l0x-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `vl53l0x` sensor platform allows you to use VL53L0X optical time of flight ([datasheet](https://www.st.com/resource/en/datasheet/vl53l0x.pdf), [ST](https://www.st.com/en/imaging-and-photonics-solutions/vl53l0x.html)) with ESPHome @@ -18,7 +21,7 @@ on several conditions like surface reflectance, field of view, temperature etc. you can expect surfaces up to 60cm to work, after that you need to make sure the surface is reflecting well enough (see also section 5 of datasheet). -{{< img src="vl53l0x.png" alt="Image" width="100.0%" class="align-center" >}} + The [I²C Bus](/components/i2c) is required to be set up in your configuration for this sensor to work. @@ -31,9 +34,14 @@ The [I²C Bus](/components/i2c) is required to be set up in your configuration f VL53L0X sensor on the I²C bus and the default `0x29` address is used. Depending on your sensor, this might be required even with only one sensor on the I²C bus. This is always required for multiple sensors. -{{< img src="vl53l0x-full.jpg" alt="Image" caption="VL53L0X Time Of Flight Distance Sensor." width="50.0%" class="align-center" >}} +
    -{{< img src="vl53l0x-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Simple configuration entry example @@ -100,5 +108,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "vl53l0x/vl53l0x_sensor.h" "vl53l0x/vl53l0x_sensor.h" >}} - [vl53l0x-arduino library](https://github.com/pololu/vl53l0x-arduino/) by [Pololu](https://github.com/pololu) +- diff --git a/content/components/sensor/wifi_signal.md b/src/content/docs/components/sensor/wifi_signal.mdx similarity index 78% rename from content/components/sensor/wifi_signal.md rename to src/content/docs/components/sensor/wifi_signal.mdx index a190f77997..b2d6383649 100644 --- a/content/components/sensor/wifi_signal.md +++ b/src/content/docs/components/sensor/wifi_signal.mdx @@ -1,19 +1,19 @@ --- description: "Instructions for setting up WiFi signal sensors that track the RSSI connection strength value to the network." title: "WiFi Signal Sensor" -params: - seo: - description: Instructions for setting up WiFi signal sensors that track the RSSI connection strength value to the network. - image: network-wifi.svg --- +import { Image } from 'astro:assets'; +import wifiSignalUiImg from './images/wifi_signal-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `wifi_signal` sensor platform allows you to read the signal -strength of the currently connected {{< docref "/components/wifi" "WiFi Access Point" >}}. +strength of the currently connected [WiFi Access Point](/components/wifi/). The sensor value is the ["Received signal strength indication"](https://en.wikipedia.org/wiki/Received_signal_strength_indication) measured in decibel-milliwatts (dBm). These values are always negative and the closer they are to zero, the better the signal is. -{{< img src="wifi_signal-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -58,6 +58,6 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "/components/wifi" >}} -- {{< docref "/components/text_sensor/wifi_info" >}} -- {{< apiref "wifi_signal/wifi_signal_sensor.h" "wifi_signal/wifi_signal_sensor.h" >}} +- [WiFi Component](/components/wifi/) +- [WiFi Info Text Sensor](/components/text_sensor/wifi_info/) +- diff --git a/content/components/sensor/wts01.md b/src/content/docs/components/sensor/wts01.mdx similarity index 73% rename from content/components/sensor/wts01.md rename to src/content/docs/components/sensor/wts01.mdx index fdd8f6dd29..63ad745dce 100644 --- a/content/components/sensor/wts01.md +++ b/src/content/docs/components/sensor/wts01.mdx @@ -1,22 +1,20 @@ --- description: "Instructions for setting up WTS01 temperature sensors in ESPHome." title: "WTS01 Temperature Sensor" -params: - seo: - description: Instructions for setting up WTS01 temperature sensors in ESPHome. - image: wts01.png --- - +import { Image } from 'astro:assets'; +import wts01FullImg from './images/wts01-full.png'; +import APIRef from '@components/APIRef.astro'; The `wts01` platform allows you to use WTS01 temperature sensors with ESPHome. This is the sensor used in Sonoff TH Origin (THR316, THR320) and TH Elite (THR316D, THR320D) devices. For this component to work you need to have set up a UART bus in your configuration - only the RX pin should be necessary. -The sensor communicates with the microcontroller via {{< docref "/components/uart" "UART" >}}. +The sensor communicates with the microcontroller via [UART](/components/uart/). -{{< img src="wts01-full.png" alt="Image" width="80.0%" class="align-center" >}} + ## Basic configuration @@ -44,5 +42,5 @@ sensor: ## See Also - [Sensor Filters](/components/sensor/#sensor-filters) -- {{< docref "/components/uart" >}} -- {{< apiref "wts01/wts01.h" "wts01/wts01.h" >}} +- [UART Bus](/components/uart/) +- diff --git a/content/components/sensor/xgzp68xx.md b/src/content/docs/components/sensor/xgzp68xx.mdx similarity index 87% rename from content/components/sensor/xgzp68xx.md rename to src/content/docs/components/sensor/xgzp68xx.mdx index 29085fc47b..280a4de21f 100644 --- a/content/components/sensor/xgzp68xx.md +++ b/src/content/docs/components/sensor/xgzp68xx.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up the CFSensor XGZP68xx Non-C Series Differential Pressure sensor." title: "CFSensor XGZP68xx Non-C Series Differential Pressure Sensor" -params: - seo: - description: Instructions for setting up the CFSensor XGZP68xx Non-C Series Differential Pressure sensor. - image: 6897d.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + CFSensor makes multiple generations of sensors with identical model numbers such as the 6899D or 6897D, but unfortunately with completely different I²C interfaces. You can identify which from the part number: @@ -22,9 +22,16 @@ Another way of telling the difference is the I²C address: Unfortunately CFSensor have removed from their website the datasheets for the non-C series of sensors. You will need to specifically find the older datasheet from another source. **The v3.1 or later datasheets from CFSensor describe the C series which is a completely -different device even though it has an identical model number to the <= v3.0 device**. +different device even though it has an identical model number to the ≤ v3.0 device**. -{{< img src="6897d.jpg" alt="Image" caption="XGZP6897D Differential Pressure Sensor. (Credit: [CFSensor](https://cfsensor.net/i2c-differential-pressure-sensor-xgzp6897d/), image cropped and compressed)" width="30.0%" class="align-center" >}} +
    To use the sensor, set up an [I²C Bus](/components/i2c) and connect the sensor to the specified pins. @@ -77,4 +84,4 @@ determined would be wise. - [esphome-pressure device](https://github.com/gcormier/esphome-pressure/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "xgzp6xx/xgzp6xx.h" "xgzp6xx/xgzp6xx.h" >}} +- diff --git a/content/components/sensor/xiaomi_ble.md b/src/content/docs/components/sensor/xiaomi_ble.mdx similarity index 84% rename from content/components/sensor/xiaomi_ble.md rename to src/content/docs/components/sensor/xiaomi_ble.mdx index 44af8fe1e3..900575b566 100644 --- a/content/components/sensor/xiaomi_ble.md +++ b/src/content/docs/components/sensor/xiaomi_ble.mdx @@ -1,16 +1,29 @@ --- description: "Instructions for setting up Xiaomi Mi Home (Mijia) bluetooth-based sensors in ESPHome." title: "Xiaomi Mijia BLE Sensors" -params: - seo: - description: Instructions for setting up Xiaomi Mi Home (Mijia) bluetooth-based sensors in ESPHome. - image: xiaomi_mijia_logo.jpg --- -The `xiaomi_ble` sensor platform lets you track the output of Xiaomi Bluetooth Low Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. This component will track, for example, the temperature, humidity, moisture, conductivity, illuminance, formaldehyde, mosquito tablet and battery level of the device every time the sensor sends out a BLE broadcast. Contrary to other implementations, `xiaomi_ble` listens passively to advertisement packets and does not pair with the device. Hence ESPHome has no impact on battery life. Thus, if you only use such sensors, you can safely set `scan_parameters.active: false` in `esp32_ble_tracker` configuration, to save from spamming your RF environment with useless scan requests. +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import xiaomiGcls002Img from './images/xiaomi_gcls002.jpg'; +import xiaomiHhccpot002Img from './images/xiaomi_hhccpot002.jpg'; +import xiaomiXmwsdj04mmcImg from './images/xiaomi_xmwsdj04mmc.png'; +import xiaomiMhoc303Img from './images/xiaomi_mhoc303.jpg'; +import xiaomiMhoc401Img from './images/xiaomi_mhoc401.jpg'; +import xiaomiCgd1Img from './images/xiaomi_cgd1.jpg'; +import xiaomiCgdk2Img from './images/xiaomi_cgdk2.jpg'; +import xiaomiJqjcy01ymImg from './images/xiaomi_jqjcy01ym.jpg'; +import xiaomiWx08zmImg from './images/xiaomi_wx08zm.jpg'; +import xiaomiMue4094rtImg from './images/xiaomi_mue4094rt.jpg'; +import xiaomiMjyd02ylaImg from './images/xiaomi_mjyd02yla.jpg'; +import xiaomiCgpr1Img from './images/xiaomi_cgpr1.png'; +import telinkFlasherImg from './images/telink_flasher.jpg'; +import APIRef from '@components/APIRef.astro'; + +The `xiaomi_ble` sensor platform lets you track the output of Xiaomi Bluetooth Low Energy devices using the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track, for example, the temperature, humidity, moisture, conductivity, illuminance, formaldehyde, mosquito tablet and battery level of the device every time the sensor sends out a BLE broadcast. Contrary to other implementations, `xiaomi_ble` listens passively to advertisement packets and does not pair with the device. Hence ESPHome has no impact on battery life. Thus, if you only use such sensors, you can safely set `scan_parameters.active: false` in `esp32_ble_tracker` configuration, to save from spamming your RF environment with useless scan requests. > [!NOTE] -> You may alternatively use ESPHome's {{< docref "/components/bluetooth_proxy" >}} component to forward sensor data to Home Assistant and have Mija devices configured using its own Mija BLE component. This should work for the devices flashed with [PVVX MiThermometer](https://github.com/pvvx/ATC_MiThermometer) custom firmware, as well as the regular, stock firmware. +> You may alternatively use ESPHome's [Bluetooth Proxy](/components/bluetooth_proxy/) component to forward sensor data to Home Assistant and have Mija devices configured using its own Mija BLE component. This should work for the devices flashed with [PVVX MiThermometer](https://github.com/pvvx/ATC_MiThermometer) custom firmware, as well as the regular, stock firmware. ## Supported Devices @@ -18,7 +31,7 @@ The `xiaomi_ble` sensor platform lets you track the output of Xiaomi Bluetooth L MiFlora, Huahuacaocao, measures temperature, moisture, ambient light and nutrient levels in the soil. -{{< img src="xiaomi_hhccjcy01.jpg" alt="Image" width="60.0%" class="align-center" >}} + Configuration example: @@ -46,7 +59,7 @@ sensor: VegTrug Grow Care Garden, Takasho, suitable for outside, similar to the MiFlora. -{{< img src="xiaomi_gcls002.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -68,7 +81,7 @@ sensor: FlowerPot, Huahuacaocao, RoPot, broadcasts moisture and conductivity -{{< img src="xiaomi_hhccpot002.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -86,7 +99,7 @@ sensor: Hygro thermometer, round body, segment LCD, broadcasts temperature, humidity and battery level. This device is also known as MJ_HT_V1. In HA's native Xiaomi BLE integration, the device info page shows it as "MJ_HT_V1 (LYWSDCGQ by Xiaomi)". -{{< img src="xiaomi_lywsdcgq.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -106,7 +119,7 @@ sensor: Hygro thermometer, rectangular body, e-ink display, broadcasts temperature, humidity and battery level. -{{< img src="xiaomi_lywsd02.jpg" alt="Image" width="30.0%" class="align-center" >}} + - Battery Level, needs xiaomi firmware 1.1.2_0085 @@ -149,7 +162,7 @@ Cleargrass (Qingping): hygro thermometer, round body, e-ink display. New firmware requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)), and stopped broadcasting battery level. -{{< img src="xiaomi_cgg1.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -176,7 +189,7 @@ sensor: Hygro thermometer, small square body, segment LCD, encrypted, broadcasts temperature, humidity and battery status. -{{< img src="xiaomi_lywsd03mmc.jpg" alt="Image" width="30.0%" class="align-center" >}} + There are several ways to operate this sensor: @@ -269,7 +282,7 @@ sensor: Hygro thermometer, small square body, e-ink display, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). -{{< img src="xiaomi_xmwsdj04mmc.png" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -290,7 +303,7 @@ sensor: Hygro thermometer clock with alarm, rectangular body, e-ink display, broadcasts temperature, humidity and battery status. Not encrypted. -{{< img src="xiaomi_mhoc303.jpg" alt="Image" width="30.0%" class="align-center" >}} + Similar to the LYWSD02, with additional clock features (alarm, pomodoro timer). Runs on two AAA batteries. @@ -312,7 +325,7 @@ sensor: Hygro thermometer, square body, e-ink display, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). -{{< img src="xiaomi_mhoc401.jpg" alt="Image" width="30.0%" class="align-center" >}} + ( MHO-C201 doesn't have BT ) @@ -359,7 +372,7 @@ sensor: Cleargrass (Qingping) alarm clock, segment LCD, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). -{{< img src="xiaomi_cgd1.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -381,7 +394,7 @@ sensor: Cleargrass (Qingping) Temp & RH Lite, round body, segment LCD, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). The measurements are broadcast every 10-15 minutes. -{{< img src="xiaomi_cgdk2.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -402,7 +415,7 @@ sensor: Xiaomi (Honeywell) formaldehyde sensor, OLED display, broadcasts temperature, humidity, formaldehyde concentration (mg/m³) and battery status. -{{< img src="xiaomi_jqjcy01ym.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -424,7 +437,7 @@ sensor: Mosquito Repellent Smart Version, broadcasts the tablet resource level, on/off state and battery level, implemented as a hybrid sensor, needs both `sensor` and `binary_sensor` in config. -{{< img src="xiaomi_wx08zm.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -444,7 +457,7 @@ binary_sensor: Xiaomi Philips BLE night light, broadcasts motion detection (detected/clear, on/off), default timeout is 5s, implemented as a hybrid sensor, needs both `sensor` and `binary_sensor` in config. -{{< img src="xiaomi_mue4094rt.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -462,7 +475,7 @@ binary_sensor: Xiaomi Yeelight night light, in-shape replacement of MJYD02YL with BLE, broadcasts light on/off status, motion detection, idle time since last motion event and battery status. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). Implemented as a hybrid sensor, needs both `sensor` and `binary_sensor` in config. -{{< img src="xiaomi_mjyd02yla.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -488,7 +501,7 @@ binary_sensor: Qingping motion & ambient light sensor. Broadcasts motion detection, idle time since last motion event, lux value and battery status. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). -{{< img src="xiaomi_cgpr1.png" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -511,7 +524,7 @@ binary_sensor: Motion & ambient light sensor. Broadcasts motion detection, light/dark and battery status. Also has a button that broadcasts when pressed. Requires a bindkey in order to decrypt the received data (see [Obtaining the Bindkey](#obtaining_the_bindkey)). -{{< img src="xiaomi_rtcgq02lm.jpg" alt="Image" width="30.0%" class="align-center" >}} + Configuration example: @@ -556,7 +569,7 @@ All options from [Sensor](/components/sensor) are supported for: - **formaldehyde** - **battery_level** -{{< anchor "obtaining_the_mac_address" >}} + ## Obtaining the MAC address @@ -578,7 +591,7 @@ Found device XX:XX:XX:XX:XX:XX RSSI=-78 It can sometimes take some time for the first BLE broadcast to be received. Once the device has been found, copy the address `XX:XX:XX:XX:XX:XX` into a new platform entry like shown in the example configurations. -{{< anchor "obtaining_the_bindkey" >}} + ## Obtaining the Bindkey @@ -624,7 +637,12 @@ To set up an encrypted device you need to obtain the `bindkey`. The `xiaomi_ble` and connect the device by pressing "Connect". After the connection is established, you press the "Do Activation" button and the new key will be shown in the "Mi Bind Key" field. The key can be copied directly into the sensor YAML configuration. -{{< img src="telink_flasher.jpg" alt="Image" caption="Telink flasher application." width="100.0%" class="align-center" >}} +
    - For CGDK2 can also load Zaluthar's [application](https://zaluthar.github.io/TelinkFlasher.html) with a [supported browser](https://github.com/WebBluetoothCG/web-bluetooth/blob/master/implementation-status.md) and connect the device by pressing "Connect". After the connection is established, you press the "Do Activation" button and the new key will be shown in the "Mi Bind Key" @@ -642,12 +660,11 @@ You should at least protect your sensors with a custom pairing PIN code. Choose ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} -- {{< docref "/components/display/pvvx_mithermometer" >}} -- {{< apiref "xiaomi_lywsd03mmc/xiaomi_ble.h" "xiaomi_lywsd03mmc/xiaomi_ble.h" >}} -- {{< docref "/components/ethernet" >}} -- {{< docref "/components/bluetooth_proxy" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) +- [PVVX MiThermometer Display](/components/display/pvvx_mithermometer/) +- [Ethernet Component](/components/ethernet/) +- [Bluetooth Proxy](/components/bluetooth_proxy/) - [Passive BLE monitor integration for Home Assistant (ble_monitor custom component)](https://github.com/custom-components/ble_monitor) by [@Magalex2x14](https://github.com/Magalex2x14) and [@Ernst79](https://github.com/Ernst79) @@ -658,3 +675,4 @@ You should at least protect your sensors with a custom pairing PIN code. Choose - [TeLink flasher application modified for CGDK2](https://zaluthar.github.io/TelinkFlasher.html) - [Xiaomi LYWSD03MMC passive sensor readout](https://github.com/ahpohl/xiaomi_lywsd03mmc) by [@ahpohl](https://github.com/ahpohl) - [Cloud Tokens Extractor](https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor) +- diff --git a/content/components/sensor/xiaomi_hhccjcy01.md b/src/content/docs/components/sensor/xiaomi_hhccjcy01.mdx similarity index 100% rename from content/components/sensor/xiaomi_hhccjcy01.md rename to src/content/docs/components/sensor/xiaomi_hhccjcy01.mdx diff --git a/content/components/sensor/xiaomi_hhccjcy10.md b/src/content/docs/components/sensor/xiaomi_hhccjcy10.mdx similarity index 83% rename from content/components/sensor/xiaomi_hhccjcy10.md rename to src/content/docs/components/sensor/xiaomi_hhccjcy10.mdx index 8297e183e4..40ee6699c8 100644 --- a/content/components/sensor/xiaomi_hhccjcy10.md +++ b/src/content/docs/components/sensor/xiaomi_hhccjcy10.mdx @@ -1,15 +1,13 @@ --- description: "Instructions for setting up a Xiaomi MiFlora HHCCJCY10 (Pink) using ESPHome." title: "HHCCJCY10 Xiaomi MiFlora (Pink version)" -params: - seo: - description: Instructions for setting up a Xiaomi MiFlora HHCCJCY10 (Pink) using ESPHome. - image: xiaomi_hhccjcy10.jpg --- +import { Image } from 'astro:assets'; + MiFlora, tuya (pink) version, measures temperature, moisture, ambient light and nutrient levels in the soil. -{{< img src="xiaomi_hhccjcy10.jpg" alt="Image" width="60.0%" class="align-center" >}} + ```yaml sensor: @@ -47,4 +45,4 @@ sensor: ## See Also -- {{< docref "ble_client/" >}} +- [BLE Client Sensor](/components/sensor/ble_client/) diff --git a/content/components/sensor/xiaomi_lywsdcgq.md b/src/content/docs/components/sensor/xiaomi_lywsdcgq.mdx similarity index 100% rename from content/components/sensor/xiaomi_lywsdcgq.md rename to src/content/docs/components/sensor/xiaomi_lywsdcgq.mdx diff --git a/content/components/sensor/xiaomi_miscale.md b/src/content/docs/components/sensor/xiaomi_miscale.mdx similarity index 83% rename from content/components/sensor/xiaomi_miscale.md rename to src/content/docs/components/sensor/xiaomi_miscale.mdx index c8ff9f6a04..c527f55f5d 100644 --- a/content/components/sensor/xiaomi_miscale.md +++ b/src/content/docs/components/sensor/xiaomi_miscale.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up Xiaomi Miscale bluetooth-based sensors in ESPHome." title: "Xiaomi Miscale Sensors" -params: - seo: - description: Instructions for setting up Xiaomi Miscale bluetooth-based sensors in ESPHome. - image: xiaomi_miscale.jpg --- -The `xiaomi_miscale` sensor platform lets you track the output of Xiaomi Bluetooth Low Energy devices using the {{< docref "/components/esp32_ble_tracker" >}}. This component will track, for example, the weight of the device every time the sensor sends out a BLE broadcast. Contrary to other implementations, `xiaomi_miscale` listens passively to advertisement packets and does not pair with the device. Hence ESPHome has no impact on battery life. +import { Image } from 'astro:assets'; + +The `xiaomi_miscale` sensor platform lets you track the output of Xiaomi Bluetooth Low Energy devices using the [Esp32 Ble Tracker](/components/esp32_ble_tracker/). This component will track, for example, the weight of the device every time the sensor sends out a BLE broadcast. Contrary to other implementations, `xiaomi_miscale` listens passively to advertisement packets and does not pair with the device. Hence ESPHome has no impact on battery life. To get the body scores using your weight, height, age and gender see the [custom_components](https://github.com/dckiller51/bodymiscale) @@ -17,7 +15,7 @@ To get the body scores using your weight, height, age and gender see the [custom Miscale (left) measures weight only. Miscale2 (right) measures weight and impedance. -{{< img src="xiaomi_miscale.jpg" alt="Image" width="60.0%" class="align-center" >}} + ```yaml sensor: @@ -102,7 +100,7 @@ sensor: ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/sensor" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Sensor Component](/components/sensor/) - [bodymiscale score integration for Home Assistant (bodymiscale custom component)](https://github.com/dckiller51/bodymiscale) - [bodymiscale Lovelace Card](https://github.com/dckiller51/lovelace-body-miscale-card) diff --git a/content/components/sensor/xiaomi_miscale2.md b/src/content/docs/components/sensor/xiaomi_miscale2.mdx similarity index 69% rename from content/components/sensor/xiaomi_miscale2.md rename to src/content/docs/components/sensor/xiaomi_miscale2.mdx index 2e6fa96a32..5b4758c722 100644 --- a/content/components/sensor/xiaomi_miscale2.md +++ b/src/content/docs/components/sensor/xiaomi_miscale2.mdx @@ -3,4 +3,4 @@ description: "Xiaomi Miscale2 combined into Xiaomi Miscale" title: "Xiaomi Miscale2 combined into Xiaomi Miscale" --- -{{< docref "/components/sensor/xiaomi_miscale" >}} +[Xiaomi Miscale](/components/sensor/xiaomi_miscale/) diff --git a/content/components/sensor/zio_ultrasonic.md b/src/content/docs/components/sensor/zio_ultrasonic.mdx similarity index 62% rename from content/components/sensor/zio_ultrasonic.md rename to src/content/docs/components/sensor/zio_ultrasonic.mdx index fbd8db5b2d..cdba733b0e 100644 --- a/content/components/sensor/zio_ultrasonic.md +++ b/src/content/docs/components/sensor/zio_ultrasonic.mdx @@ -1,20 +1,26 @@ --- description: "Instructions for setting up the Zio Ultrasonic Distance sensor." title: "Zio Ultrasonic Distance Sensor" -params: - seo: - description: Instructions for setting up the Zio Ultrasonic Distance sensor. - image: zio_ultrasonic.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The Zio Ultrasonic Distance sensor allows you to use your compatible ([datasheet](https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf), [sparkfun](https://www.sparkfun.com/products/17777)) sensors with ESPHome. -{{< img src="zio_ultrasonic.jpg" alt="Image" caption="Zio Ultrasonic Distance Sensor. (Credit: [Sparkfun](https://www.sparkfun.com/products/17777), image cropped and compressed)" width="30.0%" class="align-center" >}} +
    -The Zio Ultrasonic Distance Sensor is an ultrasonic distance sensor based on the HC-SR04 sensor. Unlike the {{< docref "/components/sensor/ultrasonic" "Ultrasonic Distance Sensor component" >}}, measurements are read over the I²C bus. +The Zio Ultrasonic Distance Sensor is an ultrasonic distance sensor based on the HC-SR04 sensor. Unlike the [Ultrasonic Distance Sensor component](/components/sensor/ultrasonic/), measurements are read over the I²C bus. To use the sensor, first set up an [I²C Bus](/components/i2c) and connect the sensor to the specified pins. @@ -34,6 +40,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/ultrasonic" "Ultrasonic Sensor Component" >}} +- [Ultrasonic Sensor Component](/components/sensor/ultrasonic/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "template/" >}} +- [Template Sensor](/components/sensor/template/) diff --git a/content/components/sensor/zyaura.md b/src/content/docs/components/sensor/zyaura.mdx similarity index 72% rename from content/components/sensor/zyaura.md rename to src/content/docs/components/sensor/zyaura.mdx index 0b97fb4fe9..9a1d4d29ff 100644 --- a/content/components/sensor/zyaura.md +++ b/src/content/docs/components/sensor/zyaura.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up ZyAura co2, temperature and humidity monitors." title: "ZyAura CO2 & Temperature & Humidity Sensor" -params: - seo: - description: Instructions for setting up ZyAura co2, temperature and humidity monitors. - image: zgm053.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import zgm053FullImg from './images/zgm053-full.jpg'; +import zgm053ConnectionImg from './images/zgm053-connection.jpg'; +import APIRef from '@components/APIRef.astro'; + The ZyAura CO2 & Temperature & Humidity sensor allows you to use your [ZGm05(3)(U)](http://www.zyaura.com/products/ZGm05.asp) [MT8057](https://masterkit.ru/shop/1266110), @@ -14,9 +16,19 @@ The ZyAura CO2 & Temperature & Humidity sensor allows you to use your [ZG1583RUD](http://www.zyaura.com/products/ZG1583RUD.asp) monitors with ESPHome. -{{< img src="zgm053-full.jpg" alt="Image" caption="ZyAura ZGm053U CO2 & Temperature Monitor." width="80.0%" class="align-center" >}} +
    -{{< img src="zgm053-connection.jpg" alt="Image" caption="ZyAura ZGm053U connection diagram (1 - empty, 2 - clock, 3 - data, 4 - GND). In some other models the clock and data pins are swapped." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -59,9 +71,9 @@ sensor: ## See Also - [Sensor Filters](/components/sensor#sensor-filters) -- {{< docref "absolute_humidity/" >}} -- {{< docref "mhz19/" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [MH-Z19 CO_2 and Temperature Sensor](/components/sensor/mhz19/) - [CO2mon-esp firmware](https://github.com/Anonym-tsk/co2mon-esp) by [@anonym-tsk](https://github.com/Anonym-tsk) - [Some information about hacking MT8060](https://habr.com/ru/company/dadget/blog/394333/) - [CO2MeterHacking project](https://revspace.nl/CO2MeterHacking) -- {{< apiref "zyaura/zyaura.h" "zyaura/zyaura.h" >}} +- diff --git a/content/components/servo.md b/src/content/docs/components/servo.mdx similarity index 92% rename from content/components/servo.md rename to src/content/docs/components/servo.mdx index a8bf7f16c3..93b4b386bc 100644 --- a/content/components/servo.md +++ b/src/content/docs/components/servo.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up servos in ESPHome" title: "Servo Component" -params: - seo: - description: Instructions for setting up servos in ESPHome - image: servo.svg --- +import APIRef from '@components/APIRef.astro'; + The `servo` component allows you to use servo motors with ESPHome. Servos are motor controllers that contain all the electronics necessary for driving the motor and provide @@ -14,7 +12,7 @@ a simple PWM interface to control the motor. This component works with both continuous-rotation and absolute servos and has a similar interface to the Arduino Servo library. -First, create an [output component](/components/output#output) (here `esp8266_pwm` ) for the pin the +First, create an [output component](/components/output/) (here `esp8266_pwm` ) for the pin the servo is connected to. Then connect that output to the servo component by assigning an ID. Please note the frequency of the output should be around 50Hz, as most servo controllers only operate in this frequency range. @@ -40,7 +38,7 @@ output: ## Configuration variables -- **output** (**Required**, [ID](/guides/configuration-types#id)): The ID of the {{< docref "/components/output/index" "output component" >}} +- **output** (**Required**, [ID](/guides/configuration-types#id)): The ID of the [output component](/components/output/) to use for this servo. - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of this servo so that it can be controlled. @@ -70,7 +68,7 @@ Advanced Options: > You can configure the `min_level` and `max_level` options to adjust the level range > to match your servo (Experiment with these values). -{{< anchor "servo-write_action" >}} + ## `servo.write` Action @@ -118,7 +116,7 @@ Configuration options: > id(my_servo).write(1.0); > ``` -{{< anchor "servo-detach_action" >}} + ## `servo.detach` Action @@ -138,7 +136,7 @@ on_...: > id(my_servo).detach(); > ``` -{{< anchor "servo-ha-config" >}} + ## Home Assistant Configuration @@ -168,4 +166,4 @@ servo: ## See Also -- {{< apiref "servo/servo.h" "servo/servo.h" >}} +- diff --git a/content/components/sim800l.md b/src/content/docs/components/sim800l.mdx similarity index 92% rename from content/components/sim800l.md rename to src/content/docs/components/sim800l.mdx index 46ed48bd6b..59e3c5a84a 100644 --- a/content/components/sim800l.md +++ b/src/content/docs/components/sim800l.mdx @@ -1,22 +1,22 @@ --- description: "Instructions for setting up the SIM800L GSM module to dial, send and receive SMS in ESPHome." title: "Sim800L Component" -params: - seo: - description: Instructions for setting up the SIM800L GSM module to dial, send and receive SMS in ESPHome. - image: sim800l.jpg --- +import { Image } from 'astro:assets'; +import sim800lFullImg from './images/sim800l-full.jpg'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The `SIM800L` Component provides the ability to dial, answer calls, send/receive SMS text messages and -send/receive USSD codes. The device must be connected via a {{< docref "/components/uart" "UART bus" >}} +send/receive USSD codes. The device must be connected via a [UART bus](/components/uart/) supporting both receiving and transmitting line. The UART bus must be configured at the same speed of the module which is by default 9600bps. The required connection wires are `+VCC`, `GND`, `RX` and `TX`. > [!WARNING] -> If you are using the {{< docref "logger/" >}} make sure you are not using the same pins for `TX` and `RX` or +> If you are using the [Logger](/components/logger/) make sure you are not using the same pins for `TX` and `RX` or > otherwise disable the UART logging with the `baud_rate: 0` option. > [!NOTE] @@ -24,7 +24,7 @@ of the module which is by default 9600bps. The required connection wires are `+V > to 2 amps, it will not work by powering from the same 3.3V power source of the ESP. However you can > connect `TX` and `RX` lines directly without any level shifter. -{{< img src="sim800l-full.jpg" alt="Image" width="60.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -84,7 +84,7 @@ binary_sensor: ## Triggers -{{< anchor "sim800l-on_sms_received" >}} + ### `on_sms_received` Trigger @@ -100,7 +100,7 @@ on_sms_received: id(sms_message).publish_state(message); ``` -{{< anchor "sim800l-on_incoming_call" >}} + ### `on_incoming_call` Trigger @@ -134,7 +134,7 @@ on_ussd_received: ## Actions -{{< anchor "sim800l-send_sms_action" >}} + ### `sim800l.send_sms` Action @@ -164,7 +164,7 @@ on_...: - **message** (**Required**, string, [templatable](/automations/templates)): The message content. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the SIM800L if you have multiple components. -{{< anchor "sim800l-dial_action" >}} + ### `sim800l.dial` Action @@ -319,5 +319,5 @@ switch: ## See Also -- {{< apiref "sim800l/sim800l.h" "sim800l/sim800l.h" >}} -- {{< docref "/components/uart" >}} +- [UART Bus](/components/uart/) +- diff --git a/content/components/sml.md b/src/content/docs/components/sml.mdx similarity index 95% rename from content/components/sml.md rename to src/content/docs/components/sml.mdx index 6eee6f04ae..268d0d009d 100644 --- a/content/components/sml.md +++ b/src/content/docs/components/sml.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up SML sensors" title: "SML (Smart Message Language)" -params: - seo: - description: Instructions for setting up SML sensors - image: sml.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import smlLogImg from './images/sml-log.png'; +import APIRef from '@components/APIRef.astro'; + The `SML` component connects to smart meters which use the *Smart Message Language* (SML) protocol. Although the SML protocol is well defined, it gives a lot of freedom to the manufacturers how to store @@ -25,7 +26,7 @@ transistor (e.g. BPW40) can be attached to the ESP's UART (emitter to `GND` and mature solution can be found (in German) on the [Volkszaehler Wiki](https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-ttl-ausgang). There are plenty of other examples and ready to buy solutions on the web. -{{< anchor "sml-platform" >}} + ## Component/Hub @@ -107,7 +108,7 @@ text_sensor: - **on_data** (*Optional*, [Automation](/automations)): An automation to perform when a SML message is received. See [`on_data` Trigger](#sml-on-data). -{{< anchor "sml-on-data" >}} + ### `on_data` Trigger @@ -127,7 +128,12 @@ must be set to at least `debug` !). Your log output will show something like this: -{{< img src="sml-log.png" alt="Image" caption="OBIS information in the log of the `SML` component" width="100.0%" class="align-center" >}} +
    Each line represents a combination of the server id (in brackets), the OBIS code and the transmitted hex value (in square brackets). @@ -215,4 +221,4 @@ sensor: ## See Also -- {{< apiref "sml/sml.h" "sml/sml.h" >}} +- diff --git a/content/components/sn74hc165.md b/src/content/docs/components/sn74hc165.mdx similarity index 90% rename from content/components/sn74hc165.md rename to src/content/docs/components/sn74hc165.mdx index de24dc8d36..9675a2db9f 100644 --- a/content/components/sn74hc165.md +++ b/src/content/docs/components/sn74hc165.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up SN74HC165 shift registers as digital port expanders in ESPHome." title: "SN74HC165 I/O Expander (shift register)" -params: - seo: - description: Instructions for setting up SN74HC165 shift registers as digital port expanders in ESPHome. --- +import APIRef from '@components/APIRef.astro'; + The SN74HC165 component allows you to use SN74HC165 shift registers as I/O expanders (Input only, use SN74HC595 for outputs) ([datasheet](https://www.ti.com/lit/ds/symlink/sn74hc165.pdf)) in ESPHome. It uses 3 wires (optionally 4) for communication. @@ -55,7 +54,7 @@ binary_sensor: > [!NOTE] > Pin number 0 is Pin A on the SN74HC165 that is furthest away from the microcontroller. -### See Also +## See Also -- {{< docref "binary_sensor/gpio" >}} -- {{< apiref "SN74HC165/SN74HC165.h" "SN74HC165/SN74HC165.h" >}} +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) +- diff --git a/content/components/sn74hc595.md b/src/content/docs/components/sn74hc595.mdx similarity index 88% rename from content/components/sn74hc595.md rename to src/content/docs/components/sn74hc595.mdx index a9a97a7cfe..55ce0362a3 100644 --- a/content/components/sn74hc595.md +++ b/src/content/docs/components/sn74hc595.mdx @@ -1,11 +1,13 @@ --- description: "Instructions for setting up SN74HC595 shift registers as digital port expanders in ESPHome." title: "SN74HC595 I/O Expander (shift register)" -params: - seo: - description: Instructions for setting up SN74HC595 shift registers as digital port expanders in ESPHome. --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sn74hc595FullImg from './images/sn74hc595-full.jpg'; +import APIRef from '@components/APIRef.astro'; + The SN74HC595 component allows you to use SN74HC595 shift registers as I/O expanders ([datasheet](http://www.ti.com/lit/ds/symlink/sn74hc595.pdf), [SparkFun](https://www.sparkfun.com/products/13699)) in ESPHome. It uses 3 wires (optionally 4) for communication. Optionally, it can be added @@ -16,7 +18,12 @@ to provide more pins, without using more GPIO pins on the controller. Use of the OE pin is optional. If used, the pin should be pulled up externally. -{{< img src="sn74hc595-full.jpg" alt="Image" caption="SN74HC595 I/O Expander (shift register)." width="80.0%" class="align-center" >}} +
    The component can be configured using [GPIO pins](/guides/configuration-types#pin-schema) or the [SPI Bus](/components/spi). @@ -94,7 +101,7 @@ switch: ## See Also -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [Serial to Parallel Shifting-Out with a 74HC595](https://www.arduino.cc/en/tutorial/ShiftOut) -- {{< apiref "sn74hc595/sn74hc595.h" "sn74hc595/sn74hc595.h" >}} +- diff --git a/content/components/speaker/i2s_audio.md b/src/content/docs/components/speaker/i2s_audio.mdx similarity index 94% rename from content/components/speaker/i2s_audio.md rename to src/content/docs/components/speaker/i2s_audio.mdx index 8ecfbeaeee..72e5382338 100644 --- a/content/components/speaker/i2s_audio.md +++ b/src/content/docs/components/speaker/i2s_audio.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for setting up I²S based speakers in ESPHome." title: "I²S Audio Speaker" -params: - seo: - description: Instructions for setting up I²S based speakers in ESPHome. - image: i2s_audio.svg --- -The `i2s_audio` speaker platform allows you to receive audio via the {{< docref "/components/i2s_audio" >}}. +The `i2s_audio` speaker platform allows you to receive audio via the [I2S Audio](/components/i2s_audio/). This platform only works on ESP32 based chips. @@ -78,6 +74,6 @@ For best results, keep the wires as short as possible. - `right` - `stereo` -## See also +## See Also -- {{< docref "index/" >}} +- [Speaker Component](/components/speaker/) diff --git a/content/components/speaker/_index.md b/src/content/docs/components/speaker/index.mdx similarity index 82% rename from content/components/speaker/_index.md rename to src/content/docs/components/speaker/index.mdx index 24de7d669d..960df08e83 100644 --- a/content/components/speaker/_index.md +++ b/src/content/docs/components/speaker/index.mdx @@ -1,16 +1,14 @@ --- description: "Instructions for setting up speakers in ESPHome." title: "Speaker Components" -params: - seo: - description: Instructions for setting up speakers in ESPHome. - image: speaker.svg +sidebar: + label: "Speaker Components" --- The `speaker` domain contains common functionality shared across the speaker platforms. -{{< anchor "config-speaker" >}} + ## Base Speaker Configuration @@ -21,16 +19,16 @@ speaker: Configuration variables: -- **audio_dac** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/audio_dac/index" "audio DAC" >}} to use for volume control. +- **audio_dac** (*Optional*, [ID](/guides/configuration-types#id)): The [audio DAC](/components/audio_dac/) to use for volume control. -{{< anchor "speaker-actions" >}} + ## Speaker Actions All `speaker` actions can be used without specifying an `id` if you have only one `speaker` in your configuration YAML. -{{< anchor "speaker-play" >}} + ### `speaker.play` Action @@ -41,7 +39,7 @@ on_...: # Static raw audio data - speaker.play: [...] - # Templated, return type is std::vector + # Templated, return type is `std::vector` - speaker.play: !lambda return {...}; # in case you need to specify the speaker id @@ -55,7 +53,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The speaker to control. Defaults to the only one in YAML. - **data** (**Required**, list of bytes): The raw audio data to play. -{{< anchor "speaker-stop" >}} + ### `speaker.stop` Action @@ -65,7 +63,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The speaker to control. Defaults to the only one in YAML. -{{< anchor "speaker-finish" >}} + ### `speaker.finish` Action @@ -75,7 +73,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The speaker to control. Defaults to the only one in YAML. -{{< anchor "speaker-mute_on" >}} + ### `speaker.mute_on` Action @@ -85,7 +83,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The speaker to control. Defaults to the only one in YAML. -{{< anchor "speaker-mute_off" >}} + ### `speaker.mute_off` Action @@ -95,7 +93,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The speaker to control. Defaults to the only one in YAML. -{{< anchor "speaker-volume_set" >}} + ### `speaker.volume_set` Action @@ -119,14 +117,14 @@ Configuration variables: **volume** (**Required**, percentage): The volume to set the speaker to. -{{< anchor "speaker-conditions" >}} + ## Speaker Conditions All `speaker` conditions can be used without specifying an `id` if you have only one `speaker` in your configuration YAML. -{{< anchor "speaker-is_playing" >}} + ### `speaker.is_playing` Condition @@ -136,7 +134,7 @@ Configuration variables: - **id** (*Optional*, [ID](/guides/configuration-types#id)): The speaker to check. Defaults to the only one in YAML. -{{< anchor "speaker-is_stopped" >}} + ### `speaker.is_stopped` Condition @@ -154,5 +152,5 @@ Configuration variables: ## See Also -- {{< docref "/guides/audio_clips_for_i2s" >}} -- {{< docref "/components/speaker/i2s_audio" >}} +- [Create audio clip files for use with I²S Speakers](/guides/audio_clips_for_i2s/) +- [I²S Audio Speaker](/components/speaker/i2s_audio/) diff --git a/content/components/speaker/mixer.md b/src/content/docs/components/speaker/mixer.mdx similarity index 83% rename from content/components/speaker/mixer.md rename to src/content/docs/components/speaker/mixer.mdx index 69ee9c08b8..1442d3b7a4 100644 --- a/content/components/speaker/mixer.md +++ b/src/content/docs/components/speaker/mixer.mdx @@ -1,15 +1,11 @@ --- description: "Instructions for setting up mixer speakers in ESPHome." title: "Mixer Speaker" -params: - seo: - description: Instructions for setting up mixer speakers in ESPHome. - image: mixer.svg --- -The `mixer` speaker platform allows you to mix audio sent to different source speakers into one output which is sent to another {{< docref "/components/speaker/index" "speaker component" >}}. Individual source speakers may be ducked (made quieter) with the [apply ducking action](#mixer_speaker-apply_ducking). +The `mixer` speaker platform allows you to mix audio sent to different source speakers into one output which is sent to another [speaker component](/components/speaker/). Individual source speakers may be ducked (made quieter) with the [apply ducking action](#mixer_speaker-apply_ducking). -When mixing multiple audio streams into one, they must have the same sample rate. If they are different, enable queue mode so that only one source speaker's audio is played at a time. Otherwise, use a {{< docref "/components/speaker/resampler" "resampler speaker" >}} to send audio to the source speakers. +When mixing multiple audio streams into one, they must have the same sample rate. If they are different, enable queue mode so that only one source speaker's audio is played at a time. Otherwise, use a [resampler speaker](/components/speaker/resampler/) to send audio to the source speakers. This platform only works on ESP32 based chips. @@ -32,7 +28,7 @@ speaker: ## Configuration variables -- **output_speaker** (**Required**, [ID](/guides/configuration-types#id)): The {{< docref "/components/speaker/index" "speaker" >}} to output the mixed audio. +- **output_speaker** (**Required**, [ID](/guides/configuration-types#id)): The [speaker](/components/speaker/) to output the mixed audio. - **source_speakers** (**Required**, list): A list of source speaker inputs. Must have at least 2 and at most 8 speakers. - **buffer_duration** (*Optional*, [Time](/guides/configuration-types#time)): The duration of the internal ring buffer. Larger values can reduce stuttering but use more memory. Defaults to `100ms`. @@ -45,7 +41,7 @@ speaker: ## Automations -{{< anchor "mixer_speaker-apply_ducking" >}} + ### `mixer_speaker.apply_ducking` Action @@ -64,6 +60,6 @@ Configuration variables: - **decibel_reduction** (**Required**, int, templatable): The reduction of the media stream in decibels. Must be between 0 and 50. - **duration** (*Optional*, [Time](/guides/configuration-types#time), templatable): The length of time to transition between the current reduction level and the new reduction level. Defaults to `0s`. -## See also +## See Also -- {{< docref "index/" >}} +- [Speaker Component](/components/speaker/) diff --git a/content/components/speaker/resampler.md b/src/content/docs/components/speaker/resampler.mdx similarity index 86% rename from content/components/speaker/resampler.md rename to src/content/docs/components/speaker/resampler.mdx index 29f44b18b9..f11320890b 100644 --- a/content/components/speaker/resampler.md +++ b/src/content/docs/components/speaker/resampler.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for setting up resampler speakers in ESPHome." title: "Resampler Speaker" -params: - seo: - description: Instructions for setting up resampler speakers in ESPHome. - image: waveform.svg --- -The `resampler` speaker platform allows you to convert the sample rate of an audio stream and output it to another {{< docref "/components/speaker/index" "speaker component" >}}. +The `resampler` speaker platform allows you to convert the sample rate of an audio stream and output it to another [speaker component](/components/speaker/). If the audio stream doesn't require resampling, it is automatically sent directly to the output speaker. @@ -30,7 +26,7 @@ speaker: ## Configuration variables -- **output_speaker** (**Required**, [ID](/guides/configuration-types#id)): The {{< docref "/components/speaker/index" "speaker" >}} to output the resampled audio. +- **output_speaker** (**Required**, [ID](/guides/configuration-types#id)): The [speaker](/components/speaker/) to output the resampled audio. - **buffer_duration** (*Optional*, [Time](/guides/configuration-types#time)): The duration of the internal ring buffer. Larger values may reduce stuttering but use more memory. Defaults to `500ms`. - **bits_per_sample** (*Optional*, positive integer): The audio sample bit depth after resampling. Defaults to the output speaker's bits per sample. - **sample_rate** (*Optional*, positive integer): Sample rate to convert to. Must be between `8000` and `48000`. Defaults to the output speaker's sample rate. @@ -43,7 +39,7 @@ speaker: Resampling is processor intensive and should be avoided as much as possible. The audio quality is effected by the number of filters and the number of taps. Increasing the number of filters will increase the memory load. Increasing the number of taps will increase the CPU load. -## See also +## See Also - [ART Audio Resampler (GitHub)](https://github.com/dbry/audio-resampler) -- {{< docref "index/" >}} +- [Speaker Component](/components/speaker/) diff --git a/content/components/spi.md b/src/content/docs/components/spi.mdx similarity index 97% rename from content/components/spi.md rename to src/content/docs/components/spi.mdx index bc7b7c2652..286f9f33a6 100644 --- a/content/components/spi.md +++ b/src/content/docs/components/spi.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up SPI components in ESPHome" title: "SPI Bus" -params: - seo: - description: Instructions for setting up SPI components in ESPHome - image: spi.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "spi" >}} + + SPI is a very common high-speed protocol for a lot of devices. The ESPHome SPI component implements only the host controller role, where it controls the bus, and writes or reads data from peripherals attached to the bus. @@ -31,7 +29,6 @@ It is also possible to configure a quad SPI interface using 4 output data lines, output lines. This is required only for use with certain components. > [!NOTE] -> > - Software mode supports only single-bit SPI. > - Quad mode SPI is available only on ESP32 devices (all variants). > - Octal mode is available only on ESP32-S3, -S2 and -P4 variants. @@ -114,7 +111,7 @@ Quad and octal modes requires a hardware interface, so `software` and `any` are ## Generic SPI device component -{{< anchor "spi_device" >}} + Other components that depend on the SPI component will reference it, typically to communicate with specific peripheral devices. There is also a general-purpose SPI device component that can be used to communicate with hardware not @@ -195,4 +192,4 @@ transactions. ## See Also -- {{< apiref "spi/spi.h" "spi/spi.h" >}} +- diff --git a/content/components/sprinkler.md b/src/content/docs/components/sprinkler.mdx similarity index 92% rename from content/components/sprinkler.md rename to src/content/docs/components/sprinkler.mdx index cf2399b0e9..586a13fccf 100644 --- a/content/components/sprinkler.md +++ b/src/content/docs/components/sprinkler.mdx @@ -1,13 +1,15 @@ --- description: "Instructions for setting up the sprinkler controller component in ESPHome to control sprinkler valves." title: "Sprinkler Controller" -params: - seo: - description: Instructions for setting up the sprinkler controller component in ESPHome to control sprinkler valves. - image: sprinkler-variant.svg --- -{{< img src="sprinkler.png" alt="Image" class="align-center" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sprinklerImg from './images/sprinkler.png'; +import sprinklerUiImg from './images/sprinkler-ui.jpg'; +import APIRef from '@components/APIRef.astro'; + + The `sprinkler` controller component aims to behave like a sprinkler/irrigation valve controller, much like those made by companies such as Rain Bird or Hunter. It does so by automating control of a @@ -48,7 +50,12 @@ It reaches even further, however, offering several more advanced features, as we > valves (often known in the industry as a "main" or "master" valve). The pump or upstream valve > simply controls the water supply to other downstream valves. -{{< img src="sprinkler-ui.jpg" alt="Image" caption="Example Sprinkler Controller UI -- Note that this example leverages {{< docref \"/components/number/index\" \"number\" >}} components for setting run durations, repeat and multiplier values. [More details below.](#sprinkler-controller-sprinkler_controller_numbers)" width="60.0%" class="align-center" >}} +
    ```yaml # Example minimal configuration entry @@ -139,11 +146,11 @@ examples that are ready for you to copy and paste! up from running the pump when no distribution valves are open or to allow the main line out to distribution valves to drain. May not be used with `pump_stop_pump_delay`. -- **multiplier_number** (*Optional*, *string*): The name of the {{< docref "/components/number/index" "number" >}} component that +- **multiplier_number** (*Optional*, *string*): The name of the [number](/components/number/) component that should be presented to the front end (Home Assistant) to enable control of the sprinkler controller's `multiplier` value. See [Using the Sprinkler Controller's Numbers](#sprinkler-controller-sprinkler_controller_numbers) below for more detail. -- **repeat_number** (*Optional*, *string*): The name of the {{< docref "/components/number/index" "number" >}} component that +- **repeat_number** (*Optional*, *string*): The name of the [number](/components/number/) component that should be presented to the front end (Home Assistant) to enable control of the sprinkler controller's `repeat` value. May not be used with `repeat`. See [Using the Sprinkler Controller's Numbers](#sprinkler-controller-sprinkler_controller_numbers) below for more detail. @@ -174,13 +181,13 @@ examples that are ready for you to copy and paste! - **pump_switch_id** (*Optional*, [Switch](/components/switch#config-switch)): This is the [switch](/components/switch#config-switch) component to be used to control the valve's pump or upstream electric valve. Typically this would be a - {{< docref "switch/gpio" "GPIO switch" >}} wired to control a relay or other switching device which in turn would - activate the respective pump/valve. For latching valves/pumps, use an {{< docref "switch/hbridge" "H-Bridge switch" >}}. + [GPIO switch](/components/switch/gpio/) wired to control a relay or other switching device which in turn would + activate the respective pump/valve. For latching valves/pumps, use an [H-Bridge switch](/components/switch/hbridge/). *It is not recommended to expose this switch to the front end; please see* [An Important Note about GPIO Switches and Control](#sprinkler-controller-an_important_note_about_gpio_switches_and_control) *below for more detail.* - - **run_duration_number** (*Optional*, *string*): The name of the {{< docref "/components/number/index" "number" >}} component + - **run_duration_number** (*Optional*, *string*): The name of the [number](/components/number/) component that should be presented to the front end (Home Assistant) to enable control of the valve's `run_duration` value. May not be used with `run_duration`. See [Using the Sprinkler Controller's Numbers](#sprinkler-controller-sprinkler_controller_numbers) below for more detail. **Pro tip:** Want times in minutes? Add `unit_of_measurement: min` to the number configuration. See @@ -194,21 +201,21 @@ examples that are ready for you to copy and paste! - **valve_switch_id** (**Required**, [Switch](/components/switch#config-switch)): This is the [switch](/components/switch#config-switch) component to be used to control the valve that operates the given section or zone of the sprinkler - system. Typically this would be a {{< docref "switch/gpio" "GPIO switch" >}} wired to control a relay + system. Typically this would be a [GPIO switch](/components/switch/gpio/) wired to control a relay or other switching device which in turn would activate the respective valve. For latching valves, use an - {{< docref "switch/hbridge" "H-Bridge switch" >}}. *It is not recommended to expose this switch to the front end; please see* + [H-Bridge switch](/components/switch/hbridge/). *It is not recommended to expose this switch to the front end; please see* [An Important Note about GPIO Switches and Control](#sprinkler-controller-an_important_note_about_gpio_switches_and_control) *below for more detail.* -{{< anchor "sprinkler-controller-an_important_note_about_gpio_switches_and_control" >}} + ## An Important Note about GPIO Switches and Control The savvy and/or seasoned ESPHome user will quickly realize that `pump_switch_id` and `valve_switch_id` (as described above) are really just pointers to other switches elsewhere in the ESPHome yaml configuration. -It might seem reasonable to assume that these switches (typically {{< docref "switch/gpio" "GPIO switches" >}} or -{{< docref "switch/hbridge" "H-Bridge switches" >}}) may be used to switch the various sprinkler zones on and off, +It might seem reasonable to assume that these switches (typically [GPIO switches](/components/switch/gpio/) or +[H-Bridge switches](/components/switch/hbridge/)) may be used to switch the various sprinkler zones on and off, however, this is **not** the case. It's important to note that the sprinkler controller provides a switch for each configured zone -- ultimately, this switch is to be used to switch any given zone on or off, **not** the underlying switch the zone is configured with. @@ -251,11 +258,11 @@ In summary, to ensure that your sprinkler controller consistently operates as ex These simple configuration tweaks will help prevent any number of errors (human, automation, or otherwise) and may help to avert disaster! -{{< anchor "sprinkler-controller-actions" >}} + ## Controller Actions -{{< anchor "sprinkler-controller-action_start_full_cycle" >}} + ### `sprinkler.start_full_cycle` action @@ -270,7 +277,7 @@ on_...: - sprinkler.start_full_cycle: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_start_from_queue" >}} + ### `sprinkler.start_from_queue` action @@ -291,7 +298,7 @@ on_...: id: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_start_single_valve" >}} + ### `sprinkler.start_single_valve` action @@ -310,7 +317,7 @@ on_...: run_duration: 600s # optional ``` -{{< anchor "sprinkler-controller-action_shutdown" >}} + ### `sprinkler.shutdown` action @@ -322,7 +329,7 @@ on_...: - sprinkler.shutdown: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_next_valve" >}} + ### `sprinkler.next_valve` action @@ -337,7 +344,7 @@ on_...: - sprinkler.next_valve: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_previous_valve" >}} + ### `sprinkler.previous_valve` action @@ -352,7 +359,7 @@ on_...: - sprinkler.previous_valve: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_pause" >}} + ### `sprinkler.pause` action @@ -365,7 +372,7 @@ on_...: - sprinkler.pause: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_resume" >}} + ### `sprinkler.resume` action @@ -378,7 +385,7 @@ on_...: - sprinkler.resume: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_resume_or_start_full_cycle" >}} + ### `sprinkler.resume_or_start_full_cycle` action @@ -391,7 +398,7 @@ on_...: - sprinkler.resume_or_start_full_cycle: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_queue_valve" >}} + ### `sprinkler.queue_valve` action @@ -412,7 +419,7 @@ on_...: run_duration: 900s ``` -{{< anchor "sprinkler-controller-action_clear_queued_valves" >}} + ### `sprinkler.clear_queued_valves` action @@ -426,7 +433,7 @@ on_...: id: sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-action_set_multiplier" >}} + ### `sprinkler.set_multiplier` action @@ -447,7 +454,7 @@ on_...: multiplier: 1.5 ``` -{{< anchor "sprinkler-controller-action_set_repeat" >}} + ### `sprinkler.set_repeat` action @@ -463,7 +470,7 @@ on_...: repeat: 2 # would run three cycles ``` -{{< anchor "sprinkler-controller-action_set_divider" >}} + ### `sprinkler.set_divider` action @@ -486,7 +493,7 @@ on_...: divider: 2 ``` -{{< anchor "sprinkler-controller-action_set_valve_run_duration" >}} + ### `sprinkler.set_valve_run_duration` action @@ -503,7 +510,6 @@ on_...: ``` > [!NOTE] -> > - The `start_single_valve` action ignores whether a valve is enabled via its enable switch. > - The `next_valve` and `previous_valve` actions may not appear to respond immediately if either > `manual_selection_delay` or any of the various delay mechanisms described in the @@ -514,7 +520,7 @@ on_...: > - If a valve is active when its `run_duration` or the multiplier value is changed, the active > valve's run duration will remain unaffected until the next time it is started. -{{< anchor "sprinkler-controller-pump_and_distribution_valve_coordination" >}} + ## Pump and Distribution Valve Coordination @@ -591,7 +597,7 @@ with `valve_open_delay`. In any case, the examples in the next section illustrate how/where to add these options into your configuration. -{{< anchor "sprinkler-controller-examples" >}} + ## Controller Examples @@ -736,7 +742,7 @@ switch: ### Single Controller, Three Latching Valves, Single Latching Pump This example is similar to the previous example, however it illustrates how a "latching" or "pulsed" -valve can be configured using {{< docref "switch/hbridge" "H-Bridge switches" >}}. This type of valve +valve can be configured using [H-Bridge switches](/components/switch/hbridge/). This type of valve requires two GPIO pins to operate -- one to switch the valve on and another to switch the valve off. Note that, while this example illustrates a configuration that uses exclusively latching valves, @@ -899,11 +905,11 @@ switch: > communicate to ensure any given pump is activated and deactivated only as necessary, even when > the controllers are operating simultaneously. -{{< anchor "sprinkler-controller-sprinkler_controller_numbers" >}} + ### Using the Sprinkler Controller's Numbers -The sprinkler controller can leverage ESPHome's/Home Assistant's {{< docref "/components/number/index" "number" >}} component to +The sprinkler controller can leverage ESPHome's/Home Assistant's [number](/components/number/) component to make valve run durations easily adjustable from the front end (Home Assistant). ```yaml @@ -914,13 +920,13 @@ sprinkler: ... ``` -An added benefit of using {{< docref "/components/number/index" "number" >}} components is that modified valve run durations, +An added benefit of using [number](/components/number/) components is that modified valve run durations, multiplier and repeat values can persist across resets/reboots of the ESP device. If this is your desired behavior, you -should configure the {{< docref "/components/number/index" "number" >}} components within your sprinkler controller configuration. +should configure the [number](/components/number/) components within your sprinkler controller configuration. -The sprinkler controller's implementation of the {{< docref "/components/number/index" "number" >}} component is based on -ESPHome's {{< docref "/components/number" >}}, supporting all of its [configuration variables](/components/number#config-number) in -addition to a subset of the {{< docref "/components/number/template" "Template Number Component's" >}} configuration variables, +The sprinkler controller's implementation of the [number](/components/number/) component is based on +ESPHome's [Number](/components/number/), supporting all of its [configuration variables](/components/number#config-number) in +addition to a subset of the [Template Number Component's](/components/number/template/) configuration variables, including: - `initial_value` (Defaults to 900 for valves, 1 for multiplier, 0 for repeat) @@ -949,7 +955,7 @@ sprinkler: ... ``` -{{< anchor "sprinkler-controller-sprinkler_controller_extending_switches" >}} + ### Extending the Sprinkler Controller's Switches @@ -995,7 +1001,7 @@ is too low (look for `on_value` or `on_value_range` ), the sprinkler controller be activated by calling one of the controller's start-up actions, such as `sprinkler.start_full_cycle`, `sprinkler.start_from_queue`, `sprinkler.start_single_valve`, or `sprinkler.resume_or_start_full_cycle`. -{{< anchor "sprinkler-controller-sprinkler_controller_queue" >}} + ### The Sprinkler Controller Queue @@ -1064,13 +1070,13 @@ api: - sprinkler.shutdown: lawn_sprinkler_ctrlr ``` -{{< anchor "sprinkler-controller-sprinkler_controller_understanding_state" >}} + ## Understanding the Sprinkler Controller's State A number of people have asked about how to determine the sprinkler controller's state. This section aims to outline how -to use the sprinkler controller's {{< apiref "API" "sprinkler/sprinkler.h" >}} to determine what it is doing, generally with -the goal of indicating this on some form of {{< docref "/components/display/index" "display" >}} hardware. Note that this +to use the sprinkler controller's to determine what it is doing, generally with +the goal of indicating this on some form of [display](/components/display/) hardware. Note that this discussion largely revolves around C++ code (as is used in ESPHome lambdas). Many of the methods used to determine the sprinkler controller's state return a type of value known as an `optional`. @@ -1089,14 +1095,14 @@ on [cppreference.com](https://en.cppreference.com/w/cpp/utility/optional), but w template.) The examples that follow illustrate use of the sprinkler controller's methods within a -{{< docref "/components/display/index" "display" >}} lambda. The examples are intended to illustrate a pattern and (for sake of -brevity) *are not complete*; at very least you'll need to fill out the {{< docref "/components/display/index" "display" >}} +[display](/components/display/) lambda. The examples are intended to illustrate a pattern and (for sake of +brevity) *are not complete*; at very least you'll need to fill out the [display](/components/display/) component's specific configuration details before you can use them. With these points in mind, let's discuss some of the methods which indicate the state of the sprinkler controller. We'll approach this from the angle of *"how do I..."* -{{< anchor "sprinkler-controller-sprinkler_controller_understanding_state_how_do_i" >}} + ### How Do I @@ -1175,7 +1181,7 @@ We'll approach this from the angle of *"how do I..."* Note again that each of the `repeat` methods returns an `optional` type; if the `optional` returned `has_value()`, repeating is enabled and you can get the repeat target (`repeat()` ) or current repeat - count (`repeat_count()` ) with `optional` 's `value()` method. + count (`repeat_count()` ) with `optional`'s `value()` method. The `multiplier()` method returns a `float` type and, as such, it always has a value. @@ -1227,5 +1233,5 @@ We'll approach this from the angle of *"how do I..."* ## See Also -- {{< apiref "sprinkler/sprinkler.h" "sprinkler/sprinkler.h" >}} -- {{< apiref "switch/switch.h" "switch/switch.h" >}} +- +- diff --git a/content/components/statsd.md b/src/content/docs/components/statsd.mdx similarity index 90% rename from content/components/statsd.md rename to src/content/docs/components/statsd.mdx index 26825af623..25fbe65014 100644 --- a/content/components/statsd.md +++ b/src/content/docs/components/statsd.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up a StatsD" title: "StatsD" -params: - seo: - description: Instructions for setting up a StatsD --- +import APIRef from '@components/APIRef.astro'; + StatsD is a [protocol](https://github.com/statsd/statsd/blob/master/docs/metric_types.md) to send metrics to a Daemon to store and aggregate them. Today there are many monitoring solutions that support receiving metrics via the StatsD @@ -34,7 +33,7 @@ This example will generate a metric named `test1.sensor` with the value of the ` - **sensor** (*Optional*, [Sensor list](#sensors)): A list of sensors to generate metrics for. - **binary_sensor** (*Optional*, [Sensor list](#sensors)): A list of binary sensors to generate metrics for. -{{< anchor "sensors" >}} + ## Sensor list @@ -43,4 +42,4 @@ This example will generate a metric named `test1.sensor` with the value of the ` ## See Also -- {{< apiref "statsd/statsd.h" "statsd/statsd.h" >}} +- diff --git a/content/components/status_led.md b/src/content/docs/components/status_led.mdx similarity index 81% rename from content/components/status_led.md rename to src/content/docs/components/status_led.mdx index a302ddfde6..5b1b139c8b 100644 --- a/content/components/status_led.md +++ b/src/content/docs/components/status_led.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up status LEDs in ESPHome to monitor the status of an ESP." title: "Status LED" -params: - seo: - description: Instructions for setting up status LEDs in ESPHome to monitor the status of an ESP. - image: led-on.svg --- +import APIRef from '@components/APIRef.astro'; + The `status_led` hooks into all ESPHome components and can indicate the status of the device. Specifically, it will: @@ -28,7 +26,7 @@ status_led: > [!NOTE] > If your device has a single LED that needs to be shared use -> {{< docref "/components/light/status_led" "status_led light platform" >}} instead. +> [status_led light platform](/components/light/status_led/) instead. ## Configuration variables @@ -50,5 +48,5 @@ status_led: ## See Also -- {{< docref "/components/light/status_led" >}} -- {{< apiref "status_led/status_led.h" "status_led/status_led.h" >}} +- [Status LED Light](/components/light/status_led/) +- diff --git a/content/components/stepper/_index.md b/src/content/docs/components/stepper/index.mdx similarity index 95% rename from content/components/stepper/_index.md rename to src/content/docs/components/stepper/index.mdx index 9c68d55b3e..094d94fda4 100644 --- a/content/components/stepper/_index.md +++ b/src/content/docs/components/stepper/index.mdx @@ -1,11 +1,11 @@ --- description: "Instructions for setting up stepper motor drivers in ESPHome" title: "Stepper Component" -params: - seo: - description: Instructions for setting up stepper motor drivers in ESPHome - image: folder-open.svg +sidebar: + label: "Stepper Component" --- +import APIRef from '@components/APIRef.astro'; + The `stepper` component allows you to use stepper motors with ESPHome. Currently only the A4988 stepper driver @@ -16,7 +16,7 @@ and ULN2003 ([datasheet](http://www.ti.com/lit/ds/symlink/uln2003a.pdf)) are sup > This component will not show up in the Home Assistant front-end automatically because > Home Assistant doesn't have support for steppers. Please see [Home Assistant Configuration](#stepper-ha-config). -{{< anchor "base_stepper_config" >}} + ## Base Stepper Configuration @@ -132,7 +132,7 @@ Configuration variables: - All other from [Base Stepper Configuration](#base_stepper_config). -{{< anchor "stepper-set_target_action" >}} + ## `stepper.set_target` Action @@ -178,7 +178,7 @@ Configuration options: > target: 150 > ``` -{{< anchor "stepper-report_position_action" >}} + ## `stepper.report_position` Action @@ -217,7 +217,7 @@ Configuration variables: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the stepper. - **position** (**Required**, int, [templatable](/automations/templates)): The position to report in steps. -{{< anchor "stepper-set_speed_action" >}} + ## `stepper.set_speed` Action @@ -236,7 +236,7 @@ Configuration variables: - **speed** (**Required**, [templatable](/automations/templates), float): The speed in `steps/s` (steps per seconds) to drive the stepper at. -{{< anchor "stepper-set_acceleration_action" >}} + ## `stepper.set_acceleration` Action @@ -255,7 +255,7 @@ Configuration variables: - **acceleration** (**Required**, [templatable](/automations/templates), float): The acceleration in `steps/s^2` (steps per seconds squared) to use when starting to move. -{{< anchor "stepper-set_deceleration_action" >}} + ## `stepper.set_deceleration` Action @@ -274,7 +274,7 @@ Configuration variables: - **deceleration** (**Required**, [templatable](/automations/templates), float): The same as `acceleration`, but for when the motor is decelerating shortly before reaching the set position. -{{< anchor "stepper-ha-config" >}} + ## Home Assistant Configuration @@ -300,7 +300,7 @@ stepper: id: my_stepper ``` -{{< anchor "stepper-lambda_calls" >}} + ## lambda calls @@ -336,4 +336,4 @@ advanced stuff (see the full API Reference for more info). ## See Also -- {{< apiref "stepper/stepper.h" "stepper/stepper.h" >}} +- diff --git a/content/components/substitutions.md b/src/content/docs/components/substitutions.mdx similarity index 94% rename from content/components/substitutions.md rename to src/content/docs/components/substitutions.mdx index 28d33acb2c..2a05b7f80c 100644 --- a/content/components/substitutions.md +++ b/src/content/docs/components/substitutions.mdx @@ -1,10 +1,6 @@ --- description: "How to use substitutions in ESPHome" title: "Substitutions" -params: - seo: - description: How to use substitutions in ESPHome - image: settings.svg --- ESPHome has a powerful way to reduce repetition in configuration files: substitutions. @@ -66,7 +62,7 @@ something: test: ${bar[foo]} ``` -{{< anchor "jinja-expressions" >}} + ## Jinja expressions @@ -150,7 +146,7 @@ In addition to the Jinja expressions, ESPHome supports a number of built-in func - `chr` Returns the character for a given Unicode code point. Example: `chr(65) == "A"` - `len` Returns the length of the string. Example: `len("Hello") == 5` -{{< anchor "substitute-include-variables" >}} + ## Disabling Jinja and substitutions @@ -202,7 +198,7 @@ binary_sensor: payload: double ``` -{{< anchor "command-line-substitutions" >}} + ## Command line substitutions @@ -239,7 +235,7 @@ Command line substitutions take precedence over those in your configuration file "template" configuration files (like `example.yaml` above) which can be used by multiple devices, leveraging substitutions which are provided on the command line. -{{< anchor "yaml-insertion-operator" >}} + ## Bonus: YAML insertion operator @@ -277,6 +273,5 @@ substitutions: ## See Also -- {{< docref "/index" "ESPHome index" >}} -- {{< docref "/guides/getting_started_command_line" >}} -- {{< docref "/guides/faq" >}} +- [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) +- [Frequently Asked Questions](/guides/faq/) diff --git a/content/components/sun.md b/src/content/docs/components/sun.mdx similarity index 88% rename from content/components/sun.md rename to src/content/docs/components/sun.mdx index 735255e4a4..f9502b74a9 100644 --- a/content/components/sun.md +++ b/src/content/docs/components/sun.mdx @@ -1,12 +1,13 @@ --- description: "Instructions for setting up tracking the sun position in ESPHome." title: "Sun" -params: - seo: - description: Instructions for setting up tracking the sun position in ESPHome. - image: weather-sunny.svg --- +import { Image } from 'astro:assets'; +import sunSensorUiImg from './images/sun-sensor-ui.png'; +import sunTextSensorUiImg from './images/sun-text_sensor-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `sun` component allows you to track the sun's position in the sky. Calculations are done every 60 seconds. ## Component/Hub @@ -76,7 +77,7 @@ sensor: type: azimuth ``` -{{< img src="sun-sensor-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ### Configuration variables @@ -100,7 +101,7 @@ text_sensor: type: sunset ``` -{{< img src="sun-text_sensor-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ### Configuration variables @@ -115,7 +116,7 @@ text_sensor: - All other options from [Text Sensor](/components/text_sensor#config-text_sensor). -{{< anchor "sun-is_above_below_horizon-condition" >}} + ## `sun.is_above_horizon` / `sun.is_below_horizon` Conditions @@ -133,4 +134,4 @@ on_...: ## See Also -- {{< apiref "sun/sun.h" "sun/sun.h" >}} +- diff --git a/content/components/sun_gtil2.md b/src/content/docs/components/sun_gtil2.mdx similarity index 82% rename from content/components/sun_gtil2.md rename to src/content/docs/components/sun_gtil2.mdx index 2249a48830..e9c7e7ce19 100644 --- a/content/components/sun_gtil2.md +++ b/src/content/docs/components/sun_gtil2.mdx @@ -1,11 +1,14 @@ --- description: "Instructions for reading data from a SUN-1000G2 grid tie inverter using ESPHome" title: "SUN_GTIL2 Grid Tie Inverter" -params: - seo: - description: Instructions for reading data from a SUN-1000G2 grid tie inverter using ESPHome --- +import { Image } from 'astro:assets'; +import sunGtil2ControllerBoardImg from './images/sun_gtil2_controller_board.png'; +import sunGtil2DisplayBoardImg from './images/sun_gtil2_display_board.png'; +import sunGtil2SchematicImg from './images/sun_gtil2_schematic.png'; +import Figure from '@components/Figure.astro'; + The `sun_gtil2` component allows you to get voltage, power and temperature readings from your `SUN-1000G2` or `SUN-2000G2` grid tie inverter. This is done by reading the UART data transmitted from the inverter's controller board to the display board. @@ -13,16 +16,28 @@ controller board to the display board. > [!NOTE] > You need to open your inverter to apply this modification. Use at your own risk! If you want to connect your > inverter via the (more limited) external RS232 interface you should use the -> {{< docref "/components/modbus_controller" "Modbus" >}} component instead. - -{{< img src="sun_gtil2_controller_board.png" alt="Image" caption="Pinout of the inverter's controller board" - width="50.0%" class="align-center" >}} - -{{< img src="sun_gtil2_display_board.png" alt="Image" caption="Pinout of the inverter's display board" - width="50.0%" class="align-center" >}} - -{{< img src="sun_gtil2_schematic.png" alt="Image" caption="Simplified connection diagram" - width="75.0%" class="align-center" >}} +> [Modbus](/components/modbus_controller/) component instead. + +
    + +
    + +
    As the data is read from the inverter using UART, you need to have an [UART bus](/components/uart) in your configuration with the `rx_pin` connected to the TX pin of the inverter's controller board. Additionally, you diff --git a/content/components/switch/ble_client.md b/src/content/docs/components/switch/ble_client.mdx similarity index 69% rename from content/components/switch/ble_client.md rename to src/content/docs/components/switch/ble_client.mdx index b0a9d7ffe9..3475592df9 100644 --- a/content/components/switch/ble_client.md +++ b/src/content/docs/components/switch/ble_client.mdx @@ -1,22 +1,20 @@ --- description: "Control the state of BLE clients." title: "BLE Client Switch" -params: - seo: - description: Control the state of BLE clients. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `ble_client` component is a switch platform that is used to enable and disable a `ble_client`. This has several uses, such as minimizing battery usage or for allowing other clients (Eg phone apps) to connect to the device. -For more information on BLE services and characteristics, see {{< docref "/components/ble_client" >}}. +For more information on BLE services and characteristics, see [Ble Client](/components/ble_client/). > [!WARNING] > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -39,5 +37,5 @@ switch: ## See Also -- {{< docref "/components/ble_client" >}} -- {{< apiref "ble_client/switch/ble_switch.h" "ble_client/switch/ble_switch.h" >}} +- [BLE Client](/components/ble_client/) +- diff --git a/content/components/switch/factory_reset.md b/src/content/docs/components/switch/factory_reset.mdx similarity index 65% rename from content/components/switch/factory_reset.md rename to src/content/docs/components/switch/factory_reset.mdx index 1f02d8a3fc..4512b12433 100644 --- a/content/components/switch/factory_reset.md +++ b/src/content/docs/components/switch/factory_reset.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up switches that can remotely invalidate all ESPHome preferences stored in flash and reboot ESP." title: "Factory Reset Switch" -params: - seo: - description: Instructions for setting up switches that can remotely invalidate all ESPHome preferences stored in flash and reboot ESP. - image: restart.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `factory_reset` switch allows you to remotely invalidate (reset) all ESPHome [preferences](/components/esphome#preferences-flash_write_interval) stored in flash memory and reboot your node. After reboot all states, parameters and variables will be reinitialized with their default values. This is useful: @@ -18,10 +17,10 @@ After reboot all states, parameters and variables will be reinitialized with the > **USE WITH GREAT CAUTION!** All credentials, global variables, counters and saved states stored in non-volatile memory will be lost with no chance of recovering them. > Even raw reading of flash memory with `esptool` will not help, since data is physically erased from flash memory. > -> For devices configured using {{< docref "/components/captive_portal" "captive portal" >}}, this will reset WiFi settings as well, thus making such devices offline. +> For devices configured using [captive portal](/components/captive_portal/), this will reset WiFi settings as well, thus making such devices offline. > You'll need to be in close proximity to your device to configure it again using a built-in WiFi access point and captive portal. -{{< img src="factory-rst-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -36,10 +35,10 @@ switch: ## See Also -- {{< docref "/components/factory_reset" >}} -- {{< docref "shutdown/" >}} -- {{< docref "restart/" >}} -- {{< docref "safe_mode/" >}} -- {{< docref "/components/button/factory_reset" >}} -- {{< docref "template/" >}} -- {{< apiref "factory_reset/factory_reset_switch.h" "factory_reset/factory_reset_switch.h" >}} +- [Factory Reset](/components/factory_reset/) +- [Shutdown Switch](/components/switch/shutdown/) +- [Restart Switch](/components/switch/restart/) +- [Safe Mode Switch](/components/switch/safe_mode/) +- [Factory Reset Button](/components/button/factory_reset/) +- [Template Switch](/components/switch/template/) +- diff --git a/content/components/switch/gpio.md b/src/content/docs/components/switch/gpio.mdx similarity index 85% rename from content/components/switch/gpio.md rename to src/content/docs/components/switch/gpio.mdx index e3975f81a1..77fdf81048 100644 --- a/content/components/switch/gpio.md +++ b/src/content/docs/components/switch/gpio.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up GPIO pin switches in ESPHome that control GPIO outputs." title: "GPIO Switch" -params: - seo: - description: Instructions for setting up GPIO pin switches in ESPHome that control GPIO outputs. - image: gpio.svg --- +import { Image } from 'astro:assets'; +import gateRemoteUiImg from './images/gate-remote-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `gpio` switch platform allows you to use any pin on your node as a switch. You can for example hook up a relay to a GPIO pin and use it through this platform. -{{< img src="gpio-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -70,9 +70,9 @@ switch: - switch.turn_off: relay ``` -{{< img src="gate-remote-ui.png" alt="Image" class="align-center" >}} + -{{< anchor "switch-gpio-interlocking" >}} + ## Interlocking @@ -127,8 +127,8 @@ a switch. ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/output/gpio" >}} -- {{< docref "/components/cover/template" >}} -- {{< docref "/cookbook/garage-door" >}} -- {{< apiref "gpio/switch/gpio_switch.h" "gpio/switch/gpio_switch.h" >}} +- [Switch Component](/components/switch/) +- [GPIO Output](/components/output/gpio/) +- [Template Cover](/components/cover/template/) +- [Garage-Door](/cookbook/garage-door/) +- diff --git a/content/components/switch/haier.md b/src/content/docs/components/switch/haier.mdx similarity index 87% rename from content/components/switch/haier.md rename to src/content/docs/components/switch/haier.mdx index 58ddec7ee9..6e7edc788d 100644 --- a/content/components/switch/haier.md +++ b/src/content/docs/components/switch/haier.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up additional switches for Haier climate devices." title: "Haier Climate Switches" -params: - seo: - description: Instructions for setting up additional switches for Haier climate devices. - image: haier.svg --- Additional switches to support additional features for Haier AC. @@ -40,4 +36,4 @@ switch: ## See Also -- {{< docref "/components/climate/haier" "Haier Climate" >}} +- [Haier Climate](/components/climate/haier/) diff --git a/content/components/switch/hbridge.md b/src/content/docs/components/switch/hbridge.mdx similarity index 75% rename from content/components/switch/hbridge.md rename to src/content/docs/components/switch/hbridge.mdx index 2f3b77f47c..f218a52fee 100644 --- a/content/components/switch/hbridge.md +++ b/src/content/docs/components/switch/hbridge.mdx @@ -1,15 +1,21 @@ --- description: "Instructions for setting up H-Bridge controlled switches (or relays)." title: "H-bridge Switch" -params: - seo: - description: Instructions for setting up H-Bridge controlled switches (or relays). - image: hbridge-relay.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import hbridgeRelayImg from './images/hbridge-relay.png'; +import APIRef from '@components/APIRef.astro'; + The `hbridge` switch platform allows you to drive an *h-bridge* controlled latching relay. -{{< img src="hbridge-relay.png" alt="Image" caption="Omron G6CK-2117P relay module." width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -36,6 +42,6 @@ switch: ## See Also -- {{< docref "/components/output" >}} -- {{< docref "/components/switch" >}} -- {{< apiref "hbridge/switch/hbridge_switch.h" "hbridge/switch/hbridge_switch.h" >}} +- [Output Component](/components/output/) +- [Switch Component](/components/switch/) +- diff --git a/content/components/switch/homeassistant.md b/src/content/docs/components/switch/homeassistant.mdx similarity index 77% rename from content/components/switch/homeassistant.md rename to src/content/docs/components/switch/homeassistant.mdx index b021249815..9cd09651b2 100644 --- a/content/components/switch/homeassistant.md +++ b/src/content/docs/components/switch/homeassistant.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up Home Assistant Switch with ESPHome that import states and allows control via your Home Assistant instance." title: "Home Assistant Switch" -params: - seo: - description: Instructions for setting up Home Assistant Switch with ESPHome that import states and allows control via your Home Assistant instance. - image: home-assistant.svg --- +import APIRef from '@components/APIRef.astro'; + The `homeassistant` Switch platform allows you to create Switch that **import** -states and allow **control** via your Home Assistant instance using the {{< docref "/components/api" "native API" >}}. +states and allow **control** via your Home Assistant instance using the [native API](/components/api/). > [!NOTE] > Although you might not plan to *export* states from the node and you do not need an entity of the node @@ -44,4 +42,4 @@ The following entity domains from Home Assistant are supported by this platform. ## See Also - [Automation](/automations) -- {{< apiref "homeassistant/switch/homeassistant_switch.h" "homeassistant/switch/homeassistant_switch.h" >}} +- diff --git a/content/components/switch/images/gate-remote-ui.png b/src/content/docs/components/switch/images/gate-remote-ui.png similarity index 100% rename from content/components/switch/images/gate-remote-ui.png rename to src/content/docs/components/switch/images/gate-remote-ui.png diff --git a/content/components/switch/images/hbridge-relay.png b/src/content/docs/components/switch/images/hbridge-relay.png similarity index 100% rename from content/components/switch/images/hbridge-relay.png rename to src/content/docs/components/switch/images/hbridge-relay.png diff --git a/content/components/switch/images/restart-ui.png b/src/content/docs/components/switch/images/restart-ui.png similarity index 100% rename from content/components/switch/images/restart-ui.png rename to src/content/docs/components/switch/images/restart-ui.png diff --git a/content/components/switch/_index.md b/src/content/docs/components/switch/index.mdx similarity index 89% rename from content/components/switch/_index.md rename to src/content/docs/components/switch/index.mdx index 94617c98d7..10d6023ad2 100644 --- a/content/components/switch/_index.md +++ b/src/content/docs/components/switch/index.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up generic switches in ESPHome." title: "Switch Component" -params: - seo: - description: Instructions for setting up generic switches in ESPHome. - image: folder-open.svg +sidebar: + label: "Switch Component" --- +import APIRef from '@components/APIRef.astro'; + The `switch` domain includes all platforms that should show up like a switch and can only be turned ON or OFF. -{{< anchor "config-switch" >}} + ## Base Switch Configuration @@ -45,7 +45,7 @@ Configuration variables: **NOTE** : Not all components consider **restore_mode**. Check the documentation of the specific component to understand how this feature works for a particular component or device. For restoring on ESP8266s, also see `restore_from_flash` in the - {{< docref "/components/esp8266" "esp8266 section" >}}. + [esp8266 section](/components/esp8266/). - `RESTORE_DEFAULT_OFF` - Attempt to restore state and default to OFF if not possible to restore. - `RESTORE_DEFAULT_ON` - Attempt to restore state and default to ON. @@ -68,18 +68,18 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - **device_class** (*Optional*, string): The device class for the switch. - See + See [https://www.home-assistant.io/integrations/switch/#device-class](https://www.home-assistant.io/integrations/switch/#device-class) for a list of available options. - If MQTT enabled, All other options from [MQTT Component](/components/mqtt#config-mqtt-component). - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). -{{< anchor "switch-toggle_action" >}} + ### `switch.toggle` Action @@ -91,7 +91,7 @@ on_...: - switch.toggle: relay_1 ``` -{{< anchor "switch-turn_on_action" >}} + ### `switch.turn_on` Action @@ -103,7 +103,7 @@ on_...: - switch.turn_on: relay_1 ``` -{{< anchor "switch-turn_off_action" >}} + ### `switch.turn_off` Action @@ -115,7 +115,7 @@ on_...: - switch.turn_off: relay_1 ``` -{{< anchor "switch-control_action" >}} + ### `switch.control` Action @@ -142,8 +142,8 @@ Configuration variables: - **state** (**Required**, boolean, [templatable](/automations/templates)): The state to set the switch to. `true` turns the switch on, `false` turns it off. -{{< anchor "switch-is_on_condition" >}} -{{< anchor "switch-is_off_condition" >}} + + ### `switch.is_on` / `switch.is_off` Condition @@ -158,7 +158,7 @@ on_...: switch.is_on: my_switch ``` -{{< anchor "switch-lambda_calls" >}} + ### lambda calls @@ -180,7 +180,7 @@ advanced stuff (see the full API Reference for more info). > change the actual state of the switch, you need to call `turn_on()`, > `turn_off()` or `toggle()`. > -> For example, if you are using a {{< docref "/components/switch/gpio" >}}, calling `publish_state()` will +> For example, if you are using a [Gpio](/components/switch/gpio/), calling `publish_state()` will > not change the GPIO pin level. To do that, you need to call `turn_on()`, > `turn_off()`, `toggle()` or `control()`. The same applies to other switch platforms. @@ -216,7 +216,7 @@ advanced stuff (see the full API Reference for more info). id(my_switch).control(some_condition); // Set based on condition ``` -{{< anchor "switch-on_turn_on_off_trigger" >}} + ### `switch.on_turn_on` / `switch.on_turn_off` Trigger @@ -234,7 +234,7 @@ switch: - logger.log: "Switch Turned Off!" ``` -{{< anchor "switch-on_state_trigger" >}} + ### `switch.on_state` Trigger @@ -265,4 +265,4 @@ The variable `x` is a boolean that represents the new state: ## See Also -- {{< apiref "switch/switch.h" "switch/switch.h" >}} +- diff --git a/content/components/switch/lvgl.md b/src/content/docs/components/switch/lvgl.mdx similarity index 63% rename from content/components/switch/lvgl.md rename to src/content/docs/components/switch/lvgl.mdx index 9bb66888ef..b7716c74b7 100644 --- a/content/components/switch/lvgl.md +++ b/src/content/docs/components/switch/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL widget switch." title: "LVGL Switch" -params: - seo: - description: Instructions for setting up an LVGL widget switch. - image: ../images/lvgl_c_swi.png --- The `lvgl` switch platform creates a switch from an LVGL widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widgets are [`button`](/components/lvgl/widgets#lvgl-widget-button) (with `checkable` option enabled), [`switch`](/components/lvgl/widgets#lvgl-widget-switch) and [`checkbox`](/components/lvgl/widgets#lvgl-widget-checkbox). A single switch supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome switch component. @@ -28,15 +24,15 @@ switch: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Button widget](/components/lvgl/widgets#lvgl-widget-button) - [Switch widget](/components/lvgl/widgets#lvgl-widget-switch) - [Checkbox widget](/components/lvgl/widgets#lvgl-widget-checkbox) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} -- {{< docref "/components/output" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Text](/components/text/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) +- [Output Component](/components/output/) diff --git a/content/components/switch/modbus_controller.md b/src/content/docs/components/switch/modbus_controller.mdx similarity index 87% rename from content/components/switch/modbus_controller.md rename to src/content/docs/components/switch/modbus_controller.mdx index 40b7b07cdb..ecdac0b5d8 100644 --- a/content/components/switch/modbus_controller.md +++ b/src/content/docs/components/switch/modbus_controller.mdx @@ -1,13 +1,10 @@ --- description: "Instructions for setting up a modbus_controller device sensor." title: "Modbus Controller Switch" -params: - seo: - description: Instructions for setting up a modbus_controller device sensor. --- The `modbus_controller` switch platform creates a switch from a modbus_controller component -and requires {{< docref "/components/modbus_controller" >}} to be configured. +and requires [Modbus Controller](/components/modbus_controller/) to be configured. ## Configuration variables @@ -33,15 +30,15 @@ and requires {{< docref "/components/modbus_controller" >}} to be configured. Parameters passed into the lambda - **x** (float): The float value to be sent to the modbus device - - **payload** (`std::vector&payload` ): empty vector for the payload. If payload is set in the lambda it is sent as a custom command and must include all required bytes for a modbus request + - **payload** (`std::vector &payload`): empty vector for the payload. If payload is set in the lambda it is sent as a custom command and must include all required bytes for a modbus request *note:* because the response contains data for all registers in the same range you have to use `data[item->offset]` to get the first response byte for your sensor. - **item** (const pointer to a Switch derived object): The sensor object itself. Possible return values for the lambda: - - `return ;` the new value for the sensor. - - `return ; and fill payload with data` if the payload is added from the lambda then these bytes will be sent. + - `return true;` or `return false;` the new value for the sensor. + - `return ;` and fill payload with data if the payload is added from the lambda then these bytes will be sent. - `return {};` in the case the lambda handles the sending of the value itself. - **custom_command** (*Optional*, list of bytes): raw bytes for modbus command. This allows using non-standard commands. If `custom_command` is used `address` and `register_type` can't be used. @@ -107,12 +104,12 @@ switch: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} -- +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) +- [https://www.modbustools.com/modbus.html](https://www.modbustools.com/modbus.html) diff --git a/content/components/switch/nextion.md b/src/content/docs/components/switch/nextion.mdx similarity index 88% rename from content/components/switch/nextion.md rename to src/content/docs/components/switch/nextion.mdx index e78d980048..7f14b69b1f 100644 --- a/content/components/switch/nextion.md +++ b/src/content/docs/components/switch/nextion.mdx @@ -1,18 +1,16 @@ --- description: "Instructions for setting up Nextion Switch." title: "Nextion Switch Component" -params: - seo: - description: Instructions for setting up Nextion Switch. - image: nextion.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "nextion_switch" >}} + + The `nextion` switch platform supports the many switched components in the Nextion as well as integer variables. It can be a component or variable in the Nextion display. It is best to set the components vscope to global in the Nextion Editor. This way the component will be available if the page is shown or not. -See {{< docref "/components/display/nextion" >}} for setting up the display +See [Nextion](/components/display/nextion/) for setting up the display ```yaml # Example configuration entry @@ -58,7 +56,7 @@ should be prefixed with the page name (page0/page1 or whatever you have changed *Example:* `component_name: page0.r0` -{{< anchor "switch-nextion-publish_action" >}} + ## `switch.nextion.publish` Action @@ -101,22 +99,22 @@ Configuration options: > [!NOTE] > This action can also be written in lambdas. See [Lambda Calls](#nextion_switch_lambda_calls) -{{< anchor "nextion_switch_lambda_calls" >}} + ### Lambda Calls From [lambdas](/automations/templates#config-lambda), you can call several methods to access -some more advanced functions (see the full {{< apiref "nextion/nextion_switch.h" "nextion/nextion_switch.h" >}} for more info). +some more advanced functions (see the full for more info). -{{< anchor "nextion_switch_set_state" >}} + - `set_state(bool value, bool publish, bool send_to_nextion)` : Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion. -{{< anchor "nextion_switch_update" >}} + - `update()` : Poll from the Nextion -{{< anchor "nextion_switch_settings" >}} + - `set_background_color(Color color)` : Sets the background color to **Color** - `set_background_pressed_color(Color color)` : Sets the background color to **Color** @@ -124,7 +122,7 @@ some more advanced functions (see the full {{< apiref "nextion/nextion_switch.h" - `set_foreground_pressed_color(Color color)` : Sets the background color to **Color** - `set_visible(bool visible)` : Sets visible or not. If set to false, no updates will be sent to the component -{{< anchor "nextion_switch_how_things_update" >}} + ## How things Update @@ -148,7 +146,7 @@ Using the above yaml example: > [!NOTE] > No updates will be sent to the Nextion if it is sleeping. Once it wakes, the components will be updated. If a component is invisible, `visible(false)`, then it won't update until it is set to be visible. -{{< anchor "nextion_custom_switch_protocol" >}} + ## Nextion Custom Switch Protocol @@ -172,6 +170,6 @@ printh FF FF FF ## See Also -- {{< docref "/components/display/nextion" >}} -- {{< docref "index/" >}} -- {{< apiref "nextion/switch/nextion_switch.h" "nextion/switch/nextion_switch.h" >}} +- [Nextion TFT LCD Display](/components/display/nextion/) +- [Switch Component](/components/switch/) +- diff --git a/content/components/switch/output.md b/src/content/docs/components/switch/output.mdx similarity index 64% rename from content/components/switch/output.md rename to src/content/docs/components/switch/output.mdx index eed3b8b6a5..4ab4ae6aeb 100644 --- a/content/components/switch/output.md +++ b/src/content/docs/components/switch/output.mdx @@ -1,15 +1,14 @@ --- description: "Instructions for setting up generic output switches in ESPHome that control an output component." title: "Generic Output Switch" -params: - seo: - description: Instructions for setting up generic output switches in ESPHome that control an output component. - image: upload.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `output` switch platform allows you to use any output component as a switch. -{{< img src="output-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -30,5 +29,5 @@ switch: ## See Also -- {{< docref "/components/output" >}} -- {{< apiref "output/switch/output_switch.h" "output/switch/output_switch.h" >}} +- [Output Component](/components/output/) +- diff --git a/src/content/docs/components/switch/restart.mdx b/src/content/docs/components/switch/restart.mdx new file mode 100644 index 0000000000..e8004ae9e2 --- /dev/null +++ b/src/content/docs/components/switch/restart.mdx @@ -0,0 +1,33 @@ +--- +description: "Instructions for setting up switches that can remotely reboot the ESP in ESPHome." +title: "Restart Switch" +--- + +import { Image } from 'astro:assets'; +import restartUiImg from './images/restart-ui.png'; +import APIRef from '@components/APIRef.astro'; + +The `restart` switch platform allows you to restart your node remotely +through Home Assistant. + + + +```yaml +# Example configuration entry +switch: + - platform: restart + name: "Living Room Restart" +``` + +## Configuration variables + +- All options from [Switch](/components/switch#config-switch). + +## See Also + +- [Shutdown Switch](/components/switch/shutdown/) +- [Safe Mode Switch](/components/switch/safe_mode/) +- [Factory Reset Switch](/components/switch/factory_reset/) +- [Restart Button](/components/button/restart/) +- [Template Switch](/components/switch/template/) +- diff --git a/src/content/docs/components/switch/safe_mode.mdx b/src/content/docs/components/switch/safe_mode.mdx new file mode 100644 index 0000000000..6d842a580f --- /dev/null +++ b/src/content/docs/components/switch/safe_mode.mdx @@ -0,0 +1,33 @@ +--- +description: "Instructions for setting up switches that can remotely reboot the ESP in ESPHome into safe mode." +title: "Safe Mode Switch" +--- + +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + +The `safe_mode` switch allows you to remotely reboot your node into [Safe Mode](/components/safe_mode/). This is useful in certain situations where a misbehaving component, or low memory state is preventing Over-The-Air updates from completing successfully. + +This component requires [Safe Mode](/components/safe_mode/) to be configured. + + + +```yaml +# Example configuration entry +switch: + - platform: safe_mode + name: "Living Room Restart (Safe Mode)" +``` + +## Configuration variables + +- All options from [Switch](/components/switch#config-switch). + +## See Also + +- [Shutdown Switch](/components/switch/shutdown/) +- [Restart Switch](/components/switch/restart/) +- [Factory Reset Switch](/components/switch/factory_reset/) +- [Safe Mode Button](/components/button/safe_mode/) +- [Template Switch](/components/switch/template/) +- diff --git a/content/components/switch/shutdown.md b/src/content/docs/components/switch/shutdown.mdx similarity index 55% rename from content/components/switch/shutdown.md rename to src/content/docs/components/switch/shutdown.mdx index d3d5bc013a..b402d8e04e 100644 --- a/content/components/switch/shutdown.md +++ b/src/content/docs/components/switch/shutdown.mdx @@ -1,18 +1,17 @@ --- description: "Instructions for setting up switches that can remotely shut down the ESP." title: "Shutdown Switch" -params: - seo: - description: Instructions for setting up switches that can remotely shut down the ESP. - image: power_settings.svg --- +import { Image } from 'astro:assets'; +import APIRef from '@components/APIRef.astro'; + The `shutdown` switch platform allows you to shutdown your node remotely through Home Assistant. It does this by putting the node into deep sleep mode with no wakeup source selected. After enabling, the only way to startup the ESP again is by pressing the reset button or restarting the power supply. -{{< img src="shutdown-ui.png" alt="Image" width="80.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -27,9 +26,9 @@ switch: ## See Also -- {{< docref "restart/" >}} -- {{< docref "safe_mode/" >}} -- {{< docref "factory_reset/" >}} -- {{< docref "/components/button/shutdown" >}} -- {{< docref "template/" >}} -- {{< apiref "shutdown/shutdown_switch.h" "shutdown/shutdown_switch.h" >}} +- [Restart Switch](/components/switch/restart/) +- [Safe Mode Switch](/components/switch/safe_mode/) +- [Factory Reset Switch](/components/switch/factory_reset/) +- [Shutdown Button](/components/button/shutdown/) +- [Template Switch](/components/switch/template/) +- diff --git a/content/components/switch/template.md b/src/content/docs/components/switch/template.mdx similarity index 87% rename from content/components/switch/template.md rename to src/content/docs/components/switch/template.mdx index 58cdbf349a..07a90baf35 100644 --- a/content/components/switch/template.md +++ b/src/content/docs/components/switch/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template switches that can execute arbitrary actions when turned on or off." title: "Template Switch" -params: - seo: - description: Instructions for setting up template switches that can execute arbitrary actions when turned on or off. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` switch platform allows you to create simple switches out of just actions and an optional value lambda. Once defined, it will automatically appear in Home Assistant @@ -55,7 +53,7 @@ Possible return values for the optional lambda: - All other options from [Switch](/components/switch#config-switch). -{{< anchor "switch-template-publish_action" >}} + ## `switch.template.publish` Action @@ -97,7 +95,7 @@ Configuration options: ## See Also -- {{< docref "/automations" >}} -- {{< docref "/components/switch" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< apiref "template/switch/template_switch.h" "template/switch/template_switch.h" >}} +- [Automation](/automations/) +- [Switch Component](/components/switch/) +- [Binary Sensor Component](/components/binary_sensor/) +- diff --git a/content/components/switch/tuya.md b/src/content/docs/components/switch/tuya.mdx similarity index 80% rename from content/components/switch/tuya.md rename to src/content/docs/components/switch/tuya.mdx index e6939793cb..ac515254ba 100644 --- a/content/components/switch/tuya.md +++ b/src/content/docs/components/switch/tuya.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up a Tuya device switch." title: "Tuya Switch" -params: - seo: - description: Instructions for setting up a Tuya device switch. - image: upload.svg --- +import APIRef from '@components/APIRef.astro'; + The `tuya` switch platform creates a sensor from a tuya serial component -and requires {{< docref "/components/tuya" >}} to be configured. +and requires [Tuya](/components/tuya/) to be configured. ```text [13:46:01][C][tuya:023]: Tuya: @@ -41,5 +39,5 @@ switch: ## See Also -- {{< docref "/components/switch" >}} -- {{< apiref "tuya/switch/tuya_switch.h" "tuya/switch/tuya_switch.h" >}} +- [Switch Component](/components/switch/) +- diff --git a/content/components/switch/uart.md b/src/content/docs/components/switch/uart.mdx similarity index 80% rename from content/components/switch/uart.md rename to src/content/docs/components/switch/uart.mdx index 4db73ada98..15447365d8 100644 --- a/content/components/switch/uart.md +++ b/src/content/docs/components/switch/uart.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up UART switches in ESPHome that can output arbitrary UART sequences when activated." title: "UART Switch" -params: - seo: - description: Instructions for setting up UART switches in ESPHome that can output arbitrary UART sequences when activated. - image: uart.svg --- +import APIRef from '@components/APIRef.astro'; + The `uart` switch platform allows you to send a pre-defined sequence of bytes on a -{{< docref "/components/uart" "UART bus" >}} when triggered. +[UART bus](/components/uart/) when triggered. ```yaml # Example configuration entry @@ -43,5 +41,5 @@ switch: ## See Also -- {{< docref "/components/uart" >}} -- {{< apiref "uart/switch/uart_switch.h" "uart/switch/uart_switch.h" >}} +- [UART Bus](/components/uart/) +- diff --git a/content/components/sx126x.md b/src/content/docs/components/sx126x.mdx similarity index 96% rename from content/components/sx126x.md rename to src/content/docs/components/sx126x.mdx index bee50506d5..43624a0ec8 100644 --- a/content/components/sx126x.md +++ b/src/content/docs/components/sx126x.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up SX1261/SX1262/SX1268/LLCC68 transceivers." title: "SX126x Component" -params: - seo: - description: Instructions for setting up SX1261/SX1262/SX1268/LLCC68 transceivers. - image: sx126x.png --- -{{< anchor "sx126x" >}} +import { Image } from 'astro:assets'; +import sx126xFullImg from './images/sx126x-full.png'; +import APIRef from '@components/APIRef.astro'; + + The SX126x component allows you to configure the SX1261, SX1262, SX1268 and LLCC68 transceivers ([datasheet](https://www.semtech.com/products/wireless-rf/lora-connect/sx1262#documentation)) in @@ -17,7 +17,7 @@ Supported modulations include LoRa, FSK, GFSK, MSK and GMSK. The SX126x component may be used as a platform for the [Packet Transport Component](/components/packet_transport#packet-transport) component, enabling sensor data to be sent directly from one ESPHome node to another. -{{< img src="sx126x-full.png" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -115,7 +115,7 @@ sx126x: > [!NOTE] > Configuration variables can be changed at runtime using lambdas. Settings will only be applied -> after calling `configure`. See {{< apiref "sx126x/sx126x.h" "sx126x/sx126x.h" >}}. +> after calling `configure`. See . ### Triggers @@ -285,5 +285,4 @@ sx126x: ## See Also -- {{< docref "index/" >}} -- {{< apiref "sx126x/sx126x.h" "sx126x/sx126x.h" >}} +- diff --git a/content/components/sx127x.md b/src/content/docs/components/sx127x.mdx similarity index 93% rename from content/components/sx127x.md rename to src/content/docs/components/sx127x.mdx index 5caacf183a..9f32c2d657 100644 --- a/content/components/sx127x.md +++ b/src/content/docs/components/sx127x.mdx @@ -1,13 +1,13 @@ --- description: "Instructions for setting up SX1276/SX1277/SX1278/SX1279 transceivers." title: "SX127x Component" -params: - seo: - description: Instructions for setting up SX1276/SX1277/SX1278/SX1279 transceivers. - image: sx127x.png --- -{{< anchor "sx127x" >}} +import { Image } from 'astro:assets'; +import sx127xFullImg from './images/sx127x-full.png'; +import APIRef from '@components/APIRef.astro'; + + The SX127x component allows you to configure the SX1276, SX1277, SX1278 and SX1279 transceivers ([datasheet](https://www.semtech.com/products/wireless-rf/lora-connect/sx1278#documentation)) in @@ -17,7 +17,7 @@ Supported modulations include LoRa, OOK, FSK, GFSK, MSK and GMSK. The SX127x component may be used as a platform for the [Packet Transport Component](/components/packet_transport#packet-transport) component, enabling sensor data to be sent directly from one ESPHome node to another. -{{< img src="sx127x-full.png" alt="Image" width="50.0%" class="align-center" >}} + ```yaml # Example configuration entry @@ -116,12 +116,12 @@ sx127x: > [!NOTE] > Configuration variables can be changed at runtime using lambdas. Settings will only be applied -> after calling `configure`. See {{< apiref "sx127x/sx127x.h" "sx127x/sx127x.h" >}}. +> after calling `configure`. See . ### Triggers - **on_packet** (*Optional*, [Automation](/automations)): An automation to perform in packet mode - when a packet has been decoded. A variable x of type std::vector is passed to the automation + when a packet has been decoded. A variable x of type `std::vector` is passed to the automation for use in lambdas. In LoRa mode the variables snr and rssi are also available. ```yaml @@ -284,7 +284,7 @@ sx127x: ### As a Receiver The `sx127x` will output demodulated data onto DIO2 and -{{< docref "/components/remote_receiver" "remote_receiver" >}} should be used to receive +[remote_receiver](/components/remote_receiver/) should be used to receive this data on `pin` (must be wired to DIO2). ```yaml @@ -311,7 +311,7 @@ remote_receiver: ### As a Transmitter The `sx127x` expects raw data to be transmitted on DIO2, -{{< docref "/components/remote_transmitter" "remote_transmitter" >}} should be used to transmit +[remote_transmitter](/components/remote_transmitter/) should be used to transmit this data on `pin` (must be wired to DIO2). The `sx127x` mode must be set appropriately before and after transmit using the `on_transmit` and `on_complete` automations. @@ -350,7 +350,7 @@ button: ### As a Transmitter & Receiver The shared `pin` should to be set to open-drain with a pullup. In -{{< docref "/components/remote_transmitter" "remote_transmitter" >}} `eot_level` should be set to +[remote_transmitter](/components/remote_transmitter/) `eot_level` should be set to `false`. In addition to setting the `sx127x` mode in `on_transmit` / `on_complete` the pin should be driven low before `set_mode_tx` and pulled high / released before `set_mode_rx`. @@ -413,8 +413,7 @@ button: ## See Also -- {{< docref "index/" >}} -- {{< docref "/components/packet_transport/sx127x" >}} -- {{< docref "/components/remote_transmitter" >}} -- {{< docref "/components/remote_receiver" >}} -- {{< apiref "sx127x/sx127x.h" "sx127x/sx127x.h" >}} +- [SX127x Packet Transport Platform](/components/packet_transport/sx127x/) +- [Remote Transmitter](/components/remote_transmitter/) +- [Remote Receiver](/components/remote_receiver/) +- diff --git a/content/components/sx1509.md b/src/content/docs/components/sx1509.mdx similarity index 88% rename from content/components/sx1509.md rename to src/content/docs/components/sx1509.mdx index fdcf2e16a5..48ca4e5343 100644 --- a/content/components/sx1509.md +++ b/src/content/docs/components/sx1509.mdx @@ -1,12 +1,14 @@ --- description: "Instructions for setting up SX1509 16 channel I/O expander in ESPHome." title: "SX1509 16 channel I/O Expander with LED driver and keypad engine" -params: - seo: - description: Instructions for setting up SX1509 16 channel I/O expander in ESPHome. - image: sx1509.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import sx1509FullImg from './images/sx1509-full.jpg'; +import sx1509KeypadImg from './images/sx1509-keypad.jpg'; +import APIRef from '@components/APIRef.astro'; + ## Component/Hub The SX1509 component allows you to expand your I/O capabilities: @@ -23,7 +25,12 @@ And, with a built-in keypad engine, it can interface with up to 64 buttons set u Any option accepting a [Pin Schema](/guides/configuration-types#pin-schema) can theoretically be used, but some more complicated components that use the pin schema will not work. For example the I²C or SPI pins. -{{< img src="sx1509-full.jpg" alt="Image" caption="SX1509 16 channel I/O Expander." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry for the SX1509 device @@ -65,7 +72,12 @@ up to 8x8 matrix (i.e. 64 keys). - **on_key** (*Optional*, [Automation](/automations)): An automation to perform when a key has been pressed. The key is in a variable called `x`. -{{< img src="sx1509-keypad.jpg" alt="Image" caption="SX1509 pins for keypad setup (image from the datasheet)." width="80.0%" class="align-center" >}} +
    > [!NOTE] > Automatic handling of multiple keys (e.g. PIN code entry) is possible with the @@ -175,8 +187,8 @@ light: ## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} -- {{< docref "/components/light/monochromatic" >}} -- {{< docref "/components/key_collector" >}} -- {{< apiref "sx1509/sx1509.h" "sx1509/sx1509.h" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) +- [Monochromatic Light](/components/light/monochromatic/) +- [Key collector component](/components/key_collector/) +- diff --git a/content/components/syslog.md b/src/content/docs/components/syslog.mdx similarity index 84% rename from content/components/syslog.md rename to src/content/docs/components/syslog.mdx index 2a2750e453..a0ac132c8d 100644 --- a/content/components/syslog.md +++ b/src/content/docs/components/syslog.mdx @@ -1,13 +1,10 @@ --- description: "Instructions for setting up a syslog component in ESPHome" title: "Syslog Component" -params: - seo: - description: Instructions for setting up a syslog component in ESPHome --- The `syslog` component can be used to send ESPHome logs to a [syslog server](https://en.wikipedia.org/wiki/Syslog). -It requires both a {{< docref "udp" "UDP component" >}} and a {{< docref "time/index" "Time component" >}} to be configured. +It requires both a [UDP component](/components/udp/) and a [Time component](/components/time/) to be configured. ```yaml # Example configuration entry diff --git a/content/components/tca9548a.md b/src/content/docs/components/tca9548a.mdx similarity index 85% rename from content/components/tca9548a.md rename to src/content/docs/components/tca9548a.mdx index 661b584b57..ec502c112a 100644 --- a/content/components/tca9548a.md +++ b/src/content/docs/components/tca9548a.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up TCA9548A I²C multiplexer in ESPHome." title: "TCA9548A I²C Multiplexer" -params: - seo: - description: Instructions for setting up TCA9548A I²C multiplexer in ESPHome. - image: tca9548a.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The TCA9548A component allows you to use TCA9548A as a I²C multiplexer ([datasheet](https://www.ti.com/lit/ds/symlink/tca9548a.pdf), [AdaFruit](https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout)) in ESPHome. It uses [I²C Bus](/components/i2c) for communication. @@ -14,7 +13,14 @@ The TCA9548A component allows you to use TCA9548A as a I²C multiplexer Once configured, you can use any of the 8 channels (TCA9548A) as separated channels for your projects. Every Channel acts for all connected components as a virtual I²C Bus. -{{< img src="tca9548a.jpg" alt="Image" caption="tca9548a I2C Multiplexer." width="80.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -48,6 +54,6 @@ sensor: - **bus_id** (**Required**, [ID](/guides/configuration-types#id)): The id to use for this virtual I2C Bus. - **channel** (**Required**): The channel (0-7) to use for this virtual I2C Bus. -### See Also +## See Also - [I²C Bus](/components/i2c) diff --git a/content/components/tca9555.md b/src/content/docs/components/tca9555.mdx similarity index 88% rename from content/components/tca9555.md rename to src/content/docs/components/tca9555.mdx index 541f5bff88..a02b7de4bb 100644 --- a/content/components/tca9555.md +++ b/src/content/docs/components/tca9555.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up TCA9555 digital port expanders in ESPHome." title: "TCA9555 I/O Expander" -params: - seo: - description: Instructions for setting up TCA9555 digital port expanders in ESPHome. --- +import APIRef from '@components/APIRef.astro'; + The TCA9555 component allows you to use TCA955 I/O expanders ([datasheet](https://www.ti.com/lit/ds/symlink/tca9555.pdf)) in ESPHome. It uses [I²C Bus](/components/i2c) for communication. @@ -48,10 +47,10 @@ switch: - **mode** (*Optional*, string): A pin mode to set for the pin at. One of `INPUT` or `OUTPUT`. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [TCA9555 Arduino Library](https://github.com/RobTillaart/TCA9555) by [Rob Tillaart](https://github.com/RobTillaart) -- {{< apiref "TCA9555/TCA9555.h" "TCA9555/TCA9555.h" >}} +- diff --git a/content/components/text/_index.md b/src/content/docs/components/text/index.mdx similarity index 88% rename from content/components/text/_index.md rename to src/content/docs/components/text/index.mdx index 9641979e0c..08341eb007 100644 --- a/content/components/text/_index.md +++ b/src/content/docs/components/text/index.mdx @@ -1,11 +1,12 @@ --- description: "Instructions for setting up text components in ESPHome." title: "Text Component" -params: - seo: - description: Instructions for setting up text components in ESPHome. - image: folder-open.svg +sidebar: + label: "Text Component" --- +import APIRef from '@components/APIRef.astro'; +import APIClass from '@components/APIClass.astro'; + ESPHome has support for components to create a text entity. A text entity is like a `text_sensor` that can read a value from a device, but is useful when that value @@ -14,7 +15,7 @@ can be set by the user/frontend. > [!NOTE] > Home Assistant Core 2023.11 or higher is required for ESPHome text entities to work. -{{< anchor "config-text" >}} + ## Base Text Configuration @@ -47,7 +48,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - **mode** (**Required**, string): Defines how the text should be displayed in the frontend. @@ -69,7 +70,7 @@ MQTT Options: You can access the most recent state of the text in [lambdas](/automations/templates#config-lambda) using `id(text_id).state`. -{{< anchor "text-on_value" >}} + ### `on_value` @@ -89,7 +90,7 @@ text: Configuration variables: See [Automation](/automations). -{{< anchor "text-set_action" >}} + ### `text.set` Action @@ -107,7 +108,7 @@ Configuration variables: - **value** (**Required**, string, [templatable](/automations/templates)): The value to set the text to. -{{< anchor "text-lambda_calls" >}} + ### lambda calls @@ -132,5 +133,5 @@ advanced stuff (see the full API Reference for more info). ## See Also -- {{< apiref "Text" "text/text.h" >}} -- {{< apiref "TextCall" "text/text_call.h" >}} +- +- diff --git a/content/components/text/lvgl.md b/src/content/docs/components/text/lvgl.mdx similarity index 64% rename from content/components/text/lvgl.md rename to src/content/docs/components/text/lvgl.mdx index 26394a0eef..0124059449 100644 --- a/content/components/text/lvgl.md +++ b/src/content/docs/components/text/lvgl.mdx @@ -1,13 +1,9 @@ --- description: "Instructions for setting up an LVGL Text component." title: "LVGL Text" -params: - seo: - description: Instructions for setting up an LVGL Text component. - image: ../images/lvgl_c_txt.png --- -The `lvgl` text platform creates an editable text component from an LVGL textual widget and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +The `lvgl` text platform creates an editable text component from an LVGL textual widget and requires [LVGL](/components/lvgl/) to be configured. Supported widgets are [`label`](/components/lvgl/widgets#lvgl-widget-label) and [`textarea`](/components/lvgl/widgets#lvgl-widget-textarea). A single text supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome text component. @@ -30,13 +26,13 @@ text: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Label widget](/components/lvgl/widgets#lvgl-widget-label) - [Textarea widget](/components/lvgl/widgets#lvgl-widget-textarea) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/text_sensor/lvgl" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Text Sensor](/components/text_sensor/lvgl/) diff --git a/content/components/text/template.md b/src/content/docs/components/text/template.mdx similarity index 90% rename from content/components/text/template.md rename to src/content/docs/components/text/template.mdx index 5192797057..5ee1df5215 100644 --- a/content/components/text/template.md +++ b/src/content/docs/components/text/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template texts with ESPHome." title: "Template Text" -params: - seo: - description: Instructions for setting up template texts with ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` text platform allows you to create a text with templated values using [lambdas](/automations/templates#config-lambda). @@ -52,4 +50,4 @@ text: ## See Also - [Automation](/automations) -- {{< apiref "template/text/template_text.h" "template/text/template_text.h" >}} +- diff --git a/content/components/text_sensor/ble_client.md b/src/content/docs/components/text_sensor/ble_client.mdx similarity index 83% rename from content/components/text_sensor/ble_client.md rename to src/content/docs/components/text_sensor/ble_client.mdx index 9d567e5e7f..deb3349486 100644 --- a/content/components/text_sensor/ble_client.md +++ b/src/content/docs/components/text_sensor/ble_client.mdx @@ -1,17 +1,15 @@ --- description: "Fetch string values from BLE devices." title: "BLE Client Text Sensor" -params: - seo: - description: Fetch string values from BLE devices. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `ble_client` component is a text sensor platform that can query BLE devices for specific values of service characteristics. For more information on BLE services and characteristics, see -{{< docref "/components/ble_client" >}}. +[Ble Client](/components/ble_client/). ```yaml esp32_ble_tracker: @@ -47,7 +45,7 @@ Automations: ## BLE Sensor Automation -{{< anchor "ble_text_sensor-on_notify" >}} + ### `on_notify` @@ -58,7 +56,7 @@ A variable `x` of type `std::string` is passed to the automation for use in lamb ## See Also -- {{< docref "/components/ble_client" >}} -- {{< docref "/components/sensor/ble_client" >}} +- [BLE Client](/components/ble_client/) +- [BLE Client Sensor](/components/sensor/ble_client/) - [Sensor Filters](/components/sensor#sensor-filters) -- {{< apiref "ble_text_sensor/ble_text_sensor.h" "ble_text_sensor/ble_text_sensor.h" >}} +- diff --git a/content/components/text_sensor/ble_scanner.md b/src/content/docs/components/text_sensor/ble_scanner.mdx similarity index 70% rename from content/components/text_sensor/ble_scanner.md rename to src/content/docs/components/text_sensor/ble_scanner.mdx index d10d700589..b190a874f3 100644 --- a/content/components/text_sensor/ble_scanner.md +++ b/src/content/docs/components/text_sensor/ble_scanner.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up BLE text sensors for the ESP32." title: "ESP32 Bluetooth Low Energy Scanner" -params: - seo: - description: Instructions for setting up BLE text sensors for the ESP32. - image: bluetooth.svg --- +import APIRef from '@components/APIRef.astro'; + The `ble_scanner` text sensor platform lets you track reachable BLE devices. See the [BLE Tracker Configuration variables](/components/esp32_ble_tracker#config-esp32_ble_tracker) for instructions for setting up scan parameters. -The sensor platform is similar to {{< docref "/components/sensor/ble_rssi" >}} but in contrast to that platform, this text +The sensor platform is similar to [Ble Rssi](/components/sensor/ble_rssi/) but in contrast to that platform, this text sensor sends out all raw BLE scan information and does not filter devices. The data this sensor publishes is intended to be processed by the remote (for example an MQTT client) and sends @@ -21,7 +19,7 @@ the data in JSON format. > The BLE software stack on the ESP32 consumes a significant amount of RAM on the device. > > **Crashes are likely to occur** if you include too many additional components in your device's -> configuration. Memory-intensive components such as {{< docref "/components/voice_assistant" >}} and other +> configuration. Memory-intensive components such as [Voice Assistant](/components/voice_assistant/) and other > audio components are most likely to cause issues. ```yaml @@ -50,6 +48,6 @@ Example json log: ## See Also -- {{< docref "/components/esp32_ble_tracker" >}} -- {{< docref "/components/text_sensor" >}} -- {{< apiref "ble_scanner/ble_scanner.h" "ble_scanner/ble_scanner.h" >}} +- [ESP32 Bluetooth Low Energy Tracker Hub](/components/esp32_ble_tracker/) +- [Text Sensor Component](/components/text_sensor/) +- diff --git a/content/components/text_sensor/ethernet_info.md b/src/content/docs/components/text_sensor/ethernet_info.mdx similarity index 85% rename from content/components/text_sensor/ethernet_info.md rename to src/content/docs/components/text_sensor/ethernet_info.mdx index 389e40fab3..0af617d952 100644 --- a/content/components/text_sensor/ethernet_info.md +++ b/src/content/docs/components/text_sensor/ethernet_info.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up Ethernet info text sensors." title: "Ethernet Info Text Sensor" -params: - seo: - description: Instructions for setting up Ethernet info text sensors. - image: ethernet.svg --- +import APIRef from '@components/APIRef.astro'; + The `ethernet_info` text sensor platform exposes different Ethernet information via text sensors. @@ -49,5 +47,5 @@ text_sensor: ## See Also -- {{< docref "/components/ethernet" >}} -- {{< apiref "ethernet_info/ethernet_info_text_sensor.h" "ethernet_info/ethernet_info_text_sensor.h" >}} +- [Ethernet Component](/components/ethernet/) +- diff --git a/content/components/text_sensor/haier.md b/src/content/docs/components/text_sensor/haier.mdx similarity index 86% rename from content/components/text_sensor/haier.md rename to src/content/docs/components/text_sensor/haier.mdx index eed24f557c..3aeb609057 100644 --- a/content/components/text_sensor/haier.md +++ b/src/content/docs/components/text_sensor/haier.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up additional Text sensors for Haier climate devices." title: "Haier Climate Text Sensors" -params: - seo: - description: Instructions for setting up additional Text sensors for Haier climate devices. - image: haier.svg --- Additional sensors for Haier Climate device. **These sensors are supported only by the hOn protocol**. @@ -36,4 +32,4 @@ text_sensor: ## See Also -- {{< docref "/components/climate/haier" "Haier Climate" >}} +- [Haier Climate](/components/climate/haier/) diff --git a/content/components/text_sensor/homeassistant.md b/src/content/docs/components/text_sensor/homeassistant.mdx similarity index 77% rename from content/components/text_sensor/homeassistant.md rename to src/content/docs/components/text_sensor/homeassistant.mdx index 899552d0c2..4e0b73c287 100644 --- a/content/components/text_sensor/homeassistant.md +++ b/src/content/docs/components/text_sensor/homeassistant.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up Home Assistant text sensors with ESPHome that import states from your Home Assistant instance." title: "Home Assistant Text Sensor" -params: - seo: - description: Instructions for setting up Home Assistant text sensors with ESPHome that import states from your Home Assistant instance. - image: home-assistant.svg --- +import APIRef from '@components/APIRef.astro'; + The `homeassistant` text sensor platform allows you to create sensors that import -states from your Home Assistant instance using the {{< docref "/components/api" "native API" >}}. +states from your Home Assistant instance using the [native API](/components/api/). > [!NOTE] > Although you might not plan to *export* states from the node and you do not need an entity of the node @@ -46,4 +44,4 @@ text_sensor: - [Sensor Filters](/components/sensor#sensor-filters) - [Automation](/automations) -- {{< apiref "homeassistant/text_sensor/homeassistant_text_sensor.h" "homeassistant/text_sensor/homeassistant_text_sensor.h" >}} +- diff --git a/content/components/text_sensor/images/version-ui.png b/src/content/docs/components/text_sensor/images/version-ui.png similarity index 100% rename from content/components/text_sensor/images/version-ui.png rename to src/content/docs/components/text_sensor/images/version-ui.png diff --git a/content/components/text_sensor/_index.md b/src/content/docs/components/text_sensor/index.mdx similarity index 92% rename from content/components/text_sensor/_index.md rename to src/content/docs/components/text_sensor/index.mdx index 7f6e0c454b..1ce1441676 100644 --- a/content/components/text_sensor/_index.md +++ b/src/content/docs/components/text_sensor/index.mdx @@ -1,17 +1,17 @@ --- description: "Instructions for setting up text sensors that represent their state as a string of text." title: "Text Sensor Component" -params: - seo: - description: Instructions for setting up text sensors that represent their state as a string of text. - image: folder-open.svg +sidebar: + label: "Text Sensor Component" --- +import APIRef from '@components/APIRef.astro'; -Text sensors are a lot like normal {{< docref "/components/sensor/index" "sensors" >}}. + +Text sensors are a lot like normal [sensors](/components/sensor/). But where the "normal" sensors only represent sensors that output **numbers**, this component can represent any *text*. -{{< anchor "config-text_sensor" >}} + ## Base Text Sensor Configuration @@ -47,7 +47,7 @@ Configuration variables: Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. - See + See [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. @@ -62,7 +62,7 @@ Automations: - **on_raw_value** (*Optional*, [Automation](/automations)): An automation to perform when a new value is received that hasn't passed through any filters. See [`on_raw_value`](#text_sensor-on_raw_value). -{{< anchor "text_sensor-filters" >}} + ## Text Sensor Filters @@ -190,7 +190,7 @@ filters: You can access the most recent state of the sensor in [lambdas](/automations/templates#config-lambda) using `id(sensor_id).state`. -{{< anchor "text_sensor-on_value" >}} + ### `on_value` @@ -209,7 +209,7 @@ text_sensor: Configuration variables: See [Automation](/automations). -{{< anchor "text_sensor-on_raw_value" >}} + ### `on_raw_value` @@ -228,7 +228,7 @@ text_sensor: Configuration variables: See [Automation](/automations). -{{< anchor "text_sensor-state_condition" >}} + ## `text_sensor.state` Condition @@ -260,7 +260,7 @@ Configuration variables: > } > ``` -{{< anchor "text_sensor-lambda_calls" >}} + ### lambda calls @@ -284,4 +284,4 @@ advanced stuff (see the full API Reference for more info). ## See Also -- {{< apiref "text_sensor/text_sensor.h" "text_sensor/text_sensor.h" >}} +- diff --git a/content/components/text_sensor/key_collector.md b/src/content/docs/components/text_sensor/key_collector.mdx similarity index 72% rename from content/components/text_sensor/key_collector.md rename to src/content/docs/components/text_sensor/key_collector.mdx index d7f935a802..850d817618 100644 --- a/content/components/text_sensor/key_collector.md +++ b/src/content/docs/components/text_sensor/key_collector.mdx @@ -1,13 +1,12 @@ --- description: "Instructions for setting up key collector text sensors." title: "Key Collector Text Sensor" -params: - seo: - description: Instructions for setting up key collector text sensors. --- +import APIRef from '@components/APIRef.astro'; + The `key_collector` text sensor platform publishes the collected key sequence -when the {{< docref "/components/key_collector" "Key Collector" >}} component +when the [Key Collector](/components/key_collector/) component successfully completes a key collection (either by reaching `max_length` or when an `end_key` is pressed). @@ -39,6 +38,6 @@ text_sensor: ## See Also -- {{< docref "/components/key_collector" >}} -- {{< docref "/components/text_sensor" >}} -- {{< apiref "key_collector/text_sensor/key_collector_text_sensor.h" "key_collector/text_sensor/key_collector_text_sensor.h" >}} +- [Key collector component](/components/key_collector/) +- [Text Sensor Component](/components/text_sensor/) +- diff --git a/content/components/text_sensor/libretiny.md b/src/content/docs/components/text_sensor/libretiny.mdx similarity index 70% rename from content/components/text_sensor/libretiny.md rename to src/content/docs/components/text_sensor/libretiny.mdx index 8d96007711..675fdac5fc 100644 --- a/content/components/text_sensor/libretiny.md +++ b/src/content/docs/components/text_sensor/libretiny.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up LibreTiny text sensors." title: "LibreTiny Text Sensor" -params: - seo: - description: Instructions for setting up LibreTiny text sensors. - image: libretiny.svg --- +import APIRef from '@components/APIRef.astro'; + The `libretiny` text sensor platform exposes various LibreTiny core information via text sensors. @@ -25,5 +23,5 @@ text_sensor: ## See Also -- {{< docref "/components/libretiny" >}} -- {{< apiref "libretiny/lt_component.h" "libretiny/lt_component.h" >}} +- [LibreTiny Platform](/components/libretiny/) +- diff --git a/content/components/text_sensor/lvgl.md b/src/content/docs/components/text_sensor/lvgl.mdx similarity index 66% rename from content/components/text_sensor/lvgl.md rename to src/content/docs/components/text_sensor/lvgl.mdx index 57f5d877f6..8cc109c4e0 100644 --- a/content/components/text_sensor/lvgl.md +++ b/src/content/docs/components/text_sensor/lvgl.mdx @@ -1,14 +1,10 @@ --- description: "Instructions for setting up an LVGL Text Sensor." title: "LVGL Text Sensor" -params: - seo: - description: Instructions for setting up an LVGL Text Sensor. - image: ../images/lvgl_c_txt.png --- The `lvgl` text sensor platform creates a Text Sensor from an LVGL textual widget -and requires {{< docref "/components/lvgl/index" "LVGL" >}} to be configured. +and requires [LVGL](/components/lvgl/) to be configured. Supported widgets are [`label`](/components/lvgl/widgets#lvgl-widget-label) and [`textarea`](/components/lvgl/widgets#lvgl-widget-textarea). A single text sensor supports only a single widget; in other words, it's not possible to have multiple widgets associated with a single ESPHome text sensor component. @@ -31,13 +27,13 @@ text_sensor: ## See Also -- {{< docref "/components/lvgl/index" "LVGL Main component" >}} +- [LVGL Main component](/components/lvgl/) - [Label widget](/components/lvgl/widgets#lvgl-widget-label) - [Textarea widget](/components/lvgl/widgets#lvgl-widget-textarea) -- {{< docref "/components/binary_sensor/lvgl" >}} -- {{< docref "/components/sensor/lvgl" >}} -- {{< docref "/components/number/lvgl" >}} -- {{< docref "/components/switch/lvgl" >}} -- {{< docref "/components/light/lvgl" >}} -- {{< docref "/components/select/lvgl" >}} -- {{< docref "/components/text/lvgl" >}} +- [LVGL Binary Sensor](/components/binary_sensor/lvgl/) +- [LVGL Sensor](/components/sensor/lvgl/) +- [LVGL Number](/components/number/lvgl/) +- [LVGL Switch](/components/switch/lvgl/) +- [LVGL Light](/components/light/lvgl/) +- [LVGL Select](/components/select/lvgl/) +- [LVGL Text](/components/text/lvgl/) diff --git a/content/components/text_sensor/modbus_controller.md b/src/content/docs/components/text_sensor/modbus_controller.mdx similarity index 85% rename from content/components/text_sensor/modbus_controller.md rename to src/content/docs/components/text_sensor/modbus_controller.mdx index e2d0d286c2..b2fb90ba7c 100644 --- a/content/components/text_sensor/modbus_controller.md +++ b/src/content/docs/components/text_sensor/modbus_controller.mdx @@ -1,13 +1,10 @@ --- description: "Instructions for setting up a modbus_controller modbus text sensor." title: "Modbus Controller Text Sensor" -params: - seo: - description: Instructions for setting up a modbus_controller modbus text sensor. --- The `modbus_controller` sensor platform creates a text sensor from a modbus_controller component -and requires {{< docref "/components/modbus_controller" >}} to be configured. +and requires [Modbus Controller](/components/modbus_controller/) to be configured. ## Configuration variables @@ -43,7 +40,7 @@ and requires {{< docref "/components/modbus_controller" >}} to be configured. Parameters passed into the lambda - **x** (std:string): The parsed value of the modbus data according to **raw_encode** - - **data** (std::vector): vector containing the complete raw modbus response bytes for this sensor + - **data** (`std::vector`): vector containing the complete raw modbus response bytes for this sensor *note:* because the response contains data for all registers in the same range you have to use `data[item->offset]` to get the first response byte for your sensor. - **item** (const pointer to a SensorItem derived object): The sensor object itself. @@ -82,13 +79,13 @@ text_sensor: ## See Also -- {{< docref "/components/modbus" >}} -- {{< docref "/components/modbus_controller" >}} -- {{< docref "/components/sensor/modbus_controller" >}} -- {{< docref "/components/binary_sensor/modbus_controller" >}} -- {{< docref "/components/output/modbus_controller" >}} -- {{< docref "/components/switch/modbus_controller" >}} -- {{< docref "/components/number/modbus_controller" >}} -- {{< docref "/components/select/modbus_controller" >}} -- {{< docref "/components/text_sensor/modbus_controller" >}} -- +- [Modbus Component](/components/modbus/) +- [Modbus Controller](/components/modbus_controller/) +- [Modbus Controller Sensor](/components/sensor/modbus_controller/) +- [Modbus Controller Binary Sensor](/components/binary_sensor/modbus_controller/) +- [Modbus Controller Output](/components/output/modbus_controller/) +- [Modbus Controller Switch](/components/switch/modbus_controller/) +- [Modbus Controller Number](/components/number/modbus_controller/) +- [Modbus Controller Select](/components/select/modbus_controller/) +- [Modbus Controller Text Sensor](/components/text_sensor/modbus_controller/) +- [https://www.modbustools.com/modbus.html](https://www.modbustools.com/modbus.html) diff --git a/content/components/text_sensor/mqtt_subscribe.md b/src/content/docs/components/text_sensor/mqtt_subscribe.mdx similarity index 82% rename from content/components/text_sensor/mqtt_subscribe.md rename to src/content/docs/components/text_sensor/mqtt_subscribe.mdx index bc7b5a2e59..3e6f484fa0 100644 --- a/content/components/text_sensor/mqtt_subscribe.md +++ b/src/content/docs/components/text_sensor/mqtt_subscribe.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up MQTT Subscribe text sensors that show the content of a MQTT message as their state." title: "MQTT Subscribe Text Sensor" -params: - seo: - description: Instructions for setting up MQTT Subscribe text sensors that show the content of a MQTT message as their state. - image: mqtt.png --- +import APIRef from '@components/APIRef.astro'; + The `mqtt_subscribe` text sensor platform allows you to get external data into ESPHome. The sensor will subscribe to messages on the given MQTT topic and save the most recent value @@ -49,4 +47,4 @@ display: ## See Also -- {{< apiref "mqtt_subscribe/text_sensor/mqtt_subscribe_text_sensor.h" "mqtt_subscribe/text_sensor/mqtt_subscribe_text_sensor.h" >}} +- diff --git a/content/components/text_sensor/nextion.md b/src/content/docs/components/text_sensor/nextion.mdx similarity index 86% rename from content/components/text_sensor/nextion.md rename to src/content/docs/components/text_sensor/nextion.mdx index a7df34226f..d762586e00 100644 --- a/content/components/text_sensor/nextion.md +++ b/src/content/docs/components/text_sensor/nextion.mdx @@ -1,19 +1,17 @@ --- description: "Instructions for setting up Nextion text sensor." title: "Nextion Text Sensor Component" -params: - seo: - description: Instructions for setting up Nextion text sensor. - image: nextion.jpg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "nextion_text_sensor" >}} + + The `nextion` text sensor platform supports text strings. It can be a component or variable in the Nextion display. It is best to set the components vscope to global in the Nextion Editor. This way the component will be available if the page is shown or not. -See {{< docref "/components/display/nextion" >}} for setting up the display +See [Nextion](/components/display/nextion/) for setting up the display ```yaml # Example configuration entry @@ -54,7 +52,7 @@ should be prefixed with the page name (page0/page1 or whatever you have changed *Example:* `component_name: page0.text0` -{{< anchor "text_sensor-nextion-publish_action" >}} + ## `text_sensor.nextion.publish` Action @@ -97,28 +95,28 @@ Configuration variables: > [!NOTE] > This action can also be written in lambdas. See [Lambda Calls](#nextion_text_sensor_lambda_calls) -{{< anchor "nextion_text_sensor_lambda_calls" >}} + ### Lambda Calls From [lambdas](/automations/templates#config-lambda), you can call several methods to access -some more advanced functions (see the full {{< apiref "nextion/text_sensor/nextion_textsensor.h" "nextion/text_sensor/nextion_textsensor.h" >}} for more info). +some more advanced functions (see the full for more info). -{{< anchor "nextion_text_sensor_set_state" >}} + - `set_state(bool value, bool publish, bool send_to_nextion)` : Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion. -{{< anchor "nextion_text_sensor_update" >}} + - `update()` : Poll from the Nextion -{{< anchor "nextion_text_sensor_settings" >}} + - `set_background_color(Color color)` : Sets the background color to **Color** - `set_foreground_color(Color color)` : Sets the background color to **Color** - `set_visible(bool visible)` : Sets visible or not. If set to false, no updates will be sent to the component -{{< anchor "nextion_text_sensor_how_things_update" >}} + ## How things Update @@ -141,7 +139,7 @@ Using the above yaml example: > [!NOTE] > No updates will be sent to the Nextion if it is sleeping. Once it wakes, the components will be updated. If a component is invisible, `visible(false)`, then it won't update until it is set to be visible. -{{< anchor "nextion_custom_text_sensor_protocol" >}} + ## Nextion Custom Text Sensor Protocol @@ -167,6 +165,6 @@ printh FF FF FF ## See Also -- {{< docref "/components/display/nextion" >}} -- {{< docref "index/" >}} -- {{< apiref "nextion/text_sensor/nextion_textsensor.h" "nextion/text_sensor/nextion_textsensor.h" >}} +- [Nextion TFT LCD Display](/components/display/nextion/) +- [Text Sensor Component](/components/text_sensor/) +- diff --git a/content/components/text_sensor/openthread_info.md b/src/content/docs/components/text_sensor/openthread_info.mdx similarity index 90% rename from content/components/text_sensor/openthread_info.md rename to src/content/docs/components/text_sensor/openthread_info.mdx index 40acf744cc..6d4f0e80ac 100644 --- a/content/components/text_sensor/openthread_info.md +++ b/src/content/docs/components/text_sensor/openthread_info.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up OpenThread info text sensors." title: "OpenThread Info Text Sensor" -params: - seo: - description: Instructions for setting up OpenThread info text sensors. - image: openthread.png --- +import APIRef from '@components/APIRef.astro'; + The `openthread_info` text sensor platform exposes different OpenThread network information via text sensors. @@ -76,6 +74,6 @@ text_sensor: ## See Also -- {{< docref "/components/openthread" >}} -- {{< docref "/components/text_sensor/index" >}} -- {{< apiref "openthread_info/openthread_info_text_sensor.h" "openthread_info/openthread_info_text_sensor.h" >}} +- [OpenThread Component](/components/openthread/) +- [Text Sensor Component](/components/text_sensor/) +- diff --git a/content/components/text_sensor/template.md b/src/content/docs/components/text_sensor/template.mdx similarity index 90% rename from content/components/text_sensor/template.md rename to src/content/docs/components/text_sensor/template.mdx index 64bdccb9ea..045c14f858 100644 --- a/content/components/text_sensor/template.md +++ b/src/content/docs/components/text_sensor/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template text sensors in ESPHome" title: "Template Text Sensor" -params: - seo: - description: Instructions for setting up template text sensors in ESPHome - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` text sensor platform allows you to create a text sensor with templated values using [lambdas](/automations/templates#config-lambda). @@ -37,7 +35,7 @@ Possible return values for the lambda: - All other options from [Text Sensor](/components/text_sensor#config-text_sensor). -{{< anchor "text_sensor-template-publish_action" >}} + ## `text_sensor.template.publish` Action @@ -113,6 +111,6 @@ text_sensor: ## See Also -- {{< docref "/components/text_sensor" >}} +- [Text Sensor Component](/components/text_sensor/) - [Automation](/automations) -- {{< apiref "template/text_sensor/template_text_sensor.h" "template/text_sensor/template_text_sensor.h" >}} +- diff --git a/content/components/text_sensor/tuya.md b/src/content/docs/components/text_sensor/tuya.mdx similarity index 61% rename from content/components/text_sensor/tuya.md rename to src/content/docs/components/text_sensor/tuya.mdx index 39c728e761..5e001a7ca1 100644 --- a/content/components/text_sensor/tuya.md +++ b/src/content/docs/components/text_sensor/tuya.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up a Tuya device sensor." title: "Tuya Text Sensor" -params: - seo: - description: Instructions for setting up a Tuya device sensor. - image: tuya.png --- +import APIRef from '@components/APIRef.astro'; + The `tuya` text sensor platform creates a sensor from a tuya component -and requires {{< docref "/components/tuya" >}} to be configured. +and requires [Tuya](/components/tuya/) to be configured. You can create the text sensor as follows: @@ -27,6 +25,6 @@ text_sensor: ## See Also -- {{< docref "/components/tuya" >}} -- {{< docref "/components/text_sensor" >}} -- {{< apiref "tuya/text_sensor/tuya_text_sensor.h" "tuya/text_sensor/tuya_text_sensor.h" >}} +- [Tuya MCU](/components/tuya/) +- [Text Sensor Component](/components/text_sensor/) +- diff --git a/content/components/text_sensor/uptime.md b/src/content/docs/components/text_sensor/uptime.mdx similarity index 89% rename from content/components/text_sensor/uptime.md rename to src/content/docs/components/text_sensor/uptime.mdx index c4b9440207..0971a889af 100644 --- a/content/components/text_sensor/uptime.md +++ b/src/content/docs/components/text_sensor/uptime.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a text sensor that tracks the uptime of the ESP." title: "Uptime Text Sensor" -params: - seo: - description: Instructions for setting up a text sensor that tracks the uptime of the ESP. - image: timer.svg --- +import APIRef from '@components/APIRef.astro'; + The `uptime` text sensor provides a human-readable representation the time since. The elements can be separated by a custom string, and more significant elements will be omitted if they are zero. For example, @@ -40,6 +38,6 @@ The resolution of the reported uptime will be determined by the update interval. ## See Also -- {{< docref "/components/sensor/uptime" >}} +- [Uptime Sensor](/components/sensor/uptime/) - [Text Sensor Filters](/components/text_sensor#text_sensor-filters) -- {{< apiref "uptime/uptime_text_sensor.h" "uptime/uptime_text_sensor.h" >}} +- diff --git a/content/components/text_sensor/version.md b/src/content/docs/components/text_sensor/version.mdx similarity index 76% rename from content/components/text_sensor/version.md rename to src/content/docs/components/text_sensor/version.mdx index dd26ad7d9d..c4c3711f9d 100644 --- a/content/components/text_sensor/version.md +++ b/src/content/docs/components/text_sensor/version.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up version text sensors." title: "Version Text Sensor" -params: - seo: - description: Instructions for setting up version text sensors. - image: new-box.svg --- +import { Image } from 'astro:assets'; +import versionUiImg from './images/version-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `version` text sensor platform exposes the ESPHome version the firmware was compiled against as a text sensor. -{{< img src="version-ui.png" alt="Image" class="align-center" >}} + ```yaml # Example configuration entry @@ -40,4 +40,4 @@ This will, for example, change the output of the sensor from: ## See Also -- {{< apiref "version/version_text_sensor.h" "version/version_text_sensor.h" >}} +- diff --git a/content/components/text_sensor/wifi_info.md b/src/content/docs/components/text_sensor/wifi_info.mdx similarity index 89% rename from content/components/text_sensor/wifi_info.md rename to src/content/docs/components/text_sensor/wifi_info.mdx index 95d3fd0ca2..c50739318d 100644 --- a/content/components/text_sensor/wifi_info.md +++ b/src/content/docs/components/text_sensor/wifi_info.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up WiFi info text sensors." title: "WiFi Info Text Sensor" -params: - seo: - description: Instructions for setting up WiFi info text sensors. - image: network-wifi.svg --- +import APIRef from '@components/APIRef.astro'; + The `wifi_info` text sensor platform exposes different WiFi information via text sensors. @@ -68,6 +66,6 @@ text_sensor: ## See Also -- {{< docref "/components/wifi" >}} -- {{< docref "/components/sensor/wifi_signal" >}} -- {{< apiref "wifi_info/wifi_info_text_sensor.h" "wifi_info/wifi_info_text_sensor.h" >}} +- [WiFi Component](/components/wifi/) +- [WiFi Signal Sensor](/components/sensor/wifi_signal/) +- diff --git a/content/components/text_sensor/wl_134.md b/src/content/docs/components/text_sensor/wl_134.mdx similarity index 76% rename from content/components/text_sensor/wl_134.md rename to src/content/docs/components/text_sensor/wl_134.mdx index 434b797439..052c16417d 100644 --- a/content/components/text_sensor/wl_134.md +++ b/src/content/docs/components/text_sensor/wl_134.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up WL-134 text sensors." title: "WL-134 Pet Tag Sensor" -params: - seo: - description: Instructions for setting up WL-134 text sensors. - image: fingerprint.svg --- +import APIRef from '@components/APIRef.astro'; + The `wl_134` text sensor platform exposes the last read pet tag as text sensor. @@ -23,4 +21,4 @@ text_sensor: ## See Also -- {{< apiref "wl_134/wl_134.h" "wl_134/wl_134.h" >}} +- diff --git a/content/components/time/bm8563.md b/src/content/docs/components/time/bm8563.mdx similarity index 87% rename from content/components/time/bm8563.md rename to src/content/docs/components/time/bm8563.mdx index 0ed84e9769..005b94c94c 100644 --- a/content/components/time/bm8563.md +++ b/src/content/docs/components/time/bm8563.mdx @@ -3,7 +3,7 @@ description: "BM8563 Time Source" title: "BM8563 Time Source" --- -You first need to set up the {{< docref "/components/i2c" "I2C" >}} component. +You first need to set up the [I2C](/components/i2c/) component. ```yaml # Example configuration entry @@ -17,7 +17,7 @@ time: - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x51`. - All other options from [Base Time Configuration](/components/time#base_time_config). -{{< anchor "bm8563-write_time_action" >}} + ## `bm8563.write_time` Action @@ -35,7 +35,7 @@ on_...: id: bm8563_time ``` -{{< anchor "bm8563-read_time_action" >}} + ## `bm8563.read_time` Action @@ -55,7 +55,7 @@ on_...: id: bm8563_time ``` -{{< anchor "bm8563-start_timer_action" >}} + ## `bm8563.start_timer` Action @@ -77,7 +77,7 @@ Configuration options: - **duration** (**Required**, [Time](/guides/configuration-types#config-time)): The time duration for the timer. - **id** (*Optional*, [ID](/guides/configuration-types#config-id)): Manually specify the ID of the BM8563 component if you have multiple components. -{{< anchor "bm8563-config_example" >}} + ## Full Configuration Example @@ -109,6 +109,6 @@ time: ## See Also -- {{< docref "/components/i2c" "I2C Bus" >}} -- {{< docref "/components/time" "Time Component" >}} -- {{< docref "/components/deep_sleep" "Deep Sleep Component" >}} +- [I2C Bus](/components/i2c/) +- [Time Component](/components/time/) +- [Deep Sleep Component](/components/deep_sleep/) diff --git a/content/components/time/ds1307.md b/src/content/docs/components/time/ds1307.mdx similarity index 91% rename from content/components/time/ds1307.md rename to src/content/docs/components/time/ds1307.mdx index 42a43bc023..5ee5d06342 100644 --- a/content/components/time/ds1307.md +++ b/src/content/docs/components/time/ds1307.mdx @@ -3,7 +3,7 @@ description: "DS1307 Time Source" title: "DS1307 Time Source" --- -You first need to set up the {{< docref "/components/i2c" "I2C" >}} component. +You first need to set up the [I2C](/components/i2c/) component. ```yaml # Example configuration entry @@ -17,7 +17,7 @@ time: - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x68`. - All other options from [Base Time Configuration](/components/time#base_time_config). -{{< anchor "ds1307-write_time_action" >}} + ## `ds1307.write_time` Action @@ -35,7 +35,7 @@ on_...: id: ds1307_time ``` -{{< anchor "ds1307-read_time_action" >}} + ## `ds1307.read_time` Action @@ -55,7 +55,7 @@ on_...: id: ds1307_time ``` -{{< anchor "ds1307-config_example" >}} + ## Full Configuration Example @@ -84,5 +84,3 @@ time: # ... and update the RTC when the synchronization was successful ds1307.write_time: ``` - -## See Also diff --git a/content/components/time/gps.md b/src/content/docs/components/time/gps.mdx similarity index 73% rename from content/components/time/gps.md rename to src/content/docs/components/time/gps.mdx index 13125b2c65..281a155f0a 100644 --- a/content/components/time/gps.md +++ b/src/content/docs/components/time/gps.mdx @@ -3,7 +3,7 @@ description: "GPS Time Source" title: "GPS Time Source" --- -You first need to set up the {{< docref "/components/gps" "GPS" >}} component. +You first need to set up the [GPS](/components/gps/) component. ```yaml # Example configuration entry @@ -15,5 +15,3 @@ time: ## Configuration variables - All options from [Base Time Configuration](/components/time#base_time_config). - -## See Also diff --git a/content/components/time/homeassistant.md b/src/content/docs/components/time/homeassistant.mdx similarity index 87% rename from content/components/time/homeassistant.md rename to src/content/docs/components/time/homeassistant.mdx index 30301ce6e2..541be9e0ba 100644 --- a/content/components/time/homeassistant.md +++ b/src/content/docs/components/time/homeassistant.mdx @@ -4,7 +4,7 @@ title: "Home Assistant Time Source" --- The preferred way to get time in ESPHome is using Home Assistant. -With the `homeassistant` time platform, the {{< docref "/components/api" "native API" >}} connection +With the `homeassistant` time platform, the [native API](/components/api/) connection to Home Assistant will be used to periodically synchronize the current time. > [!NOTE] @@ -22,5 +22,3 @@ time: ## Configuration variables - All options from [Base Time Configuration](/components/time#base_time_config). - -## See Also diff --git a/content/components/time/host.md b/src/content/docs/components/time/host.mdx similarity index 89% rename from content/components/time/host.md rename to src/content/docs/components/time/host.mdx index 6c2816fb8a..85233091e1 100644 --- a/content/components/time/host.md +++ b/src/content/docs/components/time/host.mdx @@ -17,4 +17,4 @@ All options from [Base Time Configuration](/components/time#base_time_config). ## See Also -- {{< docref "/components/host" >}} +- [Host Platform](/components/host/) diff --git a/content/components/time/_index.md b/src/content/docs/components/time/index.mdx similarity index 97% rename from content/components/time/_index.md rename to src/content/docs/components/time/index.mdx index d6891a3b68..1c5a20cd32 100644 --- a/content/components/time/_index.md +++ b/src/content/docs/components/time/index.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up real time clock sources in ESPHome like network based time." title: "Time Component" -params: - seo: - description: Instructions for setting up real time clock sources in ESPHome like network based time. - image: clock-outline.svg +sidebar: + label: "Time Component" --- +import APIRef from '@components/APIRef.astro'; + The `time` component allows you to set up real time clock time sources for ESPHome. You can then get the current time in [lambdas](/automations/templates#config-lambda). -{{< anchor "base_time_config" >}} + ## Base Time Configuration @@ -34,7 +34,7 @@ All time configuration schemas inherit these options. - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): How often to synchronize the device time from the source. Defaults to `15min`. -{{< anchor "time-has_time_condition" >}} + ### `time.has_time` Condition @@ -56,7 +56,7 @@ lambda: |- } ``` -{{< anchor "time-on_time" >}} + ### `on_time` Trigger @@ -220,7 +220,7 @@ In the `seconds:`, `minutes:`, ... fields you can use the following operators: > despite allowing the use of similar `crontab` syntax. Similarly, triggers on days of the month that do not exist > ("every 31st of the month") will be skipped when those dates do not exist. -{{< anchor "time-on_time_sync" >}} + ### `on_time_sync` Trigger @@ -317,4 +317,4 @@ with the current time representation of that format option. ## See Also -- {{< apiref "time/real_time_clock.h" "time/real_time_clock.h" >}} +- diff --git a/content/components/time/pcf85063.md b/src/content/docs/components/time/pcf85063.mdx similarity index 91% rename from content/components/time/pcf85063.md rename to src/content/docs/components/time/pcf85063.mdx index 3455de586b..b5898fcd7e 100644 --- a/content/components/time/pcf85063.md +++ b/src/content/docs/components/time/pcf85063.mdx @@ -3,7 +3,7 @@ description: "PCF85063 Time Source" title: "PCF85063 Time Source" --- -You first need to set up the {{< docref "/components/i2c" "I2C" >}} component. +You first need to set up the [I2C](/components/i2c/) component. ```yaml # Example configuration entry @@ -17,7 +17,7 @@ time: - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x51`. - All other options from [Base Time Configuration](/components/time#base_time_config). -{{< anchor "pcf85063-write_time_action" >}} + ## `pcf85063.write_time` Action @@ -35,7 +35,7 @@ on_...: id: pcf85063_time ``` -{{< anchor "pcf85063-read_time_action" >}} + ## `pcf85063.read_time` Action @@ -55,7 +55,7 @@ on_...: id: pcf85063_time ``` -{{< anchor "pcf85063-config_example" >}} + ## Full Configuration Example @@ -84,5 +84,3 @@ time: # ... and update the RTC when the synchronization was successful pcf85063.write_time: ``` - -## See Also diff --git a/content/components/time/pcf8563.md b/src/content/docs/components/time/pcf8563.mdx similarity index 91% rename from content/components/time/pcf8563.md rename to src/content/docs/components/time/pcf8563.mdx index 22aa5f946a..71223a374a 100644 --- a/content/components/time/pcf8563.md +++ b/src/content/docs/components/time/pcf8563.mdx @@ -3,7 +3,7 @@ description: "PCF8563 Time Source" title: "PCF8563 Time Source" --- -You first need to set up the {{< docref "/components/i2c" "I2C" >}} component. +You first need to set up the [I2C](/components/i2c/) component. ```yaml # Example configuration entry @@ -17,7 +17,7 @@ time: - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0xA3`. - All other options from [Base Time Configuration](/components/time#base_time_config). -{{< anchor "pcf8563-write_time_action" >}} + ## `pcf8563.write_time` Action @@ -35,7 +35,7 @@ on_...: id: pcf8563_time ``` -{{< anchor "pcf8563-read_time_action" >}} + ## `pcf8563.read_time` Action @@ -55,7 +55,7 @@ on_...: id: pcf8563_time ``` -{{< anchor "pcf8563-config_example" >}} + ## Full Configuration Example @@ -84,5 +84,3 @@ time: # ... and update the RTC when the synchronization was successful pcf8563.write_time: ``` - -## See Also diff --git a/content/components/time/rx8130.md b/src/content/docs/components/time/rx8130.mdx similarity index 91% rename from content/components/time/rx8130.md rename to src/content/docs/components/time/rx8130.mdx index 47bf1a9896..d6ea5976b1 100644 --- a/content/components/time/rx8130.md +++ b/src/content/docs/components/time/rx8130.mdx @@ -3,7 +3,7 @@ description: "RX8130 Time Source" title: "RX8130 Time Source" --- -You first need to set up the {{< docref "/components/i2c" "I2C" >}} component. +You first need to set up the [I2C](/components/i2c/) component. ```yaml # Example configuration entry @@ -17,7 +17,7 @@ time: - **address** (*Optional*, int): Manually specify the I²C address of the RTC. Defaults to `0x32`. - All other options from [Base Time Configuration](/components/time#base_time_config). -{{< anchor "rx8130-write_time_action" >}} + ## `rx8130.write_time` Action @@ -35,7 +35,7 @@ on_...: id: rx8130_time ``` -{{< anchor "rx8130-read_time_action" >}} + ## `rx8130.read_time` Action @@ -55,7 +55,7 @@ on_...: id: rx8130_time ``` -{{< anchor "rx8130-config_example" >}} + ## Full Configuration Example @@ -85,5 +85,3 @@ time: # ... and update the RTC when the synchronization was successful rx8130.write_time: ``` - -## See Also diff --git a/content/components/time/sntp.md b/src/content/docs/components/time/sntp.mdx similarity index 98% rename from content/components/time/sntp.md rename to src/content/docs/components/time/sntp.mdx index 8531a1e79b..80e795659e 100644 --- a/content/components/time/sntp.md +++ b/src/content/docs/components/time/sntp.mdx @@ -31,5 +31,3 @@ time: > `on_time_sync` only once when it detects that the system clock has been set, even if the update was not done by the > SNTP implementation! This must be taken into consideration when SNTP is used together with other real time components, > where another time source could update the time before SNTP synchronizes. - -## See Also diff --git a/content/components/time/zigbee.md b/src/content/docs/components/time/zigbee.mdx similarity index 65% rename from content/components/time/zigbee.md rename to src/content/docs/components/time/zigbee.mdx index 9c966d1d0e..bd2651231b 100644 --- a/content/components/time/zigbee.md +++ b/src/content/docs/components/time/zigbee.mdx @@ -8,7 +8,7 @@ When the device joins the network, it requests the current time from the coordin This component is only available on **nRF52** platforms. -You first need to set up the {{< docref "/components/zigbee" "Zigbee" >}} component. +You first need to set up the [Zigbee](/components/zigbee/) component. ```yaml # Example configuration entry @@ -18,11 +18,11 @@ time: ## Configuration variables -- **update_interval** (*Optional*, {{< docref "/guides/configuration-types" "Time" >}}): +- **update_interval** (*Optional*, [Time](/guides/configuration-types/)): How often to update the time attribute. Defaults to `1s`. - All other options from [Base Time Configuration](/components/time#base_time_config). ## See Also -- {{< docref "/components/zigbee" "Zigbee Component" >}} -- {{< docref "/components/time/" "Time Component" >}} +- [Zigbee Component](/components/zigbee/) +- [Time Component](/components/time/) diff --git a/content/components/tinyusb.md b/src/content/docs/components/tinyusb.mdx similarity index 88% rename from content/components/tinyusb.md rename to src/content/docs/components/tinyusb.mdx index 66c69f1de6..8457af7b44 100644 --- a/content/components/tinyusb.md +++ b/src/content/docs/components/tinyusb.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up TinyUSB in ESPHome" title: "TinyUSB" -params: - seo: - description: Instructions for setting up TinyUSB in ESPHome - image: usb.svg --- +import APIRef from '@components/APIRef.astro'; + The `tinyusb` component implements a foundation for USB device functionality. It is currently supported on the following ESP32 microcontroller variants: @@ -21,7 +19,7 @@ to a USB host. > This component: > > - does **not** implement any specific device functionality; it is simply a foundation for other components to do so. -> - cannot be used with the {{< docref "/components/usb_host" >}}; operation as both a host and a device simultaneously +> - cannot be used with the [Usb Host](/components/usb_host/); operation as both a host and a device simultaneously > is not possible. ```yaml @@ -65,4 +63,4 @@ A more complete list can be found [here](https://github.com/brookebasile/USB-lan ## See Also - [TinyUSB Documentation](https://docs.tinyusb.org/) -- {{< apiref "tinyusb/tinyusb_component.h" "tinyusb/tinyusb_component.h" >}} +- diff --git a/content/components/tm1651.md b/src/content/docs/components/tm1651.mdx similarity index 87% rename from content/components/tm1651.md rename to src/content/docs/components/tm1651.mdx index 3a372bf039..697e93105f 100644 --- a/content/components/tm1651.md +++ b/src/content/docs/components/tm1651.mdx @@ -1,19 +1,18 @@ --- description: "Instructions for setting up TM1651 Battery Display." title: "TM1651 Battery Display" -params: - seo: - description: Instructions for setting up TM1651 Battery Display. - image: tm1651_battery_display.jpg --- -{{< anchor "tm1651" >}} +import { Image } from 'astro:assets'; +import tm1651BatteryDisplayImg from './images/tm1651-battery-display.jpg'; + + The `tm1651` display platform allows you to use battery display units based on the TM1651 chip such as [this one](https://www.aliexpress.com/item/32811491559.html) with ESPHome. This component supports the level and brightness settings. All updates can be made via lambda expressions. -{{< img src="tm1651-battery-display.jpg" alt="Image" width="70.0%" class="align-center" >}} + ```yaml tm1651: @@ -30,7 +29,7 @@ tm1651: ## Actions -{{< anchor "tm1651-set_level_percent_action" >}} + ### `tm1651.set_level_percent` Action @@ -49,7 +48,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the TM1651. - **level_percent** (**Required**, [templatable](/automations/templates), int): Level from 0 to 100 -{{< anchor "tm1651-set_level_action" >}} + ### `tm1651.set_level` Action @@ -67,7 +66,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the TM1651. - **level** (**Required**, [templatable](/automations/templates), int): Level from 0 to 7 -{{< anchor "tm1651-set_brightness_action" >}} + ### `tm1651.set_brightness` Action @@ -86,7 +85,7 @@ on_...: - **brightness** (**Required**, [templatable](/automations/templates), int): There is three levels of brightness (`1`, `2` or `3` ) from lowest to highest brightness. -{{< anchor "tm1651-turn_off" >}} + ### `tm1651.turn_off` Action @@ -102,7 +101,7 @@ on_...: - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the TM1651. -{{< anchor "tm1651-turn_on" >}} + ### `tm1651.turn_on` Action @@ -138,7 +137,3 @@ api: - lambda: |- id(tm1651_battery).set_brightness(brightness); ``` - -## See Also - -- {{< docref "index/" >}} diff --git a/content/components/touchscreen/axs15231.md b/src/content/docs/components/touchscreen/axs15231.mdx similarity index 81% rename from content/components/touchscreen/axs15231.md rename to src/content/docs/components/touchscreen/axs15231.mdx index 0c4cce85be..1e128d2b89 100644 --- a/content/components/touchscreen/axs15231.md +++ b/src/content/docs/components/touchscreen/axs15231.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up AXS15231 touch screen controller with ESPHome" title: "AXS15231 Touch Screen Controller" -params: - seo: - description: Instructions for setting up AXS15231 touch screen controller with ESPHome - image: esp32_s3_box_3.png --- +import APIRef from '@components/APIRef.astro'; + The `axs15231` touchscreen platform allows using the touch screen controllers based on the AXS15231 chip with ESPHome. An [I²C](/components/i2c) bus is required to be set up in your configuration for this touchscreen to work. @@ -29,4 +27,4 @@ touchscreen: ## See Also -- {{< apiref "axs15231/touchscreen/axs15231.h" "axs15231/touchscreen/axs15231.h" >}} +- diff --git a/content/components/touchscreen/chsc6x.md b/src/content/docs/components/touchscreen/chsc6x.mdx similarity index 78% rename from content/components/touchscreen/chsc6x.md rename to src/content/docs/components/touchscreen/chsc6x.mdx index db941dc053..cf2eacac9f 100644 --- a/content/components/touchscreen/chsc6x.md +++ b/src/content/docs/components/touchscreen/chsc6x.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up chsc6x touch screen controller with ESPHome" title: "chsc6x Touch Screen Controller" -params: - seo: - description: Instructions for setting up chsc6x touch screen controller with ESPHome - image: chsc6x.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `chsc6x` touchscreen platform allows using the touch screen controllers based on the chsc6x chip with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. This controller is used in the Seeed Studio Round Display for XIAO with ILI9xxx display -{{< img src="chsc6x.png" alt="Image" caption="chsc6x touchscreen on Seeed Studio Round Display" width="50.0%" class="align-center" >}} +
    ## Base Touchscreen Configuration @@ -61,4 +68,4 @@ touchscreen: ## See Also -- {{< apiref "chsc6x/chsc6x_touchscreen.h" "chsc6x/chsc6x_touchscreen.h" >}} +- diff --git a/content/components/touchscreen/cst226.md b/src/content/docs/components/touchscreen/cst226.mdx similarity index 82% rename from content/components/touchscreen/cst226.md rename to src/content/docs/components/touchscreen/cst226.mdx index 593b97a7db..4186e42f03 100644 --- a/content/components/touchscreen/cst226.md +++ b/src/content/docs/components/touchscreen/cst226.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up cst226 touch screen controller with ESPHome" title: "cst226 Touch Screen Controller" -params: - seo: - description: Instructions for setting up cst226 touch screen controller with ESPHome - image: t4-s3.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `cst226` touchscreen platform allows using the touch screen controllers based on the cst226 chip with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. This controller is used in the Lilygo T4-S3 AMOLED Display. -{{< img src="t4-s3.jpg" alt="Image" caption="cst226 touchscreen on Lilygo T4-S3 AMOLED Display" width="50.0%" class="align-center" >}} +
    ## Base Touchscreen Configuration @@ -67,4 +74,4 @@ touchscreen: ## See Also -- {{< apiref "cst226/touchscreen/cst226_touchscreen.h" "cst226/touchscreen/cst226_touchscreen.h" >}} +- diff --git a/content/components/touchscreen/cst816.md b/src/content/docs/components/touchscreen/cst816.mdx similarity index 84% rename from content/components/touchscreen/cst816.md rename to src/content/docs/components/touchscreen/cst816.mdx index 99399ca50d..ab8a07680a 100644 --- a/content/components/touchscreen/cst816.md +++ b/src/content/docs/components/touchscreen/cst816.mdx @@ -1,19 +1,26 @@ --- description: "Instructions for setting up cst816 touch screen controller with ESPHome" title: "cst816 Touch Screen Controller" -params: - seo: - description: Instructions for setting up cst816 touch screen controller with ESPHome - image: cst816.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `cst816` touchscreen platform allows using the touch screen controllers based on the CST816 series of chips with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. This controller is used in the Lilygo T-Display S3 AMOLED. The component should work with CST716, CST816D, CST816S, CST816T, CST820, CST826, and CST836 controller chips. -{{< img src="cst816.jpg" alt="Image" caption="cst816t touchscreen on T-Display S3 AMOLED" width="50.0%" class="align-center" >}} +
    ## Base Touchscreen Configuration @@ -56,4 +63,4 @@ touchscreen: ## See Also -- {{< apiref "cst816/touchscreen/cst816_touchscreen.h" "cst816/touchscreen/cst816_touchscreen.h" >}} +- diff --git a/content/components/touchscreen/ektf2232.md b/src/content/docs/components/touchscreen/ektf2232.mdx similarity index 70% rename from content/components/touchscreen/ektf2232.md rename to src/content/docs/components/touchscreen/ektf2232.mdx index 1489d13ac3..bbc7ebeb88 100644 --- a/content/components/touchscreen/ektf2232.md +++ b/src/content/docs/components/touchscreen/ektf2232.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for setting up EKTF2232 touchscreen controller with ESPHome" title: "EKTF2232 Touchscreen Controller" -params: - seo: - description: Instructions for setting up EKTF2232 touchscreen controller with ESPHome - image: ektf2232.svg --- +import APIRef from '@components/APIRef.astro'; + The `ektf2232` component allows using the touchscreen controller -found in the {{< docref "/components/display/inkplate" "Inkplate 6 Plus" >}} with ESPHome. +found in the [Inkplate 6 Plus](/components/display/inkplate/) with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this sensor to work. ```yaml @@ -29,6 +27,6 @@ touchscreen: ## See Also -- {{< docref "index" "Touchscreen" >}} -- {{< docref "/components/display/inkplate" "Inkplate 6 Plus" >}} -- {{< apiref "ektf2232/ektf2232.h" "ektf2232/ektf2232.h" >}} +- [Touchscreen Component](/components/touchscreen/) +- [Inkplate 6 Plus](/components/display/inkplate/) +- diff --git a/content/components/touchscreen/ft5x06.md b/src/content/docs/components/touchscreen/ft5x06.mdx similarity index 76% rename from content/components/touchscreen/ft5x06.md rename to src/content/docs/components/touchscreen/ft5x06.mdx index 7c4f375973..2808a33a49 100644 --- a/content/components/touchscreen/ft5x06.md +++ b/src/content/docs/components/touchscreen/ft5x06.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up ft5x06 touch screen controller with ESPHome" title: "FT5X06 Touch Screen Controller" -params: - seo: - description: Instructions for setting up ft5x06 touch screen controller with ESPHome - image: indicator.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `ft5x06` touchscreen platform allows using the touch screen controllers based on the ft5x06 chip with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. This controller is used in the Seeed Studio Sensecap Indicator. -{{< img src="indicator.jpg" alt="Image" caption="ft5x06 touchscreen in Seeed Studio Sensecap Indicator." width="50.0%" class="align-center" >}} +
    ## Base Touchscreen Configuration @@ -37,4 +44,4 @@ touchscreen: ## See Also -- {{< apiref "ft5x06/touchscreen/ft5x06_touchscreen.h" "ft5x06/touchscreen/ft5x06_touchscreen.h" >}} +- diff --git a/content/components/touchscreen/ft63x6.md b/src/content/docs/components/touchscreen/ft63x6.mdx similarity index 82% rename from content/components/touchscreen/ft63x6.md rename to src/content/docs/components/touchscreen/ft63x6.mdx index 91405b47a7..f80f1e2e9b 100644 --- a/content/components/touchscreen/ft63x6.md +++ b/src/content/docs/components/touchscreen/ft63x6.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up FT63X6 touchscreen controller with ESPHome" title: "FT63X6 Touchscreen Controller" -params: - seo: - description: Instructions for setting up FT63X6 touchscreen controller with ESPHome - image: wt32-sc01.png --- +import APIRef from '@components/APIRef.astro'; + The `ft63x6` component allows using the touchscreen controller found in [Seeed Studio's WT32-SC01](https://www.seeedstudio.com/ESP32-Development-board-WT32-SC01-p-4735.html) @@ -29,5 +27,5 @@ touchscreen: ## See Also -- {{< docref "index" "Touchscreen" >}} -- {{< apiref "ft63x6/ft63x6.h" "ft63x6/ft63x6.h" >}} +- [Touchscreen Component](/components/touchscreen/) +- diff --git a/content/components/touchscreen/gt911.md b/src/content/docs/components/touchscreen/gt911.mdx similarity index 81% rename from content/components/touchscreen/gt911.md rename to src/content/docs/components/touchscreen/gt911.mdx index 34fa1d0d70..342cee47d0 100644 --- a/content/components/touchscreen/gt911.md +++ b/src/content/docs/components/touchscreen/gt911.mdx @@ -1,18 +1,25 @@ --- description: "Instructions for setting up gt911 touch screen controller with ESPHome" title: "gt911 Touch Screen Controller" -params: - seo: - description: Instructions for setting up gt911 touch screen controller with ESPHome - image: esp32_s3_box_3.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import APIRef from '@components/APIRef.astro'; + The `gt911` touchscreen platform allows using the touch screen controllers based on the gt911 chip with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. This controller is used in the Espressif ESP32-S3-BOX-3 and the m5paper; -{{< img src="esp32_s3_box_3.png" alt="Image" caption="gt911 touchscreen on ESP32-S3-BOX-3" width="50.0%" class="align-center" >}} +
    ## Base Touchscreen Configuration @@ -57,5 +64,5 @@ binary_sensor: ## See Also - [Binary Sensor Filters](/components/binary_sensor#binary_sensor-filters) -- {{< apiref "gt911/touchscreen/gt911.h" "gt911/touchscreen/gt911.h" >}} -- {{< apiref "gt911/binary_sensor/gt911_button.h" "gt911/binary_sensor/gt911_button.h" >}} +- +- diff --git a/content/components/touchscreen/images/esp32-s3-box.png b/src/content/docs/components/touchscreen/images/esp32-s3-box.png similarity index 100% rename from content/components/touchscreen/images/esp32-s3-box.png rename to src/content/docs/components/touchscreen/images/esp32-s3-box.png diff --git a/content/components/touchscreen/images/esp32-s3-korvo-2.png b/src/content/docs/components/touchscreen/images/esp32-s3-korvo-2.png similarity index 100% rename from content/components/touchscreen/images/esp32-s3-korvo-2.png rename to src/content/docs/components/touchscreen/images/esp32-s3-korvo-2.png diff --git a/content/components/touchscreen/images/xpt2046-full.jpg b/src/content/docs/components/touchscreen/images/xpt2046-full.jpg similarity index 100% rename from content/components/touchscreen/images/xpt2046-full.jpg rename to src/content/docs/components/touchscreen/images/xpt2046-full.jpg diff --git a/content/components/touchscreen/_index.md b/src/content/docs/components/touchscreen/index.mdx similarity index 89% rename from content/components/touchscreen/_index.md rename to src/content/docs/components/touchscreen/index.mdx index b07bc27d0f..ff9f28c2ce 100644 --- a/content/components/touchscreen/_index.md +++ b/src/content/docs/components/touchscreen/index.mdx @@ -1,17 +1,18 @@ --- description: "Instruction for using touchscreen components." title: "Touchscreen Components" -params: - seo: - description: Instruction for using touchscreen components. - image: folder-open.svg +sidebar: + label: "Touchscreen Components" --- +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + The `touchscreen` component contains the base code for most touchscreen driver components available in ESPHome and is responsible for passing the touch events to `binary_sensors` with the `touchscreen` platform. It is also used by the LVGL component. -{{< anchor "config-touchscreen" >}} + ## Base Touchscreen Configuration @@ -75,12 +76,12 @@ touchscreen: - **on_release** (*Optional*, [Automation](/automations)): An automation to perform when the touchscreen is no longer touched. See [`on_release` Trigger](#touchscreen-on_release). -{{< anchor "touchscreen-touchpoint" >}} + ## `TouchPoint` Argument Type -Both the [`on_touch` Trigger](#touchscreen-on_touch) and [`on_update` Trigger](#touchscreen-on_update) have an argument of the type {{< apistruct "touchscreen::TouchPoint" "touchscreen::TouchPoint" >}} in a -list (`on_update` ) or as an `optional` (`on_touch` ). +Both the [`on_touch` Trigger](#touchscreen-on_touch) and [`on_update` Trigger](#touchscreen-on_update) have an argument of the type in a +list (`on_update`) or as an `optional` (`on_touch`). The integer members for the touch positions below are in relation to the display width and height: @@ -92,7 +93,7 @@ The integer members for the touch positions below are in relation to the display - `x_org` and `y_org` are the position of the touch when it was first detected. - `x_raw` and `y_raw` are for calibrating the touchscreen in relation of the display. This replaces the properties with the same name in the touchscreen classes. -{{< anchor "touchscreen-calibration" >}} + ## Calibration @@ -127,7 +128,7 @@ touchscreen: Get a stylus or a similar object, run the project and touch the corners of the screen at the edge pixels. Repeat several times and note minimum and maximum x and y raw values. -```none +```txt ... top left ... [21:07:48][I][cal:071]: x=217, y=34, x_raw=3718, y_raw=445 [21:07:49][I][cal:071]: x=222, y=32, x_raw=3804, y_raw=419 @@ -171,7 +172,7 @@ touchscreen: Compile, run and click on the edges again. The x and y should now match the coordinates of the display. -```none +```txt [21:32:34][I][cal:071]: x=7, y=6, x_raw=3755, y_raw=407 [21:32:37][I][cal:071]: x=237, y=4, x_raw=313, y_raw=385 [21:32:43][I][cal:071]: x=239, y=318, x_raw=284, y_raw=3845 @@ -198,7 +199,7 @@ To be exact, the component does the following - inverts if needed - scales to the display dimensions -{{< anchor "touchscreen-on_touch" >}} + ## `on_touch` Trigger @@ -209,13 +210,13 @@ NOTE: This has changed (from ESPHome 2023.11.6.) To receive continuous updates f This trigger provides two arguments named `touch` of type *touchpoint* and `touches` with a list of all touches. -{{< anchor "touchscreen-on_update" >}} + ## `on_update` Trigger This new automation will be triggered when the touchscreen detects an extra touch or that a touch has moved around on the screen. -This trigger provides one argument named `touches` of type {{< apiref "touchscreen::TouchPoints_t" "touchscreen::TouchPoints_t" >}} which has a list of +This trigger provides one argument named `touches` of type which has a list of [`TouchPoint` Argument Type](#touchscreen-touchpoint). This trigger may be useful to detect gestures such as swiping across the display. @@ -239,7 +240,7 @@ Be aware that you need to check the state flag every time to see if the touch is - state value 2 means the touch is still being detected but is moved on the screen. - state value 4 and higher means a touch release is detected. -{{< anchor "touchscreen-on_release" >}} + ## `on_release` Trigger @@ -247,7 +248,7 @@ This automation will be triggered when all touches are released from the touchsc At this point of time it has no extra arguments. -{{< anchor "touchscreen_binary_sensor" >}} + ## Binary Sensor @@ -288,10 +289,10 @@ binary_sensor: ## See Also - [Binary Sensor Filters](/components/binary_sensor#binary_sensor-filters) -- {{< docref "/components/display/inkplate" "Inkplate 6 Plus" >}} -- {{< docref "/components/touchscreen/ektf2232" "EKTF2232" >}} -- {{< docref "/components/touchscreen/xpt2046" "XPT2046" >}} -- {{< docref "/components/touchscreen/tt21100" "TT21100" >}} -- {{< docref "/components/touchscreen/gt911" "GT911" >}} -- {{< apiref "touchscreen/touchscreen.h" "touchscreen/touchscreen.h" >}} -- {{< apiref "touchscreen/binary_sensor/touchscreen_binary_sensor.h" "touchscreen/binary_sensor/touchscreen_binary_sensor.h" >}} +- [Inkplate 6 Plus](/components/display/inkplate/) +- [EKTF2232 Touchscreen Controller](/components/touchscreen/ektf2232/) +- [XPT2046 Touch Screen Controller (Updated version)](/components/touchscreen/xpt2046/) +- [TT21100 Touch Screen Controller](/components/touchscreen/tt21100/) +- [gt911 Touch Screen Controller](/components/touchscreen/gt911/) +- +- diff --git a/content/components/touchscreen/lilygo_t5_47.md b/src/content/docs/components/touchscreen/lilygo_t5_47.mdx similarity index 73% rename from content/components/touchscreen/lilygo_t5_47.md rename to src/content/docs/components/touchscreen/lilygo_t5_47.mdx index 6da791f87f..1c52f4b2e7 100644 --- a/content/components/touchscreen/lilygo_t5_47.md +++ b/src/content/docs/components/touchscreen/lilygo_t5_47.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the Lilygo T5 4.7\" Touchscreen with ESPHome" title: "Lilygo T5 4.7\" Touchscreen" -params: - seo: - description: Instructions for setting up the Lilygo T5 4.7" Touchscreen with ESPHome - image: lilygo_t5_47_touch.jpg --- +import APIRef from '@components/APIRef.astro'; + The `liygo_t5_47` touchscreen platform allows using the touchscreen controller for the Lilygo T5 4.7" e-Paper Display with ESPHome. @@ -26,5 +24,5 @@ touchscreen: ## See Also -- {{< docref "index" "Touchscreen" >}} -- {{< apiref "lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.h" "lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.h" >}} +- [Touchscreen Component](/components/touchscreen/) +- diff --git a/content/components/touchscreen/sdl.md b/src/content/docs/components/touchscreen/sdl.mdx similarity index 76% rename from content/components/touchscreen/sdl.md rename to src/content/docs/components/touchscreen/sdl.mdx index 347007e554..b08073103b 100644 --- a/content/components/touchscreen/sdl.md +++ b/src/content/docs/components/touchscreen/sdl.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up touch screen emulation with the sdl display driver." title: "SDL2 Touch Screen Emulator" -params: - seo: - description: Instructions for setting up touch screen emulation with the sdl display driver. --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "sdl_touchscreen" >}} + + The `sdl` touchscreen platform allows emulating a touch screen by using the mouse with the `sdl` display driver. The `sdl` display component must be configured to use this. @@ -28,4 +27,4 @@ touchscreen: ## See Also - [SDL display](/components/display/sdl#sdl) -- {{< apiref "sdl/sdl_touchscreen.h" "sdl/sdl_touchscreen.h" >}} +- diff --git a/content/components/touchscreen/tt21100.md b/src/content/docs/components/touchscreen/tt21100.mdx similarity index 79% rename from content/components/touchscreen/tt21100.md rename to src/content/docs/components/touchscreen/tt21100.mdx index 7d394ef569..5edfeb7c88 100644 --- a/content/components/touchscreen/tt21100.md +++ b/src/content/docs/components/touchscreen/tt21100.mdx @@ -1,20 +1,32 @@ --- description: "Instructions for setting up TT21100 touch screen controller with ESPHome" title: "TT21100 Touch Screen Controller" -params: - seo: - description: Instructions for setting up TT21100 touch screen controller with ESPHome - image: esp32-s3-korvo-2-lcd.png --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import esp32S3BoxImg from './images/esp32-s3-box.png'; +import esp32S3Korvo2Img from './images/esp32-s3-korvo-2.png'; +import APIRef from '@components/APIRef.astro'; + The `tt21100` touchscreen platform allows using the touch screen controllers based on the TT21100 chip with ESPHome. The [I²C](/components/i2c) is required to be set up in your configuration for this touchscreen to work. This controller is used in the Espressif ESP32-S3-BOX and the ESP32-S3-Korvo-2-LCD extension board for the ESP32-S3-Korvo-2. -{{< img src="esp32-s3-box.png" alt="Image" caption="TT21100 touchscreen on ESP32-S3-BOX" width="50.0%" class="align-center" >}} +
    -{{< img src="esp32-s3-korvo-2.png" alt="Image" caption="TT21100 touchscreen on ESP32-S3-Korvo-2" width="50.0%" class="align-center" >}} +
    ## Base Touchscreen Configuration @@ -66,5 +78,5 @@ binary_sensor: ## See Also - [Binary Sensor Filters](/components/binary_sensor#binary_sensor-filters) -- {{< apiref "tt21100/touchscreen/tt21100.h" "tt21100/touchscreen/tt21100.h" >}} -- {{< apiref "tt21100/binary_sensor/tt21100_button.h" "tt21100/binary_sensor/tt21100_button.h" >}} +- +- diff --git a/content/components/touchscreen/xpt2046.md b/src/content/docs/components/touchscreen/xpt2046.mdx similarity index 88% rename from content/components/touchscreen/xpt2046.md rename to src/content/docs/components/touchscreen/xpt2046.mdx index 05cc2993d9..1d3d388c0f 100644 --- a/content/components/touchscreen/xpt2046.md +++ b/src/content/docs/components/touchscreen/xpt2046.mdx @@ -1,13 +1,14 @@ --- description: "Instructions for setting up XPT2046 touch screen controller with ESPHome" title: "XPT2046 Touch Screen Controller (Updated version)" -params: - seo: - description: Instructions for setting up XPT2046 touch screen controller with ESPHome - image: xpt2046.jpg --- -{{< anchor "xpt2046-component" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import xpt2046FullImg from './images/xpt2046-full.jpg'; +import APIRef from '@components/APIRef.astro'; + + The `xpt2046` touchscreen platform allows using the resistive touch screen controllers based on the XPT2046 chip @@ -16,7 +17,12 @@ based on the XPT2046 chip contain this controller. The [SPI](/components/spi) is required to be set up in your configuration for this sensor to work. -{{< img src="xpt2046-full.jpg" alt="Image" caption="XPT2046 Touch Screen Controller" width="50.0%" class="align-center" >}} +
    ```yaml # Example configuration entry @@ -79,5 +85,5 @@ Base Configuration: ## See Also - [Binary Sensor Filters](/components/binary_sensor#binary_sensor-filters) -- {{< apiref "xpt2046/xpt2046.h" "xpt2046/xpt2046.h" >}} - [XPT2046 Library](https://platformio.org/lib/show/542/XPT2046_Touchscreen) by [Paul Stoffregen](https://github.com/PaulStoffregen) +- diff --git a/content/components/tuya.md b/src/content/docs/components/tuya.mdx similarity index 85% rename from content/components/tuya.md rename to src/content/docs/components/tuya.mdx index d540d357cb..b33c6dc8a9 100644 --- a/content/components/tuya.md +++ b/src/content/docs/components/tuya.mdx @@ -1,15 +1,15 @@ --- description: "Instructions for setting up the Tuya component." title: "Tuya MCU" -params: - seo: - description: Instructions for setting up the Tuya component. - image: tuya.png --- +import { Image } from 'astro:assets'; +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + The `tuya` component creates a serial connection to the Tuya MCU for platforms to use. -{{< img src="tuya.png" alt="Image" width="40%" class="align-center" >}} + The `tuya` serial component requires a [UART bus](/components/uart) to be configured. Put the `tuya` component in the config and it will list the possible devices for you in the config log. @@ -56,7 +56,7 @@ Here is another example output for a Tuya ME-81H thermostat: ## Configuration variables - **time_id** (*Optional*, [ID](/guides/configuration-types#id)): Some Tuya devices support obtaining local time from ESPHome. - Specify the ID of the {{< docref "time/" >}} which will be used. + Specify the ID of the [Time](/components/time/) which will be used. - **status_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): Some Tuya devices support WiFi status reporting ONLY through gpio pin. @@ -72,7 +72,7 @@ Automations: ## Tuya Automation -{{< anchor "tuya-on_datapoint_update" >}} + ### `on_datapoint_update` @@ -87,7 +87,7 @@ The type of `x` variable is depending on `datapoint_type` configuration variable - *uint*: `x` is `uint32_t` - *enum*: `x` is `uint8_t` - *bitmask*: `x` is `uint32_t` -- *any*: `x` is {{< apistruct "tuya::TuyaDatapoint" "tuya::TuyaDatapoint" >}} +- *any*: `x` is ```yaml tuya: @@ -130,12 +130,12 @@ tuya: ## See Also -- {{< docref "/components/fan/tuya" >}} -- {{< docref "/components/light/tuya" >}} -- {{< docref "/components/switch/tuya" >}} -- {{< docref "/components/climate/tuya" >}} -- {{< docref "/components/binary_sensor/tuya" >}} -- {{< docref "/components/sensor/tuya" >}} -- {{< docref "/components/text_sensor/tuya" >}} -- {{< docref "/components/number/tuya" >}} -- {{< apiref "tuya/tuya.h" "tuya/tuya.h" >}} +- [Tuya Fan](/components/fan/tuya/) +- [Tuya Dimmer](/components/light/tuya/) +- [Tuya Switch](/components/switch/tuya/) +- [Tuya Climate](/components/climate/tuya/) +- [Tuya Binary Sensor](/components/binary_sensor/tuya/) +- [Tuya Sensor](/components/sensor/tuya/) +- [Tuya Text Sensor](/components/text_sensor/tuya/) +- [Tuya Number](/components/number/tuya/) +- diff --git a/content/components/uart.md b/src/content/docs/components/uart.mdx similarity index 96% rename from content/components/uart.md rename to src/content/docs/components/uart.mdx index e326d83121..c4cfa2891f 100644 --- a/content/components/uart.md +++ b/src/content/docs/components/uart.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up a UART serial bus on ESPs" title: "UART Bus" -params: - seo: - description: Instructions for setting up a UART serial bus on ESPs - image: uart.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "uart" >}} + + UART is a common serial protocol for many devices. For example, when uploading a binary to your ESP you have probably used UART to access the chip. UART (or for Arduino often also called Serial) usually @@ -78,7 +76,7 @@ uart: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID for this UART hub if you need multiple UART hubs. - **debug** (*Optional*, mapping): Options for debugging communication on the UART hub, see [Debugging](#uart-debugging). -{{< anchor "uart-hardware_uarts" >}} + ## Hardware UARTs @@ -86,7 +84,7 @@ Whenever possible, ESPHome will use the hardware UART unit on the ESP8266 for fa When the hardware UARTs are all occupied, ESPHome will fall back to a software implementation that may not be accurate at higher baud rates. -`UART0` is (by default) used by the {{< docref "/components/logger" "logger component" >}}, using `tx_pin: GPIO1` and +`UART0` is (by default) used by the [logger component](/components/logger/), using `tx_pin: GPIO1` and `rx_pin: GPIO3`. If you configure a UART that overlaps with these pins, you can share the hardware with the logger and leave others available. If you have configured the logger to use a different hardware UART, the pins used for hardware sharing change accordingly. @@ -101,7 +99,7 @@ use `tx_pin: GPIO2`. Any other combination of pins will result in use of a softw > [!NOTE] > The Software UART is only available on the ESP8266. It is not available on ESP32 and variants. -{{< anchor "uart-write_action" >}} + ## `uart.write` Action @@ -127,7 +125,7 @@ on_...: data: 'other data' ``` -{{< anchor "uart-debugging" >}} + ## Debugging @@ -202,7 +200,7 @@ uart: `after.bytes` option to a lower value) or increase the logger buffer size using the logger `tx_buffer_size` option. -{{< anchor "uart-runtime_change" >}} + ## Changing at runtime @@ -307,6 +305,6 @@ uart: ## See Also -- {{< docref "/components/logger" >}} -- {{< docref "/components/packet_transport/uart" >}} -- {{< apiref "uart/uart.h" "uart/uart.h" >}} +- [Logger Component](/components/logger/) +- [UART Packet Transport Platform](/components/packet_transport/uart/) +- diff --git a/content/components/udp.md b/src/content/docs/components/udp.mdx similarity index 92% rename from content/components/udp.md rename to src/content/docs/components/udp.mdx index 719408421c..a5d9581829 100644 --- a/content/components/udp.md +++ b/src/content/docs/components/udp.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up a UDP component on ESPHome" title: "UDP Component" -params: - seo: - description: Instructions for setting up a UDP component on ESPHome - image: udp.svg --- +import APIRef from '@components/APIRef.astro'; -{{< anchor "udp" >}} + + This component allows reception and transmission of data over a network using the [User Datagram Protocol (UDP)](https://en.wikipedia.org/wiki/User_Datagram_Protocol). In conjunction with the [Packet Transport Component](/components/packet_transport#packet-transport) it can be used to broadcast sensor data. @@ -116,8 +114,8 @@ binary_sensor: ## See Also -- {{< docref "/components/packet_transport/udp" >}} -- {{< docref "/components/binary_sensor/packet_transport" >}} -- {{< docref "/components/sensor/packet_transport" >}} +- [UDP Packet Transport Platform](/components/packet_transport/udp/) +- [Packet Transport Binary Sensor](/components/binary_sensor/packet_transport/) +- [Packet Transport Sensor](/components/sensor/packet_transport/) - [Automation](/automations) -- {{< apiref "udp/udp_component.h" "udp/udp_component.h" >}} +- diff --git a/content/components/update/esp32_hosted.md b/src/content/docs/components/update/esp32_hosted.mdx similarity index 92% rename from content/components/update/esp32_hosted.md rename to src/content/docs/components/update/esp32_hosted.mdx index 004a6bc202..45077d08b6 100644 --- a/content/components/update/esp32_hosted.md +++ b/src/content/docs/components/update/esp32_hosted.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for using the ESP32 Hosted update platform to manage co-processor firmware updates." title: "ESP32 Hosted Co-processor Update" -params: - seo: - description: Instructions for using the ESP32 Hosted update platform to manage co-processor firmware updates. - image: system-update.svg --- +import APIRef from '@components/APIRef.astro'; + This platform allows you to update the firmware of an ESP32 co-processor connected via the [ESP32 Hosted](/components/esp32_hosted) component. Two update modes are supported: @@ -73,7 +71,7 @@ The component will automatically select the highest version that is compatible w (i.e., the firmware version must be less than or equal to the ESP-Hosted library version compiled into ESPHome). -{{< anchor "update_esp32_hosted-configuration_variables" >}} + ## Configuration variables @@ -118,8 +116,8 @@ For instructions on building custom firmware, see the [esp-hosted-firmware](http ## See Also - [ESP32 Hosted](/components/esp32_hosted) -- [Update](/components/update) +- [Update Core](/components/update) - [HTTP Request](/components/http_request) - [ESP-Hosted Firmware](https://esphome.github.io/esp-hosted-firmware/) - [ESP-Hosted-MCU](https://github.com/espressif/esp-hosted-mcu) by [Espressif Systems](https://www.espressif.com/) -- {{< apiref "esp32_hosted/update/esp32_hosted_update.h" "esp32_hosted/update/esp32_hosted_update.h" >}} +- diff --git a/content/components/update/http_request.md b/src/content/docs/components/update/http_request.mdx similarity index 71% rename from content/components/update/http_request.md rename to src/content/docs/components/update/http_request.mdx index c3dc28e3fd..867c0c4266 100644 --- a/content/components/update/http_request.md +++ b/src/content/docs/components/update/http_request.mdx @@ -1,19 +1,17 @@ --- description: "Instructions for using ESPHome's http_request update platform to manage updates on your devices." title: "Managed Updates via HTTP Request" -params: - seo: - description: Instructions for using ESPHome's http_request update platform to manage updates on your devices. - image: system-update.svg --- +import APIRef from "@components/APIRef.astro"; + This platform allows you to manage the deployment of updates to your ESPHome devices. It works by reading a [JSON manifest file](#update_http_request-manifest_format) and using it to determine the presence of an update. To use it, the following components are required in your device's configuration: -- {{< docref "/components/http_request" >}} -- {{< docref "/components/ota/http_request" >}} +- [HTTP Request](/components/http_request/) +- [OTA Update via HTTP Request](/components/ota/http_request/) ```yaml # Example configuration entry @@ -23,12 +21,12 @@ update: source: http://example.com/manifest.json ``` -{{< anchor "update_http_request-configuration_variables" >}} + ## Configuration variables - **source** (**Required**, string): The URL of the YAML manifest file containing the firmware metadata. -- **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval at which to check for (**not install**) updates. +- **update_interval** (_Optional_, [Time](/guides/configuration-types#time)): The interval at which to check for (**not install**) updates. Defaults to 6 hours. - All other options from [Update](/components/update#config-update). @@ -40,7 +38,7 @@ update: > > Use GitHub Pages URLs instead (e.g., `https://.github.io//firmware/manifest.json`) which do not redirect, or increase the buffer size. -{{< anchor "update_http_request-manifest_format" >}} + ## Update Manifest Format @@ -58,7 +56,7 @@ the `ota` block that is structured as follows: "md5": "1234567890abcdef1234567890abcdef", "path": "/local/esp32c3/firmware.bin", "release_url": "http://example.com/releases/10", - "summary": "Another update", + "summary": "Another update" } } ] @@ -69,15 +67,15 @@ While `release_url` and `summary` are optional, all other fields shown here are If `path` begins with: -- `http` or `https` : `path` is treated as full URL which will be used to obtain the firmware binary. -- A forward slash (`/` ): `path` will be appended to the hostname (an "absolute" path) specified for `source` (as above). +- `http` or `https` : `path` is treated as full URL which will be used to obtain the firmware binary. +- A forward slash (`/` ): `path` will be appended to the hostname (an "absolute" path) specified for `source` (as above). - Any other character: `path` will be appended to `source` (as specified above) after trimming the manifest file name. Note that there may be multiple `builds` specified within a single JSON file. ## See Also -- {{< docref "http_request/" >}} -- {{< docref "/components/ota/http_request" >}} -- {{< docref "/components/ota" >}} -- {{< apiref "update/update_entity.h" "update/update_entity.h" >}} +- [HTTP Request](/components/http_request/) +- [OTA Update via HTTP Request](/components/ota/http_request/) +- [Over-the-Air Updates](/components/ota/) +- diff --git a/content/components/update/_index.md b/src/content/docs/components/update/index.mdx similarity index 81% rename from content/components/update/_index.md rename to src/content/docs/components/update/index.mdx index e62f82070e..4ebf5594e0 100644 --- a/content/components/update/_index.md +++ b/src/content/docs/components/update/index.mdx @@ -1,14 +1,12 @@ --- description: "Instructions for using Update entities to manage updates on your ESPHome devices." title: "Update Core" -params: - seo: - description: Instructions for using Update entities to manage updates on your ESPHome devices. - image: system-update.svg +sidebar: + label: "Update Core" --- The `update` component allows your ESPHome devices to install updates from a remote source; instead of -{{< docref "/components/ota/index" ""pushing" an update to your device" >}}, the device can retrieve an update and +["pushing" an update to your device](/components/ota/), the device can retrieve an update and install it on its own. ```yaml @@ -17,7 +15,7 @@ update: - platform: ... ``` -{{< anchor "config-update" >}} + ## Configuration variables @@ -30,13 +28,13 @@ update: > you want the light to use that name, you can set `name: None`. - **device_class** (*Optional*, string): The device class for the update entity. See - for a list of available options. + [https://www.home-assistant.io/integrations/binary_sensor/#device-class](https://www.home-assistant.io/integrations/binary_sensor/#device-class) for a list of available options. - **disabled_by_default** (*Optional*, boolean): If true, then this entity should not be added to any client's frontend (usually Home Assistant) without the user manually enabling it (via the Home Assistant UI). Defaults to `false`. - **entity_category** (*Optional*, string): The category of the update entity. See - for a list of available options. + [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. - **icon** (*Optional*, icon): The icon to use for the update entity in the frontend. - **internal** (*Optional*, boolean): Mark this component as internal. Internal components will @@ -75,7 +73,5 @@ Configuration variables: ## Update Platforms -- {{< docref "update/http_request/" >}} -- {{< docref "update/esp32_hosted/" >}} - -## See Also +- [Http Request](/components/update/http_request/) +- [Esp32 Hosted](/components/update/esp32_hosted/) diff --git a/content/components/uponor_smatrix.md b/src/content/docs/components/uponor_smatrix.mdx similarity index 94% rename from content/components/uponor_smatrix.md rename to src/content/docs/components/uponor_smatrix.mdx index 9cf54c4c20..4c477615c6 100644 --- a/content/components/uponor_smatrix.md +++ b/src/content/docs/components/uponor_smatrix.mdx @@ -1,10 +1,9 @@ --- description: "Instructions for setting up an Uponor Smatrix Base Pulse underfloor heating control system in ESPHome." title: "Uponor Smatrix Base Pulse Underfloor Heating" -params: - seo: - description: Instructions for setting up an Uponor Smatrix Base Pulse underfloor heating control system in ESPHome. --- +import APIRef from '@components/APIRef.astro'; + The Uponor Smatrix component allows you to integrate an Uponor Smatrix Base Pulse underfloor heating control system in ESPHome without the need for an Smatrix Pulse Com R-208 communication module. It directly communicates with the controller and thermostats via the RS485 thermostat bus. @@ -18,7 +17,7 @@ The +/- terminals provide 5 volts and can be used to power your ESPHome device. The [UART Component](/components/uart) must be configured with a baud rate of 19200, 8 data bits, no parity, 1 stop bit. -{{< anchor "uponor-gettingstarted" >}} + ## Getting started @@ -75,7 +74,7 @@ uponor_smatrix: - **uart_id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID of the [UART Component](/components/uart) if you want to use multiple UART buses. - **time_id** (*Optional*, [ID](/guides/configuration-types#id)): Specify the ID of the - {{< docref "time/index" "Time Component" >}} to use as the time source if you want ESPHome to automatically + [Time Component](/components/time/) to use as the time source if you want ESPHome to automatically synchronize the date and time of the thermostats. - **time_device_address** (*Optional*, int): The 32 bit device address of the thermostat that keeps the system time. This will be automatically detected from the bus if not specified. @@ -140,4 +139,4 @@ sensor: ## See Also - [Protocol Analysis](https://github.com/kroimon/uponor-smatrix-analysis) -- {{< apiref "uponor_smatrix/uponor_smatrix.h" "uponor_smatrix/uponor_smatrix.h" >}} +- diff --git a/content/components/usb_cdc_acm.md b/src/content/docs/components/usb_cdc_acm.mdx similarity index 87% rename from content/components/usb_cdc_acm.md rename to src/content/docs/components/usb_cdc_acm.mdx index 3baa1569a7..18cd682943 100644 --- a/content/components/usb_cdc_acm.md +++ b/src/content/docs/components/usb_cdc_acm.mdx @@ -1,17 +1,15 @@ --- description: "Instructions for setting up USB CDC-ACM virtual serial ports on ESP32 variants in ESPHome" title: "USB CDC-ACM Interface" -params: - seo: - description: Instructions for setting up USB CDC-ACM virtual serial ports on ESP32 variants in ESPHome - image: usb.svg --- +import APIRef from '@components/APIRef.astro'; + The USB CDC-ACM (Communications Device Class - Abstract Control Model) component enables supported devices to function as USB virtual serial ports. When connected to a host computer, the microcontroller will appear as one or more serial/COM ports, allowing serial communication with the application running on the microcontroller. -You must have {{< docref "/components/tinyusb" >}} in your device's configuration to use this component. +You must have [Tinyusb](/components/tinyusb/) in your device's configuration to use this component. The following ESP32 microcontroller variants are currently supported: @@ -65,5 +63,5 @@ Increase buffer sizes if you experience data loss or need to handle larger data ## See Also -- {{< docref "/components/tinyusb" >}} -- {{< apiref "usb_cdc_acm/usb_cdc_acm.h" "usb_cdc_acm/usb_cdc_acm.h" >}} +- [TinyUSB](/components/tinyusb/) +- diff --git a/content/components/usb_host.md b/src/content/docs/components/usb_host.mdx similarity index 90% rename from content/components/usb_host.md rename to src/content/docs/components/usb_host.mdx index 83a8b8b3e5..bfb8a796d3 100644 --- a/content/components/usb_host.md +++ b/src/content/docs/components/usb_host.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up a USB Host interface on an ESP32 in ESPHome" title: "USB Host Interface" -params: - seo: - description: Instructions for setting up a USB Host interface on an ESP32 in ESPHome - image: usb.svg --- +import APIRef from '@components/APIRef.astro'; + The USB Host interface on the ESP32-S3 and ESP32-S2 is used to connect to USB peripheral devices. Multiple devices may be configured, but only one can be connected at any time. By default the device must be directly @@ -48,7 +46,7 @@ it is disconnected or the ESP32 is reset. If a device is plugged in that does not match any configured device, the device will be disconnected and a log entry will appear at the DEBUG level. -### See Also +## See Also -- {{< docref "/components/usb_uart" >}} -- {{< apiref "usb_host/usb_host.h" "usb_host/usb_host.h" >}} +- [USB Host UART Interface](/components/usb_uart/) +- diff --git a/content/components/usb_uart.md b/src/content/docs/components/usb_uart.mdx similarity index 91% rename from content/components/usb_uart.md rename to src/content/docs/components/usb_uart.mdx index 2d7d953abc..7c656c7a6a 100644 --- a/content/components/usb_uart.md +++ b/src/content/docs/components/usb_uart.mdx @@ -1,13 +1,11 @@ --- description: "Instructions for setting up a USB Host UART interface on an ESP32 in ESPHome" title: "USB Host UART Interface" -params: - seo: - description: Instructions for setting up a USB Host UART interface on an ESP32 in ESPHome - image: usb.svg --- +import APIRef from '@components/APIRef.astro'; -This component allows an ESP32-S3 or ESP32-S2 to host USB-serial peripheral devices. It uses the {{< docref "/components/usb_host" >}} + +This component allows an ESP32-S3 or ESP32-S2 to host USB-serial peripheral devices. It uses the [Usb Host](/components/usb_host/) component to interface to the device as a USB-OTG host. Currently supported devices are listed in the table below: @@ -60,7 +58,7 @@ The `cdc_acm` type is a generic USB CDC ACM (Abstract Control Model) device. Thi This driver does not strictly enforce the CDC-ACM configuration specification, so it may work with devices that do not properly implement that specification. It expects to find a single interrupt endpoint, a single bulk in endpoint, and a single bulk out endpoint. The `cdc_acm`, `esp_jtag` and `stm32_vcp` types do not support changing baud rate, stop bits or number of data bits, as they implement a virtual channel not typically associated with a physical UART. -### See Also +## See Also -- {{< docref "/components/usb_host" >}} -- {{< apiref "usb_uart/usb_uart.h" "usb_uart/usb_uart.h" >}} +- [USB Host Interface](/components/usb_host/) +- diff --git a/content/components/valve/images/valve-ui.png b/src/content/docs/components/valve/images/valve-ui.png similarity index 100% rename from content/components/valve/images/valve-ui.png rename to src/content/docs/components/valve/images/valve-ui.png diff --git a/content/components/valve/_index.md b/src/content/docs/components/valve/index.mdx similarity index 87% rename from content/components/valve/_index.md rename to src/content/docs/components/valve/index.mdx index facff849fb..dd8460e9cd 100644 --- a/content/components/valve/_index.md +++ b/src/content/docs/components/valve/index.mdx @@ -1,21 +1,23 @@ --- description: "Instructions for setting up base valves in ESPHome." title: "Valve Component" -params: - seo: - description: Instructions for setting up base valves in ESPHome. - image: folder-open.svg +sidebar: + label: "Valve Component" --- +import { Image } from 'astro:assets'; +import valveUiImg from './images/valve-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `valve` component is a generic representation of valves in ESPHome. A valve can (currently) either be *closed* or *open* and supports three commands: *open*, *close* and *stop*. > [!NOTE] > To use a valve in Home Assistant requires Home Assistant 2024.5 or later. -{{< img src="valve-ui.png" alt="Image" class="align-center" >}} + -{{< anchor "config-valve" >}} + ## Base Valve Configuration @@ -37,7 +39,7 @@ Configuration variables: > to use that name, you can set `name: None`. - **device_class** (*Optional*, string): The device class for the sensor. See - for a list of available options. + [https://www.home-assistant.io/components/valve/](https://www.home-assistant.io/components/valve/) for a list of available options. - **icon** (*Optional*, icon): Manually set the icon to use for the valve in the frontend. @@ -50,7 +52,7 @@ Advanced options: (usually Home Assistant) without the user manually enabling it (via the Home Assistant UI). Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. See - for a list of available options. Set to + [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). @@ -61,7 +63,7 @@ MQTT options: - **position_command_topic** (*Optional*, string): The topic to receive valve position commands on. - All other options from [MQTT Component](/components/mqtt#config-mqtt-component). -{{< anchor "valve-open_action" >}} + ## `valve.open` Action @@ -82,7 +84,7 @@ on_...: > call.perform(); > ``` -{{< anchor "valve-close_action" >}} + ## `valve.close` Action @@ -103,7 +105,7 @@ on_...: > call.perform(); > ``` -{{< anchor "valve-stop_action" >}} + ## `valve.stop` Action @@ -124,7 +126,7 @@ on_...: > call.perform(); > ``` -{{< anchor "valve-toggle_action" >}} + ## `valve.toggle` Action @@ -146,7 +148,7 @@ on_...: > call.perform(); > ``` -{{< anchor "valve-control_action" >}} + ## `valve.control` Action @@ -181,7 +183,7 @@ Configuration variables: > call.perform(); > ``` -{{< anchor "valve-lambda_calls" >}} + ## Lambdas @@ -212,7 +214,7 @@ read-only, if you want to act on the valve, use the `make_call()` method as show } ``` -{{< anchor "valve-on_open_trigger" >}} + ### `valve.on_open` Trigger @@ -226,7 +228,7 @@ valve: - logger.log: "Valve is Open!" ``` -{{< anchor "valve-on_closed_trigger" >}} + ### `valve.on_closed` Trigger @@ -242,4 +244,4 @@ valve: ## See Also -- {{< apiref "valve/valve.h" "valve/valve.h" >}} +- diff --git a/content/components/valve/template.md b/src/content/docs/components/valve/template.mdx similarity index 92% rename from content/components/valve/template.md rename to src/content/docs/components/valve/template.mdx index 0d82e76744..a6bb1bb4c6 100644 --- a/content/components/valve/template.md +++ b/src/content/docs/components/valve/template.mdx @@ -1,16 +1,16 @@ --- description: "Instructions for setting up template valves in ESPHome." title: "Template Valve" -params: - seo: - description: Instructions for setting up template valves in ESPHome. - image: description.svg --- +import { Image } from 'astro:assets'; +import valveUiImg from './images/valve-ui.png'; +import APIRef from '@components/APIRef.astro'; + The `template` valve platform allows you to create simple valves out of just a few actions and a value lambda. Once defined, it will automatically appear in Home Assistant as a valve and can be controlled through the frontend. -{{< img src="valve-ui.png" alt="Image" class="align-center" >}} + ```yaml # Example configuration entry @@ -73,7 +73,7 @@ Possible return values for the optional lambda: - All other options from [Valve](/components/valve#config-valve). -{{< anchor "valve-template-publish_action" >}} + ## `valve.template.publish` Action @@ -121,7 +121,7 @@ Configuration options: ## See Also -- {{< docref "/components/valve" >}} +- [Valve Component](/components/valve/) - [Automation](/automations) -- {{< docref "/cookbook/garage-door" >}} -- {{< apiref "template/valve/template_valve.h" "template/valve/template_valve.h" >}} +- [Garage-Door](/cookbook/garage-door/) +- diff --git a/content/components/vbus.md b/src/content/docs/components/vbus.mdx similarity index 93% rename from content/components/vbus.md rename to src/content/docs/components/vbus.mdx index 5092f51a7a..9a5c30c3f0 100644 --- a/content/components/vbus.md +++ b/src/content/docs/components/vbus.mdx @@ -1,18 +1,18 @@ --- description: "Instructions for integrating a solar energy collector controller using VBus protocol in ESPHome." title: "VBus Component" -params: - seo: - description: Instructions for integrating a solar energy collector controller using VBus protocol in ESPHome. - image: resol_deltasol_bs_plus.jpg --- +import { Image } from 'astro:assets'; +import resolVbusAdapterSchematicImg from './images/resol_vbus_adapter_schematic.png'; +import vbusSerialOptocouplerImg from './images/vbus_serial_optocoupler.png'; + The `VBus` Component provides status reading connectivity to solar heat energy collector controllers using VBus protocol. These devices are mainly produced by Resol, often also found under different brand names like Viessmann, Kioto, Wagner etc. The component currently supports natively the models in the table below but any device can be added via lambda by knowing [its packet structure](https://danielwippermann.github.io/resol-vbus). -{{< img src="resol_deltasol_bs_plus.jpg" alt="Image" class="align-center" >}} + ## Supported Models @@ -42,18 +42,18 @@ then that model should work with your unit. ## Hardware Connection -The device must be connected via a {{< docref "/components/uart" "UART bus" >}} supporting the receiving line only. The UART bus +The device must be connected via a [UART bus](/components/uart/) supporting the receiving line only. The UART bus must be configured at the same speed of the module which is by default 9600bps. The controller outputs data every second. To connect to this and read data from the bus a level shifting is needed as the voltage is around 8V (direct connection would damage the MCU). For our read-only purposes it's sufficient to adapt the level appropriately to 3.3V using a circuit like below: -{{< img src="resol_vbus_adapter_schematic.png" alt="Image" class="align-center" >}} + An electrically isolated version using an opto-coupler: -{{< img src="vbus_serial_optocoupler.png" alt="Image" class="align-center" >}} + Another approach, with PCB design ready to be manufactured [can be found here](https://github.com/FatBeard/vbus-arduino-library/tree/master/pcb). @@ -72,7 +72,7 @@ vbus: ``` > [!WARNING] -> If you are using the {{< docref "logger/" >}} make sure you are not using the same pins for it or otherwise disable the UART +> If you are using the [Logger](/components/logger/) make sure you are not using the same pins for it or otherwise disable the UART > logging with the `baud_rate: 0` option. ### Configuration variables @@ -267,8 +267,8 @@ binary_sensor: ## See Also -- {{< docref "/components/uart" >}} -- {{< docref "/components/binary_sensor" >}} -- {{< docref "/components/sensor" >}} +- [UART Bus](/components/uart/) +- [Binary Sensor Component](/components/binary_sensor/) +- [Sensor Component](/components/sensor/) - [Resol manuals](https://www.resol.de/en/dokumente) - [VBus protocol](https://danielwippermann.github.io/resol-vbus) diff --git a/content/components/voice_assistant.md b/src/content/docs/components/voice_assistant.mdx similarity index 87% rename from content/components/voice_assistant.md rename to src/content/docs/components/voice_assistant.mdx index 9410ff9c5b..1b18cc789f 100644 --- a/content/components/voice_assistant.md +++ b/src/content/docs/components/voice_assistant.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for setting up a Voice Assistant in ESPHome." title: "Voice Assistant" -params: - seo: - description: Instructions for setting up a Voice Assistant in ESPHome. - image: voice-assistant.svg --- +import APIStruct from '@components/APIStruct.astro'; +import APIRef from '@components/APIRef.astro'; + ESPHome devices with a microphone are able to stream the audio to Home Assistant and be processed there by [assist](https://www.home-assistant.io/voice_control/). @@ -20,7 +19,7 @@ ESPHome devices with a microphone are able to stream the audio to Home Assistant > configuration. In particular, Bluetooth/BLE components are known to cause issues when used in > combination with Voice Assistant and/or other audio components. > -> If you experience crashes, see the {{< docref "/guides/troubleshooting" >}} guide for how to get a backtrace. +> If you experience crashes, see the [Troubleshooting](/guides/troubleshooting/) guide for how to get a backtrace. ```yaml voice_assistant: @@ -30,15 +29,15 @@ voice_assistant: ## Configuration variables - **microphone** (**Required**, [Microphone Source Configuration](/components/microphone#config-microphone-source)): The - {{< docref "/components/microphone/index" "microphone" >}} settings to use for input. + [microphone](/components/microphone/) settings to use for input. -- **micro_wake_word** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/micro_wake_word" "micro_wake_word" >}} +- **micro_wake_word** (*Optional*, [ID](/guides/configuration-types#id)): The [micro_wake_word](/components/micro_wake_word/) component used for wake word detection. Configuring this allows Home Assistant to change which wake word model is enabled. -- **speaker** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/speaker/index" "speaker" >}} to use to output +- **speaker** (*Optional*, [ID](/guides/configuration-types#id)): The [speaker](/components/speaker/) to use to output the response. Cannot be used with `media_player` below. -- **media_player** (*Optional*, [ID](/guides/configuration-types#id)): The {{< docref "/components/media_player/index" "media_player" >}} +- **media_player** (*Optional*, [ID](/guides/configuration-types#id)): The [media_player](/components/media_player/) to use to output the response. Cannot be used with `speaker` above. - **use_wake_word** (*Optional*, boolean): Enable wake word on the assist pipeline. Defaults to `false`. @@ -110,27 +109,27 @@ voice_assistant: - **on_timer_started** (*Optional*, [Automation](/automations)): An automation to perform when a voice assistant timer has started. The timer is available as `timer` of type - {{< apistruct "voice_assistant::Timer" "voice_assistant::Timer" >}}. + . - **on_timer_finished** (*Optional*, [Automation](/automations)): An automation to perform when a voice assistant timer has finished. The timer is available as `timer` of type - {{< apistruct "voice_assistant::Timer" "voice_assistant::Timer" >}}. + . - **on_timer_cancelled** (*Optional*, [Automation](/automations)): An automation to perform when a voice assistant timer has been cancelled. The timer is available as `timer` of type - {{< apistruct "voice_assistant::Timer" "voice_assistant::Timer" >}}. + . - **on_timer_updated** (*Optional*, [Automation](/automations)): An automation to perform when a voice assistant timer has been updated (paused/resumed/duration changed). The timer is available as `timer` of type - {{< apistruct "voice_assistant::Timer" "voice_assistant::Timer" >}}. + . - **on_timer_tick** (*Optional*, [Automation](/automations)): An automation to perform when the voice assistant timers tick is triggered. This is called every **1 second** while there are timers on this device. The timers are available as `timers` which is a `std::vector` (array) of type - {{< apistruct "voice_assistant::Timer" "voice_assistant::Timer" >}}. + . -{{< anchor "voice_assistant-actions" >}} + ## Actions @@ -144,7 +143,7 @@ Listens for one voice command then stops. - **silence_detection** (*Optional*, boolean): Enable silence detection. Defaults to `true`. - **wake_word** (*Optional*, string): The wake word that was used to trigger the voice assistant - when using on-device wake word such as {{< docref "/components/micro_wake_word" >}}. + when using on-device wake word such as [Micro Wake Word](/components/micro_wake_word/). Call `voice_assistant.stop` to signal the end of the voice command if `silence_detection` is set to `false`. @@ -177,7 +176,7 @@ for continuous wake word detection. ## Push to Talk -Here is an example offering Push to Talk with a {{< docref "/components/binary_sensor" >}}. +Here is an example offering Push to Talk with a [Binary Sensor](/components/binary_sensor/). ```yaml voice_assistant: @@ -221,5 +220,5 @@ binary_sensor: ## See Also -- {{< docref "microphone/" >}} -- {{< apiref "voice_assistant/voice_assistant.h" "voice_assistant/voice_assistant.h" >}} +- [Microphone Components](/components/microphone/) +- diff --git a/content/components/water_heater/_index.md b/src/content/docs/components/water_heater/index.mdx similarity index 88% rename from content/components/water_heater/_index.md rename to src/content/docs/components/water_heater/index.mdx index 23e5a44a62..42c009e322 100644 --- a/content/components/water_heater/_index.md +++ b/src/content/docs/components/water_heater/index.mdx @@ -1,14 +1,19 @@ --- description: "Instructions for setting up water heaters in ESPHome." title: "Water Heater Component" +sidebar: + label: "Water Heater Component" --- +import APIClass from '@components/APIClass.astro'; +import APIRef from '@components/APIRef.astro'; + The `water_heater` component is a generic representation of water heaters (boilers) in ESPHome. A water heater handles a target temperature setpoint and an operation mode (like *Eco*, *Electric*, or *Performance*). > [!NOTE] > The water heater integration is available for Home Assistant 2026.2 and later. -{{< anchor "config-water-heater" >}} + ## Base Water Heater Configuration @@ -49,7 +54,7 @@ Advanced options: (usually Home Assistant) without the user manually enabling it (via the Home Assistant UI). Defaults to `false`. - **entity_category** (*Optional*, string): The category of the entity. See - for a list of available options. Set to + [https://developers.home-assistant.io/docs/core/entity/#generic-properties](https://developers.home-assistant.io/docs/core/entity/#generic-properties) for a list of available options. Set to `""` to remove the default entity category. - If Webserver enabled and version 3 is selected, All other options from Webserver Component.. See [Webserver Version 3](/components/web_server#config-webserver-version-3-options). @@ -62,7 +67,7 @@ MQTT options: - **target_temperature_state_topic** (*Optional*, string): The topic to publish target temperature state changes to. - All other options from [MQTT Component](/components/mqtt#config-mqtt-component). -{{< anchor "water-heater-control_action" >}} + ## `water_heater.control` Action @@ -93,7 +98,7 @@ Configuration variables: > call.perform(); > ``` -{{< anchor "water-heater-modes" >}} + ## Water Heater Modes @@ -107,7 +112,7 @@ The following modes are available for water heaters. Note that not all platforms - `HEAT_PUMP` - `GAS` -{{< anchor "water-heater-lambda_calls" >}} + ## Lambdas @@ -145,5 +150,6 @@ Available C++ enums for modes: ## See Also -- {{< docref "/components/water_heater/template" >}} -- {{< apiref "water_heater/water_heater.h" "water_heater/water_heater.h" >}} +- [Template Water Heater](/components/water_heater/template/) +- +- diff --git a/content/components/water_heater/template.md b/src/content/docs/components/water_heater/template.mdx similarity index 94% rename from content/components/water_heater/template.md rename to src/content/docs/components/water_heater/template.mdx index 7dfef826da..491fd7af56 100644 --- a/content/components/water_heater/template.md +++ b/src/content/docs/components/water_heater/template.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up template water heaters in ESPHome." title: "Template Water Heater" -params: - seo: - description: Instructions for setting up template water heaters in ESPHome. - image: description.svg --- +import APIRef from '@components/APIRef.astro'; + The `template` water heater platform allows you to create simple water heaters out of just a few actions and lambdas. Once defined, it will automatically appear in Home Assistant as a water heater entity and can be controlled through the frontend. @@ -98,7 +96,7 @@ Possible return values for the lambdas: - All other options from [Water Heater](/components/water_heater#config-water-heater). -{{< anchor "water_heater-template-publish_action" >}} + ## `water_heater.template.publish` Action @@ -140,6 +138,6 @@ Configuration options: ## See Also -- {{< docref "/components/water_heater" >}} +- [Water Heater Component](/components/water_heater/) - [Automation](/automations) -- {{< apiref "template/water_heater/template_water_heater.h" "template/water_heater/template_water_heater.h" >}} +- diff --git a/content/components/web_server.md b/src/content/docs/components/web_server.mdx similarity index 79% rename from content/components/web_server.md rename to src/content/docs/components/web_server.mdx index d45e0fa7d1..2c18563547 100644 --- a/content/components/web_server.md +++ b/src/content/docs/components/web_server.mdx @@ -1,21 +1,45 @@ --- description: "Instructions for setting up a web server in ESPHome." title: "Web Server Component" -params: - seo: - description: Instructions for setting up a web server in ESPHome. - image: http.svg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; +import webServerImg from './images/web_server.png'; +import webServerV2Img from './images/web_server-v2.png'; +import webServerV3Img from './images/web_server-v3.png'; +import numberSliderPopupImg from './images/number-slider-popup.png'; +import numberSliderPopupInputFieldImg from './images/number-slider-popup-input-field.png'; +import tabHeaderExpandCloapsedImg from './images/tab-header-expand-cloapsed.png'; +import tabHeaderExpandControlsExpandedImg from './images/tab-header-expand-controls-expanded.png'; +import tabHeaderExpandLogsExpandedImg from './images/tab-header-expand-logs-expanded.png'; +import sensorHistoryGraphImg from './images/sensor-history-graph.png'; +import APIRef from '@components/APIRef.astro'; + The `web_server` component creates a simple web server on the node that can be accessed through any browser and a simple [REST API](/web-api#api-rest). Please note that enabling this component will take up *a lot* of memory and may decrease stability, especially on ESP8266. -{{< img src="web_server.png" alt="Image" caption="Web server version 1" width="86.0%" class="align-center" >}} - -{{< img src="web_server-v2.png" alt="Image" caption="Web server version 2" width="86.0%" class="align-center" >}} - -{{< img src="web_server-v3.png" alt="Image" caption="Web server version 3" width="86.0%" class="align-center" >}} +
    + +
    + +
    To navigate to the web server in your browser, either use the IP address of the node or use `.local/` (note the trailing forward slash) via mDNS. @@ -30,14 +54,14 @@ web_server: - **port** (*Optional*, int): The port the web server should open its socket on. - **css_url** (*Optional*, url): The URL that should be used for the CSS stylesheet. Defaults - to (updates will go to `v2`, `v3`, etc). Can be set to empty string. + to [https://oi.esphome.io/v1/webserver-v1.min.css](https://oi.esphome.io/v1/webserver-v1.min.css) (updates will go to `v2`, `v3`, etc). Can be set to empty string. - **css_include** (*Optional*, local file): Path to local file to be included in web server index page. Contents of this file will be served as `/0.css` and used as CSS stylesheet by internal webserver. Useful when building device without internet access, where you want to use built-in AP and webserver. - **js_url** (*Optional*, url): The URL that should be used for the JS script. Defaults - to . Can be set to empty string. + to [https://oi.esphome.io/v1/webserver-v1.min.js](https://oi.esphome.io/v1/webserver-v1.min.js). Can be set to empty string. - **js_include** (*Optional*, local file): Path to local file to be included in web server index page. Contents of this file will be served as `/0.js` and used as JS script by internal webserver. @@ -113,7 +137,7 @@ interface are externally hosted at oi.esphome.io. If you want to use your own se > captive_portal: # This component automatically enables OTA > ``` > -> See {{< docref "/components/ota/web_server" >}} for more information. +> See [Web Server](/components/ota/web_server/) for more information. ## Example configurations @@ -190,13 +214,13 @@ web_server: version: 2 ``` -Copy to a V2 folder in your yaml folder. +Copy [https://oi.esphome.io/v2/www.js](https://oi.esphome.io/v2/www.js) to a V2 folder in your yaml folder. -{{< anchor "config-webserver-version-3-options" >}} + ## Version 3 features -{{< anchor "config-webserver-sorting" >}} + ### Entity sorting @@ -219,7 +243,7 @@ sensor: sorting_weight: -1 ``` -{{< anchor "config-webserver-grouping" >}} + ### Entity grouping @@ -255,30 +279,38 @@ number: ### Number in slider mode -{{< img src="number-slider-popup.png" alt="Image" width="100.0%" class="align-left" >}} + You can change the value by moving the slider. If you wish to enter a precise number you can click and hold the current value. A popup input field will appear where you can enter a number and confirm your input by pressing the enter key. -{{< img src="number-slider-popup-input-field.png" alt="Image" width="100.0%" class="align-left" >}} + ### Expand Controls and Logs -{{< img src="tab-header-expand-cloapsed.png" alt="Image" width="100.0%" class="align-left" >}} + By double-clicking on any group header you can expand the controls to fill up the whole screen. You can do the same for the logs. -{{< img src="tab-header-expand-controls-expanded.png" alt="Image" caption="Expanded Controls" - width="100.0%" class="align-center" >}} +
    -{{< img src="tab-header-expand-logs-expanded.png" alt="Image" caption="Expanded Logs" - width="100.0%" class="align-center" >}} +
    ### Sensor value graph -{{< img src="sensor-history-graph.png" alt="Image" width="100.0%" class="align-left" >}} + By clicking on any sensor it will expand a graph with the historical values for that sensor. @@ -286,5 +318,5 @@ By clicking on any sensor it will expand a graph with the historical values for - [Event Source API](/web-api#api-event-source) - [REST API](/web-api#api-rest) -- {{< apiref "web_server/web_server.h" "web_server/web_server.h" >}} -- {{< docref "prometheus/" >}} +- [Prometheus Component](/components/prometheus/) +- diff --git a/content/components/weikai.md b/src/content/docs/components/weikai.mdx similarity index 96% rename from content/components/weikai.md rename to src/content/docs/components/weikai.mdx index 55e8cbae24..9bf8aac071 100644 --- a/content/components/weikai.md +++ b/src/content/docs/components/weikai.mdx @@ -1,12 +1,12 @@ --- description: "Instructions for setting up WeiKai SPI/I²C to UART Expanders in ESPHome." title: "WeiKai SPI/I²C UART/IO Expander" -params: - seo: - description: Instructions for setting up WeiKai SPI/I²C to UART Expanders in ESPHome. - image: wk2168.jpg --- +import { Image } from 'astro:assets'; +import dfr0627Img from './images/DFR0627.jpg'; +import APIRef from '@components/APIRef.astro'; + **WeiKai Microelectronics** provides a family of UART & GPIO expansion chips that interfaces to a micro-controller through SPI or I²C bus. @@ -24,7 +24,7 @@ It can also be used with evaluation board equipped with these chips, such as: - [WK2132 Chip Development Board](https://www.aliexpress.com/item/1005002018579265.html) - [DFROBOT Gravity: I²C to Dual UART Module](https://www.dfrobot.com/product-2001.html) -{{< img src="DFR0627.jpg" alt="Image" class="align-center" >}} + The features provided by the different WeiKai chips are described in the following table: @@ -293,6 +293,6 @@ log file and the baud rate will automatically be decreased. - [I²C Bus](/components/i2c) - [SPI Bus](/components/spi) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} -- {{< apiref "weika/weika.h" "weika/weika.h" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) +- diff --git a/content/components/wiegand.md b/src/content/docs/components/wiegand.mdx similarity index 88% rename from content/components/wiegand.md rename to src/content/docs/components/wiegand.mdx index 74ba0c18fd..4caa4bd8bb 100644 --- a/content/components/wiegand.md +++ b/src/content/docs/components/wiegand.mdx @@ -1,16 +1,22 @@ --- description: "Wiegand-standard key input and card/tag reader panel" title: "Wiegand keypad and tag reader" -params: - seo: - description: Wiegand-standard key input and card/tag reader panel - image: wiegand.jpg --- +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + The `wiegand` component allows you to integrate Wiegand-standard key input and card or tag reader panels in Home Assistant. -{{< img src="wiegand.jpg" alt="Image" caption="S20-ID keypad and tag reader" class="align-center" >}} +
    > [!NOTE] > Some keypads are preconfigured by the factory to act as Wiegand input @@ -64,4 +70,4 @@ wiegand: ## See Also -- {{< docref "/components/key_collector" >}} +- [Key collector component](/components/key_collector/) diff --git a/content/components/wifi.md b/src/content/docs/components/wifi.mdx similarity index 94% rename from content/components/wifi.md rename to src/content/docs/components/wifi.mdx index d6792f12a1..44dfe6183d 100644 --- a/content/components/wifi.md +++ b/src/content/docs/components/wifi.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up the WiFi configuration for your ESP node in ESPHome." title: "WiFi Component" -params: - seo: - description: Instructions for setting up the WiFi configuration for your ESP node in ESPHome. - image: network-wifi.svg --- +import APIRef from '@components/APIRef.astro'; + This core ESPHome component sets up WiFi connections to access points for you. You need to have a network configuration (either Wifi or Ethernet) @@ -38,7 +36,7 @@ wifi: > [!TIP] > For WiFi security recommendations including `min_auth_mode` configuration, see the [Security Best Practices](/guides/security_best_practices#wifi-security) guide. -{{< anchor "wifi-configuration_variables" >}} + ## Configuration variables @@ -178,12 +176,12 @@ wifi: ## User Entered Credentials -Some components such as {{< docref "captive_portal/" >}}, {{< docref "improv_serial/" >}} and -{{< docref "esp32_improv/" >}} enable the user to send and save Wi-Fi credentials to the device. Beginning in 2022.11.0, +Some components such as [Captive Portal](/components/captive_portal/), [Improv Serial](/components/improv_serial/) and +[Esp32 Improv](/components/esp32_improv/) enable the user to send and save Wi-Fi credentials to the device. Beginning in 2022.11.0, as long as no credentials are set in the config file, and firmware is uploaded without erasing the flash (via OTA), the device will keep the saved credentials. -{{< anchor "wifi-manual_ip" >}} + ## Manual IPs @@ -208,14 +206,14 @@ wifi: After putting a manual IP in your configuration, the ESP will no longer need to negotiate a dynamic IP address with the router, thus improving the time until connection. -Additionally, this can help with {{< docref "/components/ota" >}} if for example the +Additionally, this can help with [Ota](/components/ota/) if for example the network doesn't allow for `.local` addresses. When a manual IP is in your configuration, the OTA process will automatically choose that as the target for the upload. > [!NOTE] > See also [Changing ESPHome Node Name](/components/esphome#esphome-changing_node_name). -{{< anchor "wifi-power_save_mode" >}} + ## Power Save Mode @@ -234,7 +232,7 @@ wifi: power_save_mode: none ``` -{{< anchor "wifi-min_auth_mode" >}} + ## WiFi Authentication Mode @@ -269,7 +267,7 @@ wifi: min_auth_mode: WPA3 # Only connect to WPA3 networks (most secure) ``` -{{< anchor "wifi-post_connect_roaming" >}} + ## Post-Connect Roaming @@ -350,7 +348,7 @@ seamless handoff: For seamless 802.11k/v/r roaming, use ESP32 and configure `enable_btm` and `enable_rrm`. -{{< anchor "wifi-networks" >}} + ## Connecting to Multiple Networks @@ -417,7 +415,7 @@ wifi: hidden: true ``` -{{< anchor "eap" >}} + ## Enterprise Authentication @@ -462,7 +460,7 @@ wifi: - **ttls_phase_2** (*Optional*, string): The Phase 2 Authentication Method for EAP-TTLS. Can be `pap`, `eap`, `mschap`, `mschapv2` or `chap`, defaults to `mschapv2`. -{{< anchor "wifi-on_connect_disconnect" >}} + ## `on_connect` / `on_disconnect` Trigger @@ -479,7 +477,7 @@ wifi: ## Actions -{{< anchor "wifi-on_disable" >}} + ### `wifi.disable` Action @@ -496,7 +494,7 @@ on_...: > [WiFi component](#configuration-variables) if you disable WiFi. If WiFi remains off for longer than the duration of > either timeout, the device will reboot! -{{< anchor "wifi-on_enable" >}} + ### `wifi.enable` Action @@ -511,7 +509,7 @@ on_...: > [!NOTE] > The configuration option `enable_on_boot` can be set to `false` if you do not want wifi to be enabled on boot. -{{< anchor "wifi-configure" >}} + ### `wifi.configure` Action @@ -549,7 +547,7 @@ on_...: ## Conditions -{{< anchor "wifi-connected_condition" >}} + ### `wifi.connected` Condition @@ -566,7 +564,7 @@ on_...: The lambda equivalent for this is `id(wifi_id).is_connected()`. -{{< anchor "wifi-enabled_condition" >}} + ### `wifi.enabled` Condition @@ -584,7 +582,7 @@ on_...: The lambda equivalent for this is `!id(wifi_id).is_disabled()`. -{{< anchor "wifi-ap-active_condition" >}} + ### `wifi.ap_active` Condition @@ -602,10 +600,10 @@ The lambda equivalent for this is `id(wifi_id).is_ap_active()`. ## See Also -- {{< docref "captive_portal/" >}} -- {{< docref "text_sensor/wifi_info" >}} -- {{< docref "sensor/wifi_signal" >}} -- {{< docref "network/" >}} -- {{< docref "/components/ethernet" >}} -- {{< docref "api/" >}} -- {{< apiref "wifi/wifi_component.h" "wifi/wifi_component.h" >}} +- [Captive Portal](/components/captive_portal/) +- [WiFi Info Text Sensor](/components/text_sensor/wifi_info/) +- [WiFi Signal Sensor](/components/sensor/wifi_signal/) +- [Network component](/components/network/) +- [Ethernet Component](/components/ethernet/) +- [Native API](/components/api/) +- diff --git a/content/components/wireguard.md b/src/content/docs/components/wireguard.mdx similarity index 88% rename from content/components/wireguard.md rename to src/content/docs/components/wireguard.mdx index 2d7e87f8af..2b63949329 100644 --- a/content/components/wireguard.md +++ b/src/content/docs/components/wireguard.mdx @@ -1,9 +1,6 @@ --- description: "Instructions to setup WireGuard for your ESP board." title: "WireGuard Component" -params: - seo: - description: Instructions to setup WireGuard for your ESP board. --- [WireGuard®](https://www.wireguard.org/) is an extremely simple yet fast and modern VPN that utilizes @@ -24,12 +21,12 @@ available for ESP32, ESP8266 and BK72xx microcontrollers *only*. > [!WARNING] > This component requires the system clock to be synchronized. > -> See {{< docref "time/" >}} to setup a time source +> See [Time](/components/time/) to setup a time source > and **do not use** `homeassistant` time-platform if > Home Assistant is on the remote peer because the time > synchronization is a prerequisite to establish the VPN link. > -> The {{< docref "time/sntp" >}} is a valid time-platform choice. +> The [Sntp](/components/time/sntp/) is a valid time-platform choice. A VPN tunnel can be created to a **single** remote peer adding the following to your configuration: @@ -72,18 +69,18 @@ wireguard: ## Configuration variables -{{< anchor "wireguard-address" >}} + - **address** (**Required**, IPv4 address): The local VPN address of the device. If you intend to upload firmwares through the VPN link you probably need - to copy this value to the `use_address` parameter of the {{< docref "wifi/" >}}. + to copy this value to the `use_address` parameter of the [Wifi](/components/wifi/). - **netmask** (*Optional*, IPv4 address): The netmask for the configured address. Default to `255.255.255.255`. See section [Static routes and outgoing connections](#wireguard-static-routes) if outgoing connections are - expected to transit through the VPN link (e.g. with {{< docref "mqtt/" >}} to a + expected to transit through the VPN link (e.g. with [Mqtt](/components/mqtt/) to a remote MQTT broker). - **private_key** (**Required**, string): The private key of the device. @@ -112,7 +109,7 @@ wireguard: The device own `address/32` is always added by default to this list. See section [Static routes and outgoing connections](#wireguard-static-routes) if outgoing connections are - expected to transit through the VPN link (e.g. with {{< docref "mqtt/" >}} to a + expected to transit through the VPN link (e.g. with [Mqtt](/components/mqtt/) to a remote MQTT broker). - **reboot_timeout** (*Optional*, [Time](/guides/configuration-types#time)): The amount of time to wait @@ -125,7 +122,7 @@ wireguard: This can be used to delay the initialization of components that use the VPN tunnel as long as the VPN isn't ready. For example if you are using - {{< docref "mqtt/" >}} to reach a remote broker you may experience boot freeze just + [Mqtt](/components/mqtt/) to reach a remote broker you may experience boot freeze just after the setup of MQTT because it waits for the broker to be reachable, but the connection cannot be established until the VPN link is active too. To bypass such deadlock set this parameter to `true` in @@ -136,7 +133,7 @@ wireguard: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. -{{< anchor "wireguard-static-routes" >}} + ## Static routes and outgoing connections @@ -160,19 +157,19 @@ Let's explain with some examples: | ------------ | ---------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | 172.16.0.100 | *omitted* or 255.255.255.255 | *omitted* or any other value | **none**, no routes are created | | 172.16.0.100 | 255.255.255.0 | *omitted* | to `172.16.0.0/24` network | -| 172.16.0.100 | 255.255.255.0 | `- 172.16.0.0/24`{{< break >}}`- 192.168.0.0/24`{{< break >}} *`- any other`* | only to `172.16.0.0/24` because `192.168.0.0/24` and any other network will be outside of `172.16.0.0/24` | +| 172.16.0.100 | 255.255.255.0 | `- 172.16.0.0/24
    - 192.168.0.0/24`
    *`- any other`* | only to `172.16.0.0/24` because `192.168.0.0/24` and any other network will be outside of `172.16.0.0/24` | | 172.16.0.100 | 255.255.255.0 | `- 192.168.0.0/24` | **none** because `192.168.0.0/24` is not part of `172.16.0.0/24` | | 10.44.0.100 | 255.0.0.0 | *omitted* | to `10.0.0.0/8` network | -| 10.44.0.100 | 255.0.0.0 | `- 10.44.0.0/16`{{< break >}}`- 10.10.0.0/16` | only to the networks in the allowed list because the netmask will route the whole `10.0.0.0/8` but wireguard allows only those two subnets | +| 10.44.0.100 | 255.0.0.0 | `- 10.44.0.0/16
    - 10.10.0.0/16` | only to the networks in the allowed list because the netmask will route the whole `10.0.0.0/8` but wireguard allows only those two subnets | | any | 0.0.0.0 | *omitted* | **any** | -| any | 0.0.0.0 | `- 172.16.0.0/24`{{< break >}}`- 10.44.0.0/16`{{< break >}}`- 10.10.0.0/16` | to any network that is in the list of allowed IPs because the netmask will route any traffic but wireguard allows only its own list | +| any | 0.0.0.0 | `- 172.16.0.0/24
    - 10.44.0.0/16`
    `- 10.10.0.0/16` | to any network that is in the list of allowed IPs because the netmask will route any traffic but wireguard allows only its own list | > [!NOTE] > Setting the `netmask` to `0.0.0.0` has the effect of routing > through the VPN link any traffic. It is like having set the wireguard > interface as the system default. -{{< anchor "wireguard-sensors" >}} + ## Sensors @@ -238,7 +235,7 @@ text_sensor: All options from [Text Sensor](/components/text_sensor#config-text_sensor) can be added to the above configuration. -{{< anchor "wireguard-actions" >}} + ## Actions @@ -272,7 +269,7 @@ on_...: The lambda equivalent is `id(wireguard_id).enable()`. -{{< anchor "wireguard-conditions" >}} + ## Conditions @@ -310,7 +307,7 @@ on_...: The lambda equivalent is `id(wireguard_id).is_peer_up()`. -{{< anchor "wireguard-installation" >}} + ## Remote peer setup @@ -346,13 +343,13 @@ The device should now be linked to your remote Home Assistant. > [!NOTE] > If you have issues linking the ESP device try setting -> the `use_address` parameter of the {{< docref "wifi/" >}} to the value +> the `use_address` parameter of the [Wifi](/components/wifi/) to the value > of the [address](#wireguard-address) configured here. ## See Also -- {{< docref "time/" >}} -- {{< docref "time/sntp" >}} +- [Time Component](/components/time/) +- [SNTP Time Source](/components/time/sntp/) - [Automation](/automations) - [WireGuard®](https://www.wireguard.org/) official website - [Home Assistant Community Add-on: WireGuard](https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662) diff --git a/content/components/xl9535.md b/src/content/docs/components/xl9535.mdx similarity index 86% rename from content/components/xl9535.md rename to src/content/docs/components/xl9535.mdx index 75127f730d..7d5b25539c 100644 --- a/content/components/xl9535.md +++ b/src/content/docs/components/xl9535.mdx @@ -1,11 +1,9 @@ --- description: "Instructions for setting up XL9535 digital port expanders in ESPHome." title: "XL9535 I/O Expander" -params: - seo: - description: Instructions for setting up XL9535 digital port expanders in ESPHome. - image: xl9535.svg --- +import APIRef from '@components/APIRef.astro'; + The XL9535 component allows you to use **XL9535** I/O expander in ESPHome. It uses [I²C Bus](/components/i2c) for communication. @@ -51,10 +49,10 @@ switch: - **mode** (*Optional*, string): A pin mode to set for the pin at. One of `INPUT` or `OUTPUT`. -### See Also +## See Also - [I²C Bus](/components/i2c) -- {{< docref "switch/gpio" >}} -- {{< docref "binary_sensor/gpio" >}} +- [GPIO Switch](/components/switch/gpio/) +- [GPIO Binary Sensor](/components/binary_sensor/gpio/) - [XL9535 datasheet](https://www.lcsc.com/datasheet/lcsc_datasheet_2410122054_XINLUDA-XL9535_C561273.pdf) -- {{< apiref "xl9535/xl9535.h" "xl9535/xl9535.h" >}} +- diff --git a/content/components/xxtea.md b/src/content/docs/components/xxtea.mdx similarity index 80% rename from content/components/xxtea.md rename to src/content/docs/components/xxtea.mdx index dabc7e379f..a78a3f469f 100644 --- a/content/components/xxtea.md +++ b/src/content/docs/components/xxtea.mdx @@ -1,10 +1,9 @@ --- description: "Lightweight encryption algorithm for ESPHome" title: "XXTEA Component" -params: - seo: - description: Lightweight encryption algorithm for ESPHome --- +import APIRef from '@components/APIRef.astro'; + This component cannot be used directly in YAML, but can be used in lambdas to encrypt and decrypt data. @@ -17,5 +16,4 @@ See the API docs for more information on how to use this component. ## See Also -- {{< docref "index/" >}} -- {{< apiref "xxtea/xxtea.h" "xxtea/xxtea.h" >}} +- diff --git a/content/components/zigbee.md b/src/content/docs/components/zigbee.mdx similarity index 98% rename from content/components/zigbee.md rename to src/content/docs/components/zigbee.mdx index fc70b35df5..8c701cd9fa 100644 --- a/content/components/zigbee.md +++ b/src/content/docs/components/zigbee.mdx @@ -1,10 +1,6 @@ --- description: "Zigbee End Device for Zigbee2MQTT and ZHA." title: "Zigbee End Device" -params: - seo: - description: Zigbee End Device for Zigbee2MQTT and ZHA. - image: zigbee.svg --- The `zigbee` component allows exposing supported ESPHome components over a Zigbee network to Home Assistant diff --git a/content/components/zwave_proxy.md b/src/content/docs/components/zwave_proxy.mdx similarity index 87% rename from content/components/zwave_proxy.md rename to src/content/docs/components/zwave_proxy.mdx index 2dae76b77f..87af23def2 100644 --- a/content/components/zwave_proxy.md +++ b/src/content/docs/components/zwave_proxy.mdx @@ -1,22 +1,20 @@ --- description: "Instructions for setting up the Z-Wave Proxy in ESPHome." title: "Z-Wave Proxy" -params: - seo: - description: Instructions for setting up the Z-Wave Proxy in ESPHome. - image: z-wave.svg --- +import APIRef from '@components/APIRef.astro'; + The `zwave_proxy` component allows proxying of Z-Wave data frames between a [Z-Wave Modem SoC](https://www.silabs.com/wireless/z-wave/800-series-modem-soc) and -[Z-Wave JS](https://zwave-js.github.io/zwave-js/) via ESPHome's {{< docref "/components/api" >}} over -the {{< docref "/components/wifi" >}} or {{< docref "/components/ethernet" >}}. This allows for more flexibility when +[Z-Wave JS](https://zwave-js.github.io/zwave-js/) via ESPHome's [Api](/components/api/) over +the [Wifi](/components/wifi/) or [Ethernet](/components/ethernet/). This allows for more flexibility when placing your Z-Wave hardware within your home. As the Z-Wave modem SoC communicates via a serial connection, you need to have a [UART](/components/uart) defined in your ESPHome device's configuration. -In addition, the `zwave_proxy` expects to proxy messages via ESPHome's {{< docref "/components/api" >}}; this is also +In addition, the `zwave_proxy` expects to proxy messages via ESPHome's [Api](/components/api/); this is also required in your configuration. > [!NOTE] @@ -87,7 +85,7 @@ If you choose to use Wi-Fi to bridge your Z-Wave modem to Z-Wave JS: ## See Also -- {{< docref "/components/api" >}} -- {{< docref "/components/ethernet" >}} -- {{< docref "/components/wifi" >}} -- {{< apiref "zwave_proxy/zwave_proxy.h" "zwave_proxy/zwave_proxy.h" >}} +- [Native API Component](/components/api/) +- [Ethernet Component](/components/ethernet/) +- [WiFi Component](/components/wifi/) +- diff --git a/content/cookbook/arduino_port_extender.md b/src/content/docs/cookbook/arduino_port_extender.mdx similarity index 97% rename from content/cookbook/arduino_port_extender.md rename to src/content/docs/cookbook/arduino_port_extender.mdx index b9566cf9e6..334c671f80 100644 --- a/content/cookbook/arduino_port_extender.md +++ b/src/content/docs/cookbook/arduino_port_extender.mdx @@ -1,16 +1,15 @@ --- description: "Instructions on using an Arduino board, like the Pro Mini for expanding ports of an ESPHome node" title: "Arduino Port Expander" -params: - seo: - description: Instructions on using an Arduino board, like the Pro Mini for expanding ports of an ESPHome node - image: arduino_logo.svg --- +import { Image } from 'astro:assets'; +import arduinoProMiniImg from './images/arduino_pro_mini.jpg'; + With this sketch you can control pins of a remote Arduino board through ESPHome. The Arduino acts as a port expander, allowing you to use more pins than a standard ESP8266/ESP32 has. -{{< img src="arduino_pro_mini.jpg" alt="Image" width="75.0%" class="align-center" >}} + The Arduino is connected to the ESP via I²C. Most Arduinos use the `A4` and `A5` pins for the I²C bus so those pins are not available to read from ESPHome. @@ -310,5 +309,3 @@ sensor: filters: - throttle: 2s ``` - -## See Also diff --git a/content/cookbook/bme280_environment.md b/src/content/docs/cookbook/bme280_environment.mdx similarity index 80% rename from content/cookbook/bme280_environment.md rename to src/content/docs/cookbook/bme280_environment.mdx index a5ff30bf44..b188cbe0d6 100644 --- a/content/cookbook/bme280_environment.md +++ b/src/content/docs/cookbook/bme280_environment.mdx @@ -1,24 +1,23 @@ --- description: "Instructions for setting up BME280 sensors in ESPHome and calculate altitude, absolute humidity, and sea level pressure." title: "BME280 Environment" -params: - seo: - description: Instructions for setting up BME280 sensors in ESPHome and calculate altitude, absolute humidity, and sea level pressure. - image: bme280.jpg --- -The {{< docref "/components/sensor/bme280" >}} is a simple temperature, humidity, and pressure sensor with communication +import { Image } from 'astro:assets'; +import bme280HeaderImg from './images/bme280-header.jpg'; + +The [Bme280](/components/sensor/bme280/) is a simple temperature, humidity, and pressure sensor with communication over [I²C](/components/i2c) or [SPI](/components/spi). With some simple math it is possible to either determine the height of the sensor, or the current pressure at sea level. This guide can be applied to any sensor measuring temperature and pressure at the same time, like the -{{< docref "/components/sensor/bmp280" >}}, or {{< docref "/components/sensor/bme680" >}}. +[Bmp280](/components/sensor/bmp280/), or [Bme680](/components/sensor/bme680/). -{{< img src="bme280-header.jpg" alt="Image" width="75.0%" class="align-center" >}} + -The first step is to connect the sensor as described {{< docref "/components/sensor/bme280" "here" >}}. +The first step is to connect the sensor as described [here](/components/sensor/bme280/). After validating the sensor is working, we can proceed and add some formulas. In the example below, modify `platform: bme280` as appropriate for your hardware (either `bme280_i2c` or `bme280_spi`). -See {{< docref "/components/sensor/bme280" >}} for specific details. +See [Bme280](/components/sensor/bme280/) for specific details. ```yaml sensor: @@ -61,13 +60,13 @@ sensor: The first block `sensor` starts with the normal bme280 sensor components `temperature`, `pressure`, and `humidity` with each their own id. -After the bme280 sensor, a {{< docref "/components/sensor/template" >}} is defined to calculate the altitude in a lambda. +After the bme280 sensor, a [Template](/components/sensor/template/) is defined to calculate the altitude in a lambda. The variable `STANDARD_SEA_LEVEL_PRESSURE` (in hPa), should be filled in for your location. The formula derived from [finitespace/BME280](https://github.com/finitespace/BME280/blob/master/src/EnvironmentCalculations.cpp) on GitHub, converts the currently measured pressure to the altitudes in meters including temperature compensation. -The second block uses the {{< docref "/components/sensor/absolute_humidity" >}} component which +The second block uses the [Absolute Humidity](/components/sensor/absolute_humidity/) component which converts the currently measured temperature and relative humidity to absolute humidity (grams/m^3). > [!NOTE] @@ -117,6 +116,6 @@ sensor: ## See Also -- {{< docref "/components/sensor/absolute_humidity" >}} -- {{< docref "/components/sensor/template" >}} -- {{< docref "/components/sensor/bme280" >}} +- [Absolute Humidity](/components/sensor/absolute_humidity/) +- [Template Sensor](/components/sensor/template/) +- [BME280 Temperature+Pressure+Humidity Sensor](/components/sensor/bme280/) diff --git a/content/cookbook/display_time_temp_oled.md b/src/content/docs/cookbook/display_time_temp_oled.mdx similarity index 88% rename from content/cookbook/display_time_temp_oled.md rename to src/content/docs/cookbook/display_time_temp_oled.mdx index 4c5e222572..2aa650d60f 100644 --- a/content/cookbook/display_time_temp_oled.md +++ b/src/content/docs/cookbook/display_time_temp_oled.mdx @@ -1,14 +1,15 @@ --- description: "Instructions for setting up a display in ESPHome to show sensor values from Home Assistant" title: "Time & Temperature on OLED Display" -params: - seo: - description: Instructions for setting up a display in ESPHome to show sensor values from Home Assistant --- +import APIRef from '@components/APIRef.astro'; -{{< img src="display_time_temp_oled_1.jpg" alt="Image" width="75.0%" class="align-left" >}} +import { Image } from 'astro:assets'; +import displayTimeTempOled1Img from './images/display_time_temp_oled_1.jpg'; -In this example I have used a {{< docref "/components/display/ssd1306" "SSD1306 OLED Display over I²C" >}} to + + +In this example I have used a [SSD1306 OLED Display over I²C](/components/display/ssd1306/) to show current time and two different temperature values from Home Assistant. ESPHome has support for several different types of displays. The display used here is 1.3" with 128x64 monochrome pixels @@ -91,7 +92,7 @@ font: ``` - (Optional) You can also use Google fonts with the `gfonts://` scheme instead of including font files. -- Find out more in the {{< docref "/components/font" >}} documentation. +- Find out more in the [Font](/components/font/) documentation. ```yaml font: @@ -149,7 +150,7 @@ display: ## Rendering - Alignment of text can use different reference points, for example `TOP_RIGHT` or `BASELINE_LEFT`, which all are - defined in {{< apiref "display/display_buffer.h" "display/display_buffer.h" >}}. + defined in . - The property `has_state()` on a sensor is useful as it can take some seconds to get the data from Home Assistant and you may not want to display `Nan` @@ -181,6 +182,6 @@ display: ## See Also -- {{< docref "/components/display/ssd1306" >}} -- {{< docref "/components/display" >}} -- {{< docref "/components/sensor/homeassistant" >}} +- [SSD1306 OLED Display](/components/display/ssd1306/) +- [Display Component](/components/display/) +- [Home Assistant Sensor](/components/sensor/homeassistant/) diff --git a/content/cookbook/ehmtx.md b/src/content/docs/cookbook/ehmtx.mdx similarity index 86% rename from content/cookbook/ehmtx.md rename to src/content/docs/cookbook/ehmtx.mdx index a776d63cf7..85c41a44fd 100644 --- a/content/cookbook/ehmtx.md +++ b/src/content/docs/cookbook/ehmtx.mdx @@ -1,16 +1,14 @@ --- description: "A simple DIY status display, build with a flexible 8x32 RGB LED panel." title: "ehmtx a matrix status display" -params: - seo: - description: A simple DIY status display, build with a flexible 8x32 RGB LED panel. - image: ehmtx.jpg --- +import { Image } from 'astro:assets'; + Based on a cheap 8x32 RGB matrix you can build flexible status displays for all kind of informations. It is expandable with sensors etc. -{{< img src="ehmtx.jpg" alt="Image" width="40%" class="align-center" >}} + ## Introduction @@ -32,6 +30,6 @@ Documentation: Sample video: - +{/* markdownlint-disable-next-line MD033 */} diff --git a/content/cookbook/garage-door.md b/src/content/docs/cookbook/garage-door.mdx similarity index 82% rename from content/cookbook/garage-door.md rename to src/content/docs/cookbook/garage-door.mdx index b97d90cbc1..f90eccc7f9 100644 --- a/content/cookbook/garage-door.md +++ b/src/content/docs/cookbook/garage-door.mdx @@ -1,10 +1,6 @@ --- description: "Instructions for setting up a simple garage door in ESPHome." title: "Simple Garage Door" -params: - seo: - description: Instructions for setting up a simple garage door in ESPHome. - image: window-open.svg --- The following is a possible configuration file for garage doors that are controlled by two relays: @@ -45,6 +41,6 @@ cover: ## See Also -- {{< docref "/automations" >}} -- {{< docref "/components/switch/gpio" >}} -- {{< docref "/components/cover/template" >}} +- [Automation](/automations/) +- [GPIO Switch](/components/switch/gpio/) +- [Template Cover](/components/cover/template/) diff --git a/content/cookbook/images/arduino_pro_mini.jpg b/src/content/docs/cookbook/images/arduino_pro_mini.jpg similarity index 100% rename from content/cookbook/images/arduino_pro_mini.jpg rename to src/content/docs/cookbook/images/arduino_pro_mini.jpg diff --git a/content/cookbook/images/bme280-header.jpg b/src/content/docs/cookbook/images/bme280-header.jpg similarity index 100% rename from content/cookbook/images/bme280-header.jpg rename to src/content/docs/cookbook/images/bme280-header.jpg diff --git a/content/cookbook/images/display_time_temp_oled_1.jpg b/src/content/docs/cookbook/images/display_time_temp_oled_1.jpg similarity index 100% rename from content/cookbook/images/display_time_temp_oled_1.jpg rename to src/content/docs/cookbook/images/display_time_temp_oled_1.jpg diff --git a/content/cookbook/images/infostrip-detail.jpg b/src/content/docs/cookbook/images/infostrip-detail.jpg similarity index 100% rename from content/cookbook/images/infostrip-detail.jpg rename to src/content/docs/cookbook/images/infostrip-detail.jpg diff --git a/content/cookbook/images/infostrip-lights-ui.png b/src/content/docs/cookbook/images/infostrip-lights-ui.png similarity index 100% rename from content/cookbook/images/infostrip-lights-ui.png rename to src/content/docs/cookbook/images/infostrip-lights-ui.png diff --git a/content/cookbook/images/leak-detector-m5stickC-ha_interface.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC-ha_interface.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC-ha_interface.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC-ha_interface.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC-m5stickC.png b/src/content/docs/cookbook/images/leak-detector-m5stickC-m5stickC.png similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC-m5stickC.png rename to src/content/docs/cookbook/images/leak-detector-m5stickC-m5stickC.png diff --git a/content/cookbook/images/leak-detector-m5stickC_LeakDetected.gif b/src/content/docs/cookbook/images/leak-detector-m5stickC_LeakDetected.gif similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_LeakDetected.gif rename to src/content/docs/cookbook/images/leak-detector-m5stickC_LeakDetected.gif diff --git a/src/content/docs/cookbook/images/leak-detector-m5stickC_dry.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_dry.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b3455ab85694a6e3952590e39211629d7b39a58 GIT binary patch literal 12322 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 literal 0 HcmV?d00001 diff --git a/content/cookbook/images/leak-detector-m5stickC_grove1.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_grove1.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_grove1.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_grove1.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC_grove2.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_grove2.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_grove2.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_grove2.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC_overview1.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_overview1.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_overview1.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_overview1.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC_overview2.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_overview2.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_overview2.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_overview2.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC_pinout.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_pinout.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_pinout.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_pinout.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC_probe.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_probe.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_probe.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_probe.jpg diff --git a/content/cookbook/images/leak-detector-m5stickC_wet.jpg b/src/content/docs/cookbook/images/leak-detector-m5stickC_wet.jpg similarity index 100% rename from content/cookbook/images/leak-detector-m5stickC_wet.jpg rename to src/content/docs/cookbook/images/leak-detector-m5stickC_wet.jpg diff --git a/content/cookbook/images/lvgl_cook_animimg_batt.gif b/src/content/docs/cookbook/images/lvgl_cook_animimg_batt.gif similarity index 100% rename from content/cookbook/images/lvgl_cook_animimg_batt.gif rename to src/content/docs/cookbook/images/lvgl_cook_animimg_batt.gif diff --git a/content/cookbook/images/lvgl_cook_climate.png b/src/content/docs/cookbook/images/lvgl_cook_climate.png similarity index 100% rename from content/cookbook/images/lvgl_cook_climate.png rename to src/content/docs/cookbook/images/lvgl_cook_climate.png diff --git a/content/cookbook/images/lvgl_cook_clock.png b/src/content/docs/cookbook/images/lvgl_cook_clock.png similarity index 100% rename from content/cookbook/images/lvgl_cook_clock.png rename to src/content/docs/cookbook/images/lvgl_cook_clock.png diff --git a/content/cookbook/images/lvgl_cook_cover.png b/src/content/docs/cookbook/images/lvgl_cook_cover.png similarity index 100% rename from content/cookbook/images/lvgl_cook_cover.png rename to src/content/docs/cookbook/images/lvgl_cook_cover.png diff --git a/content/cookbook/images/lvgl_cook_flex_layout.png b/src/content/docs/cookbook/images/lvgl_cook_flex_layout.png similarity index 100% rename from content/cookbook/images/lvgl_cook_flex_layout.png rename to src/content/docs/cookbook/images/lvgl_cook_flex_layout.png diff --git a/content/cookbook/images/lvgl_cook_font_batt.png b/src/content/docs/cookbook/images/lvgl_cook_font_batt.png similarity index 100% rename from content/cookbook/images/lvgl_cook_font_batt.png rename to src/content/docs/cookbook/images/lvgl_cook_font_batt.png diff --git a/content/cookbook/images/lvgl_cook_font_binstat.png b/src/content/docs/cookbook/images/lvgl_cook_font_binstat.png similarity index 100% rename from content/cookbook/images/lvgl_cook_font_binstat.png rename to src/content/docs/cookbook/images/lvgl_cook_font_binstat.png diff --git a/content/cookbook/images/lvgl_cook_font_roboto_mdi.png b/src/content/docs/cookbook/images/lvgl_cook_font_roboto_mdi.png similarity index 100% rename from content/cookbook/images/lvgl_cook_font_roboto_mdi.png rename to src/content/docs/cookbook/images/lvgl_cook_font_roboto_mdi.png diff --git a/content/cookbook/images/lvgl_cook_gauge.png b/src/content/docs/cookbook/images/lvgl_cook_gauge.png similarity index 100% rename from content/cookbook/images/lvgl_cook_gauge.png rename to src/content/docs/cookbook/images/lvgl_cook_gauge.png diff --git a/content/cookbook/images/lvgl_cook_gradient_styles.png b/src/content/docs/cookbook/images/lvgl_cook_gradient_styles.png similarity index 100% rename from content/cookbook/images/lvgl_cook_gradient_styles.png rename to src/content/docs/cookbook/images/lvgl_cook_gradient_styles.png diff --git a/content/cookbook/images/lvgl_cook_keypad.png b/src/content/docs/cookbook/images/lvgl_cook_keypad.png similarity index 100% rename from content/cookbook/images/lvgl_cook_keypad.png rename to src/content/docs/cookbook/images/lvgl_cook_keypad.png diff --git a/content/cookbook/images/lvgl_cook_pagenav.png b/src/content/docs/cookbook/images/lvgl_cook_pagenav.png similarity index 100% rename from content/cookbook/images/lvgl_cook_pagenav.png rename to src/content/docs/cookbook/images/lvgl_cook_pagenav.png diff --git a/content/cookbook/images/lvgl_cook_remligbut.png b/src/content/docs/cookbook/images/lvgl_cook_remligbut.png similarity index 100% rename from content/cookbook/images/lvgl_cook_remligbut.png rename to src/content/docs/cookbook/images/lvgl_cook_remligbut.png diff --git a/content/cookbook/images/lvgl_cook_statico.png b/src/content/docs/cookbook/images/lvgl_cook_statico.png similarity index 100% rename from content/cookbook/images/lvgl_cook_statico.png rename to src/content/docs/cookbook/images/lvgl_cook_statico.png diff --git a/content/cookbook/images/lvgl_cook_thermometer.png b/src/content/docs/cookbook/images/lvgl_cook_thermometer.png similarity index 100% rename from content/cookbook/images/lvgl_cook_thermometer.png rename to src/content/docs/cookbook/images/lvgl_cook_thermometer.png diff --git a/content/cookbook/images/lvgl_cook_thermometer_gauge.png b/src/content/docs/cookbook/images/lvgl_cook_thermometer_gauge.png similarity index 100% rename from content/cookbook/images/lvgl_cook_thermometer_gauge.png rename to src/content/docs/cookbook/images/lvgl_cook_thermometer_gauge.png diff --git a/content/cookbook/images/lvgl_cook_titlebar.png b/src/content/docs/cookbook/images/lvgl_cook_titlebar.png similarity index 100% rename from content/cookbook/images/lvgl_cook_titlebar.png rename to src/content/docs/cookbook/images/lvgl_cook_titlebar.png diff --git a/content/cookbook/images/lvgl_cook_weather.png b/src/content/docs/cookbook/images/lvgl_cook_weather.png similarity index 100% rename from content/cookbook/images/lvgl_cook_weather.png rename to src/content/docs/cookbook/images/lvgl_cook_weather.png diff --git a/content/cookbook/images/power_meter-header.jpg b/src/content/docs/cookbook/images/power_meter-header.jpg similarity index 100% rename from content/cookbook/images/power_meter-header.jpg rename to src/content/docs/cookbook/images/power_meter-header.jpg diff --git a/content/cookbook/images/sonoff-fishpond-pump-1-programming.jpg b/src/content/docs/cookbook/images/sonoff-fishpond-pump-1-programming.jpg similarity index 100% rename from content/cookbook/images/sonoff-fishpond-pump-1-programming.jpg rename to src/content/docs/cookbook/images/sonoff-fishpond-pump-1-programming.jpg diff --git a/content/cookbook/images/sonoff-fishpond-pump-and-sensor.jpg b/src/content/docs/cookbook/images/sonoff-fishpond-pump-and-sensor.jpg similarity index 100% rename from content/cookbook/images/sonoff-fishpond-pump-and-sensor.jpg rename to src/content/docs/cookbook/images/sonoff-fishpond-pump-and-sensor.jpg diff --git a/content/cookbook/images/sonoff-fishpond-pump-gpio14.jpg b/src/content/docs/cookbook/images/sonoff-fishpond-pump-gpio14.jpg similarity index 100% rename from content/cookbook/images/sonoff-fishpond-pump-gpio14.jpg rename to src/content/docs/cookbook/images/sonoff-fishpond-pump-gpio14.jpg diff --git a/content/cookbook/images/sonoff-fishpond-pump-installed.jpg b/src/content/docs/cookbook/images/sonoff-fishpond-pump-installed.jpg similarity index 100% rename from content/cookbook/images/sonoff-fishpond-pump-installed.jpg rename to src/content/docs/cookbook/images/sonoff-fishpond-pump-installed.jpg diff --git a/content/cookbook/images/sonoff-fishpond.jpg b/src/content/docs/cookbook/images/sonoff-fishpond.jpg similarity index 100% rename from content/cookbook/images/sonoff-fishpond.jpg rename to src/content/docs/cookbook/images/sonoff-fishpond.jpg diff --git a/content/cookbook/images/window-open.svg b/src/content/docs/cookbook/images/window-open.svg similarity index 100% rename from content/cookbook/images/window-open.svg rename to src/content/docs/cookbook/images/window-open.svg diff --git a/content/cookbook/_index.md b/src/content/docs/cookbook/index.mdx similarity index 100% rename from content/cookbook/_index.md rename to src/content/docs/cookbook/index.mdx diff --git a/content/cookbook/infostrip.md b/src/content/docs/cookbook/infostrip.mdx similarity index 82% rename from content/cookbook/infostrip.md rename to src/content/docs/cookbook/infostrip.mdx index 2313ceb137..5dbbb4e813 100644 --- a/content/cookbook/infostrip.md +++ b/src/content/docs/cookbook/infostrip.mdx @@ -1,12 +1,13 @@ --- description: "Simple visualisation of Home Assistant states using a Neopixel stripe" title: "Infostripe" -params: - seo: - description: Simple visualisation of Home Assistant states using a Neopixel stripe - image: /cookbook/images/infostrip-detail.jpg --- +import { Image } from 'astro:assets'; +import infostripDetailImg from './images/infostrip-detail.jpg'; +import infostripLightsUiImg from './images/infostrip-lights-ui.png'; +import Figure from '@components/Figure.astro'; + Showing the current status of sensor states using a Neopixel (WS2812B) strip is a simple way to communicate states to the user. Compared to a dashboard screen the infostrip can only communicate the information like a binary sensor. @@ -15,9 +16,12 @@ the user. Compared to a dashboard screen the infostrip can only communicate the - mode (continuous vs. flashing, flashing or strobe is not recommend) - light position on stripe -{{< img src="infostrip-detail.jpg" alt="Image" +
    }} + layout="constrained" + alt="" +/> ## ESPHome configuration @@ -87,7 +91,7 @@ light: ``` > [!WARNING] -> Consider the warning in {{< docref "/components/light/partition" >}} regarging the increased memory usage. +> Consider the warning in [Partition](/components/light/partition/) regarging the increased memory usage. ## Home Assistant configuration @@ -139,11 +143,15 @@ automation: {{ map[state] if state in map else 'white' }} ``` -{{< img src="infostrip-lights-ui.png" alt="Image" caption="Each pixel is used as a light entity." - width="50.0%" class="align-center" >}} +
    ## See Also -- {{< docref "/components/light/fastled" >}} -- {{< docref "/components/light/partition" >}} -- {{< docref "/components/sensor/mhz19" >}} +- [FastLED Light](/components/light/fastled/) +- [Light Partition](/components/light/partition/) +- [MH-Z19 CO_2 and Temperature Sensor](/components/sensor/mhz19/) diff --git a/content/cookbook/lambda_magic.md b/src/content/docs/cookbook/lambda_magic.mdx similarity index 91% rename from content/cookbook/lambda_magic.md rename to src/content/docs/cookbook/lambda_magic.mdx index e475336a45..be511aeaf2 100644 --- a/content/cookbook/lambda_magic.md +++ b/src/content/docs/cookbook/lambda_magic.mdx @@ -1,16 +1,12 @@ --- description: "Recipes for various interesting things you can do with Lambdas in ESPHome" title: "Lambda Magic" -params: - seo: - description: Recipes for various interesting things you can do with Lambdas in ESPHome - image: language-cpp.svg --- Here are a couple recipes for various interesting things you can do with [Lambdas](/automations/templates#config-lambda) in ESPHome. These don't require external components and demonstrate how powerful [Lambdas](/automations/templates#config-lambda) can be. -{{< anchor "lambda_magic_pages" >}} + ## Display pages alternative @@ -51,7 +47,7 @@ interval: } ``` -{{< anchor "lambda_magic_udp_sender" >}} + ## Send UDP commands @@ -98,12 +94,12 @@ button: Tested on both `arduino` and `esp-idf` platforms. -{{< anchor "lambda_magic_rf_queues" >}} + ## Delaying Remote Transmissions -The solution below handles the problem of RF frames being sent out by {{< docref "/components/rf_bridge" >}} (or -{{< docref "/components/remote_transmitter" >}}) too quickly one after another when operating radio controlled +The solution below handles the problem of RF frames being sent out by [Rf Bridge](/components/rf_bridge/) (or +[Remote Transmitter](/components/remote_transmitter/)) too quickly one after another when operating radio controlled covers. The cover motors seem to need at least 600-700ms of silence between the individual code transmissions to be able to recognize them. @@ -173,14 +169,14 @@ cover: open_duration: 27s ``` -{{< anchor "lambda_magic_1button_coover" >}} + ## One Button Cover Control The configuration below shows how with a single button you can control the motion of a motorized cover by cycling between: open->stop->close->stop->... -In this example a {{< docref "/components/cover/time_based" >}} is used with the GPIO configuration of a Sonoff Dual R2. +In this example a [Time Based](/components/cover/time_based/) is used with the GPIO configuration of a Sonoff Dual R2. > [!NOTE] > Controlling the cover to quickly (sending new open/close commands within a minute of previous commands) @@ -247,7 +243,7 @@ cover: ## Update numeric values from text input -Sometimes it may be more confortable to use a {{< docref "/components/text/template" >}} to change some numeric values +Sometimes it may be more confortable to use a [Template](/components/text/template/) to change some numeric values from the user interface. ESPHome has some nice [helper functions](https://github.com/esphome/esphome/blob/dev/esphome/core/helpers.h) among which theres's one to convert text to numbers. diff --git a/content/cookbook/leak-detector-m5stickC.md b/src/content/docs/cookbook/leak-detector-m5stickC.mdx similarity index 77% rename from content/cookbook/leak-detector-m5stickC.md rename to src/content/docs/cookbook/leak-detector-m5stickC.mdx index 4e56345a98..df473b3f96 100644 --- a/content/cookbook/leak-detector-m5stickC.md +++ b/src/content/docs/cookbook/leak-detector-m5stickC.mdx @@ -1,17 +1,27 @@ --- description: "Water leak detector with ESPHome on an M5StickC ESP32" title: "ESP32 Water Leak Detector (with notification)" -params: - seo: - description: Water leak detector with ESPHome on an M5StickC ESP32 --- +import { Image } from 'astro:assets'; +import leakDetectorM5stickcLeakdetectedImg from './images/leak-detector-m5stickC_LeakDetected.gif'; +import leakDetectorM5stickcM5stickcImg from './images/leak-detector-m5stickC-m5stickC.png'; +import leakDetectorM5stickcProbeImg from './images/leak-detector-m5stickC_probe.jpg'; +import leakDetectorM5stickcGrove1Img from './images/leak-detector-m5stickC_grove1.jpg'; +import leakDetectorM5stickcPinoutImg from './images/leak-detector-m5stickC_pinout.jpg'; +import leakDetectorM5stickcGrove2Img from './images/leak-detector-m5stickC_grove2.jpg'; +import leakDetectorM5stickcOverview2Img from './images/leak-detector-m5stickC_overview2.jpg'; +import leakDetectorM5stickcDryImg from './images/leak-detector-m5stickC_dry.jpg'; +import leakDetectorM5stickcWetImg from './images/leak-detector-m5stickC_wet.jpg'; +import leakDetectorM5stickcOverview1Img from './images/leak-detector-m5stickC_overview1.jpg'; +import leakDetectorM5stickcHaInterfaceImg from './images/leak-detector-m5stickC-ha_interface.jpg'; + Using the ESP32's capacitive touch GPIOs, it's relatively easy to build a water leak detector using ESPHome. M5StickC was chosen as a platform due to the integrated Grove connector for clean connections and the fact it's well housed. The built-in display is a bonus, but not strictly necessary. Notifications are performed via HomeAssistant's 'alert' and 'notify' facilities, which send via Pushover to iOS & Android. -{{< img src="leak-detector-m5stickC_LeakDetected.gif" alt="Image" class="align-center" >}} + ## Things you'll need @@ -22,18 +32,18 @@ housed. The built-in display is a bonus, but not strictly necessary. Notificatio - M5StickC ESP32 development kit [M5Stack Link](https://m5stack.com/collections/m5-core/products/stick-c) -{{< img src="leak-detector-m5stickC-m5stickC.png" alt="Image" class="align-center" >}} + - Moisture sensor This example uses a [Guardian Remote Sensor Probe](https://www.amazon.com/gp/product/B07G5BMD7L) which has a 6' cord. -{{< img src="leak-detector-m5stickC_probe.jpg" alt="Image" class="align-center" >}} + - Grove connector pigtail [Amazon Link](https://www.amazon.com/gp/product/B01CNZ9EEC) -{{< img src="leak-detector-m5stickC_grove1.jpg" alt="Image" class="align-center" >}} + - USB power supply with USB-C cable (the M5StickC comes with the short black USB cable seen in the pictures) @@ -48,13 +58,13 @@ opposite side of the probe are internally-connected identically to the front. Th jack are unused. There is no polarity -- simply connect one terminal (orange or blue) to Grove GND, and the other to Grove G33. -{{< img src="leak-detector-m5stickC_pinout.jpg" alt="Image" class="align-center" >}} + -{{< img src="leak-detector-m5stickC_grove2.jpg" alt="Image" class="align-center" >}} + ## Assembled Components -{{< img src="leak-detector-m5stickC_overview2.jpg" alt="Image" class="align-center" >}} + > [!NOTE] > Even though the M5StickC has a battery inside (which might be enough to cover short power outages), you'll need to keep @@ -63,7 +73,7 @@ to Grove G33. ## Display Font You'll need to place the [OpenSans-Regular](https://fonts.google.com/specimen/Open+Sans) font (or another of your -choosing) alongside your ESPHome yaml file. See - {{< docref "/components/display" >}}. +choosing) alongside your ESPHome yaml file. See - [Display](/components/display/). ## Calibration & Testing @@ -77,15 +87,15 @@ See [ESP32 Touch Pad](/components/binary_sensor/esp32_touch#esp32-touch-binary-s ### Normal state -{{< img src="leak-detector-m5stickC_dry.jpg" alt="Image" class="align-center" >}} + ### Wet state -{{< img src="leak-detector-m5stickC_wet.jpg" alt="Image" class="align-center" >}} + ### Installed Project -{{< img src="leak-detector-m5stickC_overview1.jpg" alt="Image" class="align-center" >}} + Not shown: Probe is placed on the floor in the corner, out of the way, in the lowest part of the room @@ -288,10 +298,10 @@ notify: Enjoy your locally-controlled leak detector with push notification! -{{< img src="leak-detector-m5stickC-ha_interface.jpg" alt="Image" class="align-center" >}} + ## See Also -- {{< docref "/components/display" >}} -- {{< docref "/components/display/st7735" >}} -- {{< docref "/components/binary_sensor/esp32_touch" >}} +- [Display Component](/components/display/) +- [ST7735 Display](/components/display/st7735/) +- [ESP32 Touch Pad](/components/binary_sensor/esp32_touch/) diff --git a/content/cookbook/lvgl.md b/src/content/docs/cookbook/lvgl.mdx similarity index 94% rename from content/cookbook/lvgl.md rename to src/content/docs/cookbook/lvgl.mdx index 8ae7486220..797ccf00dd 100644 --- a/content/cookbook/lvgl.md +++ b/src/content/docs/cookbook/lvgl.mdx @@ -1,15 +1,31 @@ --- description: "Recipes for common use cases of LVGL Displays with ESPHome" title: "LVGL: Tips and Tricks" -params: - seo: - description: Recipes for common use cases of LVGL Displays with ESPHome - image: /images/lvgl.png --- -{{< anchor "lvgl-cookbook" >}} - -Here are a couple recipes for various interesting things you can do with {{< docref "/components/lvgl" >}} in ESPHome. +import { Image } from 'astro:assets'; +import lvglCookRemligbutImg from './images/lvgl_cook_remligbut.png'; +import lvglCookGaugeImg from './images/lvgl_cook_gauge.png'; +import lvglCookThermometerImg from './images/lvgl_cook_thermometer.png'; +import lvglCookThermometerGaugeImg from './images/lvgl_cook_thermometer_gauge.png'; +import lvglCookClimateImg from './images/lvgl_cook_climate.png'; +import lvglCookCoverImg from './images/lvgl_cook_cover.png'; +import lvglCookGradientStylesImg from './images/lvgl_cook_gradient_styles.png'; +import lvglCookPagenavImg from './images/lvgl_cook_pagenav.png'; +import lvglCookStaticoImg from './images/lvgl_cook_statico.png'; +import lvglCookTitlebarImg from './images/lvgl_cook_titlebar.png'; +import lvglCookFlexLayoutImg from './images/lvgl_cook_flex_layout.png'; +import lvglCookFontRobotoMdiImg from './images/lvgl_cook_font_roboto_mdi.png'; +import lvglCookFontBinstatImg from './images/lvgl_cook_font_binstat.png'; +import lvglCookFontBattImg from './images/lvgl_cook_font_batt.png'; +import lvglCookAnimimgBattImg from './images/lvgl_cook_animimg_batt.gif'; +import lvglCookClockImg from './images/lvgl_cook_clock.png'; +import lvglCookKeypadImg from './images/lvgl_cook_keypad.png'; +import lvglCookWeatherImg from './images/lvgl_cook_weather.png'; + + + +Here are a couple recipes for various interesting things you can do with [Lvgl](/components/lvgl/) in ESPHome. > [!NOTE] > Many of the examples below call service actions in Home Assistant; however, Home Assistant does not allow such action @@ -22,11 +38,11 @@ Here are a couple recipes for various interesting things you can do with {{< doc > knowledge to set up various components in ESPHome. Some examples use absolute positioning for a screen with dimensions > of `240x320px` ; if your display's dimensions differ, you'll need to adjust them in order to obtain the expected results. -{{< anchor "lvgl-cookbook-relay" >}} + ## Local light switch -{{< img src="lvgl_switch.png" alt="Image" class="align-left" >}} + The easiest way to integrate an LVGL [`switch`](/components/lvgl/widgets#lvgl-widget-switch) widget and a switch or light is with [automations](/automations): @@ -54,11 +70,11 @@ lvgl: light.toggle: local_light ``` -{{< anchor "lvgl-cookbook-binent" >}} + ## Remote light button -{{< img src="lvgl_cook_remligbut.png" alt="Image" class="align-right" >}} + If you'd like to control a remote light which appears as an entity in Home Assistant from a checkable (toggle) [`button`](/components/lvgl/widgets#lvgl-widget-button), first you need to import the light state into ESPHome, and then control it using a @@ -99,11 +115,11 @@ lvgl: entity_id: light.remote_light ``` -{{< anchor "lvgl-cookbook-bright" >}} + ## Light brightness slider -{{< img src="lvgl_cook_volume.png" alt="Image" class="align-left" >}} + You can use a [slider](/components/lvgl/widgets#lvgl-widget-slider) or an [arc](/components/lvgl/widgets#lvgl-widget-arc) to control the brightness of a dimmable light. @@ -150,11 +166,11 @@ ESPHome uses floats, `x` needs to be converted. This is applicable to action calls like `fan.set_percentage` or `valve.set_valve_position`, too; the only difference is that `max_value` has to be `100`. -{{< anchor "lvgl-cookbook-volume" >}} + ## Media player volume slider -{{< img src="lvgl_cook_volume.png" alt="Image" class="align-right" >}} + Similarly, you can use a [slider](/components/lvgl/widgets#lvgl-widget-slider) or an [arc](/components/lvgl/widgets#lvgl-widget-arc) to control the volume level of a media player, which uses float values. @@ -209,14 +225,14 @@ in the [slider doc](/components/lvgl/widgets#lvgl-widget-slider)). > consider using a universal widget trigger like `on_release` to get the `x` variable once after the interaction has > completed. -{{< anchor "lvgl-cookbook-gauge" >}} + ## Semicircle gauge A gauge similar to what Home Assistant shows in the Energy Dashboard can accomplished with [`meter`](/components/lvgl/widgets#lvgl-widget-meter) and [`label`](/components/lvgl/widgets#lvgl-widget-label) widgets: -{{< img src="lvgl_cook_gauge.png" alt="Image" class="align-center" >}} + The trick here is to have a parent [`obj`](/components/lvgl/widgets#lvgl-widget-obj) which contains the other widgets as children. We place a [`meter`](/components/lvgl/widgets#lvgl-widget-meter) in the middle, which is made from an indicator `line` and two `arc` widgets. We use @@ -311,14 +327,14 @@ lvgl: > The `obj` used to hide the middle part of the meter indicator line has `radius` equal to half of the `width` and > `height`. This results in a circle - which is actually a square with extra large rounded corners. -{{< anchor "lvgl-cookbook-thermometer" >}} + ## Thermometer A thermometer with a precise gauge also made from a [`meter`](/components/lvgl/widgets#lvgl-widget-meter) widget and a numeric display using [`label`](/components/lvgl/widgets#lvgl-widget-label): -{{< img src="lvgl_cook_thermometer.png" alt="Image" class="align-center" >}} + Whenever a new value comes from the sensor, we update the needle indicator as well as the text in the [`label`](/components/lvgl/widgets#lvgl-widget-label). Since LVGL only handles integer values on the [`meter`](/components/lvgl/widgets#lvgl-widget-meter) scale, @@ -396,7 +412,7 @@ lvgl: And here's the same sensor configuration, but instead with a semicircle gauge with a gradient background drawn by a multitude of ticks: -{{< img src="lvgl_cook_thermometer_gauge.png" alt="Image" class="align-center" >}} + If you change the size of the widget, to obtain a uniform gradient, be sure to increase or decrease the ticks count accordingly. @@ -470,13 +486,13 @@ lvgl: > You can omit the `obj` used to hide the middle part of meter indicator line by using a bitmap `image` indicator as > needle, were only the part hanging above the ticks scale is visible, the rest is transparent. -{{< anchor "lvgl-cookbook-climate" >}} + ## Climate control [`spinbox`](/components/lvgl/widgets#lvgl-widget-spinbox) is the ideal widget to control a thermostat: -{{< img src="lvgl_cook_climate.png" alt="Image" class="align-center" >}} + First we import from Home Assistant the current target temperature of the climate component, and we update the value of the spinbox with it whenever it changes. We use two buttons labeled with minus and plus to control the spinbox, @@ -543,14 +559,14 @@ lvgl: text: "+" ``` -{{< anchor "lvgl-cookbook-cover" >}} + ## Cover status and control To make a nice user interface for controlling Home Assistant covers you could use 3 buttons, which also display the state. -{{< img src="lvgl_cook_cover.png" alt="Image" class="align-center" >}} + Just as in the previous examples, we need to get the state of the cover first. We'll use a numeric sensor to retrieve the current position of the cover and a text sensor to retrieve its current movement. We are particularly interested @@ -671,14 +687,14 @@ lvgl: entity_id: cover.myroom ``` -{{< anchor "lvgl-cookbook-theme" >}} + ## Theme and style definitions Since LVGL uses inheritance to apply styles across the widgets, it's possible to apply them at the top level, and only make modifications on demand, if necessary. -{{< img src="lvgl_cook_gradient_styles.png" alt="Image" class="align-center" >}} + In this example we prepare a set of gradient styles in the *theme*, and make some modifications in a *style_definition* which can be applied in a batch to the desired widgets. Theme is applied automatically, and can be overridden manually @@ -779,13 +795,13 @@ lvgl: Note that style definitions can contain common properties too, like positioning and sizing. -{{< anchor "lvgl-cookbook-navigator" >}} + ## Page navigation footer If using multiple pages, a navigation bar can be useful at the bottom of the screen: -{{< img src="lvgl_cook_pagenav.png" alt="Image" class="align-center" >}} + To save from repeating the same widgets on each page, there's the *top_layer* which is the *Always on Top* transparent page above all the pages. Everything you put on this page will be on top of all the others. @@ -829,13 +845,13 @@ lvgl: For this example to appear correctly, use the theme and style options from [above](#lvgl-cookbook-theme) and LVGL's own library [fonts](/components/lvgl#lvgl-fonts). -{{< anchor "lvgl-cookbook-statico" >}} + ## API connection status icon The top layer is useful to show status icons visible on all pages: -{{< img src="lvgl_cook_statico.png" alt="Image" class="align-center" >}} + In the example below, we only show the icon when the connection with Home Assistant is established: @@ -875,13 +891,13 @@ Of note: - Alignment of the widget: since the *align* option is given, the *x* and *y* options are used to position the widget - relative to the calculated position. -{{< anchor "lvgl-cookbook-titlebar" >}} + ## Title bar for each page Each page can have its own title bar: -{{< img src="lvgl_cook_titlebar.png" alt="Image" class="align-center" >}} + To put a title bar behind the status icon, we need to add it to each page, also containing the label with a unique title: @@ -918,7 +934,7 @@ lvgl: For this example to work, use the theme and style options from [above](#lvgl-cookbook-theme). -{{< anchor "lvgl-cookbook-flex" >}} + ## Flex layout positioning @@ -926,7 +942,7 @@ For this example to work, use the theme and style options from [above](#lvgl-coo each widget. This is a great way to simplify your configuration containing many widgets as it allows you to even omit alignment options. -{{< img src="lvgl_cook_flex_layout.png" alt="Image" class="align-center" >}} + This example illustrates a control panel for three covers, made up of labels and discrete buttons. Although a button matrix could also be suitable for this, you might still prefer fully-featured individual buttons, as they offer a wider @@ -1051,7 +1067,7 @@ to place them manually with `x` and `y` ! You only need to determine a common w distribute them on the page as you prefer. ([MDI icons in text](#lvgl-cookbook-icontext) below shows how to use custom icons.) -{{< anchor "lvgl-cookbook-grid" >}} + ## Grid layout positioning @@ -1206,7 +1222,7 @@ sizes and positions will automatically be calculated to fill in the cells, while and `pad_column` can help with spacing between them. See [Weather forecast panel](#lvgl-cookbook-weather) further down this page for another example relying on **Grid**. -{{< anchor "lvgl-cookbook-btlg" >}} + ## ESPHome boot screen @@ -1265,7 +1281,7 @@ lvgl: - lvgl.widget.hide: boot_screen ``` -{{< anchor "lvgl-cookbook-icontext" >}} + ## MDI icons in text @@ -1277,7 +1293,7 @@ One example is when you'd like some MDI icons to be used in line with the text ( and symbols coexist). You can use a font of your choice; choose the symbols/icons from MDI you want and mix them in a single sized set. -{{< img src="lvgl_cook_font_roboto_mdi.png" alt="Image" class="align-center" >}} + In the example below, we use the default set of glyphs from RobotoCondensed-Regular and append some extra symbols to it from MDI. Then we display these inline with the text by escaping their codepoints: @@ -1322,7 +1338,7 @@ lvgl: > - start with capital `\U` and have exactly 8 hexadecimal digits. > - To translate the escape sequence into the real glyph, make sure you enclose your strings in double quotes. -{{< anchor "lvgl-cookbook-ckboxmark" >}} + ## Restore checkbox mark @@ -1355,11 +1371,11 @@ lvgl: You could of course simply apply one of the built-in `montserrat_` packs, but that would not be beneficial on the binary size - it would uselessly include the entire set of glyphs in the flash. -{{< anchor "lvgl-cookbook-iconstat" >}} + ## Toggle state icon button -{{< img src="lvgl_cook_font_binstat.png" alt="Image" class="align-left" >}} + A common use case for icons is a status display. For example, a checkable (toggle) button will display different icons based on the status of a light or switch. To put an icon on a button you use a [`label`](/components/lvgl/widgets#lvgl-widget-label) @@ -1430,11 +1446,11 @@ lvgl: entity_id: light.remote_light ``` -{{< anchor "lvgl-cookbook-iconbatt" >}} + ## Battery status icon -{{< img src="lvgl_cook_font_batt.png" alt="Image" class="align-left" >}} + Another example for using MDI icons is to display battery percentage in 10 steps. We need to have a font containing the glyphs corresponding to the different battery percentage levels, and we need a sensor to import the battery status @@ -1514,11 +1530,11 @@ lvgl: text: "\U000F0091" # start with mdi-battery-unknown ``` -{{< anchor "lvgl-cookbook-animbatt" >}} + ## Battery charging animation -{{< img src="lvgl_cook_animimg_batt.gif" alt="Image" class="align-left" >}} + To have an animation illustrating a battery charging, you can use [`animimg`](/components/lvgl/widgets#lvgl-widget-animimg) with a set of [images rendered from MDI](/components/image#display-image) showing battery levels: @@ -1605,14 +1621,14 @@ lvgl: > > Use `x`, `y`, `align` widget properties for precise positioning. -{{< anchor "lvgl-cookbook-clock" >}} + ## An analog clock Using the [`meter`](/components/lvgl/widgets#lvgl-widget-meter) and [`label`](/components/lvgl/widgets#lvgl-widget-label) widgets, we can create an analog clock which shows the date too. -{{< img src="lvgl_cook_clock.png" alt="Image" class="align-center" >}} + The [`meter`](/components/lvgl/widgets#lvgl-widget-meter) has three scales: one for minutes ticks and hand, ranged between `0` and `60`; one for the hour ticks and the labels as majors, ranged between `1` and `12`; and a higher resolution scale for the hour @@ -1735,7 +1751,7 @@ script: return day_names[id(time_comp).now().day_of_week - 1]; ``` -{{< anchor "lvgl-cookbook-keypad" >}} + ## A numeric input keypad @@ -1743,7 +1759,7 @@ The [`buttonmatrix`](/components/lvgl/widgets#lvgl-widget-buttonmatrix) widget c [Key collector component](/components/key_collector#key_collector) to collect the button presses as key press sequences. It sends the `text` of the buttons (or `key_code` where configured) to the key collector. -{{< img src="lvgl_cook_keypad.png" alt="Image" class="align-center" >}} + If you key in the correct sequence, the [`led`](/components/lvgl/widgets#lvgl-widget-led) widget will change color accordingly: @@ -1879,18 +1895,18 @@ Of note: - Changing the background color of the buttons in `pressed` state. - Use of the `key_code` configuration to send a different character to `key_collector` instead of the displayed symbol. -{{< anchor "lvgl-cookbook-weather" >}} + ## Weather forecast panel Another example relying on the **Grid** layout can be a weather panel showing the forecast through the [OpenWeatherMap integration](https://www.home-assistant.io/integrations/openweathermap/) of Home Assistant. -{{< img src="lvgl_cook_weather.png" alt="Image" class="align-center" >}} + All the information displayed here could be retrieved to local `platform: homeassistant` sensors as desribed in several examples in this Cookbook, however, this time we take a different approach. Instead of pulling the data by ESPHome, -we'll be pushing it from Home Assistant, to native {{< docref "/components/text/lvgl" >}} components. +we'll be pushing it from Home Assistant, to native [Lvgl](/components/text/lvgl/) components. The weather condition icons we use are from MDI. We import just the ones corresponding to the weather conditions supported by the Weather integration in Home Assistant. For all the other labels you can use any [font](/components/lvgl#lvgl-fonts) @@ -2180,11 +2196,11 @@ with the `text.set_value` action. For this purpose, we add the following ``` The automations will be triggered to update the labels every time the corresponding entities change, and when the -ESPHome comes alive - the reason you also need the {{< docref "/components/binary_sensor/status" >}}. Note that you'll +ESPHome comes alive - the reason you also need the [Status](/components/binary_sensor/status/). Note that you'll need to adjust the entity IDs corresponding to your ESPHome node depedning on how you [configured it to use its name](/components/esphome#esphome-configuration_variables). -{{< anchor "lvgl-cookbook-idlescreen" >}} + ## Turn off screen when idle @@ -2233,7 +2249,7 @@ number: mode: box ``` -{{< anchor "lvgl-cookbook-antiburn" >}} + ## Prevent burn-in of LCD @@ -2305,7 +2321,7 @@ You can combine it with the previous example to turn off the backlight, so the u ## See Also -- {{< docref "/components/lvgl" >}} +- [LVGL Graphics](/components/lvgl/) - [Templates](/automations/templates#config-lambda) - [Automation](/automations) - [Key collector component](/components/key_collector#key_collector) diff --git a/content/cookbook/power_meter.md b/src/content/docs/cookbook/power_meter.mdx similarity index 90% rename from content/cookbook/power_meter.md rename to src/content/docs/cookbook/power_meter.mdx index 09c6f8bc14..fb29c02cb3 100644 --- a/content/cookbook/power_meter.md +++ b/src/content/docs/cookbook/power_meter.mdx @@ -1,12 +1,11 @@ --- description: "Instructions for hacking your power meter at home to measure your power usage." title: "Non-Invasive Power Meter" -params: - seo: - description: Instructions for hacking your power meter at home to measure your power usage. - image: power_meter.jpg --- +import { Image } from 'astro:assets'; +import powerMeterHeaderImg from './images/power_meter-header.jpg'; + So an essential part of making your home smart is knowing how much power it uses over the day. Tracking this can be difficult, often you need to install a completely new power meter which can often cost a bunch of money. However, quite a few power meters have a red LED on the front that blinks every time that one Wh has been used. @@ -19,7 +18,7 @@ Hooking it all up is quite easy: Just buy a suitable photoresistor (make sure th the one from your power meter). Then connect it using a simple variable resistor divider (see [this article](https://blog.udemy.com/arduino-ldr/) for inspiration). And... that should already be it :) -{{< img src="power_meter-header.jpg" alt="Image" width="80.0%" class="align-center" >}} + > [!NOTE] > Some energy meters have an exposed [S0 port](https://en.wikipedia.org/wiki/S_interface) (which essentially just is @@ -32,7 +31,7 @@ the one from your power meter). Then connect it using a simple variable resistor > . +--------- GPIO12 > ``` -For ESPHome, you can then use the {{< docref "/components/sensor/pulse_meter" "pulse meter sensor" >}} +For ESPHome, you can then use the [pulse meter sensor](/components/sensor/pulse_meter/) using below configuration: ```yaml @@ -138,7 +137,7 @@ api: ## Tracking Total Daily Energy Additionally you can also calculate the total daily energy generated, for which you can use the -{{< docref "/components/sensor/total_daily_energy" "Total Daily Energy" >}} using below configuration: +[Total Daily Energy](/components/sensor/total_daily_energy/) using below configuration: ```yaml sensor: @@ -167,8 +166,8 @@ restarts and so on. ## See Also -- {{< docref "/components/sensor/pulse_counter" >}} -- {{< docref "/components/sensor/pulse_meter" >}} -- {{< docref "/components/sensor/total_daily_energy" >}} -- {{< docref "/components/time/homeassistant" >}} +- [Pulse Counter Sensor](/components/sensor/pulse_counter/) +- [Pulse Meter Sensor](/components/sensor/pulse_meter/) +- [Total Daily Energy Sensor](/components/sensor/total_daily_energy/) +- [Home Assistant Time Source](/components/time/homeassistant/) - [Home Assistant Glow 🌟](https://github.com/klaasnicolaas/home-assistant-glow/). diff --git a/content/cookbook/pulse-catcher.md b/src/content/docs/cookbook/pulse-catcher.mdx similarity index 70% rename from content/cookbook/pulse-catcher.md rename to src/content/docs/cookbook/pulse-catcher.mdx index f58ed043a7..af2dcda346 100644 --- a/content/cookbook/pulse-catcher.md +++ b/src/content/docs/cookbook/pulse-catcher.mdx @@ -1,13 +1,9 @@ --- description: "Example to use the pulse meter sensor as a pulse catcher." title: "Pulse Catcher" -params: - seo: - description: Example to use the pulse meter sensor as a pulse catcher. - image: pulses.png --- -The {{< docref "/components/sensor/pulse_meter" >}} can be used as a very fast pulse catcher. This can be useful +The [Pulse Meter](/components/sensor/pulse_meter/) can be used as a very fast pulse catcher. This can be useful if you would like to detect an incoming pulse on a GPIO pin shorter than the typical `16ms` loop interval. ```yaml @@ -30,5 +26,5 @@ sensor: ## See Also -- {{< docref "/automations" >}} -- {{< docref "/components/sensor/pulse_meter" >}} +- [Automation](/automations/) +- [Pulse Meter Sensor](/components/sensor/pulse_meter/) diff --git a/content/cookbook/sonoff-fishpond-pump.md b/src/content/docs/cookbook/sonoff-fishpond-pump.mdx similarity index 86% rename from content/cookbook/sonoff-fishpond-pump.md rename to src/content/docs/cookbook/sonoff-fishpond-pump.mdx index efe25b4ffb..ce34d23f16 100644 --- a/content/cookbook/sonoff-fishpond-pump.md +++ b/src/content/docs/cookbook/sonoff-fishpond-pump.mdx @@ -1,13 +1,16 @@ --- description: "Making an automated fish pond pump with timing and auto stop safety with Sonoff Basic ESP8266 chip" title: "Sonoff Fish Pond Pump" -params: - seo: - description: Making an automated fish pond pump with timing and auto stop safety with Sonoff Basic ESP8266 chip - image: cookbook-sonoff-fishpond-pump.jpg --- -{{< img src="sonoff-fishpond.jpg" alt="Image" width="75.0%" class="align-center" >}} +import { Image } from 'astro:assets'; +import sonoffFishpondImg from './images/sonoff-fishpond.jpg'; +import sonoffFishpondPump1ProgrammingImg from './images/sonoff-fishpond-pump-1-programming.jpg'; +import sonoffFishpondPumpGpio14Img from './images/sonoff-fishpond-pump-gpio14.jpg'; +import sonoffFishpondPumpAndSensorImg from './images/sonoff-fishpond-pump-and-sensor.jpg'; +import sonoffFishpondPumpInstalledImg from './images/sonoff-fishpond-pump-installed.jpg'; + + The Sonoff range of products containing the ESP chips from Espressif has a myriad of uses and best of all, you can customize it, aka hackable. @@ -135,7 +138,7 @@ time: Follow the standard way of uploading to your Sonoff Basic. -{{< img src="sonoff-fishpond-pump-1-programming.jpg" alt="Image" width="75.0%" class="align-center" >}} + For USB uploads this generally includes: @@ -172,15 +175,15 @@ Connecting it Once the pump is running changing the position of the float in the float sensor will cause the Sonoff to stop the pump. -{{< img src="sonoff-fishpond-pump-gpio14.jpg" alt="Image" width="75.0%" class="align-center" >}} + Wires connected for easier access to connect and disconnect water level sensor -{{< img src="sonoff-fishpond-pump-and-sensor.jpg" alt="Image" width="75.0%" class="align-center" >}} + This needs to be submersed, pump (bio filter) and sensor connected in single housing (icecream tub). -{{< img src="sonoff-fishpond-pump-installed.jpg" alt="Image" width="75.0%" class="align-center" >}} + In this PVC housing the plates are secured using cabinet door magnets for easier access and maintenance. diff --git a/content/guides/audio_clips_for_i2s.md b/src/content/docs/guides/audio_clips_for_i2s.mdx similarity index 82% rename from content/guides/audio_clips_for_i2s.md rename to src/content/docs/guides/audio_clips_for_i2s.mdx index 9e59307b9a..6e69c9f6be 100644 --- a/content/guides/audio_clips_for_i2s.md +++ b/src/content/docs/guides/audio_clips_for_i2s.mdx @@ -3,13 +3,16 @@ description: "Create audio clip files for use with I²S Speakers" title: "Create audio clip files for use with I²S Speakers" --- +import { Image } from 'astro:assets'; +import saveAsWavImg from './images/save_as_wav.png'; + .. audio_clips_for_i2s: It is possible to create sound clips to include in your build to use with I²S speakers. No need for a media player component! - Using [Audacity](https://github.com/audacity/audacity), convert audio to WAV, mono, 16kHz, Unsigned 8bit PCM -{{< img src="save_as_wav.png" alt="Audacity export dialog" height="200" class="align-center" >}} +Audacity export dialog - Convert again, this time with [SOX](https://github.com/chirlu/sox). @@ -50,7 +53,7 @@ Enjoy! HowTo by [NUT]. -## See also +## See Also -- {{< docref "/components/speaker" >}} -- {{< docref "/components/speaker/i2s_audio" >}} +- [Speaker Components](/components/speaker/) +- [I²S Audio Speaker](/components/speaker/i2s_audio/) diff --git a/content/guides/changelog.md b/src/content/docs/guides/changelog.mdx similarity index 53% rename from content/guides/changelog.md rename to src/content/docs/guides/changelog.mdx index 3f6ceadd3b..9bd14aca54 100644 --- a/content/guides/changelog.md +++ b/src/content/docs/guides/changelog.mdx @@ -2,5 +2,3 @@ description: "Changelog" title: "Changelog" --- - -{{< redirect url="/changelog/index.html" >}} diff --git a/content/guides/cli.md b/src/content/docs/guides/cli.mdx similarity index 62% rename from content/guides/cli.md rename to src/content/docs/guides/cli.mdx index 6601ec0719..cc27f22eae 100644 --- a/content/guides/cli.md +++ b/src/content/docs/guides/cli.mdx @@ -1,9 +1,6 @@ --- description: "Documentation for the command line interface of ESPHome." title: "Command Line Interface" -params: - seo: - description: Documentation for the command line interface of ESPHome. --- ## Base Usage @@ -26,10 +23,10 @@ esphome [OPTIONS] [ARGUMENTS] ### `--help` Option -{{< option "-h|--help" >}} -Output possible `` and `[arguments]`. +**`-h|--help`** +: Output possible `` and `[arguments]`. Note: you can also use `--help` for any command to get arguments specific to that command. -{{< /option >}} + ```shell esphome --help @@ -37,27 +34,24 @@ esphome --help ### `--verbose` Option -{{< option "-v|--verbose" >}} -Enable verbose esphome logs. +**`-v|--verbose`** +: Enable verbose esphome logs. Can also be enabled via environment variable `ESPHOME_VERBOSE=true`. -{{< /option >}} ### `--quiet` Option -{{< option "-q|--quiet" >}} -Disable all esphome logs. +**`-q|--quiet`** +: Disable all esphome logs. -{{< /option >}} ### `--substitution` Option *Can be issued multiple times.* -{{< option "-s|--substitution KEY VALUE" >}} -Defines or overrides substitution KEY with value VALUE. +**`-s|--substitution KEY VALUE`** +: Defines or overrides substitution KEY with value VALUE. -{{< /option >}} Please see [command line substitutions](/components/substitutions#command-line-substitutions) for details. ## Commands @@ -73,8 +67,8 @@ The `esphome run ` command is the most common command for ESPHome. It #### Options -{{< option "--device UPLOAD_PORT" >}} -Manually specify the upload port/IP to use. For example `/dev/cu.SLAB_USBtoUART`, or `192.168.1.176` +**`--device UPLOAD_PORT`** +: Manually specify the upload port/IP to use. For example `/dev/cu.SLAB_USBtoUART`, or `192.168.1.176` to perform an OTA. Multiple `--device` options can be specified to provide fallback addresses. ESPHome will @@ -87,43 +81,41 @@ Example: esphome run my-device.yaml --device 192.168.1.100 --device 2001:db8::1 ``` -{{< /option >}} -{{< option "--upload_speed BAUD_RATE" >}} -The upload speed for serial flashing defaults to 460800 or as set with the environment variable `ESPHOME_UPLOAD_SPEED`. +**`--upload_speed BAUD_RATE`** +: The upload speed for serial flashing defaults to 460800 or as set with the environment variable `ESPHOME_UPLOAD_SPEED`. This can be overridden in the platformio options on a per-config basis, or set with this option at the time of uploading. -{{< /option >}} -{{< option "--no-logs" >}} -Disable starting log view. -{{< /option >}} +**`--no-logs`** +: Disable starting log view. + + +**`--topic TOPIC`** +: Manually set the topic to subscribe to for MQTT logs (defaults to the one in the configuration). + + +**`--username USERNAME`** +: Manually set the username to subscribe with for MQTT logs (defaults to the one in the configuration). + + +**`--password PASSWORD`** +: Manually set the password to subscribe with for MQTT logs (defaults to the one in the configuration). -{{< option "--topic TOPIC" >}} -Manually set the topic to subscribe to for MQTT logs (defaults to the one in the configuration). -{{< /option >}} -{{< option "--username USERNAME" >}} -Manually set the username to subscribe with for MQTT logs (defaults to the one in the configuration). -{{< /option >}} +**`--client-id CLIENT_ID`** +: Manually set the client ID to subscribe with for MQTT logs (defaults to a randomly chosen one). -{{< option "--password PASSWORD" >}} -Manually set the password to subscribe with for MQTT logs (defaults to the one in the configuration). -{{< /option >}} -{{< option "--client-id CLIENT_ID" >}} -Manually set the client ID to subscribe with for MQTT logs (defaults to a randomly chosen one). -{{< /option >}} +**`--host-port HOST_PORT`** +: Specify the host port to use for legacy Over the Air uploads. -{{< option "--host-port HOST_PORT" >}} -Specify the host port to use for legacy Over the Air uploads. -{{< /option >}} -{{< option "--reset" >}} -If set, reset the device before starting the logs. May also be configured with the environment variable +**`--reset`** +: If set, reset the device before starting the logs. May also be configured with the environment variable `ESPHOME_SERIAL_LOGGING_RESET=true`. -{{< /option >}} + ### `config` Command @@ -135,9 +127,9 @@ The `esphome compile ` validates the configuration and compiles the firm #### Options -{{< option "--only-generate" >}} -If set, only generates the C++ source code and does not compile the firmware. -{{< /option >}} +**`--only-generate`** +: If set, only generates the C++ source code and does not compile the firmware. + ### `upload` Command @@ -145,8 +137,8 @@ The `esphome upload ` validates the configuration and uploads the most r #### Options -{{< option "--device UPLOAD_PORT" >}} -Manually specify the upload port/IP address to use. For example `/dev/cu.SLAB_USBtoUART`, or `192.168.1.176` +**`--device UPLOAD_PORT`** +: Manually specify the upload port/IP address to use. For example `/dev/cu.SLAB_USBtoUART`, or `192.168.1.176` to perform an OTA. Multiple `--device` options can be specified to provide fallback addresses. ESPHome will @@ -158,17 +150,16 @@ Example: esphome upload my-device.yaml --device 192.168.1.100 --device 2001:db8::1 ``` -{{< /option >}} -{{< option "--upload_speed BAUD_RATE" >}} -The upload speed for serial flashing defaults to 460800 or as set with the environment variable `ESPHOME_UPLOAD_SPEED`. +**`--upload_speed BAUD_RATE`** +: The upload speed for serial flashing defaults to 460800 or as set with the environment variable `ESPHOME_UPLOAD_SPEED`. This can be overridden in the platformio options on a per-config basis, or set with this option at the time of uploading. -{{< /option >}} -{{< option "--host-port HOST_PORT" >}} -Specify the host port to use for legacy Over the Air uploads. -{{< /option >}} + +**`--host-port HOST_PORT`** +: Specify the host port to use for legacy Over the Air uploads. + ### `clean-mqtt` Command @@ -177,22 +168,22 @@ See [Using with Home Assistant MQTT entities](/components/mqtt#mqtt-using_with_h #### Options -{{< option "--topic TOPIC" >}} -Manually set the topic to clean retained messages from (defaults to the MQTT discovery topic of the +**`--topic TOPIC`** +: Manually set the topic to clean retained messages from (defaults to the MQTT discovery topic of the node). -{{< /option >}} -{{< option "--username USERNAME" >}} -Manually set the username to subscribe with. -{{< /option >}} -{{< option "--password PASSWORD" >}} -Manually set the password to subscribe with. -{{< /option >}} +**`--username USERNAME`** +: Manually set the username to subscribe with. + + +**`--password PASSWORD`** +: Manually set the password to subscribe with. + + +**`--client-id CLIENT_ID`** +: Manually set the client ID to subscribe with. -{{< option "--client-id CLIENT_ID" >}} -Manually set the client ID to subscribe with. -{{< /option >}} ### `wizard` Command @@ -219,31 +210,31 @@ single configuration file. #### Options -{{< option "--address ADDRESS" >}} -Manually set the address to bind to (defaults to 0.0.0.0) -{{< /option >}} +**`--address ADDRESS`** +: Manually set the address to bind to (defaults to 0.0.0.0) + + +**`--port PORT`** +: Manually set the HTTP port to open connections on (defaults to 6052) -{{< option "--port PORT" >}} -Manually set the HTTP port to open connections on (defaults to 6052) -{{< /option >}} -{{< option "--socket SOCKET" >}} -Manually set the unix socket to bind to. If specified along with `--address` or `--port` the values +**`--socket SOCKET`** +: Manually set the unix socket to bind to. If specified along with `--address` or `--port` the values for those parameters will be ignored. Cannot be used along with `--systemd-socket`. -{{< /option >}} -{{< option "--username USERNAME" >}} -The optional username to require for authentication. -{{< /option >}} -{{< option "--password PASSWORD" >}} -The optional password to require for authentication. -{{< /option >}} +**`--username USERNAME`** +: The optional username to require for authentication. + + +**`--password PASSWORD`** +: The optional password to require for authentication. + -{{< option "--open-ui" >}} -If set, opens the dashboard UI in a browser once the server is up and running. Does not work when using +**`--open-ui`** +: If set, opens the dashboard UI in a browser once the server is up and running. Does not work when using `--socket`. -{{< /option >}} + ### `analyze-memory` Command @@ -268,24 +259,24 @@ The `esphome logs ` command validates the configuration and shows all lo #### Options -{{< option "--topic TOPIC" >}} -Manually set the topic to subscribe to. -{{< /option >}} +**`--topic TOPIC`** +: Manually set the topic to subscribe to. + + +**`--username USERNAME`** +: Manually set the username. -{{< option "--username USERNAME" >}} -Manually set the username. -{{< /option >}} -{{< option "--password PASSWORD" >}} -Manually set the password. -{{< /option >}} +**`--password PASSWORD`** +: Manually set the password. -{{< option "--client-id CLIENT_ID" >}} -Manually set the client id. -{{< /option >}} -{{< option "--device SERIAL_PORT" >}} -Manually specify a serial port/IP to use. For example `/dev/cu.SLAB_USBtoUART`. +**`--client-id CLIENT_ID`** +: Manually set the client id. + + +**`--device SERIAL_PORT`** +: Manually specify a serial port/IP to use. For example `/dev/cu.SLAB_USBtoUART`. Multiple `--device` options can be specified to provide fallback addresses. When using the native API for logs, all addresses are passed to the API client which uses the Happy Eyeballs @@ -297,12 +288,11 @@ Example: esphome logs my-device.yaml --device 192.168.1.100 --device 2001:db8::1 ``` -{{< /option >}} -{{< option "--reset" >}} -If set, reset the device before starting the logs. May also be configured with the environment variable +**`--reset`** +: If set, reset the device before starting the logs. May also be configured with the environment variable `ESPHOME_SERIAL_LOGGING_RESET=true`. -{{< /option >}} + ## Using Bash or ZSH auto-completion @@ -362,4 +352,4 @@ The response lists info about currently available ESPHome devices: ## See Also -* {{< docref "/guides/index" "Guides" >}} +* [Guides](/guides/) diff --git a/content/guides/configuration-types.md b/src/content/docs/guides/configuration-types.mdx similarity index 93% rename from content/guides/configuration-types.md rename to src/content/docs/guides/configuration-types.mdx index a8e033447c..5e4c5566aa 100644 --- a/content/guides/configuration-types.md +++ b/src/content/docs/guides/configuration-types.mdx @@ -1,16 +1,12 @@ --- description: "Documentation of different configuration types in ESPHome" title: "Configuration Types" -params: - seo: - description: Documentation of different configuration types in ESPHome - image: settings.svg --- ESPHome's configuration files have several configuration types. This page describes them. -{{< anchor "config-id" >}} + ## ID @@ -33,7 +29,7 @@ IDs are in reality just C++ variable names, they must also adhere to > [!NOTE] > These IDs are used only within ESPHome and are not translated to Home Assistant's Entity ID. -{{< anchor "config-pin" >}} + ## Pin @@ -44,7 +40,7 @@ you could type `GPIO16` or just `16`. Most boards however have aliases for certain pins. For example the NodeMCU ESP8266 uses pin names `D0` through `D8` as aliases for the internal GPIO -pin numbers. Each board (defined in {{< docref "/components/esphome" "ESPHome section" >}}) +pin numbers. Each board (defined in [ESPHome section](/components/esphome/)) has their own aliases and so not all of them are supported yet. For example, for the `D0` (as printed on the PCB silkscreen) pin on the NodeMCU ESP8266 has the internal GPIO name `GPIO16`, but also has an alias `D0`. So using @@ -59,7 +55,7 @@ some_config_option: pin: D0 ``` -{{< anchor "config-pin_schema" >}} + ## Pin Schema @@ -134,7 +130,7 @@ Advanced options: If you are *absolutely* certain that your specific board design allows a normally-reserved pin to be used, you can suppress the error by setting this option to `true`. Defaults to `false`. -{{< anchor "config-time" >}} + ## Time @@ -169,6 +165,6 @@ some_config_option: ## See Also -- {{< docref "/index" "ESPHome index" >}} -- {{< docref "getting_started_command_line/" >}} -- {{< docref "faq/" >}} +- [ESPHome Docs](/components/) +- [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) +- [Frequently Asked Questions](/guides/faq/) diff --git a/content/guides/creators.md b/src/content/docs/guides/creators.mdx similarity index 91% rename from content/guides/creators.md rename to src/content/docs/guides/creators.mdx index 61c824815c..5326320c2d 100644 --- a/content/guides/creators.md +++ b/src/content/docs/guides/creators.mdx @@ -1,9 +1,6 @@ --- description: "Information for creating and sharing devices using ESPHome firmware." title: "Sharing ESPHome devices" -params: - seo: - description: Information for creating and sharing devices using ESPHome firmware. --- We have added configuration options to ESPHome to make it easier @@ -73,8 +70,8 @@ improv_serial: - `name_add_mac_suffix` - [Adding the MAC address as a suffix to the device name](/components/esphome#esphome-mac_suffix) - `project` - [Project information](/components/esphome#esphome-creators_project) -- `esp32_improv` - {{< docref "/components/esp32_improv" >}} -- `captive_portal` - {{< docref "/components/captive_portal" >}} +- `esp32_improv` - [Esp32 Improv](/components/esp32_improv/) +- `captive_portal` - [Captive Portal](/components/captive_portal/) - `wifi` -> `ap` allows you to flash a device that will not contain any credentials and they must be set by the user via either the `ap` + `captive_portal` or the `esp32_improv` / `improv_serial` components. @@ -92,6 +89,4 @@ improv_serial: YAML instead of referencing the package. Set this to `true` if you are creating a tutorial to let users easily tweak the whole configuration or be able to uncomment follow-up tutorial steps. -- `improv_serial` - {{< docref "/components/improv_serial" >}} - -## See Also +- `improv_serial` - [Improv Serial](/components/improv_serial/) diff --git a/content/guides/devboard_as_flasher.md b/src/content/docs/guides/devboard_as_flasher.mdx similarity index 85% rename from content/guides/devboard_as_flasher.md rename to src/content/docs/guides/devboard_as_flasher.mdx index cc73cb7f03..1a1e3b6737 100644 --- a/content/guides/devboard_as_flasher.md +++ b/src/content/docs/guides/devboard_as_flasher.mdx @@ -3,7 +3,11 @@ description: "Using an ESP devboard as a USB-UART bridge" title: "Using an ESP devboard as a USB-UART bridge" --- -{{< anchor "devboard-as-flasher" >}} +import { Image } from 'astro:assets'; +import devboardAsFlasherImg from './images/devboard-as-flasher.png'; +import Figure from '@components/Figure.astro'; + + ESP development boards usually have an onboard USB interface, either built into the chip (e.g. ESP32-S Series) or via an onboard USB-UART bridge chip. @@ -20,16 +24,19 @@ and will not change anything already flashed onto it - it's purely a way to use We will refer to the devboard with functional USB_UART bridge chip as flasher board for this guide. -Make sure you've read the {{< docref "/guides/physical_device_connection" >}} +Make sure you've read the [Physical Device Connection](/guides/physical_device_connection/) for properly understanding the functionality of your flasher devboard. -{{< img src="devboard-as-flasher.png" alt="Image" - caption="Connection diagram for an ESP flash target" width="75.0%" class="align-center" >}} +
    You need to make the following electrical connections: > [!NOTE] -> > - Most ESP32 S and C series devboards do *not* have a separate USB-UART chip - they have it built into the ESP. See > below for instructions regarding ESP32-S series. > @@ -49,7 +56,6 @@ Pulling down `EN` by connecting it to `GND` on the flasher board prevents the ESP chip on flasher module from booting and polluting the serial lines. > [!NOTE] -> > - If the board has not previously had ESPHome loaded, you may need to pull the `IO0` pin low (i.e. connected to `GND`) > to force the board into flash mode. > This must be done before power is applied. @@ -61,9 +67,9 @@ board via whichever means you intend to use. ## Making an ESP32-S Series devboard act like a USB-UART bridge -{{< anchor "esp32s-usb-uart-bridge" >}} + -Users with ESP32-S2/S3 devboards can have a look at instead. +Users with ESP32-S2/S3 devboards can have a look at [https://github.com/espressif/esp-usb-bridge](https://github.com/espressif/esp-usb-bridge) instead. But be warned, it demands flashing your S2/S3 board using ESP-IDF to act like a USB_UART bridge first. In the SDKconfig, make sure to verify the GPIO pins for the TxD/RxD signals. @@ -85,4 +91,4 @@ This is in contrast to the aforementioned devboards with external USB_UART bridg ## See Also -- {{< docref "/guides/index" "Guides" >}} +- [Guides](/guides/) diff --git a/content/guides/diy.md b/src/content/docs/guides/diy.mdx similarity index 66% rename from content/guides/diy.md rename to src/content/docs/guides/diy.mdx index 23abe68c78..f9dd64c1e2 100644 --- a/content/guides/diy.md +++ b/src/content/docs/guides/diy.mdx @@ -1,12 +1,9 @@ --- description: "Community curated list of DIY creations and custom code for ESPHome." title: "DIY Examples" -params: - seo: - description: Community curated list of DIY creations and custom code for ESPHome. - image: earth.svg --- + This is a curated list of awesome creations with ESPHome containing various external components, blog posts, videos and sample configurations. It should serve as a means of finding inspiration for new projects and finding other ESPHome-enthusiasts on the web. @@ -23,7 +20,7 @@ unless it's truly exceptional, etc. ## Blog Posts & Videos - +{/* markdownlint-disable MD013 */} - [Build a cheap air quality sensor](https://www.pieterbrinkman.com/2021/02/03/build-a-cheap-air-quality-meter-using-esphome-home-assistant-and-a-particulate-matter-sensor/) by [Pieter](http://www.pieterbrinkman.com) - [Track your water usage using a proximity sensor](https://www.pieterbrinkman.com/2022/02/02/build-a-cheap-water-usage-sensor-using-esphome-home-assistant-and-a-proximity-sensor/) by [Pieter](http://www.pieterbrinkman.com) @@ -34,111 +31,111 @@ unless it's truly exceptional, etc. - [Cheap Car Presence Detection](https://adonno.com/car-presence-position-detection/) by [Adonno](https://adonno.com) - [Calibrating Power Sensors](https://frenck.dev/calibrating-an-esphome-flashed-power-plug/) by [Frenck](https://frenck.dev) - [Count Water Bottles](https://vigonotion.com/blog/monitor-remainding-water-bottles/) by [vigonotion](https://vigonotion.com) -- [ESPHome Weather Station with Nextion display](https://github.com/bruxy70/Home-Assistant-ESPHome-Weather-Station) by {{< ghuser name="bruxy70" >}} -- [ESPHome Wall Mount with Nextion Display](https://github.com/Andoramb/Nextion-wall-mount) by {{< ghuser name="Andoramb" >}} ([video](https://www.youtube.com/watch?v=TL8wZNnS4jI)) -- [ESPHome 12v Fan Controller with PID Climate](https://github.com/patrickcollins12/esphome-fan-controller) by {{< ghuser name="patrickcollins12" >}} -- [Sonoff 4CH Irrigation Controller with Nextion Display](https://github.com/bruxy70/Irrigation-with-display) by {{< ghuser name="bruxy70" >}} +- [ESPHome Weather Station with Nextion display](https://github.com/bruxy70/Home-Assistant-ESPHome-Weather-Station) by [@bruxy70](https://github.com/bruxy70) +- [ESPHome Wall Mount with Nextion Display](https://github.com/Andoramb/Nextion-wall-mount) by [@Andoramb](https://github.com/Andoramb) ([video](https://www.youtube.com/watch?v=TL8wZNnS4jI)) +- [ESPHome 12v Fan Controller with PID Climate](https://github.com/patrickcollins12/esphome-fan-controller) by [@patrickcollins12](https://github.com/patrickcollins12) +- [Sonoff 4CH Irrigation Controller with Nextion Display](https://github.com/bruxy70/Irrigation-with-display) by [@bruxy70](https://github.com/bruxy70) - [Automated Bathroom Ventilation](https://www.youtube.com/watch?v=weBDnmrQYOs) by [Intermittent Technology](https://intermit.tech) - [Detecting Sound with ESP8266](https://thibmaek.com/posts/detecting-sound-level-using-esp8266-and-esphome) by [Thibault Maekelbergh](https://thibmaek.com) -- [SW420 Vibration Sensor with Remote Notifications](https://github.com/rmooreID/Home-Assistant-Appliance-Monitor/) by {{< ghuser name="rmooreID" >}} -- [DIY Irrigation Controller (with Internal Scheduler + Lovelace UI)](https://brianhanifin.com/posts/diy-irrigation-controller-esphome-home-assistant/) by {{< ghuser name="BrianHanifin" >}} +- [SW420 Vibration Sensor with Remote Notifications](https://github.com/rmooreID/Home-Assistant-Appliance-Monitor/) by [@rmooreID](https://github.com/rmooreID) +- [DIY Irrigation Controller (with Internal Scheduler + Lovelace UI)](https://brianhanifin.com/posts/diy-irrigation-controller-esphome-home-assistant/) by [@BrianHanifin](https://github.com/BrianHanifin) - [Smart Intercom](https://frog32.ch/smart-intercom.html) by [Marc Egli](https://frog32.ch/) - [Esp32 six shutters controller](https://github.com/Gio-dot/Six-shutters-ESP32-controller) by [Gio-dot](https://github.com/Gio-dot) - [Washing machine phases detector (Sonoff Pow R2)](https://github.com/Gio-dot/Washing-Machine-Sonoff-Pow-R2-Esphome) by [Gio-dot](https://github.com/Gio-dot) -- [Sonoff L1 LED Strip](https://emorydunn.com/blog/2020/08/10/sonoff-l1-&-home-assistant/) by {{< ghuser name="emorydunn" >}} +- [Sonoff L1 LED Strip](https://emorydunn.com/blog/2020/08/10/sonoff-l1-&-home-assistant/) by [@emorydunn](https://github.com/emorydunn) - [ESPHome for SP501E LED Controller](https://margau.net/posts/2020-11-21-2h-led-hack/) by [margau](https://margau.net) - [4$ Xiaomi mijia thermometer LYWSD03MMC + ESP32 + ESPHome](https://omarghader.github.io/how-to-monitor-your-home-temperature-with-esp32-and-xiaomi-mijia-using-esphome/) by [Omar GHADER](https://omarghader.github.io/post) -- [Baseboard (Line Voltage) Thermostat from Smart Switch](https://github.com/rjmurph2241/baseboard-heating-thermostat) by {{< ghuser name="rjmurph2241" >}} -- [Office Doorbell](https://github.com/shish/esphome-projects/blob/master/office-doorbell.md) by {{< ghuser name="shish" >}} -- [Display TM1637 with ESPHome and MQTT showing Youtube subscribers count and other info](https://youtu.be/27JZEky0h1Q) by {{< ghuser name="electrofun-smart" >}} -- [Automate your garage door with ESP8266 lysignal Yunshan 7v-30v](https://www.haade.fr/en/blog/home-automation-smarthome-jeedom-homeassistant/tutos-haade-lab/domotiser-sa-porte-de-garage-pour-5e/) by {{< ghuser name="haade-administrator" >}} -- [Embedded controller for Audioengine A5+](https://github.com/chatziko/audioengine-a5-controller/) by {{< ghuser name="chatziko" >}} +- [Baseboard (Line Voltage) Thermostat from Smart Switch](https://github.com/rjmurph2241/baseboard-heating-thermostat) by [@rjmurph2241](https://github.com/rjmurph2241) +- [Office Doorbell](https://github.com/shish/esphome-projects/blob/master/office-doorbell.md) by [@shish](https://github.com/shish) +- [Display TM1637 with ESPHome and MQTT showing Youtube subscribers count and other info](https://youtu.be/27JZEky0h1Q) by [@electrofun-smart](https://github.com/electrofun-smart) +- [Automate your garage door with ESP8266 lysignal Yunshan 7v-30v](https://www.haade.fr/en/blog/home-automation-smarthome-jeedom-homeassistant/tutos-haade-lab/domotiser-sa-porte-de-garage-pour-5e/) by [@haade-administrator](https://github.com/haade-administrator) +- [Embedded controller for Audioengine A5+](https://github.com/chatziko/audioengine-a5-controller/) by [@chatziko](https://github.com/chatziko) - [Cheap 10$ Air quality monitor WP6003: ESP32, Bluetooth & Home assistant](https://omarghader.github.io/esp32-airquality-box-wp6003-homeassistant/) by [Omar GHADER](https://omarghader.github.io/post) - [ESP32 AM312 motion sensor : light automation](https://omarghader.github.io/esp32-am312-pir-motion-sensor/) by [Omar GHADER](https://omarghader.github.io/post) - [Little thermostat based on AZ-Touch hardware and esphome](https://github.com/ingbenna/AZ-Touch_esphome_thermostat/) by ingbenna - [Converting a Carro Home DC Fan to ESPHome](https://1projectaweek.com/blog/2022/2/8/converting-a-carro-home-dc-fan-to-esp-home) by [Bill Church](https://1projectaweek.com) - [Automated Coffee Bean Roaster](https://hackaday.io/project/186852-automated-coffee-bean-roaster) by [brooksben11](https://hackaday.io/brooksben11) - [Droplet Smart Irrigation System](https://github.com/PricelessToolkit/Droplet) by [PricelessToolkit](https://github.com/PricelessToolkit) -- [Stepper motor blinds](https://github.com/tronikos/esphome-blinds) by {{< ghuser name="tronikos" >}} -- [Read your water meter or gas meter using a triple-axis magnetometer](https://github.com/tronikos/esphome-magnetometer-water-gas-meter) by {{< ghuser name="tronikos" >}} -- [Garage door opener controller for devices with optical encoder](https://github.com/serg987/ESPHomeGarageDoorOpener) by {{< ghuser name="serg987" >}} -- [An IoT clock designed for children](https://github.com/chrisns/childrens-clock) by {{< ghuser name="chrisns" >}} +- [Stepper motor blinds](https://github.com/tronikos/esphome-blinds) by [@tronikos](https://github.com/tronikos) +- [Read your water meter or gas meter using a triple-axis magnetometer](https://github.com/tronikos/esphome-magnetometer-water-gas-meter) by [@tronikos](https://github.com/tronikos) +- [Garage door opener controller for devices with optical encoder](https://github.com/serg987/ESPHomeGarageDoorOpener) by [@serg987](https://github.com/serg987) +- [An IoT clock designed for children](https://github.com/chrisns/childrens-clock) by [@chrisns](https://github.com/chrisns) - [Remote controller RC433 for garage door open](https://dedeideas.eu/index.php/en-us/rc433-pre-home-assistant-en) by [lubomirkarlik](https://dedeideas.eu/index.php/en-us/about-me) -- [How to create an ESPHome external component](https://medium.com/@vinsce/create-an-esphome-external-component-part-1-introduction-config-validation-and-code-generation-e0389e674bd6) by {{< ghuser name="vinsce" >}} -- [Smart garage door remote modification when direct opener wiring isn't feasible](https://github.com/linux4life798/smart-garage-remote) by {{< ghuser name="linux4life798" >}} +- [How to create an ESPHome external component](https://medium.com/@vinsce/create-an-esphome-external-component-part-1-introduction-config-validation-and-code-generation-e0389e674bd6) by [@vinsce](https://github.com/vinsce) +- [Smart garage door remote modification when direct opener wiring isn't feasible](https://github.com/linux4life798/smart-garage-remote) by [@linux4life798](https://github.com/linux4life798) ## Custom Components & Code -- [Custom RGBW Light Output emulating color temperature support](https://gist.github.com/madjam002/31cc88640efa370630fed6914fa4eb7f) by {{< ghuser name="madjam002" >}} -- [Custom ESPHome native API to influxdb python script](https://gist.github.com/fpletz/d071c72e45d17ba274fd61ca7a465033#file-esphome-sensor-influxdb-py) by {{< ghuser name="fpletz" >}} -- [Custom Electra HVAC climate component](https://gist.github.com/liads/c702fd4b8529991af9cd52d03b694814) by {{< ghuser name="liads" >}} -- [Custom D6T Thermal Sensor](https://gist.github.com/mKeRix/4fc553574af0a2d8682734695160b859) by {{< ghuser name="mKeRix" >}} -- [Custom 斐讯DC1 Mains Socket Component (chinese)](https://github.com/Samuel-0-0/phicomm_dc1-esphome) by {{< ghuser name="Samuel-0-0" >}} -- [Custom Component for Tuya PIR sensors](https://github.com/brandond/esphome-tuya_pir) by {{< ghuser name="brandond" >}} +- [Custom RGBW Light Output emulating color temperature support](https://gist.github.com/madjam002/31cc88640efa370630fed6914fa4eb7f) by [@madjam002](https://github.com/madjam002) +- [Custom ESPHome native API to influxdb python script](https://gist.github.com/fpletz/d071c72e45d17ba274fd61ca7a465033#file-esphome-sensor-influxdb-py) by [@fpletz](https://github.com/fpletz) +- [Custom Electra HVAC climate component](https://gist.github.com/liads/c702fd4b8529991af9cd52d03b694814) by [@liads](https://github.com/liads) +- [Custom D6T Thermal Sensor](https://gist.github.com/mKeRix/4fc553574af0a2d8682734695160b859) by [@mKeRix](https://github.com/mKeRix) +- [Custom 斐讯DC1 Mains Socket Component (chinese)](https://github.com/Samuel-0-0/phicomm_dc1-esphome) by [@Samuel-0-0](https://github.com/Samuel-0-0) +- [Custom Component for Tuya PIR sensors](https://github.com/brandond/esphome-tuya_pir) by [@brandond](https://github.com/brandond) - [DIY Whole Home Power Monitoring with ATM90E32AS chip](https://www.youtube.com/watch?v=BOgy6QbfeZk) by [digiblurDIY](https://www.youtube.com/channel/UC5ZdPKE2ckcBhljTc2R_qNA) -- [SK6812 Addressable Light as Display Matrix](https://github.com/rnauber/ESPHomeMatrixLED) by {{< ghuser name="rnauber" >}} -- [Custom MAX7219 Matrix Display Component](https://github.com/ASMfreaK/esphome_max7219) by {{< ghuser name="ASMfreaK" >}} -- [Custom ESPHome Roomba Component](https://github.com/mannkind/ESPHomeRoombaComponent) by {{< ghuser name="mannkind" >}} -- [Custom Real-Time LED strip music visualization](https://github.com/zhujisheng/audio-reactive-led-strip) by {{< ghuser name="zhujisheng" >}} -- [Custom ITHO Fan control](https://github.com/CoMPaTech/esphome_c1101) by {{< ghuser name="CoMPaTech" >}} -- [Custom LCTech 4-channel relay output](https://github.com/nekromant/esphome-lctech-4chanel-modules) by {{< ghuser name="nekromant" >}} -- [LIFX Protocol for ESPHome](https://github.com/giantorth/ESPHomeLifx) by {{< ghuser name="giantorth" >}} -- [Custom ESPHome Keypad sensor](https://github.com/Syralist/esphomekeypad) by {{< ghuser name="Syralist" >}} -- [LINP-Doorbell-g03 Custom Component](https://github.com/pauln/esphome-linp-doorbell-g03) by {{< ghuser name="pauln" >}} -- [ESPHome <-> Homebridge](https://www.npmjs.com/package/homebridge-esphome) by [basdelfos](https://www.npmjs.com/~basdelfos) -- [Custom ESPHome for Wofea V10 Alarm](https://github.com/nbergont/wofea_v10_hack) by {{< ghuser name="nbergont" >}} -- [Custom Smart meter P1 port reader](https://github.com/nldroid/CustomP1UartComponent) by {{< ghuser name="nldroid" >}} -- [Custom Mitsubishi HVAC HeatPump control using UART](https://github.com/geoffdavis/esphome-mitsubishiheatpump) by {{< ghuser name="geoffdavis" >}} -- [Jura Impressa J6 coffee machine custom component](https://github.com/ryanalden/esphome-jura-component) by {{< ghuser name="ryanalden" >}} -- [Paradox alarm system sensors custom component](https://github.com/Margriko/Paradox-ESPHome) by {{< ghuser name="Margriko" >}} -- [DSC POWER832 (PC5010) alarm system custom component](https://github.com/Dilbert66/esphome-dsckeybus) by {{< ghuser name="Dilbert66" >}} -- [Custom UART component for WS3 weather station and air particulate matter sensor](https://github.com/kquinsland/ws3-to-esphome-bridge) by {{< ghuser name="kquinsland" >}} -- [ADEMCO/VISTA/Honeywell alarm system custom component](https://github.com/Dilbert66/esphome-vistaECP) by {{< ghuser name="Dilbert66" >}} -- [Winsen ZE08-CH2O (Formaldehyde sensor) custom component](https://gist.github.com/cretep/f96606dc6a4eae0d85993d6085959220) by {{< ghuser name="cretep" >}} -- [ZclMqttBridge custom component](https://github.com/HyperReap/zcl_mqtt_bridge) by {{< ghuser name="HyperReap" >}} -- [Custom esp32 media player and notifier](https://www.printables.com/model/327708-esphome-nodemcu-esp32-media-player) by {{< ghuser name="rananna" >}} -- [Blauberg recuperator S22 controller replacement](https://github.com/Benas09/Blauberg_S22) by {{< ghuser name="Benas09" >}} +- [SK6812 Addressable Light as Display Matrix](https://github.com/rnauber/ESPHomeMatrixLED) by [@rnauber](https://github.com/rnauber) +- [Custom MAX7219 Matrix Display Component](https://github.com/ASMfreaK/esphome_max7219) by [@ASMfreaK](https://github.com/ASMfreaK) +- [Custom ESPHome Roomba Component](https://github.com/mannkind/ESPHomeRoombaComponent) by [@mannkind](https://github.com/mannkind) +- [Custom Real-Time LED strip music visualization](https://github.com/zhujisheng/audio-reactive-led-strip) by [@zhujisheng](https://github.com/zhujisheng) +- [Custom ITHO Fan control](https://github.com/CoMPaTech/esphome_c1101) by [@CoMPaTech](https://github.com/CoMPaTech) +- [Custom LCTech 4-channel relay output](https://github.com/nekromant/esphome-lctech-4chanel-modules) by [@nekromant](https://github.com/nekromant) +- [LIFX Protocol for ESPHome](https://github.com/giantorth/ESPHomeLifx) by [@giantorth](https://github.com/giantorth) +- [Custom ESPHome Keypad sensor](https://github.com/Syralist/esphomekeypad) by [@Syralist](https://github.com/Syralist) +- [LINP-Doorbell-g03 Custom Component](https://github.com/pauln/esphome-linp-doorbell-g03) by [@pauln](https://github.com/pauln) +- [ESPHome ↔ Homebridge](https://www.npmjs.com/package/homebridge-esphome) by [basdelfos](https://www.npmjs.com/~basdelfos) +- [Custom ESPHome for Wofea V10 Alarm](https://github.com/nbergont/wofea_v10_hack) by [@nbergont](https://github.com/nbergont) +- [Custom Smart meter P1 port reader](https://github.com/nldroid/CustomP1UartComponent) by [@nldroid](https://github.com/nldroid) +- [Custom Mitsubishi HVAC HeatPump control using UART](https://github.com/geoffdavis/esphome-mitsubishiheatpump) by [@geoffdavis](https://github.com/geoffdavis) +- [Jura Impressa J6 coffee machine custom component](https://github.com/ryanalden/esphome-jura-component) by [@ryanalden](https://github.com/ryanalden) +- [Paradox alarm system sensors custom component](https://github.com/Margriko/Paradox-ESPHome) by [@Margriko](https://github.com/Margriko) +- [DSC POWER832 (PC5010) alarm system custom component](https://github.com/Dilbert66/esphome-dsckeybus) by [@Dilbert66](https://github.com/Dilbert66) +- [Custom UART component for WS3 weather station and air particulate matter sensor](https://github.com/kquinsland/ws3-to-esphome-bridge) by [@kquinsland](https://github.com/kquinsland) +- [ADEMCO/VISTA/Honeywell alarm system custom component](https://github.com/Dilbert66/esphome-vistaECP) by [@Dilbert66](https://github.com/Dilbert66) +- [Winsen ZE08-CH2O (Formaldehyde sensor) custom component](https://gist.github.com/cretep/f96606dc6a4eae0d85993d6085959220) by [@cretep](https://github.com/cretep) +- [ZclMqttBridge custom component](https://github.com/HyperReap/zcl_mqtt_bridge) by [@HyperReap](https://github.com/HyperReap) +- [Custom esp32 media player and notifier](https://www.printables.com/model/327708-esphome-nodemcu-esp32-media-player) by [@rananna](https://github.com/rananna) +- [Blauberg recuperator S22 controller replacement](https://github.com/Benas09/Blauberg_S22) by [@Benas09](https://github.com/Benas09) - [Rheem Econet Water Heater and Furnace Controller](https://github.com/esphome-econet/esphome-econet) by [ESPHome-econet](https://github.com/esphome-econet) -- [Garage Door Opener with position control using a relay and one or two reed sensors](https://github.com/tronikos/esphome-gdo) by {{< ghuser name="tronikos" >}} +- [Garage Door Opener with position control using a relay and one or two reed sensors](https://github.com/tronikos/esphome-gdo) by [@tronikos](https://github.com/tronikos) - [Medisana BS440 (and propably more scales)](https://github.com/bwynants/weegschaal) by [bwynants](https://github.com/bwynants) - [Novy Pureline Pro extractor hood](https://github.com/bwynants/purelinepro) by [bwynants](https://github.com/bwynants) -- [Digoo DG-R8H and similar nexus433 sensors to MQTT component](https://github.com/FreeBear-nc/esphome-nexus433) by {{< ghuser name="FreeBear-nc" >}} -- [Adaptive Lighting for white/warm lights](https://github.com/mdvorak/esphome-adaptive-lighting) by {{< ghuser name="mdvorak" >}} -- [Connecting the PAJ7620 gesture sensor](https://github.com/apaex/PAJ7620-ESPHome) by {{< ghuser name="apaex" >}} -- [Dew Point Sensor using Magnus formula](https://github.com/iret33/esphome-dew-point) by {{< ghuser name="iret33" >}} +- [Digoo DG-R8H and similar nexus433 sensors to MQTT component](https://github.com/FreeBear-nc/esphome-nexus433) by [@FreeBear-nc](https://github.com/FreeBear-nc) +- [Adaptive Lighting for white/warm lights](https://github.com/mdvorak/esphome-adaptive-lighting) by [@mdvorak](https://github.com/mdvorak) +- [Connecting the PAJ7620 gesture sensor](https://github.com/apaex/PAJ7620-ESPHome) by [@apaex](https://github.com/apaex) +- [Dew Point Sensor using Magnus formula](https://github.com/iret33/esphome-dew-point) by [@iret33](https://github.com/iret33) ## Sample Configurations -- [esphome-devices.com](https://www.esphome-devices.com/) by {{< ghuser name="jonathanadams" >}} +- [esphome-devices.com](https://www.esphome-devices.com/) by [@jonathanadams](https://github.com/jonathanadams) - [Ultrasonic Sensor for detecting if car in Garage](https://gist.github.com/Snipercaine/f3908a051fd79e6d7d7b765152666c2a) by [DrZzs](http://drzzs.com/) - [Sonoff POW R2 Washing Machine Sensor](https://gist.github.com/frenck/1b4f0ea98f1f6d86d597c2d9636636db) by [Frenck](https://frenck.dev) -- [Sonoff iFan02 Custom Output Example](https://gist.github.com/quazzie/09ee3ef2c419ecbcf979a7410062481b) by {{< ghuser name="quazzie" >}} +- [Sonoff iFan02 Custom Output Example](https://gist.github.com/quazzie/09ee3ef2c419ecbcf979a7410062481b) by [@quazzie](https://github.com/quazzie) - [TTGO Esp32 Camera with display](https://gist.github.com/Snipercaine/d8345571563536e9661422c3509d1119) by [DrZzs](http://drzzs.com/) -- [ESPHome configs using substitutions and !include](https://github.com/AlexMekkering/esphome-config) by {{< ghuser name="AlexMekkering" >}} -- [ESPHome configs](https://github.com/glmnet/esphome_devices) by {{< ghuser name="glmnet" >}} -- [DS102 3 Gang](https://gist.github.com/tribut/ddde2ef1e2fa3919c50c4ab9c03e7056) by {{< ghuser name="tribut" >}} -- [ESP32 Higrow Plant Moisture Sensor](https://gist.github.com/WoLpH/bc284ba9aeb5d1263f72d6294e239c1a) by {{< ghuser name="WoLpH" >}} -- [Send push notification to phone when dryer cycle has finished](https://gist.github.com/jeffehobbs/93ab682705ec3bbba19887903e7ccdb9) by {{< ghuser name="jeffehobbs" >}} +- [ESPHome configs using substitutions and !include](https://github.com/AlexMekkering/esphome-config) by [@AlexMekkering](https://github.com/AlexMekkering) +- [ESPHome configs](https://github.com/glmnet/esphome_devices) by [@glmnet](https://github.com/glmnet) +- [DS102 3 Gang](https://gist.github.com/tribut/ddde2ef1e2fa3919c50c4ab9c03e7056) by [@tribut](https://github.com/tribut) +- [ESP32 Higrow Plant Moisture Sensor](https://gist.github.com/WoLpH/bc284ba9aeb5d1263f72d6294e239c1a) by [@WoLpH](https://github.com/WoLpH) +- [Send push notification to phone when dryer cycle has finished](https://gist.github.com/jeffehobbs/93ab682705ec3bbba19887903e7ccdb9) by [@jeffehobbs](https://github.com/jeffehobbs) - [ESP8266 Smart Sprinkler Project](https://github.com/selfhostedhome/smart-sprinkler) by [Self Hosted Home](https://selfhostedhome.com) -- [ESP8266 lysignal Yunshan 7v-30v](https://gist.github.com/haade-administrator/ba9b6667ece8269cd37f64e34e908977/) by {{< ghuser name="haade-administrator" >}} +- [ESP8266 lysignal Yunshan 7v-30v](https://gist.github.com/haade-administrator/ba9b6667ece8269cd37f64e34e908977/) by [@haade-administrator](https://github.com/haade-administrator) - [LOHAS RGBW/CWWW Smart bulbs](https://www.youtube.com/watch?v=fTb6n6flJIw) by [digiblurDIY](https://www.youtube.com/channel/UC5ZdPKE2ckcBhljTc2R_qNA) -- [ESPHome with MakerLife Weather Station Kit](https://github.com/mkuoppa/esphomeweatherstation) by {{< ghuser name="mkuoppa" >}} -- [ESPHome DIY Multisensor Cat Feeder](https://github.com/335iguy/diy-multisensor-cat-feeder) by {{< ghuser name="335iguy" >}} +- [ESPHome with MakerLife Weather Station Kit](https://github.com/mkuoppa/esphomeweatherstation) by [@mkuoppa](https://github.com/mkuoppa) +- [ESPHome DIY Multisensor Cat Feeder](https://github.com/335iguy/diy-multisensor-cat-feeder) by [@335iguy](https://github.com/335iguy) - [ESPHome config for Universal IR Remote ZJ-A1 (russian)](https://kvvhost.ru/2019/10/30/review-firmware-zj-a1-ir-remote/) by [kvvhost](https://kvvhost.ru/) -- [ESPHome Home Assistant Cheap Cat Feeder](https://github.com/rubengargar/diy-cheap-cat-feeder) by {{< ghuser name="rubengargar" >}} -- [ESPHome configs](https://github.com/nuttytree/ESPHome-Devices) by {{< ghuser name="nuttytree" >}} -- [Control LG UD79-B monitor via UART](https://github.com/kquinsland/lg-m43mu79-esp-home-bridge) by {{< ghuser name="kquinsland" >}} -- [ESPHome AXA Remote 2 control](https://github.com/galagaking/espaxa/) by {{< ghuser name="galagaking" >}} -- [ESPHome WF-DS01 TuyaMCU based dimmable bedside touch lamp](https://github.com/davet2001/miscellaneous/blob/master/tuyamcu_ws-df01_touchlamp.yaml) by {{< ghuser name="davet2001" >}} -- [Universal menu system for devices with rotary encoder with push and SSD1306 I2C display](https://github.com/mikosoft83/pithy_screen_menu_system) by {{< ghuser name="mikosoft83" >}} -- [Show heart rate sensor values sent over Bluetooth Low Energy on a display](https://github.com/koenvervloesem/ESPHome-Heart-Rate-Display) by {{< ghuser name="koenvervloesem" >}} -- [ESPHome floor heating controller (proportional valves)](https://github.com/nliaudat/floor-heating-controller) by {{< ghuser name="nliaudat" >}} -- [ESPHome Curtain/Cover/Shutter Switch from a noname Tuya switch](https://github.com/ludrao/esphome-shutterswitch) by {{< ghuser name="ludrao" >}} -- [ESPHome Free your Thomson Guardian gate controller](https://github.com/ludrao/esphome-guardian) by {{< ghuser name="ludrao" >}} -- [Ambient Light Sensor tcs34725 example](https://gist.github.com/RubenKelevra/0d70d6b4c8e4bc9aedc8682865731d65) by {{< ghuser name="RubenKelevra" >}} -- [9 Valve Sprinkler Controller configuration](https://github.com/hwstar/9-Valve-Sprinkler-Controller) by {{< ghuser name="hwstar" >}} -- [FishFeeder](https://github.com/ColoMAX/fishfeeder) by {{< ghuser name="ColoMAX" >}} -- [ESPHome IKEA VINDRIKTNING](https://github.com/DzurisHome/ESPHome-IKEA-VINDRIKTNING) by {{< ghuser name="DzurisHome" >}} -- [ESPHome Refoss P11](https://github.com/DzurisHome/ESPHome-Refoss-P11) by {{< ghuser name="DzurisHome" >}} -- [ESPHome Tethercell Battery](https://github.com/w00dst0ck/esphome-tethercell) by {{< ghuser name="w00dst0ck" >}} - +- [ESPHome Home Assistant Cheap Cat Feeder](https://github.com/rubengargar/diy-cheap-cat-feeder) by [@rubengargar](https://github.com/rubengargar) +- [ESPHome configs](https://github.com/nuttytree/ESPHome-Devices) by [@nuttytree](https://github.com/nuttytree) +- [Control LG UD79-B monitor via UART](https://github.com/kquinsland/lg-m43mu79-esp-home-bridge) by [@kquinsland](https://github.com/kquinsland) +- [ESPHome AXA Remote 2 control](https://github.com/galagaking/espaxa/) by [@galagaking](https://github.com/galagaking) +- [ESPHome WF-DS01 TuyaMCU based dimmable bedside touch lamp](https://github.com/davet2001/miscellaneous/blob/master/tuyamcu_ws-df01_touchlamp.yaml) by [@davet2001](https://github.com/davet2001) +- [Universal menu system for devices with rotary encoder with push and SSD1306 I2C display](https://github.com/mikosoft83/pithy_screen_menu_system) by [@mikosoft83](https://github.com/mikosoft83) +- [Show heart rate sensor values sent over Bluetooth Low Energy on a display](https://github.com/koenvervloesem/ESPHome-Heart-Rate-Display) by [@koenvervloesem](https://github.com/koenvervloesem) +- [ESPHome floor heating controller (proportional valves)](https://github.com/nliaudat/floor-heating-controller) by [@nliaudat](https://github.com/nliaudat) +- [ESPHome Curtain/Cover/Shutter Switch from a noname Tuya switch](https://github.com/ludrao/esphome-shutterswitch) by [@ludrao](https://github.com/ludrao) +- [ESPHome Free your Thomson Guardian gate controller](https://github.com/ludrao/esphome-guardian) by [@ludrao](https://github.com/ludrao) +- [Ambient Light Sensor tcs34725 example](https://gist.github.com/RubenKelevra/0d70d6b4c8e4bc9aedc8682865731d65) by [@RubenKelevra](https://github.com/RubenKelevra) +- [9 Valve Sprinkler Controller configuration](https://github.com/hwstar/9-Valve-Sprinkler-Controller) by [@hwstar](https://github.com/hwstar) +- [FishFeeder](https://github.com/ColoMAX/fishfeeder) by [@ColoMAX](https://github.com/ColoMAX) +- [ESPHome IKEA VINDRIKTNING](https://github.com/DzurisHome/ESPHome-IKEA-VINDRIKTNING) by [@DzurisHome](https://github.com/DzurisHome) +- [ESPHome Refoss P11](https://github.com/DzurisHome/ESPHome-Refoss-P11) by [@DzurisHome](https://github.com/DzurisHome) +- [ESPHome Tethercell Battery](https://github.com/w00dst0ck/esphome-tethercell) by [@w00dst0ck](https://github.com/w00dst0ck) +{/* markdownlint-enable MD013 */} diff --git a/content/guides/esp32_arduino_to_idf.md b/src/content/docs/guides/esp32_arduino_to_idf.mdx similarity index 85% rename from content/guides/esp32_arduino_to_idf.md rename to src/content/docs/guides/esp32_arduino_to_idf.mdx index 028096056f..1fe8747e3b 100644 --- a/content/guides/esp32_arduino_to_idf.md +++ b/src/content/docs/guides/esp32_arduino_to_idf.mdx @@ -1,10 +1,6 @@ --- description: "Guide for migrating ESP32 devices from Arduino framework to ESP-IDF" title: "ESP32 Arduino to ESP-IDF Migration Guide" -params: - seo: - description: Guide for migrating ESP32 devices from Arduino framework to ESP-IDF - image: esp32.svg --- Starting with ESPHome 2026.1.0, the default framework for ESP32 will change from Arduino to ESP-IDF. This guide will @@ -108,18 +104,18 @@ when available: | Arduino Component | ESP-IDF Alternative | | -------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| {{< docref "/components/sensor/bme680_bsec" "bme680_bsec" >}} | {{< docref "/components/sensor/bme68x_bsec2" "bme68x_bsec2" >}} | -| {{< docref "/components/light/fastled" "fastled_clockless" >}} | {{< docref "/components/light/esp32_rmt_led_strip" "esp32_rmt_led_strip" >}} | -| {{< docref "/components/light/fastled" "fastled_spi" >}} | {{< docref "/components/light/spi_led_strip" "spi_led_strip" >}} | -| {{< docref "/components/light/neopixelbus" "neopixelbus" >}} | {{< docref "/components/light/esp32_rmt_led_strip" "esp32_rmt_led_strip" >}} | +| [bme680_bsec](/components/sensor/bme680_bsec/) | [bme68x_bsec2](/components/sensor/bme68x_bsec2/) | +| [fastled_clockless](/components/light/fastled/) | [esp32_rmt_led_strip](/components/light/esp32_rmt_led_strip/) | +| [fastled_spi](/components/light/fastled/) | [spi_led_strip](/components/light/spi_led_strip/) | +| [neopixelbus](/components/light/neopixelbus/) | [esp32_rmt_led_strip](/components/light/esp32_rmt_led_strip/) | **Arduino-Only Components:** The following components currently require Arduino framework and don't have ESP-IDF alternatives or native ESP-IDF support yet: -- {{< docref "/components/climate/climate_ir" "heatpumpir" >}} - IR-based heat pump control -- {{< docref "/components/climate/midea" "midea" >}} - Midea air conditioner control -- {{< docref "/components/light/index" "WLED Effect" >}} - WLED UDP Realtime Control integration +- [heatpumpir](/components/climate/climate_ir/) - IR-based heat pump control +- [midea](/components/climate/midea/) - Midea air conditioner control +- [WLED Effect](/components/light/) - WLED UDP Realtime Control integration If you need these components, you will need to continue using the Arduino framework. @@ -181,7 +177,7 @@ best fits your needs! ## See Also -- {{< docref "/components/esp32" >}} -- {{< docref "/guides/faq" >}} +- [ESP32 Platform](/components/esp32/) +- [Frequently Asked Questions](/guides/faq/) - [ESP-IDF Documentation](https://docs.espressif.com/projects/esp-idf/) - [Arduino-ESP32 Documentation](https://docs.espressif.com/projects/arduino-esp32/) diff --git a/content/guides/faq.md b/src/content/docs/guides/faq.mdx similarity index 93% rename from content/guides/faq.md rename to src/content/docs/guides/faq.mdx index 1bda60a31a..7d7d4725ca 100644 --- a/content/guides/faq.md +++ b/src/content/docs/guides/faq.mdx @@ -1,10 +1,6 @@ --- description: "Frequently asked questions in ESPHome." title: "Frequently Asked Questions" -params: - seo: - description: Frequently asked questions in ESPHome. - image: question_answer.svg --- ## Which ESP should I use for my project? @@ -77,7 +73,7 @@ problems with these. We recommend the chips listed above for the best ESPHome ex We'll update our recommendations here as support matures for newer microcontrollers. -{{< anchor "faq-usb_installation" >}} + ## How do I install ESPHome onto my device? @@ -123,7 +119,7 @@ If you prefer the more manual way: as package for your OS or you can try installing it with `pip install esptool` (in case of Linux). -{{< anchor "esphome-esptool" >}} + ## What is `esptool` ? @@ -155,7 +151,7 @@ This will install ("flash") your binary (ESPHome) onto your microcontroller. esptool --port /dev/ttyUSB0 write_flash 0x0 your_node_firmware.bin ``` -{{< anchor "faq-usb_troubleshooting" >}} + ## I can't get installation over USB to work @@ -243,7 +239,7 @@ If you *still* can't get it to work, you might want to revisit payload: double ``` -- You can use {{< docref "/components/substitutions" >}} to build on the examples above and reduce repetition in your +- You can use [Substitutions](/components/substitutions/) to build on the examples above and reduce repetition in your configuration files. - If you want to see how ESPHome interprets your configuration, run: @@ -260,7 +256,7 @@ If you *still* can't get it to work, you might want to revisit - You can always find the source ESPHome generates in the `/src/` directory. -- You can view the full list of command line interface options here: {{< docref "/guides/cli" >}} +- You can view the full list of command line interface options here: [Cli](/guides/cli/) ## Help! Something's not working @@ -268,12 +264,12 @@ That's no good. Here are some steps that resolve some problems: - **If you're having Wi-Fi problems**: See [My node keeps reconnecting randomly](#wifi-problems). - [Enable verbose logs](/components/logger#logger-log_levels) in your ESPHome device's `logger:` section. -- **If your device is crashing**: See the {{< docref "/guides/troubleshooting" >}} guide for how to get a backtrace. +- **If your device is crashing**: See the [Troubleshooting](/guides/troubleshooting/) guide for how to get a backtrace. - **Still seeing an error?** Check if there is a known issue in the [ESPHome issue tracker](https://github.com/esphome/esphome/issues). If not, you can create a new issue to describe your problem there. We will take a look at it as soon as we can. Thanks! -{{< anchor "faq-bug_report" >}} + ## How do I report an issue? @@ -311,7 +307,7 @@ pip3 install -U esphome docker pull ghcr.io/esphome/esphome:stable ``` -{{< anchor "faq-beta" >}} + ## How do I update to the latest beta release? @@ -372,10 +368,10 @@ This "pulls in" the contents of your Home Assistant `secrets.yaml` file from the ## Does ESPHome support [this device/feature]? -If it's not in {{< docref "/index" "the docs" >}}, it's not (officially) supported. However, we are always adding +If it's not in [the components index](/components/), it's not (officially) supported. However, we are always adding support for new features. -In some cases, community-provided {{< docref "/components/external_components" >}} are available; keep in mind that +In some cases, community-provided [External Components](/components/external_components/) are available; keep in mind that these are not officially supported by ESPHome, so, if you run into problems, you'll need to contact the developer of the external component you're using for help. @@ -394,7 +390,7 @@ Sure! We are happy to help :) You can contact us here: - **If your inquiry is not regarding support**, you can [e-mail us](mailto:esphome@openhomefoundation.org). -{{< anchor "wifi-problems" >}} + ## My node keeps reconnecting randomly @@ -415,9 +411,9 @@ Here are some steps that may help mitigate the issue: which sometimes have bad antennas. - ESPHome intentionally reboots after a configured duration in specific situations, such as when the - {{< docref "/components/wifi" "Wi-Fi connection cannot be made" >}}, - {{< docref "/components/api" "API connection is lost" >}} or - {{< docref "/components/mqtt" "MQTT connection is lost" >}}. To disable this behavior, you'll need to explicitly + [Wi-Fi connection cannot be made](/components/wifi/), + [API connection is lost](/components/api/) or + [MQTT connection is lost](/components/mqtt/). To disable this behavior, you'll need to explicitly set the `reboot_timeout` option to `0s` on the relevant components. - If you see `Error: Disconnecting ` in your logs, ESPHome is actively closing the native API client @@ -518,7 +514,7 @@ services: restart: always ``` -{{< anchor "docker-reference-notes" >}} + > [!NOTE] > By default, ESPHome uses mDNS to resolve device IPs on the network; this is used to determine online/offline state @@ -541,13 +537,13 @@ services: > pings to check the status of devices by setting `"status_use_ping": true` or, with Docker: > `-e ESPHOME_DASHBOARD_USE_PING=true` > -> See also . +> See also [https://github.com/esphome/issues/issues/641#issuecomment-534156628](https://github.com/esphome/issues/issues/641#issuecomment-534156628). -{{< anchor "faq-notes_on_disabling_mdns" >}} + ## Notes on disabling mDNS -Some of ESPHome's functionality relies on {{< docref "/components/mdns" "mDNS" >}}, so, naturally, disabling it will +Some of ESPHome's functionality relies on [mDNS](/components/mdns/), so, naturally, disabling it will cause these features to stop working. Generally speaking, disabling mDNS without setting a [static IP address](/components/wifi#wifi-manual_ip) (or a static DHCP lease) @@ -556,7 +552,7 @@ is bound to cause problems -- mDNS is used to determine the IP address of each E If you disable mDNS, expect the following repercussions: - You will not be able to use the node's hostname to ping, find it's IP address or otherwise connect to it. -- Automatic discovery in Home Assistant when using the {{< docref "/components/api" "native API" >}} relies on +- Automatic discovery in Home Assistant when using the [native API](/components/api/) relies on mDNS broadcast messages to detect the presence of new ESPHome nodes. If you need to use the native API with mDNS disabled, then you will have to use a static IP address and manually add the ESPHome component with its (static) IP address. @@ -587,7 +583,7 @@ Important: follow these [instructions](/components/esphome.html#changing-esphome `use_address` parameter when renaming a live device, as the connection to an existing device will only work with the old name until the name change is complete. -{{< anchor "strapping-warnings" >}} + ## Why am I getting a warning about strapping pins? @@ -617,7 +613,7 @@ If you are absolutely sure that your use of strapping pins is safe and you want ## How can I test a pull request? -By leveraging the {{< docref "/components/external_components" >}} feature, it's possible to test most pull requests by +By leveraging the [External Components](/components/external_components/) feature, it's possible to test most pull requests by simply adding a few lines to your YAML! You need the number of the pull request as well as the component(s) that have been added or changed by the pull request (they are listed with the "integration:" labels on the GitHub page of the pull request). Then, if you add a block of code (similar to that shown below) to your YAML configuration, recompile and @@ -639,15 +635,15 @@ label on GitHub. ## Why do entities appear as "unavailable" during deep sleep? -The {{< docref "/components/deep_sleep" "Deep Sleep" >}} component needs to be present within your device's +The [Deep Sleep](/components/deep_sleep/) component needs to be present within your device's configuration when the device is first added to Home Assistant. To prevent entities from appearing as "unavailable", you can remove and re-add the device in Home Assistant. ## How do I secure my ESPHome devices? -See the comprehensive {{< docref "security_best_practices" >}} guide for detailed recommendations on API encryption, OTA passwords, network segmentation, physical security, and more. +See the comprehensive [Security Best Practices](/guides/security_best_practices/) guide for detailed recommendations on API encryption, OTA passwords, network segmentation, physical security, and more. ## See Also -- {{< docref "/index" "ESPHome index" >}} +- [ESPHome Docs](/components/) - [Developer site](https://developers.esphome.io) diff --git a/content/guides/getting_started_command_line.md b/src/content/docs/guides/getting_started_command_line.mdx similarity index 86% rename from content/guides/getting_started_command_line.md rename to src/content/docs/guides/getting_started_command_line.mdx index 2a183e5470..7b34d9249b 100644 --- a/content/guides/getting_started_command_line.md +++ b/src/content/docs/guides/getting_started_command_line.mdx @@ -1,19 +1,18 @@ --- description: "Getting Started guide for installing ESPHome using the command line and creating a basic configuration." title: "Getting Started with the ESPHome Command Line" -params: - seo: - description: Getting Started guide for installing ESPHome using the command line and creating a basic configuration. - image: console.svg --- +import { Image } from 'astro:assets'; +import dashboardStatesImg from './images/dashboard_states.png'; + ESPHome is the perfect solution for creating custom firmwares for your ESP8266/ESP32 boards. In this guide we'll go through how to set up a basic “node” in a few simple steps. ## Installation -See {{< docref "installing_esphome/" >}}. +See [Installing Esphome](/guides/installing_esphome/). If you're familiar with Docker, you can use that instead! Note that on macOS Docker [can not pass USB devices through](https://github.com/moby/hyperkit/issues/149). @@ -47,14 +46,14 @@ services: > [!NOTE] > If you are using NFS share to back your container's config volume, you may > need to mount the volume with the `nolock` option, otherwise platformio may -> freeze on container startup as per [platformIO-core Issue 3089](https://github.com/platformio/platformio-core/issues/3089) +> freeze on container startup as per [platformio/platformio-core#3089](https://github.com/platformio/platformio-core/issues/3089) > [!WARNING] > Running ESPHome in Docker on WSL2 can be significantly slower > (10x or more) than native Linux or a traditional VM due to filesystem performance > issues when accessing files on Windows drives. For better performance, store your > ESPHome files inside the WSL2 filesystem (e.g., `~/esphome/...`) -> rather than on a Windows mount (e.g., `/mnt/c/...`). See [Issue #12568](https://github.com/esphome/esphome/issues/12568) +> rather than on a Windows mount (e.g., `/mnt/c/...`). See [esphome#12568](https://github.com/esphome/esphome/issues/12568) > for more details. The project provides multiple docker tags; please pick the one that suits you @@ -77,7 +76,7 @@ better: ## Connecting the ESP Device -Follow the instructions in {{< docref "physical_device_connection/" >}} to connect to your +Follow the instructions in [Physical Device Connection](/guides/physical_device_connection/) to connect to your ESP device. > [!NOTE] @@ -106,7 +105,7 @@ the WiFi network, but still it's a first step. So now you should have a file called `livingroom.yaml` (or similar). Go open that file in an editor of your choice and let's add a -{{< docref "/components/switch/gpio" "simpleGPIO switch" >}} to our app. +[simpleGPIO switch](/components/switch/gpio/) to our app. ```yaml switch: @@ -157,7 +156,7 @@ should see the ESPHome device show up in the discovered section (although this c Alternatively, you can manually add the device by clicking **CONFIGURE** on the ESPHome integration and entering `.local` as the host. -{{< img src="gpio-ui.png" alt="Image" class="align-center" >}} + After the first upload, you will probably never need to use the USB cable again, as all features of ESPHome are enabled remotely as well. @@ -167,7 +166,7 @@ No more opening hidden boxes stowed in places hard to reach. Yay! Next, we're going to add a very simple binary sensor that periodically checks if a particular GPIO pin is pulled high or low - the -{{< docref "/components/binary_sensor/gpio" "GPIO BinarySensor" >}}. +[GPIO BinarySensor](/components/binary_sensor/gpio/). ```yaml binary_sensor: @@ -196,7 +195,7 @@ esphome run livingroom.yaml docker run --rm -v "${PWD}":/config -it ghcr.io/esphome/esphome run livingroom.yaml ``` -{{< img src="gpio-ui.png" alt="Image" >}} + ## Where To Go Next @@ -205,18 +204,18 @@ and uploaded your first ESPHome custom firmware to your node. You've also learned how to enable some basic components via the configuration file. -So now is a great time to go take a look at the {{< docref "/index" "Components Index" >}}. +So now is a great time to go take a look at the [Components](/components/). Hopefully you'll find all sensors/outputs/etc. you'll need in there. If you're having any problems or want new features, please either create a new issue on the [GitHub issuetracker](https://github.com/esphome/esphome/issues) or find us on the -[Discord chat](https://discord.gg/KhAMKrd) (also make sure to read the {{< docref "faq" "FAQ" >}}). +[Discord chat](https://discord.gg/KhAMKrd) (also make sure to read the [FAQ](/guides/faq/)). -{{< anchor "esphome-device-builder-docker" >}} + ## Bonus: ESPHome Device Builder The ESPHome Device Builder allows you to easily manage your nodes from a nice web interface. It was primarily designed -as a {{< docref "getting_started_hassio" "Home Assistant add-on" >}}, but can run in docker independently from +as a [Home Assistant add-on](/guides/getting_started_hassio/), but can run in docker independently from Home Assistant. To start the ESPHome Device Builder, simply start ESPHome with the following command (with `config/` pointing to a @@ -241,11 +240,11 @@ After that, you will be able to access the ESPHome Device Builder at `localhost: Logging level can be set with the env var `ESPHOME_LOG_LEVEL` (default is `INFO`). -{{< img src="dashboard_states.png" alt="Image" >}} + ## See Also -- {{< docref "cli/" >}} -- {{< docref "/index" "ESPHome index" >}} -- {{< docref "getting_started_hassio/" >}} -- {{< docref "security_best_practices" >}} +- [Command Line Interface](/guides/cli/) +- [ESPHome Docs](/components/) +- [Getting Started with ESPHome and Home Assistant](/guides/getting_started_hassio/) +- [Security Best Practices](/guides/security_best_practices/) diff --git a/content/guides/getting_started_hassio.md b/src/content/docs/guides/getting_started_hassio.mdx similarity index 85% rename from content/guides/getting_started_hassio.md rename to src/content/docs/guides/getting_started_hassio.mdx index af9233c11a..30276a5398 100644 --- a/content/guides/getting_started_hassio.md +++ b/src/content/docs/guides/getting_started_hassio.mdx @@ -1,12 +1,13 @@ --- description: "Getting Started guide for installing ESPHome Device Builder as a Home Assistant add-on and creating a basic configuration." title: "Getting Started with ESPHome and Home Assistant" -params: - seo: - description: Getting Started guide for installing ESPHome Device Builder as a Home Assistant add-on and creating a basic configuration. - image: home-assistant.svg --- +import { Image } from 'astro:assets'; +import addonImg from './images/addon.png'; +import dashboardEmptyImg from './images/dashboard_empty.png'; +import dashboardStatesImg from './images/dashboard_states.png'; + In this guide, we'll walk you through how to install ESPHome onto a device/microcontroller using the ESPHome Device Builder, installed as a Home Assistant add-on. @@ -30,7 +31,7 @@ Note that there are two "parts" to ESPHome: The ESPHome Device Builder provides a simple web user interface (UI) which allows you to create, edit and install your device configurations onto your devices. -{{< anchor "installing-esphome-device-builder" >}} + ## Installing ESPHome Device Builder @@ -43,7 +44,7 @@ To install the ESPHome Device Builder in Home Assistant, click the following but This should open the ESPHome add-on page; once you're there, just click the INSTALL button: -{{< img src="addon.png" alt="Image" width="75.0%" class="align-center" >}} + Installation of the add-on may take a moment or two. Once done, click "Start" and then click "Open Web UI". @@ -53,7 +54,7 @@ Installation of the add-on may take a moment or two. Once done, click "Start" an The web UI will present a wizard which will walk you through creating your first configuration: -{{< img src="dashboard_empty.png" alt="Image" width="95.0%" class="align-center" >}} + The wizard begins by asking you how you'd like to create your configuration. You have three options: @@ -71,19 +72,19 @@ After creating your first configuration, you'll need to install it on your devic > The initial installation of ESPHome onto a new device is often the most difficult and/or intimidating part -- at > least until you've done it a few times. > -> If you haven't done this before, please see {{< docref "physical_device_connection/" >}}. +> If you haven't done this before, please see [Physical Device Connection](/guides/physical_device_connection/). If you didn't do so when prompted upon creating your first device, you'll need to enter your Wi-Fi network credentials immediately following installation so that your device can connect to your Wi-Fi network and subsequently communicate with Home Assistant. -{{< anchor "esphome-interface" >}} + ## Device Builder Interface Let's take a quick tour of the ESPHome Device Builder interface. -{{< img src="dashboard_states.png" alt="Image" width="95.0%" class="align-center" >}} + The main page displays a list of all configuration files for nodes you've created. For each file, there are a few actions you can perform: @@ -118,12 +119,12 @@ configuration for the "Bedroom Light" node in the picture above can be found in > Finally, to access the logs from a device through an SSH client, you can log in and use a command like > `docker exec -it addon_15ef4d2f_esphome esphome logs /config/esphome/bedroom-light.yaml`. > -> See {{< docref "getting_started_command_line/" >}} for more detail. +> See [Getting Started Command Line](/guides/getting_started_command_line/) for more detail. ## Adding Features After stepping through the wizard, you should have a device configuration (YAML) file. In the ESPHome Device Builder, -click on "EDIT" to open that file and add a {{< docref "/components/switch/gpio" "GPIO switch" >}} to the configuration +click on "EDIT" to open that file and add a [GPIO switch](/components/switch/gpio/) to the configuration like this: ```yaml @@ -135,7 +136,7 @@ switch: In Home Assistant, the example code above will look like this: -{{< img src="gpio-ui.png" alt="Image" width="75.0%" class="align-center" >}} + In the example above, we're simply adding a switch that's called "Living Room Dehumidifier" and is connected to the pin `GPIO5`. This switch could really control anything -- lights or a tabletop fan, for example. Its name and function is @@ -143,7 +144,7 @@ arbitrary and should be set as is appropriate for your particular application. ## Adding A Binary Sensor -Next, let's add a {{< docref "/components/binary_sensor/gpio" "binary sensor which will monitor a GPIO pin" >}} to +Next, let's add a [binary sensor which will monitor a GPIO pin](/components/binary_sensor/gpio/) to determine and report its state. ```yaml @@ -160,7 +161,7 @@ binary_sensor: In Home Assistant, the example code above will look like this: -{{< img src="gpio-ui.png" alt="Image" width="75.0%" class="align-center" >}} + After adding this to your device's configuration file, be sure to click "SAVE" to save the changes you've made to your configuration...and read on to the next section! @@ -175,9 +176,9 @@ Each time you modify a device's configuration file, you need to update the devic and reinstall your updated configuration onto the device. Note that you won't need to have the device connected to your system with a USB data cable again, as (once ESPHome is -installed on your device) it can update the device {{< docref "/components/ota/index" ""over the air"" >}}. +installed on your device) it can update the device [over the air](/components/ota/). -{{< anchor "connecting-your-device-to-home-assistant" >}} + ## Connecting your device to Home Assistant @@ -198,13 +199,13 @@ You can repeat this process for each ESPHome device. Great! 🎉 You've successfully set up your first ESPHome project and installed your first ESPHome custom firmware to your device. You've also learned how to enable some basic components via the configuration file. -Now is a great time to go take a look at the {{< docref "/index" "Components Index" >}}. Hopefully you'll find all the +Now is a great time to go take a look at the [Components](/components/). Hopefully you'll find all the hardware components you need there. If you're having any problems or want to request new features, please either create a new issue on the [GitHub issue tracker](https://github.com/esphome/esphome/issues) or find us on the -[Discord chat](https://discord.gg/KhAMKrd). Be sure to read the {{< docref "faq" "FAQ" >}}, as well! +[Discord chat](https://discord.gg/KhAMKrd). Be sure to read the [FAQ](/guides/faq/), as well! ## See Also -- {{< docref "/index" "ESPHome index" >}} -- {{< docref "getting_started_command_line/" >}} -- {{< docref "security_best_practices" >}} +- [ESPHome Docs](/components/) +- [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) +- [Security Best Practices](/guides/security_best_practices/) diff --git a/content/guides/images/addon.png b/src/content/docs/guides/images/addon.png similarity index 100% rename from content/guides/images/addon.png rename to src/content/docs/guides/images/addon.png diff --git a/content/guides/images/console.svg b/src/content/docs/guides/images/console.svg similarity index 100% rename from content/guides/images/console.svg rename to src/content/docs/guides/images/console.svg diff --git a/content/guides/images/dashboard-install-manual-modern.png b/src/content/docs/guides/images/dashboard-install-manual-modern.png similarity index 100% rename from content/guides/images/dashboard-install-manual-modern.png rename to src/content/docs/guides/images/dashboard-install-manual-modern.png diff --git a/content/guides/images/dashboard-install-manual.png b/src/content/docs/guides/images/dashboard-install-manual.png similarity index 100% rename from content/guides/images/dashboard-install-manual.png rename to src/content/docs/guides/images/dashboard-install-manual.png diff --git a/content/guides/images/dashboard-install.png b/src/content/docs/guides/images/dashboard-install.png similarity index 100% rename from content/guides/images/dashboard-install.png rename to src/content/docs/guides/images/dashboard-install.png diff --git a/content/guides/images/dashboard_empty.png b/src/content/docs/guides/images/dashboard_empty.png similarity index 100% rename from content/guides/images/dashboard_empty.png rename to src/content/docs/guides/images/dashboard_empty.png diff --git a/content/guides/images/dashboard_states.png b/src/content/docs/guides/images/dashboard_states.png similarity index 100% rename from content/guides/images/dashboard_states.png rename to src/content/docs/guides/images/dashboard_states.png diff --git a/content/guides/images/devboard-as-flasher.png b/src/content/docs/guides/images/devboard-as-flasher.png similarity index 100% rename from content/guides/images/devboard-as-flasher.png rename to src/content/docs/guides/images/devboard-as-flasher.png diff --git a/content/guides/images/download_binary.png b/src/content/docs/guides/images/download_binary.png similarity index 100% rename from content/guides/images/download_binary.png rename to src/content/docs/guides/images/download_binary.png diff --git a/content/guides/images/earth.svg b/src/content/docs/guides/images/earth.svg similarity index 100% rename from content/guides/images/earth.svg rename to src/content/docs/guides/images/earth.svg diff --git a/content/guides/images/espeasy.svg b/src/content/docs/guides/images/espeasy.svg similarity index 100% rename from content/guides/images/espeasy.svg rename to src/content/docs/guides/images/espeasy.svg diff --git a/content/guides/images/espeasy_ota.png b/src/content/docs/guides/images/espeasy_ota.png similarity index 100% rename from content/guides/images/espeasy_ota.png rename to src/content/docs/guides/images/espeasy_ota.png diff --git a/content/guides/images/espurna.svg b/src/content/docs/guides/images/espurna.svg similarity index 100% rename from content/guides/images/espurna.svg rename to src/content/docs/guides/images/espurna.svg diff --git a/content/guides/images/espurna_ota.png b/src/content/docs/guides/images/espurna_ota.png similarity index 100% rename from content/guides/images/espurna_ota.png rename to src/content/docs/guides/images/espurna_ota.png diff --git a/content/guides/images/espurna_upload.png b/src/content/docs/guides/images/espurna_upload.png similarity index 100% rename from content/guides/images/espurna_upload.png rename to src/content/docs/guides/images/espurna_upload.png diff --git a/content/guides/images/flux.jpg b/src/content/docs/guides/images/flux.jpg similarity index 100% rename from content/guides/images/flux.jpg rename to src/content/docs/guides/images/flux.jpg diff --git a/content/guides/images/module-only-programming.jpg b/src/content/docs/guides/images/module-only-programming.jpg similarity index 100% rename from content/guides/images/module-only-programming.jpg rename to src/content/docs/guides/images/module-only-programming.jpg diff --git a/content/guides/images/nodemcu_esp8266.jpg b/src/content/docs/guides/images/nodemcu_esp8266.jpg similarity index 100% rename from content/guides/images/nodemcu_esp8266.jpg rename to src/content/docs/guides/images/nodemcu_esp8266.jpg diff --git a/content/guides/images/programming-bare-chip.jpg b/src/content/docs/guides/images/programming-bare-chip.jpg similarity index 100% rename from content/guides/images/programming-bare-chip.jpg rename to src/content/docs/guides/images/programming-bare-chip.jpg diff --git a/content/guides/images/programming-header-filled.jpg b/src/content/docs/guides/images/programming-header-filled.jpg similarity index 100% rename from content/guides/images/programming-header-filled.jpg rename to src/content/docs/guides/images/programming-header-filled.jpg diff --git a/content/guides/images/programming-header-populated.jpg b/src/content/docs/guides/images/programming-header-populated.jpg similarity index 100% rename from content/guides/images/programming-header-populated.jpg rename to src/content/docs/guides/images/programming-header-populated.jpg diff --git a/content/guides/images/programming-header-unpopulated.jpg b/src/content/docs/guides/images/programming-header-unpopulated.jpg similarity index 100% rename from content/guides/images/programming-header-unpopulated.jpg rename to src/content/docs/guides/images/programming-header-unpopulated.jpg diff --git a/content/guides/images/python-win-installer.png b/src/content/docs/guides/images/python-win-installer.png similarity index 100% rename from content/guides/images/python-win-installer.png rename to src/content/docs/guides/images/python-win-installer.png diff --git a/content/guides/images/question_answer.svg b/src/content/docs/guides/images/question_answer.svg similarity index 100% rename from content/guides/images/question_answer.svg rename to src/content/docs/guides/images/question_answer.svg diff --git a/content/guides/images/save_as_wav.png b/src/content/docs/guides/images/save_as_wav.png similarity index 100% rename from content/guides/images/save_as_wav.png rename to src/content/docs/guides/images/save_as_wav.png diff --git a/content/guides/images/solder.jpg b/src/content/docs/guides/images/solder.jpg similarity index 100% rename from content/guides/images/solder.jpg rename to src/content/docs/guides/images/solder.jpg diff --git a/content/guides/images/soldering-iron.jpg b/src/content/docs/guides/images/soldering-iron.jpg similarity index 100% rename from content/guides/images/soldering-iron.jpg rename to src/content/docs/guides/images/soldering-iron.jpg diff --git a/content/guides/images/strippers.jpg b/src/content/docs/guides/images/strippers.jpg similarity index 100% rename from content/guides/images/strippers.jpg rename to src/content/docs/guides/images/strippers.jpg diff --git a/content/guides/images/tasmota.svg b/src/content/docs/guides/images/tasmota.svg similarity index 100% rename from content/guides/images/tasmota.svg rename to src/content/docs/guides/images/tasmota.svg diff --git a/content/guides/images/tasmota_main.png b/src/content/docs/guides/images/tasmota_main.png similarity index 100% rename from content/guides/images/tasmota_main.png rename to src/content/docs/guides/images/tasmota_main.png diff --git a/content/guides/images/tasmota_ota.png b/src/content/docs/guides/images/tasmota_ota.png similarity index 100% rename from content/guides/images/tasmota_ota.png rename to src/content/docs/guides/images/tasmota_ota.png diff --git a/content/guides/images/tasmota_upload.png b/src/content/docs/guides/images/tasmota_upload.png similarity index 100% rename from content/guides/images/tasmota_upload.png rename to src/content/docs/guides/images/tasmota_upload.png diff --git a/content/guides/images/usb-cable.jpg b/src/content/docs/guides/images/usb-cable.jpg similarity index 100% rename from content/guides/images/usb-cable.jpg rename to src/content/docs/guides/images/usb-cable.jpg diff --git a/content/guides/images/usb-serial-adapter.jpg b/src/content/docs/guides/images/usb-serial-adapter.jpg similarity index 100% rename from content/guides/images/usb-serial-adapter.jpg rename to src/content/docs/guides/images/usb-serial-adapter.jpg diff --git a/content/guides/images/wire-cutters.jpg b/src/content/docs/guides/images/wire-cutters.jpg similarity index 100% rename from content/guides/images/wire-cutters.jpg rename to src/content/docs/guides/images/wire-cutters.jpg diff --git a/content/guides/_index.md b/src/content/docs/guides/index.mdx similarity index 100% rename from content/guides/_index.md rename to src/content/docs/guides/index.mdx diff --git a/content/guides/installing_esphome.md b/src/content/docs/guides/installing_esphome.mdx similarity index 93% rename from content/guides/installing_esphome.md rename to src/content/docs/guides/installing_esphome.mdx index c3bf79e73a..819b5568b3 100644 --- a/content/guides/installing_esphome.md +++ b/src/content/docs/guides/installing_esphome.mdx @@ -3,6 +3,9 @@ description: "Installing ESPHome Manually" title: "Installing ESPHome Manually" --- +import { Image } from 'astro:assets'; +import pythonWinInstallerImg from './images/python-win-installer.png'; + > [!WARNING] > **Python 3.14 is not yet supported.** Please use Python 3.11, 3.12, or 3.13. > Python 3.14 introduced breaking changes that ESPHome's dependencies have not yet adapted to. @@ -11,9 +14,7 @@ title: "Installing ESPHome Manually" Download Python from [the official site](https://www.python.org/downloads/). Use Python 3.11, 3.12, or 3.13. -{{< img src="python-win-installer.png" - alt="Python installer window with arrows pointing to \"Add Python to PATH\" and \"Install Now\"" - width="75.0%" class="align-center" >}} +{"Python Make sure you check "Add Python to PATH", and go all the way through the installer. @@ -87,7 +88,6 @@ Version: 2025.8.0 ``` > [!NOTE] -> > - If you encounter any issues with Homebrew installation, please check the > [ESPHome Homebrew Formula](https://formulae.brew.sh/formula/esphome) page > for additional information. @@ -184,6 +184,6 @@ PATH=$PATH:$HOME/.local/bin' >> $HOME/.bashrc``, then log out and back in. ## See Also -- {{< docref "/index" "ESPHome index" >}} -- {{< docref "getting_started_command_line/" >}} +- [ESPHome index](/) +- [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) - [Developer site](https://developers.esphome.io) diff --git a/content/guides/made_for_esphome.md b/src/content/docs/guides/made_for_esphome.mdx similarity index 56% rename from content/guides/made_for_esphome.md rename to src/content/docs/guides/made_for_esphome.mdx index a95e29b674..dcd5a21fd6 100644 --- a/content/guides/made_for_esphome.md +++ b/src/content/docs/guides/made_for_esphome.mdx @@ -1,13 +1,12 @@ --- description: "Information about the Made for ESPHome program" title: "Made for ESPHome" -params: - seo: - description: Information about the Made for ESPHome program - image: /images/made-for-esphome-black-on-white.png --- -{{< anchor "made_for_esphome" >}} +import { Image } from 'astro:assets'; +import Figure from '@components/Figure.astro'; + + ESPHome has a wonderful and active community that loves creating and sharing projects. You can apply for your project to get the `Made for ESPHome` stamp of approval. @@ -22,8 +21,8 @@ There are a number of requirements your project must meet. These may vary based Wi-Fi is quite common but requires configuration of the SSID and passphrase. As such, for easy end-user provisioning, your configuration must include: -- `esp32_improv` as described in {{< docref "/components/esp32_improv" >}} -- `improv_serial` as described in {{< docref "/components/improv_serial" >}}, if a USB connection is available (recommended) +- `esp32_improv` as described in [Esp32 Improv](/components/esp32_improv/) +- `improv_serial` as described in [Improv Serial](/components/improv_serial/), if a USB connection is available (recommended) Note that these are **not** required for projects that only provide a physical/wired Ethernet port for connectivity. @@ -38,7 +37,7 @@ Note that these are **not** required for projects that only provide a physical/w "take control" - Your project supports adoption via the `dashboard_import` feature of ESPHome (see - {{< docref "/guides/creators" "Sharing" >}}). In particular: + [Sharing](/guides/creators/)). In particular: - There are **no** references to secrets or passwords - Network configuration must assume defaults (no static IPs or DNS configured) @@ -53,7 +52,7 @@ Note that these are **not** required for projects that only provide a physical/w add your device on the [devices website](https://devices.esphome.io). We will review and merge this PR upon confirming that your project meets all of the requirements listed above. -- Apply for permission to carry the logo by emailing -- **include a link to the PR** you've +- Apply for permission to carry the logo by emailing [esphome@openhomefoundation.org](mailto:esphome@openhomefoundation.org) -- **include a link to the PR** you've created (as above) so we can associate your application with your PR and device(s). - We will review your application and reply to your email. We may request changes to your project if we find it does @@ -63,25 +62,54 @@ Note that these are **not** required for projects that only provide a physical/w After your project is approved, you may use these logos on your product and/or its packaging. - - - -{{< img src="/images/made-for-esphome-black-on-white.svg" alt="Image" - caption="Made with ESPHome black on white ([svg](/images/made-for-esphome-black-on-white.svg), [png](/images/made-for-esphome-black-on-white.png))" - width="100%" class="align-center" >}} - -{{< img src="/images/made-for-esphome-white-on-black.svg" alt="Image" - caption="Made with ESPHome white on black ([svg](/images/made-for-esphome-white-on-black.svg), [png](/images/made-for-esphome-white-on-black.png))" - width="100%" class="align-center" >}} - -{{< img src="/images/made-for-esphome-black-on-transparent.svg" alt="Image" - caption="Made with ESPHome black on transparent ([svg](/images/made-for-esphome-black-on-transparent.svg), [png](/images/made-for-esphome-black-on-transparent.png))" - width="100%" class="align-center" >}} - -{{< img src="/images/made-for-esphome-white-on-transparent.svg" alt="Image" - caption="Made with ESPHome white on transparent ([svg](/images/made-for-esphome-white-on-transparent.svg), [png](/images/made-for-esphome-white-on-transparent.png))" - width="100%" class="align-center" >}} +
    +

    + Made with ESPHome black on white ([svg](/images/made-for-esphome-black-on-white.svg), [png](/images/made-for-esphome-black-on-white.png)) +

    +
    + +
    +

    + Made with ESPHome white on black ([svg](/images/made-for-esphome-white-on-black.svg), [png](/images/made-for-esphome-white-on-black.png)) +

    +
    + +
    +
    +

    + Made with ESPHome black on transparent ([svg](/images/made-for-esphome-black-on-transparent.svg), [png](/images/made-for-esphome-black-on-transparent.png)) +

    +
    +
    + +
    +
    +

    + Made with ESPHome white on transparent ([svg](/images/made-for-esphome-white-on-transparent.svg), [png](/images/made-for-esphome-white-on-transparent.png)) +

    +
    +
    diff --git a/content/guides/migrate_espeasy.md b/src/content/docs/guides/migrate_espeasy.mdx similarity index 74% rename from content/guides/migrate_espeasy.md rename to src/content/docs/guides/migrate_espeasy.mdx index 02a0d231ea..94dc046d85 100644 --- a/content/guides/migrate_espeasy.md +++ b/src/content/docs/guides/migrate_espeasy.mdx @@ -1,12 +1,12 @@ --- description: "Migration guide for installing ESPHome on ESPs running ESPEasy." title: "Migrating from ESPEasy" -params: - seo: - description: Migration guide for installing ESPHome on ESPs running ESPEasy. - image: espeasy.svg --- +import { Image } from 'astro:assets'; +import downloadBinaryImg from './images/download_binary.png'; +import espeasyOtaImg from './images/espeasy_ota.png'; + Migrating from previous ESPEasy setups is very easy. You just need to have ESPHome create a binary for you and then upload that in the ESPEasy web interface. @@ -18,7 +18,7 @@ file. Then, generate and download the binary: - **Using the Home Assistant add-on/dashboard**: Just click the `COMPILE` button, wait for the compilation to end and press the `DOWNLOAD BINARY` button. -{{< img src="download_binary.png" alt="Image" >}} + - **Using the command line**: run `esphome compile livingroom.yaml` (replacing `livingroom.yaml` with your configuration file of course) and navigate to the @@ -30,7 +30,7 @@ file. Then, generate and download the binary: To upload the binary, navigate to the ESPEasy web interface and enter the "Tools " section. -{{< img src="espeasy_ota.png" alt="Image" width="60.0%" class="align-center" >}} + Press "Load" under Firmware, then select the binary you previously downloaded and upload the binary. If everything succeeds, you should now have ESPHome on your node 🎉. @@ -43,7 +43,7 @@ Happy Hacking! ## See Also -- {{< docref "/components/esp8266" >}} -- {{< docref "/components/esp32" >}} -- {{< docref "migrate_espurna/" >}} -- {{< docref "migrate_sonoff_tasmota/" >}} +- [ESP8266 Platform](/components/esp8266/) +- [ESP32 Platform](/components/esp32/) +- [Migrating from ESPurna](/guides/migrate_espurna/) +- [Migrating from Tasmota](/guides/migrate_sonoff_tasmota/) diff --git a/content/guides/migrate_espurna.md b/src/content/docs/guides/migrate_espurna.mdx similarity index 70% rename from content/guides/migrate_espurna.md rename to src/content/docs/guides/migrate_espurna.mdx index 43e386a4c5..3eb92f8d38 100644 --- a/content/guides/migrate_espurna.md +++ b/src/content/docs/guides/migrate_espurna.mdx @@ -1,12 +1,13 @@ --- description: "Migration guide for installing ESPHome on ESPs running ESPurna." title: "Migrating from ESPurna" -params: - seo: - description: Migration guide for installing ESPHome on ESPs running ESPurna. - image: espurna.svg --- +import { Image } from 'astro:assets'; +import downloadBinaryImg from './images/download_binary.png'; +import espurnaOtaImg from './images/espurna_ota.png'; +import espurnaUploadImg from './images/espurna_upload.png'; + Migrating from previous ESPurna setups is very easy. You just need to have ESPHome create a binary for you and then upload that in the ESPurna web interface. @@ -19,7 +20,7 @@ file. Then, generate and download the binary: button, wait for the compilation to end and press the `DOWNLOAD BINARY` button. -{{< img src="download_binary.png" alt="Image" >}} + - **Using the command line**: run `esphome compile livingroom.yaml` (replacing `livingroom.yaml` with your configuration file of course) and navigate to the @@ -31,7 +32,7 @@ file. Then, generate and download the binary: To upload the binary, navigate to the ESPurna web interface and enter the "General " section. -{{< img src="espurna_ota.png" alt="Image" width="80.0%" class="align-center" >}} + In the "Upgrade" section, choose the binary you previously downloaded and press "Upgrade". If everything succeeds, you should now have ESPHome on your node 🎉 @@ -40,13 +41,13 @@ If everything succeeds, you should now have ESPHome on your node 🎉 > with ESPHome, you in most cases won't need to worry about the available flash size, as > the binary only ever includes the code that you are actually using. -{{< img src="espurna_upload.png" alt="Image" width="90.0%" class="align-center" >}} + Happy Hacking! ## See Also -- {{< docref "/components/esp8266" >}} -- {{< docref "/components/esp32" >}} -- {{< docref "migrate_espeasy/" >}} -- {{< docref "migrate_sonoff_tasmota/" >}} +- [ESP8266 Platform](/components/esp8266/) +- [ESP32 Platform](/components/esp32/) +- [Migrating from ESPEasy](/guides/migrate_espeasy/) +- [Migrating from Tasmota](/guides/migrate_sonoff_tasmota/) diff --git a/content/guides/migrate_sonoff_tasmota.md b/src/content/docs/guides/migrate_sonoff_tasmota.mdx similarity index 74% rename from content/guides/migrate_sonoff_tasmota.md rename to src/content/docs/guides/migrate_sonoff_tasmota.mdx index 136464a8d5..b1df30e0cd 100644 --- a/content/guides/migrate_sonoff_tasmota.md +++ b/src/content/docs/guides/migrate_sonoff_tasmota.mdx @@ -1,12 +1,16 @@ --- description: "Migration guide for installing ESPHome on ESPs running Tasmota." title: "Migrating from Tasmota" -params: - seo: - description: Migration guide for installing ESPHome on ESPs running Tasmota. - image: tasmota.svg --- +import { Image } from 'astro:assets'; +import dashboardInstallImg from './images/dashboard-install.png'; +import dashboardInstallManualImg from './images/dashboard-install-manual.png'; +import dashboardInstallManualModernImg from './images/dashboard-install-manual-modern.png'; +import tasmotaMainImg from './images/tasmota_main.png'; +import tasmotaOtaImg from './images/tasmota_ota.png'; +import tasmotaUploadImg from './images/tasmota_upload.png'; + Migrating from previous Tasmota setups is very easy. You just need to have ESPHome create a binary for you and then upload that in the Tasmota web interface. @@ -23,15 +27,15 @@ First create a configuration for your device. Then, generate and download the fi From the card of your device: open **the three dots menu** and select **Install** option. -{{< img src="dashboard-install.png" alt="Image" >}} + A new dialog will open. Click on **Manual download** option. -{{< img src="dashboard-install-manual.png" alt="Image" >}} + Finally, choose **factory format** (formerly "modern format") in the last dialog. -{{< img src="dashboard-install-manual-modern.png" alt="Image" >}} + The build process of the firmware will start and the image will be automatically downloaded after its completion. @@ -53,21 +57,21 @@ There you will find a `firmware.bin` file. This is the binary that you will uplo To upload the binary, navigate to the Tasmota web interface and enter the "Firmware Upgrade" section. -{{< img src="tasmota_main.png" alt="Image" width="60.0%" class="align-center" >}} + In the "Upgrade by file upload" section, choose the binary you previously downloaded -{{< img src="tasmota_ota.png" alt="Image" width="60.0%" class="align-center" >}} + If everything succeeds, you will see an "Upload Successful" message and ESPHome will connect to the WiFi network configured in your .yaml file. 🎉 -{{< img src="tasmota_upload.png" alt="Image" width="60.0%" class="align-center" >}} + Happy Hacking! > [!NOTE] -> When using the {{< docref "/components/output/esp8266_pwm" "esp8266_pwm output" >}} platform and +> When using the [esp8266_pwm output](/components/output/esp8266_pwm/) platform and > switching from Tasmota, you need to power-cycle the device once. After that > the dimming functionality will work as usual and no more power cycles are required. @@ -106,7 +110,7 @@ If you need to use the uncompressed image for any reason, just remove `&compress ## See Also -- {{< docref "/components/esp8266" >}} -- {{< docref "/components/esp32" >}} -- {{< docref "migrate_espurna/" >}} -- {{< docref "migrate_espeasy/" >}} +- [ESP8266 Platform](/components/esp8266/) +- [ESP32 Platform](/components/esp32/) +- [Migrating from ESPurna](/guides/migrate_espurna/) +- [Migrating from ESPEasy](/guides/migrate_espeasy/) diff --git a/content/guides/physical_device_connection.md b/src/content/docs/guides/physical_device_connection.mdx similarity index 61% rename from content/guides/physical_device_connection.md rename to src/content/docs/guides/physical_device_connection.mdx index f8538589bc..0d3e26773a 100644 --- a/content/guides/physical_device_connection.md +++ b/src/content/docs/guides/physical_device_connection.mdx @@ -3,12 +3,28 @@ description: "Physically Connecting to your Device" title: "Physically Connecting to your Device" --- +import { Image } from 'astro:assets'; +import nodemcuEsp8266Img from './images/nodemcu_esp8266.jpg'; +import programmingHeaderPopulatedImg from './images/programming-header-populated.jpg'; +import programmingHeaderUnpopulatedImg from './images/programming-header-unpopulated.jpg'; +import programmingHeaderFilledImg from './images/programming-header-filled.jpg'; +import moduleOnlyProgrammingImg from './images/module-only-programming.jpg'; +import programmingBareChipImg from './images/programming-bare-chip.jpg'; +import usbCableImg from './images/usb-cable.jpg'; +import usbSerialAdapterImg from './images/usb-serial-adapter.jpg'; +import wireCuttersImg from './images/wire-cutters.jpg'; +import strippersImg from './images/strippers.jpg'; +import solderingIronImg from './images/soldering-iron.jpg'; +import solderImg from './images/solder.jpg'; +import fluxImg from './images/flux.jpg'; +import Figure from '@components/Figure.astro'; + The most difficult part of setting up a new ESPHome device is the initial installation, which requires connecting your ESP device to a computer using a data cable. **You only need to do this once per device.** Once you've flashed ESPHome on a -device, you can use {{< docref "/components/ota" >}} to upload new +device, you can use [Ota](/components/ota/) to upload new versions or configuration changes wirelessly. ESPHome runs on a wide variety of devices, so it's hard to list any specific @@ -25,7 +41,7 @@ requires you do something different to connect your computer to the ESP in order to flash it. You only need to physically connect to it once. Once you've flashed your device -and connected it to your WiFi, you can use {{< docref "/components/ota" >}} to +and connected it to your WiFi, you can use [Ota](/components/ota/) to install software remotely. Programming a ESP-based device is done by connecting the serial port on the @@ -38,7 +54,7 @@ on CH340 as it's the most reliable and the cheapest one to use for flashing. Pro CP2102 or PL2303 are compatible with many devices, but using an external 3.3V supply might be necessary for them. -{{< anchor "esphome-phy-con-drv" >}} + Plug in the board or the serial programmer into a free USB port and check if it has been properly detected by your computer. The firmware programming tools use a serial interface to communicate with your device. @@ -78,7 +94,7 @@ this ensures a common ground. A PC power supply can be a good source for `3.3V` ESP needs to be put into programming mode or flash mode before the firmware can be uploaded. This is done by connecting `GPIO0` pin to `GND` while the chip is booting. -{{< anchor "esphome-phy-con-prg" >}} + To put the ESP into programming mode: @@ -96,7 +112,7 @@ reconnecting, of course with `GPIO0` and `GND` still connected to each other. `RX` and `TX` can be sometimes swapped. If programming your board doesn't work the first time, try flipping the wires connected to those pins before trying again. -{{< img src="/images/high-voltage-warning.svg" alt="High voltage warning symbol" height="50" >}} +High voltage warning symbol > [!WARNING] > **Do not connect your device to mains electricity while following this > guide.** If your device is open and plugged directly into the wall, you'll @@ -111,14 +127,18 @@ first time, try flipping the wires connected to those pins before trying again. ### USB Port on Device -{{< img src="nodemcu_esp8266.jpg" alt="Image" - caption="A device with a USB port and a serial adapter built-in" width="75.0%" class="align-center" >}} +
    Development boards often come with a USB port built in. This USB port is connected to a serial adapter, so you don't need a separate serial adapter. You can use just a [USB data cable](#usb-cable) to connect it to your computer to program it. Additionally, a development board can also be used to flash other ESPs. -{{< docref "/guides/devboard_as_flasher" "Read more here." >}} +[Read more here.](/guides/devboard_as_flasher/) This isn't likely to be very useful without connecting additional sensors to it by either soldering or using a breadboard, but you do not need anything else to @@ -126,8 +146,12 @@ by either soldering or using a breadboard, but you do not need anything else to ### Pre-soldered Programming Header -{{< img src="programming-header-populated.jpg" alt="Image" - caption="A device that comes with programming headers pre-installed" width="75.0%" class="align-center" >}} +
    In this situation, you'll need just [jumper wires](#jumper-wires) and a [USB to serial adapter](#usb-serial-adapter). You don't need to solder @@ -135,8 +159,12 @@ anything, that's already been done by the factory. ### Unpopulated Programming Header -{{< img src="programming-header-unpopulated.jpg" alt="Image" - caption="A device that has a spot for programming headers on the circuit board" width="75.0%" class="align-center" >}} +
    You can probably get away with [jumper wires](#jumper-wires) and a [USB to serial adapter](#usb-serial-adapter). You can place the male end @@ -149,8 +177,12 @@ multimeter in continuity mode to figure it out (advanced topic). ### Solder-filled Programming Header -{{< img src="programming-header-filled.jpg" alt="Image" - caption="A set of programming headers that are filled with solder" width="75.0%" class="align-center" >}} +
    You'll need a USB to serial adapter, [jumper wires](#jumper-wires), a [soldering iron](#soldering-iron), and probably [solder](#solder) and @@ -166,14 +198,16 @@ multimeter in continuity mode to figure it out (advanced topic). ### Module Only -{{< img src="module-only-programming.jpg" alt="From " - caption="An ESP8266 module with programming wires soldered on" width="75.0%" class="align-center" >}} +
    If the device has a module but no programming headers, things get a bit tricky. -You'll need a [USB to serial adapter](#usb-serial-adapter), :ref:`jumper -wires `, [wire strippers](#wire-strippers), :ref:`wire snips -`, a [soldering iron](#soldering-iron), :ref:`solder -`, and a bit of [flux](#soldering-flux) would help. +You'll need a [USB to serial adapter](#usb-serial-adapter), [jumper +wires](#jumper-wires), [wire strippers](#wire-strippers), [wire snips](#wire-snips), a [soldering iron](#soldering-iron), [solder](#solder), and a bit of [flux](#soldering-flux) would help. Cut the jumper wires, strip a bit off the end, and then solder them onto the module. You can find the correct places to solder the wires by looking up the @@ -182,8 +216,12 @@ module model number on the internet. You can find ### Bare Chip -{{< img src="programming-bare-chip.jpg" alt="From " - caption="A bare ESP8266 IC with no programming header" width="75.0%" class="align-center" >}} +
    This is an advanced topic and won't be covered in detail, but you have three options: @@ -208,18 +246,18 @@ require different parts and tools. | Name | Purpose | Approx. cost | Picture | | --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| {{< anchor "usb-cable" >}}[USB to micro-USB/mini-USB/USB-C](#usb-cable) | If your target device has a USB port on it, you need the appropriate data cable to connect to it. A power only USB cable that usually comes presupplied with powerbanks won't work. | $3 to $10 | {{< img src="usb-cable.jpg" alt="From " >}} | -| {{< anchor "usb-serial-adapter" >}}[USB to serial adapter](#usb-serial-adapter) | Serial communication is a simple way of talking to other devices, like the ESP32/ESP8266 you're flashing. But your computer probably doesn't have this capability built-in. "Serial", "UART", "TTL", and "COM" are all more-or-less synonyms. There are many different types of these, so don't worry if yours doesn't look exactly like the picture. However, you do need one with a voltage regulator. The [Tasmota website provides a good set of suggestions on what to buy](https://tasmota.github.io/docs/Getting-Started/#needed-hardware). Any ESP development board with functioning USB_UART bridge chip can also be used instead. | $3 to $10 | {{< img src="usb-serial-adapter.jpg" alt="From " >}} | -| {{< anchor "jumper-wires" >}}[Jumper wires](#jumper-wires) | Used to connect two things together electrically. The male end has metal protuding and is plugged into the female end of a wire or board. They come in varying lengths too, but for our purposes, any length will do. | $3 to $8 for a pack | {{< img src="jumper-wires.jpg" alt="From " >}} | -| {{< anchor "pcb-headers" >}}[Breakable headers](#pcb-headers) | Soldered to a PCB to provide a way to connect jumper wires. The distance between the metal pins is known as the pitch, and is usually 2.54mm for what we're doing. This sort of header can be cut to the correct length along the groves. | $3 to $8 for a pack | {{< img src="breakable-header.jpg" alt="From " >}} | -| {{< anchor "wire-snips" >}}[Wire snips, wire cutters, flush cutters](#wire-snips) | Used to cut wire. These can often be subsituted by a knife or scissors, but be careful not to hurt yourself. | $5 to $15 | {{< img src="wire-cutters.jpg" alt="From " >}} | -| {{< anchor "wire-strippers" >}}[Wire strippers](#wire-strippers) | Used to remove the insulation from wires, leaving the conductive metal interior exposed. These can often be subsituted by a knife, scissors, or fingernails, but be careful not to hurt yourself. There are many different styles, not just that in the picture. You'll want something that works with fairly thin wire, about 20 AWG to 26 AWG. | $5 to $15 | {{< img src="strippers.jpg" alt="From " >}} | -| {{< anchor "soldering-iron" >}}[Soldering iron](#soldering-iron) | Used to melt metal, called solder, to connect things together in an electrically conductive way. You'll want something with temperature control. Other than that, there are many varying opinions and options here. [The /r/AskElectronics wiki has some good suggestions](https://www.reddit.com/r/AskElectronics/wiki/soldering). The following would serve you well, although be careful to buy from a reliable source: - Hakko FX-888D - KSGER T12 - TS100/TS80 | $60 to $120 | {{< img src="soldering-iron.jpg" alt="From " >}} | -| {{< anchor "solder" >}}[Electronics solder](#solder) | Molten metal used to join things in an electrically conductive way. There are two types, leaded and lead-free. Leaded melts at a lower temperature and is a little easier to work with, but is hazardous to the environment (but not to humans in this form). Electronics solder also usually has a "rosin core", which helps clean the surfaces to allow the solder to stick. You absolutely do not want plumbing solder, also known as "acid core" or "silver solder". It needs much higher temperatures than we can safely use here. | $8 to $12 | {{< img src="solder.jpg" alt="From " >}} | -| {{< anchor "soldering-flux" >}}[Electronics flux](#soldering-flux) | Used to clean the metal surfaces before soldering them together. Sometimes the rosin core of the solder doesn't provide enough, so you'd want add some extra. This stuff is helpful, but probably not needed for this guide since we won't be doing any advanced soldering. If you do buy it, you absolutely do not want plumber's flux. It will destroy your circuit boards. | $8 to $12 | {{< img src="flux.jpg" alt="Image" >}} | +| [USB to micro-USB/mini-USB/USB-C](#usb-cable) | If your target device has a USB port on it, you need the appropriate data cable to connect to it. A power only USB cable that usually comes presupplied with powerbanks won't work. | $3 to $10 | USB cable | +| [USB to serial adapter](#usb-serial-adapter) | Serial communication is a simple way of talking to other devices, like the ESP32/ESP8266 you're flashing. But your computer probably doesn't have this capability built-in. "Serial", "UART", "TTL", and "COM" are all more-or-less synonyms. There are many different types of these, so don't worry if yours doesn't look exactly like the picture. However, you do need one with a voltage regulator. The [Tasmota website provides a good set of suggestions on what to buy](https://tasmota.github.io/docs/Getting-Started/#needed-hardware). Any ESP development board with functioning USB_UART bridge chip can also be used instead. | $3 to $10 | USB serial adapter | +| [Jumper wires](#jumper-wires) | Used to connect two things together electrically. The male end has metal protuding and is plugged into the female end of a wire or board. They come in varying lengths too, but for our purposes, any length will do. | $3 to $8 for a pack | Jumper wires | +| [Breakable headers](#pcb-headers) | Soldered to a PCB to provide a way to connect jumper wires. The distance between the metal pins is known as the pitch, and is usually 2.54mm for what we're doing. This sort of header can be cut to the correct length along the groves. | $3 to $8 for a pack | Breakable headers | +| [Wire snips, wire cutters, flush cutters](#wire-snips) | Used to cut wire. These can often be subsituted by a knife or scissors, but be careful not to hurt yourself. | $5 to $15 | Wire cutters | +| [Wire strippers](#wire-strippers) | Used to remove the insulation from wires, leaving the conductive metal interior exposed. These can often be subsituted by a knife, scissors, or fingernails, but be careful not to hurt yourself. There are many different styles, not just that in the picture. You'll want something that works with fairly thin wire, about 20 AWG to 26 AWG. | $5 to $15 | Wire strippers | +| [Soldering iron](#soldering-iron) | Used to melt metal, called solder, to connect things together in an electrically conductive way. You'll want something with temperature control. Other than that, there are many varying opinions and options here. [The /r/AskElectronics wiki has some good suggestions](https://www.reddit.com/r/AskElectronics/wiki/soldering). The following would serve you well, although be careful to buy from a reliable source: - Hakko FX-888D - KSGER T12 - TS100/TS80 | $60 to $120 | Soldering iron | +| [Electronics solder](#solder) | Molten metal used to join things in an electrically conductive way. There are two types, leaded and lead-free. Leaded melts at a lower temperature and is a little easier to work with, but is hazardous to the environment (but not to humans in this form). Electronics solder also usually has a "rosin core", which helps clean the surfaces to allow the solder to stick. You absolutely do not want plumbing solder, also known as "acid core" or "silver solder". It needs much higher temperatures than we can safely use here. | $8 to $12 | Solder | +| [Electronics flux](#soldering-flux) | Used to clean the metal surfaces before soldering them together. Sometimes the rosin core of the solder doesn't provide enough, so you'd want add some extra. This stuff is helpful, but probably not needed for this guide since we won't be doing any advanced soldering. If you do buy it, you absolutely do not want plumber's flux. It will destroy your circuit boards. | $8 to $12 | | ## See Also -* {{< docref "/index" "ESPHome index" >}} -* {{< docref "getting_started_command_line/" >}} -* {{< docref "getting_started_hassio/" >}} +* [ESPHome Docs](/components/) +* [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) +* [Getting Started with ESPHome and Home Assistant](/guides/getting_started_hassio/) diff --git a/content/guides/security_best_practices.md b/src/content/docs/guides/security_best_practices.mdx similarity index 99% rename from content/guides/security_best_practices.md rename to src/content/docs/guides/security_best_practices.mdx index c29c7e5fea..02985dc86e 100644 --- a/content/guides/security_best_practices.md +++ b/src/content/docs/guides/security_best_practices.mdx @@ -1,10 +1,6 @@ --- description: "Security best practices for ESPHome devices and networks." title: "Security Best Practices" -params: - seo: - description: Security best practices for ESPHome devices and networks. - image: shield-alt.svg --- This guide provides security recommendations for ESPHome users to help protect their devices and networks. diff --git a/content/guides/setting_up_rmt_devices.md b/src/content/docs/guides/setting_up_rmt_devices.mdx similarity index 95% rename from content/guides/setting_up_rmt_devices.md rename to src/content/docs/guides/setting_up_rmt_devices.mdx index eb63e25dea..5b6b9262e2 100644 --- a/content/guides/setting_up_rmt_devices.md +++ b/src/content/docs/guides/setting_up_rmt_devices.mdx @@ -1,15 +1,11 @@ --- description: "Set up guide for configuring IR and RF devices in ESPHome." title: "Setting up RMT Devices" -params: - seo: - description: Set up guide for configuring IR and RF devices in ESPHome. - image: remote.svg --- ## Setting up IR Devices -{{< anchor "remote-setting-up-infrared" >}} + In this guide an infrared device will be set up with ESPHome. First, the remote code will be captured with an IR receiver module (like [this one](https://www.sparkfun.com/products/10266)). @@ -85,7 +81,7 @@ button: Recompile again, when you power up the device the next time you will see a new button in the frontend. Click on it and you should see the remote signal being transmitted. Done! -{{< anchor "remote-setting-up-rf" >}} + ## Setting up RF Devices @@ -187,5 +183,5 @@ in the frontend. Click on it and you should see the remote signal being transmit ## See Also -- {{< docref "/components/remote_receiver" >}} -- {{< docref "/components/remote_transmitter" >}} +- [Remote Receiver](/components/remote_receiver/) +- [Remote Transmitter](/components/remote_transmitter/) diff --git a/content/guides/supporters.md b/src/content/docs/guides/supporters.mdx similarity index 100% rename from content/guides/supporters.md rename to src/content/docs/guides/supporters.mdx diff --git a/content/guides/troubleshooting.md b/src/content/docs/guides/troubleshooting.mdx similarity index 85% rename from content/guides/troubleshooting.md rename to src/content/docs/guides/troubleshooting.mdx index 21f82ecfa7..ec0cd901b5 100644 --- a/content/guides/troubleshooting.md +++ b/src/content/docs/guides/troubleshooting.mdx @@ -1,10 +1,6 @@ --- description: Guide for troubleshooting ESPHome issues, debugging crashes, and obtaining decoded stack traces from device failures. title: "Troubleshooting" -params: - seo: - description: Guide for troubleshooting ESPHome issues, debugging crashes, and obtaining decoded stack traces from device failures. - image: bug-report.svg --- This guide helps you diagnose and debug ESPHome device issues, particularly crashes and boot failures. Whether you're @@ -13,7 +9,7 @@ instructions for capturing and understanding crash data. > [!NOTE] > This guide assumes you have ESPHome installed and basic familiarity with the command line. For installation -> instructions, see {{< docref "/guides/installing_esphome" >}}. +> instructions, see [Installing Esphome](/guides/installing_esphome/). ## Getting a Stack Trace from Crashes @@ -33,7 +29,7 @@ When your ESPHome device crashes, you can obtain a decoded stack trace to help i - Select "Download YAML" to get your configuration file - Save it to a local directory - Then use the command line interface (see the {{< docref "/guides/cli" >}} guide for full details): + Then use the command line interface (see the [Cli](/guides/cli/) guide for full details): ```shell esphome compile your-device.yaml @@ -102,7 +98,7 @@ If you already have a stack trace but need to decode it, you can use the > The .elf file must be from the same compilation that produced the firmware currently running on your device. > If you've recompiled since flashing, the debug symbols won't match. -1. **Open the decoder**: Navigate to +1. **Open the decoder**: Navigate to [https://esphome.github.io/esp-stacktrace-decoder/](https://esphome.github.io/esp-stacktrace-decoder/) 1. **Upload files**: @@ -124,7 +120,7 @@ understanding the data flow between components. ### Setting Global Log Level -To increase the verbosity of logs globally, adjust the `level` in your {{< docref "/components/logger" >}} configuration: +To increase the verbosity of logs globally, adjust the `level` in your [Logger](/components/logger/) configuration: ```yaml logger: @@ -147,7 +143,7 @@ Available log levels from least to most verbose: ### ESP-IDF Framework Log Level -When using the ESP-IDF framework on {{< docref "/components/esp32" >}}, you can also adjust the framework's internal +When using the ESP-IDF framework on [Esp32](/components/esp32/), you can also adjust the framework's internal log level to get more detailed information from the underlying system: ```yaml @@ -162,7 +158,7 @@ Available ESP-IDF log levels: `NONE`, `ERROR` (default), `WARN`, `INFO`, `DEBUG` ### Component-Specific Log Levels You can also configure log levels for specific components to reduce noise or get more detail from individual components. -See the {{< docref "/components/logger#manual-tag-specific-log-levels" "logger manual tag-specific log levels" >}} +See the [logger manual tag-specific log levels](/components/logger#manual-tag-specific-log-levels) documentation for detailed information and examples. > [!IMPORTANT] @@ -179,14 +175,14 @@ If your device is experiencing performance issues such as: - Connectivity problems - Components not updating as expected -The {{< docref "/components/runtime_stats" >}} component can help identify which components are consuming the most +The [Runtime Stats](/components/runtime_stats/) component can help identify which components are consuming the most processing time or blocking the event loop. See the runtime_stats documentation for detailed usage instructions and examples. ## See Also -- {{< docref "/components/logger" >}} - Configure logging levels and outputs -- {{< docref "/components/debug" >}} - Debug component for additional diagnostics -- {{< docref "/components/runtime_stats" >}} - Performance analysis and debugging -- {{< docref "/components/safe_mode" >}} - Safe Mode recovery guide -- {{< docref "/guides/faq" >}} - Frequently asked questions +- [Logger Component](/components/logger/) - Configure logging levels and outputs +- [Debug Component](/components/debug/) - Debug component for additional diagnostics +- [Runtime Statistics](/components/runtime_stats/) - Performance analysis and debugging +- [Safe Mode](/components/safe_mode/) - Safe Mode recovery guide +- [Frequently Asked Questions](/guides/faq/) - Frequently asked questions diff --git a/content/guides/yaml.md b/src/content/docs/guides/yaml.mdx similarity index 95% rename from content/guides/yaml.md rename to src/content/docs/guides/yaml.mdx index 33f8a3ea38..44dff85b9e 100644 --- a/content/guides/yaml.md +++ b/src/content/docs/guides/yaml.mdx @@ -3,7 +3,7 @@ description: "YAML Configuration in ESPHome" title: "YAML Configuration in ESPHome" --- -{{< anchor "yaml-configuration" >}} + ## Overview @@ -39,7 +39,7 @@ foo: text: "# can be included in a string" ``` -{{< anchor "yaml-scalars" >}} + ### Scalars @@ -69,7 +69,7 @@ web_server: port: 80 # integer value ``` -{{< anchor "yaml-sequences" >}} + ### Sequences @@ -137,7 +137,7 @@ two errors: text: "Temperature 1" # Wrong! Should be indented. Will throw error "text is an invalid option for ..." ``` -{{< anchor "yaml-mappings" >}} + ### Mappings @@ -178,7 +178,7 @@ but will be interpreted correctly by the YAML parser. It is recommended that you but if you see this used in a YAML file, understand that it does work - and it can be useful to limit indentation depth with complex configurations. -{{< anchor "yaml-anchors" >}} + ### Anchors, Aliases, and Overriding Values @@ -262,13 +262,13 @@ multiline_string: |- some_other_key: # This is not part of the string ``` -{{< anchor "yaml-extensions" >}} + ## ESPHome YAML Extensions ESPHome adds several non-standard but useful features to standard YAML: -{{< anchor "yaml-secrets" >}} + ### Secrets and the `secrets.yaml` File @@ -299,9 +299,9 @@ The secrets file must consist only of a flat mapping of keys to scalar values. ### Substitutions The `substitutions:` feature allows you to define reusable values that can be referenced throughout your configuration. -For full details see {{< docref "/components/substitutions" >}} +For full details see [Substitutions](/components/substitutions/) -{{< anchor "yaml-include" >}} + ### !include @@ -335,9 +335,9 @@ The `packages:` feature allows you to define reusable and potentially partial co your main configuration. The data is merged with the main configuration, with values in the main configuration taking precedence over values in the package data. -See {{< docref "/components/packages" >}} for more details. +See [Packages](/components/packages/) for more details. -{{< anchor "yaml-hidden-items" >}} + ### Hidden items @@ -370,6 +370,6 @@ at runtime, to provide dynamic values and implement logic not possible in YAML. ## See Also -- {{< docref "/components/packages" >}} -- {{< docref "/guides/configuration-types" >}} +- [Packages](/components/packages/) +- [Configuration-Types](/guides/configuration-types/) - [YAML Official Site](https://yaml.org/) diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx new file mode 100644 index 0000000000..419526fe63 --- /dev/null +++ b/src/content/docs/index.mdx @@ -0,0 +1,80 @@ +--- +description: "Smart Home Made Simple. ESPHome turns ESP32, ESP8266, and RP2040 microcontrollers into fully-featured smart home devices." +title: "ESPHome" +head: + - tag: title + content: "ESPHome - Smart Home Made Simple" +template: splash +hero: + tagline: Turn your ESP32, ESP8266, or RP2040 boards into powerful smart home devices with simple YAML configuration. + image: + alt: ESPHome dashboard showing connected devices + file: ../../assets/hero.png + actions: + - text: Installation Guide + link: /guides/getting_started_hassio/ + icon: right-arrow + - text: Browse Components + link: /components/ + variant: minimal + - text: Device Database + link: https://devices.esphome.io/ + variant: minimal +--- + +
    +
    +
    No Coding Required
    +

    Simple YAML configuration files instead of complex C++ code.

    +
    +
    +
    Wireless Updates
    +

    Update your devices over-the-air without physical access.

    +
    +
    +
    Modular Design
    +

    Support for hundreds of sensors, displays, and other components.

    +
    +
    +
    Local Control
    +

    Devices work locally without cloud dependencies.

    +
    +
    + + + +## Who Uses ESPHome? + +- **DIY Enthusiasts** - Create custom sensors, switches, and displays tailored to specific needs +- **Smart Home Hobbyists** - Extend their home automation systems with affordable custom devices +- **Professional Integrators** - Deploy reliable, locally-controlled smart devices for clients +- **Manufacturers** - Create [Made for ESPHome](/guides/made_for_esphome/) certified products with standardized firmware + +## Which microcontrollers does ESPHome support? + +- **Espressif ESP32 and ESP8266** - Wide support for ESP32 and ESP8266 microcontrollers, the heart of many IoT projects. +- **RP2040** - Support for Raspberry Pi's RP2040 microcontroller. +- **Others** - Nordic Semiconductor nRF52, Realtek RTL87xx, and Beken BK72xx chips are supported. +- **Desktop** - Many ESPHome components can be run on a desktop computer using the *host* platform! + + + +## Getting Started + +
    +
    +
    From Home Assistant
    +

    The easiest way to get started with ESPHome is through the Home Assistant add-on.

    + Home Assistant Guide +
    +
    +
    Command Line
    +

    For advanced users who prefer working with the command line.

    + Command Line Guide +
    +
    +
    Ready-Made Projects
    +

    Start with a pre-configured project for common use cases.

    + Browse Projects +
    +
    diff --git a/src/content/docs/projects/index.mdx b/src/content/docs/projects/index.mdx new file mode 100644 index 0000000000..aca70d9e16 --- /dev/null +++ b/src/content/docs/projects/index.mdx @@ -0,0 +1,618 @@ +--- +description: "Install ready-made projects directly on your device." +title: "Ready-Made Projects" +--- + + + +Unleash the potential of your device by installing ready-made ESPHome +projects from this page. Connect your device to your PC, a few clicks in the browser +and your ESPHome device is ready to do its magic - as a Bluetooth proxy or a media player. +No programming or other software required. + + + + + +
    +

    + This page requires a browser that supports WebSerial. Please open this + website on your desktop using Google Chrome or Microsoft Edge. +

    +
    + +
    I want to create a:
    +
    + + + + + +
    + +{/* Voice Assistant */} +
    +
    + Pick the device you want to turn into a voice assistant: +
    +
    + + + +
    + +
    +
    Select your variant:
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    Start the installation:
    + + +
    +

    ESP32-S3-BOX-3

    +

    + The open-source reference design for voice assistants by Espressif. The + non-3 and lite variant are older versions that are no longer for sale. +

    +

    Buy ESP32-S3-BOX-3

    + +
    + +
    +

    M5Stack Atom Echo Development Kit

    +

    Tiny ESP32 board with a built-in speaker.

    +

    Buy

    + +
    + +
    +

    Home Assistant Voice: Preview Edition

    +

    Our official voice assistant hardware created for ESPHome. Includes advanced voice processing and a beautiful design.

    +

    Learn more & buy

    + +
    + +

    For advanced users

    + +
    + +{/* Bluetooth Proxy */} +
    +
    + Pick the device you want to turn into a Bluetooth proxy: +
    +
    + + + + + + +
    + +
    Start the installation:
    + + +
    +

    Generic ESP32

    +

    + Turn any ESP32 into a Bluetooth proxy for Home Assistant. This option only + works for "plain" ESP32 and not for ESP32-C3 or other variants. +

    +

    Buy

    + +
    + +
    +

    GL.iNet GL-S10

    +

    + ESP32 in a case with external antenna and wired Ethernet connection that + can also be powered using Power over Ethernet 802.3af. Note that when + installed via this website, Wi-Fi is disabled and it needs to be connected + via Ethernet. +

    +

    + Warning: This board requires extra work.{" "} + This device requires you to disassemble the device to be able to install it + as a Bluetooth proxy. This installation method is for revision 2.X of their + board. See instructions for the configuration of other revisions. + Read DIY instructions. +

    +

    Buy

    + +
    + +
    +

    Olimex ESP32 Power-over-Ethernet ISO

    +

    + ESP32 board with wired Ethernet connection that can also be powered using + Power over Ethernet 802.3af. Note that when installed via this website, + Wi-Fi is disabled and it needs to be connected via Ethernet. The + ESP32-POE-ISO-EA variant may provide better Bluetooth range since + it has an external antenna. + Case on Thingiverse. +

    +

    Buy

    + +
    + +
    +

    Wireless-Tag WT32-ETH01

    +

    + ESP32 board with wired Ethernet connection. Note that when installed via + this website, Wi-Fi is disabled and it needs to be connected via Ethernet. + Various enclosures on Thingiverse. +

    +

    + Warning: This board requires extra work.{" "} + This device requires you to create a special flash tool to be able to + install it as a Bluetooth proxy. + Read DIY instructions. +

    +

    Buy

    + +
    + +
    +

    Seeed Studio XIAO W5500 Ethernet Adapter V1.2

    +

    + The development board based on the ESP32-S3-Plus XIAO, equipped with the W5500 Ethernet chip, provides wired network connectivity and supports Power over Ethernet (PoE). Please note that after installation via this website, Wi-Fi will be disabled, and the device must be connected via Ethernet. +

    +

    + Note: Only V1.2 boards (produced after November 1, 2025) are supported. + Earlier versions were never originally intended for use as active Bluetooth proxies + and are not compatible due to a missing interrupt pin connection for the W5500 + Ethernet chip and Bluetooth RF performance issues. + See the forum post for more details and support options for early-batch units. +

    +

    Buy

    + +
    + +
    +

    LilyGO T-ETH-POE ESP32-WROOM

    +

    + A compact board with an ESP32-WROOM module and wired Ethernet connection. + Can be powered via Power over Ethernet 802.3af or via the built in USB-C + port. Note that when installed via this website, Wi-Fi is disabled and it + needs to be connected via Ethernet. + Various enclosures on Thingiverse. +

    +

    + Warning: This board requires extra work.{" "} + This device comes with a special "download tool" that needs to be used to + install it as a Bluetooth proxy. +

    +

    Buy

    + +
    + +

    For advanced users

    + +
    + +{/* Media Player */} +
    +
    + Pick the device you want to turn into a media player: +
    +
    + +
    + +
    Start the installation:
    + + +
    +

    Home Assistant Voice: Preview Edition

    +

    Our official voice assistant hardware created for ESPHome includes an aux port and a beautiful encoder to control the volume in style.

    +

    Learn more & buy

    + +
    + +

    For advanced users

    + +
    + +{/* Infrared Proxy */} +
    +
    + Pick the device you want to turn into an infrared proxy: +
    +
    + +
    + +
    Start the installation:
    + + +
    +

    Xiao IR Mate

    +

    Small but powerful infrared emitter.

    +

    Learn more & buy

    + +
    + +

    For advanced users

    + +
    + +{/* Empty Device */} +
    +
    + Pick the manufacturer of the device you want to set up: +
    + +
    + + +
    + +
    +
    Start the installation:
    + +
    + +
    +
    Installation instructions:
    +
      +
    1. Disconnect your Raspberry Pi Pico from your computer
    2. +
    3. Hold the BOOTSEL button and connect the Pico to your computer. The Pico will show up as a USB drive named RPI-RP2
    4. +
    5. Download ESPHome for Pico
    6. +
    7. Drag the downloaded file to the RPI-RP2 USB drive. The installation is complete when the drive disappears
    8. +
    9. Connect your Pico to the Wi-Fi network. Once connected, it will automatically show up on your ESPHome dashboard.
    10. +
    +
    +
    + + + + diff --git a/content/web-api/images/event-source.png b/src/content/docs/web-api/images/event-source.png similarity index 100% rename from content/web-api/images/event-source.png rename to src/content/docs/web-api/images/event-source.png diff --git a/content/web-api/images/logo-text.svg b/src/content/docs/web-api/images/logo-text.svg similarity index 100% rename from content/web-api/images/logo-text.svg rename to src/content/docs/web-api/images/logo-text.svg diff --git a/content/web-api/_index.md b/src/content/docs/web-api/index.mdx similarity index 96% rename from content/web-api/_index.md rename to src/content/docs/web-api/index.mdx index 18308f1d6e..a1d31adafb 100644 --- a/content/web-api/_index.md +++ b/src/content/docs/web-api/index.mdx @@ -1,12 +1,12 @@ --- description: "Information on Web Server APIs, including Event Source APIs and REST APIs." title: "Web Server API" -params: - seo: - description: Information on Web Server APIs, including Event Source APIs and REST APIs. - image: ../images/logo-text.svg --- +import { Image } from 'astro:assets'; +import eventSourceImg from './images/event-source.png'; +import Figure from '@components/Figure.astro'; + ESPHome includes a built-in web server that can be used to view states and send commands. In addition to the web-frontend available under the root index of the web server, there's also two other features the web server currently offers: A real time event @@ -17,7 +17,7 @@ not something like configuring the node, as that would quickly blow up the requi memory size. First up, to use the web server enable it using `App.init_web_server()` directly from code -or using the {{< docref "/components/web_server" "Web Server Section" >}} in ESPHome. +or using the [Web Server Section](/components/web_server/) in ESPHome. Then, navigate to the front end interface with the IP of the node or alternatively using mDNS with `.local/`. So for example to navigate to the web server of a node called `livingroom`, you would enter `livingroom.local/` in your browser. @@ -26,7 +26,7 @@ While it's currently recommended to use ESPHome directly through Home Assistant, to integrate ESPHome with an external or self-built application you can use two available APIs: the real-time event source API and REST API. -{{< anchor "api-event-source" >}} + ## Event Source API @@ -62,7 +62,12 @@ The `state` field contains a simple text-based representation of the state of th component, for example ON/OFF or 21.4 °C. Several components also have additional fields in this payload, for example lights have a `brightness` attribute. -{{< img src="event-source.png" alt="Image" caption="Example payload of the event source API." class="align-center" >}} +
    Additionally, each time a client connects to the event source the server sends out all current states so that the client can catch up with reality. @@ -72,7 +77,7 @@ both `name_id` and `id` fields during the deprecation period (until 2026.8.0), w responses only include `id` in the new format. I would recommend just opening the network debug panel of your web browser to see what's sent. -{{< anchor "api-rest" >}} + ### REST API @@ -405,8 +410,8 @@ be logged or stored in browser history. A valid POST request will always return a 200 OK status response. This does not indicate that the alarm was armed or disarmed successfully. It only indicates that the command was received and processed by the web server. -### See Also +## See Also -- {{< docref "/components/web_server" >}} -- {{< docref "/components/prometheus" >}} -- {{< docref "/components/http_request" >}} +- [Web Server Component](/components/web_server/) +- [Prometheus Component](/components/prometheus/) +- [HTTP Request](/components/http_request/) diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000000..80bc4b7f9f --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/src/lib/breakpoints.ts b/src/lib/breakpoints.ts new file mode 100644 index 0000000000..04f0f161f0 --- /dev/null +++ b/src/lib/breakpoints.ts @@ -0,0 +1,8 @@ +const breakpoints = { + mobile: 480, + tablet: 768, + desktop: 1024, + largeDesktop: 1200, +}; + +export const imageBreakpoints = Object.values(breakpoints); diff --git a/src/styles/custom.css b/src/styles/custom.css new file mode 100644 index 0000000000..f2569c27d9 --- /dev/null +++ b/src/styles/custom.css @@ -0,0 +1,267 @@ +/* ESPHome Documentation Custom Styles */ + +/* Tighten line height and widen content area */ +:root { + --sl-line-height: 1.6; + --sl-content-width: 55rem; +} + +/* Limit logo height in header */ +.site-title img { + max-height: 30px; + width: auto; +} + +/* Remove search blur overlay */ +dialog::backdrop { + -webkit-backdrop-filter: none; + backdrop-filter: none; +} + +/* Component grid for imgtable */ +.component-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + gap: 1rem; + margin: 1.5rem 0; +} + +.component-card { + text-align: center; + padding: 0.75rem; + border-radius: 8px; + border: 1px solid var(--sl-color-gray-5); + transition: background-color 0.2s ease, border-color 0.2s ease; + min-height: 150px; + display: flex; + align-items: center; + justify-content: center; +} + +.component-card:hover { + background-color: var(--sl-color-gray-6); + border-color: var(--sl-color-gray-4); +} + +.component-card a { + text-decoration: none; + color: inherit; + display: block; +} + +.component-icon { + width: 70px; + min-height: 70px; + margin: 0 auto 0.5rem; + display: flex; + align-items: center; + justify-content: center; +} + +.component-icon img { + width: 100%; + object-fit: contain; +} + +.component-name { + font-weight: 500; + font-size: 0.9rem; + word-break: break-word; +} + +.component-caption { + font-size: 0.75rem; + color: var(--sl-color-gray-3); + margin-top: 0.25rem; +} + +/* Dark mode image inversion */ +:root[data-theme='dark'] .dark-invert img { + filter: invert(1) hue-rotate(180deg); +} + +/* Feature grid styles */ +.feature-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 1.5rem; + margin: 2rem 0; +} + +.feature-card { + padding: 1.5rem; + border-radius: 8px; + background-color: var(--sl-color-gray-6); +} + +.feature-icon { + width: 48px; + height: 48px; + margin-bottom: 1rem; +} + +.feature-icon svg { + width: 100%; + height: 100%; + fill: currentColor; +} + +.feature-text { + font-weight: 600; + font-size: 1.1rem; + margin-bottom: 0.5rem; +} + +/* Getting started grid */ +.getting-started-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + margin: 2rem 0; +} + +.getting-started-heading { + font-weight: 600; + font-size: 1.2rem; + margin-bottom: 0.75rem; +} + +/* Button styles */ +.btn { + display: inline-block; + padding: 0.5rem 1rem; + border-radius: 4px; + text-decoration: none; + font-weight: 500; + margin-top: 1rem; +} + +.btn-primary { + background-color: var(--sl-color-accent); + color: #fff; +} + +.btn-primary:hover { + background-color: var(--sl-color-accent-high); + color: #fff; +} + +/* Sidebar nav item spacing */ +.sidebar-content ul li summary { + padding-block: 0.5em; +} + +.sidebar-content ul li > a { + padding-block: 0.5em; +} + +/* Anchor styling */ +.anchor { + display: block; + position: relative; + top: -5rem; + visibility: hidden; +} + +/* GitHub Alerts - Custom ESPHome Colors (matching Hugo theme style) */ +.markdown-alert { + padding: 0.75rem 1rem; + margin: 1rem 0; + border-left: 0.25em solid; + background-color: var(--sl-color-gray-6); + border-radius: 0 4px 4px 0; +} + +.markdown-alert-title { + font-weight: 600; + margin: 0 0 0.5rem 0; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.markdown-alert-title svg, +.markdown-alert-title .octicon { + width: 1em; + height: 1em; + flex-shrink: 0; + fill: currentColor; +} + +.markdown-alert p { + margin: 0; +} + +.markdown-alert p:not(:last-child) { + margin-bottom: 0.5rem; +} + +/* Note - Blue */ +.markdown-alert-note { + border-left-color: #5dade2; +} + +.markdown-alert-note .markdown-alert-title { + color: #5dade2; +} + +/* Tip - Green */ +.markdown-alert-tip { + border-left-color: #7cb342; +} + +.markdown-alert-tip .markdown-alert-title { + color: #7cb342; +} + +/* Warning - Yellow */ +.markdown-alert-warning { + border-left-color: #ffcc32; +} + +.markdown-alert-warning .markdown-alert-title { + color: #ffcc32; +} + +/* Caution - Red */ +.markdown-alert-caution { + border-left-color: #ff0000; +} + +.markdown-alert-caution .markdown-alert-title { + color: #ff0000; +} + +/* Important - Teal */ +.markdown-alert-important { + border-left-color: #00979d; +} + +.markdown-alert-important .markdown-alert-title { + color: #00979d; +} + +/* Dark mode adjustments */ +:root[data-theme='dark'] .markdown-alert { + background-color: #23272e; +} + +/* Center images that are not full width */ +.sl-markdown-content img { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* Ensure Image component wrapper centers its content */ +.sl-markdown-content > p > img, +.sl-markdown-content > img { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* Transparent background pattern for badges */ +.transparent-background img { + background: repeating-conic-gradient(#999 0% 25%, transparent 10% 50%) 50% / 10px 10px; +} diff --git a/themes/esphome-theme/assets/css/chroma.css b/themes/esphome-theme/assets/css/chroma.css deleted file mode 100644 index 2c43e4cc2d..0000000000 --- a/themes/esphome-theme/assets/css/chroma.css +++ /dev/null @@ -1,70 +0,0 @@ -.chroma .hll { background-color: #49483e; } -.chroma { background: #272822; color: #f8f8f2; } -.chroma .c { color: #949076; } -.chroma .err { background-color: #1e0010; color: #eb0083; } -.chroma .k { color: #66d9ef; } -.chroma .l { color: #ae81ff; } -.chroma .n { color: #f8f8f2; } -.chroma .o { color: #f94e8a; } -.chroma .p { color: #f8f8f2; } -.chroma .ch { color: #949076; } -.chroma .cm { color: #949076; } -.chroma .cp { color: #949076; } -.chroma .cpf { color: #949076; } -.chroma .c1 { color: #949076; } -.chroma .cs { color: #949076; } -.chroma .gd { color: #f94e8a; } -.chroma .ge { font-style: italic; } -.chroma .gi { color: #a6e22e; } -.chroma .gs { font-weight: bold; } -.chroma .gu { color: #949076; } -.chroma .kc { color: #66d9ef; } -.chroma .kd { color: #66d9ef; } -.chroma .kn { color: #f94e8a; } -.chroma .kp { color: #66d9ef; } -.chroma .kr { color: #66d9ef; } -.chroma .kt { color: #66d9ef; } -.chroma .ld { color: #e6db74; } -.chroma .m { color: #ae81ff; } -.chroma .s { color: #e6db74; } -.chroma .na { color: #a6e22e; } -.chroma .nb { color: #f8f8f2; } -.chroma .nc { color: #a6e22e; } -.chroma .no { color: #66d9ef; } -.chroma .nd { color: #a6e22e; } -.chroma .ni { color: #f8f8f2; } -.chroma .ne { color: #a6e22e; } -.chroma .nf { color: #a6e22e; } -.chroma .nl { color: #f8f8f2; } -.chroma .nn { color: #f8f8f2; } -.chroma .nx { color: #a6e22e; } -.chroma .py { color: #f8f8f2; } -.chroma .nt { color: #f94e8a; } -.chroma .nv { color: #f8f8f2; } -.chroma .ow { color: #f94e8a; } -.chroma .w { color: #f8f8f2; } -.chroma .mb { color: #ae81ff; } -.chroma .mf { color: #ae81ff; } -.chroma .mh { color: #ae81ff; } -.chroma .mi { color: #ae81ff; } -.chroma .mo { color: #ae81ff; } -.chroma .sa { color: #e6db74; } -.chroma .sb { color: #e6db74; } -.chroma .sc { color: #e6db74; } -.chroma .dl { color: #e6db74; } -.chroma .sd { color: #e6db74; } -.chroma .s2 { color: #e6db74; } -.chroma .se { color: #ae81ff; } -.chroma .sh { color: #e6db74; } -.chroma .si { color: #e6db74; } -.chroma .sx { color: #e6db74; } -.chroma .sr { color: #e6db74; } -.chroma .s1 { color: #e6db74; } -.chroma .ss { color: #e6db74; } -.chroma .bp { color: #f8f8f2; } -.chroma .fm { color: #a6e22e; } -.chroma .vc { color: #f8f8f2; } -.chroma .vg { color: #f8f8f2; } -.chroma .vi { color: #f8f8f2; } -.chroma .vm { color: #f8f8f2; } -.chroma .il { color: #ae81ff; } diff --git a/themes/esphome-theme/assets/css/main.css b/themes/esphome-theme/assets/css/main.css deleted file mode 100644 index fcc5a5651c..0000000000 --- a/themes/esphome-theme/assets/css/main.css +++ /dev/null @@ -1,1594 +0,0 @@ -/* Base styles */ -:root { - --logo-casita-color: #18BCF2; - --primary-color: #00bfff; - --esphome-color: #00bfff; - --secondary-color: #00979d; - --text-color: #111; - --background-color: #fff; - --sidebar-background: #f3f6f6; - --mobile-width-stop: 1000px; /* accessed from Javascript */ - --nav-height: 50px; - --nav-transition-up: transform 0.3s ease; - --nav-transition-down: transform 0.1s ease-out; - --max-page-width: 1500px; - --feature-card-bg: #fff; - --feature-card-text: #111; - --feature-icon-color: #00bfff; - --btn-primary-color: #007BBB; - --btn-primary-hover-color: #0399e1; - --btn-secondary-color: transparent; - --btn-secondary-hover-color: rgba(3, 199, 294, 0.1); - --getting-started-bg: #f3f6f6; - --getting-started-text: #333; - --nav-bg: #fff; - --nav-text: #333; - --dropdown-bg: #fff; - --dropdown-text: #333; - --footer-bg: #111; - --footer-text: #e1e1e1; - --border-color: #e0e0e0; - --link-accent: #007070; - --component-card-bg: #fff; - --component-card-text: #333; - - --blockquote-bg: #f3f6f6; - --blockquote-border: var(--primary-color); - - --alert-caution: #ff0000; - --alert-important: var(--text-color); - --alert-note: #5dade2; - --alert-tip: #7cb342; - --alert-warning: #ffcc32; -} - -[data-theme="dark"] { - --primary-color: #1f2937; - --text-color: #e1e1e1; - --background-color: #181c20; - --sidebar-background: #23272e; - --feature-card-bg: #242424; - --feature-card-text: #ffffff; - --getting-started-bg: #23272e; - --getting-started-text: #f1f1f1; - --nav-bg: #222b36; - --nav-text: #f1f1f1; - --dropdown-bg: #23272e; - --dropdown-text: #f1f1f1; - --footer-bg: #181c20; - --footer-text: #f1f1f1; - --border-color: #333; - --link-accent: #00a5a5; - --component-card-bg: #23272e; - --component-card-text: #f1f1f1; - --logo-text-color: #FFFFFF; - - --blockquote-bg: #23272e; - --blockquote-border: var(--text-color); - -} - - -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -html, body { - height: 100%; - margin: 0; - scroll-padding-top: calc(var(--nav-height) + 10px); -} - -body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; - line-height: 1.6; - color: var(--text-color); - background-color: var(--background-color); -} - -.body { - visibility: initial; -} - -a { - color: var(--link-accent); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1, h2, h3, h4, h5, h6, .footer-heading, .getting-started-heading { - font-family: Figtree, system, -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", sans-serif; - font-weight: 600; - margin: 1em 0 0.5em 0; - color: var(--text-color); -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; -} - -h3 { - font-size: 1.5em; -} - -p { - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -ul, ol { - margin: 0 0 1em 1.5em; -} - -code { - font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - background-color: var(--sidebar-background); - border-radius: 3px; - font-size: 0.9em; -} - -pre { - background-color: var(--sidebar-background); - padding: 1em; - border-radius: 5px; - overflow-x: auto; - margin-bottom: 1em; -} - -pre code { - background-color: transparent; - padding: 0; -} - -img { - max-width: 100%; - max-height: 800px; - height: auto; - width: auto; -} - -.h-100 { - height: 100%; -} - -.w-100 { - width: 100%; -} - -img { - margin-left: auto; - margin-right: auto; -} -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} -.copy-link { - background: none; - border: none; - cursor: pointer; - padding-top: 0.3em; - margin-left: 0; - opacity: 50%; - width: 1em; - height: 1em; - transform-origin: center 60%; - transition: transform 0.5s ease; -} - -.copy-link:hover { - transform: scale(1.5); -} - -@keyframes spin { - to { - transform: scale(1.5) rotate(360deg); - } -} - -.branch-overlay { - pointer-events: none; - display: block; - font-size: 4em; - color: #FF808080; - z-index: 99999; - position: fixed; - bottom: 0; - right: 100px; -} - -.spin-once { - animation: spin 0.5s linear; -} - -.external-link { - background: none; - border: none; - cursor: pointer; - vertical-align: middle; - padding-bottom: 0.1em; - margin-left: 0.2em; - width: 1.0em; - height: 1.0em; -} - -/* Sidebar */ -.sidebar-content { - background-color: var(--sidebar-background); - padding: 1.5em; - border-radius: 5px; -} - -.sidebar-content.scroll-trap { - top: calc(var(--nav-height) + 1em); - max-height: calc(100vh - var(--nav-height) - 2em); - position: sticky; - overflow-y: auto; - overflow-x: hidden; - & h3 { - margin-top: 0; - } -} - -.sidebar-logo { - margin-bottom: 1.5em; -} - -.sidebar-logo img { - height: 30px; -} - -.sidebar-search { - margin-bottom: 1.5em; -} - -.sidebar-search input { - width: 100%; - padding: 0.5em; - border: 1px solid var(--border-color); - border-radius: 4px; -} - - -.sidebar-nav h3 { - margin-top: 0; - margin-bottom: 0.5em; -} - -.sidebar-nav ul, .sidebar-nav ol { - list-style: disc; - margin: 0 0 0.5em; - - & ul { - list-style: none; - margin-bottom: 0; - margin-left: 0.75em; - } - & ol { - list-style: none; - margin-bottom: 0; - margin-left: 0.75em; - } -} - -.sidebar-nav li { - margin-bottom: 0.5em; - & li { - margin-bottom: 0; - } -} - -.sidebar-nav a { - display: block - padding: 0; - color: var(--link-accent); -} -.sidebar-nav a.active { - font-weight: bold; - color: var(--primary-color); -} - -.toc-separator { - overflow-wrap: break-word; -} - -.sidebar-contact { - border-top: 1px solid var(--border-color); - padding-top: 1.5em; -} - -.sidebar-social { - list-style: none; - margin: 0; -} - -.sidebar-social li { - margin-bottom: 0.5em; -} - -.sidebar-social a { - display: flex; - align-items: center; -} - -.sidebar-social i { - margin-right: 0.5em; -} - -/* Table of Contents in Sidebar */ -.page-toc { - list-style-type: none; - padding-left: 0; - margin-bottom: 1.5rem; - font-size: 0.9rem; -} - -.toc-sort-button { - z-index: 1001; - right: 0.7rem; - top: 1.5em; - background: none; - border: none; - cursor: pointer; - transition: all 0.2s ease; - position: absolute; -} -[data-toc-sort="alphabetic"] .toc-alphabetic { - display: block; -} -[data-toc-sort="alphabetic"] .toc-linear { - display: none; -} - -[data-toc-sort]:not([data-toc-sort="alphabetic"]) .toc-alphabetic { - display: none; -} - -[data-toc-sort]:not([data-toc-sort="alphabetic"]) .toc-linear { - display: block; -} - -.page-toc ul { - list-style-type: none; - padding-left: 1rem; - margin-top: 0.25rem; -} - -.toc-item { - margin-bottom: 0.25rem; -} - -.toc-level-1 > a { - font-weight: 600; -} - -.toc-level-2 > a { - font-weight: 500; -} - -.toc-level-3 > a, -.toc-level-4 > a, -.toc-level-5 > a, -.toc-level-6 > a { - font-weight: normal; -} - -.page-toc a { - color: var(--text-color); - display: block; - text-decoration: none; - border-left: 2px solid transparent; - padding: 0.2rem 0 0.2rem 0.5rem; - transition: all 0.2s ease; -} - -.page-toc a:hover { - color: var(--primary-color); - border-left-color: var(--primary-color); - text-decoration: none; -} - -/* Active TOC item */ -.page-toc a.active { - color: var(--primary-color); - border-left-color: var(--primary-color); - font-weight: 600; -} - -/* Navigation */ -.nav-container { - background-color: var(--nav-bg); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - position: fixed; - top: 0; - width: 100%; - z-index: 1000; - transition: var(--nav-transition-down); -} - -.nav-container.nav-scrolling-up { - transition: var(--nav-transition-up); -} - -.nav-container.nav-hidden { - transform: translateY(-100%); -} - -.sticky-nav { - max-width: var(--max-page-width); - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.5em 2em 0.5em 3em; - margin: 0 auto; - background-color: var(--nav-bg); - color: var(--nav-text); -} - -.sticky-nav button svg { - height: 1.1em; - width: 1.1em; - margin-right: 0.5em; - & path { - fill: var(--text-color); - } -} -.nav-logo img, .nav-logo svg { - height: 30px; - max-width: 150px; - padding: 0; - width: fit-content; -} - -.nav-links { - display: flex; - align-items: center; -} - -.hamburger-button { - display: none; - background: none; - border: none; - cursor: pointer; - z-index: 1001; - padding: 10px; -} - -.hamburger-button span { - display: block; - width: 25px; - height: 3px; - background-color: var(--nav-text); - margin: 5px 0; - transition: transform 0.3s ease, opacity 0.3s ease; -} - -.hamburger-button[aria-expanded="true"] span:nth-child(1) { - transform: translateY(8px) rotate(45deg); -} - -.hamburger-button[aria-expanded="true"] span:nth-child(2) { - opacity: 0; -} - -.hamburger-button[aria-expanded="true"] span:nth-child(3) { - transform: translateY(-8px) rotate(-45deg); -} - -.toc-button { - background: none; - border: none; - cursor: pointer; - padding: 10px; - margin-right: 10px; - margin-bottom: -10px; - color: var(--nav-text); - font-size: 1.5rem; - display: none; -} - -.dropdown { - position: relative; - margin-right: 1em; -} - -.dropbtn { - background-color: transparent; - color: var(--nav-text); - border: none; - cursor: pointer; - padding: 0.5em 1em; - font-size: 1em; -} - -.dropdown-content { - display: none; - position: absolute; - background-color: var(--dropdown-bg); - min-width: 200px; - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1); - z-index: 1; - border-radius: 4px; -} - -.dropdown-content a { - color: var(--link-accent); - padding: 0.75em 1em; - display: block; -} - -.dropdown-content a:hover { - background-color: var(--sidebar-background); - color: var(--nav-text); -} - -/* Search Box Styles */ -.nav-search { - margin-left: 20px; - position: relative; -} - -#nav-search-container { - position: relative; - display: inline-block; -} - -.nav-search .pagefind-ui__form { - margin: 0; -} - -.nav-search .pagefind-ui__search-input { - height: 36px; - padding: 0 36px 0 12px; /* Right padding for clear button */ - border-radius: 18px; - border: 1px solid #ddd; - font-size: 14px; - width: 180px; - transition: width 0.3s 0.1s; - background-color: #f5f5f5; -} - -.nav-search .pagefind-ui__search-input:focus { - width: 220px; - outline: none; - border-color: #03a9f4; -} - -.pagefind-modular-list-result { - overflow-wrap: anywhere; -} - -/* Clear button styling */ -.search-clear-button { - position: absolute; - right: 10px; - top: 8px; - background: none; - border: none; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - width: 20px; - height: 20px; - border-radius: 50%; - color: #666; - font-size: 12px; - transition: background-color 0.2s, color 0.2s; - z-index: 10; -} - -.search-clear-button:hover { - background-color: rgba(0, 0, 0, 0.1); - color: #333; -} - -.nav-search .pagefind-ui__search-clear { - width: 36px; - height: 36px; - background-position: center; - background-repeat: no-repeat; - background-size: 14px; -} - -.nav-search .pagefind-ui__drawer { - position: absolute; - top: var(--nav-height); - right: 0; - width: 400px; - max-height: 80vh; - overflow-y: auto; - background: var(--sidebar-background); - color: var(--text-color); - border-radius: 4px; - box-shadow: 0 8px 16px rgba(0,0,0,0.1); - z-index: 1002; - padding: 15px; -} - -/* Search Results Styles */ -#nav-search-results { - display: none; - position: absolute; - top: var(--nav-height); - right: 0; - width: 400px; - max-height: 80vh; - overflow-y: auto; - background: var(--sidebar-background); - color: var(--text-color); - border-radius: 4px; - box-shadow: 0 8px 16px rgba(0,0,0,0.1); - z-index: 1002; - padding: 15px; -} - - -/* Theme toggle */ -.theme-toggle { - margin-right: 1rem; - background: none; - border: none; - color: var(--text-color); - cursor: pointer; - padding: 0.5rem; - border-radius: 50%; - transition: all 0.2s ease; -} - -.theme-toggle:hover { - color: var(--link-accent); - background: rgba(255, 255, 255, 0.1); -} - -.theme-toggle .sun-icon, -.theme-toggle .moon-icon { - display: none; -} - -[data-theme="dark"] .moon-icon, -[data-theme="light"] .sun-icon { - display: block; -} - -[data-theme="dark"] { - - .dark-invert img { - filter: invert(1); - } - - img.dark-invert { - filter: invert(1.0); - } - svg.dark-invert { - filter: invert(1.0); - } - .sticky-nav { - background-color: #222b36; - color: #f1f1f1; - box-shadow: 0 2px 4px rgba(0,0,0,0.6); - } - - .nav-links a, .dropbtn { - color: #f1f1f1; - } - - .nav-links a:hover, .dropbtn:hover { - color: #fff; - } - - .hamburger-button span { - background-color: #f1f1f1; - } - - .toc-button { - color: #f1f1f1; - } - - .content { - background: #181c20; - color: #ffffff; - overflow: auto; - } - - .dropdown-content { - background: #23272e; - color: #f1f1f1; - box-shadow: 0 8px 16px rgba(0,0,0,0.7); - } - - .dropdown-content a { - color: #99e6fc; - } - - .dropdown-content a:hover { - background: #1f2937; - color: #fff; - } - - .footer, .footer-content { - background: #181c20; - color: #f1f1f1; - } - - .footer a { - color: #99e6fc; - } - - .footer a:hover { - color: var(--nav-text); - } - - .note, .tip, .warning, .caution, .important { - color: #fff; - border-color: #00979d; - } - - .overlay { - background: rgba(20,20,20,0.7); - } - - #nav-search-results, .nav-search .pagefind-ui__drawer { - background: #23272e; - color: #f1f1f1; - } - - - .feature-icon { - color: var(--feature-icon-color) !important; - } - .feature-card h2, .feature-card h3, .feature-card p { - color: var(--feature-card-text) !important; - } - - .feature-card a:hover { - color: var(--link-accent) !important; - } - - .getting-started-block, - .getting-started-grid > div { - background: var(--getting-started-bg) !important; - color: var(--getting-started-text) !important; - border-color: #333; - box-shadow: 0 2px 8px rgba(0,0,0,0.5); - } -} - -.footer-heading { - font-size: 1.5em; - color: var(--footer-text); -} -.getting-started-heading { - font-size: 1.5em; - color: var(--getting-started-text); -} - -.page-container { - display: flex; - flex-direction: column; - min-height: 100vh; /* full viewport height */ - width: 100%; -} - -/* Main content */ -main { - max-width: var(--max-page-width); - width: 100%; - margin: 0 auto; - padding-bottom: 2em; - padding-left: 2em; - padding-right: 2em; - padding-top: 0; - margin-top: var(--nav-height); /* Add space for the fixed header */ - flex: 1; -} - -.content-container { - display: flex; - gap: 2em; -} - -.sidebar { - width: 300px; - flex-shrink: 0; - background-color: var(--sidebar-background); - color: var(--text-color); - border-color: var(--border-color); -} - -.sidebar-resource svg, .sidebar-resource img { - height: .8em; - width: .8em; - margin-right: 0.5em; - & path { - fill: var(--link-accent); - } -} - -.content { - flex-grow: 1; - overflow: hidden; -} - -.content svg { - max-width: 600px; -} - -/* Home page */ -.hero-container { - display: flex; - align-items: center; -} - -.hero-content { - flex: 1; - margin: 1em; -} - -.hero-img { - flex: 1; - text-align: center; - max-width: 800px; -} - -.casita { - fill: var(--logo-casita-color, #18BCF2); -} - -.hero-img img { - max-width: 100%; -} - -.cta-container { - background-color: transparent; - color: white; - padding: 2em; - border-radius: 5px; - text-align: center; -} - -.cta-buttons { - display: flex; - justify-content: space-evenly; - gap: 1em; - margin-top: 1em; -} -.cta-buttons a { - white-space: nowrap; -} - -.btn { - padding: 0.75em 1.5em; - border-radius: 4px; - font-weight: bold; - text-align: center; - cursor: pointer; - transition: background-color 0.3s; - display: flex; - align-items: center; /* vertical centering */ - justify-content: center; /* horizontal centering */ - -} - -.btn-primary { - background-color: var(--btn-primary-color); - color: white; -} - -.btn-primary:hover { - background-color: var(--btn-primary-hover-color); - text-decoration: none; -} - -.btn-secondary { - background-color: var(--btn-secondary-color); - color: var(--text-color); - border: 2px solid var(--btn-primary-color); -} - -.btn-secondary:hover { - text-decoration: none; - background-color: var(--btn-secondary-hover-color); -} - -.home-section { - margin-bottom: 3em; -} - -summary::marker { - font-size: 1.5em; -} -summary h4.shown { - margin-left: 1em; - display: inline; -} - - -blockquote { - border-left: .25em solid var(--blockquote-border); - padding: 0.5em 1em; - margin: 1em 0; - background-color: var(--blockquote-bg); -} - -blockquote.alert-caution { - border-left-color: var(--alert-caution); -} - -blockquote.alert-caution p.alert-heading { - color: var(--alert-caution); -} - -blockquote.alert-important { - border-left-color: var(--alert-important); -} - -blockquote.alert-important p.alert-heading { - color: var(--alert-important); -} - -blockquote.alert-note { - border-left-color: var(--alert-note); -} - -blockquote.alert-note p.alert-heading { - color: var(--alert-note); -} - -blockquote.alert-tip { - border-left-color: var(--alert-tip); -} - -blockquote.alert-tip p.alert-heading { - color: var(--alert-tip); -} - -blockquote.alert-warning { - border-left-color: var(--alert-warning); -} - -blockquote.alert-warning p.alert-heading { - color: var(--alert-warning); -} - - -.alert p.alert-heading { - font-weight: bold; - margin: 0.5em 0; -} - -.option { - padding-top: 0.2em; - padding-left: 1em; - padding-right: 1em; - padding-bottom: 1em; -} - -.option-title { - display: block; - padding-bottom: 1em; -} - -.feature-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 2em; - margin-bottom: 1em; - margin-top: 2em; -} - -.feature-card { - background: var(--feature-card-bg); - color: var(--feature-card-text); - border-color: var(--border-color); - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - padding: 1.5em; - border-radius: 5px; - display: flex; - flex-direction: column; - justify-content: space-between; -} - -.feature-icon { - font-size: 2em; - color: var(--primary-color); - margin-bottom: 0.5em; -} - -.feature-icon svg { - height: 1.5em; - width: 1.5em; - & path { - fill: var(--esphome-color); - } -} - -.feature-text { - font-weight: bold; - margin-bottom: 0.5em; -} - -.getting-started-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 2em; -} - -.getting-started-card { - padding: 1.5em; - border-radius: 5px; - background: var(--getting-started-bg) !important; - color: var(--getting-started-text) !important; - border-color: var(--border-color); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); -} - -.getting-started-card h3 { - margin-top: 0; -} - -.getting-started-card .btn { - margin-top: 1em; -} - -/* Footer */ -footer { - background-color: var(--footer-bg); - color: var(--footer-text); -} - -.footer-content { - padding: 2em 2em 1em; - max-width: var(--max-page-width); - margin: 0 auto; - display: flex; - flex-wrap: wrap; - gap: 2em; - position: relative; -} - -.footer-links { - display: flex; - flex-flow: row wrap; - gap: 2em; - justify-content: center; - margin-left: auto; - margin-right: auto; -} -.footer-logo { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - flex-grow: 2; -} - -.footer-logo div { - min-height: 200px; -} - -.footer-logo img { - width: 220px; - height: 49px; -} - -.footer-content a { - color: var(--esphome-color); -} - -.footer-column h3 { - color: white; - margin-top: 0; - margin-bottom: 1em; -} - -.footer-column ul { - list-style: none; - margin: 0; -} - -.footer-column li { - margin-bottom: 0.5em; -} - -.footer-column svg { - height: 0.9em; - width: 0.9em; - margin-right: 0.5em; - & path { - fill: var(--esphome-color); - } -} - -.footer-bottom { - max-width: 1800px; - margin: 2em auto 0; - padding-top: 1em; - border-top: 1px solid #555; - text-align: center; - color: #ccc; -} - -.push-right { - margin-left: auto; -} - -/* Components page */ -.component-grid { - display: flex; - flex-flow: row wrap; - gap: 0.5em; - margin-bottom: 2em; -} - -.cta-buttons { - display: flex; - flex-flow: row wrap; - justify-content: center; - gap: 1em; -} - -.cta-buttons .btn { - flex: 1 1 200px; /* base width but can grow and shrink */ -} - - -.component-card { - background-color: var(--component-card-bg); - border-radius: 5px; - padding: 0.5em; - text-align: center; - overflow-wrap: break-word; - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; - width: fit-content; - - color: var(--component-card-text); - border-color: var(--border-color); - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); - transition: transform 0.2s; -} - -.component-card a { - width: 100%; - max-width: 120px; - height: 100%; - display: flex; - flex-direction: column; - position: relative; -} - -.component-card:hover { - transform: translateY(-5px); -} - -.component-icon img { - width: 120px; - height: 130px; - object-fit: contain; -} - -.component-name { - font-weight: bold; - min-height: 3.5rem; - line-height: 1.3rem; -} - -.component-card h2, .component-card h3, .component-card p, .component-card a { - color: var(--component-card-text) !important; -} - -.component-card a:hover { - color: var(--link-accent) !important; -} - -/* Figure and caption styling */ -figure { - margin-bottom: 1.0em; - margin-left: auto; - margin-right: auto; -} - -figure img { - max-height: 500px; - object-fit: contain; - width: auto; - border-radius: 5px; -} - -figcaption { - margin-top: 0.75em; - font-size: 0.9em; - color: #666; - font-style: italic; - line-height: 1.4; - max-width: 80%; - margin-left: auto; - margin-right: auto; -} - -.center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.overlay { - position: fixed; - inset: 0; - background: rgba(20,20,20,0.07); - display: none; -} - -.overlay.show { - display: block; -} - -@media (min-width: 1001px) { - .overlay.show, .sidebar-mobile { - display: none; - } - .dropdown:hover .dropdown-content { - display: block; - } -} - -/* Mobile, narrow screen. Open menu inline, hide some items */ -@media (max-width: 700px) { - .desktop-only { - display: none; - } - .dropdown-content { - position: relative; - width: 100%; - top: 0; - right: 0; - } - .nav-links.active { - overflow-y: auto; - } -} - -/* Responsive */ -/* @media (max-width: var(--mobile-width-stop)) { // sadly does not work */ -@media (max-width: 1000px) { - .sidebar-fixed { - display: none; - } - .sidebar-mobile { - margin-top: var(--nav-height); /* Add space for the fixed header */ - } - .sticky-nav { - padding: 0.5em 1em; - } - - .toc-button { - transform-origin: 40% 45%; - transform: rotate(0deg); - transition: transform 0.3s ease; - } - .toc-button.open { - transform: rotate(180deg); - } - .theme-toggle { - margin-right: 0; - } - - .hamburger-button { - display: block; - } - - .nav-search { - margin-left: auto; - margin-right: 10px; - position: relative; - } - - .nav-links { - position: absolute; - top: 100%; - right: 0; - background-color: var(--nav-bg); - flex-direction: column; - align-items: stretch; - padding: 1em; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - z-index: 0; - display: none; - height: 0; - scrollbar-width: none; /* Firefox */ - -ms-overflow-style: none; /* Internet Explorer 10+ */ - } - - .nav-links.active { - display: flex; - opacity: 100%; - z-index: 1000; - height: fit-content; - max-height: 100vh; - transition: height 0.3s ease, opacity 0.3s ease; - } - - .dropdown { - position: relative; - margin-right: 0; - margin-bottom: 1em; - width: 100%; - } - - .dropbtn { - width: 100%; - position: relative; - text-align: right; - padding: 0.75em 1em; - } - - .dropdown-content { - position: absolute; - top: 0; - right: 200px; - box-shadow: none; - margin-top: 0.5em; - padding-left: 1em; - padding-right: 1em; - } - - .dropdown-content a { - padding: 0.5em 1em; - } - - .content-container { - flex-direction: column; - } - - .toc-button { - display: block; - } - - .sidebar-content { - position: static; - } - - .hero-container { - flex-direction: column; - text-align: center; - } - - .hero-content { - margin-bottom: 2em; - } - - .sidebar { - position: fixed; - top: 0; - left: -100%; /* hide off-screen */ - width: 80%; - height: 100%; - transition: left 0.3s ease; - padding: 1rem; - padding-left: 3rem; - overflow-y: auto; - } - .sidebar.open { - left: 0; - z-index: 1; - } -} - -details { - interpolate-size: allow-keywords; -} -details::details-content { - block-size: 0; - transition: content-visibility, block-size; - transition-duration: 0.5s; - transition-behavior: allow-discrete; - overflow: hidden; -} -details[open]::details-content { - block-size: auto; -} -details { - background-color: var(--sidebar-background); - padding: 1em; -} - -@media (prefers-reduced-motion) { - /* styles to apply if a user's device settings are set to reduced motion */ - - details::details-content { - transition-duration: 0.8s; /* slower speed */ - } -} - -.code-block { - position: relative; - clear: both; -} - -.copy-button.copied .copy-feedback { - opacity: 1; -} - -.copy-button { - position: absolute; - top: 0.75rem; - right: 0.75rem; - padding: 0.5rem; - background: var(--feature-card-bg); - border: 1px solid var(--border-color); - border-radius: 4px; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - color: var(--text-color); - transition: all 0.2s ease; - z-index: 1; -} - -.copy-button:hover { - background-color: var(--btn-secondary-hover-color); -} - -.copy-button svg { - width: 16px; - height: 16px; -} - -.copy-feedback { - position: absolute; - right: calc(100% + 0.5rem); - top: 50%; - transform: translateY(-50%); - background: var(--text-color); - color: var(--feature-card-bg); - padding: 0.25rem 0.5rem; - border-radius: 4px; - font-size: 0.875rem; - opacity: 0; - pointer-events: none; - transition: opacity 0.2s ease; -} - -.build-info { - position: absolute; - text-align: left; - top: 0.5rem; - left: 0.5rem; -} - -.build-info-button { - background-color: rgba(255, 255, 255, 0.1); - color: #ffffff; - border: none; - padding: 8px 12px; - border-radius: 4px; - cursor: pointer; - display: inline-flex; - align-items: center; - gap: 6px; - font-size: 14px; - transition: background-color 0.3s; -} - -.build-info-button:hover { - background-color: rgba(255, 255, 255, 0.2); -} - -.build-info-popup { - display: none; - position: fixed; - z-index: 1000; - left: 0; - top: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); -} - -.build-info-content { - background-color: var(--background-color); - color: var(--text-color); - margin: 15% auto; - padding: 20px; - border: 1px solid var(--border-color); - border-radius: 8px; - width: 80%; - max-width: 500px; - position: relative; - display: flex; - flex-flow: column; - align-items: center; -} - -.build-info-close { - color: var(--text-color); - position: absolute; - right: 10px; - top: 0; - font-size: 28px; - font-weight: bold; - cursor: pointer; -} - -.build-info-close:hover { - color: var(--primary-color); -} - -.build-info-content h4 { - margin-top: 0; - color: var(--text-color); -} - -.build-info-content p { - margin: 10px 0; -} - -.build-info-content a { - color: var(--link-accent); -} - -@media (max-width: 768px) { - .build-info-content { - width: 90%; - margin: 30% auto; - } -} - -.build-info-grid { - display: grid; - grid-template-columns: 1fr 2fr; - gap: 10px; - margin-top: 15px; -} - -.build-info-label { - text-align: right; - font-weight: bold; - padding-right: 10px; -} - -.build-info-value { - text-align: left; -} - -.header-print, .footer-logo-print { - display: none; -} - -@media print { - .nav-container, footer, .sidebar, .copy-button { - display: none; - } - [aria-hidden="true"] { - display: none; - } - .footer-logo-print { - display: block; - } - .header-print { - display: block; - margin-left: auto; - margin-right: auto; - width: 200px; - } -} diff --git a/themes/esphome-theme/assets/css/tables.css b/themes/esphome-theme/assets/css/tables.css deleted file mode 100644 index c643349a72..0000000000 --- a/themes/esphome-theme/assets/css/tables.css +++ /dev/null @@ -1,104 +0,0 @@ -/* Table color variables */ -:root { - --table-border-color: #e0e0e0; - --table-header-bg: #00979d; - --table-header-text: #fff; - --table-code-bg: rgba(0, 0, 0, 0.05); - --table-row-alt-bg: #f8f8f8; - --table-hover-bg: rgba(0, 151, 157, 0.05); -} -[data-theme="dark"] { - --table-border-color: #333b3d; - --table-header-bg: #1abfc6; - --table-header-text: #111; - --table-code-bg: rgba(255,255,255,0.08); - --table-row-alt-bg: #232728; - --table-hover-bg: rgba(26, 191, 198, 0.08); -} - -/* Table styling for ESPHome documentation */ -table { - max-width: 100%; - width: auto; - border-collapse: collapse; - margin: 1.5em 0; - font-size: 0.9em; - border: 1px solid var(--table-border-color); - table-layout: auto; -} - - -/* Basic cell styling */ -table td, -table th { - padding: 10px 15px; - border: 1px solid var(--table-border-color); - vertical-align: top; -} - -/* All table headers should have this styling */ -table th { - background-color: var(--table-header-bg); - color: var(--table-header-text); - font-weight: bold; -} - -/* For Markdown tables where the first row contains th elements */ -table tr:first-child th { - background-color: var(--table-header-bg); - color: var(--table-header-text); - font-weight: bold; -} - -/* Override code styling within table headers */ -table th code, -table tr:first-child th code { - background-color: transparent; - color: var(--table-header-text); - padding: 0; - font-weight: bold; - border-radius: 0; -} - -/* Style for code in table cells */ -table td code { - background-color: var(--table-code-bg); - padding: 0.2em 0.4em; - border-radius: 3px; - font-size: 0.9em; -} - -/* Alternating row colors for better readability */ -table tr:nth-child(even) { - background-color: var(--table-row-alt-bg); -} - -/* But header rows should always have the header background */ -table tr:nth-child(even) th { - background-color: var(--table-header-bg); -} - -/* Hover effect */ -table tr:hover td { - background-color: var(--table-hover-bg); -} - -/* Style for centered tables */ -table th[align="center"], -table td[align="center"] { - text-align: center; -} - -/* Style for right-aligned tables */ -table th[align="right"], -table td[align="right"] { - text-align: right; -} - -/* Responsive tables for smaller screens */ -@media (max-width: 600px) { - table { - display: block; - overflow-x: auto; - } -} diff --git a/themes/esphome-theme/assets/js/lazysizes.min.js b/themes/esphome-theme/assets/js/lazysizes.min.js deleted file mode 100644 index 1661552948..0000000000 --- a/themes/esphome-theme/assets/js/lazysizes.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! lazysizes - v5.3.2 */ - -!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&pa.top-1&&g500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n { - const scrollTop = el.scrollTop; - const scrollHeight = el.scrollHeight; - const offsetHeight = el.offsetHeight; - const delta = e.deltaY; - - const atTop = scrollTop === 0; - const atBottom = scrollTop + offsetHeight >= scrollHeight; - - if ((atTop && delta < 0) || (atBottom && delta > 0)) { - e.preventDefault(); - } - }, {passive: false}); -} - -function trapTouchScroll(el) { - let startY = 0; - - el.addEventListener('touchstart', (e) => { - startY = e.touches[0].clientY; - }, {passive: true}); - - el.addEventListener('touchmove', (e) => { - const scrollTop = el.scrollTop; - const scrollHeight = el.scrollHeight; - const offsetHeight = el.offsetHeight; - const currentY = e.touches[0].clientY; - const deltaY = currentY - startY; - - const atTop = scrollTop === 0; - const atBottom = scrollTop + offsetHeight >= scrollHeight; - - if ((atTop && deltaY > 0) || (atBottom && deltaY < 0)) { - e.preventDefault(); - } - }, {passive: true}); -} - -function printCleanup(originalSrcs) { - window.addEventListener('afterprint', () => { - originalSrcs.forEach((base64Src, img) => { - // Restore only if its src was changed for print - if (img.dataset.src && img.src !== base64Src) { - img.src = base64Src; // Restore the base64 thumbnail - img.classList.remove("loaded-for-print"); - img.classList.remove("loading-for-print"); - img.classList.remove("loaded"); // If you use this class - } - }); - }, {once: true}); -} - -function prepareAndPrint() { - let originalSrcs = new Map(); // Store original base64 srcs - const imagesToLoad = document.querySelectorAll("img.lazyload[data-src]"); - let imagesLoadedCount = 0; - const totalImages = imagesToLoad.length; - console.log(`Starting image preload for print., ${totalImages} images found.`); - - if (totalImages === 0) { - return; - } - - imagesToLoad.forEach(img => { - if (!originalSrcs.has(img)) { - originalSrcs.set(img, img.src); // Store the current (thumbnail) src - } - - // If the image is already loaded (from scrolling), don't re-trigger onload - if (img.src === img.dataset.src) { - imagesLoadedCount++; // Count it as already loaded - } else { - // Temporarily set the src to trigger download - img.src = img.dataset.src; - img.srcset = img.dataset.srcset; - img.classList.add("loading-for-print"); // Add a class for visual feedback if needed - img.classList.remove("lazyload"); - - // Use an onload listener to track completion - const handleLoad = () => { - imagesLoadedCount++; - img.removeEventListener('load', handleLoad); // Remove listener to prevent multiple calls - img.classList.remove("loading-for-print"); - img.classList.add("loaded-for-print"); - - if (imagesLoadedCount === totalImages) { - // All images are loaded, now trigger print - printCleanup(originalSrcs); - } - }; - img.addEventListener('load', handleLoad); - // Add an error listener too, just in case an image fails to load - img.addEventListener('error', () => { - console.error(` - Failed to load image: ${img.dataset.src}. Proceeding with print.`); - imagesLoadedCount++; // Still count it to unblock printing - img.removeEventListener('load', handleLoad); // Clean up load listener - img.classList.remove("loading-for-print"); - img.classList.add("failed-to-load-for-print"); - if (imagesLoadedCount === totalImages) { - printCleanup(originalSrcs); - } - }); - } - }); - - // Handle case where all images were already loaded (e.g., after scrolling) - if (imagesLoadedCount === totalImages) { - printCleanup(originalSrcs); - } -} - - -document.addEventListener('DOMContentLoaded', function () { - - const scrollers = document.querySelectorAll('.scroll-trap'); - - for (let i = 0; i !== scrollers.length; i++) { - trapScroll(scrollers[i]); - trapTouchScroll(scrollers[i]); - } - - window.addEventListener("beforeprint", (event) => { - event.preventDefault(); - prepareAndPrint(); } - ); - - document.querySelectorAll('.copy-link').forEach(button => { - button.addEventListener('click', async () => { - const anchor = button.getAttribute('data-anchor'); - const url = `${window.location.origin}${window.location.pathname}#${anchor}`; - await navigator.clipboard.writeText(url) - // Remove the class if it’s already there (to restart the animation) - button.classList.remove('spin-once'); - - // Trigger reflow to "restart" the animation - void button.offsetWidth; - - // Add the class to trigger the spin - button.classList.add('spin-once'); - }); - }); - - - - // Copy button functionality - const copyButtons = document.querySelectorAll('.copy-button'); - copyButtons.forEach(button => { - button.addEventListener('click', async () => { - const codeBlock = button.closest('.code-block'); - const yamlContent = codeBlock.querySelector('.codeblock-content'); - const code = yamlContent.textContent; - - try { - await navigator.clipboard.writeText(code); - const feedback = button.querySelector(".copy-feedback"); - if (feedback) { - feedback.textContent = "Copied!"; - } - button.classList.add('copied'); - setTimeout(() => { - button.classList.remove('copied'); - }, 2000); - } catch (err) { - console.error('Failed to copy:', err); - } - }); - }); - - const scrollThreshold = 5; // Minimum scroll amount before triggering hide/show - const navContainer = document.getElementById('nav-container'); - let scrollDelta = 0; // Track cumulative scroll amount - let lastScrollTop = 0; - - - function scroll_bar(newDelta) { - let navHeight = navContainer.offsetHeight; - // Remove the transition class when scrolling down for direct tracking - navContainer.classList.remove('nav-scrolling-up'); - - // Increase the scroll delta by the amount scrolled - start immediately from top - scrollDelta += newDelta; - - // Cap the scroll delta at the nav height - scrollDelta = Math.min(scrollDelta, navHeight); - - // Apply the transform - navContainer.style.transform = `translateY(-${scrollDelta}px)`; - - // If fully hidden, add the nav-hidden class - if (scrollDelta >= navHeight) { - navContainer.classList.add('nav-hidden'); - } - } - - // Header scroll behavior - let ticking = false; // Flag to prevent multiple rAF calls - let tocScroll = false; - let scrollEndTimeout = null; - - - function handleScroll() { - if (tocScroll) { - clearTimeout(scrollEndTimeout); - scrollEndTimeout = setTimeout( () => { tocScroll = false; }, 100); - ticking = false; - return; - } - const currentScrollTop = window.scrollY || document.documentElement.scrollTop; - - // Check if we've scrolled more than the threshold - if (Math.abs(lastScrollTop - currentScrollTop) <= scrollThreshold) { - ticking = false; - return; - } - - // Scrolling down - directly track the scroll position - if (currentScrollTop > lastScrollTop) { - scroll_bar(currentScrollTop - lastScrollTop); - } - // Scrolling up - smooth transition back - else if (currentScrollTop < lastScrollTop) { - // Reset the scroll delta - scrollDelta = 0; - - // Add transition class for smooth appearance - navContainer.classList.add('nav-scrolling-up'); - navContainer.classList.remove('nav-hidden'); - navContainer.style.transform = 'translateY(0)'; - } - - lastScrollTop = currentScrollTop; - ticking = false; - } - - // Use requestAnimationFrame for better performance - window.addEventListener('scroll', function () { - if (!ticking) { - requestAnimationFrame(handleScroll); - ticking = true; - } - }); - - const buildInfoButton = document.getElementById('build-info-button'); - const buildInfoPopup = document.getElementById('build-info-popup'); - const buildInfoClose = document.querySelector('.build-info-close'); - - if (buildInfoButton && buildInfoPopup) { - buildInfoButton.addEventListener('click', function() { - buildInfoPopup.style.display = 'block'; - }); - - buildInfoClose.addEventListener('click', function() { - buildInfoPopup.style.display = 'none'; - }); - - window.addEventListener('keydown', function(e) { - if (e.key === 'Escape' || e.key === 'Esc') { - buildInfoPopup.style.display = 'none'; - } - }); - - window.addEventListener('click', function(event) { - if (event.target === buildInfoPopup) { - buildInfoPopup.style.display = 'none'; - } - }); - } - - // Table of Contents highlighting - const tocLinks = document.querySelectorAll('.toc-entry'); - if (tocLinks.length > 0) { - // Get all headings that correspond to TOC entries - const headings = Array.from(tocLinks).map(link => { - const id = link.getAttribute('href').substring(1); - return document.getElementById(id); - }).filter(Boolean); - - // Add smooth scrolling to TOC links - tocLinks.forEach(link => { - link.addEventListener('click', function (e) { - e.preventDefault(); - closeTOC(); - const targetId = this.getAttribute('href').substring(1); - const targetElement = document.getElementById(targetId); - - if (targetElement) { - tocScroll = true; - window.scrollTo({ - top: targetElement.offsetTop - 80, // Offset for fixed header - behavior: 'smooth' - }); - scroll_bar(navContainer.offsetHeight); - - // Update URL hash without jumping - history.pushState(null, null, `#${targetId}`); - } - }); - }); - } - -}); - diff --git a/themes/esphome-theme/assets/js/menu.js b/themes/esphome-theme/assets/js/menu.js deleted file mode 100644 index 355b7af222..0000000000 --- a/themes/esphome-theme/assets/js/menu.js +++ /dev/null @@ -1,189 +0,0 @@ - -const bodystyle = window.getComputedStyle(document.body); -const mobileWidthStop = parseInt(bodystyle.getPropertyValue('--mobile-width-stop')); -function isMobileScreen() { - return (window.innerWidth <= mobileWidthStop); -} - -function closeMenu() { - const hamburger = document.querySelector('.hamburger-button'); - const navLinks = document.querySelector('.nav-links'); - navLinks.classList.remove('active'); - hamburger.classList.remove('active'); - hamburger.setAttribute('aria-expanded', 'false'); -} - -function openMenu() { - const hamburger = document.querySelector('.hamburger-button'); - const navLinks = document.querySelector('.nav-links'); - navLinks.classList.add('active'); - hamburger.classList.add('active'); - hamburger.setAttribute('aria-expanded', 'true'); -} -function openTOC() { - const tocToggle = document.getElementById('toc-toggle'); - if (!isMobileScreen() || !tocToggle) return; - const tocPanel = document.getElementsByClassName('sidebar-mobile')[0]; - const overlay = document.getElementById('overlay'); - tocToggle.classList.add('open'); - tocPanel.classList.add('open'); - overlay.classList.add('show'); -} - -function closeTOC() { - const tocToggle = document.getElementById('toc-toggle'); - if (!isMobileScreen() || !tocToggle) return; - const tocPanel = document.getElementsByClassName('sidebar-mobile')[0]; - const overlay = document.getElementById('overlay'); - tocToggle.classList.remove('open'); - tocPanel.classList.remove('open'); - overlay.classList.remove('show'); -} - -document.addEventListener('DOMContentLoaded', function() { - function setTocSort(sort) { - document.documentElement.setAttribute('data-toc-sort', sort); - localStorage.setItem('toc-sort', sort); - closeMenu(); - } - - const sortToggles = document.getElementsByClassName('toc-sort-button'); - Array.from(sortToggles).forEach(toggle => { - toggle.addEventListener('click', event => { - event.stopPropagation(); - const currentSort = document.documentElement.getAttribute('data-toc-sort'); - setTocSort(currentSort === 'alphabetic' ? 'linear' : 'alphabetic'); - }); - }); - - - function setTheme(theme) { - document.documentElement.setAttribute('data-theme', theme); - localStorage.setItem('theme', theme); - document.querySelector('.theme-toggle').setAttribute('aria-label', `Toggle ${theme === 'dark' ? 'light' : 'dark'} mode`); - closeMenu(); - } - - // Theme toggle functionality - const themeToggle = document.querySelector('.theme-toggle'); - themeToggle.addEventListener('click', () => { - const currentTheme = document.documentElement.getAttribute('data-theme'); - setTheme(currentTheme === 'dark' ? 'light' : 'dark'); - }); - - const tocToggle = document.getElementById('toc-toggle'); - const overlay = document.getElementById('overlay'); - if (tocToggle) - tocToggle.addEventListener('click',_ => { - if (tocToggle.classList.contains("open")) - closeTOC(); - else - openTOC(); - }); - if (overlay) - overlay.addEventListener('click', closeTOC); - const sidebarMobile = document.querySelectorAll('.sidebar-mobile'); - sidebarMobile.forEach(sidebar => { - sidebar.addEventListener("click", closeTOC); - }) - - const dropdownButtons = document.querySelectorAll('.dropdown button'); - - dropdownButtons.forEach(button => { - // Handle Enter and Space key presses - button.addEventListener('keydown', function(e) { - if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - toggleDropdown(this); - } - }); - - // Handle click events - button.addEventListener('click', function(e) { - if (!isMobileScreen()) return; - e.preventDefault(); - // Close others - dropdownButtons.forEach(function(otherBtn) { - if (otherBtn !== button) { - otherBtn.setAttribute('aria-expanded', 'false'); - if (otherBtn.nextElementSibling) { - otherBtn.nextElementSibling.style.display = 'none'; - } - } - }); - // Toggle this one - const expanded = button.getAttribute('aria-expanded') === 'true'; - button.setAttribute('aria-expanded', expanded ? "false" : "true"); - if (button.nextElementSibling) { - button.nextElementSibling.style.display = expanded ? 'none' : 'block'; - } - }); - }); - - // Close dropdowns when Escape key is pressed - document.addEventListener('keydown', e => { - if (e.key === 'Escape') { - closeAllDropdowns(); - closeTOC(); - } - }); - - // Close dropdowns when clicking outside - document.addEventListener('click', function(e) { - if (!e.target.matches('.dropbtn')) { - closeAllDropdowns(); - } - }); - - // Toggle dropdown function - function toggleDropdown(button) { - if (window.innerWidth > mobileWidthStop) return; - const isExpanded = button.getAttribute('aria-expanded') === 'true'; - closeAllDropdowns(); - - if (!isExpanded) { - button.setAttribute('aria-expanded', 'true'); - const dropdownContent = button.nextElementSibling; - dropdownContent.style.display = 'block'; - } - } - - // Close all dropdowns - function closeAllDropdowns() { - if (window.innerWidth > mobileWidthStop) return; - dropdownButtons.forEach(btn => { - btn.setAttribute('aria-expanded', 'false'); - const dropdownContent = btn.nextElementSibling; - if (dropdownContent) - dropdownContent.style.display = 'none'; - }); - } - - - const hamburger = document.querySelector('.hamburger-button'); - const navLinks = document.querySelector('.nav-links'); - if (!hamburger || !navLinks) return; - - hamburger.addEventListener('click', function(e) { - e.preventDefault(); - e.stopPropagation(); - hamburger.classList.toggle('active'); - navLinks.classList.toggle('active'); - const expanded = hamburger.getAttribute('aria-expanded') === 'true'; - hamburger.setAttribute('aria-expanded', expanded ? "false" : "true"); - closeTOC(); - }); - // Close menu on outside click (mobile only) - document.addEventListener('click', function(e) { - if (window.innerWidth > mobileWidthStop) return; - if (!e.target.closest('.hamburger-button') && !e.target.closest('.nav-links')) { - closeMenu(); - } - }); - // Close menu on resize to desktop - window.addEventListener('resize', function() { - if (window.innerWidth > mobileWidthStop) { - closeMenu(); - } - }); -}); diff --git a/themes/esphome-theme/assets/js/search.js b/themes/esphome-theme/assets/js/search.js deleted file mode 100644 index 2170658abc..0000000000 --- a/themes/esphome-theme/assets/js/search.js +++ /dev/null @@ -1,206 +0,0 @@ -// Search functionality - -document.addEventListener('DOMContentLoaded', function() { - if (typeof PagefindModularUI === 'undefined') { - console.error('PagefindModularUI library not loaded'); - return; - } - - class El { - constructor(tagname) { - this.element = document.createElement(tagname); - } - - id(s) { - this.element.id = s; - return this; - } - - class(s) { - this.element.classList.add(s); - return this; - } - - attrs(obj) { - for (const [k, v] of Object.entries(obj)) { - this.element.setAttribute(k, v); - } - return this; - } - - text(t) { - this.element.innerText = t; - return this; - } - - html(t) { - this.element.innerHTML = t; - return this; - } - - handle(e, f) { - this.element.addEventListener(e, f); - return this; - } - - addTo(el) { - if (el instanceof El) { - el.element.appendChild(this.element); - } else { - el.appendChild(this.element); - } - return this.element; - } - } - - function getLink(location, anchors, url) { - if (!anchors || !anchors.length) - return null; - // find the closest anchor at or before the current location - const anchor = anchors.sort((a, b) => b.location - a.location).find(a => a.location <= location); - if (anchor) { - return url + "#" + anchor.id; - } - return null; - } - - const resultTemplate = (result) => { - const wrapper = new El("li").class("pagefind-modular-list-result"); - wrapper.handle("click", closeResults); - - const locations = result.weighted_locations.sort((a, b) => b.weight - a.weight); - const url = getLink(locations[0]?.location, result.anchors, result.url) || result.meta?.url || result.url; - const thumb = new El("a").class("pagefind-modular-list-thumb").attrs({href: url}).addTo(wrapper); - let image = result?.meta?.image; - if (image && !image.toString().includes("images/icons/")) { - new El("img").class("pagefind-modular-list-image").attrs({ - src: image, - alt: result.meta.image_alt || result.meta.title - }).addTo(thumb); - } - - const inner = new El("div").class("pagefind-modular-list-inner").addTo(wrapper); - const title = new El("p").class("pagefind-modular-list-title").addTo(inner); - new El("a").class("pagefind-modular-list-link").text(result.meta?.title).attrs({ - href: result.meta?.url || result.url - }).addTo(title); - const excerpt =new El("a").class("pagefind-modular-list-link").attrs({ - href: url - }).addTo(inner); - new El("p").class("pagefind-modular-list-excerpt").html(result.excerpt).addTo(excerpt); - - return wrapper.element; - } - -// Create search input and container - const searchContainer = document.getElementById('nav-search-container'); - -// Create search input - const searchInput = document.createElement('input'); - searchInput.type = 'text'; - searchInput.id = "frontpage-search"; - searchInput.placeholder = 'Search...'; - searchInput.className = 'pagefind-ui__search-input'; - searchInput.ariaLabel = 'Search'; - searchContainer.appendChild(searchInput); - - const resultsContainer = document.getElementById('nav-search-results'); - - const instance = new PagefindModularUI.Instance({ - showSubResults: true, - showImages: false, - resetStyles: true, - ranking: { - pageLength: 0.0, - termSaturation: 1.6, - termFrequency: 0.4, - termSimilarity: 6.0 - } - }); - -// Add input component - instance.add(new PagefindModularUI.Input({ - inputElement: "#frontpage-search" - })); - -// Add results component - instance.add(new PagefindModularUI.ResultList({ - containerElement: "#nav-search-results", - resultTemplate: resultTemplate - })); - - - let top_hit = null; - - function closeResults() { - resultsContainer.style.display = 'none'; - top_hit = null; - } - -// Show/hide results - instance.on("results", async (results) => { - if (results.results.length) { - resultsContainer.style.display = 'block'; - const data = await results.results[0].data(); - top_hit = data.url; - } else { - closeResults(); - } - }); - - document.addEventListener('click', function (e) { - if (!e.target.closest('#nav-search-results')) { - closeResults(); - } - }); - - - -// Create clear button - const clearButton = document.createElement('button'); - clearButton.type = 'button'; - clearButton.className = 'search-clear-button'; - clearButton.textContent = "X"; - clearButton.style.display = 'none'; - searchContainer.appendChild(clearButton); - -// Show/hide clear button based on input content - searchInput.addEventListener('input', () => { - clearButton.style.display = searchInput.value.length > 0 ? 'flex' : 'none'; - }); - -// Clear search when button is clicked - clearButton.addEventListener('click', () => { - searchInput.value = ''; - clearButton.style.display = 'none'; - instance.triggerSearch(''); - resultsContainer.style.display = 'none'; - searchInput.focus(); // Re-focus the search box after clearing - }); - - document.addEventListener('keydown', function (event) { - if (!(searchInput === document.activeElement) && event.key === '/') { // Use '/' key as trigger - event.preventDefault(); // Prevent the '/' key from being entered in the search box - if (isMobileScreen()) - openMenu(); - searchInput.focus(); - } - }); - const navContainer = document.getElementById('nav-container'); - - searchInput.addEventListener('focusin', () => { - navContainer.style.transform = `translateY(0)`; - if (searchInput.value.length > 0) - setTimeout(_ => { instance.triggerSearch(searchInput.value); }, 400); - }); - searchInput.addEventListener('beforeinput', () => { - navContainer.style.transform = `translateY(0)`; - }); - searchInput.addEventListener('keydown', function (event) { - if (event.key === "Enter" && !!top_hit) { - window.location = top_hit; - top_hit = null; - } - }); - -}); diff --git a/themes/esphome-theme/layouts/_default/_markup/render-blockquote-alert.html b/themes/esphome-theme/layouts/_default/_markup/render-blockquote-alert.html deleted file mode 100644 index a569e6a66b..0000000000 --- a/themes/esphome-theme/layouts/_default/_markup/render-blockquote-alert.html +++ /dev/null @@ -1,19 +0,0 @@ -{{ $emojis := dict -"caution" ":exclamation:" -"important" ":information_source:" -"note" ":information_source:" -"tip" ":white_check_mark:" -"warning" ":warning:" -}} - -
    -

    - {{ transform.Emojify (index $emojis .AlertType) }} - {{ with .AlertTitle }} - {{ . }} - {{ else }} - {{ or (i18n .AlertType) (title .AlertType) }} - {{ end }} -

    - {{ .Text }} -
    diff --git a/themes/esphome-theme/layouts/_default/_markup/render-blockquote-regular.html b/themes/esphome-theme/layouts/_default/_markup/render-blockquote-regular.html deleted file mode 100644 index 652cb51153..0000000000 --- a/themes/esphome-theme/layouts/_default/_markup/render-blockquote-regular.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - {{ .Text }} -
    diff --git a/themes/esphome-theme/layouts/_default/_markup/render-codeblock.html b/themes/esphome-theme/layouts/_default/_markup/render-codeblock.html deleted file mode 100644 index 07aa077168..0000000000 --- a/themes/esphome-theme/layouts/_default/_markup/render-codeblock.html +++ /dev/null @@ -1,18 +0,0 @@ -
    - -
    - {{- $result := transform.HighlightCodeBlock . -}} - {{- $result.Wrapped -}} -
    -
    -{{ .Page.Store.Set "hasCode" true }} diff --git a/themes/esphome-theme/layouts/_default/_markup/render-heading.html b/themes/esphome-theme/layouts/_default/_markup/render-heading.html deleted file mode 100644 index a77b2f5b60..0000000000 --- a/themes/esphome-theme/layouts/_default/_markup/render-heading.html +++ /dev/null @@ -1,4 +0,0 @@ - - {{ .Text | safeHTML }} - - diff --git a/themes/esphome-theme/layouts/_default/_markup/render-passthrough.html b/themes/esphome-theme/layouts/_default/_markup/render-passthrough.html deleted file mode 100644 index ecca353ab7..0000000000 --- a/themes/esphome-theme/layouts/_default/_markup/render-passthrough.html +++ /dev/null @@ -1,18 +0,0 @@ -{{/* - MATH SHORTCODE - Formats equations - - Usage: - {{< math >}} - c = \\pm\\sqrt{a^2 + b^2}" - {{< /math >}} - - Content: - The content between the opening and closing shortcode tags will be formatted as maths -*/}} -{{ $opts := dict "output" "htmlAndMathml" }} -{{ if eq .Type "block" }} - {{ $opts = merge $opts (dict "displayMode" true) }} -{{ end }} -{{ transform.ToMath .Inner $opts }} -{{ .Page.Store.Set "hasMath" true }} diff --git a/themes/esphome-theme/layouts/_default/baseof.html b/themes/esphome-theme/layouts/_default/baseof.html deleted file mode 100644 index f32b84ed7a..0000000000 --- a/themes/esphome-theme/layouts/_default/baseof.html +++ /dev/null @@ -1,274 +0,0 @@ -{{- $branch := getenv "BRANCH" | default site.Params.branch -}} -{{ $parts := split $branch "/" }} -{{ if eq (index $parts 0) "pull" }} - {{ $branch = printf "pr#%s" (index $parts 1) }} -{{ end }} -{{- $repo_url := getenv "REPOSITORY_URL" | default site.Params.repo.url -}} -{{- $commit_hash := getenv "COMMIT_REF" | default site.Params.commit.hash -}} - - - - - - {{ if .IsHome }} - {{ partial "site-verification.html" . }} - {{ end }} - {{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} - {{ .Site.Title }}{{ end }} - {{ $seo := .Page.Param "seo" }} - {{ with $seo }} - {{ $src := $seo.image }} - - {{ with $seo.description | default .Page.Title | default .Site.Params.Description }} - - - - {{ end }} - - {{ if $src }} - {{/* Check if image exists in local images directory first */}} - {{- $localPath := printf "images/%s" $src -}} - {{- $componentPath := printf "%s/images/%s" (path.Dir .Page.File.Path) $src -}} - {{- $globalPath := printf "images/%s" $src -}} - {{- $imagePath := "" -}} - {{- if fileExists (printf "content/%s" $componentPath) -}} - {{- $imagePath = $componentPath -}} - {{- else if fileExists (printf "static/%s" $globalPath) -}} - {{- $imagePath = $globalPath -}} - {{- else -}} - {{- $imagePath = $src -}} - {{- end -}} - {{ with $imagePath }} - - - {{ end }} - {{ end }} - {{ end }} - - - - - - - - - - - - - - - - - - {{ partial "asset.html" (dict "path" "css/main.css" "defer" false) }} - {{ partial "asset.html" (dict "path" "css/tables.css" "defer" true) }} - {{ partial "asset.html" (dict "path" "pagefind/pagefind-modular-ui.css" "defer" true) }} - {{ block "head" . }}{{ end }} - - - -
    - - - -
    - - {{ block "main" . }}{{ end }} - {{ if ne $branch "current" }} - - {{ end }} -
    - -
    - - {{ if ne $branch "current" }} -
    -
    - × -

    Build Information

    -
    -
    Version:
    -
    {{ .Site.Data.version.version }}
    - {{ if ne .Site.Data.version.release .Site.Data.version.version }} -
    Release:
    -
    {{ .Site.Data.version.release }}
    - {{ end }} -
    Branch:
    -
    {{ $branch }}
    - - {{ $repo := strings.TrimSuffix ".git" $repo_url }} -
    Commit hash:
    - - -
    Message:
    -
    {{ .Site.Params.commit.title }}
    - -
    Build date:
    -
    {{ now.Format "2006-01-02" }}
    -
    -
    -
    - {{ end }} -
    - -
    - - - -{{ if .Store.Get "hasMath" }} - - - -{{ end }} - -{{ partial "asset.html" (dict "path" "/js/lazysizes.min.js" "defer" true) }} -{{ partial "asset.html" (dict "path" "/pagefind/pagefind-modular-ui.js" "defer" true) }} -{{ partial "asset.html" (dict "path" "/js/menu.js" "defer" true) }} -{{ partial "asset.html" (dict "path" "/js/search.js" "defer" true) }} -{{ partial "asset.html" (dict "path" "/js/main.js" "defer" true) }} - - -{{ if .Store.Get "hasCode" }} - {{ partial "asset.html" (dict "path" "css/chroma.css" "defer" true) }} -{{ end }} - -{{ block "scripts" . }}{{ end }} - - - diff --git a/themes/esphome-theme/layouts/_default/list.html b/themes/esphome-theme/layouts/_default/list.html deleted file mode 100644 index 944974e665..0000000000 --- a/themes/esphome-theme/layouts/_default/list.html +++ /dev/null @@ -1,47 +0,0 @@ -{{ define "main" }} -
    - {{ if .Content }} - -
    - {{ if eq .Title "ESPHome Docs" }} -

    {{ .Title }}

    - {{ $content := .Content }} - - {{/* Opening tags */}} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{/* h6 stays as h6 */}} - - {{/* Closing tags */}} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content = replaceRE `` `` $content }} - {{ $content | safeHTML }} - - {{ else }} -

    {{ .Title }}

    - {{ .Content }} - {{ end }} -
    -
    - - {{ else }} -
    -

    {{ .Title }}

    - {{ partial "sidebar.html" . }} -
    - {{ end }} -
    -{{ end }} diff --git a/themes/esphome-theme/layouts/_default/projects.html b/themes/esphome-theme/layouts/_default/projects.html deleted file mode 100644 index d215a0ec39..0000000000 --- a/themes/esphome-theme/layouts/_default/projects.html +++ /dev/null @@ -1,914 +0,0 @@ -{{ define "main" }} -
    - -
    - {{ $firstHeading := "" }} - {{ with (index (index .Fragments.Headings 0).Headings 0) }} - {{ $firstHeading = .Title }} - {{ end }} - - - {{ if ne .Title $firstHeading }} -

    {{ .Title }}

    - {{ end }} - - {{ .Content }} - - - - - -
    I want to create a:
    -
    - - - - - -
    - - - -
    -
    - Pick the device you want to turn into a Bluetooth proxy: -
    -
    - - - - - - -
    - -
    Start the installation:
    - - - - - - - - - - - - - - -

    For advanced users

    - -
    - - - - - -
    -
    - Pick the manufacturer of the device you want to set up: -
    - -
    - - -
    - - - - -
    - - - - -
    - - - -
    - -
    -{{ end }} diff --git a/themes/esphome-theme/layouts/_default/single.html b/themes/esphome-theme/layouts/_default/single.html deleted file mode 100644 index e1768f2301..0000000000 --- a/themes/esphome-theme/layouts/_default/single.html +++ /dev/null @@ -1,24 +0,0 @@ -{{ define "main" }} -
    - -
    - {{ $firstHeading := "" }} - {{ with (index (index .Fragments.Headings 0).Headings 0) }} - {{ $firstHeading = .Title }} - {{ end }} - - - {{ if ne .Title $firstHeading }} -

    {{ .Title }}

    - {{ end }} - - {{ .Content }} -
    -
    - -
    -{{ end }} diff --git a/themes/esphome-theme/layouts/index.componentsjson b/themes/esphome-theme/layouts/index.componentsjson deleted file mode 100644 index 3d0ce366c1..0000000000 --- a/themes/esphome-theme/layouts/index.componentsjson +++ /dev/null @@ -1,52 +0,0 @@ -{{- $components := dict -}} -{{- $baseURL := .Site.BaseURL -}} -{{- if eq $baseURL "" -}} - {{- $baseURL = "https://esphome.io" -}} -{{- end -}} - -{{- range .Site.Pages -}} - {{- if (in .RelPermalink "/components/") -}} - {{- $relPath := strings.TrimPrefix "/components/" .RelPermalink -}} - {{- $relPath = strings.TrimSuffix "/" $relPath -}} - - {{- if ne $relPath "" -}} - {{- $key := "" -}} - {{- $path := "" -}} - {{- $image := "" -}} - - {{- $pathParts := split $relPath "/" -}} - {{- if eq .File.BaseFileName "_index" -}} - {{- /* This is an _index page for a component category */ -}} - {{- if gt (len $pathParts) 0 -}} - {{- $parentDir := index $pathParts 0 -}} - {{- $key = $parentDir -}} - {{- $path = printf "components/%s" $parentDir -}} - {{- end -}} - {{- else if gt (len $pathParts) 1 -}} - {{- /* This is a component page in a subfolder */ -}} - {{- $parentDir := index $pathParts 0 -}} - {{- $fileName := .File.BaseFileName -}} - {{- $key = printf "%s_%s" $parentDir $fileName -}} - {{- $path = printf "components/%s" $fileName -}} - {{- else -}} - {{- /* This is a root-level component */ -}} - {{- $key = .File.BaseFileName -}} - {{- $path = printf "components/%s" .File.BaseFileName -}} - {{- end -}} - - {{- with .Params.seo.image -}} - {{- $image = printf "%simages/%s" $baseURL . -}} - {{- end -}} - - {{- $component := dict - "title" .Title - "url" .Permalink - "path" $path - "image" $image -}} - - {{- $components = merge $components (dict $key $component) -}} - {{- end -}} - {{- end -}} -{{- end -}} - -{{- $components | jsonify (dict "indent" " ") -}} diff --git a/themes/esphome-theme/layouts/index.html b/themes/esphome-theme/layouts/index.html deleted file mode 100644 index 0ce123b909..0000000000 --- a/themes/esphome-theme/layouts/index.html +++ /dev/null @@ -1,23 +0,0 @@ -{{ define "main" }} -
    -
    -

    Smart Home Made Simple

    -

    Turn your ESP32, ESP8266, or RP2040 boards into powerful smart home devices with simple YAML configuration

    -
    -
    - {{ partial "image.html" (dict "src" "hero.png" "page" .Page "thumbSize" "300x q25") }} -
    -
    - - - -{{ .Content }} -{{ end }} diff --git a/themes/esphome-theme/layouts/partials/asset.html b/themes/esphome-theme/layouts/partials/asset.html deleted file mode 100644 index 8043fd2a56..0000000000 --- a/themes/esphome-theme/layouts/partials/asset.html +++ /dev/null @@ -1,26 +0,0 @@ -{{- $path := .path -}} -{{- $defer := .defer -}} -{{- $ext := path.Ext $path | lower -}} - -{{- if eq hugo.Environment "development" -}} - {{- $asset := resources.Get $path -}} - {{- if eq $ext ".css" -}} - - {{- else if eq $ext ".js" -}} - - {{- end -}} -{{- else -}} - {{- $asset := resources.Get $path | resources.Minify | resources.Fingerprint "sha256" -}} - {{- if eq $ext ".css" -}} - - {{- else if eq $ext ".js" -}} - - {{- end -}} -{{- end -}} diff --git a/themes/esphome-theme/layouts/partials/automations-menu.html b/themes/esphome-theme/layouts/partials/automations-menu.html deleted file mode 100644 index 0955cbac8c..0000000000 --- a/themes/esphome-theme/layouts/partials/automations-menu.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ $currentPage := . }} -
      - {{ range where .Site.Pages "Section" "automations" }} - {{ if .IsSection }} - {{ continue }} - {{ end }} -
    • - - {{ .Title }} - -
    • - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/partials/changelog-menu.html b/themes/esphome-theme/layouts/partials/changelog-menu.html deleted file mode 100644 index eb8da902ac..0000000000 --- a/themes/esphome-theme/layouts/partials/changelog-menu.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ $currentPage := . }} -
      - {{ range where .Site.Pages "Section" "changelog" }} - {{ if .IsSection }} - {{ continue }} - {{ end }} -
    • - - {{ .Title }} - -
    • - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/partials/components-menu.html b/themes/esphome-theme/layouts/partials/components-menu.html deleted file mode 100644 index e80cb8a483..0000000000 --- a/themes/esphome-theme/layouts/partials/components-menu.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ $currentPage := . }} -
      - {{ range where .Site.Pages "Section" "components" }} - {{ if .IsSection }} - {{ continue }} - {{ end }} -
    • - - {{ .Title }} - -
    • - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/partials/guides-menu.html b/themes/esphome-theme/layouts/partials/guides-menu.html deleted file mode 100644 index edeaf35076..0000000000 --- a/themes/esphome-theme/layouts/partials/guides-menu.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ $currentPage := . }} -
      - {{ range where .Site.Pages "Section" "guides" }} - {{ if .IsSection }} - {{ continue }} - {{ end }} -
    • - - {{ .Title }} - -
    • - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/partials/image.html b/themes/esphome-theme/layouts/partials/image.html deleted file mode 100644 index dd3ea01904..0000000000 --- a/themes/esphome-theme/layouts/partials/image.html +++ /dev/null @@ -1,112 +0,0 @@ -{{ $ext := lower (path.Ext .src) }} -{{ $page := .page }} -{{ $caption := .caption }} -{{ $style := .style }} -{{ $thumbSize := .thumbSize | default "180x q20" }} -{{/* Check if image exists in local images directory first */}} -{{ $src := strings.TrimPrefix "/images/" .src }} -{{ $src = strings.TrimPrefix "images/" $src }} -{{- $componentPath := printf "%s/images/%s" (path.Dir $page.File.Path) $src -}} -{{- $globalPath := printf "images/%s" $src -}} -{{ $maxwidth := .maxwidth | default 1500 }} -{{ $classes := .classes | default "" }} - -{{ $image := resources.Get $componentPath }} -{{ if not $image }} - {{ $image = resources.Get $globalPath }} -{{ end }} -{{ if not $image }} -
    {{ .src }}; {{ $ext }}; {{ $componentPath }} {{ $globalPath}}
    -{{ end }} -{{ if not $image }} - {{ errorf "Unresolved image '%s' in page '%s'" .src .Page.File.Path }} -{{ end }} - -{{- if and $image (in (split ".svg,.avif" ",") $ext) -}} - {{ $imgclasses := printf "w-100 h-100 %s" $classes | safeHTMLAttr }} -
    - {{ if .href }} - - {{ end }} - {{ .alt }} - {{ if .href }} - - {{ end }} - {{ with $caption }} -
    - {{ . | markdownify | safeHTML }} -
    - {{ end }} -
    - -{{ end }} -{{ if and $image (in (split ".jpeg,.jpg,.png,.webp" ",") $ext) }} - {{ if isset . "fill" }} - {{ $image = $image.Fill .fill }} - {{ end }} - {{ $placeholder := ($image.Resize $thumbSize) | images.Filter (images.GaussianBlur 1) }} - {{ $src_set := slice (print $image.RelPermalink " " $image.Width "w") }} - {{ if gt $maxwidth $image.Width }} - {{ $maxwidth = $image.Width }} - {{ end }} - - - {{ range $wid := slice (div $maxwidth 5) (div $maxwidth 3) (div $maxwidth 2) (div $maxwidth 1.5) $maxwidth }} - {{ $iwid := int $wid }} - {{ if ge $image.Width $iwid}} - {{ $i := $image.Resize (print $iwid "x" ) }} - {{ $src_set = $src_set | append (print $i.RelPermalink " " $iwid "w") }} - {{ end }} - {{ end }} - - - {{ $srclist := delimit $src_set ", " }} - {{ $imgclasses := printf "lazyload w-100 h-100 %s" $classes | safeHTMLAttr }} -
    - {{ if .href }} - - {{ end }} - {{ .alt }} - {{ if .href }} - - {{ end }} - {{ with $caption }} -
    - {{ . | markdownify | safeHTML }} -
    - {{ end }} -
    -{{ end }} diff --git a/themes/esphome-theme/layouts/partials/linkify.html b/themes/esphome-theme/layouts/partials/linkify.html deleted file mode 100644 index 91560e5d62..0000000000 --- a/themes/esphome-theme/layouts/partials/linkify.html +++ /dev/null @@ -1,37 +0,0 @@ -{{/* -Try to convert a link text to match a known anchor, with soft failure. -The link will be searched for in the given domain, and or category -*/}} -{{- $text := .text -}} -{{- $domain := .domain -}} -{{- $category := .category -}} -{{- $link := .link -}} -{{- $links := slice (printf "%s%s" $domain .link) (printf "%s%s-%s" $domain .link $category) .link (printf "%s-%s" .link $category) -}} -{{- $anchors := site.Data.anchors -}} -{{- $entries := false -}} -{{- range $links -}} - {{- $entries = index $anchors . -}} - {{- if $entries -}} - {{- $link = . -}} - {{- break -}} - {{- end -}} -{{- end -}} -{{- $foundLocal := false -}} -{{- if $entries -}} - {{- range $entries -}} - {{- if eq .page .Page.File.Path -}} - {{- $text = $text | default .text -}} - {{- $foundLocal = true -}} - {{- end -}} - {{- end -}} -{{- end -}} - -{{- if $foundLocal -}} - {{- printf "[%s](#%s)" $text $link -}} -{{- else if $entries -}} - {{- $firstEntry := index $entries 0 -}} - {{- $text = $text | default $firstEntry.text -}} - {{- printf "[%s](/%s#%s)" $text $firstEntry.page $link -}} -{{- else -}} - {{- $text -}} -{{- end -}} diff --git a/themes/esphome-theme/layouts/partials/render-automations.html b/themes/esphome-theme/layouts/partials/render-automations.html deleted file mode 100644 index 6a742e0ceb..0000000000 --- a/themes/esphome-theme/layouts/partials/render-automations.html +++ /dev/null @@ -1,34 +0,0 @@ -{{- $branch := getenv "BRANCH" | default site.Params.branch | default "current" -}} -{{- if eq $branch "new" -}} - {{- $branch = "current" -}} -{{- end -}} -{{- $category := .Get 0 -}} -{{- $data := index site.Data.automations $branch "automations" -}} - -{{- if $data -}} - {{- $markdown := "" -}} - {{- range $cat, $items := $data -}} - {{- if eq $cat $category -}} - {{- $singular := substr $category 0 (sub (len $category) 1) -}} - {{- range $domain, $entries := $items -}} - {{- $entryList := "" -}} - {{- $docref := printf "{{< docref %s %s true >}}" $domain $domain -}} - {{- if eq $domain "Core" -}} - {{- $docref = printf "[Common %s](#common-%s)" $category $category -}} - {{- $domain = "" -}} - {{- end -}} - {{- range $i, $entry := $entries -}} - {{- $entryLink := printf "%s" (replace $entry "." "") -}} - {{- $entryLink = partial "linkify.html" (dict "domain" $domain "text" $entry "link" $entryLink "category" $singular) -}} - {{- if $i -}}{{- $entryList = printf "%s, " $entryList -}}{{- end -}} - {{- $entryList = printf "%s%s" $entryList $entryLink -}} - {{- end -}} - {{- $markdown = printf "%s- **%s**: %s\n" $markdown $docref $entryList -}} - {{- end -}} - {{- end -}} - {{- end -}} - - {{- $markdown | markdownify -}} -{{- else -}} -

    ⚠️ Data not found for branch: {{- $branch -}}

    -{{- end -}} diff --git a/themes/esphome-theme/layouts/partials/sidebar.html b/themes/esphome-theme/layouts/partials/sidebar.html deleted file mode 100644 index 73c6ce72e2..0000000000 --- a/themes/esphome-theme/layouts/partials/sidebar.html +++ /dev/null @@ -1,128 +0,0 @@ -{{ $currentPage := . }} -{{ $title := .Title }} -{{- $branch := getenv "BRANCH" | default site.Params.branch -}} -{{- $repo_url := getenv "REPOSITORY_URL" | default site.Params.repo.url -}} -{{- $commit_hash := getenv "COMMIT_REF" | default site.Params.commit.hash -}} -{{ $component_prefix := printf "%s." (path.Base .RelPermalink) }} - diff --git a/themes/esphome-theme/layouts/partials/site-verification.html b/themes/esphome-theme/layouts/partials/site-verification.html deleted file mode 100644 index 42a464719d..0000000000 --- a/themes/esphome-theme/layouts/partials/site-verification.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/themes/esphome-theme/layouts/partials/toc_secondary_list.html b/themes/esphome-theme/layouts/partials/toc_secondary_list.html deleted file mode 100644 index 9a1490ecc5..0000000000 --- a/themes/esphome-theme/layouts/partials/toc_secondary_list.html +++ /dev/null @@ -1,15 +0,0 @@ -{{- $headings := .Headings -}} -{{- $component_prefix := .ComponentPrefix -}} -{{- if $headings }} -
      - {{- range $headings }} - {{- $broke_title := replaceRE `(\.)` `${1}​` .Title | safeHTML -}} - {{- $broke_title = replace $broke_title $component_prefix "." | safeHTML -}} - {{- $broke_title = replace $broke_title "Action" "" | safeHTML -}} - {{- $broke_title = replaceRE `\s+Action` "" $broke_title | safeHTML -}} - {{- $broke_title = replace $broke_title "Condition" "" | safeHTML -}} - {{- $broke_title = replaceRE `\s+Condition` "" $broke_title | safeHTML -}} -
    • {{ $broke_title | safeHTML }}
    • - {{- end }} -
    -{{- end -}} diff --git a/themes/esphome-theme/layouts/shortcodes/anchor.html b/themes/esphome-theme/layouts/shortcodes/anchor.html deleted file mode 100644 index b397b705e0..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/anchor.html +++ /dev/null @@ -1,11 +0,0 @@ -{{/* - ANCHOR SHORTCODE - Creates an HTML anchor point that can be linked to with fragment identifiers. - - Usage: - {{< anchor "my-anchor-id" >}} - - Parameters: - 1. anchor ID (required) - The ID to use for the anchor point -*/}} - diff --git a/themes/esphome-theme/layouts/shortcodes/api-key-input.html b/themes/esphome-theme/layouts/shortcodes/api-key-input.html deleted file mode 100644 index 347201a1ac..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/api-key-input.html +++ /dev/null @@ -1,115 +0,0 @@ - -
    - - - -
    - diff --git a/themes/esphome-theme/layouts/shortcodes/apiclass.html b/themes/esphome-theme/layouts/shortcodes/apiclass.html deleted file mode 100644 index 2cf14dc0ae..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/apiclass.html +++ /dev/null @@ -1,36 +0,0 @@ -{{- /* - apiclass shortcode - Creates a link specifically to a C++ class in the API documentation - - Usage: - {{< apiclass "DisplayName" "path/to/Class" >}} - - Examples: - {{< apiclass "ClimateDevice" "esphome::climate::ClimateDevice" >}} - {{< apiclass "WiFiComponent" "esphome::wifi::WiFiComponent" >}} - - How it works: - 1. Extracts the last path element from the provided path - 2. Replaces special characters: - - Underscores (_) are replaced with double underscores (__) - - Dots (.) are replaced with _8 - - Colons (:) are replaced with _1 - 3. Converts capital letters to lowercase preceded by an underscore - 4. Prepends the API documentation base URL (configured in Hugo settings) - - When converting from RST, the following directive is automatically converted: - :apiclass:`DisplayName ` - :apiclass:`esphome::climate::ClimateDevice` (uses path as display name) -*/ -}} -{{- $text := .Get 0 -}} -{{- $path := .Get 1 -}} -{{- $lastPathElement := index (last 1 (split $path "/")) 0 -}} -{{- $processedPath := replace (replace (replace $lastPathElement "_" "__") "." "_8") ":" "_1" -}} -{{ $match := findRE `([A-Z])` $processedPath }} -{{ range $match }} -{{ $original := . }} -{{ $lower := lower . | printf "_%s" }} -{{ $processedPath = replace $processedPath $original $lower }} -{{ end }} - -{{- $baseUrl := .Site.Params.api_docs_url -}} -{{ $text }} diff --git a/themes/esphome-theme/layouts/shortcodes/apiref.html b/themes/esphome-theme/layouts/shortcodes/apiref.html deleted file mode 100644 index e5b7b8bdc7..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/apiref.html +++ /dev/null @@ -1,39 +0,0 @@ -{{- /* - apiref shortcode - Creates a link to a C++ API reference - - Usage: - {{< apiref "DisplayName" "path/to/api/element" >}} - - Examples: - {{< apiref "Sensor class" "esphome::sensor::Sensor" >}} - {{< apiref "Component" "esphome/core/component.h::Component" >}} - - How it works: - 1. Extracts the last path element from the provided path - 2. Replaces special characters: - - Underscores (_) are replaced with double underscores (__) - - Dots (.) are replaced with _8 - - Colons (:) are replaced with _1 - 3. Converts capital letters to lowercase preceded by an underscore - 4. Prepends the API documentation base URL (configured in Hugo settings) - - When converting from RST, the following directive is automatically converted: - :apiref:`DisplayName ` - :apiref:`esphome::sensor::Sensor` (uses path as display name) -*/ -}} -{{- $text := .Get 0 -}} -{{- $path := .Get 1 -}} -{{- if eq $text $path -}} - {{- $text = "API Reference" }} -{{- end }} -{{- $lastPathElement := index (last 1 (split $path "/")) 0 -}} -{{- $processedPath := replace (replace (replace $lastPathElement "_" "__") "." "_8") ":" "_1" -}} -{{ $match := findRE `([A-Z])` $processedPath }} -{{ range $match }} -{{ $original := . }} -{{ $lower := lower . | printf "_%s" }} -{{ $processedPath = replace $processedPath $original $lower }} -{{ end }} - -{{- $baseUrl := .Site.Params.api_docs_url -}} -{{ $text }} diff --git a/themes/esphome-theme/layouts/shortcodes/apistruct.html b/themes/esphome-theme/layouts/shortcodes/apistruct.html deleted file mode 100644 index f4ef0fd164..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/apistruct.html +++ /dev/null @@ -1,36 +0,0 @@ -{{- /* - apistruct shortcode - Creates a link specifically to a C++ struct in the API documentation - - Usage: - {{< apistruct "DisplayName" "path/to/Struct" >}} - - Examples: - {{< apistruct "SensorStateClass" "esphome::sensor::SensorStateClass" >}} - {{< apistruct "GPIOOutputPin" "esphome::output::GPIOOutputPin" >}} - - How it works: - 1. Extracts the last path element from the provided path - 2. Replaces special characters: - - Underscores (_) are replaced with double underscores (__) - - Dots (.) are replaced with _8 - - Colons (:) are replaced with _1 - 3. Converts capital letters to lowercase preceded by an underscore - 4. Prepends the API documentation base URL (configured in Hugo settings) - - When converting from RST, the following directive is automatically converted: - :apistruct:`DisplayName ` - :apistruct:`esphome::sensor::SensorStateClass` (uses path as display name) -*/ -}} -{{- $text := .Get 0 -}} -{{- $path := .Get 1 -}} -{{- $lastPathElement := index (last 1 (split $path "/")) 0 -}} -{{- $processedPath := replace (replace (replace $lastPathElement "_" "__") "." "_8") ":" "_1" -}} -{{ $match := findRE `([A-Z])` $processedPath }} -{{ range $match }} -{{ $original := . }} -{{ $lower := lower . | printf "_%s" }} -{{ $processedPath = replace $processedPath $original $lower }} -{{ end }} - -{{- $baseUrl := .Site.Params.api_docs_url -}} -{{ $text }} diff --git a/themes/esphome-theme/layouts/shortcodes/break.html b/themes/esphome-theme/layouts/shortcodes/break.html deleted file mode 100644 index 037e6453b9..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/break.html +++ /dev/null @@ -1,5 +0,0 @@ -{{/* - Shortcode: break - Output: Inserts
    -*/}} -
    diff --git a/themes/esphome-theme/layouts/shortcodes/changelogs.html b/themes/esphome-theme/layouts/shortcodes/changelogs.html deleted file mode 100644 index 5e755d50b4..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/changelogs.html +++ /dev/null @@ -1,52 +0,0 @@ -{{/* - CHANGELOGS SHORTCODE - Creates a collapsible list of all changelog entries - - Usage: - {{< changelogs >}} - - This shortcode automatically generates a list of all changelogs in the content/changelog directory, - sorted in reverse chronological order, wrapped in a collapsible details element. -*/}} - -{{- $changelogs := slice -}} -{{- range .Site.Pages -}} - {{- if and (in .RelPermalink "/changelog/") (not (in .RelPermalink "/guides/")) -}} - {{- $relPath := strings.TrimPrefix "/changelog/" .RelPermalink -}} - {{- $relPath = strings.TrimSuffix "/" $relPath -}} - {{- if and (ne $relPath "") (ne .File.BaseFileName "_index") (not (in $relPath "/")) -}} - {{/* Remove v prefix if present and process version for sorting */}} - {{- $versionNum := $relPath -}} - {{- if hasPrefix $relPath "v" -}} - {{- $versionNum = substr $relPath 1 -}} - {{- end -}} - {{- $sortKey := "" -}} - {{- $parts := split $versionNum "." -}} - {{- if eq (len $parts) 3 -}} - {{- $major := index $parts 0 | int -}} - {{- $minor := index $parts 1 -}} - {{- $patch := index $parts 2 -}} - {{- $sortKey = printf "%04d.%02s.%s" $major $minor $patch -}} - {{- else -}} - {{/* Fallback for versions that don't have 3 parts */}} - {{- $sortKey = $versionNum -}} - {{- end -}} - {{- $changelog := dict "version" $relPath "url" .Permalink "title" .Title "sortKey" $sortKey -}} - {{- $changelogs = $changelogs | append $changelog -}} - {{- end -}} - {{- end -}} -{{- end -}} -{{- $sorted := sort $changelogs ".sortKey" "desc" -}} -
    - -
      -{{- range $sorted }} - {{- if eq .url $.Page.Permalink }} -
    • {{ .title }} (current page)
    • - {{- else -}} -
    • {{ .title }}
    • - {{ end -}} -{{ end -}} -
    - -
    diff --git a/themes/esphome-theme/layouts/shortcodes/collapse.html b/themes/esphome-theme/layouts/shortcodes/collapse.html deleted file mode 100644 index 7e221e9edf..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/collapse.html +++ /dev/null @@ -1,29 +0,0 @@ -{{/* - COLLAPSE SHORTCODE - Creates a collapsible section - - Usage: - {{< collapse >}} - This content will be hidden by default and can be expanded by clicking the header. - You can include any Markdown content here, including lists, code blocks, etc. - {{< /collapse >}} - - Parameters: - 1. open (optional): If set to false, the content will be hidden initially - - Content: - The content between the opening and closing shortcode tags will be hidden by default - and can be toggled by clicking on the header. -*/}} -{{ $is_open := .Get 0 }} -{{ if eq $is_open "False" }} - {{ $is_open = false }} -{{ end }} -
    - - -
    - {{ .Inner | markdownify }} -
    -
    - diff --git a/themes/esphome-theme/layouts/shortcodes/docref.html b/themes/esphome-theme/layouts/shortcodes/docref.html deleted file mode 100644 index e11b2eab56..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/docref.html +++ /dev/null @@ -1,121 +0,0 @@ -{{/* - DOCREF SHORTCODE - Creates a link to another page in the documentation with proper handling of anchors. - - Usage: - {{< docref "components/sensor/dht" >}} - {{< docref "components/sensor/dht" "DHT Sensor Guide" >}} - {{< docref "components/sensor/dht#configuration" >}} - - Parameters: - 1. path (required) - The path to the target page, can include an anchor with # - 2. custom text (optional) - Custom text to use for the link (defaults to target page title) - 3. An optional boolean, which if true will suppress the broken link message - - Notes: - - The path should be relative to the content directory - - If the path is not absolute (doesn't start with /), it will try to resolve in this order: - 1. Current page's directory - 2. /components directory - 3. Recursively in subfolders of /components - - If the target page doesn't exist, it will display a "broken link" message -*/}} -{{- $path := .Get 0 -}} -{{- $customText := .Get 1 -}} -{{- $brokenOK := .Get 2 -}} -{{- $anchor := "" -}} -{{- if findRE "#" $path 1 -}} - {{- $parts := split $path "#" -}} - {{- $path = index $parts 0 -}} - {{- $anchor = index $parts 1 -}} -{{- end -}} - -{{/* Path resolution logic */}} -{{- $page := .Page.GetPage $path -}} - -{{/* If page not found and path is not absolute, try current directory */}} -{{- if and (not $page) (not (hasPrefix $path "/")) -}} - {{- $currentDir := path.Dir .Page.File.Path -}} - {{- $newPath := path.Join $currentDir $path -}} - {{- $page = .Page.GetPage $newPath -}} -{{- end -}} - -{{/* If still not found, try in components directory */}} -{{- if and (not $page) (not (hasPrefix $path "/")) -}} - {{- $componentsPath := path.Join "components" $path -}} - {{- $page = .Page.GetPage $componentsPath -}} -{{- end -}} - -{{/* If still not found, try to find recursively in component subdirectories */}} -{{- if and (not $page) (not (hasPrefix $path "/")) -}} - {{/* Get all component pages */}} - {{- $componentSection := .Site.GetPage "section" "components" -}} - {{- if $componentSection -}} - {{/* Recursive function to search in component pages */}} - {{- $findInSection := false -}} - {{- range $componentSection.Sections -}} - {{/* Check if the current section has the page */}} - {{- $sectionPath := path.Join .File.Dir $path -}} - {{- $foundPage := $.Page.GetPage $sectionPath -}} - {{- if $foundPage -}} - {{- $page = $foundPage -}} - {{- $findInSection = true -}} - {{- end -}} - - {{/* If not found, check in the section's pages */}} - {{- if not $findInSection -}} - {{- range .Pages -}} - {{- if eq (path.Base .File.Path | replaceRE "\\.(md|html)$" "") (path.Base $path | replaceRE "\\.(md|html)$" "") -}} - {{- $page = . -}} - {{- $findInSection = true -}} - {{- end -}} - {{- end -}} - {{- end -}} - - {{/* If still not found, check in subsections recursively */}} - {{- if not $findInSection -}} - {{- range .Sections -}} - {{- $sectionPath := path.Join .File.Dir $path -}} - {{- $foundPage := $.Page.GetPage $sectionPath -}} - {{- if $foundPage -}} - {{- $page = $foundPage -}} - {{- $findInSection = true -}} - {{- end -}} - - {{/* Check in the subsection's pages */}} - {{- if not $findInSection -}} - {{- range .Pages -}} - {{- if eq (path.Base .File.Path | replaceRE "\\.(md|html)$" "") (path.Base $path | replaceRE "\\.(md|html)$" "") -}} - {{- $page = . -}} - {{- $findInSection = true -}} - {{- end -}} - {{- end -}} - {{- end -}} - {{- end -}} - {{- end -}} - {{- end -}} - {{- end -}} -{{- end -}} - -{{- if $page -}} - {{- $displayText := $customText -}} - {{- if not $displayText -}} - {{- $displayText = $page.Title -}} - {{- end -}} - {{- if $anchor -}} - {{ $displayText }} - {{- else -}} - {{ $displayText }} - {{- end -}} -{{- else -}} - {{- if $brokenOK -}} - {{- $customText -}} - {{- else -}} - {{- if eq hugo.Environment "development" -}} - {{ warnf "Unresolved anchor '%s' in page '%s'" $path .Page.File.Path }} - {{ $customText }} - {{- else -}} - {{ errorf "Unresolved anchor '%s' in page '%s'" $path .Page.File.Path }} - {{- end -}} - {{- end -}} -{{- end -}} diff --git a/themes/esphome-theme/layouts/shortcodes/feature-grid.html b/themes/esphome-theme/layouts/shortcodes/feature-grid.html deleted file mode 100644 index 873d11862f..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/feature-grid.html +++ /dev/null @@ -1,17 +0,0 @@ -{{ $features := .Inner | transform.Unmarshal }} - -
    - {{ range $features }} -
    -
    - {{ if hasPrefix .icon "fa-" }} - - {{ else }} - {{ os.ReadFile (printf "static/images/icons/%s.svg" .icon) | safeHTML }} - {{ end }} -
    -
    {{ .title }}
    -

    {{ .description | markdownify | safeHTML }}

    -
    - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/shortcodes/getting-started-grid.html b/themes/esphome-theme/layouts/shortcodes/getting-started-grid.html deleted file mode 100644 index ce9bbba975..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/getting-started-grid.html +++ /dev/null @@ -1,27 +0,0 @@ -{{ $items := .Inner | transform.Unmarshal }} - -
    - {{ range $items }} -
    -
    - {{ if hasPrefix .icon "fa-" }} - - {{ else }} - {{ os.ReadFile (printf "static/images/icons/%s.svg" .icon) | safeHTML }} - {{ end }} -
    -
    {{ .title }}
    -

    {{ .description | safeHTML }}

    - {{ if .steps }} -
      - {{ range .steps }} -
    1. {{ . | safeHTML }}
    2. - {{ end }} -
    - {{ end }} - {{ if .url }} - {{ .button_text }} - {{ end }} -
    - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/shortcodes/ghuser.html b/themes/esphome-theme/layouts/shortcodes/ghuser.html deleted file mode 100644 index e7b6e7463b..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/ghuser.html +++ /dev/null @@ -1,9 +0,0 @@ -{{/* - Shortcode: ghuser - Usage: {{< ghuser name="octocat" >}} - Output: A link to the specified GitHub user profile, displaying the username (or custom text if provided). - Optional param: text (if you want to show something different than the username) -*/}} -{{- $name := .Get "name" -}} -{{- $text := .Get "text" | default (printf "@%s" $name) -}} -{{ $text }} diff --git a/themes/esphome-theme/layouts/shortcodes/html_file.html b/themes/esphome-theme/layouts/shortcodes/html_file.html deleted file mode 100644 index c1ea342add..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/html_file.html +++ /dev/null @@ -1,22 +0,0 @@ -{{/* - HTML_FILE SHORTCODE - Read a file and insert as html inside a div - - Usage: - {{< html_file file="example.html" class="examlple-class" >}} - - Parameters: - - file (required) - The file to read and insert as html - - class (optional) - CSS class to apply to the enclosing div - -*/}} -{{- $file := .Get "file" -}} -{{- $class := .Get "class" -}} -{{- if $class -}} -
    -{{- end -}} -{{ $content := os.ReadFile (printf "static/%s" $file) | safeHTML }} -{{- $content -}} -{{- if $class -}} -
    -{{- end -}} diff --git a/themes/esphome-theme/layouts/shortcodes/img.html b/themes/esphome-theme/layouts/shortcodes/img.html deleted file mode 100644 index 7d59de1c67..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/img.html +++ /dev/null @@ -1,34 +0,0 @@ -{{/* - IMG SHORTCODE - Displays an image with optional caption, width, height, and CSS class. - Automatically searches for images in the local component directory, global images directory, or uses absolute URLs. - - Usage: - {{< img src="example.jpg" alt="Example image" caption="This is an example" width="500" class="center" >}} - - Parameters: - - src (required) - The image source path or URL - - alt (optional) - Alt text for the image (default: "Image") - - caption (optional) - Caption text to display below the image - - class (optional) - CSS class to apply to the figure element - - width (optional) - Width of the image - - height (optional) - Height of the image - - Notes: - - The shortcode will first look for images in the component's own images directory - - If not found there, it will look in the global images directory - - If still not found, it will use the src as provided (for external URLs) -*/}} -{{- $src := .Get "src" -}} -{{- $alt := .Get "alt" | default "Image" -}} -{{- $caption := .Get "caption" -}} -{{- $class := .Get "class" -}} -{{- $width := .Get "width" -}} -{{- $height := .Get "height" -}} - -{{- $style := "" -}} -{{- if $width -}}{{- $style = printf "%swidth:%spx;" $style $width -}}{{- end -}} -{{- if $height -}}{{- $style = printf "%sheight:%spx;" $style $height -}}{{- end -}} -{{- if $style -}}{{- $style = printf " style=\"%s\"" $style | safeHTMLAttr -}}{{- end -}} -{{ partial "image.html" (dict "src" $src "page" .Page "style" $style "width" $width "classes" $class "alt" $alt "caption" $caption) }} -{{- .Page.Store.Set "hasImg" true -}} diff --git a/themes/esphome-theme/layouts/shortcodes/imgtable.html b/themes/esphome-theme/layouts/shortcodes/imgtable.html deleted file mode 100644 index 39354a7ca1..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/imgtable.html +++ /dev/null @@ -1,61 +0,0 @@ -{{/* - IMGTABLE SHORTCODE - Creates a grid of component cards with images, titles, and optional descriptions that link to other pages. - - Usage with block content (preferred): - {{< imgtable >}} - Title 1, path/to/page1, image1.png - Title 1, path/to/page1, image1.png, "sub-caption" - Title 2, path/to/page2, image2.png, dark-invert - Title 2, path/to/page2, image2.png, "sub-caption", dark-invert - {{< /imgtable >}} - - Legacy usage with positional parameters: - {{< imgtable "Title" "/path/to/page" "image.png" "css-class" >}} - - Notes: - - Each line in the block content should contain 3-4 comma-separated values - - The format is: Title, Link, Image, [Optional CSS class] - - Images are searched for in the following order: - 1. Component's own images directory - 2. Global images directory - 3. Used as-is (for external URLs) - - For dark mode compatibility, add "dark-invert" as the CSS class to invert the image in dark mode -*/}} - -
    - {{ $opts := dict "targetType" "slice" "delimiter" "," "lazyQuotes" true }} - {{ $data := transform.Unmarshal $opts .Inner }} - {{ range $data }} - {{ $title := trim (index . 0) " " }} - {{ $link := trim (index . 1) " " | strings.TrimSuffix "index" }} - {{ $image := trim (index . 2) " " }} - {{ $class := "" }} - {{ $caption := "" }} - {{ range $i, $param := . | after 3 }} - {{ if eq $param "dark-invert" }} - {{ $class = $param }} - {{ else if and (ne $caption "") (ne $param "") }} - {{ $caption = printf "%s & %s" $caption $param }} - {{ else if ne $param "" }} - {{ $caption = $param }} - {{ end }} - {{ end }} - - - - {{ end }} -
    diff --git a/themes/esphome-theme/layouts/shortcodes/include.html b/themes/esphome-theme/layouts/shortcodes/include.html deleted file mode 100644 index b2e0e80668..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/include.html +++ /dev/null @@ -1,18 +0,0 @@ -{{- $name := .Get 0 | strings.TrimSuffix ".md" -}} - -{{- /* 1: Try as resource (leaf bundle snippets) */ -}} -{{- $res := .Page.Resources.GetMatch (printf "%s.md" $name) -}} -{{- if $res }} - {{ .Page.RenderString $res.Content }} -{{- else -}} - {{- /* 2: Try as headless or sibling page */ -}} - {{- $p := site.GetPage (printf "page/%s" $name) -}} - {{- if not $p }} - {{- $p = .Page.GetPage $name -}} - {{- end -}} - {{- with $p }} - {{ .Content }} {{/* already-rendered Markdown + shortcodes */}} - {{- else -}} - {{ errorf "include: could not find %q relative to %q" $name $.Page.File.Path }} - {{- end -}} -{{- end -}} diff --git a/themes/esphome-theme/layouts/shortcodes/math.html b/themes/esphome-theme/layouts/shortcodes/math.html deleted file mode 100644 index 479e162c49..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/math.html +++ /dev/null @@ -1,18 +0,0 @@ -{{/* - MATH SHORTCODE - Formats equations - - Usage: - {{< math >}} - c = \\pm\\sqrt{a^2 + b^2}" - {{< /math >}} - - Content: - The content between the opening and closing shortcode tags will be formatted as maths -*/}} -{{ $nl := printf "\n" }} - -$$ -{{ .Inner }} -$$ -{{ .Page.Store.Set "hasMath" true }} diff --git a/themes/esphome-theme/layouts/shortcodes/option.html b/themes/esphome-theme/layouts/shortcodes/option.html deleted file mode 100644 index b2b786c28d..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/option.html +++ /dev/null @@ -1,16 +0,0 @@ -{{/* -OPTION SHORTCODE -Creates an option block - -Usage: -{{< option "--help|-h" >}} -This is the help option. -{{< /option >}} - -Content: -The content between the opening and closing shortcode tags will be displayed inside the option block. -*/}} -
    -
    {{ .Get 0 }}
    - {{ .Inner | .Page.RenderString }} -
    diff --git a/themes/esphome-theme/layouts/shortcodes/pr.html b/themes/esphome-theme/layouts/shortcodes/pr.html deleted file mode 100644 index f29fa545c8..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/pr.html +++ /dev/null @@ -1,9 +0,0 @@ -{{/* - Shortcode: pr - Usage: {{< pr number="123" repo="esphome" >}} - Output: A link to the specified pull request - Optional param: repo (default: "esphome") -*/}} -{{- $number := .Get "number" -}} -{{- $repo := .Get "repo" | default "esphome" -}} -{{ $repo }}#{{ $number }} diff --git a/themes/esphome-theme/layouts/shortcodes/redirect.html b/themes/esphome-theme/layouts/shortcodes/redirect.html deleted file mode 100644 index d73a92d18d..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/redirect.html +++ /dev/null @@ -1,8 +0,0 @@ -{{/* - redirect shortcode: usage {{< redirect url="/some/path" >}} - Outputs a meta refresh and canonical link for SEO-friendly redirects. -*/}} -{{ $url := .Get "url" | strings.TrimSuffix "index.html" | strings.TrimSuffix ".html" }} - - -

    You are being redirected to {{ $url }}...

    diff --git a/themes/esphome-theme/layouts/shortcodes/render-automations.html b/themes/esphome-theme/layouts/shortcodes/render-automations.html deleted file mode 100644 index e2e02ddb54..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/render-automations.html +++ /dev/null @@ -1 +0,0 @@ -{{ partial "render-automations.html" . }} diff --git a/themes/esphome-theme/layouts/shortcodes/seo.html b/themes/esphome-theme/layouts/shortcodes/seo.html deleted file mode 100644 index ade239455a..0000000000 --- a/themes/esphome-theme/layouts/shortcodes/seo.html +++ /dev/null @@ -1,41 +0,0 @@ -{{/* - SEO SHORTCODE - Adds SEO metadata tags to the page for better search engine optimization and social media sharing. - This shortcode should be placed in the head section of your page or template. - - Usage: - {{< seo description="Detailed guide for setting up the DHT sensor with ESPHome" image="dht-sensor.jpg" >}} - - Parameters: - - description (optional) - Custom meta description for the page (falls back to page summary if not provided) - - image (optional) - Image to use for social media sharing (will be looked up in the images directory) - - Notes: - - This adds Open Graph and Twitter Card metadata for better social media sharing - - The page title is automatically used from the page's front matter -*/}} -{{ $description := .Get "description" }} -{{ $image := .Get "image" }} -{{ $seo := .Page.Param "seo" }} -{{ with $seo }} - {{ $description = $seo.description | default $description }} - {{ $image = $seo.image | default $image }} -{{ end }} - -{{ with $description | default .Page.Title }} - -{{ end }} - -{{ with $image }} - - -{{ end }} - - - - - - - - - diff --git a/themes/esphome-theme/theme.yaml b/themes/esphome-theme/theme.yaml deleted file mode 100644 index 39f2ea2f99..0000000000 --- a/themes/esphome-theme/theme.yaml +++ /dev/null @@ -1,13 +0,0 @@ -name: ESPHome Theme -license: MIT -licenselink: https://github.com/esphome/esphome-docs/LICENSE.md -description: Custom theme for ESPHome documentation -homepage: https://esphome.io/ -tags: - - documentation - - responsive -features: - - responsive - - search - - syntax highlighting -min_version: 0.80.0 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..2c2a6f54e8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@components/*": ["src/components/*"] + } + } +} From c97a158a006fad9e542e153359960cbffe028848 Mon Sep 17 00:00:00 2001 From: Djordje Mandic <6750655+DjordjeMandic@users.noreply.github.com> Date: Fri, 13 Feb 2026 23:46:24 +0100 Subject: [PATCH 04/52] [bl0942] Update docs to match esphome PR#12867 (#6075) * BL0942 Update references * BL0942 update * bl0942 update * Revert "bl0942 update" This reverts commit 00cab36bfc8297d65665bff37ab1fabacc40e770. * Revert "BL0942 update" This reverts commit 7d6e7a92dfb12b52b2349e3331241f5985d6dbec. * [bl0942] update ref --------- Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> --- src/content/docs/components/sensor/bl0942.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/components/sensor/bl0942.mdx b/src/content/docs/components/sensor/bl0942.mdx index a161340c6d..7f76deb7cf 100644 --- a/src/content/docs/components/sensor/bl0942.mdx +++ b/src/content/docs/components/sensor/bl0942.mdx @@ -54,8 +54,8 @@ sensor: - **reset** (*Optional*, boolean): Whether to reset the BL0942 chip on startup, resetting all internal counters. Defaults to `true`. - **current_reference** (*Optional*, float): The calibration parameter for current readings. Defaults to `251065.6814`. - **voltage_reference** (*Optional*, float): The calibration parameter for voltage readings. Defaults to `15883.34116`. -- **power_reference** (*Optional*, float): The calibration parameter for power readings. Defaults to `623.3937992` unless either `current_reference` or `voltage_reference` are explicitly set, in which case it is calculated. See [Calibration](#bl0942-calibration) for more details. -- **energy_reference** (*Optional*, float): The calibration parameter for cumulative energy readings. Defaults to `5350.631898` unless any of `current_reference`, `voltage_reference` or `power_reference` are explicitly set, in which case it is calculated. See [Calibration](#bl0942-calibration) for more details. +- **power_reference** (*Optional*, float): The calibration parameter for power readings. Defaults to `623.0270705` unless either `current_reference` or `voltage_reference` are explicitly set, in which case it is calculated. See [Calibration](#bl0942-calibration) for more details. +- **energy_reference** (*Optional*, float): The calibration parameter for cumulative energy readings. Defaults to `5347.484240` unless any of `current_reference`, `voltage_reference` or `power_reference` are explicitly set, in which case it is calculated. See [Calibration](#bl0942-calibration) for more details. From bd542af4d4b3d8b2661ffc496927830a1577a080 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 13 Feb 2026 16:52:12 -0600 Subject: [PATCH 05/52] [changelog] Add 2026.2.0 release highlights and breaking changes (#6070) --- src/content/docs/changelog/2026.2.0.mdx | 245 +++++++++++++++++++++++- 1 file changed, 244 insertions(+), 1 deletion(-) diff --git a/src/content/docs/changelog/2026.2.0.mdx b/src/content/docs/changelog/2026.2.0.mdx index de15492b08..4c5bdd2bad 100644 --- a/src/content/docs/changelog/2026.2.0.mdx +++ b/src/content/docs/changelog/2026.2.0.mdx @@ -16,6 +16,250 @@ import ImgTable from "@components/ImgTable.astro"; {/* markdownlint-disable MD013 */} +## Release Overview + +{/* RELEASE_OVERVIEW_START */} +ESPHome 2026.2.0 is a performance and stability release. The focus is on making your devices compile faster, run leaner, and stay reliable over months of uptime. + +**Faster builds, smaller firmware.** ESP32 Arduino builds compile 36% faster and produce 44% less flash and 50% less static RAM. ESP-IDF compiles are ~22% faster. A streamlined certificate bundle saves another 51KB of flash. + +**More stable, more responsive devices.** CPU usage is down across the board: the BLE tracker loop uses ~85% less CPU, MQTT consolidation saves ~6.5% total device CPU, and the scheduler is 25% smaller. Unnecessary memory allocations have been eliminated from dozens of components, and ESP8266 devices recover significant RAM by moving strings to flash. + +This release also introduces 3 new components (DLMS smart meter, CH423 I/O expander, SY6970 battery management), adds 7 new display models including ESP32-P4 Waveshare panels, expands the Zigbee platform, and hardens security with constant-time authentication and cryptographic random generation. +{/* RELEASE_OVERVIEW_END */} + +## Upgrade Checklist + +- If you use `bmp581`, update your configuration to use `bmp581_i2c` as the platform +- If you use `on_open` in cover automations, rename it to `on_opened` +- If you have DSMR `fw_core_version` or `fw_module_version` under `sensor:`, move them to `text_sensor:` +- If you call Arduino library APIs directly in lambdas (e.g., `Preferences`, `WiFi`), add them to `esphome: libraries:` +- If you connect to HTTPS servers using uncommon CAs, add `use_full_certificate_bundle: true` under `esp32: framework: advanced:` +- If you use BL0942 sensors, expect readings to change after recalibration to match corrected reference values + +{/* FEATURE_HIGHLIGHTS_START */} +## ESP32 Build Size and Compile Time Optimizations + +ESP32 builds are faster and produce smaller firmware in this release, meaning shorter compile times and more room on your devices. + +| Improvement | Savings | Details | +|---|---|---| +| Arduino selective compilation ([#13623](https://github.com/esphome/esphome/pull/13623)) | **36% faster builds, 44% less flash, 50% less static RAM** | Unused Arduino libraries are no longer compiled or linked | +| ESP-IDF component exclusion ([#13610](https://github.com/esphome/esphome/pull/13610), [#13664](https://github.com/esphome/esphome/pull/13664)) | **~22% faster ESP-IDF compiles** | Unused ESP-IDF components are excluded at build time instead of compiled and discarded by the linker | +| Streamlined certificate bundle ([#13574](https://github.com/esphome/esphome/pull/13574)) | **~51KB flash saved** | Default switched to Common CAs (~99% of websites); full bundle available via config | +| Skip precompiled Arduino libs ([#13775](https://github.com/esphome/esphome/pull/13775)) | **~40% faster first build, ~2GB disk saved** | Stub replaces the ~270MB precompiled library download that isn't needed when building from source | +| sdkconfig defaults ([#13611](https://github.com/esphome/esphome/pull/13611)) | Additional flash savings | Unused ESP-IDF features (debug stubs, PKCS#7, FAT) disabled by default | + +*Arduino numbers measured on an ESP32 Arduino build comparing before and after this release. ESP-IDF compile time measured across multiple optimization PRs. Actual savings depend on your configuration.* + +**How it works:** ESPHome now only compiles the parts of Arduino and ESP-IDF that your configuration actually uses. Built-in components automatically re-enable the libraries they need, so most users get these savings with zero configuration changes. + +> **Who benefits most?** Everyone on ESP32. If your firmware was close to flash limits, this may free enough space to add more components. If you were waiting on long compiles, expect noticeably faster builds. Users on ESP-IDF see the ~22% compile time improvement automatically. Arduino users see all three improvements. + +External components that call `cg.add_library()` in their code generation work automatically. If you use external components or lambdas that rely on Arduino libraries without declaring them, you can add them to `esphome: libraries:`. See [Breaking Changes](#breaking-changes) for details. + +## Runtime Memory and Performance + +Your devices should be more responsive and more stable after this update. Across all platforms, we've reduced CPU usage, freed up RAM, and eliminated sources of memory fragmentation that can cause crashes after weeks or months of uptime. + +### ESP8266 RAM Recovery + +ESP8266 devices have only 80KB of RAM, so every byte matters. This release moves constant strings and lookup tables from RAM to flash across **19+ components**, freeing up heap for actual device operation. Components updated include [web_server](/components/web_server) ([#13315](https://github.com/esphome/esphome/pull/13315)), [light](/components/light) ([#13314](https://github.com/esphome/esphome/pull/13314)), [mqtt](/components/mqtt) ([#13546](https://github.com/esphome/esphome/pull/13546)), [wifi](/components/wifi) ([#13349](https://github.com/esphome/esphome/pull/13349)), [debug](/components/debug) ([#13352](https://github.com/esphome/esphome/pull/13352)), and **13 more** via a new flash-based string table pattern ([#13659](https://github.com/esphome/esphome/pull/13659)) applied to [uart](/components/uart) ([#13805](https://github.com/esphome/esphome/pull/13805)), [sprinkler](/components/sprinkler) ([#13806](https://github.com/esphome/esphome/pull/13806)), [ssd1306](/components/display/ssd1306) ([#13814](https://github.com/esphome/esphome/pull/13814)), and others. + +### Long-Term Stability + +Devices that run for months can crash when repeated memory allocations fragment the heap. This release eliminates unnecessary runtime memory allocations across the codebase, including [api](/components/api) ([#13399](https://github.com/esphome/esphome/pull/13399)), [mqtt](/components/mqtt) ([#13434](https://github.com/esphome/esphome/pull/13434)), [thermostat](/components/climate/thermostat) ([#13692](https://github.com/esphome/esphome/pull/13692)), [sprinkler](/components/sprinkler) ([#13705](https://github.com/esphome/esphome/pull/13705)), [voice_assistant](/components/voice_assistant) ([#13689](https://github.com/esphome/esphome/pull/13689)), and many others. On ESP8266, format strings are also moved to flash as part of these changes ([#13258](https://github.com/esphome/esphome/pull/13258)). + +### UART Batch Reads + +**16 UART-based components** now read all available serial data at once instead of one byte per loop, reducing CPU overhead. Updated components include [modbus](/components/modbus) ([#13822](https://github.com/esphome/esphome/pull/13822)), [nextion](/components/display/nextion) ([#13823](https://github.com/esphome/esphome/pull/13823)), [tuya](/components/tuya) ([#13827](https://github.com/esphome/esphome/pull/13827)), [ld2410](/components/sensor/ld2410) ([#13820](https://github.com/esphome/esphome/pull/13820)), [dsmr](/components/sensor/dsmr) ([#13826](https://github.com/esphome/esphome/pull/13826)), and [ld2450](/components/sensor/ld2450) ([#13818](https://github.com/esphome/esphome/pull/13818)). + +### CPU and Loop Optimizations + +The [esp32_ble_tracker](/components/esp32_ble_tracker) loop uses **~85% less CPU** thanks to state change tracking ([#13337](https://github.com/esphome/esphome/pull/13337)). Components like [status](/components/binary_sensor/status) ([#13342](https://github.com/esphome/esphome/pull/13342)) and [globals](/components/globals) ([#13345](https://github.com/esphome/esphome/pull/13345)) no longer run every loop iteration. The [api](/components/api) ([#13901](https://github.com/esphome/esphome/pull/13901)) and core loop ([#13900](https://github.com/esphome/esphome/pull/13900)) were also tightened up, and [mDNS](/components/mdns) polling was throttled on ESP8266 and RP2040 ([#13917](https://github.com/esphome/esphome/pull/13917)). + +## Scheduler Improvements + +The scheduler runs on every device and drives all timers and intervals. This release makes it smaller and more efficient: the core timer code is **25% smaller** ([#13899](https://github.com/esphome/esphome/pull/13899)), memory allocations were removed from cleanup operations ([#13837](https://github.com/esphome/esphome/pull/13837)), and flash usage was reduced ([#13214](https://github.com/esphome/esphome/pull/13214)). Timer IDs are now type-safe to prevent collisions between components ([#13882](https://github.com/esphome/esphome/pull/13882)), and the `set_retry` API was deprecated in favor of `set_interval`/`set_timeout` ([#13845](https://github.com/esphome/esphome/pull/13845)). + +## MQTT Optimizations + +If you use MQTT, your devices will use noticeably less CPU and memory. Previously, every MQTT entity ran its own loop and rebuilt topic strings every iteration, causing thousands of unnecessary memory allocations per minute. This has been consolidated so entities are processed centrally ([#13356](https://github.com/esphome/esphome/pull/13356)), saving roughly **6.5% total device CPU** with savings scaling with entity count. + +Memory allocations were also removed from discovery messages ([#13216](https://github.com/esphome/esphome/pull/13216)), publish paths ([#13372](https://github.com/esphome/esphome/pull/13372)), topic building ([#13434](https://github.com/esphome/esphome/pull/13434), [#13812](https://github.com/esphome/esphome/pull/13812)), and log forwarding ([#13809](https://github.com/esphome/esphome/pull/13809)). + +> **Who benefits most?** Users running MQTT instead of the native API, especially devices with many entities. The more entities you expose over MQTT, the bigger the improvement. If you've noticed high CPU usage or instability on MQTT devices, this update should help. + +## Security Hardening + +Our first internal security audit in [2025.10.0](/changelog/2025.10.0/#security-enhancements) led to several deprecations, most of which were completed in [2026.1.0](/changelog/2026.1.0/). This release started a new review cycle. No issues requiring deprecation were found, but we identified several additional hardening opportunities. + +- **Constant-time authentication** - The dashboard ([#13865](https://github.com/esphome/esphome/pull/13865)) and web server ([#13868](https://github.com/esphome/esphome/pull/13868)) now use constant-time string comparisons for Basic Auth credential checks, preventing timing-based side-channel attacks +- **Cryptographic random generation** - The OTA component ([#13863](https://github.com/esphome/esphome/pull/13863)) and setup wizard ([#13864](https://github.com/esphome/esphome/pull/13864)) now use Python's `secrets` module for generating authentication nonces and fallback AP passwords, replacing less secure random sources +- **Protobuf parsing hardening** - The API protobuf parser now guards against overlong varint encodings ([#13870](https://github.com/esphome/esphome/pull/13870)) +- **Download path validation** - The dashboard binary download handler now uses `Path.resolve()` and `relative_to()` for path validation instead of string replacement ([#13867](https://github.com/esphome/esphome/pull/13867)) +- **Auth header validation** - The dashboard gracefully handles malformed Basic Auth headers instead of raising exceptions ([#13866](https://github.com/esphome/esphome/pull/13866)) + +## New Components + +### DLMS/COSEM Smart Meter + +The new [dlms_meter](/components/sensor/dlms_meter) component adds support for smart meters using the DLMS/COSEM protocol, commonly used by European energy providers ([#8009](https://github.com/esphome/esphome/pull/8009)). The component connects via UART to an M-Bus adapter and supports encrypted communication with configurable decryption keys. Available sensors include voltage, current, and active power per phase, as well as energy totals and timestamps. Multiple provider-specific configurations are supported, including Netz NOE and EVN. + +### CH423 I/O Expander + +The new [ch423](/components/ch423) component provides support for the CH423 I/O expander with 24 GPIO pins: 8 bidirectional I/O pins and 16 output-only pins ([#13079](https://github.com/esphome/esphome/pull/13079)). Based on the CH422G driver architecture, it communicates over I2C and can be used with standard GPIO binary sensors, switches, and outputs. + +### SY6970 Battery Management IC + +The new [sy6970](/components/sensor/sy6970) component supports the SY6970 battery management IC, commonly found in devices like the LilyGo T-Display S3 Pro ([#13311](https://github.com/esphome/esphome/pull/13311)). It provides: + +- **Voltage sensors** - VBUS, battery, and system voltage monitoring +- **Current sensors** - Charge and precharge current measurement +- **Binary sensors** - Charging status, VBUS connection, and charge completion +- **Text sensors** - Bus status, charge status, and NTC temperature status +- **Configurable charging** - Set charge voltage, current limits, and enable/disable charging + +## Expanded Display Support + +This release adds support for **7 new display models** across multiple display platforms, with a particular focus on ESP32-P4 displays. + +**MIPI DSI displays:** + +- **Waveshare ESP32-P4-WIFI6-TOUCH-LCD-7B** - 7" touchscreen for the ESP32-P4 ([#13608](https://github.com/esphome/esphome/pull/13608)) +- **Waveshare ESP32-P4-WIFI6-TOUCH-LCD-3.4C** - 800x800 circular display ([#13840](https://github.com/esphome/esphome/pull/13840)) +- **Waveshare ESP32-P4-WIFI6-TOUCH-LCD-4C** - 720x720 circular display ([#13840](https://github.com/esphome/esphome/pull/13840)) +- **Guition JC8012P4A1** - An affordable display panel ([#13241](https://github.com/esphome/esphome/pull/13241)) +- **M5Stack Tab5 V2** - Updated revision using the ST7123 integrated display-touch driver ([#12074](https://github.com/esphome/esphome/pull/12074)) + +**MIPI SPI displays:** + +- **ESP32-2432S028 variants** - Added support for ILI9342, ILI9342A, and ST7789V driver chip variants of the popular Sunton board ([#13340](https://github.com/esphome/esphome/pull/13340)) + +**HUB75 LED matrix:** + +- **Huidu HD-WF1** - Added pin configuration for the WF1 version of the Huidu board ([#13341](https://github.com/esphome/esphome/pull/13341)) + +**E-Paper:** + +- **Waveshare 1.54-G** - 4-color e-paper display based on the JD79660 controller ([#13758](https://github.com/esphome/esphome/pull/13758)) + +## Zigbee and nRF52 Platform Enhancements + +The Zigbee integration on nRF52 receives several important improvements in this release. + +- **Time synchronization** - Zigbee end devices can now synchronize their clocks from the Zigbee coordinator, enabling time-based automations on battery-powered devices ([#12236](https://github.com/esphome/esphome/pull/12236)) +- **Number component support** - ESPHome number entities can now be exposed over Zigbee, expanding the set of entity types available for Zigbee-connected devices ([#13581](https://github.com/esphome/esphome/pull/13581)) +- **Custom vendor OUI** - Configure the IEEE 802.15.4 Vendor Organizationally Unique Identifier to replace Nordic Semiconductor's default company ID with your own, or use a random address during development ([#13580](https://github.com/esphome/esphome/pull/13580)) +- **Thread-safe task log buffer** - A new `TaskLogBuffer` implementation for nRF52/Zephyr using Zephyr's native `mpsc_pbuf` enables reliable multi-threaded logging, matching the capabilities already available on ESP32, Host, and LibreTiny ([#13862](https://github.com/esphome/esphome/pull/13862)) + +## LibreTiny Platform Update + +LibreTiny has been updated from v1.10.x to v1.12.1 ([#13512](https://github.com/esphome/esphome/pull/13512), [#13851](https://github.com/esphome/esphome/pull/13851)), bringing new board support (WBR3, generic RTL8720CM, CR3L), a refactored Serial library with dynamic RX/TX pin changes, static IP support for Realtek AMB WiFi, improved OTA for Realtek AMBZ2, Beken BDK 3.0.78 support, and several WiFi stability fixes including watchdog resets during connection attempts on BK72xx. + +## Cover Component: Operation-Based Triggers and Conditions + +The cover component gains new triggers that fire based on movement state, making cover automations much more natural to write ([#13471](https://github.com/esphome/esphome/pull/13471)). + +**New triggers:** + +- **`on_opening`** - Fires when the cover starts opening +- **`on_closing`** - Fires when the cover starts closing +- **`on_idle`** - Fires when the cover stops moving + +**New conditions:** + +- **`cover.is_open`** - Check if a cover is fully open +- **`cover.is_closed`** - Check if a cover is fully closed + +The existing `on_open` trigger has been renamed to `on_opened` (the old name is deprecated until 2026.8.0). Additionally, `on_opened` and `on_closed` now only fire on *transitions* to the fully open/closed state, fixing unintended repeated trigger firing that occurred on every state update. + +## New Sensor Features and Hardware Support + +**New hardware support:** + +- **Plantower PMS1003, PMS3003, PMS9003M** - Three additional particle sensor models are now supported by the [pmsx003](/components/sensor/pmsx003) component ([#13640](https://github.com/esphome/esphome/pull/13640)) +- **Resol DeltaSol BS/2** - The [vbus](/components/vbus) component now supports this solar controller with temperature, pump speed, heat quantity, and error sensors ([#13762](https://github.com/esphome/esphome/pull/13762)) +- **BMP581 I2C/SPI split** - The BMP581 pressure sensor has been split into `bmp581_base` and `bmp581_i2c` components, preparing the way for future SPI support. Existing users will need to update their platform from `bmp581` to `bmp581_i2c` ([#12485](https://github.com/esphome/esphome/pull/12485)) + +**Sensor filter improvements:** + +- **`max_delta` filter** - A new filter that rejects measurement differences exceeding a configurable threshold, effectively removing outliers from sensor readings ([#12605](https://github.com/esphome/esphome/pull/12605)) + +**Debug component:** + +- **`min_free` heap sensor** - Reports the minimum free heap size since boot for ESP32 and LibreTiny platforms, useful for detecting memory high-water-mark usage ([#13231](https://github.com/esphome/esphome/pull/13231)) +- **`fragmentation` sensor** - Now available on ESP32 in addition to ESP8266 ([#13231](https://github.com/esphome/esphome/pull/13231)) + +## Additional Component Enhancements + +- **HTTP request custom CA certificates** - ESP32 devices can now use `ca_certificate_path` to specify a PEM file for SSL verification, enabling HTTPS connections to servers with self-signed or custom CA certificates ([#13552](https://github.com/esphome/esphome/pull/13552)) +- **BTHome encrypted beacons** - The bthome_mithermometer component now supports decrypting encrypted BTHome beacons from PVVX firmware using a bindkey, preventing spoofing with fake data over the air ([#13428](https://github.com/esphome/esphome/pull/13428)) +- **Ethernet `on_connect`/`on_disconnect` triggers** - The [ethernet](/components/ethernet) component now supports connection triggers, matching the functionality already available for WiFi ([#13677](https://github.com/esphome/esphome/pull/13677)) +- **HeatpumpIR ESP-IDF support** - The heatpumpir component now works with the ESP-IDF framework, not just Arduino ([#13042](https://github.com/esphome/esphome/pull/13042)) +- **Select condition** - A new `select.is` condition allows checking the value of a select entity in automations ([#13267](https://github.com/esphome/esphome/pull/13267)) +- **MQTT cover JSON state payload** - Covers can now publish position, tilt, and state as a single JSON payload on one topic, reducing MQTT message volume ([#12639](https://github.com/esphome/esphome/pull/12639)) +- **Key collector text sensor** - The [key_collector](/components/key_collector) component now supports a text sensor platform and accepts multiple key input sources ([#13617](https://github.com/esphome/esphome/pull/13617)) +- **Template water heater improvements** - Added `target_temperature` lambda ([#13661](https://github.com/esphome/esphome/pull/13661)) and On/Off and Away mode support ([#13839](https://github.com/esphome/esphome/pull/13839)) +- **Nextion configurable timeouts** - The `startup_override_ms` and `max_queue_age` constants are now configurable via YAML, allowing users to tune timing for their specific displays ([#11098](https://github.com/esphome/esphome/pull/11098)) +- **Voice assistant timer optimization** - Timer storage switched from `unordered_map` to `vector`, eliminating per-tick heap allocation and string copies for the hot path that runs every second ([#13857](https://github.com/esphome/esphome/pull/13857)) + +## Looking Ahead + +This release continues the work that began in [2025.10.0](/changelog/2025.10.0/) and accelerated in [2026.1.0](/changelog/2026.1.0/): making ESPHome leaner and more reliable on every platform. Fewer heap allocations, smaller firmware, and lower CPU usage all contribute to devices that stay stable for months and years. That focus on memory discipline and long-term stability will continue in future releases as we extend these improvements to more components and platforms. + +On the documentation side, [esphome.io](https://esphome.io) has migrated from Hugo to [Starlight](https://starlight.astro.build/), bringing faster page loads, improved search, and a modern documentation framework that will make it easier to maintain and contribute to the docs going forward. +{/* FEATURE_HIGHLIGHTS_END */} + +## Breaking Changes + +Most users can update without any configuration changes. The items below are grouped by whether you need to take action. + +{/* BREAKING_CHANGES_USERS_START */} +### Action required (if you use these components) + +- **BMP581**: Update your platform from `bmp581` to `bmp581_i2c`. The component has been split to prepare for future SPI support. [#12485](https://github.com/esphome/esphome/pull/12485) + +- **Cover triggers**: Rename `on_open` to `on_opened` in your cover automations (the old name is deprecated until 2026.8.0). Additionally, `on_opened` and `on_closed` now only fire on *transitions* to the fully open/closed state, not on every state update. Automations that relied on repeated firing will need to be adjusted. [#13471](https://github.com/esphome/esphome/pull/13471) + +- **DSMR**: Move `fw_core_version` and `fw_module_version` from `sensor:` to `text_sensor:`. The meter returns version strings (e.g., `(ER11)`), not numbers. [#13780](https://github.com/esphome/esphome/pull/13780) + +- **Arduino library APIs in lambdas**: If you directly call Arduino library APIs in lambdas (e.g., `Preferences`, `WiFi`, `Wire`), add them to your config. ESPHome's built-in components handle this automatically, so this only affects custom lambda code. [#13623](https://github.com/esphome/esphome/pull/13623) + + ```yaml + esphome: + libraries: + - Preferences # Add any Arduino libraries you use directly + ``` + +- **Voice Assistant timers**: If you use lambdas that iterate timers with map pair semantics (`.second`), update them to access `Timer` fields directly. See the PR description for before/after examples. [#13857](https://github.com/esphome/esphome/pull/13857) + +### Most users unaffected + +These changes improve correctness or save resources. They only require action if you depend on the previous behavior. + +- **ESP32 certificate bundle**: The default TLS bundle now includes only Common CAs (~99% of websites), saving ~51KB of flash. If you connect to HTTPS services using uncommon CAs, add `use_full_certificate_bundle: true` under `esp32: framework: advanced:`. [#13574](https://github.com/esphome/esphome/pull/13574) + +- **BL0942**: Calibration reference values have been corrected to match datasheet formulas. Sensor readings will change. Users with custom calibration may need to re-calibrate. [#12867](https://github.com/esphome/esphome/pull/12867) + +- **Sensor clamp filter**: The `clamp` filter now handles infinity and NaN instead of passing them through. [#13457](https://github.com/esphome/esphome/pull/13457) + +- **Water Heater**: On/Off and Away state control now requires both Home Assistant 2026.3.0 and ESPHome 2026.2.0. [#13892](https://github.com/esphome/esphome/pull/13892) +{/* BREAKING_CHANGES_USERS_END */} + +### Breaking Changes for Developers + +{/* BREAKING_CHANGES_DEVELOPERS_START */} +- **ESP32 Arduino selective compilation**: Arduino libraries are now disabled by default. External components that use Arduino libraries must call `cg.add_library("LibraryName", None)` in their `to_code()` to enable them. [#13623](https://github.com/esphome/esphome/pull/13623) +- **Voice Assistant `get_timers()` return type**: `get_timers()` now returns `const std::vector &` instead of `const std::unordered_map &`. Code using map pair semantics (`.second`) must be updated to iterate `Timer` directly. The `on_timer_tick` automation arg type is now `const std::vector &`. [#13857](https://github.com/esphome/esphome/pull/13857) +- **Cover `on_open` renamed to `on_opened`**: The `CoverOpenTrigger` now tracks transitions instead of firing on every state update. The old `on_open` name is deprecated until 2026.8.0. [#13471](https://github.com/esphome/esphome/pull/13471) +- **Water Heater API**: `WATER_HEATER_COMMAND_HAS_STATE` is deprecated in favor of `WATER_HEATER_COMMAND_HAS_ON_STATE` and `WATER_HEATER_COMMAND_HAS_AWAY_STATE` for granular on/off and away control. [#13892](https://github.com/esphome/esphome/pull/13892) + +For detailed migration guides and API documentation, see the [ESPHome Developers Documentation](https://developers.esphome.io/). +{/* BREAKING_CHANGES_DEVELOPERS_END */} + +{/* markdownlint-disable MD013 */} + ## Full list of changes The lists below are grouped by tag and may contain duplicates across sections. @@ -417,7 +661,6 @@ The lists below are grouped by tag and may contain duplicates across sections. - [uart] Change available() return type from int to size_t [esphome#13893](https://github.com/esphome/esphome/pull/13893) by [@swoboda1337](https://github.com/swoboda1337) - [mipi_dsi] Add WAVESHARE-ESP32-P4-WIFI6-TOUCH-LCD 3.4C and 4C [esphome#13840](https://github.com/esphome/esphome/pull/13840) by [@gtjoseph](https://github.com/gtjoseph) (new-feature) - [scheduler] Make core timer ID collisions impossible with type-safe internal IDs [esphome#13882](https://github.com/esphome/esphome/pull/13882) by [@bdraco](https://github.com/bdraco) -- [scheduler] Make core timer ID collisions impossible with type-safe internal IDs [esphome#13882](https://github.com/esphome/esphome/pull/13882) by [@bdraco](https://github.com/bdraco) - [uart] Convert parity_to_str to PROGMEM_STRING_TABLE [esphome#13805](https://github.com/esphome/esphome/pull/13805) by [@bdraco](https://github.com/bdraco) - [logger] Resolve thread name once and pass through logging chain [esphome#13836](https://github.com/esphome/esphome/pull/13836) by [@bdraco](https://github.com/bdraco) - [pylontech] Batch UART reads to reduce loop overhead [esphome#13824](https://github.com/esphome/esphome/pull/13824) by [@bdraco](https://github.com/bdraco) From a45f5d136e9b3abb5bcae0880036289cfb137e5b Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Fri, 13 Feb 2026 18:24:31 -0500 Subject: [PATCH 06/52] Fix malformed links and add missing image in component index (#6076) Fix 5 component entries in index.mdx that were missing leading slashes and trailing slashes in URLs, and had inconsistent spacing. Add missing key_collector.svg image. Co-authored-by: Claude Opus 4.6 --- .../components => public}/images/key_collector.svg | 0 src/content/docs/components/index.mdx | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) rename {src/content/docs/components => public}/images/key_collector.svg (100%) diff --git a/src/content/docs/components/images/key_collector.svg b/public/images/key_collector.svg similarity index 100% rename from src/content/docs/components/images/key_collector.svg rename to public/images/key_collector.svg diff --git a/src/content/docs/components/index.mdx b/src/content/docs/components/index.mdx index d8607512ff..0d5381e378 100644 --- a/src/content/docs/components/index.mdx +++ b/src/content/docs/components/index.mdx @@ -176,7 +176,7 @@ Create update entities simplifying management of OTA updates. ## Touchscreen Components From 89b08302c860e1aee6e53bbdbce4da2f737c9d34 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Fri, 13 Feb 2026 18:26:04 -0500 Subject: [PATCH 07/52] Fix blank guides/changelog and guides index pages (#6077) * Fix blank guides/changelog and guides index pages The Hugo-to-Starlight migration stripped the redirect shortcode from guides/changelog.mdx, leaving a blank page. The guides/index.mdx was also empty since Hugo auto-generated section listings but Starlight does not. - Add /guides/changelog/ redirect to latest changelog in astro.config - Remove empty guides/changelog.mdx stub (redirect replaces it) - Populate guides/index.mdx with categorized links to all guide pages Co-Authored-By: Claude Opus 4.6 * Add changelog pages to pagefind search index The pagefind glob only indexed components, cookbook, guides, projects, and web-api. Changelog pages were not searchable. Co-Authored-By: Claude Opus 4.6 * Revert "Add changelog pages to pagefind search index" This reverts commit ffbd3bb5d45109406a666a5d9793437633352987. * Enable pagefind search indexing for changelog index page This allows searching for "changelog" to return the changelog index, giving users a way to discover changelogs via site search. Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- astro.config.mjs | 1 + src/content/docs/changelog/index.mdx | 2 +- src/content/docs/guides/changelog.mdx | 4 --- src/content/docs/guides/index.mdx | 36 +++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) delete mode 100644 src/content/docs/guides/changelog.mdx diff --git a/astro.config.mjs b/astro.config.mjs index 31f5d5bffe..1585e250ed 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -148,6 +148,7 @@ export default defineConfig({ redirects: { "/changelog/": `/changelog/${latestChangelog}/`, "/changelog/index/": `/changelog/${latestChangelog}/`, + "/guides/changelog/": `/changelog/${latestChangelog}/`, }, vite: { resolve: { diff --git a/src/content/docs/changelog/index.mdx b/src/content/docs/changelog/index.mdx index f35a509bb8..8da7d2e6f3 100644 --- a/src/content/docs/changelog/index.mdx +++ b/src/content/docs/changelog/index.mdx @@ -1,7 +1,7 @@ --- description: "ESPHome Changelog" title: "Changelog" -pagefind: false +pagefind: true --- Redirecting to the latest release... diff --git a/src/content/docs/guides/changelog.mdx b/src/content/docs/guides/changelog.mdx deleted file mode 100644 index 9bd14aca54..0000000000 --- a/src/content/docs/guides/changelog.mdx +++ /dev/null @@ -1,4 +0,0 @@ ---- -description: "Changelog" -title: "Changelog" ---- diff --git a/src/content/docs/guides/index.mdx b/src/content/docs/guides/index.mdx index 1ea7f6dddd..9998b1f1cd 100644 --- a/src/content/docs/guides/index.mdx +++ b/src/content/docs/guides/index.mdx @@ -2,3 +2,39 @@ description: "Guides" title: "Guides" --- + +## Getting Started + +- [Getting Started with ESPHome and Home Assistant](/guides/getting_started_hassio/) +- [Getting Started with the ESPHome Command Line](/guides/getting_started_command_line/) +- [Installing ESPHome Manually](/guides/installing_esphome/) +- [Physically Connecting to your Device](/guides/physical_device_connection/) +- [Using an ESP devboard as a USB-UART bridge](/guides/devboard_as_flasher/) + +## Configuration + +- [YAML Configuration in ESPHome](/guides/yaml/) +- [Configuration Types](/guides/configuration-types/) +- [Command Line Interface](/guides/cli/) +- [Frequently Asked Questions](/guides/faq/) +- [Troubleshooting](/guides/troubleshooting/) +- [Security Best Practices](/guides/security_best_practices/) + +## Migration + +- [Migrating from Tasmota](/guides/migrate_sonoff_tasmota/) +- [Migrating from ESPEasy](/guides/migrate_espeasy/) +- [Migrating from ESPurna](/guides/migrate_espurna/) +- [ESP32 Arduino to ESP-IDF Migration Guide](/guides/esp32_arduino_to_idf/) + +## Projects & Community + +- [DIY Examples](/guides/diy/) +- [Sharing ESPHome devices](/guides/creators/) +- [Made for ESPHome](/guides/made_for_esphome/) +- [Contributors](/guides/supporters/) + +## Advanced + +- [Create audio clip files for use with I²S Speakers](/guides/audio_clips_for_i2s/) +- [Setting up RMT Devices](/guides/setting_up_rmt_devices/) From 237013fb24360bb96943d87416e5751e107346a1 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Fri, 13 Feb 2026 22:03:35 -0500 Subject: [PATCH 08/52] Prefix APIRef links with "API Reference:" (#6081) Co-authored-by: Claude Opus 4.6 --- src/components/APIClass.astro | 2 +- src/components/APIRef.astro | 4 +--- src/components/APIStruct.astro | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/APIClass.astro b/src/components/APIClass.astro index fade523780..e1c35e8090 100644 --- a/src/components/APIClass.astro +++ b/src/components/APIClass.astro @@ -29,4 +29,4 @@ const baseUrl = 'https://api-docs.esphome.io'; const url = `${baseUrl}/classesphome_1_1${processedPath}`; --- -{text} +API Reference: {text} diff --git a/src/components/APIRef.astro b/src/components/APIRef.astro index 1e95ab7a24..1d18ad0939 100644 --- a/src/components/APIRef.astro +++ b/src/components/APIRef.astro @@ -31,8 +31,6 @@ processedPath = processedPath.replace(/([A-Z])/g, (match) => `_${match.toLowerCa const baseUrl = 'https://api-docs.esphome.io'; const url = `${baseUrl}/${processedPath}`; -// Display text defaults to "API Reference" if same as path -const displayText = text === path ? 'API Reference' : text; --- -{displayText} +API Reference: {text} diff --git a/src/components/APIStruct.astro b/src/components/APIStruct.astro index 1341f6b027..6372b43f14 100644 --- a/src/components/APIStruct.astro +++ b/src/components/APIStruct.astro @@ -29,4 +29,4 @@ const baseUrl = 'https://api-docs.esphome.io'; const url = `${baseUrl}/structesphome_1_1${processedPath}`; --- -{text} +API Reference: {text} From 4ec1bb50ba1808558ec25f47d0f44d81c29cf6b8 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Sat, 14 Feb 2026 11:41:12 -0500 Subject: [PATCH 09/52] Make changelog index a real searchable page (#6083) * Make changelog index a real searchable page Replace the /changelog/ redirect with a LatestChangelog component that dynamically renders the latest changelog content at build time. This makes the changelog index discoverable by pagefind search while still showing the latest release content. Co-Authored-By: Claude Opus 4.6 * Add client-side redirect to latest changelog The index page renders the latest changelog content for pagefind searchability, then immediately redirects visitors to the dedicated changelog page via client-side JS. Co-Authored-By: Claude Opus 4.6 * Expand changelog index description for search results Co-Authored-By: Claude Opus 4.6 * Apply suggestion from @swoboda1337 --------- Co-authored-by: Claude Opus 4.6 --- astro.config.mjs | 28 ---------------------- src/components/LatestChangelog.astro | 36 ++++++++++++++++++++++++++++ src/content/docs/changelog/index.mdx | 4 +++- 3 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 src/components/LatestChangelog.astro diff --git a/astro.config.mjs b/astro.config.mjs index 1585e250ed..e1efcc26c1 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -55,27 +55,6 @@ function getChangelogItems() { })); } -// Get the latest changelog version for redirects -function getLatestChangelog() { - const changelogDir = path.join(__dirname, "src/content/docs/changelog"); - const files = fs - .readdirSync(changelogDir) - .filter((f) => f.endsWith(".mdx") && f !== "index.mdx"); - - let latest = { sortValue: 0, slug: "" }; - for (const f of files) { - const match = f.match(/^(\d{4})\.(\d+)\.(\d+)\.mdx$/); - if (match) { - const [, year, month, patch] = match; - const sortValue = - parseInt(year) * 10000 + parseInt(month) * 100 + parseInt(patch); - if (sortValue > latest.sortValue) { - latest = { sortValue, slug: `${year}.${month}.${patch}` }; - } - } - } - return latest.slug; -} // Generate component sidebar items with proper labels function getComponentItems() { @@ -141,15 +120,8 @@ function getComponentItems() { return items.map(({ sort, ...item }) => item); } -const latestChangelog = getLatestChangelog(); - export default defineConfig({ site: "https://esphome.io", - redirects: { - "/changelog/": `/changelog/${latestChangelog}/`, - "/changelog/index/": `/changelog/${latestChangelog}/`, - "/guides/changelog/": `/changelog/${latestChangelog}/`, - }, vite: { resolve: { alias: { diff --git a/src/components/LatestChangelog.astro b/src/components/LatestChangelog.astro new file mode 100644 index 0000000000..9a7c5c4b04 --- /dev/null +++ b/src/components/LatestChangelog.astro @@ -0,0 +1,36 @@ +--- +import { getCollection, render } from "astro:content"; + +const allDocs = await getCollection("docs"); + +// Filter to changelog entries (excluding the index) +const changelogs = allDocs.filter( + (entry) => + entry.id.startsWith("changelog/") && + entry.id !== "changelog/" && + entry.id !== "changelog/index" +); + +// Parse version and find the latest +let latest = { sortValue: 0, entry: null as (typeof changelogs)[0] | null }; +for (const entry of changelogs) { + // Match 2021.x.x style IDs + const match = entry.id.match(/changelog\/(\d{4})\.(\d+)\.(\d+)/); + if (match) { + const [, year, month, patch] = match; + const sortValue = + parseInt(year) * 10000 + parseInt(month) * 100 + parseInt(patch); + if (sortValue > latest.sortValue) { + latest = { sortValue, entry }; + } + } +} + +const rendered = latest.entry ? await render(latest.entry) : null; +const Content = rendered?.Content; +const slug = latest.entry?.data.slug ?? latest.entry?.id; +const redirectUrl = slug ? `/${slug}/` : null; +--- + +{redirectUrl && } +{Content && } diff --git a/src/content/docs/changelog/index.mdx b/src/content/docs/changelog/index.mdx index 8da7d2e6f3..7309bc13c4 100644 --- a/src/content/docs/changelog/index.mdx +++ b/src/content/docs/changelog/index.mdx @@ -4,4 +4,6 @@ title: "Changelog" pagefind: true --- -Redirecting to the latest release... +import LatestChangelog from "@components/LatestChangelog.astro"; + + From 5ef130dd606dfecd199c176737e649a81a8ea47e Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Sun, 15 Feb 2026 13:42:09 -0500 Subject: [PATCH 10/52] [remote_transmitter/remote_receiver/esp32_rmt_led_strip] Document ESP32-C2/C61 no RMT support (#6086) Update docs for ESP32-C2 and ESP32-C61 which lack RMT hardware: - esp32_rmt_led_strip: Add note that C2/C61 are not supported - remote_transmitter/receiver: Note C2/C61 use software fallback, rename ESP32 config section to ESP32 RMT config, remove C61 from RMT memory tables Co-authored-by: Claude Opus 4.6 --- .../docs/components/light/esp32_rmt_led_strip.mdx | 4 +++- src/content/docs/components/remote_receiver.mdx | 15 +++++++++------ .../docs/components/remote_transmitter.mdx | 12 ++++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/content/docs/components/light/esp32_rmt_led_strip.mdx b/src/content/docs/components/light/esp32_rmt_led_strip.mdx index 7628f18766..8901866d65 100644 --- a/src/content/docs/components/light/esp32_rmt_led_strip.mdx +++ b/src/content/docs/components/light/esp32_rmt_led_strip.mdx @@ -7,6 +7,9 @@ import APIRef from '@components/APIRef.astro'; This is a component using the ESP32 RMT peripheral to drive most addressable LED strips. +> [!NOTE] +> The ESP32-C2 and ESP32-C61 do not have RMT hardware and are not supported by this component. + ```yaml light: - platform: esp32_rmt_led_strip @@ -59,7 +62,6 @@ light: | ESP32-C3 | 96 symbols | 48 symbols | | ESP32-C5 | 96 symbols | 48 symbols | | ESP32-C6 | 96 symbols | 48 symbols | -| ESP32-C61 | 96 symbols | 48 symbols | | ESP32-H2 | 96 symbols | 48 symbols | | ESP32-P4 | 192 symbols | 48 symbols | | ESP32-S2 | 256 symbols | 64 symbols | diff --git a/src/content/docs/components/remote_receiver.mdx b/src/content/docs/components/remote_receiver.mdx index a1b7199ac4..a83ce8a022 100644 --- a/src/content/docs/components/remote_receiver.mdx +++ b/src/content/docs/components/remote_receiver.mdx @@ -88,16 +88,20 @@ Multiple remote receivers can be configured as a list of dict definitions within be considered complete. Defaults to `10ms`. The maximum allowable value is: - `65536us` on the `ESP32` and `ESP32-S2` variants - - `32767us` on all other ESP32 variants - - `4294967295us` on all other platforms + - `32767us` on other ESP32 variants with RMT hardware + - `4294967295us` on all other platforms (including ESP32-C2 and ESP32-C61 which use a software implementation) - Note: The ESP32 values listed above assume the default `clock_resolution`. If a different `clock_resolution` is used, - the values are scaled by 1000000 / `clock_resolution`. + Note: The ESP32 RMT values listed above assume the default `clock_resolution`. If a different `clock_resolution` is + used, the values are scaled by 1000000 / `clock_resolution`. - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. Useful when multiple receivers are configured on a single device. -### ESP32 configuration variables +### ESP32 RMT configuration variables + +> [!NOTE] +> The following options apply only to ESP32 variants with RMT hardware. They are not available on the ESP32-C2 and +> ESP32-C61, which use a software implementation. - **rmt_symbols** (*Optional*, int): When `use_dma` is enabled, this sets the size of the driver's internal DMA buffer. When DMA is disabled, it specifies how much RMT memory is allocated to the component. RMT memory is shared @@ -110,7 +114,6 @@ Multiple remote receivers can be configured as a list of dict definitions within | ESP32-C3 | 96 symbols | 48 symbols | | ESP32-C5 | 96 symbols | 48 symbols | | ESP32-C6 | 96 symbols | 48 symbols | -| ESP32-C61 | 96 symbols | 48 symbols | | ESP32-H2 | 96 symbols | 48 symbols | | ESP32-P4 | 192 symbols | 48 symbols | | ESP32-S2 | 256 symbols | 64 symbols | diff --git a/src/content/docs/components/remote_transmitter.mdx b/src/content/docs/components/remote_transmitter.mdx index 19ada6765c..1d6bdd4ed5 100644 --- a/src/content/docs/components/remote_transmitter.mdx +++ b/src/content/docs/components/remote_transmitter.mdx @@ -16,8 +16,9 @@ The component is split into two parts: **See** [Setting up IR Devices](/guides/setting_up_rmt_devices#remote-setting-up-infrared) **and** [Setting up RF Devices](/guides/setting_up_rmt_devices#remote-setting-up-rf) **for details.** > [!NOTE] -> This component performs best with an ESP32 or variant; they have a dedicated hardware peripheral which ensures -> accurate signal timing. +> This component performs best with an ESP32 or variant; most have a dedicated RMT hardware peripheral which ensures +> accurate signal timing. The ESP32-C2 and ESP32-C61 lack RMT hardware and use a software (GPIO bitbang) +> implementation instead. ```yaml # Example configuration entry @@ -36,7 +37,11 @@ remote_transmitter: - **id** (*Optional*, [ID](/guides/configuration-types#id)): Manually specify the ID used for code generation. Useful when multiple transmitters are connected to a single device. -### ESP32 configuration variables +### ESP32 RMT configuration variables + +> [!NOTE] +> The following options apply only to ESP32 variants with RMT hardware. They are not available on the ESP32-C2 and +> ESP32-C61, which use a software implementation. - **rmt_symbols** (*Optional*, int): When `use_dma` is enabled, this sets the size of the driver's internal DMA buffer. When DMA is disabled, it specifies how much RMT memory is allocated to the component. RMT memory is shared @@ -49,7 +54,6 @@ remote_transmitter: | ESP32-C3 | 96 symbols | 48 symbols | | ESP32-C5 | 96 symbols | 48 symbols | | ESP32-C6 | 96 symbols | 48 symbols | -| ESP32-C61 | 96 symbols | 48 symbols | | ESP32-H2 | 96 symbols | 48 symbols | | ESP32-P4 | 192 symbols | 48 symbols | | ESP32-S2 | 256 symbols | 64 symbols | From 4c3d66eb2c53cab106d1213dcfac8c195b485af1 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Sun, 15 Feb 2026 13:42:19 -0500 Subject: [PATCH 11/52] Fix changelog redirect to preserve URL hash fragment (#6088) Co-authored-by: Claude Opus 4.6 --- src/components/LatestChangelog.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/LatestChangelog.astro b/src/components/LatestChangelog.astro index 9a7c5c4b04..8e31d2f0f5 100644 --- a/src/components/LatestChangelog.astro +++ b/src/components/LatestChangelog.astro @@ -32,5 +32,5 @@ const slug = latest.entry?.data.slug ?? latest.entry?.id; const redirectUrl = slug ? `/${slug}/` : null; --- -{redirectUrl && } +{redirectUrl && } {Content && } From 4fd3078f748fdde5d545a0fa09a7a07069ca9d22 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Sun, 15 Feb 2026 13:42:30 -0500 Subject: [PATCH 12/52] [combination] Fix 'coeffecient' typo to 'coefficient' in docs (#6087) Co-authored-by: Claude Opus 4.6 --- src/content/docs/components/sensor/combination.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/docs/components/sensor/combination.mdx b/src/content/docs/components/sensor/combination.mdx index 7ea6c6694e..ecf530049a 100644 --- a/src/content/docs/components/sensor/combination.mdx +++ b/src/content/docs/components/sensor/combination.mdx @@ -37,7 +37,7 @@ sensor: ``` - `LINEAR` combination: This type sums all source sensors after multiplying each by - a configured coeffecient. + a configured coefficient. ```yaml # Example configuration entry @@ -47,9 +47,9 @@ sensor: name: "Balance Power" sources: - source: total_power - coeffecient: 1.0 + coefficient: 1.0 - source: circuit_1_power - coeffecient: -1.0 + coefficient: -1.0 ``` - `MAXIMUM`, `MEAN`, `MEDIAN`, `MINIMUM`, `MOST_RECENTLY_UPDATED`, @@ -84,8 +84,8 @@ sensor: parameter, with low values marking accurate data. If implemented as a template, the measurement is in parameter `x`. - - **coeffecient** (**Required**, only for `LINEAR` type, float, [templatable](/automations/templates)): - The coeffecient to multiply the sensor's state by before summing all source sensor states. + - **coefficient** (**Required**, only for `LINEAR` type, float, [templatable](/automations/templates)): + The coefficient to multiply the sensor's state by before summing all source sensor states. If implemented as a template, the measurement is in parameter `x`. - **process_std_dev** (**Required**, only for `KALMAN` type, float): The standard deviation of the From 600c599dc5308edfbc3230c37928510df2f8db2a Mon Sep 17 00:00:00 2001 From: Pawelo <81100874+pgolawsk@users.noreply.github.com> Date: Sun, 15 Feb 2026 21:58:26 +0100 Subject: [PATCH 13/52] [epaper_spi] Add WeAct 3-color e-paper displays (#6053) --- src/content/docs/components/display/epaper_spi.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/content/docs/components/display/epaper_spi.mdx b/src/content/docs/components/display/epaper_spi.mdx index 58af346f3d..74330b367e 100644 --- a/src/content/docs/components/display/epaper_spi.mdx +++ b/src/content/docs/components/display/epaper_spi.mdx @@ -45,6 +45,9 @@ the pins used to interface to the display to be specified. | Waveshare-1.54in-G | Waveshare | [https://www.waveshare.com/1.54inch-e-paper-g.htm](https://www.waveshare.com/1.54inch-e-paper-g.htm) | | Waveshare-2.13in-v3 | Waveshare | [https://www.waveshare.com/pico-epaper-2.13.htm](https://www.waveshare.com/pico-epaper-2.13.htm) | | Waveshare-4.26in | Waveshare | [https://www.waveshare.com/4.26inch-e-paper.htm](https://www.waveshare.com/4.26inch-e-paper.htm) | +| WeAct-2.13in-3c | WeAct | 2.13" 3-color e-paper (250x122, SSD1683) | +| WeAct-2.9in-3c | WeAct | 2.9" 3-color e-paper (128x296, SSD1683) | +| WeAct-4.2in-3c | WeAct | 4.2" 3-color e-paper (400x300, SSD1683) | ## Supported integrated display boards From 1aac5ae36bcf02ed452be097d61e5e7acabe0bc5 Mon Sep 17 00:00:00 2001 From: "Cornelius A. Ludmann" Date: Mon, 16 Feb 2026 03:43:39 +0100 Subject: [PATCH 14/52] [epaper_spi] Add Waveshare 7.5in e-Paper (H) to supported panels (#6085) --- .../docs/components/display/epaper_spi.mdx | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/content/docs/components/display/epaper_spi.mdx b/src/content/docs/components/display/epaper_spi.mdx index 74330b367e..d0e182c924 100644 --- a/src/content/docs/components/display/epaper_spi.mdx +++ b/src/content/docs/components/display/epaper_spi.mdx @@ -45,6 +45,7 @@ the pins used to interface to the display to be specified. | Waveshare-1.54in-G | Waveshare | [https://www.waveshare.com/1.54inch-e-paper-g.htm](https://www.waveshare.com/1.54inch-e-paper-g.htm) | | Waveshare-2.13in-v3 | Waveshare | [https://www.waveshare.com/pico-epaper-2.13.htm](https://www.waveshare.com/pico-epaper-2.13.htm) | | Waveshare-4.26in | Waveshare | [https://www.waveshare.com/4.26inch-e-paper.htm](https://www.waveshare.com/4.26inch-e-paper.htm) | +| Waveshare-7.5in-H | Waveshare | [https://www.waveshare.com/7.5inch-e-paper-hat-h.htm](https://www.waveshare.com/7.5inch-e-paper-hat-h.htm) | | WeAct-2.13in-3c | WeAct | 2.13" 3-color e-paper (250x122, SSD1683) | | WeAct-2.9in-3c | WeAct | 2.9" 3-color e-paper (128x296, SSD1683) | | WeAct-4.2in-3c | WeAct | 4.2" 3-color e-paper (400x300, SSD1683) | @@ -68,6 +69,11 @@ but can be overridden if needed. - **cs_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The CS pin. Predefined for integrated boards. - **dc_pin** (**Required**, [Pin Schema](/guides/configuration-types#pin-schema)): The DC pin. Predefined for integrated boards. - **busy_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The BUSY pin, if used. + + > [!NOTE] + > Some displays use inverted busy pin polarity (LOW = busy, HIGH = idle). For these models, set `inverted: true` + > on the busy pin. This applies to: `Waveshare-1.54in-G`, `Waveshare-7.5in-H`. + - **reset_pin** (*Optional*, [Pin Schema](/guides/configuration-types#pin-schema)): The RESET pin, if used. Make sure you pull this pin high (by connecting it to 3.3V with a resistor) if not connected to a GPIO pin. - **dimensions** (**Required**, dict): Dimensions of the screen, specified either as *width* **x** *height* (e.g `320x240` ) @@ -116,6 +122,38 @@ display: busy_pin: { number: GPIOXX, inverted: False, mode: { input: True, pulldown: True } } ``` +### 4-color display example + +Some displays support 4 colors (black, white, red, yellow). Colors are mapped from RGB automatically. +Full refresh times for 4-color displays are typically around 20 seconds. + +```yaml +spi: + clk_pin: GPIO13 + mosi_pin: GPIO14 + +display: + - platform: epaper_spi + model: Waveshare-7.5in-H + cs_pin: GPIO15 + dc_pin: GPIO27 + reset_pin: GPIO26 + busy_pin: + number: GPIO25 + inverted: true + update_interval: 5min + lambda: |- + auto BLACK = Color(0, 0, 0); + auto WHITE = Color(255, 255, 255); + auto RED = Color(255, 0, 0); + auto YELLOW = Color(255, 255, 0); + + it.fill(WHITE); + it.filled_rectangle(50, 50, 80, 80, BLACK); + it.filled_rectangle(150, 50, 80, 80, RED); + it.filled_rectangle(250, 50, 80, 80, YELLOW); +``` + ## See Also - [ESPHome Display Rendering Engine](/components/display#display-engine) From 238febe8dce3d24eb5559218c17ddb1af0964474 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:49:15 -0500 Subject: [PATCH 15/52] [sensor] Add filter headings to table of contents (#6102) Co-authored-by: Claude Opus 4.6 --- astro.config.mjs | 1 + src/routeData.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/routeData.ts diff --git a/astro.config.mjs b/astro.config.mjs index e1efcc26c1..787de34225 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -168,6 +168,7 @@ export default defineConfig({ editLink: { baseUrl: "https://github.com/esphome/esphome-docs/edit/current/", }, + routeMiddleware: ["./src/routeData.ts"], components: { Footer: "./src/components/Footer.astro", }, diff --git a/src/routeData.ts b/src/routeData.ts new file mode 100644 index 0000000000..5137bee509 --- /dev/null +++ b/src/routeData.ts @@ -0,0 +1,44 @@ +import { defineRouteMiddleware } from "@astrojs/starlight/route-data"; +import GithubSlugger from "github-slugger"; + +// Eagerly import all sensor filter MDX files to extract their headings. +const filterModules = import.meta.glob( + "./content/docs/components/sensor/filter/*.mdx", + { eager: true }, +); + +// Build the list of filter TOC entries once at module load time. +const slugger = new GithubSlugger(); +const filterTocEntries = Object.entries(filterModules) + .sort(([a], [b]) => a.localeCompare(b)) + .map(([, module]) => { + const title = (module as any).frontmatter?.title as string | undefined; + if (!title) return null; + return { + depth: 3 as const, + slug: slugger.slug(title), + text: title, + children: [], + }; + }) + .filter(Boolean); + +export const onRequest = defineRouteMiddleware(async (context, next) => { + // Let Starlight generate the default route data first. + await next(); + + const route = context.locals.starlightRoute; + if (!route.toc) return; + + // Find the "Sensor Filters" heading in the TOC — only present on the sensor index page. + const sensorFiltersEntry = route.toc.items.find( + (item) => item.slug === "sensor-filters", + ); + if (!sensorFiltersEntry || sensorFiltersEntry.children.length > 0) return; + + // Inject filter headings as children of the "Sensor Filters" TOC entry. + sensorFiltersEntry.children = filterTocEntries.map((entry) => ({ + ...entry!, + children: [], + })); +}); From 62ad7254a71a2e40bc836fd8c0f95027b2752f6a Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:51:18 -0500 Subject: [PATCH 16/52] Remove Hugo leftovers and update dev tooling for Starlight (#6078) Co-authored-by: Claude Opus 4.6 --- .github/dependabot.yml | 2 +- .gitpod.yml | 5 +- .vscode/tasks.json | 6 +- lint.py | 552 --------- pagefind-bootstrap/components/index.html | 15 - pagefind.yml | 8 - pagefind/fragment/en-us_433ff7f.pf_fragment | Bin 187 -> 0 bytes pagefind/index/en-us_d8685b2.pf_index | Bin 175 -> 0 bytes pagefind/pagefind-entry.json | 1 - pagefind/pagefind-highlight.js | 1069 ----------------- pagefind/pagefind-modular-ui.css | 214 ---- pagefind/pagefind-modular-ui.js | 8 - pagefind/pagefind-ui.css | 1 - pagefind/pagefind-ui.js | 2 - pagefind/pagefind.en-us_48573bd275bba.pf_meta | Bin 86 -> 0 bytes pagefind/pagefind.js | 9 - pagefind/wasm.en-us.pagefind | Bin 70873 -> 0 bytes pagefind/wasm.unknown.pagefind | Bin 67201 -> 0 bytes requirements_test.txt | 6 - runtime.txt | 1 - setup.cfg | 41 - 21 files changed, 7 insertions(+), 1933 deletions(-) delete mode 100644 lint.py delete mode 100644 pagefind-bootstrap/components/index.html delete mode 100644 pagefind.yml delete mode 100644 pagefind/fragment/en-us_433ff7f.pf_fragment delete mode 100644 pagefind/index/en-us_d8685b2.pf_index delete mode 100644 pagefind/pagefind-entry.json delete mode 100644 pagefind/pagefind-highlight.js delete mode 100644 pagefind/pagefind-modular-ui.css delete mode 100644 pagefind/pagefind-modular-ui.js delete mode 100644 pagefind/pagefind-ui.css delete mode 100644 pagefind/pagefind-ui.js delete mode 100644 pagefind/pagefind.en-us_48573bd275bba.pf_meta delete mode 100644 pagefind/pagefind.js delete mode 100644 pagefind/wasm.en-us.pagefind delete mode 100644 pagefind/wasm.unknown.pagefind delete mode 100644 requirements_test.txt delete mode 100644 runtime.txt delete mode 100644 setup.cfg diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 628cc34e20..918e93ba9f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,7 +5,7 @@ updates: schedule: interval: daily open-pull-requests-limit: 10 - - package-ecosystem: pip + - package-ecosystem: npm directory: "/" schedule: interval: daily diff --git a/.gitpod.yml b/.gitpod.yml index 712bfda8af..12f2d4efb6 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,6 +1,7 @@ ports: -- port: 8000 +- port: 4321 onOpen: open-preview tasks: -- command: make live-html +- init: npm install + command: npm run dev diff --git a/.vscode/tasks.json b/.vscode/tasks.json index f1a91940fa..ac6370e75c 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,10 +2,10 @@ "version": "2.0.0", "tasks": [ { - "label": "Live HTML build", + "label": "Dev server", "type": "shell", - "command": "make live-html", + "command": "npm run dev", "problemMatcher": [] - }, + } ] } diff --git a/lint.py b/lint.py deleted file mode 100644 index abc7c28808..0000000000 --- a/lint.py +++ /dev/null @@ -1,552 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import collections -from pathlib import Path -from typing import Optional -import colorama -import fnmatch -import functools -import os.path -import re -import sys -import os -import subprocess - - - -class AnsiFore: - KEEP = "" - BLACK = "\033[30m" - RED = "\033[31m" - GREEN = "\033[32m" - YELLOW = "\033[33m" - BLUE = "\033[34m" - MAGENTA = "\033[35m" - CYAN = "\033[36m" - WHITE = "\033[37m" - RESET = "\033[39m" - - BOLD_BLACK = "\033[1;30m" - BOLD_RED = "\033[1;31m" - BOLD_GREEN = "\033[1;32m" - BOLD_YELLOW = "\033[1;33m" - BOLD_BLUE = "\033[1;34m" - BOLD_MAGENTA = "\033[1;35m" - BOLD_CYAN = "\033[1;36m" - BOLD_WHITE = "\033[1;37m" - BOLD_RESET = "\033[1;39m" - - -class AnsiStyle: - BRIGHT = "\033[1m" - BOLD = "\033[1m" - DIM = "\033[2m" - THIN = "\033[2m" - NORMAL = "\033[22m" - RESET_ALL = "\033[0m" - - -Fore = AnsiFore() -Style = AnsiStyle() - - -def print_error_for_file(file: str, body: Optional[str]): - print(f"{AnsiFore.GREEN}### File {AnsiStyle.BRIGHT}{file}{AnsiStyle.RESET_ALL}") - print() - if body is not None: - print(body) - print() - - -def git_ls_files(patterns=None): - command = ["git", "ls-files", "-s"] - if patterns is not None: - command.extend(patterns) - proc = subprocess.Popen(command, stdout=subprocess.PIPE) - output, _ = proc.communicate() - lines = [x.split() for x in output.decode("utf-8").splitlines()] - return {s[3].strip(): int(s[0]) for s in lines} - - -def find_all(a_str, sub): - if not a_str.find(sub): - # Optimization: If str is not in whole text, then do not try - # on each line - return - for i, line in enumerate(a_str.split("\n")): - column = 0 - while True: - column = line.find(sub, column) - if column == -1: - break - yield i, column - column += len(sub) - - -colorama.init() - -parser = argparse.ArgumentParser() -parser.add_argument( - "files", nargs="*", default=[], help="files to be processed (regex on path)" -) -args = parser.parse_args() - -EXECUTABLE_BIT = git_ls_files() -files = list(EXECUTABLE_BIT.keys()) -# Match against re -file_name_re = re.compile("|".join(args.files)) -files = [p for p in files if file_name_re.search(p)] - -files.sort() - -file_types = ( - ".cfg", - ".css", - ".gif", - ".h", - ".html", - ".ico", - ".jpg", - ".js", - ".json", - ".md", - ".png", - ".py", - ".svg", - ".toml", - ".txt", - ".webmanifest", - ".xml", - ".yaml", - ".yml", - "", -) -docs_types = [".md"] -image_types = [".webp", ".jpg", ".ico", ".png", ".svg", ".gif"] - -LINT_FILE_CHECKS = [] -LINT_CONTENT_CHECKS = [] -LINT_POST_CHECKS = [] - - -def run_check(lint_obj, fname, *args): - include = lint_obj["include"] - exclude = lint_obj["exclude"] - func = lint_obj["func"] - if include is not None: - for incl in include: - if fnmatch.fnmatch(fname, incl): - break - else: - return None - for excl in exclude: - if fnmatch.fnmatch(fname, excl): - return None - return func(*args) - - -def run_checks(lints, fname, *args): - for lint in lints: - try: - add_errors(fname, run_check(lint, fname, *args)) - except Exception: - print(f"Check {lint['func'].__name__} on file {fname} failed:") - raise - - -def _add_check(checks, func, include=None, exclude=None): - checks.append( - { - "include": include, - "exclude": exclude or [], - "func": func, - } - ) - - -def lint_file_check(**kwargs): - def decorator(func): - _add_check(LINT_FILE_CHECKS, func, **kwargs) - return func - - return decorator - - -def lint_content_check(**kwargs): - def decorator(func): - _add_check(LINT_CONTENT_CHECKS, func, **kwargs) - return func - - return decorator - - -def lint_post_check(func): - _add_check(LINT_POST_CHECKS, func) - return func - - -def lint_re_check(regex, **kwargs): - flags = kwargs.pop("flags", re.MULTILINE) - prog = re.compile(regex, flags) - decor = lint_content_check(**kwargs) - - def decorator(func): - @functools.wraps(func) - def new_func(fname, content): - errors = [] - for match in prog.finditer(content): - if "NOLINT" in match.group(0): - continue - lineno = content.count("\n", 0, match.start()) + 1 - substr = content[: match.start()] - col = len(substr) - substr.rfind("\n") - err = func(fname, match) - if err is None: - continue - errors.append((lineno, col + 1, err)) - return errors - - return decor(new_func) - - return decorator - - -def lint_content_find_check(find, only_first=False, **kwargs): - decor = lint_content_check(**kwargs) - - def decorator(func): - @functools.wraps(func) - def new_func(fname, content): - find_ = find - if callable(find): - find_ = find(fname, content) - errors = [] - for line, col in find_all(content, find_): - err = func(fname) - errors.append((line + 1, col + 1, err)) - if only_first: - break - return errors - - return decor(new_func) - - return decorator - - -@lint_file_check(exclude=[f"*{f}" for f in file_types]) -def lint_ext_check(fname: str, stat: os.stat_result): - return ( - "This file extension is not a registered file type. If this is an error, please " - "update the script/ci-custom.py script." - ) - - -@lint_file_check(exclude=["script/*", ".devcontainer/*", "lint.py"]) -def lint_executable_bit(fname: str, stat: os.stat_result): - ex = EXECUTABLE_BIT[fname] - if ex != 100644: - return ( - "File has invalid executable bit {}. If running from a windows machine please " - "see disabling executable bit in git.".format(ex) - ) - return None - - -@lint_file_check(include=[f"*{ext}" for ext in image_types]) -def lint_all_images_size(fname: str, stat: os.stat_result): - if stat.st_size > 1024 * 1024: - return ( - "Image is too large. Images in ESPHome's codebase should be 1MB in size max. " - "Use a tool like https://compress-or-die.com/ to reduce the image size. " - f"Size of file: {stat.st_size / 1024:.0f}kb" - ) - return None - - -@lint_content_find_check( - "\t", - only_first=True, - exclude=[ - "Makefile", - ], -) -def lint_tabs(fname): - return "File contains tab character. Please convert tabs to spaces." - - -@lint_content_find_check("\r", only_first=True) -def lint_newline(fname): - return "File contains Windows newline. Please set your editor to Unix newline mode." - - -@lint_content_check(exclude=["*.svg", "runtime.txt", "_static/*"]) -def lint_end_newline(fname, content): - if content and not content.endswith("\n"): - return "File does not end with a newline, please add an empty line at the end of the file." - return None - - -@lint_re_check( - r"\[([^\]]+)\]\((https://esphome\.io/[^)]+)\)", - include=["*.md"], -) -def lint_esphome_io_link(fname, match): - link_text = match.group(1) - full_url = match.group(2) - return ( - f"Markdown link to esphome.io should use relative path. " - f"Change [{link_text}]({full_url}) to use a relative URL" - ) - - -# Build cache of all anchors in the documentation -ANCHOR_CACHE = None - - -def build_anchor_cache(): - """Build a cache of all anchors (headings and shortcodes) in markdown files.""" - global ANCHOR_CACHE - if ANCHOR_CACHE is not None: - return ANCHOR_CACHE - - ANCHOR_CACHE = {} - content_dir = Path("content") - if not content_dir.exists(): - return ANCHOR_CACHE - - def generate_slug(text): - """Generate Hugo-compatible slug from heading text.""" - slug = re.sub(r"[^\w\s-]", "", text).lower() - slug = re.sub(r"[-\s]+", "-", slug).strip("-") - return slug - - for md_file in content_dir.rglob("*.md"): - rel_path = md_file.relative_to(content_dir) - # Convert file path to page path - if md_file.name == "_index.md": - if str(rel_path) == "_index.md": - page_path = "" # Root index - else: - page_path = str(rel_path.parent) - else: - page_path = str(rel_path.with_suffix("")) - - page_path = page_path.replace("\\", "/") - anchors = set() - - try: - with open(md_file, "r", encoding="utf-8") as f: - content = f.read() - lines = content.split("\n") - - for line in lines: - # Match headings - heading_match = re.match(r"^(#{1,6})\s+(.*)", line) - if heading_match: - heading_text = heading_match.group(2).strip() - anchor_id = generate_slug(heading_text) - anchors.add(anchor_id) - - # Match anchor shortcodes - shortcode_match = re.search(r'\{\{<\s*anchor\s+"([^\s>]+)"\s*>}}', line) - if shortcode_match: - anchor_id = shortcode_match.group(1) - anchors.add(anchor_id) - - ANCHOR_CACHE[page_path] = anchors - except Exception: - # Skip files that can't be read - pass - - return ANCHOR_CACHE - - -@lint_content_check(include=["*.md"]) -def lint_internal_links(fname, content): - """Validate internal markdown links.""" - errors = [] - build_anchor_cache() - - # Match markdown links: [text](url) - # Capture groups: text and URL - link_pattern = re.compile(r"\[([^\]]+)\]\(([^)]+)\)") - - for match in link_pattern.finditer(content): - link_text = match.group(1) - link_url = match.group(2) - lineno = content.count("\n", 0, match.start()) + 1 - col = match.start() - content.rfind("\n", 0, match.start()) - - # Skip external links (http://, https://, mailto:, etc.) - if re.match(r"^[a-zA-Z][a-zA-Z0-9+.-]*:", link_url): - continue - - # Check anchor-only links (these used to be resolved by the old system) - if link_url.startswith("#"): - anchor_id = link_url.lstrip("#") - - # Get current page path (only for files in content/) - current_file = Path(fname) - try: - if current_file.name == "_index.md": - if str(current_file.parent) == "content": - current_page = "" - else: - current_page = str(current_file.parent.relative_to("content")) - else: - current_page = str(current_file.relative_to("content").with_suffix("")) - - current_page = current_page.replace("\\", "/") - - # Check if anchor exists on current page - if current_page in ANCHOR_CACHE: - if anchor_id not in ANCHOR_CACHE[current_page]: - # Anchor doesn't exist on current page - likely a broken cross-page link - errors.append( - ( - lineno, - col, - f"Anchor-only link '#{anchor_id}' not found on current page. " - f"If this should link to another page, use the full path like " - f"[{link_text}](/path/to/page#{anchor_id})", - ) - ) - except ValueError: - # File is not in content/ directory, skip anchor validation - pass - continue - - # Skip relative links to static assets (images, etc.) - # These don't start with / and have file extensions - if not link_url.startswith("/") and re.search(r"\.(png|jpg|jpeg|gif|svg|webp|pdf|zip)$", link_url, re.IGNORECASE): - continue - - # Skip absolute links to static assets (images directory) - if link_url.startswith("/images/") and re.search(r"\.(png|jpg|jpeg|gif|svg|webp|pdf|zip)$", link_url, re.IGNORECASE): - continue - - # Skip links that look like code/lambda parameters (contain spaces, parentheses, etc.) - if " " in link_url or "(" in link_url or ")" in link_url: - continue - - # Skip relative links without leading slash (not documentation pages) - # unless they're in the components directory - if not link_url.startswith("/"): - # Allow relative component links - if not ("components/" in fname and not re.search(r"\.", link_url)): - continue - - # Parse internal link - if "#" in link_url: - path_part, anchor_part = link_url.split("#", 1) - else: - path_part = link_url - anchor_part = None - - # Validate path - must start with / - if not path_part.startswith("/"): - continue - - # Remove leading slash - clean_path = path_part.lstrip("/") - - # Skip paths with query strings or fragments that look like URLs - if "?" in clean_path or ".html" in clean_path: - continue - - # Check if page exists - if clean_path not in ANCHOR_CACHE: - # Try with _index - if clean_path and not clean_path.endswith("/"): - clean_path_index = clean_path - else: - clean_path_index = clean_path.rstrip("/") - - if clean_path_index not in ANCHOR_CACHE: - errors.append( - ( - lineno, - col, - f"Internal link references non-existent page: '{path_part}' in link [{link_text}]({link_url})", - ) - ) - continue - - # Validate anchor if present - if anchor_part: - target_page = clean_path - if target_page not in ANCHOR_CACHE: - target_page = clean_path.rstrip("/") - - if target_page in ANCHOR_CACHE: - if anchor_part not in ANCHOR_CACHE[target_page]: - errors.append( - ( - lineno, - col, - f"Internal link references non-existent anchor: '#{anchor_part}' on page '{path_part}' in link [{link_text}]({link_url})", - ) - ) - - return errors - - -def highlight(s): - return f"\033[36m{s}\033[0m" - - -errors = collections.defaultdict(list) - - -def add_errors(fname, errs): - if not isinstance(errs, list): - errs = [errs] - for err in errs: - if err is None: - continue - try: - lineno, col, msg = err - except ValueError: - lineno = 1 - col = 1 - msg = err - if not isinstance(msg, str): - raise ValueError("Error is not instance of string!") - if not isinstance(lineno, int): - raise ValueError("Line number is not an int!") - if not isinstance(col, int): - raise ValueError("Column number is not an int!") - errors[fname].append((lineno, col, msg)) - - -for fname in files: - p = Path(fname) - if not p.is_file(): - # file deleted but in git index - continue - run_checks(LINT_FILE_CHECKS, fname, fname, p.stat()) - if p.suffix in image_types: - continue - try: - with open(fname, "r") as f_handle: - content = f_handle.read() - except UnicodeDecodeError: - add_errors( - fname, - "File is not readable as UTF-8. Please set your editor to UTF-8 mode.", - ) - continue - run_checks(LINT_CONTENT_CHECKS, fname, fname, content) - -run_checks(LINT_POST_CHECKS, "POST") - -for f, errs in sorted(errors.items()): - err_str = ( - f"{AnsiStyle.BOLD}{f}:{lineno}:{col}:{AnsiStyle.RESET_ALL} " - f"{AnsiStyle.BOLD}{AnsiFore.RED}{'lint:'}{AnsiStyle.RESET_ALL} {msg}\n" - for lineno, col, msg in errs - ) - print_error_for_file(f, "\n".join(err_str)) - -sys.exit(len(errors)) diff --git a/pagefind-bootstrap/components/index.html b/pagefind-bootstrap/components/index.html deleted file mode 100644 index 77b816b360..0000000000 --- a/pagefind-bootstrap/components/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - -
    -
    -

    Dummy page

    -

    - This file exists just to feed Pagefind before the site is built, in order to populate the pagefind directory -

    -
    -
    - - diff --git a/pagefind.yml b/pagefind.yml deleted file mode 100644 index 4b2f529216..0000000000 --- a/pagefind.yml +++ /dev/null @@ -1,8 +0,0 @@ -site: public -output_path: pagefind -exclude_selectors: - - "a.headerlink" - - ".toctree-wrapper" - - ".sphinxsidebar" - - ".breadcrumbs" -glob: "{components,cookbook,guides,projects,web-api}/**/*.html" diff --git a/pagefind/fragment/en-us_433ff7f.pf_fragment b/pagefind/fragment/en-us_433ff7f.pf_fragment deleted file mode 100644 index a1a1febf205a40d02da5fd431c4b716703b9529f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmV;s07U;EiwFP!00002|5c7L4#F@DMXzFcu0Sv{a{vZ5gixEf)F_Rk#1T|g?~W^A zVEfYl&wi=BQ_s=gyz?{G9Pof!Cu5RGQOgz^bQ0CF6~{V`6C^`6a2~io&w+qmT(rQW z76ldPi9DRXXQ88BGJy^Rg_Xddu5!=@ID%wPd1aEM8e0AA(vS6=$*JVYB%ZdtIjO71 pe%GLVR>}nr^U~l*+FC+o4fN-U*0#|NvQ978q% zdE>EW?BmIWG<2t&`Y$-+!n8d`NRxFSFO^f;Lr7ZAooPj#8<>1uEB!`beoGhAGf=@y z3d;aevBDIYG%624b}DzEmmi+zVAB%E8Ap%}Bei9W(#FNX_@v3|3bw}jO2cPRCoWcP dk-L&Lx4D2^In+&%IirWg=?~zmCawbk001lrPRRfO diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json deleted file mode 100644 index 9cf33b4e0d..0000000000 --- a/pagefind/pagefind-entry.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.3.0","languages":{"en-us":{"hash":"en-us_48573bd275bba","wasm":"en-us","page_count":1}}} \ No newline at end of file diff --git a/pagefind/pagefind-highlight.js b/pagefind/pagefind-highlight.js deleted file mode 100644 index c823fbfe7d..0000000000 --- a/pagefind/pagefind-highlight.js +++ /dev/null @@ -1,1069 +0,0 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// node_modules/mark.js/dist/mark.js -var require_mark = __commonJS({ - "node_modules/mark.js/dist/mark.js"(exports, module) { - (function(global, factory) { - typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory(); - })(exports, function() { - "use strict"; - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - var classCallCheck = function(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - var createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - if (protoProps) - defineProperties(Constructor.prototype, protoProps); - if (staticProps) - defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; - }; - var DOMIterator = function() { - function DOMIterator2(ctx) { - var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; - var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; - var iframesTimeout = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 5e3; - classCallCheck(this, DOMIterator2); - this.ctx = ctx; - this.iframes = iframes; - this.exclude = exclude; - this.iframesTimeout = iframesTimeout; - } - createClass(DOMIterator2, [{ - key: "getContexts", - value: function getContexts() { - var ctx = void 0, filteredCtx = []; - if (typeof this.ctx === "undefined" || !this.ctx) { - ctx = []; - } else if (NodeList.prototype.isPrototypeOf(this.ctx)) { - ctx = Array.prototype.slice.call(this.ctx); - } else if (Array.isArray(this.ctx)) { - ctx = this.ctx; - } else if (typeof this.ctx === "string") { - ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx)); - } else { - ctx = [this.ctx]; - } - ctx.forEach(function(ctx2) { - var isDescendant = filteredCtx.filter(function(contexts) { - return contexts.contains(ctx2); - }).length > 0; - if (filteredCtx.indexOf(ctx2) === -1 && !isDescendant) { - filteredCtx.push(ctx2); - } - }); - return filteredCtx; - } - }, { - key: "getIframeContents", - value: function getIframeContents(ifr, successFn) { - var errorFn = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() { - }; - var doc = void 0; - try { - var ifrWin = ifr.contentWindow; - doc = ifrWin.document; - if (!ifrWin || !doc) { - throw new Error("iframe inaccessible"); - } - } catch (e) { - errorFn(); - } - if (doc) { - successFn(doc); - } - } - }, { - key: "isIframeBlank", - value: function isIframeBlank(ifr) { - var bl = "about:blank", src = ifr.getAttribute("src").trim(), href = ifr.contentWindow.location.href; - return href === bl && src !== bl && src; - } - }, { - key: "observeIframeLoad", - value: function observeIframeLoad(ifr, successFn, errorFn) { - var _this = this; - var called = false, tout = null; - var listener = function listener2() { - if (called) { - return; - } - called = true; - clearTimeout(tout); - try { - if (!_this.isIframeBlank(ifr)) { - ifr.removeEventListener("load", listener2); - _this.getIframeContents(ifr, successFn, errorFn); - } - } catch (e) { - errorFn(); - } - }; - ifr.addEventListener("load", listener); - tout = setTimeout(listener, this.iframesTimeout); - } - }, { - key: "onIframeReady", - value: function onIframeReady(ifr, successFn, errorFn) { - try { - if (ifr.contentWindow.document.readyState === "complete") { - if (this.isIframeBlank(ifr)) { - this.observeIframeLoad(ifr, successFn, errorFn); - } else { - this.getIframeContents(ifr, successFn, errorFn); - } - } else { - this.observeIframeLoad(ifr, successFn, errorFn); - } - } catch (e) { - errorFn(); - } - } - }, { - key: "waitForIframes", - value: function waitForIframes(ctx, done) { - var _this2 = this; - var eachCalled = 0; - this.forEachIframe(ctx, function() { - return true; - }, function(ifr) { - eachCalled++; - _this2.waitForIframes(ifr.querySelector("html"), function() { - if (!--eachCalled) { - done(); - } - }); - }, function(handled) { - if (!handled) { - done(); - } - }); - } - }, { - key: "forEachIframe", - value: function forEachIframe(ctx, filter, each) { - var _this3 = this; - var end = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { - }; - var ifr = ctx.querySelectorAll("iframe"), open = ifr.length, handled = 0; - ifr = Array.prototype.slice.call(ifr); - var checkEnd = function checkEnd2() { - if (--open <= 0) { - end(handled); - } - }; - if (!open) { - checkEnd(); - } - ifr.forEach(function(ifr2) { - if (DOMIterator2.matches(ifr2, _this3.exclude)) { - checkEnd(); - } else { - _this3.onIframeReady(ifr2, function(con) { - if (filter(ifr2)) { - handled++; - each(con); - } - checkEnd(); - }, checkEnd); - } - }); - } - }, { - key: "createIterator", - value: function createIterator(ctx, whatToShow, filter) { - return document.createNodeIterator(ctx, whatToShow, filter, false); - } - }, { - key: "createInstanceOnIframe", - value: function createInstanceOnIframe(contents) { - return new DOMIterator2(contents.querySelector("html"), this.iframes); - } - }, { - key: "compareNodeIframe", - value: function compareNodeIframe(node, prevNode, ifr) { - var compCurr = node.compareDocumentPosition(ifr), prev = Node.DOCUMENT_POSITION_PRECEDING; - if (compCurr & prev) { - if (prevNode !== null) { - var compPrev = prevNode.compareDocumentPosition(ifr), after = Node.DOCUMENT_POSITION_FOLLOWING; - if (compPrev & after) { - return true; - } - } else { - return true; - } - } - return false; - } - }, { - key: "getIteratorNode", - value: function getIteratorNode(itr) { - var prevNode = itr.previousNode(); - var node = void 0; - if (prevNode === null) { - node = itr.nextNode(); - } else { - node = itr.nextNode() && itr.nextNode(); - } - return { - prevNode, - node - }; - } - }, { - key: "checkIframeFilter", - value: function checkIframeFilter(node, prevNode, currIfr, ifr) { - var key = false, handled = false; - ifr.forEach(function(ifrDict, i) { - if (ifrDict.val === currIfr) { - key = i; - handled = ifrDict.handled; - } - }); - if (this.compareNodeIframe(node, prevNode, currIfr)) { - if (key === false && !handled) { - ifr.push({ - val: currIfr, - handled: true - }); - } else if (key !== false && !handled) { - ifr[key].handled = true; - } - return true; - } - if (key === false) { - ifr.push({ - val: currIfr, - handled: false - }); - } - return false; - } - }, { - key: "handleOpenIframes", - value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) { - var _this4 = this; - ifr.forEach(function(ifrDict) { - if (!ifrDict.handled) { - _this4.getIframeContents(ifrDict.val, function(con) { - _this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb); - }); - } - }); - } - }, { - key: "iterateThroughNodes", - value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) { - var _this5 = this; - var itr = this.createIterator(ctx, whatToShow, filterCb); - var ifr = [], elements = [], node = void 0, prevNode = void 0, retrieveNodes = function retrieveNodes2() { - var _getIteratorNode = _this5.getIteratorNode(itr); - prevNode = _getIteratorNode.prevNode; - node = _getIteratorNode.node; - return node; - }; - while (retrieveNodes()) { - if (this.iframes) { - this.forEachIframe(ctx, function(currIfr) { - return _this5.checkIframeFilter(node, prevNode, currIfr, ifr); - }, function(con) { - _this5.createInstanceOnIframe(con).forEachNode(whatToShow, function(ifrNode) { - return elements.push(ifrNode); - }, filterCb); - }); - } - elements.push(node); - } - elements.forEach(function(node2) { - eachCb(node2); - }); - if (this.iframes) { - this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb); - } - doneCb(); - } - }, { - key: "forEachNode", - value: function forEachNode(whatToShow, each, filter) { - var _this6 = this; - var done = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { - }; - var contexts = this.getContexts(); - var open = contexts.length; - if (!open) { - done(); - } - contexts.forEach(function(ctx) { - var ready = function ready2() { - _this6.iterateThroughNodes(whatToShow, ctx, each, filter, function() { - if (--open <= 0) { - done(); - } - }); - }; - if (_this6.iframes) { - _this6.waitForIframes(ctx, ready); - } else { - ready(); - } - }); - } - }], [{ - key: "matches", - value: function matches(element, selector) { - var selectors = typeof selector === "string" ? [selector] : selector, fn = element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector; - if (fn) { - var match = false; - selectors.every(function(sel) { - if (fn.call(element, sel)) { - match = true; - return false; - } - return true; - }); - return match; - } else { - return false; - } - } - }]); - return DOMIterator2; - }(); - var Mark$1 = function() { - function Mark3(ctx) { - classCallCheck(this, Mark3); - this.ctx = ctx; - this.ie = false; - var ua = window.navigator.userAgent; - if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) { - this.ie = true; - } - } - createClass(Mark3, [{ - key: "log", - value: function log(msg) { - var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "debug"; - var log2 = this.opt.log; - if (!this.opt.debug) { - return; - } - if ((typeof log2 === "undefined" ? "undefined" : _typeof(log2)) === "object" && typeof log2[level] === "function") { - log2[level]("mark.js: " + msg); - } - } - }, { - key: "escapeStr", - value: function escapeStr(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - }, { - key: "createRegExp", - value: function createRegExp(str) { - if (this.opt.wildcards !== "disabled") { - str = this.setupWildcardsRegExp(str); - } - str = this.escapeStr(str); - if (Object.keys(this.opt.synonyms).length) { - str = this.createSynonymsRegExp(str); - } - if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { - str = this.setupIgnoreJoinersRegExp(str); - } - if (this.opt.diacritics) { - str = this.createDiacriticsRegExp(str); - } - str = this.createMergedBlanksRegExp(str); - if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { - str = this.createJoinersRegExp(str); - } - if (this.opt.wildcards !== "disabled") { - str = this.createWildcardsRegExp(str); - } - str = this.createAccuracyRegExp(str); - return str; - } - }, { - key: "createSynonymsRegExp", - value: function createSynonymsRegExp(str) { - var syn = this.opt.synonyms, sens = this.opt.caseSensitive ? "" : "i", joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? "\0" : ""; - for (var index in syn) { - if (syn.hasOwnProperty(index)) { - var value = syn[index], k1 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(index) : this.escapeStr(index), k2 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(value) : this.escapeStr(value); - if (k1 !== "" && k2 !== "") { - str = str.replace(new RegExp("(" + this.escapeStr(k1) + "|" + this.escapeStr(k2) + ")", "gm" + sens), joinerPlaceholder + ("(" + this.processSynomyms(k1) + "|") + (this.processSynomyms(k2) + ")") + joinerPlaceholder); - } - } - } - return str; - } - }, { - key: "processSynomyms", - value: function processSynomyms(str) { - if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { - str = this.setupIgnoreJoinersRegExp(str); - } - return str; - } - }, { - key: "setupWildcardsRegExp", - value: function setupWildcardsRegExp(str) { - str = str.replace(/(?:\\)*\?/g, function(val) { - return val.charAt(0) === "\\" ? "?" : ""; - }); - return str.replace(/(?:\\)*\*/g, function(val) { - return val.charAt(0) === "\\" ? "*" : ""; - }); - } - }, { - key: "createWildcardsRegExp", - value: function createWildcardsRegExp(str) { - var spaces = this.opt.wildcards === "withSpaces"; - return str.replace(/\u0001/g, spaces ? "[\\S\\s]?" : "\\S?").replace(/\u0002/g, spaces ? "[\\S\\s]*?" : "\\S*"); - } - }, { - key: "setupIgnoreJoinersRegExp", - value: function setupIgnoreJoinersRegExp(str) { - return str.replace(/[^(|)\\]/g, function(val, indx, original) { - var nextChar = original.charAt(indx + 1); - if (/[(|)\\]/.test(nextChar) || nextChar === "") { - return val; - } else { - return val + "\0"; - } - }); - } - }, { - key: "createJoinersRegExp", - value: function createJoinersRegExp(str) { - var joiner = []; - var ignorePunctuation = this.opt.ignorePunctuation; - if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) { - joiner.push(this.escapeStr(ignorePunctuation.join(""))); - } - if (this.opt.ignoreJoiners) { - joiner.push("\\u00ad\\u200b\\u200c\\u200d"); - } - return joiner.length ? str.split(/\u0000+/).join("[" + joiner.join("") + "]*") : str; - } - }, { - key: "createDiacriticsRegExp", - value: function createDiacriticsRegExp(str) { - var sens = this.opt.caseSensitive ? "" : "i", dct = this.opt.caseSensitive ? ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105", "A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010D", "C\xC7\u0106\u010C", "d\u0111\u010F", "D\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119", "E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012B", "I\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142", "L\u0141", "n\xF1\u0148\u0144", "N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014D", "O\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159", "R\u0158", "s\u0161\u015B\u0219\u015F", "S\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163", "T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016B", "U\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFF", "Y\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017A", "Z\u017D\u017B\u0179"] : ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010DC\xC7\u0106\u010C", "d\u0111\u010FD\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012BI\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142L\u0141", "n\xF1\u0148\u0144N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014DO\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159R\u0158", "s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016BU\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFFY\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017AZ\u017D\u017B\u0179"]; - var handled = []; - str.split("").forEach(function(ch) { - dct.every(function(dct2) { - if (dct2.indexOf(ch) !== -1) { - if (handled.indexOf(dct2) > -1) { - return false; - } - str = str.replace(new RegExp("[" + dct2 + "]", "gm" + sens), "[" + dct2 + "]"); - handled.push(dct2); - } - return true; - }); - }); - return str; - } - }, { - key: "createMergedBlanksRegExp", - value: function createMergedBlanksRegExp(str) { - return str.replace(/[\s]+/gmi, "[\\s]+"); - } - }, { - key: "createAccuracyRegExp", - value: function createAccuracyRegExp(str) { - var _this = this; - var chars = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF"; - var acc = this.opt.accuracy, val = typeof acc === "string" ? acc : acc.value, ls = typeof acc === "string" ? [] : acc.limiters, lsJoin = ""; - ls.forEach(function(limiter) { - lsJoin += "|" + _this.escapeStr(limiter); - }); - switch (val) { - case "partially": - default: - return "()(" + str + ")"; - case "complementary": - lsJoin = "\\s" + (lsJoin ? lsJoin : this.escapeStr(chars)); - return "()([^" + lsJoin + "]*" + str + "[^" + lsJoin + "]*)"; - case "exactly": - return "(^|\\s" + lsJoin + ")(" + str + ")(?=$|\\s" + lsJoin + ")"; - } - } - }, { - key: "getSeparatedKeywords", - value: function getSeparatedKeywords(sv) { - var _this2 = this; - var stack = []; - sv.forEach(function(kw) { - if (!_this2.opt.separateWordSearch) { - if (kw.trim() && stack.indexOf(kw) === -1) { - stack.push(kw); - } - } else { - kw.split(" ").forEach(function(kwSplitted) { - if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) { - stack.push(kwSplitted); - } - }); - } - }); - return { - "keywords": stack.sort(function(a, b) { - return b.length - a.length; - }), - "length": stack.length - }; - } - }, { - key: "isNumeric", - value: function isNumeric(value) { - return Number(parseFloat(value)) == value; - } - }, { - key: "checkRanges", - value: function checkRanges(array) { - var _this3 = this; - if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== "[object Object]") { - this.log("markRanges() will only accept an array of objects"); - this.opt.noMatch(array); - return []; - } - var stack = []; - var last = 0; - array.sort(function(a, b) { - return a.start - b.start; - }).forEach(function(item) { - var _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), start = _callNoMatchOnInvalid.start, end = _callNoMatchOnInvalid.end, valid = _callNoMatchOnInvalid.valid; - if (valid) { - item.start = start; - item.length = end - start; - stack.push(item); - last = end; - } - }); - return stack; - } - }, { - key: "callNoMatchOnInvalidRanges", - value: function callNoMatchOnInvalidRanges(range, last) { - var start = void 0, end = void 0, valid = false; - if (range && typeof range.start !== "undefined") { - start = parseInt(range.start, 10); - end = start + parseInt(range.length, 10); - if (this.isNumeric(range.start) && this.isNumeric(range.length) && end - last > 0 && end - start > 0) { - valid = true; - } else { - this.log("Ignoring invalid or overlapping range: " + ("" + JSON.stringify(range))); - this.opt.noMatch(range); - } - } else { - this.log("Ignoring invalid range: " + JSON.stringify(range)); - this.opt.noMatch(range); - } - return { - start, - end, - valid - }; - } - }, { - key: "checkWhitespaceRanges", - value: function checkWhitespaceRanges(range, originalLength, string) { - var end = void 0, valid = true, max = string.length, offset = originalLength - max, start = parseInt(range.start, 10) - offset; - start = start > max ? max : start; - end = start + parseInt(range.length, 10); - if (end > max) { - end = max; - this.log("End range automatically set to the max value of " + max); - } - if (start < 0 || end - start < 0 || start > max || end > max) { - valid = false; - this.log("Invalid range: " + JSON.stringify(range)); - this.opt.noMatch(range); - } else if (string.substring(start, end).replace(/\s+/g, "") === "") { - valid = false; - this.log("Skipping whitespace only range: " + JSON.stringify(range)); - this.opt.noMatch(range); - } - return { - start, - end, - valid - }; - } - }, { - key: "getTextNodes", - value: function getTextNodes(cb) { - var _this4 = this; - var val = "", nodes = []; - this.iterator.forEachNode(NodeFilter.SHOW_TEXT, function(node) { - nodes.push({ - start: val.length, - end: (val += node.textContent).length, - node - }); - }, function(node) { - if (_this4.matchesExclude(node.parentNode)) { - return NodeFilter.FILTER_REJECT; - } else { - return NodeFilter.FILTER_ACCEPT; - } - }, function() { - cb({ - value: val, - nodes - }); - }); - } - }, { - key: "matchesExclude", - value: function matchesExclude(el) { - return DOMIterator.matches(el, this.opt.exclude.concat(["script", "style", "title", "head", "html"])); - } - }, { - key: "wrapRangeInTextNode", - value: function wrapRangeInTextNode(node, start, end) { - var hEl = !this.opt.element ? "mark" : this.opt.element, startNode = node.splitText(start), ret = startNode.splitText(end - start); - var repl = document.createElement(hEl); - repl.setAttribute("data-markjs", "true"); - if (this.opt.className) { - repl.setAttribute("class", this.opt.className); - } - repl.textContent = startNode.textContent; - startNode.parentNode.replaceChild(repl, startNode); - return ret; - } - }, { - key: "wrapRangeInMappedTextNode", - value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) { - var _this5 = this; - dict.nodes.every(function(n, i) { - var sibl = dict.nodes[i + 1]; - if (typeof sibl === "undefined" || sibl.start > start) { - if (!filterCb(n.node)) { - return false; - } - var s = start - n.start, e = (end > n.end ? n.end : end) - n.start, startStr = dict.value.substr(0, n.start), endStr = dict.value.substr(e + n.start); - n.node = _this5.wrapRangeInTextNode(n.node, s, e); - dict.value = startStr + endStr; - dict.nodes.forEach(function(k, j) { - if (j >= i) { - if (dict.nodes[j].start > 0 && j !== i) { - dict.nodes[j].start -= e; - } - dict.nodes[j].end -= e; - } - }); - end -= e; - eachCb(n.node.previousSibling, n.start); - if (end > n.end) { - start = n.end; - } else { - return false; - } - } - return true; - }); - } - }, { - key: "wrapMatches", - value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { - var _this6 = this; - var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; - this.getTextNodes(function(dict) { - dict.nodes.forEach(function(node) { - node = node.node; - var match = void 0; - while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== "") { - if (!filterCb(match[matchIdx], node)) { - continue; - } - var pos = match.index; - if (matchIdx !== 0) { - for (var i = 1; i < matchIdx; i++) { - pos += match[i].length; - } - } - node = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length); - eachCb(node.previousSibling); - regex.lastIndex = 0; - } - }); - endCb(); - }); - } - }, { - key: "wrapMatchesAcrossElements", - value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { - var _this7 = this; - var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; - this.getTextNodes(function(dict) { - var match = void 0; - while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== "") { - var start = match.index; - if (matchIdx !== 0) { - for (var i = 1; i < matchIdx; i++) { - start += match[i].length; - } - } - var end = start + match[matchIdx].length; - _this7.wrapRangeInMappedTextNode(dict, start, end, function(node) { - return filterCb(match[matchIdx], node); - }, function(node, lastIndex) { - regex.lastIndex = lastIndex; - eachCb(node); - }); - } - endCb(); - }); - } - }, { - key: "wrapRangeFromIndex", - value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) { - var _this8 = this; - this.getTextNodes(function(dict) { - var originalLength = dict.value.length; - ranges.forEach(function(range, counter) { - var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), start = _checkWhitespaceRange.start, end = _checkWhitespaceRange.end, valid = _checkWhitespaceRange.valid; - if (valid) { - _this8.wrapRangeInMappedTextNode(dict, start, end, function(node) { - return filterCb(node, range, dict.value.substring(start, end), counter); - }, function(node) { - eachCb(node, range); - }); - } - }); - endCb(); - }); - } - }, { - key: "unwrapMatches", - value: function unwrapMatches(node) { - var parent = node.parentNode; - var docFrag = document.createDocumentFragment(); - while (node.firstChild) { - docFrag.appendChild(node.removeChild(node.firstChild)); - } - parent.replaceChild(docFrag, node); - if (!this.ie) { - parent.normalize(); - } else { - this.normalizeTextNode(parent); - } - } - }, { - key: "normalizeTextNode", - value: function normalizeTextNode(node) { - if (!node) { - return; - } - if (node.nodeType === 3) { - while (node.nextSibling && node.nextSibling.nodeType === 3) { - node.nodeValue += node.nextSibling.nodeValue; - node.parentNode.removeChild(node.nextSibling); - } - } else { - this.normalizeTextNode(node.firstChild); - } - this.normalizeTextNode(node.nextSibling); - } - }, { - key: "markRegExp", - value: function markRegExp(regexp, opt) { - var _this9 = this; - this.opt = opt; - this.log('Searching with expression "' + regexp + '"'); - var totalMatches = 0, fn = "wrapMatches"; - var eachCb = function eachCb2(element) { - totalMatches++; - _this9.opt.each(element); - }; - if (this.opt.acrossElements) { - fn = "wrapMatchesAcrossElements"; - } - this[fn](regexp, this.opt.ignoreGroups, function(match, node) { - return _this9.opt.filter(node, match, totalMatches); - }, eachCb, function() { - if (totalMatches === 0) { - _this9.opt.noMatch(regexp); - } - _this9.opt.done(totalMatches); - }); - } - }, { - key: "mark", - value: function mark(sv, opt) { - var _this10 = this; - this.opt = opt; - var totalMatches = 0, fn = "wrapMatches"; - var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === "string" ? [sv] : sv), kwArr = _getSeparatedKeywords.keywords, kwArrLen = _getSeparatedKeywords.length, sens = this.opt.caseSensitive ? "" : "i", handler = function handler2(kw) { - var regex = new RegExp(_this10.createRegExp(kw), "gm" + sens), matches = 0; - _this10.log('Searching with expression "' + regex + '"'); - _this10[fn](regex, 1, function(term, node) { - return _this10.opt.filter(node, kw, totalMatches, matches); - }, function(element) { - matches++; - totalMatches++; - _this10.opt.each(element); - }, function() { - if (matches === 0) { - _this10.opt.noMatch(kw); - } - if (kwArr[kwArrLen - 1] === kw) { - _this10.opt.done(totalMatches); - } else { - handler2(kwArr[kwArr.indexOf(kw) + 1]); - } - }); - }; - if (this.opt.acrossElements) { - fn = "wrapMatchesAcrossElements"; - } - if (kwArrLen === 0) { - this.opt.done(totalMatches); - } else { - handler(kwArr[0]); - } - } - }, { - key: "markRanges", - value: function markRanges(rawRanges, opt) { - var _this11 = this; - this.opt = opt; - var totalMatches = 0, ranges = this.checkRanges(rawRanges); - if (ranges && ranges.length) { - this.log("Starting to mark with the following ranges: " + JSON.stringify(ranges)); - this.wrapRangeFromIndex(ranges, function(node, range, match, counter) { - return _this11.opt.filter(node, range, match, counter); - }, function(element, range) { - totalMatches++; - _this11.opt.each(element, range); - }, function() { - _this11.opt.done(totalMatches); - }); - } else { - this.opt.done(totalMatches); - } - } - }, { - key: "unmark", - value: function unmark(opt) { - var _this12 = this; - this.opt = opt; - var sel = this.opt.element ? this.opt.element : "*"; - sel += "[data-markjs]"; - if (this.opt.className) { - sel += "." + this.opt.className; - } - this.log('Removal selector "' + sel + '"'); - this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function(node) { - _this12.unwrapMatches(node); - }, function(node) { - var matchesSel = DOMIterator.matches(node, sel), matchesExclude = _this12.matchesExclude(node); - if (!matchesSel || matchesExclude) { - return NodeFilter.FILTER_REJECT; - } else { - return NodeFilter.FILTER_ACCEPT; - } - }, this.opt.done); - } - }, { - key: "opt", - set: function set$$1(val) { - this._opt = _extends({}, { - "element": "", - "className": "", - "exclude": [], - "iframes": false, - "iframesTimeout": 5e3, - "separateWordSearch": true, - "diacritics": true, - "synonyms": {}, - "accuracy": "partially", - "acrossElements": false, - "caseSensitive": false, - "ignoreJoiners": false, - "ignoreGroups": 0, - "ignorePunctuation": [], - "wildcards": "disabled", - "each": function each() { - }, - "noMatch": function noMatch() { - }, - "filter": function filter() { - return true; - }, - "done": function done() { - }, - "debug": false, - "log": window.console - }, val); - }, - get: function get$$1() { - return this._opt; - } - }, { - key: "iterator", - get: function get$$1() { - return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); - } - }]); - return Mark3; - }(); - function Mark2(ctx) { - var _this = this; - var instance = new Mark$1(ctx); - this.mark = function(sv, opt) { - instance.mark(sv, opt); - return _this; - }; - this.markRegExp = function(sv, opt) { - instance.markRegExp(sv, opt); - return _this; - }; - this.markRanges = function(sv, opt) { - instance.markRanges(sv, opt); - return _this; - }; - this.unmark = function(opt) { - instance.unmark(opt); - return _this; - }; - return this; - } - return Mark2; - }); - } -}); - -// lib/highlight.ts -var import_mark = __toESM(require_mark(), 1); -var PagefindHighlight = class { - constructor(options = { - markContext: null, - highlightParam: "pagefind-highlight", - markOptions: { - className: "pagefind-highlight", - exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] - }, - addStyles: true - }) { - var _a, _b; - const { highlightParam, markContext, markOptions, addStyles } = options; - this.highlightParam = highlightParam ?? "pagefind-highlight"; - this.addStyles = addStyles ?? true; - this.markContext = markContext !== void 0 ? markContext : null; - this.markOptions = markOptions !== void 0 ? markOptions : { - className: "pagefind-highlight", - exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] - }; - (_a = this.markOptions).className ?? (_a.className = "pagefind__highlight"); - (_b = this.markOptions).exclude ?? (_b.exclude = [ - "[data-pagefind-ignore]", - "[data-pagefind-ignore] *" - ]); - this.markOptions.separateWordSearch = false; - this.highlight(); - } - getHighlightParams(paramName) { - const urlParams = new URLSearchParams(window.location.search); - return urlParams.getAll(paramName); - } - // Inline styles might be too hard to override - addHighlightStyles(className) { - if (!className) - return; - const styleElement = document.createElement("style"); - styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`; - document.head.appendChild(styleElement); - } - createMarkInstance() { - if (this.markContext) { - return new import_mark.default(this.markContext); - } - const pagefindBody = document.querySelectorAll("[data-pagefind-body]"); - if (pagefindBody.length !== 0) { - return new import_mark.default(pagefindBody); - } else { - return new import_mark.default(document.body); - } - } - markText(instance, text) { - instance.mark(text, this.markOptions); - } - highlight() { - const params = this.getHighlightParams(this.highlightParam); - if (!params || params.length === 0) - return; - this.addStyles && this.addHighlightStyles(this.markOptions.className); - const markInstance = this.createMarkInstance(); - this.markText(markInstance, params); - } -}; -window.PagefindHighlight = PagefindHighlight; -export { - PagefindHighlight as default -}; -/*! Bundled license information: - -mark.js/dist/mark.js: - (*!*************************************************** - * mark.js v8.11.1 - * https://markjs.io/ - * Copyright (c) 2014–2018, Julian Kühnel - * Released under the MIT license https://git.io/vwTVl - *****************************************************) -*/ diff --git a/pagefind/pagefind-modular-ui.css b/pagefind/pagefind-modular-ui.css deleted file mode 100644 index 9c6793ed2b..0000000000 --- a/pagefind/pagefind-modular-ui.css +++ /dev/null @@ -1,214 +0,0 @@ -:root { - --pagefind-ui-scale: 0.8; - --pagefind-ui-primary: #034AD8; - --pagefind-ui-fade: #707070; - --pagefind-ui-text: #393939; - --pagefind-ui-background: #ffffff; - --pagefind-ui-border: #eeeeee; - --pagefind-ui-tag: #eeeeee; - --pagefind-ui-border-width: 2px; - --pagefind-ui-border-radius: 8px; - --pagefind-ui-image-border-radius: 8px; - --pagefind-ui-image-box-ratio: 3 / 2; - --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular", - "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", - "Lucida Grande", sans-serif; -} - -[data-pfmod-hidden] { - display: none !important; -} - -[data-pfmod-suppressed] { - opacity: 0 !important; - pointer-events: none !important; -} - -[data-pfmod-sr-hidden] { - -webkit-clip: rect(0 0 0 0) !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(100%) !important; - clip-path: inset(100%) !important; - height: 1px !important; - overflow: hidden !important; - overflow: clip !important; - position: absolute !important; - white-space: nowrap !important; - width: 1px !important; -} - -[data-pfmod-loading] { - color: var(--pagefind-ui-text); - background-color: var(--pagefind-ui-text); - border-radius: var(--pagefind-ui-border-radius); - opacity: 0.1; - pointer-events: none; -} - -/* Input */ - -.pagefind-modular-input-wrapper { - position: relative; -} - -.pagefind-modular-input-wrapper::before { - background-color: var(--pagefind-ui-text); - width: calc(18px * var(--pagefind-ui-scale)); - height: calc(18px * var(--pagefind-ui-scale)); - top: calc(23px * var(--pagefind-ui-scale)); - left: calc(20px * var(--pagefind-ui-scale)); - content: ""; - position: absolute; - display: block; - opacity: 0.7; - -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); - mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); - -webkit-mask-size: 100%; - mask-size: 100%; - z-index: 9; - pointer-events: none; -} - -.pagefind-modular-input { - height: calc(64px * var(--pagefind-ui-scale)); - padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale)); - background-color: var(--pagefind-ui-background); - border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); - border-radius: var(--pagefind-ui-border-radius); - font-size: calc(21px * var(--pagefind-ui-scale)); - position: relative; - appearance: none; - -webkit-appearance: none; - display: flex; - width: 100%; - box-sizing: border-box; - font-weight: 700; -} - -.pagefind-modular-input::placeholder { - opacity: 0.2; -} - -.pagefind-modular-input-clear { - position: absolute; - top: calc(2px * var(--pagefind-ui-scale)); - right: calc(2px * var(--pagefind-ui-scale)); - height: calc(60px * var(--pagefind-ui-scale)); - border-radius: var(--pagefind-ui-border-radius); - padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale)); - color: var(--pagefind-ui-text); - font-size: calc(14px * var(--pagefind-ui-scale)); - cursor: pointer; - background-color: var(--pagefind-ui-background); - border: none; - appearance: none; -} - -/* ResultList */ - -.pagefind-modular-list-result { - list-style-type: none; - display: flex; - align-items: flex-start; - gap: min(calc(40px * var(--pagefind-ui-scale)), 3%); - padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale)); - border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); -} - -.pagefind-modular-list-result:last-of-type { - border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); -} - -.pagefind-modular-list-thumb { - width: min(30%, - calc((30% - (100px * var(--pagefind-ui-scale))) * 100000)); - max-width: calc(120px * var(--pagefind-ui-scale)); - margin-top: calc(10px * var(--pagefind-ui-scale)); - aspect-ratio: var(--pagefind-ui-image-box-ratio); - position: relative; -} - -.pagefind-modular-list-image { - display: block; - position: absolute; - left: 50%; - transform: translateX(-50%); - font-size: 0; - width: auto; - height: auto; - max-width: 100%; - max-height: 100%; - border-radius: var(--pagefind-ui-image-border-radius); -} - -.pagefind-modular-list-inner { - flex: 1; - display: flex; - flex-direction: column; - align-items: flex-start; - margin-top: calc(10px * var(--pagefind-ui-scale)); -} - -.pagefind-modular-list-title { - display: inline-block; - font-weight: 700; - font-size: calc(21px * var(--pagefind-ui-scale)); - margin-top: 0; - margin-bottom: 0; -} - -.pagefind-modular-list-link { - color: var(--pagefind-ui-text); - text-decoration: none; -} - -.pagefind-modular-list-link:hover { - text-decoration: underline; -} - -.pagefind-modular-list-excerpt { - display: inline-block; - font-weight: 400; - font-size: calc(16px * var(--pagefind-ui-scale)); - margin-top: calc(4px * var(--pagefind-ui-scale)); - margin-bottom: 0; - min-width: calc(250px * var(--pagefind-ui-scale)); -} - -/* FilterPills */ - -.pagefind-modular-filter-pills-wrapper { - overflow-x: scroll; - padding: 15px 0; -} - -.pagefind-modular-filter-pills { - display: flex; - gap: 6px; -} - -.pagefind-modular-filter-pill { - display: flex; - justify-content: center; - align-items: center; - border: none; - appearance: none; - padding: 0 calc(24px * var(--pagefind-ui-scale)); - background-color: var(--pagefind-ui-background); - color: var(--pagefind-ui-fade); - border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); - border-radius: calc(25px * var(--pagefind-ui-scale)); - font-size: calc(18px * var(--pagefind-ui-scale)); - height: calc(50px * var(--pagefind-ui-scale)); - cursor: pointer; - white-space: nowrap; -} - -.pagefind-modular-filter-pill:hover { - border-color: var(--pagefind-ui-primary); -} - -.pagefind-modular-filter-pill[aria-pressed="true"] { - border-color: var(--pagefind-ui-primary); - color: var(--pagefind-ui-primary); -} \ No newline at end of file diff --git a/pagefind/pagefind-modular-ui.js b/pagefind/pagefind-modular-ui.js deleted file mode 100644 index 43f738f01d..0000000000 --- a/pagefind/pagefind-modular-ui.js +++ /dev/null @@ -1,8 +0,0 @@ -(()=>{var b=Object.defineProperty;var w=(i,e)=>{for(var t in e)b(i,t,{get:e[t],enumerable:!0})};var f={};w(f,{FilterPills:()=>h,Input:()=>l,Instance:()=>p,ResultList:()=>a,Summary:()=>o});var r=class i{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this.element.innerHTML=e,this}handle(e,t){return this.element.addEventListener(e,t),this}addTo(e){return e instanceof i?e.element.appendChild(this.element):e.appendChild(this.element),this.element}};var T=async(i=100)=>new Promise(e=>setTimeout(e,i)),l=class{constructor(e={}){if(this.inputEl=null,this.clearEl=null,this.instance=null,this.searchID=0,this.debounceTimeoutMs=e.debounceTimeoutMs??300,e.inputElement){if(e.containerElement){console.warn("[Pagefind Input component]: inputElement and containerElement both supplied. Ignoring the container option.");return}this.initExisting(e.inputElement)}else if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Input component]: No selector supplied for containerElement or inputElement");return}this.inputEl.addEventListener("input",async t=>{if(this.instance&&typeof t?.target?.value=="string"){this.updateState(t.target.value);let s=++this.searchID;if(await T(this.debounceTimeoutMs),s!==this.searchID)return null;this.instance?.triggerSearch(t.target.value)}}),this.inputEl.addEventListener("keydown",t=>{t.key==="Escape"&&(++this.searchID,this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState("")),t.key==="Enter"&&t.preventDefault()}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()})}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No container found for ${e} selector`);return}if(t.tagName==="INPUT")console.warn(`[Pagefind Input component]: Encountered input element for ${e} when a container was expected`),console.warn("[Pagefind Input component]: Treating containerElement option as inputElement and proceeding"),this.initExisting(e);else{t.innerHTML="";let s=0;for(;document.querySelector(`#pfmod-input-${s}`);)s+=1;let n=new r("form").class("pagefind-modular-input-wrapper").attrs({role:"search","aria-label":"Search this site",action:"javascript:void(0);"});new r("label").attrs({for:`pfmod-input-${s}`,"data-pfmod-sr-hidden":"true"}).text("Search this site").addTo(n),this.inputEl=new r("input").id(`pfmod-input-${s}`).class("pagefind-modular-input").attrs({autocapitalize:"none",enterkeyhint:"search"}).addTo(n),this.clearEl=new r("button").class("pagefind-modular-input-clear").attrs({"data-pfmod-suppressed":"true"}).text("Clear").handle("click",()=>{this.inputEl.value="",this.instance.triggerSearch(""),this.updateState("")}).addTo(n),n.addTo(t)}}initExisting(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No input element found for ${e} selector`);return}if(t.tagName!=="INPUT"){console.error(`[Pagefind Input component]: Expected ${e} to be an element`);return}this.inputEl=t}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pfmod-suppressed"):this.clearEl.setAttribute("data-pfmod-suppressed","true"))}register(e){this.instance=e,this.instance.on("search",(t,s)=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))})}focus(){this.inputEl&&this.inputEl.focus()}};var g=i=>{if(i instanceof Element)return[i];if(Array.isArray(i)&&i.every(e=>e instanceof Element))return i;if(typeof i=="string"||i instanceof String){let e=document.createElement("div");return e.innerHTML=i,[...e.childNodes]}else return console.error(`[Pagefind ResultList component]: Expected template function to return an HTML element or string, got ${typeof i}`),[]},v=()=>{let i=(e=30)=>". ".repeat(Math.floor(10+Math.random()*e));return`
  • -
    -
    -

    ${i(30)}

    -

    ${i(40)}

    -
    -
  • `},y=i=>{let e=new r("li").class("pagefind-modular-list-result"),t=new r("div").class("pagefind-modular-list-thumb").addTo(e);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(t);let s=new r("div").class("pagefind-modular-list-inner").addTo(e),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i.url}).addTo(n),new r("p").class("pagefind-modular-list-excerpt").html(i.excerpt).addTo(s),e.element},E=i=>{if(!(i instanceof HTMLElement))return null;let e=window.getComputedStyle(i).overflowY;return e!=="visible"&&e!=="hidden"?i:E(i.parentNode)},d=class{constructor(e={}){this.rawResult=e.result,this.placeholderNodes=e.placeholderNodes,this.resultFn=e.resultFn,this.intersectionEl=e.intersectionEl,this.result=null,this.waitForIntersection()}waitForIntersection(){if(!this.placeholderNodes?.length)return;let e={root:this.intersectionEl,rootMargin:"0px",threshold:.01};new IntersectionObserver((s,n)=>{this.result===null&&s?.[0]?.isIntersecting&&(this.load(),n.disconnect())},e).observe(this.placeholderNodes[0])}async load(){if(!this.placeholderNodes?.length)return;this.result=await this.rawResult.data();let e=this.resultFn(this.result),t=g(e);for(;this.placeholderNodes.length>1;)this.placeholderNodes.pop().remove();this.placeholderNodes[0].replaceWith(...t)}},a=class{constructor(e){if(this.intersectionEl=document.body,this.containerEl=null,this.results=[],this.placeholderTemplate=e.placeholderTemplate??v,this.resultTemplate=e.resultTemplate??y,e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind ResultList component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind ResultList component]: No container found for ${e} selector`);return}this.containerEl=t}append(e){for(let t of e)this.containerEl.appendChild(t)}register(e){e.on("results",t=>{this.containerEl&&(this.containerEl.innerHTML="",this.intersectionEl=E(this.containerEl),this.results=t.results.map(s=>{let n=g(this.placeholderTemplate());return this.append(n),new d({result:s,placeholderNodes:n,resultFn:this.resultTemplate,intersectionEl:this.intersectionEl})}))}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="")})}};var o=class{constructor(e={}){if(this.containerEl=null,this.defaultMessage=e.defaultMessage??"",this.term="",e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Summary component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Summary component]: No container found for ${e} selector`);return}this.containerEl=t,this.containerEl.innerText=this.defaultMessage}register(e){e.on("search",(t,s)=>{this.term=t}),e.on("results",t=>{if(!this.containerEl||!t)return;if(!this.term){this.containerEl.innerText=this.defaultMessage;return}let s=t?.results?.length??0;this.containerEl.innerText=`${s} result${s===1?"":"s"} for ${this.term}`}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerText=`Searching for ${this.term}...`)})}};var h=class{constructor(e={}){if(this.instance=null,this.wrapper=null,this.pillContainer=null,this.available={},this.selected=["All"],this.total=0,this.filterMemo="",this.filter=e.filter,this.ordering=e.ordering??null,this.alwaysShow=e.alwaysShow??!1,this.selectMultiple=e.selectMultiple??!1,!this.filter?.length){console.error("[Pagefind FilterPills component]: No filter option supplied, nothing to display");return}if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind FilterPills component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind FilterPills component]: No container found for ${e} selector`);return}t.innerHTML="";let s=`pagefind_modular_filter_pills_${this.filter}`,n=new r("div").class("pagefind-modular-filter-pills-wrapper").attrs({role:"group","aria-labelledby":s});this.alwaysShow||n.attrs({"data-pfmod-hidden":!0}),new r("div").id(s).class("pagefind-modular-filter-pills-label").attrs({"data-pfmod-sr-hidden":!0}).text(`Filter results by ${this.filter}`).addTo(n),this.pillContainer=new r("div").class("pagefind-modular-filter-pills").addTo(n),this.wrapper=n.addTo(t)}update(){let e=this.available.map(t=>t[0]).join("~");e==this.filterMemo?this.updateExisting():(this.renderNew(),this.filterMemo=e)}pushFilters(){let e=this.selected.filter(t=>t!=="All");this.instance.triggerFilter(this.filter,e)}pillInner(e,t){return this.total?`${e} (${t})`:`${e}`}renderNew(){this.available.forEach(([e,t])=>{new r("button").class("pagefind-modular-filter-pill").html(this.pillInner(e,t)).attrs({"aria-pressed":this.selected.includes(e),type:"button"}).handle("click",()=>{e==="All"?this.selected=["All"]:this.selected.includes(e)?this.selected=this.selected.filter(s=>s!==e):this.selectMultiple?this.selected.push(e):this.selected=[e],this.selected?.length?this.selected?.length>1&&(this.selected=this.selected.filter(s=>s!=="All")):this.selected=["All"],this.update(),this.pushFilters()}).addTo(this.pillContainer)})}updateExisting(){let e=[...this.pillContainer.childNodes];this.available.forEach(([t,s],n)=>{e[n].innerHTML=this.pillInner(t,s),e[n].setAttribute("aria-pressed",this.selected.includes(t))})}register(e){this.instance=e,this.instance.on("filters",t=>{if(!this.pillContainer)return;this.selectMultiple?t=t.available:t=t.total;let s=t[this.filter];if(!s){console.warn(`[Pagefind FilterPills component]: No possible values found for the ${this.filter} filter`);return}this.available=Object.entries(s),Array.isArray(this.ordering)?this.available.sort((n,c)=>{let m=this.ordering.indexOf(n[0]),_=this.ordering.indexOf(c[0]);return(m===-1?1/0:m)-(_===-1?1/0:_)}):this.available.sort((n,c)=>n[0].localeCompare(c[0])),this.available.unshift(["All",this.total]),this.update()}),e.on("results",t=>{this.pillContainer&&(this.total=t?.unfilteredResultCount||0,this.available?.[0]?.[0]==="All"&&(this.available[0][1]=this.total),this.total||this.alwaysShow?this.wrapper.removeAttribute("data-pfmod-hidden"):this.wrapper.setAttribute("data-pfmod-hidden","true"),this.update())})}};var P=async(i=50)=>await new Promise(e=>setTimeout(e,i)),u;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(u=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?modular-ui.js.*$/)[1])}catch{u="/pagefind/"}var p=class{constructor(e={}){this.__pagefind__=null,this.__initializing__=null,this.__searchID__=0,this.__hooks__={search:[],filters:[],loading:[],results:[]},this.components=[],this.searchTerm="",this.searchFilters={},this.searchResult={},this.availableFilters=null,this.totalFilters=null,this.options={bundlePath:e.bundlePath??u,mergeIndex:e.mergeIndex??[]},delete e.bundlePath,delete e.resetStyles,delete e.processResult,delete e.processTerm,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,this.pagefindOptions=e}add(e){e?.register?.(this),this.components.push(e)}on(e,t){if(!this.__hooks__[e]){let s=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Composable]: Unknown event type ${e}. Supported events: [${s}]`);return}if(typeof t!="function"){console.error(`[Pagefind Composable]: Expected callback to be a function, received ${typeof t}`);return}this.__hooks__[e].push(t)}triggerLoad(){this.__load__()}triggerSearch(e){this.searchTerm=e,this.__dispatch__("search",e,this.searchFilters),this.__search__(e,this.searchFilters)}triggerSearchWithFilters(e,t){this.searchTerm=e,this.searchFilters=t,this.__dispatch__("search",e,t),this.__search__(e,t)}triggerFilters(e){this.searchFilters=e,this.__dispatch__("search",this.searchTerm,e),this.__search__(this.searchTerm,e)}triggerFilter(e,t){this.searchFilters=this.searchFilters||{},this.searchFilters[e]=t,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(e,...t){this.__hooks__[e]?.forEach(s=>s?.(...t))}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}async __search__(e,t){this.__dispatch__("loading"),await this.__load__();let s=++this.__searchID__;if(!e||!e.length)return this.__clear__();let n=await this.__pagefind__.search(e,{filters:t});n&&this.__searchID__===s&&(n.filters&&Object.keys(n.filters)?.length&&(this.availableFilters=n.filters,this.totalFilters=n.totalFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=n,this.__dispatch__("results",this.searchResult))}async __load__(){if(this.__initializing__){for(;!this.__pagefind__;)await P(50);return}if(this.__initializing__=!0,!this.__pagefind__){let e;try{e=await import(`${this.options.bundlePath}pagefind.js`)}catch(t){console.error(t),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindComposable Instance"].join(` -`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location")}await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}};window.PagefindModularUI=f;})(); diff --git a/pagefind/pagefind-ui.css b/pagefind/pagefind-ui.css deleted file mode 100644 index d7984a98a4..0000000000 --- a/pagefind/pagefind-ui.css +++ /dev/null @@ -1 +0,0 @@ -.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"\2937 ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable="false"])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable="true"]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)} diff --git a/pagefind/pagefind-ui.js b/pagefind/pagefind-ui.js deleted file mode 100644 index d88ad59494..0000000000 --- a/pagefind/pagefind-ui.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{var Ms=Object.defineProperty;var y=(n,e)=>{for(var t in e)Ms(n,t,{get:e[t],enumerable:!0})};function z(){}function mt(n){return n()}function gn(){return Object.create(null)}function G(n){n.forEach(mt)}function nt(n){return typeof n=="function"}function K(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}var et;function ie(n,e){return et||(et=document.createElement("a")),et.href=e,n===et.href}function En(n){return Object.keys(n).length===0}var Rn=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global,de=class{constructor(e){this.options=e,this._listeners="WeakMap"in Rn?new WeakMap:void 0}observe(e,t){return this._listeners.set(e,t),this._getObserver().observe(e,this.options),()=>{this._listeners.delete(e),this._observer.unobserve(e)}}_getObserver(){var e;return(e=this._observer)!==null&&e!==void 0?e:this._observer=new ResizeObserver(t=>{var s;for(let r of t)de.entries.set(r.target,r),(s=this._listeners.get(r.target))===null||s===void 0||s(r)})}};de.entries="WeakMap"in Rn?new WeakMap:void 0;var bn=!1;function As(){bn=!0}function vs(){bn=!1}function b(n,e){n.appendChild(e)}function S(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode&&n.parentNode.removeChild(n)}function Q(n,e){for(let t=0;tn.removeEventListener(e,t,s)}function g(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function Hs(n){return Array.from(n.childNodes)}function N(n,e){e=""+e,n.data!==e&&(n.data=e)}function pt(n,e){n.value=e??""}function B(n,e,t){n.classList[t?"add":"remove"](e)}var st=class{constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,s=null){this.e||(this.is_svg?this.e=ws(t.nodeName):this.e=C(t.nodeType===11?"TEMPLATE":t.nodeName),this.t=t.tagName!=="TEMPLATE"?t:t.content,this.c(e)),this.i(s)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;tn.indexOf(s)===-1?e.push(s):t.push(s)),t.forEach(s=>s()),re=e}var tt=new Set,ee;function ae(){ee={r:0,c:[],p:ee}}function oe(){ee.r||G(ee.c),ee=ee.p}function U(n,e){n&&n.i&&(tt.delete(n),n.i(e))}function P(n,e,t,s){if(n&&n.o){if(tt.has(n))return;tt.add(n),ee.c.push(()=>{tt.delete(n),s&&(t&&n.d(1),s())}),n.o(e)}else s&&s()}function Sn(n,e){P(n,1,1,()=>{e.delete(n.key)})}function yn(n,e,t,s,r,l,i,a,o,f,u,m){let p=n.length,h=l.length,_=p,c={};for(;_--;)c[n[_].key]=_;let d=[],T=new Map,R=new Map,M=[];for(_=h;_--;){let v=m(r,l,_),H=t(v),O=i.get(H);O?s&&M.push(()=>O.p(v,e)):(O=f(H,v),O.c()),T.set(H,d[_]=O),H in c&&R.set(H,Math.abs(_-c[H]))}let D=new Set,X=new Set;function V(v){U(v,1),v.m(a,u),i.set(v.key,v),u=v.first,h--}for(;p&&h;){let v=d[h-1],H=n[p-1],O=v.key,W=H.key;v===H?(u=v.first,p--,h--):T.has(W)?!i.has(O)||D.has(O)?V(v):X.has(W)?p--:R.get(O)>R.get(W)?(X.add(O),V(v)):(D.add(W),p--):(o(H,i),p--)}for(;p--;){let v=n[p];T.has(v.key)||o(v,i)}for(;h;)V(d[h-1]);return G(M),d}var zs=["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"],Ua=new Set([...zs]);function Mn(n,e,t){let s=n.$$.props[e];s!==void 0&&(n.$$.bound[s]=t,t(n.$$.ctx[s]))}function rt(n){n&&n.c()}function me(n,e,t,s){let{fragment:r,after_update:l}=n.$$;r&&r.m(e,t),s||ht(()=>{let i=n.$$.on_mount.map(mt).filter(nt);n.$$.on_destroy?n.$$.on_destroy.push(...i):G(i),n.$$.on_mount=[]}),l.forEach(ht)}function ue(n,e){let t=n.$$;t.fragment!==null&&(js(t.after_update),G(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Us(n,e){n.$$.dirty[0]===-1&&(se.push(n),Ns(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{let _=h.length?h[0]:p;return f.ctx&&r(f.ctx[m],f.ctx[m]=_)&&(!f.skip_bound&&f.bound[m]&&f.bound[m](_),u&&Us(n,m)),p}):[],f.update(),u=!0,G(f.before_update),f.fragment=s?s(f.ctx):!1,e.target){if(e.hydrate){As();let m=Hs(e.target);f.fragment&&f.fragment.l(m),m.forEach(k)}else f.fragment&&f.fragment.c();e.intro&&U(n.$$.fragment),me(n,e.target,e.anchor,e.customElement),vs(),kn()}fe(o)}var Ds;typeof HTMLElement=="function"&&(Ds=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:n}=this.$$;this.$$.on_disconnect=n.map(mt).filter(nt);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(n,e,t){this[n]=t}disconnectedCallback(){G(this.$$.on_disconnect)}$destroy(){ue(this,1),this.$destroy=z}$on(n,e){if(!nt(e))return z;let t=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return t.push(e),()=>{let s=t.indexOf(e);s!==-1&&t.splice(s,1)}}$set(n){this.$$set&&!En(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}});var q=class{$destroy(){ue(this,1),this.$destroy=z}$on(e,t){if(!nt(t))return z;let s=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return s.push(t),()=>{let r=s.indexOf(t);r!==-1&&s.splice(r,1)}}$set(e){this.$$set&&!En(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};function I(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=97&&e<=122||e>=65&&e<=90}function $(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=48&&e<=57}function Z(n){return I(n)||$(n)}var An=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var Rt={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var Is={}.hasOwnProperty;function lt(n,e={}){let t=vn(),s=String(n),r=s.toLowerCase(),l=0;if(n==null)throw new Error("Expected string, got `"+n+"`");if(Is.call(Rt,r)){let a=Rt[r];return(e.normalize===void 0||e.normalize===null||e.normalize)&&typeof a=="string"?lt(a):(t[An.includes(r)?"regular":"irregular"]=s,t)}for(;I(r.charCodeAt(l))&&l<9;)l++;if(l>1&&l<9){if(t.language=s.slice(0,l),l<4){let a=0;for(;r.charCodeAt(l)===45&&I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&I(r.charCodeAt(l+3))&&!I(r.charCodeAt(l+4));){if(a>2)return i(l,3,"Too many extended language subtags, expected at most 3 subtags");t.extendedLanguageSubtags.push(s.slice(l+1,l+4)),l+=4,a++}}for(r.charCodeAt(l)===45&&I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&I(r.charCodeAt(l+3))&&I(r.charCodeAt(l+4))&&!I(r.charCodeAt(l+5))&&(t.script=s.slice(l+1,l+5),l+=5),r.charCodeAt(l)===45&&(I(r.charCodeAt(l+1))&&I(r.charCodeAt(l+2))&&!I(r.charCodeAt(l+3))?(t.region=s.slice(l+1,l+3),l+=3):$(r.charCodeAt(l+1))&&$(r.charCodeAt(l+2))&&$(r.charCodeAt(l+3))&&!$(r.charCodeAt(l+4))&&(t.region=s.slice(l+1,l+4),l+=4));r.charCodeAt(l)===45;){let a=l+1,o=a;for(;Z(r.charCodeAt(o));){if(o-a>7)return i(o,1,"Too long variant, expected at most 8 characters");o++}if(o-a>4||o-a>3&&$(r.charCodeAt(a)))t.variants.push(s.slice(a,o)),l=o;else break}for(;r.charCodeAt(l)===45&&!(r.charCodeAt(l+1)===120||!Z(r.charCodeAt(l+1))||r.charCodeAt(l+2)!==45||!Z(r.charCodeAt(l+3)));){let a=l+2,o=0;for(;r.charCodeAt(a)===45&&Z(r.charCodeAt(a+1))&&Z(r.charCodeAt(a+2));){let f=a+1;for(a=f+2,o++;Z(r.charCodeAt(a));){if(a-f>7)return i(a,2,"Too long extension, expected at most 8 characters");a++}}if(!o)return i(a,4,"Empty extension, extensions must have at least 2 characters of content");t.extensions.push({singleton:s.charAt(l+1),extensions:s.slice(l+3,a).split("-")}),l=a}}else l=0;if(l===0&&r.charCodeAt(l)===120||r.charCodeAt(l)===45&&r.charCodeAt(l+1)===120){l=l?l+2:1;let a=l;for(;r.charCodeAt(a)===45&&Z(r.charCodeAt(a+1));){let o=l+1;for(a=o;Z(r.charCodeAt(a));){if(a-o>7)return i(a,5,"Too long private-use area, expected at most 8 characters");a++}t.privateuse.push(s.slice(l+1,a)),l=a}}if(l!==s.length)return i(l,6,"Found superfluous content after tag");return t;function i(a,o,f){return e.warning&&e.warning(f,o,a),e.forgiving?t:vn()}}function vn(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function wn(n,e,t){let s=n.slice();return s[8]=e[t][0],s[9]=e[t][1],s}function Ps(n){let e,t,s,r,l,i=n[0]&&Hn(n);return{c(){i&&i.c(),e=A(),t=C("div"),s=C("p"),s.textContent=`${n[3](30)}`,r=A(),l=C("p"),l.textContent=`${n[3](40)}`,g(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),g(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(a,o){i&&i.m(a,o),S(a,e,o),S(a,t,o),b(t,s),b(t,r),b(t,l)},p(a,o){a[0]?i||(i=Hn(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function Ls(n){let e,t,s,r,l=n[1].meta?.title+"",i,a,o,f,u=n[1].excerpt+"",m,p=n[0]&&Fn(n),h=n[2].length&&On(n);return{c(){p&&p.c(),e=A(),t=C("div"),s=C("p"),r=C("a"),i=w(l),o=A(),f=C("p"),m=A(),h&&h.c(),g(r,"class","pagefind-ui__result-link svelte-j9e30"),g(r,"href",a=n[1].meta?.url||n[1].url),g(s,"class","pagefind-ui__result-title svelte-j9e30"),g(f,"class","pagefind-ui__result-excerpt svelte-j9e30"),g(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(_,c){p&&p.m(_,c),S(_,e,c),S(_,t,c),b(t,s),b(s,r),b(r,i),b(t,o),b(t,f),f.innerHTML=u,b(t,m),h&&h.m(t,null)},p(_,c){_[0]?p?p.p(_,c):(p=Fn(_),p.c(),p.m(e.parentNode,e)):p&&(p.d(1),p=null),c&2&&l!==(l=_[1].meta?.title+"")&&N(i,l),c&2&&a!==(a=_[1].meta?.url||_[1].url)&&g(r,"href",a),c&2&&u!==(u=_[1].excerpt+"")&&(f.innerHTML=u),_[2].length?h?h.p(_,c):(h=On(_),h.c(),h.m(t,null)):h&&(h.d(1),h=null)},d(_){p&&p.d(_),_&&k(e),_&&k(t),h&&h.d()}}}function Hn(n){let e;return{c(){e=C("div"),g(e,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(t,s){S(t,e,s)},d(t){t&&k(e)}}}function Fn(n){let e,t=n[1].meta.image&&Nn(n);return{c(){e=C("div"),t&&t.c(),g(e,"class","pagefind-ui__result-thumb svelte-j9e30")},m(s,r){S(s,e,r),t&&t.m(e,null)},p(s,r){s[1].meta.image?t?t.p(s,r):(t=Nn(s),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(s){s&&k(e),t&&t.d()}}}function Nn(n){let e,t,s;return{c(){e=C("img"),g(e,"class","pagefind-ui__result-image svelte-j9e30"),ie(e.src,t=n[1].meta?.image)||g(e,"src",t),g(e,"alt",s=n[1].meta?.image_alt||n[1].meta?.title)},m(r,l){S(r,e,l)},p(r,l){l&2&&!ie(e.src,t=r[1].meta?.image)&&g(e,"src",t),l&2&&s!==(s=r[1].meta?.image_alt||r[1].meta?.title)&&g(e,"alt",s)},d(r){r&&k(e)}}}function On(n){let e,t=n[2],s=[];for(let r=0;rn.toLocaleUpperCase();function Bs(n,e,t){let{show_images:s=!0}=e,{process_result:r=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],f=async m=>{t(1,a=await m.data()),t(1,a=r?.(a)??a),t(2,o=Object.entries(a.meta).filter(([p])=>!i.includes(p)))},u=(m=30)=>". ".repeat(Math.floor(10+Math.random()*m));return n.$$set=m=>{"show_images"in m&&t(0,s=m.show_images),"process_result"in m&&t(4,r=m.process_result),"result"in m&&t(5,l=m.result)},n.$$.update=()=>{if(n.$$.dirty&32)e:f(l)},[s,a,o,u,r,l]}var bt=class extends q{constructor(e){super(),Y(this,e,Bs,qs,K,{show_images:0,process_result:4,result:5})}},Un=bt;function Dn(n,e,t){let s=n.slice();return s[11]=e[t][0],s[12]=e[t][1],s}function In(n,e,t){let s=n.slice();return s[15]=e[t],s}function Vs(n){let e,t,s,r,l,i=n[0]&&Pn(n);return{c(){i&&i.c(),e=A(),t=C("div"),s=C("p"),s.textContent=`${n[5](30)}`,r=A(),l=C("p"),l.textContent=`${n[5](40)}`,g(s,"class","pagefind-ui__result-title pagefind-ui__loading svelte-4xnkmf"),g(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-4xnkmf"),g(t,"class","pagefind-ui__result-inner svelte-4xnkmf")},m(a,o){i&&i.m(a,o),S(a,e,o),S(a,t,o),b(t,s),b(t,r),b(t,l)},p(a,o){a[0]?i||(i=Pn(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function Ws(n){let e,t,s,r,l=n[1].meta?.title+"",i,a,o,f,u,m=n[0]&&Ln(n),p=n[4]&&Bn(n),h=n[3],_=[];for(let d=0;dn.toLocaleUpperCase();function Ks(n,e,t){let{show_images:s=!0}=e,{process_result:r=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],f=[],u=!1,m=(_,c)=>{if(_.length<=c)return _;let d=[..._].sort((T,R)=>R.locations.length-T.locations.length).slice(0,3).map(T=>T.url);return _.filter(T=>d.includes(T.url))},p=async _=>{t(1,a=await _.data()),t(1,a=r?.(a)??a),t(2,o=Object.entries(a.meta).filter(([c])=>!i.includes(c))),Array.isArray(a.sub_results)&&(t(4,u=a.sub_results?.[0]?.url===(a.meta?.url||a.url)),u?t(3,f=m(a.sub_results.slice(1),3)):t(3,f=m([...a.sub_results],3)))},h=(_=30)=>". ".repeat(Math.floor(10+Math.random()*_));return n.$$set=_=>{"show_images"in _&&t(0,s=_.show_images),"process_result"in _&&t(6,r=_.process_result),"result"in _&&t(7,l=_.result)},n.$$.update=()=>{if(n.$$.dirty&128)e:p(l)},[s,a,o,f,u,h,r,l]}var Tt=class extends q{constructor(e){super(),Y(this,e,Ks,Gs,K,{show_images:0,process_result:6,result:7})}},Jn=Tt;function Yn(n,e,t){let s=n.slice();return s[10]=e[t][0],s[11]=e[t][1],s[12]=e,s[13]=t,s}function Zn(n,e,t){let s=n.slice();return s[14]=e[t][0],s[15]=e[t][1],s[16]=e,s[17]=t,s}function Xn(n){let e,t,s=n[4]("filters_label",n[5],n[6])+"",r,l,i=Object.entries(n[1]),a=[];for(let o=0;on.toLocaleUpperCase(),ts=n=>n.toLowerCase();function Ys(n,e,t){let{available_filters:s=null}=e,{show_empty_filters:r=!0}=e,{open_filters:l=[]}=e,{translate:i=()=>""}=e,{automatic_translations:a={}}=e,{translations:o={}}=e,{selected_filters:f={}}=e,u=!1,m=!1;function p(h,_){f[`${h}:${_}`]=this.checked,t(0,f)}return n.$$set=h=>{"available_filters"in h&&t(1,s=h.available_filters),"show_empty_filters"in h&&t(2,r=h.show_empty_filters),"open_filters"in h&&t(3,l=h.open_filters),"translate"in h&&t(4,i=h.translate),"automatic_translations"in h&&t(5,a=h.automatic_translations),"translations"in h&&t(6,o=h.translations),"selected_filters"in h&&t(0,f=h.selected_filters)},n.$$.update=()=>{if(n.$$.dirty&258){e:if(s&&!u){t(8,u=!0);let h=Object.entries(s||{});h.length===1&&Object.entries(h[0][1])?.length<=6&&t(7,m=!0)}}},[f,s,r,l,i,a,o,m,u,p]}var Ct=class extends q{constructor(e){super(),Y(this,e,Ys,Js,K,{available_filters:1,show_empty_filters:2,open_filters:3,translate:4,automatic_translations:5,translations:6,selected_filters:0})}},ns=Ct;var kt={};y(kt,{comments:()=>Xs,default:()=>$s,direction:()=>Qs,strings:()=>xs,thanks_to:()=>Zs});var Zs="Jan Claasen ",Xs="",Qs="ltr",xs={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]"},$s={thanks_to:Zs,comments:Xs,direction:Qs,strings:xs};var St={};y(St,{comments:()=>tr,default:()=>rr,direction:()=>nr,strings:()=>sr,thanks_to:()=>er});var er="Jermanuts",tr="",nr="rtl",sr={placeholder:"\u0628\u062D\u062B",clear_search:"\u0627\u0645\u0633\u062D",load_more:"\u062D\u0645\u0651\u0650\u0644 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",search_label:"\u0627\u0628\u062D\u062B \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639",filters_label:"\u062A\u0635\u0641\u064A\u0627\u062A",zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629 \u0644 [SEARCH_TERM]",alt_search:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u064A\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644 [DIFFERENT_TERM] \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643",search_suggestion:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u062C\u0631\u0628 \u0623\u062D\u062F \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u062A\u0627\u0644\u064A\u0629:",searching:"\u064A\u0628\u062D\u062B \u0639\u0646 [SEARCH_TERM]..."},rr={thanks_to:er,comments:tr,direction:nr,strings:sr};var yt={};y(yt,{comments:()=>ir,default:()=>ur,direction:()=>ar,strings:()=>or,thanks_to:()=>lr});var lr="Maruf Alom ",ir="",ar="ltr",or={placeholder:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",clear_search:"\u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09C1\u09A8",load_more:"\u0986\u09B0\u09CB \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09C1\u09A8",search_label:"\u098F\u0987 \u0993\u09DF\u09C7\u09AC\u09B8\u09BE\u0987\u099F\u09C7 \u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",filters_label:"\u09AB\u09BF\u09B2\u09CD\u099F\u09BE\u09B0",zero_results:"[SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF",many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",alt_search:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF. \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09C7 [DIFFERENT_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7",search_suggestion:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u09AC\u09BF\u09B7\u09DF\u09C7. \u09A8\u09BF\u09A8\u09CD\u09AE\u09C7\u09B0 \u09AC\u09BF\u09B7\u09DF\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09A6\u09C7\u0996\u09C1\u09A8:",searching:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u099A\u09B2\u099B\u09C7 [SEARCH_TERM]..."},ur={thanks_to:lr,comments:ir,direction:ar,strings:or};var Mt={};y(Mt,{comments:()=>_r,default:()=>hr,direction:()=>fr,strings:()=>dr,thanks_to:()=>cr});var cr="Pablo Villaverde ",_r="",fr="ltr",dr={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9s resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]..."},hr={thanks_to:cr,comments:_r,direction:fr,strings:dr};var At={};y(At,{comments:()=>pr,default:()=>Rr,direction:()=>gr,strings:()=>Er,thanks_to:()=>mr});var mr="Dalibor Hon ",pr="",gr="ltr",Er={placeholder:"Hledat",clear_search:"Smazat",load_more:"Na\u010D\xEDst dal\u0161\xED v\xFDsledky",search_label:"Prohledat tuto str\xE1nku",filters_label:"Filtry",zero_results:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]",many_results:"[COUNT] v\xFDsledk\u016F pro [SEARCH_TERM]",one_result:"[COUNT] v\xFDsledek pro [SEARCH_TERM]",alt_search:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Zobrazuj\xED se v\xFDsledky pro [DIFFERENT_TERM]",search_suggestion:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Souvisej\xEDc\xED v\xFDsledky hled\xE1n\xED:",searching:"Hled\xE1m [SEARCH_TERM]..."},Rr={thanks_to:mr,comments:pr,direction:gr,strings:Er};var vt={};y(vt,{comments:()=>Tr,default:()=>Sr,direction:()=>Cr,strings:()=>kr,thanks_to:()=>br});var br="Jonas Smedegaard ",Tr="",Cr="ltr",kr={placeholder:"S\xF8g",clear_search:"Nulstil",load_more:"Indl\xE6s flere resultater",search_label:"S\xF8g p\xE5 dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v et af disse s\xF8geord i stedet:",searching:"S\xF8ger efter [SEARCH_TERM]..."},Sr={thanks_to:br,comments:Tr,direction:Cr,strings:kr};var wt={};y(wt,{comments:()=>Mr,default:()=>wr,direction:()=>Ar,strings:()=>vr,thanks_to:()=>yr});var yr="Jan Claasen ",Mr="",Ar="ltr",vr={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche f\xFCr [SEARCH_TERM]"},wr={thanks_to:yr,comments:Mr,direction:Ar,strings:vr};var Ht={};y(Ht,{comments:()=>Fr,default:()=>jr,direction:()=>Nr,strings:()=>Or,thanks_to:()=>Hr});var Hr="Liam Bigelow ",Fr="",Nr="ltr",Or={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]..."},jr={thanks_to:Hr,comments:Fr,direction:Nr,strings:Or};var Ft={};y(Ft,{comments:()=>Ur,default:()=>Pr,direction:()=>Dr,strings:()=>Ir,thanks_to:()=>zr});var zr="Pablo Villaverde ",Ur="",Dr="ltr",Ir={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]..."},Pr={thanks_to:zr,comments:Ur,direction:Dr,strings:Ir};var Nt={};y(Nt,{comments:()=>qr,default:()=>Wr,direction:()=>Br,strings:()=>Vr,thanks_to:()=>Lr});var Lr="Ali Khaleqi Yekta ",qr="",Br="rtl",Vr={placeholder:"\u062C\u0633\u062A\u062C\u0648",clear_search:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",load_more:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u062A\u0627\u06CC\u062C \u0628\u06CC\u0634\u062A\u0631",search_label:"\u062C\u0633\u062A\u062C\u0648 \u062F\u0631 \u0633\u0627\u06CC\u062A",filters_label:"\u0641\u06CC\u0644\u062A\u0631\u0647\u0627",zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",alt_search:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u062F\u0631 \u0639\u0648\u0636 \u0646\u062A\u0627\u06CC\u062C \u0628\u0631\u0627\u06CC [DIFFERENT_TERM] \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F",search_suggestion:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u06CC\u06A9\u06CC \u0627\u0632 \u062C\u0633\u062A\u062C\u0648\u0647\u0627\u06CC \u0632\u06CC\u0631 \u0631\u0627 \u0627\u0645\u062A\u062D\u0627\u0646 \u06A9\u0646\u06CC\u062F:",searching:"\u062F\u0631 \u062D\u0627\u0644 \u062C\u0633\u062A\u062C\u0648\u06CC [SEARCH_TERM]..."},Wr={thanks_to:Lr,comments:qr,direction:Br,strings:Vr};var Ot={};y(Ot,{comments:()=>Kr,default:()=>Zr,direction:()=>Jr,strings:()=>Yr,thanks_to:()=>Gr});var Gr="Valtteri Laitinen ",Kr="",Jr="ltr",Yr={placeholder:"Haku",clear_search:"Tyhjenn\xE4",load_more:"Lataa lis\xE4\xE4 tuloksia",search_label:"Hae t\xE4lt\xE4 sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. N\xE4ytet\xE4\xE4n tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]..."},Zr={thanks_to:Gr,comments:Kr,direction:Jr,strings:Yr};var jt={};y(jt,{comments:()=>Qr,default:()=>el,direction:()=>xr,strings:()=>$r,thanks_to:()=>Xr});var Xr="Nicolas Friedli ",Qr="",xr="ltr",$r={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]..."},el={thanks_to:Xr,comments:Qr,direction:xr,strings:$r};var zt={};y(zt,{comments:()=>nl,default:()=>ll,direction:()=>sl,strings:()=>rl,thanks_to:()=>tl});var tl="Pablo Villaverde ",nl="",sl="ltr",rl={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]..."},ll={thanks_to:tl,comments:nl,direction:sl,strings:rl};var Ut={};y(Ut,{comments:()=>al,default:()=>cl,direction:()=>ol,strings:()=>ul,thanks_to:()=>il});var il="Nir Tamir ",al="",ol="rtl",ul={placeholder:"\u05D7\u05D9\u05E4\u05D5\u05E9",clear_search:"\u05E0\u05D9\u05E7\u05D5\u05D9",load_more:"\u05E2\u05D5\u05D3 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",search_label:"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D6\u05D4",filters_label:"\u05DE\u05E1\u05E0\u05E0\u05D9\u05DD",zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",many_results:"\u05E0\u05DE\u05E6\u05D0\u05D5 [COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",one_result:"\u05E0\u05DE\u05E6\u05D0\u05D4 \u05EA\u05D5\u05E6\u05D0\u05D4 \u05D0\u05D7\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",alt_search:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05DE\u05D5\u05E6\u05D2\u05D5\u05EA \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [DIFFERENT_TERM]",search_suggestion:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05E0\u05E1\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9\u05D9\u05DD \u05D4\u05D1\u05D0\u05D9\u05DD:",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D0\u05EA [SEARCH_TERM]..."},cl={thanks_to:il,comments:al,direction:ol,strings:ul};var Dt={};y(Dt,{comments:()=>fl,default:()=>ml,direction:()=>dl,strings:()=>hl,thanks_to:()=>_l});var _l="Amit Yadav ",fl="",dl="ltr",hl={placeholder:"\u0916\u094B\u091C\u0947\u0902",clear_search:"\u0938\u093E\u092B \u0915\u0930\u0947\u0902",load_more:"\u0914\u0930 \u0905\u0927\u093F\u0915 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0915\u0930\u0947\u0902",search_label:"\u0907\u0938 \u0938\u093E\u0907\u091F \u092E\u0947\u0902 \u0916\u094B\u091C\u0947\u0902",filters_label:"\u092B\u093C\u093F\u0932\u094D\u091F\u0930",zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E",many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u0947",one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u093E",alt_search:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F [DIFFERENT_TERM] \u0915\u0947 \u0932\u093F\u090F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E \u0930\u0939\u093E \u0939\u0948",search_suggestion:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0928\u093F\u092E\u094D\u0928\u0932\u093F\u0916\u093F\u0924 \u0916\u094B\u091C\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u094B\u0908 \u090F\u0915 \u0906\u091C\u093C\u092E\u093E\u090F\u0902:",searching:"[SEARCH_TERM] \u0915\u0940 \u0916\u094B\u091C \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948..."},ml={thanks_to:_l,comments:fl,direction:dl,strings:hl};var It={};y(It,{comments:()=>gl,default:()=>bl,direction:()=>El,strings:()=>Rl,thanks_to:()=>pl});var pl="Diomed ",gl="",El="ltr",Rl={placeholder:"Tra\u017Ei",clear_search:"O\u010Disti",load_more:"U\u010Ditaj vi\u0161e rezultata",search_label:"Pretra\u017Ei ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Poku\u0161aj s jednom od ovih pretraga:",searching:"Pretra\u017Eujem [SEARCH_TERM]..."},bl={thanks_to:pl,comments:gl,direction:El,strings:Rl};var Pt={};y(Pt,{comments:()=>Cl,default:()=>yl,direction:()=>kl,strings:()=>Sl,thanks_to:()=>Tl});var Tl="Adam Laki ",Cl="",kl="ltr",Sl={placeholder:"Keres\xE9s",clear_search:"T\xF6rl\xE9s",load_more:"Tov\xE1bbi tal\xE1latok bet\xF6lt\xE9se",search_label:"Keres\xE9s az oldalon",filters_label:"Sz\u0171r\xE9s",zero_results:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",many_results:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",one_result:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",alt_search:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Tal\xE1latok mutat\xE1sa ink\xE1bb a(z) [DIFFERENT_TERM] kifejez\xE9sre",search_suggestion:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Pr\xF3b\xE1ld meg a k\xF6vetkez\u0151 keres\xE9sek egyik\xE9t:",searching:"Keres\xE9s a(z) [SEARCH_TERM] kifejez\xE9sre..."},yl={thanks_to:Tl,comments:Cl,direction:kl,strings:Sl};var Lt={};y(Lt,{comments:()=>Al,default:()=>Hl,direction:()=>vl,strings:()=>wl,thanks_to:()=>Ml});var Ml="Nixentric",Al="",vl="ltr",wl={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]..."},Hl={thanks_to:Ml,comments:Al,direction:vl,strings:wl};var qt={};y(qt,{comments:()=>Nl,default:()=>zl,direction:()=>Ol,strings:()=>jl,thanks_to:()=>Fl});var Fl="Cosette Bruhns Alonso, Andrew Janco ",Nl="",Ol="ltr",jl={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra pi\xF9 risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]..."},zl={thanks_to:Fl,comments:Nl,direction:Ol,strings:jl};var Bt={};y(Bt,{comments:()=>Dl,default:()=>Ll,direction:()=>Il,strings:()=>Pl,thanks_to:()=>Ul});var Ul="Tate",Dl="",Il="ltr",Pl={placeholder:"\u691C\u7D22",clear_search:"\u30AF\u30EA\u30A2",load_more:"\u6B21\u3092\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059"},Ll={thanks_to:Ul,comments:Dl,direction:Il,strings:Pl};var Vt={};y(Vt,{comments:()=>Bl,default:()=>Gl,direction:()=>Vl,strings:()=>Wl,thanks_to:()=>ql});var ql="Seokho Son ",Bl="",Vl="ltr",Wl={placeholder:"\uAC80\uC0C9\uC5B4",clear_search:"\uBE44\uC6B0\uAE30",load_more:"\uAC80\uC0C9 \uACB0\uACFC \uB354 \uBCF4\uAE30",search_label:"\uC0AC\uC774\uD2B8 \uAC80\uC0C9",filters_label:"\uD544\uD130",zero_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C",many_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",one_result:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",alt_search:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. [DIFFERENT_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC",search_suggestion:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. \uCD94\uCC9C \uAC80\uC0C9\uC5B4: ",searching:"[SEARCH_TERM] \uAC80\uC0C9 \uC911..."},Gl={thanks_to:ql,comments:Bl,direction:Vl,strings:Wl};var Wt={};y(Wt,{comments:()=>Jl,default:()=>Xl,direction:()=>Yl,strings:()=>Zl,thanks_to:()=>Kl});var Kl="",Jl="",Yl="ltr",Zl={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta \u0113tahi otinga k\u0113",search_label:"Rapu",filters_label:"T\u0101tari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga k\u0113 ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakam\u0101tau ki ng\u0101 mea atu:",searching:"Rapu ki [SEARCH_TERM]..."},Xl={thanks_to:Kl,comments:Jl,direction:Yl,strings:Zl};var Gt={};y(Gt,{comments:()=>xl,default:()=>ti,direction:()=>$l,strings:()=>ei,thanks_to:()=>Ql});var Ql="Paul van Brouwershaven",xl="",$l="ltr",ei={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]..."},ti={thanks_to:Ql,comments:xl,direction:$l,strings:ei};var Kt={};y(Kt,{comments:()=>si,default:()=>ii,direction:()=>ri,strings:()=>li,thanks_to:()=>ni});var ni="Christopher Wingate",si="",ri="ltr",li={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]"},ii={thanks_to:ni,comments:si,direction:ri,strings:li};var Jt={};y(Jt,{comments:()=>oi,default:()=>_i,direction:()=>ui,strings:()=>ci,thanks_to:()=>ai});var ai="",oi="",ui="ltr",ci={placeholder:"Szukaj",clear_search:"Wyczy\u015B\u0107",load_more:"Za\u0142aduj wi\u0119cej",search_label:"Przeszukaj t\u0119 stron\u0119",filters_label:"Filtry",zero_results:"Brak wynik\xF3w dla [SEARCH_TERM]",many_results:"[COUNT] wynik\xF3w dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",alt_search:"Brak wynik\xF3w dla [SEARCH_TERM]. Wy\u015Bwietlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wynik\xF3w dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]..."},_i={thanks_to:ai,comments:oi,direction:ui,strings:ci};var Yt={};y(Yt,{comments:()=>di,default:()=>pi,direction:()=>hi,strings:()=>mi,thanks_to:()=>fi});var fi="Jonatah",di="",hi="ltr",mi={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]..."},pi={thanks_to:fi,comments:di,direction:hi,strings:mi};var Zt={};y(Zt,{comments:()=>Ei,default:()=>Ti,direction:()=>Ri,strings:()=>bi,thanks_to:()=>gi});var gi="Bogdan Mateescu ",Ei="",Ri="ltr",bi={placeholder:"C\u0103utare",clear_search:"\u015Eterge\u0163i",load_more:"\xCEnc\u0103rca\u021Bi mai multe rezultate",search_label:"C\u0103uta\u021Bi \xEEn acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afi\u0219eaz\u0103 \xEEn schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. \xCEncerca\u021Bi una dintre urm\u0103toarele c\u0103ut\u0103ri:",searching:"Se caut\u0103 dup\u0103: [SEARCH_TERM]..."},Ti={thanks_to:gi,comments:Ei,direction:Ri,strings:bi};var Xt={};y(Xt,{comments:()=>ki,default:()=>Mi,direction:()=>Si,strings:()=>yi,thanks_to:()=>Ci});var Ci="Aleksandr Gordeev",ki="",Si="ltr",yi={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]"},Mi={thanks_to:Ci,comments:ki,direction:Si,strings:yi};var Qt={};y(Qt,{comments:()=>vi,default:()=>Fi,direction:()=>wi,strings:()=>Hi,thanks_to:()=>Ai});var Ai="Andrija Sagicc",vi="",wi="ltr",Hi={placeholder:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",clear_search:"\u0411\u0440\u0438\u0441\u0430\u045A\u0435",load_more:"\u041F\u0440\u0438\u043A\u0430\u0437 \u0432\u0438\u0448\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",search_label:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0441\u0430\u0458\u0442\u0430",filters_label:"\u0424\u0438\u043B\u0442\u0435\u0440\u0438",zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",alt_search:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u0440\u0438\u043A\u0430\u0437 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043A \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [DIFFERENT_TERM]",search_suggestion:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u043E\u043A\u0443\u0448\u0430\u0458\u0442\u0435 \u0441\u0430 \u043D\u0435\u043A\u043E\u043C \u043E\u0434 \u0441\u043B\u0435\u0434\u0435\u045B\u0438\u0445 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430:",searching:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0442\u0435\u0440\u043C\u0438\u043D\u0430 [SEARCH_TERM]..."},Fi={thanks_to:Ai,comments:vi,direction:wi,strings:Hi};var xt={};y(xt,{comments:()=>Oi,default:()=>Ui,direction:()=>ji,strings:()=>zi,thanks_to:()=>Ni});var Ni="Montazar Al-Jaber ",Oi="",ji="ltr",zi={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]..."},Ui={thanks_to:Ni,comments:Oi,direction:ji,strings:zi};var $t={};y($t,{comments:()=>Ii,default:()=>qi,direction:()=>Pi,strings:()=>Li,thanks_to:()=>Di});var Di="Anonymous",Ii="",Pi="ltr",Li={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]..."},qi={thanks_to:Di,comments:Ii,direction:Pi,strings:Li};var en={};y(en,{comments:()=>Vi,default:()=>Ki,direction:()=>Wi,strings:()=>Gi,thanks_to:()=>Bi});var Bi="",Vi="",Wi="ltr",Gi={placeholder:"\u0BA4\u0BC7\u0B9F\u0BC1\u0B95",clear_search:"\u0B85\u0BB4\u0BBF\u0B95\u0BCD\u0B95\u0BC1\u0B95",load_more:"\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95",search_label:"\u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BB3\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BCD \u0BA4\u0BC7\u0B9F\u0BC1\u0B95",filters_label:"\u0BB5\u0B9F\u0BBF\u0B95\u0B9F\u0BCD\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",zero_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",many_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 [COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",one_result:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",alt_search:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD\u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8, \u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B92\u0BA4\u0BCD\u0BA4 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD \u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8.\u0B87\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC0\u0B9F\u0BBE\u0BA9 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC8 \u0BA4\u0BC7\u0B9F\u0BC1\u0B95:",searching:"[SEARCH_TERM] \u0BA4\u0BC7\u0B9F\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1"},Ki={thanks_to:Bi,comments:Vi,direction:Wi,strings:Gi};var tn={};y(tn,{comments:()=>Yi,default:()=>Qi,direction:()=>Zi,strings:()=>Xi,thanks_to:()=>Ji});var Ji="Taylan \xD6zg\xFCr Bildik",Yi="",Zi="ltr",Xi={placeholder:"Ara\u015Ft\u0131r",clear_search:"Temizle",load_more:"Daha fazla sonu\xE7",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] i\xE7in sonu\xE7 yok",many_results:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",one_result:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",alt_search:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Bunun yerine [DIFFERENT_TERM] i\xE7in sonu\xE7lar g\xF6steriliyor",search_suggestion:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Alternatif olarak a\u015Fa\u011F\u0131daki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] ara\u015Ft\u0131r\u0131l\u0131yor..."},Qi={thanks_to:Ji,comments:Yi,direction:Zi,strings:Xi};var nn={};y(nn,{comments:()=>$i,default:()=>na,direction:()=>ea,strings:()=>ta,thanks_to:()=>xi});var xi="Vladyslav Lyshenko ",$i="",ea="ltr",ta={placeholder:"\u041F\u043E\u0448\u0443\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0449\u0435",search_label:"\u041F\u043E\u0448\u0443\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0456\u043B\u044C\u0442\u0440\u0438",zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",alt_search:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0456\u0437 \u0442\u0430\u043A\u0438\u0445 \u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456\u0432",searching:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]"},na={thanks_to:xi,comments:$i,direction:ea,strings:ta};var sn={};y(sn,{comments:()=>ra,default:()=>aa,direction:()=>la,strings:()=>ia,thanks_to:()=>sa});var sa="Long Nhat Nguyen",ra="",la="ltr",ia={placeholder:"T\xECm ki\u1EBFm",clear_search:"X\xF3a",load_more:"Nhi\u1EC1u k\u1EBFt qu\u1EA3 h\u01A1n",search_label:"T\xECm ki\u1EBFm trong trang n\xE0y",filters_label:"B\u1ED9 l\u1ECDc",zero_results:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",many_results:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",one_result:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",alt_search:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Ki\u1EC3m th\u1ECB k\u1EBFt qu\u1EA3 thay th\u1EBF v\u1EDBi [DIFFERENT_TERM]",search_suggestion:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Th\u1EED m\u1ED9t trong c\xE1c t\xECm ki\u1EBFm:",searching:"\u0110ang t\xECm ki\u1EBFm cho [SEARCH_TERM]..."},aa={thanks_to:sa,comments:ra,direction:la,strings:ia};var rn={};y(rn,{comments:()=>ua,default:()=>fa,direction:()=>ca,strings:()=>_a,thanks_to:()=>oa});var oa="Amber Song",ua="",ca="ltr",_a={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},fa={thanks_to:oa,comments:ua,direction:ca,strings:_a};var ln={};y(ln,{comments:()=>ha,default:()=>ga,direction:()=>ma,strings:()=>pa,thanks_to:()=>da});var da="Amber Song",ha="",ma="ltr",pa={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F09\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u7D22",filters_label:"\u7BE9\u9078",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},ga={thanks_to:da,comments:ha,direction:ma,strings:pa};var an={};y(an,{comments:()=>Ra,default:()=>Ca,direction:()=>ba,strings:()=>Ta,thanks_to:()=>Ea});var Ea="Amber Song",Ra="",ba="ltr",Ta={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},Ca={thanks_to:Ea,comments:Ra,direction:ba,strings:Ta};var ka=[kt,St,yt,Mt,At,vt,wt,Ht,Ft,Nt,Ot,jt,zt,Ut,Dt,It,Pt,Lt,qt,Bt,Vt,Wt,Gt,Kt,Jt,Yt,Zt,Xt,Qt,xt,$t,en,tn,nn,sn,rn,ln,an],ss=ka,rs=["../../translations/af.json","../../translations/ar.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/en.json","../../translations/es.json","../../translations/fa.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/he.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/nl.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function ls(n,e,t){let s=n.slice();return s[51]=e[t],s}function is(n){let e,t,s;function r(i){n[37](i)}let l={show_empty_filters:n[5],open_filters:n[6],available_filters:n[18],translate:n[20],automatic_translations:n[19],translations:n[7]};return n[0]!==void 0&&(l.selected_filters=n[0]),e=new ns({props:l}),le.push(()=>Mn(e,"selected_filters",r)),{c(){rt(e.$$.fragment)},m(i,a){me(e,i,a),s=!0},p(i,a){let o={};a[0]&32&&(o.show_empty_filters=i[5]),a[0]&64&&(o.open_filters=i[6]),a[0]&262144&&(o.available_filters=i[18]),a[0]&524288&&(o.automatic_translations=i[19]),a[0]&128&&(o.translations=i[7]),!t&&a[0]&1&&(t=!0,o.selected_filters=i[0],Cn(()=>t=!1)),e.$set(o)},i(i){s||(U(e.$$.fragment,i),s=!0)},o(i){P(e.$$.fragment,i),s=!1},d(i){ue(e,i)}}}function as(n){let e,t,s,r,l=[Ma,ya],i=[];function a(o,f){return o[14]?0:1}return t=a(n,[-1,-1]),s=i[t]=l[t](n),{c(){e=C("div"),s.c(),g(e,"class","pagefind-ui__results-area svelte-e9gkc3")},m(o,f){S(o,e,f),i[t].m(e,null),r=!0},p(o,f){let u=t;t=a(o,f),t===u?i[t].p(o,f):(ae(),P(i[u],1,1,()=>{i[u]=null}),oe(),s=i[t],s?s.p(o,f):(s=i[t]=l[t](o),s.c()),U(s,1),s.m(e,null))},i(o){r||(U(s),r=!0)},o(o){P(s),r=!1},d(o){o&&k(e),i[t].d()}}}function ya(n){let e,t,s,r=[],l=new Map,i,a,o;function f(c,d){return c[13].results.length===0?wa:c[13].results.length===1?va:Aa}let u=f(n,[-1,-1]),m=u(n),p=n[13].results.slice(0,n[17]),h=c=>c[51].id;for(let c=0;cn[17]&&us(n);return{c(){e=C("p"),m.c(),t=A(),s=C("ol");for(let c=0;cc[17]?_?_.p(c,d):(_=us(c),_.c(),_.m(a.parentNode,a)):_&&(_.d(1),_=null)},i(c){if(!o){for(let d=0;d{o[p]=null}),oe(),r=o[s],r?r.p(e,m):(r=o[s]=a[s](e),r.c()),U(r,1),r.m(l.parentNode,l))},i(u){i||(U(r),i=!0)},o(u){P(r),i=!1},d(u){u&&k(t),o[s].d(u),u&&k(l)}}}function us(n){let e,t=n[20]("load_more",n[19],n[7])+"",s,r,l;return{c(){e=C("button"),s=w(t),g(e,"type","button"),g(e,"class","pagefind-ui__button svelte-e9gkc3")},m(i,a){S(i,e,a),b(e,s),r||(l=J(e,"click",n[22]),r=!0)},p(i,a){a[0]&524416&&t!==(t=i[20]("load_more",i[19],i[7])+"")&&N(s,t)},d(i){i&&k(e),r=!1,l()}}}function cs(n){let e,t=n[20]("searching",n[19],n[7]).replace(/\[SEARCH_TERM\]/,n[16])+"",s;return{c(){e=C("p"),s=w(t),g(e,"class","pagefind-ui__message svelte-e9gkc3")},m(r,l){S(r,e,l),b(e,s)},p(r,l){l[0]&589952&&t!==(t=r[20]("searching",r[19],r[7]).replace(/\[SEARCH_TERM\]/,r[16])+"")&&N(s,t)},d(r){r&&k(e)}}}function Na(n){let e,t,s,r,l,i,a=n[20]("clear_search",n[19],n[7])+"",o,f,u,m,p,h,_,c,d=n[12]&&is(n),T=n[15]&&as(n);return{c(){e=C("div"),t=C("form"),s=C("input"),l=A(),i=C("button"),o=w(a),f=A(),u=C("div"),d&&d.c(),m=A(),T&&T.c(),g(s,"class","pagefind-ui__search-input svelte-e9gkc3"),g(s,"type","text"),g(s,"placeholder",r=n[20]("placeholder",n[19],n[7])),g(s,"autocapitalize","none"),g(s,"enterkeyhint","search"),s.autofocus=n[8],g(i,"class","pagefind-ui__search-clear svelte-e9gkc3"),B(i,"pagefind-ui__suppressed",!n[9]),g(u,"class","pagefind-ui__drawer svelte-e9gkc3"),B(u,"pagefind-ui__hidden",!n[15]),g(t,"class","pagefind-ui__form svelte-e9gkc3"),g(t,"role","search"),g(t,"aria-label",p=n[20]("search_label",n[19],n[7])),g(t,"action","javascript:void(0);"),g(e,"class","pagefind-ui svelte-e9gkc3"),B(e,"pagefind-ui--reset",n[1])},m(R,M){S(R,e,M),b(e,t),b(t,s),pt(s,n[9]),n[34](s),b(t,l),b(t,i),b(i,o),n[35](i),b(t,f),b(t,u),d&&d.m(u,null),b(u,m),T&&T.m(u,null),h=!0,n[8]&&s.focus(),_||(c=[J(s,"focus",n[21]),J(s,"keydown",n[32]),J(s,"input",n[33]),J(i,"click",n[36]),J(t,"submit",Oa)],_=!0)},p(R,M){(!h||M[0]&524416&&r!==(r=R[20]("placeholder",R[19],R[7])))&&g(s,"placeholder",r),(!h||M[0]&256)&&(s.autofocus=R[8]),M[0]&512&&s.value!==R[9]&&pt(s,R[9]),(!h||M[0]&524416)&&a!==(a=R[20]("clear_search",R[19],R[7])+"")&&N(o,a),(!h||M[0]&512)&&B(i,"pagefind-ui__suppressed",!R[9]),R[12]?d?(d.p(R,M),M[0]&4096&&U(d,1)):(d=is(R),d.c(),U(d,1),d.m(u,m)):d&&(ae(),P(d,1,1,()=>{d=null}),oe()),R[15]?T?(T.p(R,M),M[0]&32768&&U(T,1)):(T=as(R),T.c(),U(T,1),T.m(u,null)):T&&(ae(),P(T,1,1,()=>{T=null}),oe()),(!h||M[0]&32768)&&B(u,"pagefind-ui__hidden",!R[15]),(!h||M[0]&524416&&p!==(p=R[20]("search_label",R[19],R[7])))&&g(t,"aria-label",p),(!h||M[0]&2)&&B(e,"pagefind-ui--reset",R[1])},i(R){h||(U(d),U(T),h=!0)},o(R){P(d),P(T),h=!1},d(R){R&&k(e),n[34](null),n[35](null),d&&d.d(),T&&T.d(),_=!1,G(c)}}}var Oa=n=>n.preventDefault();function ja(n,e,t){let s={},r=rs.map(E=>E.match(/([^\/]+)\.json$/)[1]);for(let E=0;Ej[E]??F[E]??"";gt(()=>{let E=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",F=lt(E.toLocaleLowerCase());t(19,hn=s[`${F.language}-${F.script}-${F.region}`]||s[`${F.language}-${F.region}`]||s[`${F.language}`]||s.en)}),Et(()=>{H?.destroy?.(),H=null});let mn=async()=>{if(!at&&(t(12,at=!0),!H)){let E;try{E=await import(`${l}pagefind.js`)}catch(j){console.error(j),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindUI"].join(` -`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}u||t(24,u=f?12:30);let F={...d||{},excerptLength:u};await E.options(F);for(let j of T){if(!j.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let L=j.bundlePath;delete j.bundlePath,await E.mergeIndex(L,j)}H=E,hs()}},hs=async()=>{H&&(dn=await H.filters(),(!ce||!Object.keys(ce).length)&&t(18,ce=dn))},ms=E=>{let F={};return Object.entries(E).filter(([,j])=>j).forEach(([j])=>{let[L,te]=j.split(/:(.*)$/);F[L]=F[L]||[],F[L].push(te)}),F},_e,ps=async(E,F)=>{if(!E){t(15,ut=!1),_e&&clearTimeout(_e);return}let j=ms(F),L=()=>gs(E,j);c>0&&E?(_e&&clearTimeout(_e),_e=setTimeout(L,c),await pn(),H.preload(E,{filters:j})):L(),Es()},pn=async()=>{for(;!H;)mn(),await new Promise(E=>setTimeout(E,50))},gs=async(E,F)=>{t(16,fn=E||""),typeof p=="function"&&(E=p(E)),t(14,ot=!0),t(15,ut=!0),await pn();let j=++_n,L={filters:F};X&&typeof X=="object"&&(L.sort=X);let te=await H.search(E,L);_n===j&&(te.filters&&Object.keys(te.filters)?.length&&t(18,ce=te.filters),t(13,cn=te),t(14,ot=!1),t(17,ct=i))},Es=()=>{let E=W.offsetWidth;E!=fs&&t(10,O.style.paddingRight=`${E+2}px`,O)},Rs=E=>{E?.preventDefault(),t(17,ct+=i)},bs=E=>{E.key==="Escape"&&(t(9,v=""),O.blur()),E.key==="Enter"&&E.preventDefault()};function Ts(){v=this.value,t(9,v),t(23,R)}function Cs(E){le[E?"unshift":"push"](()=>{O=E,t(10,O)})}function ks(E){le[E?"unshift":"push"](()=>{W=E,t(11,W)})}let Ss=()=>{t(9,v=""),O.blur()};function ys(E){V=E,t(0,V)}return n.$$set=E=>{"base_path"in E&&t(25,l=E.base_path),"page_size"in E&&t(26,i=E.page_size),"reset_styles"in E&&t(1,a=E.reset_styles),"show_images"in E&&t(2,o=E.show_images),"show_sub_results"in E&&t(3,f=E.show_sub_results),"excerpt_length"in E&&t(24,u=E.excerpt_length),"process_result"in E&&t(4,m=E.process_result),"process_term"in E&&t(27,p=E.process_term),"show_empty_filters"in E&&t(5,h=E.show_empty_filters),"open_filters"in E&&t(6,_=E.open_filters),"debounce_timeout_ms"in E&&t(28,c=E.debounce_timeout_ms),"pagefind_options"in E&&t(29,d=E.pagefind_options),"merge_index"in E&&t(30,T=E.merge_index),"trigger_search_term"in E&&t(23,R=E.trigger_search_term),"translations"in E&&t(7,M=E.translations),"autofocus"in E&&t(8,D=E.autofocus),"sort"in E&&t(31,X=E.sort),"selected_filters"in E&&t(0,V=E.selected_filters)},n.$$.update=()=>{if(n.$$.dirty[0]&8388608)e:R&&(t(9,v=R),t(23,R=""));if(n.$$.dirty[0]&513)e:ps(v,V)},[V,a,o,f,m,h,_,M,D,v,O,W,at,cn,ot,ut,fn,ct,ce,hn,ds,mn,Rs,R,u,l,i,p,c,d,T,X,bs,Ts,Cs,ks,Ss,ys]}var on=class extends q{constructor(e){super(),Y(this,e,ja,Na,K,{base_path:25,page_size:26,reset_styles:1,show_images:2,show_sub_results:3,excerpt_length:24,process_result:4,process_term:27,show_empty_filters:5,open_filters:6,debounce_timeout_ms:28,pagefind_options:29,merge_index:30,trigger_search_term:23,translations:7,autofocus:8,sort:31,selected_filters:0},null,[-1,-1])}},_s=on;var un;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(un=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1])}catch{un="/pagefind/"}var it=class{constructor(e){this._pfs=null;let t=e.element??"[data-pagefind-ui]",s=e.bundlePath??un,r=e.pageSize??5,l=e.resetStyles??!0,i=e.showImages??!0,a=e.showSubResults??!1,o=e.excerptLength??0,f=e.processResult??null,u=e.processTerm??null,m=e.showEmptyFilters??!0,p=e.openFilters??[],h=e.debounceTimeoutMs??300,_=e.mergeIndex??[],c=e.translations??[],d=e.autofocus??!1,T=e.sort??null;delete e.element,delete e.bundlePath,delete e.pageSize,delete e.resetStyles,delete e.showImages,delete e.showSubResults,delete e.excerptLength,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.openFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,delete e.autofocus,delete e.sort;let R=t instanceof HTMLElement?t:document.querySelector(t);R?this._pfs=new _s({target:R,props:{base_path:s,page_size:r,reset_styles:l,show_images:i,show_sub_results:a,excerpt_length:o,process_result:f,process_term:u,show_empty_filters:m,open_filters:p,debounce_timeout_ms:h,merge_index:_,translations:c,autofocus:d,sort:T,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${t}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}triggerFilters(e){let t={};for(let[s,r]of Object.entries(e))if(Array.isArray(r))for(let l of r)t[`${s}:${l}`]=!0;else t[`${s}:${r}`]=!0;this._pfs.$$set({selected_filters:t})}destroy(){this._pfs.$destroy()}};window.PagefindUI=it;})(); diff --git a/pagefind/pagefind.en-us_48573bd275bba.pf_meta b/pagefind/pagefind.en-us_48573bd275bba.pf_meta deleted file mode 100644 index 2562ed7f7c90d54d6bcaf39bd1a5d04fd52997e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmb2|=3oE;rvHrg3lrjQ<)-H8mKMjG7#pXhnWu?1 hHm4?~rsWqUmE=QZQY_3YOp}Zn8m>H4)3pbh1^~Ru9IgNW diff --git a/pagefind/pagefind.js b/pagefind/pagefind.js deleted file mode 100644 index 035a438665..0000000000 --- a/pagefind/pagefind.js +++ /dev/null @@ -1,9 +0,0 @@ -const pagefind_version="1.3.0";let wasm_bindgen;(function(){const __exports={};let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString()}let wasm=undefined;let cachedUint8Memory0=null;function getUint8Memory0(){if(cachedUint8Memory0===null||cachedUint8Memory0.byteLength===0){cachedUint8Memory0=new Uint8Array(wasm.memory.buffer)}return cachedUint8Memory0}let WASM_VECTOR_LEN=0;function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1,1)>>>0;getUint8Memory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr}__exports.init_pagefind=function(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret>>>0};const cachedTextEncoder=(typeof TextEncoder!=='undefined'?new TextEncoder('utf-8'):{encode:()=>{throw Error('TextEncoder not available')}});const encodeString=(typeof cachedTextEncoder.encodeInto==='function'?function(arg,view){return cachedTextEncoder.encodeInto(arg,view)}:function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length}});function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length,1)>>>0;getUint8Memory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr}let len=arg.length;let ptr=malloc(len,1)>>>0;const mem=getUint8Memory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=realloc(ptr,len,len=offset+arg.length*3,1)>>>0;const view=getUint8Memory0().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written;ptr=realloc(ptr,len,offset,1)>>>0}WASM_VECTOR_LEN=offset;return ptr}__exports.set_ranking_weights=function(ptr,weights){const ptr0=passStringToWasm0(weights,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.set_ranking_weights(ptr,ptr0,len0);return ret>>>0};__exports.load_index_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret>>>0};__exports.load_filter_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret>>>0};__exports.add_synthetic_filter=function(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret>>>0};let cachedInt32Memory0=null;function getInt32Memory0(){if(cachedInt32Memory0===null||cachedInt32Memory0.byteLength===0){cachedInt32Memory0=new Int32Array(wasm.memory.buffer)}return cachedInt32Memory0}const cachedTextDecoder=(typeof TextDecoder!=='undefined'?new TextDecoder('utf-8',{ignoreBOM:true,fatal:true}):{decode:()=>{throw Error('TextDecoder not available')}});if(typeof TextDecoder!=='undefined'){cachedTextDecoder.decode()};function getStringFromWasm0(ptr,len){ptr=ptr>>>0;return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr,ptr+len))}__exports.request_indexes=function(ptr,query){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.request_filter_indexes=function(ptr,filters){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_filter_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.request_all_filter_indexes=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.request_all_filter_indexes(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.filters=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.filters(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.search=function(ptr,query,filter,sort,exact){let deferred4_0;let deferred4_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;wasm.search(retptr,ptr,ptr0,len0,ptr1,len1,ptr2,len2,exact);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred4_0=r0;deferred4_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred4_0,deferred4_1,1)}};async function __wbg_load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports)}catch(e){if(module.headers.get('Content-Type')!='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e)}else{throw e}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports)}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module}}else{return instance}}}function __wbg_get_imports(){const imports={};imports.wbg={};return imports}function __wbg_init_memory(imports,maybe_memory){}function __wbg_finalize_init(instance,module){wasm=instance.exports;__wbg_init.__wbindgen_wasm_module=module;cachedInt32Memory0=null;cachedUint8Memory0=null;return wasm}function initSync(module){if(wasm!==undefined)return wasm;const imports=__wbg_get_imports();__wbg_init_memory(imports);if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module)}const instance=new WebAssembly.Instance(module,imports);return __wbg_finalize_init(instance,module)}async function __wbg_init(input){if(wasm!==undefined)return wasm;if(typeof input==='undefined'&&typeof script_src!=='undefined'){input=script_src.replace(/\.js$/,'_bg.wasm')}const imports=__wbg_get_imports();if(typeof input==='string'||(typeof Request==='function'&&input instanceof Request)||(typeof URL==='function'&&input instanceof URL)){input=fetch(input)}__wbg_init_memory(imports);const{instance,module}=await __wbg_load(await input,imports);return __wbg_finalize_init(instance,module)}wasm_bindgen=Object.assign(__wbg_init,{initSync},__exports)})();var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i2=0;i2<31;++i2){b[i2]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i2=0;var l=new u16(mb);for(;i2>>rvb]=sv}}}}else{co=new u16(s);for(i2=0;i2>>15-cd[i2]}}}return co};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i2=1;i2m)m=a[i2]}return m};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)};var shft=function(p){return(p+7)/8|0};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i2=0;i2>>4;if(s<16){ldt[i2++]=s}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i2-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i2++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){if(noSt)err(0);break}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i2=sym-257,b=fleb[i2];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2)};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)))}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1}catch(e){}var gz_default=gunzipSync;var calculate_excerpt_region=(word_positions,excerpt_length)=>{if(word_positions.length===0){return 0}let words=[];for(const word of word_positions){words[word.location]=words[word.location]||0;words[word.location]+=word.balanced_score}if(words.length<=excerpt_length){return 0}let densest=words.slice(0,excerpt_length).reduce((partialSum,a)=>partialSum+a,0);let working_sum=densest;let densest_at=[0];for(let i2=0;i2densest){densest=working_sum;densest_at=[i2]}else if(working_sum===densest&&densest_at[densest_at.length-1]===i2-1){densest_at.push(i2)}}let midpoint=densest_at[Math.floor(densest_at.length/2)];return midpoint};var build_excerpt=(content,start,length,locations,not_before,not_from)=>{let is_zws_delimited=content.includes("\u200B");let fragment_words=[];if(is_zws_delimited){fragment_words=content.split("\u200B")}else{fragment_words=content.split(/[\r\n\s]+/g)}for(let word of locations){if(fragment_words[word]?.startsWith(``)){continue}fragment_words[word]=`${fragment_words[word]}`}let endcap=not_from??fragment_words.length;let startcap=not_before??0;if(endcap-startcapendcap){start=endcap-length}if(start{const anchors=fragment.anchors.filter((a)=>/h\d/i.test(a.element)&&a.text?.length&&/\S/.test(a.text)).sort((a,b)=>a.location-b.location);const results=[];let current_anchor_position=0;let current_anchor={title:fragment.meta["title"],url:fragment.url,weighted_locations:[],locations:[],excerpt:""};const add_result=(end_range)=>{if(current_anchor.locations.length){const relative_weighted_locations=current_anchor.weighted_locations.map((l)=>{return{weight:l.weight,balanced_score:l.balanced_score,location:l.location-current_anchor_position}});const excerpt_start=calculate_excerpt_region(relative_weighted_locations,desired_excerpt_length)+current_anchor_position;const excerpt_length=end_range?Math.min(end_range-excerpt_start,desired_excerpt_length):desired_excerpt_length;current_anchor.excerpt=build_excerpt(fragment.raw_content??"",excerpt_start,excerpt_length,current_anchor.locations,current_anchor_position,end_range);results.push(current_anchor)}};for(let word of fragment.weighted_locations){if(!anchors.length||word.location=anchors[0].location){next_anchor=anchors.shift()}let anchored_url=fragment.url;try{const url_is_fq=/^((https?:)?\/\/)/.test(anchored_url);if(url_is_fq){let fq_url=new URL(anchored_url);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString()}else{if(!/^\//.test(anchored_url)){anchored_url=`/${anchored_url}`}let fq_url=new URL(`https://example.com${anchored_url}`);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString().replace(/^https:\/\/example.com/,"")}}catch(e){console.error(`Pagefind: Couldn't process ${anchored_url} for a search result`)}current_anchor_position=next_anchor.location;current_anchor={title:next_anchor.text,url:anchored_url,anchor:next_anchor,weighted_locations:[word],locations:[word.location],excerpt:""}}}add_result(anchors[0]?.location);return results};var asyncSleep=async(ms=100)=>{return new Promise((r)=>setTimeout(r,ms))};var PagefindInstance=class{constructor(opts={}){this.version=pagefind_version;this.backend=wasm_bindgen;this.decoder=new TextDecoder("utf-8");this.wasm=null;this.basePath=opts.basePath||"/pagefind/";this.primary=opts.primary||false;if(this.primary&&!opts.basePath){this.initPrimary()}if(/[^\/]$/.test(this.basePath)){this.basePath=`${this.basePath}/`}if(window?.location?.origin&&this.basePath.startsWith(window.location.origin)){this.basePath=this.basePath.replace(window.location.origin,"")}this.baseUrl=opts.baseUrl||this.defaultBaseUrl();if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`}this.indexWeight=opts.indexWeight??1;this.excerptLength=opts.excerptLength??30;this.mergeFilter=opts.mergeFilter??{};this.ranking=opts.ranking;this.highlightParam=opts.highlightParam??null;this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.searchMeta=null;this.languages=null}initPrimary(){let derivedBasePath=import.meta.url.match(/^(.*\/)pagefind.js.*$/)?.[1];if(derivedBasePath){this.basePath=derivedBasePath}else{console.warn(["Pagefind couldn't determine the base of the bundle from the import path. Falling back to the default.","Set a basePath option when initialising Pagefind to ignore this message."].join("\n"))}}defaultBaseUrl(){let default_base=this.basePath.match(/^(.*\/)_?pagefind/)?.[1];return default_base||"/"}async options(options2){const opts=["basePath","baseUrl","indexWeight","excerptLength","mergeFilter","highlightParam","ranking"];for(const[k,v]of Object.entries(options2)){if(k==="mergeFilter"){let filters2=this.stringifyFilters(v);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}else if(k==="ranking"){await this.set_ranking(options2.ranking)}else if(opts.includes(k)){if(k==="basePath"&&typeof v==="string")this.basePath=v;if(k==="baseUrl"&&typeof v==="string")this.baseUrl=v;if(k==="indexWeight"&&typeof v==="number")this.indexWeight=v;if(k==="excerptLength"&&typeof v==="number")this.excerptLength=v;if(k==="mergeFilter"&&typeof v==="object")this.mergeFilter=v;if(k==="highlightParam"&&typeof v==="string")this.highlightParam=v}else{console.warn(`Unknown Pagefind option ${k}. Allowed options: [${opts.join(", ")}]`)}}}decompress(data,file="unknown file"){if(this.decoder.decode(data.slice(0,12))==="pagefind_dcd"){return data.slice(12)}data=gz_default(data);if(this.decoder.decode(data.slice(0,12))!=="pagefind_dcd"){console.error(`Decompressing ${file} appears to have failed: Missing signature`);return data}return data.slice(12)}async set_ranking(ranking){if(!ranking)return;let rankingWeights={term_similarity:ranking.termSimilarity??null,page_length:ranking.pageLength??null,term_saturation:ranking.termSaturation??null,term_frequency:ranking.termFrequency??null};let ptr=await this.getPtr();this.raw_ptr=this.backend.set_ranking_weights(ptr,JSON.stringify(rankingWeights))}async init(language,opts){await this.loadEntry();let index=this.findIndex(language);let lang_wasm=index.wasm?index.wasm:"unknown";let resources=[this.loadMeta(index.hash)];if(opts.load_wasm===true){resources.push(this.loadWasm(lang_wasm))}await Promise.all(resources);this.raw_ptr=this.backend.init_pagefind(new Uint8Array(this.searchMeta));if(Object.keys(this.mergeFilter)?.length){let filters2=this.stringifyFilters(this.mergeFilter);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}if(this.ranking){await this.set_ranking(this.ranking)}}async loadEntry(){try{let entry_response=await fetch(`${this.basePath}pagefind-entry.json?ts=${Date.now()}`);let entry_json=await entry_response.json();this.languages=entry_json.languages;if(entry_json.version!==this.version){if(this.primary){console.warn(["Pagefind JS version doesn't match the version in your search index.",`Pagefind JS: ${this.version}. Pagefind index: ${entry_json.version}`,"If you upgraded Pagefind recently, you likely have a cached pagefind.js file.","If you encounter any search errors, try clearing your cache."].join("\n"))}else{console.warn(["Merging a Pagefind index from a different version than the main Pagefind instance.",`Main Pagefind JS: ${this.version}. Merged index (${this.basePath}): ${entry_json.version}`,"If you encounter any search errors, make sure that both sites are running the same version of Pagefind."].join("\n"))}}}catch(e){console.error(`Failed to load Pagefind metadata: -${e?.toString()}`);throw new Error("Failed to load Pagefind metadata")}}findIndex(language){if(this.languages){let index=this.languages[language];if(index)return index;index=this.languages[language.split("-")[0]];if(index)return index;let topLang=Object.values(this.languages).sort((a,b)=>b.page_count-a.page_count);if(topLang[0])return topLang[0]}throw new Error("Pagefind Error: No language indexes found.")}async loadMeta(index){try{let compressed_resp=await fetch(`${this.basePath}pagefind.${index}.pf_meta`);let compressed_meta=await compressed_resp.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata")}catch(e){console.error(`Failed to load the meta index: -${e?.toString()}`)}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await fetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression")}this.wasm=await this.backend(final_wasm)}catch(e){console.error(`Failed to load the Pagefind WASM: -${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM: -${e?.toString()}`)}}async _loadGenericChunk(url,method){try{let compressed_resp=await fetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk)}catch(e){console.error(`Failed to load the index chunk ${url}: -${e?.toString()}`)}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk")}return await this.loaded_chunks[hash]}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk")}return await this.loaded_filters[hash]}async _loadFragment(hash){let compressed_resp=await fetch(`${this.basePath}fragment/${hash}.pf_fragment`);let compressed_fragment=await compressed_resp.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment))}async loadFragment(hash,weighted_locations=[],search_term){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash)}let fragment=await this.loaded_fragments[hash];fragment.weighted_locations=weighted_locations;fragment.locations=weighted_locations.map((l)=>l.location);if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,">");fragment.content=fragment.content.replace(/\u200B/g,"")}if(!fragment.raw_url){fragment.raw_url=fragment.url}fragment.url=this.processedUrl(fragment.raw_url,search_term);const excerpt_start=calculate_excerpt_region(weighted_locations,this.excerptLength);fragment.excerpt=build_excerpt(fragment.raw_content,excerpt_start,this.excerptLength,fragment.locations);fragment.sub_results=calculate_sub_results(fragment,this.excerptLength);return fragment}fullUrl(raw){if(/^(https?:)?\/\//.test(raw)){return raw}return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/")}processedUrl(url,search_term){const normalized=this.fullUrl(url);if(this.highlightParam===null){return normalized}let individual_terms=search_term.split(/\s+/);try{let processed=new URL(normalized);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString()}catch(e){try{let processed=new URL(`https://example.com${normalized}`);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString().replace(/^https:\/\/example\.com/,"")}catch(e2){return normalized}}}async getPtr(){while(this.raw_ptr===null){await asyncSleep(50)}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)")}return this.raw_ptr}parseFilters(str){let output={};if(!str)return output;for(const block of str.split("__PF_FILTER_DELIM__")){let[filter,values]=block.split(/:(.*)$/);output[filter]={};if(values){for(const valueBlock of values.split("__PF_VALUE_DELIM__")){if(valueBlock){let extract=valueBlock.match(/^(.*):(\d+)$/);if(extract){let[,value,count]=extract;output[filter][value]=parseInt(count)??count}}}}}return output}stringifyFilters(obj={}){return JSON.stringify(obj)}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`)}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`)}return`${sort}:${direction}`}return``}async filters(){let ptr=await this.getPtr();let filters2=this.backend.request_all_filter_indexes(ptr);let filter_chunks=filters2.split(" ").filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks]);ptr=await this.getPtr();let results=this.backend.filters(ptr);return this.parseFilters(results)}async preload(term,options2={}){await this.search(term,{...options2,preload:true})}async search(term,options2={}){options2={verbose:false,filters:{},sort:{},...options2};const log=(str)=>{if(options2.verbose)console.log(str)};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`)}term=term.toLowerCase().trim().replace(/[\.`~!@#\$%\^&\*\(\)\{\}\[\]\\\|:;'",<>\/\?\-]/g,"").replace(/\s{2,}/g," ").trim();log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}}}let sort_list=this.stringifySorts(options2.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options2.filters);log(`Stringified filters to ${filter_list}`);let index_resp=this.backend.request_indexes(ptr,term);let filter_resp=this.backend.request_filter_indexes(ptr,filter_list);let chunks=index_resp.split(" ").filter((v)=>v).map((chunk)=>this.loadChunk(chunk));let filter_chunks=filter_resp.split(" ").filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options2.preload){log(`Preload \u2014 bailing out of search operation now.`);return null}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,filter_list,sort_list,exact_search);log(`Got the raw search result: ${result}`);let[unfilteredResultCount,all_results,filters2,totalFilters]=result.split(/:([^:]*):(.*)__PF_UNFILTERED_DELIM__(.*)$/);let filterObj=this.parseFilters(filters2);let totalFilterObj=this.parseFilters(totalFilters);log(`Remaining filters: ${JSON.stringify(result)}`);let results=all_results.length?all_results.split(" "):[];let resultsInterface=results.map((result2)=>{let[hash,score,all_locations]=result2.split("@");log(`Processing result: - hash:${hash} - score:${score} - locations:${all_locations}`);let weighted_locations=all_locations.length?all_locations.split(",").map((l)=>{let[weight,balanced_score,location]=l.split(">");return{weight:parseInt(weight)/24,balanced_score:parseFloat(balanced_score),location:parseInt(location)}}):[];let locations=weighted_locations.map((l)=>l.location);return{id:hash,score:parseFloat(score)*this.indexWeight,words:locations,data:async()=>await this.loadFragment(hash,weighted_locations,term)}});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? "" : "s"} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);return{results:resultsInterface,unfilteredResultCount:parseInt(unfilteredResultCount),filters:filterObj,totalFilters:totalFilterObj,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}}}};var Pagefind=class{constructor(options2={}){this.backend=wasm_bindgen;this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({...options2,primary:true});this.instances=[this.primary];this.init(options2?.language)}async options(options2){await this.primary.options(options2)}async init(overrideLanguage){if(document?.querySelector){const langCode=document.querySelector("html")?.getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase()}await this.primary.init(overrideLanguage?overrideLanguage:this.primaryLanguage,{load_wasm:true})}async mergeIndex(indexPath,options2={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return}let newInstance=new PagefindInstance({primary:false,basePath:indexPath});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50)}await newInstance.init(options2.language||this.primaryLanguage,{load_wasm:false});delete options2["language"];await newInstance.options(options2)}mergeFilters(filters2){const merged={};for(const searchFilter of filters2){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count}}}}return merged}async filters(){let filters2=await Promise.all(this.instances.map((i2)=>i2.filters()));return this.mergeFilters(filters2)}async preload(term,options2={}){await Promise.all(this.instances.map((i2)=>i2.preload(term,options2)))}async debouncedSearch(term,options2,debounceTimeoutMs){const thisSearchID=++this.searchID;this.preload(term,options2);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null}const searchResult=await this.search(term,options2);if(thisSearchID!==this.searchID){return null}return searchResult}async search(term,options2={}){let search2=await Promise.all(this.instances.map((i2)=>i2.search(term,options2)));const filters2=this.mergeFilters(search2.map((s)=>s.filters));const totalFilters=this.mergeFilters(search2.map((s)=>s.totalFilters));const results=search2.map((s)=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search2.map((s)=>s.timings);const unfilteredResultCount=search2.reduce((sum,s)=>sum+s.unfilteredResultCount,0);return{results,unfilteredResultCount,filters:filters2,totalFilters,timings}}};var pagefind=void 0;var initial_options=void 0;var init_pagefind=()=>{if(!pagefind){pagefind=new Pagefind(initial_options??{})}};var options=async(new_options)=>{if(pagefind){await pagefind.options(new_options)}else{initial_options=new_options}};var init=async()=>{init_pagefind()};var destroy=async()=>{pagefind=void 0;initial_options=void 0};var mergeIndex=async(indexPath,options2)=>{init_pagefind();return await pagefind.mergeIndex(indexPath,options2)};var search=async(term,options2)=>{init_pagefind();return await pagefind.search(term,options2)};var debouncedSearch=async(term,options2,debounceTimeoutMs=300)=>{init_pagefind();return await pagefind.debouncedSearch(term,options2,debounceTimeoutMs)};var preload=async(term,options2)=>{init_pagefind();return await pagefind.preload(term,options2)};var filters=async()=>{init_pagefind();return await pagefind.filters()};export{debouncedSearch,destroy,filters,init,mergeIndex,options,preload,search} \ No newline at end of file diff --git a/pagefind/wasm.en-us.pagefind b/pagefind/wasm.en-us.pagefind deleted file mode 100644 index 6a6c03e38c0c83ae461923e29005f11b971f620f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70873 zcmV(wKVqaosE@f^mF)lMMFfMmtb8P_3T3>8j zS6V;+?!UP+_SkXS#7;Wr-t-|wfVvL^3R2V?Dd}3Fqz`>ULQZJhHsdy}9dG|Y;xQt- zTWKRyP$ewX2O|O-p&SgB$DW&g_Qc8KGsmAfE{>ggQ3@gCKgsN<>U6|W-J!n{ACR)c zG#;ko+wmTB9Kmf}y5wCt8g@K`5J!_v`H!YvS`tSiPxGW__^FoYucWc6Q~o`3RGz_~ zs5{(GwM3I($t7NaMt7EY?IkzmlHbZ1Kj#@R&_wDC{_5W{=ZuWPC15R8tCREu#V z^;jIEQEQiEvJA7ZC}yIIzGl28iY5TOM?=EHpIL}s-4(_ zilP8>DOycQprw^eL?~lk9p~YB>q^%R4~t}=YqgrzSPa8;3w)57=4pl0I*QO8$4bjk zfy)5wkXOW%Mj0Jpq-K6iB2YTyd6o7LZX+0_FoAqoKK57uJjVcfM;6P=>mrRVsnPJo z*%x10cwLFciIXQ5XI}PZBR*2wPR%aPEF3#IcjDx8Gq28`c<%YdQ{n^FeBq^I$7jGY z``XMi&wu0OocL=s#%<4@cwupN!8d-WCXO9HK6C2zlZ(&KE}nSC_lmz)qYJb1-vV(F)763$wH0rcUOi zC}jF`-&VKuzv{ozzj9vxh5jS`mzth`sNd5U^g4gOtN%>DsejWfo8K_E^j-B|`j-9! z9sI8PP+wOkzG=R%Z|hI>57a;FZ<#ClQ~7Hb<#)`7`d`$u-!^ZUkM(Ez2YN;SgZwvL z`0D0jQ>zlK0&Vt< z?^yYT`F?d?`muR+?0bsG=H0Oui0z{68@*@0x}yB(J=M{-HILrY z9sNGBT~*c5#pjyHw@Xs)Q=e(~JQvvDqRkF;PQQNUz@Pu#<=bZI!1C{ZuzE?IrWtd2 zIok&0f~6b;nx?J~`hU0lgQmfDlpU;|Z!c4l=vrt1JY|YBOO5}+R@o4AU+j(Oj zq%8~6&Vds3r8We`-6M9pO{Q(bZl7L2KXH!OblL`XWO^a1fe{OY7|rW6ZB(ds9zD?z zX+21b?_6IO#jfH49?kz$A}!vbhTX;WZo_TIarW=ZhW9^0!@lC|jk4h^HT-Px?nl1C zj+zcFvzVvueC=GiBLyDi)NMVrHFVLAQyWa<d}_V@%dAm=g%L zvltWGn6U@)=Yl-4vBd}2%i@tEWG@(zN%c4Z3Mq8ZaGJK^_TwOwPRvXNPtYDPK0Mfv zb(N+?2bvaPM{r0L2e@DLlW3^9SLp9&~ZyNtW5Upq)L0=UUj#T6kWI+S!<2 z<^g)Hh1m{zUW>Awu%ZAE23g8}vER$tF?MIB>+eeMW;XF|n5|yTPXN87O~sf`W;Jw2 z7#CSg8CgcWZmeQTw4reyaCsE)2Km69>!!5 z!UcJY3ZTXTYI=Y|xxNyh@z#LG_Xnuy12n1t8rfal6{0Snkpna;0Uhmnds{EeLRKfw zwu3&vC7@_5;hZ+$`Oq*tBf>M<0#B0#glAB}GjMnYJv?FB_lKvkW-B~R7f*8^cm|u` zX@K0+P&~~>JOhs>JT~wQ>;v>+j{!VuL+rlHZpwTnvL&YG30h(cOao-8!1UfmkGX&B zjNT>c<~|I6v}^dlRWhz=F?I;oErom(ZI8BpULe2p8A}6ijWVCCgB3%9d!&^J+nWJz z27ou|hI@p|Wn+Jj7{}W<2G;2wp&_NZOFQe35gtxHbtj)X$!Gh$?hzyY9x(|SbVZcd zg!-DjdqmAnLNt)cB*`Zs&YEpb+r-v}$Y*<>eCkd zIe(pkdfkIl@8$fZytJ(|P7l~ReR|T_I@?eBvVHiOWOF}b?8Mh|c@Qm>^-s|)on9J9 zr@&n!5g2sF2OHreRI`_nrIj=`?Y{+tU+oqE-P|M(+oY$yvFDz*fPi#R^2M1`6XP#Z zFc>Qbfd%X7Hm8uc;Q|^Z&Llh}TX-~(^fTs}1o*~@J>J6mK%>-jBd#ZdnRHO4iZT4Z zMwiduroQ?;bM7sZ$+&WXnRIu|kj$@_K+^p(%_Dz%X^>hrDk3(0Nw*oit87fVyFHr= z8zE>DVQduf@x7-2%D8h@<1}h~Yv_KY`^t|obWoh} z5;O9D<2}sA3A1s+Y@F+6xD8Zp1T+g>ag;?46WNq(iXfwH6rDpzr$QPJS8S1y5>df}W_9JA>kqtdu(g3TA84J+CS& zFJkOw<<9VOHcFdz<<0-~4 z=Xo2~VmFmbLIMh|??PMiq^KR?>E40@#&p%(iw+kOcvIvQIWmN*!$nf8hy1TJ^avQk zY+HVjuuU5YE$0mpDcBF4jYq`9S`AAMZ3qh^G{1E=2hMMOdQ&g^3JMz^$;CABY*jc+IW0gdC;8+7!3RiOKnfaJhl(F6ZajPg<80ufp<+p0#f0DJTfFva#(g9-o0FhNBfPUC!yt@vs0*dAHTH9LoZp>}olG1uG zdY!(No!KxD*uBYlwu1^1yapy=6!?Tt?i9UvzbJF^Hep%X4tu5T#Fw_meQ6twNj>)E zZOW7qcWAOCsAm>AXX^6Oh%>?l@28zl3?`?PW12E+q-?}kSR>4EBH$$r60o@#6v@tT`xR()c zUjJr`?`FhqXMF#qjF{@@(LkO?<&i>>KM0-7X*YtrAJ>m7@tqVJIe;1xBFy-BDB$qcIa{hs|qKqtivAb-7o+|-vrtC|y2Ph+CbsVP) zL?teVuH?pf_KvAAufU;mqv_J{2`^g-TkE|nyA0p zv{C1=ff3UC>25(J?JL@icn$W>t>V?1Y~x&u2;l(8vDLbcEq0fpvC^?ITZ{wXo{bwe z`L>YF+m20B#N>;2zi%7i1T0Vcig#)0XmBzL8nj4Q7TI_aN!RY!`I&GU3rKhEWmqVYP;)NLM9Sh) z#sn#2yb^(Ul*#uy-0bqajet<*z znw$VO-Rf#c02@Ml3xMMx0Q(Xyf}Y*c4{+!JHYB_a0LLC+9A_l0M9|PBcHu^VC;Pu! zsRC@a1USw@&VwrehYsLy0ATpz`v!Ou4c-87>;T?cgTs3P>~0fss1}={S{!6aB|NLI0-V$d2=F&NA$HtDHv($ngz81%A=kdCQ~ zJ2(8rxLzNuZ&7XI?9K8H+~3!qL`EBn53Nd4;Q7I+QwQ~FkC#rrs4@U6;E(q;*oab+Z`O>vP)rK(eW4ORH)m&lc~PC@dklMZBbMp5h}V}E51e_My9 z7Bfx#ns%r5DuaFG^i^(yztNq;yE%e)x)(&bY0zW_l&G7O_$Rj;V})j)+yPa%NVn_%rIF$!AAqMyE)p>1$#AN-kdEYOvwr9Ks17vQ2%9^abuM zoGvFbT)9=AbFYeX!#SVD4YZDR5!>Q&Ev&y}gIDMGDK3Iy?gc7AlKQ*vqM()BqTo&_ zasnr$nlGOg+RBzW3fP_y7>nhlOXgQVGI zIWc)Qx~G#SL&@Amc6CofM-eXhXciNcrD11>rrNXtDDA;UK!TT^Y-on1#0EIiWDGU2 zi7qVe`y=E6v?nhAl9y7JG*hGk-l_nxm@6o}np>a+7U!SOBa*rBG6zFX=CUGlMcAl~ zGLO8>$zhf<58AA-*ik8UL6=9$g-WUCie>WJyjvIcbHR0F8s4hZ-k^X2L0z$Ds+qY} z5mpx%7?Kg#;*`#4HFic8Li^NCl$v%Or#v5iaKyn`TZ=8{Y3l8VU; z{tj<_Tyy1)iL!(B%M{Hc?7qvR)3*lnV;FyGT_y<=+| z4IW#2Wp%%Ns#~wYlCfY7<}EtvE%>seH+k@RD>cz);lDD9-UM7y|D+AaGPad-+ny!yqS zK^MzV>P&C~eSgo>MBI1H4E>zjxC1TAJYgM-Qhs7XEL|pO2l`7j!BCdMkYL)GJwdWHeu6yF+D)AW+AA90EAFyy1yAtHj$xyy=PaM67sXrP_0mh*eLlR@p8Q zalsQ8s%-BPvF3@jD%*QRyyJ;?s%-BQvF?fWD%&+8u6W`~mF*@GS3PmH%JvBn*FAB) z%Jvx%AA92CD%%|*ZhPW(mF-I+KKI1uRkpKa4PSWTiz?eW>RJB83#-cZ*8lK!y)jZ< z*Ztjl-^|X=%$s?;46xoM&VA4OVK>DxA1oGGuHrW;0c;Y}ibgB9ANUZd)+}`aAq!Qr ze;odFZs+^X|Lv-gC}9|L(oNdxM90_hvp{?KGQNQg6XEd&vRvOFV4(4^D6_NG4k` z*2cZ57G{C$myjVS7wAnZ8KYmxd2W7g4i;Hu0I+@n*#}J@INVez55?vmveaj7-{%4& z9-!j};3}P0K?>8Ngjt-4TZcB{P>Ne5Xuy&1Tx`YGDXOKONI#Z(A}up5aY?PXxGivT zG(tqJtRNNBEr|XeL71E%`d1JHbyiGvp*b{$1OmAvCEzB((I6&qoML8~=nh-SygW{D z%jF4Ox{KpOeLh|!d;IHK?0CI|_p>}q=P9+>CYS_+iLwF8$WLbWN~S^*nTk^mjEgzR zoR*Bn3x9*NqvVE4bCrCCLXxI;$WXjahC*a;hN3u#a)yGzL|B#RiUd;09}ls%uObNy zKEm z04F4gQd?9D2?$<`WEdlmC9<3uQHjWfN=PnPz{$zQ%gKeN)1a8-;^z}qzc+I$q?ucx zCvz)6E`^Gy9jDMLHQ6lEf_^qxo@k{Bb}A@O65A}X^f)1+hICRV6X5d1OY^-%#yy*` zAyMy|upvd{#E^Z&DMywV2XrW(;A?5iQBo07c#vuQFtj~ z_42!-?=h(zFKeyftX8E~o8`VLlg07d)fM(6v4hE>pR8%*U7rv1u#B1dsmDxblM$ZO zYMzW}Oh&YujBpmKWip~M8PVxvB%O-%%))dw6`@};6`_*U#(mOdUL{;vmto_6uP&SA zy6k{PrOqVL>zXUVpLfqfRQD_-1&EZ$4UT%1SMD?QSu>-jAE20I7+(Z48PjJ~T-~U* z$`<%eTi~U@1@f5NrD#{KXi|!H=Zd~WMN3`_t}pxn7S}ekq5$pMxIcNi71eA%*5vE- zXMZaSv8XntN8@q}YhMG{O5Kk|n=ySLsqV&hDZO5gO=XTUeRdFThFI$Y$G(GUcZ<|Q7qY*cFmC|wSMX*1zg>gMO zVV0D956)C89GAaRmK-~>;Dui?JeRY^g%*u3mlS^X37VmRQTtT^MorSh$Pt#Dz~_H$ z(5D}psECb_QryR|K_3V>1Mi|MBIxT{8UmA0V({l6<7D_BpwWvNw})|n4^tXQCflZ5vpjOYToX8lx_1Ki{3%~3`TE8Is-jDI>HdVfnuMEl9%0@j$qQk)@rmybk z>!-^6ciec**~87b=e~Ss{^;?Ax!HpgW>Eulm266hUErbFL{oQOEURqBBlV>>??ZM| zwt>~*brm;G?xhJ~qj}$a^Okq8nKr3rc>BG`IZS_R+yk^`&EdE~9aHUF|MTI0{p-7b zdTXYAFi%F*;H;+sn4GpXnj|%T^Ca0Kc|BX+JCzLWj!UiZZ$T3^GTXKd`UGi=(*SKt zHf)7I(J=7Uc6C!7>1uxmuR}1boMva#WMp`Whz6|M61grZ2$m5A3JM6O6SJSa*rJjx zylePNk>INPdj)&cNH=&5^$Mxvcc8jUtfA+5>nc;lrk0y`D6oymt3qR4)QMUQJnIkc76u|w&_n$fb~Eq zC8-&mp2UjqhLLd$ZyE7m;fF?$K`(NjL_N_RH!{i>^@KU9Qj}JX^Ak$k+L%73*qt^` z#{P0=s*+O-#o-1nDA7T`Y+I455XH$Ry8e zWDHY_3$VQ$_|o_pF_}j&0s@*Oz#%GeL9T>@a6ef!^Vd_k;d-S zBn!!cO3m-B%nqJs&MzvF|J!U2T@uhD0WA_RyrPQ_xAS!b3b%bZT;G_r2Qnm@Vm@U6);bDtYU(NK_U)EVEt_)mGB!(%#xNGA87IH zi#j%<6xVg6+5b@_=udYG$(AF7u~|J~Za7h2cVROP?_K_nw13WsZCzCH0P<57b8J3C z#H|&FOtahvy-+mW#|Z-{JbQ|_R78m&ixO8-h>j1)pmLz`Zxd*8zU>1=shs$@no0Ko zd4<{7+LplW%mucFXNm(!3;6zt1`rw?QA*_Q`a~RQ_kj?} z;q8LSr(CvT`@@fvb2l&Q7%Kp`6xP47^4k*MR3>qv9TLnN@mjm~*s)ELt`r~f;4G6% zD)m@@iF8N=M-CX$4|)8)(?)#17>arR5>ZqnDZxS$2<N(*tt4pDgalKRH`nTd9Dq2grec2-vnuLf9WEom1kRV~nGcWQlQxA< zIFZiJYi13D*Jc%lEv^U!f6$2_R*9!g(PC0#=Y@-oAir(hr>M)+RrG6 zjLK0*rN>mBV=AvZ3NHwSh?zd6_LSWD$@&&2Tug7zNG+o#QCo0!hx&^8S0EI{tEzJjPJ=x-6`MkD>P8PRS6zpPcK!YXUfsW7kCLN(V*zOWAUAMHvP{N&-5 zo1MBvv8Zn1ap7*0xIc-hD@P0Ds7V_O^q(?QIK&(jQ(CW8#rsZ@mb zG3FM#mOf30$U2a!ddX0W4IzEz?>hpKMk#G`q7M)Gf}~qP9aG8w)Yfo!Klp!DBDdmf za!SPgh=g^w5`ApvD}q+89ex#l(FxoM>>Zwx+#{`S)Jf#!6+~|CMdVntl~zT`QucQU z-`laEKBl+E#hlD{=J>eg^)Pb9>u_R(6L<8mm~{oIQT8Mv{6zY7qmfFG7Z^Ti0%Qog zC@FQQ=y3z^T6&K25?-zIlXp6=&STvbC)~KVwUOjmio>fU)k$R(@0`u;NO<<=Kg3D zfd|i}X}+XsW=^>kZ63~3ZaA;WaGq9@Fab(5ZsuIR%8Tm-s7EQw`3$dOaR&DPG|K+H zy05Car~dU_(<5~+?PFAqD&+7-8p@v)2&ozM+(nJRy1E@}A3ak>MPuwxrEi~G@RC6? z;f*OGj4Nso%kY+PYvA4P05r|pYn8I6wDAkYzEVG@ffvxC2``z=LAi>+k-T(1E9r;N z@RFB1C4A!3OJ41i^vNdeH#;Ro-f&A!p`^ei1qN~@XHepEiH}88FL}LF$MCo(f843V zGfyx1le7*MV84MbXE>AiJ)!3*CIh#lm{Lma+` z1x44;P}W{@==`$E2^O%t9m-fc!j<%;`?-8lTC`=4yB7YFdPHBVPimjO`;!WM*#vs_XXAI z9*BdfmZ;H@^Ig@G`E=xlWnU6NzU_g7iG;5J+H&LDFoEPByyPcdctSb+3fFu*g`5yK z!<8Jjsccvz=l+NqD1oI+{g@xuU97eT>b4)h^vyfUL!`ln4P>oHJr1cRU+M6f@)b_; zfx%@AIn-s<@vfO~m$k}=B0C;2FS8~m>Ez<8)LOs<`VJKf9ErF;-leamOC9-v!(u@A z&sz4lndwyc$_c(pR~#E)5sO4#_@j=)4H;7IklNhpZKcTu|5i>nL@N%v;-FhcJCX`d zs?GU<-;Rfz^4zw=6DO(45KE^gLJY}x>Bj@_ZdYYMZuL%}C|9aMtq$$|?bJIDS8I6w z@tN#7!1LdCo;kX_*LmjH^8B})>mHWKa{Wy9%yH#kI?o(c{`*X(RUA`pzLve`h;pdY z9>wM4A&H;j^oU8{BiP+L?){(tHGV@?$BxapnpZv z$!w)d_F_y$C+Qvm7kUKZ_Xva;x^kwAhg5N~aLm2kh2j^#}$Yiww(PqyM4o%a|$&<{O-iAu8^%exrBskiRtL4!kD{JTvq-pe?Z=cJ@4n{l&jE|3Z-Qg(jI1{ zg1@YS^g*w*do|dc{pHw9#s1Wv(foLJJFdjAfi0eiD@Wp*t<1-DWZQwQ|58u}qmD<} z6RlE9pFJ1{M@T-wJeUr_K2=SQ&*Jh0njGy;&Ymo^lJAAT9;@VUye9)3X!LOq>HL)i z4->68Xksg@elSLRc0RsuCJym8vH||oEfvIVTc@|KVr3@gR}ZwKh7DaQMrsD<6m8mI zn;9?R;-6@!srXERN*2)XL&|GSC7<1UCLTCKz0ve)HIZIJqujV_5=E}hnzUWB^_jS~ zLI=ate|;tz;YOl$OndYx>hDe0ABEbwC6{o9#D#wDpNT(B9o+ADS<}lQ6SKC%O^3g% z``C5}Xg5_mUS$X7PsTJ2`kwbBuW>CL`uS}EmayjD{JV#6aITc_6E5c27Mqc%$Zw>; znh}a7Nio4is&i+4?7JG&2tVRIuew}A>xoXVq`BDVYF+c_w^T{Wj4$hdA})?l{7LVL znR~zIo|vQW_uLb6{QaJLVip#A?uj{@6)aHQdsiwzCl}Q$JI&RRVi-Cj)pc> zgh@m-s@Wi_qdnXf!B>-2n&lZXIT~s-YcR2O$4P7SCaT&xDg>l3t4Wh4ffKG0AC2jm zc!0cFG)M+rnYM5jWR6rcP34s@(oB(Zff^nu3uM}AJ4rJ5G9JLnI6OgZryU@BK}(bS zf|awWZt@si6MHm9}mkX>Wfw%hj8?I-}1 zu!8&S{nImTyJp(1owh^MQ5|xikK;9VU?-8#K&8RH6lUGPce)3!DPk3&+Qj@C3i<`AEf?1;mpV2n7X7f<0VjxU!y9$j3>u6`Rxj;Bwg zisY^*tpU^x@*tH8pCTtorPH8hdglly$DUg|sx~!VSM6wXx;;4}J1SnbuvBsB2ePw!RXOM>DmHRRo~jhtT+xset;*d!Q(hvm-(0jQP)pxOt3DsI}^--`HV*->0U=TRtZwE5n zF(DToWEj(R0`M4eu$iG&a_(>rVp=4d${?n=7?+-ld5CFSnmHiy*#n`a_|pAy(}G}( zQgmso^FTsb_b+u|WWUwKV!3Guq4X0~80Q2$_2Lf*gC}V66 zNFOI&2PXv6rGesNP$}+=z{SHS;Tic7!XSKC#e)ng9b5ra+JG1tNY}@pQgXnDk*Xc0 z+P4Fh4!ZC&$cZdGTR)5}LzWf=Sz2p_?;46rg8-He9^}hJ;r3Q7Ly-o24_P4@ZIM&0 z@%cudw8*5u##Z%t1|m@s?NLB#L_^oZSmz$AeC z6oAm9)JCD=7R;cmu?D{m_FB0k5HM{_YzI*!QNnfjp^#0^<3CssRmQrRJi2)wfCCw9 zPymfLm<3XUl!-lJWxa^?6f#Ib7;11bE^@-gw&CB|Hhj5v1hyfVLcR--{^E;^xFG|& z?_?%WK~H8@L{2rs`F$w|^K0~={66RaF4;3M%8!MTVf*}zdQQpDF}cogy-@YAAbU12 z33G@Bo9xZJsLMG$85_51yy`Ev8S+7Q;z3L@6qDS{S5v7f-6yIhdmbk%O{4ctX=Z`3*t1sqDGbVhPDJW<%)V9O=nJ%Ex>_cra;a zq$V)ZxsS}=r1b1QzChMpp@Lr3{}OktF?Lng`Rwz)k27;^UIT;3nJX)GDw`O!#Z!V3 z_5fp#9oOcO1hrMe52QwSC}IZ7LdtmVIG$P)$x{I327CLT9gpQ!Cl|C_Br?5d0>N~v0(1Kd+)Q~XFt~Z*81Y@CYD^ULatZg zmiRG)QZB{sOFJJi-gf>T!0&N|B~p|*>h zQ7P*GcdpWkeet`J8;%ZRqet?1OzL`gZ1a(Me4RU!93C5D=-k{}gNMh`BlCzz7hHgR zA6n3K2;aQG$K~7T!u zn;>Y?HM_dVNC_&MwJ($vG}n1l-CyU`V708nqs7>wm~rr0~g|AW1@|sbVVbP)tRtn2KaIe6lZBVt95c67(iT)!a};)xe0PM3%g|5?A#v z-g;Qjpe$*q0tJ2F+miC~xbr-qppvo%fmcmY$otxj9#&eV0St#MV9cXW$wX1P022{^ zRK*1Gj#>z8%keOw0_~hqHAO z#SZJ7ms`Z^4wOq(0Av%A^9}Tlz%7g&tHOHR9=7OmR8%tUYaM1Ebqd@eLRxd;W1AKx z2k9ScVZTc&8#qbj@*V@)fie_IHyY7bVD~=kL$edGcgs_>I@Qx}<3i?Lc%e@-;m!(T z?GED|9l6tAzXb&C* z%bMLfK0M037f?852QpK60F-++cF)Y%UAN=MsN@83^{1z&W!1>W>YsrV@e|U|%_m0& zCBVB4dJQ-$OdwvYi|K-~oA%`Lm=+DdgdXl5@#;EN`~PP)KWJfcHc>zIc$7 z4ne!QOBtuEw=*+*1nK1+mq!Nhkkrsqi`aBL3oFC8k>2?wd>il$0Su0P`}Dz`nJ)(< ziSg}|KJ?|jH9OUzn%bn9;0Aj=$&I(+oN>_v{o?%uJtLC{cc`$nwa9PoUS7a*I!8rL z83E@sA!PR)@-Z9P&!e4@8l}R>8HZ6?!)^6OC7*D&RLiGxJ%3^tW?9$MC!j=Kv{&7N z7By(J!`3xL`DX`rQC}5K7Ue@SNERI59s&(m#7J9 z;w3w;W8WrFg3k=Ku5oWrx8UvEMnC3Se1t)Pcw-~{nMX?N(ZtdR);~D`MfCI{ftmGG zE_s#GV1!5r{g7(DAhJm&!r8p3E{sMy*LdDcls6k1ua0$*2?=uN$>*!y#9qw@c zY<>H-*BObWgaKTpSVV>iNwSYR*;?{sFS(qEhsfwI$Ytl#hHo!m9yys5JLB+1TKIaE z4vfZ!l`TZZj2>iV2%n144>yxdsO#Lz5>tVhic0F+d3)y88H?V>m)0Lj^L)tL*zX*} z4z{r-ZWO`ckpXFq42xzE-aedz&rWKM<~4e6R%|cZznBlqpZIqFx`E>8-nH@HiJz!E zr$kkhE2ejCDPnDH_jU2i!$pY2?ruZHAxmfTp2b;NWb%a*+WIEsP0bTH=hBx#g13z7 zkOW$S6uz+KsJmCHMh6D9kvb-sed3`d&;Fi$;^8H)^_a?}WcR9D8ROPpQy_VzGWg2- zU+`F}zK1#z@(MvY(^QFE?3fVfFSPX!6fM(MSq`sqXmB(R8qlV{NU89on%%Z?xEAl1 zRt-c7KZ3u;Zjj%j;Bt)yFB7dAdU8HLi!MTYFWRqniN(kB_dmGmaH!4qn`IMmNV#mA1+(xsUs8>$-uFHXk z>Tn_p`^u@&1tzc)MJ|$PQcDYq(xfsSa$eTXF-26?%2}AVz883ns+b?g>3SYduAv{@ ztSUQb?oL0f2doH+l3ew7Eb^<8-A`+NtsBikG|1JvTSeK)whC)@>T+zD$_x*3~4n+^L`mFn<%?f?A(;nl^ECB#O@<)l$-}@ zyIHgpSz8=CYYroqn9FlJQcwLj%jr%dL*y&6t!YB2EEeOc}i8)n6$P zBX!@gR`i^~j6h8-9T@2`6@|b90Ua?-Hoi84GmZ4$u92jnClmLY@|=T9VN)-K1KV}U zl&j^2#)A#Nt|yx%Qs!h zts~%j{*%tYkY6kR8TqgLN0iRLdBl#{|MbQw+xVFWvNB`e^v20?@GE&&;0OdN^%M^L z?dfkz?|+?_6JUY@m_H`4X^|@kT!Vx+XYfS{5tM8`(ilC1@5G-^+FyIEFA{qj(8CZ? zWIT)-SyW@x0qiQ^2Pe7~j=FLd^0bkq^|hjG$i5_yIp5T7NGUcMq5G!mK~qb-@F>}< zuS0oc@Pxz*FPdF0b3qk&KM3`5P%kQ@RS9TeDchQsU$=87izjnFxEX)8w3{35{oKLtp^SIG#qP7~dBeu8UjTqV^uap$E-~Q_4Tsk!@UGyVwe46KF z7Heew%kjPLa1Ss?ET%%y9Vm9ev{{RzrsGOAuGCm(N3Ue)mY-7>*0PCp>Fsh(jwG^5 zQ_0@q*T9C=Bw1RfAa$defUL;@ z_+J9WHSijG+~~OUNOhu;R0ns53IS>EA6TTPLDIT-bfwlK*oksQWBIucKF@SEPiET5 z$7#=966-LSBsnf7T{ot=I;Mu08UW*o14T(?^u$aBroX39kDwL8n5;R#S`{8Mzh98?2m`JY_}2w8RiWrBqDA zs2rvuv~0!L5C7}3H7BEsSaUkA5!YNRE+uFCx>J%jqDqgJbxA9Iny&0q2`MR_0;SPf z)t@7Q0}dP~T|;Y%v;EXdG{?FeLAeH9;8YWSTbBdPZ`L;jdj@@!S z#2_8)sN<*I!xEK+L?@@?VAaLFBcTIlmm68myDDf@XXTJFrk%Fl->Ru*U8+>MOqe0d zs#Q}REK}7qfy~LEnqbBy2((Ix{XChS}CoN!Rw25L~WP#(n}XtY<$oMXr#~?k4+7yg!epDgVa^;bL>Gze&eb9`fZOc^%^Y z(|q(^Q~?`%b3dNp4BWV14p+Gu88%ap$uUheO^> z!KL3Jirq%U8roC8fY4`K9*srY0aI6naNMp_{PWn`*Q~G3B#ZHQZw+n9-H3-(J!5w`y*w-?JDVk-Gb-p5tEH1!AO6?O;^VVNcjo4b&`(pu- z(K-~K>_*j9ZAeMlgEik*`-9_E&vL0^Mnc7mc!dulAV#3!oHISRh(-{Fv0xN`F|TsD zB5CQ|s9Eub;_~a|MraB0I1eZU^td=<(y!W3r}dog&?iZrs`CFW=XR%xYiI(w9rE;8 z@ux!n9CVRW1}qrGOB4YpY=}No)Y+C%z5g=Hfa9HUjcEOQPyk=j#+q$ZIKaG74e%4S%vrK^#|?38>C2x z^BQ(ZTA)7cbLtH30l7mtZ)mZ4L!)DF8KCOOkK(N<#`T4M=QuaHfz{C*>XZ)EFtB%M zMClSuJK*A#@4$2F5pCYUC0Y#2&A8$cZNXH0qRC|IcZzn*^m#>_uk?-P?A)S_0>R** z3{N}H2JgoJU(o0^6#gm7pkLRuhD)5@;C`<(E<2 zPsv$rZ8PLxl^Jqr={rbyaQDy0KCy5_ZF5_*?G5s&_5d+J&cDF}d21GSz@^!8rnb5> z`G&$$H_HcCSn5_x0NaBW;)ALovYe}6ikvN+7>QO`439|ZB ze5XG6^kzBUt_>!{9n`mcMWI%y^~3c9Z?e8%4lriLxX1sW;xiYBy4=T^3eY z?Z$GxiOV^gsJ-qp?OGl_(>A+Ejz-H4aFvFW&pKSL# zfQD!FyTLv~OWV5RQZ{)LyfX$2M5SOShEZq?qtKW}q04U+Mxh?vqJq0MgjwiZ9xuu$ z=B?J=!P2A@5^{|C$i^{4q57ZS0#pBAQ|)ie=nH!#y*O$eNN$(8!<#l&yuHRyqOvK?>o zXw7Fm`^6X@rd31Va0dh)_YFZ7?q&yp|F&_*TQoV6s-hxs>5;G;JVkH<^kYrQvhJRj|Lcmpr6CaH$aUmY?=>yW>lEeH7|oJ3$6Bcggg>&m7{Z(g zO2L6XrQkqSDLBxl6atel@=NLpTKQIk{@adjhG=uP7RtGJ@un=;%<+fD!7Pa#f*S%3Yv167L#C7$Ml$s z_mIDPE>_klbDeh-za&SWuoF*vr_e^`u@5@v!~y)gE6U|YMTyYY)haqk++h_77(pi) z5(DN)5kl>D`p=G311IbF-AXFTS931hDT^lk*BkKuss(zCdzwxku)D~Ci#c(sveC2WQpbd#rFSvY|^glYtPDiG6RR^ zp7a=51JHN!)C7ACWaR4e04JMqjJ|#a73|DzC){Ec1Eq8QUepKgzZ|#WloN5@^JRdwCrQ>~b=N)krrP8vVg)xqF{Y z4oKbO1JhRC>vXE4CWPz7r0d2s*NlO#*TPv>o+_Auu!UGVk=C&X?Ab$Sk|{v+@Y%74 z=EA#e>i~dKKdWkn{fG+)_fP5dfbz9)BD_IaU1z4KR}Oo!8l76EI_XSx(wXX{1Ca~` zsQ!)uAHich*CGIZDk)2s5CsB4*2QlnYneDkeI|}U&%`lYVd4l4qLM6X~OALd?=UIi-*yn^0rrRL*;EwutQuL|D>ORZ{F)Hpipv%g(w zeHQdtpH+ISwB>p^Hc=JT=26d~WZm~qN%O(FlE|tf7Z6#h_9}>+Fu>pHwA0WOGDVh-)Yr+c=#7*e z+}9DcMwQ@FLU|_-T0T5Rk_6Yz*!$TtZR}z)n`B&ANxXd%!>v1Wul3 zY>h$7))?fsMw8nbck`0MbM}(**e?m5vzJ6;zr;LeF9DU6&eS9+LqGc=EN@Ia-`+7ElUO! z%I{p#ucW0k%96r#jaQ&eUk_USrqs7lZF$W7wCERA{q$I*>L+tYH#l7B*0<5G>~*S3 zED~g-w7RBfBPG)A#Z;{oO2`Wb8PzF$8kPz07+K3@UGAzyTWf8z3=s6-#FLVtFcXDS z{q_2KcL|twN#(}WtbyMNgt~~haw%AIsdNt5-?mx)EV94V^x^gCuhz>Yjq3F=L|2wN zk2McNYgU~W?2zACW?Jw7(rwd%`|w*h#`|@Y6KF$dTq{d+U|jarM`VwCoBW|CSS{+( z9ATKc62GfEO2OV8xE9w%X?K8s^SY#lalRi=vLOe=7AV6mdjzD$W?cHmnk(cm1p^DGL#Z5-cggAN zogiN@AQ#)7^5#)jas}f}+{eEpdc(D{65wrxIB6R;tf$<;7gpAfCnWw|-M%UkuZU(V zdSvtS!q3D;r91aBZ%fpq-nl|Z%Wcrc9cu246T3}@PSQ&aqH^xM5VvSALTY4I7z zscL+VXkb7b?Bjd!TRa*c z5W;eE8$C_YL-BMdt|DqvvL$xCwIANo5(}T<5-V_tm9fOyRHo*ZSbBO zFR@a##7bOZrKTko5=FFWi3O>ep4b&O3961`O{dgda_dWtsBE#zn~Kqq&fP+W{9L6a z)Wiaonra*xq@{XXRD~X=Mv0g7Ydl>o=HX`KG&>Ld#x1y=zm|*x)5l%L!v(+E zyj+Bsm+SbWrn}r=$7n<+i%=154_ZJ{8U~zJ)sTd|0o*gjPwj4}gq|2_6h#&>1XSr% z=Cnfz7OE_at{4!^0g4gQpEe;YqS+MUZ|$A{T+XB&vT0zes8BPVvH%XMh&FhX@2yJ$ zSQAcIzpfU;ehsk24A~mismL=bKC1pDp-HR_r-Q&2^ zvAbZ!)St?8@kSofzaKjYP zc1q4LuqD-8(i3t)Ch#JxkLwK+I2i6M`ccDtFmM9GNFx|VDg!QQ1Zsr&3@))5fb$bkj)7p zLpyb=>QGnnh;AC{ah~7up#$?2s}LO<=3fMQp;lrQpbWxk!4w6r1D**C1%U|wTZstd zK{8@*bX!`{y3G@t5yC5N~n-- zyw<5}{~JEQJi8AV9ODDhBMCZ*>5o0@wxU1IV)uI4QNiie!0v4k68H!c-Bs1qlmW{N6xAW@fI<2r5AeJ}+Kp|H4&x=NVY+h4a%QBdth`Q2OB}LSYEutWJ@hIR&bNtl8CNr4(MIt^FvAhW`>bgmpdA1|1qu)-;$XLz+} zwyNRaq6PE`3zMQ)7Cu1?G%$zCrSY9`fa?ZknL2% zz|^d@b>WITAL%3pb1CAd6D~gp&Ej#>fEts2R0<*xPY67kGr@1hcc#sVML!|*z^#mT z8h&}p9IKOc?`W=qmCGqIUPHmKBD`Pg8a=mi7kKCvAKV?D`rv-Z|3>qjbh}rC}+EK@=ZZYvD=PoMCMh*pK0TYev#C?0RGFb*ZmKey_07BzJ&-WRE%zjf(J^qz89fw*Wdo{kP@pckn|LUugGdFQ<3mS2{b$xyy$g|&4 zuO61JUe$k zKK~u1zwJ9b=XKkm7Q@z8QC7xVHqyNDmW>XRCP1r~9^>6=(tF=1_g<=Xrne!n4aFWa zdn$I{-WA*7ioLriJE^lq2q(8j#!?fcPBjx9&EUYNg+v5Lu^=DceVh?HEY|$CT)ADRtKT8I85AVepqWMSJL9KH0&|KRMF$jbEyA_OsNNd%_HcUA8!owB!~AI zjHcX)+z`1z98o-Z%*Tby;`743ueKyt%oDN)uv(x_y4xt&B%WWQwUo7%N>&SSzLFxX zWecRWDY2p`wVd`Om1b%L!W-D6=1CF617`gYV#K6Hnm$Pf3omiT;%ppz!TV{p=>y`v zKy(5aPJ(74_!X(AVrCS}?`u=)DYDd4ON*r?FbT-FSbG34sqTX*m%v%9%>yB80a1#M zmU3@wu8uECilC(ml@G#V1xDD$8eyxO6f95P9n>Hzg4rrXz(r+~i@6XtvPL7g<&qW2 zf&n^1dN~d}YRhvR2h6(TKQg31k?vkaZWQsy4R2{?{BQJ>DG~t}jCPS|AG2w`E!Q)S z_K$~@;b<7Wq;H{xbTR!l*lNgVZM{OhoB+h0O-5LYlI4m)L`eY^f!% ztTJ12bd;?Ag?J^yt_M;Z{gez1-iz?dBbxz}o{XKvIzdLpuPQ!LYT#`a%pY_N2g-c6 z^`VUE6)L*vAz31oI6;$7Pv3;TJb{L^k9l>1pzO$kov^W|PYag$t<4zu3Pw*Yg4m7w z(c5&BvimdY36?=s(>yE+5vJ~1AiK~ajq%EnIRlb?j?6NS#H6}?!97YC%5Y2`SMr1| z^!>nZngb|2avE?YO=qtTDjfSuiDw!IaQm+A@^BE-qjB6&gSJU{cqu27{$$HAQ$a7j1D^q&GMvY#)l0 z$b8V<^DHk5l&czyj%z?)!al8j{gl0!6JYJ12177lRI6br2&Di_#1pR{xn+ib=i5}C z4SDjA%A;gKuT>iyK7(BZFD6S&v`!l5@LuC_P^LvdBAWQb z*+fS4Ko9xQij(V0JJzP(c|=iPkD>dGfi1xJ)w$g9%#B)d$1%6slH1PQxFwhHs)OgI z{@R)bVuE(@Np=OmOw&KAU=gZfdtcg*ELh`Wwl-IX+17Rpl`4TH?+)@K1|dtIlKT@Z zJ*w2C#xdRy9&6ed>d7FG?t>2#!nruwt%rE4FxssLc`F?4)@{b3@Q%E-gU#?qyY)>^ zk)*-N)BBbq^gJD*j*%m@|EMF>HR=dW9Cd^a7B7iC^>f9hjKY!DztZzC=??ZMT_pvSIw*q#NB7yD*WNSQ zdl7pNKZ~0B>o#=!3=Y~!?6CCiOBph{qQ&Ar!N4noCaj#^yb0{&2}v1<5vPHuMD#WO z4C&7RtikkEtp8|#AuoIC2+&sMOyJ=1t=hD*bRwGN**Bibd-2AQ&*|@E`@4ap%b!D2 z9maV?lkf!=zQr&wS((asT*-1HzN1H!$ct#24U|aUj8$_>CW9fos9AHLihCK-90_EmlC zXsJhk(%q&e9M%+Q{V3E@A>H=4o<&gf3Onz&sV)NMLPFQi@}v^4yId^;<-D!sR=FCD zo=qH}FjG7ga~U>JT_L?*j>rP1M!RgCRUZ~^=j;Z>=9QG$W+-l zQd*M)TQ?@5DxYg<@&Kcz&Yu=@!_pU2 zf<9d^g<0h16~f!r6!!IUL(QkR9zI)(U2!;e3HT_rDrXDn5`lBD3x4W}Ky;lUH|W2LQr{5pEmN>970rE&Gd?hf{W zrY6yaBpA`6>@m`)nD4k5ucV*yHhGwTAb%DplX-s9L@un)BfmsAcJ87r?mwAN(ujsOdXF%|PslR6Lf(Xl zG@Nd64NU1sy;e9~N|3j3M3R6Utl}=ptHCt-E(Vri1Okm0W>9}5z32Meu+J^mt)U4T zeeR*pJ=fze7m)IZ`4>+V+Z&uqU~%bcE6n`A5g1BBG>{d-ROD zB_MY5Xfpbv3+tA8*v+F;^N;>b#6xi}h=>2HRD(}BdE2v~8k$LlHx-=8`v&v(@hXYB zYURTQ01X{KWsg5762NCP|aocq1C zuJu#82l$G!>7(vWg=COZ7~8H-`}z<(WvoN2ko{8#&e5=I^=WEipP*H1qHbtGL#*wC z-7GX7KwtRqyH2LTv{l2P!#~ZIAhQZli`507tY58_5j(GZBkj~5_81BV(as_b`;3+J;nJ=p$3HKFxkbIQ0U1L{Y;HE~{_l)@&SvD`b2cMC zUf4^7k_L;?z$t+Rl#shSJhh@b5PoY1&QTa$N?u=(L4|;)1;~U0wqUdnsHSd=-{v=k zK?<7UK+}jbei4G%sog>vX^F_iG%vV7$VN>*e46)HHM9rB5n(#1J8+SZ3k`S+g5PBR zy?n5m0XgO-K5-n~yw69e4RZ0Ii!D$YK~pSb<9wcn?HKqKwBA%g zr;{jMO1MlSIiYg`APpJWL{%A$}C2UugIUspAZ_WIDZ@cp28- zAcDO?sbOyrB5XmA5>AVz!BU_04eEFhXcR!d+0ptSn3n$w_>rzWtjz9rEo%9;IJBTN$KQwE>&SPsz zSk3gtfkpZbcqeiuybrm6&uviAOpZCNpoFMI-;MTlg!EVDnzZK9zw zCvb6MKNrf09(TbiKSkPSt(f-{T-hUkzc|M1-tDYaIH*_c4gF>}f1-(hKU2(UyI`)Cd|n%n!cTeQ@PBp=le|XqjrxE<52=2qx4SSlxVy z=?;qm^;=foCj3-0zSD=>Tia}<9ja=Hpb;gp4G%%z=ef8Na#|ZpqNz!RtQOU5s$Ui@ z@)*Qmia*)fqN!ZW`WJx|oe+39%rN6=hYKlcBRDEFi5_v%(!vm2L+!hdYrL8SMr#X9 zQwvPK1%XD2X+wv`x|6^o(a534-If;lvg`BC6ow8Z@q|cy;FcR9V(LU6f`5c%vWH-h zQk7ikv?`-Lf(0#B)YCCmued7BMp&h*YSem)T2C>nr)=x#R3FO@;`?$hWX$oA-Riq; zg=Q+L*DP8edo5g`&U6X;4#-m$gin`jqrWgoQ=)%(>VYQv)Kj4;4_h}mhN-Zz9vW}yanI7thffXrjOONK^dvRE%4d2ZJ>F5`q;5KuoS?#fWYjdH1{_}I^uRKwM7UO4<^&q= z6lk$_f?DpBkUSj`=O83Qpr>^5fO_cNW_16uV6>Gv)E`vqI!_efwUnp_@f1qBIBnu@ z6M{qU#P$xyGX8hmQBxphbeA>eY~Y?nXt*Q-#4xw9`!1C|;7(sd(Y7%VEyE1}pflZp zn}2}rE(xfn%gJnYvv#TfL&y;w(7L4CPn%ZSIl<2(qCrknLHoG=7`wgqF zSw~IIh5gi-Y#h#r=OyDfgK1H>KQ##5`zAhY5H!3aO@YsYthC~+^(txS0F{PxG!AR} z@c3ju=@axz`Gl@o+~3_PuauuE__6-(_GJI=3CTF=rI^OG)uf%qwcY!G0Ev>$I{1s> z?tPNyskk*#px$KP1r~xVp3nHu6R_>b?|A(7*Y=_9S2wZw+7aHftgSeq3n2=&zu%p3 z6VS#94v%=ewzwU;V!PE4E4_iyxjB0(s|+>E1lTvdBfE!id;37XSb!QflyY*xlTa>d z(s6Pr7t(+JDYWWrn*({|iGxYUplnYa>fr|!)G#bOsjpMiY|IDk;jmUXg@npD81ogd z8-_S>=u#J{-Lj0T{9m>nCEcs-1fvCfOO0{W{fX+!D`Q@vDYlv|D!U%4}XmnhCP(p*N7^O3HOhA*I)~QHLGMq`SvPNU!;XbOtZ(&+FIN zO$8~K-uoR3ZEPcOViQ*C?1AsNK`UDGKcOBV5@8JCtIh_^%)$cPqN z%8WrvRVrT%{pzp}k;TlqQchM$h8?g-@R2IzW5YDqm-C~j_=^;yh3W$ttW8S;(6~q| z;2SwVv{CFk69o^(&-||Va-(kYB^z_nMxdNc<6t_{t3zN(skJszYqPd6bip*9`-XzJ z4kZKr>ds6O?zZ}%! z_+e9%?I^x6Jz#BZ+%en`BLs42TU}4aDGM9{)EE0mq$Ff}x@A`0^kv{u(ok-Q^Vj^AkTu-DZ9ir($(?r6sG4$&7 z!~ZuYQq&*cZ6{K>Wg?YZCQ=y_2|#IOH<5;#CsNr>9F@z<$3}acIFDoERG-Df`AZ=D zmGV?{LyW;>?V|*kbke?zchOx|=BizotD+@05eERwl{9=jnJWa55Z(k!q=ZQo3okJa z|AeEeBymzXv8z_?7uLZ;0{`ZB)%F7yhsZS+i>iBnI^A>#_oN(FDXEgB67GsTi{41e z%4eaCBu`;37$(n?yNqg<>`(E0vTxmjV5FoCX+uuV3-%t6fC}Firq!2o*vvl_M&X~p;9Tdv_9pBZWuHO4<8550VfZ3CeKA-~)fDIg z%`nUOmZYdNUA?U$N-yHKBDx7sNs5#Nc2^YLNClOu3|1L=LQP4!ff!dI0_nif8nG*q zV4zN{K2OaXlgflPkBhQ9R7?$-ek{fQHA!K$>~|XV*+a0WdTktL$~YNb zS;GugqX66tHMY8r_A(a$W%iwgbeFMl&M|#wvtd1%ZJfzpxekep8s$Txiq` zH5!#=41&^zfoQX^6kg@?Rt6Y1&>w~^+pY39HomCda#b}r2yL_xjYr92rl7FtCIeNW zTX#A0g+9calt!@dZj&9n%#Q<}3w)##6VK?T-Lr*wDdZqt97ma?Jq?#}SX|N7Q%(xR z%qehxG6{7IQ0kUwTqNh>0PW5*p*VPd2xxuaV?cUJ$CW7>hDh%E!cacUFhhtWW)MGY zUKb6JB+;hfQ(>%@KI9>!J+$YLGAh8!kPY#{{*$)N4|ONaaCjI+2_c*_Z}OnqcK|~H ze8|;enW#M3c+ri#q;BL44`U+?K@${VV|8BNSr4*P!+3_8hnH{(KqT0nQrDufwkEn4 zv{b_vNPFhNw#vh#hR3`d^s!oEQMnh_g%0s6mt~~MV?MphDXZ`q4`^#`A8PgS-*M}b zeKvIOBNU2B-LLWiTUUoY zYc@qBPq(siJ>AOPD5)%9n56XM@Exxw6?Gi1*5R~VQiD&kfG7lXQ@8Jx+1lP+0#Y|b z!jtO>)ep5;?$*Y!HFZ!|Cj)+R5cpaYZZIAgj6=uE*=1<*4Y_iH4(%kyxRO8BTyeS2)VTOM0|3sU)C@9?CrsQ!3*@AQaTudS z#X?7P1JM)R=AdngGWw9`zBe?Xby+Pe^efbH25 zQ80n@foTapYFG+DS9bH;Spv%ynH><&VQ(v_p^=98kdadtWx0@N?s&Vc6$9Y$F70DW zpxi^M8W0^z9gAJS_~A8Fohite>SU{PW?Ou-8r`1TFy$cnjxv+uwuT=wsRC<>i`c{& z{3&lh+x_6%Gvgpx?c1|d+0FwC)q*e^U6Mt6vWXA?rwRUng87xcBvtU_v1tzl8NMN@R z`oDxW#+K4d#;G(tYBW{FT~u9nM7RuWp^@65=b&imT$~XAY6paHYIk{R7@!(r;ezOx z@uvR*>Xyu9kRj1T273TtzBk`#wP{$R1=Upo&$D52v|6Yu>%tZ_-ImRTqa+ju-HELy zHOxKzVbUJH(jG9MEG+=t0RzGY1>!3OQY+H>9swGGEW_p8wxZUSwhi>BJ%ds!?eV~K zYJB_k^kGQbR_WcQdl#_=sd&Zc_t)wDhf8DJe?whcy+ZHN(OWry{HJ5c0u4_rBc-Zr zRY`-UsC*{$!(sm-P65y#chrLPz_nDdUzB*cI1K?!7lhh3>3t8}es!oLNN)k`2?{hQ zOk6M<#9{ibhrV*P>`^Qh245JmsIept(MyixeH67~ZULet3Q5be!Y|`_+le z*l^sH>J_&p3HvKG^GUpU@bEh~Un$2|;g#?B;+;ort`)DU5Xq#V|Jy9LyjSk`>Z3lt z`IVP{^x#)qx%sM^w;8od&s}wOQoQO)tr=FxdEMJC?fLH2rVZ!Kr_Frcd?S=xAT#n$e&!2A4)s|pwNGy-blle?4Wsc&M7G{ zFQ7aXZ=LL`wR`5HMSVh{JXCjvxpClXqIHwd#c7D3k2bI-p$Q6jme>O{A(9+A;h~mN z`jYvug6$@(iM9BJzLb%!)&hqSJmX7F)`y8tt_m|{I1v-C31oZ>aB_xA{-j)`&({ow za4O|*yU?X2)vv>pw_Cy9(Nz~HT)r<`3OdJEq-NpvhtytMR=q;d1n484T4Y?D2WElc zBGrjf9POvMtGg(e;YXHCz^^sXs#2Ns$wN()1^P!W3&rjo^VPe}au z)v&>iU!8{CRz>Mq1729TlDN#$ah;fUSsGLxM84LC3Py$vZ>lhNCj-KBX$O?Ybj8}& zB#M(9ZJm`|IxUD*UERhws@)Z0|H^kTqA=rewi7=rQZaP=Q`&Y!)<;k1>A6^PZLkoc z(MK%+jRvk=cw$oQ(hRAuq(jlpP_YgqjzXvW_cXP4l<#T&UOCd^HyOtokP1@oA1nVL zVNg&S@cVWoW5+FG5U13AyL1onUc_PD7mkK7igNJT)rP4g%?y+vD$OIm0AU1T?!ij$9ON&o|~-V8Y!7{v%X2)>L3oRTFrok0BhIYsK}m@ZPxCQH4)PIXu@v@`T<#haNH3L0vHTOvt zfRt9+RmuJc)m1@r7-KI);B17oh87BoudS;Fe!%kVFpa2e4ups*<}qCpe_>)~-8pev+28zfSRIrqN51ct$qje`^L z)U&?{Q$QWV6JxQ!`fJ|qF$K&BOaVfYSxkY21dNKvh_|GShFMGCl=1UveOiK3caDx8C!L zp$u&>%#(Wt>gghxCf1$EAdXQ3I@=J7A`hO;_7wB*+4Q6EG7#_}L(`_OX$G}jAkFUl z^Wu%6hBz)-EoH<_K~2zoSt#9DX>FAM`HJQzFE6VnlMQp=JfO7u<3_rto`09Zq{xDD znnu<~auxD;v$|iqt^z;7(0+fX7N{~LT{YiX3w3{@oYBGZ(6I}~;v_GzQ5A;Js{vhD z)T-ZWaDF({7u8AGN7hqRdhTGjhRB~Y5q7kg-zkd?K874$G0*XJss+45;=qoV6i`=* zb+t9>3R~(5Tj~m1>aynEA=(-$bRL+JMbZ~-T?*ChrHgnC--0sn_X5JgnKev!s(LSw z&%*bwX7notIuMJ>& zTlsBZiq4G$-oie;_IN15x8Pc%?$qER)ZbcxhTtxmh2#UrSc~6csP8QuJ9A_4y6^h+2;)u1}aFPd-B3*q%@04a+H)TV*u9&TnI`v{`PVedub7U?4h+Y zk5O}tu}dtp_5$-Lmc}e25wmPGX^fS=Wb(FWEPZjYjrLaB((w!^mW6vE zZISx+PTJDc-chA1U&>K19V%Vv7)`qJ!N3$4z9|LV?Z4g9;*PAMEZ!5I+vaK)KFwQQp(AKOgQB`>lniuPsE>cux_h-g?Nar zAAY+1fxGDEf$u5Ir?%Foc!w?%Ublj4uO>TFOYhs*khwluNOx>($TGv>y+KxJLOf7R zg$-to6~sa-l8^c^%d-(!h&RvxSuidpi8|}cdInfgQ#2M39f9@sx6`lH+dpXX_756r zI|!%tgm7SGxkEVMsWMJc2R`;JQ3pN*l|x>ZX_-39+E1cgrK$iX$)ZhtT9DDz zJLE#H(f1ch*Z+QwvCnKK1Hg18N%~1M^HL}ZIYBFm)?#Tg3$%ij@ z1`P$3U@~4p)U9A&sH20{3_(9GB!vyc%>F?6dc+XQEFO9N(wkupfy8C z^BsV05Kf_Ej&7u(wPq;OrYFo>Ggx922ZlnX>6?JJK|0A;TrnD5Y`LQ0`Bq9dUD0r< zqFnMljbSQ`7$y*N@@K}GYK<}j=A^zx?}bH%kpBl;vbct;GuwST^$EZA3GVj! zM@AW-jjHs@28h$t4Ujr1QbkE0DmS(*^s0r0sxv&Z2+0LZZmeG(~@vjFwI}Y z7j6QRw2qe>4PmTt`H08Zt0C;lLb~Ois%3!;&Bn#=3+%cysVWS?8<8uOw2Zj%wJB| z%eI6GQ`eZJ<$gwq-N_M71jSqFVdB+PJP-Q>o@!!lcy7?hYusYq#+MnIYr46f6_h)ueqvmwrh(XQFHY+MD7hs#>Y;mTE>!-dO!p2Pi5UkU4P?0N$TCj1lnRd!x; zGEEx6tyb#k1&Hugfn{19kTAYN48abYgr}zwKUDB;xJlBGfG2vbh{v(<(t>a`aEJjJ zMwMYd-Un|5psDmzgvn?r{1Te@uO1X4-NG;tl$E*6DQHMeFDqol`Avl&=zOJB7ka9D zXx1q?eT9)Xt8Xrp1DqM`gG7g<(F}yC$0-lJYhd$ySoQh&w}$a6E9#;RHDu+=z%LEM z(kDfXLP~DVz@K$z*8DCA>%82V4fOzpAvDn3L1QhH;+$YU%lZ`71YJ0pCsBTLX00d_ zS1t%_3kwkFgSu+b!GvBg6ab)-u3F9_z_eHdm=>PYWZWx^t{HX;t*&VrkN^(hx3mMohNcJa^+s*UOhsIiud|I%-hD}+~6vydK zKVD@OZR(fNE4nVmf}VPpHm7gmo>8yF5WKC!0JSNyMhCf54?g-B-B?un7t|-^;HW;zDnPo*sS~b zcE*sEsiAq>kT;!K(;1{Bzy_7x_Fb9MAC;N>SKsMZdiuxGuS}(WJx|9m|ILW6lbefF?o{|koSBIrCyL<71aKWk#lU!S{dWH3Zlkn<{slt zlg08?QkFi1w>=gp><=Q9kQ{@=d6&_SUv5vv8u$P=$?&4b&pzqJG3Ul+qMeVO!ef0wJ%La3GRr7Pfo+`T!2Le zOP5i)?_pt4y3i-JEux>K&w1Jmn%V>8|rC}C`ak`9juvgL7g^p7hUKL`uO6163y zi~ZE70rTcNwkfPVXj6`}tibp`19;uEmc3=Hvc-{Q?;ERZVPx4y#wr_*EW7CoW0Va> zmc4$gvi``jw~bZSj4ZojjIx<7>TBQ;gT3JqAsZxLNb!C|wUA@#JU##Od|{L^kYSE5 z^eqfMjOM}bRaB@}RVEM`wz0Usvg7^&aDQP^R@V`VqsnTy4T?fqIYr^r?d80Bx1y5k z2k1?f!-s%}%$UE9IYc#XFn@u5X+Rx3Q!4z9MrHow_zQ;%)_B@Da?V!~iM8a?7<694 zP>RM}()5FZp2R!KpFV5)r5kG{m7)aRC2IcV47p5vF>&uf;=wo!Cop~@qHsX>!9j&k zeAX^=$+}uZ%cHVfm6F1&_P1P8E5NL}Flz!XB?IKbtoSWSBuP1ylDDj@6{YYcwMdFc zx&7Xf6mhGpw~|O6$4xwm=Zd-KDa9m2xl&iH&6cC0 zu`OpLtJ3)b-cfL%7BD)i4&;o^suac}?0HEc3PRcmBaS%ZMNv2px6V<8^QNm-$Tzc) zw@{`q-o1>L$j!p|YLhVjc3&f7+Za;LcZmKiX>6_9lhxLkURGP(B4c>8>hRU7qb_7J zh^q0hrRW)yq4^$6xYD+HU5W!ftlG?Y9!vq&b}Ph&*_(={?Xey}T^dB_d!tbUfej|T z=~0IgYSP=}I`y@7DaiR8AE+n8vv{zQML+tI?-#Pj9@2Sf2k6zrn{~xEz0<+>i}-R0vlxU%g_3YZmbnZM8Q|M#xPvBKMG`34SE1)7@`e7vd(xY= z>#pw|_K!)ao3R0*IGpu!?{qBh8@uf}xV}y$L$xk5`$niN8ZQpUd_jf&!EHnj$k!0G zlyea5xdPU8StfAmxlRzu7`^EHICl7cNe_sbb%dX`T#%I*6Vk{mP z1H2dxAw#v6hMJ5NXxBq8)S9iOa&tqS=%Kld&CP3WSwUMCYDp_VHf$M>U)g40>6`ff zzvS$4U3L$Rm5?XDYIMD57y)F&&Zj=qJJos`43g{<_J3{qn31(YHZ?7-O^<_l znq-V~5$0V+d#Wf)c-(i7%l#drKHi?%g)gOzD=qi8v2^MKxjiHZw3fGMSIRf{%b~1Z zMbi1#YuwRp-Lk`kv6kR7K;v@DM@4o=k7`t;(#gt;->)JSim)OFSe&>Z^iayAUgaJ? zb7d_|woa=Rby}@9LVKj1+Oot#y3uDfn%54SQ1t>0RJcZf>Pp^cRROo7{#u*!StZ*K zaTHE<^-%TaWM*SkYX%Bw2XyE08r9Jk)kBpgL}8PMYD8&>V(jhCLp8MAXXc?=ZFs1X z6{nI|YLu>m;jeWWjaA%Il8P&8o$OhgpYiH$dh^9r{PlI;l!vWgLPsI0h4V<+!^&?) zIt6*h<4@1LTG8out^S^5_>^=;f*W|2Ru1!OVHeG+*$eZi?!{bCWIZ41-mnYyW)aoB zkf5lV)Nj}fs3o}bkGJk-C?3l~~m(=+O8rqGbn zLpxP>J41@z-Kx9Y?&Zy-D_``D|4f&4ZZVC2mPmps#K_y$2T+`+`TGOBR)ssQtXVNw$jtIp<;wV(&C`gMWjtZ7IBI=2-Ch{}TUn@39 zlu|3@gK(g-lb7~P8>OI)<_izvXrnOwxpy)-TQ5f%p(%B$6S9|jyQPb~Cb~!;_r|7+ zT!ALK$bNs?rgV{mZt*iDK}C0xPQJy&mlOG?TJtQ3(R>QoNtj+uL`#|_>8=CuAr=)v z2t!&yb8Lv7Ez|`AC;3?86BI2 z0A#ermQ&lWu&%g;`d}f6v~0u>;s~S{*nNyKS3M0?u7HU1)BzvnC_uNchf`?{7J3=h zm^QiwKIgiNtu5r+1K%Gmf!et*a1Jy{J>IHe7jXn06ii{Tzu4sh5D*sI5PsV%)!ziz z(ERiYQ;+ZV>4=kV*{}_QhgyN=+_WjNm$D`7klt|7UV;Z8SF$RW?YO?;%@8|nvyl!T z$(8jVLZUFuznk3&^|2g9)5sA;2!rbdgLdkt1YX!_N5leB_r+&Hp zsf(rZYSq*Rd1J?vn}Dkl^= z&^bokj}+rhLEVVw8!613g7IwGVj0kn?LB8MgSJH8HG+-4aZe2StoStf6K={F^4(T3 zZI3lrjykX$b?{7C@n`s8gB8D9RYr&=76aLeR^c0bLVO(vsHI)IO7nrcCx;`5k+tW_ zS-3VetI5Xpr?042K(|d&#~!M4fQ6j+kgZx34ZA!{ybN6jUJlkn9s=bieU7@-k5^qM zEttI;Ed(!E?aXP^ODsJATkP6?KwQk}8ltcnHdoJIn})0FWNV0$H(LWb4MC`+@i{}9 zNUE;UMI&qIiPXlmv(d@r9jb|+ zl(fw{VAHH!-o*{j(A*`p@~q)YlJcxw7AJZA zx{I5z{K^@24Fm7dYQ0QQKGH9%Yf=10qG6VSrB{{*>=|LQKJl#PKceIfZjlBNfhx1i zrA_Zz$W>j6FAwx_`0ur;*N#S5^eR@0LCa*y{&AGAw%!T1tLj&F-!VHy&Y>Gut8D^+ zebw^M@+XC))aVr-z2cAAD;fSXgAmH>&>ktsHnSSKaH7!?+!yC=rTJO-JK6%(yd>!0(ftr(A!hT8)7U+N^}qxlqby$wd9Du zK;mcyz`;pq9IyR8vzy@GF!$~b6w1(psWBzbut}f^c;L*fNjO)P@`XaVn*jDnC4(D+ zp{zIEKO>=;Bpne9%w@Nj=|GR6riA&Y<7AMAe`>ma5=>VO>qrp*DiU+~IBIP)khca32Q=`??V%!>Im@L+=0sfCJG zk;)W^1~9MF4RXa8kyM%`;hI{pKPe7se#u6JbGgFS$deb?pSjdAN8n|nlezD~*usUO z#D>jghOAy1%7}NW9S#(JtzaP%yBUu-Y`FPW-fqnlEu4YfCUL5SiQiZyo~|$Jah^!s43=BUyP%i5Z2l9x9{_gn<9&yW@R(?2h-1?2h-1)g3o9 z=vcpDwyohH0tRU%L}HD&^z;FH{B~J>f0RGENrV=CFfpJyy43E479r_vS4zo!(~a-6 z3sresDuiU=_=N0QD>^XjW<#}Rn_iEvKFI*I8iHuzx-S6-oo} zHz^F@Bh*Kbq#Wiw=rj7bBH|$&c;XK->M9K<9YmjE8_>2WRFpfl6a%7qcVzuw$pPiy z6pE_%;eu+oK6KQ4hfdu&msor-Pf`aO^(J*rWRU)nz*7N;(_|3X4@`+AcKI=plO+V| zcFZ=b(8{t)`l47Xli3MdM2bC_pIKane1rlGW51cpp~J!`XRn%6v#<{yUo&ZZCD$0D zOhG`BwK3vwk7%5WhFtlm?*}?ffR?Nt?$&VA!V^|WlT3y#Uu{w;REVdMl>v~4B7bEY zFX2Rj#>VWcwP-Mf?%(OdcfsvPHuLzvEC;WMCMArhW_ zzpAFOIWl~4CZHu+mU9Hb^pjSk)ii`J2=!93tm3zXN<(F~tC4<*Vrgu;Tg}59V4H5y z8%8;?qQ;38>xrc(M3FKrdT8Zb?vhatsm}Z%)iLsrQqMYdp=~{+B6q*(kgD4A=8Iz< zQq3iJNR9eX{*d~Au?OzlV-MUpvIp)Qs|UW5-&P?vHR>g&F7v5JC!sWQLF8rIG&~^y zpdr&$f49OcXVZ-Q|3x^fVev5<8_FNAz1_zHvUno-?lGR(UNHxPdi^k9M!Xg%ZbiLIc{L$l@zoOEjwz%_(go ztF&!*W@lbz%+>~YCSCSafR$y+CQwoks9hV^f1#xbP3qX}?R>E_ zdXr(Psvfr8dYK;WG_Mf}n#BKqpljan-_ z58k+1UQr%JTv5@rOL;_FQrSBx4P`X7qDI>Q0Hfz5HNw+|t7{QG7vi4;2y56Rt!Ycz zMiItT7z`s&$&Eaj6uYGPfEW!F%|uy4)ZOjbSP#&A!}YZC7I43fbClNJCjP6hvhI$? znd+%0qL&HhJ*Q*qRNrD+ou$L@XAM#;(r|v499f_C6+lI8IcX?o!9g*pIvVIoM_ZR_ z>_0k*0+reoNs;4xc0hJK!A-+dl89TTVJPV*3Wt|i94u%$zGJNGW9G3UuaBlFAHYrW zt-kLoIAhXJ3TPcL_7ih3aJbH-SlL3HWe(pth_j%@0o*pjx0ah{(1{c#Lp3XNnbc6Q z9$BYKKTA)oGnzq`o?NF{U@h~%0SJhvm>2;XD2wdOb`^t!dDj*>wZiEQHF0M{A8d{K zvyxS-A6C$>%3lm@2D30a)D=!nJMmZfSy=l8UBm@QJJZQB>gqV{TPwaAC7R4YidKXO zJs?Y8uAnNXH+KLnxi1tuUQ$+qhEKs6Ip^$?IX$D{&~KMVEl|~OhUR?q0-cIn)Nodw ztlixxT6t4LyQhGHhj6f^N@vI?M#sH#$pCu@8h#P(I3Q5GLY$=xK3e`YjV zfORRb{o`o?E80sdJhz_wC; z0?Y#*M`^SP@YCiA;H!;!!5W}1XdeIJZ2T{69e+KwJH{OU^<$5J$G{%P|KBnG3bP(S zZ4_v5&Y%`Drdvpii4389rb8$Xq3@@UQz3&NFIa@~tjI;q4QiV-(Sn#OLU}>q(${H$ z5eVgqeRe)9BKAKyg&?Oel)it%hH!Nk0Who)O8jSHs$)*}R~qb4<&TCuqZ$ECC*Z_% zC#;%L3*|U=nx_ax;l!p+{CQpRFAWW)X?9#r~bPK`r}6C%|} zd!=1gaWJFuGo#FpGnhy{H&Z|a03koK-ch3+-x=)$95ZLMgH*$42dO5b9b~i^?F5yk zDzY*=My&!yJAU&M?XHY7+Mx&?zM<9BRN{M_kpza;vN!i-=%6^N)M#O~LTA zjofs$(Rl$V-g(6G?JK-Cuj;ef~K~wn=xuyG zh^N-$dq<;Js+L~Sjp|*NcI#2&KpR7o_IZ?pmg3L&>X|nQ@pyo(M-Q-s)o|3ag^ z$=$SIOBg=e-t+Cfsfr0UMTlWQ;s{9}#h(cD8vByFE+s`=bNB0q3k8|Kn32{pfv|Mf z2~-uE6V>f8;6kud6()SOh8$c{Ks_m^g0pW~!h922_&P)Vx>z?pN=8#pYLj z^rHtKccnh`;`d!38T)>7`zx;8e5L$939q{H%E~W{Mmlp`KQYM_=n50982?sTZ#8|> z`KA0&4i4MX^VHF&^2NRz8buzWn+7o^ONyu#sfo@UJ$Eqitq(UrmF$`+cdN-LS-82X z9HgMt5Km6cMUBD=MY8GEH8`k(+X(^sTk6v&3HTvCQ)gKOFw1$)nYbXMWSr#&n}dj8 zu<`p&poStmBLf@H5O*P+Wt!J zZI#hB07BHzP>0HGx8^(7U>&QU7}fq;QPaYV&lW<3e6|^r&kh@WwgI1Q#^ke&i{rDf zW&w2r^4TWivkQpe3_NhM(Igx& zKejCOq&>3KoD(t}yJM&)H_o3(&!4KEKa*M+>dxjKHE5Q_IAEC-CIgM^qCwzuf_cgw`tRCw&Ej$m|eS+CT z{2Si`S|mKgn=VB1xPm7~l=0P2hN`%pdTQdSs3NgFNHd;L!71W@^RqbY~)!TJX8C6w#)VW)Ganrt2f#x=j5~+%rwX?f{?br zK5aPyt6x))R2v*XzWGeyB{IrQ1|qZd8E#u*qp1R5a9FJoS8q+s*7dcbRk#)r1hX5C!5(RUr`lindOjE5)sby$J7lL`+5hE*V7%}XqzjErB{J-43T@|Dw=cID_6PiZDVt;jkrIe*BWnZan1b8Z8-*)Ph_ufy5cJx?Cw zi2)CLIDx@Kn}Xk9z5=bN_>hcF5z&|!5vmj~qSUI$uq{MWu=pe{&=;w2A|(;M2cGf@ zU>bklLR`~@%)~p80Ebaf?~Ve6ZT&(KWYEwbHyKdAt{m#9;PCKsqWBZ?Mpi>cM0+_R zT33hA$8dSlH31x>i48Tr94GNFf(pY%drtB~rx$0`nH1}GLF1%k+;M}r${nigks-wGB8PWLiE3=WNR) z8Rd-TiWGYzhZ9=Nqk0zdeq(+PsWe3R?=w@g#=>I5jF4HePObcDt4CY*C-jQ5vF3rmaP59*)$S ze|vW`D9FvAAUA`8+ze7DB%MQUHrW~E0unrSJmT0!kBB31cbOq=FNO`EHfNljrhaPxeL0BRM`(7%bIQC2qY_Ej98D zwt50fc^gN0BM7KROgWoP%G+1UJIp9=5Xgx?XzK`EVUpdxO3*X1n_vV(uB_7BVT0y2 zmgeSTgYu!3%C<%?7ba%`C}`{5aS{YB@dvPPtLgU?b$_g;m%UE|3KbH?pVqycLdDQV z<`RnXUrepY@1Mhpu4j0Nc?`}sNTWQ8$pb`{@Ku{Z4`xcd*AggA-w#7)x3?!H3ygl< z`>Yw}_f4kQQQtuf>a|8`8}LB%0@P-aQi>e@d@dlowDwZyaR0eJuG18=|9ts>_McZt zL4Q9fpA$}GxbitPo%)k|!viI!QkA_4RSS zp+5&kI%GVlyk~ZSuAGQtQmGRM&?3>$6Qo0hg{Uib4Ue?lHa1E@uJBRrYn&b9~LZ2R&EISEw~Ht0^L8iwu_nU{=3=5@A`c^%DUUQWe86N0HZ6~p9u z{9mIHcFih=FPk6|2G3lif?Z!DuG#ppY92FJ{Vh7w(Ii%JUR51U;0#Z5POEj~85s1Z z;aVt)!N&?mBV~nGD_OqF;_xKp;zcoa8uP zT8n3uutjZS)bd9CwW01?3h5{+wd6g`Pg!f@g^yg)2X^T zcx<|dc%r3GXhNTKFO;b+$0;No>Aj2}%sC~)1yS^unsmR;rd-Jmm2AboGRnG;N=;0c zhHH=pcEuY^&F5AJ@6i$aQ=qv)BbRcj)F0~B$;U}4duHpwt^l_pXqDHpBK*--gdPH8tcW|@As~caaaeckqEOhndqYpg zy*vsOvbCs~z>#W^3$i-mM}5^>l(0RNc#_3Gw;FN;?ko)T)5a>#v4styIt%zWdH_Qi z!0{T8P--tKq-X*VU(A|&>=Kw+chV%=nRX?2QR;}9bP^^K) z;Qj;z+V<5ohgP=_4_OO7Qb@Pk6M#15B-CUn z$M*z8cuw`4C2qAw;Bp4QfwBQb`lj9~yOx0iwL+~x6<%rj2pVHTmzohge&t3xQ8Gam zm6?A0HmeGXEKmZCx~aoq&v?h0L*?htI%3_!mGgFK|Ci*>VdhZMiO$yhSQA=xBEte& zuF|(y-9Z+Dw6mTMXY6Nop_zPY^oE9eY$%<-(y8?{Y;Gv*BJvHjzS4htLqC$q)0>+b z?V+i&tf$J9dKxu16{sFzqp9Jv=c=inFd0g(avU9X3rq2caXd#yV`bt#)+@`Q)Q1e2 z3=Lvy-PS12tofPhssmo-Jbzt;Nu#lwO*~cOUpXz9@)KFANkf)#6(2VFAbo1F;M<6J zP6VdFRq=mWI4e0(;y)Q0P09vdT>)fq#+Rk(gB4lQQ@BVU9fJ4J={=+Xp%w};fJ+MT znmlV029Af(B)w7Mn|&vgd|wlvngcx+^7A3jnr0=-!(&=tc*Y?xA9zNe29IsD zEDR8?(j#cepvL2s6|JGcnjdap@aO|x8mwtx@O-Mlodw#D7LdFtXwNv`gMt%)-m+~V z(kb^A8_1_d62a&>=v%o-e5yK0hYV3Dqx>!va#?_$)XcH2B9!(nqF~N6v_DqhRmre( ztcN9qVmIIdD1g$ zc*}$PrkL})zFN(a2q9M+q}D7ru;HjX^g5~)6j4Hh zN}2R7ATqz7O#j1g6hsrRNL04(mtpX!0!yMdDg)gl_$=B$b`7xV zAnyPp-ERThS_Pa@z2X0&D9;UfWjQ0vN=;~O5PT(V^IFB29Ta2!&unj7Qdls0d*5!F zfOsrs?f-4O+6?OE9nYvadx69IH@4?}ILm!IoH&!|=gw6JzYS{Ih?jVf!o6Un){J_# zOlml4Olk2ANz^x_mU(0;P=!ec6j0eP(yv;xfhWkkCY1dJjZF?1W)oD_d(hj;flu{n zx1q{5@hyv!GEAT9Zdo>3s~*W|&s+ssnnNtK=gn=0_+`T(b2LwK5M zl+nid-n%T5Y~y-#(sB#3a8>(K&#(Ncp6wlHz!u-`z#>D77wYF3@!Xagv;cl8*Qwgx zEYQN%Opc}+(agAMwqsifjxg&OEo;DOk>%)>1)3y-8MHa+b}u;89X7s7n~i|MwJ zl{yK`NF*%W@(@SKgB7c%CbH^AX#RVf``59XyD)36Pz!hX|09~ax4rvh(A3;p|7SN> zuHKI*0Z%oz`ZAm@i02N|WQ`(=$q%JUdY?A{cT}V=GXpT5g)6}~?E3(+1-jH_V!Hrt z5w~-f>8tUOaq)n7$eMYzKqY;+Uel!!=H)_26*-H8i^gbAX~;EaN25949IZLu9IZLu z%r%G3q9ulptwm=7Q509@q;#e<2Xs~>7f?u)FG5*Jrab(Vkg9^#gEOc6>DUYr&%yE~ z(JMXg`k7Z>t;{KM%5WPv?#f!58ZMsMg(jWRrRQPwQ)FpARSW2oaNLzipubn^Q}Jc; z1-wiOS8b*)wrw-QR%l*$6%Ev)t2bY{`AYn$T-79iwH!sLCd~@BXU$bd?3Z4PnQwes zprG5T&a(Sul^D!E3{_p&2y1N7yfcRN_`87>wC<)+Kl$%#)Vo{7OjN>N%Lc`2sNw6u zktz0S)@anXPP?5>P59_&y1CA2nWAF6jo&jxl>!lDrvS>8L66HRmn3xUqhdoW6gBc${(rBBO<1oV>~#HCMtXO)vr{YO4am- zwltkuq{D_NRj)i6(cILq7j05-WHRJiO&-GDT5M40Hkzy>psd4C%F3jbbr`kd)u`7N z)zg`8`xcxsz58y5iKTnmAyAed;+5mAh~(?5$+Pd2RX6Rf^tHw}&0@sFO!q^bG14YF zD=kt77>j(heM2+ymFneaa23|KZlrh-or=pO4}b-6+)ZzEuva=c?Hil}lXqqpJ(tWs zcd4;(xam2~{r=P?_rDD3N-6DnDs$EI2#&EK%x=;HyDFr``91 zq`-0UD$UYCI~m_;^04OE%NZ;u{u+t;R!1G@+MoIKW3A_%)N_R;N4b)$M&-|%aeVxS z3%YC4n`tJ*uspiZ^puY*yBIK<4#X@e!;`~Q**e!Zs7ts556}uY)CE?`Hw@mw)?vS( zG(lkwg-Cp*<(Dd8dd57>d$Pm)elI&ce=yqV`Ge6;&mY*+(-2Vr<0uz%7}tm1W0FdO zHC>3+Q@O5XgS8<6rsx&pjI^out9$o zmq`siyv*Rk&yONipG6n_G^l)l!{w=tz{`neW!~@nthBz6e&364G>U!#)n*!|KlReT zc<~LbnNrL;rK|Oi=|}UdTp(XcNy8D9nTF-gi5m7CY<}hPrhNcPR0nt#q%Yx#15lB; zW+nt)yIuI`(YU5;Eu<`SoN`&_ts=Qv58^|-aW#FWj>P!H>!&z>Lg*>`{}MisSKL-^ z!Jg@_&w(BUiqaP-CmsNDbe6`##t$(Lgd+y#_;kG{{5ce&;jBM={oDU`<7MCfOXw*|Q%32}?s3#)L4rPjitgow|Ac%cLRzsO>-U91L6EZUWH}v!+ z42X?MsxbZY=zSmRHR*Wy4$$#1*y&g?UbgV_g((t(zV*dBj1BNr5UO69(DdGrx^rI$ zb{ozXG6c})MJ3ovXQBlp-IF2+cE;d1)4sQ`7Vq7lN2{LvTN7Xj7OZPa;l`Rm?P0Of z*&$R9n40ojbUdBM0I$vg=H$EpC}Kk)Ds7e_Y@Vq)37m0t<)|C?HBeJGUUP z1O#<>1(i5sKXX{e^n>}-bW6O9icmuHfQt#sVNt2zE$iELpGH>FP1uP1@m4dlyjNQn zDI zuzR-&)%c`wx@f1wwLa(JF&+hfzOx>6q?F`mg0dB(Z9eyV*&fg{FxDRM1G@)!8n}=q z{&F!FSojKEgk<8|#b4#7^ZMq%w2CL&Kr3j__ zI(Yi2nbM)zm%d@7996aG)>v2j`WfocW2}E)QTG9R=1{BKYq%=?S@3ore=(+; zyA0P;*XYYeT=Un{J;dO;xPG0?|K!qjwScA!82i(b<#_f zH<|nxTe{!!@KxpENejlZlj^vIvy!(=)9?bBV2y+KNn;0Z{3x+@H#NoDB^PzWTP+v0 zF5`+}rch94y@H}v7SzePppJZu42?L<8y;2OzX0}aGAsyXCTt}WcS~_2D3k*Cb8I9zf^N|+rfVKYxQ;$Y!{vbvSk4waxGsX1$7 z!_1HzGnLqZdMsnS`>D4BP5>J-OhaG<(g8r53nYRj#5efvjYDH7CsHpy%-OI^%KSyJ z-qMB#wli_J4&|B7E*GIiy5ummeAyUgtLc3ip_yUsO}B(4?Ra`Pt%R@)l<9VXZOGX) z6P9Fgnh8sg=wUNq88NGgu(Z6BqISd|fFbBv4hC*aJKC}%EgJ1e zJFj`rtt7^B3?VoEuwf{?jW(xTU4ISqR#kt1_9P_Q$QkhSfFfyY#$X5jTn!4)pFem&Q#LtvaZ zaA2zu9LcR>B6u1lg|s|iE5eI4@^i>DIvpCQ%T(XXH*Z`29KLzkGkNodi=M+bFXWq- ztA!_Yx7@a9bYiA@CZ_==+^i+?xPvszAM>VBs;-_@uqgjn}K&4f8<(mHy>lhM} zhnm*!P-gROqw~?=b&i7(SJ>_N%?(wr!u!Q-aNfs>9a(Zw&g<#)vgZsJx=X&ia*Uht zZ}g8f4M|nKWhafCns=4%qP9-PhiP)4MV>Q6jI9ZC&hRkI86MjGbB(^rVJc``Mf&k8 z00-!v#5y`*R!x#Jldb!G{0GCG8ZP#s)<2mZ_F?8R+3aC&aSr~bcYgKRy>o@Id60{w zL=3bfw#CAtu>&cwBBp8l137BctA!!X6JMzC9|kp934WzvxB~{WVgcz3Icr2lmU%5% z3)wI~hYgd6R49`83Mkb#F~%D@C60GL+cSpK9on+fz3u#daM%Q1quBnl-trV_%ax{S|k|_ z1kpIY3TtbgJHEmk)HjOLNrA^m&1)Q2YjSuOX0n&=c<3(ACz!C)#?oCP@SM*Kg5~k+ zVw%^*pHysGNV?@#1tlMlIua15>3woF%c#Q&gGJ(2j!N;J_E!pM5C;s{8?CE@r$Y-k z?J?=j>pnk{?tJX?PI_;50+>s##^y$nf0BHPrQxlMv??i8`Wo*)-g-HEU!(^XvA|b< zu@=7a>s{miX;BhV18|1??*G|uPd{_DdRVB1>*O^e#W6K zX;L3}YWWp1CPPCYfoYXi>9%g_@y|^*VUJQF2}hvX55{C;Wm$7rRp?{o)>pGfn zHMUja$|b>E^#_dC+Rf92?abS3=4^%Rd-`(9JsSg6tvRimze=ssjepRk9;il79kqID z1lqD1J%+VXjb1=}09Cc(t=teszRAYgv8GJ+P1}Dv)|+y#u`k{0H;wvDH~c-mY1B78 z@VCEdCD+g)URd*S%pc+r!N?y@NnEamq)GM35Z{EWZS0ng^qp!~iuIs63!WUfa|Q00 z+?`5I#bGp?+|y_U`eipg{x^@-supK+Mjo?9c}o50KI+0GS_n0VLe+pS<5HebL{Cr) zmhItTrjg*@dXA@`<;j_NuUb)Zb!rI5^novLvl@Iejj?A8Ja@2wrdo+d4?o7Uh$FFj zVmkMaUrKh`<@L7@96l;fxZ3)MEW^d&p;&@i}qYxosJ${e|tvtxr)hn-2 zdM>aexrH0H$cLN<*t_Lg-klE51%<$<=>T=?f~qQmRSa^z4reuCkmwkJ6|SyucJ`Ap zXWPJ{Kz3N18yU^}{8l`?AOq!R&yQ8VY{=1G)c@^gTYq7#p8b2M|KIdwWfWfnvql!NylzBaVl=kApuyL3y-2rXQ?O9Y;=gML|T_p5DP>}=D zohl6TXycMP0ZEOrX+=2INtzQ#dlWlm#_d%n^(V~f=D^NPC7iA1ImfY+Fwr29O`$`~ zD6BKxLzLA}_POESqDIuYmkd95FBxum$vNuhZyhKI*K6HB>HKJDkDi%fV=K8W z5ud@-6;YO_NBWZb{4OZ);}?&wq#yZ`96pDp56DmaCqSG$tQlLrY%^Z#Fl~s=rA@Uv zXSLhQb~|M$LAv&XicBmush>!jhXUGPvGLo{@I|AEG=e#qU5=A#z+8QswQR=(vvwO* zHKDgQ3m#9*%-u>q0k0#RfA<|{& z3%{|OUDeplavVA=ORyhq^OVd`NiP}jnso9yl`|L$pm?yVa!%FG=>rIXcn>nh*VB8E zc1BJ9d0nK`MzsGG6p+D&FAW1s~+<(X}NbXLvesJh#Q*>2}m zPR;ja-bY3j>iAS$Wi*~4uIWdMP5XD$9d6ZuGcrV58*-D%0$FZ(K3UGdxfbr*Lfy_& zWD7&-lJdb$b3-m%k&MFB2V>0o8X%`cC+KtN3>hqiH^BeW~uD%m>OHpB(o2;TFJsu zDml?^Id;R*O~#r*nR-qh*VtOBBex*#HYemZ*u7Cyc}(W1Dh1&2I+LQyCTZnp^#xvp)TWM+KB*ZEd;VfPN4ze4y_SJXlnX=IxWY!bL>FPf-qdexcEhHADEf84K} z(6p0!*^2T=TixDd^ATk>AE8Aqk3VAEv3pGRX`WMTcdGCe5{sR8JBbD5@EnC(zGB4@ zCuG7`KPPq#?@soI!InSn^ANnm7J-cci98t~j zP1Sf#=z<9s}?|=3DTe)1sv2%=L#;FGq(|=RnucAVe6% zgJ={m#~xvL?WRl8girrNXD|YDwtLhb(#b#a)(iGb9<`2}gJ)DnW8We1qMR#5oWR(N z;|nZ?xz&3+U&X2w;CQfv04${xNW+`I31wN#Ss z1iI!<3%}{9aTXVVr}*DeA&@bJ=thDdnSkI+@5UAWXzXGjXbO|EK)NO;glK@?!pL6Q zMTrQIzGT2Ci*O1b>+YIvX@V8yavbv%xZdo|F)*{)u)qR%>Vr-RrRqYp@u+Hq?O$cv z|8cerkqX{JZX?Dj2ppn=M)hT!GL_J$ldZmh$7lmKtU!7?HGj1s9qQjr^0= zG&aEy7e)+mAsb>_!zc%F&U97UaOds}saVCa!XD5ABc9_NAzYww8zRNojs#9{7Fr>l z^u5WekD8r|k?L?RS{;@*2`q17^+U6oD^PS3N_^$*ApWBq-oHh}Vsu-bAz%kyG3M}% zqV35>&uM!AY(SI0Dl>8iLKf)B9S92it{`kU3QPk^jnj9=sCFR#*{}l%)HRXa?KB$B zwj*tkN;MyjqaBSr6F=DC9We8-*w@aq_9`|?5F<9O13dlkoSNyf$T@gwC_z#N9c%GA zLvM30y-6wS@VmnUSV-j++9NgJGL&}7&24J%cxNs} z*Jj_wD2(6ZSEjcJ_Zp!FvbYRE^F*~I@-d_UayD16v$BAs&h#qC+g+&{l^0K`yxi&j z<7V?I*|Ba_lPU80o|O{ktVyPO7Br0Ast%_Xt4b=kpziR#?Vh8hqd*o4ifnt*&g|_W{Ey`Dnvt~Tbq+Ds4gE(O1!Sh!L8J2 zlTL@50?ftY*LanK(FuwW5>VjP6@SsMQ3l>GRn>5=^1SN8cr>AAr;lxvGxkMN4W@!iK**vH90+(=XwiNeR^ksWr^oYGLdgR_0 zJ*v_eOru6+HOW}5&S%ML8(KMjG*Eo4c$={ocbVL*u^JsW->q#27i`4-j(25Bn`iRW z&S&-1U!T=ePiIfP%o1x>Ml6$Kz6QpLFIAgP`1ILj$8a-yl3YFhm64LGEAFw9t7+Mz zx{5rFwZlhEddK(fQX3h4)GjhShkYJUMZS*E*=o+%k$(G;7E`Ep3!N-w2&lh@#$NIJ zk&WHKJc`%tfGeE!i+h*ML>kk+XTtaE`!kFI0VN7w0Bb` z4LY)cjN&;7q7ZY}_~Tn5`sMu*Cwux59cfY%pH!JsyqV~YsCjDcB(!n{yGFPjqiJ8x zq=T*vdoQY# zxjSG5iz%!_~G* zY1J2k9Elr_n$18@d717E;h74 zB#;Oah!AGt#g!M5LdZY@a_9iMCa;tiy?|S1nqbo#JhvY>yk-dH*Vf^MHW{}wV#`ZZ zn~oEawRmJ=CpR;xe!nh!UE>gv{9ZWYJroM}rceh9y|DEp)8j#U=F05c8oSIpvogDV z88lLO*^5;BnM2F7S5`_r099$FJ0o(Nso|c1x|{&#QNud&K)F39J3qcQg^OR6v4iEU>a+dE3xC*>pr)lqdvmW@s4HtjnXW#zO zIxTVa_kOhH%kO&YWpLEum$u6HTH5%dAp0zvGl>})tb-?QDYGNu4@t9KKgD(V`t%Wy zyDv@DoN}DrI|x=y@d_4wA#i_Q=yBBI>lAg9pBg`g`2hLv7X!WfUVE2`_aX7LO}syU z=g)rQjyB|H0bfP2_7}73Fn1m0uH)QwHFw?N8lsi%@^gvL89VJ5o7~IYdDK3Sy<46q zvCj}s7(w?8ok4l)-mlnOMPBTs*W=cQ4p`o|B6&r!eDMWSla+%>Z{N_e-ofPj#cPsN7N2rx zg1i5aOvQcqm3|dE)$@**-$;HB8$55#(2~Pm-gEX5M=d`3Wk;8& z7OzMa%^n^-+nN?pj}eJhssUU2A=!No(pYYy#OdC1Y{96oL7%U*W&*^3W9s;B4ha}GPZZ|IOU zy+eoe9D3BDNAMAOrPMsj#NI#2w_PY7xxf7WLHb~U{C-i=)8zN8vlh-dYtForPMiJe zvyPvA(!7(;I&1NY3s}P@-f>Rf zfPBGO+Pc9tbC^ulEL(Zrz|v&d;?6pbWZ{**8@-Lr0BA0$d{!MC0qb-LYdc>hUG7!tpTGO|@Z(#9Y-_V7t z7N6UDmJXxdSv+)}%%;ATE0{cIuy^%&y(^Ynce)m1}zk z&ly;GzT}-G_a^)edx5lj2?1e5LV_C8P_NJby zr{C0W^CO!-PX3K=$&2ORgqA$?^}b`2``i0zpl?a99R%z-#n?Mpet#NxUUy6S&|LZ# z0gxq|(=UDQ+OtNMnGE6Lvj=()TRPZx&JbGnh`j4{I78*%0a(vA{d?O-F8xjUH#wL7 zc1wDu{Hy&P`ff|9x$pAnLvv}@clk8??(cTW$vztCIaii<9rT>NOV+Qv>*%I;@xf%} zc|*y{bCR=Hp0{G@nq!jW75|WUzmqm#zYfYV=kR9RrY>LCm`fih=@;WX8(GtHIlazX zVJFz?^ZJ(bBTHI8U)qLq7JEdO{5yZ;;8M5GpWU0tE-%!X{PYd=Egq0VcBthX{ZU!Z zt#z``yg+_mVd*FQx3jE!x%-_uvvKc$HqCRt*twRk8cK#%CiRu_*1i>TwPd9bU`uc) zCFcv32(m*6$Me?oy}tLDV@^&_|JyfY8GfD1ebSB-*K#x|pCd9-uTmHA7kbbw3y1zle*T`lPT@pss(@>416vOia}zqZKl zSvapT$8+g9p3NmI(p7G&yOdunEbjLn{Y`L{erTS$f_eC?a8Q7M}wGc&X47 zgXeJ~Kie@_GqjZ7H^jFdHh{P4%zZ(-p7fzKbmHH+S2wgb_o_>~UVToe7<<0#Y*+4V zqpwu&-~L@7V$YFMX9wN-q6bORc!{S6c3GZ@K^dmis$e?*F#s{vTWJzt~dREDm5#C>Tq8`v%H_+?TXAl$jLReAV{*=p>-W;l*UKV`|4Z_VP5C!7 z|IZ`J-;MnJUhm4Jr8uGv5>IIj%B-bmIr{3GcTrc2#)k zb<9ZaMp|mP6@}X` z-KS|zY-i?M_GudKhnRWUK01gtb0;&e*hlA~4tcuy!^pgPpT^`wmm>2Lvv|dlKAH1< zE6?qd-D{w4G5!q<^qq5_{27pmHqf{7Jo(eRVhA^cZaTXUfBV+TADjS-2Nv6(fxb1% zdENJV`_n6vVdY@oT3JhL)<})`k=pPxb>Bw2Wq#aoBbwN=Z_~%z&&(tDZG3jSbTKoh z?c33tl8{3Dp^Fd}V&6TXklx1dLuA~g) zWgkW6O35r){<9=gmYHjtUvvjE-;m3clJ_%ngMEAgS>E&!X1+Ps^OCvoW5|44E>j-A zj+vL+$89@rW#%=xOzFDq%zSSyQ+nwkWFFGDM9wpr9&3ALzP!G-Zwcm-9R7B8cn|H@ zXtE5~bvL7?U*$5Tb+!Np1*1+NwL$ain z%fDXy@w^A0*RPE66Er-Uj7LCD}TW?b~aXn9-!MliGwvbpf&#? z=C>WtN@MI~emtW5=1(Di{}JVHX8!X>l)sz#lSkw~$o!X%sONFyFI_C;=$get1B=(3 z-M4tnl9g+guUxbALjB%>3(v**aN)9*=lAx>(Z<7VMeq4*R<0Pha19T-HT|Gm`upVH zg+sV~o@73LKr6kp<5slcFC+4wVE)qwH0HDBU-4<=`x9H+d=v89qlryh#5QKO=Q3rl zdVrbxB=d(0AR-!pG%mkezA=Gmp>J5NUjt%7?~H zNMmCrr1zO=Z}%^JZC`I+Z!ZpV*~eC%3tC`E25@O#uTTR+eHdttx(s9==71EG4Gx3- zx3f0O`&RTVIeXcbTrExpr1ym7cJdP8U7oKR#J^owG`RTu zv)1-5k)FKa`6|8tu$AP^9vl>Af7N101JBhj6UJP%RL%F!8Cbb^$eT3ky*@eHr0tSF z{RJvHY`(wp?7DQ;>2j}Q#66iR@-t-b&F{UC%DHnOM3nRuFHkAnYgRNyXJvoyikl=K zTl=X)gT0HFC%rPwmL}&f6FN4l_{38eoZ@YhatA)QJoxgyC4(#Lvf;^;J^auko5T#> z!}7jf`TdCeJ0zEew(Z1R`u3Ll+gk2_wdMYOE$Q#Il>c$d{fDh2-K8O8dA|G(4W8Hg z*nzquxO;8(-Z_g0)*xL?bQ^K^V|#yvFbY$X=4ZQ1^Lx&)vK*H_SJE%arQg<){*0tw zmP>!uSczaRJwKQJyrhrKrN1EQ<8tXAN&2vs^gJuYt6JUw@{jJkWg1~ ztjA|G9$$Px?s510$3xXdr4-(A%f2)yoG-WZp~1y{LrLHARRg5!btndVht3;Z zfkR?N(#w60CjnFuvZ3`3l3v1|hh1xF-%@OLjdq-~oa!_0(iiIJtoN1oYq9~6WASC@ z44}i7^etCe>P;`yUG7zOR9yNZtB-W)57^o7(zn^sbm?DMJ-tgmYI_2MZ=xV7#^ty@ z-luc_&gXYdmN|PwG9#HYW#N?9O*yw`P0xm&cTB%-`p2e!e){&AKbraIOn=^f^A4K# zidUWbs=ilkc-5BI-tyY7z4qsepIY2`_L234_2u=q)jvA;wZUHvw!Pt{Z#el4t1iCk z;?G|E;KlxBQ!ZO@+4-B_zxm$HzrSu$LH}3q3&t-L{X!r=1{bABu7a{Bm!{0@a;b~ zymCRmyBrv)UaBY>X>Fuk5K6U0<42{yE0uz>?NMn*6nMojC`tzu%SB&1Mj8{ELg1Uo zFP5bvOsJiNk1iF9UfBepbct8;wZDA%`amiQ3&m0pNGpm)yUv6K=}hT!c}=k>O^Ljs zc4NseNynCoMtUy@rO{pxXpaWPpj0kJk&I&5l#E|47)i79y6<)QRLSPBYW6cuGGjMP#nxryZarJy7uTnNKJ`a}9$ zI<4g9moY&x!iblA8KI(dzx1BeZKqwK7=?j+LR6FuGxAJ`UX03RI~n~b^o@K+D1C$7 zN~Td5g<-j5r>K$JUL>uPE&``46RQ;Zei#+(%qD0MN2NX;4tc*ltCw~-0rX=%N+U4o22m*Py z5Ck%Bb%?_-^dd~{NM0h74xJ%S`^93(59~tmW$A^XOm~@H@_7Ne1kVS7Oo+&?A7hLs zli%~hBG-07ItDe!AV+dI*<~gFNkLi6NR%SKdocPz2!g*?$?t6k$0Sv^+JkQ-+10zW zcVK8S$hMy5%K9!mi!2T+YJX`=#q&wlsK}*HvFW>3{{B*sNpF1g=1X3eEGLihlXDG$REG;o#?^v?jPLp zjXMq)KH|f{ix2$ODbfLE-Jx4v_vY_>aq#`$f8foB?YGZ83xC|dYQ>4)8vnr6|FL5A zCtrNaIrnUxeDr?L|EKTFnlbLQT}!sDdCm6yAN@=3@2A}Hnm>Q_!3_`ocE#i0eDuMy z{(NeoxsRlOUbeKC>Pg{j&b{!krGtylUAbaZf_CYl%NMU0N?wulcn`_yRsLIS@!Jn&N)<=?kNXhm`+YlKkL+abI&?{-rRYootk^s z8|?Eg{Utj#F8!o6vz{D`Fa*FT{=ZSJ6}y!&xI}RubAd^wI$u&k{-0ISJwAN)w?de(SEN>pJST)<0PXj zkV}tmsehbJWC-T4U97r*;8hfg`{k0Eo zz5M3Y?_IoeC)5A-w%@(*{MvQDe#6cXHe}xNQ!kkL&UxEEe$CD*)Boq2pE>iweP+Dr z6FWPYp7xJVo_zG?_)Gt`a}v`Fwwy41<*%=~;+H!oGyTyJYBl-cwVVe*9f` zzUv#`y7c<4r;cR$7dIcg|CY8RA3f@+8BD+9lSdu=u3&-vKD{Kr!ROuzWQzWn2>p7_}x9(`(v>DxB!`shttKmF;pr`Iw4wiDM46wW&P z%`bX-Bh#n$+;!xlU3Yx#xTh~;`ZX`U{hgOxa>_OT^z>$?zp(zGRg=&E%TI=$zK-e3 zZ~Mh<@BhM2K79GpH!!{VqM=RSI_o1(eB|kynf}&$Zo2%cRmXqs?x$~Mx_`g%cRul0 z^wys|eFxK@IsEY6*SzSKZ~W!yyP3Xu_zm~n^Rwfw?bx-Q>Ef|3J^1eUjE4^0bwAVJ zxpGb4wUZ}*bl$E9nI89b@8aKo`pr)*+4T_9znM7U%B9gS?pVL;5vI3qTDY>j{f^77 z-Ss%rQ+p5i+3EX#_S>J@wR4x3e*C9$*c4`7_f3db??7T>2M&gZcUA3tJp1Oa{N{qK z0a-Qa?egX)E_nHIZ+rpSNnw8XD}C(^-+b4$>6Ud}b;hsX@XeR4zx-6PrJlEJ!>>Me z!}NdukLBKxOwX>pd;b@|WWoD4c{7-P$&+{AfA|NN{Pu(1@l4;e_1?>-_x|{nFYr9@ zydU;{Y~nkjuU`BB*-+1W_w!fJ`pfgry!-bw1oynt|Fi4EQ~OT7vfb$U`0KZ?nz;0L z<_9k^15BTI{-f`{_FtBNaF!Wj`jY;OZhgZA<=>xS)-ip4=Z`M@z(c3qdcN7n^q0Q! zp4VM@>FX}N(p<*$Kb(2Zy3t>cG-3B-T#RDe-O-I`XgOGzxB!=9`L?D2FEk~{quiv`-(fS`OWz7B&K(N!k#5sOgKh~1|_#RFi;l%CnIwP5Kcrs%~a`fQ`<(~i7 zmii#@n~+PlTOp83&umF=ZF&CYG27FPqg&28SVUepCEtbz%^toX*L3&Hk4*D>e{9pn zQlLvM?KVB?Jg}0g zg-69C#XrA0D(7`QX9`7h_DgzRl9j(>%<@9!4y|d>MY46dXTD&cIke}{EU(S>l}kJ7 zqIY)hA+rxT+b zwCOKjeD;#1z2{`6h|UFR!79|->VlLkI%VaGUh9H1svR;UX0V#=Ta!p*hO99!3QCUD z|E{BBin2Z{zx%Y9@lVGd`48Ryuzc~5&|*1CchNxaIYUV@*mv%-p+)vv+mZyi$0Ti< ze@x>2`DhitmHxltzB;Um=xg`PX%5}e2uMhGccUPJAfR*!C?FxB!lAnxC8bM1q)QN_ zq$H#i5EPJ95CnmH4)MG9yZ3wUKlhJ2JP)(i%wBuX-m~^Fv)*?tM9)Jx=ta+Iq5oA8 zt8t-2B#54aEH)Q(Q$9~V zK0bav0X{)KAwFR~5k65qF+OpAK7M|F0e(S#A%04_Z{ z@3C}xgjp1Ju2{QucRZ(CTRB;~o*_t>nRT(YbbILaKV7sKyK}?3TN#~PtgvWRhuAq7 z_TSQkADFvXTk*PL0e}mdFzAZ-`J1sh~G& z|G~Tr3WEQy8{~i6px6y0-;PyHmAJ>l!((h=ZENR<#a^)U&W8qd}LqrWYAe(x{q|96CB zMyd1X$<75Z^Pf8Ij&^5AyR(a(;~7YE?nP0OI`^VbUxeXZ%BTx)2LuNI2ml4c5C||5 zi33K#aKQvnB7hi70wbj*1IWRYU@ClC7#)%UU;*r*4&c|2DsVG+2s{EF!yCt$08fIa zfqB>h_y=?ayveu?JpdmfT9z!NbeOu9uOW^D3{fsJyZH zJscO0oK8Yk`F26!z{hL^6*bc}8QCA}Tc=&!P)6o!tn7kf5^5SZwRQFM4UF!am|0re zIJkN~_YKc0d0p8)T=Ck`Y3@sc3DZ*;1j-GufdITbXn#5gKOrrY1&1ES2~&a+Tt}C{ zS)eRXcBBxl7DNcoPZWm&g}frEEDo_m;_y+xu0m*FfSefg28YFkC|u7aY2sH%%X2r#{hBT#-KR0v53ogP3afFJO}#vK>^KK!O7ejpza z1uEtR%wILVK_a-@UmS5AdLPb;QbDo9Nc}1$(B1c}Z$QNn#Bx~6NjX3UPH>=dfA|R! z0(5W!DAF%74C(;Ghu|QHV$9HoaKD^=sze|q%*mSHyIuo-d!9jbcmlSBuIgf zJW!hf4o8o3!ep)j&fE}cDA-Sqfmi|t_zho2PjEs3zj^dN$4w{-3JxGvx+#tBkb(nH zJs6D;*pGk(cTzKC!a8l{GrB zy1BJ&d~$myASfcQptY^*!_f4MT58M3?!h5-ty^~uO-#e0W2$QF+TL}4m?Wm4ym$Z4 z{>dr&(c>>)2^bumXz5I!`&7KvY-*;Uq-Ri3)w+dUBtE`xyT-<6w|DkjTw~nalUaFq z3t!i@eHfbjnhugnN#%=S7#tcM8$8vzWpodLBqUzk$wRP|59Ul2S z_2c9e#AwRo{}t-5grtGOiT%n5(4{a2q#rGW3JE}Yp+Zmu1VF$M#3*e-5`-QC0;NUa zK#&jw7Q}$yL17SFI6y!S(?ZZ7?jpc&N<3|-B7__BL?eb1;z>a1u9-4Eg4$n0_rUxs zA=GgHV~8Pw0_O@2*6i#tON1J3h~R{&ptztIw#&d1xYx7bb}@v@1C1Rwg$*^aQmZ5e&V6^D7e~ zisN^m3|)^z&yh<)P;fD%3K9?QhD#4If*RtW1Fq1bC~$5<(c$pYJUmJ$e-6}dniYWu zgP{wE{Pqw4<8?UZY!npT3Za1z;{P8H`is4(mARYw`Lmu|;ru;X>jF@}l#MPz#s14T zj)k4=Eh*Vc!RhCv7shz6%wN>VLTLx0}6;b)5#o zzor?j&boRLadCa#O@zIx<;?yZXSZ@A`~?ld>#xe=Jdqx)+Q7vx5B(R_QtDEpG?ly; zzg>Glfn=tkId<{&thA4O6ur+#u)Md;cXBH$`F_wAvRb(KwuvBjOAE7V^BWt^h%f%6 z--XehT;)&7^!ON$C?fa=USHMjm%N!k=^(YzFk3F&MsuB|RpYDYT+j`R72PTP*SSLF zkLV^HN(7yxACHARC|{O~v~mfCCxQASqk4-wt}xtweN6B`t+D-hYg=;c*B6^>G%Y0H zM{cPnNl)?v@7^%m=c~N|gvQDENRAEWbDM|>x4g=fUlSfQ)(BG=YH$zsFS`lXsb0wT z9!v`JOTbAS`MIU&%0R77rEv5!=K%L_*Y}@fLj}43YtESY0 zj%%3ol2R)f!~89)B28QwGb@Glj7=SD^emd^ctv81y66H*g!aR({(Qy=bGq&tdSyV@&Qt$GmFx;FL_{tgxBXxG%9nf8Rs@fu1=Z3q8apW>P` zyuEM6>TdA$kIC$JP3+_0P_bqbnGH5~bn~zEJ*X%W*6olIwemPV`zOx>!EPmu;Qd!V z2K*uSloIH!&L7!tzVW`9S#kWpg}mO1<8vcy&CKx9Gu%@M-V;8g0s2e)`P9HT#f z;5AnJDL*;5Iizvt{hNnZJW|8*)MBKHN;x=qYUe|~B%YLhq!zrUj@vjj`#6#em(Dk$ zeLKsECYqh-PW0<3%_WnH?RA7kZj}Jp>f;%0^Nc@JTr0hfu-92-{A^*P_n9P+wEV4? zo^beXi5kkX<R#(Dzj~``bpu z4&gH1^W&4`ccue9E*8b=8@lwDo_BA;CeoKHE7z)UME0eJO0vpU??jr%Re8`wLfr8K zl0Hzf*l#uLWsF~QQW_op=KYthT*-mm6?Vg;%RazjaQ%hAI!f`c?KiFQC(0~Gz)FW~ z;m3r1`Ik)LWBMCj;N0JY#P2-abrc;Yl=Oun<&{&5OFSLINKpZoo_^hN{ceZU0p^(g zZej^(PNFrwLqth5A)u6ZGg#zq&sIk(&e^1|#r+r_1 zcw1H=2CtVw@&Z}-7H{i2RVZDdag?>2%BEEH(nJ315b?(}y2B6rzWhmZ0prAziu!VL zI{#>Ww`87&yIgaySrcYgvyogfDUGHrAKHY0tQ7^O(x{_oU)oUL2Z!i1+>B-+oA1wD zvY73&z~VV*t@l6QoifmBg_J3&Du(njTD-NXK4p8wR6I#eMYeiW)Mx?9I^DT(iJTPI zNSk%adN?sXBT9QiIr#q5RZX!PLcM;@7k7NKGk`y8_GT(My4QV<<`ZuPg5RY*Qux=e zNjdSo^i=C%9}jUwj7i8g4%O?P z+A!FzqyG*D?ot>QdC@LY%l$yJE!6ps8dQkl4DiPgg~nFauUC&Cw$g%dWlyTfOKN7n z7cvC*+JkHd2V1_Tk1Zt3#}(SPD42odb0#9@SsvZzYU-K4M24<7hPv*r9vY}UNRHjR z=R2JlX0Pp@C;plnF!AL15^ksoA&{ zDl|4-gZ_y1qi@c<o zI#F`x5{WWE)=eO#yPj<*fUc+S(}}X2D_85gX>f90%Gag~w~uv4(z4hd zSlsA^j9LPn2TK1Y3ObC31m$Eh+4g{3AC^eb4E=pxBW3De*w&(@~T=zWf)^5?_*I1WYUT3#r5!P=z$P*bc zsUTG$OiXJPSxEAr2?-4Pla@+J+92x~X!ulbk$suft=(tt?vJ6cW!~vEYQamS?dp>) zy7J9XNwTI_REuqw{GNwu_H1^5-oNb0?R7I6^}i)tOJPbbZ!_KpQ|yXc zyr>%&H7*+;Wa@Hfr{%vy_9FZpL=prnpEp}Q-p~A06r92j0lz#ouK3xa`8F7-TlDWZ z036`EH)X?}V^P#+JNopPrPK1O%dlB`*XHk6T%*X-;najTK*9mQ{U{f^*<5mTmV&}wp%&(XNoZf|<3jNflFw#@c4 z8nYN(xGFy)?s8 zf<`8tX=5Lw%-;1-i{OOlmz(}BPiuVcL|q`IiY3gq(#bG0}tFfeyWfi~+BqnoS$IC^G-YZE52PiwtFce0p+fpKtDT z^Md-tX4oimpV@005oDLwOST`wM|WQK(FQGT6CrcYoJiT`scaq!JiC^W{;LU#TSR|z0k12I&TnqZKt(uVSI+HNJ`$nJ8 z&f50shGBiE_GtZ;U-MkLoigw29`L#9xdgc0N{KuomH2Q)L7skSP0LD~x#jg?D)Mh; z{K#^^1=20vrctM|ul&`e(0DMp^F~-eU9>=CV}!#k;yu4-HJPPW)&jD;#g6b?J(t`U z=D`y!Cnp3?bx}P*?jg#+F=?=fsp%@08@%O*&T6v!ztlpgXdSZ{u^Lx);j4eQC4EP_ zp!r3^n&ns$9z0XuwZK=Vy*V1$6xoEV`JZk_85m%o_wp5r-CP+Ie>)6^`TsYciZ*L7lKxW&_flls8R(d<`RP+Y2~1xp)jVo@d*; zZBf?AiK)#b&eGnk(aP&6`Z>3xtwK%GNV@dU+(PqrybU@1@?>`M3MF07-$uqt53`Q~ zTfr?X5Qmg8K3Klo+8>lJYKnED!8bZTTRlc5_22B_|W}F zqIl@VXKDPU)NwB%e=pCPuuq*GT2VxFryBicJ2(1?L;@SdZyQ{9`8s$~zd?VJsF=?l zYQ0&bmC_-@R$L(Moj544cEVx7B<&hf&k<@fK+Dr6}pZ-wanRP9jct| zK=kQcFeBb>gXa?7g#EL9wj(bl%k^)uOmWPUv8<_mLxdxs@I?mx&62M zV&O4waEHlKsB@>kckc7;n?_nqY_3m?FPRul2Snos2z!aO*X*@htcy(%B6_I(FlgBF zO!ceM%IP(pz_kIlGG$Ju-didT6+Q78@g$($2wchjrf-z+Y418EQA)Wc$3dKylG%)q zSi@y<7#)#4N@1XOt+?aP;oTT+W)cm5mEtTb>pQ)svdh`gs@PknKUXd|0u=?0_53^nK%fP-v22X2bNxx^lEgsp;wq zUH9XCa7`##&Ce^~{uyGwqS1eEAqyo`IjmV7EjkmqI*4bll+wmc)wfjyAN{zIpAg9X zz0WsjhFc#`F3;I1`hsbq)8Ig;{qbghH7i3QqC91|uuz3G55(xh>*?CVGGOB0!;Tke z0~(8#)Q>&n_WhH4C_u=I28FrwIS6_ErLXC4I31P9mgBtD9PBq)$C`6e)E1)NL-c1+ zWViCWKs`%V@8mA`^S&v3MSkOK+3y?OP53Tew9?vfm&}&yaf2zAH}l+|4XV9en6Z1& zNWCD_`Z~Cm2K<6)T1TnlfqB|s`Ms5++z$EDSljVmoei=IX)cS0`BXR#jb>db)MK{2 zSs@>13C;RptM#=ljJ@xgLRLX{NX2ASnQd7%9!OS~tTF=}xZi^Dp0tZ3UbTLWa;eS! zJ9xpQv6HzMMX-cC=;(-dt&dFl0VSyBBca2sZD^2G`|Z&Z+o9%U!uhMaioHmKdV74m z<~KF2NNt4}y@1Xf<3n8b#ma@KPRr@;Yo@y4iOdMYD1ve^BOkSwcSTpqyw=rTSKj{I zy`5ncz^%k|C6$e4X4X3T;Gr`A(!nKj=hT44sy{QDrfYh1Q-nLBOqQ2P+DFA@(IYOT zB=DeolCa5sfbKKFy|u=~HJzq`;MJOrEE3h#)cjTPe6}^;A{L7`s*|bAvIJJ4(N#-X zqvaCWRQSH@(P1*=e>XQ@1(dNs`5p}EQgKEb)s?J8=1p?Lq!c=fOfQ*2nqKgJlHGVw z;x-vmJ<4eGFz!-o#OJ2P2}gpu>lszq?+G$0DhBQEMW9Bl+@W83+;xNA+FVFVd^Yuqvx8#%_#RS>N zB$ubBvOTdZN-EOG^CAWPm@|CmQ>FWiq)EpZ-{4BSncnNiUosxhOs*Ex5INFs*O%ZU zN-eHFW{qEQ?t_vhzv&z4(QC59udHRlKkiC-Y9U;`OPE9v!x|( zlrb}V&^#;-e=c4@jl@Tpq^y_fF@4b8nEfzyRUZQSK!Rx3(3y0uJ_YBVgSQ>4}dWr%UNBzKHj%;ye=TW+uw zM2~-53oox)Z%h=`laEQzj5V@?e0It8(eP&{U!&ULlTG9(ER_%O!iF`a-+bS z#a;o|a%3dah4=PH`}h>INez}9aqusgUjKAMuQ+D(MX34A$JLFvW%>x|4O!)ycuZ#) zJh=uZ>CW`K4mr^fNxI#&`Kcl#c^}5K7tk^nAfY4auJny2g)5S+`#wQGCDO&IdoJy$Ij2$+dwBp=b z(0t#TnDo7-ILzxoE6>fTvPy~lXLPZ|s6RIV(F{Vu&-ZbJXIW~JB7bMT3k=jHC8)Wf zK+3bw=u`>+m2b`7f5BuMQ|3{s3z7YMQo_=Yd;0UW`lL8{zFo|I>-a{?;K}zHTFp=+ z0wveCDfu-b@}|yV{Cr6Vp{NJ^{|3zii9H5NWu7&PaN>6yH!FBAk0-WGXwuk0pTr7C zzqNb#8rC8jOjPx*Lp@!#fH_c=MzyS~@D81e;4FHGkn@5$SDdFMM{3^rN%HHhs1!$% zfHhWrWEriI6>9R8voz*c-q~+w>4A&wEkUrv8~O3GB4cwaNPhXO$nLNSlHWTk{skw2 z(M9=;CS4tpdsa!U}LX%*z+<7m&RF8?3Yv24(&b4w8>Qlg=rFAo(1ugg|>! z*0D~02FX{QiLqsl0-nJkAo+J^V$EHYEX9Ljko?G*n6oi3NYn8NBtMT8k=cP{a^|-U z13~iJXL3(IRcu4PQ$9!@U4xY+2pMF2%qN?r0H&&hXLHyCHsny5Qkw$J3TVEWxq{I}X^Pm<3JL5Yl% z|EKn1o-ElJ88BOKit_l{GIjJVs-I_ZV5LLGt)fH2^&?yHXUy5Y9HVj=1jg1~ip?D* zmnp5WL-j$iyRt4B8%;J0`}p#a0p}AK?9&DR5+mm_gZ!5welJn`w;8{|^cK#A&Yg4Q z%gnLh6`se8tz485cU<`kI6p)BY9t6GG{CgWsyvaTNC1oCcnt!{`*Kz}C*OQJc3Wlp z_cTb3*!0O9o)qCnmfxIDK8J#O?2qhFq4~O?&8^x5f>MyTvNsfeE&7u0iT*s1svMi= zBES9kr;X*SAZ^uPU(V?Q)!PrX3go2l3R$LXO>1Lg)2tDTL)tfnh93>d?|-Y=JP96r6(Yvx13Alo9#nrRv(5X6uXUEYshYyb(+N8o`JAG-{D1LiyDT`~VY(?lx zOb&)@lpot5({LO&#e=KI`0#P0ON^!kY)QM=YkwCW-c2 zZZgGvD={KV;+wS-?hQ(uB+UCoBX(_dB#jbf^Myqa4Gg9|B1?~ zURd*7XkK0gDcxK7)|OPu(ozSq(vOFEDm z@@M;Ra44GQUy~%6I(!{`LO$1;`J1$kU`xI9!#{4aHtujyMbC!SD*HpxCzc4Pp{OZm2C&Vdb}as#GY-}Ow7#GK3P_TH~0X5 zO#u0xbE5QmCI08pSfDdDPZqUz$=5xc_nPjuW%bgL)z7KwtIrcNyb@OrINxO*D#bB5 z{{Au8$>c37_~wSEIc~R+NhP`lc8}k{@7A3O@o0}7_u1^LAF8A)%q{J1_B`?rCtu{J~l-TdfrObg6xi`vzsklb5pWR`@?HF8RTU0k;HNhVvys z*7yk?)^2-VR^NQqm16oBO;?)i+a9F#(`yZpMx^MIl-cMCWykRAtS*10$lS@- zS`q}PCvmv;Urk5Ts`oXf6cKFkzgPHQhG462-ib~_9$ zLX=M(+W69R3uwuM>r?_}0x3>awx0Q}3|XezT3@ju`R-^MNnUYl$IqwTOg6@+|Cag% z-#TMkj8M>|^&72TDS*bq>F?q~d}`Y(zi)Y+0-SxT|M<^-&j()DDOaCqP2fFoR_0;) z-0blWTXwqJIe_qlN_Ra#e&=|>ui82vN1-F)^FFHrb@4MJCI(Z4ik;!zAL#~mm8(&n z?t-FWDV@CBIqxb0XsxOybU=X@{OS$|>_IBFT+)atEhJKt7`l zWlQSkPRZhB?b=gsg~1|ORur*6t^=7pxIqWVC2 zVQ{;pS~~0xse;T;}^t}E`6Y0Q;g-Ec~CBz+7oigCqE+YOjT}edF{jp8X-?b`xVO1v<){ ztFx{Qhr5dI&QBVB)Lkl|Nnu60v|bwOaC^HiGX&Ghho$ikEGaW)LZFa|_;~HfgNa%N zDdWJ=V&zNzdUdgKV?1*>u0WmtFOdho3hBuvA9$2Kj6Stueys%F8eyHnQ%ssf2rw`_ z*|0Yk4yZ@0sJDDq^8Hcpsi>;~oL7Kj@$w-fg=tPKl2r5o)8)m>WE5S%>26K%YP_aPE7QVcZ%F?lBg?EIQ&b=&?wIA z(Ld?=HqfQm?&XoAE*bR6^;7)G#cM;Pft`&S52%7j_fAG4?`?HlvEH>a?l846sP+Mi zrHy;>wxybTPaVm6@NPkZPc;mVHd_xr4;>Qf9hC&ywi)v@mTZa*1^m^$-k4N;U?!;7X?jVB0@8SUROu*|om2U4n|xBSu7+C~ zfmHTliVJ|`z>Tr0T8NYZINIczmB5a;ycNu?>6l>=b&~T{8vxOk( zs0I%;?LthJZ2u-c-&4BL@Y>vO&$FX(bDoB7R)8Y2kft$5fYR0O`jmxLLfea=xLo$W zli4ANd(6}4p0B|_g!`-i$&7U>>9|hcFD*B(1lqPT3at+9Nkfqm6ja`{9Tg5;!^ic? zS4zT>_b%ccl%?73X5J|ePqUOQ2w{{;zY*;DXYo#%h_BR8Ofh?Z`&=PK4UPTXz%1O( z-=BURZ;#)m&B;}IWUcta(DQv=X7aT+Re8%AR#{}`&dG1BRhl;$zTjsWONSVG;r(Me zz58>mP;UhO7O(hof5@EsDMiAs&~XKpokE<;_zK>i;ku7Di1GY*Sgx~geOf-ue^k`- zfFgz{L!a8qJujv?M9J1Zdc4K#?S@y|Zu87!^0)tkJxzmO#&bXz z4qCpgGbkC2mTb=PN|ko9J}IYNVH@8G*0Ud%#GP=f{PdZ5@o~7mo4bWI>_d>cR-mmu zcgUZIBP30&-C~6^=GH*j0ej7dph-K&1NeweV=FKzBDnDK4J%mrUY@_J5T&^axP3j) ztWtr(Me|iGVElIyyv=qQKe8)dvmXUn=O0WK>`?%7oIcjcaeoZ8^^uohY_ZGn$_oAz zxY}(2A{^0t!1W%-;KKvt_g9`z+jW%9{Y8cGc>el_e;v?IcP{LIR;7^hq4`BzEw0=X zvx3l*8RLYozoi|*c?81=2SfHJI>HA(_w|1(YLdLK{}TZFauKhh;T+*D=|0a)N`;}X6c%)X&w41pbu3x>Jw!c^q|A>(39vKTtEaEIv*6*JSU*H)Og=-Wx z#EVc)a>^toZIk*@hN}k1 zvsMXkXMSH*%Jcr}H}^uakjE%Lq4mQu>&ti?e9avBLh&oU&$4NSij;{yX=me*5UYKm z*IbHY4C7o25P+(bqBb-V%#3RvIMgoX$p%sCYZlQRH0*v;fG^PvM%!eRnvq-+`RzHl z8c;EcrZQ7-c*Z&Tj*n7diNy$!!*DVGeF=qmWsd)aDJY<~&Pf4PkRse1Js z*pf@7$PZtEBYEUAw1PLylGqudwaRmm;a+j?7ul{iH2x~s$u;N?U!Q!tH&f+iYxkO{ z!kV&e;&(w@8pl@Ae9oi3GTAxDfl8u3ZNIO7GC<)RQ${C-pUx)!-m2U~Y~8%^Z*J;k zEdxsWASwE<6*R7wGQOlCn7=0bx|EPRpg@wM3Kl~kSNJPL zv!CODIkxW}-G^!tqT5@mj52P2xP)4&mps2x+_~n!Qmh$w8Q&CrXTPI1Y?zv{bNE%M zOL9dO$6HsHvcQ~`-|r*!38kj#-Ew2OCzpF4Upb;o4zmu854HAwR>12M_2qBI(NCX} zy0w#3n%Jf}etplN!vgwo>wFnsCb#Q)UxXbJ?z0O9nX-k%B!xqAuPU4Qu&i0(Z2 z-FQ7L{4$;@h+DDJ&YhF{MfD$B`#n;B*MA%Y795f<6-;-5u3xFSF;8pa8h@(?ka|2; zc)}~&@0xy9q}Z93WpWJvlkO402@y~d@F|jc1D?NPNoL%eSt6$)02LG2RU2Gy$%%fPy7P2iGOev0ub*u?Emm)%<$a=kk2dl3{S{-S#U>26JB8 zzP+a2qu0U%qdI$*6}Z0NPxUm=v|I&>Z3$e{;;5!u2-~3kYsSTm%fY_8+jn>90(9@s9uavC$mPgCY2>h^ zS$NYBmVxT`?SZZqU&f~?eQe1(RJOb$xYO52$RRM9Bv-ELMft3_eWG=&*w8oFSZ!dS zGuBC!RF8$l%>{*m-NSYRHuEO7k1fwzh6YxDq`ve_siz$m zLvvlk-*xJ@e78iY&U=!jLbZ+8Hr>h|&i@-QxYCdJ6|Cc}lhpH55sw}%N_ae!9Ps^0 zVPoU>J2BVHV4scyp0O}~)n2t@y#AY~zFXC2^dp5^#AuxSox{6yg0na2RQ+gg^QhM9 ztR9pv$&$`5r{-8L|NZ=}fZ1bej_``XWxSu-leNM%9KyT*OUiyLJ8UQkqlFivx3!BC z*5Bc99_f!wuonPj1jWJ3K*prmAQDPO20TVHhAl2e&g*>HoK6L1T;QU4F8ZT+ZqNy% zNam@T$T6@W0-&ynvfwX>mJ*nY^IlmH=c8TF_)Wi{B`1`lLvOyIyKQfN=a$pLos4F4 zJ@X~E*)|Je&2pawv(sX728a2o(4@Q@Y&7zY=j4yHMaRHT zLuN1+fVo-(wnZ=!jsgRG4E#_&6coaWg9m1Wg5hGo*+sy_kYI2s1i%Ln*v=r}ZaEOp zc@+eS0?Zgea62#v3ZNLl+F%eit^uF|!+;bpH3>ezilo8?04@k0Ho*#}Hx@tR`rw9gGAvvC{^C01(kx0&QRsNP?YZE`hQ`pg=yR4|x~}d<&|A%MX1D zh!ApMMv8*)W7mjj&q{Pnj`EiV``~aFg7V% z8|W#Hvx}3JyQQ^@D;W9E+|kzE+}0X^>bSeQf$+`}ySlnsTX9=>L11S|7U}qT!~}Wx z7}@`mY>`obPe6#9pPySmgahtj{t#0QewM0I5YNNh^%1v)ouielwIc~OX`HwKBfEgP zkhze!pojnmNSe?Mo6^zE)W#b7KdP)(y-yI?a4bGvytTf6=bK8P+pIdcL4s-oe5 diff --git a/pagefind/wasm.unknown.pagefind b/pagefind/wasm.unknown.pagefind deleted file mode 100644 index c9b6339744030d11484dc138ca02921d87be15ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67201 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 diff --git a/requirements_test.txt b/requirements_test.txt deleted file mode 100644 index 9cb2f28579..0000000000 --- a/requirements_test.txt +++ /dev/null @@ -1,6 +0,0 @@ -# for lint.py checking of images -pillow -colorama -pre-commit -# for generate_release_notes.py -jinja2 diff --git a/runtime.txt b/runtime.txt deleted file mode 100644 index 98fccd6d02..0000000000 --- a/runtime.txt +++ /dev/null @@ -1 +0,0 @@ -3.8 \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index d8e6856d8d..0000000000 --- a/setup.cfg +++ /dev/null @@ -1,41 +0,0 @@ -[flake8] -max-line-length = 120 -# Following 4 for black compatibility -# E501: line too long -# W503: Line break occurred before a binary operator -# E203: Whitespace before ':' -# D202 No blank lines allowed after function docstring - -# TODO fix flake8 -# D100 Missing docstring in public module -# D101 Missing docstring in public class -# D102 Missing docstring in public method -# D103 Missing docstring in public function -# D104 Missing docstring in public package -# D105 Missing docstring in magic method -# D107 Missing docstring in __init__ -# D200 One-line docstring should fit on one line with quotes -# D205 1 blank line required between summary line and description -# D209 Multi-line docstring closing quotes should be on a separate line -# D400 First line should end with a period -# D401 First line should be in imperative mood - -ignore = - E501, - W503, - E203, - D202, - - D100, - D101, - D102, - D103, - D104, - D105, - D107, - D200, - D205, - D209, - D400, - D401, - From 0eff2a4fd44b51d1145165e07f4ce15972e25e1c Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:54:00 -0500 Subject: [PATCH 17/52] Remove Docker development environment (#6103) Co-authored-by: Claude Opus 4.6 --- .github/workflows/docker.yml | 63 ------------------------------------ Dockerfile | 44 ------------------------- 2 files changed, 107 deletions(-) delete mode 100644 .github/workflows/docker.yml delete mode 100644 Dockerfile diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index 5eec0a9e50..0000000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Build Docker image - -on: - workflow_dispatch: - push: - branches: - - current - paths: - - Dockerfile - - .github/workflows/docker.yml - pull_request: - paths: - - Dockerfile - - .github/workflows/docker.yml - -permissions: - contents: read - packages: write - -jobs: - build: - runs-on: ubuntu-latest - steps: - - - name: Install pagefind - uses: jaxxstorm/action-install-gh-release@6096f2a2bbfee498ced520b6922ac2c06e990ed2 # v2.1.0 - with: - repo: cloudcannon/pagefind - - - name: Checkout source code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Set up QEMU - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 - - - name: Login to DockerHub - if: github.event_name != 'pull_request' - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - username: ${{ secrets.DOCKER_USER }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Login to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push - id: docker_build - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6 - with: - context: . - push: ${{ github.event_name != 'pull_request' }} - platforms: linux/amd64,linux/arm64 - tags: | - esphome/esphome-docs:latest - ghcr.io/esphome/esphome-docs:latest - cache-from: ghcr.io/esphome/esphome-docs:latest diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 6c9637dc2d..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -FROM python:3.13-slim - -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl \ - git \ - jq \ - make \ - openssh-client \ - hugo \ - && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* - -ENV PAGEFIND_VERSION="1.3.0" -ARG TARGETARCH -SHELL ["/bin/bash", "-c"] -RUN < Date: Wed, 18 Feb 2026 07:57:35 +1300 Subject: [PATCH 18/52] Remove dangling postCreate.sh file (#6105) --- .devcontainer/postCreate.sh | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100755 .devcontainer/postCreate.sh diff --git a/.devcontainer/postCreate.sh b/.devcontainer/postCreate.sh deleted file mode 100755 index 67f1ac4f38..0000000000 --- a/.devcontainer/postCreate.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -set -euo pipefail - -sudo apt update && sudo apt install -y hugo - -pip3 install -r requirements_test.txt -pre-commit install - -mkdir -p ~/.local/bin - -ARCH="$(uname -m)" -case "$ARCH" in - x86_64) PAGEFIND_ARCH="x86_64" ;; - arm64|aarch64) PAGEFIND_ARCH="aarch64" ;; - *) - echo "Unsupported architecture: $ARCH" >&2 - exit 1 - ;; -esac -curl -L "https://github.com/CloudCannon/pagefind/releases/download/v1.3.0/pagefind-v1.3.0-${PAGEFIND_ARCH}-unknown-linux-musl.tar.gz" \ - | tar -xz -C ~/.local/bin From 9a92ef30f3d9ce8ef2c939e3e35138e7b00256ba Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 18 Feb 2026 08:15:54 +1300 Subject: [PATCH 19/52] Remove assets symlink (#6106) --- assets | 1 - 1 file changed, 1 deletion(-) delete mode 120000 assets diff --git a/assets b/assets deleted file mode 120000 index ca726d3725..0000000000 --- a/assets +++ /dev/null @@ -1 +0,0 @@ -content/ \ No newline at end of file From ddf118bab01834abbce854b62391357163810c23 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 17 Feb 2026 15:51:17 -0500 Subject: [PATCH 20/52] Auto-generate All Actions/Conditions lists from doc headings (#6107) Co-authored-by: Claude Opus 4.6 --- script/collate_automations.sh | 41 -------- src/components/AutomationList.astro | 94 +++++++++++++++++++ src/content/docs/automations/actions.mdx | 7 +- src/content/docs/automations/all_actions.mdx | 88 ----------------- .../docs/automations/all_conditions.mdx | 35 ------- .../components/alarm_control_panel/index.mdx | 14 +-- src/content/docs/components/animation.mdx | 26 +++-- src/content/docs/components/display/index.mdx | 12 ++- .../docs/components/display/nextion.mdx | 2 +- src/content/docs/components/lvgl/index.mdx | 24 ++--- src/content/docs/components/lvgl/widgets.mdx | 6 +- .../docs/components/remote_transmitter.mdx | 80 ++++++++-------- .../docs/components/sensor/pulse_counter.mdx | 2 +- .../docs/components/sensor/pulse_meter.mdx | 2 +- src/content/docs/components/sensor/scd30.mdx | 2 +- src/content/docs/components/sensor/scd4x.mdx | 4 +- src/content/docs/components/sensor/sps30.mdx | 6 +- src/content/docs/components/wireguard.mdx | 8 +- src/content/docs/components/zigbee.mdx | 2 +- 19 files changed, 198 insertions(+), 257 deletions(-) delete mode 100755 script/collate_automations.sh create mode 100644 src/components/AutomationList.astro delete mode 100644 src/content/docs/automations/all_actions.mdx delete mode 100644 src/content/docs/automations/all_conditions.mdx diff --git a/script/collate_automations.sh b/script/collate_automations.sh deleted file mode 100755 index 4fdc70c7bc..0000000000 --- a/script/collate_automations.sh +++ /dev/null @@ -1,41 +0,0 @@ -#! /bin/sh -jq '{ - automations: { - actions: ( - ( - .automations.actions - | map( - if test("\\.") then - capture("(?[^.]+)\\.(?.+)") - else - { domain: "Core", action: . } - end - ) - | group_by(.domain) - | map({ - (.[0].domain): map(.action) - }) - | add - ) - ), - conditions: ( - ( - .automations.conditions - | map( - if test("\\.") then - capture("(?[^.]+)\\.(?.+)") - else - { domain: "Core", action: . } - end - ) - | group_by(.domain) - | map({ - (.[0].domain): map(.action) - }) - | add - ) - ) - } -}' - - diff --git a/src/components/AutomationList.astro b/src/components/AutomationList.astro new file mode 100644 index 0000000000..5ce3c0db33 --- /dev/null +++ b/src/components/AutomationList.astro @@ -0,0 +1,94 @@ +--- +import fs from "node:fs"; +import path from "node:path"; + +interface Props { + type: "Action" | "Condition"; +} + +const { type } = Astro.props; + +const docsDir = path.resolve("src/content/docs"); + +function collectMdxFiles(dir: string): string[] { + const results: string[] = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + results.push(...collectMdxFiles(fullPath)); + } else if (entry.name.endsWith(".mdx")) { + results.push(fullPath); + } + } + return results; +} + +// Match headings like: +// ### `switch.toggle` Action +// ## `deep_sleep.enter` Action +// ### `switch.is_on` / `switch.is_off` Condition +// ## `sun.is_above_horizon` / `sun.is_below_horizon` Conditions +const headingPattern = new RegExp( + "^#{2,4}\\s+" + + "`([a-z_][a-z0-9_.]*\\.[a-z_][a-z0-9_]*)`" + + "(?:\\s+/\\s+`([a-z_][a-z0-9_.]*\\.[a-z_][a-z0-9_]*)`)*" + + "\\s+" + type + "s?\\s*$", + "mi" +); + +// Also need a global version to find all matches +const headingPatternGlobal = new RegExp( + "^#{2,4}\\s+" + + "(`[a-z_][a-z0-9_.]*\\.[a-z_][a-z0-9_]*`)" + + "(?:\\s+/\\s+`[a-z_][a-z0-9_.]*\\.[a-z_][a-z0-9_]*`)*" + + "\\s+" + type + "s?\\s*$", + "gmi" +); + +// Extract individual backticked names from a heading line +const namePattern = /`([a-z_][a-z0-9_.]*\.[a-z_][a-z0-9_]*)`/g; + +// Map: domain -> Set of action/condition names +const domainMap = new Map>(); + +for (const filePath of collectMdxFiles(docsDir)) { + const content = fs.readFileSync(filePath, "utf-8"); + + for (const lineMatch of content.matchAll(headingPatternGlobal)) { + const line = lineMatch[0]; + for (const nameMatch of line.matchAll(namePattern)) { + const fullName = nameMatch[1]; + const lastDot = fullName.lastIndexOf("."); + const domain = fullName.substring(0, lastDot); + const name = fullName.substring(lastDot + 1); + if (!domainMap.has(domain)) { + domainMap.set(domain, new Set()); + } + domainMap.get(domain)!.add(name); + } + } +} + +// Sort domains alphabetically, and names within each domain +const sorted = [...domainMap.entries()] + .sort(([a], [b]) => a.localeCompare(b)) + .map(([domain, names]) => ({ + domain, + names: [...names].sort((a, b) => a.localeCompare(b)), + })); +--- + +{/* markdownlint-disable MD013 */} +
      + {sorted.map(({ domain, names }) => ( +
    • + {domain}:{" "} + {names.map((name, i) => ( + <> + {name}{i < names.length - 1 ? ", " : ""} + + ))} +
    • + ))} +
    +{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/automations/actions.mdx b/src/content/docs/automations/actions.mdx index 9d61506c61..0784841fac 100644 --- a/src/content/docs/automations/actions.mdx +++ b/src/content/docs/automations/actions.mdx @@ -3,8 +3,7 @@ description: "Guide for building automations in ESPHome" title: "Actions, Triggers, Conditions" --- -import { Content as AllActionsContent } from './all_actions.mdx'; -import { Content as AllConditionsContent } from './all_conditions.mdx'; +import AutomationList from "@components/AutomationList.astro"; @@ -497,13 +496,13 @@ on_...: ## All Actions - + ## All Conditions - + diff --git a/src/content/docs/automations/all_actions.mdx b/src/content/docs/automations/all_actions.mdx deleted file mode 100644 index 0297049b98..0000000000 --- a/src/content/docs/automations/all_actions.mdx +++ /dev/null @@ -1,88 +0,0 @@ ---- -description: "All available ESPHome actions" -title: "All Actions" ---- - -{/* markdownlint-disable MD013 */} - -- **ags10:** `new_i2c_address`, `set_zero_point` -- **alarm_control_panel:** `arm_away`, `arm_home`, `arm_night`, `chime`, `disarm`, `pending`, `ready`, `triggered` -- **animation:** `next_frame`, `prev_frame`, `set_frame` -- **at581x:** `reset`, `settings` -- **ble:** `disable`, `enable` -- **ble_client:** `ble_write`, `connect`, `disconnect`, `numeric_comparison_reply`, `passkey_reply`, `remove_bond` -- **bluetooth_password:** `set` -- **button:** `press` -- **canbus:** `send` -- **climate:** `control` -- **component:** `resume`, `suspend`, `update` -- **cover:** `close`, `control`, `open`, `stop`, `toggle` -- **cs5460a:** `restart` -- **deep_sleep:** `allow`, `enter`, `prevent` -- **dfplayer:** `pause`, `play`, `play_folder`, `play_mp3`, `play_next`, `play_previous`, `random`, `reset`, `set_device`, `set_eq`, `set_volume`, `sleep`, `start`, `stop`, `volume_down`, `volume_up` -- **dfrobot_sen0395:** `reset`, `settings` -- **display_menu:** `down`, `enter`, `hide`, `left`, `right`, `show`, `show_main`, `up` -- **ds1307:** `read_time`, `write_time` -- **rx8130:** `read_time`, `write_time` -- **esp32_ble_tracker:** `start_scan`, `stop_scan` -- **event:** `trigger` -- **ezo_pmp:** `arbitrary_command`, `change_i2c_address`, `clear_calibration`, `clear_total_volume_dosed`, `dose_continuously`, `dose_volume`, `dose_volume_over_time`, `dose_with_constant_flow_rate`, `find`, `pause_dosing`, `set_calibration_volume`, `stop_dosing` -- **fan:** `cycle_speed`, `toggle`, `turn_off`, `turn_on` -- **fingerprint_grow:** `aura_led_control`, `cancel_enroll`, `delete`, `delete_all`, `enroll`, `led_control` -- **globals:** `set` -- **grove_tb6612fng:** `break`, `change_address`, `no_standby`, `run`, `standby`, `stop` -- **hc8:** `calibrate` -- **homeassistant:** `event`, `service`, `tag_scanned` -- **http_request:** `get`, `post`, `send` -- **htu21d:** `set_heater`, `set_heater_level` -- **light:** `addressable_set`, `control`, `dim_relative`, `toggle`, `turn_off`, `turn_on` -- **lightwaverf:** `send_raw` -- **lock:** `lock`, `open`, `unlock` -- **logger:** `log` -- **max6956:** `set_brightness_global`, `set_brightness_mode` -- **media_player:** `pause`, `play`, `play_media`, `stop`, `toggle`, `volume_down`, `volume_set`, `volume_up` -- **media_player.speaker:** `play_on_device_media_file` -- **mhz19:** `abc_disable`, `abc_enable`, `calibrate_zero` -- **micro_wake_word:** `start`, `stop` -- **microphone:** `capture`, `stop_capture` -- **midea_ac:** `beeper_off`, `beeper_on`, `display_toggle`, `follow_me`, `power_off`, `power_on`, `power_toggle`, `swing_step` -- **mixer_speaker:** `apply_ducking` -- **mqtt:** `publish`, `publish_json` -- **number:** `decrement`, `increment`, `operation`, `set`, `to_max`, `to_min` -- **output:** `set_level`, `turn_off`, `turn_on` -- **pcf85063:** `read_time`, `write_time` -- **pcf8563:** `read_time`, `write_time` -- **pmwcs3:** `air_calibration`, `new_i2c_address`, `water_calibration` -- **pulse_counter:** `set_total_pulses` -- **pulse_meter:** `set_total_pulses` -- **pzemac:** `reset_energy` -- **pzemdc:** `reset_energy` -- **remote_transmitter:** `transmit_abbwelcome`, `transmit_aeha`, `transmit_byronsx`, `transmit_canalsat`, `transmit_canalsatld`, `transmit_coolix`, `transmit_dish`, `transmit_dooya`, `transmit_drayton`, `transmit_haier`, `transmit_jvc`, `transmit_keeloq`, `transmit_lg`, `transmit_magiquest`, `transmit_midea`, `transmit_mirage`, `transmit_nec`, `transmit_nexa`, `transmit_panasonic`, `transmit_pioneer`, `transmit_pronto`, `transmit_raw`, `transmit_rc5`, `transmit_rc6`, `transmit_rc_switch_raw`, `transmit_rc_switch_type_a`, `transmit_rc_switch_type_b`, `transmit_rc_switch_type_c`, `transmit_rc_switch_type_d`, `transmit_roomba`, `transmit_samsung`, `transmit_samsung36`, `transmit_sony`, `transmit_toshiba_ac` -- **rf_bridge:** `beep`, `learn`, `send_advanced_code`, `send_code`, `send_raw`, `start_advanced_sniffing`, `start_bucket_sniffing`, `stop_advanced_sniffing` -- **rtttl:** `play`, `stop` -- **scd30:** `force_recalibration_with_reference` -- **scd4x:** `factory_reset`, `perform_forced_calibration` -- **script:** `execute`, `stop`, `wait` -- **select:** `first`, `last`, `next`, `operation`, `previous`, `set`, `set_index` -- **sen5x:** `start_fan_autoclean` -- **senseair:** `abc_disable`, `abc_enable`, `abc_get_period`, `background_calibration`, `background_calibration_result` -- **servo:** `detach`, `write` -- **sim800l:** `connect`, `dial`, `disconnect`, `send_sms`, `send_ussd` -- **speaker:** `play`, `stop`, `finish`, `volume_set` -- **sprinkler:** `clear_queued_valves`, `next_valve`, `pause`, `previous_valve`, `queue_valve`, `resume`, `resume_or_start_full_cycle`, `set_divider`, `set_multiplier`, `set_repeat`, `set_valve_run_duration`, `shutdown`, `start_from_queue`, `start_full_cycle`, `start_single_valve` -- **sps30:** `start_fan_autoclean` -- **stepper:** `report_position`, `set_acceleration`, `set_deceleration`, `set_speed`, `set_target` -- **switch:** `toggle`, `turn_off`, `turn_on` -- **tag:** `emulation_off`, `emulation_on`, `polling_off`, `polling_on`, `set_clean_mode`, `set_emulation_message`, `set_format_mode`, `set_read_mode`, `set_write_message`, `set_write_mode` -- **text:** `set` -- **tm1651:** `set_brightness`, `set_level`, `set_level_percent`, `turn_off`, `turn_on` -- **uart:** `write` -- **ufire_ec:** `calibrate_probe`, `reset` -- **ufire_ise:** `calibrate_probe_high`, `calibrate_probe_low`, `reset` -- **update:** `perform` -- **valve:** `close`, `control`, `open`, `stop`, `toggle` -- **voice_assistant:** `start`, `start_continuous`, `stop` -- **wifi:** `disable`, `enable` -- **wireguard:** `disable`, `enable` - -{/* markdownlint-enable MD013 */} diff --git a/src/content/docs/automations/all_conditions.mdx b/src/content/docs/automations/all_conditions.mdx deleted file mode 100644 index 748d58c9ae..0000000000 --- a/src/content/docs/automations/all_conditions.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -description: "All available ESPHome conditions" -title: "All Conditions" ---- - -- **alarm_control_panel:** `is_armed`, `ready` -- **api:** `connected` -- **binary_sensor:** `is_off`, `is_on` -- **ble:** `enabled` -- **dfplayer:** `is_playing` -- **display:** `is_displaying_page` -- **display_menu:** `is_active` -- **fan:** `is_off`, `is_on` -- **light:** `is_off`, `is_on` -- **lock:** `is_locked`, `is_unlocked` -- **media_player:** `is_announcing`, `is_idle`, `is_paused`, `is_playing` -- **micro_wake_word:** `is_running` -- **microphone:** `is_capturing` -- **mqtt:** `connected` -- **number:** `in_range` -- **pn532:** `is_writing` -- **pn7150:** `is_writing` -- **pn7160:** `is_writing` -- **rtttl:** `is_playing` -- **script:** `is_running` -- **sensor:** `in_range` -- **speaker:** `is_playing` -- **sun:** `is_above_horizon`, `is_below_horizon` -- **switch:** `is_off`, `is_on` -- **text_sensor:** `state` -- **time:** `has_time` -- **update:** `is_available` -- **voice_assistant:** `connected`, `is_running` -- **wifi:** `connected`, `enabled` -- **wireguard:** `enabled`, `peer_online` diff --git a/src/content/docs/components/alarm_control_panel/index.mdx b/src/content/docs/components/alarm_control_panel/index.mdx index 537103c6cd..dbe954c68b 100644 --- a/src/content/docs/components/alarm_control_panel/index.mdx +++ b/src/content/docs/components/alarm_control_panel/index.mdx @@ -225,7 +225,7 @@ alarm_control_panel: -### `arm_away` Action +### `alarm_control_panel.arm_away` Action This action arms the alarm in away mode. The `code` is required when *requires_code_to_arm* is *true*. @@ -239,7 +239,7 @@ on_...: -### `arm_home` Action +### `alarm_control_panel.arm_home` Action This action arms the alarm in home mode. The `code` is required when *requires_code_to_arm* is *true*. @@ -253,7 +253,7 @@ on_...: -### `arm_night` Action +### `alarm_control_panel.arm_night` Action This action arms the alarm in night mode. The `code` is required when *requires_code_to_arm* is *true*. @@ -267,7 +267,7 @@ on_...: -### `disarm` Action +### `alarm_control_panel.disarm` Action This action disarms the alarm. The `code` is required when *codes* is not empty. @@ -281,7 +281,7 @@ on_...: -### `pending` Action +### `alarm_control_panel.pending` Action This action puts the alarm in pending state (the state before triggered after *pending_time*). @@ -293,7 +293,7 @@ on_...: -### `triggered` Action +### `alarm_control_panel.triggered` Action This action puts the alarm in triggered state. @@ -305,7 +305,7 @@ on_...: -### `is_armed` Condition +### `alarm_control_panel.is_armed` Condition This [Condition](/automations/actions#all-conditions) checks if the alarm control panel is armed. diff --git a/src/content/docs/components/animation.mdx b/src/content/docs/components/animation.mdx index 09c6051fdc..5e0f429eb3 100644 --- a/src/content/docs/components/animation.mdx +++ b/src/content/docs/components/animation.mdx @@ -79,18 +79,24 @@ Additionally, you can use the `animation.next_frame`, `animation.prev_frame` or ## Actions -- **animation.next_frame**: Moves the animation to the next frame. This is equivalent to the - `id(my_animation).next_frame();` lambda call. +### `animation.next_frame` Action - - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the animation to animate. +Moves the animation to the next frame. This is equivalent to the +`id(my_animation).next_frame();` lambda call. -- **animation.prev_frame**: Moves the animation to the previous frame. This is equivalent to the - `id(my_animation).prev_frame();` lambda call. +- **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the animation to animate. - - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the animation to animate. +### `animation.prev_frame` Action -- **animation.set_frame**: Moves the animation to a specific frame. This is equivalent to the - `id(my_animation).set_frame(frame);` lambda call. +Moves the animation to the previous frame. This is equivalent to the +`id(my_animation).prev_frame();` lambda call. - - **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the animation to animate. - - **frame** (**Required**, int): The frame index to show next. +- **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the animation to animate. + +### `animation.set_frame` Action + +Moves the animation to a specific frame. This is equivalent to the +`id(my_animation).set_frame(frame);` lambda call. + +- **id** (**Required**, [ID](/guides/configuration-types#id)): The ID of the animation to animate. +- **frame** (**Required**, int): The frame index to show next. diff --git a/src/content/docs/components/display/index.mdx b/src/content/docs/components/display/index.mdx index 1b541d627e..006249a985 100644 --- a/src/content/docs/components/display/index.mdx +++ b/src/content/docs/components/display/index.mdx @@ -510,7 +510,9 @@ display: You can then switch between these with three different actions: -**show_next** / **show_previous**: Shows the next or previous page, wraps around at the end. +### `display.page.show_next` / `display.page.show_previous` Action + +Shows the next or previous page, wraps around at the end. ```yaml on_...: @@ -525,7 +527,9 @@ interval: - component.update: my_display ``` -**display.page.show**: Show a specific page +### `display.page.show` Action + +Show a specific page. ```yaml on_...: @@ -555,7 +559,9 @@ on_...: -**display.is_displaying_page**: This condition returns true while the specified page is being shown. +### `display.is_displaying_page` Condition + +This condition returns true while the specified page is being shown. ```yaml # In some trigger: diff --git a/src/content/docs/components/display/nextion.mdx b/src/content/docs/components/display/nextion.mdx index 774651b221..1cceea5e0d 100644 --- a/src/content/docs/components/display/nextion.mdx +++ b/src/content/docs/components/display/nextion.mdx @@ -357,7 +357,7 @@ on_buffer_overflow: -#### `display.nextion.set_brightness` +#### `display.nextion.set_brightness` Action You can use this [action](/automations/actions#actions-action) to set the brightness of the Nextion's backlight. diff --git a/src/content/docs/components/lvgl/index.mdx b/src/content/docs/components/lvgl/index.mdx index 0d0a0738c3..295456d788 100644 --- a/src/content/docs/components/lvgl/index.mdx +++ b/src/content/docs/components/lvgl/index.mdx @@ -485,7 +485,7 @@ Feel free to experiment to discover inheritance and precedence of the styles bas [Theme and style definitions](/cookbook/lvgl#lvgl-cookbook-theme) The Cookbook contains an example which demonstrates how to implement a gradient style for your widgets. -### `lvgl.style.update` +### `lvgl.style.update` Action This [action](/automations/actions#actions-action) allows changing/updating the properties of a style at run time. This can be used to implement dynamic themes, e.g. light/dark mode, or to change the appearance of widgets based on user interaction. @@ -559,7 +559,7 @@ Several actions are available for the LVGL component itself, these are outlined -### `lvgl.widget.redraw` +### `lvgl.widget.redraw` Action This [action](/automations/actions#actions-action) redraws the entire screen, or optionally only selected widgets. It does not change any widget properties. It is mostly useful to redraw the screen after resuming LVGL from the paused state. @@ -576,7 +576,7 @@ on_...: -### `lvgl.widget.refresh` +### `lvgl.widget.refresh` Action This [action](/automations/actions#actions-action) re-evaluates all properties specified with lambdas in the specified widget's configuration. This offers an alternative technique to using the `lvgl.widget.update` action, which updates specified properties. @@ -598,7 +598,7 @@ on_...: -### `lvgl.pause` +### `lvgl.pause` Action This [action](/automations/actions#actions-action) pauses the activity of LVGL, including rendering. @@ -614,7 +614,7 @@ on_...: -### `lvgl.resume` +### `lvgl.resume` Action This [action](/automations/actions#actions-action) resumes the activity of LVGL, including rendering. @@ -626,7 +626,7 @@ on_...: - lvgl.resume: ``` -### `lvgl.update` +### `lvgl.update` Action This [action](/automations/actions#actions-action) allows changing/updating the `disp_bg_color` or `disp_bg_image` configuration variables of the main component, making it possible to change the background color or wallpaper at any time. @@ -642,7 +642,7 @@ on_...: -### `lvgl.page.next`, `lvgl.page.previous` +### `lvgl.page.next` / `lvgl.page.previous` Action This [action](/automations/actions#actions-action) changes the page to the next/previous based on the configuration (pages with their `skip` option enabled are...skipped). Page changes will wrap around at the end. @@ -665,7 +665,7 @@ on_...: -### `lvgl.page.show` +### `lvgl.page.show` Action This [action](/automations/actions#actions-action) shows a specific page (including pages with their `skip` option enabled). @@ -686,7 +686,7 @@ on_...: -### `lvgl.widget.focus` +### `lvgl.widget.focus` Action This [action](/automations/actions#actions-action) moves the input focus to the nominated widget. Used mainly with encoder inputs to select a specific widget to receive input events. It may also allow the focus to be frozen on that widget, @@ -737,7 +737,7 @@ on_...: -### `lvgl.is_idle` +### `lvgl.is_idle` Condition This [condition](/automations/actions#common_conditions) checks if the amount of time specified has passed since the last touch event. @@ -760,7 +760,7 @@ on_...: -### `lvgl.is_paused` +### `lvgl.is_paused` Condition This [condition](/automations/actions#common_conditions) checks if LVGL is in the paused state or not. @@ -776,7 +776,7 @@ on_...: - lvgl.resume: ``` -### `lvgl.page.is_showing` +### `lvgl.page.is_showing` Condition This [condition](/automations/actions#common_conditions) checks if the nominated page is the one currently showing. diff --git a/src/content/docs/components/lvgl/widgets.mdx b/src/content/docs/components/lvgl/widgets.mdx index e6ef91fed4..dd94a2e6d4 100644 --- a/src/content/docs/components/lvgl/widgets.mdx +++ b/src/content/docs/components/lvgl/widgets.mdx @@ -2030,7 +2030,7 @@ on_...: As outlined in the sections above, each widget type supports several of its own, unique actions. Several universal actions are also available for all widgets, these are outlined below. -#### `lvgl.widget.update` +#### `lvgl.widget.update` Action This powerful [action](/automations/actions#actions-action) allows changing/updating any widget's common [style property](/components/lvgl#lvgl-styling), state (templatable) or [flag](#lvgl-widget-flags) on the fly. @@ -2059,7 +2059,7 @@ Check out in the Cookbook [Remote light button](/cookbook/lvgl#lvgl-cookbook-bin -#### `lvgl.widget.hide`, `lvgl.widget.show` +#### `lvgl.widget.hide` / `lvgl.widget.show` Action These [actions](/automations/actions#actions-action) are shorthands for toggling the `hidden` [flag](#lvgl-widget-flags) of any widget. @@ -2077,7 +2077,7 @@ on_...: - id: [my_button_1, my_button_2] ``` -#### `lvgl.widget.disable`, `lvgl.widget.enable` +#### `lvgl.widget.disable` / `lvgl.widget.enable` Action These [actions](/automations/actions#actions-action) are shorthands for toggling the `disabled` state of any widget (which controls the appearance of the corresponding *disabled* style set of the theme): diff --git a/src/content/docs/components/remote_transmitter.mdx b/src/content/docs/components/remote_transmitter.mdx index 1d6bdd4ed5..50b82f9940 100644 --- a/src/content/docs/components/remote_transmitter.mdx +++ b/src/content/docs/components/remote_transmitter.mdx @@ -121,7 +121,7 @@ to set the **times** to 10 and the **wait_time** to 0s. -### `remote_transmitter.transmit_abbwelcome` **Action** +### `remote_transmitter.transmit_abbwelcome` Action This [action](/automations/actions#all-actions) sends a ABB-Welcome message to the intercom bus. The message type, addresses, address length and data can vary a lot between ABB-Welcome @@ -175,7 +175,7 @@ on_...: -### `remote_transmitter.transmit_aeha` **Action** +### `remote_transmitter.transmit_aeha` Action This [action](/automations/actions#all-actions) sends a AEHA code to a remote transmitter. @@ -200,7 +200,7 @@ companies. -### `remote_transmitter.transmit_beo4` **Action** +### `remote_transmitter.transmit_beo4` Action This [action](/automations/actions#all-actions) sends a B&O Beo4 infrared protocol code to a remote transmitter. @@ -219,7 +219,7 @@ on_...: -### `remote_transmitter.transmit_byronsx` **Action** +### `remote_transmitter.transmit_byronsx` Action This [action](/automations/actions#all-actions) sends a Byron Doorbell RF protocol code to a remote transmitter. @@ -238,7 +238,7 @@ on_...: -### `remote_transmitter.transmit_canalsat` **Action** +### `remote_transmitter.transmit_canalsat` Action This [action](/automations/actions#all-actions) sends a CanalSat infrared remote code to a remote transmitter. @@ -265,7 +265,7 @@ on_...: -### `remote_transmitter.transmit_canalsatld` **Action** +### `remote_transmitter.transmit_canalsatld` Action This [action](/automations/actions#all-actions) sends a CanalSatLD infrared remote code to a remote transmitter. @@ -292,7 +292,7 @@ on_...: -### `remote_transmitter.transmit_coolix` **Action** +### `remote_transmitter.transmit_coolix` Action This [action](/automations/actions#all-actions) sends one or two 24-bit Coolix infrared remote codes to a remote transmitter. @@ -315,7 +315,7 @@ on_...: -### `remote_transmitter.transmit_dish` **Action** +### `remote_transmitter.transmit_dish` Action This [action](/automations/actions#all-actions) sends a Dish Network infrared remote code to a remote transmitter. @@ -337,7 +337,7 @@ You can find a list of commands in the -### `remote_transmitter.transmit_dooya` **Action** +### `remote_transmitter.transmit_dooya` Action This [action](/automations/actions#all-actions) sends a Dooya RF remote code to a remote transmitter. @@ -362,7 +362,7 @@ on_...: -### `remote_transmitter.transmit_drayton` **Action** +### `remote_transmitter.transmit_drayton` Action This [action](/automations/actions#all-actions) sends a Draton Digistat RF remote code to a remote transmitter. @@ -383,7 +383,7 @@ on_...: -### `remote_transmitter.transmit_dyson` **Action** +### `remote_transmitter.transmit_dyson` Action This [action](/automations/actions#config-action) sends a Dyson cool AM07 infrared protocol code to a remote transmitter. @@ -411,7 +411,7 @@ on_...: -### `remote_transmitter.transmit_gobox` **Action** +### `remote_transmitter.transmit_gobox` Action This [action](/automations/actions#all-actions) sends a command to a Go-Box via the IR transmitter. @@ -442,7 +442,7 @@ on_...: -### `remote_transmitter.transmit_jvc` **Action** +### `remote_transmitter.transmit_jvc` Action This [action](/automations/actions#all-actions) sends a JVC infrared remote code to a remote transmitter. @@ -459,7 +459,7 @@ on_...: -### `remote_transmitter.transmit_keeloq` **Action** +### `remote_transmitter.transmit_keeloq` Action This [action](/automations/actions#all-actions) sends KeeLoq RF remote code to a remote transmitter. @@ -485,7 +485,7 @@ on_...: -### `remote_transmitter.transmit_haier` **Action** +### `remote_transmitter.transmit_haier` Action This [action](/automations/actions#all-actions) sends a 104-bit Haier code to a remote transmitter. The 8-bit checksum is added automatically. @@ -503,7 +503,7 @@ on_...: -### `remote_transmitter.transmit_lg` **Action** +### `remote_transmitter.transmit_lg` Action This [action](/automations/actions#all-actions) sends an LG infrared remote code to a remote transmitter. @@ -522,7 +522,7 @@ on_...: -### `remote_transmitter.transmit_magiquest` **Action** +### `remote_transmitter.transmit_magiquest` Action This [action](/automations/actions#all-actions) sends a MagiQuest wand code to a remote transmitter. @@ -543,7 +543,7 @@ on_...: -### `remote_transmitter.transmit_midea` **Action** +### `remote_transmitter.transmit_midea` Action This [action](/automations/actions#all-actions) sends a 40-bit Midea code to a remote transmitter. 8-bits of checksum added automatically. @@ -567,7 +567,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -### `remote_transmitter.transmit_nec` **Action** +### `remote_transmitter.transmit_nec` Action This [action](/automations/actions#all-actions) sends an NEC infrared remote code to a remote transmitter. @@ -596,7 +596,7 @@ on_...: - All other options from [Remote Transmitter Actions](#remote_transmitter-transmit_action). -### `remote_transmitter.transmit_nexa` **Action** +### `remote_transmitter.transmit_nexa` Action This [action](/automations/actions#all-actions) a Nexa RF remote code to a remote transmitter. @@ -623,7 +623,7 @@ on_...: -### `remote_transmitter.transmit_panasonic` **Action** +### `remote_transmitter.transmit_panasonic` Action This [action](/automations/actions#all-actions) sends a Panasonic infrared remote code to a remote transmitter. @@ -642,7 +642,7 @@ on_...: -### `remote_transmitter.transmit_pioneer` **Action** +### `remote_transmitter.transmit_pioneer` Action This [action](/automations/actions#all-actions) sends a Pioneer infrared remote code to a remote transmitter. @@ -673,7 +673,7 @@ are largely shared among devices within a given class. -### `remote_transmitter.transmit_pronto` **Action** +### `remote_transmitter.transmit_pronto` Action This [action](/automations/actions#all-actions) sends a raw code to a remote transmitter specified in Pronto format. @@ -692,7 +692,7 @@ on_...: -### `remote_transmitter.transmit_raw` **Action** +### `remote_transmitter.transmit_raw` Action This [action](/automations/actions#all-actions) sends a raw code to a remote transmitter. @@ -721,7 +721,7 @@ on_...: -### `remote_transmitter.transmit_rc5` **Action** +### `remote_transmitter.transmit_rc5` Action This [action](/automations/actions#all-actions) sends an RC5 infrared remote code to a remote transmitter. @@ -740,7 +740,7 @@ on_...: -### `remote_transmitter.transmit_rc6` **Action** +### `remote_transmitter.transmit_rc6` Action This [action](/automations/actions#all-actions) sends an RC6 infrared remote code to a remote transmitter. @@ -759,7 +759,7 @@ on_...: -### `remote_transmitter.transmit_rc_switch_raw` **Action** +### `remote_transmitter.transmit_rc_switch_raw` Action This [action](/automations/actions#all-actions) sends a raw RC-Switch code to a remote transmitter. @@ -781,7 +781,7 @@ on_...: -### `remote_transmitter.transmit_rc_switch_type_a` **Action** +### `remote_transmitter.transmit_rc_switch_type_a` Action This [action](/automations/actions#all-actions) sends a type A RC-Switch code to a remote transmitter. @@ -807,7 +807,7 @@ on_...: -### `remote_transmitter.transmit_rc_switch_type_b` **Action** +### `remote_transmitter.transmit_rc_switch_type_b` Action This [action](/automations/actions#all-actions) sends a type B RC-Switch code to a remote transmitter. @@ -833,7 +833,7 @@ on_...: -### `remote_transmitter.transmit_rc_switch_type_c` **Action** +### `remote_transmitter.transmit_rc_switch_type_c` Action This [action](/automations/actions#all-actions) sends a type C RC-Switch code to a remote transmitter. @@ -861,7 +861,7 @@ on_...: -### `remote_transmitter.transmit_rc_switch_type_d` **Action** +### `remote_transmitter.transmit_rc_switch_type_d` Action This [action](/automations/actions#all-actions) sends a type D RC-Switch code to a remote transmitter. @@ -887,7 +887,7 @@ on_...: -### `remote_transmitter.transmit_roomba` **Action** +### `remote_transmitter.transmit_roomba` Action This [action](/automations/actions#all-actions) sends a Roomba infrared remote code to a remote transmitter. @@ -915,7 +915,7 @@ on_...: -### `remote_transmitter.transmit_samsung` **Action** +### `remote_transmitter.transmit_samsung` Action This [action](/automations/actions#all-actions) sends a Samsung infrared remote code to a remote transmitter. It transmits codes up to 64 bits in length in a single packet. @@ -938,7 +938,7 @@ on_...: -### `remote_transmitter.transmit_samsung36` **Action** +### `remote_transmitter.transmit_samsung36` Action This [action](/automations/actions#all-actions) sends a Samsung36 infrared remote code to a remote transmitter. It transmits the `address` and `command` in two packets separated by a "space". @@ -958,7 +958,7 @@ on_...: -### `remote_transmitter.transmit_symphony` **Action** +### `remote_transmitter.transmit_symphony` Action This [action](/automations/actions#config-action) sends a Symphony infrared remote code to a remote transmitter. It transmits constant bit-time frames with a footer gap. Physical Symphony remotes typically @@ -984,7 +984,7 @@ on_...: -### `remote_transmitter.transmit_sony` **Action** +### `remote_transmitter.transmit_sony` Action This [action](/automations/actions#all-actions) a Sony infrared remote code to a remote transmitter. @@ -1003,7 +1003,7 @@ on_...: -### `remote_transmitter.transmit_toshiba_ac` **Action** +### `remote_transmitter.transmit_toshiba_ac` Action This [action](/automations/actions#all-actions) sends a Toshiba AC infrared remote code to a remote transmitter. @@ -1027,7 +1027,7 @@ on_...: -### `remote_transmitter.transmit_mirage` **Action** +### `remote_transmitter.transmit_mirage` Action This [action](/automations/actions#all-actions) sends a 112-bit Mirage code to a remote transmitter. 8-bits of checksum added automatically. @@ -1045,7 +1045,7 @@ on_...: -### `remote_transmitter.transmit_toto` **Action** +### `remote_transmitter.transmit_toto` Action This [action](/automations/actions#all-actions) sends a Toto infrared remote code to a remote transmitter. @@ -1070,7 +1070,7 @@ on_...: -### `remote_transmitter.digital_write` **Action** +### `remote_transmitter.digital_write` Action This [action](/automations/actions#all-actions) sets the output value of the pin. diff --git a/src/content/docs/components/sensor/pulse_counter.mdx b/src/content/docs/components/sensor/pulse_counter.mdx index 499aea5c5c..d1699e8d14 100644 --- a/src/content/docs/components/sensor/pulse_counter.mdx +++ b/src/content/docs/components/sensor/pulse_counter.mdx @@ -92,7 +92,7 @@ sensor: - multiply: 0.001 # (1/1000 pulses per kWh) ``` -## (Re)Setting the total pulse count +## `pulse_counter.set_total_pulses` Action Using this action, you are able to reset/set the total pulse count. This can be useful if you would like the `total` sensor to match what you see on your meter you are diff --git a/src/content/docs/components/sensor/pulse_meter.mdx b/src/content/docs/components/sensor/pulse_meter.mdx index ba30cc95d4..85408ad6ab 100644 --- a/src/content/docs/components/sensor/pulse_meter.mdx +++ b/src/content/docs/components/sensor/pulse_meter.mdx @@ -78,7 +78,7 @@ sensor: name: "Total Pulses" ``` -## (Re)Setting the total pulse count +## `pulse_meter.set_total_pulses` Action Using this action, you are able to reset/set the total pulse count. This can be useful if you would like the `total` sensor to match what you see on your meter you are diff --git a/src/content/docs/components/sensor/scd30.mdx b/src/content/docs/components/sensor/scd30.mdx index 67fb74a793..317146a84c 100644 --- a/src/content/docs/components/sensor/scd30.mdx +++ b/src/content/docs/components/sensor/scd30.mdx @@ -66,7 +66,7 @@ sensor: - **update_interval** (*Optional*, [Time](/guides/configuration-types#time)): The interval to check the sensor. Available range: [2 … 1800]. Defaults to `60s`. -## Manual calibration +## `scd30.force_recalibration_with_reference` Action ```yaml # Example on how to implement a UI section in HA for manual calibration. diff --git a/src/content/docs/components/sensor/scd4x.mdx b/src/content/docs/components/sensor/scd4x.mdx index c4259578c6..4a3d3697df 100644 --- a/src/content/docs/components/sensor/scd4x.mdx +++ b/src/content/docs/components/sensor/scd4x.mdx @@ -81,7 +81,7 @@ sensor: -## `perform_forced_calibration` Action +## `scd4x.perform_forced_calibration` Action This [action](/automations/actions#all-actions) manually calibrates the sensor to the provided value in ppm. Operate the SCD4x in the operation mode later used in normal sensor operation (periodic measurement, low power periodic measurement or single shot) for > 3 minutes in an environment with homogenous and constant CO2 concentration before performing a forced recalibration. @@ -113,7 +113,7 @@ api: -## `factory_reset` Action +## `scd4x.factory_reset` Action This [action](/automations/actions#all-actions) triggers a factory reset of the sensor. Calibration settings are restored from factory settings. diff --git a/src/content/docs/components/sensor/sps30.mdx b/src/content/docs/components/sensor/sps30.mdx index 9520c3587d..378292aecd 100644 --- a/src/content/docs/components/sensor/sps30.mdx +++ b/src/content/docs/components/sensor/sps30.mdx @@ -124,7 +124,7 @@ Disabling of automatic-cleaning or setting a manual interval is not supported at -## Manual Cleaning +## `sps30.start_fan_autoclean` Action This [action](/automations/actions#all-actions) manually starts fan-cleaning. @@ -168,7 +168,7 @@ measurements. See [low power documentation](https://sensirion.com/media/documents/188A2C3C/6166F165/Sensirion_Particulate_Matter_AppNotes_SPS30_Low_Power_Operation_D1.pdf) for more information. -### Start Measurement Action +### `sps30.start_measurement` Action This [action](/automations/actions#all-actions) manually puts the sensor into measurement mode. @@ -178,7 +178,7 @@ on_...: - sps30.start_measurement: my_sps30 ``` -### Stop Measurement Action +### `sps30.stop_measurement` Action This [action](/automations/actions#all-actions) manually puts the sensor into idle mode. diff --git a/src/content/docs/components/wireguard.mdx b/src/content/docs/components/wireguard.mdx index 2b63949329..1cbaa04836 100644 --- a/src/content/docs/components/wireguard.mdx +++ b/src/content/docs/components/wireguard.mdx @@ -241,7 +241,7 @@ above configuration. The following actions are available. -### `wireguard.disable` +### `wireguard.disable` Action This action drops down the active VPN link (if any) and disables the component. @@ -257,7 +257,7 @@ The lambda equivalent is `id(wireguard_id).disable()`. > To disable WireGuard® since device boot you can execute this action > in the [`on_boot`](/components/esphome#esphome-on_boot) step. -### `wireguard.enable` +### `wireguard.enable` Action This action enables the component and starts the connection to the remote peer. @@ -275,7 +275,7 @@ The lambda equivalent is `id(wireguard_id).enable()`. The following conditions are available. -### `wireguard.enabled` +### `wireguard.enabled` Condition This condition checks if WireGuard® is currently enabled or not. @@ -291,7 +291,7 @@ on_...: The lambda equivalent is `id(wireguard_id).is_enabled()`. -### `wireguard.peer_online` +### `wireguard.peer_online` Condition This condition checks if the remote peer is *online*. diff --git a/src/content/docs/components/zigbee.mdx b/src/content/docs/components/zigbee.mdx index 8c701cd9fa..809c7a1345 100644 --- a/src/content/docs/components/zigbee.mdx +++ b/src/content/docs/components/zigbee.mdx @@ -58,7 +58,7 @@ binary_sensor: ## Actions -### `factory_reset` Action +### `zigbee.factory_reset` Action This [action](/automations/actions#config-action) triggers a factory reset of the Zigbee device. It handles leaving the Zigbee network. From bb486cc85edf63a7e8d7adb3c265e4b0b76df837 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Tue, 17 Feb 2026 16:12:49 -0500 Subject: [PATCH 21/52] [docs] Add linter check for automation headings and fix sprinkler (#6109) Co-authored-by: Claude Opus 4.6 --- lint.mjs | 57 +++++++++++++++++++++++ src/content/docs/components/sprinkler.mdx | 30 ++++++------ 2 files changed, 72 insertions(+), 15 deletions(-) diff --git a/lint.mjs b/lint.mjs index 61da60bf64..df1fa2c576 100755 --- a/lint.mjs +++ b/lint.mjs @@ -364,6 +364,62 @@ async function checkInternalLinks(fname, content, anchorCache) { } } +function checkAutomationHeadings(fname, content) { + if (!fname.startsWith('src/content/docs/components/')) return; + if (!fname.endsWith('.md') && !fname.endsWith('.mdx')) return; + + // Skip the main actions page which documents core actions (delay, if, lambda, etc.) + if (fname.includes('automations/')) return; + + const lines = content.split('\n'); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const lineno = i + 1; + + // Only look at heading lines + if (!line.match(/^#{2,4}\s/)) continue; + + // Check 1: Backticked `domain.name` without Action/Condition/Trigger suffix + // e.g. ### `wireguard.enabled` + if (line.match(/^#{2,4}\s+`[a-z_][a-z0-9_.]*\.[a-z_][a-z0-9_]*`\s*$/)) { + addError(fname, lineno, 1, + 'Heading has backticked automation name but is missing Action/Condition/Trigger suffix. ' + + 'Add " Action", " Condition", or " Trigger" after the closing backtick.'); + } + + // Check 2: Action/Condition with backticked name missing domain prefix (no dot) + // e.g. ### `arm_away` Action + const noDotMatch = line.match(/^#{2,4}\s+`([a-z_][a-z0-9_]*)`\s+(?:Action|Condition)s?\s*$/i); + if (noDotMatch) { + const name = noDotMatch[1]; + // Exclude core actions/conditions documented on actions.mdx + const coreNames = [ + 'delay', 'if', 'lambda', 'repeat', 'wait_until', 'while', + 'and', 'all', 'or', 'any', 'xor', 'not', 'for', + ]; + if (!coreNames.includes(name) && !name.startsWith('on_')) { + addError(fname, lineno, 1, + `Heading "\`${name}\`" is missing the domain prefix. ` + + 'Use the format: `domain.name` Action/Condition (e.g. `switch.toggle` Action).'); + } + } + + // Check 3: Bold **Action** or **Condition** suffix + // e.g. ### `remote_transmitter.transmit_nec` **Action** + if (line.match(/^#{2,4}\s+`[^`]+`.*\*\*(?:Action|Condition)s?\*\*/)) { + addError(fname, lineno, 1, + 'Action/Condition suffix should not be bold. Use plain text: " Action" or " Condition".'); + } + + // Check 4: Lowercase action/condition suffix (not matching standard capitalization) + // e.g. ### `sprinkler.start_full_cycle` action + if (line.match(/^#{2,4}\s+`[a-z_][a-z0-9_.]*\.[a-z_][a-z0-9_]*`\s+(?:action|condition)s?\s*$/)) { + addError(fname, lineno, 1, + 'Action/Condition suffix should be capitalized. Use "Action" or "Condition" (not lowercase).'); + } + } +} + // Main execution async function main() { console.log(`${colors.cyan}Running ESPHome documentation linter...${colors.reset}\n`); @@ -410,6 +466,7 @@ async function main() { checkNewlines(fname, content); checkEndNewline(fname, content); checkEsphomeLinks(fname, content); + checkAutomationHeadings(fname, content); await checkInternalLinks(fname, content, anchorCache); } catch (error) { diff --git a/src/content/docs/components/sprinkler.mdx b/src/content/docs/components/sprinkler.mdx index 586a13fccf..46bb8cafda 100644 --- a/src/content/docs/components/sprinkler.mdx +++ b/src/content/docs/components/sprinkler.mdx @@ -264,7 +264,7 @@ to avert disaster! -### `sprinkler.start_full_cycle` action +### `sprinkler.start_full_cycle` Action Starts a full cycle of the system. This enables the controller's "auto-advance" feature and disables the queue. The controller will iterate through all enabled valves/zones. They will each run for their @@ -279,7 +279,7 @@ on_...: -### `sprinkler.start_from_queue` action +### `sprinkler.start_from_queue` Action Starts the controller running valves from its queue. If no valves are in the queue, this action does nothing; otherwise, this disables the controller's "auto-advance" feature so that only queued @@ -300,7 +300,7 @@ on_...: -### `sprinkler.start_single_valve` action +### `sprinkler.start_single_valve` Action Starts a single valve. This disables the controller's "auto-advance" and queue features so that only this valve/zone will run. The valve will remain on for the specified duration or (if `run_duration` is not specified or is zero) for @@ -319,7 +319,7 @@ on_...: -### `sprinkler.shutdown` action +### `sprinkler.shutdown` Action Initiates a shutdown of all valves/the system, respecting any configured pump or valve stop delays. @@ -331,7 +331,7 @@ on_...: -### `sprinkler.next_valve` action +### `sprinkler.next_valve` Action Advances to the next valve (numerically). If `manual_selection_delay` is configured, the controller will wait before activating the selected valve. If no valve is active, the first valve (as they appear @@ -346,7 +346,7 @@ on_...: -### `sprinkler.previous_valve` action +### `sprinkler.previous_valve` Action Advances to the previous valve (numerically). If `manual_selection_delay` is configured, the controller will wait before activating the selected valve. If no valve is active, the last valve (as they appear in @@ -361,7 +361,7 @@ on_...: -### `sprinkler.pause` action +### `sprinkler.pause` Action Immediately turns off all valves, saving the active valve and the amount of time remaining so that the cycle may be resumed later on. @@ -374,7 +374,7 @@ on_...: -### `sprinkler.resume` action +### `sprinkler.resume` Action Resumes a cycle placed on hold with `sprinkler.pause`. If there is no paused cycle, this action will do nothing. @@ -387,7 +387,7 @@ on_...: -### `sprinkler.resume_or_start_full_cycle` action +### `sprinkler.resume_or_start_full_cycle` Action Resumes a cycle placed on hold with `sprinkler.pause`, but if no cycle was paused, starts a full cycle (equivalent to `sprinkler.start_full_cycle` ). @@ -400,7 +400,7 @@ on_...: -### `sprinkler.queue_valve` action +### `sprinkler.queue_valve` Action Adds the specified valve into the controller's queue. When the queue is enabled, valves in the queue take precedence over valves scheduled as a part of a full cycle of the system (when auto-advance is @@ -421,7 +421,7 @@ on_...: -### `sprinkler.clear_queued_valves` action +### `sprinkler.clear_queued_valves` Action Removes all queued valves from the controller's queue. Please see [The Sprinkler Controller Queue](#sprinkler-controller-sprinkler_controller_queue) section below for more detail and examples. @@ -435,7 +435,7 @@ on_...: -### `sprinkler.set_multiplier` action +### `sprinkler.set_multiplier` Action Sets the multiplier value used to proportionally increase or decrease the run duration for all valves/zones. For seasonal changes, it's easier to use the multiplier to adjust the watering time instead of adjusting the @@ -456,7 +456,7 @@ on_...: -### `sprinkler.set_repeat` action +### `sprinkler.set_repeat` Action Specifies the number of times full cycles should be repeated. **Note that the total number of cycles the controller will run is equal to the repeat value plus one.** For example, with a `repeat` value @@ -472,7 +472,7 @@ on_...: -### `sprinkler.set_divider` action +### `sprinkler.set_divider` Action The divider value sets both the multiplier and repeat values as follows: @@ -495,7 +495,7 @@ on_...: -### `sprinkler.set_valve_run_duration` action +### `sprinkler.set_valve_run_duration` Action Sets the run duration for the specified valve. When the valve is activated, this value is multiplied by the multiplier value (see above) to determine the valve's actual run duration. From ee8dbfef0aa3e13558c6b03e6a5ce37c92fee6b4 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Wed, 18 Feb 2026 07:16:28 -0500 Subject: [PATCH 22/52] Link domain names to component pages in automation lists (#6111) Co-authored-by: Claude Opus 4.6 --- src/components/AutomationList.astro | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/AutomationList.astro b/src/components/AutomationList.astro index 5ce3c0db33..b6c085d8f3 100644 --- a/src/components/AutomationList.astro +++ b/src/components/AutomationList.astro @@ -48,8 +48,8 @@ const headingPatternGlobal = new RegExp( // Extract individual backticked names from a heading line const namePattern = /`([a-z_][a-z0-9_.]*\.[a-z_][a-z0-9_]*)`/g; -// Map: domain -> Set of action/condition names -const domainMap = new Map>(); +// Map: domain -> { names: Set of action/condition names, filePath: source file } +const domainMap = new Map; filePath: string }>(); for (const filePath of collectMdxFiles(docsDir)) { const content = fs.readFileSync(filePath, "utf-8"); @@ -62,27 +62,35 @@ for (const filePath of collectMdxFiles(docsDir)) { const domain = fullName.substring(0, lastDot); const name = fullName.substring(lastDot + 1); if (!domainMap.has(domain)) { - domainMap.set(domain, new Set()); + domainMap.set(domain, { names: new Set(), filePath }); } - domainMap.get(domain)!.add(name); + domainMap.get(domain)!.names.add(name); } } } +// Convert a docs file path to a site URL +function filePathToUrl(filePath: string): string { + let rel = path.relative(docsDir, filePath); + rel = rel.replace(/index\.mdx$/, "").replace(/\.mdx$/, ""); + return "/" + rel.replace(/\/$/, "") + "/"; +} + // Sort domains alphabetically, and names within each domain const sorted = [...domainMap.entries()] .sort(([a], [b]) => a.localeCompare(b)) - .map(([domain, names]) => ({ + .map(([domain, { names, filePath }]) => ({ domain, names: [...names].sort((a, b) => a.localeCompare(b)), + url: filePathToUrl(filePath), })); --- {/* markdownlint-disable MD013 */}