From d8d06a274a2a72ae20a1160603714dcf412bdcdb Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:52:43 +0900 Subject: [PATCH 01/22] Add 'important' class to css to fix for dark mode (#3470) --- _static/custom.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_static/custom.css b/_static/custom.css index b442b6a9e..451d5cb4b 100644 --- a/_static/custom.css +++ b/_static/custom.css @@ -256,7 +256,7 @@ div.body p, div.body dd, div.body li, div.body blockquote { background: #212121; color: #ececec; } - + } body, div.body { @@ -281,7 +281,7 @@ div.body p, div.body dd, div.body li, div.body blockquote { color: #ececec; background-color: #212121; } - + a, a.reference, a:visited { color: #00bfff; border-bottom: 1px dotted #00bfff; @@ -326,7 +326,7 @@ div.body p, div.body dd, div.body li, div.body blockquote { color: #e2e2e2; } - div.note, div.tip { + div.note, div.tip, div.important { background-color: #2d2c2c; border: 1px solid #808080; } @@ -339,4 +339,4 @@ div.body p, div.body dd, div.body li, div.body blockquote { background-color: #8e8129; } -} \ No newline at end of file +} From c6df0af940bd66cd9df45b18769abd4b58d8c524 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 09:59:59 +0900 Subject: [PATCH 02/22] Bump version to 2023.12.0b4 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index d867263bd..11abf2276 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.12.0b3 +PROJECT_NUMBER = 2023.12.0b4 # 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/Makefile b/Makefile index 3cc81ec93..65393a4c0 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.12.0b3 +ESPHOME_REF = 2023.12.0b4 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index 78c6e5434..bdadbfc8c 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.12.0b3 \ No newline at end of file +2023.12.0b4 \ No newline at end of file diff --git a/conf.py b/conf.py index 24df7ee9d..ff0ab1554 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.12" # The full version, including alpha/beta/rc tags. -release = "2023.12.0b3" +release = "2023.12.0b4" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 7fff990f8f497e3ca5072b7004b42d733467eb26 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:16:18 +0900 Subject: [PATCH 03/22] Update changelog for 2023.12.0b4 --- changelog/2023.12.0.rst | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index f7f88d3be..e72893986 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -20,6 +20,33 @@ ESPHome 2023.12.0 - 20th December 2023 PN7150, components/binary_sensor/pn7150, pn7150.jpg PN716X, components/binary_sensor/pn7160, pn716x.jpg +Graphical Menu +-------------- + +Following on from the previous :doc:`/components/display_menu/lcd_menu` that was only for LCD displays, +there is now a new :doc:`/components/display_menu/graphical_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. The error can be bypassed by specifically adding another config item to all of the +duplicate pin definitions. See the :ref:`config-pin_schema` for details. + +Touchscreen internal changes +---------------------------- + +The touchscreen compoenent code has had a big overhaul which breaks any external components or open PRs for +new touchscreens. See :esphomepr:`4596` for details if this affects you. + +MCP3008 breaking changes +------------------------ + +The MCP3008 has has 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. + Full list of changes -------------------- @@ -46,6 +73,7 @@ Breaking Changes - mcp3008: Tidy up and fix auto load bug :esphomepr:`5842` by :ghuser:`jesserockz` (breaking-change) - Nextion colors parameters :esphomepr:`5699` by :ghuser:`edwardtfn` (breaking-change) - Checks for pins used in multiple places :esphomepr:`5666` by :ghuser:`clydebarrow` (breaking-change) +- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) Beta Changes ^^^^^^^^^^^^ @@ -63,6 +91,11 @@ Beta Changes - web_server_idf: fix call with hardcoded http code :esphomepr:`5942` by :ghuser:`dentra` - Revert pure virtual functions in UART component from #5920 :esphomepr:`5932` by :ghuser:`DrCoolzic` - Use the correct UART/`Serial` when CDC is enabled :esphomepr:`5957` by :ghuser:`kbx81` +- Fix build issue with UART component when building with Arduino and CDC :esphomepr:`5964` by :ghuser:`kbx81` +- Fix I2CBus::write() bug and add i2c documentation :esphomepr:`5947` by :ghuser:`DrCoolzic` +- Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` +- Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` +- Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` All changes ^^^^^^^^^^^ @@ -201,6 +234,11 @@ All changes - web_server_idf: fix call with hardcoded http code :esphomepr:`5942` by :ghuser:`dentra` - Revert pure virtual functions in UART component from #5920 :esphomepr:`5932` by :ghuser:`DrCoolzic` - Use the correct UART/`Serial` when CDC is enabled :esphomepr:`5957` by :ghuser:`kbx81` +- Fix build issue with UART component when building with Arduino and CDC :esphomepr:`5964` by :ghuser:`kbx81` +- Fix I2CBus::write() bug and add i2c documentation :esphomepr:`5947` by :ghuser:`DrCoolzic` +- Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` +- Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` +- Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` Past Changelogs --------------- From c8741f5e7b95da2a879a80c3cdba8b92bbaa0681 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:16:47 +0900 Subject: [PATCH 04/22] Update supporters for 2023.12.0b4 --- guides/supporters.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 6e8e54e8d..c5a6212e9 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -81,6 +81,7 @@ Contributors - `Andreas Mandel (@amandel) `__ - `Amish Vishwakarma (@amishv) `__ - `Amit Keret (@amitkeret) `__ +- `Ammar Askar (@ammaraskar) `__ - `Jason Nader (@ammgws) `__ - `Branden Cash (@ammmze) `__ - `Alexander Momchilov (@amomchilov) `__ @@ -873,6 +874,7 @@ Contributors - `Mykle (@myklemykle) `__ - `Mynasru (@Mynasru) `__ - `Kevin Uhlir (@n0bel) `__ +- `n6ham (@n6ham) `__ - `N6RDV (@N6RDV) `__ - `Erik Näsström (@Naesstrom) `__ - `H. Árkosi Róbert (@nagyrobi) `__ @@ -1292,4 +1294,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated December 18, 2023.* +*This page was last updated December 20, 2023.* From d3f194bcc8ce4cb331b28d26fa84291e33303112 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 10:35:11 +0900 Subject: [PATCH 05/22] Fix doc link --- changelog/2023.12.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index e72893986..6a0430c79 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -24,7 +24,7 @@ Graphical Menu -------------- Following on from the previous :doc:`/components/display_menu/lcd_menu` that was only for LCD displays, -there is now a new :doc:`/components/display_menu/graphical_menu` that can be used with any +there is now a new :doc:`/components/display_menu/graphical_display_menu` that can be used with any graphical/pixel based display. Pin Reuse validation From fea3671c7c3911fa12868726fb0248851cbac1e2 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 19 Dec 2023 20:45:10 -0600 Subject: [PATCH 06/22] Update logger component docs for new USB support (#3469) --- components/logger.rst | 110 +++++++++++++++++++++++++++++++++++------- 1 file changed, 93 insertions(+), 17 deletions(-) diff --git a/components/logger.rst b/components/logger.rst index 95d420962..4db85eb2c 100644 --- a/components/logger.rst +++ b/components/logger.rst @@ -35,8 +35,8 @@ Advanced settings: - **tx_buffer_size** (*Optional*, int): The size of the buffer used for log messages. Decrease this if you’re having memory problems. Defaults to ``512``. -- **hardware_uart** (*Optional*, string): The Hardware UART to use for logging. - Defaults to ``UART0``. +- **hardware_uart** (*Optional*, string): The Hardware UART to use for logging. The default varies depending on + the specific processor/chip and framework you are using. See the :ref:`table below `. - **esp8266_store_log_strings_in_flash** (*Optional*, boolean): If set to false, disables storing log strings in the flash section of the device (uses more memory). Defaults to true. - **on_message** (*Optional*, :ref:`Automation `): An action to be @@ -52,23 +52,99 @@ Advanced settings: Hardware UARTs -------------- -The logger component makes use of platform-specific hardware UARTs for serial logging. -By default, the logger will occupy ``UART0``. The ESP32 has three hardware UARTs, all of -which can be used for both transmit and receive. The ESP8266 only has two hardware UARTs, -one of which is transmit-only. The ESP8266 ``UART0`` can also be 'swapped' to TX/RX on the -CTS/RTS pins, if you need to use GPIO1 and GPIO3 for something else. Note that the common -NodeMCU boards have their USB-UART Adapters fixed to the default GPIOs used by ``UART0``, -so if you use anything else you will not get log messages over the on-board USB. +The logger component makes use of platform-specific hardware UARTs for serial logging. For example, the ESP32 +has three hardware UARTs, all of which can be used for both transmit and receive. The ESP8266 only has two +hardware UARTs, one of which is transmit-only. The ESP8266's ``UART0`` can also be "swapped" to TX/RX on the +CTS/RTS pins in the event that you need to use GPIO1 and GPIO3 for something else. -Possible Hardware UART configurations: +Note that many common boards have their USB-to-serial adapters fixed to the default GPIOs used by ``UART0``, +so if you use any other configuration you will not get log messages over the on-board USB. -- ``UART0`` - TX: GPIO1, RX: GPIO3 -- ``UART0_SWAP`` - TX: GPIO15, RX: GPIO13 (Only on ESP8266) -- ``UART1`` - TX: GPIO2, RX: None (Only on ESP8266) -- ``UART1`` - TX: GPIO9, RX: GPIO10 (Only on ESP32) -- ``UART2`` - TX: GPIO16, RX: GPIO17 (Only on ESP32 but not ESP32S2, ESP32S3 or ESP32C3) -- ``USB_CDC`` - uses the USB CDC driver (Only on ESP32S2 and ESP32S3) -- ``USB_SERIAL_JTAG`` - uses the USB Serial/JTAG driver (Only on ESP32S3 and ESP32C3) +Default UART GPIO Pins +********************** + +.. list-table:: + :header-rows: 1 + + * - + - ``UART0`` + - ``UART0_SWAP`` + - ``UART1`` + - ``UART2`` + - ``USB_CDC`` + - ``USB_SERIAL_JTAG`` + * - ESP8266 + - TX: 1, RX: 3 + - TX: 15, RX: 13 + - TX: 2, RX: N/A + - N/A + - N/A + - N/A + * - ESP32 + - TX: 1, RX: 3 + - N/A + - TX: 9, RX: 10 + - TX: 16, RX: 17 + - N/A + - N/A + * - ESP32-C3 + - TX: 21, RX: 20 + - N/A + - Undefined + - N/A + - N/A + - 18/19 + * - ESP32-S2 + - TX: 43, RX: 44 + - N/A + - TX: 17, RX: 18 + - N/A + - 19/20 + - N/A + * - ESP32-S3 + - TX: 43, RX: 44 + - N/A + - TX: 17, RX: 18 + - Undefined + - 19/20 + - 19/20 + +*Undefined* means that the logger component cannot use this harware UART at this time. + +.. _logger-default_hardware_interfaces: + +Default Hardware Interfaces +--------------------------- + +Because of the wide variety of boards and processors/chips available, we've selected varying default +hardware interfaces for logging. Many newer boards based on ESP32 variants (such as the C3, S2 and S3) +are using the ESP's on-board USB hardware peripheral while boards based on older processors (such as +the original ESP32 or ESP8266) continue to use USB-to-serial bridge ICs for communication. + +.. list-table:: + :header-rows: 1 + + * - + - Arduino + - ESP-IDF + * - ESP8266 + - ``UART0`` + - N/A + * - ESP32 + - ``UART0`` + - ``UART0`` + * - ESP32-C3 + - ``USB_CDC`` + - ``USB_SERIAL_JTAG`` + * - ESP32-S2 + - ``USB_CDC`` + - ``USB_CDC`` + * - ESP32-S3 + - ``USB_CDC`` + - ``USB_SERIAL_JTAG`` + * - RP2040 + - ``USB_CDC`` + - N/A .. _logger-log_levels: From 4fdd78c8ea87fb21e48c21c970b226904ab50061 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:43:45 +0900 Subject: [PATCH 07/22] Bump version to 2023.12.0b5 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index 11abf2276..c4d8bb1cb 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.12.0b4 +PROJECT_NUMBER = 2023.12.0b5 # 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/Makefile b/Makefile index 65393a4c0..c8bbb3d7e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.12.0b4 +ESPHOME_REF = 2023.12.0b5 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index bdadbfc8c..9b4685835 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.12.0b4 \ No newline at end of file +2023.12.0b5 \ No newline at end of file diff --git a/conf.py b/conf.py index ff0ab1554..88833f1c1 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.12" # The full version, including alpha/beta/rc tags. -release = "2023.12.0b4" +release = "2023.12.0b5" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 4bb0a0d7965b39a102ebcaf748a26373e296c5fc Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:44:05 +0900 Subject: [PATCH 08/22] Update changelog for 2023.12.0b5 --- changelog/2023.12.0.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index 6a0430c79..560395113 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -96,6 +96,7 @@ Beta Changes - Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` +- rename set_raw_touch_position_ to add_raw_touch_position_ :esphomepr:`5962` by :ghuser:`nielsnl68` All changes ^^^^^^^^^^^ @@ -239,6 +240,7 @@ All changes - Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` +- rename set_raw_touch_position_ to add_raw_touch_position_ :esphomepr:`5962` by :ghuser:`nielsnl68` Past Changelogs --------------- From 0d3b3536d3cdffc2be1ed8dfc53a56e72302add4 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:44:34 +0900 Subject: [PATCH 09/22] Update supporters for 2023.12.0b5 --- guides/supporters.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index c5a6212e9..68386799a 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -179,7 +179,6 @@ Contributors - `Brian Kaufman (@bkaufx) `__ - `JDavid (@blackhack) `__ - `blackshoals (@blackshoals) `__ -- `blacktirion (@blacktirion) `__ - `blakadder (@blakadder) `__ - `Branimir Lambov (@blambov) `__ - `bleeisme (@bleeisme) `__ @@ -852,6 +851,7 @@ Contributors - `mmanza (@mmanza) `__ - `mnltake (@mnltake) `__ - `Matt N. (@mnoorenberghe) `__ +- `Moriah Morgan (@moriahjmorgan) `__ - `moritzj29 (@moritzj29) `__ - `Chris Laplante (@mostthingsweb) `__ - `MrEditor97 (@mreditor97) `__ From 788d6a361de9c41f3df5da3dafefb16ac639d5cf Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:47:05 +0900 Subject: [PATCH 10/22] Fix changelog --- changelog/2023.12.0.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index 560395113..f0499f9bf 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -96,7 +96,7 @@ Beta Changes - Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` -- rename set_raw_touch_position_ to add_raw_touch_position_ :esphomepr:`5962` by :ghuser:`nielsnl68` +- rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` All changes ^^^^^^^^^^^ @@ -240,7 +240,7 @@ All changes - Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` -- rename set_raw_touch_position_ to add_raw_touch_position_ :esphomepr:`5962` by :ghuser:`nielsnl68` +- rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` Past Changelogs --------------- From 66ea5acfc2d58383f376764feb4b7706be55de79 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 19:11:04 +0900 Subject: [PATCH 11/22] Draft PR explanation (#3450) --- guides/contributing.rst | 21 +++++++++++++++++++++ guides/images/pr-draft-ready.png | Bin 0 -> 63484 bytes 2 files changed, 21 insertions(+) create mode 100644 guides/images/pr-draft-ready.png diff --git a/guides/contributing.rst b/guides/contributing.rst index 5dd9e0394..e1b37be32 100644 --- a/guides/contributing.rst +++ b/guides/contributing.rst @@ -695,6 +695,27 @@ Standard for the esphome-core codebase: docker run --rm -v "$($current_dir):/esphome" -it ghcr.io/esphome/esphome-lint script/quicklint +PRs are being drafted when changes are needed +--------------------------------------------- + +If there have been changes requested to your PR, our bot will automatically mark your PR as a draft. +This means that the PR is not ready to be merged or further reviewed for the moment. + +Draft PRs tell other reviewers that look at the list of all PRs that this PR is currently in progress and doesn't require their attention yet. + +Once you have made the requested changes, you can mark the PR as ready for review again by clicking the "Ready for review button": + +.. figure:: images/pr-draft-ready.png + :align: center + :width: 100.0% + :alt: The ready for review button in the bottom of a PR in draft mode + +Before you click the "Ready for review" button, ensure you have addressed all requested changes, +there are no merge conflicts, and that all our CI jobs and checks are passing successfully. + +Once you've clicked the "Ready for review" button, the PR will return to a normal state again, +and our bot will automatically notify the reviewers who requested the changes that the PR is ready to go! + See Also diff --git a/guides/images/pr-draft-ready.png b/guides/images/pr-draft-ready.png new file mode 100644 index 0000000000000000000000000000000000000000..216ae2d880065a601785c835198d9ca9519f8aae GIT binary patch literal 63484 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 Date: Wed, 20 Dec 2023 20:59:47 +0900 Subject: [PATCH 12/22] Bump version to 2023.12.0b6 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index c4d8bb1cb..cb55877af 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.12.0b5 +PROJECT_NUMBER = 2023.12.0b6 # 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/Makefile b/Makefile index c8bbb3d7e..00a184235 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.12.0b5 +ESPHOME_REF = 2023.12.0b6 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index 9b4685835..8bc5c2adc 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.12.0b5 \ No newline at end of file +2023.12.0b6 \ No newline at end of file diff --git a/conf.py b/conf.py index 88833f1c1..e6417ac89 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.12" # The full version, including alpha/beta/rc tags. -release = "2023.12.0b5" +release = "2023.12.0b6" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 931e46315fdd1d21e0262c9a0aec939d93e6aee6 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:00:06 +0900 Subject: [PATCH 13/22] Update changelog for 2023.12.0b6 --- changelog/2023.12.0.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index f0499f9bf..255b2e8eb 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -97,6 +97,8 @@ Beta Changes - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` - rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` +- image: allow the image to by auto-loaded by animation :esphomepr:`5139` by :ghuser:`ayufan` +- Fix pin reuse error with pin expanders :esphomepr:`5973` by :ghuser:`jesserockz` All changes ^^^^^^^^^^^ @@ -241,6 +243,8 @@ All changes - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` - rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` +- image: allow the image to by auto-loaded by animation :esphomepr:`5139` by :ghuser:`ayufan` +- Fix pin reuse error with pin expanders :esphomepr:`5973` by :ghuser:`jesserockz` Past Changelogs --------------- From 57992bdf5664a863bdd1c1b909554ebab1639349 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 20 Dec 2023 21:00:36 +0900 Subject: [PATCH 14/22] Update supporters for 2023.12.0b6 --- guides/supporters.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 68386799a..11f2acfa6 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -851,7 +851,7 @@ Contributors - `mmanza (@mmanza) `__ - `mnltake (@mnltake) `__ - `Matt N. (@mnoorenberghe) `__ -- `Moriah Morgan (@moriahjmorgan) `__ +- `Moriah Morgan (@moriahmorgan) `__ - `moritzj29 (@moritzj29) `__ - `Chris Laplante (@mostthingsweb) `__ - `MrEditor97 (@mreditor97) `__ From eafbb323137b10063efcfa3ddf2c322008988500 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 08:09:10 +0900 Subject: [PATCH 15/22] Bump version to 2023.12.0 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index cb55877af..b9c151364 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.12.0b6 +PROJECT_NUMBER = 2023.12.0 # 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/Makefile b/Makefile index 00a184235..b87fa4225 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.12.0b6 +ESPHOME_REF = 2023.12.0 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index 8bc5c2adc..aa240b72d 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.12.0b6 \ No newline at end of file +2023.12.0 \ No newline at end of file diff --git a/conf.py b/conf.py index e6417ac89..30410272a 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.12" # The full version, including alpha/beta/rc tags. -release = "2023.12.0b6" +release = "2023.12.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 85c52e197237847fc60065ddf59201a32ff52b92 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 08:10:53 +0900 Subject: [PATCH 16/22] Update changelog for 2023.12.0 --- changelog/2023.12.0.rst | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index 255b2e8eb..353b1cf72 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -59,7 +59,7 @@ New Components - Pylontech integration (solar battery bank) :esphomepr:`4688` by :ghuser:`functionpointer` (new-integration) - Add Chamberlain/HomEntry HE60R garage door opener :esphomepr:`5834` by :ghuser:`clydebarrow` (new-integration) - Add graphical display menu :esphomepr:`4105` by :ghuser:`MrMDavidson` (new-integration) -- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) +- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) (breaking-change) - Added the A02YYUW distance sensor :esphomepr:`5729` by :ghuser:`TH-Braemer` (new-integration) - Add support for PN7160 :esphomepr:`5486` by :ghuser:`kbx81` (new-integration) - Add support for PN7150 :esphomepr:`5487` by :ghuser:`kbx81` (new-integration) @@ -73,7 +73,7 @@ Breaking Changes - mcp3008: Tidy up and fix auto load bug :esphomepr:`5842` by :ghuser:`jesserockz` (breaking-change) - Nextion colors parameters :esphomepr:`5699` by :ghuser:`edwardtfn` (breaking-change) - Checks for pins used in multiple places :esphomepr:`5666` by :ghuser:`clydebarrow` (breaking-change) -- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) +- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) (breaking-change) Beta Changes ^^^^^^^^^^^^ @@ -91,19 +91,19 @@ Beta Changes - web_server_idf: fix call with hardcoded http code :esphomepr:`5942` by :ghuser:`dentra` - Revert pure virtual functions in UART component from #5920 :esphomepr:`5932` by :ghuser:`DrCoolzic` - Use the correct UART/`Serial` when CDC is enabled :esphomepr:`5957` by :ghuser:`kbx81` +- rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` - Fix build issue with UART component when building with Arduino and CDC :esphomepr:`5964` by :ghuser:`kbx81` -- Fix I2CBus::write() bug and add i2c documentation :esphomepr:`5947` by :ghuser:`DrCoolzic` +- Fix ``I2CBus::write()`` bug and add i2c documentation :esphomepr:`5947` by :ghuser:`DrCoolzic` - Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` -- rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` - image: allow the image to by auto-loaded by animation :esphomepr:`5139` by :ghuser:`ayufan` - Fix pin reuse error with pin expanders :esphomepr:`5973` by :ghuser:`jesserockz` All changes ^^^^^^^^^^^ -- Nextion support to `esp-idf` :esphomepr:`5667` by :ghuser:`edwardtfn` +- Nextion support to ``esp-idf`` :esphomepr:`5667` by :ghuser:`edwardtfn` - fix pin range for xl9535 :esphomepr:`5722` by :ghuser:`ssieb` - Bump black from 23.10.1 to 23.11.0 :esphomepr:`5702` by :ghuser:`dependabot[bot]` - Speed up YAML by using YAML C loader when available :esphomepr:`5721` by :ghuser:`bdraco` @@ -146,7 +146,7 @@ All changes - Run all tests when local testing. :esphomepr:`5717` by :ghuser:`Fabian-Schmidt` - Bump aioesphomeapi from 18.5.7 to 18.5.9 :esphomepr:`5830` by :ghuser:`dependabot[bot]` - Allow split uart pin inversion for ESP-IDF :esphomepr:`5831` by :ghuser:`clydebarrow` -- Add `is_detected()` for Nextion displays :esphomepr:`5825` by :ghuser:`edwardtfn` +- Add ``is_detected()`` for Nextion displays :esphomepr:`5825` by :ghuser:`edwardtfn` - Pull PollingComponent up from individual display drivers to Display. :esphomepr:`5444` by :ghuser:`clydebarrow` - Implement variable length single word SPI writes. :esphomepr:`5678` by :ghuser:`clydebarrow` - Add 'enable_on_boot' feature to power_supply :esphomepr:`5826` by :ghuser:`clydebarrow` @@ -158,11 +158,11 @@ All changes - Pylontech integration (solar battery bank) :esphomepr:`4688` by :ghuser:`functionpointer` (new-integration) - Implement deep sleep and clear screen on Waveshare 7.5in B V3 :esphomepr:`5239` by :ghuser:`lucasprim` - Fix ESP-IDF uart initialisation sequence to match Espressif docs. :esphomepr:`5838` by :ghuser:`clydebarrow` -- Nextion - Align strings on `dump_config` :esphomepr:`5824` by :ghuser:`edwardtfn` +- Nextion - Align strings on ``dump_config`` :esphomepr:`5824` by :ghuser:`edwardtfn` - Speed up (and fix) ili9xxx display component. :esphomepr:`5406` by :ghuser:`clydebarrow` - Fix regex for 'byte' custom CI check :esphomepr:`5851` by :ghuser:`jesserockz` - Pass through additional arguments to create number :esphomepr:`5849` by :ghuser:`clydebarrow` -- Nextion `on_touch` trigger :esphomepr:`5833` by :ghuser:`edwardtfn` +- Nextion ``on_touch`` trigger :esphomepr:`5833` by :ghuser:`edwardtfn` - Nextion colors parameters :esphomepr:`5699` by :ghuser:`edwardtfn` (breaking-change) - dashboard: fix supervisor auth doing I/O in the event loop :esphomepr:`5807` by :ghuser:`bdraco` - Improve reliability of Nextion TFT uploads (Arduino) :esphomepr:`5683` by :ghuser:`edwardtfn` @@ -206,7 +206,7 @@ All changes - Fix uninitialized climate target temperature :esphomepr:`5795` by :ghuser:`ckoca` - Bump aioesphomeapi from 19.3.0 to 20.0.0 :esphomepr:`5911` by :ghuser:`dependabot[bot]` - Bump black from 23.11.0 to 23.12.0 :esphomepr:`5912` by :ghuser:`dependabot[bot]` -- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) +- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration) (breaking-change) - Added the A02YYUW distance sensor :esphomepr:`5729` by :ghuser:`TH-Braemer` (new-integration) - Fix AHT10 / AHT20 communication :esphomepr:`5198` by :ghuser:`flaminggoat` - Fix crash when handling pin_check error :esphomepr:`5915` by :ghuser:`clydebarrow` @@ -221,7 +221,7 @@ All changes - UART change at runtime :esphomepr:`5909` by :ghuser:`edwardtfn` - Bump aioesphomeapi from 20.1.0 to 21.0.0 :esphomepr:`5922` by :ghuser:`dependabot[bot]` - Fix the initial run of lambda light effects :esphomepr:`5921` by :ghuser:`smithjacobj` -- Exposes `load_settings` to `UARTComponent` class :esphomepr:`5920` by :ghuser:`edwardtfn` +- Exposes ``load_settings`` to `UARTComponent` class :esphomepr:`5920` by :ghuser:`edwardtfn` - Add support for PN7160 :esphomepr:`5486` by :ghuser:`kbx81` (new-integration) - Add support for PN7150 :esphomepr:`5487` by :ghuser:`kbx81` (new-integration) - Allow use of CDC/JTAG loggers on esp32 variants with Arduino :esphomepr:`4658` by :ghuser:`jesserockz` @@ -237,12 +237,12 @@ All changes - web_server_idf: fix call with hardcoded http code :esphomepr:`5942` by :ghuser:`dentra` - Revert pure virtual functions in UART component from #5920 :esphomepr:`5932` by :ghuser:`DrCoolzic` - Use the correct UART/`Serial` when CDC is enabled :esphomepr:`5957` by :ghuser:`kbx81` +- rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` - Fix build issue with UART component when building with Arduino and CDC :esphomepr:`5964` by :ghuser:`kbx81` - Fix I2CBus::write() bug and add i2c documentation :esphomepr:`5947` by :ghuser:`DrCoolzic` - Add deep sleep between updates for waveshare epaper 1.54in and 1.54inv2 :esphomepr:`5961` by :ghuser:`mathieu-mp` - Speed up writing protobuf strings/bytes :esphomepr:`5828` by :ghuser:`bdraco` - Bump aioesphomeapi to 21.0.1 :esphomepr:`5969` by :ghuser:`bdraco` -- rename ``set_raw_touch_position_`` to ``add_raw_touch_position_`` :esphomepr:`5962` by :ghuser:`nielsnl68` - image: allow the image to by auto-loaded by animation :esphomepr:`5139` by :ghuser:`ayufan` - Fix pin reuse error with pin expanders :esphomepr:`5973` by :ghuser:`jesserockz` From a51d9869d627326cd41875e371580b4fcb96a29f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 08:11:22 +0900 Subject: [PATCH 17/22] Update supporters for 2023.12.0 --- guides/supporters.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 11f2acfa6..b3bc075b9 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -681,6 +681,7 @@ Contributors - `Jonas Niesner (@jonasniesner) `__ - `Jonathan Adams (@jonathanadams) `__ - `JonnyaiR (@jonnyair) `__ +- `jonOfrie (@jonOfrie) `__ - `Joris S (@Jorre05) `__ - `Jared Sanson (@jorticus) `__ - `JosephTang (@JosephTang) `__ @@ -979,6 +980,7 @@ Contributors - `Philip Persson (@PhPersson) `__ - `Pierre Gordon (@pierlon) `__ - `pieterbrink123 (@pieterbrink123) `__ +- `Jakub Augustynowicz (@pingwiniasty) `__ - `Piotr Kubiak (@piotr-kubiak) `__ - `Peter Kuehne (@pkuehne) `__ - `Plácido Revilla (@placidorevilla) `__ @@ -1294,4 +1296,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated December 20, 2023.* +*This page was last updated December 21, 2023.* From c8ff8f8d7571ad2fc6f15da12bdb175960d79f0c Mon Sep 17 00:00:00 2001 From: yousaf465 <83491212+yousaf465@users.noreply.github.com> Date: Thu, 21 Dec 2023 08:59:01 +0500 Subject: [PATCH 18/22] Update ens160.rst (#3481) * Update ens160.rst update datasheet link. pervious one is broken * Update ens160.rst --- components/sensor/ens160.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/sensor/ens160.rst b/components/sensor/ens160.rst index fd13e9c64..ffa793163 100644 --- a/components/sensor/ens160.rst +++ b/components/sensor/ens160.rst @@ -6,7 +6,7 @@ ENS160 Sensor :keywords: ENS160 The ``ens160`` sensor platform allows you to use your ENS160 -(`datasheet `__) air-quality sensors with ESPHome. The :ref:`I²C ` component is +(`datasheet `__) air-quality sensors with ESPHome. The :ref:`I²C ` component is required to be set up in your configuration for this sensor to work. .. note:: From 60b7943eab1339e547e04fb040e0c11a34ae06a1 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 23:33:36 +0900 Subject: [PATCH 19/22] Bump version to 2023.12.1 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index b9c151364..88b3c9aa4 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.12.0 +PROJECT_NUMBER = 2023.12.1 # 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/Makefile b/Makefile index b87fa4225..26004aa9e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.12.0 +ESPHOME_REF = 2023.12.1 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index aa240b72d..5f73c59e9 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.12.0 \ No newline at end of file +2023.12.1 \ No newline at end of file diff --git a/conf.py b/conf.py index 30410272a..55aaad6a2 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.12" # The full version, including alpha/beta/rc tags. -release = "2023.12.0" +release = "2023.12.1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 887c86a64cce38be13976690fd5aa03184731b16 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 23:33:54 +0900 Subject: [PATCH 20/22] Update changelog for 2023.12.1 --- changelog/2023.12.0.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index 353b1cf72..acaf4f2df 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -1,4 +1,4 @@ -ESPHome 2023.12.0 - 20th December 2023 +eESPHome 2023.12.0 - 20th December 2023 ====================================== .. seo:: @@ -47,6 +47,10 @@ MCP3008 breaking changes The MCP3008 has has 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 :esphomepr:`5983` by :ghuser:`jesserockz` Full list of changes -------------------- From 09b205a347e4cfdb6bef1988ac8348452937f6b8 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 23:34:27 +0900 Subject: [PATCH 21/22] Update supporters for 2023.12.1 --- guides/supporters.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index b3bc075b9..4cef66f3d 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -232,6 +232,7 @@ Contributors - `Stroe Andrei Catalin (@catalin2402) `__ - `Carter Nelson (@caternuson) `__ - `cathelest (@cathelest) `__ +- `Chris AtLee (@catlee) `__ - `cbialobos (@cbialobos) `__ - `Cameron Bulock (@cbulock) `__ - `Ciprian Constantinescu (@cciprian5) `__ @@ -552,6 +553,7 @@ Contributors - `Jadson Santos (@gtjadsonsantos) `__ - `Guillaume DELVIT (@guiguid) `__ - `guillempages (@guillempages) `__ +- `Fabian Pflug (@gumulka) `__ - `Guyohms (@Guyohms) `__ - `Gilles van den Hoven (@gvdhoven) `__ - `h0jeZvgoxFepBQ2C (@h0jeZvgoxFepBQ2C) `__ @@ -611,7 +613,6 @@ Contributors - `imwoo90 (@imwoo90) `__ - `Dom (@Ing-Dom) `__ - `Ingo Becker (@ingobecker) `__ -- `Ingurum (@Ingurum) `__ - `Marc J (@InvncibiltyCloak) `__ - `IoT-devices LLC (@iotdevicesdev) `__ - `irtimaled (@irtimaled) `__ @@ -624,13 +625,11 @@ Contributors - `J0RD4N300 (@J0RD4N300) `__ - `jacobswe (@jacobswe) `__ - `Fredrik Gustafsson (@jagheterfredrik) `__ -- `Jan Harkes (@jaharkes) `__ - `jakehdk (@jakehdk) `__ - `Jake Shirley (@JakeShirley) `__ - `jakub-medrzak (@jakub-medrzak) `__ - `James Braid (@jamesbraid) `__ - `James Duke (@jamesduke) `__ -- `James Gao (@jamesgao) `__ - `James Hirka (@jameshirka) `__ - `James Lakin (@jamesorlakin) `__ - `Jason (@jamman9000) `__ @@ -642,7 +641,6 @@ Contributors - `Jared Ring (@jaredring) `__ - `Jason-nz (@Jason-nz) `__ - `Jason2866 (@Jason2866) `__ -- `JasperPlant (@JasperPlant) `__ - `Jas Strong (@jasstrong) `__ - `Jay Greco (@jaygreco) `__ - `Jay Newstrom (@JayNewstrom) `__ @@ -673,6 +671,7 @@ Contributors - `jmichiel (@jmichiel) `__ - `JMoratelli (@JMoratelli) `__ - `Jonathas Barbosa (@jnthas) `__ +- `jochenvg (@jochenvg) `__ - `Johboh (@Johboh) `__ - `John Moxley (@johnmoxley) `__ - `Dave Johnston (@johnsto) `__ @@ -694,7 +693,6 @@ Contributors - `Jules-R (@Jules-R) `__ - `Julie Koubová (@juliekoubova) `__ - `Mike Ryan (@justfalter) `__ -- `Jasper van der Neut - Stulen (@jvanderneutstulen) `__ - `Jack Wozny (@jwozny) `__ - `Kris (@K-r-i-s-t-i-a-n) `__ - `k0rtina (@k0rtina) `__ @@ -752,6 +750,7 @@ Contributors - `Juraj Liso (@LiJu09) `__ - `Li Junru (@lijunru-hub) `__ - `lillborje71 (@lillborje71) `__ +- `Citric Lee (@limengdu) `__ - `lingex (@lingex) `__ - `Markus (@Links2004) `__ - `LinusHeu (@LinusHeu) `__ @@ -804,6 +803,7 @@ Contributors - `Masterz69 (@Masterz69) `__ - `Christopher Masto (@masto) `__ - `Mat931 (@Mat931) `__ +- `mathieu-mp (@mathieu-mp) `__ - `matikij (@matikij) `__ - `Michel Marti (@matoxp) `__ - `matt123p (@matt123p) `__ @@ -860,6 +860,7 @@ Contributors - `Michael Davidson (@MrMDavidson) `__ - `mrred2k (@mrred2k) `__ - `André Cirne (@MrSuicideParrot) `__ +- `mrtoy-me (@mrtoy-me) `__ - `Murray Scott (@mscottco) `__ - `MSe-5-14 (@MSe-5-14) `__ - `mtl010957 (@mtl010957) `__ @@ -1257,7 +1258,6 @@ Contributors - `Wauter (@Wauter) `__ - `WeekendWarrior1 (@WeekendWarrior1) `__ - `Thomas Aldrian (@Weissnix4711) `__ -- `Ian Wells (@wellsi) `__ - `Andrew Garrett (@werdnum) `__ - `whimsee (@whimsee) `__ - `wifwucite (@wifwucite) `__ From a760ae2af54e6de362a6d6d55b1826300eb2b3a6 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Dec 2023 23:44:55 +0900 Subject: [PATCH 22/22] Remove extra character --- changelog/2023.12.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst index acaf4f2df..53ffba7bc 100644 --- a/changelog/2023.12.0.rst +++ b/changelog/2023.12.0.rst @@ -1,4 +1,4 @@ -eESPHome 2023.12.0 - 20th December 2023 +ESPHome 2023.12.0 - 20th December 2023 ====================================== .. seo::