Merge pull request #1322 from esphome/bump-1.20.0

1.20.0
This commit is contained in:
Jesse Hills 2021-07-22 08:33:18 +12:00 committed by GitHub
commit 18263710ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 1791 additions and 73 deletions

View File

@ -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 = 1.19.4
PROJECT_NUMBER = 1.20.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

View File

@ -1,5 +1,5 @@
ESPHOME_PATH = ../esphome
ESPHOME_REF = v1.19.4
ESPHOME_REF = v1.20.0
.PHONY: html html-strict cleanhtml deploy help webserver Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1 +1 @@
1.19.4
1.20.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -2,7 +2,7 @@ Changelog
=========
.. redirect::
:url: /changelog/v1.19.0.html
:url: /changelog/v1.20.0.html
.. toctree::
:glob:

218
changelog/v1.20.0.rst Normal file
View File

@ -0,0 +1,218 @@
Changelog - Version 1.20.0 - 21st July 2021
===========================================
.. seo::
:description: Changelog for ESPHome version 1.20.0.
:image: /_static/changelog-1.20.0.png
:author: ESPHome
:author_twitter: @esphome_
.. imgtable::
:columns: 2
Number Core, components/number/index, folder-open.svg
Template Number, components/number/template, description.svg
Havells Inverter, components/sensor/havells_inverter, havellsgti5000d_s.jpg
Anova Cooker, components/climate/anova, anova.png
Here's to another timely release bringing a few new components and a whole bunch of changes under
the hood to existing ones.
Number Entities
---------------
Creating ``number`` entities in Home Assistant from ESPHome is now supported. This basically replaces
creating an ``input_number`` and then importing that sensor into ESPHome as a sensor with
``platform: homeassistant``. The state of the number can also be updated directly on the ESPHome device
and will be reflected in Home Assistant.
I would like to see what other platforms people can come up with for the number component,
I have a few ideas myself.
Light Changes
-------------
Unfortunately, some breaking changes had to be made:
- For addressable RGBW lights, the brightness now also applies to the white channel (this was already the case for
non-addressable RGBW lights). If you want to control only the brightness of the color channel, use the new ``color_brightness`` option.
- For RGBW lights, the white channel is no longer normalized by the color intensity in the ``light.turn_on`` and
``light.control`` actions. In previous versions, if the red value was set to 60% and the white value to 30%, this
would result in the white channel being at 50% brightness. Starting with this version, this will result in the
white channel being set to 30%, as expected.
ESPHome Dashboard
-----------------
Thanks :ghuser:`balloob` for making a small, but very significant change to the dashboard cards so now people who suffer from color-blindness
will know whether or not the node is online.
.. figure:: images/online-indicator.png
:align: center
:width: 50.0%
Nextion
-------
The Nextion component has had a major rewrite this release bringing many more features to those that use the displays.
I am not sure how to describe the changes except for listing the main change points from the PR and linking to the docs
for you to read yourself. :doc:`/components/display/nextion`
- Sensors/binary sensors/switch/text sensors and touch have all been added.
- Over the air TFT file upload
- Polling has been added to all the components
- Display on_wake/on_sleep
- Many API helpers (get_string/get_int) have been added
Full list of changes
--------------------
New Features
^^^^^^^^^^^^
- Allow WiFi AP to use device name :esphomepr:`1990` by :ghuser:`jesserockz` (new-feature)
- Add Number entities (from Home Assistant) :esphomepr:`1971` by :ghuser:`jesserockz` (new-feature) (new-integration) (notable-change)
- Nextion upload and sensors :esphomepr:`1464` by :ghuser:`SenexCrenshaw` (cherry-picked) (new-feature) (notable-change)
- Adding last_reset_type to sensors that should support it. :esphomepr:`2039` by :ghuser:`jesserockz` (cherry-picked) (new-feature)
New Components
^^^^^^^^^^^^^^
- Climate component for Ballu air conditioners with remote model YKR-K/002E :esphomepr:`1939` by :ghuser:`bazuchan` (new-integration)
- Anova ble component :esphomepr:`1752` by :ghuser:`buxtronix` (new-integration)
- Add Number entities (from Home Assistant) :esphomepr:`1971` by :ghuser:`jesserockz` (new-feature) (new-integration) (notable-change)
- Added support for havells_solar sensor :esphomepr:`1988` by :ghuser:`sourabhjaiswal` (new-integration)
Breaking Changes
^^^^^^^^^^^^^^^^
- remote_receiver use config parent receiver for registering dumpers :esphomepr:`1980` by :ghuser:`jesserockz` (breaking-change)
- Change color model to fix white channel issues :esphomepr:`1895` by :ghuser:`oxan` (breaking-change)
- Remove a whole bunch of deprecated/removed stuff :esphomepr:`1981` by :ghuser:`jesserockz` (breaking-change)
- catch 0.0 in float set_level pre-adjustment :esphomepr:`2013` by :ghuser:`WeekendWarrior1` (breaking-change)
Beta Fixes
^^^^^^^^^^
- Nextion upload and sensors :esphomepr:`1464` by :ghuser:`SenexCrenshaw` (cherry-picked) (new-feature) (notable-change)
- Fix ethernet component hostname handling :esphomepr:`2010` by :ghuser:`flacjacket` (cherry-picked)
- Refactor docker build system and workflows :esphomepr:`2023` by :ghuser:`OttoWinter` (cherry-picked)
- GH Actions CI use GHCR :esphomepr:`2027` by :ghuser:`OttoWinter` (cherry-picked)
- Dashboard disable assets caching :esphomepr:`2025` by :ghuser:`OttoWinter` (cherry-picked)
- Improve external components error messages :esphomepr:`2026` by :ghuser:`OttoWinter` (cherry-picked)
- Number and Template Number updates :esphomepr:`2036` by :ghuser:`jesserockz` (cherry-picked)
- Add restore_value to template number :esphomepr:`2041` by :ghuser:`jesserockz` (cherry-picked)
- midea_ac: Fix turbo boost mode. Preset PRESET_BOOST. :esphomepr:`2029` by :ghuser:`dudanov` (cherry-picked)
- Bump dashboard to 20210719.0 :esphomepr:`2043` by :ghuser:`balloob` (cherry-picked)
- Correct ADS1115 handling of multiple sensors in continuous mode :esphomepr:`2016` by :ghuser:`flacjacket` (cherry-picked)
- ESP32 ADC use esp-idf :esphomepr:`2024` by :ghuser:`OttoWinter` (cherry-picked)
- Fix white value transition for addressable lights :esphomepr:`2045` by :ghuser:`oxan` (cherry-picked)
- Adding last_reset_type to sensors that should support it. :esphomepr:`2039` by :ghuser:`jesserockz` (cherry-picked) (new-feature)
- Remove superfluous polling on ADS1115 :esphomepr:`2015` by :ghuser:`flacjacket` (cherry-picked)
Notable Changes
^^^^^^^^^^^^^^^
- Add Number entities (from Home Assistant) :esphomepr:`1971` by :ghuser:`jesserockz` (new-feature) (new-integration) (notable-change)
- Nextion upload and sensors :esphomepr:`1464` by :ghuser:`SenexCrenshaw` (cherry-picked) (new-feature) (notable-change)
All changes
^^^^^^^^^^^
- Update ambiguous command :esphomepr:`1889` by :ghuser:`jesserockz`
- Configure clang-format for consistent pointer alignment :esphomepr:`1890` by :ghuser:`OttoWinter`
- Activate some clang-tidy checks :esphomepr:`1884` by :ghuser:`OttoWinter`
- Avoid non-const globals and enable clang-tidy check :esphomepr:`1892` by :ghuser:`agners`
- Convert st7735.cpp to use Unix line separators :esphomepr:`1894` by :ghuser:`oxan`
- Split files in light component :esphomepr:`1893` by :ghuser:`oxan`
- Fix CI by avoiding non-const global :esphomepr:`1907` by :ghuser:`oxan`
- Adds support cpp to vscode :esphomepr:`1828` by :ghuser:`dentra`
- Support ESP8266 Arduino 3.0.0 :esphomepr:`1897` by :ghuser:`agners`
- Run script/setup in devcontainer instead of pip install :esphomepr:`1913` by :ghuser:`OttoWinter`
- Fix typo in test3.yaml :esphomepr:`1928` by :ghuser:`loongyh`
- Fix error print in script/helpers.py :esphomepr:`1935` by :ghuser:`agners`
- Add variable bit width for Samsung protocol :esphomepr:`1927` by :ghuser:`kbx81`
- Add data sizes to log message :esphomepr:`1938` by :ghuser:`jesserockz`
- Update generation script to add const :esphomepr:`1945` by :ghuser:`jesserockz`
- Bump dashboard to 20210621.0 :esphomepr:`1946` by :ghuser:`balloob`
- Improve DHT read timings :esphomepr:`1901` by :ghuser:`agners`
- More VSCode devcontainer improvements :esphomepr:`1934` by :ghuser:`agners`
- Validate color temperature values for RGBWW/CWWW lights :esphomepr:`1957` by :ghuser:`oxan`
- Fix on_multi_click min_length :esphomepr:`1960` by :ghuser:`jesserockz`
- Climate component for Ballu air conditioners with remote model YKR-K/002E :esphomepr:`1939` by :ghuser:`bazuchan` (new-integration)
- Simplify initializing glyph_data :esphomepr:`1970` by :ghuser:`gladhorn`
- Add device_class support for MQTT integration :esphomepr:`1832` by :ghuser:`definitio`
- Rename master branch to release :esphomepr:`1976` by :ghuser:`OttoWinter`
- Fix tuya fan speed send :esphomepr:`1978` by :ghuser:`trvrnrth`
- Time Based Cover: Fixed apparent race condition on ESP32 chips :esphomepr:`1984` by :ghuser:`pdoidge`
- Fix invalid escape sequences in regex (fix pytest warning) :esphomepr:`1814` by :ghuser:`oxan`
- Bump hypothesis from 5.21.0 to 5.49.0 :esphomepr:`1753` by :ghuser:`mweinelt`
- Bump pytest-mock from 3.5.1 to 3.6.1 :esphomepr:`1754` by :ghuser:`dependabot[bot]`
- hlw8012: fix constants for BL0937 :esphomepr:`1973` by :ghuser:`ianchi`
- Anova ble component :esphomepr:`1752` by :ghuser:`buxtronix` (new-integration)
- Add stepper.set_acceleration and stepper.set_deceleration to stepper component :esphomepr:`1977` by :ghuser:`WeekendWarrior1`
- remote_receiver use config parent receiver for registering dumpers :esphomepr:`1980` by :ghuser:`jesserockz` (breaking-change)
- Don't try compat parsing for "esphome version" :esphomepr:`1966` by :ghuser:`oxan`
- Change color model to fix white channel issues :esphomepr:`1895` by :ghuser:`oxan` (breaking-change)
- Allow WiFi AP to use device name :esphomepr:`1990` by :ghuser:`jesserockz` (new-feature)
- Support custom fan modes in mqtt_climate :esphomepr:`1989` by :ghuser:`mgorven`
- Bump protobuf from 3.17.0 to 3.17.3 :esphomepr:`1986` by :ghuser:`dependabot[bot]`
- Bump pytest-cov from 2.11.1 to 2.12.1 :esphomepr:`1855` by :ghuser:`dependabot[bot]`
- Bump pytest-asyncio from 0.14.0 to 0.15.1 :esphomepr:`1793` by :ghuser:`dependabot[bot]`
- Improve climate mode code docs :esphomepr:`1995` by :ghuser:`OttoWinter`
- Climate modes COOL and HEAT are auto modes :esphomepr:`1994` by :ghuser:`carstenschroeder`
- Add state callback to ota component :esphomepr:`1816` by :ghuser:`mmakaay`
- Fix deprecation message for old climate swing mode methods :esphomepr:`2003` by :ghuser:`oxan`
- Add Number entities (from Home Assistant) :esphomepr:`1971` by :ghuser:`jesserockz` (new-feature) (new-integration) (notable-change)
- Fixed lolin32 lite key :esphomepr:`2001` by :ghuser:`monkeyclass`
- Add support for IBS-TH1 External Sensor :esphomepr:`1983` by :ghuser:`MikkoTervala`
- Bang bang climate new mode meanings :esphomepr:`1996` by :ghuser:`OttoWinter`
- Sgp30 sensor improvements :esphomepr:`1510` by :ghuser:`huubeikens`
- Color brightness fixes :esphomepr:`2008` by :ghuser:`oxan`
- Bump black from 21.5b1 to 21.6b0 :esphomepr:`2011` by :ghuser:`dependabot[bot]`
- Added support for havells_solar sensor :esphomepr:`1988` by :ghuser:`sourabhjaiswal` (new-integration)
- Remove a whole bunch of deprecated/removed stuff :esphomepr:`1981` by :ghuser:`jesserockz` (breaking-change)
- catch 0.0 in float set_level pre-adjustment :esphomepr:`2013` by :ghuser:`WeekendWarrior1` (breaking-change)
- Introduce clamp as a template function :esphomepr:`1953` by :ghuser:`agners`
- [Teleinfo] do not stop parsing frame if there is only a CRC error on … :esphomepr:`1999` by :ghuser:`St4n`
- Nextion upload and sensors :esphomepr:`1464` by :ghuser:`SenexCrenshaw` (cherry-picked) (new-feature) (notable-change)
- Fix ethernet component hostname handling :esphomepr:`2010` by :ghuser:`flacjacket` (cherry-picked)
- Refactor docker build system and workflows :esphomepr:`2023` by :ghuser:`OttoWinter` (cherry-picked)
- GH Actions CI use GHCR :esphomepr:`2027` by :ghuser:`OttoWinter` (cherry-picked)
- Dashboard disable assets caching :esphomepr:`2025` by :ghuser:`OttoWinter` (cherry-picked)
- Improve external components error messages :esphomepr:`2026` by :ghuser:`OttoWinter` (cherry-picked)
- Number and Template Number updates :esphomepr:`2036` by :ghuser:`jesserockz` (cherry-picked)
- Add restore_value to template number :esphomepr:`2041` by :ghuser:`jesserockz` (cherry-picked)
- midea_ac: Fix turbo boost mode. Preset PRESET_BOOST. :esphomepr:`2029` by :ghuser:`dudanov` (cherry-picked)
- Bump dashboard to 20210719.0 :esphomepr:`2043` by :ghuser:`balloob` (cherry-picked)
- Correct ADS1115 handling of multiple sensors in continuous mode :esphomepr:`2016` by :ghuser:`flacjacket` (cherry-picked)
- ESP32 ADC use esp-idf :esphomepr:`2024` by :ghuser:`OttoWinter` (cherry-picked)
- Fix white value transition for addressable lights :esphomepr:`2045` by :ghuser:`oxan` (cherry-picked)
- Adding last_reset_type to sensors that should support it. :esphomepr:`2039` by :ghuser:`jesserockz` (cherry-picked) (new-feature)
- Remove superfluous polling on ADS1115 :esphomepr:`2015` by :ghuser:`flacjacket` (cherry-picked)
Past Changelogs
---------------
.. toctree::
:maxdepth: 1
v1.19.0
v1.18.0
v1.17.0
v1.16.0
v1.15.0
v1.14.0
v1.13.0
v1.12.0
v1.11.0
v1.10.0
v1.9.0
v1.8.0
v1.7.0

