Merge pull request #3605 from esphome/bump-2024.2.0b1

2024.2.0b1
This commit is contained in:
Jesse Hills 2024-02-13 10:59:44 +13:00 committed by GitHub
commit db16e12dad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
62 changed files with 1861 additions and 190 deletions

View File

@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 2023.12.9
PROJECT_NUMBER = 2024.2.0b1
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -1 +1 @@
2023.12.9
2024.2.0b1

199
changelog/2024.2.0.rst Normal file
View File

@ -0,0 +1,199 @@
ESPHome 2024.2.0 - 21st February 2024
=====================================
.. seo::
:description: Changelog for ESPHome 2024.2.0.
:image: /_static/changelog-2024.2.0.png
:author: Jesse Hills
:author_twitter: @jesserockz
.. imgtable::
:columns: 4
micro Wake Word, components/micro_wake_word, voice-assistant.svg, dark-invert
AS5600, components/sensor/as5600, as5600.jpg
ST7567, components/display/st7567, st7567.jpg
BME280 SPI, components/sensor/bme280, bme280.jpg
VEML3235, components/sensor/veml3235, veml3235.jpg
Honeywell HIH I2C, components/sensor/honeywell_hih_i2c, honeywellhih.jpg
Combination, components/sensor/combination, function.svg, dark-invert
Full list of changes
--------------------
New Components
^^^^^^^^^^^^^^
- feat: add AS5600 component/sensor :esphomepr:`5174` by :ghuser:`ammmze` (new-integration)
- Support for ST7567 display 128x64 (I2C, SPI) :esphomepr:`5952` by :ghuser:`latonita` (new-integration)
- BME280 SPI :esphomepr:`5538` by :ghuser:`apbodrov` (new-integration) (breaking-change)
- Add support for VEML3235 lux sensor :esphomepr:`5959` by :ghuser:`kbx81` (new-integration)
- Add support of Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensor :esphomepr:`5730` by :ghuser:`Benichou34` (new-integration)
- Add combination sensor and remove absorbed kalman_combinator component :esphomepr:`5438` by :ghuser:`kahrendt` (new-integration) (breaking-change)
- Add micro_wake_word component :esphomepr:`6136` by :ghuser:`kahrendt` (new-integration)
Breaking Changes
^^^^^^^^^^^^^^^^
- PMSx003 add relevant device and state classes to default config :esphomepr:`5633` by :ghuser:`wheimbigner` (breaking-change)
- BME280 SPI :esphomepr:`5538` by :ghuser:`apbodrov` (new-integration) (breaking-change)
- convert cse7766 to non-polling :esphomepr:`6095` by :ghuser:`ssieb` (breaking-change)
- Add combination sensor and remove absorbed kalman_combinator component :esphomepr:`5438` by :ghuser:`kahrendt` (new-integration) (breaking-change)
All changes
^^^^^^^^^^^
- Bump esptool from 4.6.2 to 4.7.0 :esphomepr:`5935` by :ghuser:`dependabot[bot]`
- Bump actions/download-artifact from 3.0.2 to 4.0.0 :esphomepr:`5936` by :ghuser:`dependabot[bot]`
- Bump build-image action versions :esphomepr:`5954` by :ghuser:`jesserockz`
- Revert "Bump build-image action versions" :esphomepr:`5955` by :ghuser:`jesserockz`
- Revert "Bump actions/download-artifact from 3.0.2 to 4.0.0" :esphomepr:`5956` by :ghuser:`jesserockz`
- Bump zeroconf from 0.130.0 to 0.131.0 :esphomepr:`5967` by :ghuser:`dependabot[bot]`
- Add ability to lock to set mode :esphomepr:`5924` by :ghuser:`ysmilda`
- feat: add AS5600 component/sensor :esphomepr:`5174` by :ghuser:`ammmze` (new-integration)
- Add default substitutions for package includes :esphomepr:`5752` by :ghuser:`mknjc`
- Add gradient option to addressable color wipe effect :esphomepr:`5689` by :ghuser:`lifeisafractal`
- Added alarm processing for Haier component (hOn protocol) :esphomepr:`5965` by :ghuser:`paveldn`
- Allow haier remote protocol to use lambdas :esphomepr:`5898` by :ghuser:`catlee`
- PMSx003 add relevant device and state classes to default config :esphomepr:`5633` by :ghuser:`wheimbigner` (breaking-change)
- Add waveshare 2.7in V2 model :esphomepr:`5903` by :ghuser:`gumulka`
- Add support for waveshare 2.9in B V3 version :esphomepr:`5902` by :ghuser:`gumulka`
- Fix pin reuse in test1 :esphomepr:`5978` by :ghuser:`jesserockz`
- Add Waveshare 1.47in 172x320 to ST7789v component :esphomepr:`5884` by :ghuser:`mrtoy-me`
- (fingerprint_grow) Added on_finger_scan_invalid automation. :esphomepr:`5885` by :ghuser:`RubenNL`
- Alarm panel: Add changes to support enhanced features :esphomepr:`5671` by :ghuser:`hwstar`
- support default pins for adafruit esp32 feather v2 :esphomepr:`5482` by :ghuser:`sbrudenell`
- Bug: Unwanted change resistance in x9c component :esphomepr:`5483` by :ghuser:`fizista`
- Improvements to RF receiver for Drayton Digistat heating controller :esphomepr:`5504` by :ghuser:`marshn`
- Reduce memory usage with StringRef in MQTT Components :esphomepr:`5719` by :ghuser:`kahrendt`
- Nextion allow underscore on names :esphomepr:`5979` by :ghuser:`edwardtfn`
- Add Keeloq RF protocol :esphomepr:`5511` by :ghuser:`marshn`
- Add a Binary Sensor Filter for state settling :esphomepr:`5900` by :ghuser:`cottsay`
- Lint the script folder files :esphomepr:`5991` by :ghuser:`jesserockz`
- web_server support for home assistant like styling :esphomepr:`5854` by :ghuser:`afarago`
- [Touchscreen] Add expire of touch record. :esphomepr:`5986` by :ghuser:`Fabian-Schmidt`
- Support for ST7567 display 128x64 (I2C, SPI) :esphomepr:`5952` by :ghuser:`latonita` (new-integration)
- Add constants used by multiple display drivers to global const.py :esphomepr:`6033` by :ghuser:`clydebarrow`
- Nextion queue size :esphomepr:`6029` by :ghuser:`edwardtfn`
- Ble client additions and fixes :esphomepr:`5277` by :ghuser:`clydebarrow`
- HaierProtocol library updated to 0.9.25 to fix the answer_timeout bug :esphomepr:`6015` by :ghuser:`paveldn`
- GT911 touchscreen: Fix bug causing touch button release to fail :esphomepr:`6042` by :ghuser:`clydebarrow`
- Display: Introduce `draw_pixels_at()` method for fast block display rendering :esphomepr:`6034` by :ghuser:`clydebarrow`
- clang-format and clang-tidy scripts: More robust algorithm to find correct executable :esphomepr:`6041` by :ghuser:`clydebarrow`
- Don't crash with invalid adc pin :esphomepr:`6059` by :ghuser:`ssieb`
- Add questionmark to default glyphs. :esphomepr:`6053` by :ghuser:`RubenNL`
- pylontech: fix voltage_low and voltage_high wrong unit :esphomepr:`6060` by :ghuser:`functionpointer`
- Bump flake8 from 6.1.0 to 7.0.0 :esphomepr:`6058` by :ghuser:`dependabot[bot]`
- Nextion enable upload from https when using esp-idf :esphomepr:`6051` by :ghuser:`edwardtfn`
- Extends UART change at runtime to ESP8266 :esphomepr:`6019` by :ghuser:`edwardtfn`
- Nextion draw QR code at runtime :esphomepr:`6027` by :ghuser:`edwardtfn`
- Extend i2s config options :esphomepr:`6056` by :ghuser:`Hadatko`
- Add getter for image data_start :esphomepr:`6036` by :ghuser:`clydebarrow`
- Bump hypothesis to 6.92.1 :esphomepr:`6011` by :ghuser:`bdraco`
- Bump recommended ESP32 IDF to 4.4.6 :esphomepr:`6048` by :ghuser:`bdraco`
- Bump pytest from 7.4.3 to 7.4.4 :esphomepr:`6046` by :ghuser:`dependabot[bot]`
- dashboard: refactor ping implementation to be more efficient :esphomepr:`6002` by :ghuser:`bdraco`
- Bump pytest-asyncio from 0.23.2 to 0.23.3 :esphomepr:`6047` by :ghuser:`dependabot[bot]`
- Bump black from 23.12.0 to 23.12.1 :esphomepr:`6018` by :ghuser:`dependabot[bot]`
- Run python tests on windows and macos :esphomepr:`6010` by :ghuser:`bdraco`
- BME280 SPI :esphomepr:`5538` by :ghuser:`apbodrov` (new-integration) (breaking-change)
- Actions to enable and disable WireGuard connection :esphomepr:`5690` by :ghuser:`droscy`
- hydreon_rgxx - fix missing cg.add(var.set_model(...)) :esphomepr:`6065` by :ghuser:`mrtoy-me`
- Bump pillow to 10.2.0. :esphomepr:`6091` by :ghuser:`pfrenssen`
- convert cse7766 to non-polling :esphomepr:`6095` by :ghuser:`ssieb` (breaking-change)
- Use touch state from ft63x6 driver. :esphomepr:`6055` by :ghuser:`nielsnl68`
- update script/setup so it works fine on windows :esphomepr:`6087` by :ghuser:`nielsnl68`
- add Pico-ResTouch-LCD-3.5 :esphomepr:`6078` by :ghuser:`nielsnl68`
- Revert "add Pico-ResTouch-LCD-3.5" :esphomepr:`6098` by :ghuser:`nielsnl68`
- Add triangle shapes to display component :esphomepr:`6096` by :ghuser:`mathieu-mp`
- Fingerprint_grow: Trigger on finger scan start and on finger scan misplaced :esphomepr:`6003` by :ghuser:`alexborro`
- Add continuous option to the graph :esphomepr:`6093` by :ghuser:`ssieb`
- Add NFC binary sensor platform :esphomepr:`6068` by :ghuser:`kbx81`
- Socket: Add recvfrom method to receive UDP with source address. :esphomepr:`6103` by :ghuser:`clydebarrow`
- Add support for VEML3235 lux sensor :esphomepr:`5959` by :ghuser:`kbx81` (new-integration)
- CV: tidy up Schema wrapper :esphomepr:`6105` by :ghuser:`jesserockz`
- Add support X.509 client certificates for MQTT. :esphomepr:`5778` by :ghuser:`h2zero`
- Fix color observation for triangle outline in display component :esphomepr:`6107` by :ghuser:`mathieu-mp`
- Add support of Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensor :esphomepr:`5730` by :ghuser:`Benichou34` (new-integration)
- Proposal: Test yaml for each component :esphomepr:`5398` by :ghuser:`Fabian-Schmidt`
- WiFi fast_connect: save/load BSSID and channel for faster connect from sleep :esphomepr:`5931` by :ghuser:`rguca`
- Fixes Waveshare 7.5in B V2 and V3 :esphomepr:`6079` by :ghuser:`Pofilo`
- Add combination sensor and remove absorbed kalman_combinator component :esphomepr:`5438` by :ghuser:`kahrendt` (new-integration) (breaking-change)
- Bump platformio from 6.1.11 to 6.1.13 :esphomepr:`6086` by :ghuser:`dependabot[bot]`
- Bump actions/cache from 3.3.2 to 4.0.0 :esphomepr:`6110` by :ghuser:`dependabot[bot]`
- Enable networking and some other components on host platform :esphomepr:`6114` by :ghuser:`clydebarrow`
- Fix time component for host platform :esphomepr:`6118` by :ghuser:`clydebarrow`
- Add quad spi features :esphomepr:`5925` by :ghuser:`clydebarrow`
- add AM2120 device type :esphomepr:`6115` by :ghuser:`alexbuit`
- Add support for Waveshare EPD 2.13" V3 :esphomepr:`5363` by :ghuser:`clydebarrow`
- OTA 2 which confirm each written chunk :esphomepr:`6066` by :ghuser:`tomaszduda23`
- Remove optional<> for pointer types :esphomepr:`6120` by :ghuser:`kroimon`
- Improve temperature precision in BME280 and BMP280 :esphomepr:`6124` by :ghuser:`jxl77`
- Nextion TFT upload IDF memory optimization :esphomepr:`6128` by :ghuser:`edwardtfn`
- Add support for Pico-ResTouch-LCD-3.5 to ili9xxx driver :esphomepr:`6129` by :ghuser:`clydebarrow`
- Ensure filename is shown when YAML raises an error :esphomepr:`6139` by :ghuser:`bdraco`
- ILI9XXX: Restore offset usage in set_addr_window :esphomepr:`6147` by :ghuser:`clydebarrow`
- Minimum 1 for full_update_every to prevent IntegerDivideByZero. :esphomepr:`6150` by :ghuser:`RubenNL`
- Support tri-color waveshare eink displays 2.7inch B and B V2 :esphomepr:`4238` by :ghuser:`rnauber`
- Synchronise Device Classes from Home Assistant :esphomepr:`6158` by :ghuser:`esphomebot`
- dfrobot_sen0395: Use setLatency instead of outputLatency :esphomepr:`5665` by :ghuser:`jfroy`
- Add some components to the new testing framework (A part 1) :esphomepr:`6142` by :ghuser:`kbx81`
- WRGB or RGBW? WS2814 :esphomepr:`6164` by :ghuser:`mhetzi`
- Add some components to the new testing framework (A part 2) :esphomepr:`6162` by :ghuser:`kbx81`
- Bump aioesphomeapi to 21.0.2 :esphomepr:`6188` by :ghuser:`bdraco`
- Add some components to the new testing framework (B) :esphomepr:`6173` by :ghuser:`kbx81`
- Add "transformer_active" flag for use in effects. :esphomepr:`6157` by :ghuser:`TikiBill`
- CSE7766: fix power and current measurements at low loads :esphomepr:`6180` by :ghuser:`twasilczyk`
- host platform: improvements and bugfixes :esphomepr:`6137` by :ghuser:`clydebarrow`
- WLED Sync fix and BK72XX support :esphomepr:`6190` by :ghuser:`ChuckMash`
- Add missing vector.h for lightwaverf :esphomepr:`6196` by :ghuser:`kbx81`
- Add some components to the new testing framework (C) :esphomepr:`6174` by :ghuser:`kbx81`
- update docstrings in cpp_generator.py :esphomepr:`6212` by :ghuser:`nielsnl68`
- Fixed group mask logic for WLED Sync fix :esphomepr:`6193` by :ghuser:`ChuckMash`
- Add micro_wake_word component :esphomepr:`6136` by :ghuser:`kahrendt` (new-integration)
Past Changelogs
---------------
- :doc:`2023.12.0`
- :doc:`2023.11.0`
- :doc:`2023.10.0`
- :doc:`2023.9.0`
- :doc:`2023.8.0`
- :doc:`2023.7.0`
- :doc:`2023.6.0`
- :doc:`2023.5.0`
- :doc:`2023.4.0`
- :doc:`2023.3.0`
- :doc:`2023.2.0`
- :doc:`2022.12.0`
- :doc:`2022.11.0`
- :doc:`2022.10.0`
- :doc:`2022.9.0`
- :doc:`2022.8.0`
- :doc:`2022.6.0`
- :doc:`2022.5.0`
- :doc:`2022.4.0`
- :doc:`2022.3.0`
- :doc:`2022.2.0`
- :doc:`2022.1.0`
- :doc:`2021.12.0`
- :doc:`2021.11.0`
- :doc:`2021.10.0`
- :doc:`2021.9.0`
- :doc:`2021.8.0`
- :doc:`v1.20.0`
- :doc:`v1.19.0`
- :doc:`v1.18.0`
- :doc:`v1.17.0`
- :doc:`v1.16.0`
- :doc:`v1.15.0`
- :doc:`v1.14.0`
- :doc:`v1.13.0`
- :doc:`v1.12.0`
- :doc:`v1.11.0`
- :doc:`v1.10.0`
- :doc:`v1.9.0`
- :doc:`v1.8.0`
- :doc:`v1.7.0`

View File

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

View File

@ -44,6 +44,11 @@ Configuration variables:
when the alarm state changes to ``disarmed``. See :ref:`alarm_control_panel_on_disarmed_trigger`.
- **on_cleared** (*Optional*, :ref:`Action <config-action>`): An automation to perform
when the alarm clears. See :ref:`alarm_control_panel_on_cleared_trigger`.
- **on_ready** (*Optional*, :ref:`Action <config-action>`): An automation to perform
when the logical 'and' of all the zone sensors change state. See :ref:`alarm_control_panel_on_ready_trigger`.
- **on_chime** (*Optional*, :ref:`Action <config-action>`): An automation to perform
when a zone has been marked as chime in the configuration, and it changes from closed to open.
See :ref:`alarm_control_panel_on_chime_trigger`.
Automation:
@ -184,6 +189,39 @@ This trigger is activated when the alarm changes from to disarmed.
then:
- logger.log: "Alarm Disarmed!"
.. _alarm_control_panel_on_ready_trigger:
``on_ready`` Trigger
********************
This trigger is activated when the logical 'and' of all the alarm sensors change state. This is useful for implementing "alarm ready" LEDs.
Once this trigger is called, you can get the ready state by calling get_all_sensors_ready() in a lambda block.
.. code-block:: yaml
alarm_control_panel:
# ...
on_disarmed:
then:
- lambda: !lambda |-
ESP_LOGI("AlarmPanel", "Sensor ready change to: %s", ((id(acp1).get_all_sensors_ready()) ? (const char *) "True" : (const char *) "False"));
.. _alarm_control_panel_on_chime_trigger:
``on_chime`` Trigger
********************
This trigger is activated when a zone sensor marked with chime:true changes from closed to open. This is useful for implementing keypad chimes when a zone
opens.
.. code-block:: yaml
alarm_control_panel:
# ...
on_chime:
then:
- logger.log: "Alarm Chime!"
.. _alarm_control_panel_arm_away_action:
``arm_away`` Action
@ -296,6 +334,7 @@ From :ref:`lambdas <config-lambda>`, you can call the following methods:
- ``arm_home(code)``
- ``arm_night(code)``
- ``disarm(code)``
- ``get_all_sensors_ready()``
.. code-block:: cpp
@ -303,6 +342,7 @@ From :ref:`lambdas <config-lambda>`, you can call the following methods:
id(acp1).arm_home();
id(acp1).arm_night();
id(acp1).disarm(std::string("1234"));
bool all_sensors_ready = id(acp1).get_all_sensors_ready();
Platforms

