Merge pull request #3003 from esphome/bump-2023.6.0b2

2023.6.0b2
This commit is contained in:
Jesse Hills 2023-06-19 09:22:32 +12:00 committed by GitHub
commit 219a06d68f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 112 additions and 19 deletions

View File

@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
# control system is used. # control system is used.
PROJECT_NUMBER = 2023.6.0b1 PROJECT_NUMBER = 2023.6.0b2
# Using the PROJECT_BRIEF tag one can provide an optional one line description # 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 # for a project that appears at the top of each page and should give viewer a

View File

@ -1,5 +1,5 @@
ESPHOME_PATH = ../esphome ESPHOME_PATH = ../esphome
ESPHOME_REF = 2023.6.0b1 ESPHOME_REF = 2023.6.0b2
.PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify

View File

@ -1 +1 @@
2023.6.0b1 2023.6.0b2

View File

@ -33,6 +33,17 @@ Breaking Changes
- Move ESPTime into core esphome namespace :esphomepr:`4926` by :ghuser:`jesserockz` (breaking-change) - Move ESPTime into core esphome namespace :esphomepr:`4926` by :ghuser:`jesserockz` (breaking-change)
- display: add `BaseImage` and provide only `Image::get_pixel` method :esphomepr:`4932` by :ghuser:`ayufan` (breaking-change) - display: add `BaseImage` and provide only `Image::get_pixel` method :esphomepr:`4932` by :ghuser:`ayufan` (breaking-change)
Beta Changes
^^^^^^^^^^^^
- Add support in vbus component for Deltasol BS 2009 :esphomepr:`4943` by :ghuser:`clydebarrow`
- fix vbus sensor offsets :esphomepr:`4952` by :ghuser:`ssieb`
- Add support for ESP32-S3-BOX-Lite displays :esphomepr:`4941` by :ghuser:`guillempages`
- Split display_buffer sub-components into own files :esphomepr:`4950` by :ghuser:`guillempages`
- Add support for S3 box display :esphomepr:`4942` by :ghuser:`guillempages`
- display: allow to align image with `ImageAlign` :esphomepr:`4933` by :ghuser:`ayufan`
- Use HW SPI for rp2040 :esphomepr:`4955` by :ghuser:`jesserockz`
All changes All changes
^^^^^^^^^^^ ^^^^^^^^^^^
@ -93,6 +104,13 @@ All changes
- display: Improve Image rendering by removing usage of virtual functions :esphomepr:`4931` by :ghuser:`ayufan` - display: Improve Image rendering by removing usage of virtual functions :esphomepr:`4931` by :ghuser:`ayufan`
- display: add `BaseImage` and provide only `Image::get_pixel` method :esphomepr:`4932` by :ghuser:`ayufan` (breaking-change) - display: add `BaseImage` and provide only `Image::get_pixel` method :esphomepr:`4932` by :ghuser:`ayufan` (breaking-change)
- Add Alarm Control Panel :esphomepr:`4770` by :ghuser:`grahambrown11` (new-integration) - Add Alarm Control Panel :esphomepr:`4770` by :ghuser:`grahambrown11` (new-integration)
- Add support in vbus component for Deltasol BS 2009 :esphomepr:`4943` by :ghuser:`clydebarrow`
- fix vbus sensor offsets :esphomepr:`4952` by :ghuser:`ssieb`
- Add support for ESP32-S3-BOX-Lite displays :esphomepr:`4941` by :ghuser:`guillempages`
- Split display_buffer sub-components into own files :esphomepr:`4950` by :ghuser:`guillempages`
- Add support for S3 box display :esphomepr:`4942` by :ghuser:`guillempages`
- display: allow to align image with `ImageAlign` :esphomepr:`4933` by :ghuser:`ayufan`
- Use HW SPI for rp2040 :esphomepr:`4955` by :ghuser:`jesserockz`
Past Changelogs Past Changelogs
--------------- ---------------

View File