View File

@ -1,13 +1,14 @@
Nextion Touch Component
=======================
.. _nextion_binary_sensor:
Nextion Binary Sensor Component
===============================
.. seo::
:description: Instructions for setting up Nextion touch binary sensors.
:description: Instructions for setting up Nextion binary sensor.
:image: nextion.jpg
The ``nextion`` binary sensor platform lets you track when a component on the display is
touched or not. The binary sensor will turn on when the component with the given component and page id is
pressed on, and will turn off as soon as the finger is released.
The ``nextion`` binary sensor platform supports the many switched components in the Nextion as well as integer variables (>0 == True). It can be a component or variable in the Nextion display.
It is best to set the components vscope to global in the Nextion Editor. This way the component will be available if the page is shown or not.
See :doc:`/components/display/nextion` for setting up the display
@ -16,27 +17,159 @@ See :doc:`/components/display/nextion` for setting up the display
# Example configuration entry
display:
- platform: nextion
id: nextion1
# ...
binary_sensor:
- platform: nextion
page_id: 0
component_id: 2
name: "Nextion Component 2 Touch"
component_id: 8
component_name: page0.mode # Only needed to support changing colors
id: mode
- platform: nextion
id: r0_binary_sensor
name: "Radio 0 Binary Sensor"
component_name: page0.r0 # r0 is a global component in the Nextion Editor on page 0
update_interval: 4s
- platform: nextion
id: darkmode
name: "Is Darkmode Set"
variable_name: darkmode
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the binary sensor.
- **page_id** (**Required**, int): The ID of the page the component is on. Use ``0`` for the default page.
- **component_id** (**Required**, int): The ID (the number, not name!) of the component to track.
- **nextion_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the Nextion display.
- **name** (**Required**, string): The name of the sensor.
- **nextion_id** (*Optional*, :ref:`config-id`): The ID of the Nextion display.
- **component_name** (*Optional*, string): The name of the Nextion component.
- **variable_name** (*Optional*, string): The name of the Nextion variable. Any value over ``0`` is considered to be **on**
- **page_id** (*Optional*, string): The ID of the page the component is on. Use ``0`` for the default page.
- **component_id** (*Optional*, string): The ID (the number, not name!) of the component to track.
- **update_interval** (*Optional*, :ref:`config-time`): The duration to update the sensor. If using a :ref:`nextion_custom_binary_sensor_protocol` this should not be used
- **background_color** (*Optional*, :ref:`config-color`): The background color
- **background_pressed_color** (*Optional*, :ref:`config-color`): The background color when pressed
- **foreground_color** (*Optional*, :ref:`config-color`): The foreground color
- **foreground_pressed_color** (*Optional*, :ref:`config-color`): The foreground color when pressed
- **visible** (*Optional*, boolean ): Visible or not
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.
**Touch Sensor:**
The Nextion will send a **page_id** and **component_id** when the *Send Component ID* check box is selected for the component. To enable
this native event **page_id** and **component_id** are required. No :ref:`nextion_custom_binary_sensor_protocol` is required. If **page_id** and **component_id** are set then the component will only react to touch events from the Nextion. Setting **component_name** will allow setting options like forground color.
.. note::
``background_color(s)`` , ``foreground_color(s)`` and ``visible`` do not retain their state on page change. :ref:`Binary Sensor Settings <nextion_binary_sensor_settings>`.
A :ref:`Nextion Sensor <nextion_sensor>` with a custom protocol sending the current page can be used to execute the API call :ref:`Update Components By Prefix <update_components_by_prefix>` to update all the components for that page
Example:
.. code-block:: yaml
- platform: nextion
id: current_page
nextion_id: nextion1
name: current_page
variable_name: current_page
on_value:
lambda: |-
id(nextion1).update_components_by_page_prefix("page"+x+".");
See :ref:`nextion_binary_sensor_how_things_update` for additional information
Globals
*******
The Nextion does not retain data on Nextion page changes. Additionally if a page is changed and the **nextion_component_name** does not exist on that page then
nothing will be updated. To get around this the Nextion components can be changed to have a vscope of ``global``. If this is set then the **nextion_component_name**
should be prefixed with the page name (page0/page1).
*Example*
``nextion_component_name: page0.r0``
.. _nextion_binary_sensor_lambda_calls:
Lambda Calls
************
From :ref:`lambdas <config-lambda>`, you can call several methods to access some
more advanced functions (see the full :apiref:`nextion/binary_sensor/nextion_binarysensor.h` for more info).
.. _nextion_binary_sensor_set_state:
- ``set_state(bool value, bool publish, bool send_to_nextion)``: Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion.
.. _nextion_binary_sensor_update:
- ``update()``: Poll from the Nextion
.. _nextion_binary_sensor_settings:
- ``set_background_color(Color color)``: Sets the background color to **Color**
- ``set_background_pressed_color(Color color)``: Sets the background color to **Color**
- ``set_foreground_color(Color color)``: Sets the background color to **Color**
- ``set_foreground_pressed_color(Color color)``: Sets the background color to **Color**
- ``set_visible(bool visible)`` : Sets visible or not. If set to false, no updates will be sent to the component
.. _nextion_binary_sensor_how_things_update:
How things Update
-----------------
A Nextion component with an integer value (.val) or Nextion variable will be automatically polled if **update_interval** is set.
To have the Nextion send the data you can use the :ref:`nextion_custom_binary_sensor_protocol` for this. Add the :ref:`nextion_custom_binary_sensor_protocol` to the
component or function you want to trigger the send. Typically this is in *Touch Press Event* but some components, like a slider, should have it
set in the *Touch Release Event* to capture all the changes. Since this is a custom protocol it can be sent from anywhere (timers/functions/componenets)
in the Nextion.
.. note::
There is no need to check the *Send Component ID* for the *Touch Press Event* or *Touch Release Event*
for an integer value component since this will be sending the real value to esphome,
but make sure you have both checked for a touch sensor.
Using the above yaml example:
- "mode" is a touch sensor and will trigger when a user presess the component with ID ``8`` in page ``0``
- "Radio 0 Binary Sensor" will poll the Nextion for the ``r0.val`` value and set the state accordingly.
- "Is Darkmode Set" will NOT poll the Nextion. Either the Nextion will need to use the :ref:`nextion_custom_binary_sensor_protocol` or use a lambda:
- :ref:`Lambda Calls <nextion_binary_sensor_lambda_calls>`.
.. note::
No updates will be sent to the Nextion if it is sleeping. Once it wakes the components will be updated. If a component is invisible , :code:`visible(false)` , then it wont update until it is set to be visible.
.. _nextion_custom_binary_sensor_protocol:
Nextion Custom Binary Sensor Protocol
-------------------------------------
All lines are required
.. code-block:: c++
printh 93
prints "r0",0
printh 00
prints r0.val,0
printh FF FF FF
*Explanation*
- ``printh 93`` Tells the library this is a binary sensor bool/integer data
- ``prints "r0",0`` Sends the name that matches **nextion_component_name** or **nextion_variable_name**
- ``printh 00`` Sends a NULL
- ``prints r0.val,0`` The actual value to send. For a variable use the Nextion variable name ``r0`` with out ``.val``
- ``printh FF FF FF`` Nextion command ack
See Also
--------
- :doc:`/components/display/nextion`
- :doc:`index`
- :apiref:`nextion/nextion.h`
- :apiref:`nextion/binary_sensor/nextion_binarysensor.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,53 @@
Anova Cooker
=============
.. seo::
:description: Instructions for setting up an Anova sous-vide cooker.
:image: anova.png
The ``anova`` climate platform creates a climate device which can be used
to control a BLE Anova sous-vide stick. Whilst not strictly a climate
device, the concept of keeping something to a set temperature applies
equally here.
This component supports the following functionality:
- Turn the stick on or off
- Set the desired temperature
- Show the current temperature
The timer is not currently supported, you can use automations to achieve
similar functionality.
This platform uses the BLE peripheral on an ESP32, so you also need to enable
this component. Please see the BLE Client docs for how to discover the MAC
address of your Anova device.
You cannot use the Anova app over BLE whilst this component is connected, you
should disconnect it first. To setup a (dis-)connect switch, see :doc:`/components/switch/ble_client`.
.. code-block:: yaml
ble_client:
- mac_address: 11:22:33:aa:bb:cc
id: my_anova
climate:
- platform: anova
name: "My Anova stick"
ble_client_id: my_anova
Configuration variables:
------------------------
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **name** (**Required**, string): The name of the climate device.
- **ble_client_id** (**Required**, :ref:`config-id`): The ID of the BLE Client.
- All other options from :ref:`Climate <config-climate>`.
See Also
--------
- :doc:`/components/ble_client`
- :doc:`/components/climate/index`
- :apiref:`anova/anova.h`
- :ghedit:`Edit`

View File

@ -19,6 +19,8 @@ request so it will be added (see FAQ).
| Name | Platform name | Supports receiver |
| | | |
+=======================================+=====================+======================+
| Ballu | ``ballu`` | yes |
+---------------------------------------+---------------------+----------------------+
| Coolix | ``coolix`` | yes |
+---------------------------------------+---------------------+----------------------+
| Daikin | ``daikin`` | yes |
@ -157,6 +159,7 @@ See Also
- :doc:`/components/climate/index`
- :doc:`/components/remote_transmitter`
- :apiref:`ballu.h <ballu/ballu.h>`,
- :apiref:`coolix.h <coolix/coolix.h>`,
:apiref:`daikin.h <daikin/daikin.h>`
:apiref:`fujitsu_general.h <fujitsu_general/fujitsu_general.h>`,

View File

@ -17,19 +17,36 @@ with ESPHome.
As the communication with the Nextion LCD display is done using UART, you need to have an :ref:`UART bus <uart>`
in your configuration with ``rx_pin`` both the ``tx_pin`` set to the respective pins on the display.
Additionally, you need to set the baud rate to 9600.
The Nextion uses a baud rate of 9600 by default. It may be configured to use a faster speed by adding (for
example)
.. code-block:: c++
baud=115200 // Sets the baud rate to 115200
bkcmd=0 // Tells the Nextion to not send responses on commands. This is the current default but can be set just in case
to the ``program.s`` source file (in the Nextion Editor) before the ``page`` line.
This permits faster communication with the Nextion display and it is highly recommended when using :ref:`uart-hardware_uarts`. Without a hardware uart make sure to set the baud rate to 9600.
The below example configures a UART for the Nextion display to use
.. code-block:: yaml
# Example configuration entry
uart:
rx_pin: D0
tx_pin: D1
baud_rate: 9600
id: uart_2
rx_pin: GPIO16
tx_pin: GPIO17
baud_rate: 115200
display:
- platform: nextion
id: nextion1
uart_id: uart_2
lambda: |-
it.set_component_value("gauge", 50);
it.set_component_text("textview", "Hello World!");
@ -41,10 +58,17 @@ Configuration variables:
Use this if you want to use multiple UART buses at once.
- **brightness** (*Optional*, percentage): Set display brightness in %. Defaults to ``100%``
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the nextion display.
See :ref:`display-nextion_lambda` for more information.
See :ref:`display-nextion_lambda` for more information. This is typically empty. The individual components for the Nextion will handle almost all features needed for updating
- **update_interval** (*Optional*, :ref:`config-time`): The interval to call the lambda to update the display.
Defaults to ``5s``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **tft_url** (*Optional*, string): The URL to download the TFT file from for updates. See :ref:`Nextion Upload <nextion_upload_tft>`.
- **on_sleep** (*Optional*, :ref:`Action <config-action>`): An automation to perform when the Nextion goes to sleep.
- **on_wake** (*Optional*, :ref:`Action <config-action>`): An automation to perform when the Nextion wakes up.
- **touch_sleep_timeout** (*Optional*, int): Sets internal No-touch-then-sleep timer in seconds.
- **wake_up_page** (*Optional*, int): Sets the page to display after waking up
- **auto_wake_on_touch** (*Optional*, boolean): Sets if Nextion should auto-wake from sleep when touch press occurs.
.. _display-nextion_lambda:
@ -54,9 +78,9 @@ Rendering Lambda
With Nextion displays, a dedicated chip on the display itself does the whole rendering. ESPHome can only
send *instructions* to the display to tell it *how* to render something and *what* to render.
First, you need to use the `Nextion Editor <https://nextion.tech/nextion-editor/>`__ to
create a display file and insert it using the SD card slot. Then, in the rendering ``lambda``, you have 3 main methods
you can call to populate data on the display:
First, you need to use the `Nextion Editor <https://nextion.itead.cc/resources/download/nextion-editor/>`__ to
create a display file and insert it using the SD card slot. Then, in the rendering ``lambda``, you can use the various API calls
to populate data on the display:
.. code-block:: yaml
@ -74,16 +98,171 @@ you can call to populate data on the display:
// set the text of a component with formatting
it.set_component_text_printf("textview", "The uptime is: %.1f", id(uptime_sensor).state);
.. note::
Although you can use the rendering lambda most, if not all, updates to the Nextion can be handled by the individual Nextion components. **See Below**
Please see :ref:`display-printf` for a quick introduction into the ``printf`` formatting rules and
:ref:`display-strftime` for an introduction into the ``strftime`` time formatting.
Lambda Calls
************
Several methods are available for use within :ref:`lambdas <config-lambda>` ; these permit advanced functionality beyond simple
display updates. See the full :apiref:`nextion/nextion.h` for more info.
.. _nextion_upload_tft:
- ``upload_tft``: Start the upload process. See :ref:`nextion_upload_tft_file`
The developer tools in Home Assistant can be used to trigger the update. The below code block is an example on how to set this up.
.. code-block:: yaml
api:
services:
- service: update_nextion
then:
- lambda: 'id(nextion1)->upload_tft();'
.. _nextion_update_all_components:
- ``update_all_components()``: All the components will publish their states.
.. code-block:: c++
id(nextion1).update_all_components();
.. _update_components_by_prefix:
- ``update_components_by_prefix(std::string page)``: This will send the current state of any **component_name** matching the prefix. Some settings like background color need to be resent on page change. This is a good hook for that.
.. code-block:: c++
id(nextion1).update_components_by_prefix("page0.");
.. _set_nextion_sensor_state:
- ``set_nextion_sensor_state(NextionQueueType queue_type, std::string name, float state);`` : Sets the sensor state. See :ref:`Queue Types <nextion_queue_types>`
- ``set_nextion_sensor_state(int queue_type, std::string name, float state);`` : Sets the sensor state. See :ref:`Queue Types <nextion_queue_types>`
- ``set_nextion_text_state(std::string name, std::string state);`` : Sets the text sensor state
.. note::
Below is a method for HASS to send updates to the Nextion by code.
.. code-block:: yaml
# Enable Home Assistant API
api:
services:
- service: set_nextion_sensor
variables:
nextion_type: int
name: string
state: float
then:
- lambda: |-
id(nextion1).set_nextion_sensor_state(nextion_type,name,state);
- service: set_nextion_text
variables:
name: string
state: string
then:
- lambda: |-
id(nextion1).set_nextion_text_state(name,state);
.. _nextion_queue_types:
Queue Types:
- SENSOR 0
- BINARY_SENSOR 1
- SWITCH 2
- TEXT_SENSOR 3
- WAVEFORM_SENSOR 4
- NO_RESULT 5
.. _nextion_upload_tft_file:
Uploading A TFT File
--------------------
This will download the file from the tft_url and will transfer it over the UART to the Nextion.
Once completed both the ESP and Nextion will reboot. During the upload process esphome will be
unresponsive and no logging will take place. This uses the same protocol as the Nextion editor and
only updates the changes of the TFT file. If HTTPS/SSL is enabled it will be about 1kB/sec.
.. warning::
If :ref:`uart-hardware_uarts` are not available then inconsistent results WILL occur. Lowering the speed to 9600 baud may help.
To host the TFT file you can use Home Assistant itself or any other web server. HTTPS, while always recommended on any network, will greatly reduce the upload speed.
Home Assistant
**************
To host the TFT file from Home Assistant, create a www directory if it doesn't exist in your config
directory. You can create a subdirectory for those files as well.
For example if the file is located
under your configuration directory ``www/tft/default.tft`` the URL to access it will be
``http(s)://your_home_assistant_url:port/local/tft/default.tft``
NGINX
*****
`NGINX <https://www.nginx.com/>`__
The below NGINX example configuration will serve files out of the /var/www/nextion directory.
.. code-block:: nginx
server {
listen 80;
access_log /var/log/nginx/nextion_access.log;
error_log /var/log/nginx/nextion_error.log;
root /var/www/nextion;
}
Components
----------
This library supports a few different components allowing communication back and forth from HA <-> MCU <-> Nextion.
.. note::
If the Nextion is sleeping or if the component was set to be hidden, it will not update its components even if updates are sent.
After the Nextion wakes up, all components will send their states to the Nextion to get around this.
With the exception of the :doc:`../binary_sensor/nextion` that has the ``page_id``/``component_id`` options configured, the example below illustrates:
- Polling the Nextion for updates
- Dynamic updates sent from the Nextion to the ESP device
.. code-block:: yaml
sensor:
- platform: nextion
nextion_id: nextion1
name: "n0"
component_name: n0
- platform: nextion
id: current_page
name: "current_page"
variable_name: dp
update_interval: 1s
Note that the first one requires a custom protocol to be included in the Nextion display's code/configuration. See the individual components for more detail.
See Also
--------
- :doc:`index`
- :doc:`/components/binary_sensor/nextion`
- :doc:`../binary_sensor/nextion`
- :doc:`../sensor/nextion`
- :doc:`../switch/nextion`
- :doc:`../text_sensor/nextion`
- :doc:`../uart`
- :apiref:`nextion/nextion.h`
- `Simple Nextion Library <https://github.com/bborncr/nextion>`__ by `Bentley Born <https://github.com/bborncr>`__
- `Official Nextion Library <https://github.com/itead/ITEADLIB_Arduino_Nextion>`__ by `iTead <https://www.itead.cc/>`__