View File

@ -36,6 +36,8 @@ Configuration variables:
- **input** (**Required**, string): The id of the binary sensor component
- **bypass_armed_home** (*Optional*, boolean): This binary sensor will not trigger the alarm when in ``armed_home`` state.
- **bypass_armed_night** (*Optional*, boolean): This binary sensor will not trigger the alarm when in ``armed_night`` state.
- **trigger_mode** (*Optional*, string): Sets the trigger mode for this sensor. One of ``delayed``, ``instant``, or ``delayed_follower``. (``delayed`` is the default if not specified)
- **chime** (*Optional*, boolean): When set ``true``, the chime callback will be called whenever the sensor goes from closed to open. (``false`` is the default if not specified)
- **restore_mode** (*Optional*, enum):
@ -46,9 +48,33 @@ Configuration variables:
.. note::
If ``binary_sensors`` is ommited then you're expected to trigger the alarm using
If ``binary_sensors`` is omitted then you're expected to trigger the alarm using
:ref:`alarm_control_panel_pending_action` or :ref:`alarm_control_panel_triggered_action`.
.. _template_alarm_control_panel-trigger_modes:
Trigger Modes
-------------
Each binary sensor "zone" supports 3 trigger modes. The 3 trigger modes are:
- delayed
- instant
- delayed_follower
The ``delayed`` trigger mode is typically specified for exterior doors where entry is required to access an alarm keypad or other arm/disarm method. If the alarm panel is armed, and a zone set to ``delayed`` is "faulted" (i.e. the zone state is ``true``) the alarm state will change from the ``armed`` state to the ``pending`` state. During the ``pending`` state, the user has a preset time to disarm the alarm before it changes to the ``triggered`` state. This is the default trigger mode if not specified.
The ``instant`` trigger mode is typically used for exterior zones (e.g. windows, and glass break detectors). If the alarm control panel is armed, a fault on this type of zone will cause the alarm to go from the ``armed`` state directly to the ``triggered`` state.
The ``delayed_follower`` trigger mode is typically specifed for interior passive infared (PIR) or microwave sensors. One of two things happen when a ``delayed_follower`` zone is faulted:
1. When the alarm panel is in the armed state, a fault on a zone with ``delayed_follower`` specified will cause the alarm control panel to go directly to the ``triggered`` state.
2. When the alarm panel is in the pending state, a fault on a zone with ``delayed_follower`` specified will remain in the ``pending`` state.
The ``delayed_follower`` trigger mode offers better protection if someone enters a premises via an unprotected window or door. If there is a PIR guarding the main hallway, it will cause an instant trigger of the alarm panel as someone
entered the premises in a unusual manner. Likewise, if someone enters the premises though a door set to the ``delayed`` trigger mode, and then triggers the PIR, the alarm will stay in the ``pending`` state until either they disarm the alarm, or
the pending timer expires.
.. _template_alarm_control_panel-state_flow:
@ -63,18 +89,29 @@ State Flow:
3. When the alarm is tripped by a sensor state changing to ``on`` or ``alarm_control_panel_pending_action`` invoked
a. ``pending_time`` greater than 0 the state is ``PENDING``
b. ``pending_time`` is 0 or after the ``pending_time`` delay the state is ``TRIGGERED``
1. If trigger_mode is set to ``delayed``:
1. ``pending_time`` greater than 0 the state is ``PENDING``
2. ``pending_time`` is 0 or after the ``pending_time`` delay the state is ``TRIGGERED``
2. If trigger_mode is set to ``instant``:
1. The state is set to ``TRIGGERED``
3. If the trigger_mode is set to ``interior_follower``:
1. If the current state is ``ARMED_...`` the state will be set to ``TRIGGERED``
2. If the current state is ``PENDING`` then nothing will happen and it will stay in the ``PENDING`` state.
4. If ``trigger_time`` greater than 0 and no sensors are ``on`` after ``trigger_time`` delay
the state returns to ``ARM_...``
.. note::
Although the interface supports all arming modes only ``away`` and ``home`` have been implemented for now.
Although the interface supports all arming modes only ``away``, ``home`` and ``night`` have been implemented for now.
``arm_...`` is for either ``arm_away`` or ``arm_home``
``arming_..._time`` is for either ``arming_away_time`` or ``arming_home_time``
``ARMED_...`` is for either ``ARMED_AWAY`` or ``ARMED_HOME``
``arming_..._time`` is for either ``arming_away_time``, ``arming_home_time``, or ``arming_night_time``
``ARMED_...`` is for either ``ARMED_AWAY``, ``ARMED_HOME``, or ``ARMED_NIGHT``
Example:
@ -95,8 +132,16 @@ Example:
trigger_time: 5min
binary_sensors:
- input: zone_1
chime: true
trigger_mode: delayed
- input: zone_2
chime: true
trigger_mode: delayed
- input: zone_3
bypass_armed_home: true
trigger_mode: delayed_follower
- input: zone_4
trigger_mode: instant
- input: ha_test
on_state:
then:
@ -108,6 +153,15 @@ Example:
on_cleared:
then:
- switch.turn_off: siren
on_ready:
then:
- lambda: !lambda |-
ESP_LOGD("TEST", "Sensor ready change to: %s",
(id(acp1).get_all_sensors_ready())) ? (const char *) "True" : (const char *) "False");
on_chime:
then:
- lambda: !lambda |-
ESP_LOGD("TEST", "Zone with chime mode set opened");
binary_sensor:
- platform: gpio
@ -121,14 +175,30 @@ Example:
- platform: gpio
id: zone_2
name: Zone 2
device_class: motion
device_class: door
pin:
number: D2
mode: INPUT_PULLUP
inverted: True
- platform: gpio
id: zone_3
name: Zone 3
device_class: motion
pin:
number: D3
mode: INPUT_PULLUP
inverted: True
- platform: gpio
id: zone_4
name: Zone 4
device_class: door
pin:
number: D4
mode: INPUT_PULLUP
inverted: True
- platform: homeassistant
id: ha_test
name: Zone 3
name: HA Test
entity_id: input_boolean.test_switch
switch:

View File

@ -208,6 +208,16 @@ Specify any :ref:`lambda <config-lambda>` for more complex filters. The input va
the binary sensor is ``x`` and you can return ``true`` for ON, ``false`` for OFF, and ``{}`` to stop
the filter chain.
``settle``
**********
(**Required**, time, :ref:`templatable <config-templatable>`): When a signal is received, publish the state
but wait for the received state to remain the same for specified time period before publishing any
additional state changes. This filter complements the ``delayed_on_off`` filter but publishes value changes at
the beginning of the delay period.
When using a lambda call, you should return the delay value in milliseconds.
**Useful for debouncing binary switches**.
Binary Sensor Automation
------------------------

View File

@ -0,0 +1,90 @@
NFC Binary Sensor
=================
.. seo::
:description: Instructions for setting up a NFC binary sensor in ESPHome
:image: nfc.png
:keywords: PN532, PN7150, PN7160, NFC
.. _nfc-platform:
The ``nfc`` binary sensor platform provides an easy way for you to determine if an NFC tag is presented to the reader.
The tag may be identified in one of three ways:
- By given unique ID (``uid``) -- for example ``74-10-37-94``
- By a given NDEF tag "name", or...
- By a given string contained in the tag's NDEF message/data
Note that this platform is currently supported by the :doc:`PN7150 <../pn7150>` and :doc:`PN716x <../pn7160>` only;
one of these components must be present in your device's configuration in order to use it.
.. code-block:: yaml
# Example configuration entries
binary_sensor:
- platform: nfc
ndef_contains: pulse
name: "NFC 1 Tag"
- platform: nfc
tag_id: pulsed
name: "NFC 2 Tag"
- platform: nfc
uid: 74-10-37-94
name: "MFC Tag"
Configuration variables:
------------------------
- **ndef_contains** (*Optional*, string): A (sub)string that must appear in the tag's NDEF message. May not be used
with ``tag_id`` and/or ``uid`` (below).
- **tag_id** (*Optional*, string): A string that identifies the tag; in effect, its name. Specifically, this looks
for the Home Assistant URI encoded into one of the tag's NDEF records and then looks for this specific string. May
not be used with ``ndef_contains`` and/or ``uid``.
- **uid** (*Optional*, string): The unique ID of the NFC tag. This is a hyphen-separated list of hexadecimal values.
For example: ``74-10-37-94``. May not be used with ``ndef_contains`` and/or ``tag_id`` (above).
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.
.. _nfc-setting_up_tags:
Setting Up Tags
---------------
To set up a binary sensor for a given NFC tag, you must first know either its unique ID (``uid``), tag ID (if it was
prepared using the Home Assistant Companion app) or (part of) a string that is contained within its NDEF message.
To obtain a tag's UID:
- Set up a simple NFC component (such as the :doc:`PN532 <pn532>`, :doc:`PN7150 <../pn7150>` or :doc:`PN716x <../pn7160>`)
configuration without any binary sensors.
- Approach the NFC reader with an NFC tag. When the tag is sufficiently close to the reader, you'll see a message in the
ESPHome device's logs similar to this:
.. code::
Read tag type Mifare Classic with UID 1C-E5-E7-A6
- Either:
- Copy this ID and use it to create a ``binary_sensor`` entry as shown in the configuration example above, or...
- Use the tag ID (as determined when it was prepared with the Home Assistant Companion app) to define the ``tag_id``
parameter for the ``binary_sensor`` as shown above, or...
- Choose a substring contained within the tag's NDEF message and use this to define the ``ndef_contains`` parameter
as shown in the example above. If present, the tag's NDEF records will appear in the log on the lines just below
the message shown above.
Repeat this process for each tag.
Note that, since *you* are able to define the NDEF message, this approach is more flexible and even allows multiple
cards/tags to share the same message.
See Also
--------
- :doc:`index`
- :doc:`pn532`
- :doc:`../pn7150`
- :doc:`../pn7160`
- :apiref:`pn532/pn532.h`
- :apiref:`pn7150/pn7150.h`
- :apiref:`pn7160/pn7160.h`
- :ghedit:`Edit`

View File

@ -38,11 +38,13 @@ to discover available client devices.
ble_client:
- mac_address: FF:FF:20:00:0F:15
id: itag_black
auto_connect: true
Configuration variables:
------------------------
- **mac_address** (**Required**, MAC Address): The MAC address of the BLE device to connect to.
- **auto_connect** (*Optional*, boolean): If true the device will be automatically connected when found by the :doc:`/components/esp32_ble_tracker`. Defaults to true.
- **id** (**Required**, :ref:`config-id`): The ID to use for code generation, and for reference by dependent components.
Automations:
@ -153,6 +155,57 @@ This automation is triggered when a numeric comparison is requested by the BLE d
id: ble_itag
accept: True
.. _ble_client-connect_action:
``ble_client.connect`` Action
-----------------------------
This action is useful only for devices with ``auto_connect: false`` and allows a connection to be made from
within an automation. Once connected other actions like ``ble_write`` can be used. This is useful where
a BLE server needs only to be interacted with occasionally, and thus does not need a constant
connection held.
The following example updates the time of a Xiaomi MHO-C303 clock once per hour. Note that the BLE tracker must
be stopped during the connect attempt, and restarted afterwards. This would not be necessary if the tracker had
``continuous: false`` set. In this example scenario there is another BLE device that does require the scanner to be
on, hence the stop and start of the scan during connect.
.. code-block:: yaml
ble_client:
- id: ble_clock
mac_address: 17:75:BC:F2:94:4D
auto_connect: false
- id: other_device
mac_address: 0D:33:12:66:00:D4
interval:
- interval: 60min
then:
- esp32_ble_tracker.stop_scan:
- ble_client.connect: ble_clock
- ble_client.ble_write:
id: ble_clock
service_uuid: EBE0CCB0-7A0A-4B0C-8A1A-6FF2997DA3A6
characteristic_uuid: EBE0CCB7-7A0A-4B0C-8A1A-6FF2997DA3A6
value: !lambda |-
uint32_t t = id(sntp_time).now().timestamp + ESPTime::timezone_offset();
return {(uint8_t)t, (uint8_t)(t >> 8), (uint8_t)(t >> 16), (uint8_t)(t >> 24), 0};
- ble_client.disconnect: ble_clock
- esp32_ble_tracker.start_scan:
Any actions after the ``connect`` action will proceed only after the connect succeeds. If the connect
fails the subsequent actions in the automation block will *not* be executed. This should be considered
if scanning has been stopped - another mechanism may be required to restart it.
.. _ble_client-disconnect_action:
``ble_client.disconnect`` Action
--------------------------------
This action disconnects a device that was connected with the ``ble_client.connect`` action.
Execution of the automation block sequence resumes after the disconnect has completed.
.. _ble_client-ble_write_action:
``ble_client.ble_write`` Action
@ -161,6 +214,8 @@ This automation is triggered when a numeric comparison is requested by the BLE d
This action triggers a write to a specified BLE characteristic. The write is attempted in
a best-effort fashion and will only succeed if the ``ble_client``'s connection has been
established and the peripheral exposes the expected BLE service and characteristic.
Execution of the automation block sequence resumes after the write has completed. A write failure will *not*
stop execution of succeeding actions (this allows a disconnect to be executed, for example.)
Example usage:

View File

