From dde7837fc3e2d4147e5a80f8362434184089e590 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 10 Aug 2023 17:30:27 +1200 Subject: [PATCH 01/39] Bump version to 2023.9.0-dev --- Doxygen | 2 +- _static/version | 2 +- conf.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index aff8975e4..15dff3273 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.8.0-dev +PROJECT_NUMBER = 2023.9.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 65662cdd0..58a387880 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.8.0-dev \ No newline at end of file +2023.9.0-dev \ No newline at end of file diff --git a/conf.py b/conf.py index d455d74a0..3119d25d0 100644 --- a/conf.py +++ b/conf.py @@ -67,9 +67,9 @@ author = "ESPHome" # built documents. # # The short X.Y version. -version = "2023.8" +version = "2023.9" # The full version, including alpha/beta/rc tags. -release = "2023.8.0-dev" +release = "2023.9.0-dev" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 7116ba6bc4d661c5699da5049af4e64b759afbc8 Mon Sep 17 00:00:00 2001 From: Pavlo Dudnytskyi Date: Mon, 14 Aug 2023 21:04:07 +0200 Subject: [PATCH 02/39] Information about new features for Haier integration added (#3112) Co-authored-by: Pavlo Dudnytskyi --- components/climate/haier.rst | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/components/climate/haier.rst b/components/climate/haier.rst index 040bf87c7..b0e5ce5a0 100644 --- a/components/climate/haier.rst +++ b/components/climate/haier.rst @@ -73,6 +73,7 @@ This component requires a :ref:`uart` to be setup. uart_id: ac_port wifi_signal: true beeper: true + display: true outdoor_temperature: name: Haier AC outdoor temperature visual: @@ -91,6 +92,10 @@ This component requires a :ref:`uart` to be setup. - VERTICAL - HORIZONTAL - BOTH + supported_presets: + - ECO + - BOOST + - SLEEP Configuration variables: @@ -100,7 +105,9 @@ Configuration variables: - **uart_id** (*Optional*, :ref:`config-id`): ID of the UART port to communicate with AC. - **protocol** (*Optional*, string): Defines protocol of communication with AC. Possible values: hon or smartair2. Default value is smartair2. - **name** (**Required**, string): The name of the climate device. -- **wifi_signal** (*Optional*, boolean): If true - send wifi signal level to AC. Supported only by hOn protocol. +- **wifi_signal** (*Optional*, boolean): If true - send wifi signal level to AC. +- **answer_timeout** (*Optional*, :ref:`config-time`): Responce timeout. Default value is 150ms. +- **display** (*Optional*, boolean): Can be used to set AC display off. - **beeper** (*Optional*, boolean): Can be used to disable beeping on commands from AC. Supported only by hOn protocol. - **outdoor_temperature** (*Optional*): Temperature sensor for outdoor temperature. Supported only by hOn protocol. @@ -108,7 +115,8 @@ Configuration variables: - **id** (*Optional*, :ref:`config-id`): ID of the sensor, can be used for code generation - All other options from :ref:`Sensor `. - **supported_modes** (*Optional*, list): Can be used to disable some of AC modes. Possible values: 'OFF', AUTO, COOL, HEAT, DRY, FAN_ONLY -- **supported_swing_modes** (*Optional*, list): Can be used to disablesome swing modes if your AC does not support it. Possible values: 'OFF', VERTICAL, HORIZONTAL, BOTH +- **supported_swing_modes** (*Optional*, list): Can be used to disable some swing modes if your AC does not support it. Possible values: 'OFF', VERTICAL, HORIZONTAL, BOTH +- **supported_presets** (*Optional*, list): Can be used to disable some presets. Possible values for smartair2 are: BOOST, COMFORT. Possible values for hOn are: ECO, BOOST, SLEEP - All other options from :ref:`Climate `. Automations From d85fb496ab14cb128265dbeac602fa83149ce918 Mon Sep 17 00:00:00 2001 From: Regev Brody Date: Wed, 16 Aug 2023 02:31:39 +0300 Subject: [PATCH 03/39] Modify documentation for ld2410 (#2680) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/binary_sensor/gpio.rst | 2 + components/sensor/bh1750.rst | 2 + components/sensor/images/ld2410-card.png | Bin 0 -> 64027 bytes components/sensor/ld2410.rst | 734 ++++++++++++++++++++--- 4 files changed, 640 insertions(+), 98 deletions(-) create mode 100644 components/sensor/images/ld2410-card.png diff --git a/components/binary_sensor/gpio.rst b/components/binary_sensor/gpio.rst index 96bbca3be..65aefcb12 100644 --- a/components/binary_sensor/gpio.rst +++ b/components/binary_sensor/gpio.rst @@ -1,3 +1,5 @@ +.. _gpio-binary-sensor: + GPIO Binary Sensor ================== diff --git a/components/sensor/bh1750.rst b/components/sensor/bh1750.rst index 3c5326afc..b571bef6e 100644 --- a/components/sensor/bh1750.rst +++ b/components/sensor/bh1750.rst @@ -1,3 +1,5 @@ +.. _BH1750: + BH1750 Ambient Light Sensor =========================== diff --git a/components/sensor/images/ld2410-card.png b/components/sensor/images/ld2410-card.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a6b1d3e4447b38a0184a2a01de8c9284897cfe GIT binary patch literal 64027 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 UUVI2R|Mq~+ZGDXrb*te20kH(n761SM literal 0 HcmV?d00001 diff --git a/components/sensor/ld2410.rst b/components/sensor/ld2410.rst index 8dbcc3652..0a032b55e 100644 --- a/components/sensor/ld2410.rst +++ b/components/sensor/ld2410.rst @@ -11,8 +11,8 @@ Component/Hub The ``ld2410`` sensor platform allows you to use HI-LINK LD2410 motion and presence sensor (`datasheet and user manual `__) with ESPHome. -The :ref:`UART ` is required to be set up in your configuration for this sensor to work. +The :ref:`UART ` is required to be set up in your configuration for this sensor to work, ``parity`` and ``stop_bits`` **must be** respectively ``NONE`` and ``1``. Use of hardware UART pins is highly recommended, in order to support the out-of-the-box 256000 baud rate of the LD2410 sensor. .. figure:: images/ld2410.jpg @@ -24,59 +24,265 @@ Use of hardware UART pins is highly recommended, in order to support the out-of- .. code-block:: yaml # Example configuration entry - uart: - tx_pin: REPLACEME - rx_pin: REPLACEME - baud_rate: 256000 - parity: NONE - stop_bits: 1 - ld2410: - timeout: 150s - max_move_distance : 6m - max_still_distance: 0.75m - g0_move_threshold: 10 - g0_still_threshold: 20 - g1_move_threshold: 10 - g1_still_threshold: 20 - g2_move_threshold: 20 - g2_still_threshold: 21 - g3_move_threshold: 30 - g3_still_threshold: 31 - g4_move_threshold: 40 - g4_still_threshold: 41 - g5_move_threshold: 50 - g5_still_threshold: 51 - g6_move_threshold: 60 - g6_still_threshold: 61 - g7_move_threshold: 70 - g7_still_threshold: 71 - g8_move_threshold: 80 - g8_still_threshold: 81 - - -.. note:: - - For UART configuration, ``baud_rate``, ``parity`` and ``stop_bits`` **must be** respectively ``256000``, ``NONE`` and ``1``. - - Use of hardware UART pins is highly recommended, in order to support the out-of-the-box 256000 baud rate of the LD2410 sensor. Configuration variables: ************************ -The configuration is made up of three parts: The central component, individual sensors, -and binary sensors. +- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`UART Component ` if you want + to use multiple UART buses. +- **throttle** (*Optional*, int): Time in milliseconds to control the rate of data updates. Defaults to ``1000ms``. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this :doc:`ld2410` component if you need multiple components. + +Binary Sensor +------------- + +The ``ld2410`` binary sensor allows you to use your :doc:`ld2410` to perform different +measurements. + +.. code-block:: yaml + + binary_sensor: + - platform: ld2410 + has_target: + name: Presence + has_moving_target: + name: Moving Target + has_still_target: + name: Still Target + out_pin_presence_status: + name: out pin presence status + +Configuration variables: +************************ + +- **has_target** (*Optional*): If true target detect either still or in movement. + All options from :ref:`Binary Sensor `. +- **has_moving_target** (*Optional*): If true a moving target is detected. + All options from :ref:`Binary Sensor `. +- **has_still_target** (*Optional*): If true a still target is detected. + All options from :ref:`Binary Sensor `. +- **out_pin_presence_status** (*Optional*): When in :ref:`engineering mode`, indicates whether the OUT pin indicates presence or not, otherwise ``false``. + OUT pin indication depends on the :ref:`light function` configuration. Might need latest firmware to work. + All options from :ref:`Binary Sensor `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. + +Sensor +------ + +The ``ld2410`` sensor allows you to use your :doc:`ld2410` to perform different +measurements. + +.. code-block:: yaml + + sensor: + - platform: ld2410 + light: + name: light + moving_distance: + name : Moving Distance + still_distance: + name: Still Distance + moving_energy: + name: Move Energy + still_energy: + name: Still Energy + detection_distance: + name: Detection Distance + g0: + move_energy: + name: g0 move energy + still_energy: + name: g0 still energy + g1: + move_energy: + name: g1 move energy + still_energy: + name: g1 still energy + g2: + move_energy: + name: g2 move energy + still_energy: + name: g2 still energy + g3: + move_energy: + name: g3 move energy + still_energy: + name: g3 still energy + g4: + move_energy: + name: g4 move energy + still_energy: + name: g4 still energy + g5: + move_energy: + name: g5 move energy + still_energy: + name: g5 still energy + g6: + move_energy: + name: g6 move energy + still_energy: + name: g6 still energy + g7: + move_energy: + name: g7 move energy + still_energy: + name: g7 still energy + g8: + move_energy: + name: g8 move energy + still_energy: + name: g8 still energy + +.. _ld2410-sensors: + +Configuration variables: +************************ + +- **light** (*Optional*, int): When in :ref:`engineering mode`, indicates the light sensitivity, otherwise ``unknown``. + Value between ``0`` and ``255`` inclusive. Though it seems that the value ``85`` is the lowest value at complete darkness. + All options from :ref:`Sensor `. +- **moving_distance** (*Optional*, int): Distance in cm of detected moving target. + All options from :ref:`Sensor `. +- **still_distance** (*Optional*, int): Distance in cm of detected still target. + All options from :ref:`Sensor `. +- **moving_energy** (*Optional*, int): Energy for moving target. + Value between ``0`` and ``100`` inclusive. + All options from :ref:`Sensor `. +- **still_energy** (*Optional*, int): Energy for still target. + Value between ``0`` and ``100`` inclusive. + All options from :ref:`Sensor `. +- **detection_distance** (*Optional*, int): Distance in cm of target. + All options from :ref:`Sensor `. +- **gX** (*Optional*): Energies for the Xth gate (X => 0 to 8). + - **move_energy** (*Optional*, int): When in :ref:`engineering mode`, the move energy of the gate, otherwise ``unknown``. + Value between ``0`` and ``100`` inclusive. + All options from :ref:`Sensor `. + - **still_energy** (*Optional*, int): When in :ref:`engineering mode`, the still energy of the gate, otherwise ``unknown``. + Value between ``0`` and ``100`` inclusive. + All options from :ref:`Sensor `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. + +Switch +------ + +The ``ld2410`` switch allows you to control your :doc:`ld2410`. + +.. code-block:: yaml + + switch: + - platform: ld2410 + engineering_mode: + name: "engineering mode" + bluetooth: + name: "control bluetooth" + +.. _ld2410-engineering-mode: + +Configuration variables: +************************ + +- **engineering_mode** (*Optional*): enable/disable engineering mode. Defaults to ``false``. + Notice this requires more resources and is not recommended to be enabled when not necessary. + All options from :ref:`Switch `. +- **bluetooth** (*Optional*): Turn on/off the bluetooth adapter. Defaults to ``true``. + All options from :ref:`Switch `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. + + +.. _ld2410-number: + +Number +------ + +The ``ld2410`` number allows you to control the configuration of your :doc:`ld2410`. + +.. code-block:: yaml + + number: + - platform: ld2410 + timeout: + name: timeout + light_threshold: + name: light threshold + max_move_distance_gate: + name: max move distance gate + max_still_distance_gate: + name: max still distance gate + g0: + move_threshold: + name: g0 move threshold + still_threshold: + name: g0 still threshold + g1: + move_threshold: + name: g1 move threshold + still_threshold: + name: g1 still threshold + g2: + move_threshold: + name: g2 move threshold + still_threshold: + name: g2 still threshold + g3: + move_threshold: + name: g3 move threshold + still_threshold: + name: g3 still threshold + g4: + move_threshold: + name: g4 move threshold + still_threshold: + name: g4 still threshold + g5: + move_threshold: + name: g5 move threshold + still_threshold: + name: g5 still threshold + g6: + move_threshold: + name: g6 move threshold + still_threshold: + name: g6 still threshold + g7: + move_threshold: + name: g7 move threshold + still_threshold: + name: g7 still threshold + g8: + move_threshold: + name: g8 move threshold + still_threshold: + name: g8 still threshold + +.. _ld2410-light-threshold: + +Configuration variables: +************************ - **timeout** (*Optional*, int): Time in seconds during which presence state will stay present - after leaving. Defaults to ``5s``. -- **max_move_distance** (*Optional*, int): Maximum distance for movement detection. - Value between ``0.75m`` and ``6m`` inclusive. Defaults to ``4.5m``. -- **max_still_distance** (*Optional*, int): Maximum distance for still detection. - Value between ``0.75m`` and ``6m`` inclusive. Defaults to ``4.5m``. -- **gX_move_threshold** (*Optional*, int): Threshold for the Xth gate for motion detection (X => 0 to 8). - Above this level for the considered gate (distance), movement detection will be triggered. Defaults to ``see table below``. -- **gX_still_threshold** (*Optional*, int): Threshold for the Xth gate for still detection. (X => 0 to 8). - Above this level for the considered gate (distance), still detection will be triggered. Defaults to ``see table below``. + after leaving. Defaults to ``5s`` + All options from :ref:`Number `. +- **light_threshold** (*Optional*, int): Sets the light threshold for the :ref:`light function`. + Value between ``0`` and ``255`` inclusive. Defaults to ``128``. + All options from :ref:`Number `. +- **max_move_distance_gate** (*Optional*, int): Maximum distance gate for movement detection. + Value between ``2`` and ``8`` inclusive. Defaults to ``8``. + All options from :ref:`Number `. +- **max_still_distance_gate** (*Optional*, int): Maximum distance gate for still detection. + Value between ``2`` and ``8`` inclusive. Defaults to ``8``. + All options from :ref:`Number `. +- **gX** (*Optional*): Thresholds for the Xth gate (X => 0 to 8). + - **move_threshold** (**Required**, int): Threshold for the gate for motion detection. + Above this level for the considered gate (distance), movement detection will be triggered. + Value between ``0`` and ``100`` inclusive. See default values below. + All options from :ref:`Number `. + - **still_threshold** (**Required**, int): Threshold for the gate for still detection. + Above this level for the considered gate (distance), still detection will be triggered. + Value between ``0`` and ``100`` inclusive. See default values below. + All options from :ref:`Number `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. .. list-table:: Default values for gate threshold :widths: 25 25 25 @@ -95,86 +301,418 @@ and binary sensors. - 40 - 40 * - 3 - - 40 + - 30 - 40 * - 4 - - 40 - - 40 + - 20 + - 30 * - 5 - - 40 - - 40 + - 15 + - 30 * - 6 - - 30 - 15 + - 20 * - 7 - - 30 - 15 + - 20 * - 8 - - 30 - 15 + - 20 -Sensor +Button ------ -The ``ld2410`` sensor allows you to use your :doc:`ld2410` to perform different -measurements. +The ``ld2410`` button allows you to perfrom actions on your :doc:`ld2410`. .. code-block:: yaml - sensor: + button: - platform: ld2410 - moving_distance: - name : Moving Distance - still_distance: - name: Still Distance - moving_energy: - name: Move Energy - still_energy: - name: Still Energy - detection_distance: - name: Detection Distance + factory_reset: + name: "factory reset" + restart: + name: "restart" + query_params: + name: query params Configuration variables: ************************ -- **moving_distance** (*Optional*): Distance of detected moving target. - All options from :ref:`Sensor `. -- **still_distance** (*Optional*): Distance of detected still target. - All options from :ref:`Sensor `. -- **moving_energy** (*Optional*): Energy for moving target. - All options from :ref:`Sensor `. -- **still_energy** (*Optional*): Energy for still target. - All options from :ref:`Sensor `. -- **detection_distance** (*Optional*): Distance in cm of target. - All options from :ref:`Sensor `. +- **factory_reset** (*Optional*): This command is used to restore all configuration values to their original values. + All options from :ref:`Button `. +- **restart** (*Optional*): Restart the device. + All options from :ref:`Button `. +- **query_params** (*Optional*): Refresh all sensors values of the device. + All options from :ref:`Button `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. -Binary Sensor -------------- +Text Sensor +----------- -The ``ld2410`` binary sensor allows you to use your :doc:`ld2410` to perform different -measurements. +The ``ld2410`` text sensor allows you get information about your :doc:`ld2410`. + +.. code-block:: yaml + + text_sensor: + - platform: ld2410 + version: + name: "firmware version" + mac_address: + name: "mac address" + +Configuration variables: +************************ + +- **version** (*Optional*): The firmware version. + All options from :ref:`Text Sensor `. +- **mac_address** (*Optional*): The bluetooth mac address. Will be set to ``unknown`` when bluetooth is off. + All options from :ref:`Text Sensor `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. + +Select +----------- + +The ``ld2410`` select allows you control your :doc:`ld2410`. + +.. code-block:: yaml + + select: + - platform: ld2410 + distance_resolution: + name: "distance resolution" + baud_rate: + name: "baud rate" + light_function: + name: light function + out_pin_level: + name: out pin level + +.. _ld2410-light-function: + +Configuration variables: +************************ + +- **distance_resolution** (*Optional*): Control the gates distance resolution. Can be ``0.75m`` or ``0.2m``. Defaults to ``0.75m``. + All options from :ref:`Select `. +- **baud_rate** (*Optional*): Control the serial port baud rate. Defaults to ``256000``. + Once changed, all sensors will stop working until a fresh install with an updated :ref:`UART Component ` configuration. + All options from :ref:`Select `. +- **light_function** (*Optional*): If set, will affect the OUT pin value, based on :ref:`light threshold`. Can be ``off``, ``low`` or ``above``. Defaults to ``off``. + All options from :ref:`Select `. +- **out_pin_level** (*Optional*): Control OUT pin ``away`` value. Can be ``low`` or ``high``. Defaults to ``low``. + All options from :ref:`Select `. +- **ld2410_id** (*Optional*, :ref:`config-id`): Manually specify the ID for the :doc:`ld2410` component if you are using multiple components. + +Automations +----------- + +``bluetooth_password.set`` Action +********************************* + +This is an :ref:`Action ` for setting the bluetooth password. + +.. code-block:: yaml + + - bluetooth_password.set: + id: my_ld2410 + password: "HiLink" + +Configuration variables: + +- **id** (**Required**, :ref:`config-id`): The ID of the :doc:`ld2410` component to set. +- **password** (**Required**, string, :ref:`templatable `): + The password to set. Case sensitive. Must be exactly 6 characters long. Default password is `HiLink`. + +To change the password from HA you can use the following example config: + +.. code-block:: yaml + + ld2410: + id: my_ld2410 + + api: + services: + - service: set_ld2410_bluetooth_password + variables: + password: string + then: + - bluetooth_password.set: + id: my_ld2410 + password: !lambda 'return password;' + +OUT pin +------- + +In order to monitor the presence indicated by the component, with the :ref:`light function` taken +under account, you can set up a :ref:`GPIO Binary Sensor `: .. code-block:: yaml binary_sensor: - - platform: ld2410 - has_target: - name: Presence - has_moving_target: - name: Moving Target - has_still_target: - name: Still Target + - platform: gpio + pin: REPLACEME + name: gpio out pin presence + device_class: presence -Configuration variables: -************************ -- **has_target** (*Optional*): If true target detect either still or in movement. - All options from :ref:`Binary Sensor `. -- **has_moving_target** (*Optional*): If true a moving target is detected. - All options from :ref:`Binary Sensor `. -- **has_still_target** (*Optional*): If true a still target is detected. - All options from :ref:`Binary Sensor `. +Calibration Process +------------------- +In order to calibrate your ``ld2410`` sensor perform the following: + +1. Enable :ref:`engineering mode`. +2. Monitor the ``gX_move_energy`` and ``gX_still_energy`` :ref:`sensors`. +3. Change the :ref:`thresholds` and repeat step 2 until satisfaction. +4. Disable :ref:`engineering mode`. + +Home Assistant Card +******************* + +For easy calibration process you can use the following custom manual card. + +.. code-block:: yaml + + type: vertical-stack + title: 'DEVICE' + cards: + - type: horizontal-stack + cards: + - type: entities + entities: + - entity: 'switch.DEVICE_engineering_mode' + name: engineering mode + - type: vertical-stack + cards: + - type: entities + entities: + - entity: 'number.DEVICE_timeout' + name: timeout + - entity: 'number.DEVICE_max_move_distance_gate' + name: max move distance gate + - entity: 'number.DEVICE_max_still_distance_gate' + name: max still distance gate + - entity: 'select.DEVICE_light_function' + name: light function + - entity: 'number.DEVICE_light_threshold' + name: light threshold + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_distance_detection_cm' + name: distance + - type: entity + entity: 'sensor.DEVICE_moving_distance_cm' + name: move + - type: entity + entity: 'sensor.DEVICE_still_distance_cm' + name: still + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_move_energy' + name: move energy + - type: entity + entity: 'sensor.DEVICE_still_energy' + name: still energy + - type: horizontal-stack + cards: + - type: entity + entity: 'binary_sensor.DEVICE_gpio_out_pin_presence' + name: gpio presence + state_color: true + - type: entity + entity: 'binary_sensor.DEVICE_presence' + name: presence + state_color: true + - type: entity + entity: 'binary_sensor.DEVICE_movement' + name: movement + state_color: true + - type: entity + entity: 'binary_sensor.DEVICE_still' + name: still + state_color: true + - type: conditional + conditions: + - entity: 'switch.DEVICE_engineering_mode' + state: 'on' + card: + type: vertical-stack + cards: + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_light' + name: light + - type: entity + entity: 'binary_sensor.DEVICE_out_pin_presence_status' + name: out pin presence + state_color: true + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g0_move_energy' + name: 'g0' + - type: entity + entity: 'number.DEVICE_g0_move_threshold' + name: ' ' + - type: entity + entity: 'sensor.DEVICE_g0_still_energy' + name: ' ' + - type: entity + entity: 'number.DEVICE_g0_still_threshold' + name: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g1_move_energy' + name: 'g1' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g1_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g1_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g1_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g2_move_energy' + name: 'g2' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g2_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g2_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g2_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g3_move_energy' + name: 'g3' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g3_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g3_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g3_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g4_move_energy' + name: 'g4' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g4_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g4_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g4_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g5_move_energy' + name: 'g5' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g5_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g5_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g5_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g6_move_energy' + name: 'g6' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g6_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g6_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g6_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g7_move_energy' + name: 'g7' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g7_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g7_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g7_still_threshold' + name: ' ' + icon: ' ' + - type: horizontal-stack + cards: + - type: entity + entity: 'sensor.DEVICE_g8_move_energy' + name: 'g8' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g8_move_threshold' + name: ' ' + icon: ' ' + - type: entity + entity: 'sensor.DEVICE_g8_still_energy' + name: ' ' + icon: ' ' + - type: entity + entity: 'number.DEVICE_g8_still_threshold' + name: ' ' + icon: ' ' + +Then replace all instances of ``DEVICE`` with your device name + +The result: + +.. figure:: images/ld2410-card.png + :align: center See Also -------- From 7c06659ed0a3b5f8f15c36d919383e445b4505aa Mon Sep 17 00:00:00 2001 From: SeByDocKy Date: Thu, 17 Aug 2023 22:03:41 +0200 Subject: [PATCH 04/39] Doc for Pmwcs3 soil sensor (#2791) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: H. Árkosi Róbert Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/images/pmwcs3.jpg | Bin 0 -> 18128 bytes components/sensor/pmwcs3.rst | 135 ++++++++++++++++++++++++++++ images/pmwcs3.jpg | Bin 0 -> 15336 bytes index.rst | 1 + 4 files changed, 136 insertions(+) create mode 100644 components/sensor/images/pmwcs3.jpg create mode 100644 components/sensor/pmwcs3.rst create mode 100644 images/pmwcs3.jpg diff --git a/components/sensor/images/pmwcs3.jpg b/components/sensor/images/pmwcs3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c775b6f70f551fa0babd20d166730c78b4fe455 GIT binary patch literal 18128 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 PB)?XLCqjik!oUC7-CJ@x literal 0 HcmV?d00001 diff --git a/components/sensor/pmwcs3.rst b/components/sensor/pmwcs3.rst new file mode 100644 index 000000000..e282e3de5 --- /dev/null +++ b/components/sensor/pmwcs3.rst @@ -0,0 +1,135 @@ +PMWCS3 Capacitive Soil Moisture and Temperature Sensor +====================================================== + +.. seo:: + :description: Instructions for setting up PMWCS3 capacitive soil moisture sensor in ESPHome. + :image: pmwcs3.jpg + :keywords: PMWCS3 + +The ``pmwcs3`` sensor platform allows you to use your PMWCS3 +(`informations `__) +capacitive soil moisture and temperature sensor with ESPHome. The :ref:`I²C bus ` is required to be set up in +your configuration for this sensor to work. Wiring scheme: red is 3.3V, black & shield is GND, green is SDA and white is SCL. +2.2kOhm resistors are advised to pullup both SDA & SDA lines. + +.. figure:: images/pmwcs3.jpg + :align: center + :width: 80.0% + + PMWCS3 Capacitive Soil Moisture and Temperature Sensor. + + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: pmwcs3 + e25: + name: "pmwcs3 e25" + ec: + name: "pmwcs3 ec" + temperature: + name: "pmwcs3 temperature" + vwc: + name: "pmwcs3 vwc" + +Configuration variables: +------------------------ + +- **e25** (*Optional*): Electrical Conductivity, reference at 25°C in dS/m. + All options from :ref:`Sensor `. +- **ec** (*Optional*): Electrical Conductivity in mS/m. + All options from :ref:`Sensor `. +- **temperature** (*Optional*): Soil temperature in °C. + All options from :ref:`Sensor `. +- **vwc** (*Optional*): Volumetric Water Content in cm3cm−3. + All options from :ref:`Sensor `. +- **address** (*Optional*, int): Manually specify the I²C address of the sensor. + Defaults to ``0x63``. +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. Defaults to ``60s``. + +.. _sensor-PMWCS3AirCalibrationAction: + +``pmwcs3.air_calibration`` Action +----------------------------------- + +The pmwcs3 probe can to be calibrated in dry/air conditions. +The air calibration is a 30s procedure. + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: pmwcs3 + id: pmwcs3_id + # ... + + # in some trigger + on_...: + - sensor.pmwcs3_id.air_calibration: + id: pmwcs3_id + +Configuration option: + +- **id** (**Required**, :ref:`config-id`): The ID of the pmwcs3 sensor. + +.. _sensor-PMWCS3WaterCalibrationAction: + +``pmwcs3.water_calibration`` Action +----------------------------------- + +The pmwcs3 probe can to be also calibrated in water saturated conditions. Install the probe into a glass of water. +The water calibration is also a 30s procedure. + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: pmwcs3 + id: pmwcs3_id + # ... + + # in some trigger + on_...: + - sensor.pmwcs3_id.water_calibration: + id: pmwcs3_id + +Configuration option: + +- **id** (**Required**, :ref:`config-id`): The ID of the pmwcs3 sensor. + +.. _sensor-PMWCS3NewI2cAddressAction: + +``pmwcs3.newi2caddress`` Action +----------------------------------- + +A new I2C address can be set (for multi-probes cases for example) + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: pmwcs3 + id: pmwcs3_id + # ... + + # in some trigger + on_...: + - sensor.pmwcs3_id.newi2caddress: + id: pmwcs3_id + newaddress: 0x65 + +Configuration options: + +- **id** (**Required**, :ref:`config-id`): The ID of the pmwcs3 sensor. +- **newaddress** (**Required**, int): New I2C address. + +See Also +-------- + +- :ref:`sensor-filters` +- :apiref:`pmwcs3/pmwcs3.h` +- `Temperature Compensation for Conductivity `__ +- `PMWCS3 Library `__ by `@tinovi `__ +- :ghedit:`Edit` diff --git a/images/pmwcs3.jpg b/images/pmwcs3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab5c75301aa61a19bac4661123392bca1fbf7442 GIT binary patch literal 15336 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 Date: Fri, 18 Aug 2023 06:05:32 +1000 Subject: [PATCH 05/39] Add doc for BLE server manufacturer data. (#3125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: H. Árkosi Róbert --- components/esp32_ble_server.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/esp32_ble_server.rst b/components/esp32_ble_server.rst index 4d9748c52..357b43aef 100644 --- a/components/esp32_ble_server.rst +++ b/components/esp32_ble_server.rst @@ -14,6 +14,8 @@ data and control. # Example configuration esp32_ble_server: + manufacturer: "Orange" + manufacturer_data: [0x4C, 0, 0x23, 77, 0xF0 ] Configuration variables: @@ -22,6 +24,9 @@ Configuration variables: - **manufacturer** (*Optional*, string): The name of the manufacturer/firmware creator. Defaults to ``ESPHome``. - **model** (*Optional*, string): The model name of the device. Defaults to the friendly name of the ``board`` chosen in the :ref:`core configuration `. +- **manufacturer_data** (*Optional*, list of bytes): The manufacturer-specific data to include in the advertising + packet. Should be a list of bytes, where the first two are the little-endian representation of the 16-bit + manufacturer ID as assigned by the Bluetooth SIG. See Also -------- From b4a4662a36dfb85838b40c8f23471224b70a83ef Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 21 Aug 2023 12:16:18 +1200 Subject: [PATCH 06/39] Make hut21d sensors optional (#3144) --- components/sensor/htu21d.rst | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/components/sensor/htu21d.rst b/components/sensor/htu21d.rst index 238f845ef..0bb4b75b4 100644 --- a/components/sensor/htu21d.rst +++ b/components/sensor/htu21d.rst @@ -31,25 +31,18 @@ Example sensors: sensor: - platform: htu21d temperature: - name: "Living Room Temperature" + name: "Temperature" humidity: - name: "Living Room Humidity" - update_interval: 60s + name: "Humidity" Configuration variables: ------------------------ -- **temperature** (**Required**): The information for the temperature sensor. +- **temperature** (*Optional*): The information for the temperature sensor. + All options from :ref:`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 `. +- **humidity** (*Optional*): The information for the humidity sensor. + All options from :ref:`Sensor `. - **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``. From 8710c0f10f1fa61fc89fbc8340de4bf557415226 Mon Sep 17 00:00:00 2001 From: Rob Deutsch Date: Mon, 21 Aug 2023 10:20:03 +1000 Subject: [PATCH 07/39] Heatpumpir upgrade (#3134) --- components/climate/climate_ir.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/climate/climate_ir.rst b/components/climate/climate_ir.rst index 8484d2cc1..5db44d573 100644 --- a/components/climate/climate_ir.rst +++ b/components/climate/climate_ir.rst @@ -104,7 +104,7 @@ This platform utilises the library's generic one-size-fits-all API, which might Additional configuration must be specified for this platform: -- **protocol** (**Required**, string): Choose one of Arduino-HeatpumpIR's supported protcols: ``aux``, ``ballu``, ``carrier_mca``, ``carrier_nqv``, ``daikin_arc417``, ``daikin_arc480``, ``daikin``, ``electroluxyal``, ``fuego``, ``fujitsu_awyz``, ``gree``, ``greeya``, ``greeyac``, ``greeyan``, ``hisense_aud``, ``hitachi``, ``hyundai``, ``ivt``, ``midea``, ``mitsubishi_fa``, ``mitsubishi_fd``, ``mitsubishi_fe``, ``mitsubishi_heavy_fdtc``, ``mitsubishi_heavy_zj``, ``mitsubishi_heavy_zm``, ``mitsubishi_heavy_zmp``, ``mitsubishi_heavy_kj``, ``mitsubishi_msc``, ``mitsubishi_msy``, ``mitsubishi_sez``, ``panasonic_ckp``, ``panasonic_dke``, ``panasonic_jke``, ``panasonic_lke``, ``panasonic_nke``, ``samsung_aqv``, ``samsung_fjm``, ``sharp``, ``toshiba_daiseikai``, ``toshiba``, ``zhlt01`` +- **protocol** (**Required**, string): Choose one of Arduino-HeatpumpIR's supported protcols: ``aux``, ``ballu``, ``carrier_mca``, ``carrier_nqv``, ``daikin_arc417``, ``daikin_arc480``, ``daikin``, ``electroluxyal``, ``fuego``, ``fujitsu_awyz``, ``gree``, ``greeya``, ``greeyac``, ``greeyan``, ``greeyt``, ``hisense_aud``, ``hitachi``, ``hyundai``, ``ivt``, ``midea``, ``mitsubishi_fa``, ``mitsubishi_fd``, ``mitsubishi_fe``, ``mitsubishi_heavy_fdtc``, ``mitsubishi_heavy_zj``, ``mitsubishi_heavy_zm``, ``mitsubishi_heavy_zmp``, ``mitsubishi_heavy_kj``, ``mitsubishi_msc``, ``mitsubishi_msy``, ``mitsubishi_sez``, ``panasonic_ckp``, ``panasonic_dke``, ``panasonic_jke``, ``panasonic_lke``, ``panasonic_nke``, ``samsung_aqv``, ``samsung_fjm``, ``sharp``, ``toshiba_daiseikai``, ``toshiba``, ``zhlt01`` - **horizontal_default** (**Required**, string): What to default to when the AC unit's horizontal direction is *not* set to swing. Options are: ``left``, ``mleft``, ``middle``, ``mright``, ``right``, ``auto`` - **vertical_default** (**Required**, string): What to default to when the AC unit's vertical direction is *not* set to swing. Options are: ``down``, ``mdown``, ``middle``, ``mup``, ``up``, ``auto`` - **max_temperature** (**Required**, float): The maximum temperature that the AC unit supports being set to. From ea28d5e1c952aa8f6f6d354d9f07b5c018b2f972 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 2 Sep 2023 01:03:37 +0100 Subject: [PATCH 08/39] Feature/heating si7021 (#3150) * update * Update components/sensor/htu21d.rst --------- Co-authored-by: Keith Burzinski --- components/sensor/htu21d.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/components/sensor/htu21d.rst b/components/sensor/htu21d.rst index 0bb4b75b4..b07847699 100644 --- a/components/sensor/htu21d.rst +++ b/components/sensor/htu21d.rst @@ -9,6 +9,7 @@ HTU21D | Si7021 | SHT21 Temperature & Humidity Sensor The HTU21D Temperature & Humidity component allows you to use HTU21D, Si7021 and SHT21 sensors with ESPHome. The :ref:`I²C Bus ` is required to be set up in your configuration for this sensor to work. + Example sensors: - (`Adafruit `__) @@ -34,6 +35,8 @@ Example sensors: name: "Temperature" humidity: name: "Humidity" + heater: + name: "Heater" Configuration variables: ------------------------ @@ -44,8 +47,12 @@ Configuration variables: - **humidity** (*Optional*): The information for the humidity sensor. All options from :ref:`Sensor `. +- **heater** (*Optional*): The information for the heater sensor. + All options from :ref:`Sensor `. + - **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``. +The heater may be enabled to help correct the reading; see the datasheet for more information. See Also -------- From 6dacabd9ffe8ef9ef60b308fa1ae4475feb86522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Tue, 5 Sep 2023 00:16:29 +0200 Subject: [PATCH 09/39] Add LibreTiny documentation (#3159) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: H. Árkosi Róbert --- components/libretiny.rst | 221 +++++++++++++++++++++++++++ components/output/libretiny_pwm.rst | 66 ++++++++ components/text_sensor/libretiny.rst | 31 ++++ images/bk72xx.svg | 14 ++ images/libretiny.svg | 17 +++ images/rtl87xx.svg | 15 ++ index.rst | 8 +- 7 files changed, 370 insertions(+), 2 deletions(-) create mode 100644 components/libretiny.rst create mode 100644 components/output/libretiny_pwm.rst create mode 100644 components/text_sensor/libretiny.rst create mode 100644 images/bk72xx.svg create mode 100644 images/libretiny.svg create mode 100644 images/rtl87xx.svg diff --git a/components/libretiny.rst b/components/libretiny.rst new file mode 100644 index 000000000..4b531c54c --- /dev/null +++ b/components/libretiny.rst @@ -0,0 +1,221 @@ +LibreTiny Platform +================== + +.. seo:: + :description: Configuration for the LibreTiny platform for ESPHome. + :image: libretiny.svg + +This component contains platform-specific options for the `LibreTiny `__ platform. +It provides support for the following microcontrollers: + +- **BK72xx**: BK7231T, BK7231N +- **RTL87xx**: RTL8710BN, RTL8710BX + +Since different microcontrollers are supported, you need to include the appropriate ESPHome component, +depending on which processor your device has. + +Refer to `LibreTiny/Boards `__ to find your board type. + +.. code-block:: yaml + + # Example configuration entry for BK72xx + bk72xx: + board: generic-bk7231n-qfn32-tuya + + # Example configuration entry for RTL87xx + rtl87xx: + board: generic-rtl8710bn-2mb-788k + +Configuration variables: +------------------------ + +- **board** (**Required**, string): The PlatformIO board ID that should be used. Choose the appropriate board from + `this list `__ + (the icon next to the name can be used to copy the board ID). + + **This affects CPU selection and some internal settings** - make sure to choose the right CPU. + If unsure about the choice of a particular board, choose a generic board such as ``generic-bk7231n-qfn32-tuya``. + +- **framework** (*Optional*): Options for the underlying framework used by ESPHome. + + - **version** (*Optional*, string): The LibreTiny version number to use, from + `LibreTiny platform releases `__. Defaults to ``recommended``. Additional values + + - ``dev``: Use the latest commit from https://github.com/kuba2k2/libretiny, note this may break at any time + - ``latest``: Use the latest *release* from https://github.com/kuba2k2/libretiny/releases, even if it hasn't been recommended yet. + - ``recommended``: Use the recommended framework version. + + - **source** (*Optional*, string): The PlatformIO package or repository to use for the framework. This can be used to use a custom or patched version of the framework. + + - :ref:`Advanced options ` + +- **family** (*Optional*, boolean): The family of LibreTiny-supported microcontrollers that is used on this board. + One of ``bk7231n``, ``bk7231t``, ``rtl8710b``, ``rtl8720c``, ``bk7251``, ``bk7231q``. + Defaults to the variant that is detected from the board, if a board that's unknown to ESPHome is used, + this option is mandatory. **It's recommended not to include this option**. + +.. note:: + + Support for the LibreTiny platform is still in development and there could be issues or missing components. + + In particular, **MQTT is not supported yet**, because of reported stability issues. + + Please report any issues on `LibreTiny GitHub `__. + +Getting Started +--------------- + +Since BK72xx and RTL87xx chips are relatively new on the IoT Open Source development stage, +there aren't many resources on flashing and configuring them. + +Here are a few useful links: + +- `tuya-cloudcutter `__ - flashing ESPHome Over-the-Air + to some devices compatible with Tuya/SmartLife apps (BK72xx only!) + + - `Textual & video guide by digiblurDIY `__ + - `Video guide by LibreTiny `__ + - `ESPHome-Kickstart `__ - starter firmware to upload OTA with Cloudcutter + +- `Flashing BK72xx by UART `__ +- `Flashing RTL8710B by UART `__ +- `UPK2ESPHome `__ - generating ESPHome YAML automatically, from Cloudcutter profiles or Kickstart firmware (also BK72xx only) + +GPIO Pin Numbering +------------------ + +Chips supported by LibreTiny use the internal GPIO pin numbering of the boards, this means that +you don't have to worry about other kinds of pin numberings, yay! + +Additionally, you can use **pin function macros** to quickly access a GPIO tied to a particular peripheral, +such as UART1 TX/RX or PWM0. +See `LibreTiny/GPIO Access `__ to learn more. + +Most of the popular boards (often incorrectly called "chips"), that are usually shipped with Smart Home devices, +are *supported by LibreTiny*, which means that a pinout drawing is available, with all GPIOs described. +Visit `LibreTiny/Boards `__ to find all supported boards. + +The ``Pin functions`` table outlines all GPIOs available on the chosen board. +*You can use any of the visible names* to access a particular GPIO. + +Some notes about the pins on BK72xx: + +- ``TX2 (P0)`` and ``RX2 (P1)`` are used for the default :doc:`/components/logger` UART port. +- ``TX1 (P11)`` and ``RX1 (P10)`` are used for flashing firmware, as well as for :doc:`/components/tuya`. +- ``ADC3 (P23)`` is the only :doc:`/components/sensor/adc` available on BK7231. + +Some notes about the pins on RTL8710BN/BX: + +- ``TX2 (PA30)`` and ``RX2 (PA29)`` are used for flashing the firmware, + as well as the default :doc:`/components/logger` UART port. +- ``TX2 (PA30)`` is additionally used to determine the boot mode on startup (similar to ESP32). + Pulling it LOW on startup will enter "download mode". + +Example configuration entries using various naming styles: + +.. code-block:: yaml + + # GPIO switch on P26/GPIO26 (BK72xx example) + switch: + - platform: gpio + name: Relay 1 + pin: P26 + + # GPIO binary sensor on PA12 (RTL87xx example) + binary_sensor: + - platform: gpio + name: "Pin PA12" + pin: PA12 + + # ADC reading (BK72xx example) + sensor: + - platform: adc + pin: ADC3 + name: "Battery Level" + + # PWM component + output: + - platform: libretiny_pwm + pin: PWM2 + frequency: 1000 Hz + id: pwm_output + # using light with the PWM + light: + - platform: monochromatic + output: pwm_output + name: "Kitchen Light" + + # Tuya MCU on UART1 (BK72xx example) + uart: + rx_pin: RX1 + tx_pin: TX1 + baud_rate: 9600 + tuya: + +.. _advanced-options: + +Advanced options +---------------- + +These are some advanced configuration options of LibreTiny platform. + +.. code-block:: yaml + + # Example configuration entry + bk72xx: + board: cb2s + framework: + version: dev + loglevel: debug + debug: + - wifi + - ota + sdk_silent: auto + uart_port: 2 + gpio_recover: false + options: + LT_LOG_HEAP: 1 + LT_AUTO_DOWNLOAD_REBOOT: 1 + +- **loglevel** (*Optional*, string): Logging level for LibreTiny core. Controls the output of logging messages + from the core (doesn't affect ESPHome logger!). *These messages are only visible on the physical UART*. + One of ``verbose``, ``trace`` (same as ``verbose``), ``debug``, ``info``, + ``warn`` (default), ``error``, ``fatal``, ``none``. + +- **debug** (*Optional*, string or string list): Modules to enable LibreTiny debugging for. + Refer to `LibreTiny/Configuration `__ + for more information - some modules are enabled by default. + One or more of ``wifi``, ``client``, ``server``, ``ssl``, ``ota``, ``fdb``, + ``mdns``, ``lwip``, ``lwip_assert``. + Specifying ``none`` will disable all modules. You can also combine ``none`` with one or more of the modules. + +- **sdk_silent** (*Optional*, string): Define the SDK logging "silent mode". + This disables messages from vendor SDKs, which makes UART output more readable, but can hide some error messages. + *This affects the physical UART port only*. + Refer to `LibreTiny/Configuration `__ for more information. + + - ``all``: Disable all messages (default). + - ``auto``: Disable selectively, i.e. during Wi-Fi activation. + - ``none``: Keep all logging messages, don't disable anything. + +- **uart_port** (*Optional*, int): Choose the default UART port of the framework. + This affects LibreTiny logging messages, **as well as the default port for** + :doc:`ESPHome logger ` (e.g. if you don't specify any other). + One of 0, 1, 2. The default value is chip-specific and is chosen by LibreTiny appropriately. + +- **gpio_recover** (*Optional*, boolean): Disable JTAG/SWD debugging peripherals. This may be needed + to free GPIOs that should be used for other functions. Defaults to ``true``. + +- **options** (*Optional*, mapping): Custom options passed to LibreTiny platform. + Refer to `LibreTiny/Configuration `__ to see all options. + *This takes precedence (overrides) all options described above*. + +See Also +-------- + +- :doc:`esphome` +- :doc:`/components/output/libretiny_pwm` +- :doc:`/components/text_sensor/libretiny` +- `LibreTiny Documentation `__ (external) +- :doc:`/components/tuya` +- :ghedit:`Edit` diff --git a/components/output/libretiny_pwm.rst b/components/output/libretiny_pwm.rst new file mode 100644 index 000000000..da3086c08 --- /dev/null +++ b/components/output/libretiny_pwm.rst @@ -0,0 +1,66 @@ +LibreTiny PWM Output +==================== + +.. seo:: + :description: Instructions for setting up LibreTiny hardware PWMs. + :image: pwm.png + +The LibreTiny PWM platform allows you to use a hardware PWM on BK72xx and RTL87xx chips. +Refer to `LibreTiny/Boards `__ to find your board +and which PWM pins it supports. + +.. code-block:: yaml + + # Example configuration entry + output: + - platform: libretiny_pwm + pin: P8 + frequency: 1000 Hz + id: pwm_output + + # Example usage in a light + light: + - platform: monochromatic + output: pwm_output + name: "Kitchen Light" + +Configuration variables: +------------------------ + +- **pin** (**Required**, :ref:`Pin Schema `): The pin to use PWM on. +- **id** (**Required**, :ref:`config-id`): The id to use for this output component. +- **frequency** (*Optional*, frequency): The frequency to run the PWM with. Lower frequencies + have more visual artifacts, but can represent much more colors. Defaults to ``1000 Hz``. +- All other options from :ref:`Output `. + +.. _output-libretiny_pwm-set_frequency_action: + +``output.libretiny_pwm.set_frequency`` Action +--------------------------------------------- + +This :ref:`Action ` allows you to manually change the frequency of a LibreTiny PWM +channel at runtime. Use cases include controlling a passive buzzer (for pitch control). + +.. code-block:: yaml + + on_...: + - output.libretiny_pwm.set_frequency: + id: pwm_output + frequency: 100Hz + +Configuration variables: + +- **id** (**Required**, :ref:`config-id`): The ID of the PWM output to change. +- **frequency** (**Required**, :ref:`templatable `, float): The frequency + to set in hertz. + +See Also +-------- + +- :doc:`/components/libretiny` +- :doc:`/components/output/index` +- :doc:`/components/light/monochromatic` +- :doc:`/components/fan/speed` +- :doc:`/components/power_supply` +- :apiref:`libretiny_pwm/libretiny_pwm.h` +- :ghedit:`Edit` diff --git a/components/text_sensor/libretiny.rst b/components/text_sensor/libretiny.rst new file mode 100644 index 000000000..c81693f3c --- /dev/null +++ b/components/text_sensor/libretiny.rst @@ -0,0 +1,31 @@ +LibreTiny Text Sensor +===================== + +.. seo:: + :description: Instructions for setting up LibreTiny text sensors. + :image: libretiny.svg + +The ``libretiny`` text sensor platform exposes various LibreTiny core +information via text sensors. + +.. code-block:: yaml + + # Example configuration entry + text_sensor: + - platform: libretiny + version: + name: LibreTiny Version + +Configuration variables: +------------------------ + +- **version** (*Optional*): Expose the version of LibreTiny core as a text sensor. All options from + :ref:`Text Sensor `. + + +See Also +-------- + +- :doc:`/components/libretiny` +- :apiref:`libretiny/lt_component.h` +- :ghedit:`Edit` diff --git a/images/bk72xx.svg b/images/bk72xx.svg new file mode 100644 index 000000000..f96e6b01f --- /dev/null +++ b/images/bk72xx.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/images/libretiny.svg b/images/libretiny.svg new file mode 100644 index 000000000..3e06e29e2 --- /dev/null +++ b/images/libretiny.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/images/rtl87xx.svg b/images/rtl87xx.svg new file mode 100644 index 000000000..03818bcdc --- /dev/null +++ b/images/rtl87xx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/index.rst b/index.rst index 76b675a20..5feaf4036 100644 --- a/index.rst +++ b/index.rst @@ -5,14 +5,14 @@ .. seo:: :description: ESPHome Homepage - Reimagining DIY Home Automation. ESPHome is a framework that - tries to provide the best possible use experience for using ESP8266, ESP32 and RP2040 microcontrollers + tries to provide the best possible use experience for using IoT microcontrollers for Home Automation. Just write a simple YAML configuration file and get your own customized firmware. :image: logo.svg .. image:: /images/logo-text.svg :class: dark-invert -ESPHome is a system to control your ESP8266/ESP32 and RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems. +ESPHome is a system to control your microcontrollers by simple yet powerful configuration files and control them remotely through Home Automation systems. .. image:: /images/hero.png @@ -124,6 +124,8 @@ Platforms ESP8266, components/esp8266, esp8266.svg ESP32, components/esp32, esp32.svg RP2040, components/rp2040, rp2040.svg + BK72xx, components/libretiny, bk72xx.svg + RTL87xx, components/libretiny, rtl87xx.svg Core Components --------------- @@ -497,6 +499,7 @@ Output Components GPIO Output, components/output/gpio, pin.svg, dark-invert ESP32 DAC, components/output/esp32_dac, dac.svg ESP32 LEDC, components/output/ledc, pwm.png + LibreTiny PWM, components/output/libretiny_pwm, pwm.png AC Dimmer, components/output/ac_dimmer, ac_dimmer.svg, dark-invert PCA9685, components/output/pca9685, pca9685.jpg TLC59208F, components/output/tlc59208f, tlc59208f.jpg @@ -677,6 +680,7 @@ Text Sensor Components Nextion Text Sensor, components/text_sensor/nextion, nextion.jpg Tuya Text Sensor, components/text_sensor/tuya, tuya.png WL-134 Pet Tag Sensor , components/text_sensor/wl_134, fingerprint.svg, dark-invert + LibreTiny, components/text_sensor/libretiny, libretiny.svg Climate Components ------------------ From a1cc373140b6b5ab762e328a3d0093bdae9f9637 Mon Sep 17 00:00:00 2001 From: mkaiser <29856783+mkaiser@users.noreply.github.com> Date: Tue, 5 Sep 2023 00:28:01 +0200 Subject: [PATCH 10/39] Extend supported CAN bit_rate for ESP32 variants (#3142) Co-authored-by: mkaiser --- components/canbus.rst | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/components/canbus.rst b/components/canbus.rst index 37ed0e9c3..5ef35a3f7 100644 --- a/components/canbus.rst +++ b/components/canbus.rst @@ -63,9 +63,13 @@ Configuration variables: *false*: Standard 11 bits IDs, *true*: Extended 29 bits ID - **bit_rate** (*Optional*, enum): One of the supported bitrates. Defaults to ``125KBPS``. - - ``5KBPS`` - Not supported by ``esp32_can`` - - ``10KBPS`` - Not supported by ``esp32_can`` - - ``20KBPS`` - Not supported by ``esp32_can`` + - ``1KBPS`` - Support by ``esp32_can`` depends on ESP32 variant + - ``5KBPS`` - Support by ``esp32_can`` depends on ESP32 variant + - ``10KBPS`` - Support by ``esp32_can`` depends on ESP32 variant + - ``12K5BPS`` - Support by ``esp32_can`` depends on ESP32 variant + - ``16KBPS`` - Support by ``esp32_can`` depends on ESP32 variant + - ``20KBPS`` - Support by ``esp32_can`` depends on ESP32 variant + - ``25KBPS`` - ``31K25BPS`` - Not supported by ``esp32_can`` - ``33KBPS`` - Not supported by ``esp32_can`` - ``40KBPS`` - Not supported by ``esp32_can`` @@ -80,6 +84,9 @@ Configuration variables: - ``500KBPS`` - ``1000KBPS`` + See :ref:`this table ` for a list of supported bit rates by the internal CAN (TWAI) controllers of different ESP32 variants. + + Automations: ------------ @@ -198,6 +205,36 @@ You only need to specify the RX and TX pins. Any GPIO will work. on_frame: ... + +.. _esp32-can-bit-rate: + +The table lists the specific bit rates supported by the component for ESP32 variants: + =================== ======= ========== ========== ========== ========== ========== + bit_rate ESP32 ESP32-S2 ESP32-S3 ESP32-C3 ESP32-C6 ESP32-H2 + =================== ======= ========== ========== ========== ========== ========== + 1KBPS x x x x x + 5KBPS x x x x x + 10KBPS x x x x x + 12K5BPS x x x x x + 16KBPS x x x x x + 20KBPS x x x x x + 25KBPS x x x x x x + 31K25BPS + 33KBPS + 40KBPS + 50KBPS x x x x x x + 80KBPS + 83K38BPS + 95KBPS + 100KBPS x x x x x x + 125KBPS (Default) x x x x x x + 250KBPS x x x x x x + 500KBPS x x x x x x + 800KBPS x x x x x x + 1000KBPS x x x x x x + =================== ======= ========== ========== ========== ========== ========== + + Wiring options ************** From aed117ceaac993082c8d11ccfa8d7a1d5746adab Mon Sep 17 00:00:00 2001 From: kahrendt Date: Mon, 4 Sep 2023 22:03:02 -0400 Subject: [PATCH 11/39] Documentation for new free PSRAM sensor (#3160) --- components/debug.rst | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/components/debug.rst b/components/debug.rst index 96970fa8c..8f8a331c2 100644 --- a/components/debug.rst +++ b/components/debug.rst @@ -38,6 +38,8 @@ ESP heap memory (free space, maximum free block size and fragmentation level) an name: "Heap Max Block" loop_time: name: "Loop Time" + psram: + name: "Free PSRAM" # Logger must be at least debug (default) logger: @@ -55,7 +57,7 @@ Configuration variables: - ESP32: - Chip model, cores, revision - - Chip features (BLE / BT / WiFi_BGN / EMB_FLASH / ...) + - Chip features (BLE / BT / WiFi_BGN / EMB_FLASH / EMB_PSRAM / ...) - ESP-IDF version - EFuse MAC - Reset reason @@ -67,42 +69,25 @@ Configuration variables: - SDK, Core & Boot versions - Reset reason & information - Accepts these options: + Accepts all options from :ref:`Text Sensor `. - - **name** (**Required**, string): The name of the sensor. - - All other options from :ref:`Text Sensor `. - -- **reset_reason** (*Optional*): Reports the last reboot reason in a human-readable form. - - Accepts these options: - - - **name** (**Required**, string): The name of the sensor. - - All other options from :ref:`Text Sensor `. +- **reset_reason** (*Optional*): Reports the last reboot reason in a human-readable form. Accepts all options from :ref:`Text Sensor `. Sensor ------- Configuration variables: -- **free** (*Optional*): Reports the free heap size in bytes. - - - **name** (**Required**, string): The name of the sensor. - - All other options from :ref:`Sensor `. +- **free** (*Optional*): Reports the free heap size in bytes. All options from :ref:`Sensor `. - **fragmentation** (*Optional*): Reports the fragmentation metric of the heap (0% is clean, more than ~50% is not harmless). Only available on ESP8266 with Arduino 2.5.2+. + All options from :ref:`Sensor `. + +- **block** (*Optional*): Reports the largest contiguous free RAM block on the heap in bytes. All options from :ref:`Sensor `. - - **name** (**Required**, string): The name of the sensor. - - All other options from :ref:`Sensor `. +- **loop_time** (*Optional*): Reports the longest time between successive iterations of the main loop. All options from :ref:`Sensor `. -- **block** (*Optional*): Reports the largest contiguous free RAM block on the heap in bytes. - - - **name** (**Required**, string): The name of the sensor. - - All other options from :ref:`Sensor `. - -- **loop_time** (*Optional*): Reports the longest time between successive iterations of the main loop. - - - **name** (**Required**, string): The name of the sensor. - - All other options from :ref:`Sensor `. +- **psram** (*Optional*): Reports the free PSRAM in bytes. Only available on ESP32. All options from :ref:`Sensor `. See Also -------- From 751c02a629e30e5576140ad28a3a85621581c391 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 5 Sep 2023 17:01:40 +1000 Subject: [PATCH 12/39] Add new documentation for ST7789V displays (#3161) * Add new documentation for ST7789V displays * Add S2 to preset list Co-authored-by: Keith Burzinski * Fix heading * Add table. * Cleanup --------- Co-authored-by: Keith Burzinski --- components/display/st7789v.rst | 132 +++++++++++++++++++++++++++------ 1 file changed, 111 insertions(+), 21 deletions(-) diff --git a/components/display/st7789v.rst b/components/display/st7789v.rst index c85940293..c4a126709 100644 --- a/components/display/st7789v.rst +++ b/components/display/st7789v.rst @@ -57,50 +57,140 @@ to an ESP module. For more information about the font options see: :ref:`display-fonts`. -.. warning:: - When using the TTGO T-Display module, the GPIO pin numbers above *cannot be changed* as they are - hardwired within the module/PCB. Configuration variables: ************************ +Options below marked **Required** *unless preset* must be provided but may be defined by a preset depending on the selected model, so +may not need to be explicitly specified in your YAML file. If you do specify them they will override any preset. + - **model** (**Required**, string): The display model to use. One of the following options: - ``TTGO TDisplay 135x240`` - ``Adafruit Funhouse 240x240`` - ``Adafruit RR 280x240`` (round-rectangular display -- some pixels are "deleted" from corners to form rounded shape) - - ``Adafruit S2 TFT FEATHER 240X135`` (requires ``power_supply`` be specified, see below) - - ``Custom`` (see details below) + - ``Adafruit S2 TFT FEATHER 240X135`` + - ``LILYGO T-Embed 170X320`` + - ``Custom`` For other displays not listed above -- **cs_pin** (*Optional*, :ref:`Pin Schema `): The CS pin. -- **dc_pin** (**Required**, :ref:`Pin Schema `): The DC pin. -- **reset_pin** (**Required**, :ref:`Pin Schema `): The RESET pin. -- **height** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the ``height`` of the display - in pixels. This option may not be specified when the ``model`` is not set to "Custom". -- **width** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the ``width`` of the display - in pixels. This option may not be specified when the ``model`` is not set to "Custom". -- **offset_height** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the display's vertical +- **height** (**Required** *unless preset*, int): Sets height of display in pixels. +- **width** (**Required** *unless preset*, int): Sets width of display. +- **offset_height** (**Required** *unless preset*, int): When ``model`` is set to "Custom", use this to specify the display's vertical offset in pixels. This option may not be specified when the ``model`` is not set to "Custom". -- **offset_width** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the display's horizontal +- **offset_width** (**Required** *unless preset*, int): When ``model`` is set to "Custom", use this to specify the display's horizontal offset in pixels. This option may not be specified when the ``model`` is not set to "Custom". +- **cs_pin** (**Required** *unless preset*, :ref:`Pin Schema `): The CS pin. +- **dc_pin** (**Required** *unless preset*, :ref:`Pin Schema `): The DC pin. +- **reset_pin** (**Required** *unless preset*, :ref:`Pin Schema `): The RESET pin. - **eightbitcolor** (*Optional*, boolean): Limits the supported color depth to eight bits. May be useful on - memory-constrained devices. -- **backlight_pin** (*Optional*, :ref:`Pin Schema `): The display's backlight pin. + memory-constrained devices. Defaults to false. +- **backlight_pin** (*Optional*, :ref:`Pin Schema `): The display's backlight pin. May be required + depending on the hardware configuration. - **power_supply** (*Optional*, :ref:`config-id`): The :doc:`power supply ` to connect to - this display. The power supply will be turned on before attempting to initialize the display. When ``model`` is set - to "Adafruit S2 TFT FEATHER 240X135" this option is required as there are variations of this board sold with differing - pin assignments. + this display if required by hardware. The power supply will be turned on before attempting to initialize the display. - **lambda** (*Optional*, :ref:`lambda `): The lambda to use for rendering the content on the display. See :ref:`display-engine` for more information. - **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``. - **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. + +Preset configuration +******************** + +For specific models there is some preset configuration which will satisy some of the **Required** *unless preset* values. +All models except ``Custom`` preset the ``height``, ``width`` and ``offset_...`` values. +The table below summarises the other presets. Note that SPI CLK and SDO (mosi) pins, and the power supply pin must be separately +configured in ``spi:`` and ``power_supply:`` blocks - the pins are noted below for convenience only. + +Items marked RQ are hardware dependent but required and not preset. Items marked ? are optional depending on the hardware. + +.. list-table:: Model presets + :header-rows: 1 + + + * - Model + - Height/ width + - Offsets + - CS + - DC + - Reset + - Back light + - Pwr sup + - SPI clk + - SPI mosi + * - TTGO TDisplay 135x240 + - 240/135 + - 52/40 + - 5 + - 6 + - 23 + - 4 + - + - 18 + - 19 + * - Adafruit Funhouse 240x240 + - 240/240 + - 0/0 + - 40 + - 39 + - 41 + - 21 + - + - 36 + - 35 + * - Adafruit RR 280x240 + - 240/240 + - 0/20 + - RQ + - RQ + - RQ + - ? + - ? + - RQ + - RQ + * - Adafruit S2 TFT FEATHER 240X135 + - 240/135 + - 52/40 + - 7 + - 39 + - 40 + - 45 + - 21 + - 36 + - 35 + * - LILYGO T-Embed 170X320 + - 320/170 + - 35/0 + - 10 + - 13 + - 9 + - 15 + - 46 + - 12 + - 11 + * - Custom + - RQ + - RQ + - RQ + - RQ + - RQ + - ? + - ? + - RQ + - RQ + + + +For all boards you can override the presets by specifying any of the configuration options. Pin assignments on some +boards can change between versions so if it doesn't work with the presets check the board pinouts and override options as +required. + .. note:: - On memory-constrained devices, it may be possible to use *part* of the display area by setting the model to "custom" - and specifying a smaller ``height`` and/or ``width`` than that of the actual display. + On memory-constrained devices, it may be possible to use *part* of the display area by + specifying a smaller ``height`` and/or ``width`` than that of the actual display. Configuration examples From da50d9faf1a6891abef991fad42687db98909527 Mon Sep 17 00:00:00 2001 From: JJ Date: Tue, 5 Sep 2023 15:02:45 -0700 Subject: [PATCH 13/39] Reference both the XL model sensor as well as the HRXL (#2718) --- components/sensor/hrxl_maxsonar_wr.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/components/sensor/hrxl_maxsonar_wr.rst b/components/sensor/hrxl_maxsonar_wr.rst index 1fcf4b186..6a091f369 100644 --- a/components/sensor/hrxl_maxsonar_wr.rst +++ b/components/sensor/hrxl_maxsonar_wr.rst @@ -1,13 +1,15 @@ -HRXL MaxSonar WR Series -======================= +HRXL/XL MaxSonar WR Series +========================== .. seo:: - :description: Instructions for setting up MaxBotix HRXL MaxSonar WR ultrasonic distance measurement sensors in ESPHome. + :description: Instructions for setting up MaxBotix HRXL or XL MaxSonar WR ultrasonic distance measurement sensors in ESPHome. :image: hrxl_maxsonar_wr.jpg :keywords: ultrasonic, maxbotix, maxsonar This sensor allows you to use HRXL MaxSonar WR series ultrasonic sensors by MaxBotix (`datasheet `__) +or the XL MaxSonar WR series +(`datasheet `__) with ESPHome to measure distances. Depending on the model, these sensors can measure in a range between 30 centimeters and 10 meters. From 81da86f67a351d96f5617dd5e12415e3cdfe1f05 Mon Sep 17 00:00:00 2001 From: JJ Date: Tue, 5 Sep 2023 15:09:32 -0700 Subject: [PATCH 14/39] Documentation for DFRobot Ozone Sensor (sen0321) (#2897) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/images/sen0321.jpg | Bin 0 -> 105216 bytes components/sensor/sen0321.rst | 49 +++++++++++++++++++++++++++ images/sen0321.jpg | Bin 0 -> 5694 bytes index.rst | 1 + 4 files changed, 50 insertions(+) create mode 100644 components/sensor/images/sen0321.jpg create mode 100644 components/sensor/sen0321.rst create mode 100644 images/sen0321.jpg diff --git a/components/sensor/images/sen0321.jpg b/components/sensor/images/sen0321.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffb2f1b28518f153ca85f37cc2e17ee4efdcce8e GIT binary patch literal 105216 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 BVSNAq literal 0 HcmV?d00001 diff --git a/components/sensor/sen0321.rst b/components/sensor/sen0321.rst new file mode 100644 index 000000000..ed86548d1 --- /dev/null +++ b/components/sensor/sen0321.rst @@ -0,0 +1,49 @@ +SEN0321 DFRobot Ozone Sensor +============================ + +.. seo:: + :description: Instructions for setting up SEN0321 DFRobot ozone sensors + :image: sen0321.jpg + :keywords: sen0321 + +The ``sen0321`` sensor platform allows you to use your DFRobot +(`product wiki `__, +`DFRobot`_) ozone sensors with ESPHome. The sensor is used in automatic mode where the sensor actively +updates its measurements every 2 seconds. +:ref:`I²C ` is required to be set up in your configuration for this sensor to work. + +.. figure:: images/sen0321.jpg + :align: center + :width: 50.0% + + DFRobot Ozone Sensor (sen0321). + +.. _DFRobot: https://www.dfrobot.com/product-2005.html + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: sen0321 + name: "Ozone Sensor" + address: 0x73 + update_interval: 60s + +Configuration variables: +------------------------ + +- All options from :ref:`Sensor `. + +- **address** (*Optional*, int): Manually specify the I²C address of + the sensor. Defaults to ``0x73``. Sensor can be configured to ``0x70``, ``0x71``, ``0x72``, or ``0x73`` using jumpers on the board. + +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. Defaults to ``60s``. + +See Also +-------- + +- :ref:`sensor-filters` +- :apiref:`sen0321/sen0321.h` +- `DFRobot SEN0321 Library `__ by `DFRobot `__ +- :ghedit:`Edit` diff --git a/images/sen0321.jpg b/images/sen0321.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55ac6dcf818c08c451e9bd4c480ae3d7c5969c6c GIT binary patch literal 5694 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 Date: Tue, 5 Sep 2023 23:33:52 +0100 Subject: [PATCH 15/39] add lightwave (#2915) Co-authored-by: Keith Burzinski Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/light/images/lightwaverf.jpg | Bin 0 -> 16271 bytes components/light/lightwaverf.rst | 93 ++++++++++++++++++++++++ index.rst | 1 + 3 files changed, 94 insertions(+) create mode 100644 components/light/images/lightwaverf.jpg create mode 100644 components/light/lightwaverf.rst diff --git a/components/light/images/lightwaverf.jpg b/components/light/images/lightwaverf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e590caea9a80b004e9e39b99404d01e91785d1f8 GIT binary patch literal 16271 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 literal 0 HcmV?d00001 diff --git a/components/light/lightwaverf.rst b/components/light/lightwaverf.rst new file mode 100644 index 000000000..10904467b --- /dev/null +++ b/components/light/lightwaverf.rst @@ -0,0 +1,93 @@ +LightWaveRF Switch +================== + +.. seo:: + :description: LightWaveRF Switch Lights + :image: brightness-medium.svg + +The ``LightWaveRF`` light platform creates a module to dump and send commands to light switches + +.. figure:: images/lightwaverf.jpg + :align: center + :width: 40.0% + +LightwaveRF switches are very common in UK automation. They allow control of lights, sockets, relays and more via RF remote or via a hub. +Using an inexpensive RF transmitter and receiver you can control your devices via ESPHome. + + + +.. code-block:: yaml + + # Example configuration entry + + # Specify the two pins to connect the receiver and transmitter + lightwaverf: + read_pin: 13 + write_pin: 14 + + # Create a switch to trigger a light + switch: + - platform: template + name: "Turn off sofa" + id: light_off_ceiling_sofa + turn_on_action: + lightwaverf.send_raw: + code: [0x04, 0x00, 0x00, 0x00, 0x0f, 0x03, 0x0d, 0x09, 0x08, 0x08] + name: "Sofa" + repeat: 1 + + +Note: To gather the RAW codes from the remote, setup the ``read_pin`` and observe in the logs the printing of the codes. + +Configuration variables: +------------------------ + +- **read_pin** (**Required**, :ref:`Pin Schema `): The pin that the receiver is connected to +- **write_pin** (**Required**, :ref:`Pin Schema `): the pin that the transmitter is connected to + + +.. lightwaverf.send_raw: + + +``lightwaverf.send_raw`` Action +-------------------------------- + +Send the raw data that has been captured via the dump system + +.. code-block:: yaml + + on_...: + then: + - lightwaverf.send_raw: + code: [0x04, 0x00, 0x00, 0x00, 0x0f, 0x03, 0x0d, 0x09, 0x08, 0x08] + name: "Sofa" + repeat: 1 + +Configuration variables: +------------------------ + +- **name** (*Optional*, string): The name to give for the action +- **code** (**Required**, list hex): The raw dump in an array of hex +- **repeat** (*Optional*, int): The number of times the message will be repeated +- **inverted** (*Optional*, boolean): Send the signal inverted + + +Compatible Hardware +------------------- + +The RF transmitters/receivers listed below have been confirmed to work with the current code base. If you discover others that work, please let us know! + +Compatible transmitter: + +- MX-FS-03V + +Compatible receiver: + +- RXB6 + + +See Also +-------- + +- :doc:`/components/light/index` +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index 0a07c4a4b..3776eb038 100644 --- a/index.rst +++ b/index.rst @@ -550,6 +550,7 @@ Light Components Tuya Dimmer, components/light/tuya, tuya.png Shelly Dimmer, components/light/shelly_dimmer, shellydimmer2.jpg Custom Light, components/light/custom, language-cpp.svg, dark-invert + LightWaveRF, components/light/lightwaverf, brightness-medium.svg H-bridge Light, components/light/hbridge, brightness-medium.svg, dark-invert Sonoff D1 Dimmer, components/light/sonoff_d1, sonoff_d1.jpg From f9eaf893cdbc4ba4d84c47dbee75a1b8d9a6ed49 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Fri, 8 Sep 2023 17:27:24 +1000 Subject: [PATCH 16/39] Add spi_device (#3156) * Add spi_device * Fix list. * Update SPI with interface: option * Update for config changes. * Cleanup terminology. --- components/spi.rst | 124 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 111 insertions(+), 13 deletions(-) diff --git a/components/spi.rst b/components/spi.rst index 5b61fa36b..c8b315040 100644 --- a/components/spi.rst +++ b/components/spi.rst @@ -4,47 +4,145 @@ SPI Bus ======= .. seo:: - :description: Instructions for setting up an SPI bus in ESPHome + :description: Instructions for setting up SPI components in ESPHome :image: spi.svg :keywords: SPI -SPI is a very common high-speed protocol for a lot of devices. The SPI bus usually consists of 4 wires: +SPI is a very common high-speed protocol for a lot of devices. The ESPHome SPI component implements only the host controller +role, where it controls the bus, and writes or reads data from peripherals attached to the bus. + +The SPI bus usually consists of 4 wires: - **CLK**: Is used to tell the receiving device when to read data. All devices on the bus can share this line. Sometimes also called ``SCK``. - **CS** (chip select): Is used to tell the receiving device when it should listen for data. Each device has an individual CS line. Sometimes also called ``SS``. If the SPI bus has a single device, its CS pin can sometimes be connected to ground to tell it that it is always selected. -- **MOSI** (also DIN): Is used to send data from the master (the ESP) to the receiving device. All devices on the bus can - share this line. -- **MISO** (also DOUT): Is used to receive data. All devices on the bus can - share this line. +- **MOSI** (aka SDO - Serial Data Out): Is used to send data from the controller (the ESP) to the peripheral device. + All devices on the bus share this line. +- **MISO** (also SDI - Serial Data In): Is used to receive data. All devices on the bus share this line. In some cases one of **MOSI** or **MISO** do not exist as the receiving device only accepts data or sends data. -To set up SPI devices in ESPHome, you first need to place a top-level SPI hub like below which defines what pins to -use for the functions described above. The **CS** pins are then individually managed by the components. The ``spi:`` -component also accepts a list of buses if you want to have multiple SPI buses with your ESP (though this should -rarely be necessary, as the SPI bus can be shared by the devices). +To set up SPI devices in ESPHome, you first need to place a top-level SPI component which defines the pins to +use for the functions described above. The **CS** pins are individually managed by the other components that +reference the ``spi`` component. +This component also accepts a list of controllers if you want to implement multiple SPI buses. .. code-block:: yaml - # Example configuration entry + # Example configuration entry - single controller spi: clk_pin: GPIO14 mosi_pin: GPIO13 miso_pin: GPIO12 + # Example configuration entry - two controllers + spi: + - id: spi_bus0 + clk_pin: GPIO18 + mosi_pin: GPIO23 + miso_pin: GPIO19 + interface: hardware + - id: spi_bus1 + clk_pin: GPIO14 + mosi_pin: GPIO27 + miso_pin: GPIO26 + interface: any + Configuration variables: ------------------------ - **clk_pin** (**Required**, :ref:`Pin Schema `): The pin used for the clock line of the SPI bus. - **mosi_pin** (*Optional*, :ref:`Pin Schema `): The pin used for the MOSI line of the SPI bus. - **miso_pin** (*Optional*, :ref:`Pin Schema `): The pin used for the MISO line of the SPI bus. -- **force_sw** (*Optional*, boolean): Whether software implementation should be used even if hardware one is available. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this SPI hub if you need multiple SPI hubs. +- **interface** (*Optional*): Controls which hardware or software SPI implementation should be used. + Value may be one of ``any`` (default), ``software``, ``hardware``, ``spi``, ``spi2`` or ``spi3``, depending on + the particular chip. See discussion below. +- **force_sw** (*Optional*, **Deprecated**, boolean): Whether software implementation should be used even if a hardware + controller is available. Default is ``false``. + +Interface selection: +-------------------- + +ESP32 and ESP8266 chips have several hardware SPI controller implementations - usually the first one or two +are reserved for use to access +the flash and PSRAM memories, leaving one or two user-accessible controllers. SPI controller instances configured in +ESPHome can be assigned to one of these with the ``interface:`` configuration option. + +By default (``interface: any``) the first available hardware controller will be assigned, a second if available then +any further instances configured will use software mode. You can choose a specific controller with ``spi`` (meaning +the first or only available controller) or one of ``spi2`` and ``spi3`` for ESP32 chips with two available SPI +controllers. Note that SPI0 and SPI1 are typically not available, being reserved for accessing flash and PSRAM. + +If the ``software`` option is chosen, or you configure more SPI instances than there are available hardware controllers, +the remaining instances will use a software implementation, which is unable to achieve data rates above a few hundred +kHz. This is acceptable for sensors or other devices not transferring large amounts of data, but will be too slow +to drive a display for example. + +While the ESP32 supports the reassignment of the default SPI pins to most other GPIO pins, using the dedicated SPI pins +can improve performance and stability for certain ESP/device combinations. +ESP8266 has a more limited selection of pins that can be used; check the datasheet for more information. + +Generic SPI device component: +----------------------------- +.. _spi_device: + +Other components that depend on the SPI component will reference it, typically to communicate with specific +peripheral devices. There is also a general-purpose SPI device component that can be used to communicate with hardware not +supported by a specific component. It allows selection of the SPI mode, data_rate, CS pin and bit order. +Reads and writes on the device can be performed with lambdas. For example: + +.. code-block:: yaml + + spi: + clk_pin: GPIO14 + mosi_pin: GPIO27 + miso_pin: GPIO26 + interface: hardware + + spi_device: + id: spidev + cs_pin: GPIO13 + data_rate: 2MHz + mode: 3 + bit_order: lsb_first + + on...: + then: + - lambda: !lambda |- + id(spidev).enable(); + id(spidev).write_byte(0x4F); + id(spidev).disable(); + + +Configuration variables: +------------------------ + +- **data_rate** (*Optional*): Set the data rate of the controller. One of ``80MHz``, ``40MHz``, ``20MHz``, ``10MHz``, + ``5MHz``, ``4MHz``, ``2MHz``, ``1MHz`` (default), ``200kHz``, ``75kHz`` or ``1kHz``. A numeric value in Hz can alternatively + be specified. +- **mode** (*Optional*): Set the controller mode - one of ``mode0``, ``mode1``, ``mode2``, ``mode3``. The default is ``mode3``. + See table below for more information +- **bit_order** (*Optional*): Set the bit order - choose one of ``msb_first`` (default) or ``lsb_first``. +- **cs_pin** (*Optional*, :ref:`Pin Schema `): The CS pin. + +SPI modes: +---------- + +SPI devices operate in one of four modes as per the table below. The choice of mode is dictated by the requirements +of the speficic peripheral chip. + +.. csv-table:: Supported Modes + :header: "Mode", "Clock Idle Polarity", "Clock Phase", "Data shifted on", "Data sampled on" + + "0", "low", "leading", "/CS activation and falling CLK", "rising CLK" + "1", "low", "trailing", "rising CLK", "falling CLK" + "2", "high", "leading", "/CS activation and rising CLK", "falling CLK" + "3", "high", "trailing", "falling CLK", "rising CLK" + -**Please note:** while both ESP8266 and ESP32 support the reassignment of the default SPI pins to other GPIO pins, using the dedicated SPI pins can improve performance and stability for certain ESP/device combinations. See Also -------- From d1096fd3b457f8a3c61675b6f3271b12226ff940 Mon Sep 17 00:00:00 2001 From: Ilia Sotnikov Date: Sat, 9 Sep 2023 12:00:59 +0300 Subject: [PATCH 17/39] [ADC] Documented measuring VCC on Raspberry Pico (W) (#3174) * [ADC] Documented measuring VCC on Raspberry Pico (W) * Update components/sensor/adc.rst * Update components/sensor/adc.rst --------- Co-authored-by: Keith Burzinski --- components/sensor/adc.rst | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/components/sensor/adc.rst b/components/sensor/adc.rst index bbc41c548..3f6145292 100644 --- a/components/sensor/adc.rst +++ b/components/sensor/adc.rst @@ -30,7 +30,7 @@ Configuration variables: ------------------------ - **pin** (**Required**, :ref:`config-pin`): The pin to measure the voltage on. - Or on the ESP8266 alternatively also ``VCC``, see :ref:`adc-esp8266_vcc`. + Or on the ESP8266 or Raspberry Pi Pico it could alternatively be set to ``VCC``, see :ref:`adc-vcc`. - **name** (**Required**, string): The name of the voltage sensor. - **attenuation** (*Optional*): Only on ESP32. Specify the ADC attenuation to use. See :ref:`adc-esp32_attenuation`. Defaults to ``0db``. @@ -122,10 +122,23 @@ For users that don't need a precise voltage reading, the "raw" output option all Note we don't recommend this method as it will change between chips, and newer ESP32 modules have different ranges (i.e. 0-8191); it is better to use the new calibrated voltages and update any existing filters accordingly. -.. _adc-esp8266_vcc: +.. _adc-vcc: -ESP8266 Measuring VCC ---------------------- +Measuring VCC +------------- + +The following configuration block adds the sensor reflecting VCC on a supported hardware platform. +Please see specific sections below of what voltage is actually measured. + +.. code-block:: yaml + + sensor: + - platform: adc + pin: VCC + name: "VCC Voltage" + +On ESP8266 +~~~~~~~~~~ On the ESP8266 you can even measure the voltage the *chip is getting*. This can be useful in situations where you want to shut down the chip if the voltage is low when using a battery. @@ -136,12 +149,19 @@ To measure the VCC voltage, set ``pin:`` to ``VCC`` and make sure nothing is con To avoid confusion: It measures the voltage at the chip, and not at the VCC pin of the board. It should usually be around 3.3V. -.. code-block:: yaml +On Raspberry Pi Pico +~~~~~~~~~~~~~~~~~~~~ + +On the Raspberry Pi Pico and Pico W the ADC can measure VSYS voltage. + +Depending on how VSYS is powered the readings will have different meanings - either power supply voltage when it is connected to VSYS pin directly, or USB voltage (VBUS) minus some drop on the Schottky diode the Raspberry Pi Pico has between those pins. +Our experiments indicate the drop being ~0.1V for Pico and ~0.25V for Pico W; you can use sensor filters to adjust the final value. + +.. note:: + + On Raspberry Pi Pico W the ADC GPIO29 pin for VSYS is shared with WiFi chip, so attempting to use it explicitly will likely hang the WiFi connection. + It is recommended to use ``VCC`` as ADC pin in that case. - sensor: - - platform: adc - pin: VCC - name: "VCC Voltage" RP2040 Internal Core Temperature -------------------------------- From f36ded648e82dfe588fce82c820a4a2d40283d6a Mon Sep 17 00:00:00 2001 From: Flaviu Tamas Date: Sat, 9 Sep 2023 22:25:15 -0400 Subject: [PATCH 18/39] Add BMI160 docs (see esphome/esphome#5143) (#3086) --- components/sensor/bmi160.rst | 84 +++++++++++++++++++++++ components/sensor/images/bmi160-full.jpg | Bin 0 -> 85461 bytes components/sensor/images/bmi160-ui.png | Bin 0 -> 36432 bytes images/bmi160.jpg | Bin 0 -> 15332 bytes index.rst | 3 +- 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 components/sensor/bmi160.rst create mode 100644 components/sensor/images/bmi160-full.jpg create mode 100644 components/sensor/images/bmi160-ui.png create mode 100644 images/bmi160.jpg diff --git a/components/sensor/bmi160.rst b/components/sensor/bmi160.rst new file mode 100644 index 000000000..0b55c6143 --- /dev/null +++ b/components/sensor/bmi160.rst @@ -0,0 +1,84 @@ +BMI160 Accelerometer/Gyroscope Sensor +====================================== + +.. seo:: + :description: Instructions for setting up BMI160 Accelerometer and Gyroscope sensors. + :image: bmi160.jpg + +The ``bmi160`` sensor platform allows you to use your BMI160 Accelerometer/Gyroscope +(`datasheet `__, +`SparkFun`_) sensors with +ESPHome. The :ref:`I²C Bus ` is +required to be set up in your configuration for this sensor to work. + +This component only does some basic filtering and no calibration. Due to the complexity of +this sensor and the amount of possible configuration options, you should probably +create a custom component by copying and modifying the existing code if you want a specific +new feature. Supporting all possible use-cases would be quite hard. + + +.. figure:: images/bmi160-full.jpg + :align: center + :width: 50.0% + + BMI160 Accelerometer/Gyroscope Sensor. + +.. _SparkFun: https://www.sparkfun.com/products/18794 + +.. figure:: images/bmi160-ui.png + :align: center + :width: 80.0% + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: bmi160 + address: 0x68 + update_interval: 60s + acceleration_x: + name: "BMI160 Accel X" + acceleration_y: + name: "BMI160 Accel Y" + acceleration_z: + name: "BMI160 Accel z" + gyroscope_x: + name: "BMI160 Gyro X" + gyroscope_y: + name: "BMI160 Gyro Y" + gyroscope_z: + name: "BMI160 Gyro z" + temperature: + name: "BMI160 Temperature" + +Configuration variables: +------------------------ + +- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x68``, may also be ``0x69``. +- **acceleration_x** (*Optional*): Use the X-Axis of the Accelerometer. All options from + :ref:`Sensor `. +- **acceleration_y** (*Optional*): Use the Y-Axis of the Accelerometer. All options from + :ref:`Sensor `. +- **acceleration_z** (*Optional*): Use the Z-Axis of the Accelerometer. All options from + :ref:`Sensor `. +- **gyroscope_x** (*Optional*): Use the X-Axis of the Gyroscope. All options from + :ref:`Sensor `. +- **gyroscope_y** (*Optional*): Use the Y-Axis of the Gyroscope. All options from + :ref:`Sensor `. +- **gyroscope_z** (*Optional*): Use the Z-Axis of the Gyroscope. All options from + :ref:`Sensor `. +- **temperature** (*Optional*): Use the internal temperature of the sensor. All options from + :ref:`Sensor `. +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``. + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. + +See Also +-------- + +- :ref:`sensor-filters` +- :doc:`template` +- :doc:`ultrasonic` +- :apiref:`bmi160/bmi160.h` +- `i2cdevlib `__ by `Jeff Rowberg `__ +- :ghedit:`Edit` diff --git a/components/sensor/images/bmi160-full.jpg b/components/sensor/images/bmi160-full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1871abc090096acd5f5c14cf578d23593116d162 GIT binary patch literal 85461 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