View File

@ -9,6 +9,7 @@ Components
cover/index
fan/index
light/index
number/index
output/index
sensor/index
switch/index

View File

@ -48,7 +48,7 @@ Configuration variables:
- **on_turn_off** (*Optional*, :ref:`Action <config-action>`): An automation to perform
when the light is turned off. See :ref:`light-on_turn_on_off_trigger`.
Additional Configuration variables for addressable lights:
Additional configuration variables for addressable lights:
- **color_correct** (*Optional*, list of float): Apply a color correction to each color channel.
This defines the maximum brightness of each channel. For example ``[100%, 50%, 100%]`` would set the
@ -129,15 +129,19 @@ Configuration variables:
- **transition_length** (*Optional*, :ref:`config-time`, :ref:`templatable <config-templatable>`): The length of the transition
if the light supports it.
- **brightness** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The brightness of the light. Must be in range
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing brightness.
``0%`` to ``100%`` or ``0.0`` to ``1.0``. This is a master brightness that applies to all channels (both color and white) of the
light. Defaults to not changing brightness.
- **color_brightness** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The brightness of the color lights. Must
be in range ``0%`` to ``100%`` or ``0.0`` to ``1.0``. Useful to control brightness of colored and white lights separately for
RGBW lights. Defaults to not changing brightness.
- **red** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The red channel of the light. Must be in range
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing red.
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing red channel.
- **green** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The green channel of the light. Must be in range
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing green channel.
- **blue** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The blue channel of the light. Must be in range
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing blue channel.
- **white** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The white channel value of RGBW lights. Must be in range
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing white value.
- **white** (*Optional*, percentage, :ref:`templatable <config-templatable>`): The brightness of the white lights. Must be in range
``0%`` to ``100%`` or ``0.0`` to ``1.0``. Defaults to not changing white channel.
- **color_temperature** (*Optional*, float, :ref:`templatable <config-templatable>`): The white color temperature value (in `mireds <https://en.wikipedia.org/wiki/Mired>`__ or Kelvin) for CWWW / RGBWW lights. Defaults to not changing the color temperature value.
- **flash_length** (*Optional*, :ref:`config-time`, :ref:`templatable <config-templatable>`): If set, will flash the given color
for this period of time and then go back to the previous state.
@ -163,7 +167,21 @@ Configuration variables:
The ``red``, ``green`` and ``blue`` values only control the color of the light, not its
brightness! If you assign ``50%`` to all RGB channels it will be interpreted as 100% on.
Only use ``brightness`` to control the brightness of the light.
Only use ``brightness`` or ``color_brightness`` to control the brightness of the light.
.. note::
The master brightness (``brightness``) and separate brightness controls for the color and
white channels (``color_brightness`` and ``white``) are multiplied together. Thus, this will
result in color at 40% brightness and white at 60% brightness:
.. code-block:: yaml
- light.turn_on:
id: light_1
brightness: 80%
color_brightness: 50%
white: 75%
.. _light-turn_off_action:
@ -295,13 +313,15 @@ Configuration variables:
- **range_to** (*Optional*, :ref:`templatable <config-templatable>`, int): The end of the
range of LEDs to control - this is a half-open interval. 0-based indexing.
Defaults to the end of the strip (``num_leds``).
- **color_brightness** (*Optional*, :ref:`templatable <config-templatable>`, percentage): The brightness to
set the color channel to.
- **red** (*Optional*, :ref:`templatable <config-templatable>`, percentage): The value to
set the red channel to.
- **green** (*Optional*, :ref:`templatable <config-templatable>`, percentage): The value to
set the green channel to.
- **blue** (*Optional*, :ref:`templatable <config-templatable>`, percentage): The value to
set the blue channel to.
- **white** (*Optional*, :ref:`templatable <config-templatable>`, percentage): The value to
- **white** (*Optional*, :ref:`templatable <config-templatable>`, percentage): The brightness to
set the white channel to.
.. _light-is_on_condition:

View File

@ -62,14 +62,14 @@ Configuration variables:
Color Interlock
***************
With some LED bulbs, setting the RGB channels to maximum whilst wanting a white light will have an undesired
hue affect. Additionally, the brightness command may not work as expected depending upon configuration,
leaving users to adjust the white component level separately. For these cases a new configration variable
has been added: color_interlock.
With some LED bulbs, it is not possible to enable the RGB leds at the same time as the white leds, or setting
the RGB channels to maximum whilst wanting a white light will have an undesired hue effect. For these cases a
configuration variable is available that prevents the RGB leds and white leds from being turned on at the same
time: ``color_interlock``.
Setting this variable to True will turn off RGB leds when white value is above 0 (or if they are to 255,255,255)
and turn off white leds if color is not set to 255,255,255. This also allows the brightness parameter to
control the intensity of the white leds.
Setting this variable to ``True`` will automatically turn off the RGB leds when the white value is non-zero, or
when the color is set to white (equal values for red, green and blue). When a different color is set, or the
color brightness is raised above 0%, the white leds are automatically turned off.
See Also
--------

188
components/number/index.rst Normal file
View File

@ -0,0 +1,188 @@
Number Component
================
.. seo::
:description: Instructions for setting up number components in ESPHome.
:image: folder-open.png
ESPHome has support for components to create a number entity. A number entity is
like a sensor that can read a value from a device, but is useful when that value
can be set by the user/frontend.
.. note::
Home Assistant Core 2021.7 or higher is required for ESPHome number entities to work.
.. _config-number:
Base Number Configuration
-------------------------
All numbers in ESPHome have a name and an optional icon.
.. code-block:: yaml
# Example number configuration
name: Livingroom Volume
# Optional variables:
icon: "mdi:volume-high"
Configuration variables:
- **name** (**Required**, string): The name for the number.
- **icon** (*Optional*, icon): Manually set the icon to use for the number in the frontend.
- **internal** (*Optional*, boolean): Mark this component as internal. Internal components will
not be exposed to the frontend (like Home Assistant). Only specifying an ``id`` without
a ``name`` will implicitly set this to true.
Automations:
- **on_value** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when a new value is published. See :ref:`number-on_value`.
- **on_value_range** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when a published value transition from outside to a range to inside. See :ref:`number-on_value_range`.
MQTT Options:
- All other options from :ref:`MQTT Component <config-mqtt-component>`.
Number Automation
-----------------
You can access the most recent state of the number in :ref:`lambdas <config-lambda>` using
``id(number_id).state``.
.. _number-on_value:
``on_value``
************
This automation will be triggered when a new value is published. In :ref:`Lambdas <config-lambda>`
you can get the value from the trigger with ``x``.
.. code-block:: yaml
number:
- platform: template
# ...
on_value:
then:
- light.turn_on:
id: light_1
red: !lambda "return x/255;"
Configuration variables: See :ref:`Automation <automation>`.
.. _number-on_value_range:
``on_value_range``
******************
With this automation you can observe if a number value passes from outside
a defined range of values to inside a range.
This trigger will only trigger when the new value is inside the range and the previous value
was outside the range. On startup, the last state before reboot is restored and if the value crossed
the boundary during the boot process, the trigger is also executed.
Define the range with ``above`` and ``below``. If only one of them is defined, the interval is half-open.
So for example ``above: 5`` with no below would mean the range from 5 to positive infinity.
.. code-block:: yaml
number:
- platform: template
# ...
on_value_range:
above: 5
below: 10
then:
- switch.turn_on: relay_1
Configuration variables:
- **above** (*Optional*, float): The minimum for the trigger.
- **below** (*Optional*, float): The maximum for the trigger.
- See :ref:`Automation <automation>`.
.. _number-in_range_condition:
``number.in_range`` Condition
*****************************
This condition passes if the state of the given number is inside a range.
Define the range with ``above`` and ``below``. If only one of them is defined, the interval is half-open.
So for example ``above: 5`` with no below would mean the range from 5 to positive infinity.
.. code-block:: yaml
# in a trigger:
on_...:
if:
condition:
number.in_range:
id: my_number
above: 50.0
then:
- script.execute: my_script
Configuration variables:
- **above** (*Optional*, float): The minimum for the condition.
- **below** (*Optional*, float): The maximum for the condition.
.. _number-set_action:
``number.set`` Action
*********************
This is an :ref:`Action <config-action>` for setting a number state.
.. code-block:: yaml
- number.set:
id: my_number
value: 42
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the number to set.
- **value** (**Required**, float, :ref:`templatable <config-templatable>`):
The value to set the number to.
.. _number-lambda_calls:
lambda calls
************
From :ref:`lambdas <config-lambda>`, you can call several methods on all numbers to do some
advanced stuff (see the full API Reference for more info).
- ``make_call()``: Set the number value.
.. code-block:: cpp
// Within lambda, push a value of 42
auto call = id(my_number).make_call();
call.set_value(42);
call.perform();
- ``.state``: Retrieve the current value of the number. Is ``NAN`` if no value has been read or set.
.. code-block:: cpp
// For example, create a custom log message when a value is received:
ESP_LOGI("main", "Value of my number: %f", id(my_number).state);
See Also
--------
- :apiref:`number/number.h`
- :ghedit:`Edit`
.. toctree::
:maxdepth: 1
:glob:
*

View File