@ -7,7 +7,7 @@ Alarm Control Panel Component
.. _config-alarm_control_panel: .. _config-alarm_control_panel:
Base Alarm COntrol Panel Configuration Base Alarm Control Panel Configuration
-------------------------------------- --------------------------------------
.. code-block:: yaml .. code-block:: yaml

View File

@ -25,7 +25,7 @@ Configuration variables:
------------------------ ------------------------
- **codes** (*Optional*, list of string): A list of codes for disarming the alarm, if *requires_code_to_arm* set to true then for arming the alarm too. - **codes** (*Optional*, list of string): A list of codes for disarming the alarm, if *requires_code_to_arm* set to true then for arming the alarm too.
- **requires_code_to_arm** (*Optional*, boolean): Code required for arming the alarm, *code* must be provided. - **requires_code_to_arm** (*Optional*, boolean): Code required for arming the alarm, *codes* must be provided.
- **arming_time** (*Optional*, :ref:`config-time`): The exit delay before the alarm is armed. - **arming_time** (*Optional*, :ref:`config-time`): The exit delay before the alarm is armed.
- **pending_time** (*Optional*, :ref:`config-time`): The entry delay before the alarm is triggered. - **pending_time** (*Optional*, :ref:`config-time`): The entry delay before the alarm is triggered.
- **trigger_time** (*Optional*, :ref:`config-time`): The time after a triggered alarm before resetting to previous state if the sensors are cleared/off. - **trigger_time** (*Optional*, :ref:`config-time`): The time after a triggered alarm before resetting to previous state if the sensors are cleared/off.
@ -36,8 +36,8 @@ Configuration variables:
- **restore_mode** (*Optional*, enum): - **restore_mode** (*Optional*, enum):
- **ALWAYS_DISARMED** (Default): Always start in ``disarmed`` state. - ``ALWAYS_DISARMED`` (Default): Always start in ``disarmed`` state.
- **RESTORE_DEFAULT_DISARMED**: Restore state or default to ``disarmed`` state if no saved state was found. - ``RESTORE_DEFAULT_DISARMED``: Restore state or default to ``disarmed`` state if no saved state was found.
- All other options from :ref:`Alarm Control Panel <config-alarm_control_panel>` - All other options from :ref:`Alarm Control Panel <config-alarm_control_panel>`

View File

@ -44,9 +44,11 @@ Configuration variables:
- **model** (**Required**): The model of the display. Options are: - **model** (**Required**): The model of the display. Options are:
- ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R`` - ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R``, ``S3BOX``, ``S3BOX_LITE``
- ``ILI9341``, ``ILI9342``, ``ILI9481``, ``ILI9486``, ``ILI9488``, ``ST7796`` - ``ILI9341``, ``ILI9342``, ``ILI9481``, ``ILI9486``, ``ILI9488``, ``ST7796``
.. note:: According to its documentation, the ESP32 S3 Box Lite has an ST7789V display driver. We've found, however, that it works with the ILIxxxx component here, instead. This could change in the future.
- **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin. - **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin.
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin. - **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin.
- **rotation** (*Optional*): Set the rotation of the display. Everything drawn in the ``lambda:`` will be rotated - **rotation** (*Optional*): Set the rotation of the display. Everything drawn in the ``lambda:`` will be rotated

View File