@ -2,14 +2,14 @@ Haier Climate
=============
.. seo::
:description: Instructions for setting up a Haier climate devices.
:description: Instructions for setting up Haier climate devices.
:image: air-conditioner.svg
This is an implementation of the ESPHome component to control HVAC on the base of the SmartAir2 and hOn Haier protocols (AC that is controlled by the hOn or SmartAir2 application).
There are two versions of the Haier protocol. The older one is using an application called SmartAir2 and the newer one - an application called hOn. Both protocols are compatible on the transport level but have different commands to control appliances.
There are two versions of the Haier protocol: the older version uses an application called SmartAir2 while the newer version uses an application called hOn. Both protocols are compatible on the transport level but utilize different commands to control appliances.
Older Haier models controlled by the SmartAir2 application are using the KZW-W002 module. This module cant be reused, and you need to replace it with an ESP (RPI pico w) module. The USB connector on a board doesnt support the USB protocol. It is a UART port that just uses a USB connector. To connect the ESP board to your AC you can cut a USB type A cable and connect wires to the climate connector.
Older Haier models controlled by the SmartAir2 application are using the KZW-W002 module. This module cant be reused, and you need to replace it with an ESP or RPI Pico W module. The USB connector on the board doesnt support the USB protocol. It is a UART port that just uses a USB connector. To connect the ESP board to your AC you can cut a USB type A cable and connect wires to the climate connector.
.. list-table:: Haier UART pinout
:header-rows: 1
@ -43,7 +43,7 @@ Older Haier models controlled by the SmartAir2 application are using the KZW-W00
Newer Haier models using a module called ESP32-for-Haier. It is an ESP32 single-core board with an ESP32-S0WD chip. In some cases, you can reuse this module and flash it with ESPHome, but some new modules dont support this. They look the same but have encryption enabled.
**Warning!** The new generation of ESP32-Haier devices has encryption enabled, so they can only be flashed with firmware that is signed with a private key. There is no way to make them work with ESPHome, so if you try to do it, the board will get into a boot loop with error ``rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)`` The only way to recover this board is to flash it with the original image. So before starting your experiments make a backup image.
**Warning!** The new generation of ESP32-Haier devices has encryption enabled, so they can only be flashed with firmware that is signed with a private key. There is no way to make them work with ESPHome, so if you try to do it, the board will get into a boot loop with the error ``rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)`` The only way to recover this board is to flash it with the original image. So before starting your experiments make a backup image.
.. figure:: images/haier_pinout.jpg
:align: center
@ -51,7 +51,7 @@ Newer Haier models using a module called ESP32-for-Haier. It is an ESP32 single-
ESP32-for-Haier UART0 pinout
Also, you can use any other ESP32, ESP8266 or a RPI pico W board. In this case, you will need to cut the original wire or make a connector yourself (the board has a JST SM04B-GHS-TB connector)
Also, you can use any other ESP32, ESP8266, or an RPI pico W board. In this case, you will need to cut the original wire or make a connector yourself (the board has a JST SM04B-GHS-TB connector)
This component requires a :ref:`uart` to be setup.
@ -92,10 +92,23 @@ This component requires a :ref:`uart` to be setup.
- VERTICAL
- HORIZONTAL
- BOTH
supported_presets:
- ECO
- BOOST
- SLEEP
supported_presets:
- AWAY
- ECO
- BOOST
- SLEEP
on_alarm_start:
then:
- logger.log:
level: WARN
format: "Alarm activated. Code: %d. Message: \"%s\""
args: [ code, message]
on_alarm_end:
then:
- logger.log:
level: INFO
format: "Alarm deactivated. Code: %d. Message: \"%s\""
args: [ code, message]
Configuration variables:
@ -103,14 +116,14 @@ Configuration variables:
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **uart_id** (*Optional*, :ref:`config-id`): ID of the UART port to communicate with AC.
- **protocol** (*Optional*, string): Defines protocol of communication with AC. Possible values: hon or smartair2. Default value is smartair2.
- **protocol** (*Optional*, string): Defines communication protocol with AC. Possible values: hon or smartair2. The 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 200ms.
- **answer_timeout** (*Optional*, :ref:`config-time`): Responce timeout. The 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_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. The 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.
- **display** (*Optional*, boolean): Can be used to set the 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.
@ -119,14 +132,52 @@ Configuration variables:
- All other options from :ref:`Sensor <config-sensor>`.
- **supported_modes** (*Optional*, list): Can be used to disable some of AC modes. Possible values: 'OFF', HEAT_COOL, COOL, HEAT, DRY, FAN_ONLY
- **supported_swing_modes** (*Optional*, list): Can be used to disable some swing modes if your AC does not support it. Possible values: 'OFF', VERTICAL, HORIZONTAL, BOTH
- **supported_presets** (*Optional*, list): Can be used to disable some presets. Possible values for smartair2 are: BOOST, COMFORT. Possible values for hOn are: ECO, BOOST, SLEEP
- **supported_presets** (*Optional*, list): Can be used to disable some presets. Possible values for smartair2 are: AWAY, BOOST, COMFORT. Possible values for hOn are: AWAY, ECO, BOOST, SLEEP. AWAY preset can be enabled only in HEAT mode, it is disabled by default
- **on_alarm_start (Optional, :ref:`Automation <automation>`):** (supported only by hOn) Automation to perform when AC activates a new alarm. See :ref:`haier-on_alarm_start`
- **on_alarm_end (Optional, :ref:`Automation <automation>`):** (supported only by hOn) Automation to perform when AC deactivates a new alarm. See :ref:`haier-on_alarm_end`
- All other options from :ref:`Climate <config-climate>`.
Automations
-----------
climate.haier.power_on Action
*****************************
.. _haier-on_alarm_start:
``on_alarm_start`` Trigger
**************************
This automation will be triggered when a new alarm is activated by AC. The error code of the alarm will be given in the variable "code" (type uint8_t), error message in the variable "message" (type char*). Those variables can be used in :ref:`lambdas <config-lambda>`
.. code-block:: yaml
climate:
- protocol: hOn
on_alarm_start:
then:
- logger.log:
level: WARN
format: "Alarm activated. Code: %d. Message: \"%s\""
args: [ code, message]
.. _haier-on_alarm_end:
``on_alarm_end`` Trigger
************************
This automation will be triggered when a previously activated alarm is deactivated by AC. The error code of the alarm will be given in the variable "code" (type uint8_t), error message in the variable "message" (type char*). Those variables can be used in :ref:`lambdas <config-lambda>`
.. code-block:: yaml
climate:
- protocol: hOn
on_alarm_end:
then:
- logger.log:
level: INFO
format: "Alarm deactivated. Code: %d. Message: \"%s\""
args: [ code, message]
``climate.haier.power_on`` Action
*********************************
This action turns AC power on.
@ -136,8 +187,8 @@ This action turns AC power on.
then:
climate.haier.power_on: device_id
climate.haier.power_off Action
******************************
``climate.haier.power_off`` Action
**********************************
This action turns AC power off
@ -147,8 +198,8 @@ This action turns AC power off
then:
climate.haier.power_off: device_id
climate.haier.power_toggle Action
*********************************
``climate.haier.power_toggle`` Action
*************************************
This action toggles AC power
@ -158,8 +209,8 @@ This action toggles AC power
then:
climate.haier.power_toggle: device_id
climate.haier.display_on Action
*******************************
``climate.haier.display_on`` Action
***********************************
This action turns the AC display on
@ -169,8 +220,8 @@ This action turns the AC display on
then:
climate.haier.display_on: device_id
climate.haier.display_off Action
********************************
``climate.haier.display_off`` Action
************************************
This action turns the AC display off
@ -180,8 +231,8 @@ This action turns the AC display off
then:
climate.haier.display_off: device_id
climate.haier.health_on Action
******************************
``climate.haier.health_on`` Action
**********************************
Turn on health mode (`UV light sterilization <https://www.haierhvac.eu/en/node/1809>`__)
@ -191,8 +242,8 @@ Turn on health mode (`UV light sterilization <https://www.haierhvac.eu/en/node/1
then:
climate.haier.health_on: device_id
climate.haier.health_off Action
*******************************
``climate.haier.health_off`` Action
***********************************
Turn off health mode
@ -202,8 +253,8 @@ Turn off health mode
then:
climate.haier.health_off: device_id
climate.haier.beeper_on Action
******************************
``climate.haier.beeper_on`` Action
**********************************
(supported only by hOn) This action enables beep feedback on every command sent to AC
@ -213,8 +264,8 @@ climate.haier.beeper_on Action
then:
climate.haier.beeper_on: device_id
climate.haier.beeper_off Action
*******************************
``climate.haier.beeper_off`` Action
***********************************
(supported only by hOn) This action disables beep feedback on every command sent to AC (keep in mind that this will not work for IR remote commands)
@ -224,8 +275,8 @@ climate.haier.beeper_off Action
then:
climate.haier.beeper_off: device_id
climate.haier.set_vertical_airflow Action
*****************************************
``climate.haier.set_vertical_airflow`` Action
*********************************************
(supported only by hOn) Set direction for vertical airflow if the vertical swing is disabled. Possible values: Health_Up, Max_Up, Up, Center, Down, Health_Down.
@ -237,8 +288,8 @@ climate.haier.set_vertical_airflow Action
id: device_id
vertical_airflow: Up
climate.haier.set_horizontal_airflow Action
*******************************************
``climate.haier.set_horizontal_airflow`` Action
***********************************************
(supported only by hOn) Set direction for horizontal airflow if the horizontal swing is disabled. Possible values: Max_Left, Left, Center, Right, Max_Right.
@ -250,8 +301,8 @@ climate.haier.set_horizontal_airflow Action
id: device_id
vertical_airflow: Right
climate.haier.start_self_cleaning Action
****************************************
``climate.haier.start_self_cleaning`` Action
********************************************
(supported only by hOn) Start `self-cleaning <https://www.haier.com/in/blogs/beat-the-summer-heat-with-haier-self-cleaning-ac.shtml>`__
@ -261,8 +312,8 @@ climate.haier.start_self_cleaning Action
then:
- climate.haier.start_self_cleaning: device_id
climate.haier.start_steri_cleaning Action
*****************************************
``climate.haier.start_steri_cleaning`` Action
*********************************************
(supported only by hOn) Start 56°C steri-cleaning

View File

@ -24,18 +24,20 @@ With this display driver you can control the following displays:
- ST7789V
- TFT 2.4
- TFT 2.4R
- WAVESHARE_RES_3_5 (Waveshare Pico-ResTouch-LCD-3.5)
More display drivers will come in the future.
Usage
-----
This component is the successor of the ILI9341 component allowing to control more display drivers and use 16bit colors when enough free ram.
This component is the successor of the ILI9341 component supporting more display driver chips from the ILI and related
families.
The ``ILI9xxx`` display platform allows you to use
ILI9341 (`datasheet <https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf>`__,
`Aliexpress <https://www.aliexpress.com/af/Ili9341.html>`__) and other
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.
displays from the same chip family with ESPHome. As this is a somewhat higher resolution display and requires additional pins
beyond the basic SPI connections, and a reasonable amount of RAM, it is not well suited for the ESP8266.
**Note:** use of 16 bit colors requires double the amount of RAM as 8 bit, and may need PSRAM to be available.
@ -63,7 +65,7 @@ Configuration variables:
- **model** (**Required**): The model of the display. Options are:
- ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R``, ``S3BOX``, ``S3BOX_LITE``
- ``M5STACK``, ``TFT 2.4``, ``TFT 2.4R``, ``S3BOX``, ``S3BOX_LITE``, ``WSPICOLCD``
- ``ILI9341``, ``ILI9342``, ``ILI9486``, ``ILI9488``, ``ILI9488_A`` (alternative gamma configuration for ILI9488)
- ``ILI9481``, ``ILI9481-18`` (18 bit mode)
- ``ST7789V``, ``ST7796``
@ -95,6 +97,7 @@ Configuration variables:
- **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**.
- **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.
- **18bit_mode** (*Optional*): With this boolean option you can manual enable or disable the 18 bit color mode.
- **rotation** (*Optional*): Rotate the display presentation in software. Choose one of ````, ``90°``, ``180°``, or ``270°``. This option cannot be used with ``transform``.
- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are ``false``. This option cannot be used with ``rotation``.
@ -103,7 +106,8 @@ Configuration variables:
- **mirror_y** (*Optional*, boolean): If true, mirror the y axis.
**Note:** To rotate the display in hardware use one of the following combinations:
**Note:** To rotate the display in hardware use one of the following combinations - with 90 and 270 rotations you
will also need to use `dimensions:` to swap the height and width (see example below.)
- 90 degrees - use ``swap_xy`` with ``mirror_x``
- 180 degrees - use ``mirror_x`` with ``mirror_y``
@ -113,6 +117,21 @@ Configuration variables:
Configuration examples
**********************
To use hardware rotation, use both ``dimensions`` and ``transform``, e.g. this config will turn a landscape display with
height 320 and width 480 into portrait. Note that the dimensions are those of the final display.
.. code-block:: yaml
transform:
swap_xy: true
mirror_x: true
dimensions:
height: 480
width: 320
To utilize the color capabilities of this display module, you'll likely want to add a ``color:`` section to your
YAML configuration; please see :ref:`color <config-color>` for more detail on this configuration section.

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -95,6 +95,12 @@ and circles:
// ... and the same thing filled again
it.filled_circle(25, 25, 10);
// Triangles... Let's draw the outline of a triangle from the [x,y] coordinates of its three points
// [25,5], [5,25], [50,50]
it.triangle(25, 5, 5, 25, 50, 50);
// and a filled triangle !
it.filled_triangle(125, 5, 105, 25, 150, 50);
All the above methods can optionally also be called with an argument at the end which specifies in which
color to draw. For monochrome displays, only ``COLOR_ON`` (the default if color is not given) and ``COLOR_OFF`` are supported.
@ -233,7 +239,7 @@ Configuration variables:
here will be compiled into the binary. Adjust this if you need some special characters or want to
reduce the size of the binary if you don't plan to use some glyphs. The items in the list can also
be more than one character long if you for example want to use font ligatures. Defaults to
``!"%()+=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz``.
``!"%()+=,-_.:°/?0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz``.
.. note::
@ -552,6 +558,7 @@ Graph component with options for grids, border and line-types.
color: my_red
- sensor: my_outside_temperature
line_type: SOLID
continuous: true
line_thickness: 3
color: my_blue
- sensor: my_beer_temperature
@ -580,6 +587,7 @@ Trace specific fields:
- **sensor** (*Optional*, :ref:`config-id`): The sensor value to plot
- **line_thickness** (*Optional*): Defaults to 3
- **line_type** (*Optional*): Specifies the plot line-type. Can be one of the following: ``SOLID``, ``DOTTED``, ``DASHED``. Defaults to ``SOLID``.
- **continuous** (*Optional*): connects the individual points to make a continuous line. Defaults to ``false``.
- **color** (*Optional*): Sets the color of the sensor trace.
And then later in code:

View File

@ -0,0 +1,191 @@
ST7567 LCD Graphic Display
==========================
.. seo::
:description: Instructions for setting up ST7567 Mono STN-LCD display drivers.
:image: st7567.jpg
.. _st7567:
Usage
-----
The ``st7567`` display platform allows you to use wide range of 128x64 display modules based on
Sitronix ST7567 chipset family (ST7567A, ST7567S, ST7567G, etc.) (`datasheet <https://github.com/latonita/datasheets-storage/blob/main/lcd-modules/ST7567A_V1.2b.pdf>`__,
`Sitronix <https://www.sitronix.com.tw/en/products/industrial-display-driver-ic/mono-stn-lcd-driver-ic/>`__,
`Aliexpress <https://www.aliexpress.com/af/st7567s.html>`__) with ESPHome.
Note that this component is for displays that are connected via the :ref:`I²C Bus <i2c>` (see :ref:`st7567-i2c`)
or 3-Wire or 4-Wire :ref:`SPI bus <spi>` (see :ref:`st7567-spi`).
It's a monochrome LCD graphic display.
.. figure:: images/st7567-full.jpg
:align: center
:width: 75.0%
ST7567A based LCD Graphic Display (I²C)
.. note::
**Voltage:** Check your module specs for required power. Most of the modules are tolerant to range of voltages from 3.3V to 5V, but some might require either 5V or 3.3V.
**Electrical interference:** To reduce malfunction caused by noise, datasheet recommends to "use the refresh sequence regularly in a specified interval".
Noone knows what exact interval is - it varies based on your electrical environment - some might need it every hour, for example.
Without doing refresh sequence picture on LCD might get glitchy after some time.
You can plan refresh by using ``interval:`` section and calling ``request_refresh()`` function, after that it will perform display
refresh sequence on next component update.
.. _st7567-i2c:
Over I²C
--------
Connect ``SDA`` and ``SCL`` pins on a module to pins you chose for the :ref:`I²C Bus <i2c>`.
If your display module has ``RESET`` pin you may optionally connect it to a pin on the
ESP which may improve reliability. For power, connect ``VCC`` to 3.3V and ``GND`` to ``GND``.
.. code-block:: yaml
# Example minimal configuration entry
i2c:
sda: D1
scl: D2
display:
- platform: st7567_i2c
id: my_display
lambda: |-
it.print(0, 0, id(my_font), "Hello World!");
interval:
- interval: 1h
then:
- lambda: id(my_display).request_refresh();
Configuration variables:
************************
- **address** (*Optional*, int): Manually specify the :ref:`I²C <i2c>` address of the display. Defaults to 0x3F.
- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component <i2c>` if you want
to use multiple I²C buses.
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin. Defaults to not connected.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``1s``.
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
- **invert_colors** (*Optional*, boolean): Display hardware color invesion. Defaults to ``false``.
- **rotation** (*Optional*): Set the rotation of the display. Everything you draw in ``lambda:`` will be rotated
by this option. One of ```` (default), ``90°``, ``180°``, ``270°``.
- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are ``false``.
- **mirror_x** (*Optional*, boolean): If true, mirror the physical X axis.
- **mirror_y** (*Optional*, boolean): If true, mirror the physical Y axis.
**Speeding up the bus:** To speed up the display update process you can select higher I²C frequencies, for example:
.. code-block:: yaml
# Example increased I²C bus speed
i2c:
sda: D1
scl: D2
frequency: 400kHz
**Hardware rotation:** 180 degree rotation can be implemented in hardware as in the following example:
.. code-block:: yaml
# Example using transform section to achieve 180° rotation using hardware
display:
- platform: st7567_i2c
id: my_display
transform:
mirror_x: true
mirror_y: true
lambda: |-
it.print(0, 0, id(my_font), "Hello World!");
.. _st7567-spi:
Over SPI
--------
Connect ``D0`` to the ``CLK`` pin you chose for the :ref:`SPI bus <spi>`, connect ``D1`` to the ``MOSI`` pin and ``DC`` and ``CS``
to some GPIO pins on the ESP. For power, connect ``VCC`` to 3.3V and ``GND`` to ``GND``.
Optionally you can also connect the ``RESET`` pin to a pin on the ESP which may improve reliability.
.. code-block:: yaml
# Example minimal configuration entry
spi:
clk_pin: D1
mosi_pin: D2
display:
- platform: st7567_spi
id: my_display
dc_pin: D3
lambda: |-
it.print(0, 0, id(my_font), "Hello World!");
interval:
- interval: 1h
then:
- lambda: id(my_display).request_refresh();
Configuration variables:
************************
- **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin.
- **cs_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The Chip Select (CS) pin.
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin. Defaults to not connected.
- **spi_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`SPI Component <spi>` if you want
to use multiple SPI buses.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``1s``.
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
- **invert_colors** (*Optional*, boolean): Display hardware color invesion. Defaults to ``false``.
- **rotation** (*Optional*): Set the rotation of the display. Everything you draw in ``lambda:`` will be rotated
by this option. One of ```` (default), ``90°``, ``180°``, ``270°``.
- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are ``false``.
- **mirror_x** (*Optional*, boolean): If true, mirror the physical X axis.
- **mirror_y** (*Optional*, boolean): If true, mirror the physical Y axis.
**Hardware rotation:** 180 degree rotation can be implemented in hardware as in the following example:
.. code-block:: yaml
# Example using transform section to achieve 180° rotation using hardware
display:
- platform: st7567_spi
id: my_display
dc_pin: D3
transform:
mirror_x: true
mirror_y: true
lambda: |-
it.print(0, 0, id(my_font), "Hello World!");
See Also
--------
- :doc:`index`
- :ref:`display-engine`
- :ref:`Display Menu <display_menu>`
- :ref:`i2c`
- :ref:`spi`
- :apiref:`st7567/st7567.h`
- :ghedit:`Edit`

View File

@ -78,6 +78,7 @@ If you do specify them they will override any default.
- ``Adafruit RR 280x240`` (round-rectangular display -- some pixels are "deleted" from corners to form rounded shape)
- ``Adafruit S2 TFT FEATHER 240X135``
- ``LILYGO T-Embed 170X320``
- ``Waveshare 1.47in 172X320`` (round-rectangular display -- some pixels are "deleted" from corners to form rounded shape)
- ``Custom`` For other displays not listed above
- **height** (**Required**, int): Sets height of display in pixels. Defaults depends ``model``.
@ -183,6 +184,16 @@ Items marked RQ are hardware dependent but required and not preset. Items marked
- 46
- 12
- 11
* - Waveshare 1.47in 172X320
- 320/172
- 34/0
- 21
- 22
- 23
- 4
-
- 18
- 19
* - Custom
- RQ
- RQ

View File

@ -88,10 +88,15 @@ Configuration variables:
- ``2.13in-ttgo-b74`` - T5_V2.3.1 with B74 display tested
- ``2.13in-ttgo-b1`` - T5_V2.3 with B1 display tested
- ``2.13in-ttgo-dke`` - T5_V2.3 with DKE group display (DEPG0213BN) tested
- ``2.13inv3`` - 2.13in V3 display (Pico e-Paper 2.13v3)
- ``2.70in`` - currently not working with the HAT Rev 2.1 version
- ``2.70inv2``
- ``2.70in-b`` - Black/White/Red
- ``2.70in-bv2`` - Black/White/Red
- ``2.90in``
- ``2.90inv2``
- ``2.90in-b`` - B/W rendering only
- ``2.90in-bV3`` - B/W rendering only
- ``4.20in``
- ``4.20in-bV2`` - B/W rendering only
- ``5.83in``

View File

@ -38,10 +38,16 @@ If available on your reader model, it's recommended to connect 3.3VT (touch indu
# Declare Grow Fingerprint Reader
fingerprint_grow:
sensing_pin: GPIO12
on_finger_scan_start:
...
on_finger_scan_matched:
...
on_finger_scan_unmatched:
...
on_finger_scan_misplaced:
...
on_finger_scan_invalid:
...
on_enrollment_scan:
...
on_enrollment_done:
@ -62,8 +68,11 @@ Base Configuration:
- **sensing_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): Pin connected to the reader's finger detection signal (WAKEUP) output.
- **password** (*Optional*, int): Password to use for authentication. Defaults to ``0x00``.
- **new_password** (*Optional*, int): Sets a new password to use for authentication. See :ref:`fingerprint_grow-set_new_password` for more information.
- **on_finger_scan_start** (*Optional*, :ref:`Automation <automation>`): An action to be performed when the finger touches the sensor. See :ref:`fingerprint_grow-on_finger_scan_start`.
- **on_finger_scan_matched** (*Optional*, :ref:`Automation <automation>`): An action to be performed when an enrolled fingerprint is scanned. See :ref:`fingerprint_grow-on_finger_scan_matched`.
- **on_finger_scan_unmatched** (*Optional*, :ref:`Automation <automation>`): An action to be performed when an unknown fingerprint is scanned. See :ref:`fingerprint_grow-on_finger_scan_unmatched`.
- **on_finger_scan_misplaced** (*Optional*, :ref:`Automation <automation>`): An action to be performed when the finger is not entirely touching the sensor. See :ref:`fingerprint_grow-on_finger_scan_misplaced`.
- **on_finger_scan_invalid** (*Optional*, :ref:`Automation <automation>`): An action to be performed when the scan of a fingerprint failed. See :ref:`fingerprint_grow-on_finger_scan_invalid`.
- **on_enrollment_scan** (*Optional*, :ref:`Automation <automation>`): An action to be performed when a fingerprint is scanned during enrollment. See :ref:`fingerprint_grow-on_enrollment_scan`.
- **on_enrollment_done** (*Optional*, :ref:`Automation <automation>`): An action to be performed when a fingerprint is enrolled. See :ref:`fingerprint_grow-on_enrollment_done`.
- **on_enrollment_failed** (*Optional*, :ref:`Automation <automation>`): An action to be performed when a fingerprint enrollment failed. See :ref:`fingerprint_grow-on_enrollment_failed`.
@ -144,6 +153,36 @@ The ``new_password:`` configuration option is meant to be compiled, flashed to t
password: 0x72AB96CD # Update the existing password with the new one
.. _fingerprint_grow-on_finger_scan_start:
``on_finger_scan_start`` Trigger
------------------------------------
With this configuration option, you can trigger an automation when a finger is detected touching the sensor. Very useful to indicate to the user via AuraLed that the sensor has detected the finger touch and will perform the scan. This trigger will **only** activate if your fingerprint sensor is configured with the ``sensing_pin`` option.
.. code-block:: yaml
on_finger_scan_start:
- fingerprint_grow.aura_led_control:
state: ALWAYS_ON
color: GREEN
speed: 0
count: 0
.. _fingerprint_grow-on_finger_scan_invalid:
``on_finger_scan_invalid`` Trigger
----------------------------------
With this configuration option you can write complex automations whenever a scan fails, e.g. when the finger is not placed correctly on the reader. This is different from ``on_finger_scan_unmatched`` which is triggered when an unknown fingerprint is scanned. This option works best with the ``sensing_pin`` option defined.
.. code-block:: yaml
on_finger_scan_invalid:
- text_sensor.template.publish:
id: fingerprint_state
state: "Invalid finger"
.. _fingerprint_grow-on_finger_scan_matched:
``on_finger_scan_matched`` Trigger
@ -188,6 +227,21 @@ With this configuration option you can write complex automations whenever an unk
id: fingerprint_state
state: "Unauthorized finger"
.. _fingerprint_grow-on_finger_scan_misplaced:
``on_finger_scan_misplaced`` Trigger
------------------------------------
With this configuration option, you can create automations for situations when the finger is in contact with the sensor but not fully covering it, enabling you to perform a successful scan.
This trigger will **only** activate if your fingerprint sensor is configured with the ``sensing_pin`` option. It serves as a useful indicator to alert the user when their touch on the sensor is insufficient.
.. code-block:: yaml
on_finger_scan_misplaced:
- text_sensor.template.publish:
id: fingerprint_state
state: "Misplaced finger"
.. _fingerprint_grow-on_enrollment_scan:
``on_enrollment_scan`` Trigger
@ -341,6 +395,12 @@ Controls the Aura LED on the reader. Only available on select models. NOTE: The
count: 2
# Sample Aura LED config for all reader triggers
fingerprint_grow:
on_finger_scan_start:
- fingerprint_grow.aura_led_control:
state: ALWAYS_ON
color: GREEN
speed: 0
count: 0
on_finger_scan_matched:
- fingerprint_grow.aura_led_control:
state: BREATHING
@ -353,6 +413,12 @@ Controls the Aura LED on the reader. Only available on select models. NOTE: The
speed: 25
color: RED
count: 2
on_finger_scan_misplaced:
- fingerprint_grow.aura_led_control:
state: FLASHING
speed: 25
color: PURPLE
count: 2
on_enrollment_scan:
- fingerprint_grow.aura_led_control:
state: FLASHING
@ -420,6 +486,9 @@ Sample code
fingerprint_grow:
sensing_pin: GPIO12
on_finger_scan_invalid:
- homeassistant.event:
event: esphome.test_node_finger_scan_invalid
on_finger_scan_matched:
- homeassistant.event:
event: esphome.test_node_finger_scan_matched
@ -429,6 +498,9 @@ Sample code
on_finger_scan_unmatched:
- homeassistant.event:
event: esphome.test_node_finger_scan_unmatched
on_finger_scan_misplaced:
- homeassistant.event:
event: esphome.frontdoor_finger_scan_misplaced
on_enrollment_scan:
- homeassistant.event:
event: esphome.test_node_enrollment_scan

View File

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

View File

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

View File

@ -44,6 +44,7 @@ Configuration variables
- ``BRG``
- **is_rgbw** (*Optional*, boolean): Set to ``true`` if the strip is RGBW. Defaults to ``false``.
- **is_wrgb** (*Optional*, boolean): Set to ``true`` if the strip is WRGB. Defaults to ``false``.
- **max_refresh_rate** (*Optional*, :ref:`config-time`):
A time interval used to limit the number of commands a light can handle per second. For example
16ms will limit the light to a refresh rate of about 60Hz. Defaults to sending commands as quickly as

View File

@ -708,6 +708,7 @@ the strip and shifts them forward every ``add_led_interval``.
num_leds: 1
add_led_interval: 100ms
reverse: false
gradient: false
Configuration variables:
@ -720,7 +721,8 @@ Configuration variables:
- **blue** (*Optional*, percentage): The percentage the blue color channel should be on. Defaults to ``100%``.
- **random** (*Optional*, boolean): If set to ``true``, will overwrite the RGB colors by a new, randomly-chosen
color each time. Defaults to ``false``.
- **num_leds** (*Optional*, int): The number of leds of this type to have before moving on to the next color.
- **num_leds** (**Required**, positive int): The number of LEDs of this type to have before transitioning to the next color. If ``gradient`` is true, this will be the number of LEDs over which the color transition will occur.
- **gradient** (*Optional*, boolean): If ``true`` the current color will transition with a gradient over ``num_leds`` to the next color. Defaults to ``false``.
- **add_led_interval** (*Optional*, :ref:`config-time`): The interval with which to shift in new leds at the
beginning of the strip. Defaults to ``100ms``.
@ -1090,10 +1092,14 @@ It is also possible to use LedFx_ to control the lights. Please use the connecti
effects:
- wled:
# port: 21324
# blank_on_start: True
# sync_group_mask: 0
Configuration variables:
- **port** (*Optional*, int): The port to run the UDP server on. Defaults to ``21324``.
- **blank_on_start** (*Optional*, boolean): Whether or not to blank all LEDs when effect starts. Deaults to ``True``.
- **sync_group_mask** (*Optional*, int): Used with WLED Notifier. The Sync Group mask value that specifies which WLED Sync Groups to listen to. Defaults to ``0`` (All Sync Groups). Sync Groups 1, 2, 3, 4, 5, 6, 7, 8 use masks 1, 2, 4, 8, 16, 32, 64, 128. Combine mask values to listen to multiple Sync Groups.
.. note::

View File

@ -0,0 +1,109 @@
Micro Wake Word
================
.. seo::
:description: Instructions for creating a custom wake word using microWakeWord.
:image: voice-assistant.svg
ESPHome implements an on-device wake word detection framework from `microWakeWord <https://github.com/kahrendt/microWakeWord>`__.
This repository/library allows you to create a custom wake word for your ESPHome device.
The training process is described on the `microWakeWord GitHub repository <https://github.com/kahrendt/microWakeWord>`__.
The ``micro_wake_word`` component requires an **ESP32-S3** to function.
.. code-block:: yaml
# Shorthand name
micro_wake_word:
model: okay_nabu
# Github shorthand URL
micro_wake_word:
model: github://esphome/micro-wake-word-models/models/okay_nabu.json
Configuration variables:
------------------------
- **model** (**Required**, string): The model to use. This can be one of:
- A simple name of a model that exists in the official `ESPHome Models repository <https://github.com/esphome/micro-wake-word-models>`__.
e.g. ``okay_nabu``.
- A github shorthand URL to a model JSON file.
e.g. ``github://esphome/micro-wake-word-models/models/okay_nabu.json@main``.
- A full URL to a model JSON file.
e.g. ``https://github.com/esphome/micro-wake-word-models/raw/main/models/okay_nabu.json``.
- **on_wake_word_detected** (*Optional*, Automation): An automation to perform when the wake word is detected.
The below two options are provided by the JSON file, but can be overridden in YAML.
- **probability_cutoff** (*Optional*, float): The probability cutoff for the wake word detection.
If the probability of the wake word is below this value, the wake word is not detected.
A larger value reduces the number of false accepts but increases the number of false rejections.
- **sliding_window_average_size** (*Optional*, int): The size of the sliding window average for the wake word detection. A small value lowers latency but may increase the number of false accepts.
Model JSON
----------
.. code-block:: json
{
"type": "micro",
"wake_word": "okay nabu",
"author": "Kevin Ahrendt",
"website": "https://www.kevinahrendt.com/",
"model": "./okay_nabu.tflite",
"version": 1,
"micro": {
"probability_cutoff": 0.5,
"sliding_window_average_size": 10
}
}
The model JSON file contains the following fields that are all **required**:
- **type** (string): The type of the model. This should always be ``micro``.
- **wake_word** (string): The wake word that the model is trained to detect.
- **author** (string): The name of the author that trained the model.
- **website** (string): The website of the author.
- **model** (string): The relative or absolute path or URL to the TFLite trained model file.
- **version** (int): The version of the JSON schema. Currently only version ``1`` exists.
- **micro** (object): The microWakeWord specific configuration.
- **probability_cutoff** (float): The probability cutoff for the wake word detection.
If the probability of the wake word is below this value, the wake word is not detected.
- **sliding_window_average_size** (int): The size of the sliding window average for the wake word detection.
Automations
-----------
``micro_wake_word.start`` Action
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Starts the wake word detection.
``micro_wake_word.stop`` Action
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Stops the wake word detection.
Example usage
-------------
.. code-block:: yaml
micro_wake_word:
model: okay_nabu
on_wake_word_detected:
then:
- voice_assistant.start:
See Also
--------
- :doc:`voice_assistant`
- :apiref:`micro_wake_word/micro_wake_word.h`
- :ghedit:`Edit`

View File

@ -12,7 +12,7 @@ This platform only works on ESP32 based chips.
.. warning::
Audio and voice components consume a significant amount of resources (RAM, CPU) on the device.
**Crashes are likely to occur** if you include too many additional components in your device's
configuration. In particular, Bluetooth/BLE components are known to cause issues when used in
combination with Voice Assistant and/or other audio components.
@ -41,9 +41,11 @@ Configuration variables:
- ``internal``: Use the internal ADC of the ESP32. Only supported on ESP32, no variant support.
- **channel** (*Optional*, enum): The channel of the microphone. One of ``left`` or ``right``. Defaults to ``right``.
- **sample_rate** (*Optional*, positive integer): I2S sample rate. Defaults to ``16000``.
- **bits_per_sample** (*Optional*, enum): The bit depth of the audio samples. Note that while set to ``32bit``, the samples
will be scaled down to 16bit before being forwarded.
One of ``16bit`` or ``32bit``. Defaults to ``16bit``.
- **use_apll** (*Optional*, boolean): I2S using APLL as main I2S clock, enable it to get accurate clock. Defaults to ``false``.
- **i2s_audio_id** (*Optional*, :ref:`config-id`): The ID of the :ref:`I²S Audio <i2s_audio>` you wish to use for this microphone.
- All other options from :ref:`Microphone <config-microphone>`

View File

@ -81,6 +81,8 @@ Configuration variables:
for verifying SSL connections. See :ref:`mqtt-ssl_fingerprints`.
for more information.
- **certificate_authority** (*Optional*, string): Only with ``esp-idf``. CA certificate in PEM format. See :ref:`mqtt-tls-idf` for more information
- **client_certificate** (*Optional*, string): Only on ``esp32``. Client certificate in PEM format.
- **client_certificate_key** (*Optional*, string): Only on ``esp32``. Client private key in PEM format.
- **skip_cert_cn_check** (*Optional*, bool): Only with ``esp-idf``. Don't verify if the common name in the server certificate matches the value of ``broker``.
- **idf_send_async** (*Optional*, bool): Only with ``esp-idf``. If true publishing the message happens from the internal mqtt task. The client only enqueues the message. Defaults to ``false``.
The advantage of asyncronous publishing is that it doesn't block the esphome main thread. The disadvantage is a delay (up to 1-2 seconds) until the messages are actually sent out.

View File

@ -54,6 +54,9 @@ Configuration variables:
performed after a failed OTA update. See :ref:`ota-on_error`.
- **on_state_change** (*Optional*, :ref:`Automation<automation>`): An action to be
performed when an OTA update state change happens. See :ref:`ota-on_state_change`.
- **version** (*Optional*, int): Version of OTA protocol to use. Version 2 is more stable.
To downgrade to legacy ESPHome, the device should be updated with OTA version 1 first.
Defaults to ``2``.
.. note::

View File

@ -25,6 +25,8 @@ only read/write mode is enabled; card/tag emulation is enabled only if the ``emu
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).
In addition, the :doc:`binary_sensor/nfc` platform may be used to quickly and easily identify tags presented to the reader.
.. code-block:: yaml
pn7150_i2c:
@ -372,8 +374,8 @@ See Also
--------
- :doc:`index`
- :doc:`pn532`
- :doc:`rc522`
- :doc:`rdm6300`
- :doc:`binary_sensor/pn532`
- :doc:`binary_sensor/rc522`
- :doc:`binary_sensor/rdm6300`
- :apiref:`pn7150/pn7150.h`
- :ghedit:`Edit`