@ -0,0 +1,57 @@
Template Number
===============
.. seo::
:description: Instructions for setting up template numbers with ESPHome.
:image: description.png
The ``template`` number platform allows you to create a number with templated values
using :ref:`lambdas <config-lambda>`.
.. code-block:: yaml
# Example configuration entry
number:
- platform: template
name: "Template number"
update_interval: never
min_value: 0
max_value: 100
step: 1
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the number.
- **min_value** (**Required**, float): The minimum value this number can be.
- **max_value** (**Required**, float): The maximum value this number can be.
- **step** (**Required**, float): The granularity with which the number can be set.
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`):
Lambda to be evaluated every update interval to get the new value of the number.
- **set_action** (*Optional*, :ref:`Action <config-action>`): The action that should
be performed when the remote (like Home Assistant's frontend) requests to set the number value.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
number. Defaults to ``60s``.
- **optimistic** (*Optional*, boolean): Whether to operate in optimistic mode - when in this mode,
any command sent to the template number will immediately update the reported state.
Cannot be used with ``lambda``. Defaults to ``false``.
- **restore_value** (*Optional*, boolean): Saves and loads the state to RTC/Flash.
Cannot be used with ``lambda``. Defaults to ``false``.
- **initial_value** (*Optional*, float): The value to set the state to on setup if not
restored with ``restore_value``.
Cannot be used with ``lambda``. Defaults to ``min_value``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- All other options from :ref:`Sensor <config-number>`.
``number.set`` Action
----------------------------------
You can also publish a state to a template number from elsewhere in your YAML file
with the :ref:`number-set_action`.
See Also
--------
- :ref:`automation`
- :apiref:`template/number/template_number.h`
- :ghedit:`Edit`

View File

@ -36,6 +36,16 @@ Configuration variables:
- **reboot_timeout** (*Optional*, :ref:`time <config-time>`): The amount of time to wait before rebooting when in
safe mode. Defaults to ``5min``.
- **num_attempts** (*Optional*, int): The number of attempts to wait before entering safe mode. Defaults to ``10``.
- **on_begin** (*Optional*, :ref:`Automation<automation>`): An action to be
performed when an OTA update is started. See :ref:`ota-on_begin`.
- **on_progress** (*Optional*, :ref:`Automation<automation>`): An action to be
performed (multiple times) during an OTA update. See :ref:`ota-on_progress`.
- **on_end** (*Optional*, :ref:`Automation<automation>`): An action to be
performed after a successful OTA update. See :ref:`ota-on_end`.
- **on_error** (*Optional*, :ref:`Automation<automation>`): An action to be
performed after a failed OTA update. See :ref:`ota-on_error`.
- **on_state_change** (*Optional*, :ref:`Automation<automation>`): An action to be
performed when an OTA update state change happens. See :ref:`ota-on_state_change`.
.. note::
@ -46,6 +56,120 @@ Configuration variables:
very likely that power-cycling the ESP module is required once after
the serial upload.
OTA Automation
--------------
The OTA component provides various automations that can be used to provide feedback
during an OTA update. There are a few things to consider when making use of the
provided automation triggers:
- An OTA update blocks the main loop during its operation. This means that you
won't be able to represent state changes using components that update their
output only from within their ``loop()`` method. Explained differently: if you
try to display the OTA progress using component X, but the update only appears
after the OTA update finished, then component X cannot be used for providing
OTA update feedback.
- Make sure that your automation actions do not take too much time, to prevent
them from blocking the OTA update code for too long.
.. _ota-on_begin:
``on_begin``
************
This automation will be triggered when an OTA update is started.
.. code-block:: yaml
ota:
on_begin:
then:
- logger.log: "OTA start"
.. _ota-on_progress:
``on_progress``
***************
Using this automation, it is possible to report on the OTA update progress.
It will be triggered multiple times during the OTA update. You can get the actual
progress percentage (a value between 0 and 100) from the trigger with variable ``x``.
.. code-block:: yaml
ota:
on_progress:
then:
- logger.log:
format: "OTA progress %0.1f%%"
args: ["x"]
.. _ota-on_end:
``on_end``
**********
This automation will be triggered when an OTA update has completed sucessfully,
right before the device is rebooted.
Because the update has completed, you can safely use an automation action that
takes some time to complete. This can for example be useful if you want to flash
a LED or so, in which case a pause would be required to make the LED light up
for long enough, before the reboot turns it off.
.. code-block:: yaml
ota:
on_end:
then:
- logger.log: "OTA end"
.. _ota-on_error:
``on_error``
************
This automation will be triggered when an OTA update has failed. You can get
the internal error code with variable ``x``.
Just like for :ref:`ota-on_end`, you can safely use an automation that
takes some time to complete, because the OTA update is no longer busy.
.. code-block:: yaml
ota:
on_error:
then:
- logger.log:
format: "OTA update error %d"
args: ["x"]
.. _ota-on_state_change:
``on_state_change``
*******************
This automation will be triggered on every state change. You can get the actual
state with variable ``state``, which will contain one of values for the OTAState
enum. These values are:
- ``ota::OTA_STARTED``
- ``ota::OTA_IN_PROGRESS`` (will be called multiple times during the update)
- ``ota::OTA_COMPLETED``
- ``ota::OTA_ERROR``
.. code-block:: yaml
ota:
on_state_change:
then:
- if:
condition:
lambda: return state == ota::OTA_STARTED
then:
- logger.log: "OTA start"
Updating the password:
----------------------

View File

@ -156,6 +156,7 @@ Remote code selection (exactly one of these has to be included):
- **samsung**: Trigger on a decoded Samsung remote code with the given data.
- **data** (**Required**, int): The data to trigger on, see dumper output for more info.
- **nbits** (*Optional*, int): The number of bits of the remote code. Defaults to ``32``.
- **samsung36**: Trigger on a decoded Samsung36 remote code with the given data.

View File

@ -197,22 +197,29 @@ Configuration variables:
**********************************************
This :ref:`action <config-action>` sends a Samsung infrared remote code to a remote transmitter.
It transmits codes up to 64 bits in length in a single packet.
.. code-block:: yaml
on_...:
- remote_transmitter.transmit_samsung:
data: 0x1FEF05E4
# additional example for 48-bit codes:
- remote_transmitter.transmit_samsung:
data: 0xB946F50A09F6
nbits: 48
Configuration variables:
- **data** (**Required**, int): The data to send, see dumper output for more details.
- **nbits** (*Optional*, int): The number of bits to send. Defaults to ``32``.
- All other options from :ref:`remote_transmitter-transmit_action`.
``remote_transmitter.transmit_samsung36`` Action
************************************************
This :ref:`action <config-action>` sends a Samsung36 infrared remote code to a remote transmitter.
It transmits the ``address`` and ``command`` in two packets separated by a "space".
.. code-block:: yaml

View File

@ -0,0 +1,184 @@
Havells Inverter
================
.. seo::
:description: Instructions for setting up Havells inverter reading on modbus.
:image: images/havellsgti5000d.jpg
:keywords: Havells Enviro, Havells GTI
The ``Havells Inverter`` sensor platform allows you to use Havells inverter data reading on modbus
(`website <https://www.havells.com/en/consumer/solar/solar-on-grid-inverter-and-solutions/solar-on-grid-inverter.html>`__)
with ESPHome.
.. figure:: images/havellsgti5000d.jpg
:align: center
:width: 50.0%
Havells On Grid Solar Inverter.
The communication with this integration is done over a :ref:`UART bus <uart>` using :ref:`Modbus <modbus>`.
You must therefore have a ``uart:`` entry in your configuration with both the TX and RX pins set
to some pins on your board and the baud rate set to 9600.
.. code-block:: yaml
# Example configuration entry
uart:
- id: uart1
baud_rate: 9600
tx_pin: GPIO1
rx_pin: GPIO3
modbus:
uart_id: uart1
flow_control_pin: GPIO4
sensor:
- platform: havells_solar
update_interval: 60s
phase_a:
voltage:
name: "HAVELLS Phase A Voltage"
current:
name: "HAVELLS Phase A Current"
phase_b:
voltage:
name: "HAVELLS Voltage Phase B"
current:
name: "HAVELLS Current Phase B"
phase_c:
voltage:
name: "HAVELLS Voltage Phase C"
current:
name: "HAVELLS Current Phase C"
pv1:
voltage:
name: "HAVELLS PV1 Voltage"
current:
name: "HAVELLS PV1 Current"
active_power:
name: "HAVELLS PV1 Active Power"
voltage_sampled_by_secondary_cpu:
name: "HAVELLS PV1 Voltage Sampled By Slave CPU"
insulation_of_p_to_ground:
name: "HAVELLS PV1 Insulation Of +VE To Ground"
pv2:
voltage:
name: "HAVELLS PV2 Voltage"
current:
name: "HAVELLS PV2 Current"
active_power:
name: "HAVELLS PV2 Active Power"
voltage_sampled_by_secondary_cpu:
name: "HAVELLS PV2 Voltage Sampled By Slave CPU"
insulation_of_p_to_ground:
name: "HAVELLS PV2 Insulation Of +VE To Ground"
active_power:
name: "HAVELLS Active Power"
reactive_power:
name: "HAVELLS Reactive Power"
frequency:
name: "HAVELLS Frequency"
energy_production_day:
name: "HAVELLS Today's Generation"
total_energy_production:
name: "HAVELLS Total Energy Production"
total_generation_time:
name: "HAVELLS Total Generation Time"
today_generation_time:
name: "HAVELLS Today Generation Time"
inverter_module_temp:
name: "HAVELLS Inverter Module Temp"
inverter_inner_temp:
name: "HAVELLS Inverter Inner Temp"
inverter_bus_voltage:
name: "HAVELLS Inverter BUS Voltage"
insulation_of_pv_n_to_ground:
name: "HAVELLS Insulation Of PV- To Ground"
gfci_value:
name: "HAVELLS GFCI Value"
dci_of_r:
name: "HAVELLS DCI Of R"
dci_of_s:
name: "HAVELLS DCI Of S"
dci_of_t:
name: "HAVELLS DCI Of T"
Configuration variables:
------------------------
- **phase_a** (*Optional*): The group of exposed sensors for Phase A/1.
- **current** (*Optional*): Use the current value of the sensor in amperes. All options from
:ref:`Sensor <config-sensor>`.
- **voltage** (*Optional*): Use the voltage value of the sensor in volts.
All options from :ref:`Sensor <config-sensor>`.
- **phase_b** (*Optional*): The group of exposed sensors for Phase B/2 on applicable inverters.
- All options from **phase_a**
- **phase_c** (*Optional*): The group of exposed sensors for Phase C/3 on applicable inverters.
- All options from **phase_a**
- **pv1** (*Optional*): The group of exposed sensors for Photo Voltaic 1.
- **current** (*Optional*): Use the current value of the sensor in amperes. All options from
:ref:`Sensor <config-sensor>`.
- **voltage** (*Optional*): Use the voltage value of the sensor in volts.
All options from :ref:`Sensor <config-sensor>`.
- **active_power** (*Optional*): Use the (active) power value of the sensor in watts. All options
from :ref:`Sensor <config-sensor>`.
- **voltage_sampled_by_secondary_cpu** (*Optional*): Use the photo voltiac's voltage sampled by
slave CPU value of the sensor in volts. All options from :ref:`Sensor <config-sensor>`.
- **insulation_of_p_to_ground** (*Optional*): Use the insulation of photo voltiac's +ve terminal to
ground value of the sensor in kilo ohms. All options from :ref:`Sensor <config-sensor>`.
- **pv2** (*Optional*): The group of exposed sensors for Photo Voltaic 2.
- All options from **pv1**
- **active_power** (*Optional*): Use the (active) power value of the sensor in watts. All options
from :ref:`Sensor <config-sensor>`.
- **reactive_power** (*Optional*): Use the reactive power value of the sensor in VAR. All
options from :ref:`Sensor <config-sensor>`.
- **frequency** (*Optional*): Use the frequency value of the sensor in hertz.
All options from :ref:`Sensor <config-sensor>`.
- **energy_production_day** (*Optional*): Use the export active energy value for same day of the
sensor in kilo watt hours. All options from :ref:`Sensor <config-sensor>`.
- **total_energy_production** (*Optional*): Use the total exported energy value of the sensor in
kilo watt hours. All options from :ref:`Sensor <config-sensor>`.
- **total_generation_time** (*Optional*): Use the total generation time value of the sensor in
hours. All options from :ref:`Sensor <config-sensor>`.
- **today_generation_time** (*Optional*): Use the day generation time value for same day of the
sensor in minutes. All options from :ref:`Sensor <config-sensor>`.
- **inverter_module_temp** (*Optional*): Use the inverter module temperature value of the sensor in
degree celcius. All options from :ref:`Sensor <config-sensor>`.
- **inverter_inner_temp** (*Optional*): Use the inverter inner temperature value of the sensor in
degree celcius. All options from :ref:`Sensor <config-sensor>`.
- **inverter_bus_voltage** (*Optional*): Use the inverter bus voltage value of the sensor in volts.
All options from :ref:`Sensor <config-sensor>`.
- **insulation_of_pv_n_to_ground** (*Optional*): Use the insulation of photo voltiacs's
-ve terminal to ground value of the sensor in kilo ohms. All options from :ref:`Sensor <config-sensor>`.
- **gfci_value** (*Optional*): Use the GFCI value of the sensor.
All options from :ref:`Sensor <config-sensor>`.
- **dci_of_r** (*Optional*): Use the DCI of R value of the sensor.
All options from :ref:`Sensor <config-sensor>`.
- **dci_of_s** (*Optional*): Use the DCI of S value of the sensor.
All options from :ref:`Sensor <config-sensor>`.
- **dci_of_t** (*Optional*): Use the DCI of T value of the sensor.
All options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``.
- **address** (*Optional*, int): The address of the sensor if multiple sensors are attached to
the same UART bus. You will need to set the address of each device manually. Defaults to ``1``.
See Also
--------
- :ref:`sensor-filters`
- :ghedit:`Edit`

View File

@ -67,6 +67,9 @@ Advanced Options:
Defaults to the Sonoff POW's value ``0.001 ohm``.
- **voltage_divider** (*Optional*, float): The value of the voltage divider on the board as ``(R_upstream + R_downstream) / R_downstream``.
Defaults to the Sonoff POW's value ``2351``.
- **model** (*Optional*, string): The sensor model on the board, to set internal constant factors to convert pulses to measurements.
Possible values are ``HLW8012``, ``CSE7759``, ``BL0937``. Defaults to ``HLW8012``.
CSE7759 uses same constants and it also works with default. Must be set for BL0937 to be able to calibrate all three measurements at the same time.
- **change_mode_every** (*Optional*, int): After how many updates to cycle between the current/voltage measurement mode.
Note that the first value after switching is discarded because it is often inaccurate. Defaults to ``8``.
- **initial_mode** (*Optional*, string): The initial measurement mode. Defaults to ``VOLTAGE``.

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -48,6 +48,9 @@ Configuration variables:
- **state_class** (*Optional*, string): The state class for the
sensor. See https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes
for a list of available options. Set to ``""`` to remove the default state class of a sensor.
- **last_reset_type** (*Optional*, string): The last reset type to use for the sensor.
Currently there is no gain in overriding this string in YAML and it should be set in the platform code.
Set to ``""`` to remove the default last reset type of a sensor.
- **icon** (*Optional*, icon): Manually set the icon to use for the sensor in the frontend. The icon set here
is ignored by Home Assistant, if a device class is already set.
- **accuracy_decimals** (*Optional*, int): Manually set the accuracy of decimals to use when reporting values.

View File

@ -1,16 +1,21 @@
Inkbird IBS-TH1 Mini BLE Sensor
===============================
Inkbird IBS-TH1 and IBS-TH1 Mini BLE Sensor
===========================================
.. seo::
:description: Instructions for setting up Inkbird IBS-TH1 Mini Bluetooth-based temperature and humidity sensors in ESPHome.
:description: Instructions for setting up Inkbird IBS-TH1 Bluetooth-based temperature and humidity sensors in ESPHome.
:image: inkbird_isbth1_mini.jpg
:keywords: Inkbird, BLE, Bluetooth, IBS-TH1
The ``inkbird_ibsth1_mini`` sensor platform lets you track the output of Inkbird IBS-TH1 Mini Bluetooth
The ``inkbird_ibsth1_mini`` sensor platform lets you track the output of Inkbird IBS-TH1 and IBS-TH1 Mini Bluetooth
Low Energy devices using the :doc:`/components/esp32_ble_tracker`. This component will track the
temperature, humidity and the battery level of the IBS-TH1 Mini device every time the
temperature, external temperature (non mini only), humidity and the battery level of the IBS-TH1 device every time the
sensor sends out a BLE broadcast. Note that contrary to other implementations, ESPHome can track as
many IBS-TH1 Mini devices at once as you want.
many IBS-TH1 devices at once as you want.
.. note::
If an external temperature sensor is connected to the IBS-TH1, measurement from the internal sensor is not sent.
Only one sensor will work at a time.
.. figure:: images/inkbird_isbth1_mini-full.jpg
:align: center
@ -31,22 +36,30 @@ many IBS-TH1 Mini devices at once as you want.
- platform: inkbird_ibsth1_mini
mac_address: 38:81:D7:0A:9C:11
temperature:
name: "Inkbird IBS-TH1 Mini Temperature"
name: "Inkbird IBS-TH1 Temperature"
external_temperature:
name: "Inkburd IBS-TH1 External Temperature"
humidity:
name: "Inkbird IBS-TH1 Mini Humidity"
name: "Inkbird IBS-TH1 Humidity"
battery_level:
name: "Inkbird IBS-TH1 Mini Battery Level"
name: "Inkbird IBS-TH1 Battery Level"
Configuration variables:
------------------------
- **mac_address** (**Required**, MAC Address): The MAC address of the Inkbird IBS-TH1 Mini device.
- **mac_address** (**Required**, MAC Address): The MAC address of the Inkbird IBS-TH1 device.
- **temperature** (*Optional*): The information for the temperature sensor.
- **name** (**Required**, string): The name for the temperature sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **external_temperature** (*Optional*): The information for the external temperature sensor.
- **name** (**Required**, string): The name for the external temperature sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **humidity** (*Optional*): The information for the humidity sensor
- **name** (**Required**, string): The name for the humidity sensor.
@ -63,7 +76,7 @@ Configuration variables:
Setting Up Devices
------------------
To set up Inkbird IBS-TH1 Mini devices you first need to find their MAC Address so that ESPHome can
To set up Inkbird IBS-TH1 devices you first need to find their MAC Address so that ESPHome can
identify them. So first, create a simple configuration without any ``inkbird_ibsth1_mini`` entries
like so:
@ -71,7 +84,7 @@ like so:
esp32_ble_tracker:
After uploading the ESP32 will immediately try to scan for BLE devices such as the Inkbird IBS-TH1 Mini.
After uploading the ESP32 will immediately try to scan for BLE devices such as the Inkbird IBS-TH1.
When it detects these sensors, it will automatically parse the BLE message print a
message like this one:
@ -82,7 +95,7 @@ message like this one:
[13:36:43][D][esp32_ble_tracker:567]: Name: 'sps'
Note that it can sometimes take some time for the first BLE broadcast to be received. Please note that address type
should say 'PUBLIC' and the device name should be 'sps', this is how you find the Inkbird IBS-TH1 Mini among all the
should say 'PUBLIC' and the device name should be 'sps', this is how you find the Inkbird IBS-TH1 among all the
other devices.
Then just copy the address (``38:81:D7:0A:9C:11``) into a new ``sensor.inkbird_ibsth1_mini`` platform
@ -90,7 +103,7 @@ entry like in the configuration example at the top.
.. note::
The ESPHome Inkbird IBS-TH1 Mini integration listens passively to packets the device sends by itself.
The ESPHome Inkbird IBS-TH1 integration listens passively to packets the device sends by itself.
ESPHome therefore has no impact on the battery life of the device.
See Also