=M*c`dc^txsNF)0*XGQkhoYn8t>An|auTU&Lk< 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 literal 0 HcmV?d00001 diff --git a/components/sensor/images/bmi160-ui.png b/components/sensor/images/bmi160-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..a523730e3082ce7c497c4bc43c5b29feedd4a0c7 GIT binary patch literal 36432 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 literal 0 HcmV?d00001 diff --git a/images/bmi160.jpg b/images/bmi160.jpg new file mode 100644 index 0000000000000000000000000000000000000000..750b9963029064d15b391c3b69208be822b6d892 GIT binary patch literal 15332 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 Date: Mon, 11 Sep 2023 12:20:15 +1000 Subject: [PATCH 19/39] SPI RGB LED component description (#3147) * APA102 description * Add note about miso * Rename apa102 to spi_rgb_led * Rename to spi_led_strip * Update TOC, add reference to SPI LED Strip in Fastled doc. * More cross-refs * Add image * Resize image * Format. * Formatting... --- components/light/fastled.rst | 5 ++- components/light/images/apa102.jpg | Bin 0 -> 30033 bytes components/light/neopixelbus.rst | 3 +- components/light/spi_led_strip.rst | 68 +++++++++++++++++++++++++++++ images/apa102.jpg | Bin 0 -> 9950 bytes index.rst | 1 + 6 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 components/light/images/apa102.jpg create mode 100644 components/light/spi_led_strip.rst create mode 100644 images/apa102.jpg diff --git a/components/light/fastled.rst b/components/light/fastled.rst index 5cceb0992..41c61a060 100644 --- a/components/light/fastled.rst +++ b/components/light/fastled.rst @@ -24,7 +24,7 @@ FastLED Light FastLED does **not** work with ESP-IDF. - For addressable lights, you can use :doc:`esp32_rmt_led_strip`. + For addressable lights, you can use :doc:`esp32_rmt_led_strip` or for SPI LEDs see :doc:`spi_led_strip`.. .. _fastled-clockless: @@ -110,6 +110,8 @@ SPI The ``fastled_spi`` light platform allows you to create RGB lights in ESPHome for a :ref:`number of supported chipsets `. +See :doc:`/components/light/spi_led_strip` for an alternative component that works on ESP-IDF (and Arduino.) + SPI FastLED lights differ from the :ref:`fastled-clockless` in that they require two pins to be connected, one for a data and one for a clock signal whereas the clockless lights only need a single pin. @@ -169,6 +171,7 @@ See Also -------- - :doc:`/components/light/index` +- :doc:`/components/light/spi_led_strip` - :doc:`/components/power_supply` - :apiref:`fastled_base/fastled_light.h` - `Arduino FastLED library `__ diff --git a/components/light/images/apa102.jpg b/components/light/images/apa102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9db00a6c9897a86af4bbc1d856a3fc19b5492873 GIT binary patch literal 30033 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 literal 0 HcmV?d00001 diff --git a/components/light/neopixelbus.rst b/components/light/neopixelbus.rst index 3eed9eff0..b5c420d26 100644 --- a/components/light/neopixelbus.rst +++ b/components/light/neopixelbus.rst @@ -9,7 +9,8 @@ NeoPixelBus Light NeoPixelBus does **not** work with ESP-IDF. - For addressable lights, you can use :doc:`esp32_rmt_led_strip`. + For clockless lights, you can use :doc:`esp32_rmt_led_strip`, and for SPI LEDs see :doc:`spi_led_strip`. + The ``neopixelbus`` light platform allows you to create RGB lights in ESPHome for an individually addressable lights like NeoPixel or WS2812. diff --git a/components/light/spi_led_strip.rst b/components/light/spi_led_strip.rst new file mode 100644 index 000000000..18f10fc26 --- /dev/null +++ b/components/light/spi_led_strip.rst @@ -0,0 +1,68 @@ +SPI LED Strip Light +=================== + +.. seo:: + :description: Instructions for setting up SPI LED RGB lights in ESPHome. + :image: ../components/light/images/apa102.jpg + +The ``spi_led_strip`` light platform drives one or more SPI interfaced RGB LEDs. These LEDs are often used in strips, where +each LED is individually addressable. This component requires an SPI interface to be configured. + +This component has been tested with APA102 LEDs and should also work with HD107 and SK9822 type LEDs, or any others +with a similar interface - SPI, 8 bits per colour and BGR ordering. + +.. figure:: images/apa102.jpg + :align: center + :width: 75.0% + +.. code-block:: yaml + + # Example configuration entry + spi: + mosi_pin: GPIO3 + clk_pin: GPIO9 + + light: + - platform: spi_led_strip + num_leds: 30 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED Strip" + data_rate: 1MHz + +Color Correction +---------------- + +It is often favourable to calibrate/correct the color produced by an LED strip light as the +perceived intensity of different colors will generally vary. This can be done by using +``color_correct`` to adjust the relative brightness of the RGB components. + +Configuration variables: +------------------------ + +- **name** (**Required**, string): The name of the light. +- **num_leds** (*Optional*, int): The number of LEDs attached. The default is 1. +- **effects** (*Optional*, list): A list of :ref:`light effects ` to use for this light. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **data_rate** (*Optional*): Set the data rate of the SPI interface to the display. One of ``80MHz``, ``40MHz``, ``20MHz``, ``10MHz``, ``5MHz``, ``2MHz``, ``1MHz`` (default), ``200kHz``, ``75kHz`` or ``1kHz``. +- All other options from :ref:`Light `. + +You may also need to configure an ``output`` GPIO pin to control power to the LEDs, depending on your hardware. The +APA102 and friends do not have a ``CS`` input, and are write-only so the SPI ``miso`` pin should not be specified. + +See Also +-------- + +.. figure:: images/rgb-detail.jpg + :align: center + :width: 75.0% + +- :doc:`/components/light/index` +- :doc:`/components/output/ledc` +- :doc:`/components/output/esp8266_pwm` +- :doc:`/components/output/pca9685` +- :doc:`/components/output/tlc59208f` +- :doc:`/components/output/my9231` +- :doc:`/components/output/sm16716` +- :apiref:`rgb/rgb_light_output.h` +- :ghedit:`Edit` diff --git a/images/apa102.jpg b/images/apa102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30c90d3316583a8a71b485b66b10c239ee686da8 GIT binary patch literal 9950 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 literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index 354322acc..ad418e58d 100644 --- a/index.rst +++ b/index.rst @@ -547,6 +547,7 @@ Light Components FastLED Light, components/light/fastled, color_lens.svg, dark-invert NeoPixelBus Light, components/light/neopixelbus, color_lens.svg, dark-invert Light Partition, components/light/partition, color_lens.svg, dark-invert + SPI LED Strips, components/light/spi_led_strip, apa102.jpg Tuya Dimmer, components/light/tuya, tuya.png Shelly Dimmer, components/light/shelly_dimmer, shellydimmer2.jpg From d0719caf68528135745ba1dd4a9050b82f26ffa3 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Sun, 10 Sep 2023 23:19:19 -0500 Subject: [PATCH 20/39] Add a doc for PSRAM config (#3177) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/psram.rst | 31 +++++++++++++++++++++++++++++++ images/psram.svg | 1 + index.rst | 3 ++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 components/psram.rst create mode 100644 images/psram.svg diff --git a/components/psram.rst b/components/psram.rst new file mode 100644 index 000000000..7cf16bfe4 --- /dev/null +++ b/components/psram.rst @@ -0,0 +1,31 @@ +PSRAM +===== + +.. seo:: + :description: Configuration for the ESP32 PSRAM platform for ESPHome. + :image: psram.svg + +This component enables and configures PSRAM if/when available on ESP32 modules/boards. +It is automatically loaded and enabled by components that require it. + +PSRAM is only available on the ESP32. + +.. code-block:: yaml + + # Example configuration entry + psram: + mode: octal + speed: 80MHz + +Configuration variables: +------------------------ + +- **mode** (*Optional*): Defines the operating mode the PSRAM should utilize. One of ``quad`` or ``octal``. +- **speed** (*Optional*, int): The speed at which the PSRAM should operate. One of ``40MHz``, ``80MHz`` or ``120MHz``. + Note that ``80MHz`` and ``120MHz`` are not supported on all modules; in addition, ``120MHz`` is considered + "experimental" at the time this document was written. + +See Also +-------- + +- :ghedit:`Edit` diff --git a/images/psram.svg b/images/psram.svg new file mode 100644 index 000000000..3bc309a4e --- /dev/null +++ b/images/psram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.rst b/index.rst index ad418e58d..ef159a68f 100644 --- a/index.rst +++ b/index.rst @@ -133,8 +133,8 @@ Core Components .. imgtable:: Core, components/esphome, cloud-circle.svg, dark-invert + PSRAM, components/psram, psram.svg WiFi, components/wifi, network-wifi.svg, dark-invert - MQTT, components/mqtt, mqtt.png Network, components/network, network-wifi.svg, dark-invert I²C Bus, components/i2c, i2c.svg @@ -142,6 +142,7 @@ Core Components UART Bus, components/uart, uart.svg CAN Bus, components/canbus, canbus.svg + MQTT, components/mqtt, mqtt.png OTA Updates, components/ota, system-update.svg, dark-invert Logger, components/logger, file-document-box.svg, dark-invert Web Server, components/web_server, http.svg, dark-invert From 1d07f3f9d413ce86b9236930e92605777f456410 Mon Sep 17 00:00:00 2001 From: Simone Rossetto Date: Mon, 11 Sep 2023 21:13:30 +0200 Subject: [PATCH 21/39] Documentation for WireGuard component and sensors (#2948) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: H. Árkosi Róbert --- components/wireguard.rst | 296 +++++++++++++++++++++++++++++++ images/wireguard_custom_logo.svg | 87 +++++++++ index.rst | 3 + 3 files changed, 386 insertions(+) create mode 100644 components/wireguard.rst create mode 100644 images/wireguard_custom_logo.svg diff --git a/components/wireguard.rst b/components/wireguard.rst new file mode 100644 index 000000000..9113bff7c --- /dev/null +++ b/components/wireguard.rst @@ -0,0 +1,296 @@ +WireGuard Component +=================== + +.. |wireguard| unicode:: WireGuard 0xAE +.. _wireguard: https://www.wireguard.org/ + +.. seo:: + :description: Instructions to setup WireGuard for your ESP board. + :keywords: WireGuard, VPN, ESP32 + +|wireguard|_ is an extremely simple yet fast and modern VPN that utilizes +state-of-the-art cryptography. This component uses a **custom** +implementation not developed by original authors and currently +available for **ESP32 platform only**. + + Please note that *"WireGuard" and the "WireGuard" logo are + registered trademarks of Jason A. Donenfeld.* See + `"WireGuard" Trademark Usage Policy `__ + for additional information. + +.. warning:: + + To successfully use this component you must have |wireguard| also + on your remote host (already installed and ready to accept connections). + If you don't have it please read the section :ref:`wireguard-installation`. + +.. warning:: + + This component requires the system clock to be synchronized. + + See :doc:`time/index` to setup a time source + and **do not use** ``homeassistant`` time-platform if + Home Assistant is on the remote peer because the time + synchronization is a prerequisite to establish the VPN link. + + The :doc:`time/sntp` is a valid time-platform choice. + +A VPN tunnel can be created to a **single** remote peer +adding the following to your configuration: + +.. code-block:: yaml + + # Example configuration entry + wireguard: + address: x.y.z.w + private_key: AaBbCcDd...= + peer_endpoint: wg.server.example + peer_public_key: EeFfGgHh...= + + # Optional netmask (this is the default if omitted) + netmask: 255.255.255.255 + + # Optional endpoint port (WireGuard default if omitted) + peer_port: 51820 + + # Optional pre-shared key (omit if not in use) + peer_preshared_key: XxYyZzWw...= + + # Optional list of ip/mask (any host is allowed if omitted) + peer_allowed_ips: + - x.y.z.0/24 + - l.m.n.o/32 # the /32 can be omitted for single host + - [...] + + # Optional keepalive (disabled by default) + peer_persistent_keepalive: 25s + +It is recommended to use *secrets* at least for private and pre-shared keys: + +.. code-block:: yaml + + wireguard: + private_key: !secret wg_privkey + peer_preshared_key: !secret wg_shrdkey + +Configuration variables +------------------------ + +.. _wireguard-address: + +- **address** (**Required**, IPv4 address): The local VPN address of the device. + + If you intend to upload firmwares through the VPN link you probably need + to copy this value to the ``use_address`` parameter of the :doc:`wifi`. + +- **netmask** (*Optional*, IPv4 address): The netmask for the configured address. + Default to ``255.255.255.255``. + + See section :ref:`wireguard-static-routes` if outgoing connections are + expected to transit through the VPN link (e.g. with :doc:`mqtt` to a + remote MQTT broker). + +- **private_key** (**Required**, string): The private key of the device. + +- **peer_endpoint** (**Required**, string): The hostname of the remote peer. + +- **peer_port** (*Optional*, UDP port): The port where remote peer is listening on. + The |wireguard| default is ``51820``. + +- **peer_public_key** (**Required**, string): The public key of the remote peer. + +- **peer_preshared_key** (*Optional*, string): The chosen pre-shared key between + local device and remote peer. + +- **peer_persistent_keepalive** (*Optional*, :ref:`config-time`): The amount of + time after which a *keepalive* packet is sent through the tunnel. + By default this feature is disabled (``0s``). + + If there are NATs or firewalls between the device and the remote peer set + this value to something like ``25s``. + +- **peer_allowed_ips** (*Optional*, list of IPv4 networks): A list of networks + in CIDR notation (*IP/mask*) to be allowed through the tunnel. Any host + (``0.0.0.0/0``) will be allowed if this parameter is omitted. + + The device own ``address/32`` is always added by default to this list. + + See section :ref:`wireguard-static-routes` if outgoing connections are + expected to transit through the VPN link (e.g. with :doc:`mqtt` to a + remote MQTT broker). + +- **reboot_timeout** (*Optional*, :ref:`config-time`): The amount of time to wait + before rebooting the device when the remote peer is unreachable. Can be disabled + by setting this to ``0s``. Default to ``15min``. + +- **require_connection_to_proceed** (*Optional*, boolean): Set to ``true`` to + wait for the remote peer to be up before continuing to boot the device. + Default to ``false``. + + This can be used to delay the initialization of components that use the + VPN tunnel as long as the VPN isn't ready. For example if you are using + :doc:`mqtt` to reach a remote broker you may experience boot freeze just + after the setup of MQTT because it waits for the broker to be reachable, + but the connection cannot be established until the VPN link is + active too. To bypass such deadlock set this parameter to ``true`` in + order to not initialize MQTT until the remote peer is up. + +- **update_interval** (*Optional*, :ref:`config-time`): How often to check + the connection status and the latest handshake value. Default to ``10s``. + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. + +.. _wireguard-static-routes: + +Static routes and outgoing connections +-------------------------------------- + +Currently there is no way on ESP32 devices to configure static routes for +network interfaces, so the ``peer_allowed_ips`` list is used only to allow +(or drop) packets that pass through the VPN tunnel, not to define static +routes for remote hosts. + +The routes are implicitly added by the configured ``netmask`` and +**only** packets with destination *inside* the same network defined +by ``address/netmask`` will be routed to the tunnel. + +This means that the user has to tweak the ``netmask`` parameter +to "cover" **all** the networks in the allowed IPs list in order +to successfully establish *outgoing* connections to remote hosts. +Incoming connections are not affected by ``netmask``. + +Let's explain with some examples: + ++--------------+---------------------+----------------------+------------------------------+ +| address | netmask | allowed ips | working outgoing connections | ++==============+=====================+======================+==============================+ +| 172.16.0.100 | *omitted* or | *omitted* or | **none**, | +| | 255.255.255.255 | any other value | no routes are created | ++ +---------------------+----------------------+------------------------------+ +| | 255.255.255.0 | *omitted* | only to ``172.16.0.0/24`` | ++ + +----------------------+ because ``192.168.0.0/24`` + +| | | - 172.16.0.0/24 | and any other network will | +| | | - 192.168.0.0/24 | be outside ``172.16.0.0/24`` | +| | | - *any other* | | ++ + +----------------------+------------------------------+ +| | | - 192.168.0.0/24 | **none** because | +| | | | ``192.168.0.0/24`` is not | +| | | | part of ``172.16.0.0/24`` | ++--------------+---------------------+----------------------+------------------------------+ +| 10.44.0.100 | 255.0.0.0 | *omitted* | to ``10.0.0.0/8`` network | ++ + +----------------------+------------------------------+ +| | | - 10.44.0.0/16 | only to the networks in | +| | | - 10.10.0.0/16 | the allowed list because the | +| | | | netmask will route the whole | +| | | | ``10.0.0.0/8`` but wireguard | +| | | | allows only those two | +| | | | subnets | ++--------------+---------------------+----------------------+------------------------------+ +| any | 0.0.0.0 | *omitted* | **any** | ++ + +----------------------+------------------------------+ +| | | - 172.16.0.0/24 | to any network that is in | +| | | - 10.44.0.0/16 | the list of allowed IPs | +| | | - 10.10.0.0/16 | because the netmask will | +| | | | route any traffic but | +| | | | wireguard allows only its | +| | | | own list | ++--------------+---------------------+----------------------+------------------------------+ + +.. note:: + + Setting the ``netmask`` to ``0.0.0.0`` has the effect of routing + through the VPN link any traffic. It is like having set the wireguard + interface as the system default. + +.. _wireguard-sensors: + +Sensors +------- + +Here after the sensors available for this component. + +Status Binary Sensor +^^^^^^^^^^^^^^^^^^^^ + +This binary sensor tracks the connection status (*online*/*offline*) of the remote peer. + +.. code-block:: yaml + + # Example configuration entry + binary_sensor: + - platform: wireguard + status: + name: 'WireGuard Status' + +All options from :ref:`Binary Sensor ` can be added to the +above configuration. + +Latest Handshake Sensor +^^^^^^^^^^^^^^^^^^^^^^^ + +This sensor reports the *timestamp* of the latest completed handshake. + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: wireguard + latest_handshake: + name: 'WireGuard Latest Handshake' + +All options from :ref:`Sensor ` can be added to the +above configuration. + +.. _wireguard-installation: + +Remote peer setup +----------------- + +There are many different ways for installing and configuring +|wireguard| on servers, home servers or general host. It depends +on the platform and on the operating system in use. + +You can start reading the `official documentation `__ +to have an overview of what it is and on how to install it *system wide* for +common operating systems. Read the thread at `Home Assistant Community Add-on: WireGuard +`__ +if you intend to install it through Home Assistant. Plase note that securely +setting up a VPN requires some networking experience, you will need to open +router ports and possibly use custom commands to redirect traffic. + +Once everything is configured you should be able to add the device +to Home Assistant. See next section. + +Connecting to remote Home Assistant +----------------------------------- + +The ESP device should interact with remote Home Assistant, across the VPN link, +as it is on the local network but probably the initial *auto discovery* +will not work and you have to add the device **manually**. + +These are the steps: + +1. go to the Home Assistant "Integrations" page +2. click on the "Add Integration" button (bottom right corner) +3. select "ESPHome" from the list +4. insert the configured IP :ref:`address ` + as the host name + +The device should now be linked to your remote Home Assistant. + +.. note:: + + If you have issues linking the ESP device try setting + the ``use_address`` parameter of the :doc:`wifi` to the value + of the :ref:`address ` configured here. + +See Also +-------- + +- :doc:`time/index` +- :doc:`time/sntp` +- |wireguard|_ official website +- `Home Assistant Community Add-on: WireGuard + `__ + (also on `GitHub `__) +- :ghedit:`Edit` diff --git a/images/wireguard_custom_logo.svg b/images/wireguard_custom_logo.svg new file mode 100644 index 000000000..6cbddd22e --- /dev/null +++ b/images/wireguard_custom_logo.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.rst b/index.rst index ef159a68f..57fee20b9 100644 --- a/index.rst +++ b/index.rst @@ -385,6 +385,7 @@ Miscellaneous Resol VBus, components/vbus, resol_deltasol_bs_plus.jpg Person Sensor (SEN21231), components/sensor/sen21231, sen21231.png Kuntze pool sensor, components/sensor/kuntze, kuntze.jpg + WireGuard, components/wireguard, wireguard_custom_logo.svg Motion @@ -490,6 +491,7 @@ Miscellaneous Remote Receiver, components/remote_receiver, remote.svg, dark-invert Resol VBus, components/vbus, resol_deltasol_bs_plus.jpg Tuya Binary Sensor, components/binary_sensor/tuya, tuya.png + WireGuard, components/wireguard, wireguard_custom_logo.svg Output Components ----------------- @@ -852,6 +854,7 @@ Miscellaneous Components SML, components/sml, sml.svg Atlas Scientific Peristaltic Pump, components/ezo_pmp, ezo-pmp.jpg Resol VBus, components/vbus, resol_deltasol_bs_plus.jpg + WireGuard, components/wireguard, wireguard_custom_logo.svg Demo, components/demo, description.svg, dark-invert Copy, components/copy, content-copy.svg, dark-invert From a9f35ad6d3c144172d6ee38e7cc7b594f29f3cd5 Mon Sep 17 00:00:00 2001 From: Daniel Dunn Date: Mon, 11 Sep 2023 15:26:03 -0600 Subject: [PATCH 22/39] Documentation for persistable globals (#3151) Co-authored-by: Daniel Dunn --- guides/automations.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/guides/automations.rst b/guides/automations.rst index 431360b7f..eb88db70c 100644 --- a/guides/automations.rst +++ b/guides/automations.rst @@ -273,7 +273,8 @@ global variables can be used to store the state of a garage door. # Example for global string variable - id: my_global_string type: std::string - restore_value: no # Strings cannot be saved/restored + restore_value: yes + max_restore_data_length: 24 initial_value: '"Global value is"' # In an automation @@ -298,6 +299,8 @@ Configuration variables: - **restore_value** (*Optional*, boolean): Whether to try to restore the state on boot up. Be careful: on the ESP8266, you only have a total of 96 bytes available for this! Defaults to ``no``. This will use storage in "RTC memory", so it won't survive a power-cycle unless you use the ``esp8266_restore_from_flash`` option to save to flash. See :doc:`esp8266_restore_from_flash ` for details. +- **max_restore_data_length** (*Optional*, integer): Only applies to variables of type ``std::string``. ESPHome will allocate enough space for this many characters, + plus single character of overhead. Strings longer than this will not be saved. The max value of this variable is 254 characters, and the default is 63 characters. - **initial_value** (*Optional*, string): The value with which to initialize this variable if the state can not be restored or if state restoration is not enabled. This needs to be wrapped in quotes! Defaults to the C++ default value for this type (for example ``0`` for integers). From c5074fe7744dfd5534d4281d6d65f91f0aba3b42 Mon Sep 17 00:00:00 2001 From: Tercio Filho Date: Tue, 12 Sep 2023 19:15:03 -0300 Subject: [PATCH 23/39] Add new configuration for Modbus Controller. (#3163) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Co-authored-by: H. Árkosi Róbert --- components/modbus_controller.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/modbus_controller.rst b/components/modbus_controller.rst index 24d630b5f..8ac555411 100644 --- a/components/modbus_controller.rst +++ b/components/modbus_controller.rst @@ -59,6 +59,11 @@ Configuration variables: - **update_interval** (*Optional*, :ref:`config-time`): The interval that the sensors should be checked. Defaults to 60 seconds. +- **offline_skip_updates** (*Optional*, integer): When a controller doesn't respond to a command, it is + marked as offline, you can specify how many updates will be skipped while it is offline. If using a bus with multiple + controllers, this avoids waiting for timeouts allowing to read other controllers in the same bus. When the controller + responds to a command, it'll be marked online again. + Example ------- From 5e7d834b9539bba9309b1bb95dd02a0b8a12edfa Mon Sep 17 00:00:00 2001 From: rufuswilson Date: Wed, 13 Sep 2023 00:20:03 +0200 Subject: [PATCH 24/39] Added heater_enabled parameter (#3149) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/sht3xd.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/sensor/sht3xd.rst b/components/sensor/sht3xd.rst index 5cee64e95..7614a5bf4 100644 --- a/components/sensor/sht3xd.rst +++ b/components/sensor/sht3xd.rst @@ -48,6 +48,8 @@ Configuration variables: Defaults to ``0x44``. - **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``. +- **heater_enabled** (*Optional*, bool): Turn on/off heater at boot. + Defaults to ``true``. See Also -------- From 0e89ff790820d800b5ca128d46b91bbfcadbf2cc Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:05:07 +1200 Subject: [PATCH 25/39] Bump version to 2023.9.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 15dff3273..7cbcf4576 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.9.0-dev +PROJECT_NUMBER = 2023.9.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..3f38b5078 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = dev +ESPHOME_REF = 2023.9.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 58a387880..71b5538a5 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.9.0-dev \ No newline at end of file +2023.9.0b1 \ No newline at end of file diff --git a/conf.py b/conf.py index 3119d25d0..8b4ee6288 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.9" # The full version, including alpha/beta/rc tags. -release = "2023.9.0-dev" +release = "2023.9.0b1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 9d8bd9ab5673cdf26fc8111846c90a7145e44560 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:10:39 +1200 Subject: [PATCH 26/39] Update changelog for 2023.9.0b1 --- _static/changelog-2023.9.0.png | Bin 0 -> 64662 bytes changelog/2023.9.0.rst | 182 +++++++++++++++++++++++++++++++++ changelog/index.rst | 2 +- 3 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 _static/changelog-2023.9.0.png create mode 100644 changelog/2023.9.0.rst diff --git a/_static/changelog-2023.9.0.png b/_static/changelog-2023.9.0.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d9ebb7f362f9837ee74b7bb7d394d66089a0b5 GIT binary patch literal 64662 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 5 :esphomepr:`5332` by :ghuser:`HeMan` +- Tweak Improv serial to build in IDF 5 :esphomepr:`5331` by :ghuser:`kbx81` +- Support for LibreTiny platform (RTL8710, BK7231 & other modules) :esphomepr:`3509` by :ghuser:`kuba2k2` (new-integration) +- Extend ESP32 CAN bit rates /bus speed support :esphomepr:`5280` by :ghuser:`mkaiser` +- Debug component: add free PSRAM sensor :esphomepr:`5334` by :ghuser:`kahrendt` +- libretiny: fix uart_port framework config :esphomepr:`5343` by :ghuser:`jesserockz` +- Bump actions/checkout from 3 to 4 :esphomepr:`5341` by :ghuser:`dependabot[bot]` +- Add Lilygo T-Embed to st7789v display config. :esphomepr:`5337` by :ghuser:`clydebarrow` +- Disable IPv6 when config explicitly says false :esphomepr:`5310` by :ghuser:`HeMan` +- Add defines.h to ethernet_component.h for ENABLE_IPV6 :esphomepr:`5344` by :ghuser:`kbx81` +- Synchronise Device Classes from Home Assistant :esphomepr:`5328` by :ghuser:`esphomebot` (breaking-change) +- Bump pytest from 7.4.0 to 7.4.1 :esphomepr:`5342` by :ghuser:`dependabot[bot]` +- Fixed default temperature step values for haier climate :esphomepr:`5330` by :ghuser:`paveldn` +- Add debug component to all tests :esphomepr:`5333` by :ghuser:`HeMan` +- Support MaxBotix XL in addition to HRXL :esphomepr:`4510` by :ghuser:`notjj` +- Adding DFRobot Ozone Sensor Support (sen0321) :esphomepr:`4782` by :ghuser:`notjj` (new-integration) +- mdns: bump IDF mdns component to 1.2.0 :esphomepr:`5217` by :ghuser:`stintel` +- Integration LightwaveRF switches :esphomepr:`4812` by :ghuser:`max246` (new-integration) +- Bump flake8 from 6.0.0 to 6.1.0 :esphomepr:`5171` by :ghuser:`dependabot[bot]` +- Bump tornado from 6.3.2 to 6.3.3 :esphomepr:`5236` by :ghuser:`dependabot[bot]` +- Bump platformio from 6.1.10 to 6.1.11 :esphomepr:`5323` by :ghuser:`dependabot[bot]` +- Only run ci-docker when ci-docker workflow changes :esphomepr:`5347` by :ghuser:`jesserockz` +- esp32: Extra build customization :esphomepr:`5322` by :ghuser:`jesserockz` +- Allow upload command to flash file via serial :esphomepr:`5274` by :ghuser:`jesserockz` +- Allow "--device SERIAL" on cli to flash only via serial :esphomepr:`5351` by :ghuser:`jesserockz` +- Fix PN532 for IDF 5 and ultralight enhancements :esphomepr:`5352` by :ghuser:`kbx81` +- Fix cpu_ll_get_cycle_count() deprecated warning :esphomepr:`5353` by :ghuser:`kbx81` +- Refactor SPI code; Add ESP-IDF hardware support :esphomepr:`5311` by :ghuser:`clydebarrow` (new-integration) +- Bump actions/cache from 3.3.1 to 3.3.2 :esphomepr:`5367` by :ghuser:`dependabot[bot]` +- Bump zeroconf from 0.88.0 to 0.102.0 :esphomepr:`5368` by :ghuser:`dependabot[bot]` +- Fix repeat.count = 0 case :esphomepr:`5364` by :ghuser:`Xmister` +- Fix dashboard download for ESP32 variants :esphomepr:`5355` by :ghuser:`kuba2k2` +- Bump pytest from 7.4.1 to 7.4.2 :esphomepr:`5357` by :ghuser:`dependabot[bot]` +- [ADC] Support measuring VCC on Raspberry Pico (W) :esphomepr:`5335` by :ghuser:`hostcc` +- Move CONF_PHASE_A/B/C constants to const.py. :esphomepr:`5304` by :ghuser:`kpfleming` +- Add BMI160 support :esphomepr:`5143` by :ghuser:`flaviut` (new-integration) +- Use black-pre-commit-mirror to speed up pre-commit runs. :esphomepr:`5372` by :ghuser:`kpfleming` +- Native SPI RGB LED component :esphomepr:`5288` by :ghuser:`clydebarrow` (new-integration) +- Wireguard component :esphomepr:`4256` by :ghuser:`lhoracek` (new-integration) +- Bump LibreTiny version to 1.4.0 :esphomepr:`5375` by :ghuser:`kuba2k2` +- time: Make std::string version of strftime() avoid runaway memory allocations :esphomepr:`5348` by :ghuser:`kpfleming` +- Fix disabled wifi crash on boot :esphomepr:`5370` by :ghuser:`Xmister` +- debug: add ESP32-C6 support :esphomepr:`5354` by :ghuser:`stintel` +- Make string globals persist-able using fixed size allocations :esphomepr:`5296` by :ghuser:`EternityForest` +- Use /data directory for .esphome folder when running as HA add-on :esphomepr:`5374` by :ghuser:`jesserockz` (breaking-change) +- Bump zeroconf from 0.102.0 to 0.108.0 :esphomepr:`5376` by :ghuser:`dependabot[bot]` +- Bump black from 23.7.0 to 23.9.1 :esphomepr:`5377` by :ghuser:`dependabot[bot]` +- Attempt to fix rp2040 adc with vcc :esphomepr:`5378` by :ghuser:`jesserockz` +- Enable IPv6 for ESP8266 and Raspberry pi pico w (RP2040) :esphomepr:`4759` by :ghuser:`HeMan` +- Workflow updates :esphomepr:`5384` by :ghuser:`jesserockz` +- Modbus Controller added some features :esphomepr:`5318` by :ghuser:`0x3333` +- Force heater off on setup :esphomepr:`5161` by :ghuser:`rufuswilson` +- Add IDF 5 test yaml, add adc to IDF tests, fix adc for IDF 5 :esphomepr:`5379` by :ghuser:`kbx81` + +Past Changelogs +--------------- + +- :doc:`2023.8.0` +- :doc:`2023.7.0` +- :doc:`2023.6.0` +- :doc:`2023.5.0` +- :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` diff --git a/changelog/index.rst b/changelog/index.rst index dd73ab54e..13db780b6 100644 --- a/changelog/index.rst +++ b/changelog/index.rst @@ -2,7 +2,7 @@ Changelog ========= .. redirect:: - :url: /changelog/2023.8.0.html + :url: /changelog/2023.9.0.html .. toctree:: :glob: From ccf95dfb244cccbdfab965a112ccb128ae3144c5 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:11:11 +1200 Subject: [PATCH 27/39] Update supporters for 2023.9.0b1 --- guides/supporters.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 6a4955672..67daa44f6 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -19,6 +19,7 @@ Contributors - `007hacky007 (@007hacky007) `__ - `0hax (@0hax) `__ - `0x0a11c0de (@0x0a11c0de) `__ +- `Tercio Filho (@0x3333) `__ - `Denis Bodor (aka Lefinnois) (@0xDRRB) `__ - `2016for (@2016for) `__ - `2mikrobi (@2mikrobi) `__ @@ -354,7 +355,6 @@ Contributors - `Dominik (@DomiStyle) `__ - `Derek M. (@doolbneerg) `__ - `Dorian Zedler (@dorianim) `__ -- `Mark Dietzer (@Doridian) `__ - `Sebastian Krzyszkowiak (@dos1) `__ - `Jiang Sheng (@doskoi) `__ - `Artem Sheremet (@dotdoom) `__ @@ -506,6 +506,7 @@ Contributors - `Greg Arnold (@GregJArnold) `__ - `Greg MacLellan (@gregmac) `__ - `Gil Peeters (@grillp) `__ +- `Guillaume Rischard (@grischard) `__ - `George (@grob6000) `__ - `groovejumper (@groovejumper) `__ - `gsexton (@gsexton) `__ @@ -538,6 +539,7 @@ Contributors - `Hermann Kraus (@herm) `__ - `Herr Frei (@herrfrei) `__ - `highground88 (@highground88) `__ +- `hindenbugbite (@hindenbugbite) `__ - `Hamish Moffatt (@hmoffatt) `__ - `Marcel Hoppe (@hobbypunk90) `__ - `Hopperpop (@Hopperpop) `__ @@ -1222,6 +1224,7 @@ Contributors - `wysiwyng (@wysiwyng) `__ - `Jakob (@XDjackieXD) `__ - `Mike Brown (@xenoxaos) `__ +- `Péter Sárközi (@Xmister) `__ - `Xose Pérez (@xoseperez) `__ - `WitchKing (@xvil) `__ - `Andrew Kroll (@xxxajk) `__ @@ -1240,4 +1243,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated September 6, 2023.* +*This page was last updated September 13, 2023.* From 2c1891d494c6c254cb438dd1533d1cdd5d75c4ad Mon Sep 17 00:00:00 2001 From: Patrick ZAJDA Date: Thu, 21 Sep 2023 00:18:25 +0200 Subject: [PATCH 28/39] Remove enable_ipv6 restricted to ESP32 with ESP-IDF (#3190) --- components/network.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/network.rst b/components/network.rst index 465f5cf1e..60e97e094 100644 --- a/components/network.rst +++ b/components/network.rst @@ -18,7 +18,7 @@ networks (WiFi, Ethernet). Configuration variables: ------------------------ -- **enable_ipv6** (*Optional*, boolean): Enables IPv6 support. Defaults to ``false``. Only available on ESP32 with ESP-IDF framework. +- **enable_ipv6** (*Optional*, boolean): Enables IPv6 support. Defaults to ``false``. See Also -------- From d010b687ff9f2b948486935e02ed991a685be1be Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Sep 2023 10:35:41 +1200 Subject: [PATCH 29/39] Bump version to 2023.9.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 7cbcf4576..094ee5fa1 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.9.0b1 +PROJECT_NUMBER = 2023.9.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 3f38b5078..1f84f74dc 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.9.0b1 +ESPHOME_REF = 2023.9.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 71b5538a5..2114b76ce 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.9.0b1 \ No newline at end of file +2023.9.0b2 \ No newline at end of file diff --git a/conf.py b/conf.py index 8b4ee6288..0cb588850 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.9" # The full version, including alpha/beta/rc tags. -release = "2023.9.0b1" +release = "2023.9.0b2" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From d444ab3460ddbb5d5bd6b7a6d879031084eddfe7 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Sep 2023 10:56:45 +1200 Subject: [PATCH 30/39] Update changelog for 2023.9.0b2 --- changelog/2023.9.0.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/changelog/2023.9.0.rst b/changelog/2023.9.0.rst index 4f08abf96..6d4cf328a 100644 --- a/changelog/2023.9.0.rst +++ b/changelog/2023.9.0.rst @@ -53,6 +53,23 @@ Breaking Changes - Synchronise Device Classes from Home Assistant :esphomepr:`5328` by :ghuser:`esphomebot` (breaking-change) - Use /data directory for .esphome folder when running as HA add-on :esphomepr:`5374` by :ghuser:`jesserockz` (breaking-change) +Beta Changes +^^^^^^^^^^^^ + +- Add patch to apt install :esphomepr:`5389` by :ghuser:`synesthesiam` +- Fix Waveshare 7.5v2 epaper screens are always powered on :esphomepr:`5283` by :ghuser:`phoenixswiss` +- Update radon_eye_listener.cpp :esphomepr:`5401` by :ghuser:`rmmacias` +- Add shelly-dimmer-stm32 51.7 to known versions :esphomepr:`5400` by :ghuser:`trvrnrth` +- Add E-Trailer Gaslevel support to Mopeka Std Check :esphomepr:`5397` by :ghuser:`Phhere` +- fix disabled wifi power on 8266 :esphomepr:`5409` by :ghuser:`ssieb` +- fix handling of web server version :esphomepr:`5405` by :ghuser:`ssieb` +- Climate preset fix :esphomepr:`5407` by :ghuser:`Jorre05` +- Remove Wi-Fi dependency from Midea component :esphomepr:`5394` by :ghuser:`AnthonyMaiorani` +- http_request: Cleanups and safety improvements :esphomepr:`5360` by :ghuser:`kpfleming` +- Make the pulse meter timeout on startup when no pulses are received :esphomepr:`5388` by :ghuser:`TrentHouliston` +- Wizard: fix colored text in input prompts :esphomepr:`5313` by :ghuser:`kuba2k2` +- support keypads with pulldowns :esphomepr:`5404` by :ghuser:`ssieb` + All changes ^^^^^^^^^^^ From e08941f8f39082d74ed53d27527f775284653fdc Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 21 Sep 2023 10:57:17 +1200 Subject: [PATCH 31/39] Update supporters for 2023.9.0b2 --- guides/supporters.rst | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 67daa44f6..3fef36f96 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -96,6 +96,7 @@ Contributors - `Sergey Anisimov (@anisimovsergey) `__ - `Nikolay Vasilchuk (@Anonym-tsk) `__ - `Anthony Keane (@anthonykeane) `__ +- `Anthony (@AnthonyMaiorani) `__ - `Rémi K. (@antibill51) `__ - `Antonio Fiol (@antonio-fiol) `__ - `Adriaan Peeters (@apeeters) `__ @@ -148,6 +149,7 @@ Contributors - `Bella Coola (@BellaCoola) `__ - `Pierre (@bemble) `__ - `Ben-Schwabe (@Ben-Schwabe) `__ +- `Benas09 (@Benas09) `__ - `Ben Hoff (@benhoff) `__ - `Benjamin Aigner (@benjaminaigner) `__ - `Benno Pütz (@bennop) `__ @@ -281,6 +283,7 @@ Contributors - `d-rez (@d-rez) `__ - `Dale Higgs (@dale3h) `__ - `damanti-me (@damanti-me) `__ +- `Justin Grover (@dancingcactus) `__ - `Dan C Williams (@dancwilliams) `__ - `Daniel Bjørnbakk (@danibjor) `__ - `Daniel Kucera (@danielkucera) `__ @@ -512,7 +515,6 @@ Contributors - `gsexton (@gsexton) `__ - `Gabriel Sieben (@gsieben) `__ - `Jadson Santos (@gtjadsonsantos) `__ -- `guardmedia (@guardmedia) `__ - `Guillaume DELVIT (@guiguid) `__ - `guillempages (@guillempages) `__ - `Guyohms (@Guyohms) `__ @@ -540,6 +542,7 @@ Contributors - `Herr Frei (@herrfrei) `__ - `highground88 (@highground88) `__ - `hindenbugbite (@hindenbugbite) `__ +- `Henrik Fransson (@hmfhmf) `__ - `Hamish Moffatt (@hmoffatt) `__ - `Marcel Hoppe (@hobbypunk90) `__ - `Hopperpop (@Hopperpop) `__ @@ -642,8 +645,6 @@ Contributors - `jmichiel (@jmichiel) `__ - `JMoratelli (@JMoratelli) `__ - `Jonathas Barbosa (@jnthas) `__ -- `Joe Gross (@joegross) `__ -- `Johan van der Kuijl (@johanvanderkuijl) `__ - `Johboh (@Johboh) `__ - `John Britton (@johndbritton) `__ - `John Erik Halse (@johnerikhalse) `__ @@ -779,7 +780,6 @@ Contributors - `Ben Marengo (@marengaz) `__ - `Marvin Gaube (@margau) `__ - `maringeph (@maringeph) `__ -- `Mario (@mario-tux) `__ - `Mark Hildreth (@markhildreth) `__ - `Mark Schabacker (@markschabacker) `__ - `Marek Marczykowski-Górecki (@marmarek) `__ @@ -878,7 +878,6 @@ Contributors - `Nicky Ivy (@nickyivyca) `__ - `NP v/d Spek (@nielsnl68) `__ - `Niels Zeilemaker (@NielsZeilemaker) `__ -- `Joakim Vindgard (@nigobo) `__ - `nikito7 (@nikito7) `__ - `niklasweber (@niklasweber) `__ - `Zvonimir Haramustek (@nitko12) `__ @@ -974,7 +973,6 @@ Contributors - `Quinn Casey (@qcasey) `__ - `Tommy Jonsson (@quazzie) `__ - `Quentin Smith (@quentinmit) `__ -- `Johannes Rebling (@r0oland) `__ - `Richard Kuhnt (@r15ch13) `__ - `Richard Miles (@r89m) `__ - `Aaron Zhang (@rabbit-aaron) `__ @@ -1119,6 +1117,7 @@ Contributors - `testbughub (@testbughub) `__ - `Greg Lincoln (@tetious) `__ - `Terry Hardie (@thardie) `__ +- `Michael Jahn (@thatSecOpsGuy) `__ - `thatslolo (@thatslolo) `__ - `The-Paran0id-Andr0id (@The-Paran0id-Andr0id) `__ - `Thomas Eckerstorfer (@TheEggi) `__ @@ -1130,6 +1129,7 @@ Contributors - `Bart (@TheNameIsBart) `__ - `Zixuan Wang (@TheNetAdmin) `__ - `Dominik Bruhn (@theomega) `__ +- `Alan Lord (@theopensourcerer) `__ - `Brian Levinsen (@therealeldaria) `__ - `Steve Scott (@thewishy) `__ - `Florian Gareis (@TheZoker) `__ @@ -1220,7 +1220,6 @@ Contributors - `workingmanrob (@workingmanrob) `__ - `Sven Serlier (@wrt54g) `__ - `Wolfgang Tremmel (@wtremmel) `__ -- `Wvirgil123 (@Wvirgil123) `__ - `wysiwyng (@wysiwyng) `__ - `Jakob (@XDjackieXD) `__ - `Mike Brown (@xenoxaos) `__ @@ -1243,4 +1242,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated September 13, 2023.* +*This page was last updated September 21, 2023.* From 5552e167953d15894372c42d372235b944dff3cb Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 25 Sep 2023 12:10:36 +1300 Subject: [PATCH 32/39] Bump version to 2023.9.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 094ee5fa1..aec9f1aff 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.9.0b2 +PROJECT_NUMBER = 2023.9.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 1f84f74dc..785521be4 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.9.0b2 +ESPHOME_REF = 2023.9.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 2114b76ce..65633f485 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.9.0b2 \ No newline at end of file +2023.9.0b3 \ No newline at end of file diff --git a/conf.py b/conf.py index 0cb588850..f4d804d04 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.9" # The full version, including alpha/beta/rc tags. -release = "2023.9.0b2" +release = "2023.9.0b3" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 7fbea2550824b38b5bd38502879cbd75a4122fcd Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 25 Sep 2023 14:16:43 +1300 Subject: [PATCH 33/39] Update changelog for 2023.9.0b3 --- changelog/2023.9.0.rst | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/changelog/2023.9.0.rst b/changelog/2023.9.0.rst index 6d4cf328a..b09d740fb 100644 --- a/changelog/2023.9.0.rst +++ b/changelog/2023.9.0.rst @@ -22,15 +22,26 @@ ESPHome 2023.9.0 - 27th September 2023 LibreTiny --------- -LibreTiny is a platform for the RTL87xx and BK72xx family of chips. ESPHome leverages +:doc:`LibreTiny ` is a platform for the RTL87xx and BK72xx family of chips. ESPHome leverages this platform and brings the powerful yet simple YAML configuration to these chips. It has been months in the making, and many back and forwards with :ghuser:`kuba2k2` (and all of the contributors to LibreTiny), but we finally got there and merged it in. +.. |wireguard| unicode:: WireGuard 0xAE -TODO: Add more items here? +Wireguard +--------- +:doc:`WireGuard ` is a new component that allows you to connect to a |wireguard| Peer. + +LED Strips +---------- + +Following on from the previously added :doc:`/components/light/esp32_rmt_led_strip`, we now have +:doc:`SPI LED Strips `. These are replacement components for +:doc:`/components/light/neopixelbus` and :doc:`/components/light/fastled` that +do not rely on the Arduino framework. Full list of changes -------------------- @@ -69,6 +80,10 @@ Beta Changes - Make the pulse meter timeout on startup when no pulses are received :esphomepr:`5388` by :ghuser:`TrentHouliston` - Wizard: fix colored text in input prompts :esphomepr:`5313` by :ghuser:`kuba2k2` - support keypads with pulldowns :esphomepr:`5404` by :ghuser:`ssieb` +- Fix SPI inverted clock on ESP8266 :esphomepr:`5416` by :ghuser:`clydebarrow` +- [RP2040W] Fix WiFi bootloop upon LibreTiny support :esphomepr:`5414` by :ghuser:`hostcc` +- dallas: limit addresses to 64 bits :esphomepr:`5413` by :ghuser:`oddstr13` +- Bump zeroconf from 0.108.0 to 0.112.0 :esphomepr:`5392` by :ghuser:`dependabot[bot]` All changes ^^^^^^^^^^^ From cab0df355995c6f99a677392c1e3cfc2f0bbc9b7 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 25 Sep 2023 14:17:15 +1300 Subject: [PATCH 34/39] Update supporters for 2023.9.0b3 --- guides/supporters.rst | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 3fef36f96..3f39b53b8 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -170,6 +170,7 @@ Contributors - `Bill Church (@billchurch) `__ - `Brian Kaufman (@bkaufx) `__ - `JDavid (@blackhack) `__ +- `blackshoals (@blackshoals) `__ - `blacktirion (@blacktirion) `__ - `blakadder (@blakadder) `__ - `Branimir Lambov (@blambov) `__ @@ -227,6 +228,7 @@ Contributors - `Carlos Cordero (@ccorderor) `__ - `cdmonk (@cdmonk) `__ - `ceaswaran (@ceaswaran) `__ +- `Xavi (@Cebeerre) `__ - `Cellie (@CelliesProjects) `__ - `Jeppe H. (@cenobitedk) `__ - `Chris Feenstra (@cfeenstra1024) `__ @@ -328,6 +330,7 @@ Contributors - `denes44 (@denes44) `__ - `Dennis (@dennisvbussel) `__ - `dentra (@dentra) `__ +- `depasseg (@depasseg) `__ - `Davide Depau (@depau) `__ - `dependabot[bot] (@dependabot[bot]) `__ - `Joeri Colman (@depuits) `__ @@ -498,6 +501,7 @@ Contributors - `Germain Masse (@gmasse) `__ - `Garret Buell (@gmbuell) `__ - `Jelle Raaijmakers (@gmta) `__ +- `gnicolasb (@gnicolasb) `__ - `Go0oSer (@Go0oSer) `__ - `Dario Gogliandolo (@godario) `__ - `Gonzalo Paniagua Javier (@gonzalop) `__ @@ -678,6 +682,7 @@ Contributors - `kaegi (@kaegi) `__ - `kahrendt (@kahrendt) `__ - `Kamahat (@kamahat) `__ +- `Kapil Yedidi (@kapily) `__ - `Karl0ss (@karl0ss) `__ - `Kattni (@kattni) `__ - `Krzysztof Białek (@kbialek) `__ @@ -782,7 +787,6 @@ Contributors - `maringeph (@maringeph) `__ - `Mark Hildreth (@markhildreth) `__ - `Mark Schabacker (@markschabacker) `__ -- `Marek Marczykowski-Górecki (@marmarek) `__ - `marshn (@marshn) `__ - `marsjan155 (@marsjan155) `__ - `Martin (@martgras) `__ @@ -951,7 +955,6 @@ Contributors - `Peter Kuehne (@pkuehne) `__ - `Plácido Revilla (@placidorevilla) `__ - `PlainTechEnthusiast (@PlainTechEnthusiast) `__ -- `Marcus Kempe (@plopp) `__ - `Jan Pluskal (@pluskal) `__ - `DK (@poldim) `__ - `poloswiss (@poloswiss) `__ @@ -988,7 +991,6 @@ Contributors - `reddn (@reddn) `__ - `redlukas (@redlukas) `__ - `Alex (@redwngsrul) `__ -- `Refferic (@Refferic) `__ - `Regev Brody (@regevbr) `__ - `Rei Vilo (@rei-vilo) `__ - `Alex Reid (@reidprojects) `__ @@ -1207,6 +1209,7 @@ Contributors - `Wauter (@Wauter) `__ - `WeekendWarrior1 (@WeekendWarrior1) `__ - `Ian Wells (@wellsi) `__ +- `Andrew Garrett (@werdnum) `__ - `whimsee (@whimsee) `__ - `wifwucite (@wifwucite) `__ - `wilberforce (@wilberforce) `__ @@ -1242,4 +1245,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated September 21, 2023.* +*This page was last updated September 25, 2023.* From 6743425de9e8b7fce171d24d700cd59f89c5b427 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 27 Sep 2023 12:28:13 +1300 Subject: [PATCH 35/39] Bump version to 2023.9.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 aec9f1aff..93df84dfc 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.9.0b3 +PROJECT_NUMBER = 2023.9.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 785521be4..862d3acb2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.9.0b3 +ESPHOME_REF = 2023.9.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 65633f485..fa5015af8 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.9.0b3 \ No newline at end of file +2023.9.0b4 \ No newline at end of file diff --git a/conf.py b/conf.py index f4d804d04..646f47bea 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.9" # The full version, including alpha/beta/rc tags. -release = "2023.9.0b3" +release = "2023.9.0b4" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 06acdaf3a37d40f6085eeab5579efc15ca1f5ddb Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 27 Sep 2023 12:45:29 +1300 Subject: [PATCH 36/39] Update changelog for 2023.9.0b4 --- changelog/2023.9.0.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/changelog/2023.9.0.rst b/changelog/2023.9.0.rst index b09d740fb..af8e631e5 100644 --- a/changelog/2023.9.0.rst +++ b/changelog/2023.9.0.rst @@ -84,6 +84,9 @@ Beta Changes - [RP2040W] Fix WiFi bootloop upon LibreTiny support :esphomepr:`5414` by :ghuser:`hostcc` - dallas: limit addresses to 64 bits :esphomepr:`5413` by :ghuser:`oddstr13` - Bump zeroconf from 0.108.0 to 0.112.0 :esphomepr:`5392` by :ghuser:`dependabot[bot]` +- LibreTiny: enable MQTT, bump to v1.4.1 :esphomepr:`5419` by :ghuser:`kuba2k2` +- Wireguard keepalive remove uint16 type :esphomepr:`5430` by :ghuser:`glmnet` +- Fix #4896 and #4903 :esphomepr:`5433` by :ghuser:`clydebarrow` All changes ^^^^^^^^^^^ From fb83d5a2db4d7a1014dbede85ecbd7a6870fc8f8 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 27 Sep 2023 12:46:00 +1300 Subject: [PATCH 37/39] Update supporters for 2023.9.0b4 --- guides/supporters.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 3f39b53b8..fa845a740 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -548,6 +548,7 @@ Contributors - `hindenbugbite (@hindenbugbite) `__ - `Henrik Fransson (@hmfhmf) `__ - `Hamish Moffatt (@hmoffatt) `__ +- `Hobby Components (@HobbyComponents) `__ - `Marcel Hoppe (@hobbypunk90) `__ - `Hopperpop (@Hopperpop) `__ - `Ilia Sotnikov (@hostcc) `__ @@ -1245,4 +1246,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated September 25, 2023.* +*This page was last updated September 27, 2023.* From 0f5d307571a8a20c398edbbd65b1ad8f86103f16 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 27 Sep 2023 16:21:35 +1300 Subject: [PATCH 38/39] Bump version to 2023.9.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 93df84dfc..d71f8f319 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.9.0b4 +PROJECT_NUMBER = 2023.9.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 862d3acb2..baa630b96 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2023.9.0b4 +ESPHOME_REF = 2023.9.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 fa5015af8..882e30299 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.9.0b4 \ No newline at end of file +2023.9.0 \ No newline at end of file diff --git a/conf.py b/conf.py index 646f47bea..5976d9a99 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "ESPHome" # The short X.Y version. version = "2023.9" # The full version, including alpha/beta/rc tags. -release = "2023.9.0b4" +release = "2023.9.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From fbb01b2b3a9b908c7648f718c692fa88d10aad8e Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 27 Sep 2023 16:22:30 +1300 Subject: [PATCH 39/39] Update changelog for 2023.9.0 --- changelog/2023.9.0.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/changelog/2023.9.0.rst b/changelog/2023.9.0.rst index af8e631e5..22be3c1cc 100644 --- a/changelog/2023.9.0.rst +++ b/changelog/2023.9.0.rst @@ -174,6 +174,26 @@ All changes - Modbus Controller added some features :esphomepr:`5318` by :ghuser:`0x3333` - Force heater off on setup :esphomepr:`5161` by :ghuser:`rufuswilson` - Add IDF 5 test yaml, add adc to IDF tests, fix adc for IDF 5 :esphomepr:`5379` by :ghuser:`kbx81` +- Add patch to apt install :esphomepr:`5389` by :ghuser:`synesthesiam` +- Fix Waveshare 7.5v2 epaper screens are always powered on :esphomepr:`5283` by :ghuser:`phoenixswiss` +- Update radon_eye_listener.cpp :esphomepr:`5401` by :ghuser:`rmmacias` +- Add shelly-dimmer-stm32 51.7 to known versions :esphomepr:`5400` by :ghuser:`trvrnrth` +- Add E-Trailer Gaslevel support to Mopeka Std Check :esphomepr:`5397` by :ghuser:`Phhere` +- fix disabled wifi power on 8266 :esphomepr:`5409` by :ghuser:`ssieb` +- fix handling of web server version :esphomepr:`5405` by :ghuser:`ssieb` +- Climate preset fix :esphomepr:`5407` by :ghuser:`Jorre05` +- Remove Wi-Fi dependency from Midea component :esphomepr:`5394` by :ghuser:`AnthonyMaiorani` +- http_request: Cleanups and safety improvements :esphomepr:`5360` by :ghuser:`kpfleming` +- Make the pulse meter timeout on startup when no pulses are received :esphomepr:`5388` by :ghuser:`TrentHouliston` +- Wizard: fix colored text in input prompts :esphomepr:`5313` by :ghuser:`kuba2k2` +- support keypads with pulldowns :esphomepr:`5404` by :ghuser:`ssieb` +- Fix SPI inverted clock on ESP8266 :esphomepr:`5416` by :ghuser:`clydebarrow` +- [RP2040W] Fix WiFi bootloop upon LibreTiny support :esphomepr:`5414` by :ghuser:`hostcc` +- dallas: limit addresses to 64 bits :esphomepr:`5413` by :ghuser:`oddstr13` +- Bump zeroconf from 0.108.0 to 0.112.0 :esphomepr:`5392` by :ghuser:`dependabot[bot]` +- LibreTiny: enable MQTT, bump to v1.4.1 :esphomepr:`5419` by :ghuser:`kuba2k2` +- Wireguard keepalive remove uint16 type :esphomepr:`5430` by :ghuser:`glmnet` +- Fix #4896 and #4903 :esphomepr:`5433` by :ghuser:`clydebarrow` Past Changelogs ---------------