View File

@ -30,6 +30,8 @@ only read/write mode is enabled; card/tag emulation is enabled only if the ``emu
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).
In addition, the :doc:`binary_sensor/nfc` platform may be used to quickly and easily identify tags presented to the reader.
.. _pn7160-spi:
Over SPI
@ -430,8 +432,8 @@ See Also
--------
- :doc:`index`
- :doc:`pn532`
- :doc:`rc522`
- :doc:`rdm6300`
- :doc:`binary_sensor/pn532`
- :doc:`binary_sensor/rc522`
- :doc:`binary_sensor/rdm6300`
- :apiref:`pn7160/pn7160.h`
- :ghedit:`Edit`

View File

@ -38,6 +38,7 @@ Configuration variables:
- **dish**: Decode and dump Dish infrared codes.
- **drayton**: Decode and dump Drayton Digistat RF codes.
- **jvc**: Decode and dump JVC infrared codes.
- **keeloq**: Decode and dump KeeLoq RF codes.
- **haier**: Decode and dump Haier infrared codes.
- **lg**: Decode and dump LG infrared codes.
- **magiquest**: Decode and dump MagiQuest wand infrared codes.
@ -103,6 +104,9 @@ Automations:
- **on_jvc** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a
JVC remote code has been decoded. A variable ``x`` of type :apistruct:`remote_base::JVCData`
is passed to the automation for use in lambdas.
- **on_keeloq** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a
KeeLoq RF code has been decoded. A variable ``x`` of type :apistruct:`remote_base::KeeloqData`
is passed to the automation for use in lambdas.
- **on_haier** (*Optional*, :ref:`Automation <automation>`): An automation to perform when a
Haier remote code has been decoded. A variable ``x`` of type :apiclass:`remote_base::HaierData`
is passed to the automation for use in lambdas.
@ -249,6 +253,11 @@ Remote code selection (exactly one of these has to be included):
- **data** (**Required**, int): The JVC code to trigger on, see dumper output for more info.
- **keeloq**: Trigger on a decoded KeeLoq RF remote code with the given data.
- **address** (**Required**, int): The 32-bit ID code to trigger on, see dumper output for more info.
- **command** (**Required**, int): The 8-bit switch/command to listen for. If omitted, will match on any command/button.
- **haier**: Trigger on a Haier remote code with the given code.
- **code** (**Required**, 13-bytes list): The code to listen for, see :ref:`remote_transmitter-transmit_haier`

View File

@ -251,6 +251,33 @@ Configuration variables:
- **data** (**Required**, int): The JVC code to send, see dumper output for more info.
.. _remote_transmitter-transmit_keeloq:
``remote_transmitter.transmit_keeloq`` Action
**********************************************
This :ref:`action <config-action>` sends KeeLoq RF remote code to a remote transmitter.
.. code-block:: yaml
on_...:
- remote_transmitter.transmit_keeloq:
address: '0x57ffe7b'
command: '0x02'
code: '0xd19ef0a9'
repeat:
times: 3
wait_time: 15ms
Configuration variables:
- **address** (**Required**, int): The 32-bit address to send, see dumper output for more info.
- **command** (**Required**, int): The 4 bit command/button code to send, see dumper output for more info.
- **code** (**Optional**, int): The 32 bit encrypted field to send. Defaults to all zeros.
- **level** (**Optional**, boolean): Low battery level status bit. Defaults to false.
- All other options from :ref:`remote_transmitter-transmit_action`.
- A repeat **wait_time** of 15ms as shown replicates the repetition of an HCS301.
.. _remote_transmitter-transmit_haier:
``remote_transmitter.transmit_haier`` Action

View File

@ -0,0 +1,303 @@
AS5600 12-Bit Magnetic Position Sensor
======================================
.. seo::
:description: Instructions for setting up AS5600 magnetic position sensor / encoder.
:image: as5600.jpg
:keywords: AS5600 AS5600L
.. _as5600-component:
Component/Hub
-------------
The ``as5600`` sensor platform you to use your AS5600 (`datasheet <https://ams.com/documents/20143/36005/AS5600_DS000365_5-00.pdf/649ee61c-8f9a-20df-9e10-43173a3eb323>`__,
`AMS <https://ams.com/en/as5600>`__) or AS5600L (`datasheet <https://ams.com/documents/20143/36005/AS5600L_DS000545_3-00.pdf/7ade6878-7a32-2294-b88d-479d50fab6de>`__,
`AMS <https://ams.com/en/as5600l>`__) 12-bit magnetic position sensor with ESPHome. Individual sensors will be added
using the :ref:`AS5600 Sensor Platform <as5600-sensor>`. To use this hub, first setup
the :ref:`I²C Bus <i2c>` and connect the sensor to the pins specified there.
.. figure:: images/as5600-full.jpg
:align: center
:width: 50.0%
AS5600 12-Bit Magnetic Position Sensor.
.. _AMS_AS5600: https://ams.com/en/as5600
.. _AMS_AS5600L: https://ams.com/en/as5600l
.. code-block:: yaml
as5600:
dir_pin: 22
start_position: 0deg
range: 180deg
Configuration variables:
************************
- **dir_pin** (*Optional*, int): The pin connected to the AS5600's direction pin.
See :ref:`Direction <as5600_direction>` for more information.
- **direction** (*Optional*, string): The direction that the magnet should rotate to increase values.
Used in combination with the **dir_pin**.
- ``clockwise`` (default)
- ``counterclockwise``
- **start_position** (*Optional*, int): The raw position that should be considered the start (i.e. ``0``).
See :ref:`Position / Range <as5600_position_range>`.
- **end_position** (*Optional*, int): The raw position that should be considered the end (e.g. 180deg)
of the allowable rotation range. Mutually exclusive with **range**. See :ref:`Position / Range <as5600_position_range>`.
- **range** (*Optional*, int): The allowable rotation range from the **start_position**. Mutually
exclusive with **end_position**. See :ref:`Position / Range <as5600_position_range>`.
- **hysteresis** (*Optional*, string): See datasheet.
- ``none`` (default)
- ``lsb1``
- ``lsb2``
- ``lsb3``
- **power_mode** (*Optional*, string): The power mode to run the sensor. Note: When **watchdog** is enabled,
it will switch the device to ``low3`` when there is not much change in position.
- ``nominal`` (default)
- ``low1``
- ``low2``
- ``low3``
- **watchdog** (*Optional*, boolean): Whether to enable the watchdog that puts the the chip in to
low power mode 3. Check the datasheet for more information.
Defaults to ``off``.
- **slow_filter** (*Optional*, string): See datasheet.
- ``16x`` (default)
- ``8x``
- ``4x``
- ``2x``
- **fast_filter** (*Optional*, string): See datasheet.
- ``none`` (default)
- ``lsb6``
- ``lsb7``
- ``lsb9``
- ``lsb18``
- ``lsb21``
- ``lsb24``
- ``lsb10``
- **address** (*Optional*, int): The i²c address of the sensor.
See :ref:`I²C Addresses <as5600_i2c_addresses>` for more information.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID for this AS5600 Hub.
- All other options for I²C devices described at :ref:`I²C Bus <i2c>`.
.. _as5600_direction:
Direction
---------
The AS5600 has ``direction`` pin that controls which rotation direction will cause the position value to **increase**.
This pin should be pulled low for clockwise, and pulled high for counterclockwise. If left floating, you are likely
to encounter erratic behavior.
If you would like the ESP controller to pull that pin high or low, you may configure the ``dir_pin`` and optionally, the
``direction`` option to have the ESP controller pull the pin high or low.
.. _as5600_position_range:
Position / Range
----------------
.. figure:: images/as5600-magnet-position.png
:align: center
:width: 80.0%
Position and range may be configured as one of the following:
- a value between ``-4095`` and ``4095``
- an angle between ``-360deg`` and ``360deg``
- a percentage between ``-100%`` and ``100%``
.. note::
Negative position values will be normalized to their respective positive position (e.g. -90deg would translate to 270deg).
The AS5600 reports 2 position values. The value for both types of position values will always be a whole number between 0 and 4095.
A "raw" position value is not filtered, scaled, etc. So a value of `0` is always when the north end of the magnet is at the top of
the chip, 2048 is always when the north end of the magnet is as the bottom of the chip, etc.
The regular/scaled position is filtered and scaled based on the sensor configuration (e.g. ``start_position``, ``end_position``, ``range``, etc).
For example, let's say we have the following component config:
.. code-block:: yaml
as5600:
start_position: 90deg
range: 180deg
direction: clockwise
dir_pin: 22
- If the magnet north was at the right side of the chip (i.e. 1024 / 90deg raw position), the scaled position would report a value of ``0``.
- If the magnet north was at the bottom of the chip (i.e. 2048 / 180deg raw position), the scaled position would report a value of ``2048``.
- If the magnet north was at the left of the chip (i.e. 3096 / 270deg raw position), the scaled position would report a value of ``4095``.
- If the magnet north was at the top of the chipe (i.e. 0 / 0deg raw position), the scaled position would be out of range (which also has
it's own caveats discussed below).
.. note::
You may specify an ``end_position`` that is less than the ``start_position``. When doing so, the allowable range will start at the
``start_position`` and continue through to the highest position value (i.e. ``4095``) and then continue from ``0`` until it reaches
the ``end_position``.
.. warning::
The datasheet calls out that the minimum angle that can be configured (start and end position, or start and range) it 18 degrees.
Configuring anything less than that may yield un-expected results.
.. _as5600_i2c_addresses:
I²C Addresses
-------------
The AS5600 address is not configurable and must be ``0x36``. However, if using an AS5600L,
the default address should be ``0x40`` and it is configurable.
.. _as5600-sensor:
Sensor
------
The ``as5600`` sensor allows you to publish the angle/position measurement from your AS5600 with ESPHome.
First, setup an :ref:`AS5600 Hub <as5600-component>` for your AS5600 sensor and then use this
sensor platform to create individual sensors that will report the position to Home Assistant.
.. figure:: images/as5600-ui.jpg
:align: center
:width: 80.0%
.. code-block:: yaml
as5600:
dir_pin: 22
sensor:
- platform: as5600
name: Position
raw_position:
name: Raw Position
gain:
name: Gain
magnitude:
name: Magnitude
status:
name: Status
.. _as5600-sensor-config:
Configuration variables:
************************
- **out_of_range_mode** (*Optional*, string): How to treat out of range values. Only applicable if configured
for a range less than 360 degrees. Defaults to ``min_max``. See :ref:`Out of Range Mode <as5600-out-of-range-mode>`.
- **as5600_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the
:ref:`AS5600 Hub <as5600-component>` you want to use this sensor.
- **update_interval** (*Optional*, :ref:`config-time`): The interval
to check the sensor. Defaults to ``60s``.
- **raw_position** (*Optional*): Reports the raw (un-scaled, un-filtered) position of the magnet.
- All other options from :ref:`Sensor <config-sensor>`.
- **gain** (*Optional*): Information about the automatic gain control. Typically for diagnostic purposes.
The datasheet says this will be between 0-255 when powered by 5v and between 0-128 when powered by 3.3v.
Ideally the value should be close to the middle of the respective range.
- All other options from :ref:`Sensor <config-sensor>`.
- **magnitude** (*Optional*): Information about the detected magnitude. Typically for diagnostic purposes.
The expected scale does not appear to be defined in the datasheet, however, AMS provides a
`user guide <https://ams.com/documents/20143/36005/Position%20Sensors_UG000359_1-00.pdf/65a99825-c115-f2f0-9167-6efad8e27c20>`__
which contains pictures that show it as a scale between ``0`` and ``3000``. Typically this value is seen somewhere
in the neighborhood of ``2100`` for a well positioned magnet.
- All other options from :ref:`Sensor <config-sensor>`.
- **status** (*Optional*): Information about the magnet status. Typically for diagnostic purposes.
See :ref:`Magnet Status <as5600-magnet-status>`
- All other options from :ref:`Sensor <config-sensor>`.
- All other options from :ref:`Sensor <config-sensor>`.
.. _as5600-out-of-range-mode:
Out of Range Mode
*****************
- ``min_max`` (default)
- ``nan``
When using a range less that 360deg, there would be a range of raw values that would be considered "out of range". By default (``min_max`` mode), the AS5600
splits that range in half and reports ``0`` while in the half of the "out-of-range" range closest to the ``start_position`` and it reports
``4095`` while in the half of the "out-of-range" range closest to the ``end_position`` / end of the ``range``. Alternatively, you may set to ``nan``
mode where the sensor will publish ``NAN`` (i.e. "Unknown") when the position falls outside the narrowed range.
.. _as5600-magnet-status:
Magnet Status
*************
The magnet status should report one of the following values:
- ``2`` indicates that no magnet was detected.
- ``4`` indicates that the magnet was detected and has good reading.
- ``5`` indicates that the magnet was detected, but is too strong. Measurements may appear to be stuck if the magnet is too strong.
- ``6`` indicates that the magnet was detected, but is too weak. Measurements may still be possible in this state.
.. _as5600-converting-position:
Converting Position
*******************
You may desire the position to be converted from the native ``0`` thru ``4095`` to degrees, or perhaps a percentage of the allowable range.
Here are some examples to make that happen:
.. figure:: images/as5600-ui-derived.jpg
:align: center
:width: 80.0%
.. code-block:: yaml
as5600:
id: my_as5600
sensor:
- platform: as5600
update_interval: 1s
name: Angle
unit_of_measurement: '°'
accuracy_decimals: 2
icon: mdi:rotate-right
filters:
- delta: 1
- lambda: 'return x * as5600::RAW_TO_DEGREES * id(my_as5600).get_range_scale();'
.. code-block:: yaml
as5600:
id: my_as5600
sensor:
- platform: as5600
update_interval: 1s
name: Percent
unit_of_measurement: '%'
accuracy_decimals: 2
icon: mdi:rotate-right
filters:
- delta: 1
- lambda: 'return (x / as5600::POSITION_COUNT) * 100;'
See Also
--------
- :ref:`i2c`
- :ref:`sensor-filters`
- :apiref:`as5600/as5600.h`
- :ghedit:`Edit`

View File

@ -10,7 +10,7 @@ The ``bme280`` sensor platform allows you to use your BME280
(`datasheet <https://cdn-shop.adafruit.com/datasheets/BST-BME280_DS001-10.pdf>`__,
`Adafruit`_) temperature, pressure and humidity sensors with ESPHome. The sensor
is used in *Forced Mode* where measurement is performed and then
the sensor returns to sleep mode until next measurement. The :ref:`I²C <i2c>` is
the sensor returns to sleep mode until next measurement. The :ref:`I²C <i2c>` or :ref:`SPI <spi>` is
required to be set up in your configuration for this sensor to work.
.. figure:: images/bme280-full.jpg
@ -23,9 +23,9 @@ required to be set up in your configuration for this sensor to work.
.. code-block:: yaml
# Example configuration entry
# Example configuration entry I2C
sensor:
- platform: bme280
- platform: bme280_i2c
temperature:
name: "BME280 Temperature"
oversampling: 16x
@ -36,6 +36,20 @@ required to be set up in your configuration for this sensor to work.
address: 0x77
update_interval: 60s
# Example configuration entry SPI
sensor:
- platform: bme280_spi
temperature:
name: "BME280 Temperature"
oversampling: 16x
pressure:
name: "BME280 Pressure"
humidity:
name: "BME280 Humidity"
cs_pin: GPIO5
update_interval: 60s
Configuration variables:
------------------------

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,103 @@
Combine the state of several sensors
====================================
.. seo::
:description: Instructions for setting up a combination sensor
The ``combination`` sensor platform allows you to combine the state of several
sensors into one. To use this sensor, specify the combination type and add your source sensors.
The ``unit_of_measurement``, ``device_class``, ``entity_category``, ``icon``, and
``accuracy_decimals`` properties are by default inherited from the first sensor.
``state_class`` is explicitly not inherited, because ``total_increasing`` states
could still decrease when multiple sensors are used for several of the combination types.
The source sensor states can be combined in several ways:
- ``KALMAN`` filter: This type filters one or several
sensors into one with a reduced error. If using a single sensor as data source,
it acts like a :ref:`sensor-filter-exponential_moving_average` filter. With
multiple sensors, it combines their values based on their respective standard
deviation.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: combination
type: kalman
name: "Temperature"
process_std_dev: 0.001
sources:
- source: temperature_sensor_1
error: 1.0
- source: temperature_sensor_2
error: !lambda |-
return 0.5 + std::abs(x - 25) * 0.023
- ``LINEAR`` combination: This type sums all source sensors after multiplying each by
a configured coeffecient.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: combination
type: linear
name: "Balance Power"
sources:
- source: total_power
coeffecient: 1.0
- source: circuit_1_power
coeffecient: -1.0
- ``MAXIMUM``, ``MEAN``, ``MEDIAN``, ``MINIMUM``, ``MOST_RECENTLY_UPDATED``,
``RANGE``, ``SUM`` combinations: These types compute the specified combination among
all source sensor states.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: combination
type: median
name: "Median Temperature"
sources:
- source: temperature_sensor_1
- source: temperature_sensor_2
- source: temperature_sensor_3
Configuration variables:
------------------------
- **type** (**Required**, enum): Combination statistic type, should be one of
``KALMAN``, ``LINEAR``, ``MAXIMUM``, ``MEAN``, ``MEDIAN``, ``MINIMUM``,
``MOST_RECENTLY_UPDATED``, ``RANGE``, or ``SUM``.
- **sources** (**Required**, list): A list of sensors to use as source.
- **source** (**Required**, :ref:`config-id` of a :doc:`/components/sensor/index`): The
sensor id that is used as sample source.
- **error** (**Required** - only for ``KALMAN`` type, float, :ref:`templatable <config-templatable>`):
The standard deviation of the sensor's measurements. This works like the ``process_std_dev``
parameter, with low values marking accurate data. If implemented as a template, the
measurement is in parameter ``x``.
- **coeffecient** (**Required** - only for ``LINEAR`` type, float, :ref:`templatable <config-templatable>`):
The coeffecient to multiply the sensor's state by before summing all source sensor states.
If implemented as a template, the measurement is in parameter ``x``.
- **process_std_dev** (**Required** - only for ``KALMAN`` type, float): The standard deviation of the
measurement's change per second (e.g. ``1/3600 = 0.000277`` if the
temperature usually changes at most by one Kelvin per hour). A low value here
will place high importance on the current state and be slow to respond to
changes in the measured samples. A high value will update faster, but also be
more noisy.
- **std_dev** (*Optional - only for KALMAN type*, :ref:`Sensor <config-sensor>`): A sensor
that publishes the current standard deviation of the state with each update.
- All other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ref:`sensor-filters`
- :apiref:`combination/combination.h`
- :ghedit:`Edit`

View File

@ -17,7 +17,8 @@ and works with this integration.
As the communication with the CSE7766 done using UART, you need
to have an :ref:`UART bus <uart>` in your configuration with the ``rx_pin`` connected to the CSE7766.
Additionally, you need to set the baud rate to 4800.
Additionally, you need to set the baud rate to 4800. The device sends multiple updates per second, so you
will probably want some sort of averaging or throttle filter on the sensors.
.. code-block:: yaml
@ -34,8 +35,12 @@ Additionally, you need to set the baud rate to 4800.
- platform: cse7766
current:
name: "Sonoff Pow R2 Current"
filters:
- throttle_average: 60s
voltage:
name: "Sonoff Pow R2 Voltage"
filters:
- throttle: 60s
power:
name: "Sonoff Pow R2 Power"
energy:
@ -55,8 +60,6 @@ Configuration variables:
All options from :ref:`Sensor <config-sensor>`.
- **energy** (*Optional*): Use the total energy value of the sensor in Wh.
All options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``.
- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`UART Component <uart>` if you want
to use multiple UART buses.

View File

@ -6,12 +6,13 @@ DHT Temperature+Humidity Sensor
:image: dht.jpg
:keywords: DHT11, DHT21, DHT22, AMS2301, AM2302, RHT03, SI7021
The DHT Temperature+Humidity sensor allows you to use your
The DHT Temperature+Humidity sensor allows you to use your
- DHT11 (`datasheet <https://akizukidenshi.com/download/ds/aosong/DHT11.pdf>`__, `Adafruit <https://www.adafruit.com/product/386>`__),
- DHT21/DHT22 (`datasheet <https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf>`__, `Adafruit <https://www.adafruit.com/product/385>`__),
- AMS2301/AM2302 (`datasheet <https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf>`__, `Adafruit <https://www.adafruit.com/product/393>`__),
- RHT03 (`datasheet <https://cdn.sparkfun.com/datasheets/Sensors/Weather/RHT03.pdf>`__, `SparkFun <https://cdn.sparkfun.com/datasheets/Sensors/Weather/RHT03.pdf>`__) and
- DHT11 (`datasheet <https://akizukidenshi.com/download/ds/aosong/DHT11.pdf>`__, `Adafruit <https://www.adafruit.com/product/386>`__),
- DHT21/DHT22 (`datasheet <https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf>`__, `Adafruit <https://www.adafruit.com/product/385>`__),
- AMS2301/AM2302 (`datasheet <https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf>`__, `Adafruit <https://www.adafruit.com/product/393>`__),
- AM2120 (`datasheet <https://www.micros.com.pl/mediaserver/UPAM2120_0004.pdf>`__),
- RHT03 (`datasheet <https://cdn.sparkfun.com/datasheets/Sensors/Weather/RHT03.pdf>`__, `SparkFun <https://cdn.sparkfun.com/datasheets/Sensors/Weather/RHT03.pdf>`__) and
- SI7021 (one wire Sonoff version) (`datasheet <https://cdn.sparkfun.com/assets/b/1/b/8/5/Si7021-A20.pdf>`__, `SparkFun <https://cdn.sparkfun.com/assets/b/1/b/8/5/Si7021-A20.pdf>`__)
sensors with ESPHome.
@ -59,20 +60,20 @@ Configuration variables:
- **name** (**Required**, string): The name for the humidity sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **model** (*Optional*, int): Manually specify the DHT model, can be
one of ``AUTO_DETECT``, ``DHT11``, ``DHT22``, ``DHT22_TYPE2``, ``AM2302``, ``RHT03``, ``SI7021``
one of ``AUTO_DETECT``, ``DHT11``, ``DHT22``, ``DHT22_TYPE2``, ``AM2302``, ``RHT03``, ``SI7021``, ``AM2120``
and helps with some connection issues. Defaults to ``AUTO_DETECT``. Auto detection doesn't work for the SI7021 chip.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``.
.. note::
The default ``accuracy_decimals`` value of the *humidity* levels is ``0``, as the DHT11 for which this was
originally written does not have a higher resolution. All other DHT sensors have a higher resolution, it's worth
The default ``accuracy_decimals`` value of the *humidity* levels is ``0``, as the DHT11 for which this was
originally written does not have a higher resolution. All other DHT sensors have a higher resolution, it's worth
to configure them with ``accuracy_decimals: 1``.
If you're seeing lots of invalid temperature/humidity warnings in the logs, try manually setting the
DHT model with the ``model:`` configuration variable. Other problems could be wrong pull-up resistor values
on the DATA pin or too long cables.

View File

@ -71,7 +71,8 @@ Advanced Options:
Possible values are ``HLW8012``, ``CSE7759``, ``BL0937``. Defaults to ``HLW8012``.
CSE7759 uses same constants and it also works with default. Must be set for BL0937 to be able to calibrate all three measurements at the same time.
- **change_mode_every** (*Optional*, int): After how many updates to cycle between the current/voltage measurement mode.
Note that the first value after switching is discarded because it is often inaccurate. Defaults to ``8``.
Note that the first value after switching is discarded because it is often inaccurate. When set to ``"never"`` the measurement mode will stay at the
set ``initial_mode``. Defaults to ``8``.
- **initial_mode** (*Optional*, string): The initial measurement mode. Defaults to ``VOLTAGE``.
Possible initial measurement modes are ``VOLTAGE`` or ``CURRENT``.
@ -97,7 +98,7 @@ the initial measurement mode to match whichever mode the device uses, and disabl
name: "HLW8012 Power"
update_interval: 60s
initial_mode: CURRENT
change_mode_every: 4294967295
change_mode_every: "never"
SEL Pin Inversion
-----------------

View File

@ -0,0 +1,42 @@
Honeywell HumidIcon (I2C HIH series) Temperature & Humidity Sensor
==================================================================
.. seo::
:description: Instructions for setting up Honeywell HumidIcon temperature and humidity sensors.
:image: honeywellhih.jpg
:keywords: Honeywell HIH
Honeywell HumidIcon (I2C HIH series) Temperature & Humidity sensors with ESPHome (`website <https://sps.honeywell.com/us/en/products/advanced-sensing-technologies/healthcare-sensing/humidity-with-temperature-sensors>`__,
`datasheet <https://prod-edam.honeywell.com/content/dam/honeywell-edam/sps/siot/en-us/products/sensors/humidity-with-temperature-sensors/common/documents/sps-siot-humidity-sensors-line-guide-009034-7-en-ciid-54931.pdf?download=false>`__).
The :ref:`I²C Bus <i2c>` is required to be set up in your configuration for this sensor to work.
Example sensors:
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: honeywell_hih_i2c
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
Configuration variables:
------------------------
- **temperature** (**Required**): The information for the temperature sensor.
All options from :ref:`Sensor <config-sensor>`.
- **humidity** (**Required**): The information for the humidity sensor.
All options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
See Also
--------
- :ref:`sensor-filters`
- :apiref:`honeywell_hih_i2c/honeywell_hih.h`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,61 +0,0 @@
Kalman filter-based sensor fusion
=================================
.. seo::
:description: Instructions for setting up a kalman_combinator sensor
The ``kalman_combinator`` sensor platform allows you to filter one or several
sensors into one with a reduced error. If using a single sensor as data source,
it acts like a :ref:`sensor-filter-exponential_moving_average` filter. With
multiple sensors, it combines their values based on their respective standard
deviation.
The ``unit_of_measurement``, ``device_class``, ``entity_category``, ``icon``, and
``accuracy_decimals`` properties are by default inherited from the first sensor.
``state_class`` is explicitly not inherited, because ``total_increasing`` states
could still decrease when multiple sensors are used.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: kalman_combinator
name: "Temperature"
unit_of_measurement: °C
process_std_dev: 0.001
sources:
- source: temperature_sensor_1
error: 1.0
- source: temperature_sensor_2
error: !lambda |-
return 0.5 + std::abs(x - 25) * 0.023
Configuration variables:
------------------------
- **process_std_dev** (**Required**, float): The standard deviation of the
measurement's change per second (e.g. ``1/3600 = 0.000277`` if the
temperature usually changes at most by one Kelvin per hour). A low value here
will place high importance on the current state and be slow to respond to
changes in the measured samples. A high value will update faster, but also be
more noisy.
- **std_dev** (*Optional*, :ref:`Sensor <config-sensor>`): A sensor
that publishes the current standard deviation of the state with each update.
- **sources** (**Required**, list): A list of sensors to use as source. Each
source must have either **error** or **error_function** set. These work like
the **process_std_dev** parameter, with low values marking accurate data.
- **source** (**Required**, :ref:`config-id` of a :doc:`/components/sensor/index`): The
sensor that is used as sample source
- **error** (**Required**, float, :ref:`templatable <config-templatable>`): The standard deviation of the
sensor's measurements. If implemented as a template, the measurement is in
parameter ``x``.
- All other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ref:`sensor-filters`
- :apiref:`kalman_combinator/kalman_combinator.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,96 @@
VEML3235 Ambient Light Sensor
=============================
.. seo::
:description: Instructions for setting up VEML3235 ambient light sensors in ESPHome.
:image: veml3235.jpg
:keywords: VEML3235
The ``veml3235`` sensor platform allows you to use the Vishay VEML3235 ambient light sensor with ESPHome.
Communication with the device is over :ref:`I²C <i2c>`, which must be present in your configuration.
.. figure:: images/veml3235.jpg
:align: center
:width: 50.0%
The VEML3235 Ambient Light Sensor
This sensor provides a 16-bit dynamic range for ambient light detection ranging from 0 lx to nearly 18 klx, with a
resolution as small as 0.0021 lx/counts. It achieves that range by having two configurable ``gain`` values and a range
of integration times. For many applications, you can enable auto gain to have ESPHome select a suitable gain setting
based on the previous measurement. If light levels change dramatically, the next reading may saturate, after which the
gain will be adjusted to bring subsequent readings back in range. In general, use higher gain values and/or longer
integration times when measuring less intense light sources.
This Wikipedia `article <https://en.wikipedia.org/wiki/Lux>`__ has a table of some lux values for comparison.
Values reported are in units of ``lux``, but understand that measurement of any lux value requires careful calibration
for the light frequency or frequencies under measurement, conversion coefficients for the specific device, and other
factors. In short, to really get a true lux value measurement, you should do a laboratory-grade calibration specific
to your use case. If you are the sort of person who can do a laboratory-grade calibration, you probably knew all of
that already. Still, you can still get values that will be "in the ballpark" without calibration. This is especially
true if you just want to distinguish among "no light", "a little bit of light", "a lot of light", etc.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: veml3235
id: veml3235_sensor
name: VEML3235 Light Sensor
auto_gain: true
auto_gain_threshold_high: 90%
auto_gain_threshold_low: 20%
digital_gain: 1X
gain: 1X
integration_time: 50ms
Configuration variables:
------------------------
- **gain** (*Optional*, string): The gain the device will use. Higher values are better in low-light conditions.
You cannot specify an arbitrary gain multiplier. It must be one of:
- ``1x`` *(default)*
- ``2x``
- ``4x``
- **digital_gain** (*Optional*, string): Similar to ``gain``; provides an additional multipler, further increasing
range. You cannot specify an arbitrary digital gain multiplier. It must be one of:
- ``1x`` *(default)*
- ``2x``
- **integration_time** (*Optional*, :ref:`config-time`): The time the device will use for each measurement. Longer
means more accurate values. You cannot specify an arbitrary amount of time. It must be the equivalent of one of:
- ``50ms`` *(default)*
- ``100ms``
- ``200ms``
- ``400ms``
- ``800ms``
- **auto_gain** (*Optional*, boolean): When set to ``true`` (the default), ``gain``, ``digital_gain`` and
``integration_time`` will be adjusted automatically to avoid saturating the sensor and allow use of the maximum
possible resolution; if these values are included in the configuration, they will be used as initial values only.
- **auto_gain_threshold_high** (*Optional*, percentage): A percentage of the maximum possible lux measurement given the
current gains and integration time; when the lux measurement climbs above this value, the ``gain``, ``digital_gain``
and ``integration_time`` values will be reset and recalculated to avoid saturation and maximize resolution. The
default value is ``90%``.
- **auto_gain_threshold_low** (*Optional*, percentage): A percentage of the maximum possible lux measurement given the
current gains and integration time; when the lux measurement falls below this value, the ``gain``, ``digital_gain``
and ``integration_time`` values will be reset and recalculated to avoid saturation and maximize resolution. The
default value is ``20%``.
- All other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ref:`sensor-filters`
- `Vishay VEML3235 product page <https://www.vishay.com/en/product/80131/>`__
- `Vishay VEML3235 datasheet <https://www.vishay.com/docs/80131/veml3235.pdf>`__
- `Designing the VEML3235 Into an Application <https://www.vishay.com/docs/80222/designingveml3235.pdf>`__
- :doc:`tsl2591`
- :doc:`tsl2561`
- :doc:`bh1750`
- :apiref:`veml3235/veml3235.h`
- :ghedit:`Edit`

View File

@ -23,6 +23,8 @@ The SPI bus usually consists of 4 wires:
- **MISO** (also SDI - Serial Data In): Is used to receive data. All devices on the bus share this line.
In some cases one of **MOSI** or **MISO** do not exist as the receiving device only accepts data or sends data.
It is also possible to configure a quad SPI interface using 4 output data lines. This is required only for
use with certain components.
To set up SPI devices in ESPHome, you first need to place a top-level SPI component which defines the pins to
use for the functions described above. The **CS** pins are individually managed by the other components that
@ -37,7 +39,7 @@ This component also accepts a list of controllers if you want to implement multi
mosi_pin: GPIO13
miso_pin: GPIO12
# Example configuration entry - two controllers
# Example configuration entry - three controllers, one using quad SPI
spi:
- id: spi_bus0
clk_pin: GPIO18
@ -49,6 +51,13 @@ This component also accepts a list of controllers if you want to implement multi
mosi_pin: GPIO27
miso_pin: GPIO26
interface: any
- id: quad_spi_bus
clk_pin: GPIO47
data_pins:
- 40
- 41
- 42
- 43
Configuration variables:
------------------------
@ -60,8 +69,11 @@ Configuration variables:
- **interface** (*Optional*): Controls which hardware or software SPI implementation should be used.
Value may be one of ``any`` (default), ``software``, ``hardware``, ``spi``, ``spi2`` or ``spi3``, depending on
the particular chip. See discussion below.
- **force_sw** (*Optional*, **Deprecated**, boolean): Whether software implementation should be used even if a hardware
controller is available. Default is ``false``.
- **data_pins** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): Must be a list of exactly 4 pins to be used
for the quad SPI output data lines.
At least one of ``mosi_pin``, ``miso_pin`` and ``data_pins`` must be specified.
Interface selection:
--------------------

View File

@ -0,0 +1,44 @@
FT5X06 Touch Screen Controller
===============================
.. seo::
:description: Instructions for setting up ft5x06 touch screen controller with ESPHome
:image: indicator.jpg
:keywords: FT5X06, Seeed Indicator
The ``ft5x06`` touchscreen platform allows using the touch screen controllers based on the ft5x06 chip with ESPHome.
The :ref:`I²C <i2c>` is required to be set up in your configuration for this touchscreen to work.
This controller is used in the Seeed Studio Sensecap Indicator.
.. figure:: images/indicator.jpg
:align: center
:width: 50.0%
ft5x06 touchscreen in Seeed Studio Sensecap Indicator.
Base Touchscreen Configuration
------------------------------
.. code-block:: yaml
# Example configuration entry
touchscreen:
platform: ft5x06
id: my_touchscreen
Configuration variables:
************************
- **id** (*Optional*, :ref:`config-id`): Manually set the ID of this touchscreen.
- **rotation** (*Optional*): Set the rotation of the touchscreen. By default this will be set to match the display associated with the touchscreen, but this allows more control. Choices are ``0``, ``90``, ``180`` and ``270``.
- All other options from :ref:`Touchscreen <config-touchscreen>`.
See Also
--------
- :apiref:`ft5x06/touchscreen/ft5x06_touchscreen.h`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -205,7 +205,7 @@ Below are the methods to read current settings and modify them dynamically:
id(my_uart).get_baud_rate();
- **Modifying Settings at Runtime:** You can change certain UART parameters during runtime.
After setting new values, invoke ``load_settings()`` (ESP32 only) to apply these changes:
After setting new values, invoke ``load_settings()`` (ESP only) to apply these changes:
.. code-block:: yaml

View File