View File

@ -0,0 +1,178 @@
.. _nextion_sensor:
Nextion Sensor Component
========================
.. seo::
:description: Instructions for setting up Nextion sensor.
:image: nextion.jpg
The ``nextion`` sensor platform supports integers or floats (Xfloat). It can be a component, a variable or a waveform in the Nextion display.
It is best to set the component's vscope to global in the Nextion Editor. This way the component will be available
if the page is shown or not.
.. note::
The Nextion can receive an integer but it can only send 3 bytes for a negative integer. The range if using the :ref:`nextion_custom_sensor_protocol` is:
-16777215 to 4294967295
See :doc:`/components/display/nextion` for setting up the display
.. code-block:: yaml
# Example configuration entry
display:
- platform: nextion
id: nextion1
# ...
sensor:
- platform: nextion
name: "Current Humidity"
component_name: humidity # pageX.humidity for a global
nextion_precision: 1
update_interval: 4s
- platform: nextion
nextion_id: nextion1
name: "Current Temperature"
variable_name: temperature
hass_component_name: sensor.temperature
- platform: nextion
id: s01
component_id: 2
wave_channel_id: 0
wave_max_value: 100
waveform_send_last_value: "true"
wave_max_length: 400
update_interval: 1s
- platform: nextion
id: s02
component_id: 2
wave_channel_id: 1
wave_max_value: 100
update_interval: 1s
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the sensor.
- **nextion_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the Nextion display.
- **component_name** (*Optional*, string): Manually specify the name of the Nextion component.
- **variable_name** (*Optional*, string): Manually specify the name of the Nextion variable.
- **update_interval** (*Optional*, :ref:`config-time`): The duration to update the sensor
- **nextion_precision** (*Optional*, uint8_t): This is for Nextion float components. This sets
the precision that the component is set to. This typically is the ``vvs1`` setting of the component.
- **background_color** (*Optional*, :ref:`config-color`): The background color
- **foreground_color** (*Optional*, :ref:`config-color`): The foreground color
- **visible** (*Optional*, boolean ): Visible or not
Waveform Settings
*****************
- **wave_channel_id** (*Optional*, uint8_t): The waveform ID in a range of 0-3
- **wave_max_value** (*Optional*, uint8_t): The max value. Set ``dis`` to the height of the component in the Nextion editor
and this to the max value that will be sent. This will set up the proper scaling.
- **waveform_send_last_value** (*Optional*, uint8_t): This will send the last value set during an update interval. Setting to true will give a timeseries style graph
- **wave_max_length** (*Optional*, int): How many data points to store. Typically this is the width of the component in the Nextion
- **update_interval** (*Optional*, :ref:`config-time`): The duration to update the sensor. This typically should be set for waveforms to send periodic updates.
- All other options from :ref:`Sensor <config-sensor>`.
**Only one** *component_name* **or** *variable_name* **can be set**
.. note::
``background_color`` , ``foreground_color`` and ``visible`` do not retain their state on page change. :ref:`Sensor Settings<nextion_sensor_settings>`.
A :ref:`Nextion Sensor <nextion_sensor>` with a custom protocol sending the current page can be used to execute the API call :ref:`Update Components By Prefix <update_components_by_prefix>` to update all the components for that page
See :ref:`nextion_sensor_how_things_update` for additional information
Globals
*******
The Nextion does not retain data on Nextion page changes. Additionally if a page is changed and the **component_name** does not exist on that page then
nothing will be updated. To get around this the Nextion components can be changed to have a vscope of ``global``. If this is set then the **component_name**
should be prefixed with the page name (page0/page1 or whatever you have changed it to).
*Example*
``component_name: page0.humidity``
.. _nextion_sensor_lambda_calls:
Lambda Calls
************
From :ref:`lambdas <config-lambda>`, you can call several methods to access
some more advanced functions (see the full :apiref:`nextion/sensor/nextion_sensor.h` for more info).
.. _nextion_sensor_set_state:
- ``set_state(bool value, bool publish, bool send_to_nextion)``: Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion.
.. _nextion_sensor_update:
- ``update()``: Poll from the Nextion
.. _nextion_sensor_settings:
- ``set_background_color(Color color)``: Sets the background color to **Color**
- ``set_foreground_color(Color color)``: Sets the background color to **Color**
- ``set_visible(bool visible)`` : Sets visible or not. If set to false, no updates will be sent to the component
.. _nextion_sensor_how_things_update:
How things Update
-----------------
A Nextion component with an integer value (.val) or Nextion variable will be automatically polled if **update_interval** is set.
To have the Nextion send the data you can use the :ref:`nextion_custom_sensor_protocol` for this. Add the :ref:`nextion_custom_sensor_protocol` to the
component or function you want to trigger the send. Typically this is in *Touch Press Event* but some components, like a slider, should have it
set in the *Touch Release Event* to capture all the changes. Since this is a custom protocol it can be sent from anywhere (timers/functions/componenets)
in the Nextion.
.. note::
There is no need to check the *Send Component ID* for the *Touch Press Event* or *Touch Release Event*
since this will be sending the real value to esphome.
Using the above yaml example:
- "Current Humidity" will poll the Nextion for the ``humidity.val`` value and set the sensor accordingly.
- "Current Temperature" will NOT poll the Nextion. Either the Nextion will need to use the :ref:`nextion_custom_sensor_protocol` or use a lambda:
- :ref:`Lambda Calls <nextion_sensor_lambda_calls>`.
.. note::
No updates will be sent to the Nextion if it is sleeping. Once it wakes, the components will be updated. If a component is invisible, :code:`visible(false)`, then it won't update until it is set to be visible.
.. _nextion_custom_sensor_protocol:
Nextion Custom Sensor Protocol
------------------------------
All lines are required
.. code-block:: c++
printh 91
prints "temperature",0
printh 00
prints temperature.val,0
printh FF FF FF
*Explanation*
- ``printh 91`` Tells the library this is a sensor (int) data
- ``prints "temperature",0`` Sends the name that matches **component_name** or **variable_name**
- ``printh 00`` Sends a NULL
- ``prints temperature.val,0`` The actual value to send. For a variable use the Nextion variable name ``temperature`` with out ``.val``
- ``printh FF FF FF`` Nextion command ack
See Also
--------
- :doc:`/components/display/nextion`
- :doc:`index`
- :apiref:`nextion/sensor/nextion_sensor.h`
- :ghedit:`Edit`

View File

@ -24,8 +24,9 @@ The :ref:`I²C Bus <i2c>` is required to be set up in your configuration for thi
tvoc:
name: "Workshop TVOC"
accuracy_decimals: 1
store_baseline: yes
address: 0x58
update_interval: 5s
update_interval: 1s
Configuration variables:
------------------------
@ -42,19 +43,34 @@ Configuration variables:
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **store_baseline** (*Optional*, boolean): Store the sensor baselines persistently when calculated or updated.
Defaults to yes.
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
Defaults to ``0x58``.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``.
sensor. Defaults to ``1s``.
Advanced:
- **baseline** (*Optional*): The block containing baselines for calibration purposes. See :ref:`sgp30-calibrating` for more info.
- **eco2_baseline** (**Required**, int): The eCO2 baseline for calibration purposes.
- **eco2_baseline** (**Required**, int): The eCO2 baseline for calibration purposes. After OTA, this value is used to calibrate the sensor.
- **tvoc_baseline** (**Required**, int): The TVOC baseline for calibration purposes.
- **tvoc_baseline** (**Required**, int): The TVOC baseline for calibration purposes. After OTA, this value is used to calibrate the sensor.
- **eco2_baseline** (*Optional*): The information for the CO₂eq. sensor baseline value. Baseline value is published in decimals.
- **name** (**Required**, string): The name for the CO₂eq baseline value sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **tvoc_baseline** (*Optional*): The information for the TVOC baseline value sensor. Baseline value is published in in decimals.
- **name** (**Required**, string): The name for the TVOC baseline value sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **compensation** (*Optional*): The block containing sensors used for compensation.
@ -69,15 +85,21 @@ Advanced:
Calibrating Baseline
--------------------
The SGP30 sensor will re-calibrate its baseline each time it is powered on. During the first power-up this can take up to 12 hours.
The SGP30 sensor will re-calibrate its baseline each time it is powered on. During the first power-up this will take up to 12 hours.
Exposing to outside air for at least 10 minutes cumulative time is advised during the calibration period.
For best performance and faster startup times, the current **baseline** needs to be persistently stored on the device before shutting it down and set again accordingly after boot up
that also means that if the sensor reboots at a time when the air is less clean than normal,
the values will have a constant offset and cannot be compared to the values before the last
boot.
For best performance and faster startup times, the current **baseline** needs to be persistently stored on the device before shutting it down and set again accordingly after boot up.
It implies that if the sensor reboots at a time when the air is less clean than normal, the values will have a constant offset and cannot be compared to the values before the last boot.
To do this, let the sensor boot up with no baseline set and let the sensor calibrate itself. After around 12 hours you can then view the remote logs on the ESP. The next
time the sensor is read out, you will see a log message with something like ``Current eCO2 baseline: 0x86C5, TVOC baseline: 0x8B38``.
Using the **store_baseline** option will automatically store the baseline values after calibration or when it is updated during operation. When booting up, the stored values will then be
(re)applied in the sensor. Stored baselines are cleared after OTA.
Another method is to manually specify the baseline values in the configuration file. To do this, let the sensor boot up with no baseline set and let the sensor calibrate itself.
After around 12 hours you can then view the remote logs on the ESP. The nexttime the sensor is read out, you will see a log message with something like
``Current eCO2 baseline: 0x86C5, TVOC baseline: 0x8B38``.
Another way to obtain the baseline values is to configure the eco2 and TVOC baseline value sensors. Values will be published to your Home Automation system.
Convert the decimal value to hex value before use (e.g. 37577 --> 0x92C9)
Now set the baseline property in your configuration file like so with the value you got
via the logs:
@ -94,8 +116,7 @@ via the logs:
The next time you upload the code, the SGP30 will be continue its operation with this baseline and you will get consistent values.
Please note that Sensirion recommends that after around 7 days, the baseline will need to be
re-calibrated because the internal sensor has a slight value drift over time.
Please note while the sensor is off, baseline values are valid for a maximum of seven days.
See Also
--------

View File

