diff --git a/Doxygen b/Doxygen index 7aee3d4fd..8fad894c5 100644 --- a/Doxygen +++ b/Doxygen @@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2023.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 diff --git a/Makefile b/Makefile index ae390005a..cf45503fb 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/_static/changelog-2023.12.0.png b/_static/changelog-2023.12.0.png new file mode 100644 index 000000000..907ecb08c Binary files /dev/null and b/_static/changelog-2023.12.0.png differ diff --git a/_static/version b/_static/version index 452986527..cda3b6a99 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2023.11.6 \ No newline at end of file +2023.12.0b1 \ No newline at end of file diff --git a/changelog/2023.12.0.rst b/changelog/2023.12.0.rst new file mode 100644 index 000000000..8adb1e083 --- /dev/null +++ b/changelog/2023.12.0.rst @@ -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` diff --git a/changelog/index.rst b/changelog/index.rst index 75b72a843..6549def71 100644 --- a/changelog/index.rst +++ b/changelog/index.rst @@ -2,7 +2,7 @@ Changelog ========= .. redirect:: - :url: /changelog/2023.11.0.html + :url: /changelog/2023.12.0.html .. toctree:: :glob: diff --git a/components/binary_sensor/images/pn7150-full.jpg b/components/binary_sensor/images/pn7150-full.jpg new file mode 100644 index 000000000..da4a97241 Binary files /dev/null and b/components/binary_sensor/images/pn7150-full.jpg differ diff --git a/components/binary_sensor/images/pn716x-full.jpg b/components/binary_sensor/images/pn716x-full.jpg new file mode 100644 index 000000000..da4a97241 Binary files /dev/null and b/components/binary_sensor/images/pn716x-full.jpg differ diff --git a/components/binary_sensor/pn7150.rst b/components/binary_sensor/pn7150.rst new file mode 100644 index 000000000..3fafd6d66 --- /dev/null +++ b/components/binary_sensor/pn7150.rst @@ -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 `. + +.. figure:: images/pn7150-full.jpg + :align: center + :width: 70.0% + +An :ref:`I²C ` 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 `): 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 `): The pin connected to the PN7150's ``IRQ`` line. +- **ven_pin** (**Required**, :ref:`Pin Schema `): The pin connected to the PN7150's ``VEN`` line. +- **wkup_req_pin** (*Optional*, :ref:`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 `): An automation to perform when a tag is first read. See + :ref:`pn7150-on_tag`. +- **on_tag_removed** (*Optional*, :ref:`Automation `): An automation to perform after a tag is removed. See + :ref:`pn7150-on_tag_removed`. +- **on_emulated_tag_scan** (*Optional*, :ref:`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 ` 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 `: + +.. 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 ` 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` diff --git a/components/binary_sensor/pn7160.rst b/components/binary_sensor/pn7160.rst new file mode 100644 index 000000000..674ee6693 --- /dev/null +++ b/components/binary_sensor/pn7160.rst @@ -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 ` or :ref:`I²C `. + +.. 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 ` or the :ref:`I²C bus `. + +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 ` 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 `): The pin connected to the PN7160's ``NSS`` (chip + select) line. +- **dwl_req_pin** (*Optional*, :ref:`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 `): The pin connected to the PN7160's ``IRQ`` line. +- **ven_pin** (**Required**, :ref:`Pin Schema `): The pin connected to the PN7160's ``VEN`` line. +- **wkup_req_pin** (*Optional*, :ref:`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 `): An automation to perform when a tag is first read. See + :ref:`pn7160-on_tag`. +- **on_tag_removed** (*Optional*, :ref:`Automation `): An automation to perform after a tag is removed. See + :ref:`pn7160-on_tag_removed`. +- **on_emulated_tag_scan** (*Optional*, :ref:`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 ` 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 ` 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 `): 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 `): The pin connected to the PN7160's ``IRQ`` line. +- **ven_pin** (**Required**, :ref:`Pin Schema `): The pin connected to the PN7160's ``VEN`` line. +- **wkup_req_pin** (*Optional*, :ref:`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 `): An automation to perform when a tag is first read. See + :ref:`pn7160-on_tag`. +- **on_tag_removed** (*Optional*, :ref:`Automation `): An automation to perform after a tag is removed. See + :ref:`pn7160-on_tag_removed`. +- **on_emulated_tag_scan** (*Optional*, :ref:`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 ` 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 `: + +.. 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 ` 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` diff --git a/components/climate/bang_bang.rst b/components/climate/bang_bang.rst index cbe696c9f..78a160cd8 100644 --- a/components/climate/bang_bang.rst +++ b/components/climate/bang_bang.rst @@ -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 diff --git a/components/climate/haier.rst b/components/climate/haier.rst index 3cd5d5f54..9f818f100 100644 --- a/components/climate/haier.rst +++ b/components/climate/haier.rst @@ -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. diff --git a/components/climate/index.rst b/components/climate/index.rst index bc5ebf601..dde76b23b 100644 --- a/components/climate/index.rst +++ b/components/climate/index.rst @@ -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 `. -.. 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 `): Set the higher target temperature of a climate device with a two-point target temperature. +- **target_humidity** (*Optional*, float, :ref:`templatable `): Set the + target humidity of a climate device. - **preset** (*Optional*, string, :ref:`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 diff --git a/components/climate/pid.rst b/components/climate/pid.rst index 9bb3d8881..c8bdad802 100644 --- a/components/climate/pid.rst +++ b/components/climate/pid.rst @@ -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 ` diff --git a/components/climate/thermostat.rst b/components/climate/thermostat.rst index 2c281f102..6f72c15e4 100644 --- a/components/climate/thermostat.rst +++ b/components/climate/thermostat.rst @@ -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 *************************** diff --git a/components/cover/he60r.rst b/components/cover/he60r.rst new file mode 100644 index 000000000..e5eb064be --- /dev/null +++ b/components/cover/he60r.rst @@ -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 `. + +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` diff --git a/components/cover/images/he60r-sch.jpg b/components/cover/images/he60r-sch.jpg new file mode 100644 index 000000000..aaf74702c Binary files /dev/null and b/components/cover/images/he60r-sch.jpg differ diff --git a/components/cover/images/he60r.jpg b/components/cover/images/he60r.jpg new file mode 100644 index 000000000..025c76db6 Binary files /dev/null and b/components/cover/images/he60r.jpg differ diff --git a/components/display/ili9xxx.rst b/components/display/ili9xxx.rst index b7eb0ee4b..ecce42783 100644 --- a/components/display/ili9xxx.rst +++ b/components/display/ili9xxx.rst @@ -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 `__, 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 `): The DC pin. - **reset_pin** (*Optional*, :ref:`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 ``0°`` (default), ``90°``, ``180°``, or ``270°``. - **lambda** (*Optional*, :ref:`lambda `): The lambda to use for rendering the content on the display. See :ref:`display-engine` for more information. - **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``5s``. @@ -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 ``0°``, ``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 -------- diff --git a/components/display/index.rst b/components/display/index.rst index 2388f7233..12fdee505 100644 --- a/components/display/index.rst +++ b/components/display/index.rst @@ -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: diff --git a/components/display/nextion.rst b/components/display/nextion.rst index dd2ec2556..95c29a89e 100644 --- a/components/display/nextion.rst +++ b/components/display/nextion.rst @@ -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 `): An action to be performed after ESPHome connects to the Nextion. See :ref:`Nextion Automation `. - **on_sleep** (*Optional*, :ref:`Action `): An action to be performed when the Nextion goes to sleep. See :ref:`Nextion Automation `. - **on_wake** (*Optional*, :ref:`Action `): An action to be performed when the Nextion wakes up. See :ref:`Nextion Automation `. - **on_page** (*Optional*, :ref:`Action `): An action to be performed after a page change. See :ref:`Nextion Automation `. +- **on_touch** (*Optional*, :ref:`Action `): An action to be performed after a touch event (press or release). See :ref:`Nextion Automation `. .. _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 diff --git a/components/display/ssd1306.rst b/components/display/ssd1306.rst index 6b322309e..fda7e593a 100644 --- a/components/display/ssd1306.rst +++ b/components/display/ssd1306.rst @@ -12,7 +12,9 @@ Over I²C The ``ssd1306_i2c`` display platform allows you to use SSD1306 (`datasheet `__, -`Adafruit `__), SSD1305 (`datasheet `__) +`Adafruit `__), SSD1305 (`datasheet `__), +SH1107 (`datasheet `__, +`Adafruit `__) and SH1106 (`datasheet `__, `electrodragon `__) displays with ESPHome. Note that this component is for displays that are connected via the :ref:`I²C Bus `. @@ -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 `): 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 `): 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 `__ by `Adafruit `__ - `SSD1306 Library `__ by `Adafruit `__ - `SSD1305 Library `__ by `Adafruit `__ - :ghedit:`Edit` diff --git a/components/display_menu/graphical_display_menu.rst b/components/display_menu/graphical_display_menu.rst new file mode 100644 index 000000000..1c8629e76 --- /dev/null +++ b/components/display_menu/graphical_display_menu.rst @@ -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 ` 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 ` or :doc:`OLED displays `. + +.. 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 `): 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 `): 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 ` component. + +.. _drawing_modes: + +Drawing Modes +------------- + +Pop Up Mode +*********** + +When a **display** is specified the menu will create a :ref:`page ` 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 ` + +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 ` +- :ref:`Display ` +- :ref:`display-fonts` +- :ref:`display-pages` +- :apiref:`graphical_display_menu/graphical_display_menu.h` +- :ghedit:`Edit` diff --git a/components/display_menu/images/graphical_display_menu.jpg b/components/display_menu/images/graphical_display_menu.jpg new file mode 100644 index 000000000..eaed932d3 Binary files /dev/null and b/components/display_menu/images/graphical_display_menu.jpg differ diff --git a/components/esp32_camera.rst b/components/esp32_camera.rst index 8f5d5c7ad..793e08887 100644 --- a/components/esp32_camera.rst +++ b/components/esp32_camera.rst @@ -162,6 +162,7 @@ Automations: when a stream starts. - **on_stream_stop** (*Optional*, :ref:`Automation `): An automation to perform when a stream stops. +- **on_image** (*Optional*, :ref:`Automation `): An automation called when image taken. Image is available as ``image`` variable of type :apistruct:`esp32_camera::CameraImageData`. Test Setting: diff --git a/components/fan/hbridge.rst b/components/fan/hbridge.rst index 3035ab45c..4ed716697 100644 --- a/components/fan/hbridge.rst +++ b/components/fan/hbridge.rst @@ -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 `. .. _fan-hbridge_brake_action: diff --git a/components/fan/index.rst b/components/fan/index.rst index 112c1eff7..7dfdb0ef6 100644 --- a/components/fan/index.rst +++ b/components/fan/index.rst @@ -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 `): An automation to perform when the fan speed is set/changed. See :ref:`fan-on_speed_set_trigger`. +- **on_preset_set** (*Optional*, :ref:`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(); diff --git a/components/fan/speed.rst b/components/fan/speed.rst index 9969d0cdc..2f9f5bc6b 100644 --- a/components/fan/speed.rst +++ b/components/fan/speed.rst @@ -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 `. See Also diff --git a/components/images/pylontech.jpg b/components/images/pylontech.jpg new file mode 100644 index 000000000..06624cd9a Binary files /dev/null and b/components/images/pylontech.jpg differ diff --git a/components/images/rj45_pinout.jpg b/components/images/rj45_pinout.jpg new file mode 100644 index 000000000..ce898adeb Binary files /dev/null and b/components/images/rj45_pinout.jpg differ diff --git a/components/power_supply.rst b/components/power_supply.rst index 38e714e42..f9f4aff76 100644 --- a/components/power_supply.rst +++ b/components/power_supply.rst @@ -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 ` for information on how to apply the power supply for a specific output. diff --git a/components/pylontech.rst b/components/pylontech.rst new file mode 100644 index 000000000..547c85182 --- /dev/null +++ b/components/pylontech.rst @@ -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 ` 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 `. +- **current** (*Optional*): Current flowing into the battery. Negative when discharging. All options from :ref:`Sensor `. +- **coulomb** (*Optional*): State of Charge in percent. All options from :ref:`Sensor `. +- **temperature** (*Optional*): Temperature. All options from :ref:`Sensor `. +- **temperature_low** (*Optional*): Historic minimum temperature. All options from :ref:`Sensor `. +- **temperature_high** (*Optional*): Historic maximum temperature. All options from :ref:`Sensor `. +- **voltage_low** (*Optional*): Historic minimum voltage. All options from :ref:`Sensor `. +- **voltage_high** (*Optional*): Historic maximum voltage. All options from :ref:`Sensor `. +- **mos_temperature** (*Optional*): Temperature of the mosfets. All options from :ref:`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 `. +- **voltage_state** (*Optional*): Voltage state. Usually reads ``Normal``. All options from :ref:`Text Sensor `. +- **current_state** (*Optional*): Current state. Usually reads ``Normal``. All options from :ref:`Text Sensor `. +- **temperature_state** (*Optional*): Temperature state. Usually reads ``Normal``. All options from :ref:`Text Sensor `. + +Energy Monitoring +----------------- + +By combining :doc:`template sensors ` and :doc:`integration sensors ` +one can monitor the energy flowing into and out of all batteries combined, ready for `Homeassistant Energy Monitoring `__. + +.. 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 `__ +- `nodered-pylontech-console-reader `__ +- :ref:`uart` +- :ghedit:`Edit` diff --git a/components/remote_transmitter.rst b/components/remote_transmitter.rst index 49da78311..1d3c04234 100644 --- a/components/remote_transmitter.rst +++ b/components/remote_transmitter.rst @@ -111,7 +111,7 @@ This :ref:`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 ` 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 ` 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. diff --git a/components/sensor/a02yyuw.rst b/components/sensor/a02yyuw.rst new file mode 100644 index 000000000..e6a08463e --- /dev/null +++ b/components/sensor/a02yyuw.rst @@ -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 `__) +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 ` 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 `. + +See Also +-------- + +- :ref:`sensor-filters` +- :ref:`uart` +- :apiref:`a02yyuw/a02yyuw.h` +- :ghedit:`Edit` diff --git a/components/sensor/aht10.rst b/components/sensor/aht10.rst index e5a859e7a..80c7c89e7 100644 --- a/components/sensor/aht10.rst +++ b/components/sensor/aht10.rst @@ -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 `__), AHT20 (`datasheet `__), AHT21 (`datasheet `__) :ref:`I²C `-based sensor with ESPHome. +(`datasheet `__) or AHT20 (`datasheet `__) :ref:`I²C `-based sensor with ESPHome. The DHT20 (`datasheet `__) sensor has the packaging of the :doc:`dht` series, but has the AHT20 inside and is speaking :ref:`I²C ` as well. @@ -30,6 +30,7 @@ The DHT20 (`datasheet `__) # Example configuration entry sensor: - platform: aht10 + variant: AHT10 temperature: name: "Living Room Temperature" humidity: @@ -39,6 +40,11 @@ The DHT20 (`datasheet `__) 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. diff --git a/components/sensor/ens160.rst b/components/sensor/ens160.rst new file mode 100644 index 000000000..fd13e9c64 --- /dev/null +++ b/components/sensor/ens160.rst @@ -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 `__) air-quality sensors with ESPHome. The :ref:`I²C ` 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 `. + +- **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 `. + +- **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 `. + +- **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 `__) 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` diff --git a/components/sensor/images/a02yyuw-full.jpg b/components/sensor/images/a02yyuw-full.jpg new file mode 100644 index 000000000..8ca90d2fa Binary files /dev/null and b/components/sensor/images/a02yyuw-full.jpg differ diff --git a/components/sensor/images/ens160.jpg b/components/sensor/images/ens160.jpg new file mode 100644 index 000000000..43d23f565 Binary files /dev/null and b/components/sensor/images/ens160.jpg differ diff --git a/components/sensor/mopeka_pro_check.rst b/components/sensor/mopeka_pro_check.rst index accd95e91..d5b8b8406 100644 --- a/components/sensor/mopeka_pro_check.rst +++ b/components/sensor/mopeka_pro_check.rst @@ -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 `__ +- `Mopeka ` - `Lippert `__ - :ghedit:`Edit` diff --git a/components/sensor/sen5x.rst b/components/sensor/sen5x.rst index f8424ce85..560943b41 100644 --- a/components/sensor/sen5x.rst +++ b/components/sensor/sen5x.rst @@ -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``) diff --git a/components/touchscreen/ft63x6.rst b/components/touchscreen/ft63x6.rst new file mode 100644 index 000000000..b206d21cb --- /dev/null +++ b/components/touchscreen/ft63x6.rst @@ -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 `__ +with ESPHome. +The :ref:`I²C ` 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 `): The reset pin of the controller. +- **interrupt_pin** (*Optional*, :ref:`Pin Schema `): The touch detection pin. + +- All other options from :ref:`config-touchscreen`. + +See Also +-------- + +- :doc:`Touchscreen ` +- :apiref:`ft63x6/ft63x6.h` +- :ghedit:`Edit` diff --git a/components/touchscreen/gt911.rst b/components/touchscreen/gt911.rst new file mode 100644 index 000000000..a1182c6f8 --- /dev/null +++ b/components/touchscreen/gt911.rst @@ -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 ` 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 `): 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 `. + +Binary Sensor +------------- + +In addition to touch areas on the screen configured through the :ref:`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 `. + + +See Also +-------- + +- :ref:`Binary Sensor Filters ` +- :apiref:`gt911/touchscreen/gt911.h` +- :apiref:`gt911/binary_sensor/gt911_button.h` +- :ghedit:`Edit` diff --git a/components/touchscreen/images/esp32_s3_box_3.png b/components/touchscreen/images/esp32_s3_box_3.png new file mode 100644 index 000000000..75c7a1774 Binary files /dev/null and b/components/touchscreen/images/esp32_s3_box_3.png differ diff --git a/components/touchscreen/index.rst b/components/touchscreen/index.rst index 2357f646b..26ea94196 100644 --- a/components/touchscreen/index.rst +++ b/components/touchscreen/index.rst @@ -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 `): 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 `): An automation to perform + when the touchscreen is touched. See :ref:`touchscreen-on_update`. +- **on_release** (*Optional*, :ref:`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 ` - :doc:`XPT2046 ` - :doc:`TT21100 ` +- :doc:`GT911 ` - :apiref:`touchscreen/touchscreen.h` - :apiref:`touchscreen/binary_sensor/touchscreen_binary_sensor.h` - :ghedit:`Edit` diff --git a/components/touchscreen/xpt2046.rst b/components/touchscreen/xpt2046.rst index d000fa970..f3b8ac79a 100644 --- a/components/touchscreen/xpt2046.rst +++ b/components/touchscreen/xpt2046.rst @@ -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 diff --git a/components/wifi.rst b/components/wifi.rst index 9be722143..3de19cfb7 100644 --- a/components/wifi.rst +++ b/components/wifi.rst @@ -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 ``.local``. diff --git a/components/xl9535.rst b/components/xl9535.rst index 6eeae6010..e67a52d31 100644 --- a/components/xl9535.rst +++ b/components/xl9535.rst @@ -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``. diff --git a/conf.py b/conf.py index 5396e74b2..ee27937f3 100644 --- a/conf.py +++ b/conf.py @@ -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. diff --git a/guides/automations.rst b/guides/automations.rst index dca69fbdf..01bb9bc51 100644 --- a/guides/automations.rst +++ b/guides/automations.rst @@ -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 `): The action to perform. diff --git a/guides/configuration-types.rst b/guides/configuration-types.rst index 0ad094588..6428bbd83 100644 --- a/guides/configuration-types.rst +++ b/guides/configuration-types.rst @@ -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 -------- diff --git a/guides/supporters.rst b/guides/supporters.rst index 6483dfbf8..b66c22668 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -169,7 +169,6 @@ Contributors - `Bryan Berg (@berg) `__ - `BerlinJoker (@BerlinJoker) `__ - `Bert Hertogen (@berthertogen) `__ -- `Ivan Bessarabov (@bessarabov) `__ - `Brandon (@bgulla) `__ - `Benedikt Hübschen (@bhuebschen) `__ - `Bierchermuesli (@Bierchermuesli) `__ @@ -183,6 +182,7 @@ Contributors - `Branimir Lambov (@blambov) `__ - `bleeisme (@bleeisme) `__ - `Jim Ekman (@blejdfist) `__ +- `blindguynar (@blindguynar) `__ - `Scott Smith (@blurfl) `__ - `Bruno Medici (@bmedici) `__ - `Bob (@Bmooij) `__ @@ -264,6 +264,7 @@ Contributors - `Casey Burnett (@codeangler) `__ - `CODeRUS (@CODeRUS) `__ - `Alex Miller (@Codex-) `__ +- `Ricardo Salinas (@codingric) `__ - `Cody James (@codyjamestechnical) `__ - `Coenie Richards (@coenier) `__ - `Ashton Lafferty (@cogneato) `__ @@ -373,6 +374,7 @@ Contributors - `DrZoid (@docteurzoidberg) `__ - `DominikBitzer (@DominikBitzer) `__ - `Dominik (@DomiStyle) `__ +- `Don Burch (@donburch888) `__ - `Derek M. (@doolbneerg) `__ - `Dorian Zedler (@dorianim) `__ - `Sebastian Krzyszkowiak (@dos1) `__ @@ -421,7 +423,6 @@ Contributors - `Elkropac (@Elkropac) `__ - `Elliot Wood (@elliot-wood) `__ - `Eduard Llull (@ellull) `__ -- `Joakim Plate (@elupus) `__ - `EmbeddedDevver (@EmbeddedDevver) `__ - `EmmanuelLM (@EmmanuelLM) `__ - `Emory Dunn (@emorydunn) `__ @@ -431,6 +432,7 @@ Contributors - `Bert (@Engelbert) `__ - `Engineer_Will (@EngineerWill) `__ - `Evan Petousis (@epetousis) `__ +- `erapade (@erapade) `__ - `Josh Gwosdz (@erdii) `__ - `Eric Coffman (@ericbrian) `__ - `Eric Hiller (@erichiller) `__ @@ -439,6 +441,7 @@ Contributors - `escoand (@escoand) `__ - `Eric Severance (@esev) `__ - `esphomebot (@esphomebot) `__ +- `espressif2022 (@espressif2022) `__ - `Daniel Dunn (@EternityForest) `__ - `EtienneMD (@EtienneMD) `__ - `Evan Coleman (@evandcoleman) `__ @@ -455,15 +458,18 @@ Contributors - `Fabian Bläse (@fblaese) `__ - `Fabian Berthold (@fbrthld) `__ - `F.D.Castel (@fdcastel) `__ +- `Sun Xiangyu (@feizi) `__ - `felixlungu (@felixlungu) `__ - `Felix Storm (@felixstorm) `__ - `Christian Ferbar (@ferbar) `__ +- `ferbulous (@ferbulous) `__ - `FeuerSturm (@FeuerSturm) `__ - `Florian Golemo (@fgolemo) `__ - `Federico G. Schwindt (@fgsch) `__ - `Frank Riley (@fhriley) `__ - `Frederik (@fightforlife) `__ - `finity69x2 (@finity69x2) `__ +- `Clemens (@firegore) `__ - `Fredrik Jansson (@fjansson) `__ - `Frédéric Jouault (@fjouault) `__ - `Sean Vig (@flacjacket) `__ @@ -473,6 +479,7 @@ Contributors - `fluffymonster (@fluffymonster) `__ - `flyize (@flyize) `__ - `风飘雨 (@flyrainning) `__ +- `Fabio Pugliese Ornellas (@fornellas) `__ - `Fractal147 (@Fractal147) `__ - `Francis-labo (@Francis-labo) `__ - `Francisk0 (@Francisk0) `__ @@ -520,7 +527,6 @@ Contributors - `Germán Martín (@gmag11) `__ - `Germain Masse (@gmasse) `__ - `Garret Buell (@gmbuell) `__ -- `Jelle Raaijmakers (@gmta) `__ - `gnicolasb (@gnicolasb) `__ - `Go0oSer (@Go0oSer) `__ - `Dario Gogliandolo (@godario) `__ @@ -554,6 +560,7 @@ Contributors - `Gavin Mogan (@halkeye) `__ - `Charles (@hallard) `__ - `Aniket (@HandyHat) `__ +- `Harrison Jones (@harrisonhjones) `__ - `Charles Thompson (@haryadoon) `__ - `Ha Thach (@hathach) `__ - `Cong Hoang Nguyen (@HcNguyen111) `__ @@ -562,6 +569,7 @@ Contributors - `hellotomtom (@hellotomtom) `__ - `Jimmy Hedman (@HeMan) `__ - `Hemi03 (@Hemi03) `__ +- `HengYongChao (@HengYongChao) `__ - `HepoH3 (@HepoH3) `__ - `Hermann Kraus (@herm) `__ - `Herr Frei (@herrfrei) `__ @@ -588,6 +596,7 @@ Contributors - `Jan Pobořil (@iBobik) `__ - `igg (@igg) `__ - `Ignacio Hernandez-Ros (@IgnacioHR) `__ +- `Ivan Grokhotkov (@igrr) `__ - `ikatkov (@ikatkov) `__ - `iKK001 (@iKK001) `__ - `ilium007 (@ilium007) `__ @@ -600,7 +609,6 @@ Contributors - `Ingurum (@Ingurum) `__ - `Marc J (@InvncibiltyCloak) `__ - `IoT-devices LLC (@iotdevicesdev) `__ -- `Ivo Roefs (@ironirc) `__ - `irtimaled (@irtimaled) `__ - `Ingo Theiss (@itn3rd77) `__ - `itpeters (@itpeters) `__ @@ -609,6 +617,7 @@ Contributors - `Ivan Lisenkov (@ivlis) `__ - `Ivo-tje (@Ivo-tje) `__ - `J0RD4N300 (@J0RD4N300) `__ +- `jacobswe (@jacobswe) `__ - `Fredrik Gustafsson (@jagheterfredrik) `__ - `Jan Harkes (@jaharkes) `__ - `jakehdk (@jakehdk) `__ @@ -647,7 +656,6 @@ Contributors - `Jesse Hills (@jesserockz) `__ - `Yuval Brik (@jhamhader) `__ - `Joe (@jhansche) `__ -- `Jim Bauwens (@jimbauwens) `__ - `jimtng (@jimtng) `__ - `jivesinger (@jivesinger) `__ - `John K. Luebs (@jkl1337) `__ @@ -670,6 +678,7 @@ Contributors - `JonnyaiR (@jonnyair) `__ - `Joris S (@Jorre05) `__ - `Jared Sanson (@jorticus) `__ +- `JosephTang (@JosephTang) `__ - `Joshua Spence (@joshuaspence) `__ - `joskfg (@joskfg) `__ - `Joscha Wagner (@jowgn) `__ @@ -686,6 +695,7 @@ Contributors - `Harald Nagel (@k7hpn) `__ - `kaegi (@kaegi) `__ - `kahrendt (@kahrendt) `__ +- `Kaldek (@Kaldek) `__ - `Kamahat (@kamahat) `__ - `Karl0ss (@karl0ss) `__ - `Kattni (@kattni) `__ @@ -711,6 +721,7 @@ Contributors - `konsulten (@konsulten) `__ - `Kevin P. Fleming (@kpfleming) `__ - `Karl Q. (@kquinsland) `__ +- `Anandha Saravanan (@KratosMr) `__ - `kroimon (@kroimon) `__ - `krunkel (@krunkel) `__ - `kryptonitecb3 (@kryptonitecb3) `__ @@ -733,6 +744,7 @@ Contributors - `Leo Winter (@LeoWinterDE) `__ - `Lubos Horacek (@lhoracek) `__ - `Juraj Liso (@LiJu09) `__ +- `Li Junru (@lijunru-hub) `__ - `lillborje71 (@lillborje71) `__ - `lingex (@lingex) `__ - `Markus (@Links2004) `__ @@ -742,6 +754,7 @@ Contributors - `Lazar Obradovic (@lobradov) `__ - `Barry Loong (@loongyh) `__ - `LuBeDa (@lubeda) `__ +- `Lucas Prim (@lucasprim) `__ - `Joakim Sørensen (@ludeeus) `__ - `ludrao (@ludrao) `__ - `luka6000 (@luka6000) `__ @@ -791,6 +804,7 @@ Contributors - `matthias882 (@matthias882) `__ - `Matus Ivanecky (@maty535) `__ - `Christian (@max246) `__ +- `Max Bachmann (@maxbachmann) `__ - `Maximilian Gerhardt (@maxgerhardt) `__ - `mbo18 (@mbo18) `__ - `mcmuller (@mcmuller) `__ @@ -811,11 +825,13 @@ Contributors - `M Hightower (@mhightower83) `__ - `Michael Muré (@MichaelMure) `__ - `Michal Fapso (@michalfapso) `__ +- `Michał (@michau-krakow) `__ - `Michel Munzert (@michelde) `__ - `micw (@micw) `__ - `Pauline Middelink (@middelink) `__ - `Joel Midstjärna (@midstar) `__ - `Mike_Went (@MikeWent) `__ +- `Tucker Kern (@mill1000) `__ - `André Klitzing (@misery) `__ - `Tomasz (@Misiu) `__ - `MisterSilvereagle (@MisterSilvereagle) `__ @@ -860,6 +876,7 @@ Contributors - `NanoSector (@NanoSector) `__ - `Oskar Napieraj (@napieraj) `__ - `Patrick ZAJDA (@Nardol) `__ +- `NatashaLi-ESPRESSIF (@NatashaLi-ESPRESSIF) `__ - `Nate Lust (@natelust) `__ - `Nathan Marlor (@nathanmarlor) `__ - `ueno (@nayuta-ueno) `__ @@ -867,12 +884,14 @@ Contributors - `Bergont Nicolas (@nbergont) `__ - `neilger (@neilger) `__ - `Nejc Koncan (@nejc-cc) `__ +- `Nerijus Baliūnas (@nerijus) `__ - `Nicolas Graziano (@ngraziano) `__ - `nickrout (@nickrout) `__ - `Nick Whyte (@nickw444) `__ - `Nicky Ivy (@nickyivyca) `__ - `NP v/d Spek (@nielsnl68) `__ - `Niels Zeilemaker (@NielsZeilemaker) `__ +- `Nigel VH (@nigelvh) `__ - `nikito7 (@nikito7) `__ - `niklasweber (@niklasweber) `__ - `Nippey (@Nippey) `__ @@ -886,6 +905,7 @@ Contributors - `Łukasz Śliwiński (@nonameplum) `__ - `Greg Johnson (@notgwj) `__ - `JJ (@notjj) `__ +- `Geoffrey Mayo (@notmayo) `__ - `notsonominal (@notsonominal) `__ - `nouser2013 (@nouser2013) `__ - `Paul Read (@nsolvepaul) `__ @@ -941,6 +961,7 @@ Contributors - `per1234 (@per1234) `__ - `David (@perldj) `__ - `Peter Galantha (@peterg79) `__ +- `Peter Kieser (@pfak) `__ - `Philippe Delodder (@phdelodder) `__ - `Philipp Helo Rehs (@Phhere) `__ - `philbowers (@philbowers) `__ @@ -960,7 +981,6 @@ Contributors - `poloswiss (@poloswiss) `__ - `Pontus Oldberg (@PontusO) `__ - `poptix (@poptix) `__ -- `Iván Povedano (@pove) `__ - `Peter Provost (@PProvost) `__ - `Q. Marchi (@preeefix) `__ - `Francesco Ciocchetti (@primeroz) `__ @@ -976,6 +996,7 @@ Contributors - `[pʲɵs] (@pyos) `__ - `Qc (@qc24) `__ - `Quinn Casey (@qcasey) `__ +- `qianh-wan (@qianh-wan) `__ - `Tommy Jonsson (@quazzie) `__ - `Quentin Smith (@quentinmit) `__ - `Richard Kuhnt (@r15ch13) `__ @@ -985,6 +1006,7 @@ Contributors - `Florian Ragwitz (@rafl) `__ - `raineth (@raineth) `__ - `Ben V. Brown (@Ralim) `__ +- `Benjamin G. (@Randomblock1) `__ - `randomllama (@randomllama) `__ - `Rodrigo Martín (@Rapsssito) `__ - `Marc Seeger (@rb2k) `__ @@ -1068,6 +1090,7 @@ Contributors - `Alexander Dimitrov (@sharkydog) `__ - `Fabio Todaro (@SharpEdgeMarshall) `__ - `ShellAddicted (@ShellAddicted) `__ +- `shenxiaozheng (@shenxiaozheng) `__ - `sherbang (@sherbang) `__ - `Shish (@shish) `__ - `signix (@signix) `__ @@ -1082,6 +1105,7 @@ Contributors - `Jordan W. Cobb (@skykingjwc) `__ - `Sebastian Lövdahl (@slovdahl) `__ - `smischny (@smischny) `__ +- `Jacob Masen-Smith (@smithjacobj) `__ - `John Mueller (@softplus) `__ - `Sourabh Jaiswal (@sourabhjaiswal) `__ - `Philip Allgaier (@spacegaier) `__ @@ -1106,6 +1130,7 @@ Contributors - `stubs12 (@stubs12) `__ - `sud33p (@sud33p) `__ - `sumirati (@sumirati) `__ +- `Sun Xiang yu (@sun-xiangyu) `__ - `swhaat (@swhaat) `__ - `swifty99 (@swifty99) `__ - `Jan Gutowski (@Switch123456789) `__ @@ -1200,6 +1225,7 @@ Contributors - `Aaron Mildenstein (@untergeek) `__ - `uPesy Electronics (@uPesy) `__ - `UT2UH (@UT2UH) `__ +- `Vlad Yarotsky (@v-yarotsky) `__ - `Vc (@Valcob) `__ - `Nad (@valordk) `__ - `Veli Veromann (@velijv) `__ @@ -1211,6 +1237,7 @@ Contributors - `VitaliyKurokhtin (@VitaliyKurokhtin) `__ - `voed (@voed) `__ - `Xuming Feng (@voicevon) `__ +- `vozvivan (@vozvivan) `__ - `vt-vaio (@vt-vaio) `__ - `vtechun (@vtechun) `__ - `vxider (@Vxider) `__ @@ -1236,6 +1263,7 @@ Contributors - `workingmanrob (@workingmanrob) `__ - `Sven Serlier (@wrt54g) `__ - `Wolfgang Tremmel (@wtremmel) `__ +- `Jiangang Wu (@wujiangang) `__ - `wysiwyng (@wysiwyng) `__ - `De Cock Xavier (@xdecock) `__ - `Jakob (@XDjackieXD) `__ @@ -1247,7 +1275,6 @@ Contributors - `Yaroslav (@Yarikx) `__ - `Marcin Jaworski (@yawor) `__ - `yousaf465 (@yousaf465) `__ -- `Jevgeni Kiski (@yozik04) `__ - `Yuval Aboulafia (@yuvalabou) `__ - `Björn Stenberg (@zagor) `__ - `david reid (@zathras777) `__ @@ -1260,4 +1287,4 @@ Contributors - `Zsolt Zsiros (@ZsZs73) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated November 28, 2023.* +*This page was last updated December 14, 2023.* diff --git a/images/a02yyuw.jpg b/images/a02yyuw.jpg new file mode 100644 index 000000000..dc1782cc5 Binary files /dev/null and b/images/a02yyuw.jpg differ diff --git a/images/ens160.jpg b/images/ens160.jpg new file mode 100644 index 000000000..e9931ccc7 Binary files /dev/null and b/images/ens160.jpg differ diff --git a/images/esp32_s3_box_3.png b/images/esp32_s3_box_3.png new file mode 100644 index 000000000..75c7a1774 Binary files /dev/null and b/images/esp32_s3_box_3.png differ diff --git a/images/graphical_display_menu.jpg b/images/graphical_display_menu.jpg new file mode 100644 index 000000000..d224e96a8 Binary files /dev/null and b/images/graphical_display_menu.jpg differ diff --git a/images/he60r.jpg b/images/he60r.jpg new file mode 100644 index 000000000..716336263 Binary files /dev/null and b/images/he60r.jpg differ diff --git a/images/pn7150.jpg b/images/pn7150.jpg new file mode 100644 index 000000000..b9cef4e52 Binary files /dev/null and b/images/pn7150.jpg differ diff --git a/images/pn716x.jpg b/images/pn716x.jpg new file mode 100644 index 000000000..b9cef4e52 Binary files /dev/null and b/images/pn716x.jpg differ diff --git a/images/pylontech.jpg b/images/pylontech.jpg new file mode 100644 index 000000000..87925d645 Binary files /dev/null and b/images/pylontech.jpg differ diff --git a/images/wt32-sc01.png b/images/wt32-sc01.png new file mode 100644 index 000000000..1c0ccfa03 Binary files /dev/null and b/images/wt32-sc01.png differ diff --git a/index.rst b/index.rst index 24e7af3f5..35f037f5d 100644 --- a/index.rst +++ b/index.rst @@ -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