@ -715,6 +715,25 @@ And then later in code:
// Draw the image my_image at position [x=0,y=0] // Draw the image my_image at position [x=0,y=0]
it.image(0, 0, id(my_image)); it.image(0, 0, id(my_image));
By default, ESPHome will *align* the image at the top left. That means if you enter the coordinates
``[0,10]`` for your image, the top left of the image will be at ``[0,10]``. If you want to draw some
image at the right side of the display, it is however sometimes useful to choose a different **image alignment**.
When you enter ``[0,10]`` you're really telling ESPHome that it should position the **anchor point** of the image
at ``[0,10]``. When using a different alignment, like ``TOP_RIGHT``, the image will be positioned left of the anchor
pointed, so that, as the name implies, the anchor point is a the *top right* corner of the image.
.. code-block:: yaml
display:
- platform: ...
# ...
lambda: |-
// Aligned on left by default
it.image(0, 0, id(my_image));
// Aligned on right edge
it.image(it.get_width(), 0, id(my_image), ImageAlign::TOP_RIGHT);
For binary images the ``image`` method accepts two additional color parameters which can For binary images the ``image`` method accepts two additional color parameters which can
be supplied to modify the color used to represent the on and off bits respectively. e.g. be supplied to modify the color used to represent the on and off bits respectively. e.g.
@ -728,6 +747,9 @@ be supplied to modify the color used to represent the on and off bits respective
// with front color red and back color blue // with front color red and back color blue
it.image(0, 0, id(my_image), id(red), id(blue)); it.image(0, 0, id(my_image), id(red), id(blue));
// Aligned on right edge
it.image(it.get_width(), 0, id(my_image), ImageAlign::TOP_RIGHT, id(red), id(blue));
You can also use this to invert images in two colors display, use ``COLOR_OFF`` then ``COLOR_ON`` You can also use this to invert images in two colors display, use ``COLOR_OFF`` then ``COLOR_ON``
as the additional parameters. as the additional parameters.

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -898,6 +898,10 @@ earlier, create a new template switch that sends the RF code when triggered:
- remote_transmitter.transmit_rc_switch_raw: - remote_transmitter.transmit_rc_switch_raw:
code: '100010000000000010111110' code: '100010000000000010111110'
protocol: 2 protocol: 2
repeat:
times: 10
wait_time: 0s
# Or for raw code # Or for raw code
switch: switch:
@ -912,6 +916,15 @@ earlier, create a new template switch that sends the RF code when triggered:
Recompile again, when you power up the device the next time you will see a new switch Recompile again, when you power up the device the next time you will see a new switch
in the frontend. Click on it and you should see the remote signal being transmitted. Done! in the frontend. Click on it and you should see the remote signal being transmitted. Done!
.. note::
Some devices require that the transmitted code be repeated for the signal to be picked up
as valid. Also the interval between repetitions can be important. Check that the pace of
repetition logs are consistent between the remote controller and the transmitter node.
You can adjust the ``repeat:`` settings accordingly.
See Also See Also
-------- --------

View File