@ -0,0 +1,143 @@
.. _nextion_switch:
Nextion Switch Component
===============================
.. seo::
:description: Instructions for setting up Nextion Switch.
:image: nextion.jpg
The ``nextion`` switch platform supports the many switched components in the Nextion as well as integer variables. It can be a component or variable in the Nextion display.
It is best to set the components vscope to global in the Nextion Editor. This way the component will be available if the page is shown or not.
See :doc:`/components/display/nextion` for setting up the display
.. code-block:: yaml
# Example configuration entry
display:
- platform: nextion
id: nextion1
# ...
switch:
- platform: nextion
id: r0_switch
name: "Radio 0 Switch"
component_name: r0 # pageX.r0 for a global
update_interval: 4s
- platform: nextion
id: darkmode
name: "Is Darkmode Set"
variable_name: darkmode
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the sensor.
- **nextion_id** (*Optional*, :ref:`config-id`): The ID of the Nextion display.
- **component_name** (*Optional*, string): The name of the Nextion component.
- **variable_name** (*Optional*, string): The name of the Nextion variable. Any value over ``0`` is considerd to be **on**
- **update_interval** (*Optional*, :ref:`config-time`): The duration to update the sensor. If using a :ref:`nextion_custom_switch_protocol` this should not be used
- **background_color** (*Optional*, :ref:`config-color`): The background color
- **background_pressed_color** (*Optional*, :ref:`config-color`): The background color when pressed
- **foreground_color** (*Optional*, :ref:`config-color`): The foreground color
- **foreground_pressed_color** (*Optional*, :ref:`config-color`): The foreground color when pressed
- **visible** (*Optional*, boolean ): Visible or not
- All other options from :ref:`Switch <config-switch>`.
**Only one** *component_name* **or** *variable_name* **can be set**
See :ref:`nextion_switch_how_things_update` for additional information
Globals
*******
The Nextion does not retain data on Nextion page changes. Additionally, if a page is changed and the **component_name** does not exist on that page then
nothing will be updated. To get around this, the Nextion components can be changed to have a vscope of ``global``. If this is set then the **component_name**
should be prefixed with the page name (page0/page1 or whatever you have changed it to).
*Example*
``component_name: page0.r0``
.. _nextion_switch_lambda_calls:
Lambda Calls
************
From :ref:`lambdas <config-lambda>`, you can call several methods to access
some more advanced functions (see the full :apiref:`nextion/nextion_switch.h` for more info).
.. _nextion_switch_set_state:
- ``set_state(bool value, bool publish, bool send_to_nextion)``: Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion.
.. _nextion_switch_update:
- ``update()``: Poll from the Nextion
.. _nextion_switch_settings:
- ``set_background_color(Color color)``: Sets the background color to **Color**
- ``set_background_pressed_color(Color color)``: Sets the background color to **Color**
- ``set_foreground_color(Color color)``: Sets the background color to **Color**
- ``set_foreground_pressed_color(Color color)``: Sets the background color to **Color**
- ``set_visible(bool visible)`` : Sets visible or not. If set to false, no updates will be sent to the component
.. _nextion_switch_how_things_update:
How things Update
-----------------
A Nextion component with an integer value (.val) or Nextion variable will be automatically polled if **update_interval** is set.
To have the Nextion send the data you can use the :ref:`nextion_custom_switch_protocol` for this. Add the :ref:`nextion_custom_switch_protocol` to the
component or function you want to trigger the send. Typically this is in *Touch Press Event* but some components, like a slider, should have it
set in the *Touch Release Event* to capture all the changes. Since this is a custom protocol it can be sent from anywhere (timers/functions/componenets)
in the Nextion.
.. note::
There is no need to check the *Send Component ID* for the *Touch Press Event* or *Touch Release Event*
since this will be sending the real value to esphome.
Using the above yaml example:
- "Radio 0 switch" will poll the Nextion for the ``r0.val`` value and set the state accordingly.
- "Is Darkmode Set" will NOT poll the Nextion. Either the Nextion will need to use the :ref:`nextion_custom_switch_protocol` or use a lambda:
- :ref:`Lambda Calls <nextion_switch_lambda_calls>`.
.. note::
No updates will be sent to the Nextion if it is sleeping. Once it wakes, the components will be updated. If a component is invisible, :code:`visible(false)`, then it won't update until it is set to be visible.
.. _nextion_custom_switch_protocol:
Nextion Custom Switch Protocol
------------------------------
All lines are required
.. code-block:: c++
printh 90
prints "r0",0
printh 00
prints r0.val,0
printh FF FF FF
*Explanation*
- ``printh 90`` Tells the library this is a switch bool/integer data
- ``prints "r0",0`` Sends the name that matches **component_name** or **variable_name**
- ``printh 00`` Sends a NULL
- ``prints r0.val,0`` The actual value to send. For a variable use the Nextion variable name ``r0`` with out ``.val``
- ``printh FF FF FF`` Nextion command ack
See Also
--------
- :doc:`/components/display/nextion`
- :doc:`index`
- :apiref:`nextion/switch/nextion_switch.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,138 @@
.. _nextion_text_sensor:
Nextion Text Sensor Component
===============================
.. seo::
:description: Instructions for setting up Nextion text sensor.
:image: nextion.jpg
The ``nextion`` text sensor platform supports text strings. It can be a component or variable in the Nextion display.
It is best to set the components vscope to global in the Nextion Editor. This way the component will be available
if the page is shown or not.
See :doc:`/components/display/nextion` for setting up the display
.. code-block:: yaml
# Example configuration entry
display:
- platform: nextion
id: nextion1
# ...
text_sensor:
- platform: nextion
nextion_id: nextion1
name: text0
id: text0
update_interval: 4s
component_name: text0
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the sensor.
- **nextion_id** (*Optional*, :ref:`config-id`): The ID of the Nextion display.
- **component_name** (*Optional*, string): The name of the Nextion component.
- **variable_name** (*Optional*, string): The name of the Nextion variable. Any value over ``0`` is considerd to be **on**
- **update_interval** (*Optional*, :ref:`config-time`): The duration to update the sensor. If using a :ref:`nextion_custom_text_sensor_protocol` this should not be used
- **background_color** (*Optional*, :ref:`config-color`): The background color
- **foreground_color** (*Optional*, :ref:`config-color`): The foreground color
- **font_id** (*Optional*, uint8_t): The font id for the component
- **visible** (*Optional*, boolean ): Visible or not
- All other options from :ref:`Text Sensor <config-text_sensor>`.
**Only one** *component_name* **or** *variable_name* **can be set**
See :ref:`nextion_text_sensor_how_things_update` for additional information
Globals
*******
The Nextion does not retain data on Nextion page changes. Additionally, if a page is changed and the **component_name** does not exist on that page then
nothing will be updated. To get around this, the Nextion components can be changed to have a vscope of ``global``. If this is set, then the **component_name**
should be prefixed with the page name (page0/page1 or whatever you have changed it to).
*Example*
``component_name: page0.text0``
.. _nextion_text_sensor_lambda_calls:
Lambda Calls
************
From :ref:`lambdas <config-lambda>`, you can call several methods to access
some more advanced functions (see the full :apiref:`nextion/text_sensor/nextion_textsensor.h` for more info).
.. _nextion_text_sensor_set_state:
- ``set_state(bool value, bool publish, bool send_to_nextion)``: Set the state to **value**. Publish the new state to HASS. Send_to_Nextion is to publish the state to the Nextion.
.. _nextion_text_sensor_update:
- ``update()``: Poll from the Nextion
.. _nextion_text_sensor_settings:
- ``set_background_color(Color color)``: Sets the background color to **Color**
- ``set_foreground_color(Color color)``: Sets the background color to **Color**
- ``set_visible(bool visible)`` : Sets visible or not. If set to false, no updates will be sent to the component
.. _nextion_text_sensor_how_things_update:
How things Update
-----------------
A Nextion component with an integer value (.val) or Nextion variable will be automatically polled if **update_interval** is set.
To have the Nextion send the data you can use the :ref:`nextion_custom_text_sensor_protocol` for this. Add the :ref:`nextion_custom_text_sensor_protocol` to the
component or function you want to trigger the send. Typically this is in *Touch Press Event* but some components, like a slider, should have it
set in the *Touch Release Event* to capture all the changes. Since this is a custom protocol it can be sent from anywhere (timers/functions/componenets)
in the Nextion.
.. note::
There is no need to check the *Send Component ID* for the *Touch Press Event* or *Touch Release Event*
since this will be sending the real value to esphome.
Using the above yaml example:
- "text0" will poll the Nextion for ``text0.txt`` value and set the state accordingly.
- :ref:`Lambda Calls <nextion_text_sensor_lambda_calls>`.
.. note::
No updates will be sent to the Nextion if it is sleeping. Once it wakes, the components will be updated. If a component is invisible, :code:`visible(false)`, then it won't update until it is set to be visible.
.. _nextion_custom_text_sensor_protocol:
Nextion Custom Text Sensor Protocol
-----------------------------------
All lines are required
.. code-block:: c++
printh 92
prints "text0",0
printh 00
prints text0.txt,0
printh 00
printh FF FF FF
*Explanation*
- ``printh 92`` Tells the library this is text sensor
- ``prints "text0",0`` Sends the name that matches **component_name** or **variable_name**
- ``printh 00`` Sends a NULL
- ``prints text0.txt,0`` The actual text to send. For a variable use the Nextion variable name ``text0`` with out ``.txt``
- ``printh 00`` Sends a NULL
- ``printh FF FF FF`` Nextion command ack
See Also
--------
- :doc:`/components/display/nextion`
- :doc:`index`
- :apiref:`nextion/text_sensor/nextion_textsensor.h`
- :ghedit:`Edit`

View File

@ -51,7 +51,8 @@ Configuration variables:
- **ap** (*Optional*): Enable an access point mode on the node.
- **ssid** (**Required**, string): The name of the access point to create.
- **ssid** (*Optional*, string): The name of the access point to create. Leave empty to use
the device name.
- **password** (*Optional*, string): The password for the access point. Leave empty for
no password.
- **channel** (*Optional*, int): The channel the AP should operate on from 1 to 14.
@ -95,6 +96,20 @@ to the WiFi router can be made.
ssid: "Livingroom Fallback Hotspot"
password: "W1PBGyrokfLz"
You can also create a simple ``ap`` config which will set up the access point to have the
devices name as the ssid with no password.
.. code-block:: yaml
wifi:
ap: {}
# or if you still want the ap to have a password
wifi:
ap:
password: "W1PBGyrokfLz"
.. _wifi-manual_ip:
Manual IPs

View File

@ -67,9 +67,9 @@ author = "Otto Winter"
# built documents.
#
# The short X.Y version.
version = "1.19"
version = "1.20"
# The full version, including alpha/beta/rc tags.
release = "1.19.4"
release = "1.20.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -334,6 +334,9 @@ All Triggers
- :ref:`switch.on_turn_on/off <switch-on_turn_on_off_trigger>`
- :ref:`sim800l.on_sms_received <sim800l-on_sms_received>`
- :ref:`rf_bridge.on_code_received <rf_bridge-on_code_received>`
- :ref:`ota.on_begin <ota-on_begin>` / :ref:`ota.on_progress <ota-on_progress>` /
:ref:`ota.on_end <ota-on_end>` / :ref:`ota.on_error <ota-on_error>` /
:ref:`ota.on_state_change <ota-on_state_change>`
- :ref:`display.on_page_change <display-on_page_change-trigger>`
All Actions
@ -377,6 +380,7 @@ All Actions
- :ref:`rf_bridge.learn <rf_bridge-learn_action>`
- :ref:`ds1307.read_time <ds1307-read_time_action>` / :ref:`ds1307.write_time <ds1307-write_time_action>`
- :ref:`cs5460a.restart <cs5460a-restart_action>`
- :ref:`number.set <number-set_action>`
.. _config-condition:
@ -397,6 +401,7 @@ All Conditions
- :ref:`text_sensor.state <text_sensor-state_condition>`
- :ref:`light.is_on <light-is_on_condition>` / :ref:`light.is_off <light-is_off_condition>`
- :ref:`display.is_displaying_page <display-is_displaying_page-condition>`
- :ref:`number.in_range <number-in_range_condition>`
All Lambda Calls
----------------
@ -408,6 +413,7 @@ All Lambda Calls
- :ref:`Cover <cover-lambda_calls>`
- :ref:`Text Sensor <text_sensor-lambda_calls>`
- :ref:`Stepper <stepper-lambda_calls>`
- :ref:`Number <number-lambda_calls>`
.. _delay_action:

View File

@ -46,7 +46,7 @@ The wizard will guide you through creating your first configuration and, dependi
If you use `Microsoft Edge <https://www.microsoft.com/edge>`_ or `Google Chrome <https://www.google.com/chrome>`_, you will be able to install the initial configuration by connecting your ESP device to the computer that you're using to view the ESPHome Dashboard.
*You need to access the ESPHome Dashboard over HTTPS for this to work. This is a requirement of browsers to access your ESP device to ensure that we write the correct data.*
If you use another browser, you will have to connect the ESP devices to the machine running the ESPHome Dashboard and Home Assistant.
If the serial port is not showing up, you might not have the required drivers installed. These drivers work for most ESP devices:

View File

