From c01cce8ddd68bb816ca15bb7460c78d4eb1fdedc Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 13 Apr 2023 10:13:53 +1200 Subject: [PATCH 01/40] Bump version to 2023.5.0-dev --- Doxygen | 2 +- _static/version | 2 +- conf.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index 017bb5aa6..64ab705a8 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.4.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/_static/version b/_static/version index 46bed8ae6..448988caa 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.4.0-dev \ No newline at end of file +2023.5.0-dev \ No newline at end of file diff --git a/conf.py b/conf.py index 53868d966..1280ef3c6 100644 --- a/conf.py +++ b/conf.py @@ -67,9 +67,9 @@ author = "ESPHome" # built documents. # # The short X.Y version. -version = "2023.4" +version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.4.0-dev" +release = "2023.5.0-dev" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From b9c710a1339ef83d212e866e1faa4d99d67f16e5 Mon Sep 17 00:00:00 2001 From: kahrendt Date: Thu, 13 Apr 2023 01:12:39 -0400 Subject: [PATCH 02/40] Document Bayesian type for binary_sensor_map component (#2796) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/binary_sensor_map.rst | 66 ++++++++++++++++++++----- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/components/sensor/binary_sensor_map.rst b/components/sensor/binary_sensor_map.rst index 28a6c4212..82e4ccf49 100644 --- a/components/sensor/binary_sensor_map.rst +++ b/components/sensor/binary_sensor_map.rst @@ -5,19 +5,50 @@ Binary Sensor Map :description: Instructions for setting up a Binary Sensor Map :image: binary_sensor_map.jpg -The ``binary_sensor_map`` sensor platform allows you to map :doc:`binary sensor ` -to values. When a given binary sensor is on, the value associated with it in this platform's configuration will be published. +The ``binary_sensor_map`` sensor platform allows you to map multiple :doc:`binary sensor ` +to an individual value. Depending on the state of each binary sensor, its associated configured parameters, and this sensor's mapping type, +the ``binary_sensor_map`` publishes a single numerical value. -This sensor is **mostly used for touch** devices but could be used for any ``binary_sensor`` that publishes its ``ON`` or ``OFF`` state. +Use this sensor to combine one or more binary sensors' ``ON`` or ``OFF`` states into a numerical value. Some possible use cases include +touch devices and determining Bayesian probabilities for an event. -Add your binary sensors as ``channels`` to the binary sensor map. The binary sensor map then publishes a value depending -on the type of the binary sensor map and the values specified with each channel. The maximum amount of possible channels is 64. +This platform supports three measurement types: ``BAYESIAN``, ``GROUP``, and ``SUM``. +You need to specify your desired mapping with the ``type:`` configuration value. -This platform currently supports two measurement types: ``GROUP`` and ``SUM``, and others might get added later. -You need to specify which type of mapping you want with the ``type:`` configuration value: +When using the ``BAYESIAN`` type, add your binary sensors as ``observations`` to the binary sensor map. +If you use the ``GROUP`` or ``SUM`` type, add your binary sensors as ``channels``. +The maximum amount of observations/channels supported is 64. -- ``GROUP`` Each channel has its own value. The sensor publishes the average value of all active - binary sensors. +- ``BAYESIAN`` This type replicates Home Assistant's `Bayesian sensor `__. Based on the observation states, this sensor returns the Bayesian probability of a particular event occurring. The configured ``prior:`` probability is the likelihood that the Bayesian event is true, ignoring all external influences. Every observation has its own ``prob_given_true`` and ``prob_given_false`` parameters. The ``prob_given_true:`` value is the probability that the observation's binary sensor is ``ON`` when the Bayesian event is ``true``. The ``prob_given_false:`` value is the probability that the observation's binary sensor is ``ON`` when the Bayesian event is ``false``. Use an :doc:`/components/binary_sensor/analog_threshold` to convert this sensor's probability to a binary ``ON`` or ``OFF`` by setting an appropriate threshold. + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: binary_sensor_map + id: bayesian_prob + name: 'Bayesian Event Probability' + type: bayesian + prior: 0.4 + observations: + - binary_sensor: binary_sensor_0 + prob_given_true: 0.9 + prob_given_false: 0.2 + - binary_sensor: binary_sensor_1 + prob_given_true: 0.6 + prob_given_false: 0.1 + + binary_sensor: + # If the Bayesian probability is greater than 0.6, + # then predict the event is occuring + - platform: analog_threshold + name: "Bayesian Event Predicted State" + sensor_id: bayesian_prob + threshold: 0.6 + # ... + +- ``GROUP`` Each channel has its own ``value``. The sensor publishes the average value of all active + binary sensors or ``NAN`` if no sensors are active. .. code-block:: yaml @@ -48,8 +79,8 @@ You need to specify which type of mapping you want with the ``type:`` configurat id: touchkey0 # ... -- ``SUM`` Each channel has its own value. The sensor publishes the sum of all active - binary sensors values. +- ``SUM`` Each channel has its own ``value``. The sensor publishes the sum of all the active + binary sensors values or ``0`` if no sensors are active. .. code-block:: yaml @@ -91,12 +122,19 @@ Configuration variables: ------------------------ - **name** (**Required**, string): The name of the sensor. -- **type** (**Required**, string): The sensor type. Should be one of: ``GROUP``. -- **channels** (**Required**): A list of channels that are mapped to certain values. +- **type** (**Required**, string): The sensor type. Should be one of: ``BAYESIAN``, ``GROUP``, or ``SUM``. +- **channels** (**Required for GROUP or SUM types**): A list of channels that are mapped to certain values. - **binary_sensor** (**Required**): The id of the :doc:`binary sensor ` to add as a channel for this sensor. - **value** (**Required**): The value this channel should report when its binary sensor is active. +- **prior** (**Required for BAYESIAN type**, float between 0 and 1): The prior probability of the event. +- **observations** (**Required for BAYESIAN type**): A list of observations that influence the Bayesian probability of the event. + + - **binary_sensor** (**Required**): The id of the :doc:`binary sensor ` + to add as an observation. + - **prob_given_true** (**Required**, float between 0 and 1): Assuming the event is true, the probability this observation is on. + - **prob_given_false** (**Required**, float between 0 and 1): Assuming the event is false, the probability this observation is on. - All other options from :ref:`Sensor `. @@ -104,6 +142,8 @@ See Also -------- - :doc:`/components/binary_sensor/mpr121` +- :doc:`/components/binary_sensor/analog_threshold` - :ref:`sensor-filters` - :apiref:`binary_sensor_map/binary_sensor_map.h` +- `Bayesian sensor in Home Assistant `__ - :ghedit:`Edit` From 27c940ccd887cf0edff0760c098f1c8559879c1b Mon Sep 17 00:00:00 2001 From: R Huish <5207490+genestealer@users.noreply.github.com> Date: Thu, 13 Apr 2023 09:10:58 +0100 Subject: [PATCH 03/40] Added Sensor Longevity and correction to PMSX003 (#2824) --- components/sensor/pmsx003.rst | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/components/sensor/pmsx003.rst b/components/sensor/pmsx003.rst index 66827d136..0ecee8b54 100644 --- a/components/sensor/pmsx003.rst +++ b/components/sensor/pmsx003.rst @@ -5,7 +5,7 @@ PMSX003 Particulate Matter Sensor :description: Instructions for setting up PMSX003 Particulate matter sensors :image: pmsx003.svg -The ``pmsx003`` sensor platform allows you to use your PMS5003, PMS7003, ... particulate matter +The ``pmsx003`` sensor platform allows you to use your Plantower PMS5003, PMS7003, ... laser based particulate matter sensors (`datasheet `__) sensors with ESPHome. @@ -21,6 +21,13 @@ value: - ``PMS5003T`` for PMS5003T. These support ``pm_1_0``, ``pm_2_5`` and ``pm_10_0``, ``temperature`` and ``humidity``. - ``PMS5003ST`` for PMS5003ST. These support ``pm_2_5``, ``temperature``, ``humidity`` and ``formaldehyde``. +Sensor Longevity +------------------------ +The laser diode inside the PMSX003 has a lifetime of about 8000 hours, nearly one year. + +If you wish to use the optional ``update_interval`` ensure you have a ``tx_pin`` set in the UART configuration and connected to the RECEIVE/RX pin +(may also be called the TX pin, depending on the model) of the PMS. Setting ``update_interval`` to 120 seconds or higher may help extend the life span of the sensor. + .. code-block:: yaml # Example configuration entry @@ -38,34 +45,34 @@ value: name: "Particulate Matter <2.5µm Concentration" pm_10_0: name: "Particulate Matter <10.0µm Concentration" - update_interval: 60000ms + update_interval: 120s Configuration variables: ------------------------ -- **pm_1_0_std** (*Optional*): Use the concentration of particulates of size less than 1.0µm in µg per cubic meter at standard particle +- **pm_1_0_std** (*Optional*): Use the concentration of particulates of size less than 1.0µm in µg per cubic meter at standard particle. All options from :ref:`Sensor `. -- **pm_2_5_std** (*Optional*): Use the concentration of particulates of size less than 2.5µm in µg per cubic meter at standard particle +- **pm_2_5_std** (*Optional*): Use the concentration of particulates of size less than 2.5µm in µg per cubic meter at standard particle. All options from :ref:`Sensor `. -- **pm_10_0_std** (*Optional*): Use the concentration of particulates of size less than 10.0µm in µg per cubic meter at standard particle +- **pm_10_0_std** (*Optional*): Use the concentration of particulates of size less than 10.0µm in µg per cubic meter at standard particle. All options from :ref:`Sensor `. -- **pm_1_0** (*Optional*): Use the concentration of particulates of size less than 1.0µm in µg per cubic meter under atmospheric environment +- **pm_1_0** (*Optional*): Use the concentration of particulates of size less than 1.0µm in µg per cubic meter under atmospheric environment. All options from :ref:`Sensor `. -- **pm_2_5** (*Optional*): Use the concentration of particulates of size less than 2.5µm in µg per cubic meter under atmospheric environment +- **pm_2_5** (*Optional*): Use the concentration of particulates of size less than 2.5µm in µg per cubic meter under atmospheric environment. All options from :ref:`Sensor `. -- **pm_10_0** (*Optional*): Use the concentration of particulates of size less than 10.0µm in µg per cubic meter under atmospheric environment +- **pm_10_0** (*Optional*): Use the concentration of particulates of size less than 10.0µm in µg per cubic meter under atmospheric environment. All options from :ref:`Sensor `. -- **pm_0_3um** (*Optional*): Use the number of particles with diameter beyond 0.3um in 0.1L of air +- **pm_0_3um** (*Optional*): Use the number of particles with diameter beyond 0.3um in 0.1L of air. All options from :ref:`Sensor `. -- **pm_0_5um** (*Optional*): Use the number of particles with diameter beyond 0.5um in 0.1L of air +- **pm_0_5um** (*Optional*): Use the number of particles with diameter beyond 0.5um in 0.1L of air. All options from :ref:`Sensor `. -- **pm_1_0um** (*Optional*): Use the number of particles with diameter beyond 1.0um in 0.1L of air +- **pm_1_0um** (*Optional*): Use the number of particles with diameter beyond 1.0um in 0.1L of air. All options from :ref:`Sensor `. -- **pm_2_5um** (*Optional*): Use the number of particles with diameter beyond 2.5um in 0.1L of air +- **pm_2_5um** (*Optional*): Use the number of particles with diameter beyond 2.5um in 0.1L of air. All options from :ref:`Sensor `. -- **pm_5_0um** (*Optional*): Use the number of particles with diameter beyond 5.0um in 0.1L of air +- **pm_5_0um** (*Optional*): Use the number of particles with diameter beyond 5.0um in 0.1L of air. Not supported by the ``PMS5003T`` type sensors. All options from :ref:`Sensor `. -- **pm_10_0um** (*Optional*): Use the number of particles with diameter beyond 10.0um in 0.1L of air +- **pm_10_0um** (*Optional*): Use the number of particles with diameter beyond 10.0um in 0.1L of air. Not supported by the ``PMS5003T`` type sensors. All options from :ref:`Sensor `. - **temperature** (*Optional*): Use the temperature value in °C for the ``PMS5003T`` and ``PMS5003ST`` type sensors. All options from :ref:`Sensor `. From 6f3b7d6de00b896194b0df713e7f1ec9245abffa Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 17 Apr 2023 14:57:41 +1200 Subject: [PATCH 04/40] Add triggers to voice assistant (#2849) --- components/voice_assistant.rst | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/components/voice_assistant.rst b/components/voice_assistant.rst index 87acf693e..8bd5c1b18 100644 --- a/components/voice_assistant.rst +++ b/components/voice_assistant.rst @@ -24,7 +24,22 @@ Configuration: microphone: mic_id - **microphone** (**Required**, :ref:`config-id`): The microphone to use for input. - +- **on_start** (*Optional*, :ref:`Automation `): An automation to + perform when the voice assistant starts listening. +- **on_end** (*Optional*, :ref:`Automation `): An automation to perform + when the voice assistant is finished all tasks. +- **on_stt_end** (*Optional*, :ref:`Automation `): An automation to perform + when the voice assistant has finished speech-to-text. The resulting text is + available to automations as the variable ``x``. +- **on_tts_start** (*Optional*, :ref:`Automation `): An automation to perform + when the voice assistant has started text-to-speech. The text to be spoken is + available to automations as the variable ``x``. +- **on_tts_end** (*Optional*, :ref:`Automation `): An automation to perform + when the voice assistant has finished text-to-speech. A URL containing the audio response + is available to automations as the variable ``x``. +- **on_error** (*Optional*, :ref:`Automation `): An automation to perform + when the voice assistant has encountered an error. The error code and message are available to + automations as the variables ``code`` and ``message``. .. _voice_assistant-actions: From 7fde35a2515c6cf09211e533f4c4618d41aa15f3 Mon Sep 17 00:00:00 2001 From: Bella Coola <31868524+BellaCoola@users.noreply.github.com> Date: Thu, 20 Apr 2023 04:18:56 +0000 Subject: [PATCH 05/40] Add support for passive WiFi scanning. (#2812) Co-authored-by: BellaCoola --- components/wifi.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/components/wifi.rst b/components/wifi.rst index 0fafb5ca6..5fecb4b40 100644 --- a/components/wifi.rst +++ b/components/wifi.rst @@ -84,6 +84,7 @@ Configuration variables: first. This is required for hidden networks and can significantly improve connection times. Defaults to ``off``. The downside is that this option connects to the first network the ESP sees, even if that network is very far away and better ones are available. +- **passive_scan** (*Optional*, boolean): If enabled, then the device will perform WiFi scans in a passive fashion. Defaults to ``false``. - **enable_btm** (*Optional*, bool): Only on ``esp32`` with ``esp-idf``. Enable 802.11v BSS Transition Management support. - **enable_rrm** (*Optional*, bool): Only on ``esp32`` with ``esp-idf``. Enable 802.11k Radio Resource Management support. From fc4e2738b05ebb6d9ccf48065d0ab0e30eda50ee Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 26 Apr 2023 17:47:52 -0500 Subject: [PATCH 06/40] Add copy for on_tag_removed trigger for RC522 (#2876) --- components/binary_sensor/rc522.rst | 124 +++++++++++++++++------------ guides/automations.rst | 3 +- 2 files changed, 77 insertions(+), 50 deletions(-) diff --git a/components/binary_sensor/rc522.rst b/components/binary_sensor/rc522.rst index 0de0ef3e5..48e60e643 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 -(`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. - -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 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% +The ``rc522`` component allows you to use RC522 NFC/RFID controllers +(`datasheet `__, `Ali Express `__) +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 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 (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/guides/automations.rst b/guides/automations.rst index ea25ed37f..e53126a30 100644 --- a/guides/automations.rst +++ b/guides/automations.rst @@ -332,7 +332,8 @@ All Triggers - :ref:`time.on_time ` / - :ref:`time.on_time_sync ` - :ref:`mqtt.on_message ` / :ref:`mqtt.on_json_message ` / :ref:`mqtt.on_connect / mqtt.on_disconnect ` -- :ref:`pn532.on_tag ` / :ref:`rdm6300.on_tag ` +- :ref:`pn532.on_tag ` / :ref:`pn532.on_tag_removed ` / :ref:`rc522.on_tag ` + / :ref:`rc522.on_tag_removed ` / :ref:`rdm6300.on_tag ` - :ref:`interval.interval ` - :ref:`switch.on_turn_on / switch.on_turn_off ` - :doc:`remote_receiver.on_* ` From dab09f6c864ff72fa5ac34e450c084049ae5c493 Mon Sep 17 00:00:00 2001 From: notsonominal <130870838+notsonominal@users.noreply.github.com> Date: Thu, 27 Apr 2023 03:18:05 +0200 Subject: [PATCH 07/40] Adding docs for mlx90614 (#2845) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/images/mlx90614.jpg | Bin 0 -> 49820 bytes components/sensor/mlx90614.rst | 57 ++++++++++++++++++++++++++ images/mlx90614.jpg | Bin 0 -> 5982 bytes index.rst | 1 + 4 files changed, 58 insertions(+) create mode 100644 components/sensor/images/mlx90614.jpg create mode 100644 components/sensor/mlx90614.rst create mode 100644 images/mlx90614.jpg diff --git a/components/sensor/images/mlx90614.jpg b/components/sensor/images/mlx90614.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86131b4a93aca3eed3a01e589e8f9f85a4bee1b9 GIT binary patch literal 49820 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

