diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 23c7dca4c4a..293e90d2eb4 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -20,7 +20,7 @@ jobs:
steps:
-
name: Checkout source code
- uses: actions/checkout@v3.3.0
+ uses: actions/checkout@v3.5.2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
@@ -39,7 +39,7 @@ jobs:
-
name: Build and push
id: docker_build
- uses: docker/build-push-action@v3
+ uses: docker/build-push-action@v4
with:
context: .
push: true
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index d56bc4401fe..8cd0c44dca4 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -19,7 +19,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3.3.0
+ - uses: actions/checkout@v3.5.2
- name: Set up Python 3.8
uses: actions/setup-python@v4
with:
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 0617396287c..13bfc8e051d 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -16,7 +16,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v7
+ - uses: actions/stale@v8
with:
days-before-pr-stale: 60
days-before-pr-close: 7
@@ -35,7 +35,7 @@ jobs:
close-issues:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v7
+ - uses: actions/stale@v8
with:
days-before-pr-stale: -1
days-before-pr-close: -1
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c56ce094a86..39fd255a7af 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,15 +1,15 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- - repo: https://github.com/ambv/black
- rev: 20.8b1
+ - repo: https://github.com/psf/black
+ rev: 23.1.0
hooks:
- id: black
args:
- --safe
- --quiet
- - repo: https://gitlab.com/pycqa/flake8
- rev: 3.8.4
+ - repo: https://github.com/pycqa/flake8
+ rev: 6.0.0
hooks:
- id: flake8
additional_dependencies:
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 00000000000..f1a91940fae
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,11 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "Live HTML build",
+ "type": "shell",
+ "command": "make live-html",
+ "problemMatcher": []
+ },
+ ]
+}
diff --git a/Doxygen b/Doxygen
index 6e2b07ec9db..64ab705a890 100644
--- a/Doxygen
+++ b/Doxygen
@@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 2023.3.0-dev
+PROJECT_NUMBER = 2023.5.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/_redirects b/_redirects
index c288519ff40..8e185bd7314 100644
--- a/_redirects
+++ b/_redirects
@@ -8,3 +8,31 @@
/devices/esp32.html /components/esp32.html
/changelog/2022.12.4.html /changelog/2022.12.0.html 301
+/components/display/ili9341.html /components/display/ili9xxx.html 301
+
+/cookbook/brilliant-mirabella-genio-smart-plugs.html https://devices.esphome.io/devices/Mirabella-Genio-Wi-Fi-1-USB 301
+/cookbook/zemismart-rgbw-downlights.html https://devices.esphome.io/devices/Zemismart-LED-RGBWW-Downlight 301
+/cookbook/relay.html https://devices.esphome.io/devices/Generic-Relay 301
+/cookbook/pir.html https://devices.esphome.io/devices/Generic-PIR 301
+/cookbook/mirabella-genio-bulb.html https://devices.esphome.io/devices/Mirabella-Genio-Monochromatic-Bulbs 301
+/cookbook/air_gradient_diy_air_quality_sensor.html https://devices.esphome.io/devices/AirGradient-DIY 301
+/cookbook/ble_itag.html https://devices.esphome.io/devices/ble_itag 301
+/cookbook/bruh.html https://devices.esphome.io/devices/bruh 301
+/cookbook/esw01-eu.html https://devices.esphome.io/devices/Etekcity-Voltson-ESW01-EU 301
+/cookbook/geiger-counter.html https://devices.esphome.io/devices/geiger-counter 301
+/cookbook/h801.html https://devices.esphome.io/devices/H801-RGBW-LED-Controller 301
+/cookbook/iaq_board.html https://devices.esphome.io/devices/iaq_board 301
+/cookbook/ifan02.html https://devices.esphome.io/devices/Sonoff-iFan02 301
+/cookbook/ilonda-wifi-smart-fish-feeder.html https://devices.esphome.io/devices/ilonda-wifi-smart-fish-feeder 301
+/cookbook/iwoole_rgbw_table_lamp.html https://devices.esphome.io/devices/iwoole_rgbw_table_lamp 301
+/cookbook/teckin_sb50.html https://devices.esphome.io/devices/Teckin-SB50_rgbww 301
+/cookbook/temt6000.html https://devices.esphome.io/devices/temt6000 301
+/cookbook/tracer-an.html https://devices.esphome.io/devices/epever_mptt_tracer_an 301
+/cookbook/tuya_rgbw.html https://devices.esphome.io/devices/tuya_rgbw 301
+/cookbook/uart_text_sensor.html /cookbook/lambda_magic.html#custom-uart-text-sensor 301
+/cookbook/endstop-cover.html /components/cover/endstop.html 301
+/cookbook/sonoff-light-switch.html https://devices.esphome.io/devices/Sonoff-Dual-DIY-light 301
+/cookbook/sonoff-basic-light-switch.html https://devices.esphome.io/devices/Sonoff-Basic-DIY-light 301
+/cookbook/sonoff-dual-light-switch.html https://devices.esphome.io/devices/Sonoff-Dual-DIY-light 301
+/cookbook/sonoff-t1-3.html https://devices.esphome.io/devices/Sonoff-T1-T2-T3 301
+/cookbook/dual-r2-cover.html /cookbook/lambda_magic.html#one-button-cover-control 301
diff --git a/_static/changelog-2023.3.0.png b/_static/changelog-2023.3.0.png
new file mode 100644
index 00000000000..2ca6298c271
Binary files /dev/null and b/_static/changelog-2023.3.0.png differ
diff --git a/_static/changelog-2023.4.0.png b/_static/changelog-2023.4.0.png
new file mode 100644
index 00000000000..38b11330094
Binary files /dev/null and b/_static/changelog-2023.4.0.png differ
diff --git a/_static/version b/_static/version
index 49b1cfc07ee..448988caa37 100644
--- a/_static/version
+++ b/_static/version
@@ -1 +1 @@
-2023.3.0-dev
\ No newline at end of file
+2023.5.0-dev
\ No newline at end of file
diff --git a/changelog/2023.2.0.rst b/changelog/2023.2.0.rst
index 124146c7c7f..1d8bbc6bee4 100644
--- a/changelog/2023.2.0.rst
+++ b/changelog/2023.2.0.rst
@@ -67,6 +67,19 @@ Release 2023.2.2 - February 17
- Fix adoption of variants and pico-w :esphomepr:`4455` by :ghuser:`jesserockz`
+Release 2023.2.3 - February 20
+------------------------------
+
+- Fix MQTT discovery for climate after preset implementation :esphomepr:`4451` by :ghuser:`jmichiel`
+- Update distribution manifest :esphomepr:`4459` by :ghuser:`jesserockz`
+
+Release 2023.2.4 - February 23
+------------------------------
+
+- BL0939 state_class set for energy sensors :esphomepr:`4463` by :ghuser:`konsulten`
+- fix wiegand tag parity :esphomepr:`4476` by :ghuser:`ssieb`
+- Fix multiple remote_receivers with triggers :esphomepr:`4477` by :ghuser:`jesserockz`
+
Full list of changes
--------------------
diff --git a/changelog/2023.3.0.rst b/changelog/2023.3.0.rst
new file mode 100644
index 00000000000..9924054b03c
--- /dev/null
+++ b/changelog/2023.3.0.rst
@@ -0,0 +1,231 @@
+ESPHome 2023.3.0 - 15th March 2023
+==================================
+
+.. seo::
+ :description: Changelog for ESPHome 2023.3.0.
+ :image: /_static/changelog-2023.3.0.png
+ :author: Jesse Hills
+ :author_twitter: @jesserockz
+
+.. imgtable::
+ :columns: 4
+
+ Internal Temperature, components/sensor/internal_temperature, thermometer.svg
+ 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
+ AS7341, components/sensor/as7341, as7341.jpg, Spectral Color Sensor
+
+
+Sprinkler updates
+-----------------
+
+The sprinkler component has had a big update thanks to :ghuser:`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 (:doc:`/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 :esphomepr:`4573` by :ghuser:`nwf`
+- rp2040: Use fake Mutex lock :esphomepr:`4602` by :ghuser:`jesserockz`
+
+Release 2023.3.2 - March 27
+---------------------------
+
+- Fix compile error on pzemdc.h :esphomepr:`4583` by :ghuser:`KG3RK3N`
+- Swap curly brackets for round on LockGuard :esphomepr:`4610` by :ghuser:`jesserockz`
+- Fix animation resizing :esphomepr:`4608` by :ghuser:`guillempages`
+- SX1509 minimum loop period (fixes esphome/issues#4325) :esphomepr:`4613` by :ghuser:`tracestep`
+
+Full list of changes
+--------------------
+
+New Components
+^^^^^^^^^^^^^^
+
+- Add internal_temperature component :esphomepr:`4330` by :ghuser:`Mat931` (new-integration)
+- Support Mopeka Standard LPG tank bluetooth sensor :esphomepr:`4351` by :ghuser:`Fabian-Schmidt` (new-integration)
+- add person sensor (SEN21231) from usefulsensors :esphomepr:`4454` by :ghuser:`shreyaskarnik` (new-integration)
+- add kuntze component :esphomepr:`4411` by :ghuser:`ssieb` (new-integration)
+- Add Haier climate component :esphomepr:`4001` by :ghuser:`Yarikx` (new-integration)
+- FS3000 sensor :esphomepr:`4502` by :ghuser:`kahrendt` (new-integration)
+- Add absolute humidity component :esphomepr:`4519` by :ghuser:`DAVe3283` (new-integration)
+- Add AS7341 spectral color sensor :esphomepr:`4331` by :ghuser:`mrgnr` (new-integration)
+- Renaming and extending the ili9341 to the ili9xxx component :esphomepr:`4275` by :ghuser:`nielsnl68` (new-integration) (breaking-change)
+
+Breaking Changes
+^^^^^^^^^^^^^^^^
+
+- Add configurable color datapoint :esphomepr:`4383` by :ghuser:`irtimaled` (breaking-change)
+- Sprinkler "v2" updates :esphomepr:`4159` by :ghuser:`kbx81` (breaking-change)
+- sn74hc165 fixes :esphomepr:`4457` by :ghuser:`jesserockz` (breaking-change)
+- Renaming and extending the ili9341 to the ili9xxx component :esphomepr:`4275` by :ghuser:`nielsnl68` (new-integration) (breaking-change)
+
+Beta Changes
+^^^^^^^^^^^^
+
+- Fix ethernet clk_mode for GPIO0_OUT :esphomepr:`4307` by :ghuser:`jorticus`
+- Add ESP32-S3 support in NeoPixelBus component :esphomepr:`4114` by :ghuser:`rcloran`
+- Renaming and extending the ili9341 to the ili9xxx component :esphomepr:`4275` by :ghuser:`nielsnl68` (new-integration) (breaking-change)
+- Drop unused, broken logging macros :esphomepr:`4534` by :ghuser:`oxan`
+- Revert storing Font glyphs in manually-allocated memory :esphomepr:`4516` by :ghuser:`oxan`
+- Correct BME680 gas calculation and heater_off :esphomepr:`4498` by :ghuser:`CarlosGS`
+- Add support for new mpu6050 clones responding with 0x70 address :esphomepr:`4546` by :ghuser:`jakehdk`
+- Add carbon dioxide device class to scd30 sensor schema. :esphomepr:`4547` by :ghuser:`murrayma`
+- Feat: add support for hex color in color component :esphomepr:`4493` by :ghuser:`dorianim`
+- Allow AUTO_LOAD to be a function :esphomepr:`4550` by :ghuser:`jesserockz`
+- On the ILI9xxx display's enable the psram on esp32 and allow big screen :esphomepr:`4551` by :ghuser:`nielsnl68`
+- Map gpio pins for touch on esp32-s2/s3 :esphomepr:`4552` by :ghuser:`jesserockz`
+- pipsolar component. Correct the sscanf format for QPIG command parsin… :esphomepr:`4165` by :ghuser:`eroldan`
+- Add state class back to uptime sensor :esphomepr:`4557` by :ghuser:`DAVe3283`
+- Added response for Tuya RSSI command :esphomepr:`4549` by :ghuser:`catalin2402`
+- Remove switch actions during config; bump setup priority :esphomepr:`4563` by :ghuser:`kbx81`
+- Mark esp32_touch supported only on standard esp32 variant :esphomepr:`4562` by :ghuser:`jesserockz`
+- fixing ``shrink`` and ``extend`` functions of the displaybuffer's Rect class :esphomepr:`4565` by :ghuser:`nielsnl68`
+
+All changes
+^^^^^^^^^^^
+
+- socket: Format IPv4-mapped IPv6 addresses as regular IPv4 address :esphomepr:`4382` by :ghuser:`oxan`
+- Bump frenck/action-yamllint from 1.3.1 to 1.4.0 :esphomepr:`4289` by :ghuser:`dependabot[bot]`
+- Bump pyupgrade from 3.3.0 to 3.3.1 :esphomepr:`4160` by :ghuser:`dependabot[bot]`
+- Bump black from 22.12.0 to 23.1.0 :esphomepr:`4375` by :ghuser:`dependabot[bot]`
+- Improve tuya network status command :esphomepr:`4415` by :ghuser:`Rjevski`
+- Gracefully reject vacuum map upload requests :esphomepr:`4414` by :ghuser:`Rjevski`
+- Fixed PlatformIO Build on DEV :esphomepr:`4422` by :ghuser:`Expaso`
+- Bump platformio from 6.1.5 to 6.1.6 :esphomepr:`4341` by :ghuser:`dependabot[bot]`
+- Bump pylint from 2.15.10 to 2.16.2 :esphomepr:`4426` by :ghuser:`dependabot[bot]`
+- Bump aioesphomeapi from 13.1.0 to 13.3.1 :esphomepr:`4427` by :ghuser:`dependabot[bot]`
+- Add concurrency limit to ci-docker :esphomepr:`4407` by :ghuser:`jesserockz`
+- Add final job so branch protection can require matrix ci steps :esphomepr:`4432` by :ghuser:`jesserockz`
+- Deep Sleep capable ports for ESP32S3 :esphomepr:`4230` by :ghuser:`LeDominik`
+- Initialize all fields in ESPTime in PCF85063 :esphomepr:`4439` by :ghuser:`oxan`
+- Bump zeroconf from 0.47.1 to 0.47.3 :esphomepr:`4437` by :ghuser:`dependabot[bot]`
+- Automate syncing device classes with HA :esphomepr:`4438` by :ghuser:`oxan`
+- NeoPixel - Add support for ESP32-S3 :esphomepr:`4435` by :ghuser:`ajacques`
+- add SUB_BINARY_SENSOR macro to binary sensor :esphomepr:`4447` by :ghuser:`regevbr`
+- add SUB_TEXT_SENSOR macro to text sensor :esphomepr:`4448` by :ghuser:`regevbr`
+- Simplify sensor schema generation :esphomepr:`4462` by :ghuser:`balloob`
+- add SUB_NUMBER macro and schema to number :esphomepr:`4449` by :ghuser:`regevbr`
+- add SUB_BUTTON macro and ability to button schema to define the class :esphomepr:`4450` by :ghuser:`regevbr`
+- Simplify number_schema function :esphomepr:`4467` by :ghuser:`jesserockz`
+- Simplify button_schema function :esphomepr:`4468` by :ghuser:`jesserockz`
+- Simplify binary_sensor_schema function :esphomepr:`4469` by :ghuser:`jesserockz`
+- Add configurable color datapoint :esphomepr:`4383` by :ghuser:`irtimaled` (breaking-change)
+- Add internal_temperature component :esphomepr:`4330` by :ghuser:`Mat931` (new-integration)
+- Move remaining SENSOR_SCHEMA to use sensor_schema() :esphomepr:`4471` by :ghuser:`jesserockz`
+- Allow specifying target and current visual steps for climate :esphomepr:`4440` by :ghuser:`jesserockz`
+- Bump aioesphomeapi from 13.3.1 to 13.4.0 :esphomepr:`4472` by :ghuser:`dependabot[bot]`
+- toshiba: add support for quiet fan mode :esphomepr:`4283` by :ghuser:`MichaelMure`
+- Bump esptool from 4.4 to 4.5 :esphomepr:`4428` by :ghuser:`dependabot[bot]`
+- Support Mopeka Standard LPG tank bluetooth sensor :esphomepr:`4351` by :ghuser:`Fabian-Schmidt` (new-integration)
+- fix library override logic :esphomepr:`4474` by :ghuser:`mzakharo`
+- Sprinkler "v2" updates :esphomepr:`4159` by :ghuser:`kbx81` (breaking-change)
+- add person sensor (SEN21231) from usefulsensors :esphomepr:`4454` by :ghuser:`shreyaskarnik` (new-integration)
+- Initial stab at importing idf components :esphomepr:`4000` by :ghuser:`jesserockz`
+- add kuntze component :esphomepr:`4411` by :ghuser:`ssieb` (new-integration)
+- Add Haier climate component :esphomepr:`4001` by :ghuser:`Yarikx` (new-integration)
+- Bump esp-idf to 4.4.3 via platformio/espressif32 @ 5.3.0 :esphomepr:`4254` by :ghuser:`bdraco`
+- Add energy to pzemdc :esphomepr:`3626` by :ghuser:`andreashergert1984`
+- Update esp32 esp-idf dev and latest version numbers :esphomepr:`4479` by :ghuser:`jesserockz`
+- [ExternalRAMAllocator] Use same `heap_caps_malloc` parameter as `ps_malloc`. :esphomepr:`4484` by :ghuser:`Fabian-Schmidt`
+- Lock scheduler items while modifying them :esphomepr:`4410` by :ghuser:`oxan`
+- Move Font glyphs to SPI RAM. :esphomepr:`4485` by :ghuser:`Fabian-Schmidt`
+- Run CI on merge group :esphomepr:`4489` by :ghuser:`jesserockz`
+- Fix parallel invocations of repeat action :esphomepr:`4480` by :ghuser:`oxan`
+- Make test3 use huge_app :esphomepr:`4488` by :ghuser:`jesserockz`
+- Change variable "skip_updates" and "skip_updates_counter" type from "uint8_t" to "uint16_t" :esphomepr:`4487` by :ghuser:`GitforZhangXL`
+- Fix copy-pasta mistake :esphomepr:`4492` by :ghuser:`jesserockz`
+- Add int16 to codegen :esphomepr:`4507` by :ghuser:`jesserockz`
+- Update __init__.py :esphomepr:`4514` by :ghuser:`dashkhaneh`
+- Remove idf components before checking if any in config :esphomepr:`4506` by :ghuser:`jesserockz`
+- substitutions: Don't warn when passwords look like a substitution :esphomepr:`4161` by :ghuser:`tljuniper`
+- Fix typo :esphomepr:`4515` by :ghuser:`oxan`
+- implement pairing for bluetooth proxy :esphomepr:`4475` by :ghuser:`jagheterfredrik`
+- Bump docker dependencies :esphomepr:`4526` by :ghuser:`jesserockz`
+- Bump aioesphomeapi from 13.4.0 to 13.5.0 :esphomepr:`4525` by :ghuser:`dependabot[bot]`
+- Ensure component is ready before update. :esphomepr:`4523` by :ghuser:`Fabian-Schmidt`
+- climate: add on_control callbacks :esphomepr:`4511` by :ghuser:`nwf`
+- FS3000 sensor :esphomepr:`4502` by :ghuser:`kahrendt` (new-integration)
+- Bump esptool from 4.5 to 4.5.1 :esphomepr:`4497` by :ghuser:`dependabot[bot]`
+- Add support for multiple devices in bme680_bsec :esphomepr:`3550` by :ghuser:`bisbastuner`
+- Bump pytest from 7.2.1 to 7.2.2 :esphomepr:`4505` by :ghuser:`dependabot[bot]`
+- Bump pylint from 2.16.2 to 2.16.4 :esphomepr:`4524` by :ghuser:`dependabot[bot]`
+- Add absolute humidity component :esphomepr:`4519` by :ghuser:`DAVe3283` (new-integration)
+- Add ability to await safe mode in codegen :esphomepr:`4529` by :ghuser:`oxan`
+- sn74hc165 fixes :esphomepr:`4457` by :ghuser:`jesserockz` (breaking-change)
+- Add AS7341 spectral color sensor :esphomepr:`4331` by :ghuser:`mrgnr` (new-integration)
+- Fix ethernet driver setting gpio 5 high when no power pin defined :esphomepr:`4531` by :ghuser:`jesserockz`
+- Use PSRam for BLE scan results. :esphomepr:`4486` by :ghuser:`Fabian-Schmidt`
+- Bump esp-idf to 4.4.4 :esphomepr:`4528` by :ghuser:`bdraco`
+- Added pzemdc reset energy action :esphomepr:`4481` by :ghuser:`KG3RK3N`
+- Fix ethernet clk_mode for GPIO0_OUT :esphomepr:`4307` by :ghuser:`jorticus`
+- Add ESP32-S3 support in NeoPixelBus component :esphomepr:`4114` by :ghuser:`rcloran`
+- Renaming and extending the ili9341 to the ili9xxx component :esphomepr:`4275` by :ghuser:`nielsnl68` (new-integration) (breaking-change)
+- Drop unused, broken logging macros :esphomepr:`4534` by :ghuser:`oxan`
+- Revert storing Font glyphs in manually-allocated memory :esphomepr:`4516` by :ghuser:`oxan`
+- Correct BME680 gas calculation and heater_off :esphomepr:`4498` by :ghuser:`CarlosGS`
+- Add support for new mpu6050 clones responding with 0x70 address :esphomepr:`4546` by :ghuser:`jakehdk`
+- Add carbon dioxide device class to scd30 sensor schema. :esphomepr:`4547` by :ghuser:`murrayma`
+- Feat: add support for hex color in color component :esphomepr:`4493` by :ghuser:`dorianim`
+- Allow AUTO_LOAD to be a function :esphomepr:`4550` by :ghuser:`jesserockz`
+- On the ILI9xxx display's enable the psram on esp32 and allow big screen :esphomepr:`4551` by :ghuser:`nielsnl68`
+- Map gpio pins for touch on esp32-s2/s3 :esphomepr:`4552` by :ghuser:`jesserockz`
+- pipsolar component. Correct the sscanf format for QPIG command parsin… :esphomepr:`4165` by :ghuser:`eroldan`
+- Add state class back to uptime sensor :esphomepr:`4557` by :ghuser:`DAVe3283`
+- Added response for Tuya RSSI command :esphomepr:`4549` by :ghuser:`catalin2402`
+- Remove switch actions during config; bump setup priority :esphomepr:`4563` by :ghuser:`kbx81`
+- Mark esp32_touch supported only on standard esp32 variant :esphomepr:`4562` by :ghuser:`jesserockz`
+- fixing ``shrink`` and ``extend`` functions of the displaybuffer's Rect class :esphomepr:`4565` by :ghuser:`nielsnl68`
+
+Past Changelogs
+---------------
+
+- :doc:`2023.2.0`
+- :doc:`2022.12.0`
+- :doc:`2022.11.0`
+- :doc:`2022.10.0`
+- :doc:`2022.9.0`
+- :doc:`2022.8.0`
+- :doc:`2022.6.0`
+- :doc:`2022.5.0`
+- :doc:`2022.4.0`
+- :doc:`2022.3.0`
+- :doc:`2022.2.0`
+- :doc:`2022.1.0`
+- :doc:`2021.12.0`
+- :doc:`2021.11.0`
+- :doc:`2021.10.0`
+- :doc:`2021.9.0`
+- :doc:`2021.8.0`
+- :doc:`v1.20.0`
+- :doc:`v1.19.0`
+- :doc:`v1.18.0`
+- :doc:`v1.17.0`
+- :doc:`v1.16.0`
+- :doc:`v1.15.0`
+- :doc:`v1.14.0`
+- :doc:`v1.13.0`
+- :doc:`v1.12.0`
+- :doc:`v1.11.0`
+- :doc:`v1.10.0`
+- :doc:`v1.9.0`
+- :doc:`v1.8.0`
+- :doc:`v1.7.0`
diff --git a/changelog/2023.4.0.rst b/changelog/2023.4.0.rst
new file mode 100644
index 00000000000..aa863df177d
--- /dev/null
+++ b/changelog/2023.4.0.rst
@@ -0,0 +1,245 @@
+ESPHome 2023.4.0 - 19th April 2023
+==================================
+
+.. seo::
+ :description: Changelog for ESPHome 2023.4.0.
+ :image: /_static/changelog-2023.4.0.png
+ :author: Jesse Hills
+ :author_twitter: @jesserockz
+
+.. imgtable::
+ :columns: 3
+
+ Voice Assistant, components/voice_assistant, voice-assistant.svg
+ Microphone Core, components/microphone/index, microphone.svg
+ I2S Microphone, components/microphone/i2s_audio, i2s_audio.svg
+ MMC5603, components/sensor/mmc5603, mmc5603.jpg
+ KSZ8081 Ethernet, components/ethernet, ethernet.svg
+
+
+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 :doc:`/components/voice_assistant` component that allows you to use ESPHome devices as an input
+for `assist `__ in Home Assistant.
+
+With this also comes preliminary :doc:`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.
+
+.. raw:: html
+
+
+
+
+Keith joins Nabu Casa
+---------------------
+
+Nabu Casa is pleased to annouce that long time contributor Keith Burzinski (:ghuser:`kbx81`) is joining the
+team as a full time developer to help out on ESPHome. Keith created the :doc:`/components/sprinkler`,
+:doc:`/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.
+
+Breaking Changes
+----------------
+
+I²S Media Player
+^^^^^^^^^^^^^^^^
+
+With the introduction of the :doc:`/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 :doc:`/components/i2s_audio` component.
+
+.. code-block:: 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 :esphomepr:`4175` by :ghuser:`benhoff` (new-integration)
+- Add push to talk voice assistant :esphomepr:`4648` by :ghuser:`jesserockz` (new-integration)
+
+Breaking Changes
+^^^^^^^^^^^^^^^^
+
+- Disallow uart0/1/2 as ids in config :esphomepr:`4446` by :ghuser:`jesserockz` (breaking-change)
+- Require step to be set when calling register_number :esphomepr:`4622` by :ghuser:`jesserockz` (breaking-change)
+- Fix restore :esphomepr:`4655` by :ghuser:`spacemanspiff2007` (breaking-change)
+
+Beta Changes
+^^^^^^^^^^^^
+
+- debug component, allow without debug logging :esphomepr:`4685` by :ghuser:`jesserockz`
+- Fixed dns2 for ethernet :esphomepr:`4698` by :ghuser:`HeMan`
+- Add timeout to i2c write error logs :esphomepr:`4697` by :ghuser:`Szewcson`
+- Add event triggers to voice_assistant :esphomepr:`4699` by :ghuser:`jesserockz`
+- Call on_error if no api client connected that handles voice :esphomepr:`4709` by :ghuser:`jesserockz`
+- Add ethernet powerdown (fixes esphome/issues#4420) :esphomepr:`4706` by :ghuser:`tracestep`
+- Bump arduino platform version to 5.3.0 :esphomepr:`4713` by :ghuser:`jesserockz`
+
+All changes
+^^^^^^^^^^^
+
+- Mark unique_id() virtual method as deprecated :esphomepr:`4538` by :ghuser:`oxan`
+- Drop deprecated entity property base methods :esphomepr:`4539` by :ghuser:`oxan`
+- Format test files :esphomepr:`4541` by :ghuser:`jesserockz`
+- EntityBase: Icon string can stay in flash. :esphomepr:`4566` by :ghuser:`Fabian-Schmidt`
+- Update the delta filter to be able to take a percentage change :esphomepr:`4391` by :ghuser:`TrentHouliston`
+- Added missing PM_1_0 and PM_10_0 for PMS5003T and PMS5003ST :esphomepr:`4560` by :ghuser:`genestealer`
+- Add an option to force SPI into software mode :esphomepr:`4556` by :ghuser:`wupeka`
+- allow using a binary output for the status led :esphomepr:`4532` by :ghuser:`ssieb`
+- Add option flip_x :esphomepr:`4555` by :ghuser:`rafal83`
+- Bump aioesphomeapi from 13.5.0 to 13.5.1 :esphomepr:`4572` by :ghuser:`dependabot[bot]`
+- Verbose output of define. :esphomepr:`4576` by :ghuser:`Fabian-Schmidt`
+- Add support for ESP32 CAM 3MP and 5MP resolutions and arbitrary camera clock. :esphomepr:`4580` by :ghuser:`peterhalicky`
+- Add a simple 'skip_initial' filter :esphomepr:`4582` by :ghuser:`sybrenstuvel`
+- Fix outdated filter string in platformio_api :esphomepr:`4587` by :ghuser:`LordMike`
+- Split test3.yaml :esphomepr:`4591` by :ghuser:`jesserockz`
+- Disallow uart0/1/2 as ids in config :esphomepr:`4446` by :ghuser:`jesserockz` (breaking-change)
+- Upgrade clang-format to v13 :esphomepr:`4535` by :ghuser:`oxan`
+- B/W support for GooDisplay GDEY029T94 (as used on Adafruit MagTag) :esphomepr:`4222` by :ghuser:`AaronJackson`
+- Fix negative sqrt root in ct_clamp_sensor.cpp :esphomepr:`4236` by :ghuser:`jerome992`
+- Wrap ipv6 code a bit more :esphomepr:`4574` by :ghuser:`jesserockz`
+- Remove EntityBase from sprinkler :esphomepr:`4606` by :ghuser:`jesserockz`
+- Fix wrong port multiplexer name in dump GPIO function of sx1509 :esphomepr:`4592` by :ghuser:`skaldo`
+- Bump zeroconf from 0.47.3 to 0.47.4 :esphomepr:`4597` by :ghuser:`dependabot[bot]`
+- Bump pytest-asyncio from 0.20.3 to 0.21.0 :esphomepr:`4599` by :ghuser:`dependabot[bot]`
+- Limit range on filter time period for remote_receiver :esphomepr:`4604` by :ghuser:`RoboMagus`
+- add select_schema to select component :esphomepr:`4545` by :ghuser:`regevbr`
+- Add ability to clear the gatt cache :esphomepr:`4621` by :ghuser:`bdraco`
+- Bump actions/stale from 7 to 8 :esphomepr:`4615` by :ghuser:`dependabot[bot]`
+- Require step to be set when calling register_number :esphomepr:`4622` by :ghuser:`jesserockz` (breaking-change)
+- Lower range of CONF_FREQUENCY :esphomepr:`4619` by :ghuser:`berendhaan`
+- Allow entity names to be set to None :esphomepr:`4607` by :ghuser:`jesserockz`
+- Fix platform restriction for bme680_bsec :esphomepr:`4616` by :ghuser:`jesserockz`
+- Fix EzoCommandType enum :esphomepr:`4593` by :ghuser:`alfredopironti`
+- `EntityBase` Name can stay in flash. :esphomepr:`4594` by :ghuser:`Fabian-Schmidt`
+- feat: Add support to unsubscribe from BLE advertisements :esphomepr:`4620` by :ghuser:`richardhopton`
+- EntityBase: Move ObjectId to Flash :esphomepr:`4569` by :ghuser:`Fabian-Schmidt`
+- Add workflow to sync device classes with HA dev :esphomepr:`4629` by :ghuser:`jesserockz`
+- Synchronise Device Classes from Home Assistant :esphomepr:`4633` by :ghuser:`github-actions[bot]`
+- Remove AUTO_LOAD from as3935 :esphomepr:`4630` by :ghuser:`jesserockz`
+- Add ifdef to new bt proxy unsubscribe :esphomepr:`4634` by :ghuser:`jesserockz`
+- add bluetooth mac address in dump_config() :esphomepr:`4628` by :ghuser:`felixlungu`
+- Binary map bugfixes :esphomepr:`4636` by :ghuser:`kahrendt`
+- entity_base avoid padding bytes. :esphomepr:`4637` by :ghuser:`Fabian-Schmidt`
+- Avoid sensor padding. :esphomepr:`4638` by :ghuser:`Fabian-Schmidt`
+- Support advanced UART customization :esphomepr:`4465` by :ghuser:`Fabian-Schmidt`
+- Log calibration results at level INFO :esphomepr:`4240` by :ghuser:`Duckle29`
+- Number step not optional :esphomepr:`4649` by :ghuser:`RoboMagus`
+- VSCode / devcontainer updates :esphomepr:`4647` by :ghuser:`jesserockz`
+- Retry PN532_COMMAND_VERSION_DATA on setup() (fixes esphome/issues#3823) :esphomepr:`4651` by :ghuser:`tracestep`
+- Bump pylint from 2.16.4 to 2.17.2 :esphomepr:`4650` by :ghuser:`dependabot[bot]`
+- Bump black from 23.1.0 to 23.3.0 :esphomepr:`4635` by :ghuser:`dependabot[bot]`
+- Added in mmc5603 code :esphomepr:`4175` by :ghuser:`benhoff` (new-integration)
+- fix compilation with latest esp-idf :esphomepr:`4671` by :ghuser:`Mic92`
+- Bump zeroconf from 0.47.4 to 0.56.0 :esphomepr:`4674` by :ghuser:`dependabot[bot]`
+- Bump pytest from 7.2.2 to 7.3.0 :esphomepr:`4673` by :ghuser:`dependabot[bot]`
+- Add push to talk voice assistant :esphomepr:`4648` by :ghuser:`jesserockz` (new-integration)
+- Fix ESP32 SPI hardware assignment in Arduino fw :esphomepr:`4669` by :ghuser:`kbx81`
+- Fix some NFC/PN532 crashes :esphomepr:`4678` by :ghuser:`kbx81`
+- Add support for SSD1306 72x40 displays :esphomepr:`4659` by :ghuser:`johnsto`
+- Fix pin schema for i2s microphone :esphomepr:`4680` by :ghuser:`jesserockz`
+- Fix BedJet setup priority [fixes esphome/issues#3807] :esphomepr:`4677` by :ghuser:`jhansche`
+- Add always trigger stop :esphomepr:`4249` by :ghuser:`X-Ryl669`
+- Fix graph limits for negative values and other corner cases :esphomepr:`4253` by :ghuser:`unhold`
+- Fix cut-off on 2.13" waveshare/ttgo epaper displays :esphomepr:`4255` by :ghuser:`unhold`
+- [Ethernet] Add PHY KSZ8081 support :esphomepr:`4668` by :ghuser:`Fabian-Schmidt`
+- Fix restore :esphomepr:`4655` by :ghuser:`spacemanspiff2007` (breaking-change)
+- debug component, allow without debug logging :esphomepr:`4685` by :ghuser:`jesserockz`
+- Fixed dns2 for ethernet :esphomepr:`4698` by :ghuser:`HeMan`
+- Add timeout to i2c write error logs :esphomepr:`4697` by :ghuser:`Szewcson`
+- Add event triggers to voice_assistant :esphomepr:`4699` by :ghuser:`jesserockz`
+- Call on_error if no api client connected that handles voice :esphomepr:`4709` by :ghuser:`jesserockz`
+- Add ethernet powerdown (fixes esphome/issues#4420) :esphomepr:`4706` by :ghuser:`tracestep`
+- Bump arduino platform version to 5.3.0 :esphomepr:`4713` by :ghuser:`jesserockz`
+
+Past Changelogs
+---------------
+
+- :doc:`2023.3.0`
+- :doc:`2023.2.0`
+- :doc:`2022.12.0`
+- :doc:`2022.11.0`
+- :doc:`2022.10.0`
+- :doc:`2022.9.0`
+- :doc:`2022.8.0`
+- :doc:`2022.6.0`
+- :doc:`2022.5.0`
+- :doc:`2022.4.0`
+- :doc:`2022.3.0`
+- :doc:`2022.2.0`
+- :doc:`2022.1.0`
+- :doc:`2021.12.0`
+- :doc:`2021.11.0`
+- :doc:`2021.10.0`
+- :doc:`2021.9.0`
+- :doc:`2021.8.0`
+- :doc:`v1.20.0`
+- :doc:`v1.19.0`
+- :doc:`v1.18.0`
+- :doc:`v1.17.0`
+- :doc:`v1.16.0`
+- :doc:`v1.15.0`
+- :doc:`v1.14.0`
+- :doc:`v1.13.0`
+- :doc:`v1.12.0`
+- :doc:`v1.11.0`
+- :doc:`v1.10.0`
+- :doc:`v1.9.0`
+- :doc:`v1.8.0`
+- :doc:`v1.7.0`
diff --git a/changelog/index.rst b/changelog/index.rst
index c53744b1ab9..432d0558251 100644
--- a/changelog/index.rst
+++ b/changelog/index.rst
@@ -2,7 +2,7 @@ Changelog
=========
.. redirect::
- :url: /changelog/2023.2.0.html
+ :url: /changelog/2023.4.0.html
.. toctree::
:glob:
diff --git a/components/binary_sensor/index.rst b/components/binary_sensor/index.rst
index 8dd0a88706f..1f87eb7ea5e 100644
--- a/components/binary_sensor/index.rst
+++ b/components/binary_sensor/index.rst
@@ -27,6 +27,13 @@ you can always override it.
Configuration variables:
+- **name** (**Required**, string): The name for the binary sensor.
+
+ .. note::
+
+ If you have a :ref:`friendly_name ` set for your device and
+ 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 https://developers.home-assistant.io/docs/core/entity/binary-sensor/#available-device-classes
for a list of available options.
diff --git a/components/binary_sensor/rc522.rst b/components/binary_sensor/rc522.rst
index 0de0ef3e58c..48e60e6434c 100644
--- a/components/binary_sensor/rc522.rst
+++ b/components/binary_sensor/rc522.rst
@@ -1,39 +1,41 @@
-RC522 RFID
-==========
+RC522 NFC/RFID
+==============
.. seo::
- :description: Instructions for setting up RC522 RFID tag readers and tags in ESPHome
+ :description: Instructions for setting up RC522 NFC/RFID tag readers and tags in ESPHome
:image: rc522.jpg
- :keywords: RC522, RFID
+ :keywords: RC522, NFC, RFID
.. _rc522-component:
-The ``rc522`` component allows you to use RC522 RFID controllers
+.. figure:: images/rc522-full.jpg
+ :align: center
+ :width: 60.0%
+
+The ``rc522`` component allows you to use RC522 NFC/RFID controllers
(`datasheet `__, `Ali Express `__)
-with ESPHome. ESPHome can read the tag UID from it, every RFID tag comes with a unique
-UID value. Each known tag can be associated to a binary sensor, or you can use the tag information directly.
-See :ref:`rc522-setting_up_tags` for information on how to setup individual binary sensors for this component.
-The RC522 supports SPI, I²C and UART communication protocols, ESPHome can use either SPI or I²C.
+with ESPHome. ESPHome can read the UID from the tag. Every NFC/RFID tag has a unique "UID" value assigned at the time
+of manufacture. Tags can be associated with binary sensors, making it easy to determine when a specific tag is present.
+You can also use the tag information directly within ESPHome automations/lambdas. See :ref:`rc522-setting_up_tags` for
+information on how to setup individual binary sensors using this component.
+
+The RC522 IC supports SPI, I²C and UART communication protocols; ESPHome can use either SPI or I²C.
Component/Hub
-------------
-* If you have a module like the image above, it can only be used in SPI mode (`unless hacked `__)
- and you need to have an :ref:`SPI bus ` in your configuration with both the **miso_pin** and **mosi_pin** set.
+- If you have a module as shown in the image above, it can only be used in SPI mode
+ (`unless hacked `__) and you must define a :ref:`SPI bus `
+ in your configuration with both the **miso_pin** and **mosi_pin** set.
-* If you have a RC522 which communicates via I²C like in the M5 Stack then you need to have an :ref:`I²C ` bus configured.
-
-.. figure:: images/rc522-full.jpg
- :align: center
- :width: 60.0%
+- If you have a RC522 which communicates via I²C (as on the M5 Stack), you need to have an :ref:`I²C ` bus configured.
Over SPI
--------
-The ``rc522_spi`` component allows you to use RC522 RFID controllers with ESPHome. This component is a global hub that
-establishes the connection to the RC522 via :ref:`SPI ` (also available over I²C). Using the
-:ref:`RC522 binary sensors ` you can then create individual binary sensors that track if
-an RFID tag is currently detected by the RC522.
+The ``rc522_spi`` component allows you to use RC522 NFC/RFID controllers with ESPHome. This component is a global hub
+that establishes the connection to the RC522 via :ref:`SPI `. Using :ref:`RC522 binary sensors `,
+you can then create individual binary sensors that track if an NFC/RFID tag is currently detected by the RC522.
.. code-block:: yaml
@@ -52,24 +54,26 @@ Configuration variables:
- **cs_pin** (**Required**, :ref:`Pin Schema `): The pin on the ESP that the chip select line
is connected to.
-- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component ` if you want
- to use multiple SPI buses.
-- **on_tag** (*Optional*, :ref:`Automation `): An automation to perform when a tag is read. See
- :ref:`rc522-on_tag`.
- **reset_pin** (*Optional*, :ref:`Pin Schema `): The pin connected to the RST line. Some tests
shows the RC522 working okay without this.
- **update_interval** (*Optional*, :ref:`config-time`): The duration of each scan on the RC522. This affects the
duration that the individual binary sensors stay active when they're found.
If a device is not found within this time window, it will be marked as not present. Defaults to ``1s``.
+- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component ` if you want
+ to use multiple SPI buses.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
+- **on_tag** (*Optional*, :ref:`Automation `): An automation to perform when a tag is read. See
+ :ref:`rc522-on_tag`.
+- **on_tag_removed** (*Optional*, :ref:`Automation `): An automation to perform after a tag is removed. See
+ :ref:`rc522-on_tag_removed`.
Over I²C
--------
-The ``rc522_i2c`` component allows you to use RC522 RFID controllers with ESPHome. This component is a global hub that
-establishes the connection to the RC522 via :ref:`I²C ` (also available over SPI). Using the
-:ref:`RC522 binary sensors ` you can then create individual binary sensors that track if
-an RFID tag is currently detected by the RC522.
+The ``rc522_i2c`` component allows you to use RC522 NFC/RFID controllers with ESPHome. This component is a global hub
+that establishes the connection to the RC522 via :ref:`I²C ` (also available over SPI). Using the
+:ref:`RC522 binary sensors ` you can then create individual binary sensors that track if
+an NFC/RFID tag is currently detected by the RC522.
.. code-block:: yaml
@@ -86,27 +90,28 @@ Configuration variables:
************************
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x28``.
-- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component ` if you want
- to use multiple I²C buses.
-- **on_tag** (*Optional*, :ref:`Automation `): An automation to perform when a tag is read. See
- :ref:`rc522-on_tag`.
- **reset_pin** (*Optional*, :ref:`Pin Schema `): The pin connected to the RST line. Some tests
shows the RC522 working okay without this.
- **update_interval** (*Optional*, :ref:`config-time`): The duration of each scan on the RC522. This affects the
duration that the individual binary sensors stay active when they're found.
If a device is not found within this time window, it will be marked as not present. Defaults to ``1s``.
+- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component ` if you want
+ to use multiple I²C buses.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
+- **on_tag** (*Optional*, :ref:`Automation `): An automation to perform when a tag is read. See
+ :ref:`rc522-on_tag`.
+- **on_tag_removed** (*Optional*, :ref:`Automation `): An automation to perform after a tag is removed. See
+ :ref:`rc522-on_tag_removed`.
-
+Triggers
+--------
.. _rc522-on_tag:
-``on_tag`` Action
------------------
+``on_tag`` Trigger
+******************
-This automation will be triggered when the RC522 module responds with a tag. Please note that this
-can be called quite often (with an interval of ``update_interval``) as it's triggered repeatedly
-if the tag is re-read many times.
+This automation will be triggered immediately after the RC522 identifies a tag.
The parameter ``x`` this trigger provides is of type ``std::string`` and is the tag UID in the format
``74-10-37-94``. The configuration below will for example publish the tag ID on the MQTT topic ``rc522/tag``.
@@ -132,13 +137,35 @@ using :ref:`api-homeassistant_tag_scanned_action`.
then:
- homeassistant.tag_scanned: !lambda 'return x;'
-.. _rc522-tag:
+.. _rc522-on_tag_removed:
+
+``on_tag_removed`` Trigger
+**************************
+
+This automation will be triggered when the RC522 no longer "sees" a previously scanned tag.
+
+The parameter ``x`` this trigger provides is of type ``std::string`` and is the removed tag UID in the format
+``74-10-37-94``. The example configuration below will publish the removed tag ID on the MQTT topic ``pn7160/tag_removed``.
+
+.. code-block:: yaml
+
+ rc522_spi: # or rc522_i2c
+ # ...
+ on_tag_removed:
+ then:
+ - mqtt.publish:
+ topic: rc522/tag_removed
+ payload: !lambda 'return x;'
+
+
+
+.. _rc522-binary_sensor:
``rc522`` Binary Sensor
-----------------------
-The ``rc522`` binary sensor platform lets you track if an RFID tag with a given
-unique id (``uid``) is currently being detected by the RC522 or not.
+The ``rc522`` binary sensor platform lets you track if an NFC/RFID tag with a given unique id (``uid``) is currently
+being detected by the RC522 or not.
.. code-block:: yaml
@@ -160,7 +187,7 @@ unique id (``uid``) is currently being detected by the RC522 or not.
Configuration variables:
************************
-- **uid** (**Required**, string): The unique ID of the RFID tag. This is a hyphen-separated list
+- **uid** (**Required**, string): The unique ID of the NFC/RFID tag. This is a hyphen-separated list
of hexadecimal values. For example ``74-10-37-94``.
- **name** (**Required**, string): The name of the binary sensor.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
@@ -171,17 +198,16 @@ Configuration variables:
Setting Up Tags
---------------
-To set up binary sensors for specific RFID tags you first have to know their unique IDs. To obtain this
+To set up binary sensors for specific NFC/RFID tags you first have to know their unique IDs. To obtain this
id, first set up a simple RC522 configuration without any binary sensors like above.
-When your code is running and you approach the RC522 with an RFID Tag, you should see a message like this:
+When your code is running and you approach the RC522 with an NFC/RFID Tag, you should see a message like this:
.. code::
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.
+Then copy this id and create a ``binary_sensor`` entry as in the configuration example. Repeat this process for each tag.
See Also
--------
diff --git a/components/bluetooth_proxy.rst b/components/bluetooth_proxy.rst
index 0f83cbe70e5..4084b6d2778 100644
--- a/components/bluetooth_proxy.rst
+++ b/components/bluetooth_proxy.rst
@@ -61,13 +61,16 @@ To maximize the chances of catching advertisements of the sensors, you can set `
scan_parameters:
interval: 1100ms
window: 1100ms
+.. note::
+
+ For WiFi-based proxies, changing the ``interval`` or ``window`` from their default values may result in an unstable WiFi connection. Using the default values for ``interval`` and ``window`` will usually resolve any instability.
Avoid placing the ESP node in racks, close to routers/switches or other network equipment as EMI interference will degrade Bluetooth signal reception. For best results put as far away as possible, at least 3 meters distance from any other such equipment. Place your ESPHome devices close to the Bluetooth devices that you want to interact with for the best experience.
-Complete sample recommended configuration
------------------------------------------
+Complete sample recommended configuration for an ethernet-connected Bluetooth proxy
+-----------------------------------------------------------------------------------
-Below is a complete sample recommended configuration for a Bluetooth proxy. If you experience issues with your proxy, try reducing your configuration to be as similar to this as possible.
+Below is a complete sample recommended configuration for an ethernet-connected Bluetooth proxy. This configuration is not for a Wi-Fi based proxy. If you experience issues with your proxy, try reducing your configuration to be as similar to this as possible.
This configuration is for an Olimex ESP32-PoE-ISO board with an Ethernet connection to the network. If you use a different board, you must change the ``board`` substitution to match your board.
diff --git a/components/button/index.rst b/components/button/index.rst
index c91b1fac8ce..330ef4852a8 100644
--- a/components/button/index.rst
+++ b/components/button/index.rst
@@ -41,6 +41,12 @@ All buttons in ESPHome have a name and an optional icon.
Configuration variables:
- **name** (**Required**, string): The name for the button.
+
+ .. note::
+
+ If you have a :ref:`friendly_name ` set for your device and
+ you want the button to use that name, you can set ``name: None``.
+
- **icon** (*Optional*, icon): Manually set the icon to use for the button in the frontend.
- **internal** (*Optional*, boolean): Mark this component as internal. Internal components will
not be exposed to the frontend (like Home Assistant). Only specifying an ``id`` without
diff --git a/components/climate/anova.rst b/components/climate/anova.rst
index a05daf1c9a4..0cfa3eac71c 100644
--- a/components/climate/anova.rst
+++ b/components/climate/anova.rst
@@ -26,7 +26,7 @@ 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 :doc:`/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 Celcius so you may
+uses the unit you intend. All values within ESPHome are converted to Celsius so you may
need to do conversion again within the frontend if you use Fahrenheit.
.. warning::
diff --git a/components/climate/haier.rst b/components/climate/haier.rst
new file mode 100644
index 00000000000..62be4289333
--- /dev/null
+++ b/components/climate/haier.rst
@@ -0,0 +1,86 @@
+Haier Climate
+=============
+
+.. seo::
+ :description: Instructions for setting up a Haier climate devices.
+ :image: air-conditioner.svg
+
+The `haier` climate platform creates a Haier climate device.
+The component can be used as a replacement of a Haier proprietary WiFi modules such as KZW-W001 and KZW-W002.
+
+This component requires a :ref:`uart` to be setup.
+
+.. code-block:: yaml
+
+ logger:
+ baud_rate: 0 #Disable UART logging for ESP8266
+
+ uart:
+ rx_pin: GPIO3
+ tx_pin: GPIO1
+ baud_rate: 9600
+
+ climate:
+ platform: haier
+ name: Haier AC
+ supported_swing_modes:
+ - VERTICAL
+ - HORIZONTAL
+ - BOTH
+
+Configuration variables:
+------------------------
+
+- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
+- **name** (**Required**, string): The name of the climate device.
+- **update_interval** (*Optional*, :ref:`config-time`): How often device will be polled for status. Defaults to `5s`.
+- **supported_swing_modes** (*Optional*, list): List of supported swing modes. Possible values are: ``VERTICAL``, ``HORIZONTAL``, ``BOTH``.
+- All other options from :ref:`Climate `.
+
+Hardware setup
+--------------
+
+Most units will have a dedicated USB-A port for Haier WiFi module.
+The physical USB port is in fact UART and does not "speak" USB protocol.
+It uses four USB pins as 5V, GND, RX, TX.
+You can use spare male USB cable to connect esphome device directly to the climate appliance.
+
+Other units will not have USB ports, but will still probably have UART exposed somewhere on the main board.
+
+.. list-table:: Haier UART pinout
+ :header-rows: 1
+
+ * - Board
+ - USB
+ - Wire color
+ - ESP8266
+ * - 5V
+ - VCC
+ - red
+ - 5V
+ * - GND
+ - GND
+ - black
+ - GND
+ * - TX
+ - DATA+
+ - green
+ - RX
+ * - RX
+ - DATA-
+ - white
+ - TX
+
+.. figure:: images/usb_pinout.png
+ :align: center
+ :width: 70.0%
+
+ USB Pinout
+
+See Also
+--------
+
+- `esphaier `__
+- :doc:`/components/climate/index`
+- :apiref:`haier/climate/haier.h`
+- :ghedit:`Edit`
diff --git a/components/climate/images/usb_pinout.png b/components/climate/images/usb_pinout.png
new file mode 100644
index 00000000000..b2d3a61df97
Binary files /dev/null and b/components/climate/images/usb_pinout.png differ
diff --git a/components/climate/index.rst b/components/climate/index.rst
index ad5eab2b4b0..ceebe2525da 100644
--- a/components/climate/index.rst
+++ b/components/climate/index.rst
@@ -20,7 +20,7 @@ and can be put in different modes like ``HEAT``, ``COOL``, ``HEAT_COOL`` or ``OF
Base Climate Configuration
--------------------------
-All climate platforms in ESPHome inherit from the climate configuration schema.
+All climate platforms in ESPHome inherit from the climate configuration schema. In ESPHome, ``°C`` is assumed for all temperature values. Some platforms allow conversion or setting in ``°F``, this is specified separately.
.. code-block:: yaml
@@ -33,6 +33,13 @@ All climate platforms in ESPHome inherit from the climate configuration schema.
Configuration variables:
+- **name** (**Required**, string): The name of the climate device.
+
+ .. note::
+
+ If you have a :ref:`friendly_name ` set for your device and
+ you want the climate to use that name, you can set ``name: None``.
+
- **icon** (*Optional*, icon): Manually set the icon to use for the climate device in the frontend.
- **visual** (*Optional*): Visual settings for the climate device - these do not
affect operation and are solely for controlling how the climate device shows up in the
@@ -61,6 +68,41 @@ Advanced options:
for a list of available options. Requires Home Assistant 2021.11 or newer.
Set to ``""`` to remove the default entity category.
+MQTT options:
+
+- **action_state_topic** (*Optional*, string): The topic to publish
+ climate device action changes to.
+- **current_temperature_state_topic** (*Optional*, string): The topic to publish
+ current temperature changes to.
+- **fan_mode_state_topic** (*Optional*, string): The topic to publish
+ fan mode changes to.
+- **fan_mode_command_topic** (*Optional*, string): The topic to receive
+ fan mode commands on.
+- **mode_state_topic** (*Optional*, string): The topic to publish
+ climate device mode changes to.
+- **mode_command_topic** (*Optional*, string): The topic to receive
+ climate device mode commands on.
+- **preset_state_topic** (*Optional*, string): The topic to publish
+ preset changes to.
+- **preset_command_topic** (*Optional*, string): The topic to receive
+ preset commands on.
+- **swing_mode_state_topic** (*Optional*, string): The topic to publish
+ swing mode changes to.
+- **swing_mode_command_topic** (*Optional*, string): The topic to receive
+ swing mode commands on.
+- **target_temperature_state_topic** (*Optional*, string): The topic to publish
+ target temperature changes to.
+- **target_temperature_command_topic** (*Optional*, string): The topic to receive
+ target temperature commands on.
+- **target_temperature_high_state_topic** (*Optional*, string): The topic to publish
+ higher target temperature changes to.
+- **target_temperature_high_command_topic** (*Optional*, string): The topic to receive
+ higher target temperature commands on.
+- **target_temperature_low_state_topic** (*Optional*, string): The topic to publish
+ lower target temperature changes to.
+- **target_temperature_low_command_topic** (*Optional*, string): The topic to receive
+ lower target temperature commands on.
+- All other options from :ref:`MQTT Component `.
.. code-block:: yaml
@@ -184,42 +226,24 @@ This trigger is activated each time the state of the climate device is updated
on_state:
- logger.log: "State updated!"
-MQTT options:
+.. _climate-on_control_trigger:
-- **action_state_topic** (*Optional*, string): The topic to publish
- climate device action changes to.
-- **current_temperature_state_topic** (*Optional*, string): The topic to publish
- current temperature changes to.
-- **fan_mode_state_topic** (*Optional*, string): The topic to publish
- fan mode changes to.
-- **fan_mode_command_topic** (*Optional*, string): The topic to receive
- fan mode commands on.
-- **mode_state_topic** (*Optional*, string): The topic to publish
- climate device mode changes to.
-- **mode_command_topic** (*Optional*, string): The topic to receive
- climate device mode commands on.
-- **preset_state_topic** (*Optional*, string): The topic to publish
- preset changes to.
-- **preset_command_topic** (*Optional*, string): The topic to receive
- preset commands on.
-- **swing_mode_state_topic** (*Optional*, string): The topic to publish
- swing mode changes to.
-- **swing_mode_command_topic** (*Optional*, string): The topic to receive
- swing mode commands on.
-- **target_temperature_state_topic** (*Optional*, string): The topic to publish
- target temperature changes to.
-- **target_temperature_command_topic** (*Optional*, string): The topic to receive
- target temperature commands on.
-- **target_temperature_high_state_topic** (*Optional*, string): The topic to publish
- higher target temperature changes to.
-- **target_temperature_high_command_topic** (*Optional*, string): The topic to receive
- higher target temperature commands on.
-- **target_temperature_low_state_topic** (*Optional*, string): The topic to publish
- lower target temperature changes to.
-- **target_temperature_low_command_topic** (*Optional*, string): The topic to receive
- lower target temperature commands on.
-- All other options from :ref:`MQTT Component `.
+``climate.on_control`` Trigger
+******************************
+This trigger is activated each time a *control* input of the climate device
+is updated via a ``ClimateCall`` (which includes changes coming in from Home
+Assistant). That is, this trigger is activated for, for example, changes to
+the mode, *but not* on temperature measurements. It will be invoked prior to
+the ``on_state`` trigger, if both are defined.
+
+.. code-block:: yaml
+
+ climate:
+ - platform: midea # or any other platform
+ # ...
+ on_control:
+ - logger.log: "Control input received; configuration updated!"
See Also
--------
diff --git a/components/climate/midea.rst b/components/climate/midea.rst
index 38b89930461..fc560077e9f 100644
--- a/components/climate/midea.rst
+++ b/components/climate/midea.rst
@@ -20,7 +20,7 @@ The ``midea`` component creates a Midea air conditioner climate device.
- `Senville `_
- and maybe others
- Control is possible with a custom dongle. Example of hardware implementation is `IoT Uni Dongle `_ or `Midea SLWF-01pro `_ (`store `_, `Tindie `_).
+ Control is possible with a custom dongle. Example of hardware implementation is `IoT Uni Dongle `_ or `Midea SLWF-01pro `_ (`CloudFree `_, `Tindie `_).
.. code-block:: yaml
diff --git a/components/climate/tuya.rst b/components/climate/tuya.rst
index 10f61618d85..fe48beb1bab 100644
--- a/components/climate/tuya.rst
+++ b/components/climate/tuya.rst
@@ -7,7 +7,7 @@ Tuya Climate
The ``tuya`` climate platform creates a climate device from a tuya component.
-The Tuya fan requires a :doc:`/components/tuya` to be configured.
+Tuya climate requires a :doc:`/components/tuya` to be configured.
.. code-block:: text
diff --git a/components/cover/index.rst b/components/cover/index.rst
index 4e1170faa33..d6eaeff3b16 100644
--- a/components/cover/index.rst
+++ b/components/cover/index.rst
@@ -28,6 +28,13 @@ All cover config schemas inherit from this schema - you can set these keys for c
Configuration variables:
+- **name** (**Required**, string): The name for the cover.
+
+ .. note::
+
+ If you have a :ref:`friendly_name ` set for your device and
+ you want the cover to use that name, you can set ``name: None``.
+
- **device_class** (*Optional*, string): The device class for the
sensor. See https://www.home-assistant.io/components/cover/ for a list of available options.
- **icon** (*Optional*, icon): Manually set the icon to use for the cover in the frontend.
diff --git a/components/cover/time_based.rst b/components/cover/time_based.rst
index e5b3217138b..0f5e542dd0f 100644
--- a/components/cover/time_based.rst
+++ b/components/cover/time_based.rst
@@ -52,6 +52,13 @@ Configuration variables:
detectors. In this configuration the ``stop_action`` is not performed when the open or close
time is completed and if the cover is commanded to open or close the corresponding actions
will be performed without checking current state. Defaults to ``false``.
+- **manual_control** (*Optional*, boolean): For covers with manual external controls. With this
+ configuration if the cover is commanded to open or close the corresponding actions will be
+ performed even if the current state fully open or fully closed matches desired state, then
+ ``stop_action`` will be called after the full duration of the action elapses.
+ The current state will then be relearned upon completion.
+ It's recommended to set ``assumed_state`` to true so the cover control button aren't disabled
+ in the interface. Defaults to ``false``.
- **assumed_state** (*Optional*, boolean): Whether the true state of the cover is not known.
This will make the Home Assistant frontend show buttons for both OPEN and CLOSE actions, instead
of hiding or disabling one of them. Defaults to ``true``.
diff --git a/components/display/ili9341.rst b/components/display/ili9xxx.rst
similarity index 83%
rename from components/display/ili9341.rst
rename to components/display/ili9xxx.rst
index 58da05c1694..030e287cd8e 100644
--- a/components/display/ili9341.rst
+++ b/components/display/ili9xxx.rst
@@ -1,21 +1,25 @@
-ILI9341 TFT LCD
-===============
+
+ILI9xxx TFT LCD Series
+======================
.. seo::
- :description: Instructions for setting up ILI9341 TFT LCD display drivers.
+ :description: Instructions for setting up ILI9xxx TFT LCD display drivers.
:image: ili9341.jpg
-.. _ili9341:
+.. _ili9xxx:
Usage
-----
+This component is the successor of the ILI9341 component allowing to control more display drivers and use 16bit colors when enough free ram.
-The ``ili9341`` display platform allows you to use
+The ``ILI9xxx`` display platform allows you to use
ILI9341 (`datasheet `__,
-`Aliexpress `__)
-displays with ESPHome. As this is a somewhat higher resolution display and may require pins
+`Aliexpress `__) and other
+displays from the same chip family with ESPHome. As this is a somewhat higher resolution display and may require pins
beyond the typical SPI connections, it is better suited for use with the ESP32.
+**Note:** To use 16bit instead of 8bit colors use a esp32 with enough PSRAM the display.
+
.. figure:: images/ili9341-full.jpg
:align: center
:width: 75.0%
@@ -27,15 +31,13 @@ beyond the typical SPI connections, it is better suited for use with the ESP32.
# Example minimal configuration entry
display:
- - platform: ili9341
- model: TFT 2.4
+ - platform: ili9xxx
+ model: ili9341
cs_pin: 14
dc_pin: 27
- led_pin: 32 ### see note below ###
reset_pin: 33
-
lambda: |-
- it.fill(Color::BLACK);
+ it.fill(COLOR_BLACK);
it.print(0, 0, id(my_font), id(my_red), TextAlign::TOP_LEFT, "Hello World!");
Configuration variables:
@@ -43,15 +45,12 @@ Configuration variables:
- **model** (**Required**): The model of the display. Options are:
- - ``M5STACK``
- - ``TFT 2.4``
- - ``TFT 2.4R`` (ILI9342)
+ - ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R``
+ - ``ILI9341``, ``ILI9342``, ``ILI9481``, ``ILI9486``, ``ILI9488``, ``ST7796``
- **cs_pin** (*Optional*, :ref:`Pin Schema `): The CS pin.
- **dc_pin** (**Required**, :ref:`Pin Schema `): The DC pin.
- **reset_pin** (*Optional*, :ref:`Pin Schema `): The RESET pin.
-- **led_pin** (*Optional*, :ref:`Pin Schema `): The display's backlight pin. **Note:** Connect to a
- PWM-capable pin to switch/dim the display's backlight **or** save a pin by connecting it through a 3.3K resistor to the +3V supply.
- **rotation** (*Optional*): Set the rotation of the display. Everything drawn in the ``lambda:`` will be rotated
per this option. One of ``0°`` (default), ``90°``, ``180°``, or ``270°``.
- **lambda** (*Optional*, :ref:`lambda `): The lambda to use for rendering the content on the display.
@@ -62,7 +61,7 @@ Configuration variables:
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **color_palette** (*Optional*): The type of color pallet that will be used in the ESP's internal 8-bits-per-pixel buffer. This can be used to improve color depth quality of the image. For example if you know that the display will only be showing grayscale images, the clarity of the display can be improved by targeting the available colors to monochrome only. Options are:
-
+
- ``NONE`` (default)
- ``GRAYSCALE``
- ``IMAGE_ADAPTIVE``
@@ -124,7 +123,7 @@ To configure a dimmable backlight:
light:
- platform: monochromatic
output: gpio_32_backlight_pwm
- name: "ILI9341 Display Backlight"
+ name: "Display Backlight"
id: back_light
restore_mode: ALWAYS_ON
@@ -139,11 +138,10 @@ To configure an image adaptive color pallet to show greater than 8 bit color dep
type: RGB24
display:
- - platform: ili9341
- model: TFT 2.4
+ - platform: ili9xxx
+ model: ili9341
cs_pin: 5
dc_pin: 4
- led_pin: 15
reset_pin: 22
rotation: 90
id: tft_ha
@@ -158,5 +156,5 @@ See Also
--------
- :doc:`index`
-- :apiref:`ili9341/ili9341_display.h`
+- :apiref:`ili9xxx/ili9xxx_display.h`
- :ghedit:`Edit`
diff --git a/components/display/index.rst b/components/display/index.rst
index 6994b087807..b33c6859865 100644
--- a/components/display/index.rst
+++ b/components/display/index.rst
@@ -465,13 +465,36 @@ A ``color`` component exists for just this purpose:
blue: 25%
white: 0%
+Alternatively, you can use ``_int`` to specify the color as an int value:
+
+.. code-block:: yaml
+
+ color:
+ - id: my_light_red
+ red_int: 255
+ green_int: 51
+ blue_int: 64
+ white_int: 0
+
+Or, if you are more comforatble with hex values, you can use ``hex``:
+
+.. code-block:: yaml
+
+ color:
+ - id: my_light_red
+ hex: FF3340
Configuration variables:
- **red** (*Optional*, percentage): The percentage of the red component. Defaults to ``100%``.
+- **red_int** (*Optional*, integer): The brightness of the red component on a scale of ``0`` to ``255``. Defaults to ``255``.
- **green** (*Optional*, percentage): The percentage of the green component. Defaults to ``100%``.
+- **green_int** (*Optional*, integer): The brightness of the green component on a scale of ``0`` to ``255``. Defaults to ``255``.
- **blue** (*Optional*, percentage): The percentage of the blue component. Defaults to ``100%``.
+- **blue_int** (*Optional*, integer): The brightness of the blue component on a scale of ``0`` to ``255``. Defaults to ``255``.
- **white** (*Optional*, percentage): The percentage of the white component. Defaults to ``100%``.
+- **white_int** (*Optional*, integer): The brightness of the white component on a scale of ``0`` to ``255``. Defaults to ``255``.
+- **hex** (*Optional*, string): The color in hexadecimal representation. Defaults to ``FFFFFF``.
RGB displays use red, green, and blue, while grayscale displays may use white.
diff --git a/components/display/lcd_display.rst b/components/display/lcd_display.rst
index 8527c9b39a4..bf83f011383 100644
--- a/components/display/lcd_display.rst
+++ b/components/display/lcd_display.rst
@@ -266,6 +266,7 @@ See Also
- :doc:`/components/switch/gpio`
- :doc:`/components/binary_sensor/gpio`
- :ref:`LCD Menu `
+- :ref:`Add pages to LCD display `
- :doc:`/components/pcf8574`
- `HD44780U (LCD-II) datasheet `__
- `Charset cheatsheet `__
diff --git a/components/display/max7219.rst b/components/display/max7219.rst
index b60386cae62..4959dbb1032 100644
--- a/components/display/max7219.rst
+++ b/components/display/max7219.rst
@@ -104,7 +104,7 @@ segment of the previous position will be enabled.
// Print the current time
it.print(" ");
- it.strftime("%H.%M.%S");
+ it.strftime("%H.%M.%S", id(esptime).now());
// Result for 10:06:42 -> "10.06.42 "
// Change the display intnsity based on another id.
diff --git a/components/display/max7219digit.rst b/components/display/max7219digit.rst
index dd4db5f1307..2c7923c43cc 100644
--- a/components/display/max7219digit.rst
+++ b/components/display/max7219digit.rst
@@ -68,6 +68,7 @@ Configuration variables:
- **id** (*Optional*, :ref:`config-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: 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``.
.. _display-max7219digit_lambda:
diff --git a/components/display/ssd1306.rst b/components/display/ssd1306.rst
index 6733cceb637..6b322309ef4 100644
--- a/components/display/ssd1306.rst
+++ b/components/display/ssd1306.rst
@@ -51,6 +51,7 @@ Configuration variables:
- ``SSD1306 128x32`` - SSD1306 with 128 columns and 32 rows
- ``SSD1306 128x64``
- ``SSD1306 96x16``
+ - ``SSD1306 72x40``
- ``SSD1306 64x48``
- ``SH1106 128x32``
- ``SH1106 128x64``
@@ -130,6 +131,7 @@ Configuration variables:
- ``SSD1306 128x32`` (SSD1306 with 128 columns and 32 rows)
- ``SSD1306 128x64``
- ``SSD1306 96x16``
+ - ``SSD1306 72x40``
- ``SSD1306 64x48``
- ``SH1106 128x32``
- ``SH1106 128x64``
diff --git a/components/display/st7789v.rst b/components/display/st7789v.rst
index 642e986145b..b640fc2a852 100644
--- a/components/display/st7789v.rst
+++ b/components/display/st7789v.rst
@@ -218,37 +218,37 @@ appropriate lines of C code in the lambda to hide or show the image or text as y
id: tdisplay_button_input_1
# Allow dimmable control of the backlight (pin GPIO4)
- output:
- - platform: ledc
- pin: GPIO4
- id: gpio4
-
- light:
- - platform: monochromatic
- output: gpio4
- name: "Backlight"
-
- image:
- - file: "image.png"
- id: my_image
- resize: 200x200
- type: RGB24
-
- time:
- - platform: homeassistant
- id: esptime
-
- spi:
- clk_pin: GPIO18
- mosi_pin: GPIO19
-
- display:
- - platform: st7789v
- cs_pin: GPIO5
- dc_pin: GPIO16
- reset_pin: GPIO23
- rotation: 270
- lambda: |-
+ output:
+ - platform: ledc
+ pin: GPIO4
+ id: gpio4
+
+ light:
+ - platform: monochromatic
+ output: gpio4
+ name: "Backlight"
+
+ image:
+ - file: "image.png"
+ id: my_image
+ resize: 200x200
+ type: RGB24
+
+ time:
+ - platform: homeassistant
+ id: esptime
+
+ spi:
+ clk_pin: GPIO18
+ mosi_pin: GPIO19
+
+ display:
+ - platform: st7789v
+ cs_pin: GPIO5
+ dc_pin: GPIO16
+ reset_pin: GPIO23
+ rotation: 270
+ lambda: |-
it.rectangle(0, 0, it.get_width(), it.get_height(), id(my_blue));
it.rectangle(0, 20, it.get_width(), it.get_height(), id(my_blue)); // header bar
diff --git a/components/display/waveshare_epaper.rst b/components/display/waveshare_epaper.rst
index b883d9e535c..6eeb9d23029 100644
--- a/components/display/waveshare_epaper.rst
+++ b/components/display/waveshare_epaper.rst
@@ -97,6 +97,7 @@ Configuration variables:
- ``7.50inV2`` - Can't use with an ESP8266 as it runs out of RAM
- ``7.50inV2alt`` (alternative version to the above ``7.50inV2``)
- ``7.50in-hd-b`` - Can't use with an ESP8266 as it runs out of RAM
+ - ``gdey029t94`` - GooDisplay GDEY029T94, as used on the AdaFruit MagTag
- **busy_pin** (*Optional*, :ref:`Pin Schema `): The BUSY pin. Defaults to not connected.
- **reset_pin** (*Optional*, :ref:`Pin Schema `): The RESET pin. Defaults to not connected.
diff --git a/components/esp32_camera.rst b/components/esp32_camera.rst
index 73e402401ae..8361f0daf44 100644
--- a/components/esp32_camera.rst
+++ b/components/esp32_camera.rst
@@ -53,8 +53,8 @@ Connection Options:
- **external_clock** (**Required**): The configuration of the external clock to drive the camera.
- **pin** (**Required**, pin): The pin the external clock line is connected to.
- - **frequency** (*Optional*, float): The frequency of the external clock, must be either 20MHz
- or 10MHz. Defaults to ``20MHz``.
+ - **frequency** (*Optional*, float): The frequency of the external clock, must be between 10
+ and 20MHz. Defaults to ``20MHz``.
- **i2c_pins** (**Required**): The I²C control pins of the camera.
@@ -90,6 +90,15 @@ Image Settings:
- ``1024x768`` (XGA)
- ``1280x1024`` (SXGA)
- ``1600x1200`` (UXGA)
+ - ``1920x1080`` (FHD)
+ - ``720x1280`` (Portrait HD)
+ - ``864x1536`` (Portrait 3MP)
+ - ``2048x1536`` (QXGA)
+ - ``2560x1440`` (QHD)
+ - ``2560x1600`` (WQXGA)
+ - ``1080x1920`` (Portrait FHD)
+ - ``2560x1920`` (QSXGA)
+
- **jpeg_quality** (*Optional*, int): The JPEG quality that the camera should encode images with.
From 10 (best) to 63 (worst). Defaults to ``10``.
diff --git a/components/esphome.rst b/components/esphome.rst
index c5a25ac384d..bbd4781d2dc 100644
--- a/components/esphome.rst
+++ b/components/esphome.rst
@@ -29,6 +29,9 @@ Configuration variables:
characters, digits and hyphens, and can be at most 24 characters long by default, or 31
characters long if ``name_add_mac_suffix`` is ``false``.
See :ref:`esphome-changing_node_name`.
+- **friendly_name** (*Optional*, string): This is the name sent to the frontend. It is used
+ by Home Assistant as the integration name, device name, and is automatically prefixed to entities
+ where necessary.
Advanced options:
@@ -318,10 +321,16 @@ The same procedure can be done for changing the static IP of a device.
Adding the MAC address as a suffix to the device name
-----------------------------------------------------
-Using ``name_add_mac_suffix`` allows the user to compile a single binary file to flash
-many of the same device and they will all have unique names/hostnames.
-Note that you will still need to create an individual YAML config file if you want to
-OTA update the devices in the future.
+Using ``name_add_mac_suffix`` allows :doc:`creators ` to
+provision multiple devices at the factory with a single firmware and still
+have unique identification for customer installs.
+
+.. note::
+
+ End users will need to create an individual YAML config file if they want to OTA update the
+ devices in the future. Creators can facilitate this process by providing ``dashboard_import`` URL
+ for end users. This allows them to easily update their devices as new features are made available
+ upstream.
.. _esphome-creators_project:
diff --git a/components/ethernet.rst b/components/ethernet.rst
index cd49e13084d..c6405d9fa98 100644
--- a/components/ethernet.rst
+++ b/components/ethernet.rst
@@ -40,6 +40,7 @@ Configuration variables:
- ``DP83848``
- ``IP101``
- ``JL1101``
+ - ``KSZ8081``
- **mdc_pin** (**Required**, :ref:`config-pin`): The MDC pin of the board.
Usually this is ``GPIO23``.
diff --git a/components/fan/hbridge.rst b/components/fan/hbridge.rst
index 19501f5c065..0eca3db8377 100644
--- a/components/fan/hbridge.rst
+++ b/components/fan/hbridge.rst
@@ -50,7 +50,7 @@ Configuration variables:
- **enable_pin** (*Optional*, :ref:`config-id`): The id of the
:ref:`float output