@ -8,22 +8,56 @@ VBus Component
The ``VBus`` Component provides status reading connectivity to solar heat energy collector controllers using VBus The ``VBus`` Component provides status reading connectivity to solar heat energy collector controllers using VBus
protocol. These devices are mainly produced by Resol, often also found under different brand names like Viessmann, protocol. These devices are mainly produced by Resol, often also found under different brand names like Viessmann,
Kioto, Wagner etc. The component currently supports natively Resol DeltaSol C, DeltaSol CS2, DeltaSol CS Plus, and DeltaSol BS Plus Kioto, Wagner etc. The component currently supports natively the models in the table below
but any device can be added via lambda by knowing `its packet structure <https://danielwippermann.github.io/resol-vbus>`__. but any device can be added via lambda by knowing `its packet structure <https://danielwippermann.github.io/resol-vbus>`__.
.. figure:: ../images/resol_deltasol_bs_plus.jpg .. figure:: ../images/resol_deltasol_bs_plus.jpg
:align: center :align: center
Supported Models
----------------
The following table shows the currently supported models of Vbus devices.
.. csv-table:: Supported Models
:header: "Name", "Config Value", "Hex Address", "Notes"
"DeltaSol BS Plus","deltasol_bs_plus","4221"
"DeltaSol BS 2009","deltasol_bs_2009","427B"
"Dux H3214","deltasol_bs_2009","427B", "Pump 2 unsupported"
"DeltaSol C","deltasol_c","4212"
"DeltaSol CS2","deltasol_cs2","1121"
"DeltaSol CS2 Plus","deltasol_cs2_plus","2211"
The ``Config Value`` should be used for the ``model`` parameter in your ``sensor`` and ``binary_sensor`` entries.
The ``Hex Address`` field is the value sent by a device in the ``from`` field of a message. To identify an unknown
model, set the logger level to ``VERBOSE`` and look for lines like this in the log output:
``[10:53:48][V][vbus:068]: P1 C0500 427b->0000: 0000 0000 (0)``
The value before the ``->`` symbol is the device source address. If it matches one of the entries in the table above
then that model should work with your unit.
Hardware Connection
-------------------
The device must be connected via a :doc:`UART bus </components/uart>` supporting the receiving line only. The UART bus The device must be connected via a :doc:`UART bus </components/uart>` supporting the receiving line only. The UART bus
must be configured at the same speed of the module which is by default 9600bps. The controller outputs data every second. must be configured at the same speed of the module which is by default 9600bps. The controller outputs data every second.
To connect to this and read data from the bus a level shifting is needed as the voltage is around 8V (direct connection To connect to this and read data from the bus a level shifting is needed as the voltage is around 8V (direct connection
would damage the MCU). Although this is a symmetric connection supporting long wires, for our read-only purposes it's would damage the MCU). For our read-only purposes it's
enough to adapt the level appropriately to 3.3V using a circuit like below: sufficient to adapt the level appropriately to 3.3V using a circuit like below:
.. figure:: ../images/resol_vbus_adapter_schematic.png .. figure:: ../images/resol_vbus_adapter_schematic.png
:align: center :align: center
An electrically isolated version using an opto-coupler:
.. figure:: images/vbus_serial_optocoupler.png
:align: center
Another approach, with PCB design ready to be manufactured `can be found here <https://github.com/FatBeard/vbus-arduino-library/tree/master/pcb>`__. Another approach, with PCB design ready to be manufactured `can be found here <https://github.com/FatBeard/vbus-arduino-library/tree/master/pcb>`__.
.. warning:: .. warning::
@ -62,7 +96,7 @@ Configuration variables:
.. note:: .. note::
Functionality of the sensors depends on the type of the device and the the scheme arrangement of the hydraulic Functionality of the sensors depends on the type of the device and the scheme arrangement of the hydraulic
system it controls. The actual arrangement number set up can be determined from the settings of the device. Please system it controls. The actual arrangement number set up can be determined from the settings of the device. Please
check the user manual and assess your arrangement to determine the functionality of each sensor and name them check the user manual and assess your arrangement to determine the functionality of each sensor and name them
accordingly. accordingly.
@ -103,12 +137,11 @@ Sensor
Configuration variables: Configuration variables:
- **model** (**Required**): Specify the model of the connected controller. Currently supported models are: ``deltasol_bs_plus``, ``deltasol_c``, ``deltasol_cs2``, ``deltasol_cs_plus``. - **model** (**Required**): Specify the model of the connected controller. Choose one of the config values listed in the table of supported models above.
Supported sensors: Supported sensors:
- for **deltasol_bs_plus**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``pump_speed_1``, ``pump_speed_2``, ``operating_hours_1``, ``operating_hours_2``, ``heat_quantity``, ``time``, ``version``. - for **deltasol_bs_plus** and **deltasol_bs_2009**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``pump_speed_1``, ``pump_speed_2``, ``operating_hours_1``, ``operating_hours_2``, ``heat_quantity``, ``time``, ``version``.
- for **deltasol_c**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``pump_speed_1``, ``pump_speed_2``, ``operating_hours_1``, ``operating_hours_2``, ``heat_quantity``, ``time``. - for **deltasol_c**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``pump_speed_1``, ``pump_speed_2``, ``operating_hours_1``, ``operating_hours_2``, ``heat_quantity``, ``time``.
- for **deltasol_cs2**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``pump_speed``, ``operating_hours``, ``heat_quantity``, ``version``. - for **deltasol_cs2**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``pump_speed``, ``operating_hours``, ``heat_quantity``, ``version``.
- for **deltasol_cs_plus**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``temperature_5``, ``pump_speed_1``, ``pump_speed_2``, ``operating_hours_1``, ``operating_hours_2``, ``heat_quantity``, ``time``, ``version``, ``flow_rate``. - for **deltasol_cs_plus**: ``temperature_1``, ``temperature_2``, ``temperature_3``, ``temperature_4``, ``temperature_5``, ``pump_speed_1``, ``pump_speed_2``, ``operating_hours_1``, ``operating_hours_2``, ``heat_quantity``, ``time``, ``version``, ``flow_rate``.
@ -160,16 +193,16 @@ Binary Sensor
Configuration variables: Configuration variables:
- **model** (**Required**): Specify the model of the connected controller. Currently supported models are: ``deltasol_bs_plus``, ``deltasol_c``, ``deltasol_cs2``, ``deltasol_cs_plus``. - **model** (**Required**): Specify the model of the connected controller. Choose one of the config values listed in the table of supported models above.
Supported sensors: Supported sensors:
- for **deltasol_bs_plus**: ``relay1``, ``relay2``, ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``, ``collector_max``, ``collector_min``, ``collector_frost``, ``tube_collector``, ``recooling``, ``hqm``. - for **deltasol_bs_plus**: ``relay1``, ``relay2``, ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``, ``collector_max``, ``collector_min``, ``collector_frost``, ``tube_collector``, ``recooling``, ``hqm``.
- for **deltasol_bs_2009**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``, ``frost_protection_active``.
- for **deltasol_c**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``. - for **deltasol_c**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``.
- for **deltasol_cs2**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``. - for **deltasol_cs2**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``.
- for **deltasol_cs_plus**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``. - for **deltasol_cs_plus**: ``sensor1_error``, ``sensor2_error``, ``sensor3_error``, ``sensor4_error``.
All binary sensors are *Optional* and support all other options from :ref:`Binary Sensor <config-binary_sensor>`. All binary sensors are *Optional* and support all other options from :ref:`Binary Sensor <config-binary_sensor>`.

View File

@ -69,7 +69,7 @@ author = "ESPHome"
# The short X.Y version. # The short X.Y version.
version = "2023.6" version = "2023.6"
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = "2023.6.0b1" release = "2023.6.0b2"
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.

View File

@ -222,6 +222,7 @@ Contributors
- `Colby Rome (@cisasteelersfan) <https://github.com/cisasteelersfan>`__ - `Colby Rome (@cisasteelersfan) <https://github.com/cisasteelersfan>`__
- `Chris Debenham (@cjd) <https://github.com/cjd>`__ - `Chris Debenham (@cjd) <https://github.com/cjd>`__
- `Chester (@clowrey) <https://github.com/clowrey>`__ - `Chester (@clowrey) <https://github.com/clowrey>`__
- `Clyde Stubbs (@clydebarrow) <https://github.com/clydebarrow>`__
- `Colin McCambridge (@cmccambridge) <https://github.com/cmccambridge>`__ - `Colin McCambridge (@cmccambridge) <https://github.com/cmccambridge>`__
- `Clifford Roche (@cmroche) <https://github.com/cmroche>`__ - `Clifford Roche (@cmroche) <https://github.com/cmroche>`__
- `Casey Burnett (@codeangler) <https://github.com/codeangler>`__ - `Casey Burnett (@codeangler) <https://github.com/codeangler>`__
@ -320,6 +321,7 @@ Contributors
- `Dmitriy Lopatko (@dmitriy5181) <https://github.com/dmitriy5181>`__ - `Dmitriy Lopatko (@dmitriy5181) <https://github.com/dmitriy5181>`__
- `Farzad E. (@dnetguru) <https://github.com/dnetguru>`__ - `Farzad E. (@dnetguru) <https://github.com/dnetguru>`__
- `DrZoid (@docteurzoidberg) <https://github.com/docteurzoidberg>`__ - `DrZoid (@docteurzoidberg) <https://github.com/docteurzoidberg>`__
- `DominikBitzer (@DominikBitzer) <https://github.com/DominikBitzer>`__
- `Dominik (@DomiStyle) <https://github.com/DomiStyle>`__ - `Dominik (@DomiStyle) <https://github.com/DomiStyle>`__
- `Derek M. (@doolbneerg) <https://github.com/doolbneerg>`__ - `Derek M. (@doolbneerg) <https://github.com/doolbneerg>`__
- `Dorian Zedler (@dorianim) <https://github.com/dorianim>`__ - `Dorian Zedler (@dorianim) <https://github.com/dorianim>`__
@ -797,6 +799,7 @@ Contributors
- `Morgan Robertson (@mrgnr) <https://github.com/mrgnr>`__ - `Morgan Robertson (@mrgnr) <https://github.com/mrgnr>`__
- `Mariusz Kryński (@mrk-its) <https://github.com/mrk-its>`__ - `Mariusz Kryński (@mrk-its) <https://github.com/mrk-its>`__
- `Michael Davidson (@MrMDavidson) <https://github.com/MrMDavidson>`__ - `Michael Davidson (@MrMDavidson) <https://github.com/MrMDavidson>`__
- `mrred2k (@mrred2k) <https://github.com/mrred2k>`__
- `Murray Scott (@mscottco) <https://github.com/mscottco>`__ - `Murray Scott (@mscottco) <https://github.com/mscottco>`__
- `MSe-5-14 (@MSe-5-14) <https://github.com/MSe-5-14>`__ - `MSe-5-14 (@MSe-5-14) <https://github.com/MSe-5-14>`__
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__ - `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__
@ -878,6 +881,7 @@ Contributors
- `Paul Monigatti (@paulmonigatti) <https://github.com/paulmonigatti>`__ - `Paul Monigatti (@paulmonigatti) <https://github.com/paulmonigatti>`__
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__ - `Paul Nicholls (@pauln) <https://github.com/pauln>`__
- `Bartłomiej Biernacki (@pax0r) <https://github.com/pax0r>`__ - `Bartłomiej Biernacki (@pax0r) <https://github.com/pax0r>`__
- `pcr20 (@pcr20) <https://github.com/pcr20>`__
- `peddamat (@peddamat) <https://github.com/peddamat>`__ - `peddamat (@peddamat) <https://github.com/peddamat>`__
- `pedjas (@pedjas) <https://github.com/pedjas>`__ - `pedjas (@pedjas) <https://github.com/pedjas>`__
- `pedrobsm (@pedrobsm) <https://github.com/pedrobsm>`__ - `pedrobsm (@pedrobsm) <https://github.com/pedrobsm>`__
@ -918,6 +922,7 @@ Contributors
- `Aaron Zhang (@rabbit-aaron) <https://github.com/rabbit-aaron>`__ - `Aaron Zhang (@rabbit-aaron) <https://github.com/rabbit-aaron>`__
- `RadekHvizdos (@RadekHvizdos) <https://github.com/RadekHvizdos>`__ - `RadekHvizdos (@RadekHvizdos) <https://github.com/RadekHvizdos>`__
- `Florian Ragwitz (@rafl) <https://github.com/rafl>`__ - `Florian Ragwitz (@rafl) <https://github.com/rafl>`__
- `Ben V. Brown (@Ralim) <https://github.com/Ralim>`__
- `randomllama (@randomllama) <https://github.com/randomllama>`__ - `randomllama (@randomllama) <https://github.com/randomllama>`__
- `Marc Seeger (@rb2k) <https://github.com/rb2k>`__ - `Marc Seeger (@rb2k) <https://github.com/rb2k>`__
- `rbaron (@rbaron) <https://github.com/rbaron>`__ - `rbaron (@rbaron) <https://github.com/rbaron>`__
@ -1159,4 +1164,4 @@ Contributors
- `Zack Barett (@zsarnett) <https://github.com/zsarnett>`__ - `Zack Barett (@zsarnett) <https://github.com/zsarnett>`__
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__ - `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
*This page was last updated June 15, 2023.* *This page was last updated June 19, 2023.*