Merge pull request #2088 from esphome/bump-2022.5.0

2022.5.0
This commit is contained in:
Jesse Hills 2022-05-18 16:57:01 +12:00 committed by GitHub
commit 56ff044ab3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 1384 additions and 44 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 = 2022.4.0
PROJECT_NUMBER = 2022.5.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

View File

@ -1,5 +1,5 @@
ESPHOME_PATH = ../esphome
ESPHOME_REF = 2022.4.0
ESPHOME_REF = 2022.5.0
.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: 70 KiB

View File

@ -1 +1 @@
2022.4.0
2022.5.0

171
changelog/2022.5.0.rst Normal file
View File

@ -0,0 +1,171 @@
ESPHome 2022.5.0 - 18th May 2022
================================
.. seo::
:description: Changelog for ESPHome 2022.5.0.
:image: /_static/changelog-2022.5.0.png
:author: Jesse Hills
:author_twitter: @jesserockz
.. imgtable::
:columns: 3
BedJet Climate System, components/climate/bedjet, bedjet.png
BL0939, components/sensor/bl0939, bl0939.png
ENS210, components/sensor/ens210, ens210.jpg
SEN5x, components/sensor/sen5x, sen54.jpg
SML, components/sml, sml.svg
Delonghi Penguino PAC W120HP, components/climate/climate_ir, air-conditioner-ir.svg
Rename
------
ESPHome now offers a way for people to rename their devices automatically. This is done by creating a new YAML file with the new
filename, changing the ``name`` inside the YAML, and then OTA uploading to the device to its existing hostname. If all is successful,
the old YAML file will be removed and you can continue configuring your newly named device.
This is particularly useful if you have received a pre-installed device, or are installing pre-configured ESPHome from a website for example.
API Transport Encryption
------------------------
API transport encryption is now enabled by default when you create a new device in ESPHome. This will autogenerate a random encryption key in the device YAML file
that you will need to retrieve when you attempt to add the device to Home Assistant. Simply remove the encryption key lines from your YAML should you choose to not
use encryption.
Select & Number changes
-----------------------
The ``select`` component has had a bunch of new features and actions added.
``select.first``, ``select.last``, ``select.next``, and ``select.previous``.
Alongside these new changes were some removals of internal (but public) functions on ``select`` and ``number`` components that might break
``external_components`` or ``lambdas`` that might have been using them. See :esphomepr:`3457` and :esphomepr:`3458` for more details.
Full list of changes
--------------------
New Components
^^^^^^^^^^^^^^
- Add support for Shelly Dimmer 2 :esphomepr:`2954` by :ghuser:`rnauber` (new-integration)
- Add BedJet BLE climate component :esphomepr:`2452` by :ghuser:`jhansche` (new-integration)
- Add support for BL0939 (Sonoff Dual R3 V2 powermeter) :esphomepr:`3300` by :ghuser:`ziceva` (new-integration)
- Add ENS210 Humidity & Temperature sensor component :esphomepr:`2942` by :ghuser:`itn3rd77` (new-integration)
- add support for Sen5x sensor series :esphomepr:`3383` by :ghuser:`martgras` (new-integration)
- Add SML (Smart Message Language) platform for energy meters :esphomepr:`2396` by :ghuser:`alengwenus` (new-integration)
- Delonghi Penguino PAC W120HP ir support :esphomepr:`3124` by :ghuser:`grob6000` (new-integration)
Breaking Changes
^^^^^^^^^^^^^^^^
- Code cleanup fixes for the select component :esphomepr:`3457` by :ghuser:`mmakaay` (breaking-change)
- Code cleanup fixes for the number component :esphomepr:`3458` by :ghuser:`mmakaay` (breaking-change)
Beta Changes
^^^^^^^^^^^^
- Restore RealTimeClock's local TZ after epoch sync :esphomepr:`3462` by :ghuser:`mmakaay`
- Shelly dimmer: Use unique_ptr to handle the lifetime of stm32_t :esphomepr:`3400` by :ghuser:`edge90`
- Use heat mode for heat. Move EXT HT to custom presets. :esphomepr:`3437` by :ghuser:`jgissend10`
- Make custom_fan and custom_preset templatable as per documentation :esphomepr:`3330` by :ghuser:`MrMDavidson`
- Update captive portal canHandle function :esphomepr:`3360` by :ghuser:`bkaufx`
- Increase JSON buffer size on overflow :esphomepr:`3475` by :ghuser:`pyos`
- Mark improv_serial and ESP-IDF usb based serial on c3/s2/s3 unsupported :esphomepr:`3477` by :ghuser:`jesserockz`
- ESP32: Only save to NVS if data was changed :esphomepr:`3479` by :ghuser:`martgras`
- Retry Tuya init commands :esphomepr:`3482` by :ghuser:`ssieb`
Notable Changes
^^^^^^^^^^^^^^^
- Enable api transport encryption for new projects :esphomepr:`3142` by :ghuser:`OttoWinter` (notable-change)
All changes
^^^^^^^^^^^
- Add default object_id_generator for mqtt :esphomepr:`3389` by :ghuser:`jesserockz`
- Add BedJet BLE climate component :esphomepr:`2452` by :ghuser:`jhansche` (new-integration)
- Multi conf for Teleinfo component :esphomepr:`3401` by :ghuser:`parats15`
- Add support for Mopeka Pro+ Residential sensor :esphomepr:`3393` by :ghuser:`jamesduke`
- Add support for BL0939 (Sonoff Dual R3 V2 powermeter) :esphomepr:`3300` by :ghuser:`ziceva` (new-integration)
- Add "esphome rename" command :esphomepr:`3403` by :ghuser:`jesserockz`
- SPS30: Add fan action :esphomepr:`3410` by :ghuser:`martgras`
- feat: add openssh-client on docker image (#1681) :esphomepr:`3319` by :ghuser:`quentin9696`
- Add duration device class for sensors :esphomepr:`3421` by :ghuser:`jesserockz`
- Missing `f` prefix on f-strings fix :esphomepr:`3415` by :ghuser:`code-review-doctor`
- Queue sensor publishes so we don't block for too long :esphomepr:`3422` by :ghuser:`trvrnrth`
- added RGB565 image type :esphomepr:`3229` by :ghuser:`lubeda`
- Allow wifi output_power down to 8.5dB :esphomepr:`3405` by :ghuser:`e28eta`
- Add help text to rename command :esphomepr:`3442` by :ghuser:`jesserockz`
- Add rename command handler :esphomepr:`3443` by :ghuser:`balloob`
- Support for Arduino 2 and serial port on ESP32-S2 and ESP32-C3 :esphomepr:`3436` by :ghuser:`jenscski`
- Bump dashboard to 20220508.0 :esphomepr:`3448` by :ghuser:`balloob`
- Waveshare epaper 7in5 v2alt :esphomepr:`3276` by :ghuser:`patvdleer`
- Early pin init :esphomepr:`3439` by :ghuser:`rainero84`
- Add ENS210 Humidity & Temperature sensor component :esphomepr:`2942` by :ghuser:`itn3rd77` (new-integration)
- Also rename yaml filename with rename command :esphomepr:`3447` by :ghuser:`jesserockz`
- Bump click from 8.1.2 to 8.1.3 :esphomepr:`3426` by :ghuser:`dependabot[bot]`
- Fix spi transfer with miso pin defined on espidf :esphomepr:`3450` by :ghuser:`jesserockz`
- Force using name substitution when adopting a device :esphomepr:`3451` by :ghuser:`jesserockz`
- Bump pyupgrade from 2.32.0 to 2.32.1 :esphomepr:`3452` by :ghuser:`dependabot[bot]`
- Bump pylint from 2.13.5 to 2.13.8 :esphomepr:`3432` by :ghuser:`dependabot[bot]`
- Esp32c3 deepsleep fix :esphomepr:`3433` by :ghuser:`MFlasskamp`
- Add SERIAL_JTAG/CDC logger option for ESP-IDF platform for ESP32-S2/S3/C3 :esphomepr:`3105` by :ghuser:`unaiur`
- Select enhancement :esphomepr:`3423` by :ghuser:`mmakaay`
- Number enhancement :esphomepr:`3429` by :ghuser:`mmakaay`
- mask deprecated adc_gpio_init() for esp32-s2 :esphomepr:`3445` by :ghuser:`MFlasskamp`
- tca9548a fix channel selection :esphomepr:`3417` by :ghuser:`martgras`
- add support for Sen5x sensor series :esphomepr:`3383` by :ghuser:`martgras` (new-integration)
- Add SML (Smart Message Language) platform for energy meters :esphomepr:`2396` by :ghuser:`alengwenus` (new-integration)
- Delonghi Penguino PAC W120HP ir support :esphomepr:`3124` by :ghuser:`grob6000` (new-integration)
- extend scd4x :esphomepr:`3409` by :ghuser:`martgras`
- PMSX003: Add support for specifying the update interval and spinning down :esphomepr:`3053` by :ghuser:`mjg59`
- CAN bus: on_frame remote_transmission_request :esphomepr:`3376` by :ghuser:`felixstorm`
- Fix cover set position by force pushing position_id datapoint (simila… :esphomepr:`3435` by :ghuser:`dennisvbussel`
- added prev_frame for animation :esphomepr:`3427` by :ghuser:`lubeda`
- Fix tests :esphomepr:`3455` by :ghuser:`jesserockz`
- Fix BME280 setup() when the sensor is marked as failed. :esphomepr:`3396` by :ghuser:`ctrix`
- Esp32c3 deepsleep fix :esphomepr:`3454` by :ghuser:`MFlasskamp`
- Make retry scheduler efficient :esphomepr:`3225` by :ghuser:`OttoWinter`
- Code cleanup fixes for the select component :esphomepr:`3457` by :ghuser:`mmakaay` (breaking-change)
- Code cleanup fixes for the number component :esphomepr:`3458` by :ghuser:`mmakaay` (breaking-change)
- Enable api transport encryption for new projects :esphomepr:`3142` by :ghuser:`OttoWinter` (notable-change)
- Implement allow_deep_sleep :esphomepr:`3282` by :ghuser:`rubdos`
- Add deep_sleep.allow YAML action :esphomepr:`3459` by :ghuser:`jesserockz`
- Restore RealTimeClock's local TZ after epoch sync :esphomepr:`3462` by :ghuser:`mmakaay`
- Shelly dimmer: Use unique_ptr to handle the lifetime of stm32_t :esphomepr:`3400` by :ghuser:`edge90`
- Use heat mode for heat. Move EXT HT to custom presets. :esphomepr:`3437` by :ghuser:`jgissend10`
- Make custom_fan and custom_preset templatable as per documentation :esphomepr:`3330` by :ghuser:`MrMDavidson`
- Update captive portal canHandle function :esphomepr:`3360` by :ghuser:`bkaufx`
- Increase JSON buffer size on overflow :esphomepr:`3475` by :ghuser:`pyos`
- Mark improv_serial and ESP-IDF usb based serial on c3/s2/s3 unsupported :esphomepr:`3477` by :ghuser:`jesserockz`
- ESP32: Only save to NVS if data was changed :esphomepr:`3479` by :ghuser:`martgras`
- Retry Tuya init commands :esphomepr:`3482` by :ghuser:`ssieb`
Past Changelogs
---------------
- :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/2022.4.0.html
:url: /changelog/2022.5.0.html
.. toctree::
:glob:

View File

@ -91,9 +91,10 @@ Automations:
``on_frame`` Trigger
********************
This automation will be triggered when a CAN frame is received. A variable ``x`` of type
``std::vector<uint8_t>`` containing the frame data and a variable ``can_id`` of type ``uint32_t``
containing the actual received CAN id are passed to the automation for use in lambdas.
This automation will be triggered when a CAN frame is received. The variables ``x`` (of type
``std::vector<uint8_t>``) containing the frame data, ``can_id`` (of type ``uint32_t``) containing the actual
received CAN id and ``remote_transmission_request`` (of type ``bool``) containing the corresponding field
from the CAN frame are passed to the automation for use in lambdas.
.. note::
@ -114,6 +115,7 @@ containing the actual received CAN id are passed to the automation for use in la
- can_id: 0b00000000000000000000001000000
can_id_mask: 0b11111000000000011111111000000
use_extended_id: true
remote_transmission_request: false
then:
- lambda: |-
auto pdo_id = can_id >> 14;
@ -139,6 +141,8 @@ Configuration variables:
- **can_id_mask** (*Optional*, int): The bit mask to apply to the received CAN id before trying to match it
with *can_id*, defaults to ``0x1fffffff`` (all bits of received CAN id are compared with *can_id*).
- **use_extended_id** (*Optional*, boolean): Identifies the type of *can_id* to match on, defaults to *false*.
- **remote_transmission_request** (*Optional*, boolean): Whether to run for CAN frames with the "remote
transmission request" bit set or not set, defaults to not checking, i.e. to run for both cases.
``canbus.send`` Action
**********************

View File

@ -0,0 +1,104 @@
BedJet
======
.. seo::
:description: Instructions for setting up a BedJet climate device.
:image: bedjet.png
The ``bedjet`` climate platform creates a climate device which can be used to control
a BedJet V3 Climate Comfort Sleep System.
This component supports the following functionality:
- Set the operating mode: off, heat, cool, turbo (boost)
- Set the desired target temperature
- Set the desired fan speed
- Start one of the saved memory presets, including "Biorhythm" programs
- Show the current status of the BedJet
This platform uses the BLE peripheral on an ESP32, so you also need to enable
this component. Please see the :doc:`/components/ble_client` docs for how to discover the MAC
address of your BedJet device, or you can find the list of paired MAC addresses in
the "DEVICE LIST" section of the BedJet mobile application.
.. code-block:: yaml
ble_client:
- mac_address: 11:22:33:aa:bb:cc
id: ble_bedjet
climate:
- platform: bedjet
id: my_bedjet_fan
name: "My BedJet Fan"
ble_client_id: ble_bedjet
Configuration variables:
------------------------
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **name** (**Required**, string): The name of the climate device.
- **ble_client_id** (**Required**, :ref:`config-id`): The ID of the BLE Client.
- **time_id** (*Optional*, :ref:`config-id`): The ID of a :ref:`Time Component <time>` which
can be used to set the time on the BedJet device.
- All other options from :ref:`Climate <config-climate>`.
lambda calls
************
From :ref:`lambdas <config-lambda>`, you can call methods to do some advanced stuff.
- ``.upgrade_firmware``: Check for and install updated BedJet firmware.
.. code-block:: yaml
button:
- platform: template
name: "Check Bedjet Firmware"
on_press:
then:
- lambda: |-
id(my_bedjet_fan).upgrade_firmware();
Known issues:
-------------
.. warning::
BedJet V2 and other devices are not currently supported. Only BedJet V3 is supported.
.. note::
Only one client can be connected to the BedJet BLE service at a time, so you cannot
use the BedJet mobile app to monitor or control the BedJet device while this component
is connected. To use the mobile app, you should disconnect the ESP client first.
To set up a (dis-)connect switch, see :doc:`/components/switch/ble_client`.
.. note::
When more than one device is configured and connected, the ESP device may become
overwhelmed and lead to timeouts while trying to install an updated version of the
configuration. If this occurs, see the previous note about adding disconnect switches,
and toggle those off while performing the installation. This will free up resources
on the ESP and allow the installation to complete.
Additionally, you may use an :ref:`ota.on_begin <ota-on_begin>` :ref:`Automation<automation>`
to do this automatically:
.. code-block:: yaml
ota:
on_begin:
then:
- logger.log: "Disconnecting clients for OTA update..."
- switch.turn_off: bedjet_1_monitor
- switch.turn_off: bedjet_2_monitor
See Also
--------
- :doc:`/components/ble_client`
- :doc:`/components/climate/index`
- :apiref:`bedjet/bedjet.h`
- :ghedit:`Edit`

View File

@ -27,6 +27,8 @@ submit a feature request (see FAQ).
+---------------------------------------+---------------------+----------------------+
| Daikin | ``daikin`` | yes |
+---------------------------------------+---------------------+----------------------+
| :ref:`Delonghi<delonghi_ir>` | ``delonghi`` | yes |
+---------------------------------------+---------------------+----------------------+
| Fujitsu General | ``fujitsu_general`` | yes |
+---------------------------------------+---------------------+----------------------+
| Hitachi | ``hitachi_ac344`` | yes |
@ -205,6 +207,17 @@ Configuration variables:
header_high: 3265us # AC Units from LG in Brazil, for example use these timings
header_low: 9856us
.. _delonghi_ir:
``delonghi`` Climate
-------------------------
Currently supports the protocol used by some Delonghi portable units
Known working with:
- Delonghi PAC WE 120HP
.. _toshiba:

View File

@ -159,6 +159,19 @@ Useful for keeping the ESP active during data transfer or OTA updating (See note
then:
- deep_sleep.enter: deep_sleep_1
.. _deep_sleep-allow_action:
``deep_sleep.allow`` Action
-----------------------------
This action allows the given deep sleep component to enter deep sleep, after previously being prevented.
.. code-block:: yaml
on_...:
then:
- deep_sleep.allow: deep_sleep_1
See Also
--------

View File

@ -579,6 +579,7 @@ Configuration variables:
per pixel, 8 pixels per byte.
- ``GRAYSCALE``: Full scale grey. Uses 8 bits per pixel, 1 pixel per byte.
- ``RGB24``: Full RGB color stored. Uses 3 bytes per pixel.
- ``RGB565``: Lossy RGB color stored. Uses 2 bytes per pixel.
- ``TRANSPARENT_BINARY``: One color, any pixel that is fully transparent will not be drawn, and any other pixel
will be the on color. Uses 1 bit per pixel, 8 pixels per byte.
@ -624,7 +625,7 @@ Animation
*********
Allows to use animated images on displays. Animation inherits all options from the image component.
It adds an additional lambda method: ``next_frame()`` to change the shown picture of a gif.
It adds additional lambda methods: ``next_frame()`` and ``prev_frame()`` to change the shown picture of a gif.
.. code-block:: yaml
@ -635,7 +636,7 @@ It adds an additional lambda method: ``next_frame()`` to change the shown pictur
The animation can be rendered just like the image component with the ``image()`` function of the display component.
To show the next frame of the animation call ``id(my_animation).next_frame()``
To show the next frame of the animation call ``id(my_animation).next_frame()``, to show the previous picture use ``id(my_animation).prev_frame()``.
This can be combined with all Lambdas:
.. code-block:: yaml
@ -676,6 +677,7 @@ Configuration variables:
per pixel, 8 pixels per byte.
- ``GRAYSCALE``: Full scale grey. Uses 8 bits per pixel, 1 pixel per byte.
- ``RGB24``: Full RGB color stored. Uses 3 bytes per pixel.
- ``RGB565``: Lossy RGB color stored. Uses 2 bytes per pixel.
.. _display-pages:

View File

@ -95,6 +95,7 @@ Configuration variables:
- ``7.50in-bV2`` - also supports v3, B/W rendering only
- ``7.50in-bc`` - display with version sticker '(C)' on the back, B/W rendering only
- ``7.50inV2`` - Can't use with an ESP8266 as it runs out of RAM
- ``7.50inV2alt`` (alternative version to the above ``7.50inV2``)
- ``7.50in-hd-b`` - Can't use with an ESP8266 as it runs out of RAM
- **busy_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The BUSY pin. Defaults to not connected.

View File

@ -37,6 +37,7 @@ Configuration variables:
- **restore_from_flash** (*Optional*, boolean): Whether to store some persistent preferences in flash memory. Defaults to ``false``.
- **board_flash_mode** (*Optional*, string): The SPI mode of the flash chip. One of ``qio``, ``qout``, ``dio`` and ``dout``. Defaults to ``dout`` for compatibility with all chips. Note: on the next OTA update the actual flash mode is automatically detected and changed to the appropriate one.
- **early_pin_init** (*Optional*, boolean): Specifies whether pins should be initialised as early as possible to known values. Recommended value is ``false`` where switches are involved, as these will toggle when updating the firmware or when restarting the device. Defaults to ``true``.
See Also
--------

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -62,7 +62,9 @@ Possible Hardware UART configurations:
- ``UART0_SWAP`` - TX: GPIO15, RX: GPIO13 (Only on ESP8266)
- ``UART1`` - TX: GPIO2, RX: None (Only on ESP8266)
- ``UART1`` - TX: GPIO9, RX: GPIO10 (Only on ESP32)
- ``UART2`` - TX: GPIO16, RX: GPIO17 (Only on ESP32)
- ``UART2`` - TX: GPIO16, RX: GPIO17 (Only on ESP32 but not ESP32S2, ESP32S3 or ESP32C3)
- ``USB_CDC`` - uses the USB CDC driver (Only on ESP32S2 and ESP32S3)
- ``USB_SERIAL_JTAG`` - uses the USB Serial/JTAG driver (Only on ESP32S3 and ESP32C3)
.. _logger-log_levels:

View File

@ -164,6 +164,133 @@ Configuration variables:
- **value** (**Required**, float, :ref:`templatable <config-templatable>`):
The value to set the number to.
.. _number-increment_action:
``number.increment`` Action
***************************
This is an :ref:`Action <config-action>` for incrementing a number value by its
step size (default: 1).
.. code-block:: yaml
- number.increment:
id: my_number
cycle: false
# Shorthand
- number.increment: my_number
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the number component to update.
- **cycle** (**Optional**, boolean): Whether or not to set the number to its minimum
value when the increment pushes the value beyond its maximum value. This will only
work when the number component uses a minimum and maximum value.
Defaults to ``true``.
.. _number-decrement_action:
``number.decrement`` Action
***************************
This is an :ref:`Action <config-action>` for decrementing a number value by its
step size (default: 1).
.. code-block:: yaml
- number.decrement:
id: my_number
cycle: false
# Shorthand
- number.decrement: my_number
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the number component to update.
- **cycle** (**Optional**, boolean): Whether or not to set the number to its maximum
value when the decrement pushes the value below its minimum value. This will only
work when the number component uses a minimum and maximum value.
Defaults to ``true``.
.. _number-to-min_action:
``number.to_min`` Action
************************
This is an :ref:`Action <config-action>` seting a number to its minimum value, given
a number component that has a minimum value defined for it.
.. code-block:: yaml
- number.to_min:
id: my_number
# Shorthand
- number.to_min: my_number
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the number component to update.
.. _number-to-max_action:
``number.to_max`` Action
************************
This is an :ref:`Action <config-action>` seting a number to its maximum value (given
a number component that has a maximum value defined for it.
.. code-block:: yaml
- number.to_max:
id: my_number
# Shorthand
- number.to_max: my_number
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the number component to update.
.. _number-operation_action:
``number.operation`` Action
***************************
This is an :ref:`Action <config-action>` that can be used to perform an operation
on a number component (set to minimum or maximum value, decrement, increment),
using a generic templatable action call.
.. code-block:: yaml
# Using values
- number.operation:
id: my_number
operation: Increment
cycle: true
# Or templated (lambda)
- number.operation:
id: my_number
operation: !lambda "return NUMBER_OP_INCREMENT;"
cycle: !lambda: "return true;"
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the number to update.
- **operation** (**Required**, string, :ref:`templatable <config-templatable>`):
What operation to perform on the number component. One of ``TO_MIN``,
``TO_MAX``, ``DECREMENT`` or ``INCREMENT`` (case insensitive). When writing a
lambda for this field, then return one of the following enum values:
``NUMBER_OP_TO_MIN``, ``NUMBER_OP_TO_MAX``, ``NUMBER_OP_DECREMENT`` or
``NUMBER_OP_INCREMENT``.
- **cycle** (**Optional**, bool, :ref:`templatable <config-templatable>`):
Can be used with ``DECREMENT`` or ``INCREMENT`` to specify whether or not to
wrap around the value when respectively the minimum or maximum value of the
number is exceeded.
.. _number-lambda_calls:
lambda calls
@ -172,7 +299,7 @@ lambda calls
From :ref:`lambdas <config-lambda>`, you can call several methods on all numbers to do some
advanced stuff (see the full API Reference for more info).
- ``make_call()``: Set the number value.
- ``.make_call()``: Make a call for updating the number value.
.. code-block:: cpp
@ -181,6 +308,11 @@ advanced stuff (see the full API Reference for more info).
call.set_value(42);
call.perform();
Check the API reference for information on the methods that are available for
the ``NumberCall`` object. You can for example also use ``call.to_min()``
to set the number to its minimum value or ``call.increment(true)`` to increment
the number by its step size with the cycle feature enabled.
- ``.state``: Retrieve the current value of the number. Is ``NAN`` if no value has been read or set.
.. code-block:: cpp
@ -191,7 +323,8 @@ advanced stuff (see the full API Reference for more info).
See Also
--------
- :apiref:`number/number.h`
- :apiref:`Number <number/number.h>`
- :apiref:`NumberCall <number/number_call.h>`
- :ghedit:`Edit`
.. toctree::

View File

@ -57,14 +57,15 @@ Select Automation
You can access the most recent state of the select in :ref:`lambdas <config-lambda>` using
``id(select_id).state``.
For more information on using lambdas with select, see :ref:`select-lambda_calls`.
.. _select-on_value:
``on_value``
************
This automation will be triggered when a new option is published. In :ref:`Lambdas <config-lambda>`
you can get the value from the trigger with ``x``.
This automation will be triggered when a new value is published. In :ref:`Lambdas <config-lambda>`
you can get the value from the trigger with ``x`` and the index offset of the selected value with ``i``.
.. code-block:: yaml
@ -74,8 +75,8 @@ you can get the value from the trigger with ``x``.
on_value:
then:
- logger.log:
format: "Chosen option: %s"
args: ["x.c_str()"]
format: "Chosen option: %s (index %d)"
args: ["x.c_str()", "i"]
Configuration variables: See :ref:`Automation <automation>`.
@ -84,7 +85,7 @@ Configuration variables: See :ref:`Automation <automation>`.
``select.set`` Action
*********************
This is an :ref:`Action <config-action>` for setting a select state.
This is an :ref:`Action <config-action>` for setting the active option using an option value.
.. code-block:: yaml
@ -98,6 +99,152 @@ Configuration variables:
- **option** (**Required**, string, :ref:`templatable <config-templatable>`):
The option to set the select to.
When a non-existing option value is used, a warning is logged and the state of
the select is left as-is.
.. _select-set_index_action:
``select.set_index`` Action
***************************
This is an :ref:`Action <config-action>` for setting the active option using its index offset.
.. code-block:: yaml
- select.set_index:
id: my_select
index: 3
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the select to set.
- **index** (**Required**, int, :ref:`templatable <config-templatable>`):
The index offset of the option to be activated.
When a non-existing index value is used, a warning is logged and the state of
the select is left as-is.
.. _select-next_action:
``select.next`` Action
**********************
This is an :ref:`Action <config-action>` for selecting the next option in a select component.
.. code-block:: yaml
- select.next:
id: my_select
cycle: false
# Shorthand
- select.next: my_select
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the select to set.
- **cycle** (**Optional**, boolean): Whether or not to jump back to the first option
of the select when the last option is currently selected. Defaults to ``true``.
.. _select-previous_action:
``select.previous`` Action
**************************
This is an :ref:`Action <config-action>` for selecting the previous option in
a select component.
.. code-block:: yaml
- select.previous:
id: my_select
cycle: true
# Shorthand
- select.previous: my_select
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the select to set.
- **cycle** (**Optional**, boolean): Whether or not to jump to the last option
of the select when the first option is currently selected. Defaults to ``true``.
.. _select-first_action:
``select.first`` Action
***********************
This is an :ref:`Action <config-action>` for selecting the first option in
a select component.
.. code-block:: yaml
- select.first:
id: my_select
# Shorthand
- select.first: my_select
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the select to set.
.. _select-last_action:
``select.last`` Action
**********************
This is an :ref:`Action <config-action>` for selecting the last option in
a select component.
.. code-block:: yaml
- select.last:
id: my_select
# Shorthand
- select.last: my_select
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the select to set.
.. _select-operation_action:
``select.operation`` Action
***************************
This is an :ref:`Action <config-action>` that can be used to change the active
option in a select component (first, last, previous or next), using a generic
templatable action call.
.. code-block:: yaml
# Using values
- select.operation:
id: my_select
operation: Next
cycle: true
# Or templated (lambdas)
- select.operation:
id: my_select
operation: !lambda "return SELECT_OP_NEXT;"
cycle: !lambda "return true;"
Configuration variables:
- **id** (**Required**, :ref:`config-id`): The ID of the select to set.
- **operation** (**Required**, string, :ref:`templatable <config-templatable>`): The
operation to perform. One of ``FIRST``, ``LAST``, ``PREVIOUS`` or
``NEXT`` (case insensitive). When writing a lambda for this field, then return
one of the following enum values: ``SELECT_OP_FIRST``, ``SELECT_OP_LAST``,
``SELECT_OP_PREVIOUS`` or ``SELECT_OP_NEXT``.
- **cycle** (**Optional**, bool, :ref:`templatable <config-templatable>`):
Can be used for options ``NEXT`` and ``PREVIOUS`` to specify whether or not to
wrap around the options list when respectively the last or first option in
the select is currently active.
.. _select-lambda_calls:
lambda calls
@ -106,7 +253,7 @@ lambda calls
From :ref:`lambdas <config-lambda>`, you can call several methods on all selects to do some
advanced stuff (see the full API Reference for more info).
- ``make_call()``: Set the select option.
- ``.make_call()``: Create a call for changing the select state.
.. code-block:: cpp
@ -115,17 +262,84 @@ advanced stuff (see the full API Reference for more info).
call.set_option("Happy");
call.perform();
- ``.state``: Retrieve the current option of the select.
Check the API reference for information on the methods that are available for
the ``SelectCall`` object. You can for example also use ``call.select_first()``
to select the first option or ``call.select_next(true)`` to select the next
option with the cycle feature enabled.
- ``.state``: Retrieve the currently selected option of the select.
.. code-block:: cpp
// For example, create a custom log message when an option is selected:
ESP_LOGI("main", "Option of my select: %s", id(my_select).state.c_str());
auto state = id(my_select).state.c_str();
ESP_LOGI("main", "Option of my select: %s", state);
- ``.size()``: Retrieve the number of options in the select.
.. code-block:: cpp
auto size = id(my_select).size();
ESP_LOGI("main", "Select has %d options", size);
- ``.index_of(<option value>)``: Retrieve the index offset for an option value.
.. code-block:: cpp
auto index = id(my_select).index_of("Happy");
if (index.has_value()) {
ESP_LOGI("main", "'Happy' is at index: %d", index.value());
} else {
ESP_LOGE("main", "There is no option 'Happy'");
}
- ``.active_index()``: Retrieve the index of the currently active option.
.. code-block:: cpp
auto index = id(my_select).active_index();
if (index.has_value()) {
ESP_LOGI("main", "Option at index %d is active", index);
} else {
ESP_LOGI("main", "No option is active");
}
- ``.at(<index offset>)``: Retrieve the option value at a given index offset.
.. code-block:: cpp
auto index = 1;
auto option = id(my_select).at(index);
if (option.has_value()) {
auto value = option.value();
ESP_LOGI("main", "Option at %d is: %s", index, value);
} else {
ESP_LOGE("main", "Index %d does not exist", index);
}
- ``.has_option(<option value>)``: Check if the select contains the given option value.
.. code-block:: cpp
auto option = "Happy";
if (id(my_select).has_option(option)) {
ESP_LOGI("main", "Select has option '%s'", option);
}
- ``.has_index(<index offset>)``: Check if the select contains an option value for the given index offset.
.. code-block:: cpp
auto index = 3;
if (id(my_select).has_index(index)) {
ESP_LOGI("main", "Select has index offset %d", index);
}
See Also
--------
- :apiref:`select/select.h`
- :apiref:`Select <select/select.h>`
- :apiref:`SelectCall <select/select_call.h>`
- :ghedit:`Edit`
.. toctree::

View File

@ -0,0 +1,89 @@
BL0939 Power Sensor
====================
.. seo::
:description: Instructions for setting up BL0939 power sensors for the Sonoff Dual R3 v2
:image: bl0939.png
:keywords: bl0939, Sonoff Dual R3 v2
The ``bl0939`` sensor platform allows you to use your BL0939 voltage/current/power and energy
sensors with ESPHome. This sensor is commonly found in Sonoff Dual R3 v2.
.. note::
SAFETY HAZARD: Some devices such as Sonoff POWs/Shelly/etc, have the digital GND connected directly to mains voltage so **the GPIOs become LIVE during normal operation**. Our advice is to mark these boards to prevent any use of the dangerous digital pins.
As the communication with the BL0939 done using UART, you need
to have an :ref:`UART bus <uart>` in your configuration with the ``tx_pin`` and ``rx_pin`` connected to the BL0939.
Additionally, you need to set the baud rate to 4800, parity to ``NONE`` and stop_bits to 2.
.. code-block:: yaml
# Example configuration entry
# Disable logging over serial
logger:
baud_rate: 0
uart:
tx_pin: GPIO25
rx_pin: GPIO26
baud_rate: 4800
parity: NONE
stop_bits: 2
sensor:
- platform: bl0939
update_interval: 30s
voltage:
name: 'BL0939 Voltage'
current_1:
name: 'BL0939 Current 1'
current_2:
name: 'BL0939 Current 2'
active_power_1:
name: 'BL0939 Active Power 1'
active_power_2:
name: 'BL0939 Active Power 2'
energy_1:
name: 'BL0939 Energy 1'
energy_2:
name: 'BL0939 Energy 2'
energy_total:
name: 'BL0939 Energy Total'
.. note::
The configuration above should work for Sonoff Dual R3 v2.
Configuration variables:
------------------------
- **voltage** (*Optional*): Use the voltage value of the sensor in V (RMS).
All options from :ref:`Sensor <config-sensor>`.
- **current_1** (*Optional*): Use the current value of the channel 1 in amperes. All options from
:ref:`Sensor <config-sensor>`.
- **current_2** (*Optional*): Use the current value of the channel 2 in amperes. All options from
:ref:`Sensor <config-sensor>`.
- **active_power_1** (*Optional*): Use the (active) power value of the channel 1 in watts. All options from
:ref:`Sensor <config-sensor>`.
- **active_power_2** (*Optional*): Use the (active) power value of the channel 2 in watts. All options from
:ref:`Sensor <config-sensor>`.
- **energy_1** (*Optional*): Use the energy counter value of the channel 1 in kWh. All options from
:ref:`Sensor <config-sensor>`.
- **energy_2** (*Optional*): Use the energy counter value of the channel 2 in kWh. All options from
:ref:`Sensor <config-sensor>`.
- **energy_total** (*Optional*): Use the energy counter value of both channels in kWh. 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.
See Also
--------
- :ref:`sensor-filters`
- :doc:`cse7761`
- :doc:`bl0940`
- :apiref:`bl0939/bl0939.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,57 @@
ENS210 Temperature+Humidity Sensor
==================================
.. seo::
:description: Instructions for setting up ENS210 temperature and humidity sensors
:image: ens210.jpg
:keywords: ENS210
The ``ENS210`` Temperature+Humidity sensor allows you to use your ENS210
(`datasheet <https://www.sciosense.com/wp-content/uploads/2021/01/ENS210.pdf>`__) i2c-based sensor with ESPHome.
.. figure:: images/ens210.jpg
:align: center
:width: 80.0%
ENS210 Temperature & Humidity Sensor.
.. figure:: images/temperature-humidity.png
:align: center
:width: 80.0%
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: ENS210
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
update_interval: 60s
Configuration variables:
------------------------
- **temperature** (**Required**): The information for the temperature sensor.
- **name** (**Required**, string): The name for the temperature sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **humidity** (**Required**): The information for the humidity sensor
- **name** (**Required**, string): The name for the humidity sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
See Also
--------
- :ref:`sensor-filters`
- :apiref:`ENS210/ENS210.h`
- `ENS210 Library <https://github.com/maarten-pennings/ENS210>`__ by `Maarten Pennings <https://github.com/maarten-pennings>`__
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -4,18 +4,18 @@ Mopeka Pro Check BLE Sensor
.. seo::
:description: Instructions for setting up Mopeka Pro Check bluetooth-based sensors in ESPHome.
:image: mopeka_pro_check.jpg
:keywords: Mopeka, Mopeka Pro Check, BLE, Bluetooth
:keywords: Mopeka, Mopeka Pro Check, Mopeka Pro Plus, BLE, Bluetooth
The ``mopeka_pro_check`` sensor platform lets you track the output of Mopeka
Pro Check LP Bluetooth Low Energy devices using the :doc:`/components/esp32_ble_tracker`.
This component will track the tank level, distance, temperature, and battery
percentage of a Mopeka Pro Check LP device every time the sensor sends
out a BLE broadcast.
Pro Check LP and Mopeka Pro Plus Bluetooth Low Energy devices using the
:doc:`/components/esp32_ble_tracker`. This component will track the tank level,
distance, temperature, and battery percentage of a Mopeka Pro Check LP or Mopeka
Pro Plus Residential BLE device every time the sensor sends out a BLE broadcast.
.. warning::
This sensor component only supports the Mopeka Pro Check device. The original
Mopeka Check sensors are not supported.
This sensor component only supports the Mopeka Pro Check and Pro Plus devices.
The original Mopeka Check sensors are not supported.
.. figure:: images/mopeka_pro_check.jpg
:align: center
@ -101,7 +101,7 @@ Currently supported Tank types are:
Setting Up Devices
------------------
To set up Mopeka Pro Check devices you first need to find their MAC Address so that
To set up Mopeka Pro Check / Pro Plus devices you first need to find their MAC Address so that
ESPHome can identify them. So first, create a simple configuration with the ``esp32_ble_tracker``
and the ``mopeka_ble`` component like so:
@ -112,8 +112,8 @@ and the ``mopeka_ble`` component like so:
mopeka_ble:
After uploading, the ESP32 will immediately try to scan for BLE devices. For Mopeka Pro
Check devices you must press and hold the green sync button for it to be identified. For all sensors
found the ``mopeka_ble`` component will print a message like this one:
Check / Pro Plus devices you must press and hold the green sync button for it to be identified.
For all sensors found the ``mopeka_ble`` component will print a message like this one:
.. code::

View File

@ -26,6 +26,7 @@ value:
# Example configuration entry
uart:
rx_pin: GPIO23
tx_pin: GPIO22
baud_rate: 9600
sensor:
@ -37,6 +38,7 @@ value:
name: "Particulate Matter <2.5µm Concentration"
pm_10_0:
name: "Particulate Matter <10.0µm Concentration"
update_interval: 60000ms
Configuration variables:
------------------------
@ -71,6 +73,8 @@ Configuration variables:
All options from :ref:`Sensor <config-sensor>`.
- **formaldehyde** (*Optional*): Use the formaldehyde (HCHO) concentration in µg per cubic meter for the ``PMS5003S`` and ``PMS5003ST``.
All options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*): Amount of time to wait between generating measurements. If this is longer than 30
seconds, and if ``tx_pin`` is set in the UART configuration, the fan will be spun down between measurements. Default to ``0s`` (forward data as it's coming in from the sensor).
- **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

@ -65,12 +65,103 @@ Configuration variables:
*altitude_compensation* is ignored if *ambient_pressure_compensation*
is set.
- **measurement_mode** (*Optional*): Set measurement mode for scd4x.
- **periodic** : The sensor takes a new measurement every 5 seconds. This is the default mode.
- **low_power_periodic**: The sensor takes a new measurement every 30 seconds. Make sure ``update_interval`` is at least 30 seconds.
- **single_shot**: A measurement is started in every update interval. A measurement takes 5 seconds. This mode is only available on scd41 and useful if low power consumption is required.
The automatic self-calibration is optimized for single shot measurements performed every 5 minutes.
To reduce noise levels, you can can perform several single shot measurements in a row and average the output values using a :ref:`sensor-filters`.
- **single_shot_rht_only**: A measurement is started in every update interval. A measurement takes 50 ms. Only humidity and temperature is measured. CO2 is reported as 0 ppm. This mode is only available on scd41 and useful if low power consumption is required.
- **ambient_pressure_compensation_source** (*Optional*, :ref:`config-id`): Set an external pressure sensor ID used for ambient pressure compensation.
The pressure sensor must report pressure in hPa. the correction is applied before updating the state of the co2 sensor.
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
Defaults to ``0x62``.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``.
Actions:
--------
.. _perform_forced_calibration_action:
``perform_forced_calibration`` Action
---------------------------------------------
This :ref:`action <config-action>` manually calibrates the sensor to the provided value in ppm.
Operate the SCD4x in the operation mode later used in normal sensor operation (periodic measurement, low power periodic measurement or single shot) for > 3 minutes in an environment with homogenous and constant CO2 concentration before performing a forced recalibration.
As of April 2022 the average fresh air Co² concentration is 419 ppm.
.. code-block:: yaml
on_...:
then:
- scd4x.perform_forced_calibration:
value: 419 # outside average April 2022
id: my_scd41
value can be a template
.. code-block:: yaml
on_...:
then:
- scd4x._perform_forced_calibration_action:
value: !lambda "{ return 419 };"
id: my_scd41
.. _factory_reset_action:
``factory_reset`` Action
--------------------------------
This :ref:`action <config-action>` triggers a factory reset of the sensor. Calibration settings are restored from factory settings.
.. code-block:: yaml
on_...:
then:
- scd4x.factory_reset: my_scd41
Automation
-----------------
Ambient pressure compensation compensation can be changed from :ref:`lambdas <config-lambda>`
``set_ambient_pressure_compensation( <pressure in bar)``
Example
*******
Note: that the pressure from bme280 is in hPa and must be converted to bar.
.. code-block:: yaml
sensor:
- platform: scd4x
id: scd41
i2c_id: bus_a
co2:
name: co2
id: co2
- platform: bme280
pressure:
name: "BME280-Pressure"
id: bme280_pressure
oversampling: 1x
on_value:
then:
- lambda: "id(scd41)->set_ambient_pressure_compensation(x / 1000.0);"
See Also

218
components/sensor/sen5x.rst Normal file
View File

@ -0,0 +1,218 @@
Sen5x Series Environmental sensor
=================================
.. seo::
:description: Instructions for setting up Sen5x Series Environmental sensor for PM, RH/T, VOC, and NOx measurements.
:image: sen54.jpg
The ``sen5x`` sensor platform allows you to use your Sensirion `SEN50 <https://sensirion.com/products/catalog/SEN50/>`__, `SEN54 <https://sensirion.com/products/catalog/SEN54/>`__ and `Sen55 <https://sensirion.com/products/catalog/SEN55/>`__ Environmental sensor (`datasheet <https://sensirion.com/media/documents/6791EFA0/6232E4A7/Sensirion_Datasheet_SEN5x.pdf>`__) sensors with ESPHome.
The :ref:`I²C Bus <i2c>` is required to be set up in your configuration for this sensor to work.
This sensor supports both UART and I²C communication. Only I²C communication is implemented in this component.
.. _Sensirion: https://sensirion.com/products/catalog/?filter_series=ceff880a-784d-4877-ae2c-79353c6a0428
.. figure:: images/sen54-web.png
:align: center
:width: 100.0%
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: sen5x
id: sen54
pm_1_0:
name: " PM <1µm Weight concentration"
id: pm_1_0
accuracy_decimals: 1
pm_2_5:
name: " PM <2.5µm Weight concentration"
id: pm_2_5
accuracy_decimals: 1
pm_4_0:
name: " PM <4µm Weight concentration"
id: pm_4_0
accuracy_decimals: 1
pm_10_0:
name: " PM <10µm Weight concentration"
id: pm_10_0
accuracy_decimals: 1
temperature:
name: "Temperature"
accuracy_decimals: 1
humidity:
name: "Humidity"
accuracy_decimals: 0
voc:
name: "VOC"
algorithm_tuning:
index_offset: 100
learning_time_offset_hours: 12
learning_time_gain_hours: 12
gating_max_duration_minutes: 180
std_initial: 50
gain_factor: 230
temperature_compensation:
offset: 0
normalized_offset_slope: 0
time_constant: 0
acceleration_mode: low
store_baseline: true
address: 0x69
update_interval: 10s
Configuration variables:
------------------------
- **pm_1_0** (*Optional*): The information for the **Weight Concentration** sensor for fine particles up to 1μm. Readings in µg/m³.
- **name** (**Required**, string): The name for this sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in automation and lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **pm_2_5** (*Optional*): The information for the **Weight Concentration** sensor for fine particles up to 2.5μm. Readings in µg/m³.
- **name** (**Required**, string): The name for this sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in automation and lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **pm_4_0** (*Optional*): The information for the **Weight Concentration** sensor for coarse particles up to 4μm. Readings in µg/m³.
- **name** (**Required**, string): The name for this sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in automation and lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **pm_10_0** (*Optional*): The information for the **Weight Concentration** sensor for coarse particles up to 10μm. Readings in µg/m³.
- **name** (**Required**, string): The name for this sensor.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in automation and lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **auto_cleaning_interval** (Optional): Reads/Writes the interval in seconds of the periodic fan-cleaning.
- **temperature** (*Optional*): Temperature.Note only available with Sen54 or Sen55. The sensor will be ignored on unsupported models.
- **name** (**Required**, string): The name of the sensor.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- All other options from :ref:`Sensor <config-sensor>`.
- **humidity** (*Optional*): Relative Humidity. Note only available with Sen54 or Sen55. The sensor will be ignored on unsupported models.
- **voc** (*Optional*): VOC Index. Note only available with Sen54 or Sen55. The sensor will be ignored on unsupported models.
- **name** (**Required**, string): The name of the sensor.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **algorithm_tuning** (*Optional*): The VOC algorithm can be customized by tuning 6 different parameters. For more details see `Engineering Guidelines for SEN5x <https://sensirion.com/media/documents/25AB572C/61E961EA/Sensirion_Engineering_Guidelines_SEN5x.pdf>`__
- **index_offset** (*Optional*): VOC index representing typical (average) conditions. Allowed values are in range 1..250. The default value is 100.
- **learning_time_offset_hours** (*Optional*): Time constant to estimate the VOC algorithm offset from the history in hours. Past events will be forgotten after about twice the learning time. Allowed values are in range 1..1000. The default value is 12 hour
- **learning_time_gain_hours** (*Optional*): Time constant to estimate the VOC algorithm gain from the history in hours. Past events will be forgotten after about twice the learning time. Allowed values are in range 1..1000. The default value is 12 hours.
- **gating_max_duration_minutes** (*Optional*): Maximum duration of gating in minutes (freeze of estimator during high VOC index signal). Zero disables the gating. Allowed values are in range 0..3000. The default value is 180 minutes
- **std_initial** (*Optional*): Initial estimate for standard deviation. Lower value boosts events during initial learning period, but may result in larger device-todevice variations. Allowed values are in range 10..5000. The default value is 50.
- **gain_factor:** (*Optional*): Gain factor to amplify or to attenuate the VOC index output. Allowed values are in range 1..1000. The default value is 230.
- All other options from :ref:`Sensor <config-sensor>`.
- **nox** (*Optional*): NOx Index. Note: Only available with Sen54 or Sen55. The sensor will be ignored on unsupported models.
- **name** (**Required**, string): The name of the sensor.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **algorithm_tuning** (*Optional*): The NOx algorithm can be customized by tuning 5 different parameters.For more details see `Engineering Guidelines for SEN5x <https://sensirion.com/media/documents/25AB572C/61E961EA/Sensirion_Engineering_Guidelines_SEN5x.pdf>`__
- **index_offset** (*Optional*): NOx index representing typical (average) conditions. Allowed values are in range 1..250. The default value is 100.
- **learning_time_offset_hours** (*Optional*): Time constant to estimate the NOx algorithm offset from the history in hours. Past events will be forgotten after about twice the learning time. Allowed values are in range 1..1000. The default value is 12 hour
- **learning_time_gain_hours** (*Optional*): Time constant to estimate the NOx algorithm gain from the history in hours. Past events will be forgotten after about twice the learning time. Allowed values are in range 1..1000. The default value is 12 hours.
- **gating_max_duration_minutes** (*Optional*): Maximum duration of gating in minutes (freeze of estimator during high NOx index signal). Zero disables the gating. Allowed values are in range 0..3000. The default value is 180 minutes
- **std_initial** (*Optional*): The initial estimate for standard deviation parameter has no impact for NOx. This parameter is still in place for consistency reasons with the VOC tuning parameters command. This parameter must always be set to 50.
- **gain_factor:** (*Optional*)
- All other options from :ref:`Sensor <config-sensor>`.
- **store_baseline** (*Optional*, boolean): Stores and retrieves the baseline VOC and NOx information for quicker startups. Defaults to ``true``
- **temperature_compensation** (*Optional*): These parameters allow to compensate temperature effects of the design-in at customer side by applying a custom temperature offset to the ambient temperature.
The compensated ambient temperature is calculated as follows:
T_Ambient_Compensated = T_Ambient + (slope*T_Ambient) + offset
Where slope and offset are the values set with this command, smoothed with the specified time constant. The time constant is how fast the slope and offset are applied. After the specified value in seconds, 63% of the new slope and offset are applied.
More details about the tuning of these parameters are included in the application note `Temperature Acceleration and Compensation Instructions for SEN5x. <https://sensirion.com/media/documents/9B9DE2A7/61E957EB/Sensirion_Temperature_Acceleration_and_Compensation_Instructions_SEN.pdf>`__
- **offset** (*Optional*): Temperature offset [°C]. Defaults to ``0``
- **normalized_offset_slope** (*Optional*): Normalized temperature offset slope in percent. Defaults to ``0``
- **time_constant** (*Optional*): Time constant in seconds. Defaults to ``0``
- **acceleration_mode** (*Optional*): Allowed value are ``low``, ``medium`` and ``high``. (default is ``low``)
By default, the RH/T acceleration algorithm is optimized for a sensor which is positioned in free air. If the sensor is integrated into another device, the ambient RH/T output values might not be optimal due to different thermal behavior.
This parameter can be used to adapt the RH/T acceleration behavior for the actual use-case, leading in an improvement of the ambient RH/T output accuracy. There is a limited set of different modes available.
Medium and high accelerations are particularly indicated for air quality monitors which are subjected to large temperature changes. Low acceleration is advised for stationary devices not subject to large variations in temperature
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
Defaults to ``0x69``.
.. note::
The sensor needs about a minute "warm-up". The VOC and NOx gas index algorithm needs a number of samples before the values stabilize.
Wiring:
-------
The sensor has a JST GHR-06V-S 6 pin type connector, with a 1.5mm pitch. The cable needs this connector:
.. figure:: images/jst6pin.png
:align: center
:width: 50.0%
To force the sensor into I²C mode, the SEL pin (Interface Select pin no.5) must be shorted to ground (pin no.2). Pin 6 is not used.
For better stability, the SDA and SCL lines require suitable pull-up resistors.
Automatic Cleaning:
-------------------
When the module is in Measurement-Mode an automatic fan-cleaning procedure will be triggered periodically following a defined cleaning interval. This will accelerate the fan to maximum speed for 10 seconds to blow out the accumulated dust inside the fan.
- Measurement values are not updated while the fan-cleaning is running.
- The cleaning interval is set to 604800 seconds (i.e., 168 hours or 1 week).
- The interval can be configured using the Set Automatic Cleaning Interval command.
- Set the interval to 0 to disable the automatic cleaning.
- A sensor reset, resets the cleaning interval to its default value
- If the sensor is switched off, the time counter is reset to 0. Make sure to trigger a cleaning cycle at least every week if the sensor is switched off and on periodically (e.g., once per day).
- The cleaning procedure can also be started manually with the ``start_autoclean_fan`` Action
The Sen5x sensor has an automatic fan-cleaning which will accelerate the built-in fan to maximum speed for 10 seconds in order to blow out the dust accumulated inside the fan.
The default automatic-cleaning interval is 168 hours (1 week) of uninterrupted use. Switching off the sensor resets this time counter.
.. _start_autoclean_fan_action:
``sen5x.start_fan_autoclean`` Action
------------------------------------
This :ref:`action <config-action>` manually starts fan-cleaning.
.. code-block:: yaml
on_...:
then:
- sen5x.start_fan_autoclean: sen54
See Also
--------
- :ref:`sensor-filters`
- :doc:`sds011`
- :doc:`pmsx003`
- :doc:`ccs811`
- :doc:`scd4x`
- :doc:`sps30`
- :doc:`sgp40`
- :apiref:`sen5x/sen5x.h`
- :ghedit:`Edit`

View File

@ -117,6 +117,8 @@ Configuration variables:
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in automation and lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **auto_cleaning_interval** (Optional): The interval in seconds of the periodic fan-cleaning.
- **address** (*Optional*, int): Manually specify the I²C address of the sensor.
Defaults to ``0x69``.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
@ -141,6 +143,21 @@ The SPS30 sensor has an automatic fan-cleaning which will accelerate the built-i
The default automatic-cleaning interval is 168 hours (1 week) of uninterrupted use. Switching off the sensor resets this time counter.
Disabling of automatic-cleaning or setting a manual interval is not supported at the moment.
.. _sps30_start_autoclean_fan_action:
``sps30.start_fan_autoclean`` Action
------------------------------------
This :ref:`action <config-action>` manually starts fan-cleaning.
.. code-block:: yaml
on_...:
then:
- sps30.start_fan_autoclean: my_sps30
See Also
--------

179
components/sml.rst Normal file
View File

@ -0,0 +1,179 @@
SML (Smart Message Language)
============================
.. seo::
:description: Instructions for setting up SML sensors
:image: sml.svg
:keywords: sml
The ``SML`` component connects to smart meters which use the *Smart Message Language* (SML) protocol.
Although the SML protocol is well defined, it gives a lot of freedom to the manufacturers how to store
and identify the transmitted data. Within a telegram the physical values are identified by *OBIS* codes
(Object Identification System). If it is known which code the manufacturer assigns to the physical value,
the corresponding value can be extracted.
Hardware
--------
This component is passive, it does not transmit any data to your equipment. Usually a smart meter transmit
a telegram at regular intervals (2-4 seconds) on its own.
This component decodes and updates the configured sensors at the pace the data is received.
Most smart meters transmit the telegrams using an infrared optical interface. As a sensor a suitable photo
transistor (e.g. BPW40) can be attached to the ESP's UART (emitter to `GND` and collector to `RX` pin). A more
mature solution can be found `here
<https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-ttl-ausgang>`_ (in German).
There are plenty of other examples and ready to buy solutions on the web.
Configuration
-------------
As the communciation with the sensor is done using UART, you need to have the :ref:`UART bus <uart>`
in your configuration. The interface parameters should be set to 9600/8N1 or 9600/7E1 depending on your
smart meter. If you see checksum errors in the log try changing the interface parameter.
.. code-block:: yaml
# Example configuration entry
uart:
id: uart_bus
rx_pin: GPIO3
baud_rate: 9600
data_bits: 8
parity: NONE
stop_bits: 1
sml:
id: mysml
uart_id: uart_bus
sensor:
- platform: sml
name: "Total energy"
sml_id: mysml
server_id: "0123456789abcdef"
obis_code: "1-0:1.8.0"
unit_of_measurement: kWh
accuracy_decimals: 1
device_class: energy
state_class: total_increasing
filters:
- multiply: 0.0001
text_sensor:
- platform: sml
name: "Manufacturer"
sml_id: mysml
server_id: "0123456789abcdef"
obis_code: "129-129:199.130.3"
format: text
Configuration variables:
------------------------
.. _sml-platform:
SML platform
************
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`UART Component <uart>` if you want
to use multiple UART buses.
Sensor
******
- **obis_code** (*Required*, string): Specify the OBIS code you want to retrieve data for from the device.
The format must be (A-B:C.D.E, e.g. 1-0:1.8.0)
- **server_id** (*Optional*, string): Specify the device's server_id to retrieve the OBIS code from. Should be specified if more then one device is connected to the same hardware sensor component.
- **sml_id** (*Optional*, :ref:`config-id`): The ID of the :ref:`SML platform <sml-platform>`
- All other options from :ref:`Sensor <config-sensor>`.
Text Sensor
***********
- **obis_code** (*Required*, string): Specify the OBIS code you want to retrieve data for from the device.
The format must be (A-B:C.D.E, e.g. 1-0:1.8.0)
- **server_id** (*Optional*, string): Specify the device's server_id to retrieve the OBIS code from. Should be specified if more then one device is connected to the same hardware sensor component.
- **sml_id** (*Optional*, :ref:`config-id`): The ID of the :ref:`SML platform <sml-platform>`
- **format** (*Optional*, string): Override the automatic interpretation of the transmitted binary data value. Possible values (`int`, `uint`, `bool`, `hex`, `text`).
- All other options from :ref:`Text Sensor <config-text_sensor>`.
Getting OBIS codes and sensor ids
---------------------------------
The physical values in the transmitted SML telegram are identified by a *server id* and *OBIS codes*. The *server id*
identifies your smart meter. If you have only one hardware component attached to your optical sensor you usually
don't have to care about the server id and you may ommit it in your configuration.
In order to get the server id and the available OBIS codes provided by your smart meter, simply set up the
:ref:`SML platform <sml-platform>` and observe the log output (the :ref:`log level <logger-log_levels>`
must be set to at least ``debug``!).
Your log output will show something like this:
.. figure:: images/sml-log.png
:align: center
:width: 100.0%
OBIS information in the log of the `SML` component
Each line represents a combination of the server id (in brackets), the OBIS code and the transmitted hex value
(in square brackets).
Precision errors
----------------
Many smart meters emit very huge numbers for certain OBIS codes (like the accumulated total active energy).
This may lead to precision errors for the values reported by the sensor component to ESPHome. This shows in
the fact that slightly wrong numbers may be reported to HomeAssistant. This is a result from internal limitations
in ESPHome and has nothing to do with the SML component.
If you cannot live with this, you can use the `TextSensor` with an appropriate format to transmit the value as
a string to HomeAssistant. On the HomeAssistant side you can define a `Template Sensor <https://www.home-assistant.io/integrations/template/>`_
to cast the value into the appropriate format and do some scaling.
For ESPHome we have:
.. code-block:: yaml
# ESPHome configuration file
text_sensor:
- platform: sml
name: "Total energy text"
obis_code: "1-0:1.8.0"
format: uint
The `format` parameter is optional. If ommited, the SML component will try to guess the correct datatype
from the received SML message.
And in HomeAssistant:
.. code-block:: yaml
# Home Assistant configuration.yaml
template:
- sensor:
- name: "Total Energy Consumption"
unit_of_measurement: "kWh"
state: >
{% if states('sensor.total_energy_text') == 'unavailable' %}
{{ states('sensor.total_energy_consumption') }}
{% else %}
{{ ((states('sensor.total_energy_text') | float) * 0.0001) | round(2) }}
{% endif %}
Usually the template sensor's value would turn to 0 if the ESP device is unavailable.
This results in problems when using the sensor in combination with the `Utility Meter <https://www.home-assistant.io/integrations/utility_meter/>`_ integration.
The state template provided above checks for the sensor's availability and keeps the
current state in case of unavailability.
See Also
--------
- :apiref:`sml/sml.h`
- :ghedit:`Edit`

View File

@ -79,7 +79,7 @@ Configuration variables:
- **power_save_mode** (*Optional*, string): The power save mode for the WiFi interface.
See :ref:`wifi-power_save_mode`
- **output_power** (*Optional*, string): The amount of TX power for the WiFi interface from 10dB to 20.5dB. Default for ESP8266 is 20dB, 20.5dB might cause unexpected restarts.
- **output_power** (*Optional*, string): The amount of TX power for the WiFi interface from 8.5dB to 20.5dB. Default for ESP8266 is 20dB, 20.5dB might cause unexpected restarts.
- **fast_connect** (*Optional*, boolean): If enabled, directly connects to WiFi network without doing a full scan
first. This is required for hidden networks and can significantly improve connection times. Defaults to ``off``.
The downside is that this option connects to the first network the ESP sees, even if that network is very far away and

View File

@ -66,9 +66,9 @@ author = "ESPHome"
# built documents.
#
# The short X.Y version.
version = "2022.4"
version = "2022.5"
# The full version, including alpha/beta/rc tags.
release = "2022.4.0"
release = "2022.5.0"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -366,7 +366,7 @@ All Actions
:ref:`cover.control <cover-control_action>`
- :ref:`fan.toggle <fan-toggle_action>` / :ref:`fan.turn_off <fan-turn_off_action>` / :ref:`fan.turn_on <fan-turn_on_action>`
- :ref:`output.turn_off <output-turn_off_action>` / :ref:`output.turn_on <output-turn_on_action>` / :ref:`output.set_level <output-set_level_action>`
- :ref:`deep_sleep.enter <deep_sleep-enter_action>` / :ref:`deep_sleep.prevent <deep_sleep-prevent_action>`
- :ref:`deep_sleep.enter <deep_sleep-enter_action>` / :ref:`deep_sleep.prevent <deep_sleep-prevent_action>` / :ref:`deep_sleep.allow <deep_sleep-allow_action>`
- :ref:`sensor.template.publish <sensor-template-publish_action>` / :ref:`binary_sensor.template.publish <binary_sensor-template-publish_action>`
/ :ref:`cover.template.publish <cover-template-publish_action>` / :ref:`switch.template.publish <switch-template-publish_action>`
/ :ref:`text_sensor.template.publish <text_sensor-template-publish_action>`
@ -389,7 +389,8 @@ All Actions
- :ref:`ds1307.read_time <ds1307-read_time_action>` / :ref:`ds1307.write_time <ds1307-write_time_action>`
- :ref:`cs5460a.restart <cs5460a-restart_action>`
- :ref:`pzemac.reset_energy <pzemac-reset_energy_action>`
- :ref:`number.set <number-set_action>`
- :ref:`number.set <number-set_action>` / :ref:`number.to_min <number-to-min_action>` / :ref:`number.to_max <number-to-max_action>` / :ref:`number.decrement <number-decrement_action>` / :ref:`number.increment <number-increment_action>` / :ref:`number.operation <number-operation_action>`
- :ref:`select.set <select-set_action>` / :ref:`select.set_index <select-set_index_action>` / :ref:`select.first <select-first_action>` / :ref:`select.last <select-last_action>` / :ref:`select.previous <select-previous_action>` / :ref:`select.next <select-next_action>` / :ref:`select.operation <select-operation_action>`
.. _config-condition:

View File

@ -45,6 +45,7 @@ Contributors
- `Alex Konradi (@akonradi) <https://github.com/akonradi>`__
- `Alone (@al-one) <https://github.com/al-one>`__
- `Albin Kauffmann (@albinou) <https://github.com/albinou>`__
- `Andre Lengwenus (@alengwenus) <https://github.com/alengwenus>`__
- `Alex (@alex-richards) <https://github.com/alex-richards>`__
- `Alexander Leisentritt (@Alex9779) <https://github.com/Alex9779>`__
- `Alex Barcelo (@alexbarcelo) <https://github.com/alexbarcelo>`__
@ -93,6 +94,7 @@ Contributors
- `bazuchan (@bazuchan) <https://github.com/bazuchan>`__
- `Viktr (@BbIKTOP) <https://github.com/BbIKTOP>`__
- `J. Nick Koston (@bdraco) <https://github.com/bdraco>`__
- `Maxim Ocheretianko (@bearpawmaxim) <https://github.com/bearpawmaxim>`__
- `Benno Pütz (@bennop) <https://github.com/bennop>`__
- `Ben Suffolk (@bensuffolk) <https://github.com/bensuffolk>`__
- `Arturo Casal (@berfenger) <https://github.com/berfenger>`__
@ -100,6 +102,8 @@ Contributors
- `besteru (@besteru) <https://github.com/besteru>`__
- `Brandon (@bgulla) <https://github.com/bgulla>`__
- `Bierchermuesli (@Bierchermuesli) <https://github.com/Bierchermuesli>`__
- `Bill Church (@billchurch) <https://github.com/billchurch>`__
- `Brian Kaufman (@bkaufx) <https://github.com/bkaufx>`__
- `JDavid (@blackhack) <https://github.com/blackhack>`__
- `Branimir Lambov (@blambov) <https://github.com/blambov>`__
- `Jim Ekman (@blejdfist) <https://github.com/blejdfist>`__
@ -111,6 +115,7 @@ Contributors
- `brambo123 (@brambo123) <https://github.com/brambo123>`__
- `Bram Kragten (@bramkragten) <https://github.com/bramkragten>`__
- `Brad Davidson (@brandond) <https://github.com/brandond>`__
- `Jens Bretschneider (@breti) <https://github.com/breti>`__
- `Brett Profitt (@brettp) <https://github.com/brettp>`__
- `Brian Hanifin (@brianhanifin) <https://github.com/brianhanifin>`__
- `brianrjones69 (@brianrjones69) <https://github.com/brianrjones69>`__
@ -118,6 +123,7 @@ Contributors
- `buxtronix (@buxtronix) <https://github.com/buxtronix>`__
- `bvansambeek (@bvansambeek) <https://github.com/bvansambeek>`__
- `calco88 (@calco88) <https://github.com/calco88>`__
- `Cal Howard (@calhoward) <https://github.com/calhoward>`__
- `Carlos Gustavo Sarmiento (@carlos-sarmiento) <https://github.com/carlos-sarmiento>`__
- `Carlos Garcia Saura (@CarlosGS) <https://github.com/CarlosGS>`__
- `Carlos Ruiz (@CarlosRDomin) <https://github.com/CarlosRDomin>`__
@ -130,10 +136,12 @@ Contributors
- `chris-jennings (@chris-jennings) <https://github.com/chris-jennings>`__
- `Christian Taedcke (@chrta) <https://github.com/chrta>`__
- `Pavel Skuratovich (@Chupaka) <https://github.com/Chupaka>`__
- `Chris Johnson (@ciband) <https://github.com/ciband>`__
- `John (@CircuitSetup) <https://github.com/CircuitSetup>`__
- `Colby Rome (@cisasteelersfan) <https://github.com/cisasteelersfan>`__
- `Chris Debenham (@cjd) <https://github.com/cjd>`__
- `Clifford Roche (@cmroche) <https://github.com/cmroche>`__
- `code-review-doctor (@code-review-doctor) <https://github.com/code-review-doctor>`__
- `CODeRUS (@CODeRUS) <https://github.com/CODeRUS>`__
- `Cody James (@codyjamestechnical) <https://github.com/codyjamestechnical>`__
- `Conclusio (@Conclusio) <https://github.com/Conclusio>`__
@ -148,6 +156,7 @@ Contributors
- `cryptelli (@cryptelli) <https://github.com/cryptelli>`__
- `cstaahl (@cstaahl) <https://github.com/cstaahl>`__
- `Chris Talkington (@ctalkington) <https://github.com/ctalkington>`__
- `Massimo Cetra (@ctrix) <https://github.com/ctrix>`__
- `cvwillegen (@cvwillegen) <https://github.com/cvwillegen>`__
- `cwitting (@cwitting) <https://github.com/cwitting>`__
- `Alex Solomaha (@CyanoFresh) <https://github.com/CyanoFresh>`__
@ -181,6 +190,7 @@ Contributors
- `Christiaan Blom (@Deinara) <https://github.com/Deinara>`__
- `Rsan (@deltazerorsan) <https://github.com/deltazerorsan>`__
- `Mickaël Le Baillif (@demikl) <https://github.com/demikl>`__
- `Dennis (@dennisvbussel) <https://github.com/dennisvbussel>`__
- `dentra (@dentra) <https://github.com/dentra>`__
- `Davide Depau (@Depau) <https://github.com/Depau>`__
- `dependabot[bot] (@dependabot[bot]) <https://github.com/dependabot[bot]>`__
@ -302,6 +312,7 @@ Contributors
- `Guillaume DELVIT (@guiguid) <https://github.com/guiguid>`__
- `guillempages (@guillempages) <https://github.com/guillempages>`__
- `Guyohms (@Guyohms) <https://github.com/Guyohms>`__
- `Gilles van den Hoven (@gvdhoven) <https://github.com/gvdhoven>`__
- `haade (@haade-administrator) <https://github.com/haade-administrator>`__
- `Peter van Dijk (@Habbie) <https://github.com/Habbie>`__
- `Hagai Shatz (@hagai-shatz) <https://github.com/hagai-shatz>`__
@ -337,6 +348,7 @@ Contributors
- `Lorenzo Ortiz (@Infinitte) <https://github.com/Infinitte>`__
- `Samir El Benna (@ingbenna) <https://github.com/ingbenna>`__
- `irtimaled (@irtimaled) <https://github.com/irtimaled>`__
- `Ingo Theiss (@itn3rd77) <https://github.com/itn3rd77>`__
- `Ivan Shvedunov (@ivan4th) <https://github.com/ivan4th>`__
- `Ivan Kravets (@ivankravets) <https://github.com/ivankravets>`__
- `Ivo-tje (@Ivo-tje) <https://github.com/Ivo-tje>`__
@ -347,6 +359,7 @@ Contributors
- `James Gao (@jamesgao) <https://github.com/jamesgao>`__
- `János Rusiczki (@janosrusiczki) <https://github.com/janosrusiczki>`__
- `Jan Pieper (@janpieper) <https://github.com/janpieper>`__
- `Jarek.P (@JaroslawPrzybyl) <https://github.com/JaroslawPrzybyl>`__
- `Jason2866 (@Jason2866) <https://github.com/Jason2866>`__
- `Jason Hines (@jasonehines) <https://github.com/jasonehines>`__
- `JasperPlant (@JasperPlant) <https://github.com/JasperPlant>`__
@ -363,8 +376,10 @@ Contributors
- `Jeff Eberl (@jeffeb3) <https://github.com/jeffeb3>`__
- `Jeff Rescignano (@JeffResc) <https://github.com/JeffResc>`__
- `Jej (@jej) <https://github.com/jej>`__
- `Jens-Christian Skibakk (@jenscski) <https://github.com/jenscski>`__
- `Jérôme Laban (@jeromelaban) <https://github.com/jeromelaban>`__
- `Jesse Hills (@jesserockz) <https://github.com/jesserockz>`__
- `James Szalay (@jgissend10) <https://github.com/jgissend10>`__
- `Yuval Brik (@jhamhader) <https://github.com/jhamhader>`__
- `Joe (@jhansche) <https://github.com/jhansche>`__
- `Jim Bauwens (@jimbauwens) <https://github.com/jimbauwens>`__
@ -427,8 +442,6 @@ Contributors
- `Kyle Hendricks (@kylehendricks) <https://github.com/kylehendricks>`__
- `Kyle Manna (@kylemanna) <https://github.com/kylemanna>`__
- `la7dja (@la7dja) <https://github.com/la7dja>`__
- `Stefan Lässer (@Laess3r) <https://github.com/Laess3r>`__
- `Steffen Weinreich (@lairsdragon) <https://github.com/lairsdragon>`__
- `Fredrik Lindqvist (@Landrash) <https://github.com/Landrash>`__
- `Laszlo Gazdag (@lazlyhu) <https://github.com/lazlyhu>`__
- `lcavalli (@lcavalli) <https://github.com/lcavalli>`__
@ -442,6 +455,7 @@ Contributors
- `Juraj Liso (@LiJu09) <https://github.com/LiJu09>`__
- `Lazar Obradovic (@lobradov) <https://github.com/lobradov>`__
- `Barry Loong (@loongyh) <https://github.com/loongyh>`__
- `LuBeDa (@lubeda) <https://github.com/lubeda>`__
- `Joakim Sørensen (@ludeeus) <https://github.com/ludeeus>`__
- `ludrao (@ludrao) <https://github.com/ludrao>`__
- `Lukas Klass (@LukasK13) <https://github.com/LukasK13>`__
@ -496,6 +510,7 @@ Contributors
- `Marco (@Melkor82) <https://github.com/Melkor82>`__
- `Merlin Schumacher (@merlinschumacher) <https://github.com/merlinschumacher>`__
- `Marco Lusini (@met67) <https://github.com/met67>`__
- `Martin Flasskamp (@MFlasskamp) <https://github.com/MFlasskamp>`__
- `Michael Gorven (@mgorven) <https://github.com/mgorven>`__
- `mhentschke (@mhentschke) <https://github.com/mhentschke>`__
- `Michaël Arnauts (@michaelarnauts) <https://github.com/michaelarnauts>`__
@ -508,6 +523,7 @@ Contributors
- `mipa87 (@mipa87) <https://github.com/mipa87>`__
- `André Klitzing (@misery) <https://github.com/misery>`__
- `Matthew Edwards (@mje-nz) <https://github.com/mje-nz>`__
- `Matthew Garrett (@mjg59) <https://github.com/mjg59>`__
- `Maarten (@mjkl-gh) <https://github.com/mjkl-gh>`__
- `mjoshd (@mjoshd) <https://github.com/mjoshd>`__
- `mknjc (@mknjc) <https://github.com/mknjc>`__
@ -521,6 +537,7 @@ Contributors
- `Sam Hughes (@MrEditor97) <https://github.com/MrEditor97>`__
- `Simon Sasburg (@MrHacky) <https://github.com/MrHacky>`__
- `Mariusz Kryński (@mrk-its) <https://github.com/mrk-its>`__
- `Michael Davidson (@MrMDavidson) <https://github.com/MrMDavidson>`__
- `Ryan Matthews (@mrrsm) <https://github.com/mrrsm>`__
- `MrZetor (@MrZetor) <https://github.com/MrZetor>`__
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__
@ -588,6 +605,7 @@ Contributors
- `parats15 (@parats15) <https://github.com/parats15>`__
- `Pasi Suominen (@pasiz) <https://github.com/pasiz>`__
- `Patrick Felstead (@patfelst) <https://github.com/patfelst>`__
- `Patrick van der Leer (@patvdleer) <https://github.com/patvdleer>`__
- `Paul Deen (@PaulAntonDeen) <https://github.com/PaulAntonDeen>`__
- `Paul Monigatti (@paulmonigatti) <https://github.com/paulmonigatti>`__
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__
@ -615,10 +633,12 @@ Contributors
- `Patrick Toal (@ptoal) <https://github.com/ptoal>`__
- `Leandro Puerari (@puerari) <https://github.com/puerari>`__
- `puuu (@puuu) <https://github.com/puuu>`__
- `[pʲɵs] (@pyos) <https://github.com/pyos>`__
- `QbaF (@QbaF) <https://github.com/QbaF>`__
- `Qc (@qc24) <https://github.com/qc24>`__
- `Karol Zlot (@qqgg231) <https://github.com/qqgg231>`__
- `Tommy Jonsson (@quazzie) <https://github.com/quazzie>`__
- `quentin9696 (@quentin9696) <https://github.com/quentin9696>`__
- `Quentin Stafford-Fraser (@quentinsf) <https://github.com/quentinsf>`__
- `Quinn Hosler (@quinnhosler) <https://github.com/quinnhosler>`__
- `Johannes Rebling (@r0oland) <https://github.com/r0oland>`__
@ -630,6 +650,7 @@ Contributors
- `Radim Karniš (@radimkarnis) <https://github.com/radimkarnis>`__
- `Florian Ragwitz (@rafl) <https://github.com/rafl>`__
- `Rai-Rai (@Rai-Rai) <https://github.com/Rai-Rai>`__
- `rainero84 (@rainero84) <https://github.com/rainero84>`__
- `razorback16 (@razorback16) <https://github.com/razorback16>`__
- `rbaron (@rbaron) <https://github.com/rbaron>`__
- `Robert Cambridge (@rcambrj) <https://github.com/rcambrj>`__
@ -665,6 +686,7 @@ Contributors
- `rrooggiieerr (@rrooggiieerr) <https://github.com/rrooggiieerr>`__
- `rspaargaren (@rspaargaren) <https://github.com/rspaargaren>`__
- `rsumner (@rsumner) <https://github.com/rsumner>`__
- `Ruben De Smet (@rubdos) <https://github.com/rubdos>`__
- `Rubén G. (@rubengargar) <https://github.com/rubengargar>`__
- `@RubenKelevra (@RubenKelevra) <https://github.com/RubenKelevra>`__
- `RubyBailey (@RubyBailey) <https://github.com/RubyBailey>`__
@ -708,17 +730,15 @@ Contributors
- `sredfern (@sredfern) <https://github.com/sredfern>`__
- `Samuel Sieb (@ssieb) <https://github.com/ssieb>`__
- `St4n (@St4n) <https://github.com/St4n>`__
- `Stefan (@stefanroelofs) <https://github.com/stefanroelofs>`__
- `stegm (@stegm) <https://github.com/stegm>`__
- `Steve Baxter (@stevebaxter) <https://github.com/stevebaxter>`__
- `Stewart (@stewiem2000) <https://github.com/stewiem2000>`__
- `sticilface (@sticilface) <https://github.com/sticilface>`__
- `StijnVdd (@StijnVdd) <https://github.com/StijnVdd>`__
- `Stijn Tintel (@stintel) <https://github.com/stintel>`__
- `Strixx76 (@Strixx76) <https://github.com/Strixx76>`__
- `stubs12 (@stubs12) <https://github.com/stubs12>`__
- `Jordan Vohwinkel (@sublime93) <https://github.com/sublime93>`__
- `sveip (@sveip) <https://github.com/sveip>`__
- `swifty99 (@swifty99) <https://github.com/swifty99>`__
- `Sympatron GmbH (@Sympatron) <https://github.com/Sympatron>`__
- `synco (@synco) <https://github.com/synco>`__
- `Marcel Feix (@Syndlex) <https://github.com/Syndlex>`__
@ -727,7 +747,6 @@ Contributors
- `Levente Tamas (@tamisoft) <https://github.com/tamisoft>`__
- `Aleksandr Oleinikov (@tannisroot) <https://github.com/tannisroot>`__
- `tantive (@tantive) <https://github.com/tantive>`__
- `TBobsin (@TBobsin) <https://github.com/TBobsin>`__
- `Team Super Panda (@teamsuperpanda) <https://github.com/teamsuperpanda>`__
- `Ryan Hoffman (@tekmaven) <https://github.com/tekmaven>`__
- `testbughub (@testbughub) <https://github.com/testbughub>`__
@ -735,7 +754,6 @@ Contributors
- `Nejc (@thedexboy) <https://github.com/thedexboy>`__
- `Thomas Eckerstorfer (@TheEggi) <https://github.com/TheEggi>`__
- `TheGroundZero (@TheGroundZero) <https://github.com/TheGroundZero>`__
- `Spencer Hachmeister (@TheHackmeister) <https://github.com/TheHackmeister>`__
- `thejonesyboy (@thejonesyboy) <https://github.com/thejonesyboy>`__
- `TheJulianJES (@TheJulianJES) <https://github.com/TheJulianJES>`__
- `Mateusz Soszyński (@TheLastGimbus) <https://github.com/TheLastGimbus>`__
@ -779,6 +797,7 @@ Contributors
- `Thorsten von Eicken (@tve) <https://github.com/tve>`__
- `Tyler Menezes (@tylermenezes) <https://github.com/tylermenezes>`__
- `ukewea (@ukewea) <https://github.com/ukewea>`__
- `Unai (@unaiur) <https://github.com/unaiur>`__
- `Vc (@Valcob) <https://github.com/Valcob>`__
- `Nad (@valordk) <https://github.com/valordk>`__
- `André Lademann (@vergissberlin) <https://github.com/vergissberlin>`__
@ -819,7 +838,8 @@ Contributors
- `Zebble (@Zebble) <https://github.com/Zebble>`__
- `ZJY (@zhangjingye03) <https://github.com/zhangjingye03>`__
- `San (@zhujunsan) <https://github.com/zhujunsan>`__
- `I. Tomita (@ziceva) <https://github.com/ziceva>`__
- `Michael Labuschke (@zigman79) <https://github.com/zigman79>`__
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
*This page was last updated April 20, 2022.*
*This page was last updated May 18, 2022.*

BIN
images/bedjet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
images/bl0939.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/ens210.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
images/sen54.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

1
images/sml.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="124" height="60" version="1.1"><path d="M20.49 1.333H104c10.31 0 18.667 8.358 18.667 18.667v20.667c0 10.309-8.358 18.666-18.667 18.666H20.49c-10.31 0-18.668-8.357-18.668-18.666V20c0-10.31 8.358-18.667 18.667-18.667z"/><path d="M20.49 1.333H104c10.31 0 18.667 8.358 18.667 18.667v20.667c0 10.309-8.358 18.666-18.667 18.666H20.49c-10.31 0-18.668-8.357-18.668-18.666V20c0-10.31 8.358-18.667 18.667-18.667z" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="1.333"/><g transform="translate(1.0749 2.0002)" fill="#fff"><path d="m24.374 45.413c-2.7067 0-5.351-0.29567-7.933-0.887-2.5513-0.622-4.6513-1.4463-6.3-2.473l3.547-8.027c1.5553 0.902 3.2973 1.633 5.226 2.193 1.9293 0.52933 3.7807 0.794 5.554 0.794 1.524 0 2.6127-0.14 3.266-0.42 0.65333-0.31133 0.98-0.76267 0.98-1.354 0-0.684-0.43533-1.1973-1.306-1.54-0.84-0.342-2.24-0.71533-4.2-1.12-2.52-0.52867-4.62-1.0887-6.3-1.68-1.68-0.622-3.1423-1.6173-4.387-2.986-1.2447-1.4-1.867-3.2823-1.867-5.647 0-2.0533 0.57567-3.92 1.727-5.6s2.8623-3.0023 5.133-3.967c2.3027-0.964 5.0873-1.446 8.354-1.446 2.24 0 4.4333 0.24867 6.58 0.746 2.1773 0.46667 4.0907 1.1667 5.74 2.1l-3.314 7.98c-3.204-1.6173-6.2373-2.426-9.1-2.426-2.8307 0-4.246 0.68433-4.246 2.053 0 0.65333 0.42 1.151 1.26 1.493 0.84 0.31133 2.2243 0.65367 4.153 1.027 2.4887 0.46667 4.5887 1.011 6.3 1.633 1.7113 0.59133 3.189 1.5713 4.433 2.94 1.276 1.3693 1.914 3.236 1.914 5.6 0 2.0533-0.57567 3.92-1.727 5.6-1.1513 1.6493-2.878 2.9717-5.18 3.967-2.2713 0.96467-5.0403 1.447-8.307 1.447z" aria-label="SPL"/><path d="m73.238 45.37-0.093-15.528-7.093 12.462h-4.854l-7.093-11.927v14.993h-10.033v-34.075h9.053l10.64 18.157 10.36-18.157h9.053l0.094 34.075z" stroke-width="1.0213"/><path d="m87.756 11.295h10.45v25.168h13.992v8.9085h-24.442z" stroke-width=".99488"/></g></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -190,6 +190,7 @@ Air Quality
PMSX003, components/sensor/pmsx003, pmsx003.svg, Particulate
RadonEye BLE, components/sensor/radon_eye_ble, radon_eye_logo.png, Radon
SDS011 Sensor, components/sensor/sds011, sds011.jpg, Particulate
SEN5x, components/sensor/sen5x, sen54.jpg, Temperature & Humidity, Volatile organics and NOx
SenseAir, components/sensor/senseair, senseair_s8.jpg, CO2
SCD30, components/sensor/scd30, scd30.jpg, CO2 & Temperature & Humidity
SCD4X, components/sensor/scd4x, scd4x.jpg, CO2 & Temperature & Humidity
@ -252,6 +253,7 @@ Electricity
ADE7953, components/sensor/ade7953, ade7953.svg, Power
ATM90E32, components/sensor/atm90e32, atm90e32.jpg, Voltage & Current & Power
BL0939, components/sensor/bl0939, bl0939.png, Voltage & Current & Power & Energy
BL0940, components/sensor/bl0940, bl0940.png, Voltage & Current & Power
CS5460A, components/sensor/cs5460a, cs5460a.png, Voltage & Current & Power
CSE7761, components/sensor/cse7761, cse7761.svg, Voltage & Current & Power
@ -292,6 +294,7 @@ Environmental
Dallas DS18B20, components/sensor/dallas, dallas.jpg, Temperature
DHT, components/sensor/dht, dht.jpg, Temperature & Humidity
DHT12, components/sensor/dht12, dht12.jpg, Temperature & Humidity
ENS210, components/sensor/ens210, ens210.jpg, Temperature & Humidity
HDC1080, components/sensor/hdc1080, hdc1080.jpg, Temperature & Humidity
Honeywell ABP, components/sensor/honeywellabp, honeywellabp.jpg, Pressure & Temperature
HTU21D / Si7021 / SHT21, components/sensor/htu21d, htu21d.jpg, Temperature & Humidity
@ -597,6 +600,7 @@ Climate Components
Tuya Climate, components/climate/tuya, tuya.png
Midea, components/climate/midea, midea.svg
Anova Cooker, components/climate/anova, anova.png
BedJet Climate System, components/climate/bedjet, bedjet.png
Number Components
-----------------
@ -675,6 +679,7 @@ Misc Components
Prometheus, components/prometheus, prometheus.svg
PipSolar - compatible PV Inverter, components/pipsolar, pipsolar.jpg
Grow Fingerprint Reader, components/fingerprint_grow, fingerprint.svg
SML, components/sml, sml.svg
Demo, components/demo, description.svg
Copy, components/copy, content-copy.svg