HbGisVpYg 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 literal 0 HcmV?d00001 diff --git a/components/sensor/mlx90614.rst b/components/sensor/mlx90614.rst new file mode 100644 index 000000000..51af337a9 --- /dev/null +++ b/components/sensor/mlx90614.rst @@ -0,0 +1,57 @@ +MLX90614 non-contact thermometer +================================= + +.. seo:: + :description: Instructions for setting up Melexis MLX90614 non-contact thermometer. + :image: mlx90614.jpg + :keywords: MLX90614 + +The ``mlx90614`` sensor platform allows you to use your Melexis MLX90614 non-contact infrared thermometer +(`Datasheet `__, +`Product Page`_) with ESPHome. Sensor measures both ambient and object temperature that can be enabled independently. + +The :ref:`I²C Bus ` is required to be set up in your configuration for this sensor to work. + +.. figure:: images/mlx90614.jpg + :align: center + :width: 50.0% + + MLX90614 non-contact thermometer + +.. _Product Page: https://www.melexis.com/en/product/MLX90614/Digital-Plug-Play-Infrared-Thermometer-TO-Can + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + + + +Configuration variables +----------------------- +- **ambient** (*Optional*): Enables sensor entity for ambient temperature reading. + + - All options from :ref:`Sensor `. + +- **object** (*Optional*): Enables sensor entity for object temperature reading. + + - **emissivity** (*Optional*): Emissivity coefficient is the measure of an object's ability to emit infrared energy + compared to a theoretical perfect black body emitter. See `Emissivity Application note `__ + for details on determining custom emissivity. Default is 1.0 which is 100% and corresponds to the ideal black body. + + - All options from :ref:`Sensor `. + +- All other options for I²C devices described at :ref:`I²C Bus `. + + +See Also +-------- + +- :ref:`sensor-filters` +- :apiref:`mlx90614/mlx90614.h` +- :ghedit:`Edit` diff --git a/images/mlx90614.jpg b/images/mlx90614.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c9a37dd22c944e087679db4b8800c990fc4f919 GIT binary patch literal 5982 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 Date: Mon, 1 May 2023 04:00:24 +0000 Subject: [PATCH 08/40] Add PCA6416A (#2834) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/pca6416a.rst | 103 ++++++++++++++++++++++++++++++++++++++++ images/pca6416a.svg | 1 + index.rst | 1 + 3 files changed, 105 insertions(+) create mode 100644 components/pca6416a.rst create mode 100644 images/pca6416a.svg diff --git a/components/pca6416a.rst b/components/pca6416a.rst new file mode 100644 index 000000000..8b6038b28 --- /dev/null +++ b/components/pca6416a.rst @@ -0,0 +1,103 @@ +PCA6416A I/O Expander +===================== + +.. seo:: + :description: Instructions for setting up PCA6416A and PCAL6416A, digital port expanders in ESPHome. + :image: pca6416a.svg + +The PCA6416A component allows you to use **PCA6416A** or **PCAL6416A** I/O expanders in ESPHome. +It uses :ref:`I²C Bus ` for communication. + +Once configured, you can use any of the **16** pins for your projects. Within ESPHome they emulate a real internal +GPIO pin and can therefore be used with many of ESPHome's components such as the GPIO binary sensor or GPIO switch. + +.. note:: + + The 7 bit I²C device address ranges are: + + - PCA6416A: ``0x20`` to ``0x21`` + - PCAL6416A: ``0x20`` to ``0x21`` + + For the PCA6416A and PCAL6416A, the actual choice of the I²C device address depends on state of the address pin. + Please refer to the individual datasheets linked at the bottom of the page for further details to set the address. + + Up to two PCA6416A or PCAL6416A devices can reside on the same I²C bus. + + The PCA6416A and PCAL6416A provide 16 bits of GPIO's (pin numbers 0-15). + + Only the PCAL6416A supports pull-up resistors. + + Any option accepting a :ref:`Pin Schema ` can theoretically be used, but some more + complicated components that do communication through this I/O expander will not work. + +.. code-block:: yaml + + # Example configuration entry + pca6416a: + - id: 'pca6416a_device' + address: 0x20 + + # Individual outputs + switch: + - platform: gpio + name: "PCA6416A Pin #0" + pin: + pca6416a: pca6416a_device + # Use pin number 0 + number: 0 + # One of INPUT or OUTPUT + mode: + output: true + inverted: false + + +.. code-block:: yaml + + # Example configuration entry + pca6416a: + - id: 'pcal6416a_device' + address: 0x20 + + # Individual outputs + switch: + - platform: gpio + name: "PCAL6416A Pin #0" + pin: + pca6416a: pcal6416a_device + # Use pin number 0 + number: 0 + # One of INPUT, INPUT_PULLUP or OUTPUT + mode: + input: true + pullup: true + inverted: false + +Configuration variables: +************************ + +- **id** (**Required**, :ref:`config-id`): The id to use for this ``pca6416a`` component. +- **address** (*Optional*, int): The I²C address of the driver. + Defaults to ``0x20``. + + + +Pin configuration variables: +**************************** + +- **pca6416a** (**Required**, :ref:`config-id`): The id of the ``pca6416a`` component of the pin. +- **number** (**Required**, int): The pin number. +- **inverted** (*Optional*, boolean): If all read and written values + should be treated as inverted. Defaults to ``false``. +- **mode** (*Optional*, string): A pin mode to set for the pin at. One of ``INPUT`` or ``OUTPUT``. + + +See Also +-------- + +- :ref:`i2c` +- :doc:`switch/gpio` +- :doc:`binary_sensor/gpio` +- `PCA6416A datasheet `__ +- `PCAL6416A datasheet `__ +- :apiref:`pca6416a/pca6416a.h` +- :ghedit:`Edit` diff --git a/images/pca6416a.svg b/images/pca6416a.svg new file mode 100644 index 000000000..67c5a3723 --- /dev/null +++ b/images/pca6416a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.rst b/index.rst index 08416c28d..d4feb29cc 100644 --- a/index.rst +++ b/index.rst @@ -770,6 +770,7 @@ Miscellaneous Components Servo, components/servo, servo.svg Sprinkler, components/sprinkler, sprinkler-variant.svg + PCA6416A I/O Expander, components/pca6416a, pca6416a.svg PCA9554 I/O Expander, components/pca9554, pca9554a.jpg PCF8574 I/O Expander, components/pcf8574, pcf8574.jpg MCP230XX I/O Expander - I²C Bus, components/mcp230xx, mcp230xx.svg From 7d0fbc19fea5e80c583b721caa84d4d6fc8f791c Mon Sep 17 00:00:00 2001 From: Luis Andrade Date: Mon, 1 May 2023 00:01:28 -0400 Subject: [PATCH 09/40] Adding play_mp3 action documentation to dfplayer component (#2879) --- components/dfplayer.rst | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/components/dfplayer.rst b/components/dfplayer.rst index 9bc19771e..9b2f5e655 100644 --- a/components/dfplayer.rst +++ b/components/dfplayer.rst @@ -111,6 +111,39 @@ Configuration options: - **loop** (*Optional*, boolean, :ref:`templatable `): Repeats playing the same track. Defaults to ``false``. +``dfplayer.play_mp3`` Action +---------------------------- + +Plays a track inside the folder ``mp3``. Files inside the folder must be numbered from 1 +to 9999, like ``0001.mp3``, ``0002.mp3``, ... etc. +The folder name needs to be ``mp3``, placed under the SD card root directory, and the +mp3 file name needs to be 4 digits, for example, "0001.mp3", placed under the mp3 folder. +If you want, you can add additional text after the number in the filename, for example, +``0001hello.mp3``, but must always be referenced by number only in yaml. + +.. code-block:: bash + + /mp3 + /0001hello.mp3 + /0002.mp3 + /0003_thisistheway.mp3 + .. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.play_mp3: + file: 1 + # Shorthand + - dfplayer.play_mp3: 1 + +Configuration options: + +- **file** (**Required**, int, :ref:`templatable `): The file number + inside the ``mp3`` folder to play. + + ``dfplayer.play_folder`` Action ------------------------------- From 53cdf2436be9ecc9eaf2815250f03e922188c0f5 Mon Sep 17 00:00:00 2001 From: marshn Date: Mon, 1 May 2023 05:13:01 +0100 Subject: [PATCH 10/40] Added documentation for Drayton Digistat codec (#2712) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/remote_receiver.rst | 10 ++++++++++ components/remote_transmitter.rst | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/components/remote_receiver.rst b/components/remote_receiver.rst index 1333615fe..9c866f45f 100644 --- a/components/remote_receiver.rst +++ b/components/remote_receiver.rst @@ -35,6 +35,7 @@ Configuration variables: - **canalsatld**: Decode and dump CanalSatLD infrared codes. - **coolix**: Decode and dump Coolix infrared codes. - **dish**: Decode and dump Dish infrared codes. + - **drayton**: Decode and dump Drayton Digistat RF codes. - **jvc**: Decode and dump JVC infrared codes. - **lg**: Decode and dump LG infrared codes. - **magiquest**: Decode and dump MagiQuest wand infrared codes. @@ -91,6 +92,9 @@ Automations: dish network remote code has been decoded. A variable ``x`` of type :apistruct:`remote_base::DishData` is passed to the automation for use in lambdas. Beware that Dish remotes use a different carrier frequency (57.6kHz) that many receiver hardware don't decode. +- **on_drayton** (*Optional*, :ref:`Automation `): An automation to perform when a + Drayton Digistat RF code has been decoded. A variable ``x`` of type :apistruct:`remote_base::DraytonData` + is passed to the automation for use in lambdas. - **on_jvc** (*Optional*, :ref:`Automation `): An automation to perform when a JVC remote code has been decoded. A variable ``x`` of type :apistruct:`remote_base::JVCData` is passed to the automation for use in lambdas. @@ -219,6 +223,12 @@ Remote code selection (exactly one of these has to be included): - **address** (*Optional*, int): The number of the receiver to target, between 1 and 16 inclusive. Defaults to ``1``. - **command** (**Required**, int): The Dish command to listen for, between 0 and 63 inclusive. +- **drayton**: Trigger on a decoded Drayton Digistat RF remote code with the given data. + + - **address** (**Required**, int): The 16-bit ID code to trigger on, see dumper output for more info. + - **channel** (**Required**, int): The 7-bit switch/channel to listen for. + - **command** (**Required**, int): The 5-bit command to listen for. + - **jvc**: Trigger on a decoded JVC remote code with the given data. - **data** (**Required**, int): The JVC code to trigger on, see dumper output for more info. diff --git a/components/remote_transmitter.rst b/components/remote_transmitter.rst index 15bf0efe8..43c7ff85d 100644 --- a/components/remote_transmitter.rst +++ b/components/remote_transmitter.rst @@ -192,6 +192,28 @@ Configuration variables: You can find a list of commands in the `LIRC project `__. +.. _remote_transmitter-transmit_drayton: + +``remote_transmitter.transmit_drayton`` Action +********************************************** + +This :ref:`action ` sends a Draton Digistat RF remote code to a remote transmitter. + +.. code-block:: yaml + + on_...: + - remote_transmitter.transmit_drayton: + address: '0x6180' + channel: '0x12' + command: '0x02' + +Configuration variables: + +- **address** (**Required**, int): The 16-bit ID to send, see dumper output for more info. +- **channel** (**Required**, int): The switch/channel to send, between 0 and 127 inclusive. +- **command** (**Required**, int): The command to send, between 0 and 63 inclusive. +- All other options from :ref:`remote_transmitter-transmit_action`. + .. _remote_transmitter-transmit_jvc: ``remote_transmitter.transmit_jvc`` Action From 3032493225501041dee74bb566b52bf6b9d5d295 Mon Sep 17 00:00:00 2001 From: Philippe FOUQUET Date: Mon, 1 May 2023 06:18:40 +0200 Subject: [PATCH 11/40] Add HYT271 doc (#2583) --- components/sensor/hyt271.rst | 49 ++++++++++++++++++++++++++++ components/sensor/images/hyt271.jpg | Bin 0 -> 88303 bytes images/hyt271.jpg | Bin 0 -> 4025 bytes index.rst | 1 + 4 files changed, 50 insertions(+) create mode 100644 components/sensor/hyt271.rst create mode 100644 components/sensor/images/hyt271.jpg create mode 100644 images/hyt271.jpg diff --git a/components/sensor/hyt271.rst b/components/sensor/hyt271.rst new file mode 100644 index 000000000..658b66f83 --- /dev/null +++ b/components/sensor/hyt271.rst @@ -0,0 +1,49 @@ +HYT271 Temperature & Humidity Sensor +===================================================== + +.. seo:: + :description: Instructions for setting up HYT271 temperature and humidity sensors. + :image: hyt271.jpg + :keywords: HYT271 + +The HYT271 Temperature & Humidity sensors with ESPHome. +The :ref:`I²C Bus ` is required to be set up in your configuration for this sensor to work. + +Example sensors: + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: hyt271 + temperature: + name: "Living Room Temperature" + humidity: + name: "Living Room Humidity" + update_interval: 60s + +Configuration variables: +------------------------ + +- **temperature** (**Required**): The information for the temperature sensor. + + - **name** (**Required**, string): The name for the temperature sensor. + - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas. + - All other options from :ref:`Sensor `. + +- **humidity** (**Required**): The information for the humidity sensor. + + - **name** (**Required**, string): The name for the humidity sensor. + - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas. + - All other options from :ref:`Sensor `. + +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``. + + +See Also +-------- + +- :ref:`sensor-filters` +- :apiref:`hyt271/hyt271.h` +- `i2cdevlib `__ by `Jeff Rowberg `__ +- :ghedit:`Edit` diff --git a/components/sensor/images/hyt271.jpg b/components/sensor/images/hyt271.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0103530a7aa9ac8a0a8ab9be0ca6a69cb0e53fe GIT binary patch literal 88303 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 z

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 QS(j&XM6TIMf2I%r*%Hk-AfdC`= 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 literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index d4feb29cc..f02d9fe3a 100644 --- a/index.rst +++ b/index.rst @@ -317,6 +317,7 @@ Environmental TEE501, components/sensor/tee501, TEE501.png, Temperature TMP102, components/sensor/tmp102, tmp102.jpg, Temperature TMP117, components/sensor/tmp117, tmp117.jpg, Temperature + HYT271, components/sensor/hyt271, hyt271.jpg, Temperature & Humidity Light From 4d8e238f206d5377abde261f5d14d46e2aab1b20 Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Mon, 1 May 2023 21:25:15 +0000 Subject: [PATCH 12/40] Add support for BLE passkey authentication (#2607) --- components/ble_client.rst | 214 +++++++++++++++++++++++++++++++++++++- components/esp32_ble.rst | 11 +- 2 files changed, 219 insertions(+), 6 deletions(-) diff --git a/components/ble_client.rst b/components/ble_client.rst index 44b2c03d2..7424ecf70 100644 --- a/components/ble_client.rst +++ b/components/ble_client.rst @@ -21,8 +21,8 @@ but merely manages connections to them for use by other components. ESP32 BLE stack. If you wish to connect more devices, use additional ESP32 boards. - This component does not (yet) support devices that require - security settings (eg connecting with a PIN). + This component supports devices that require a 6 digit PIN code + for authentication. Currently, devices connected with the client cannot be supported by other components based on :doc:`/components/esp32_ble_tracker` @@ -53,6 +53,12 @@ Automations: when the client connects to a device. See :ref:`ble_client-on_connect`. - **on_disconnect** (*Optional*, :ref:`Automation `): An automation to perform when the client disconnects from a device. See :ref:`ble_client-on_disconnect`. +- **on_passkey_request** (*Optional*, :ref:`Automation `): An automation to enter + the passkey required by the other BLE device. See :ref:`ble_client-on_passkey_request`. +- **on_passkey_notification** (*Optional*, :ref:`Automation `): An automation to + display the passkey to the user. See :ref:`ble_client-on_passkey_notification`. +- **on_numeric_comparison_request** (*Optional*, :ref:`Automation `): An automation to + compare the passkeys shown on the two BLE devices. See :ref:`ble_client-on_numeric_comparison_request`. BLE Client Automation --------------------- @@ -91,6 +97,64 @@ This automation is triggered when the client disconnects from a BLE device. - lambda: |- ESP_LOGD("ble_client_lambda", "Disconnected from BLE device"); + +.. _ble_client-on_passkey_request: + +``on_passkey_request`` +********************** + +This automation is triggered when the BLE device requests a passkey for authentication. + +.. code-block:: yaml + + ble_client: + - mac_address: 11:22:33:44:55:66 + id: ble_itag + on_passkey_request: + then: + - ble_client.passkey_reply: + id: ble_itag + passkey: 123456 + +.. _ble_client-on_passkey_notification: + +``on_passkey_notification`` +*************************** + +This automation is triggered when a passkey is received from the BLE device. + +.. code-block:: yaml + + ble_client: + - mac_address: 11:22:33:44:55:66 + id: ble_itag + on_passkey_notification: + then: + - logger.log: + format: "Enter this passkey on your BLE device: %06d" + args: [ passkey ] + +.. _ble_client-on_numeric_comparison_request: + +``on_numeric_comparison_request`` +********************************* + +This automation is triggered when a numeric comparison is requested by the BLE device. + +.. code-block:: yaml + + ble_client: + - mac_address: 11:22:33:44:55:66 + id: ble_itag + on_numeric_comparison_request: + then: + - logger.log: + format: "Compare this passkey with the one on your BLE device: %06d" + args: [ passkey ] + - ble_client.numeric_comparison_reply: + id: ble_itag + accept: True + .. _ble_client-ble_write_action: ``ble_client.ble_write`` Action @@ -133,6 +197,75 @@ Configuration variables: - **characteristic_uuid** (**Required**, UUID): UUID of the service's characteristic to write to. - **value** (**Required**, Array of bytes or :ref:`lambda `): The value to be written. +.. _ble_client-passkey_reply_action: + +``ble_client.passkey_reply`` Action +----------------------------------- + +This action triggers an authentication attempt using the specified ``passkey``. + +Example usage: + +.. code-block:: yaml + + on_...: + then: + - ble_client.passkey_reply: + id: my_ble_client + passkey: 123456 + +Configuration variables: + +- **id** (**Required**, :ref:`config-id`): ID of the associated BLE client. +- **passkey** (**Required**, int): The 6-digit passkey. + +.. _ble_client-numeric_comparison_reply_action: + +``ble_client.numeric_comparison_reply`` Action +---------------------------------------------- + +This action triggers an authentication attempt after a numeric comparison. + +Example usage: + +.. code-block:: yaml + + on_...: + then: + - ble_client.numeric_comparison_reply: + id: my_ble_client + accept: True + +Configuration variables: + +- **id** (**Required**, :ref:`config-id`): ID of the associated BLE client. +- **accept** (**Required**, boolean): Should be ``true`` if the passkeys + displayed on both BLE devices are matching. + +.. _ble_client-remove_bond_action: + +``ble_client.remove_bond`` Action +---------------------------------------------- + +This action removes a device from the security database and manages +unpairing. + +Example usage: + +.. code-block:: yaml + + ble_client: + - mac_address: 11:22:33:44:55:66 + id: my_ble_client + on_connect: + then: + - ble_client.remove_bond: + id: my_ble_client + +Configuration variables: + +- **id** (**Required**, :ref:`config-id`): ID of the associated BLE client. + BLE Overview ------------ This section gives a brief overview of the Bluetooth LE architecture @@ -186,9 +319,8 @@ characteristics and descriptors also provide a small 2-byte Setting Up Devices ------------------ -Whilst the component can connect to most BLE devices (that do not -require authentication/pin), useful functionality is only obtained -through dependent components, such as :doc:`/components/sensor/ble_client`. +Whilst the component can connect to most BLE devices, useful functionality +is only obtained through dependent components, such as :doc:`/components/sensor/ble_client`. See the documentation for these components for details on setting up specific devices. @@ -247,6 +379,78 @@ The discovered services can then be used to enable and configure other ESPHome components, for example Service UUID 0xFFE0 is used for iTag style keychain button events, used by the :doc:`/components/sensor/ble_client` component. +Passkey examples +---------------- + +Secure connection with a fixed passkey: + +.. code-block:: yaml + + esp32_ble: + io_capability: keyboard_only + + esp32_ble_tracker: + + ble_client: + - mac_address: A4:C1:38:B1:CD:7F + id: pvvx_ble_display + on_passkey_request: + then: + - logger.log: "Authenticating with passkey" + - ble_client.passkey_reply: + id: pvvx_ble_display + passkey: 123456 + +Secure connection with a dynamically generated passkey: + +.. code-block:: yaml + + api: + services: + - service: passkey_reply + variables: + passkey: int + then: + - logger.log: "Authenticating with passkey" + - ble_client.passkey_reply: + id: my_ble_client + passkey: !lambda return passkey; + - service: numeric_comparison_reply + variables: + accept: bool + then: + - logger.log: "Authenticating with numeric comparison" + - ble_client.numeric_comparison_reply: + id: my_ble_client + accept: !lambda return accept; + + esp32_ble: + io_capability: keyboard_display + + esp32_ble_tracker: + + ble_client: + - mac_address: AA:BB:CC:DD:EE:FF + id: my_ble_client + on_passkey_request: + then: + - logger.log: "Enter the passkey displayed on your BLE device" + - logger.log: " Go to https://my.home-assistant.io/redirect/developer_services/ and select passkey_reply" + on_passkey_notification: + then: + - logger.log: + format: "Enter this passkey on your BLE device: %06d" + args: [ passkey ] + on_numeric_comparison_request: + then: + - logger.log: + format: "Compare this passkey with the one on your BLE device: %06d" + args: [ passkey ] + - logger.log: " Go to https://my.home-assistant.io/redirect/developer_services/ and select numeric_comparison_reply" + on_connect: + then: + - logger.log: "Connected" + See Also -------- diff --git a/components/esp32_ble.rst b/components/esp32_ble.rst index 07def025d..325ce59f0 100644 --- a/components/esp32_ble.rst +++ b/components/esp32_ble.rst @@ -13,9 +13,18 @@ can run. # Example configuration esp32_ble: + io_capability: keyboard_only +Configuration variables: +------------------------ -No configuration variables. +- **io_capability** (*Optional*, enum): The IO capability of this ESP32, used for securely connecting to other BLE devices. Defaults to ``none``. + + - ``none`` - No IO capability (Connections that require PIN code authentication will fail) + - ``keyboard_only`` - Only a keyboard to enter PIN codes (or a fixed PIN code) + - ``display_only`` - Only a display to show PIN codes + - ``keyboard_display`` - A keyboard and a display + - ``display_yes_no`` - A display to show PIN codes and buttons to confirm or deny the connection See Also -------- From 7a92fae4e609a744b9e99ce432acc33641f36e52 Mon Sep 17 00:00:00 2001 From: cooki35 <33752572+cooki35@users.noreply.github.com> Date: Mon, 1 May 2023 23:36:51 +0200 Subject: [PATCH 13/40] Add support for V2 of the waveshare 5.83in e-paper display. (#2200) Update the docs. --- components/display/waveshare_epaper.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/components/display/waveshare_epaper.rst b/components/display/waveshare_epaper.rst index 6eeb9d230..664bc544d 100644 --- a/components/display/waveshare_epaper.rst +++ b/components/display/waveshare_epaper.rst @@ -91,6 +91,7 @@ Configuration variables: - ``4.20in`` - ``4.20in-bV2`` - B/W rendering only - ``5.83in`` + - ``5.83inv2`` - ``7.50in`` - ``7.50in-bV2`` - also supports v3, B/W rendering only - ``7.50in-bc`` - display with version sticker '(C)' on the back, B/W rendering only From 72bc0f612cd04bbe8908fdb13fabb55bebab4d21 Mon Sep 17 00:00:00 2001 From: looping40 <36304961+looping40@users.noreply.github.com> Date: Mon, 1 May 2023 23:51:55 +0200 Subject: [PATCH 14/40] Max6956 support added (#2320) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolas C Co-authored-by: H. Árkosi Róbert --- components/images/max6956.jpg | Bin 0 -> 35341 bytes components/max6956.rst | 290 ++++++++++++++++++++++++++++++++++ images/max6956.jpg | Bin 0 -> 29699 bytes index.rst | 1 + 4 files changed, 291 insertions(+) create mode 100644 components/images/max6956.jpg create mode 100644 components/max6956.rst create mode 100644 images/max6956.jpg diff --git a/components/images/max6956.jpg b/components/images/max6956.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81bde116a2b6566bad7a5064ebab071811d72fe7 GIT binary patch literal 35341 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 in ESPHome. It uses :ref:`I²C Bus ` for communication. + +The ``max6956`` exists in 2 versions 20 or 28 ports, depending on the packaging. +Once configured, you can use any of the 20 or 28 pins for your projects. Within ESPHome they emulate a real internal GPIO pin +and can therefore be used with many of ESPHome's components such as the GPIO binary sensor or GPIO switch. Interrupt-on-change for inputs is not possible. + +Pins can also be individualy configured as led driver and used with Light components. Current value can be set globaly or for each pin, through 16 possible levels. Driving RGB +led requires 3 pins. + +Any option accepting a :ref:`Pin Schema ` can theoretically be used. + +Component/Hub +------------- + +.. figure:: images/max6956.jpg + :align: center + :width: 80.0% + + MAX6956 I/O Expander. + +The ``max6956`` is an :ref:`I²C Bus ` slave. Its address is configured using A0 and A1 hardware pins from 0x40 to 0x4F. + +.. code-block:: yaml + + max6956: + - id: max6956_1 + address: 0x40 + i2c_id: bus_a + + +Configuration variables: +************************ + +- **id** (**Required**, :ref:`config-id`): The id to use for this ``max6956`` component. +- **address** (*Optional*, int): The I²C address of the driver. + Defaults to ``0x40``. +- **i2c_id** (*Optional*): The I²C Bus ID + Defaults to ``false`` +- **brightness_global** (*Optional*): Set the value of the current to be sink by all pins configured as led driver. + Defaults to ``0`` +- **brightness_mode** (*Optional*): Define if the current to be sink will be confgured globaly or per pin configured as led driver. + Defaults to ``global`` + + +Binary Sensor +------------- +``max6956`` pins can be use as binary sensor. Individual pullup are supported. + +.. code-block:: yaml + + # Example configuration : pin as input with pullup + i2c: + id: bus_a + sda: GPIO13 + scl: GPIO16 + scan: false + + max6956: + - id: max6956_1 + address: 0x40 + i2c_id: bus_a + + # Individual input + binary_sensor: + - platform: gpio + name: "MaxIn Pin 4" + id: In_4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: False + + +Switch +------------- +``max6956`` pins can be use as switch. + +.. code-block:: yaml + + # Example configuration : pin as output + i2c: + id: bus_a + sda: GPIO13 + scl: GPIO16 + + max6956: + - id: max6956_1 + address: 0x40 + i2c_id: bus_a + + # Individual output + switch: + - platform: gpio + name: "MaxIn Pin 8" + id: In_8 + pin: + max6956: max6956_1 + number: 8 + mode: + output: true + inverted: False + + +Led driver +------------- +``max6956`` can control a constant-current sink to drive leds, with 16 equal steps from 1.5mA to 24mA. + + +.. code-block:: yaml + + # Example configuration : pin as led driver, current globaly + i2c: + id: bus_a + sda: GPIO13 + scl: GPIO16 + + switch: + - platform: template + name: "Led" + id: MaxOut4 + optimistic: true + turn_on_action: + - output.turn_on: maxOut_pin4 + turn_off_action: + - output.turn_off: maxOut_pin4 + + number: + - platform: template + name: "Global brightness" + id: global_brightness + optimistic: true + min_value: 0 + max_value: 15 + initial_value: 1 + step: 1 + mode: slider + on_value: + - max6956.set_brightness_global: + id: max6956_1 + brightness_global: !lambda return x; + + max6956: + - id: max6956_1 + address: 0x40 + i2c_id: bus_a + brightness_mode: global + brightness_global: 5 + + #output to use + output: + - platform: max6956 + pin: 4 + id: maxOut_pin4 + + #led binded to output + light: + - platform: monochromatic + id: Light_1 + output: maxOut_pin4 + +.. code-block:: yaml + + # Example configuration : pin as led driver, current managed individualy (RBG led) + i2c: + id: bus_a + sda: GPIO13 + scl: GPIO16 + + max6956: + - id: max6956_1 + address: 0x40 + i2c_id: bus_a + brightness_mode: segment + + switch: + - platform: template + name: "Led Red" + id: MaxOut4 + optimistic: true + turn_on_action: + - output.turn_on: maxOut_pin4 + turn_off_action: + - output.turn_off: maxOut_pin4 + + - platform: template + name: "Led Green" + id: MaxOut5 + optimistic: true + turn_on_action: + - output.turn_on: maxOut_pin5 + turn_off_action: + - output.turn_off: maxOut_pin5 + + - platform: template + name: "Led Blue" + id: MaxOut6 + optimistic: true + turn_on_action: + - output.turn_on: maxOut_pin6 + turn_off_action: + - output.turn_off: maxOut_pin6 + + number: + - platform: template + name: "Number Red" + id: number_LedRed + optimistic: true + min_value: 0 + max_value: 100 + initial_value: 10 + step: 1 + mode: slider + on_value: + - output.set_level: + id: maxOut_pin4 + level: !lambda return x/100; + + - platform: template + name: "Number Green" + id: number_LedGreen + optimistic: true + min_value: 0 + max_value: 100 + initial_value: 10 + step: 1 + mode: slider + on_value: + - output.set_level: + id: maxOut_pin5 + level: !lambda return x/100; + + - platform: template + name: "Number Blue" + id: number_LedBlue + optimistic: true + min_value: 0 + max_value: 100 + initial_value: 10 + step: 1 + mode: slider + on_value: + - output.set_level: + id: maxOut_pin6 + level: !lambda return x/100; + output: + - platform: max6956 + pin: 4 + id: maxOut_pin4 + - platform: max6956 + pin: 5 + id: maxOut_pin5 + - platform: max6956 + pin: 6 + id: maxOut_pin6 + + light: + - platform: rgb + id: Light_1 + default_transition_length: 0.1s + gamma_correct: 1 + red: maxOut_pin4 + green: maxOut_pin5 + blue: maxOut_pin6 + + + + +See Also +-------- + +- :ref:`i2c` +- :doc:`switch/gpio` +- :doc:`/components/binary_sensor/index` +- :doc:`binary_sensor/gpio` +- :doc:`light/binary` +- :doc:`light/rgb` +- :apiref:`max6956/max6956.h` +- :ghedit:`Edit` diff --git a/images/max6956.jpg b/images/max6956.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a17ace4ab96d813a4beda168a04a1dd2105f31c GIT binary patch literal 29699 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 Date: Wed, 3 May 2023 17:16:16 -0500 Subject: [PATCH 15/40] Revert template sensor publish updates (#2889) --- components/sensor/template.rst | 5 ++--- components/text_sensor/template.rst | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/components/sensor/template.rst b/components/sensor/template.rst index 01304dea7..8c971a066 100644 --- a/components/sensor/template.rst +++ b/components/sensor/template.rst @@ -35,9 +35,8 @@ Configuration variables: - **name** (**Required**, string): The name of the sensor. - **lambda** (*Optional*, :ref:`lambda `): Lambda to be evaluated every update interval to get the new value of the sensor -- **update_interval** (*Optional*, :ref:`config-time`): The interval to publish the value of the - sensor, either the result of the lambda function or if no lambda function the last value - published using the publish action. Set to ``never`` to disable updates. Defaults to ``60s``. +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. Set to ``never`` to disable updates. Defaults to ``60s``. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. - All other options from :ref:`Sensor `. diff --git a/components/text_sensor/template.rst b/components/text_sensor/template.rst index ac65bbd93..5886e5dcf 100644 --- a/components/text_sensor/template.rst +++ b/components/text_sensor/template.rst @@ -31,9 +31,8 @@ Configuration variables: - **name** (**Required**, string): The name of the text sensor. - **lambda** (*Optional*, :ref:`lambda `): Lambda to be evaluated every update interval to get the new value of the text sensor -- **update_interval** (*Optional*, :ref:`config-time`): The interval to publish the value of the - text sensor, either the result of the lambda function or if no lambda function the last value - published using the publish action. Defaults to ``60s``. +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + text sensor. Set to ``never`` to disable updates. Defaults to ``60s``. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. - All other options from :ref:`Text Sensor `. From 962656bec365a19c01c2fb077895eeb65913635e Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 8 May 2023 10:36:43 +1200 Subject: [PATCH 16/40] Speaker docs (#2892) --- components/index.rst | 1 + components/speaker/i2s_audio.rst | 49 ++++++++++++++++ components/speaker/index.rst | 96 ++++++++++++++++++++++++++++++++ images/speaker.svg | 1 + index.rst | 8 +++ 5 files changed, 155 insertions(+) create mode 100644 components/speaker/i2s_audio.rst create mode 100644 components/speaker/index.rst create mode 100644 images/speaker.svg diff --git a/components/index.rst b/components/index.rst index 737a782af..48a4c1ca8 100644 --- a/components/index.rst +++ b/components/index.rst @@ -24,5 +24,6 @@ Components display_menu/index media_player/index microphone/index + speaker/index time/index * diff --git a/components/speaker/i2s_audio.rst b/components/speaker/i2s_audio.rst new file mode 100644 index 000000000..3ece5e99a --- /dev/null +++ b/components/speaker/i2s_audio.rst @@ -0,0 +1,49 @@ +I²S Audio Speaker +================= + +.. seo:: + :description: Instructions for setting up I²S based speakers in ESPHome. + :image: i2s_audio.svg + +The ``i2s_audio`` speaker platform allows you to receive audio via the the +:doc:`/components/i2s_audio`. This platform only works on ESP32 based chips. + +.. code-block:: yaml + + # Example configuration entry + speaker: + - platform: i2s_audio + dac_type: external + i2s_dout_pin: GPIO22 + mode: mono + +Configuration variables: +------------------------ + +- **dac_type** (**Required**, enum): + + - ``external``: Use an external DAC, for example the NS4168, or UDA1334A. + - ``internal``: Use the internal DAC + +External DAC +************ + +- **i2s_dout_pin** (**Required**, :ref:`Pin Schema `): The GPIO pin to use for the I²S DOUT (Data Out) signal. +- **mode** (*Optional*, string): The mode of the I²S bus. Can be ``mono`` or ``stereo``. Defaults to ``mono``. + +For best results, keep the wires as short as possible. + +Internal DAC +************ + +- **mode** (**Required**, enum): The channel mode of the internal DAC. + + - ``left`` + - ``right`` + - ``stereo`` + +See also +-------- + +- :doc:`index` +- :ghedit:`Edit` diff --git a/components/speaker/index.rst b/components/speaker/index.rst new file mode 100644 index 000000000..85f110c3c --- /dev/null +++ b/components/speaker/index.rst @@ -0,0 +1,96 @@ +Speaker Components +================== + +.. seo:: + :description: Instructions for setting up speakers in ESPHome. + :image: speaker.svg + +The ``speaker`` domain contains common functionality shared across the +speaker platforms. + +.. _config-speaker: + +Base Speaker Configuration +-------------------------- + +No configuration variables + +.. _speaker-actions: + +Speaker Actions +------------------ + +All ``speaker`` actions can be used without specifying an ``id`` if you have only one ``speaker`` in +your configuration YAML. + +Configuration variables: + +**id** (*Optional*, :ref:`config-id`): The speaker to control. Defaults to the only one in YAML. + + +.. _speaker-play: + +``speaker.play`` Action +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This action will start playing raw audio data from the speaker. + +.. code-block:: yaml + + on_...: + # Static raw audio data + - speaker.play: [...] + + # Templated, return type is std::vector + - speaker.play: !lambda return {...}; + + # in case you need to specify the speaker id + - speaker.play: + id: my_speaker + data: [...] + +Configuration variables: + +**id** (*Optional*, :ref:`config-id`): The speaker to control. Defaults to the only one in YAML. +**data** (*Required*, list of bytes): The raw audio data to play. + +.. _speaker-stop: + +``speaker.stop`` Action +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This action will stop playing audio data from the speaker and discard the unplayed data. + +.. _speaker-conditions: + +Speaker Conditions +--------------------- + +All ``speaker`` conditions can be used without specifying an ``id`` if you have only one ``speaker`` in +your configuration YAML. + +Configuration variables: + +**id** (*Optional*, :ref:`config-id`): The speaker to check. Defaults to the only one in YAML. + +.. _speaker-is_playing: + +``speaker.is_playing`` Condition +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This condition will check if the speaker is currently playing audio data. + + +Platforms +--------- + +.. toctree:: + :maxdepth: 1 + :glob: + + * + +See Also +-------- + +- :ghedit:`Edit` diff --git a/images/speaker.svg b/images/speaker.svg new file mode 100644 index 000000000..22a96737d --- /dev/null +++ b/images/speaker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.rst b/index.rst index 225912426..9088ca13e 100644 --- a/index.rst +++ b/index.rst @@ -715,6 +715,14 @@ Microphone Components Microphone Core, components/microphone/index, microphone.svg I2S Microphone, components/microphone/i2s_audio, i2s_audio.svg +Speaker Components +------------------ + +.. imgtable:: + + Speaker Core, components/speaker/index, speaker.svg + I2S Speaker, components/speaker/i2s_audio, i2s_audio.svg + Time Components --------------- From 4b879d5e7baff4f7ac6e3aab22a9d0727968af76 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 8 May 2023 11:02:19 +1200 Subject: [PATCH 17/40] Add speaker to VA docs (#2900) --- components/voice_assistant.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/voice_assistant.rst b/components/voice_assistant.rst index 8bd5c1b18..66be3d29e 100644 --- a/components/voice_assistant.rst +++ b/components/voice_assistant.rst @@ -23,7 +23,8 @@ Configuration: voice_assistant: microphone: mic_id -- **microphone** (**Required**, :ref:`config-id`): The microphone to use for input. +- **microphone** (**Required**, :ref:`config-id`): The :doc:`microphone ` to use for input. +- **speaker** (*Optional*, :ref:`config-id`): The :doc:`speaker ` to use to output the response. - **on_start** (*Optional*, :ref:`Automation `): An automation to perform when the voice assistant starts listening. - **on_end** (*Optional*, :ref:`Automation `): An automation to perform From b52df8e9a325eb4400a836ebe1c4555ad9227e24 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 8 May 2023 12:45:14 +1200 Subject: [PATCH 18/40] Add gp8403 docs (#2901) --- components/output/gp8403.rst | 53 ++++++++++++++++++++++++++++++++++++ images/gp8403.svg | 1 + index.rst | 1 + 3 files changed, 55 insertions(+) create mode 100644 components/output/gp8403.rst create mode 100644 images/gp8403.svg diff --git a/components/output/gp8403.rst b/components/output/gp8403.rst new file mode 100644 index 000000000..8638219ef --- /dev/null +++ b/components/output/gp8403.rst @@ -0,0 +1,53 @@ +GP8403 Component +================ + +.. seo:: + :description: Instructions for setting up GP8403 outputs in ESPHome. + :image: gp8403.svg + +The ``gp8403`` is a 2-channel DAC output module. It requires an :doc:`/components/i2c` to be setup. + +Component/Hub +------------- + +.. code-block:: yaml + + gp8403: + id: my_gp8403 + voltage: 5V + +Configuration variables: + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **voltage** (**Required**, voltage): The output voltage range of the DAC. Must be one of ``5V`` or ``10V``. + +Output +------ + +.. code-block:: yaml + + output: + - platform: gp8403 + id: my_gp8403_output_1 + gp8403_id: my_gp8403 + channel: 0 + - platform: gp8403 + id: my_gp8403_output_2 + gp8403_id: my_gp8403 + channel: 1 + +Configuration variables: + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **gp8403_id** (*Optional*, :ref:`config-id`): The ID of the GP8403 component. + Defaults to the only GP8403 component if there is only one. +- **channel** (**Required**, int): The channel of the GP8403 to use. Must be ``0`` or ``1``. +- All other options from :ref:`config-output`. + + +See Also +-------- + +- :doc:`/components/output/esp32_dac` +- :doc:`/components/output/index` +- :ghedit:`Edit` diff --git a/images/gp8403.svg b/images/gp8403.svg new file mode 100644 index 000000000..5ee72b007 --- /dev/null +++ b/images/gp8403.svg @@ -0,0 +1 @@ + diff --git a/index.rst b/index.rst index 9088ca13e..4ab95b20a 100644 --- a/index.rst +++ b/index.rst @@ -504,6 +504,7 @@ Output Components BP1658CJ, components/output/bp1658cj, bp1658cj.svg BP5758D, components/output/bp5758d, bp5758d.svg X9C Potentiometer, components/output/x9c, x9c.jpg + GP8403, components/output/gp8403, gp8403.svg Light Components ---------------- From 2ab7d958ddd1e77da32fbdfad44d288cb5224901 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 9 May 2023 09:33:49 +1200 Subject: [PATCH 19/40] Add esp32_rmt_led_strip docs (#2902) --- components/light/esp32_rmt_led_strip.rst | 69 ++++++++++++++++++++++++ index.rst | 1 + 2 files changed, 70 insertions(+) create mode 100644 components/light/esp32_rmt_led_strip.rst diff --git a/components/light/esp32_rmt_led_strip.rst b/components/light/esp32_rmt_led_strip.rst new file mode 100644 index 000000000..03e192acf --- /dev/null +++ b/components/light/esp32_rmt_led_strip.rst @@ -0,0 +1,69 @@ +ESP32 RMT LED Strip +=================== + +.. seo:: + :description: Instructions for setting up addressable lights like NEOPIXEL on an ESP32 using the RMT peripheral. + :image: color_lens.svg + +This is a component using the ESP32 RMT peripheral to drive most addressable LED strips. + +.. code-block:: yaml + + light: + - platform: esp32_rmt_led_strip + rgb_order: GRB + pin: GPIO13 + num_leds: 30 + rmt_channel: 0 + chipset: ws2812 + name: "My Light" + +Configuration variables +----------------------- + +- **pin** (**Required**, :ref:`config-pin`): The pin for the data line of the light. +- **num_leds** (**Required**, int): The number of LEDs in the strip. +- **rmt_channel** (**Required**, int): The RMT channel to use. If using multiple strips, you need to use different channels. + - **ESP32**: ``0`` to ``7`` + - **ESP32-S2**: ``0`` to ``3`` + - **ESP32-S3**: ``0`` to ``3`` + - **ESP32-C3**: ``0`` or ``1`` + +- **chipset** (**Required**, enum): The chipset to apply known timings from. Not used if specifying the timings manually, see below. + - ``WS2812`` + - ``SK6812`` + - ``APA106`` + - ``SM16703`` + +- **rgb_order** (**Required**, string): The RGB order of the strip. + - ``RGB`` + - ``RBG`` + - ``GRB`` + - ``GBR`` + - ``BGR`` + - ``BRG`` + +- **is_rgbw** (*Optional*, boolean): Set to ``true`` if the strip is RGBW. Defaults to ``false``. +- **max_refresh_rate** (*Optional*, :ref:`config-time`): + A time interval used to limit the number of commands a light can handle per second. For example + 16ms will limit the light to a refresh rate of about 60Hz. Defaults to sending commands as quickly as + changes are made to the lights. + +Manual Timings +************** + +These can be used if you know the timings and your chipset is not set above. If you have a new specific chipset, +please consider adding support to the codebase and add it to the list above. + +- **bit0_high** (*Optional*, :ref:`config-time`): The time to hold the data line high for a ``0`` bit. +- **bit0_low** (*Optional*, :ref:`config-time`): The time to hold the data line low for a ``0`` bit. +- **bit1_high** (*Optional*, :ref:`config-time`): The time to hold the data line high for a ``1`` bit. +- **bit1_low** (*Optional*, :ref:`config-time`): The time to hold the data line low for a ``1`` bit. + +See Also +-------- + +- :doc:`/components/light/index` +- :doc:`/components/power_supply` +- :apiref:`esp32_rmt_led_strip/esp32_rmt_led_strip.h` +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index 4ab95b20a..47403365e 100644 --- a/index.rst +++ b/index.rst @@ -523,6 +523,7 @@ Light Components RGBWW Light, components/light/rgbww, rgbw.png RGBCT Light, components/light/rgbct, rgbw.png + ESP32 RMT, components/light/esp32_rmt_led_strip, color_lens.svg FastLED Light, components/light/fastled, color_lens.svg NeoPixelBus Light, components/light/neopixelbus, color_lens.svg Light Partition, components/light/partition, color_lens.svg From 148b12494010ee688f28be761cd8fe9eb28b77d0 Mon Sep 17 00:00:00 2001 From: bouhaa Date: Wed, 10 May 2023 01:07:01 +0200 Subject: [PATCH 20/40] Sm2135 current updates (#2331) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/output/sm2135.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/components/output/sm2135.rst b/components/output/sm2135.rst index 8a0eca34a..120cef50b 100644 --- a/components/output/sm2135.rst +++ b/components/output/sm2135.rst @@ -62,6 +62,12 @@ Configuration variables: - **id** (*Optional*, :ref:`config-id`): The id to use for this ``sm2135`` component. Use this if you have multiple SM2135 chains connected at the same time. +- **cw_current** (*Optional*, current): The current used for the white channel. + Defaults to ``10mA``. + Can be one of ``10mA``, ``15mA``, ``20mA``, ``25mA``, ``30mA``, ``35mA``, ``40mA``, ``45mA``, ``50mA``, ``55mA``, ``60mA``. +- **rgb_current** (*Optional*, current): The current used for the RGB channel. + Defaults to ``20mA``. + Can be one of ``10mA``, ``15mA``, ``20mA``, ``25mA``, ``30mA``, ``35mA``, ``40mA``, ``45mA``. .. _sm2135-output: @@ -117,6 +123,10 @@ Configuration variables: The white LEDs are much brighter than the color LEDs. To get uniform brightness for both color and white you will need to limit the white led power. +.. warning:: + + Setting to high currents (either RGB, CW or both) could damage your bulb. + .. note:: This driver does not support enabling of both the color and the white channels From 8363d06ebe6e8bcb868c0e5ebdd4594ce2217c93 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 10 May 2023 16:37:47 +1200 Subject: [PATCH 21/40] Add docs for extended microphone config (#2899) --- components/microphone/i2s_audio.rst | 59 ++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/components/microphone/i2s_audio.rst b/components/microphone/i2s_audio.rst index 255cb515a..29640c001 100644 --- a/components/microphone/i2s_audio.rst +++ b/components/microphone/i2s_audio.rst @@ -13,15 +13,72 @@ The ``i2s_audio`` microphone platform allows you to receive audio via the the # Example configuration entry microphone: - platform: i2s_audio + id: external_mic + adc_type: external i2s_din_pin: GPIO23 + - platform: i2s_audio + id: adc_mic + adc_type: internal + adc_pin: GPIO35 + + Configuration variables: ------------------------ -- **i2s_din_pin** (**Required**, :ref:`Pin Schema `): The GPIO pin to use for the I²S DIN (Data In) signal. +- **adc_type** (**Required**, enum): + + - ``external``: Use an external ADC connected to the I²S bus. + - ``internal``: Use the internal ADC of the ESP32. Only supported on ESP32, no variant support. - All other options from :ref:`Microphone ` +External ADC +------------ + +- **i2s_din_pin** (**Required**, :ref:`Pin Schema `): The GPIO pin to use for the I²S DIN (Data In) signal. +- **pdm** (**Required**, boolean): Set this to ``true`` if your external ADC uses PDM (Pulse Density Modulation) instead of I²S. + + .. note:: + + PDM microphones are only supported on ESP32 and ESP32-S3. + +Internal ADC +------------ + + .. note:: + + Internal ADC microphones are only supported on a regular ESP32, not the variants. + +- **adc_pin** (**Required**, :ref:`Pin Schema `): The GPIO pin to use for the ADC input. + + +Known Devices +------------- + +M5Stack Atom Echo +***************** + +.. code-block:: yaml + + microphone: + - platform: i2s_audio + adc_type: external + i2s_din_pin: GPIO23 + pdm: true + +RaspiAudio Muse Luxe +******************** + +.. code-block:: yaml + + microphone: + - platform: i2s_audio + i2s_din_pin: GPIO35 + adc_type: external + pdm: false + + See also -------- From 4cad75c595cc2931dc3b3263c2ff0cdae9d4e23b Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 11 May 2023 07:18:02 +1200 Subject: [PATCH 22/40] Mark i2s_audio bclk_pin as optional (#2907) --- components/i2s_audio.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/i2s_audio.rst b/components/i2s_audio.rst index be34b74e4..c09ba5e43 100644 --- a/components/i2s_audio.rst +++ b/components/i2s_audio.rst @@ -21,7 +21,7 @@ Configuration variables: ------------------------ - **i2s_lrclk_pin** (**Required**, :ref:`Pin Schema `): The GPIO pin to use for the I²S ``LRCLK`` *(Left/Right Clock)* signal, also referred to as ``WS`` *(Word Select)* or ``FS`` *(Frame Sync)*. -- **i2s_bclk_pin** (**Required**, :ref:`Pin Schema `): The GPIO pin to use for the I²S ``BCLK`` *(Bit Clock)* signal, also referred to as ``SCK`` *(Serial Clock)*. +- **i2s_bclk_pin** (*Optional*, :ref:`Pin Schema `): The GPIO pin to use for the I²S ``BCLK`` *(Bit Clock)* signal, also referred to as ``SCK`` *(Serial Clock)*. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this I²S bus if you need multiple. See also From 639bc24398a159e373f7ee770cf71ec88fbae1ee Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 11 May 2023 09:38:21 +1200 Subject: [PATCH 23/40] Bump version to 2023.5.0b1 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index 64ab705a8..debc6ce38 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.5.0-dev +PROJECT_NUMBER = 2023.5.0b1 # 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 299496721..2351a7979 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = dev +ESPHOME_REF = 2023.5.0b1 .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 448988caa..c390be2c0 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.5.0-dev \ No newline at end of file +2023.5.0b1 \ No newline at end of file diff --git a/conf.py b/conf.py index 1280ef3c6..8bdd48ea3 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.5.0-dev" +release = "2023.5.0b1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 9b25717f5d31412e2d6b6294ba96360ebdbb4ab4 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 11 May 2023 09:56:28 +1200 Subject: [PATCH 24/40] Update changelog for 2023.5.0b1 --- _static/changelog-2023.5.0.png | Bin 0 -> 77572 bytes changelog/2023.5.0.rst | 134 +++++++++++++++++++++++++++++++++ changelog/index.rst | 2 +- 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 _static/changelog-2023.5.0.png create mode 100644 changelog/2023.5.0.rst diff --git a/_static/changelog-2023.5.0.png b/_static/changelog-2023.5.0.png new file mode 100644 index 0000000000000000000000000000000000000000..964b215e6cce391e5f84997e0bfd390cda7b8425 GIT binary patch literal 77572 zcmce;g;O2D^2fVKa5*@Hpa~M3;7;)1?(TYk;O-JMIKkcB-6as*-Q8Ud_PF={-hc4w zP1QMDwY60{+cUlWo$k-0O%qBfQm$bem|qAgpKunK(v$4 zZ~y?bzW@B75@^u~0e}?vA@W_>HSHwbM_YM5{l0U5jmHJw6ht6mI%6P#fhrjmj?Ry- zJ;M;po74Ke)sJ=7l!J9OwqcSoXcRp~-LPgUk4#2rDgN#UncS>3PNPtR2nS7!go#Oh zn1~&DF9J*G3Pw{eliA+d^|QTMaAq&#<-J$umAlE#TJ!x_^M2a+qxbl|CpvkcZ^VDw zNIR5MDT$!if7{+38FJ_UPV)uQJ%9Uey9d=={QLW#wj%tuhw<}&ngja(PZy4qdjkXn z1b+y{)Kp$w)+=^Ho`Yn*^4=KIc>T+e5Zg=qto5I6x-eoKwxW6eeAw2*6Zq4$c4QV4 z(=3BveMz$3Tu}ulcV6-@vv?(;0?`#;Yy1=6&z#K_x47oo+SEaHAkjo4lAV`Mx|4L+ zoCzOqfPx`h~3kBCa0-sr&A}jh1z-tQM>aD6>kZ>|^+KH*8g5z29DRX`VI!!cxg@WtuEy<0cayX8 zc5C!Lah=>|O9@*m+8%}6*?o;>ucGh<+97w5&(q~;$bhT0v)fsR4q=^AD?ZrsP4DOZ zvX~xS{f7SLkp=%|1A(SylXg10KNMNk&~bpvD?l^(Cd8f?R&b-L;t1d! z4+VX@!|3kTSkh#4Nuftg@F}vifA`XIc80Kzs!`Ab(7wKpP;31>oWw8@RL`CcqL-$8x=;6QI01TnX`?F!%#9kFa?0`PR}HADcvyr3 z(E2BRZSB+C4^9&U`TN%YhC&t4JKI-RCQaG2O5W5JEn;O=sla1H+PL}AQv^;1C!yXV zUD_f2?u%3I5c$h)$|1eK12%t0rN1#uh>o+E+e(=IG-IkOG-cy9a?JB?fJ;lOADx+^ zNT4s(`;*?t$HOfDMzv6~zS?~J`xm_a=PgWkcluiI)q4rwW=-*~ z{X8ML?QKE?KSH6!4o5$OMUPb@KS?Bnf;)*H1kM((XaJQNqVFUIXH;AKpILTDfgUieQl6Q z8b^s$i`PN%((A#pZa|o6{k37v?MGDPXB;VqQW;EGgvg<1uo-#pID4MUS89i)7|x?;}^U|nx8?Ti;I{T%`%~n^}A{R?ADfa$I z?puymp&hD;fJgmKTKj8mQsX9(s9a?J3y>u>{CM`aA%dPQ-xfC^-Qgn9NOWAYMbC$Y z%6mkud!XXY`%Iuhk`;xBK>xTHM$|Tb?q^pzkNm|awFh0@BkXpLMlKe@~L{Gx)N zgKO@&JrPjm!h5ux)SlLPM=-vWloYgYqyDqG;%0IFv;FyAPyMkuX(ETi3yK}32YjKBdYDsr6=;~o$Ro0TVL zrJd9#WI$VIavVK*FfH96$=cnrmuVIr;I=;e>=q<9@MF9;-L>){t~ye}OY$ypwpWD& z5Hk9fu^iJX4WR`;3)}CSHy(ePu=RYgo242Yd_4c_IP!8#U!4lmFnhL`ew|Ko#=ihN z`NQHLWyUc9bZW}m`F4WV`=tWIGRjba1;%C{#k^Zzy6$d|2OZnid4q4fS1w^fsMa5E zW=>xEpu5&O5?>zZBz@ekix9ubNH0bEBz7uV=0!o)&lnmbAUU^ zDAkM6N$%`EW<24(n+rkZu!i-pO19WELxqG^N2{0KsoeuW)jxKy4u4c#Z8)*IE1xMY zVXeh7hZjRbM#|LB>88Se+VCem`Qb31el4f%s>p9dseK}ugyB9O9{%VG06JoGDU$&f z+n*PYg`j|oW!Z3DhaVr`tT)bQukQ zl&-Ixna(~H5_o)nTG_d~T1)wL^xV*qJ^sz2ZXz=BF|J+QU9k4&sd`5>5Ad?p1W?+m zYtCs_&ZDLd)24`hYVcN6Ttfr87}o17CX1p3SS_RqW|U78I#&heLRE=6jb}jeLUHj4 zn^t?LD)6$ADqMRMeekYe=f?q*^`Pb@qkZtEJ_L?wx<~Ff;(AcoMts}NmT*GkXpdy{lZ^gc`8(5R@14W5_>-$eDOEa83%kRGEO=mV; z<7*@}hrfNVslh1sZ>JMVTkqE@Yh9_{bJf*bN5=i>O<(ns-(@Eep1><-_npO$1XR`^ zS}fv`%S*JwQ7ejC>*3C~pRHclYV(f-+Z{0Ve$JiJazNSq9dT!RhT~t3^qa%S>(4Jo z_%sHJ109E-)MnUzWC!6%C*a871HO@Z^@h?q6NMEzH1&gXC08uH{aQw$(OL;@U-V^I z1|CB`McgdSPX#E*Ix`cJn#uG!JH(06rGK0n!_0c3^vxEPf zXPd`{7dE*(CUl75)%>&e_+O4GedBJzqzQv>Moeof#hPn#j%S{!wuX#HAk%XMAB66&c36pb8Q?)8DUTrNwiwhETJ4hpEf;Dv{Wpp(pF zCV*ehA#M3L*8=Uqx2yFL{PVG+3wc}s20-xSKxe9JIE<~yz`t(}P=5<(3Dg1$Not$D z4~F`wGHrA8g6)geAxAwF6%rI+_tF7#D?4F3M$ER!t>dt6Vav5Vv0}LmtBOSs*Tid( zQpy$F#ju==p|pw0f6Co*{xH`ULX~`8X}R{e(_w>06nVc9Lh zZ_d1j9FMQc`taFeEKZh0X1Kvcae&8fHqZ*lTWd<%4kDASoJ%=E1Awg0Nen3Rk{I@v z+~(Hsz|$p`%yJ_7uS(5^+j5ryuZG1GyN`KY;b*#N`UeMrkzTG=Cr#s{CD?1=oeHBp ztOxTPEX=_N7DCLe)9}m1u=Y_a2Qd$);Iy(o;QP&>xxgY%6`75vG+~kb0snF;^!Rw9 z5^zIw31b<%_vu_(`Jc<)BMzU3-4Pw90IF$bE{bzw1*e2voL%vwk=` z;mrk%G;h}jn<>F$$E1MoY{dfP2sst{v8!3hV;!RJ<8&+`P(^7vI!D5vjw3LwGXR=3 z4oU2^>v(Ou|IN?6VMr)r9g$JNf($ejztW9q^ChTp9wZqp7I#2&$MlXM9~6|HuOc@o z;}^<jJ=pu7auwj7m?U?Eva4Q$_JroSaoBr^@mP+x_vnx99D0hgHQ$DV;V; z4Yv9RTFw!w(qVyOZtsC_bkFi85>KyEkH?j^I|4P$%30uxIHM9*s+ugYepmLnh z+V*7q^K>jvBtAqWfypl3@fc64kK!{a*J&_#a^NcV9{eS*)MUROQ$1#)wyV;yMVnR- zdtw7$*4w^#a%DC=sFlEn^Q@+df^4`k#_HOBU&p}h+e>_qEP7u(5e4PTv#cK+hi3LZeqvTG>|`m_hh`S;VdQKgo-m*F3s)r~#6qN^2Y?0TyXSwycvlT{ znTi|Z@m&jgv*xO9aomF9FYs@g7uE0bcc02;XsL?Zz@Q09Ta9tfN4MJ6C;d@dWwN%g zB=dQ(LLA&5F<4@L5mQK6D z>iIEEelfvx_SJN113kLy_p`ril7v;4gf)rPOvS&9NA3-?W~)otO$+kBFfbpmb-A#{ zcWNpBTpCN~lK&mO4p9N;?C2CKA>F+(JSq2UwW7J^F4z6wdaL>BcGPV`H2u_yzP#{o(qlu2m1|~>*s6bicME&6Qk3mLFp9U_mdUyl6Vnh-1>w>J2m!&6 z;(o+|p+eba)AMVbVqF1M6MXm;WuM8$BHR9eOBeGA6TnpL;qo%4jN`$Eq%#A<)ze%% zDdWNZ*F4euw0!KFTmmh-F<)#4xF7XzS+~P$30!szB$fPmFQC$0MZmqcB4~h`rH|||KC$6Yrf26y zBPuUoj@f|Ieuf;1Cgsg)JNfB8u5#9HLG@A9ek&Gl+H^!9Vl+{99lcF}+5Im@YQLFQ zRZ3MC7%oyZ7y7riQwVBrp4uFu&7SkQxbx+Ul2x^*&JYPjX?Ud97pm*T%J8_RNebtu zXaGu$rmSS~2#rab(4}34~-Wy+I zbj=-(fP&R}e9hHL(#gy(l^mAlQ1<>Z>ad7T@=R{_m{QG1&3d{z?@LDa*-E%8IiXrV zX%`y@g+FiLcinE#IlGUU3mf{x>tRQ3G)2Wdj=v;cE2R45sKkF84e%w7(n$mHv>2B5 zMA%D>CD;Q;J0qh*(eY zggpC0Jx+4*VBzv|57Qc(OXH?hWoqCD`5Fes?{J^(%<@rv(WIX5qE_YlWh(1kG8eVf zFFeNtUL5xJe6$YVKZe5FX%)uPiHN0DAn5M0hU>-e{L(hBJT)7Y{qFv9G5wd)7j$q{CRMOdP9hZDnV0V{U zJHwlXrc-Hk_=6F?zGhtmC4C~n%nzwuy*cYypVJ6Iz&fj*@mAD)`th|iT%a@IT?= z(Y`aA7;E~h9U+7mQ^O3)znMEr%7}n2&l~gY#N_;3n%H{C0T&8nCM4GE8*1~*gPF|Q zkKnqK&29FK`(*)1Rjx5M>N&i!9w`c_pP#FrZ;XscQj`yilE7;UEjgy^As+V`_07_{w;)p&=*`+iT>CfYu}dl`ZS1dqRE4rO#L z_R_FsTb^%o67deq&0XIDf-t;o>_qZ6z4?NTUF(E zxk(N@x^&)TCb2!9Mp7rvg9lx78l0?V`nt#hB@ zOB&la$?pN5pKpGufH35tcUqyyNbO6cn{U2401rf9&TYTLKwO^i)D7zFo4~9E18XIpEMzJ#JcLzcNdM)O-a}mUjdU!^9qm$NG z^kSJt_$=T3*`>FM0vOG->X=x}j2^qf>1Mw7>ZB^YJy8HQ~bezPPHaHtc@wO$j+XFu>}{ zxrtCXb%G!ic%3UJe*orwC%icxxyoYSHyM?a!Bc6dp5pXBN#g_Lb36NT_yPuhX&^ot z0WJ>7;~AW7KI(H_3Vk(&o}vd&xVa zTnlr`I$k#yKE&nqC=4vyvPsx&BuZB!P5)k?J_uCUldj&Wm2KuqiWxyF4H={T;aoaF$}N0 z^aM`|qf+qYAx2UeWnTP z-=D1PttdPPAku8cGl55jp3#Sj4~kxm65LjsklQ_1nlP`wjTOD%MiYOUHF?s4ohTa{ zi|DAA`-bXx%+9a=^Zofm&CANnSJJjgj<=QI@7N6{Y!*_S`Dn$N&g`#aUEsA>x|)uP zbyBOZ?&}BN-)Wi8buCmTMesShol$>2us>$kvwWL|2Y@KZy-O0iQC6>_Pu*vi2>hIcQ={m3t9*Qt@jR|xb#vy$ z$MWJ}`t0y*X(atcTIIp3s->w;e0z#`v^rx!>p2x>_H-@Dx}2tXel79UTxX zHfGD_ZYMLHtO?wKN8y;|+TM7WN!Lsc5>0goGr{-(VcP`h64Z(EEI0GpK6iH>|f-{X zyr{3I8wKpk?(k6Ys~+Vq*FwD0S%#{zh6D%8w9g`oeCJvq71rBdwt~U(zo5E8`GyDd zUkhT_cUL~eIig5ENy%~gvKxET?xL~WL%n;PrP08%(Ni89<$v-=ybUwQvyCd=p7Aj3 z%ns92#agi|%_T5C+^Qb0Ig5MA!+C++TwV!xt~l_(Sn#l=M~cs5z=X1f4UEiiOFc`y zH%_DHvt{>p#<#k-yZK?)xs+yS8)FD2zc|6(PtG8nBA zTR5jL;~MCCT@~6sJMXtTNzY+9NjY!e$0O+oiA_BW{iwT~pT20dbl!hyt0A&V+CT9& zQL^?mKqdTGeA(dQLLx90L3ED3V^D9f-RSZv{X@6g54X_$(1`KW`^w$M(PlWM&xO#E z`F)*uWuY{d^C#_ghH=8}GYxENGm$=KkI!ex6WK2Nyc7BG_dIU2$$Iuz#Dk`h&S+X6 zy)dwYa*~>cn(Y+Kh6DUvdViM8xTe7D*+1Q}`2ed0K)3=6&2}TI}PD*SA?Ri5vZ#SA~mNlq~Gt7ohuI6J52zBY3Yi zT3IKgb?m$=Ny~Bjk6mP6z4)H1DkB2)i#<EwWWGx+I(1eQ+>O~^AsA%#-G+`^^|hytd(3j?Qw0s1?IuKz`0*| z(U`rt9zd?!mc_R9DDR;=P|RFZsIsSQ$ekBC6ozU6fUsCC zDtf7k7i)h_OizXkZSC|(50WE7jNU8c-lHnwnjAL2;NFGA4lI1j$R(bj46gW#t&e6^ z;jekhofB6JsTEH9a0B=BrKhg;yN<4XCzq$5QuB0g*^TS80gt?=$N;dx zf6qzf%;Pz$m5bU*fb|U2aeLwl>c3Jg{l6>#4*)n{Jx3O|cuueRCrKVZR_##f(YVrq z{lVPirV7-oKLKC`$3u|dxbE@pTHoj#nRPc{G{igO4IHV0lXTl7)l6$jH@UV^RhF44 zDY%+l<>>xR2{40`_&S;)$8|-OUTBVjq^bI*nqx!1{T%jhIKO5b&@UR5^y%(@r zCT^puOLgb0!4vW2$A#P$);!Pe|7G~C-p4n%Nrcl=SpUL~-@TytdAxvrJsPH?;wldY zg^-0fdF(?7*?R@jz4>AsH&m8!js*iU+9zu-;m9AN+u_gvTlTyEM?5=ChUQ=BbpE zy#1iHZN?Uf#kjr$pUY0kqk-0y8g)`xbe^(N#^1W`IeD}%dp69XYUqN}WbxLagqGz* zu&(J5qNQ;%<>UI7WO^`jK}+8AFP*Qw*IkpsnGti7yM&E4@2W&?XgvXKJCT1q#GDWA zb*HeNm(I)l^j7TWh0K$#Ys1EP;za^izbIBIKVY8J@7DU=ni*b_n6j?E?vcI3RsTff zrKvt=L!9y4D!9+~oce2W{Lytm%aKwdBE1xEvXBwx<_8xv4zY(+D;hcWWbs?MhpnVh zETrfzCy(5T#e>RKVy!%B1fsYH-$wdNy+6=r&=HIc+E?DJ{2*7gMS|c+y)D{-ieLwp zw$ZX&`|<1M){?TN_%@d{6wW^!M=_X6?NYTD`HZQ9V9%!42o5Fo)-NWz2OT6@G{~8w zZ%w~+I_eM7+vL)Zyj-3IgKb1i!SS)mb&9`jmFuNwL8yCi?*9dqW+*%L#pDK;CN+QQ;g;2 zYp9R1;=Nqw`rLGGv-m*+=?sevyCtG2&v_1Gs#UD-5|L#6x^H&Q&Ed@t ze4DZv$7hUEtWCh5abIO(VGG6$`VP zp>!WXdIr~2bkL~J+8-^utQeWUUe|bT>&Zfb_=F?SZ@bOFP`Fo;ZBfO2gUFp9j~5eP z1R>dT6r>i{mbeT9A#s>*uxxuq-Foru@c)FJ5EDdGoG2 zMjo13>(i2Q4mL?QZ}*1rW;6bW>zwWF)V#P}3mV3U@7-kKrY7LY?EYc18a5gL?nUJrI_C?)=rff0~E!lP`uzR;?b#Jva# zcGy-Hs@Q86V3inTqpfWiK<6{1^?7{E31F))v>IObdd=tS<%6f8kb?2a&Zfw^+Zd=( z{F;g%Sg_-1<%*_urf#sd{KQ{c%BP{Ccwv1RD&7`_**g6`;h$z`0K!f(+KU3`-br)+ zwoJ`Yn??g;P^;&*zTqc!hT~Mk>FNcG^vP6wqIoqR<`Oi{haU`Qx!d1}@Ay%{V9V~K zog4VV(}BJJ1lESUIf6Kq3r%m$FVZtu5rUm-tsV&c9_HrszQ@5~oJUCzB4=+us**2Cu{(+eO!V2(ds=GRY$s;_^8{)==0rJX1|&}rW(O5W7^XA7@65)!2xqsWN+deZVENrw|W_}e4VW=$bwZWxcsx) zwahH^6z^(CBp*0AINs$fEwAr|o+M;Rl#yg93keICU3{+`Xrx{L6={AKtc}?Z_szmA zIF|Fa{{*fB{Krq8i|_Ryg7-&ph#l5a3(xyG{@>p3XEW8{v&x!Nuh#kY8sm)Odo1A2 zf1Ug5e8hXZzn3xZ;Wght1!!oQLN8fBEyWZEe-D1I17W{e+B)IAXAWwMFPb-LT^@s% zz6+&@g(>l_f9iN@_ zIba&vB0qKij`^bu5hH?|@c!(PqJ=uiT&hMee5Vfh3S8>0F+QZdVHK)Dt=m}fJ*|sJ zed6OdT-gpF^9DfG>_+}=dwv*4l4~XA_Rzi-dffu&seK%=KF{Z^bLbW>*4ks&TH}0L zO9yo)PmP&`dM`s+=fAC}A2lX1(13-7QMYE=kjA+^K2eW%jcP8S`XDz**}+T{r*t)j zs}~phX)5x)?2OlJu^PsCicr5Lo!~>wz`qa(^`6D_+RIet#n$+T z9yQ=4rnbU$xi;S@ErNMq;q+|#>46yjoqU)@@sP20b&R+x`_=2ae0-0(QnoUYNYsEKd8`qDBnv4eR5NrLT2wya`jwy68^ihlfto%A3m-PE({QeS>49XE>zlzEFf zuQ@FK>J{fruB}VsI!A7GXw2YJ6?l3T4M;tQS_fNpOziMLX^nd;bm~7K>QG(>b!Q=+ z_4v%EDsJWW!cD`8lzm-56|L-0v-k;cYVt3)KGn8=4j0FYyX_gcl(IWel7oy02IlW| zYJlpl%jKjaNdz)gu#(b1ShCl1*QmFYJa7{tg|%@I5q)1dPF?Xwzpyh1)-9l0feI4)5p?ic9eOr>JT*N>8*$J z{uxvxgQ-HiY^eg^Y?s8CQM*8qDooh8d1&S^B{m)*LeE+=*p^xluw;&Jqc2_C2d0sQ zcbT1A9o68f7zcA?UTG)`EpOJqtUA#6ih64co(&qyuTA8=PGPlPF5$Le><7AI2=?d;9L(rCC^+sM zoKSxaeRjS;e()$KvN3f?ee@J=1U7hmT;)U?$-XTetg|h@V*$ZVot33KhU}4RmIyp$ zL^i4psm-~YX#$REw%k|tAIzBWBNYbR)*3#gCd6s9*R~PCyqo^(*jt~=xAG{Nb=9^V z^D{yxe1O4Avj#pksazrgned52q-<3E@(F^41~63+HMs4?H=i}*I4j(p&1c)~uW4$H zo~>N({=?kbx2Sqg>Xr;0!DjWwHtyhfdd%#!+v#|LO7%5>6Gr{R=$e8Cb(@=UphRs@ur$}N(p7UpT*zuCEwSKFtv0D*6`X8MN zqoy?4LX_~>>)cty;F-7Ky75gv4(aY(f{<&;E?G`lg}A)5({6HviwRCOA1yi}OeZ$} zSsv2z5Oezb?fTyzMJ*z?%Rrk>A3l~Ig~y)lR=LPq6l>|T%Jrddf~Qu|J3j1lh?9%? z6j~wh-P|LCr8K3-M~n>`ttV|a)($xl_k$Fa1$h-=sn2)3bJ0G@FWnEE4*@4=zxUC#U0|03+v1G!c>hEX_UVSEfD_UQ2Z>AXKx z=*_|XgvB;}6H23l%JY)n;SX7Q}KkdR!{2KX?-U2HY;+-SwNN4a$<2@`U4WcL#&|O+<{i&&?Ak|5;0R#$ z+E(U3{@u*;`@i?ts|e!JQCa5ZbyTQQ@qQ>)N%;MTD{fhKc;);5;B$xhDbKpR3v}Um z)XhXb0Y?6S$m7Pf?*voErnvuiN7Dx-oZbBs^)62j;a$dz)jI<$5!+#(tux6VpILCg zYYlDx>o3re?Yg}E`kZp|%=XChGjX`~>7MC-u=`4VAftA}jNO{&Y`4)nIE$&oVf~^C zF?Jb`YnF<^diXC7{~sXU;s0w&zOV1k(+-Nje|z}N1qmS=Q5Ii({w2it^gmX6x7*8Q z=_}_I$;8%rz194PK+OMf{HWW_`x&Y7PlLGLLw!CFaedpNc#z=gV_!eDv1? zBdzC}yZ_q+U@u(+VfypGF*nM|vPdbg2urbhoJjXWfc2B$4TTm0kzvb_LHXJTWRZeF zpeER!g(b2t5hI95LOG<0tU&-Z2VB?(2!zBBL>`($iU9uJ^jf+KTVbz8kfrW*bHn!+aJL#34 z9%OFfh<@nnLq-S?>c1f%*MBp@URP>c8(cVhvh2mqNy+eT+fAgdz~NIi^qiRKG8NG=lVbVxbn#YY_NLicUh z?Ccf`@Y{?&;-PEiYcu8W@7@d>j9eZq@beAGBws2!s4<6hlPUmG9VAbw zr8clkYSXA)$V#q*N?pGYQ=8I!7jHn67Q0W6io06o3Ho+qBhdiE+g9 zJu6N3{SEH07hC(Q+{{B*6%jEKDfoTbrSzS8fQAzxM*ycNfP{Djl>~1CuD30fF0=pX zc{w>H3T3NaIw;RCRB?eBwsMaW4^Z{OjpLz-MwpB^A!f!jBHc_m)NB0wZ&s^nt=2?q z78t`+LxLda?(N6Sx5vy{vm*>p736hfh4r+)XlAmeW}{)YRu z#zp)r?m6Ho6f`XMm<bRDYBA|8)Dx_=YxXd(aD zs$3_xOfJ!j0s=~P@cZMcI}rh+3rSa#zpf7>M$YxLEm%gSbvgM>m-x^MCE2Lg^8P0>``%Fi4HU1_bU}< z7RGmM5V<0XLo@Q*-5U|)0@>wm>-BVT@}5!tzWGUKg5c!&==_xuiS#5alBE=vmDS0M zFJpGZ^!Ge+WLsQ6lk4pvhhWtS!`NRT$9E&e{v+MF;3R^3wU9 zEM4%Y+a6bwfiJ(Mc+d7sYLbin_2zIy?6KaxG27!ze+E*g<;L^48ARP9F z2lL%l*rFo#=CHm3wZuYyx1II2TfiN6|NgTdj^*nCq3PtBCoe!6hJpaZhf@E>bybi6 zt)S!|xU?KG>OS6P&s{0O{IRd_r+1Is8eSZZ)1lvoz+!h#r98H9{i3a#oSa1JO)4ne zAElOM=HQh0G3g5^kfS0XP(YKi(#)-&gEFRIrW->p?r#??Oqr%o-I7i*fT{I$pSzVs zs6r!sAb`3`GJkQ!ySy>P;GjddFjhrg8AO)T&D7az*}60i_^-N8%s=3gf$`(MGyEJQ5jcY*9G0M9c>uht(J+ux;$M`!^peXScuu zURL)p^hFqCLc4kD(c340_2#!H5b%m91Y~y*xBhpJVdGa;r+edv0+II#Dulp1H3jzP zmB_>IT4B44&eU6R$m=(C8k}g@ui5HR@3`!gb#a-btCc7el+CYMhw^e7HQpFbGqGIt zoiH`f)UeD}7>859{vasz0+Ei21IP88yWBi(orb_|Vuj^Y=(Nr)&aTc!Yb|qA2V&D9 z11K^uq5k41^J8a+$GZ@BY@~+9aVXdiU;mV@s$mGjhyn;0L7|}+Trm#mU^%Ph-Ma?o z;O`5cwQEwAmw0-5g#)my#Y0e`+HYQ;jPU5u=8DSaoMC6uxG-X3+&>V0!NdRo7*Gn> zIU*Kw0|KWE2(Svkl%&8{*ErHZ>M!MQaRc5{?m{0!solKWYVXM}X}KS^UPZU!+yY@0 ze7k*ny0dz^sYL_x{yVu7x_fhtX{ zoSX9=49|Bg4jeGFkz_tFB@aQHr%t$(obI|K*7d_Ud6Y0<*c|+$%~MmQrn6FnmwC7r z*g~(YfM&~xjBsjl5C$0%MshcFs|?cmwmp^tHez=Ehg*a%98H7Uhet;(rsqyK=$vWb zl!C5ZTto$GZ2to&XfN533DPis#UV`C?~=FxufGJy9<50Ma z26Ynr%*S1vV-<1RH##SIHM|C$UDI*2)&U)*Nd)XFQp=37EL%1gM~Bs@*N$d~-b&qL zi^r1k_LpzM)9N5@ZkuaI$gZAT=!9rX)$!GC!{hZnqps)Md%}iVUX915R*2Oa^p858 zSb>y08-v1C#Gg6_`b#LnBz7dVAUPTIB?v^2^*b~)zQ7M;!3BsaAWTke2_B+KMR{2; zNJBQ}JuG6#M5h&l$%piW6tD?W^!A$5{#-oX`M%#0(eH^>FvXDyxnF)AQoh)~BD0XM1oELH(3A%$ z;*QPn$tDM{8O~0>3#xCQUl~t_E(bbw50VLqhvCRXU_ej+R13ZK4NDLyf(SN-C`Js( zpIU^ORY))mZN({{#Zfi6eml$<<|zvSq7~6pdO~zX@!a zX-D~n82d7*#DH0Nf26(Q3Eb<ziwI^ zS!t(zCn$p@pK?h$3gGyj5&DdAff2gMp47Wej0*ukTjAw+qFFHrf{4E6pw*}b*}-#k_H(YE)xs!Z?%iL*%0e#n z_pBH-Qs;8KO%qdm|B|!iqu^2dDVFeJi^0$_VPkQxPp{waE>@n*8_MbC4K%!eB;bGF z1*i&QhzzazSu4zXeU>Ukc8fl8Wc35 zS*8Da!c3W`-JEWNBMGT^Put%|{e0CW^R*j2!{<_T5t0c84^||b z$8|3=l>B?>|3lMPM>YL_|Bs%a(n!jrL6Gjok5S1QRGTDTy=l=1hk6TK~1JpN*buN6(ifIqwL zldc3d#iU7MBa)eQ7Ms2GQ!#X8<$_%-j|ia2(XVHnX$mUZ7GU$E6z>

    JYwv;`R=|Vt0t`wcW3l0F8(_PI?j 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 DfIR6f literal 0 HcmV?d00001 diff --git a/changelog/2023.5.0.rst b/changelog/2023.5.0.rst new file mode 100644 index 000000000..2cb659ce7 --- /dev/null +++ b/changelog/2023.5.0.rst @@ -0,0 +1,134 @@ +ESPHome 2023.5.0 - 17th May 2023 +================================ + +.. seo:: + :description: Changelog for ESPHome 2023.5.0. + :image: /_static/changelog-2023.5.0.png + :author: Jesse Hills + :author_twitter: @jesserockz + +.. imgtable:: + :columns: 4 + + Speaker Core, components/speaker/index, speaker.svg + I2S Speaker, components/speaker/i2s_audio, i2s_audio.svg + MLX90614, components/sensor/mlx90614, mlx90614.jpg + MAX6956 I/O expander - I²C Bus, components/max6956, max6956.jpg + PCA6416A I/O Expander, components/pca6416a, pca6416a.svg + HYT271, components/sensor/hyt271, hyt271.jpg + GP8403, components/output/gp8403, gp8403.svg + ESP32 RMT LED Strip, components/light/esp32_rmt_led_strip, color_lens.svg + + +Speakers!!! +----------- + +Following on from last months release adding :doc:`microphones `, +this release adds :doc:`speaker ` support! + +These new changes allows the :doc:`/components/voice_assistant` to request the raw audio +stream response from Home Assistant to playback without using a full :doc:`/components/media_player/index`. +This has much lower latency and allows for a much more responsive voice assistant experience. + + +More Microphones +---------------- + +This release also adds a bit more configuration for the i2s_audio microphone components. +There is a breaking-change that requires new configuration fields to be added in YAML. +See the :doc:`microphone documentation ` for the configuration details, +but below is a small example for the M5Stack Atom Echo. + +.. code-block:: yaml + + # Old + microphone: + platform: i2s_audio + i2s_din_pin: GPIO23 + id: my_microphone + + # New + microphone: + platform: i2s_audio + i2s_din_pin: GPIO23 + adc_type: external + pdm: false + + +Full list of changes +-------------------- + +New Components +^^^^^^^^^^^^^^ + +- Add mlx90614 sensors :esphomepr:`3749` by :ghuser:`jesserockz` (new-integration) +- Add PCA6416A Support :esphomepr:`4681` by :ghuser:`Mat931` (new-integration) +- Add support for hyt271 :esphomepr:`4282` by :ghuser:`Philippe12` (new-integration) +- Max6956 support added :esphomepr:`3764` by :ghuser:`looping40` (new-integration) +- Speaker support :esphomepr:`4743` by :ghuser:`jesserockz` (new-integration) +- Add gp8403 output component :esphomepr:`4495` by :ghuser:`jesserockz` (new-integration) +- Create esp32 rmt addressable light driver :esphomepr:`4708` by :ghuser:`jesserockz` (new-integration) +- Add host target platform :esphomepr:`4783` by :ghuser:`jesserockz` (new-integration) + +Breaking Changes +^^^^^^^^^^^^^^^^ + +- Remove climate legacy away flags :esphomepr:`4744` by :ghuser:`jesserockz` (breaking-change) +- Revert "Template sensors always publish on update interval (#2224)" :esphomepr:`4774` by :ghuser:`nuttytree` (breaking-change) + +All changes +^^^^^^^^^^^ + +- Only allow 5 jobs from each CI run to be in parallel :esphomepr:`4682` by :ghuser:`jesserockz` +- Add Bayesian type for binary_sensor_map component :esphomepr:`4640` by :ghuser:`kahrendt` +- Bump aioesphomeapi from 13.5.1 to 13.7.0 :esphomepr:`4676` by :ghuser:`dependabot[bot]` +- Bump peter-evans/create-pull-request from 4 to 5 :esphomepr:`4661` by :ghuser:`dependabot[bot]` +- Bump docker/build-push-action from 3 to 4 :esphomepr:`4367` by :ghuser:`dependabot[bot]` +- Keep Device Class in Flash. :esphomepr:`4639` by :ghuser:`Fabian-Schmidt` +- Add support for passive WiFi scanning :esphomepr:`4666` by :ghuser:`BellaCoola` +- Initial attempt at supporting ESP-IDF 5.0.0 :esphomepr:`4364` by :ghuser:`kbx81` +- Get Sunrise & Sunset for a Specific Date :esphomepr:`4712` by :ghuser:`RebbePod` +- Add `supports_stop` trait to Cover :esphomepr:`3897` by :ghuser:`amomchilov` +- Bump aioesphomeapi from 13.7.0 to 13.7.1 :esphomepr:`4725` by :ghuser:`dependabot[bot]` +- Add on_tag_removed trigger for RC522 :esphomepr:`4742` by :ghuser:`kbx81` +- Fix 'blutooth' typo in esp32_ble component :esphomepr:`4738` by :ghuser:`RoboMagus` +- Bump pylint from 2.17.2 to 2.17.3 :esphomepr:`4740` by :ghuser:`dependabot[bot]` +- Bump tornado from 6.2 to 6.3.1 :esphomepr:`4741` by :ghuser:`dependabot[bot]` +- Bump pytest from 7.3.0 to 7.3.1 :esphomepr:`4686` by :ghuser:`dependabot[bot]` +- Expand the platformio dep installer to also install platforms and tools :esphomepr:`4716` by :ghuser:`jesserockz` +- Remove climate legacy away flags :esphomepr:`4744` by :ghuser:`jesserockz` (breaking-change) +- Add mlx90614 sensors :esphomepr:`3749` by :ghuser:`jesserockz` (new-integration) +- Move am43 sensor code and remove auto load on cover :esphomepr:`4631` by :ghuser:`jesserockz` +- Fix assumed_state switch webserver :esphomepr:`4259` by :ghuser:`RoboMagus` +- Bump aioesphomeapi from 13.7.1 to 13.7.2 :esphomepr:`4753` by :ghuser:`dependabot[bot]` +- Bump git version in Dockerfile :esphomepr:`4763` by :ghuser:`jesserockz` +- Power down PN532 before deep sleep :esphomepr:`4707` by :ghuser:`tracestep` +- Switch ESPAsyncTCP-esphome to esphome fork :esphomepr:`4764` by :ghuser:`jesserockz` +- Bump pyupgrade from 3.3.1 to 3.3.2 :esphomepr:`4751` by :ghuser:`dependabot[bot]` +- Only pre-install libraries in docker images :esphomepr:`4766` by :ghuser:`jesserockz` +- Add PCA6416A Support :esphomepr:`4681` by :ghuser:`Mat931` (new-integration) +- play_folder bugfix and addition of play_mp3 :esphomepr:`4758` by :ghuser:`llluis` +- RF Codec for Drayton Digistat heating controller :esphomepr:`4494` by :ghuser:`marshn` +- Add support for hyt271 :esphomepr:`4282` by :ghuser:`Philippe12` (new-integration) +- Add support for BLE passkey authentication :esphomepr:`4258` by :ghuser:`Mat931` +- Add support for V2 of the waveshare 5.83in e-paper display. :esphomepr:`3660` by :ghuser:`cooki35` +- Max6956 support added :esphomepr:`3764` by :ghuser:`looping40` (new-integration) +- Bump zeroconf from 0.56.0 to 0.60.0 :esphomepr:`4767` by :ghuser:`dependabot[bot]` +- Revert "Template sensors always publish on update interval (#2224)" :esphomepr:`4774` by :ghuser:`nuttytree` (breaking-change) +- update schema gen to 2023.4.0 :esphomepr:`4772` by :ghuser:`glmnet` +- Speaker support :esphomepr:`4743` by :ghuser:`jesserockz` (new-integration) +- Add gp8403 output component :esphomepr:`4495` by :ghuser:`jesserockz` (new-integration) +- Create esp32 rmt addressable light driver :esphomepr:`4708` by :ghuser:`jesserockz` (new-integration) +- Bump ESP32-audioI2s to 2.0.7 :esphomepr:`4796` by :ghuser:`jesserockz` +- SM2135 Add optional current configuration, avoid communication failures. :esphomepr:`3850` by :ghuser:`BoukeHaarsma23` +- Fix ezo parsing :esphomepr:`4792` by :ghuser:`alfredopironti` +- [ili9xxx] Improve fill operation performance :esphomepr:`4702` by :ghuser:`Fabian-Schmidt` +- Add host target platform :esphomepr:`4783` by :ghuser:`jesserockz` (new-integration) +- Add more envs to root platformio :esphomepr:`4799` by :ghuser:`jesserockz` +- Keep Unit of Measurement in Flash. :esphomepr:`4719` by :ghuser:`Fabian-Schmidt` +- [display] Small display print performance improvement :esphomepr:`4788` by :ghuser:`Fabian-Schmidt` +- Fixed calculation of start and end dhcp range :esphomepr:`4785` by :ghuser:`HeMan` +- Add more configuration for microphones - i2s/pdm/adc :esphomepr:`4775` by :ghuser:`jesserockz` +- Wrap VA code :esphomepr:`4800` by :ghuser:`jesserockz` +- Make i2s_audio bclk_pin optional :esphomepr:`4801` by :ghuser:`jesserockz` +- Validate project details are set for dashboard_import :esphomepr:`4802` by :ghuser:`jesserockz` diff --git a/changelog/index.rst b/changelog/index.rst index 432d05582..a24a3a36c 100644 --- a/changelog/index.rst +++ b/changelog/index.rst @@ -2,7 +2,7 @@ Changelog ========= .. redirect:: - :url: /changelog/2023.4.0.html + :url: /changelog/2023.5.0.html .. toctree:: :glob: From b50028e517e5c13e6be5797b198d0c27de709533 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 11 May 2023 09:56:58 +1200 Subject: [PATCH 25/40] Update supporters for 2023.5.0b1 --- guides/supporters.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 4a51a18a1..b8f552fb6 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -236,6 +236,7 @@ Contributors - `Cossid (@Cossid) `__ - `Cougar (@Cougar) `__ - `Connor Prussin (@cprussin) `__ +- `cptquad (@cptquad) `__ - `Corey Rice (@crice009) `__ - `cryptelli (@cryptelli) `__ - `Christian Schwarzgruber (@cslux) `__ @@ -449,6 +450,7 @@ Contributors - `Gonzalo Paniagua Javier (@gonzalop) `__ - `gordon-zhao (@gordon-zhao) `__ - `Gustavo Ambrozio (@gpambrozio) `__ +- `Graham Brown (@grahambrown11) `__ - `Granville Barker (@granvillebarker) `__ - `Antoine GRÉA (@grea09) `__ - `Greg Arnold (@GregJArnold) `__ @@ -799,6 +801,7 @@ Contributors - `Mynasru (@Mynasru) `__ - `Mikhail Zakharov (@mzakharo) `__ - `Kevin Uhlir (@n0bel) `__ +- `N6RDV (@N6RDV) `__ - `Erik Näsström (@Naesstrom) `__ - `H. Árkosi Róbert (@nagyrobi) `__ - `Viktor Nagy (@nagyv) `__ @@ -1145,9 +1148,10 @@ Contributors - `Geek_cat (@zhzhzhy) `__ - `I. Tomita (@ziceva) `__ - `Michael Labuschke (@zigman79) `__ +- `Stefan Goethals (@zipkid) `__ - `zivillian (@zivillian) `__ - `Loïc (@zoic21) `__ - `Zack Barett (@zsarnett) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated May 4, 2023.* +*This page was last updated May 11, 2023.* From b2baf8b5b905f217b3e5b42fa086a53d20f423f0 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 12 May 2023 10:33:01 +1200 Subject: [PATCH 26/40] Bump version to 2023.5.0b2 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index debc6ce38..141e2cb65 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.5.0b1 +PROJECT_NUMBER = 2023.5.0b2 # 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 2351a7979..3f8d83e29 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.5.0b1 +ESPHOME_REF = 2023.5.0b2 .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 c390be2c0..4dee02f1f 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.5.0b1 \ No newline at end of file +2023.5.0b2 \ No newline at end of file diff --git a/conf.py b/conf.py index 8bdd48ea3..f3fb77150 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.5.0b1" +release = "2023.5.0b2" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 783158a3d783730112e6197e572ef340831394a2 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 12 May 2023 10:37:31 +1200 Subject: [PATCH 27/40] Update changelog for 2023.5.0b2 --- changelog/2023.5.0.rst | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/changelog/2023.5.0.rst b/changelog/2023.5.0.rst index 2cb659ce7..5cf4442b1 100644 --- a/changelog/2023.5.0.rst +++ b/changelog/2023.5.0.rst @@ -76,6 +76,13 @@ Breaking Changes - Remove climate legacy away flags :esphomepr:`4744` by :ghuser:`jesserockz` (breaking-change) - Revert "Template sensors always publish on update interval (#2224)" :esphomepr:`4774` by :ghuser:`nuttytree` (breaking-change) +Beta Changes +^^^^^^^^^^^^ + +- Fixed access point for ESP32 IDF platform :esphomepr:`4784` by :ghuser:`HeMan` +- Remove AUTO_LOAD from apds9960 :esphomepr:`4746` by :ghuser:`jesserockz` +- Supposed to fix #4069, by changing the default value to 0s (timeunit … :esphomepr:`4806` by :ghuser:`Alex1602` + All changes ^^^^^^^^^^^ @@ -132,3 +139,43 @@ All changes - Wrap VA code :esphomepr:`4800` by :ghuser:`jesserockz` - Make i2s_audio bclk_pin optional :esphomepr:`4801` by :ghuser:`jesserockz` - Validate project details are set for dashboard_import :esphomepr:`4802` by :ghuser:`jesserockz` +- Fixed access point for ESP32 IDF platform :esphomepr:`4784` by :ghuser:`HeMan` +- Remove AUTO_LOAD from apds9960 :esphomepr:`4746` by :ghuser:`jesserockz` +- Supposed to fix #4069, by changing the default value to 0s (timeunit … :esphomepr:`4806` by :ghuser:`Alex1602` + +Past Changelogs +--------------- + +- :doc:`2023.4.0` +- :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` From 67f49d6a1a478c0c82936a031b2674a1de6fff38 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 12 May 2023 10:38:01 +1200 Subject: [PATCH 28/40] Update supporters for 2023.5.0b2 --- guides/supporters.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index b8f552fb6..7a7964165 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -57,6 +57,7 @@ Contributors - `Albin Kauffmann (@albinou) `__ - `Andre Lengwenus (@alengwenus) `__ - `Alex (@alex-richards) `__ +- `Alex Dekker (@Alex1602) `__ - `Alexander Leisentritt (@Alex9779) `__ - `Alex Barcelo (@alexbarcelo) `__ - `AlexCPU (@AlexCPU) `__ @@ -352,6 +353,7 @@ Contributors - `Erwin Kooi (@egeltje) `__ - `Eike (@ei-ke) `__ - `Elazar Leibovich (@elazarl) `__ +- `Eli (@eli-xciv) `__ - `Eli Yu (@elizhyu) `__ - `Elkropac (@Elkropac) `__ - `Elliot Wood (@elliot-wood) `__ @@ -632,7 +634,6 @@ Contributors - `Kelvie Wong (@kelvie) `__ - `Kenny Stier (@KennyStier) `__ - `kernelpanic85 (@kernelpanic85) `__ -- `Kevin O'Rourke (@kevinior) `__ - `kevlar10 (@kevlar10) `__ - `kfulko (@kfulko) `__ - `Kai Gerken (@KG3RK3N) `__ @@ -665,6 +666,7 @@ Contributors - `Limor "Ladyada" Fried (@ladyada) `__ - `Luca Adrian L (@lal12) `__ - `Fredrik Lindqvist (@Landrash) `__ +- `lanik (@lanik) `__ - `Lawrie George (@lawriege) `__ - `Laszlo Gazdag (@lazlyhu) `__ - `Ludovic BOUÉ (@lboue) `__ @@ -878,7 +880,6 @@ Contributors - `pedrobsm (@pedrobsm) `__ - `per1234 (@per1234) `__ - `David (@perldj) `__ -- `Peter Valkov (@peter-valkov) `__ - `Peter Galantha (@peterg79) `__ - `Peter Halicky (@peterhalicky) `__ - `Philippe Delodder (@phdelodder) `__ @@ -1154,4 +1155,4 @@ Contributors - `Zack Barett (@zsarnett) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated May 11, 2023.* +*This page was last updated May 12, 2023.* From db091b044327630f03fecf2b1c1f6ad611d4c1b9 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 15 May 2023 11:37:56 +1200 Subject: [PATCH 29/40] Bump version to 2023.5.0b3 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index 141e2cb65..65cc59e82 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.5.0b2 +PROJECT_NUMBER = 2023.5.0b3 # 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 3f8d83e29..539d9dbf2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.5.0b2 +ESPHOME_REF = 2023.5.0b3 .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 4dee02f1f..efa5370c5 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.5.0b2 \ No newline at end of file +2023.5.0b3 \ No newline at end of file diff --git a/conf.py b/conf.py index f3fb77150..098497656 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.5.0b2" +release = "2023.5.0b3" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 40bcafcc97f5a09d4b82366f8a39309eacd97748 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 15 May 2023 11:38:35 +1200 Subject: [PATCH 30/40] Update changelog for 2023.5.0b3 --- changelog/2023.5.0.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/changelog/2023.5.0.rst b/changelog/2023.5.0.rst index 5cf4442b1..e620730b7 100644 --- a/changelog/2023.5.0.rst +++ b/changelog/2023.5.0.rst @@ -82,6 +82,10 @@ Beta Changes - Fixed access point for ESP32 IDF platform :esphomepr:`4784` by :ghuser:`HeMan` - Remove AUTO_LOAD from apds9960 :esphomepr:`4746` by :ghuser:`jesserockz` - Supposed to fix #4069, by changing the default value to 0s (timeunit … :esphomepr:`4806` by :ghuser:`Alex1602` +- Wording :esphomepr:`4805` by :ghuser:`fgsch` +- Tuya: Prevent loop when setting colors on case-sensitive dps :esphomepr:`4809` by :ghuser:`richardhopton` +- Fix i2s media player volume control :esphomepr:`4813` by :ghuser:`jesserockz` +- Dontr try stop if not actually started :esphomepr:`4814` by :ghuser:`jesserockz` All changes ^^^^^^^^^^^ @@ -142,6 +146,10 @@ All changes - Fixed access point for ESP32 IDF platform :esphomepr:`4784` by :ghuser:`HeMan` - Remove AUTO_LOAD from apds9960 :esphomepr:`4746` by :ghuser:`jesserockz` - Supposed to fix #4069, by changing the default value to 0s (timeunit … :esphomepr:`4806` by :ghuser:`Alex1602` +- Wording :esphomepr:`4805` by :ghuser:`fgsch` +- Tuya: Prevent loop when setting colors on case-sensitive dps :esphomepr:`4809` by :ghuser:`richardhopton` +- Fix i2s media player volume control :esphomepr:`4813` by :ghuser:`jesserockz` +- Dont try stop if not actually started :esphomepr:`4814` by :ghuser:`jesserockz` Past Changelogs --------------- From 0b4955f5fe2a8d604d4285a6d6c3ff978b17fb6e Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 15 May 2023 11:39:05 +1200 Subject: [PATCH 31/40] Update supporters for 2023.5.0b3 --- guides/supporters.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 7a7964165..f0b67a912 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -105,7 +105,6 @@ Contributors - `ashp8i (@ashp8i) `__ - `Ashton Kemerling (@AshtonKem) `__ - `杨成锴 (@asjdf) `__ -- `Pavel Pletenev (@ASMfreaK) `__ - `Andreas Soehlke (@asoehlke) `__ - `Mike Dunston (@atanisoft) `__ - `Glenn Morrison (@atomicpapa) `__ @@ -394,6 +393,7 @@ Contributors - `Christian Ferbar (@ferbar) `__ - `FeuerSturm (@FeuerSturm) `__ - `Florian Golemo (@fgolemo) `__ +- `Federico G. Schwindt (@fgsch) `__ - `Frank Riley (@fhriley) `__ - `finity69x2 (@finity69x2) `__ - `Frédéric Jouault (@fjouault) `__ @@ -881,7 +881,6 @@ Contributors - `per1234 (@per1234) `__ - `David (@perldj) `__ - `Peter Galantha (@peterg79) `__ -- `Peter Halicky (@peterhalicky) `__ - `Philippe Delodder (@phdelodder) `__ - `philbowers (@philbowers) `__ - `Philippe FOUQUET (@Philippe12) `__ @@ -1155,4 +1154,4 @@ Contributors - `Zack Barett (@zsarnett) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated May 12, 2023.* +*This page was last updated May 15, 2023.* From bf5d65b0432e5362f04d0011131f875ca2ad290f Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 15 May 2023 21:28:58 +0100 Subject: [PATCH 32/40] update doc Pulse Light Effect (#2918) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/light/index.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/light/index.rst b/components/light/index.rst index 7c71549c6..80c52ea9c 100644 --- a/components/light/index.rst +++ b/components/light/index.rst @@ -486,6 +486,8 @@ This effect makes a pulsating light. The period can be defined by ``update_inter name: "Fast Pulse" transition_length: 0.5s update_interval: 0.5s + min_brightness: 0% + max_brightness: 100% - pulse: name: "Slow Pulse" # transition_length: 1s # defaults to 1s @@ -496,6 +498,8 @@ Configuration variables: - **name** (*Optional*, string): The name of the effect. Defaults to ``Pulse``. - **transition_length** (*Optional*, :ref:`config-time`): The duration of each transition. Defaults to ``1s``. - **update_interval** (*Optional*, :ref:`config-time`): The interval when the new transition is started. Defaults to ``1s``. +- **min_brightness** (*Optional*, percentage): The minimum brightness value. Defaults to ``0%`` +- **max_brightness** (*Optional*, percentage): The maximum brightness value. Defaults to ``100%`` Random Effect From 19941c2456122dd4bae0b43751d7febf15248171 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 16 May 2023 11:16:17 +1200 Subject: [PATCH 33/40] Bump version to 2023.5.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 65cc59e82..5e4d7c580 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.5.0b3 +PROJECT_NUMBER = 2023.5.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 539d9dbf2..c668b16f3 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.5.0b3 +ESPHOME_REF = 2023.5.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 efa5370c5..7849061a7 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.5.0b3 \ No newline at end of file +2023.5.0b4 \ No newline at end of file diff --git a/conf.py b/conf.py index 098497656..697250072 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.5.0b3" +release = "2023.5.0b4" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 3acabc8fb9176020be07a72ab7a44d51491146a0 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 16 May 2023 11:17:04 +1200 Subject: [PATCH 34/40] Update changelog for 2023.5.0b4 --- changelog/2023.5.0.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/changelog/2023.5.0.rst b/changelog/2023.5.0.rst index e620730b7..f4cee8fa8 100644 --- a/changelog/2023.5.0.rst +++ b/changelog/2023.5.0.rst @@ -85,7 +85,15 @@ Beta Changes - Wording :esphomepr:`4805` by :ghuser:`fgsch` - Tuya: Prevent loop when setting colors on case-sensitive dps :esphomepr:`4809` by :ghuser:`richardhopton` - Fix i2s media player volume control :esphomepr:`4813` by :ghuser:`jesserockz` -- Dontr try stop if not actually started :esphomepr:`4814` by :ghuser:`jesserockz` +- Dont try stop if not actually started :esphomepr:`4814` by :ghuser:`jesserockz` +- Fix missing stop trait in send_cover_info :esphomepr:`4826` by :ghuser:`RoboMagus` +- Bump aioesphomeapi from 13.7.2 to 13.7.5 :esphomepr:`4830` by :ghuser:`dependabot[bot]` +- Update PulseLightEffect with range brightness :esphomepr:`4820` by :ghuser:`max246` +- Bump esphome-dashboard to 20230516.0 :esphomepr:`4831` by :ghuser:`jesserockz` +- Fix time period validation for the auto cleaning interval :esphomepr:`4811` by :ghuser:`fgsch` +- Bump tzlocal from 4.2 to 5.0.1 :esphomepr:`4829` by :ghuser:`dependabot[bot]` +- Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 :esphomepr:`4762` by :ghuser:`spectrumjade` +- Synchronise Device Classes from Home Assistant :esphomepr:`4825` by :ghuser:`github-actions[bot]` All changes ^^^^^^^^^^^ @@ -150,6 +158,14 @@ All changes - Tuya: Prevent loop when setting colors on case-sensitive dps :esphomepr:`4809` by :ghuser:`richardhopton` - Fix i2s media player volume control :esphomepr:`4813` by :ghuser:`jesserockz` - Dont try stop if not actually started :esphomepr:`4814` by :ghuser:`jesserockz` +- Fix missing stop trait in send_cover_info :esphomepr:`4826` by :ghuser:`RoboMagus` +- Bump aioesphomeapi from 13.7.2 to 13.7.5 :esphomepr:`4830` by :ghuser:`dependabot[bot]` +- Update PulseLightEffect with range brightness :esphomepr:`4820` by :ghuser:`max246` +- Bump esphome-dashboard to 20230516.0 :esphomepr:`4831` by :ghuser:`jesserockz` +- Fix time period validation for the auto cleaning interval :esphomepr:`4811` by :ghuser:`fgsch` +- Bump tzlocal from 4.2 to 5.0.1 :esphomepr:`4829` by :ghuser:`dependabot[bot]` +- Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 :esphomepr:`4762` by :ghuser:`spectrumjade` +- Synchronise Device Classes from Home Assistant :esphomepr:`4825` by :ghuser:`github-actions[bot]` Past Changelogs --------------- From c117120196b4fd7730d87c274dcb7c19ed3d9873 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 16 May 2023 11:17:36 +1200 Subject: [PATCH 35/40] Update supporters for 2023.5.0b4 --- guides/supporters.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index f0b67a912..d862cf195 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -145,6 +145,7 @@ Contributors - `Berend Haan (@berendhaan) `__ - `Arturo Casal (@berfenger) `__ - `Bryan Berg (@berg) `__ +- `BerlinJoker (@BerlinJoker) `__ - `Bert Hertogen (@berthertogen) `__ - `Ivan Bessarabov (@bessarabov) `__ - `Brandon (@bgulla) `__ @@ -645,7 +646,6 @@ Contributors - `Klaas Schoute (@klaasnicolaas) `__ - `Klarstein (@Klarstein) `__ - `Marcus Klein (@kleini) `__ -- `Kevin Lewis (@kll) `__ - `KNXBroker (@KNXBroker) `__ - `kokangit (@kokangit) `__ - `konsulten (@konsulten) `__ @@ -741,6 +741,7 @@ Contributors - `Matthew Mazzanti (@matthewmazzanti) `__ - `matthias882 (@matthias882) `__ - `Matus Ivanecky (@maty535) `__ +- `Christian (@max246) `__ - `Maximilian Gerhardt (@maxgerhardt) `__ - `mbo18 (@mbo18) `__ - `mcmuller (@mcmuller) `__ @@ -786,7 +787,7 @@ Contributors - `Moritz Glöckl (@moritzgloeckl) `__ - `moritzj29 (@moritzj29) `__ - `Chris Laplante (@mostthingsweb) `__ -- `Sam Hughes (@MrEditor97) `__ +- `MrEditor97 (@mreditor97) `__ - `Morgan Robertson (@mrgnr) `__ - `Mariusz Kryński (@mrk-its) `__ - `Michael Davidson (@MrMDavidson) `__ @@ -874,7 +875,6 @@ Contributors - `Paul Monigatti (@paulmonigatti) `__ - `Paul Nicholls (@pauln) `__ - `Bartłomiej Biernacki (@pax0r) `__ -- `Paul Doidge (@pdoidge) `__ - `peddamat (@peddamat) `__ - `pedjas (@pedjas) `__ - `pedrobsm (@pedrobsm) `__ @@ -1008,6 +1008,7 @@ Contributors - `sparkydave1981 (@sparkydave1981) `__ - `spattinson (@spattinson) `__ - `Sean Brogan (@spbrogan) `__ +- `Justin Gerace (@spectrumjade) `__ - `Spegs21 (@Spegs21) `__ - `Eric Lind (@sperly) `__ - `Samuel Sieb (@ssieb) `__ @@ -1139,7 +1140,6 @@ Contributors - `WitchKing (@xvil) `__ - `Yaroslav (@Yarikx) `__ - `Marcin Jaworski (@yawor) `__ -- `Pavel (@yekm) `__ - `Nico B (@youknow0) `__ - `Yuval Aboulafia (@yuvalabou) `__ - `Björn Stenberg (@zagor) `__ @@ -1154,4 +1154,4 @@ Contributors - `Zack Barett (@zsarnett) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated May 15, 2023.* +*This page was last updated May 16, 2023.* From a1a5ef07e234d40f747a2296b48e696b806d8f53 Mon Sep 17 00:00:00 2001 From: Samuel Sieb Date: Tue, 16 May 2023 04:36:05 -0700 Subject: [PATCH 36/40] document new sending method (#2923) --- components/key_collector.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/key_collector.rst b/components/key_collector.rst index ff9db7e3d..552522b5b 100644 --- a/components/key_collector.rst +++ b/components/key_collector.rst @@ -83,6 +83,10 @@ Automations: if the timeout happens. The current sequence of pressed keys is placed in a ``vector`` variable ``x`` and ``start`` holds the start key that activated this sequence or else ``0``. +Lambda: +------- + +- **send_key(uint8_t key)**: Send a key to the collector directly. See Also -------- From 02cd41671cceb7ae2ce3a70cb5e31ffe46a2f2b3 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 May 2023 09:57:39 +1200 Subject: [PATCH 37/40] Bump version to 2023.5.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 5e4d7c580..662163d08 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.5.0b4 +PROJECT_NUMBER = 2023.5.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 c668b16f3..89974a97e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.5.0b4 +ESPHOME_REF = 2023.5.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 7849061a7..eb3fd8db1 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.5.0b4 \ No newline at end of file +2023.5.0b5 \ No newline at end of file diff --git a/conf.py b/conf.py index 697250072..7eddf41f9 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.5.0b4" +release = "2023.5.0b5" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 2c986e270501d05ad5bbadd906d5236026268440 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 May 2023 09:58:02 +1200 Subject: [PATCH 38/40] Update changelog for 2023.5.0b5 --- changelog/2023.5.0.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/changelog/2023.5.0.rst b/changelog/2023.5.0.rst index f4cee8fa8..cc1c446c3 100644 --- a/changelog/2023.5.0.rst +++ b/changelog/2023.5.0.rst @@ -94,6 +94,8 @@ Beta Changes - Bump tzlocal from 4.2 to 5.0.1 :esphomepr:`4829` by :ghuser:`dependabot[bot]` - Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 :esphomepr:`4762` by :ghuser:`spectrumjade` - Synchronise Device Classes from Home Assistant :esphomepr:`4825` by :ghuser:`github-actions[bot]` +- support sending keys to the collector :esphomepr:`4838` by :ghuser:`ssieb` +- handle Wiegand 8-bit keys :esphomepr:`4837` by :ghuser:`ssieb` All changes ^^^^^^^^^^^ @@ -166,6 +168,8 @@ All changes - Bump tzlocal from 4.2 to 5.0.1 :esphomepr:`4829` by :ghuser:`dependabot[bot]` - Start UART assignment at UART0 if the logger is not enabled or is not configured for hardware logging on ESP32 :esphomepr:`4762` by :ghuser:`spectrumjade` - Synchronise Device Classes from Home Assistant :esphomepr:`4825` by :ghuser:`github-actions[bot]` +- support sending keys to the collector :esphomepr:`4838` by :ghuser:`ssieb` +- handle Wiegand 8-bit keys :esphomepr:`4837` by :ghuser:`ssieb` Past Changelogs --------------- From c06c3385d07c994da1f47d96e8ca8ec01514110c Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 May 2023 09:58:31 +1200 Subject: [PATCH 39/40] Update supporters for 2023.5.0b5 --- guides/supporters.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index d862cf195..a94493792 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -295,6 +295,7 @@ Contributors - `Davide Depau (@depau) `__ - `dependabot[bot] (@dependabot[bot]) `__ - `Joeri Colman (@depuits) `__ +- `Mike La Spina (@descipher) `__ - `Stephan Martin (@designer2k2) `__ - `Destix (@Destix) `__ - `Deun Lee (@deunlee) `__ @@ -766,6 +767,7 @@ Contributors - `Micha Nordmann (@Michanord) `__ - `Michel Munzert (@michelde) `__ - `Pauline Middelink (@middelink) `__ +- `Joel Midstjärna (@midstar) `__ - `Mike_Went (@MikeWent) `__ - `Mikko Tervala (@MikkoTervala) `__ - `MiKuBB (@MiKuBB) `__ @@ -1154,4 +1156,4 @@ Contributors - `Zack Barett (@zsarnett) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated May 16, 2023.* +*This page was last updated May 17, 2023.* From 6148430b6891f2ecdac5c27095088d9e04fb941a Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 May 2023 12:45:43 +1200 Subject: [PATCH 40/40] Bump version to 2023.5.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 662163d08..34fda3927 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.5.0b5 +PROJECT_NUMBER = 2023.5.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 89974a97e..c5898255d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.5.0b5 +ESPHOME_REF = 2023.5.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 eb3fd8db1..623a394a7 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.5.0b5 \ No newline at end of file +2023.5.0 \ No newline at end of file diff --git a/conf.py b/conf.py index 7eddf41f9..d0f7d8e8b 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.5" # The full version, including alpha/beta/rc tags. -release = "2023.5.0b5" +release = "2023.5.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages.