Merge pull request #3453 from esphome/bump-2023.12.0b1

2023.12.0b1
This commit is contained in:
Jesse Hills 2023-12-14 09:01:04 +09:00 committed by GitHub
commit 7fc5131a58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
61 changed files with 2197 additions and 80 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 = 2023.11.6
PROJECT_NUMBER = 2023.12.0b1
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -1 +1 @@
2023.11.6
2023.12.0b1

217
changelog/2023.12.0.rst Normal file
View File

@ -0,0 +1,217 @@
ESPHome 2023.12.0 - 20th December 2023
======================================
.. seo::
:description: Changelog for ESPHome 2023.12.0.
:image: /_static/changelog-2023.12.0.png
:author: Jesse Hills
:author_twitter: @jesserockz
.. imgtable::
:columns: 3
ENS160, components/sensor/ens160, ens160.jpg, CO2 & Air Quality
GT911, components/touchscreen/gt911, esp32_s3_box_3.png
Pylontech Batteries, components/pylontech, pylontech.jpg
HE60R Cover, components/cover/he60r, he60r.jpg
Graphical Display Menu, components/display_menu/graphical_display_menu, graphical_display_menu.jpg
FT63X6, components/touchscreen/ft63x6, wt32-sc01.png
A02YYUW, components/sensor/a02yyuw, a02yyuw.jpg
PN7150, components/binary_sensor/pn7150, pn7150.jpg
PN716X, components/binary_sensor/pn7160, pn716x.jpg
Full list of changes
--------------------
New Components
^^^^^^^^^^^^^^
- Add ENS160 Sensor :esphomepr:`4243` by :ghuser:`vincentscode` (new-integration)
- Create GT911 Touchscreen component :esphomepr:`4027` by :ghuser:`jesserockz` (new-integration)
- Pylontech integration (solar battery bank) :esphomepr:`4688` by :ghuser:`functionpointer` (new-integration)
- Add Chamberlain/HomEntry HE60R garage door opener :esphomepr:`5834` by :ghuser:`clydebarrow` (new-integration)
- Add graphical display menu :esphomepr:`4105` by :ghuser:`MrMDavidson` (new-integration)
- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration)
- Added the A02YYUW distance sensor :esphomepr:`5729` by :ghuser:`TH-Braemer` (new-integration)
- Add support for PN7160 :esphomepr:`5486` by :ghuser:`kbx81` (new-integration)
- Add support for PN7150 :esphomepr:`5487` by :ghuser:`kbx81` (new-integration)
Breaking Changes
^^^^^^^^^^^^^^^^
- Add proper support for SH1107 to SSD1306 component :esphomepr:`5166` by :ghuser:`nikitakuklev` (breaking-change)
- sen5x fix temperature compensation and gas tuning :esphomepr:`4901` by :ghuser:`matt7aylor` (breaking-change)
- Ensure names containing characters other than `a-z` `A-Z` `0-9` or `_` are unique :esphomepr:`5810` by :ghuser:`bdraco` (breaking-change)
- mcp3008: Tidy up and fix auto load bug :esphomepr:`5842` by :ghuser:`jesserockz` (breaking-change)
- Nextion colors parameters :esphomepr:`5699` by :ghuser:`edwardtfn` (breaking-change)
- Checks for pins used in multiple places :esphomepr:`5666` by :ghuser:`clydebarrow` (breaking-change)
All changes
^^^^^^^^^^^
- Nextion support to `esp-idf` :esphomepr:`5667` by :ghuser:`edwardtfn`
- fix pin range for xl9535 :esphomepr:`5722` by :ghuser:`ssieb`
- Bump black from 23.10.1 to 23.11.0 :esphomepr:`5702` by :ghuser:`dependabot[bot]`
- Speed up YAML by using YAML C loader when available :esphomepr:`5721` by :ghuser:`bdraco`
- Bump Arduino Pico Framework to 3.6.0 and Platform to 1.10.0 :esphomepr:`5731` by :ghuser:`HeMan`
- Correct url for Arduino platform :esphomepr:`5744` by :ghuser:`HeMan`
- remote_base: added helper class and schemas :esphomepr:`5169` by :ghuser:`dudanov`
- Bump zeroconf from 0.123.0 to 0.126.0 :esphomepr:`5748` by :ghuser:`dependabot[bot]`
- Make precommit checks happy :esphomepr:`5751` by :ghuser:`HeMan`
- dashboard: Use mdns cache when available if device connection is OTA :esphomepr:`5724` by :ghuser:`bdraco`
- Speed up OTAs :esphomepr:`5720` by :ghuser:`bdraco`
- dashboard: convert ping thread to use asyncio :esphomepr:`5749` by :ghuser:`bdraco`
- dashboard: Break apart dashboard into separate modules :esphomepr:`5764` by :ghuser:`bdraco`
- dashboard: split dashboard web server code into its own module :esphomepr:`5770` by :ghuser:`bdraco`
- Bump zeroconf from 0.126.0 to 0.127.0 :esphomepr:`5768` by :ghuser:`dependabot[bot]`
- dashboard: fix subprocesses blocking the event loop :esphomepr:`5772` by :ghuser:`bdraco`
- dashboard: use fastest available yaml loader in the dashboard :esphomepr:`5771` by :ghuser:`bdraco`
- dashboard: Centralize dashboard entries into DashboardEntries class :esphomepr:`5774` by :ghuser:`bdraco`
- Pass the name to the log runner when available :esphomepr:`5759` by :ghuser:`bdraco`
- Add proper support for SH1107 to SSD1306 component :esphomepr:`5166` by :ghuser:`nikitakuklev` (breaking-change)
- Split release workflow jobs per system arch :esphomepr:`5723` by :ghuser:`jesserockz`
- Bump aioesphomeapi to 18.5.3 :esphomepr:`5785` by :ghuser:`bdraco`
- Refactor log api client to let aioesphomeapi manage zeroconf :esphomepr:`5783` by :ghuser:`bdraco`
- dashboard: Add support for firing events :esphomepr:`5775` by :ghuser:`bdraco`
- dashboard: Ensure disk I/O happens in the executor :esphomepr:`5789` by :ghuser:`bdraco`
- dashboard: Add lookup by name to entries :esphomepr:`5790` by :ghuser:`bdraco`
- Refactor StorageJSON to keep loaded_integrations a set until its converted to JSON :esphomepr:`5793` by :ghuser:`bdraco`
- wifi: Don't build SoftAP/DHCPS support unless 'ap' is in config. :esphomepr:`5649` by :ghuser:`kpfleming`
- ssd1306: handle V_COM differently for SH1106 :esphomepr:`5796` by :ghuser:`papillon81`
- Bump aioesphomeapi from 18.5.3 to 18.5.5 :esphomepr:`5804` by :ghuser:`dependabot[bot]`
- dashboard: Fix online status when api is disabled :esphomepr:`5792` by :ghuser:`bdraco`
- Haier component updated to support new protocol variations :esphomepr:`5713` by :ghuser:`paveldn`
- sen5x fix temperature compensation and gas tuning :esphomepr:`4901` by :ghuser:`matt7aylor` (breaking-change)
- Add startup_delay to interval. :esphomepr:`5327` by :ghuser:`clydebarrow`
- Pillow: bump to 10.1.0 :esphomepr:`5815` by :ghuser:`hostcc`
- dashboard: set nodelay on the websocket to avoid a delay seeing log messages :esphomepr:`5802` by :ghuser:`bdraco`
- Bump aioesphomeapi from 18.5.5 to 18.5.7 :esphomepr:`5822` by :ghuser:`dependabot[bot]`
- Ensure names containing characters other than `a-z` `A-Z` `0-9` or `_` are unique :esphomepr:`5810` by :ghuser:`bdraco` (breaking-change)
- Add ENS160 Sensor :esphomepr:`4243` by :ghuser:`vincentscode` (new-integration)
- Bump actions/github-script from 6.4.1 to 7.0.1 :esphomepr:`5803` by :ghuser:`dependabot[bot]`
- Run all tests when local testing. :esphomepr:`5717` by :ghuser:`Fabian-Schmidt`
- Bump aioesphomeapi from 18.5.7 to 18.5.9 :esphomepr:`5830` by :ghuser:`dependabot[bot]`
- Allow split uart pin inversion for ESP-IDF :esphomepr:`5831` by :ghuser:`clydebarrow`
- Add `is_detected()` for Nextion displays :esphomepr:`5825` by :ghuser:`edwardtfn`
- Pull PollingComponent up from individual display drivers to Display. :esphomepr:`5444` by :ghuser:`clydebarrow`
- Implement variable length single word SPI writes. :esphomepr:`5678` by :ghuser:`clydebarrow`
- Add 'enable_on_boot' feature to power_supply :esphomepr:`5826` by :ghuser:`clydebarrow`
- mcp3008: Tidy up and fix auto load bug :esphomepr:`5842` by :ghuser:`jesserockz` (breaking-change)
- Create GT911 Touchscreen component :esphomepr:`4027` by :ghuser:`jesserockz` (new-integration)
- Bump aioesphomeapi from 18.5.9 to 19.1.2 :esphomepr:`5844` by :ghuser:`dependabot[bot]`
- Nextion - Standardizing log messages :esphomepr:`5837` by :ghuser:`edwardtfn`
- dashboard: Small cleanups to dashboard :esphomepr:`5841` by :ghuser:`bdraco`
- Pylontech integration (solar battery bank) :esphomepr:`4688` by :ghuser:`functionpointer` (new-integration)
- Implement deep sleep and clear screen on Waveshare 7.5in B V3 :esphomepr:`5239` by :ghuser:`lucasprim`
- Fix ESP-IDF uart initialisation sequence to match Espressif docs. :esphomepr:`5838` by :ghuser:`clydebarrow`
- Nextion - Align strings on `dump_config` :esphomepr:`5824` by :ghuser:`edwardtfn`
- Speed up (and fix) ili9xxx display component. :esphomepr:`5406` by :ghuser:`clydebarrow`
- Fix regex for 'byte' custom CI check :esphomepr:`5851` by :ghuser:`jesserockz`
- Pass through additional arguments to create number :esphomepr:`5849` by :ghuser:`clydebarrow`
- Nextion `on_touch` trigger :esphomepr:`5833` by :ghuser:`edwardtfn`
- Nextion colors parameters :esphomepr:`5699` by :ghuser:`edwardtfn` (breaking-change)
- dashboard: fix supervisor auth doing I/O in the event loop :esphomepr:`5807` by :ghuser:`bdraco`
- Improve reliability of Nextion TFT uploads (Arduino) :esphomepr:`5683` by :ghuser:`edwardtfn`
- Add Pro Check Universal sensor support. :esphomepr:`5798` by :ghuser:`spbrogan`
- Bump aioesphomeapi from 19.1.2 to 19.1.7 :esphomepr:`5859` by :ghuser:`dependabot[bot]`
- Pn532 non blocking scan :esphomepr:`5191` by :ghuser:`sharkydog`
- Add Chamberlain/HomEntry HE60R garage door opener :esphomepr:`5834` by :ghuser:`clydebarrow` (new-integration)
- Bump aioesphomeapi from 19.1.7 to 19.2.1 :esphomepr:`5863` by :ghuser:`dependabot[bot]`
- Bump tornado from 6.3.3 to 6.4 :esphomepr:`5862` by :ghuser:`dependabot[bot]`
- add missing ifdef to pvvx_mithermometer :esphomepr:`5880` by :ghuser:`ssieb`
- Fix un-initialized version string :esphomepr:`5865` by :ghuser:`descipher`
- fix a01nyub data reading :esphomepr:`5882` by :ghuser:`ssieb`
- Bump pytest-asyncio from 0.21.1 to 0.23.2 :esphomepr:`5888` by :ghuser:`dependabot[bot]`
- Bump zeroconf from 0.127.0 to 0.128.0 :esphomepr:`5889` by :ghuser:`dependabot[bot]`
- Bump pylint from 2.17.6 to 3.0.2 :esphomepr:`5592` by :ghuser:`dependabot[bot]`
- Bump voluptuous from 0.13.1 to 0.14.1 :esphomepr:`5784` by :ghuser:`dependabot[bot]`
- Security improvement: Support wifi ap_timeout=0s (disable) :esphomepr:`5887` by :ghuser:`fornellas`
- Suppress full config output of "esphome config" when -q option is used. :esphomepr:`5852` by :ghuser:`clydebarrow`
- Checks for pins used in multiple places :esphomepr:`5666` by :ghuser:`clydebarrow` (breaking-change)
- Nextion support to idf with `cinttypes` :esphomepr:`5876` by :ghuser:`edwardtfn`
- Fix test4.yaml after #5666 :esphomepr:`5890` by :ghuser:`kbx81`
- Fix template text component length check :esphomepr:`5881` by :ghuser:`fornellas`
- RC522 - Fix error counter error :esphomepr:`5873` by :ghuser:`kbx81`
- feat(packages): support removing components :esphomepr:`5821` by :ghuser:`TMaYaD`
- dashboard: Add some basic tests for the dashboard :esphomepr:`5870` by :ghuser:`bdraco`
- Nextion exit reparse mode on startup :esphomepr:`5868` by :ghuser:`edwardtfn`
- Bump aioesphomeapi from 19.2.1 to 19.3.0 :esphomepr:`5895` by :ghuser:`dependabot[bot]`
- Add framework info to Nextion log tags :esphomepr:`5864` by :ghuser:`edwardtfn`
- Handle case where using enetity level name: None with MQTT :esphomepr:`5897` by :ghuser:`mtl010957`
- Bump actions/setup-python from 4.7.1 to 5.0.0 :esphomepr:`5896` by :ghuser:`dependabot[bot]`
- Bump zeroconf from 0.128.0 to 0.128.4 :esphomepr:`5906` by :ghuser:`dependabot[bot]`
- Fix 18 bit displays. :esphomepr:`5908` by :ghuser:`clydebarrow`
- fix RGBW Mode on RP2040 :esphomepr:`5907` by :ghuser:`firegore`
- Add graphical display menu :esphomepr:`4105` by :ghuser:`MrMDavidson` (new-integration)
- Added on_image callback to ESP32 Cam :esphomepr:`4860` by :ghuser:`freekode`
- Bump actions/stale from 8.0.0 to 9.0.0 :esphomepr:`5899` by :ghuser:`dependabot[bot]`
- Bump pylint from 3.0.2 to 3.0.3 :esphomepr:`5905` by :ghuser:`dependabot[bot]`
- Bump frenck/action-yamllint from 1.4.1 to 1.4.2 :esphomepr:`5716` by :ghuser:`dependabot[bot]`
- Bump dessant/lock-threads from 4.0.1 to 5.0.1 :esphomepr:`5820` by :ghuser:`dependabot[bot]`
- Add support for fan preset modes :esphomepr:`5694` by :ghuser:`mill1000`
- Fix uninitialized climate target temperature :esphomepr:`5795` by :ghuser:`ckoca`
- Bump aioesphomeapi from 19.3.0 to 20.0.0 :esphomepr:`5911` by :ghuser:`dependabot[bot]`
- Bump black from 23.11.0 to 23.12.0 :esphomepr:`5912` by :ghuser:`dependabot[bot]`
- Updating the touchscreen interface structure :esphomepr:`4596` by :ghuser:`nielsnl68` (new-integration)
- Added the A02YYUW distance sensor :esphomepr:`5729` by :ghuser:`TH-Braemer` (new-integration)
- Fix AHT10 / AHT20 communication :esphomepr:`5198` by :ghuser:`flaminggoat`
- Fix crash when handling pin_check error :esphomepr:`5915` by :ghuser:`clydebarrow`
- Bump aioesphomeapi to 20.1.0 :esphomepr:`5914` by :ghuser:`bdraco`
- Remove setpoint-change from error when calculating derivative in pid controller :esphomepr:`4737` by :ghuser:`Newspaperman57`
- ir_transmitter: add support for repeated commands in NEC protocol :esphomepr:`4995` by :ghuser:`ngilles`
- BP1658CJ - Fix timing for all platforms, now consistent with other drivers :esphomepr:`5799` by :ghuser:`Cossid`
- Add humidity support to climate :esphomepr:`5732` by :ghuser:`kroimon`
- Remove lingering note :esphomepr:`5916` by :ghuser:`jesserockz`
- Fix typo added in esp32 post_build filename :esphomepr:`5918` by :ghuser:`jesserockz`
- Copy esp32 custom partition files to build folder :esphomepr:`5919` by :ghuser:`jesserockz`
- UART change at runtime :esphomepr:`5909` by :ghuser:`edwardtfn`
- Bump aioesphomeapi from 20.1.0 to 21.0.0 :esphomepr:`5922` by :ghuser:`dependabot[bot]`
- Fix the initial run of lambda light effects :esphomepr:`5921` by :ghuser:`smithjacobj`
- Exposes `load_settings` to `UARTComponent` class :esphomepr:`5920` by :ghuser:`edwardtfn`
- Add support for PN7160 :esphomepr:`5486` by :ghuser:`kbx81` (new-integration)
- Add support for PN7150 :esphomepr:`5487` by :ghuser:`kbx81` (new-integration)
Past Changelogs
---------------
- :doc:`2023.11.0`
- :doc:`2023.10.0`
- :doc:`2023.9.0`
- :doc:`2023.8.0`
- :doc:`2023.7.0`
- :doc:`2023.6.0`
- :doc:`2023.5.0`
- :doc:`2023.4.0`
- :doc:`2023.3.0`
- :doc:`2023.2.0`
- :doc:`2022.12.0`
- :doc:`2022.11.0`
- :doc:`2022.10.0`
- :doc:`2022.9.0`
- :doc:`2022.8.0`
- :doc:`2022.6.0`
- :doc:`2022.5.0`
- :doc:`2022.4.0`
- :doc:`2022.3.0`
- :doc:`2022.2.0`
- :doc:`2022.1.0`
- :doc:`2021.12.0`
- :doc:`2021.11.0`
- :doc:`2021.10.0`
- :doc:`2021.9.0`
- :doc:`2021.8.0`
- :doc:`v1.20.0`
- :doc:`v1.19.0`
- :doc:`v1.18.0`
- :doc:`v1.17.0`
- :doc:`v1.16.0`
- :doc:`v1.15.0`
- :doc:`v1.14.0`
- :doc:`v1.13.0`
- :doc:`v1.12.0`
- :doc:`v1.11.0`
- :doc:`v1.10.0`
- :doc:`v1.9.0`
- :doc:`v1.8.0`
- :doc:`v1.7.0`

View File

@ -2,7 +2,7 @@ Changelog
=========
.. redirect::
:url: /changelog/2023.11.0.html
:url: /changelog/2023.12.0.html
.. toctree::
:glob:

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

View File

@ -0,0 +1,379 @@
PN7150 NFC
==========
.. seo::
:description: Instructions for setting up PN7150 NFC tag readers and tags in ESPHome
:image: pn7150.jpg
:keywords: PN7150, NFC, RFID
.. _pn7150-component:
Component/Hub
-------------
The ``pn7150`` component allows you to use PN7150 NFC controllers with ESPHome. This component is a global hub that
establishes a connection to the PN7150 via :ref:`I²C <i2c>`.
.. figure:: images/pn7150-full.jpg
:align: center
:width: 70.0%
An :ref:`I²C <i2c>` bus must be defined within your device's ESPHome configuration to use the PN7150.
ESPHome supports both card/tag reading/writing as well as card/tag emulation with this component. By default,
only read/write mode is enabled; card/tag emulation is enabled only if the ``emulation_message`` configuration
variable is defined (see below). Regardless, reader/writer (polling) mode and card/tag emulation mode may be
independently enabled and disabled by using the corresponding :ref:`pn7150-actions` (see below).
.. code-block:: yaml
pn7150_i2c:
dwl_req_pin: 17
irq_pin: 35
ven_pin: 16
wkup_req_pin: 21
emulation_message: https://www.home-assistant.io/tag/pulse_ce
tag_ttl: 1000ms
Configuration variables:
************************
- **dwl_req_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7150's
``DWL_REQ`` line. Used to invoke the PN7150's firmware update mode; may be used in a future release.
- **irq_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7150's ``IRQ`` line.
- **ven_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7150's ``VEN`` line.
- **wkup_req_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7150's
``WKUP_REQ`` line. May be used to improve power management in a future release.
- **emulation_message** (*Optional*, string): When scanned by another NFC card/tag reader (such as a smartphone), this
string is used as the content for an NDEF-formatted response. This allows the PN7150 to act as a tag in addition to a
tag reader/writer.
- **tag_ttl** (*Optional*, :ref:`config-time`): The duration that must elapse after the PN7150 is no longer able to
"see" a tag before it is considered to have been removed from the reader.
- **on_tag** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a tag is first read. See
:ref:`pn7150-on_tag`.
- **on_tag_removed** (*Optional*, :ref:`Automation <automation>`): An automation to perform after a tag is removed. See
:ref:`pn7150-on_tag_removed`.
- **on_emulated_tag_scan** (*Optional*, :ref:`Automation <automation>`): An automation to perform when the PN7150 is
scanned by another tag reader (such as a smartphone). See :ref:`pn7150-on_emulated_tag_scan`.
- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component <i2c>` if you need
to use multiple I²C buses.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
.. _pn7150-actions:
Actions
-------
.. _pn7150-set_clean_mode:
``tag.set_clean_mode`` Action
*****************************
Use this action to invoke "clean mode" -- the next tag presented to the PN7150 will be "cleaned", removing all data
from the tag.
.. code-block:: yaml
on_...:
then:
- tag.set_clean_mode: my_pn7150_id
.. _pn7150-set_format_mode:
``tag.set_format_mode`` Action
******************************
Use this action to invoke "format mode" -- the next tag presented to the PN7150 will be "formatted", leaving only an
empty NDEF message structure on the tag.
.. code-block:: yaml
on_...:
then:
- tag.set_format_mode: my_pn7150_id
.. _pn7150-set_read_mode:
``tag.set_read_mode`` Action
****************************
Use this action to invoke "read mode" -- the next tag presented to the PN7150 will be read. This is the default mode
that the component operates in.
.. code-block:: yaml
on_...:
then:
- tag.set_read_mode: my_pn7150_id
.. _pn7150-set_write_message:
``tag.set_write_message`` Action
********************************
Use this action to set the NDEF message used for "write mode" (see below).
.. code-block:: yaml
on_...:
then:
- tag.set_write_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false
- **message** (**Required**, string, templatable): The string to include in the tag's first NDEF record; typically
a URL as shown.
- **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android
operating systems. Defaults to ``true``.
.. _pn7150-set_write_mode:
``tag.set_write_mode`` Action
*****************************
Use this action to invoke "write mode" -- the next tag presented to the PN7150 will have its NDEF message set to the
message defined by the ``tag.set_write_message`` action (see above). **Note that a message must be set before this mode
may be invoked.**
.. code-block:: yaml
on_...:
then:
- tag.set_write_mode: my_pn7150_id
.. _pn7150-set_emulation_message:
``tag.set_emulation_message`` Action
************************************
Use this action to set the NDEF message used for card (tag) emulation mode, when enabled (see below).
.. code-block:: yaml
on_...:
then:
- tag.set_emulation_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false
- **message** (**Required**, string, templatable): The string to include in the (emulated) tag's first NDEF record;
typically a URL as shown.
- **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android
operating systems. Defaults to ``true``.
.. _pn7150-emulation_off:
``tag.emulation_off`` Action
****************************
Use this action to disable card (tag) emulation mode. The PN7150 will no longer respond to requests from other readers,
such as smartphones.
.. code-block:: yaml
on_...:
then:
- tag.emulation_off: my_pn7150_id
.. _pn7150-emulation_on:
``tag.emulation_on`` Action
***************************
Use this action to enable card (tag) emulation mode. The PN7150 will respond to requests from other readers, such as
smartphones.
**Note:** when card/tag emulation is enabled, polling (detecting a nearby card/tag) frequency is decreased; this
typically results in slightly slower detection of cards/tags presented to the PN7150. This behavior is normal and should
be expected; it is the result of the PN7150 toggling between polling and listening modes to support both functions.
.. code-block:: yaml
on_...:
then:
- tag.emulation_on: my_pn7150_id
.. _pn7150-polling_off:
``tag.polling_off`` Action
****************************
Use this action to disable card (tag) reading/writing. The PN7150 will no longer read or write cards/tags.
.. code-block:: yaml
on_...:
then:
- tag.polling_off: my_pn7150_id
.. _pn7150-polling_on:
``tag.polling_on`` Action
***************************
Use this action to enable card (tag) reading/writing. The PN7150 will read or write cards/tags.
.. code-block:: yaml
on_...:
then:
- tag.polling_on: my_pn7150_id
Triggers
--------
.. _pn7150-on_tag:
``on_tag`` Trigger
******************
This automation will be triggered immediately after the PN7150 module identifies a tag and reads its NDEF
message (if one is present).
The parameter ``x`` this trigger provides is of type ``std::string`` and is the tag UID in the format
``74-10-37-94``. The example configuration below will publish the tag ID on the MQTT topic ``pn7150/tag``.
See :ref:`pn7150-ndef_reading` below for how to use the second ``tag`` parameter that is provided to this trigger.
.. code-block:: yaml
pn7150_i2c:
# ...
on_tag:
then:
- mqtt.publish:
topic: pn7150/tag
payload: !lambda 'return x;'
A tag scanned event can also be sent to the Home Assistant tag component
using :ref:`api-homeassistant_tag_scanned_action`.
.. code-block:: yaml
pn7150_i2c:
# ...
on_tag:
then:
- homeassistant.tag_scanned: !lambda 'return x;'
You could also send the value to Home Assistant via a :doc:`template sensor </components/sensor/template>`:
.. code-block:: yaml
pn7150_i2c:
# ...
on_tag:
then:
- text_sensor.template.publish:
id: nfc_tag
state: !lambda 'return x;'
text_sensor:
- platform: template
name: "NFC Tag"
id: nfc_tag
.. _pn7150-on_tag_removed:
``on_tag_removed`` Trigger
**************************
This automation will be triggered after the ``tag_ttl`` interval (see above) when the PN7150 no longer "sees" a
previously scanned tag.
The parameter ``x`` this trigger provides is of type ``std::string`` and is the removed tag UID in the format
``74-10-37-94``. The example configuration below will publish the removed tag ID on the MQTT topic ``pn7150/tag_removed``.
.. code-block:: yaml
pn7150_i2c:
# ...
on_tag_removed:
then:
- mqtt.publish:
topic: pn7150/tag_removed
payload: !lambda 'return x;'
.. _pn7150-on_emulated_tag_scan:
``on_emulated_tag_scan`` Trigger
********************************
If card/tag emulation is enabled, this automation will be triggered when another reader (such as a smartphone) scans
the PN7150 and reads the NDEF message it responds with. No parameters are available to this action because data is only
sent *from* the PN7150 *to* the scanning device.
.. code-block:: yaml
pn7150_i2c:
# ...
on_emulated_tag_scan:
then:
- rtttl.play: "alert:d=32,o=5,b=160:e6,p,e6,p,e6"
.. _pn7150-ndef:
NDEF
====
The PN7150 supports reading NDEF messages from and writing NDEF messages to cards/tags.
.. _pn7150-ndef_reading:
NDEF Reading
------------
Given an NFC tag formatted and written using the Home Assistant Companion App, the following example will send the tag
ID contained within its NDEF message to Home Assistant using the :ref:`api-homeassistant_tag_scanned_action`.
If no NDEF record is found with a tag ID, the tag's UID will be sent to Home Assistant, instead.
The ``tag`` variable is available to any actions that run within the ``on_tag`` and ``on_tag_removed`` triggers.
.. code-block:: yaml
pn7150_i2c:
# ...
on_tag:
then:
- homeassistant.tag_scanned: !lambda "return tag.has_ha_tag_id() ? tag.get_ha_tag_id() : x;"
.. _pn7150-ndef_writing:
NDEF Writing
------------
The examples below illustrate how NDEF messages may be written to cards/tags via the PN7150. Note that a
:doc:`button </components/button/index>` is a great mechanism to use to trigger these actions.
The first example will write a simple, fixed NDEF message to a tag.
.. code-block:: yaml
on_...
then:
- tag.set_write_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false # optional
- tag.set_write_mode: my_pn7150_id
The next example can be used to write a (pseudo) random UUID to a tag in the same manner as the Home Assistant
Companion App.
.. code-block:: yaml
on_...
then:
- tag.set_write_message:
message: !lambda "return nfc::get_random_ha_tag_ndef();"
- tag.set_write_mode: my_pn7150_id
See Also
--------
- :doc:`index`
- :doc:`pn532`
- :doc:`rc522`
- :doc:`rdm6300`
- :apiref:`pn7150/pn7150.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,437 @@
PN7160 NFC
==========
.. seo::
:description: Instructions for setting up PN7160 NFC tag readers and tags in ESPHome
:image: pn716x.jpg
:keywords: PN7160, NFC, RFID
.. _pn7160-component:
Component/Hub
-------------
The ``pn7160`` component allows you to use PN7160 NFC controllers with ESPHome. This component is a global hub that
establishes a connection to the PN7160 via :ref:`SPI <spi>` or :ref:`I²C <i2c>`.
.. figure:: images/pn716x-full.jpg
:align: center
:width: 70.0%
Within ESPHome, the PN7160 can be configured to use either the SPI **or** I²C protocol for data communication.
Note that there are different versions of the IC for each bus type, each with a different part number; in other
words, **the bus type cannot be changed by jumpers/switches as it is determed at the time of manufacture.**
You must determine which version of the IC you have and then configure the corresponding bus -- either the
:ref:`SPI bus <spi>` or the :ref:`I²C bus <i2c>`.
ESPHome supports both card/tag reading/writing as well as card/tag emulation with this component. By default,
only read/write mode is enabled; card/tag emulation is enabled only if the ``emulation_message`` configuration
variable is defined (see below). Regardless, reader/writer (polling) mode and card/tag emulation mode may be
independently enabled and disabled by using the corresponding :ref:`pn7160-actions` (see below).
.. _pn7160-spi:
Over SPI
--------
The ``pn7160_spi`` component allows you to use :ref:`SPI-equipped <spi>` PN7160 NFC controllers with with ESPHome.
.. code-block:: yaml
pn7160_spi:
cs_pin: 15
dwl_req_pin: 17
irq_pin: 35
ven_pin: 16
wkup_req_pin: 21
emulation_message: https://www.home-assistant.io/tag/pulse_ce
tag_ttl: 1000ms
Configuration variables:
************************
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's ``NSS`` (chip
select) line.
- **dwl_req_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's
``DWL_REQ`` line. Used to invoke the PN7160's firmware update mode; may be used in a future release.
- **irq_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's ``IRQ`` line.
- **ven_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's ``VEN`` line.
- **wkup_req_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's
``WKUP_REQ`` line. May be used to improve power management in a future release.
- **emulation_message** (*Optional*, string): When scanned by another NFC card/tag reader (such as a smartphone), this
string is used as the content for an NDEF-formatted response. This allows the PN7160 to act as a tag in addition to a
tag reader/writer.
- **tag_ttl** (*Optional*, :ref:`config-time`): The duration that must elapse after the PN7160 is no longer able to
"see" a tag before it is considered to have been removed from the reader.
- **on_tag** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a tag is first read. See
:ref:`pn7160-on_tag`.
- **on_tag_removed** (*Optional*, :ref:`Automation <automation>`): An automation to perform after a tag is removed. See
:ref:`pn7160-on_tag_removed`.
- **on_emulated_tag_scan** (*Optional*, :ref:`Automation <automation>`): An automation to perform when the PN7160 is
scanned by another tag reader (such as a smartphone). See :ref:`pn7160-on_emulated_tag_scan`.
- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component <spi>` if you want
to use multiple SPI buses.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
.. _pn7160-i2c:
Over I²C
--------
The ``pn7160_i2c`` component allows you to use :ref:`I²C-equipped <i2c>` PN7160 NFC controllers with ESPHome.
.. code-block:: yaml
pn7160_i2c:
dwl_req_pin: 17
irq_pin: 35
ven_pin: 16
wkup_req_pin: 21
emulation_message: https://www.home-assistant.io/tag/pulse_ce
tag_ttl: 1000ms
Configuration variables:
************************
- **dwl_req_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's
``DWL_REQ`` line. Used to invoke the PN7160's firmware update mode; may be used in a future release.
- **irq_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's ``IRQ`` line.
- **ven_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's ``VEN`` line.
- **wkup_req_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The pin connected to the PN7160's
``WKUP_REQ`` line. May be used to improve power management in a future release.
- **emulation_message** (*Optional*, string): When scanned by another NFC card/tag reader (such as a smartphone), this
string is used as the content for an NDEF-formatted response. This allows the PN7160 to act as a tag in addition to a
tag reader/writer.
- **tag_ttl** (*Optional*, :ref:`config-time`): The duration that must elapse after the PN7160 is no longer able to
"see" a tag before it is considered to have been removed from the reader.
- **on_tag** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a tag is first read. See
:ref:`pn7160-on_tag`.
- **on_tag_removed** (*Optional*, :ref:`Automation <automation>`): An automation to perform after a tag is removed. See
:ref:`pn7160-on_tag_removed`.
- **on_emulated_tag_scan** (*Optional*, :ref:`Automation <automation>`): An automation to perform when the PN7160 is
scanned by another tag reader (such as a smartphone). See :ref:`pn7160-on_emulated_tag_scan`.
- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component <i2c>` if you need
to use multiple I²C buses.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this component.
.. _pn7160-actions:
Actions
-------
.. _pn7160-set_clean_mode:
``tag.set_clean_mode`` Action
*****************************
Use this action to invoke "clean mode" -- the next tag presented to the PN7160 will be "cleaned", removing all data
from the tag.
.. code-block:: yaml
on_...:
then:
- tag.set_clean_mode: my_pn7160_id
.. _pn7160-set_format_mode:
``tag.set_format_mode`` Action
******************************
Use this action to invoke "format mode" -- the next tag presented to the PN7160 will be "formatted", leaving only an
empty NDEF message structure on the tag.
.. code-block:: yaml
on_...:
then:
- tag.set_format_mode: my_pn7160_id
.. _pn7160-set_read_mode:
``tag.set_read_mode`` Action
****************************
Use this action to invoke "read mode" -- the next tag presented to the PN7160 will be read. This is the default mode
that the component operates in.
.. code-block:: yaml
on_...:
then:
- tag.set_read_mode: my_pn7160_id
.. _pn7160-set_write_message:
``tag.set_write_message`` Action
********************************
Use this action to set the NDEF message used for "write mode" (see below).
.. code-block:: yaml
on_...:
then:
- tag.set_write_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false
- **message** (**Required**, string, templatable): The string to include in the tag's first NDEF record; typically
a URL as shown.
- **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android
operating systems. Defaults to ``true``.
.. _pn7160-set_write_mode:
``tag.set_write_mode`` Action
*****************************
Use this action to invoke "write mode" -- the next tag presented to the PN7160 will have its NDEF message set to the
message defined by the ``tag.set_write_message`` action (see above). **Note that a message must be set before this mode
may be invoked.**
.. code-block:: yaml
on_...:
then:
- tag.set_write_mode: my_pn7160_id
.. _pn7160-set_emulation_message:
``tag.set_emulation_message`` Action
************************************
Use this action to set the NDEF message used for card (tag) emulation mode, when enabled (see below).
.. code-block:: yaml
on_...:
then:
- tag.set_emulation_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false
- **message** (**Required**, string, templatable): The string to include in the (emulated) tag's first NDEF record;
typically a URL as shown.
- **include_android_app_record** (*Optional*, boolean): Include a second NDEF record required for some Android
operating systems. Defaults to ``true``.
.. _pn7160-emulation_off:
``tag.emulation_off`` Action
****************************
Use this action to disable card (tag) emulation mode. The PN7160 will no longer respond to requests from other readers,
such as smartphones.
.. code-block:: yaml
on_...:
then:
- tag.emulation_off: my_pn7160_id
.. _pn7160-emulation_on:
``tag.emulation_on`` Action
***************************
Use this action to enable card (tag) emulation mode. The PN7160 will respond to requests from other readers, such as
smartphones.
**Note:** when card/tag emulation is enabled, polling (detecting a nearby card/tag) frequency is decreased; this
typically results in slightly slower detection of cards/tags presented to the PN7160. This behavior is normal and should
be expected; it is the result of the PN7160 toggling between polling and listening modes to support both functions.
.. code-block:: yaml
on_...:
then:
- tag.emulation_on: my_pn7160_id
.. _pn7160-polling_off:
``tag.polling_off`` Action
****************************
Use this action to disable card (tag) reading/writing. The PN7160 will no longer read or write cards/tags.
.. code-block:: yaml
on_...:
then:
- tag.polling_off: my_pn7160_id
.. _pn7160-polling_on:
``tag.polling_on`` Action
***************************
Use this action to enable card (tag) reading/writing. The PN7160 will read or write cards/tags.
.. code-block:: yaml
on_...:
then:
- tag.polling_on: my_pn7160_id
Triggers
--------
.. _pn7160-on_tag:
``on_tag`` Trigger
******************
This automation will be triggered immediately after the PN7160 module identifies a tag and reads its NDEF
message (if one is present).
The parameter ``x`` this trigger provides is of type ``std::string`` and is the tag UID in the format
``74-10-37-94``. The example configuration below will publish the tag ID on the MQTT topic ``pn7160/tag``.
See :ref:`pn7160-ndef_reading` below for how to use the second ``tag`` parameter that is provided to this trigger.
.. code-block:: yaml
pn7160_...:
# ...
on_tag:
then:
- mqtt.publish:
topic: pn7160/tag
payload: !lambda 'return x;'
A tag scanned event can also be sent to the Home Assistant tag component
using :ref:`api-homeassistant_tag_scanned_action`.
.. code-block:: yaml
pn7160_...:
# ...
on_tag:
then:
- homeassistant.tag_scanned: !lambda 'return x;'
You could also send the value to Home Assistant via a :doc:`template sensor </components/sensor/template>`:
.. code-block:: yaml
pn7160_...:
# ...
on_tag:
then:
- text_sensor.template.publish:
id: nfc_tag
state: !lambda 'return x;'
text_sensor:
- platform: template
name: "NFC Tag"
id: nfc_tag
.. _pn7160-on_tag_removed:
``on_tag_removed`` Trigger
**************************
This automation will be triggered after the ``tag_ttl`` interval (see above) when the PN7160 no longer "sees" a
previously scanned tag.
The parameter ``x`` this trigger provides is of type ``std::string`` and is the removed tag UID in the format
``74-10-37-94``. The example configuration below will publish the removed tag ID on the MQTT topic ``pn7160/tag_removed``.
.. code-block:: yaml
pn7160_...:
# ...
on_tag_removed:
then:
- mqtt.publish:
topic: pn7160/tag_removed
payload: !lambda 'return x;'
.. _pn7160-on_emulated_tag_scan:
``on_emulated_tag_scan`` Trigger
********************************
If card/tag emulation is enabled, this automation will be triggered when another reader (such as a smartphone) scans
the PN7160 and reads the NDEF message it responds with. No parameters are available to this action because data is only
sent *from* the PN7160 *to* the scanning device.
.. code-block:: yaml
pn7160_...:
# ...
on_emulated_tag_scan:
then:
- rtttl.play: "alert:d=32,o=5,b=160:e6,p,e6,p,e6"
.. _pn7160-ndef:
NDEF
====
The PN7160 supports reading NDEF messages from and writing NDEF messages to cards/tags.
.. _pn7160-ndef_reading:
NDEF Reading
------------
Given an NFC tag formatted and written using the Home Assistant Companion App, the following example will send the tag
ID contained within its NDEF message to Home Assistant using the :ref:`api-homeassistant_tag_scanned_action`.
If no NDEF record is found with a tag ID, the tag's UID will be sent to Home Assistant, instead.
The ``tag`` variable is available to any actions that run within the ``on_tag`` and ``on_tag_removed`` triggers.
.. code-block:: yaml
pn7160_...:
# ...
on_tag:
then:
- homeassistant.tag_scanned: !lambda "return tag.has_ha_tag_id() ? tag.get_ha_tag_id() : x;"
.. _pn7160-ndef_writing:
NDEF Writing
------------
The examples below illustrate how NDEF messages may be written to cards/tags via the PN7160. Note that a
:doc:`button </components/button/index>` is a great mechanism to use to trigger these actions.
The first example will write a simple, fixed NDEF message to a tag.
.. code-block:: yaml
on_...
then:
- tag.set_write_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false # optional
- tag.set_write_mode: my_pn7160_id
The next example can be used to write a (pseudo) random UUID to a tag in the same manner as the Home Assistant
Companion App.
.. code-block:: yaml
on_...
then:
- tag.set_write_message:
message: !lambda "return nfc::get_random_ha_tag_ndef();"
- tag.set_write_mode: my_pn7160_id
See Also
--------
- :doc:`index`
- :doc:`pn532`
- :doc:`rc522`
- :doc:`rdm6300`
- :apiref:`pn7160/pn7160.h`
- :ghedit:`Edit`

View File

@ -70,6 +70,8 @@ Configuration variables:
------------------------
- **sensor** (**Required**, :ref:`config-id`): The sensor that is used to measure the current temperature.
- **humidity_sensor** (**Optional**, :ref:`config-id`): If specified, this sensor is used to measure the current humidity.
This is used for information only and does not influence temperature control.
- **default_target_temperature_low** (**Required**, float): The default low target temperature for
the control algorithm. This can be dynamically set in the frontend later.
- **default_target_temperature_high** (**Required**, float): The default high target temperature for

View File

@ -106,7 +106,10 @@ Configuration variables:
- **protocol** (*Optional*, string): Defines protocol of communication with AC. Possible values: hon or smartair2. Default value is smartair2.
- **name** (**Required**, string): The name of the climate device.
- **wifi_signal** (*Optional*, boolean): If true - send wifi signal level to AC.
- **answer_timeout** (*Optional*, :ref:`config-time`): Responce timeout. Default value is 150ms.
- **answer_timeout** (*Optional*, :ref:`config-time`): Responce timeout. Default value is 200ms.
- **alternative_swing_control** (*Optional*, boolean): (supported by smartAir2 only) If true - use alternative values to control swing mode. Use only if the original control method is not working for your AC.
- **control_packet_size** (*Optional*, int): (supported only by hOn) Define the size of the control packet. Can help with some newer models of ACs that use bigger packets. Default value: 10.
- **control_method** (*Optional*, list): (supported only by hOn) Defines control method (should be supported by AC). Supported values: MONITOR_ONLY - no control, just monitor status, SET_GROUP_PARAMETERS - set all AC parameters with one command (default method), SET_SINGLE_PARAMETER - set each parameter individually (this method is supported by some new ceiling ACs like AD71S2SM3FA)
- **display** (*Optional*, boolean): Can be used to set AC display off.
- **beeper** (*Optional*, boolean): Can be used to disable beeping on commands from AC. Supported only by hOn protocol.
- **outdoor_temperature** (*Optional*): Temperature sensor for outdoor temperature. Supported only by hOn protocol.

View File

@ -15,6 +15,10 @@ and can be put in different modes like ``HEAT``, ``COOL``, ``HEAT_COOL`` or ``OF
Climate Device UI in Home Assistant.
.. note::
Not all climate components support all possible features. Check the corresponding documentation page for details on what is supported.
.. _config-climate:
Base Climate Configuration
@ -30,6 +34,15 @@ All climate platforms in ESPHome inherit from the climate configuration schema.
min_temperature: 18
max_temperature: 25
temperature_step: 0.1
min_humidity: 30%
max_humidity: 99%
- platform: ...
visual:
min_temperature: 18
max_temperature: 25
temperature_step:
target_temperature: 0.5
current_temperature: 0.1
Configuration variables:
@ -55,6 +68,11 @@ Configuration variables:
- **target_temperature** (**Required**, float): The granularity for target temperature
- **current_temperature** (**Required**, float): The granularity for current temperature
- **min_humidity** (*Optional*, percentage): The minimum humidity the climate device can reach.
Used to set the range of the frontend gauge.
- **max_humidity** (*Optional*, percentage): The maximum humidity the climate device can reach.
Used to set the range of the frontend gauge.
Advanced options:
- **internal** (*Optional*, boolean): Mark this component as internal. Internal components will
@ -74,6 +92,8 @@ MQTT options:
climate device action changes to.
- **current_temperature_state_topic** (*Optional*, string): The topic to publish
current temperature changes to.
- **current_humidity_state_topic** (*Optional*, string): The topic to publish
current humidity changes to.
- **fan_mode_state_topic** (*Optional*, string): The topic to publish
fan mode changes to.
- **fan_mode_command_topic** (*Optional*, string): The topic to receive
@ -102,19 +122,12 @@ MQTT options:
lower target temperature changes to.
- **target_temperature_low_command_topic** (*Optional*, string): The topic to receive
lower target temperature commands on.
- **target_humidity_state_topic** (*Optional*, string): The topic to publish
target humidity changes to.
- **target_humidity_command_topic** (*Optional*, string): The topic to receive
target humidity commands on.
- All other options from :ref:`MQTT Component <config-mqtt-component>`.
.. code-block:: yaml
climate:
- platform: ...
visual:
min_temperature: 18
max_temperature: 25
temperature_step:
target_temperature: 0.5
current_temperature: 0.1
Climate Automation
------------------
@ -152,6 +165,8 @@ Configuration variables:
lower target temperature of a climate device with a two-point target temperature.
- **target_temperature_high** (*Optional*, float, :ref:`templatable <config-templatable>`): Set the
higher target temperature of a climate device with a two-point target temperature.
- **target_humidity** (*Optional*, float, :ref:`templatable <config-templatable>`): Set the
target humidity of a climate device.
- **preset** (*Optional*, string, :ref:`templatable <config-templatable>`): Set the preset
of the climate device. One of ``ECO``, ``AWAY``, ``BOOST``, ``COMFORT``, ``HOME``, ``SLEEP``,
``ACTIVITY``.
@ -181,12 +196,16 @@ advanced stuff.
id(my_climate).mode
// Current temperature, type: float (degrees)
id(my_climate).current_temperature
// Current humidity, type: float (percentage)
id(my_climate).current_humidity
// Target temperature, type: float (degrees)
id(my_climate).target_temperature
// Lower Target temperature, type: float (degrees)
id(my_climate).target_temperature_low
// High Target temperature, type: float (degrees)
id(my_climate).target_temperature_high
// Target humidity, type: float (percentage)
id(my_climate).target_humidity
// Fan mode, type: FanMode (enum)
id(my_climate).fan_mode
// Custom Fan mode, type: string

View File

@ -53,6 +53,8 @@ Configuration variables:
- **sensor** (**Required**, :ref:`config-id`): The sensor that is used to measure the current
temperature.
- **humidity_sensor** (**Optional**, :ref:`config-id`): If specified, this sensor is used to measure the current humidity.
This is used for information only and does not influence temperature control.
- **default_target_temperature** (**Required**, float): The default target temperature (setpoint)
for the control algorithm. This can be dynamically set in the frontend later.
- **heat_output** (*Optional*, :ref:`config-id`): The ID of a :ref:`float output <config-output>`

View File

@ -168,6 +168,8 @@ Configuration Variables:
The thermostat controller uses the sensor to determine whether it should heat or cool.
- **sensor** (**Required**, :ref:`config-id`): The sensor that is used to measure the current temperature.
- **humidity_sensor** (**Optional**, :ref:`config-id`): If specified, this sensor is used to measure the current humidity.
This is used for information only and does not influence temperature control.
Heating and Cooling Actions
***************************

109
components/cover/he60r.rst Normal file
View File

@ -0,0 +1,109 @@
HE60R Garage Door Opener
========================
.. seo::
:description: Setting up a Chamberlain HomEntry HE60R and similar garage door openers
:image: he60r.jpg
.. figure:: images/he60r.jpg
:align: right
The ``he60r`` cover platform allows you to control a HomEntry HE60R
garage door opener. These units were made by Chamberlain and sold through Bunnings. It is *likely* that this
component will also work with other older Chamberlain garage door openers. It is not currently compatible with
newer Chamberlain units that use the Security+ 2.0 protocol.
This component makes use of the HE60R keypad communication interface. This is a single-wire half duplex serial
connection and requires a :ref:`uart` component to be configured. The uart **must** be set to 1200 baud, EVEN parity. See
below for a sample hardware interface.
.. code-block:: yaml
# Example configuration entry
uart:
- id: door_uart
baud_rate: 1200
parity: even
stop_bits: 1
tx_pin: REPLACEME
rx_pin: REPLACEME
cover:
platform: he60r
id: garage_door
name: Garage Door
Configuration variables:
------------------------
- **open_duration** (*Optional*, :ref:`config-time`): The time required for the door to fully open from the closed position. Default 15s.
- **close_duration** (*Optional*, :ref:`config-time`): The time required for the door to fully close from the open position. Default 15s.
- All other options from :ref:`Cover <config-cover>`.
The open and close duration serve to estimate the position to provide feedback during travel and for partial open/close
requests. These can be adjusted according to your door's actual operation. Enabling DEBUG logging will report the
actual open and close times which will help to refine these timings.
Hardware Connection
-------------------
A sample circuit is shown below which also draws power from the HE60R - note that the 3.3V regulator must
be a switching type, a linear regulator would draw too much current and run hot. You can of course simply power
the ESP32 via USB from 5V. This circuit also includes a manual control button connected to a GPIO.
Any microcontroller board supported by ESPHome should be suitable for this application.
.. figure:: images/he60r-sch.jpg
:target: /_images/he60r-sch.jpg
Note that this circuit inverts the TX line. A configuration for this would look something like:
.. code-block:: yaml
# Example configuration entry
uart:
- id: door_uart
baud_rate: 1200
parity: even
stop_bits: 1
tx_pin:
number: REPLACEME
inverted: true
rx_pin: REPLACEME
cover:
platform: he60r
id: garage_door
name: Garage Door
binary_sensor:
- platform: gpio
pin:
number: REPLACEME
inverted: true
mode:
input: true
pullup: true
name: "Garage Door Manual Button"
# debounce the switch
filters:
- delayed_on: 50ms
- delayed_off: 50ms
on_press:
then:
- cover.toggle: garage_door
See Also
--------
- :doc:`index`
- :ref:`automation`
- :ref:`gpio-binary-sensor`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,4 +1,3 @@
ILI9xxx TFT LCD Series
======================
@ -14,6 +13,7 @@ With this display driver you can control the following displays:
- ILI9341
- ILI9342
- ILI9481
- ILI9481-18 (ILI9481 in 18 bit, i.e. 262K color, mode)
- ILI9486
- ILI9488
- ILI9488_A (alternative gamma configuration for ILI9488)
@ -21,6 +21,7 @@ With this display driver you can control the following displays:
- S3BOX
- S3BOX_LITE
- ST7796
- ST7789V
- TFT 2.4
- TFT 2.4R
@ -36,7 +37,7 @@ ILI9341 (`datasheet <https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf>`__,
displays from the same chip family with ESPHome. As this is a somewhat higher resolution display and may require pins
beyond the typical SPI connections, it is better suited for use with the ESP32.
**Note:** To use 16bit instead of 8bit colors use a esp32 with enough PSRAM the display.
**Note:** use of 16 bit colors requires double the amount of RAM as 8 bit, and may need PSRAM to be available.
.. figure:: images/ili9341-full.jpg
:align: center
@ -62,15 +63,13 @@ Configuration variables:
- **model** (**Required**): The model of the display. Options are:
- ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R``, ``S3BOX``, ``S3BOX_LITE``
- ``ILI9341``, ``ILI9342``, ``ILI9481``, ``ILI9486``, ``ILI9488``, ``ILI9488_A`` (alternative gamma configuration for ILI9488), ``ST7796``
.. note:: According to its documentation, the ESP32 S3 Box Lite has an ST7789V display driver. We've found, however, that it works with the ILIxxxx component here, instead. This could change in the future.
- ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R``, ``S3BOX``, ``S3BOX_LITE``, ``ST7789V``
- ``ILI9341``, ``ILI9342``, ``ILI9486``, ``ILI9488``, ``ILI9488_A`` (alternative gamma configuration for ILI9488)
- ``ILI9481``, ``ILI9481-18`` (18 bit mode)
- ``ST7789V``, ``ST7796``
- **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin.
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin.
- **rotation** (*Optional*): Set the rotation of the display. Everything drawn in the ``lambda:`` will be rotated
per this option. One of ```` (default), ``90°``, ``180°``, or ``270°``.
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
See :ref:`display-engine` for more information.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``.
@ -83,10 +82,33 @@ Configuration variables:
- ``NONE`` (default)
- ``GRAYSCALE``
- ``IMAGE_ADAPTIVE``
- **color_order** (*Optional*): Should be one of ``bgr`` (default) or ``rgb``.
- **color_palette_images** (*Optional*): A list of image files that will be used to generate the color pallet for the display. This should only be used in conjunction with ``-color_palette: IMAGE_ADAPTIVE`` above. The images will be analysed at compile time and a custom color pallet will be created based on the most commonly occuring colors. A typical setting would be a sample image that represented the fully populated display. This can significantly improve the quality of displayed images. Note that these images are not stored on the ESP device, just the 256byte color pallet created from them.
- **dimensions** (*Optional*): Dimensions of the screen with WIDTHxHEIGHT. Usually not needed since ``model:`` has good defaults.
- **dimensions** (*Optional*): Dimensions of the screen, specified either as *width* **x** *height* (e.g ``320x240``) or with separate config keys. If not provided the dimensions will be determined by the model selected.
- **height** (**Required**, int): Specifies height of display in pixels.
- **width** (**Required**, int): Specifies width of display.
- **offset_width** (*Optional*, int): Specify an offset for the x-direction of the display, typically used when an LCD is smaller than the maximum supported by the driver chip. Default is 0
- **offset_height** (*Optional*, int): Specify an offset for the y-direction of the display. Default is 0.
- **data_rate** (*Optional*): Set the data rate of the SPI interface to the display. One of ``80MHz``, ``40MHz`` (default), ``20MHz``, ``10MHz``, ``5MHz``, ``2MHz``, ``1MHz``, ``200kHz``, ``75kHz`` or ``1kHz``. If you have multiple ILI9xxx displays they must all use the same **data_rate**.
- **invert_display** (*Optional*): With this boolean option you can invert the some of the display colors manual. **Note** some of the displays have this option set automatically to true and can't be changed.
- **spi_mode** (*Optional*): Set the mode for the SPI interface to the display. Default is ``MODE0`` but some displays require ``MODE3``.
- **invert_colors** (*Optional*): With this boolean option you can invert the display colors. **Note** some of the displays have this option set automatically to true and can't be changed.
- **rotation** (*Optional*): Rotate the display presentation in software. Choose one of ````, ``90°``, ``180°``, or ``270°``. This option cannot be used with ``transform``.
- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are ``false``. This option cannot be used with ``rotation``.
- **swap_xy** (*Optional*, boolean): If true, exchange the x and y axes.
- **mirror_x** (*Optional*, boolean): If true, mirror the x axis.
- **mirror_y** (*Optional*, boolean): If true, mirror the y axis.
**Note:** To rotate the display in hardware use one of the following combinations:
- 90 degrees - use ``swap_xy`` with ``mirror_x``
- 180 degrees - use ``mirror_x`` with ``mirror_y``
- 270 degrees - use ``swap_xy`` with ``mirror_y``
Configuration examples
**********************
@ -172,6 +194,28 @@ To configure an image adaptive color pallet to show greater than 8 bit color dep
lambda: |-
it.image(0, 0, id(myimage));
Using the ``transform`` options to hardware rotate the display on a Lilygo T-Embed. This has an st7789v but only uses 170 pixels of the 240 width.
This config rotates the display into landscape mode using the driver chip.
.. code-block:: yaml
display:
- platform: ili9xxx
model: st7789v
height: 170
width: 320
offset_height: 35
offset_width: 0
transform:
swap_xy: true
mirror_x: false
mirror_y: true
color_order: bgr
data_rate: 80MHz
cs_pin: 10
dc_pin: GPIO13
reset_pin: GPIO9
See Also
--------

View File

@ -242,7 +242,7 @@ Configuration variables:
to translate the TrueType and bitmap font files into an internal format. If you're running this as a Home Assistant
add-on or with the official ESPHome docker image, it should already be installed. Otherwise you need
to install it using
``pip install "pillow>4.0.0,<10.0.0"``.
``pip install "pillow==10.1.0"``.
.. _display-static_text:

View File

@ -67,10 +67,12 @@ Configuration variables:
- **start_up_page** (*Optional*, int): Sets the page to display when ESPHome connects to the Nextion. (Nextion shows page 0 on start-up by default).
- **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.
- **exit_reparse_on_start** (*Optional*, boolean): Request the Nextion exit Active Reparse Mode before setup of the display. Defaults to ``false``.
- **on_setup** (*Optional*, :ref:`Action <config-action>`): An action to be performed after ESPHome connects to the Nextion. See :ref:`Nextion Automation <nextion-on_setup>`.
- **on_sleep** (*Optional*, :ref:`Action <config-action>`): An action to be performed when the Nextion goes to sleep. See :ref:`Nextion Automation <nextion-on_sleep>`.
- **on_wake** (*Optional*, :ref:`Action <config-action>`): An action to be performed when the Nextion wakes up. See :ref:`Nextion Automation <nextion-on_sleep>`.
- **on_page** (*Optional*, :ref:`Action <config-action>`): An action to be performed after a page change. See :ref:`Nextion Automation <nextion-on_page>`.
- **on_touch** (*Optional*, :ref:`Action <config-action>`): An action to be performed after a touch event (press or release). See :ref:`Nextion Automation <nextion-on_touch>`.
.. _display-nextion_lambda:
@ -259,6 +261,31 @@ Once you know the page id, it's time to update the components. Two strategies wo
break;
}
.. _nextion-on_touch:
``on_touch``
************
This automation is triggered when a component is pressed or released on the Nextion display.
The following arguments will be available:
- ``page_id``: Contains the id (integer) of the page where the touch happened.
- ``component_id``: Contains the id (integer) of the component touched. It's required that the component have "Send Component ID" enabled either for "Touch Press Event" and/or "Touch Release Event".
- ``touch_event``: It will be ``true`` for a "press" event, or ``false`` for a "release" event.
.. code-block:: yaml
on_touch:
then:
lambda: |-
ESP_LOGD("nextion.on_touch", "Nextion touch event detected!");
ESP_LOGD("nextion.on_touch", "Page Id: %i", page_id);
ESP_LOGD("nextion.on_touch", "Component Id: %i", component_id);
ESP_LOGD("nextion.on_touch", "Event type: %s", touch_event ? "Press" : "Release");
.. _nextion_upload_tft_file:
Uploading A TFT File

View File

@ -12,7 +12,9 @@ Over I²C
The ``ssd1306_i2c`` display platform allows you to use
SSD1306 (`datasheet <https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf>`__,
`Adafruit <https://www.adafruit.com/product/326>`__), SSD1305 (`datasheet <https://cdn-shop.adafruit.com/datasheets/SSD1305.pdf>`__)
`Adafruit <https://www.adafruit.com/product/326>`__), SSD1305 (`datasheet <https://cdn-shop.adafruit.com/datasheets/SSD1305.pdf>`__),
SH1107 (`datasheet <https://cdn-learn.adafruit.com/assets/assets/000/094/580/original/SH1107_datasheet.pdf>`__,
`Adafruit <https://www.adafruit.com/product/4650>`__)
and SH1106 (`datasheet <https://www.elecrow.com/download/SH1106%20datasheet.pdf>`__,
`electrodragon <https://www.electrodragon.com/product/1-3-12864-blue-oled-display-iicspi/>`__)
displays with ESPHome. Note that this component is for displays that are connected via the :ref:`I²C Bus <i2c>`.
@ -58,6 +60,7 @@ Configuration variables:
- ``SH1106 96x16``
- ``SH1106 64x48``
- ``SH1107 128x64``
- ``SH1107 128x128``
- ``SSD1305 128x32``
- ``SSD1305 128x64``
@ -71,8 +74,8 @@ Configuration variables:
Defaults to ``false``.
- **flip_x** (*Optional*, boolean): Flip the horizontal axis on the screen. Defaults to ``true``.
- **flip_y** (*Optional*, boolean): Flip the vertical axis on the screen. Defaults to ``true``.
- **offset_x** (*Optional*, int): Set this option if some horizontal pixel is missing. Numbers are only allowed between ``-32~32``. Defaults to ``0``.
- **offset_y** (*Optional*, int): Set this option if some vertical pixel is missing. Numbers are only allowed between ``-32~32``. Defaults to ``0``.
- **offset_x** (*Optional*, int): Set this option if some horizontal pixel is missing. Numbers are only allowed between ``0~128``. Defaults to ``0``.
- **offset_y** (*Optional*, int): Set this option if some vertical pixel is missing. Numbers are only allowed between ``0~128``. Defaults to ``0``.
- **invert** (*Optional*, boolean): Invert all pixel state on the display. Defaults to ``false``.
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
See :ref:`display-engine` for more information.
@ -138,6 +141,7 @@ Configuration variables:
- ``SH1106 96x16``
- ``SH1106 64x48``
- ``SH1107 128x64``
- ``SH1107 128x128``
- ``SSD1305 128x32``
- ``SSD1305 128x64``
@ -152,8 +156,8 @@ Configuration variables:
Defaults to ``false``.
- **flip_x** (*Optional*, boolean): Flip the horizontal axis on the screen. Defaults to ``true``.
- **flip_y** (*Optional*, boolean): Flip the vertical axis on the screen. Defaults to ``true``.
- **offset_x** (*Optional*, int): Set this option if some horizontal pixel is missing. Numbers are only allowed between ``-32~32``. Defaults to ``0``.
- **offset_y** (*Optional*, int): Set this option if some vertical pixel is missing. Numbers are only allowed between ``-32~32``. Defaults to ``0``.
- **offset_x** (*Optional*, int): Set this option if some horizontal pixel is missing. Numbers are only allowed between ``0~128``. Defaults to ``0``.
- **offset_y** (*Optional*, int): Set this option if some vertical pixel is missing. Numbers are only allowed between ``0~128``. Defaults to ``0``.
- **invert** (*Optional*, boolean): Invert all pixel state on the display. Defaults to ``false``.
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
See :ref:`display-engine` for more information.
@ -168,6 +172,7 @@ See Also
- :doc:`index`
- :apiref:`ssd1306_base/ssd1306_base.h`
- `SH110x Library <https://github.com/adafruit/Adafruit_SH110x>`__ by `Adafruit <https://www.adafruit.com/>`__
- `SSD1306 Library <https://github.com/adafruit/Adafruit_SSD1306>`__ by `Adafruit <https://www.adafruit.com/>`__
- `SSD1305 Library <https://github.com/adafruit/Adafruit_SSD1305>`__ by `Adafruit <https://www.adafruit.com/>`__
- :ghedit:`Edit`

View File

@ -0,0 +1,206 @@
.. _graphical_display_menu:
Graphical Display Menu
======================
.. seo::
:description: Instructions for setting up a simple hierarchical menu on displays.
:image: lcd_menu.png
The component provides an infrastructure for setting up a hierarchical menu
on graphical displays. This offers the user an interactive method to display
labels, control entities like ``switch``, ``select``, ``number`` available locally on the
ESPHome node, without the requirement of a network connection.
.. figure:: images/graphical_display_menu.jpg
:align: center
:width: 60.0%
Overview
--------
The integration implements the :ref:`Display Menu <display_menu>` integration providing
a hierarchical menu primarily intended to be controlled either by a rotary encoder
with a button or a five-button joystick controller.
The component needs to be connected to an instance of a display supporting ESPHome's rendering
engine such as :doc:`E-Paper displays </components/display/waveshare_epaper>` or :doc:`OLED displays </components/display/ssd1306>`.
.. code-block:: yaml
# Example configuration entry
graphical_display_menu:
id: my_graphical_display_menu
display: my_display_component
on_redraw:
then:
component.update: my_dispay_component
active: false
mode: rotary
items:
...
Configuration variables:
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **display** (*Optional*, :ref:`config-id`): ID of the display to render to. See
:ref:`drawing_modes` for more details
- **font** (:ref:`Font <display-fonts>`): Specifies the font to use
- **foreground_color** (*Optional*, :ref:`config-color`): Specifies the foreground color to use.
Defaults to COLOR_ON
- **background_color** (*Optional*, :ref:`config-color`): Specifies the background color to use.
Defaults to COLOR_OFF
Automations:
- **on_redraw** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when the menu needs to be redrawn. This can be useful if your display has slow refresh rates.
For example E-Ink displays that are used with `display_interval: never`
Additional configuration is described in the :ref:`Display Menu <display_menu>` component.
.. _drawing_modes:
Drawing Modes
-------------
Pop Up Mode
***********
When a **display** is specified the menu will create a :ref:`page <display-pages>` as part of the initialisation. It will render to the entire
of the display when invoked. This is useful when you may want to use the display for other purposes but show a menu in response to user
interaction.
Advanced Drawing Mode
*********************
If you do not specify a **display** when setting up a menu you will be responsible for controlling drawing of the menu. This also allows you to
render the menu to a smaller portion than the available screen size. It May be useful in situations where you want to display a menu as part of a
larger user interface (for example rendering a sensor graph and a control menu next to it)
.. code-block:: yaml
# Example configuration entry
graphical_display_menu:
- id: my_menu
# Note: No display specified
active: true
display:
- platform: waveshare_epaper
id: my_display_component
pages:
- id: advanced_drawing_mode_page
lambda: |-
const auto display_width = it.get_width();
const auto display_height = it.get_height();
auto half_display_width = (int)(display_width / 2.0f);
// This will render the menu to the right half of the screen leaving the left half for other drawing purposes
// Arguments: it.menu(x, y, menu, width, height);
it.menu(half_display_width, 0, id(my_menu), half_display_width, display_height);
Controlling Menu Item Rendering
-------------------------------
By default menu items with a value will be rendered between a set of parenthesis. This can be
controlled via the `menu_item_value` parameter.
- **menu_item_value** (*Optional*, :ref:`config-lambda`): Specifies how to render values for
menu items that have values (eg. Selects, numbers). Defaults to rendering the value as
"(value here)". Receives a MenuItemValueArguments as the argument`it`.
.. code-block:: yaml
graphical_display_menu:
menu_item_value: !lambda |-
// Will render your menu item value as "My menu label ~my value here~"" normally and "My menu label *my value here*" when in edit mode
std::string label = " ";
if (it->is_item_selected && it->is_menu_editing) {
label.append("*");
label.append(it->item->get_value_text());
label.append("*");
} else {
label.append("~");
label.append(it->item->get_value_text());
label.append("~");
}
return label;
.. note::
Ensure that all characters you use in the menu_item_value are available glyphs for your :ref:`font <display-fonts>`
User Interaction Example
------------------------
The below example is a more complete example showing how you might use a rotary encoder and button to display/hide the menu and move through the available options
.. code-block:: yaml
# Example configuration entry
display:
- platform: waveshare_epaper
id: my_display_component
pages:
- id: graph_page
lambda: |-
it.print(0, 0, id(my_font), "My menu is not currently active");
font:
- file: ...
id: my_font
size: 16
graphical_display_menu:
id: my_graphical_display_menu
display: my_display_component
on_redraw:
then:
component.update: my_dispay_component
active: false
mode: rotary
items:
- type: Label
text: Menu Item 1
- type: Label
text: Menu Item 2
# Rotary encoder to provide navigation
sensor:
- platform: rotary_encoder
...
filters:
debounce: 30ms
on_anticlockwise:
- display_menu.up: my_graphical_display_menu
on_clockwise:
- display_menu.down: my_graphical_display_menu
# A debounced GPIO push button is used to 'click'
binary_sensor:
- platform: gpio
...
filters:
- delayed_on: 30ms
- delayed_off: 30ms
on_press:
- if:
condition:
display_menu.is_active: my_graphical_display_menu
then:
- display_menu.enter: my_graphical_display_menu
else:
- display_menu.show: my_graphical_display_menu
See Also
--------
- :ref:`Display Menu <display_menu>`
- :ref:`Display <display-engine>`
- :ref:`display-fonts`
- :ref:`display-pages`
- :apiref:`graphical_display_menu/graphical_display_menu.h`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@ -162,6 +162,7 @@ Automations:
when a stream starts.
- **on_stream_stop** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when a stream stops.
- **on_image** (*Optional*, :ref:`Automation <automation>`): An automation called when image taken. Image is available as ``image`` variable of type :apistruct:`esp32_camera::CameraImageData`.
Test Setting:

View File

@ -56,6 +56,7 @@ Configuration variables:
will allow 1% increments in the output. Defaults to ``100``.
- **name** (**Required**, string): The name for this fan.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **preset_modes** (*Optional*): A list of preset modes for this fan. Preset modes can be used in automations (i.e. `on_preset_set`).
- All other options from :ref:`Fan Component <config-fan>`.
.. _fan-hbridge_brake_action:

View File

@ -79,6 +79,8 @@ Automation triggers:
when the fan is turned off. See :ref:`fan-on_turn_on_off_trigger`.
- **on_speed_set** (*Optional*, :ref:`Action <config-action>`): An automation to perform
when the fan speed is set/changed. See :ref:`fan-on_speed_set_trigger`.
- **on_preset_set** (*Optional*, :ref:`Action <config-action>`): An automation to perform
when the fan preset mode is set/changed. See :ref:`fan-on_preset_set_trigger`.
.. _fan-toggle_action:
@ -206,6 +208,21 @@ This trigger is activated each time the fan speed is changed. It will fire when
on_speed_set:
- logger.log: "Fan Speed was changed!"
.. _fan-on_preset_set_trigger:
``fan.on_preset_set`` Trigger
-----------------------------
This trigger is activated each time the fan preset mode is changed. It will fire when the preset mode is either set via API e.g. in Home Assistant or locally by an automation or a lambda function.
.. code-block:: yaml
fan:
- platform: speed # or any other platform
# ...
on_preset_set:
- logger.log: "Fan preset mode was changed!"
Lambda calls
------------
@ -256,6 +273,17 @@ advanced stuff (see the full API Reference for more info).
// Fan direction is reverse, do something else here
}
- ``preset_mode``: Retrieve the current preset mode of the fan.
.. code-block:: yaml
// Within lambda, get the fan preset mode and conditionally do something
if (id(my_fan).preset_mode == "auto") {
// Fan preset mode is "auto", do something here
} else {
// Fan preset mode is not "auto", do something else here
}
- ``turn_off()``/``turn_on()``/``toggle()``: Manually turn the fan ON/OFF from code.
Similar to the ``fan.turn_on``, ``fan.turn_off``, and ``fan.toggle`` actions,
but can be used in complex lambda expressions.
@ -273,6 +301,11 @@ advanced stuff (see the full API Reference for more info).
call.set_direction(FanDirection::REVERSE);
call.perform();
// Set a preset mode
auto call = id(my_fan).turn_on();
call.set_preset_mode("auto");
call.perform();
// Toggle the fan on/off
auto call = id(my_fan).toggle();
call.perform();

View File

@ -34,6 +34,7 @@ Configuration variables:
to calculate the percentages for each speed. E.g. ``2`` means that you have 50% and 100% while ``100``
will allow 1% increments in the output. Defaults to ``100``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **preset_modes** (*Optional*): A list of preset modes for this fan. Preset modes can be used in automations (i.e. `on_preset_set`).
- All other options from :ref:`Fan Component <config-fan>`.
See Also

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -37,6 +37,10 @@ Configuration variables:
- **keep_on_time** (*Optional*, :ref:`config-time`): The time the
power supply should be kept enabled after the last output that used
it has been switch off. Defaults to ``10s``.
- **enable_on_boot** (*Optional*, bool): If the power supply should be enabled when the power supply
component is setup. Defaults to false. The startup delay will be applied (other component setup will be blocked
until the delay has elapsed.) This is useful for power supplies that will never be turned off and avoids the need
to specifically configure the power supply in a different component.
See the :ref:`output component base configuration <config-output>`
for information on how to apply the power supply for a specific output.

197
components/pylontech.rst Normal file
View File

@ -0,0 +1,197 @@
Pylontech Battery
=================
.. seo::
:description: Instructions for setting up Pylontech Battery in ESPHome.
:image: pylontech.jpg
The Pylontech component allows you to pull data from Pylontech Batteries into ESPHome.
It uses :ref:`UART <uart>` for communication.
Once configured, you can use sensors as described below for your projects.
.. figure:: images/pylontech.jpg
:align: center
:width: 50.0%
Pylontech Batteries
Hardware Setup
--------------
You can connect to Pylontech Batteries using the port labeled "Console".
Any connections via CAN or RS485 (e.g. to an inverter) are untouched and remain functional.
The console port offers a RS232 interface using a RJ10 or RJ45 connector.
The voltage levels are *not* TTL-compatible. A RS232 transceiver must be placed between the Batteries and the ESPHome device.
MAX3232-based transceivers have been tested and work well.
If you have multiple batteries you need to connect to the master battery's console port.
.. list-table:: Pylontech RJ45 Console Port (US2000C, US3000C)
:header-rows: 1
* - RJ45 Pin
- Function
- Connect to
* - 3
- Pylontech TX
- ESPHome RX via transceiver
* - 6
- Pylontech RX
- ESPHome TX via transceiver
* - 8
- GND
- GND
.. figure:: images/rj45_pinout.jpg
:align: center
:width: 70.0%
RJ45 pinout
.. list-table:: Pylontech RJ10 Console Pinout (US2000B)
:header-rows: 1
* - RJ410 Pin
- Function
- Connect to
* - 2
- Pylontech RX
- ESPHome TX via transceiver
* - 3
- Pylontech TX
- ESPHome RX via transceiver
* - 4
- GND
- GND
Component/Hub
-------------
.. code-block:: yaml
# Example configuration entry
pylontech:
Configuration variables:
~~~~~~~~~~~~~~~~~~~~~~~~
- **id** (**Required**, :ref:`config-id`): The id to use for this Pylontech component.
- **uart_id** (*Optional*): The uart Bus ID
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
Sensor
------
All values are reported for every Pylontech battery individually.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: pylontech
battery: 1
voltage:
name: "Battery1 Voltage"
current:
name: "Battery1 Current"
coulomb:
name: "Battery1 State of Charge"
Configuration variables:
~~~~~~~~~~~~~~~~~~~~~~~~
- **pylontech_id** (*Optional*): Manually specify the ID of the pylontech instance if there are multiple.
- **battery** (**Required**): Which battery to monitor. 1 stands for the main battery, 2..6 for child batteries.
- **voltage** (*Optional*): Voltage of the battery. All options from :ref:`Sensor <config-sensor>`.
- **current** (*Optional*): Current flowing into the battery. Negative when discharging. All options from :ref:`Sensor <config-sensor>`.
- **coulomb** (*Optional*): State of Charge in percent. All options from :ref:`Sensor <config-sensor>`.
- **temperature** (*Optional*): Temperature. All options from :ref:`Sensor <config-sensor>`.
- **temperature_low** (*Optional*): Historic minimum temperature. All options from :ref:`Sensor <config-sensor>`.
- **temperature_high** (*Optional*): Historic maximum temperature. All options from :ref:`Sensor <config-sensor>`.
- **voltage_low** (*Optional*): Historic minimum voltage. All options from :ref:`Sensor <config-sensor>`.
- **voltage_high** (*Optional*): Historic maximum voltage. All options from :ref:`Sensor <config-sensor>`.
- **mos_temperature** (*Optional*): Temperature of the mosfets. All options from :ref:`Sensor <config-sensor>`.
Text Sensor
-----------
.. code-block:: yaml
# Example configuration entry
text_sensor:
- platform: pylontech
pylontech_id: pylontech0
battery: 1
base_state:
id: bat1_base_state
name: "Battery1 Base State"
Configuration variables:
~~~~~~~~~~~~~~~~~~~~~~~~
- **pylontech_id** (**Optional**): Manually specify the ID of the pylontech instance if there are multiple.
- **battery** (**Required**): Which battery to monitor. 1 stands for the main battery, 2..6 for child batteries.
- **base_state** (*Optional*): Base state. Usually reads ``Dischg``, ``Charge`` or ``Idle``. All options from :ref:`Text Sensor <config-text_sensor>`.
- **voltage_state** (*Optional*): Voltage state. Usually reads ``Normal``. All options from :ref:`Text Sensor <config-text_sensor>`.
- **current_state** (*Optional*): Current state. Usually reads ``Normal``. All options from :ref:`Text Sensor <config-text_sensor>`.
- **temperature_state** (*Optional*): Temperature state. Usually reads ``Normal``. All options from :ref:`Text Sensor <config-text_sensor>`.
Energy Monitoring
-----------------
By combining :doc:`template sensors </components/sensor/template>` and :doc:`integration sensors </components/sensor/integration>`
one can monitor the energy flowing into and out of all batteries combined, ready for `Homeassistant Energy Monitoring <https://www.home-assistant.io/docs/energy/battery/>`__.
.. code-block:: yaml
sensor:
- platform: template
id: pylontech_power
name: "Pylontech power"
unit_of_measurement: W
lambda: |-
auto pwr1 = id(bat1_voltage).state * id(bat1_current).state;
auto pwr2 = id(bat2_voltage).state * id(bat2_current).state;
auto pwr = pwr1 + pwr2;
id(combined_charge_power).publish_state(max(pwr, 0.0f));
id(combined_discharge_power).publish_state(max(-pwr, 0.0f));
return pwr;
update_interval: 5s
device_class: power
state_class: measurement
- platform: template
id: combined_charge_power
- platform: template
id: combined_discharge_power
- platform: integration
name: "Pylontech charging"
sensor: combined_charge_power
time_unit: h
state_class: total_increasing
device_class: energy
unit_of_measurement: "Wh"
- platform: integration
name: "Pylontech discharging"
sensor: combined_discharge_power
time_unit: h
state_class: total_increasing
device_class: energy
unit_of_measurement: "Wh"
See Also
--------
- `Pylontech-Battery-Monitoring <https://github.com/irekzielinski/Pylontech-Battery-Monitoring>`__
- `nodered-pylontech-console-reader <https://github.com/juanhaywood/nodered-pylontech-console-reader>`__
- :ref:`uart`
- :ghedit:`Edit`

View File

@ -111,7 +111,7 @@ This :ref:`action <config-action>` sends a Byron Doorbell RF protocol code to a
on_...:
- remote_transmitter.transmit_byronsx:
address: '0x4f'
command: '0x2'
command: '0x2'
Configuration variables:
@ -225,7 +225,7 @@ This :ref:`action <config-action>` sends a Draton Digistat RF remote code to a r
- remote_transmitter.transmit_drayton:
address: '0x6180'
channel: '0x12'
command: '0x02'
command: '0x02'
Configuration variables:
@ -352,11 +352,13 @@ This :ref:`action <config-action>` sends an NEC infrared remote code to a remote
- remote_transmitter.transmit_nec:
address: 0x1234
command: 0x78AB
command_repeats: 1
Configuration variables:
- **address** (**Required**, int): The 16-bit address to send, see dumper output for more details.
- **command** (**Required**, int): The 16-bit NEC command to send.
- **command_repeats** (*Optional*, int): The number of times the command bytes are sent in one transmission. Defaults to `1`.
- All other options from :ref:`remote_transmitter-transmit_action`.
``remote_transmitter.transmit_nexa`` Action
@ -938,7 +940,7 @@ earlier, create a new template switch that sends the RF code when triggered:
- remote_transmitter.transmit_rc_switch_raw:
code: '100010000000000010111110'
protocol: 2
repeat:
repeat:
times: 10
wait_time: 0s
@ -958,9 +960,9 @@ in the frontend. Click on it and you should see the remote signal being transmit
.. note::
Some devices require that the transmitted code be repeated for the signal to be picked up
as valid. Also the interval between repetitions can be important. Check that the pace of
repetition logs are consistent between the remote controller and the transmitter node.
Some devices require that the transmitted code be repeated for the signal to be picked up
as valid. Also the interval between repetitions can be important. Check that the pace of
repetition logs are consistent between the remote controller and the transmitter node.
You can adjust the ``repeat:`` settings accordingly.

View File

@ -0,0 +1,46 @@
A02YYUW Waterproof Ultrasonic Sensor
====================================
.. seo::
:description: Instructions for setting up A02YYUW waterproof ultrasonic distance sensor in ESPHome.
:image: a02yyuw.jpg
:keywords: ultrasonic, DFRobot, A02YYUW
This sensor allows you to use A02YYUW waterproof ultrasonic sensor by DFRobot
(`datasheet <https://wiki.dfrobot.com/_A02YYUW_Waterproof_Ultrasonic_Sensor_SKU_SEN0311>`__)
with ESPHome to measure distances. This sensor can measure
ranges between 3 centimeters and 450 centimeters with a resolution of 1 milimeter.
Since this sensor reads multiple times per second, :ref:`sensor-filters` are highly recommended.
To use the sensor, first set up an :ref:`uart` with a baud rate of 9600 and connect the sensor to the specified pin.
.. figure:: images/a02yyuw-full.jpg
:align: center
:width: 50.0%
A02YYUW Waterproof Ultrasonic Distance Sensor.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: "a02yyuw"
name: "Distance"
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the sensor.
- **uart_id** (*Optional*, :ref:`config-id`): The ID of the :ref:`UART bus <uart>` you wish to use for this sensor.
Use this if you want to use multiple UART buses at once.
- All other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ref:`sensor-filters`
- :ref:`uart`
- :apiref:`a02yyuw/a02yyuw.h`
- :ghedit:`Edit`

View File

@ -4,10 +4,10 @@ AHT10 Temperature+Humidity Sensor
.. seo::
:description: Instructions for setting up AHT10 temperature and humidity sensors
:image: aht10.jpg
:keywords: aht10 aht20 aht21 dht20
:keywords: aht10 aht20 dht20
The ``aht10`` Temperature+Humidity sensor allows you to use your AHT10
(`datasheet <http://www.aosong.com/userfiles/files/media/aht10%E8%A7%84%E6%A0%BC%E4%B9%A6v1_1%EF%BC%8820191015%EF%BC%89.pdf>`__), AHT20 (`datasheet <https://cdn-learn.adafruit.com/assets/assets/000/091/676/original/AHT20-datasheet-2020-4-16.pdf?1591047915>`__), AHT21 (`datasheet <https://asairsensors.com/wp-content/uploads/2021/09/Data-Sheet-AHT21-Humidity-and-Temperature-Sensor-ASAIR-V1.0.03.pdf>`__) :ref:`I²C <i2c>`-based sensor with ESPHome.
(`datasheet <http://www.aosong.com/userfiles/files/media/aht10%E8%A7%84%E6%A0%BC%E4%B9%A6v1_1%EF%BC%8820191015%EF%BC%89.pdf>`__) or AHT20 (`datasheet <https://cdn-learn.adafruit.com/assets/assets/000/091/676/original/AHT20-datasheet-2020-4-16.pdf?1591047915>`__) :ref:`I²C <i2c>`-based sensor with ESPHome.
The DHT20 (`datasheet <https://cdn.sparkfun.com/assets/8/a/1/5/0/DHT20.pdf>`__) sensor has the packaging of the :doc:`dht` series, but has the AHT20 inside and is speaking :ref:`I²C <i2c>` as well.
@ -30,6 +30,7 @@ The DHT20 (`datasheet <https://cdn.sparkfun.com/assets/8/a/1/5/0/DHT20.pdf>`__)
# Example configuration entry
sensor:
- platform: aht10
variant: AHT10
temperature:
name: "Living Room Temperature"
humidity:
@ -39,6 +40,11 @@ The DHT20 (`datasheet <https://cdn.sparkfun.com/assets/8/a/1/5/0/DHT20.pdf>`__)
Configuration variables:
------------------------
- **variant** (*Optional*, enum): Set the variant of the device in use. Defaults to ``AHT10``.
- ``AHT10`` - For AHT10 devices.
- ``AHT20`` - For AHT20 devices.
- **temperature** (**Required**): The information for the temperature sensor.
- **name** (**Required**, string): The name for the temperature sensor.

View File

@ -0,0 +1,110 @@
ENS160 Sensor
=============
.. seo::
:description: Instructions for setting up ENS160 air-quality sensors
:keywords: ENS160
The ``ens160`` sensor platform allows you to use your ENS160
(`datasheet <https://www.sciosense.com/wp-content/uploads/documents/SC-001224-DS-7-ENS160-Datasheet.pdf>`__) air-quality sensors with ESPHome. The :ref:`I²C <i2c>` component is
required to be set up in your configuration for this sensor to work.
.. note::
On first power-up of the ENS160 sensor, there is a 1 hour initial startup delay before readings will be available.
For subsequent starts or reboots, there is a 3 minute warm up period before readings are available. Also, be aware that the
ENS160 can take up to 1 second for sucessive data measurements to be ready.
.. figure:: images/ens160.jpg
:align: center
:width: 80.0%
ENS160 Air Quality Sensor.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: ens160
eco2:
name: "ENS160 eCO2"
tvoc:
name: "ENS160 Total Volatile Organic Compounds"
aqi:
name: "ENS160 Air Quality Index"
update_interval: 60s
address: 0x53
compensation:
temperature: id_temperature_sensor
humidity: id_humidity_sensor
Configuration variables:
------------------------
- **eco2** (**Required**): Configuration for the eCO2 sensor.
- **name** (**Required**, string): The name for the eCO2 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** (**Required**): Configuration for the TVOC sensor.
- **name** (**Required**, string): The name for the TVOC sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **aqi** (*Optional*): Configuration for the air quality index sensor.
- **name** (**Required**, string): The name for the AQI sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``. The update interval should be greater than the measurement
frequency of the ENS160 which is up to 1 second.
Advanced:
- **address** (*Optional*, int): Manually specify the I²C address of
the sensor. Defaults to ``0x53``. Another address can be ``0x52``.
- **compensation** (*Optional*): The block containing sensors used for compensation.
Temperature and humidity compensation improves the accuracy of sensor readings. Without compensation, the
ENS160 internally assumes 25°C temperature and 50% humidity, with readings noticeably diverting from real changes without compensation in temperature and humidity.
- **temperature** (**Required**, :ref:`config-id`): The ID of an external temperature sensor.
- **humidity** (**Required**, :ref:`config-id`): The ID of an external humidity sensor.
Example Text Sensor configuration
---------------------------------
The Air Quality Index(AQI) from this sensor is a number between 1 and 5. The ENS160
(`datasheet <https://www.sciosense.com/wp-content/uploads/documents/SC-001224-DS-7-ENS160-Datasheet.pdf>`__) states that
"The AQI-UBA air quality index is derived from a guideline by the German Federal Environmental
Agency based on a TVOC sum signal". The following is an example configuration to convert the numeric ENS160 AQI to the rating text.
.. code-block:: yaml
text_sensor:
- platform: template
name: "ENS160 Air Quality Rating"
lambda: |-
switch ( (int) (id(ens160_air_quality_index).state) ) {
case 1: return {"Excellent"};
case 2: return {"Good"};
case 3: return {"Moderate"};
case 4: return {"Poor"};
case 5: return {"Unhealthy"};
default: return {"Not Available"};
}
See Also
--------
- :ref:`sensor-filters`
- :doc:`ccs811`
- :doc:`sgp30`
- :apiref:`ens160/ens160.h`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

View File

@ -4,27 +4,35 @@ Mopeka Pro Check BLE Sensor
.. seo::
:description: Instructions for setting up Mopeka Pro Check or Lippert Propane Tank bluetooth-based sensors in ESPHome.
:image: mopeka_pro_check.jpg
:keywords: Mopeka, Mopeka Pro Check, Mopeka Pro Plus, Lippert, Lippert Propane, Lippert Propane Sensor, Lippert Propane Tank Sensor, BLE, Bluetooth
:keywords: Mopeka, Mopeka Pro Check, Mopeka Pro Plus, Mopeka Pro Universal, Lippert, Lippert Propane, Lippert Propane Sensor, Lippert Propane Tank Sensor, BLE, Bluetooth
The ``mopeka_pro_check`` sensor platform lets you track the output of Mopeka Pro
Check LP, Mopeka Pro Plus, or Lippert Propane Tank Sensors, Bluetooth Low
Check LP, Mopeka Pro Plus, Mopeka Pro Universal or Lippert Propane Tank Sensors, Bluetooth Low
Energy devices using the :doc:`/components/esp32_ble_tracker`. This component
will track the tank level, distance, temperature, and battery percentage of a
Mopeka Pro Check LP or Mopeka Pro Plus Residential BLE device every time the
sensor sends out a BLE broadcast.
device every time the sensor sends out a BLE broadcast.
.. warning::
This sensor component only supports the following sensors:
+ Mopeka Pro Check devices
+ Mopeka Pro Plus devices
+ Mopeka Pro Check Universal Sensor
+ Lippert Propane Tank Sensor, part number 2021130655
Sensors are calibrated for propane only.
See :doc:`/components/sensor/mopeka_std_check` for original Mopeka Check sensors support.
.. figure:: images/mopeka_pro_check.jpg
:align: center
(images/mopeka_pro_check.jpg)
(images/mopeka_pro_check_lippert.jpg)
Mopeka Pro Check LP over BLE.
.. figure:: images/mopeka_pro_check_lippert.jpg
:align: center
Lippert™ Propane Tank Sensor
The original Mopeka Check sensors are not supported.
@ -113,8 +121,8 @@ Currently supported Tank types are:
Setting Up Devices
------------------
To set up Mopeka Pro Check / Mopeka Pro Plus / Lippert Propane Tank Sensor devices you first need to find their MAC Address so that
ESPHome can identify them. So first, create a simple configuration with the ``esp32_ble_tracker``
To set up the sensor devices you first need to find the MAC Address so that
ESPHome can identify it. First, create a simple configuration with the ``esp32_ble_tracker``
and the ``mopeka_ble`` component like so:
.. code-block:: yaml
@ -123,8 +131,7 @@ and the ``mopeka_ble`` component like so:
mopeka_ble:
After uploading, the ESP32 will immediately try to scan for BLE devices. For Mopeka Pro
Check / Pro Plus / Lippert devices you must press and hold the green sync button for it to be identified.
After uploading, the ESP32 will immediately try to scan for BLE devices. Press and hold the sync button for it to be identified.
Or alternativly set the configuration flag ``show_sensors_without_sync: true`` to see all devices.
For all sensors found the ``mopeka_ble`` component will print a message like this one:
@ -146,6 +153,6 @@ See Also
- :doc:`/components/esp32_ble_tracker`
- :doc:`/components/sensor/index`
- :apiref:`mopeka_pro_check/mopeka_pro_check.h`
- `Mopeka <https://mopeka.com/product/mopeka-check-pro-lp-sensor/>`__
- `Mopeka <https://www.mopekaiot.com/shop>`
- `Lippert <https://store.lci1.com/lippert-propane-tank-sensor-2021130655>`__
- :ghedit:`Edit`

View File

@ -142,7 +142,7 @@ Configuration variables:
- **offset** (*Optional*): Temperature offset [°C]. Defaults to ``0``
- **normalized_offset_slope** (*Optional*): Normalized temperature offset slope in percent. Defaults to ``0``
- **normalized_offset_slope** (*Optional*): Normalized temperature offset slope. Defaults to ``0``
- **time_constant** (*Optional*): Time constant in seconds. Defaults to ``0``
- **acceleration_mode** (*Optional*): Allowed value are ``low``, ``medium`` and ``high``. (default is ``low``)

View File

@ -0,0 +1,61 @@
FT63X6 Touchscreen Controller
================================
.. seo::
:description: Instructions for setting up FT63X6 touchscreen controller with ESPHome
:image: wt32-sc01.png
:keywords: FT63X6, WT32-SC01
The ``ft63x6`` component allows using the touchscreen controller found in
`Seeed Studio's WT32-SC01 <https://www.seeedstudio.com/ESP32-Development-board-WT32-SC01-p-4735.html>`__
with ESPHome.
The :ref:`I²C <i2c>` is required to be set up in your configuration for this sensor to work.
.. code-block:: yaml
# Example configuration entry
esp32:
board: m5stack-core2
framework:
type: arduino
i2c:
sda: GPIO18
scl: GPIO19
scan: false
output:
- platform: ledc
pin: GPIO23
id: screen_led
light:
- platform: monochromatic
output: screen_led
default_transition_length: 0.2s
name: 'Backlight'
restore_mode: ALWAYS_ON
touchscreen:
- platform: ft63x6
interrupt_pin: GPIO39
on_touch:
- logger.log:
format: Touch %d at (%d, %d)
args: [touch.id, touch.x, touch.y]
Configuration variables:
------------------------
- **id** (*Optional*, :ref:`config-id`): Manually set the ID of this touchscreen.
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The reset pin of the controller.
- **interrupt_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The touch detection pin.
- All other options from :ref:`config-touchscreen`.
See Also
--------
- :doc:`Touchscreen <index>`
- :apiref:`ft63x6/ft63x6.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,72 @@
gt911 Touch Screen Controller
===============================
.. seo::
:description: Instructions for setting up gt911 touch screen controller with ESPHome
:image: esp32_s3_box_3.png
:keywords: GT911, ESP32-S3-BOX-3
The ``gt911`` touchscreen platform allows using the touch screen controllers based on the gt911 chip with ESPHome.
The :ref:`I²C <i2c>` is required to be set up in your configuration for this touchscreen to work.
This controller is used in the Espressif ESP32-S3-BOX-3 and the m5paper;
.. figure:: images/esp32_s3_box_3.png
:align: center
:width: 50.0%
gt911 touchscreen on ESP32-S3-BOX-3
Base Touchscreen Configuration
------------------------------
.. code-block:: yaml
# Example configuration entry
touchscreen:
platform: gt911
id: my_touchscreen
interrupt_pin: GPIO3
Configuration variables:
************************
- **id** (*Optional*, :ref:`config-id`): Manually set the ID of this touchscreen.
- **interrupt_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The touch detection pin.
- **rotation** (*Optional*): Set the rotation of the touchscreen. By default this will be set to match the display associated with the touchscreen, but this allows more control. Choices are ``0``, ``90``, ``180`` and ``270``.
- All other options from :ref:`Touchscreen <config-touchscreen>`.
Binary Sensor
-------------
In addition to touch areas on the screen configured through the :ref:`Touchscreen <config-touchscreen>` component,
the gt911 supports up to four buttons located outside of the normal touchscreen area.
On the ESP32-S3-BOX-3 the red circle below the display is such a button.
A binary sensor can be configured to react to touching these buttons.
.. code-block:: yaml
# Example configuration entry
binary_sensor:
- platform: gt911
name: "Home"
index: 0
Configuration variables:
************************
- **gt911_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the touchscreen.
- **index** (*Optional*, int): Internal index of the touch button, between 0 and 3. The default is 0.
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.
See Also
--------
- :ref:`Binary Sensor Filters <binary_sensor-filters>`
- :apiref:`gt911/touchscreen/gt911.h`
- :apiref:`gt911/binary_sensor/gt911_button.h`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -5,7 +5,7 @@ Touchscreen Components
:description: Instruction for using touchscreen components.
:image: folder-open.svg
The ``touchscreen`` component holds the base code for most touchscreen components
The ``touchscreen`` component contains the base code for most touchscreen driver components
available in ESPHome and is responsible for passing the touch events to
``binary_sensors`` with the ``touchscreen`` platform.
@ -19,28 +19,82 @@ Base Touchscreen Configuration
# Example touchscreen
touchscreen:
- platform: ...
display: display1
on_touch:
then:
...
on_update:
then:
...
on_release:
then:
...
Configuration variables:
************************
- **display** (*Required*, :ref:`config-id`): The display to use this touchscreen with. This will be provided automatically if only one display is configured on the device.
- **on_touch** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when the touchscreen is touched. See :ref:`touchscreen-on_touch`.
- **display** (**Required**, :ref:`config-id`): The display to use. If only one display is
available, this can be omitted.
- **on_update** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when the touchscreen is touched. See :ref:`touchscreen-on_update`.
- **on_release** (*Optional*, :ref:`Automation <automation>`): An automation to perform
when the touchscreen is no longer touched. See :ref:`touchscreen-on_release`.
.. _touchscreen-touchpoint:
``TouchPoint`` Argument Type
----------------------------
Both the :ref:`touchscreen-on_touch` and :ref:`touchscreen-on_update` have an argument of the type :apistruct:`touchscreen::TouchPoint` in a
list (``on_update``) or as an ``optional`` (``on_touch``).
The integer members for the touch positions below are in relation to the display width and height:
- ``x`` and ``y`` are the current position.
- ``x_last`` and ``y_last`` are the previous position.
- ``x_first`` and ``y_first`` are the position of the touch when it was first detected.
- ``x_raw`` and ``y_raw`` are for calibrating the touchscreen in relation of the display. This replaces the properties with the same name in the touchscreen classes.
- ``id`` is a number provided by the touchscreen to uniquely identify the touch on a multi-touch screen.
- ``state`` indicates the state of the touch. This can be **1**, indicating it is an initial touch, or **2** indicating the touch position has changed/moved.
.. _touchscreen-on_touch:
``on_touch`` Trigger
--------------------
This automation will be triggered when the touchscreen detects a touch.
This automation will be triggered when the touchscreen initially detects a touch on the touchscreen; it will not be fired again until
all touches (for multi-touch supported drivers) are released.
NOTE: This has changed (from ESPHome 2023.11.6.) To receive continuous updates from touch drags, use :ref:`touchscreen-on_update`.
This trigger provides two arguments named ``touch`` of type *touchpoint* and ``touches`` with a list of all touches.
.. _touchscreen-on_update:
``on_update`` Trigger
---------------------
This new automation will be triggered when the touchscreen detects an extra touch or that a touch has moved around on the screen.
This trigger provides one argument named ``touches`` of type :apiref:`touchscreen::TouchPoints_t` which has a list of
:ref:`touchscreen-touchpoint`.
This trigger may be useful to detect gestures such as swiping across the display.
.. _touchscreen-on_release:
``on_release`` Trigger
----------------------
This automation will be triggered when all touches are released from the touchscreen.
At this point of time it has no extra arguments.
This trigger provides one argument named ``touch`` of type :apistruct:`touchscreen::TouchPoint` which has two integer members: ``x`` and ``y`` which
represent the position of the touch in relation to the display width and height. It also has optional members that will be set
depending on the touchscreen platform.
Binary Sensor
-------------
@ -82,6 +136,7 @@ See Also
- :doc:`EKTF2232 </components/touchscreen/ektf2232>`
- :doc:`XPT2046 </components/touchscreen/xpt2046>`
- :doc:`TT21100 </components/touchscreen/tt21100>`
- :doc:`GT911 </components/touchscreen/gt911>`
- :apiref:`touchscreen/touchscreen.h`
- :apiref:`touchscreen/binary_sensor/touchscreen_binary_sensor.h`
- :ghedit:`Edit`

View File

@ -108,10 +108,10 @@ values nor ``swap_x_y``.
on_touch:
- lambda: |-
ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%0d",
id(my_touchscreen).x,
id(my_touchscreen).y,
id(my_touchscreen).x_raw,
id(my_touchscreen).y_raw
touch.x,
touch.y,
touch.x_raw,
touch.y_raw
);
Get a stylus or a similar object, run the project and touch the corners of the screen at
@ -175,9 +175,9 @@ using a display lambda similar to the following.
display:
- platform: ili9341
lambda: |-
it.fill(BLACK);
if (id(my_touchscreen).touched)
it.filled_circle(id(my_touchscreen).x, id(my_touchscreen).y, 10, RED);
auto touch = id(my_touchscreen)->get_touch();
if (touch) // or touch.has_value()
it.filled_circle(touch.value().x, touch.value().y, 10, RED);
To be exact, the component does the following

View File

@ -68,7 +68,7 @@ Configuration variables:
- **manual_ip** (*Optional*): Manually set the IP options for the AP. Same options as
manual_ip for station mode.
- **ap_timeout** (*Optional*, :ref:`config-time`): The time after which to enable the
configured fallback hotspot. Defaults to ``1min``.
configured fallback hotspot. Can be disabled by setting this to ``0s``, which requires manually starting the AP by other means (eg: from a button press). Defaults to ``1min``.
- **domain** (*Optional*, string): Set the domain of the node hostname used for uploading.
For example, if it's set to ``.local``, all uploads will be sent to ``<HOSTNAME>.local``.

View File

@ -50,7 +50,7 @@ Pin configuration variables:
****************************
- **xl9535** (**Required**, :ref:`config-id`): The id of the ``xl9535`` component of the pin.
- **number** (**Required**, int): The pin number.
- **number** (**Required**, int): The pin number. Valid numbers are 0-7 and 10-17.
- **inverted** (*Optional*, boolean): If all read and written values
should be treated as inverted. Defaults to ``false``.
- **mode** (*Optional*, string): A pin mode to set for the pin at. One of ``INPUT`` or ``OUTPUT``.

View File

@ -67,9 +67,9 @@ author = "ESPHome"
# built documents.
#
# The short X.Y version.
version = "2023.11"
version = "2023.12"
# The full version, including alpha/beta/rc tags.
release = "2023.11.6"
release = "2023.12.0b1"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -977,9 +977,14 @@ trigger, but this technique is more light-weight and user-friendly.
then:
- switch.toggle: relay_1
If a startup delay is configured, the first execution of the actions will not occur before at least that time
after boot.
Configuration variables:
- **interval** (**Required**, :ref:`config-time`): The interval to execute the action with.
- **startup_delay** (*Optional*, :ref:`config-time`): An optional startup delay - defaults to zero.
- **then** (**Required**, :ref:`Action <config-action>`): The action to perform.

View File

@ -90,6 +90,10 @@ Configuration variables:
- **number** (**Required**, pin): The pin number.
- **inverted** (*Optional*, boolean): If all read and written values
should be treated as inverted. Defaults to ``false``.
- **allow_other_uses** (*Optional*, boolean): If the pin is also specified elsewhere in the configuration.
By default multiple uses of the same pin will be flagged as an error. This option will suppress the error and is
intended for rare cases where a pin is shared between multiple components. Defaults to ``false``.
- **mode** (*Optional*, string or mapping): Configures the pin to behave in different
modes like input or output. The default value depends on the context.
Accepts either a shorthand string or a mapping where each feature can be individually
@ -545,6 +549,28 @@ For example to set a specific update interval on a common uptime sensor that is
- id: !extend uptime_sensor
update_interval: 10s
Remove
------
To remove existing entries from included configurations ``!remove [config_id]`` can be used, where ``config_id`` is the ID of the entry to modify.
For example to remove a common uptime sensor that is shared between configurations:
.. code-block:: yaml
packages:
common: !include common.yaml
sensor:
- id: !remove uptime_sensor
To remove captive portal for a specific device:
.. code-block:: yaml
packages:
common: !include common.yaml
captive_portal: !remove
See Also
--------

View File

@ -169,7 +169,6 @@ Contributors
- `Bryan Berg (@berg) <https://github.com/berg>`__
- `BerlinJoker (@BerlinJoker) <https://github.com/BerlinJoker>`__
- `Bert Hertogen (@berthertogen) <https://github.com/berthertogen>`__
- `Ivan Bessarabov (@bessarabov) <https://github.com/bessarabov>`__
- `Brandon (@bgulla) <https://github.com/bgulla>`__
- `Benedikt Hübschen (@bhuebschen) <https://github.com/bhuebschen>`__
- `Bierchermuesli (@Bierchermuesli) <https://github.com/Bierchermuesli>`__
@ -183,6 +182,7 @@ Contributors
- `Branimir Lambov (@blambov) <https://github.com/blambov>`__
- `bleeisme (@bleeisme) <https://github.com/bleeisme>`__
- `Jim Ekman (@blejdfist) <https://github.com/blejdfist>`__
- `blindguynar (@blindguynar) <https://github.com/blindguynar>`__
- `Scott Smith (@blurfl) <https://github.com/blurfl>`__
- `Bruno Medici (@bmedici) <https://github.com/bmedici>`__
- `Bob (@Bmooij) <https://github.com/Bmooij>`__
@ -264,6 +264,7 @@ Contributors
- `Casey Burnett (@codeangler) <https://github.com/codeangler>`__
- `CODeRUS (@CODeRUS) <https://github.com/CODeRUS>`__
- `Alex Miller (@Codex-) <https://github.com/Codex->`__
- `Ricardo Salinas (@codingric) <https://github.com/codingric>`__
- `Cody James (@codyjamestechnical) <https://github.com/codyjamestechnical>`__
- `Coenie Richards (@coenier) <https://github.com/coenier>`__
- `Ashton Lafferty (@cogneato) <https://github.com/cogneato>`__
@ -373,6 +374,7 @@ Contributors
- `DrZoid (@docteurzoidberg) <https://github.com/docteurzoidberg>`__
- `DominikBitzer (@DominikBitzer) <https://github.com/DominikBitzer>`__
- `Dominik (@DomiStyle) <https://github.com/DomiStyle>`__
- `Don Burch (@donburch888) <https://github.com/donburch888>`__
- `Derek M. (@doolbneerg) <https://github.com/doolbneerg>`__
- `Dorian Zedler (@dorianim) <https://github.com/dorianim>`__
- `Sebastian Krzyszkowiak (@dos1) <https://github.com/dos1>`__
@ -421,7 +423,6 @@ Contributors
- `Elkropac (@Elkropac) <https://github.com/Elkropac>`__
- `Elliot Wood (@elliot-wood) <https://github.com/elliot-wood>`__
- `Eduard Llull (@ellull) <https://github.com/ellull>`__
- `Joakim Plate (@elupus) <https://github.com/elupus>`__
- `EmbeddedDevver (@EmbeddedDevver) <https://github.com/EmbeddedDevver>`__
- `EmmanuelLM (@EmmanuelLM) <https://github.com/EmmanuelLM>`__
- `Emory Dunn (@emorydunn) <https://github.com/emorydunn>`__
@ -431,6 +432,7 @@ Contributors
- `Bert (@Engelbert) <https://github.com/Engelbert>`__
- `Engineer_Will (@EngineerWill) <https://github.com/EngineerWill>`__
- `Evan Petousis (@epetousis) <https://github.com/epetousis>`__
- `erapade (@erapade) <https://github.com/erapade>`__
- `Josh Gwosdz (@erdii) <https://github.com/erdii>`__
- `Eric Coffman (@ericbrian) <https://github.com/ericbrian>`__
- `Eric Hiller (@erichiller) <https://github.com/erichiller>`__
@ -439,6 +441,7 @@ Contributors
- `escoand (@escoand) <https://github.com/escoand>`__
- `Eric Severance (@esev) <https://github.com/esev>`__
- `esphomebot (@esphomebot) <https://github.com/esphomebot>`__
- `espressif2022 (@espressif2022) <https://github.com/espressif2022>`__
- `Daniel Dunn (@EternityForest) <https://github.com/EternityForest>`__
- `EtienneMD (@EtienneMD) <https://github.com/EtienneMD>`__
- `Evan Coleman (@evandcoleman) <https://github.com/evandcoleman>`__
@ -455,15 +458,18 @@ Contributors
- `Fabian Bläse (@fblaese) <https://github.com/fblaese>`__
- `Fabian Berthold (@fbrthld) <https://github.com/fbrthld>`__
- `F.D.Castel (@fdcastel) <https://github.com/fdcastel>`__
- `Sun Xiangyu (@feizi) <https://github.com/feizi>`__
- `felixlungu (@felixlungu) <https://github.com/felixlungu>`__
- `Felix Storm (@felixstorm) <https://github.com/felixstorm>`__
- `Christian Ferbar (@ferbar) <https://github.com/ferbar>`__
- `ferbulous (@ferbulous) <https://github.com/ferbulous>`__
- `FeuerSturm (@FeuerSturm) <https://github.com/FeuerSturm>`__
- `Florian Golemo (@fgolemo) <https://github.com/fgolemo>`__
- `Federico G. Schwindt (@fgsch) <https://github.com/fgsch>`__
- `Frank Riley (@fhriley) <https://github.com/fhriley>`__
- `Frederik (@fightforlife) <https://github.com/fightforlife>`__
- `finity69x2 (@finity69x2) <https://github.com/finity69x2>`__
- `Clemens (@firegore) <https://github.com/firegore>`__
- `Fredrik Jansson (@fjansson) <https://github.com/fjansson>`__
- `Frédéric Jouault (@fjouault) <https://github.com/fjouault>`__
- `Sean Vig (@flacjacket) <https://github.com/flacjacket>`__
@ -473,6 +479,7 @@ Contributors
- `fluffymonster (@fluffymonster) <https://github.com/fluffymonster>`__
- `flyize (@flyize) <https://github.com/flyize>`__
- `风飘雨 (@flyrainning) <https://github.com/flyrainning>`__
- `Fabio Pugliese Ornellas (@fornellas) <https://github.com/fornellas>`__
- `Fractal147 (@Fractal147) <https://github.com/Fractal147>`__
- `Francis-labo (@Francis-labo) <https://github.com/Francis-labo>`__
- `Francisk0 (@Francisk0) <https://github.com/Francisk0>`__
@ -520,7 +527,6 @@ Contributors
- `Germán Martín (@gmag11) <https://github.com/gmag11>`__
- `Germain Masse (@gmasse) <https://github.com/gmasse>`__
- `Garret Buell (@gmbuell) <https://github.com/gmbuell>`__
- `Jelle Raaijmakers (@gmta) <https://github.com/gmta>`__
- `gnicolasb (@gnicolasb) <https://github.com/gnicolasb>`__
- `Go0oSer (@Go0oSer) <https://github.com/Go0oSer>`__
- `Dario Gogliandolo (@godario) <https://github.com/godario>`__
@ -554,6 +560,7 @@ Contributors
- `Gavin Mogan (@halkeye) <https://github.com/halkeye>`__
- `Charles (@hallard) <https://github.com/hallard>`__
- `Aniket (@HandyHat) <https://github.com/HandyHat>`__
- `Harrison Jones (@harrisonhjones) <https://github.com/harrisonhjones>`__
- `Charles Thompson (@haryadoon) <https://github.com/haryadoon>`__
- `Ha Thach (@hathach) <https://github.com/hathach>`__
- `Cong Hoang Nguyen (@HcNguyen111) <https://github.com/HcNguyen111>`__
@ -562,6 +569,7 @@ Contributors
- `hellotomtom (@hellotomtom) <https://github.com/hellotomtom>`__
- `Jimmy Hedman (@HeMan) <https://github.com/HeMan>`__
- `Hemi03 (@Hemi03) <https://github.com/Hemi03>`__
- `HengYongChao (@HengYongChao) <https://github.com/HengYongChao>`__
- `HepoH3 (@HepoH3) <https://github.com/HepoH3>`__
- `Hermann Kraus (@herm) <https://github.com/herm>`__
- `Herr Frei (@herrfrei) <https://github.com/herrfrei>`__
@ -588,6 +596,7 @@ Contributors
- `Jan Pobořil (@iBobik) <https://github.com/iBobik>`__
- `igg (@igg) <https://github.com/igg>`__
- `Ignacio Hernandez-Ros (@IgnacioHR) <https://github.com/IgnacioHR>`__
- `Ivan Grokhotkov (@igrr) <https://github.com/igrr>`__
- `ikatkov (@ikatkov) <https://github.com/ikatkov>`__
- `iKK001 (@iKK001) <https://github.com/iKK001>`__
- `ilium007 (@ilium007) <https://github.com/ilium007>`__
@ -600,7 +609,6 @@ Contributors
- `Ingurum (@Ingurum) <https://github.com/Ingurum>`__
- `Marc J (@InvncibiltyCloak) <https://github.com/InvncibiltyCloak>`__
- `IoT-devices LLC (@iotdevicesdev) <https://github.com/iotdevicesdev>`__
- `Ivo Roefs (@ironirc) <https://github.com/ironirc>`__
- `irtimaled (@irtimaled) <https://github.com/irtimaled>`__
- `Ingo Theiss (@itn3rd77) <https://github.com/itn3rd77>`__
- `itpeters (@itpeters) <https://github.com/itpeters>`__
@ -609,6 +617,7 @@ Contributors
- `Ivan Lisenkov (@ivlis) <https://github.com/ivlis>`__
- `Ivo-tje (@Ivo-tje) <https://github.com/Ivo-tje>`__
- `J0RD4N300 (@J0RD4N300) <https://github.com/J0RD4N300>`__
- `jacobswe (@jacobswe) <https://github.com/jacobswe>`__
- `Fredrik Gustafsson (@jagheterfredrik) <https://github.com/jagheterfredrik>`__
- `Jan Harkes (@jaharkes) <https://github.com/jaharkes>`__
- `jakehdk (@jakehdk) <https://github.com/jakehdk>`__
@ -647,7 +656,6 @@ Contributors
- `Jesse Hills (@jesserockz) <https://github.com/jesserockz>`__
- `Yuval Brik (@jhamhader) <https://github.com/jhamhader>`__
- `Joe (@jhansche) <https://github.com/jhansche>`__
- `Jim Bauwens (@jimbauwens) <https://github.com/jimbauwens>`__
- `jimtng (@jimtng) <https://github.com/jimtng>`__
- `jivesinger (@jivesinger) <https://github.com/jivesinger>`__
- `John K. Luebs (@jkl1337) <https://github.com/jkl1337>`__
@ -670,6 +678,7 @@ Contributors
- `JonnyaiR (@jonnyair) <https://github.com/jonnyair>`__
- `Joris S (@Jorre05) <https://github.com/Jorre05>`__
- `Jared Sanson (@jorticus) <https://github.com/jorticus>`__
- `JosephTang (@JosephTang) <https://github.com/JosephTang>`__
- `Joshua Spence (@joshuaspence) <https://github.com/joshuaspence>`__
- `joskfg (@joskfg) <https://github.com/joskfg>`__
- `Joscha Wagner (@jowgn) <https://github.com/jowgn>`__
@ -686,6 +695,7 @@ Contributors
- `Harald Nagel (@k7hpn) <https://github.com/k7hpn>`__
- `kaegi (@kaegi) <https://github.com/kaegi>`__
- `kahrendt (@kahrendt) <https://github.com/kahrendt>`__
- `Kaldek (@Kaldek) <https://github.com/Kaldek>`__
- `Kamahat (@kamahat) <https://github.com/kamahat>`__
- `Karl0ss (@karl0ss) <https://github.com/karl0ss>`__
- `Kattni (@kattni) <https://github.com/kattni>`__
@ -711,6 +721,7 @@ Contributors
- `konsulten (@konsulten) <https://github.com/konsulten>`__
- `Kevin P. Fleming (@kpfleming) <https://github.com/kpfleming>`__
- `Karl Q. (@kquinsland) <https://github.com/kquinsland>`__
- `Anandha Saravanan (@KratosMr) <https://github.com/KratosMr>`__
- `kroimon (@kroimon) <https://github.com/kroimon>`__
- `krunkel (@krunkel) <https://github.com/krunkel>`__
- `kryptonitecb3 (@kryptonitecb3) <https://github.com/kryptonitecb3>`__
@ -733,6 +744,7 @@ Contributors
- `Leo Winter (@LeoWinterDE) <https://github.com/LeoWinterDE>`__
- `Lubos Horacek (@lhoracek) <https://github.com/lhoracek>`__
- `Juraj Liso (@LiJu09) <https://github.com/LiJu09>`__
- `Li Junru (@lijunru-hub) <https://github.com/lijunru-hub>`__
- `lillborje71 (@lillborje71) <https://github.com/lillborje71>`__
- `lingex (@lingex) <https://github.com/lingex>`__
- `Markus (@Links2004) <https://github.com/Links2004>`__
@ -742,6 +754,7 @@ Contributors
- `Lazar Obradovic (@lobradov) <https://github.com/lobradov>`__
- `Barry Loong (@loongyh) <https://github.com/loongyh>`__
- `LuBeDa (@lubeda) <https://github.com/lubeda>`__
- `Lucas Prim (@lucasprim) <https://github.com/lucasprim>`__
- `Joakim Sørensen (@ludeeus) <https://github.com/ludeeus>`__
- `ludrao (@ludrao) <https://github.com/ludrao>`__
- `luka6000 (@luka6000) <https://github.com/luka6000>`__
@ -791,6 +804,7 @@ Contributors
- `matthias882 (@matthias882) <https://github.com/matthias882>`__
- `Matus Ivanecky (@maty535) <https://github.com/maty535>`__
- `Christian (@max246) <https://github.com/max246>`__
- `Max Bachmann (@maxbachmann) <https://github.com/maxbachmann>`__
- `Maximilian Gerhardt (@maxgerhardt) <https://github.com/maxgerhardt>`__
- `mbo18 (@mbo18) <https://github.com/mbo18>`__
- `mcmuller (@mcmuller) <https://github.com/mcmuller>`__
@ -811,11 +825,13 @@ Contributors
- `M Hightower (@mhightower83) <https://github.com/mhightower83>`__
- `Michael Muré (@MichaelMure) <https://github.com/MichaelMure>`__
- `Michal Fapso (@michalfapso) <https://github.com/michalfapso>`__
- `Michał (@michau-krakow) <https://github.com/michau-krakow>`__
- `Michel Munzert (@michelde) <https://github.com/michelde>`__
- `micw (@micw) <https://github.com/micw>`__
- `Pauline Middelink (@middelink) <https://github.com/middelink>`__
- `Joel Midstjärna (@midstar) <https://github.com/midstar>`__
- `Mike_Went (@MikeWent) <https://github.com/MikeWent>`__
- `Tucker Kern (@mill1000) <https://github.com/mill1000>`__
- `André Klitzing (@misery) <https://github.com/misery>`__
- `Tomasz (@Misiu) <https://github.com/Misiu>`__
- `MisterSilvereagle (@MisterSilvereagle) <https://github.com/MisterSilvereagle>`__
@ -860,6 +876,7 @@ Contributors
- `NanoSector (@NanoSector) <https://github.com/NanoSector>`__
- `Oskar Napieraj (@napieraj) <https://github.com/napieraj>`__
- `Patrick ZAJDA (@Nardol) <https://github.com/Nardol>`__
- `NatashaLi-ESPRESSIF (@NatashaLi-ESPRESSIF) <https://github.com/NatashaLi-ESPRESSIF>`__
- `Nate Lust (@natelust) <https://github.com/natelust>`__
- `Nathan Marlor (@nathanmarlor) <https://github.com/nathanmarlor>`__
- `ueno (@nayuta-ueno) <https://github.com/nayuta-ueno>`__
@ -867,12 +884,14 @@ Contributors
- `Bergont Nicolas (@nbergont) <https://github.com/nbergont>`__
- `neilger (@neilger) <https://github.com/neilger>`__
- `Nejc Koncan (@nejc-cc) <https://github.com/nejc-cc>`__
- `Nerijus Baliūnas (@nerijus) <https://github.com/nerijus>`__
- `Nicolas Graziano (@ngraziano) <https://github.com/ngraziano>`__
- `nickrout (@nickrout) <https://github.com/nickrout>`__
- `Nick Whyte (@nickw444) <https://github.com/nickw444>`__
- `Nicky Ivy (@nickyivyca) <https://github.com/nickyivyca>`__
- `NP v/d Spek (@nielsnl68) <https://github.com/nielsnl68>`__
- `Niels Zeilemaker (@NielsZeilemaker) <https://github.com/NielsZeilemaker>`__
- `Nigel VH (@nigelvh) <https://github.com/nigelvh>`__
- `nikito7 (@nikito7) <https://github.com/nikito7>`__
- `niklasweber (@niklasweber) <https://github.com/niklasweber>`__
- `Nippey (@Nippey) <https://github.com/Nippey>`__
@ -886,6 +905,7 @@ Contributors
- `Łukasz Śliwiński (@nonameplum) <https://github.com/nonameplum>`__
- `Greg Johnson (@notgwj) <https://github.com/notgwj>`__
- `JJ (@notjj) <https://github.com/notjj>`__
- `Geoffrey Mayo (@notmayo) <https://github.com/notmayo>`__
- `notsonominal (@notsonominal) <https://github.com/notsonominal>`__
- `nouser2013 (@nouser2013) <https://github.com/nouser2013>`__
- `Paul Read (@nsolvepaul) <https://github.com/nsolvepaul>`__
@ -941,6 +961,7 @@ Contributors
- `per1234 (@per1234) <https://github.com/per1234>`__
- `David (@perldj) <https://github.com/perldj>`__
- `Peter Galantha (@peterg79) <https://github.com/peterg79>`__
- `Peter Kieser (@pfak) <https://github.com/pfak>`__
- `Philippe Delodder (@phdelodder) <https://github.com/phdelodder>`__
- `Philipp Helo Rehs (@Phhere) <https://github.com/Phhere>`__
- `philbowers (@philbowers) <https://github.com/philbowers>`__
@ -960,7 +981,6 @@ Contributors
- `poloswiss (@poloswiss) <https://github.com/poloswiss>`__
- `Pontus Oldberg (@PontusO) <https://github.com/PontusO>`__
- `poptix (@poptix) <https://github.com/poptix>`__
- `Iván Povedano (@pove) <https://github.com/pove>`__
- `Peter Provost (@PProvost) <https://github.com/PProvost>`__
- `Q. Marchi (@preeefix) <https://github.com/preeefix>`__
- `Francesco Ciocchetti (@primeroz) <https://github.com/primeroz>`__
@ -976,6 +996,7 @@ Contributors
- `[pʲɵs] (@pyos) <https://github.com/pyos>`__
- `Qc (@qc24) <https://github.com/qc24>`__
- `Quinn Casey (@qcasey) <https://github.com/qcasey>`__
- `qianh-wan (@qianh-wan) <https://github.com/qianh-wan>`__
- `Tommy Jonsson (@quazzie) <https://github.com/quazzie>`__
- `Quentin Smith (@quentinmit) <https://github.com/quentinmit>`__
- `Richard Kuhnt (@r15ch13) <https://github.com/r15ch13>`__
@ -985,6 +1006,7 @@ Contributors
- `Florian Ragwitz (@rafl) <https://github.com/rafl>`__
- `raineth (@raineth) <https://github.com/raineth>`__
- `Ben V. Brown (@Ralim) <https://github.com/Ralim>`__
- `Benjamin G. (@Randomblock1) <https://github.com/Randomblock1>`__
- `randomllama (@randomllama) <https://github.com/randomllama>`__
- `Rodrigo Martín (@Rapsssito) <https://github.com/Rapsssito>`__
- `Marc Seeger (@rb2k) <https://github.com/rb2k>`__
@ -1068,6 +1090,7 @@ Contributors
- `Alexander Dimitrov (@sharkydog) <https://github.com/sharkydog>`__
- `Fabio Todaro (@SharpEdgeMarshall) <https://github.com/SharpEdgeMarshall>`__
- `ShellAddicted (@ShellAddicted) <https://github.com/ShellAddicted>`__
- `shenxiaozheng (@shenxiaozheng) <https://github.com/shenxiaozheng>`__
- `sherbang (@sherbang) <https://github.com/sherbang>`__
- `Shish (@shish) <https://github.com/shish>`__
- `signix (@signix) <https://github.com/signix>`__
@ -1082,6 +1105,7 @@ Contributors
- `Jordan W. Cobb (@skykingjwc) <https://github.com/skykingjwc>`__
- `Sebastian Lövdahl (@slovdahl) <https://github.com/slovdahl>`__
- `smischny (@smischny) <https://github.com/smischny>`__
- `Jacob Masen-Smith (@smithjacobj) <https://github.com/smithjacobj>`__
- `John Mueller (@softplus) <https://github.com/softplus>`__
- `Sourabh Jaiswal (@sourabhjaiswal) <https://github.com/sourabhjaiswal>`__
- `Philip Allgaier (@spacegaier) <https://github.com/spacegaier>`__
@ -1106,6 +1130,7 @@ Contributors
- `stubs12 (@stubs12) <https://github.com/stubs12>`__
- `sud33p (@sud33p) <https://github.com/sud33p>`__
- `sumirati (@sumirati) <https://github.com/sumirati>`__
- `Sun Xiang yu (@sun-xiangyu) <https://github.com/sun-xiangyu>`__
- `swhaat (@swhaat) <https://github.com/swhaat>`__
- `swifty99 (@swifty99) <https://github.com/swifty99>`__
- `Jan Gutowski (@Switch123456789) <https://github.com/Switch123456789>`__
@ -1200,6 +1225,7 @@ Contributors
- `Aaron Mildenstein (@untergeek) <https://github.com/untergeek>`__
- `uPesy Electronics (@uPesy) <https://github.com/uPesy>`__
- `UT2UH (@UT2UH) <https://github.com/UT2UH>`__
- `Vlad Yarotsky (@v-yarotsky) <https://github.com/v-yarotsky>`__
- `Vc (@Valcob) <https://github.com/Valcob>`__
- `Nad (@valordk) <https://github.com/valordk>`__
- `Veli Veromann (@velijv) <https://github.com/velijv>`__
@ -1211,6 +1237,7 @@ Contributors
- `VitaliyKurokhtin (@VitaliyKurokhtin) <https://github.com/VitaliyKurokhtin>`__
- `voed (@voed) <https://github.com/voed>`__
- `Xuming Feng (@voicevon) <https://github.com/voicevon>`__
- `vozvivan (@vozvivan) <https://github.com/vozvivan>`__
- `vt-vaio (@vt-vaio) <https://github.com/vt-vaio>`__
- `vtechun (@vtechun) <https://github.com/vtechun>`__
- `vxider (@Vxider) <https://github.com/Vxider>`__
@ -1236,6 +1263,7 @@ Contributors
- `workingmanrob (@workingmanrob) <https://github.com/workingmanrob>`__
- `Sven Serlier (@wrt54g) <https://github.com/wrt54g>`__
- `Wolfgang Tremmel (@wtremmel) <https://github.com/wtremmel>`__
- `Jiangang Wu (@wujiangang) <https://github.com/wujiangang>`__
- `wysiwyng (@wysiwyng) <https://github.com/wysiwyng>`__
- `De Cock Xavier (@xdecock) <https://github.com/xdecock>`__
- `Jakob (@XDjackieXD) <https://github.com/XDjackieXD>`__
@ -1247,7 +1275,6 @@ Contributors
- `Yaroslav (@Yarikx) <https://github.com/Yarikx>`__
- `Marcin Jaworski (@yawor) <https://github.com/yawor>`__
- `yousaf465 (@yousaf465) <https://github.com/yousaf465>`__
- `Jevgeni Kiski (@yozik04) <https://github.com/yozik04>`__
- `Yuval Aboulafia (@yuvalabou) <https://github.com/yuvalabou>`__
- `Björn Stenberg (@zagor) <https://github.com/zagor>`__
- `david reid (@zathras777) <https://github.com/zathras777>`__
@ -1260,4 +1287,4 @@ Contributors
- `Zsolt Zsiros (@ZsZs73) <https://github.com/ZsZs73>`__
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
*This page was last updated November 28, 2023.*
*This page was last updated December 14, 2023.*

BIN
images/a02yyuw.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
images/ens160.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
images/esp32_s3_box_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
images/he60r.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/pn7150.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
images/pn716x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
images/pylontech.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
images/wt32-sc01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -182,6 +182,7 @@ Air Quality
AirThings BLE, components/sensor/airthings_ble, airthings_logo.png, Radon, CO2, Volatile organics
CCS811, components/sensor/ccs811, ccs811.jpg, CO2 & Volatile organics
EE895, components/sensor/ee895, EE895.png, CO2 & Temperature & Pressure
ENS160, components/sensor/ens160, ens160.jpg, CO2 & Air Quality
GCJA5, components/sensor/gcja5, gcja5.svg, Particulate
HM3301, components/sensor/hm3301, hm3301.jpg, Particulate
MH-Z19, components/sensor/mhz19, mhz19.jpg, CO2 & Temperature
@ -249,6 +250,7 @@ Distance
.. imgtable::
A01NYUB, components/sensor/a01nyub, a01nyub.jpg, Acoustic distance
A02YYUW, components/sensor/a02yyuw, a02yyuw.jpg, Acoustic distance
HRXL MaxSonar WR, components/sensor/hrxl_maxsonar_wr, hrxl_maxsonar_wr.jpg, Acoustic distance
TOF10120, components/sensor/tof10120, tof10120.jpg, IR optical distance
Ultrasonic Sensor, components/sensor/ultrasonic, ultrasonic.jpg, Acoustic distance
@ -309,6 +311,7 @@ Environmental
DHT12, components/sensor/dht12, dht12.jpg, Temperature & Humidity
DPS310, components/sensor/dps310, dps310.jpg, Temperature & Pressure
EMC2101, components/emc2101, emc2101.jpg, Temperature
ENS160, components/sensor/ens160, ens160.jpg, CO2 & Air Quality
ENS210, components/sensor/ens210, ens210.jpg, Temperature & Humidity
HDC1080, components/sensor/hdc1080, hdc1080.jpg, Temperature & Humidity
HTE501, components/sensor/hte501, HTE501.png, Temperature & Humidity
@ -480,6 +483,8 @@ Often known as "tag" or "card" readers within the community.
.. imgtable::
PN532, components/binary_sensor/pn532, pn532.jpg
PN7150, components/binary_sensor/pn7150, pn7150.jpg
PN716X, components/binary_sensor/pn7160, pn716x.jpg
RC522, components/binary_sensor/rc522, rc522.jpg
RDM6300, components/binary_sensor/rdm6300, rdm6300.jpg
@ -490,7 +495,7 @@ Touchscreen
Nextion Binary Sensor, components/binary_sensor/nextion, nextion.jpg
Touchscreen, components/touchscreen/index, touch.svg, dark-invert
TT21100, components/touchscreen/tt21100, esp32-s3-korvo-2-lcd.png
XPT2046, components/binary_sensor/xpt2046, xpt2046.jpg
GT911, components/touchscreen/gt911, esp32_s3_box_3.png
Presence Detection
******************
@ -509,6 +514,7 @@ Miscellaneous
Hydreon Rain Sensor Binary Sensor, components/binary_sensor/hydreon_rgxx, hydreon_rg9.jpg
Modbus Binary Sensor, components/binary_sensor/modbus_controller, modbus.png
PipSolar - compatible PV Inverter, components/pipsolar, pipsolar.jpg
Pylontech Batteries, components/pylontech, pylontech.jpg
Qwiic PIR Motion, components/binary_sensor/qwiic_pir, qwiic_pir.jpg
Remote Receiver, components/remote_receiver, remote.svg, dark-invert
Resol VBus, components/vbus, resol_deltasol_bs_plus.jpg
@ -677,7 +683,10 @@ Touchscreen Components
EKTF2232, components/touchscreen/ektf2232, ektf2232.svg, Inkplate 6 Plus
Lilygo T5 4.7", components/touchscreen/lilygo_t5_47, lilygo_t5_47_touch.jpg
TT21100, components/touchscreen/tt21100, esp32-s3-korvo-2-lcd.png
XPT2046, components/touchscreen/xpt2046, xpt2046.jpg
GT911, components/touchscreen/gt911, esp32_s3_box_3.png
FT63X6, components/touchscreen/ft63x6, wt32-sc01.png
Cover Components
----------------
@ -692,6 +701,7 @@ Cover Components
Custom Cover, components/cover/custom, language-cpp.svg, dark-invert
AM43 Cover, components/cover/am43, am43.jpg
Tuya Cover, components/cover/tuya, tuya.png
HE60R Cover, components/cover/he60r, he60r.jpg
Text Sensor Components
----------------------
@ -834,6 +844,7 @@ Miscellaneous Components
Status LED, components/status_led, led-on.svg, dark-invert
Display Menu Core, components/display_menu/index, folder-open.svg, dark-invert
LCD Menu, components/display_menu/lcd_menu, lcd_menu.png
Graphical Display Menu, components/display_menu/graphical_display_menu, graphical_display_menu.jpg
Matrix Keypad, components/matrix_keypad, matrix_keypad.jpg
Wiegand Reader, components/wiegand, wiegand.jpg
HTTP Request, components/http_request, connection.svg, dark-invert