@ -70,6 +70,7 @@ Contributors
- `Paulus Schoutsen (@balloob) <https://github.com/balloob>`__
- `Andrew Zaborowski (@balrog-kun) <https://github.com/balrog-kun>`__
- `Rutger Nijhuis (@BananaPukeh) <https://github.com/BananaPukeh>`__
- `bazuchan (@bazuchan) <https://github.com/bazuchan>`__
- `J. Nick Koston (@bdraco) <https://github.com/bdraco>`__
- `Ben Suffolk (@bensuffolk) <https://github.com/bensuffolk>`__
- `Bierchermuesli (@Bierchermuesli) <https://github.com/Bierchermuesli>`__
@ -89,6 +90,7 @@ Contributors
- `bwente (@bwente) <https://github.com/bwente>`__
- `Carlos Gustavo Sarmiento (@carlos-sarmiento) <https://github.com/carlos-sarmiento>`__
- `Carlos Garcia Saura (@CarlosGS) <https://github.com/CarlosGS>`__
- `carstenschroeder (@carstenschroeder) <https://github.com/carstenschroeder>`__
- `cbialobos (@cbialobos) <https://github.com/cbialobos>`__
- `Ciprian Constantinescu (@cciprian5) <https://github.com/cciprian5>`__
- `Marco (@cdrfun) <https://github.com/cdrfun>`__
@ -127,6 +129,7 @@ Contributors
- `dckiller51 (@dckiller51) <https://github.com/dckiller51>`__
- `Debashish Sahu (@debsahu) <https://github.com/debsahu>`__
- `declanshanaghy (@declanshanaghy) <https://github.com/declanshanaghy>`__
- `definitio (@definitio) <https://github.com/definitio>`__
- `deftdawg (@deftdawg) <https://github.com/deftdawg>`__
- `Christiaan Blom (@Deinara) <https://github.com/Deinara>`__
- `Rsan (@deltazerorsan) <https://github.com/deltazerorsan>`__
@ -186,6 +189,7 @@ Contributors
- `C W (@fake-name) <https://github.com/fake-name>`__
- `Christian Ferbar (@ferbar) <https://github.com/ferbar>`__
- `fkirill (@fkirill) <https://github.com/fkirill>`__
- `Sean Vig (@flacjacket) <https://github.com/flacjacket>`__
- `Diego Elio Pettenò (@Flameeyes) <https://github.com/Flameeyes>`__
- `foxsam21 (@foxsam21) <https://github.com/foxsam21>`__
- `Fractal147 (@Fractal147) <https://github.com/Fractal147>`__
@ -223,6 +227,7 @@ Contributors
- `Guyohms (@Guyohms) <https://github.com/Guyohms>`__
- `h0-- (@h0--) <https://github.com/h0-->`__
- `haade (@haade-administrator) <https://github.com/haade-administrator>`__
- `Peter van Dijk (@Habbie) <https://github.com/Habbie>`__
- `Boris Hajduk (@hajdbo) <https://github.com/hajdbo>`__
- `Gavin Mogan (@halkeye) <https://github.com/halkeye>`__
- `Charles Thompson (@haryadoon) <https://github.com/haryadoon>`__
@ -232,6 +237,7 @@ Contributors
- `HepoH3 (@HepoH3) <https://github.com/HepoH3>`__
- `Hamish Moffatt (@hmoffatt) <https://github.com/hmoffatt>`__
- `MoA (@honomoa) <https://github.com/honomoa>`__
- `Huub Eikens (@huubeikens) <https://github.com/huubeikens>`__
- `Petr Urbánek (@HyperReap) <https://github.com/HyperReap>`__
- `Adrián Panella (@ianchi) <https://github.com/ianchi>`__
- `Ian Leeder (@ianleeder) <https://github.com/ianleeder>`__
@ -292,6 +298,7 @@ Contributors
- `Klarstein (@Klarstein) <https://github.com/Klarstein>`__
- `klenaers (@klenaers) <https://github.com/klenaers>`__
- `Kevin Lewis (@kll) <https://github.com/kll>`__
- `Koen Vervloesem (@koenvervloesem) <https://github.com/koenvervloesem>`__
- `korellas (@korellas) <https://github.com/korellas>`__
- `Kevin Pelzel (@kpelzel) <https://github.com/kpelzel>`__
- `Karl Q. (@kquinsland) <https://github.com/kquinsland>`__
@ -330,6 +337,7 @@ Contributors
- `Major Péter (@majorpeter) <https://github.com/majorpeter>`__
- `Manuel Díez (@manutenfruits) <https://github.com/manutenfruits>`__
- `Marcel van der Veldt (@marcelveldt) <https://github.com/marcelveldt>`__
- `Marc (@MarcHagen) <https://github.com/MarcHagen>`__
- `Marc Teale (@marcteale) <https://github.com/marcteale>`__
- `marecabo (@marecabo) <https://github.com/marecabo>`__
- `Marvin Gaube (@margau) <https://github.com/margau>`__
@ -351,9 +359,11 @@ Contributors
- `MeIchthys (@meichthys) <https://github.com/meichthys>`__
- `meijerwynand (@meijerwynand) <https://github.com/meijerwynand>`__
- `Marco (@Melkor82) <https://github.com/Melkor82>`__
- `Michael Gorven (@mgorven) <https://github.com/mgorven>`__
- `mhentschke (@mhentschke) <https://github.com/mhentschke>`__
- `micw (@micw) <https://github.com/micw>`__
- `Pauline Middelink (@middelink) <https://github.com/middelink>`__
- `Mikko Tervala (@MikkoTervala) <https://github.com/MikkoTervala>`__
- `mikosoft83 (@mikosoft83) <https://github.com/mikosoft83>`__
- `Minideezel (@minideezel) <https://github.com/minideezel>`__
- `mipa87 (@mipa87) <https://github.com/mipa87>`__
@ -367,6 +377,7 @@ Contributors
- `mnaz (@mnaz) <https://github.com/mnaz>`__
- `Michael Nieß (@mniess) <https://github.com/mniess>`__
- `Matt N. (@mnoorenberghe) <https://github.com/mnoorenberghe>`__
- `monkeyclass (@monkeyclass) <https://github.com/monkeyclass>`__
- `Moritz Glöckl (@moritzgloeckl) <https://github.com/moritzgloeckl>`__
- `Matthew Pettitt (@mpettitt) <https://github.com/mpettitt>`__
- `Ryan Matthews (@mrrsm) <https://github.com/mrrsm>`__
@ -374,6 +385,7 @@ Contributors
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__
- `Murilo (@murilobaliego) <https://github.com/murilobaliego>`__
- `Michiel van Turnhout (@mvturnho) <https://github.com/mvturnho>`__
- `Martin Weinelt (@mweinelt) <https://github.com/mweinelt>`__
- `Mynasru (@Mynasru) <https://github.com/Mynasru>`__
- `Niels Ulrik Andersen (@myplacedk) <https://github.com/myplacedk>`__
- `Kevin Uhlir (@n0bel) <https://github.com/n0bel>`__
@ -414,6 +426,7 @@ Contributors
- `Paul Deen (@PaulAntonDeen) <https://github.com/PaulAntonDeen>`__
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__
- `Bartłomiej Biernacki (@pax0r) <https://github.com/pax0r>`__
- `Paul Doidge (@pdoidge) <https://github.com/pdoidge>`__
- `peq123 (@peq123) <https://github.com/peq123>`__
- `per1234 (@per1234) <https://github.com/per1234>`__
- `perjury (@perjury) <https://github.com/perjury>`__
@ -433,6 +446,7 @@ Contributors
- `Peter Tatrai (@ptatrai) <https://github.com/ptatrai>`__
- `Leandro Puerari (@puerari) <https://github.com/puerari>`__
- `puuu (@puuu) <https://github.com/puuu>`__
- `Karol Zlot (@qqgg231) <https://github.com/qqgg231>`__
- `Tommy Jonsson (@quazzie) <https://github.com/quazzie>`__
- `Quinn Hosler (@quinnhosler) <https://github.com/quinnhosler>`__
- `r-jordan (@r-jordan) <https://github.com/r-jordan>`__
@ -493,6 +507,7 @@ Contributors
- `Stephen Tierney (@sjtrny) <https://github.com/sjtrny>`__
- `Niklas Wagner (@Skaronator) <https://github.com/Skaronator>`__
- `Luca Zimmermann (@soundstorm) <https://github.com/soundstorm>`__
- `Sourabh Jaiswal (@sourabhjaiswal) <https://github.com/sourabhjaiswal>`__
- `Philip Allgaier (@spacegaier) <https://github.com/spacegaier>`__
- `spattinson (@spattinson) <https://github.com/spattinson>`__
- `spilin (@spilin) <https://github.com/spilin>`__
@ -501,6 +516,7 @@ Contributors
- `sredfern (@sredfern) <https://github.com/sredfern>`__
- `srg74 (@srg74) <https://github.com/srg74>`__
- `Samuel Sieb (@ssieb) <https://github.com/ssieb>`__
- `St4n (@St4n) <https://github.com/St4n>`__
- `starwolf73 (@starwolf73) <https://github.com/starwolf73>`__
- `Steve Baxter (@stevebaxter) <https://github.com/stevebaxter>`__
- `stubs12 (@stubs12) <https://github.com/stubs12>`__
@ -592,4 +608,4 @@ Contributors
- `San (@zhujunsan) <https://github.com/zhujunsan>`__
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
*This page was last updated June 24, 2021.*
*This page was last updated July 22, 2021.*

BIN
images/anova.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -174,6 +174,7 @@ Sensor Components
Duty Cycle, components/sensor/duty_cycle, percent.svg
ESP32 Hall Sensor, components/sensor/esp32_hall, magnet.svg
EZO sensor circuits, components/sensor/ezo, ezo-ph-circuit.png
Havells Inverter, components/sensor/havells_inverter, havellsgti5000d_s.jpg
HDC1080, components/sensor/hdc1080, hdc1080.jpg
HLW8012, components/sensor/hlw8012, hlw8012.svg
HMC5883L, components/sensor/hmc5883l, hmc5883l.jpg
@ -197,6 +198,7 @@ Sensor Components
MPU6050, components/sensor/mpu6050, mpu6050.jpg
MQTT Subscribe, components/sensor/mqtt_subscribe, mqtt.png
MS5611, components/sensor/ms5611, ms5611.jpg
Nextion, components/sensor/nextion, nextion.jpg
NTC Thermistor, components/sensor/ntc, ntc.jpg
PMSX003, components/sensor/pmsx003, pmsx003.svg
Pulse Counter, components/sensor/pulse_counter, pulse.svg
@ -257,7 +259,7 @@ Binary Sensor Components
ESP32 BLE Presence, components/binary_sensor/ble_presence, bluetooth.svg
ESP32 Touch Pad, components/binary_sensor/esp32_touch, touch.svg
MPR121 Capacitive Touch Sensor, components/binary_sensor/mpr121, mpr121.jpg
Nextion Touch, components/binary_sensor/nextion, nextion.jpg
Nextion Binary Sensor, components/binary_sensor/nextion, nextion.jpg
Template Binary Sensor, components/binary_sensor/template, description.svg
PN532, components/binary_sensor/pn532, pn532.jpg
RC522, components/binary_sensor/rc522, rc522.jpg
@ -329,6 +331,7 @@ Switch Components
Custom Switch, components/switch/custom, language-cpp.svg
Tuya Switch, components/switch/tuya, tuya.png
BLE Client Switch, components/switch/ble_client, bluetooth.svg
Nextion Switch, components/switch/nextion, nextion.jpg
Fan Components
--------------
@ -389,6 +392,8 @@ Text Sensor Components
BLE Scanner, components/text_sensor/ble_scanner, bluetooth.svg
Template Text Sensor, components/text_sensor/template, description.svg
Custom Text Sensor, components/text_sensor/custom, language-cpp.svg
Custom UART Text Sensor, components/text_sensor/uart, language-cpp.svg
Nextion Text Sensor, components/text_sensor/nextion, nextion.jpg
Climate Components
------------------
@ -403,6 +408,15 @@ Climate Components
IR Remote Climate, components/climate/ir_climate, air-conditioner-ir.svg
Tuya Climate, components/climate/tuya, tuya.png
Midea Air Conditioner, components/climate/midea_ac, midea.svg
Anova Cooker, components/climate/anova, anova.png
Number Components
-----------------
.. imgtable::
Number Core, components/number/index, folder-open.svg
Template Number, components/number/template, description.svg
Misc Components
---------------