@ -225,6 +225,22 @@ This binary sensor tracks the connection status (*online*/*offline*) of the remo
All options from :ref:`Binary Sensor <config-binary_sensor>` can be added to the
above configuration.
Enabled Binary Sensor
^^^^^^^^^^^^^^^^^^^^^
This binary sensor tracks if |wireguard| is *enabled* or not.
.. code-block:: yaml
# Example configuration entry
binary_sensor:
- platform: wireguard
enabled:
name: 'WireGuard Enabled'
All options from :ref:`Binary Sensor <config-binary_sensor>` can be added to the
above configuration.
Latest Handshake Sensor
^^^^^^^^^^^^^^^^^^^^^^^
@ -257,6 +273,85 @@ This sensor exposes to the frontend the configured :ref:`address <wireguard-addr
All options from :ref:`Text Sensor <config-text_sensor>` can be added to the
above configuration.
.. _wireguard-actions:
Actions
-------
The following actions are available.
``wireguard.disable``
^^^^^^^^^^^^^^^^^^^^^
This action drops down the active VPN link (if any) and disables the component.
.. code-block:: yaml
on_...:
then:
- wireguard.disable:
The lambda equivalent is ``id(wireguard_id).disable()``.
.. note::
To disable |wireguard| since device boot you can execute this action
in the :ref:`esphome-on_boot` step.
``wireguard.enable``
^^^^^^^^^^^^^^^^^^^^
This action enables the component and starts the connection to the remote peer.
.. code-block:: yaml
on_...:
then:
- wireguard.enable:
The lambda equivalent is ``id(wireguard_id).enable()``.
.. _wireguard-conditions:
Conditions
----------
The following conditions are available.
``wireguard.enabled``
^^^^^^^^^^^^^^^^^^^^^
This condition checks if |wireguard| is currently enabled or not.
.. code-block:: yaml
on_...:
- if:
condition: wireguard.enabled
then:
- ...
else:
- ...
The lambda equivalent is ``id(wireguard_id).is_enabled()``.
``wireguard.peer_online``
^^^^^^^^^^^^^^^^^^^^^^^^^
This condition checks if the remote peer is *online*.
.. code-block:: yaml
on_...:
- if:
condition: wireguard.peer_online
then:
- ...
else:
- ...
The lambda equivalent is ``id(wireguard_id).is_peer_up()``.
.. _wireguard-installation:
Remote peer setup
@ -305,6 +400,7 @@ See Also
- :doc:`time/index`
- :doc:`time/sntp`
- :ref:`automation`
- |wireguard|_ official website
- `Home Assistant Community Add-on: WireGuard
<https://community.home-assistant.io/t/home-assistant-community-add-on-wireguard/134662>`__

View File

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

View File

@ -98,7 +98,8 @@ Actions
-------
Now comes the actual automation block. With ``then``, you tell ESPHome what should happen when the press happens.
Within this block, you can define several "actions". For example, ``switch.toggle`` and the line after that form an
Within this block, you can define several "actions" that will be executed sequentially.
For example, ``switch.toggle`` and the line after that form an
action. Each action is separated by a dash and multiple actions can be executed in series by just adding another ``-``
like so:
@ -409,6 +410,7 @@ All Actions
- :ref:`media_player.play <media_player-play>` / :ref:`media_player.pause <media_player-pause>` / :ref:`media_player.stop <media_player-stop>` / :ref:`media_player.toggle <media_player-toggle>`
/ :ref:`media_player.volume_up <media_player-volume_up>` / :ref:`media_player.volume_down <media_player-volume_down>` / :ref:`media_player.volume_set <media_player-volume_set>`
- :ref:`ble_client.ble_write <ble_client-ble_write_action>`
- :ref:`wireguard.disable <wireguard-actions>` / :ref:`wireguard.enable <wireguard-actions>`
.. _config-condition:
@ -431,6 +433,7 @@ All Conditions
- :ref:`display.is_displaying_page <display-is_displaying_page-condition>`
- :ref:`number.in_range <number-in_range_condition>`
- :ref:`fan.is_on <fan-is_on_condition>` / :ref:`fan.is_off <fan-is_off_condition>`
- :ref:`wireguard.enabled <wireguard-conditions>` / :ref:`wireguard.peer_online <wireguard-conditions>`
All Lambda Calls
----------------

View File

@ -472,6 +472,8 @@ variables can be provided to them. This means that packages can be
used as `templates`, allowing complex or repetitive configurations to
be stored in a package file and then incorporated into the
configuration more than once.
Additionally packages could contain a ``defaults`` block which provides
subsitutions for variables not provided by the ``!include`` block.
As an example, if the configuration needed to support three garage
doors using the ``gpio`` switch platform and the ``time_based`` cover
@ -502,11 +504,17 @@ platform, it could be constructed like this:
door_location: right
open_switch_gpio: 15
close_switch_gpio: 18
open_duration: "1min"
close_duration: "50s"
.. code-block:: yaml
# In garage-door.yaml
defaults:
open_duration: "2.1min"
close_duration: "2min"
switch:
- id: open_${door_location}_door_switch
name: ${door_name} Garage Door Open Switch
@ -524,11 +532,11 @@ platform, it could be constructed like this:
open_action:
- switch.turn_on: open_${door_location}_door_switch
open_duration: 2.1min
open_duration: ${open_duration}
close_action:
- switch.turn_on: close_${door_location}_door_switch
close_duration: 2min
close_duration: ${close_duration}
stop_action:
- switch.turn_off: open_${door_location}_door_switch

View File

@ -30,7 +30,7 @@ Contributors
- `Alessandro Campolo (@a13ssandr0) <https://github.com/a13ssandr0>`__
- `Aalian Khan (@AalianKhan) <https://github.com/AalianKhan>`__
- `Adam Liddell (@aaliddell) <https://github.com/aaliddell>`__
- `Aapeli (@aapeliv) <https://github.com/aapeliv>`__
- `Aapeli Vuorinen (@aapeliv) <https://github.com/aapeliv>`__
- `Aaron Gamble (@aarongamble) <https://github.com/aarongamble>`__
- `Aaron S. Jackson (@AaronJackson) <https://github.com/AaronJackson>`__
- `Abel Matser (@abelmatser) <https://github.com/abelmatser>`__
@ -73,7 +73,7 @@ Contributors
- `Alexandre Danault (@AlexDanault) <https://github.com/AlexDanault>`__
- `Alex Iribarren (@alexiri) <https://github.com/alexiri>`__
- `Alex Mekkering (@AlexMekkering) <https://github.com/AlexMekkering>`__
- `Alex Yao (@alexyao2015) <https://github.com/alexyao2015>`__
- `Alex (@alexyao2015) <https://github.com/alexyao2015>`__
- `Alfredo (@alfredopironti) <https://github.com/alfredopironti>`__
- `Alibloke (@Alibloke) <https://github.com/Alibloke>`__
- `Alessandro Ranellucci (@alranel) <https://github.com/alranel>`__
@ -94,12 +94,12 @@ Contributors
- `Andreas Hergert (@andreashergert1984) <https://github.com/andreashergert1984>`__
- `Andrew J.Swan (@andrewjswan) <https://github.com/andrewjswan>`__
- `andrewpc (@andrewpc) <https://github.com/andrewpc>`__
- `Andrew Y. (@andrey-yantsen) <https://github.com/andrey-yantsen>`__
- `Andrey Yantsen (@andrey-yantsen) <https://github.com/andrey-yantsen>`__
- `Andrzej (@andriej) <https://github.com/andriej>`__
- `Andreas (@anduchs) <https://github.com/anduchs>`__
- `Andy2No (@Andy2No) <https://github.com/Andy2No>`__
- `AndyRPH (@AndyRPH) <https://github.com/AndyRPH>`__
- `Angel Nunez Mencias (@angelnu) <https://github.com/angelnu>`__
- `Vegetto (@angelnu) <https://github.com/angelnu>`__
- `Sergey Anisimov (@anisimovsergey) <https://github.com/anisimovsergey>`__
- `Nikolay Vasilchuk (@Anonym-tsk) <https://github.com/Anonym-tsk>`__
- `Anthony Keane (@anthonykeane) <https://github.com/anthonykeane>`__
@ -129,13 +129,13 @@ Contributors
- `Alexander Turlov (@aturlov) <https://github.com/aturlov>`__
- `aus (@aus) <https://github.com/aus>`__
- `AustinMorris (@AustinMorris) <https://github.com/AustinMorris>`__
- `Denis Demchenko (@Avirsaam) <https://github.com/Avirsaam>`__
- `Avirsaam (@Avirsaam) <https://github.com/Avirsaam>`__
- `Arsène von Wyss (@avonwyss) <https://github.com/avonwyss>`__
- `Andrew Weddle (@aweddle2) <https://github.com/aweddle2>`__
- `Alexis Iglauer (@ax42) <https://github.com/ax42>`__
- `Achilleas Pipinellis (@axilleas) <https://github.com/axilleas>`__
- `Kamil Trzciński (@ayufan) <https://github.com/ayufan>`__
- `Azimath (@Azimath) <https://github.com/Azimath>`__
- `Nicholas Peters (@Azimath) <https://github.com/Azimath>`__
- `Daniel (@azrael783) <https://github.com/azrael783>`__
- `B48D81EFCC (@B48D81EFCC) <https://github.com/B48D81EFCC>`__
- `Florian Mösch (@badbadc0ffee) <https://github.com/badbadc0ffee>`__
@ -150,7 +150,7 @@ Contributors
- `Bascht74 (@Bascht74) <https://github.com/Bascht74>`__
- `Viktr (@BbIKTOP) <https://github.com/BbIKTOP>`__
- `J. Nick Koston (@bdraco) <https://github.com/bdraco>`__
- `Maxym Ocheretianko (@bearpawmaxim) <https://github.com/bearpawmaxim>`__
- `Maxim Ocheretianko (@bearpawmaxim) <https://github.com/bearpawmaxim>`__
- `beaudeanadams (@beaudeanadams) <https://github.com/beaudeanadams>`__
- `Benjamin Freeman (@Beetix) <https://github.com/Beetix>`__
- `beikeland (@beikeland) <https://github.com/beikeland>`__
@ -175,7 +175,7 @@ Contributors
- `Bert Hertogen (@berthertogen) <https://github.com/berthertogen>`__
- `Brandon (@bgulla) <https://github.com/bgulla>`__
- `Benedikt Hübschen (@bhuebschen) <https://github.com/bhuebschen>`__
- `Stef (@Bierchermuesli) <https://github.com/Bierchermuesli>`__
- `Bierchermuesli (@Bierchermuesli) <https://github.com/Bierchermuesli>`__
- `bigwoof (@bigwoof) <https://github.com/bigwoof>`__
- `Bill Church (@billchurch) <https://github.com/billchurch>`__
- `Brian Kaufman (@bkaufx) <https://github.com/bkaufx>`__
@ -197,7 +197,7 @@ Contributors
- `Casey Olson (@bookcasey) <https://github.com/bookcasey>`__
- `Borja Burgos (@borjaburgos) <https://github.com/borjaburgos>`__
- `Brian Orpin (@borpin) <https://github.com/borpin>`__
- `bouhaa (@BoukeHaarsma23) <https://github.com/BoukeHaarsma23>`__
- `BoukeHaarsma23 (@BoukeHaarsma23) <https://github.com/BoukeHaarsma23>`__
- `brabl2 (@brabl2) <https://github.com/brabl2>`__
- `brainiac27 (@brainiac27) <https://github.com/brainiac27>`__
- `brambo123 (@brambo123) <https://github.com/brambo123>`__
@ -254,6 +254,7 @@ Contributors
- `Chris (@chrismaki) <https://github.com/chrismaki>`__
- `Christoph Wagner (@Christoph-Wagner) <https://github.com/Christoph-Wagner>`__
- `Christian Taedcke (@chrta) <https://github.com/chrta>`__
- `ChuckMash (@ChuckMash) <https://github.com/ChuckMash>`__
- `Pavel Skuratovich (@Chupaka) <https://github.com/Chupaka>`__
- `Chris Johnson (@ciband) <https://github.com/ciband>`__
- `CircuitGuy (@CircuitGuy) <https://github.com/CircuitGuy>`__
@ -393,7 +394,7 @@ Contributors
- `dr-oblivium (@dr-oblivium) <https://github.com/dr-oblivium>`__
- `Jean Louis-Guerin (@DrCoolzic) <https://github.com/DrCoolzic>`__
- `Drew Perttula (@drewp) <https://github.com/drewp>`__
- `Angel G (@drmodding) <https://github.com/drmodding>`__
- `drmodding (@drmodding) <https://github.com/drmodding>`__
- `drmpf (@drmpf) <https://github.com/drmpf>`__
- `drogfild (@drogfild) <https://github.com/drogfild>`__
- `Simone Rossetto (@droscy) <https://github.com/droscy>`__
@ -404,7 +405,7 @@ Contributors
- `Tom Soer (@dtx3k) <https://github.com/dtx3k>`__
- `dubit0 (@dubit0) <https://github.com/dubit0>`__
- `Mikkel Jeppesen (@Duckle29) <https://github.com/Duckle29>`__
- `Sergey Dudanov (@dudanov) <https://github.com/dudanov>`__
- `Sergey V. DUDANOV (@dudanov) <https://github.com/dudanov>`__
- `David Girón (@duhow) <https://github.com/duhow>`__
- `Duncan Findlay (@duncf) <https://github.com/duncf>`__
- `David van der Leij (@dvanderleij) <https://github.com/dvanderleij>`__
@ -425,7 +426,7 @@ Contributors
- `Eli Fidler (@efidler) <https://github.com/efidler>`__
- `egandro (@egandro) <https://github.com/egandro>`__
- `Erwin Kooi (@egeltje) <https://github.com/egeltje>`__
- `Egglestron (@Egglestron) <https://github.com/Egglestron>`__
- `Maxime Michel (@Egglestron) <https://github.com/Egglestron>`__
- `Eike (@ei-ke) <https://github.com/ei-ke>`__
- `Elazar Leibovich (@elazarl) <https://github.com/elazarl>`__
- `Eli (@eli-xciv) <https://github.com/eli-xciv>`__
@ -459,6 +460,7 @@ Contributors
- `Evan Coleman (@evandcoleman) <https://github.com/evandcoleman>`__
- `Clemens Kirchgatterer (@everslick) <https://github.com/everslick>`__
- `Evgeni Golov (@evgeni) <https://github.com/evgeni>`__
- `evlo (@evlo) <https://github.com/evlo>`__
- `Expaso (@Expaso) <https://github.com/Expaso>`__
- `Malte Franken (@exxamalte) <https://github.com/exxamalte>`__
- `f0rdprefect (@f0rdprefect) <https://github.com/f0rdprefect>`__
@ -485,6 +487,7 @@ Contributors
- `Clemens (@firegore) <https://github.com/firegore>`__
- `Fredrik Jansson (@fjansson) <https://github.com/fjansson>`__
- `Frédéric Jouault (@fjouault) <https://github.com/fjouault>`__
- `FL42 (@fl42) <https://github.com/fl42>`__
- `Sean Vig (@flacjacket) <https://github.com/flacjacket>`__
- `Diego Elio Pettenò (@Flameeyes) <https://github.com/Flameeyes>`__
- `Flaviu Tamas (@flaviut) <https://github.com/flaviut>`__
@ -492,6 +495,7 @@ Contributors
- `fluffymonster (@fluffymonster) <https://github.com/fluffymonster>`__
- `flyize (@flyize) <https://github.com/flyize>`__
- `风飘雨 (@flyrainning) <https://github.com/flyrainning>`__
- `foltymat (@foltymat) <https://github.com/foltymat>`__
- `Fabio Pugliese Ornellas (@fornellas) <https://github.com/fornellas>`__
- `Fractal147 (@Fractal147) <https://github.com/Fractal147>`__
- `Francis-labo (@Francis-labo) <https://github.com/Francis-labo>`__
@ -572,6 +576,7 @@ Contributors
- `Peter van Dijk (@Habbie) <https://github.com/Habbie>`__
- `Dusan Cervenka (@Hadatko) <https://github.com/Hadatko>`__
- `Hagai Shatz (@hagai-shatz) <https://github.com/hagai-shatz>`__
- `hajar97 (@hajar97) <https://github.com/hajar97>`__
- `Boris Hajduk (@hajdbo) <https://github.com/hajdbo>`__
- `Gavin Mogan (@halkeye) <https://github.com/halkeye>`__
- `Charles (@hallard) <https://github.com/hallard>`__
@ -586,7 +591,7 @@ Contributors
- `Jimmy Hedman (@HeMan) <https://github.com/HeMan>`__
- `Hemi03 (@Hemi03) <https://github.com/Hemi03>`__
- `HengYongChao (@HengYongChao) <https://github.com/HengYongChao>`__
- `Andrei Solodovnikov (@HepoH3) <https://github.com/HepoH3>`__
- `HepoH3 (@HepoH3) <https://github.com/HepoH3>`__
- `Hermann Kraus (@herm) <https://github.com/herm>`__
- `Herr Frei (@herrfrei) <https://github.com/herrfrei>`__
- `highground88 (@highground88) <https://github.com/highground88>`__
@ -609,7 +614,7 @@ Contributors
- `Adrián Panella (@ianchi) <https://github.com/ianchi>`__
- `Ian Anderson (@ianderso) <https://github.com/ianderso>`__
- `Ian Leeder (@ianleeder) <https://github.com/ianleeder>`__
- `Honza Pobořil (@iBobik) <https://github.com/iBobik>`__
- `Jan Pobořil (@iBobik) <https://github.com/iBobik>`__
- `igg (@igg) <https://github.com/igg>`__
- `Ignacio Hernandez-Ros (@IgnacioHR) <https://github.com/IgnacioHR>`__
- `Ivan Grokhotkov (@igrr) <https://github.com/igrr>`__
@ -619,7 +624,6 @@ Contributors
- `ilium007 (@ilium007) <https://github.com/ilium007>`__
- `Iman Ahmadvand (@IMAN4K) <https://github.com/IMAN4K>`__
- `imgbot[bot] (@imgbot[bot]) <https://github.com/imgbot[bot]>`__
- `ImSorryButWho (@ImSorryButWho) <https://github.com/ImSorryButWho>`__
- `imwoo90 (@imwoo90) <https://github.com/imwoo90>`__
- `Dom (@Ing-Dom) <https://github.com/Ing-Dom>`__
- `Ingo Becker (@ingobecker) <https://github.com/ingobecker>`__
@ -666,6 +670,7 @@ Contributors
- `jimtng (@jimtng) <https://github.com/jimtng>`__
- `jivesinger (@jivesinger) <https://github.com/jivesinger>`__
- `jj-uk (@jj-uk) <https://github.com/jj-uk>`__
- `Jean J. de Jong (@jjdejong) <https://github.com/jjdejong>`__
- `John K. Luebs (@jkl1337) <https://github.com/jkl1337>`__
- `Jeppe Ladefoged (@jladefoged) <https://github.com/jladefoged>`__
- `Jean-Luc Béchennec (@jlbirccyn) <https://github.com/jlbirccyn>`__
@ -690,11 +695,12 @@ Contributors
- `Joris S (@Jorre05) <https://github.com/Jorre05>`__
- `Jared Sanson (@jorticus) <https://github.com/jorticus>`__
- `JosephTang (@JosephTang) <https://github.com/JosephTang>`__
- `Joshua Baran (@joshbaran) <https://github.com/joshbaran>`__
- `Joshua Spence (@joshuaspence) <https://github.com/joshuaspence>`__
- `joskfg (@joskfg) <https://github.com/joskfg>`__
- `Joscha Wagner (@jowgn) <https://github.com/jowgn>`__
- `Javier Peletier (@jpeletier) <https://github.com/jpeletier>`__
- `Jos Suanet (@jsuanet) <https://github.com/jsuanet>`__
- `jsuanet (@jsuanet) <https://github.com/jsuanet>`__
- `James Szalay (@jtszalay) <https://github.com/jtszalay>`__
- `Jules-R (@Jules-R) <https://github.com/Jules-R>`__
- `Julie Koubová (@juliekoubova) <https://github.com/juliekoubova>`__
@ -732,7 +738,7 @@ Contributors
- `Kevin P. Fleming (@kpfleming) <https://github.com/kpfleming>`__
- `Karl Q. (@kquinsland) <https://github.com/kquinsland>`__
- `Anandha Saravanan (@KratosMr) <https://github.com/KratosMr>`__
- `Stefan Rado (@kroimon) <https://github.com/kroimon>`__
- `kroimon (@kroimon) <https://github.com/kroimon>`__
- `krunkel (@krunkel) <https://github.com/krunkel>`__
- `kryptonitecb3 (@kryptonitecb3) <https://github.com/kryptonitecb3>`__
- `Kendell R (@KTibow) <https://github.com/KTibow>`__
@ -746,16 +752,17 @@ Contributors
- `Anton Viktorov (@latonita) <https://github.com/latonita>`__
- `Lawrie George (@lawriege) <https://github.com/lawriege>`__
- `Ludovic BOUÉ (@lboue) <https://github.com/lboue>`__
- `Luca Cavalli (@lcavalli) <https://github.com/lcavalli>`__
- `lcavalli (@lcavalli) <https://github.com/lcavalli>`__
- `Craig Fletcher (@leakypixel) <https://github.com/leakypixel>`__
- `Dominik Wagenknecht (@LeDominik) <https://github.com/LeDominik>`__
- `Benny de Leeuw (@leeuwte) <https://github.com/leeuwte>`__
- `Thayne (@Legot) <https://github.com/Legot>`__
- `Leonardo La Rocca (@leoli51) <https://github.com/leoli51>`__
- `leoshusar (@leoshusar) <https://github.com/leoshusar>`__
- `Leo Winter (@LeoWinterDE) <https://github.com/LeoWinterDE>`__
- `Lubos Horacek (@lhoracek) <https://github.com/lhoracek>`__
- `Liionboy (@Liionboy) <https://github.com/Liionboy>`__
- `LiJu09 (@LiJu09) <https://github.com/LiJu09>`__
- `Juraj Liso (@LiJu09) <https://github.com/LiJu09>`__
- `Li Junru (@lijunru-hub) <https://github.com/lijunru-hub>`__
- `lillborje71 (@lillborje71) <https://github.com/lillborje71>`__
- `Caleb Pryor (@lilmansplace) <https://github.com/lilmansplace>`__
@ -802,6 +809,7 @@ Contributors
- `Ben Marengo (@marengaz) <https://github.com/marengaz>`__
- `Marvin Gaube (@margau) <https://github.com/margau>`__
- `maringeph (@maringeph) <https://github.com/maringeph>`__
- `Mario Di Vece (@mariodivece) <https://github.com/mariodivece>`__
- `Mark Hildreth (@markhildreth) <https://github.com/markhildreth>`__
- `Mark Schabacker (@markschabacker) <https://github.com/markschabacker>`__
- `marshn (@marshn) <https://github.com/marshn>`__
@ -816,6 +824,7 @@ Contributors
- `Mat931 (@Mat931) <https://github.com/Mat931>`__
- `mathieu-mp (@mathieu-mp) <https://github.com/mathieu-mp>`__
- `matikij (@matikij) <https://github.com/matikij>`__
- `Matjah Sonneveld (@matjahs) <https://github.com/matjahs>`__
- `Michel Marti (@matoxp) <https://github.com/matoxp>`__
- `matt123p (@matt123p) <https://github.com/matt123p>`__
- `matthias882 (@matthias882) <https://github.com/matthias882>`__
@ -885,7 +894,6 @@ Contributors
- `Martin Wetterwald (@mwetterw) <https://github.com/mwetterw>`__
- `mwolter805 (@mwolter805) <https://github.com/mwolter805>`__
- `myhomeiot (@myhomeiot) <https://github.com/myhomeiot>`__
- `Igor Scheller (@MyIgel) <https://github.com/MyIgel>`__
- `Mykle (@myklemykle) <https://github.com/myklemykle>`__
- `Mynasru (@Mynasru) <https://github.com/Mynasru>`__
- `Kevin Uhlir (@n0bel) <https://github.com/n0bel>`__
@ -905,6 +913,7 @@ Contributors
- `Nazar Mokrynskyi (@nazar-pc) <https://github.com/nazar-pc>`__
- `Bergont Nicolas (@nbergont) <https://github.com/nbergont>`__
- `neilger (@neilger) <https://github.com/neilger>`__
- `Neil Martin (@neilmartin83) <https://github.com/neilmartin83>`__
- `Nejc Koncan (@nejc-cc) <https://github.com/nejc-cc>`__
- `Nerijus Baliūnas (@nerijus) <https://github.com/nerijus>`__
- `Nicolas Graziano (@ngraziano) <https://github.com/ngraziano>`__
@ -928,7 +937,6 @@ Contributors
- `Greg Johnson (@notgwj) <https://github.com/notgwj>`__
- `JJ (@notjj) <https://github.com/notjj>`__
- `Geoffrey Mayo (@notmayo) <https://github.com/notmayo>`__
- `notsonominal (@notsonominal) <https://github.com/notsonominal>`__
- `nouser2013 (@nouser2013) <https://github.com/nouser2013>`__
- `Paul Read (@nsolvepaul) <https://github.com/nsolvepaul>`__
- `Nick (@ntompson) <https://github.com/ntompson>`__
@ -944,7 +952,7 @@ Contributors
- `Ockert Marais (@OckertM) <https://github.com/OckertM>`__
- `Dave Walker (@oddsockmachine) <https://github.com/oddsockmachine>`__
- `Odd Stråbø (@oddstr13) <https://github.com/oddstr13>`__
- `Andrii Ganzevych (@odya) <https://github.com/odya>`__
- `Andrey Ganzevich (@odya) <https://github.com/odya>`__
- `ogatatsu (@ogatatsu) <https://github.com/ogatatsu>`__
- `Oğuzhan Başer (@oguzhanbaser) <https://github.com/oguzhanbaser>`__
- `Larry (@ojaksch) <https://github.com/ojaksch>`__
@ -955,7 +963,7 @@ Contributors
- `Onne (@onnlucky) <https://github.com/onnlucky>`__
- `optimusprimespace (@optimusprimespace) <https://github.com/optimusprimespace>`__
- `Oscar Bolmsten (@oscar-b) <https://github.com/oscar-b>`__
- `Mauri (@Otamay) <https://github.com/Otamay>`__
- `Otamay (@Otamay) <https://github.com/Otamay>`__
- `Otto Winter (@OttoWinter) <https://github.com/OttoWinter>`__
- `Maxime Dufour (@outscale-mdr) <https://github.com/outscale-mdr>`__
- `Ben Owen (@owenb321) <https://github.com/owenb321>`__
@ -1029,7 +1037,7 @@ Contributors
- `RadekHvizdos (@RadekHvizdos) <https://github.com/RadekHvizdos>`__
- `rafalstarczak (@rafalstarczak) <https://github.com/rafalstarczak>`__
- `Florian Ragwitz (@rafl) <https://github.com/rafl>`__
- `Ben Winslow (@raineth) <https://github.com/raineth>`__
- `raineth (@raineth) <https://github.com/raineth>`__
- `Ben V. Brown (@Ralim) <https://github.com/Ralim>`__
- `Benjamin G. (@Randomblock1) <https://github.com/Randomblock1>`__
- `randomllama (@randomllama) <https://github.com/randomllama>`__
@ -1050,7 +1058,7 @@ Contributors
- `Robert Gabrielson (@rgabrielson11) <https://github.com/rgabrielson11>`__
- `Rafael Goes (@rgriffogoes) <https://github.com/rgriffogoes>`__
- `rheinz (@rheinz) <https://github.com/rheinz>`__
- `Richard Hopton (@richardhopton) <https://github.com/richardhopton>`__
- `richardhopton (@richardhopton) <https://github.com/richardhopton>`__
- `Richard Klingler (@richardklingler) <https://github.com/richardklingler>`__
- `Richard Lewis (@richrd) <https://github.com/richrd>`__
- `Rishab Mehta (@rishabmehta7) <https://github.com/rishabmehta7>`__
@ -1062,6 +1070,7 @@ Contributors
- `rnauber (@rnauber) <https://github.com/rnauber>`__
- `Rob Deutsch (@rob-deutsch) <https://github.com/rob-deutsch>`__
- `Robert Alfaro (@robert-alfaro) <https://github.com/robert-alfaro>`__
- `Robert91911 (@Robert91911) <https://github.com/Robert91911>`__
- `Robinson1999 (@Robinson1999) <https://github.com/Robinson1999>`__
- `RoboMagus (@RoboMagus) <https://github.com/RoboMagus>`__
- `Roeland Lutters (@Roeland54) <https://github.com/Roeland54>`__
@ -1122,6 +1131,7 @@ Contributors
- `signix (@signix) <https://github.com/signix>`__
- `SiliconAvatar (@SiliconAvatar) <https://github.com/SiliconAvatar>`__
- `Mark Lopez (@Silvenga) <https://github.com/Silvenga>`__
- `James Chaloupka (@SirGoodenough) <https://github.com/SirGoodenough>`__
- `Maximilian Ertl (@Sirs0ri) <https://github.com/Sirs0ri>`__
- `Francisco J. Solis (@sisco0) <https://github.com/sisco0>`__
- `Derek Hageman (@Sizurka) <https://github.com/Sizurka>`__
@ -1152,7 +1162,7 @@ Contributors
- `sticilface (@sticilface) <https://github.com/sticilface>`__
- `Stijn Tintel (@stintel) <https://github.com/stintel>`__
- `Mathias Stock (@Stock-M) <https://github.com/Stock-M>`__
- `Daniel Jönsson (@Strixx76) <https://github.com/Strixx76>`__
- `Strixx76 (@Strixx76) <https://github.com/Strixx76>`__
- `stubs12 (@stubs12) <https://github.com/stubs12>`__
- `sud33p (@sud33p) <https://github.com/sud33p>`__
- `sumirati (@sumirati) <https://github.com/sumirati>`__
@ -1206,8 +1216,9 @@ Contributors
- `Thomas Langewouters (@thouters) <https://github.com/thouters>`__
- `Transylvania High Tech (@thtro) <https://github.com/thtro>`__
- `Thunderbiscuits (@Thunderbiscuits) <https://github.com/Thunderbiscuits>`__
- `Tiago Freire (@tiagofreire-pt) <https://github.com/tiagofreire-pt>`__
- `tiagofreire-pt (@tiagofreire-pt) <https://github.com/tiagofreire-pt>`__
- `Tijs-B (@Tijs-B) <https://github.com/Tijs-B>`__
- `Bill Adams (@TikiBill) <https://github.com/TikiBill>`__
- `Tim Boldt (@timboldt) <https://github.com/timboldt>`__
- `Tim Laurence (@timdaman) <https://github.com/timdaman>`__
- `Aidan Timson (@timmo001) <https://github.com/timmo001>`__
@ -1216,7 +1227,7 @@ Contributors
- `Tinkerfish (@tinkerfish) <https://github.com/tinkerfish>`__
- `TJ Horner (@tjhorner) <https://github.com/tjhorner>`__
- `Christian (@Tntdruid) <https://github.com/Tntdruid>`__
- `Philipp Riederer (@toelke) <https://github.com/toelke>`__
- `Philipp Tölke (@toelke) <https://github.com/toelke>`__
- `tomaszduda23 (@tomaszduda23) <https://github.com/tomaszduda23>`__
- `Tom Brien (@TomBrien) <https://github.com/TomBrien>`__
- `Thomas Combriat (@tomcombriat) <https://github.com/tomcombriat>`__
@ -1229,7 +1240,7 @@ Contributors
- `Aleksandra M (@tort32) <https://github.com/tort32>`__
- `tracestep (@tracestep) <https://github.com/tracestep>`__
- `Trent Houliston (@TrentHouliston) <https://github.com/TrentHouliston>`__
- `Felix E (@tribut) <https://github.com/tribut>`__
- `Felix Eckhofer (@tribut) <https://github.com/tribut>`__
- `Trick van Staveren (@trickv) <https://github.com/trickv>`__
- `TripitakaBC (@TripitakaBC) <https://github.com/TripitakaBC>`__
- `Tobias (@tripplet) <https://github.com/tripplet>`__
@ -1255,6 +1266,7 @@ Contributors
- `Vlad Yarotsky (@v-yarotsky) <https://github.com/v-yarotsky>`__
- `Vc (@Valcob) <https://github.com/Valcob>`__
- `Nad (@valordk) <https://github.com/valordk>`__
- `Vicent Climent (@vcliment89) <https://github.com/vcliment89>`__
- `Veli Veromann (@velijv) <https://github.com/velijv>`__
- `André Lademann (@vergissberlin) <https://github.com/vergissberlin>`__
- `Austin (@vidplace7) <https://github.com/vidplace7>`__
@ -1279,7 +1291,7 @@ Contributors
- `whimsee (@whimsee) <https://github.com/whimsee>`__
- `wifwucite (@wifwucite) <https://github.com/wifwucite>`__
- `wilberforce (@wilberforce) <https://github.com/wilberforce>`__
- `Willem Vooijs (@wildekek) <https://github.com/wildekek>`__
- `wildekek (@wildekek) <https://github.com/wildekek>`__
- `Wingman3434 (@Wingman3434) <https://github.com/Wingman3434>`__
- `Emil Hesslow (@WizKid) <https://github.com/WizKid>`__
- `WJCarpenter (@wjcarpenter) <https://github.com/wjcarpenter>`__
@ -1298,7 +1310,7 @@ Contributors
- `Xose Pérez (@xoseperez) <https://github.com/xoseperez>`__
- `WitchKing (@xvil) <https://github.com/xvil>`__
- `Andrew Kroll (@xxxajk) <https://github.com/xxxajk>`__
- `Yaroslav Heriatovych (@Yarikx) <https://github.com/Yarikx>`__
- `Yaroslav (@Yarikx) <https://github.com/Yarikx>`__
- `Marcin Jaworski (@yawor) <https://github.com/yawor>`__
- `yousaf465 (@yousaf465) <https://github.com/yousaf465>`__
- `Yuval Aboulafia (@yuvalabou) <https://github.com/yuvalabou>`__
@ -1313,4 +1325,4 @@ Contributors
- `Zsolt Zsiros (@ZsZs73) <https://github.com/ZsZs73>`__
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
*This page was last updated January 22, 2024.*
*This page was last updated February 13, 2024.*

BIN
images/as5600.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
images/honeywellhih.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
images/indicator.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
images/nfc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
images/st7567.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
images/veml3235.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -317,6 +317,7 @@ Environmental
HTE501, components/sensor/hte501, HTE501.png, Temperature & Humidity
Honeywell ABP, components/sensor/honeywellabp, honeywellabp.jpg, Pressure & Temperature
Honeywell ABP2 I2C, components/sensor/honeywellabp2_i2c, honeywellabp.jpg, Pressure & Temperature
Honeywell HIH I2C, components/sensor/honeywell_hih_i2c, honeywellhih.jpg, Temperature & Humidity
HTU21D / Si7021 / SHT21, components/sensor/htu21d, htu21d.jpg, Temperature & Humidity
Hydreon Rain Sensor, components/sensor/hydreon_rgxx, hydreon_rg9.jpg, Rain
Inkbird IBS-TH1 Mini, components/sensor/inkbird_ibsth1_mini, inkbird_isbth1_mini.jpg, Temperature & Humidity
@ -361,6 +362,7 @@ Light
TCS34725, components/sensor/tcs34725, tcs34725.jpg, Lux & RGB colour
TSL2561, components/sensor/tsl2561, tsl2561.jpg, Lux
TSL2591, components/sensor/tsl2591, tsl2591.jpg, Lux
VEML3235, components/sensor/veml3235, veml3235.jpg, Lux
Magnetic
@ -368,6 +370,7 @@ Magnetic
.. imgtable::
ESP32 Hall Sensor, components/sensor/esp32_hall, magnet.svg, ESP internal, dark-invert
AS5600, components/sensor/as5600, as5600.jpg, 12-Bit Magnetic Position Sensor
HMC5883L, components/sensor/hmc5883l, hmc5883l.jpg, 3-Axis magnetometer
MMC5603, components/sensor/mmc5603, mmc5603.jpg, 3-Axis magnetometer
MMC5983, components/sensor/mmc5983, mmc5983.jpg, 3-Axis magnetometer
@ -382,13 +385,13 @@ Miscellaneous
AS3935, components/sensor/as3935, as3935.jpg, Storm lightning
Binary Sensor Map, components/sensor/binary_sensor_map, binary_sensor_map.jpg, Map binary to value
b-parasite, components/sensor/b_parasite, b_parasite.jpg, Moisture & Temperature & Humidity & Light
Combination, components/sensor/combination, function.svg, dark-invert
Duty Time, components/sensor/duty_time, timer-play-outline.svg, dark-invert
EZO sensor circuits, components/sensor/ezo, ezo-ph-circuit.png, (pH)
FS3000, components/sensor/fs3000, fs3000.jpg, Air velocity
Havells Solar, components/sensor/havells_solar, havellsgti5000d_s.jpg, Solar rooftop
Integration, components/sensor/integration, sigma.svg, dark-invert
Growatt Solar, components/sensor/growatt_solar, growatt.jpg, Solar rooftop
Kalman Combinator, components/sensor/kalman_combinator, function.svg, dark-invert
Modbus Sensor, components/sensor/modbus_controller, modbus.png
Nextion, components/sensor/nextion, nextion.jpg, Sensors from display
Rotary Encoder, components/sensor/rotary_encoder, rotary_encoder.jpg
@ -482,9 +485,10 @@ Often known as "tag" or "card" readers within the community.
.. imgtable::
NFC Tag, components/binary_sensor/nfc, nfc.png
PN532, components/binary_sensor/pn532, pn532.jpg
PN7150, components/binary_sensor/pn7150, pn7150.jpg
PN716X, components/binary_sensor/pn7160, pn716x.jpg
PN7150, components/pn7150, pn7150.jpg
PN716X, components/pn7160, pn716x.jpg
RC522, components/binary_sensor/rc522, rc522.jpg
RDM6300, components/binary_sensor/rdm6300, rdm6300.jpg
@ -495,6 +499,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
FT5X06, components/touchscreen/ft5x06, indicator.jpg
GT911, components/touchscreen/gt911, esp32_s3_box_3.png
Presence Detection
@ -652,6 +657,8 @@ Display Components
ILI9481, components/display/ili9xxx, ili9481.svg
ILI9486, components/display/ili9xxx, ili9341.jpg
ILI9488, components/display/ili9xxx, ili9488.svg
WSPICOLCD, components/display/ili9xxx, ili9488.svg
Inkplate, components/display/inkplate6, inkplate6.jpg
LCD Display, components/display/lcd_display, lcd.jpg
MAX7219, components/display/max7219, max7219.jpg
@ -665,6 +672,7 @@ Display Components
SSD1327, components/display/ssd1327, ssd1327.jpg
SSD1331, components/display/ssd1331, ssd1331.jpg
SSD1351, components/display/ssd1351, ssd1351.jpg
ST7567, components/display/st7567, st7567.jpg
ST7735, components/display/st7735, st7735.jpg
ST7789V, components/display/st7789v, st7789v.jpg
ST7796, components/display/ili9xxx, st7796.svg
@ -686,7 +694,7 @@ Touchscreen Components
XPT2046, components/touchscreen/xpt2046, xpt2046.jpg
GT911, components/touchscreen/gt911, esp32_s3_box_3.png
FT63X6, components/touchscreen/ft63x6, wt32-sc01.png
Cover Components
----------------
@ -822,10 +830,12 @@ Home Assistant Companion Components
Bluetooth Proxy, components/bluetooth_proxy, bluetooth.svg, dark-invert
Voice Assistant, components/voice_assistant, voice-assistant.svg, dark-invert
micro Wake Word, components/micro_wake_word, voice-assistant.svg, dark-invert
Sensor, components/sensor/homeassistant, home-assistant.svg, dark-invert
Text Sensor, components/text_sensor/homeassistant, home-assistant.svg, dark-invert
Binary Sensor, components/binary_sensor/homeassistant, home-assistant.svg, dark-invert
Alarm Control Panel Components
------------------------------