Merge pull request #2728 from esphome/bump-2023.3.0b1

2023.3.0b1
This commit is contained in:
Jesse Hills 2023-03-09 10:44:00 +13:00 committed by GitHub
commit 5e26f55331
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
59 changed files with 1358 additions and 138 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.2.4
PROJECT_NUMBER = 2023.3.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.2.4
ESPHOME_REF = 2023.3.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: 93 KiB

View File

@ -1 +1 @@
2023.2.4
2023.3.0b1

173
changelog/2023.3.0.rst Normal file
View File

@ -0,0 +1,173 @@
ESPHome 2023.3.0 - 15th March 2023
==================================
.. seo::
:description: Changelog for ESPHome 2023.3.0.
:image: /_static/changelog-2023.3.0.png
:author: Jesse Hills
:author_twitter: @jesserockz
.. imgtable::
:columns: 4
Internal Temperature, components/sensor/internal_temperature, thermometer.svg
Mopeka Standard Check LP, components/sensor/mopeka_std_check, mopeka_std_check.jpg
Person Sensor (SEN21231), components/sensor/sen21231, sen21231.png
Haier Climate, components/climate/haier, haier.svg
FS3000, components/sensor/fs3000, fs3000.jpg
Absolute Humidity, components/sensor/absolute_humidity, water-drop.svg
AS7341, components/sensor/as7341, as7341.jpg, Spectral Color Sensor
Sprinkler updates
-----------------
The sprinkler component has had a big update thanks to :ghuser:`kbx81`.
The method ``time_remaining()`` has been renamed to ``time_remaining_active_valve()`` for clarity.
If you use this to display time remaining, simply update the name of the method in your code/lambda(s).
Tuya lights
-----------
Tuya Lights have had a configuration change and replaced ``rgb_datapoint`` and ``hsv_datapoint`` with a new
combination of ``color_datapoint`` and ``color_type``. See the updated documentation (:doc:`/components/light/tuya`) for more information.
SN74HC165
---------
The pin/bit order has been reversed per shift register so that ``pin 0`` is now ``input A``.
Full list of changes
--------------------
New Components
^^^^^^^^^^^^^^
- Add internal_temperature component :esphomepr:`4330` by :ghuser:`Mat931` (new-integration)
- Support Mopeka Standard LPG tank bluetooth sensor :esphomepr:`4351` by :ghuser:`Fabian-Schmidt` (new-integration)
- add person sensor (SEN21231) from usefulsensors :esphomepr:`4454` by :ghuser:`shreyaskarnik` (new-integration)
- add kuntze component :esphomepr:`4411` by :ghuser:`ssieb` (new-integration)
- Add Haier climate component :esphomepr:`4001` by :ghuser:`Yarikx` (new-integration)
- FS3000 sensor :esphomepr:`4502` by :ghuser:`kahrendt` (new-integration)
- Add absolute humidity component :esphomepr:`4519` by :ghuser:`DAVe3283` (new-integration)
- Add AS7341 spectral color sensor :esphomepr:`4331` by :ghuser:`mrgnr` (new-integration)
Breaking Changes
^^^^^^^^^^^^^^^^
- Add configurable color datapoint :esphomepr:`4383` by :ghuser:`irtimaled` (breaking-change)
- Sprinkler "v2" updates :esphomepr:`4159` by :ghuser:`kbx81` (breaking-change)
- sn74hc165 fixes :esphomepr:`4457` by :ghuser:`jesserockz` (breaking-change)
All changes
^^^^^^^^^^^
- socket: Format IPv4-mapped IPv6 addresses as regular IPv4 address :esphomepr:`4382` by :ghuser:`oxan`
- Bump frenck/action-yamllint from 1.3.1 to 1.4.0 :esphomepr:`4289` by :ghuser:`dependabot[bot]`
- Bump pyupgrade from 3.3.0 to 3.3.1 :esphomepr:`4160` by :ghuser:`dependabot[bot]`
- Bump black from 22.12.0 to 23.1.0 :esphomepr:`4375` by :ghuser:`dependabot[bot]`
- Improve tuya network status command :esphomepr:`4415` by :ghuser:`Rjevski`
- Gracefully reject vacuum map upload requests :esphomepr:`4414` by :ghuser:`Rjevski`
- Fixed PlatformIO Build on DEV :esphomepr:`4422` by :ghuser:`Expaso`
- Bump platformio from 6.1.5 to 6.1.6 :esphomepr:`4341` by :ghuser:`dependabot[bot]`
- Bump pylint from 2.15.10 to 2.16.2 :esphomepr:`4426` by :ghuser:`dependabot[bot]`
- Bump aioesphomeapi from 13.1.0 to 13.3.1 :esphomepr:`4427` by :ghuser:`dependabot[bot]`
- Add concurrency limit to ci-docker :esphomepr:`4407` by :ghuser:`jesserockz`
- Add final job so branch protection can require matrix ci steps :esphomepr:`4432` by :ghuser:`jesserockz`
- Deep Sleep capable ports for ESP32S3 :esphomepr:`4230` by :ghuser:`LeDominik`
- Initialize all fields in ESPTime in PCF85063 :esphomepr:`4439` by :ghuser:`oxan`
- Bump zeroconf from 0.47.1 to 0.47.3 :esphomepr:`4437` by :ghuser:`dependabot[bot]`
- Automate syncing device classes with HA :esphomepr:`4438` by :ghuser:`oxan`
- NeoPixel - Add support for ESP32-S3 :esphomepr:`4435` by :ghuser:`ajacques`
- add SUB_BINARY_SENSOR macro to binary sensor :esphomepr:`4447` by :ghuser:`regevbr`
- add SUB_TEXT_SENSOR macro to text sensor :esphomepr:`4448` by :ghuser:`regevbr`
- Simplify sensor schema generation :esphomepr:`4462` by :ghuser:`balloob`
- add SUB_NUMBER macro and schema to number :esphomepr:`4449` by :ghuser:`regevbr`
- add SUB_BUTTON macro and ability to button schema to define the class :esphomepr:`4450` by :ghuser:`regevbr`
- Simplify number_schema function :esphomepr:`4467` by :ghuser:`jesserockz`
- Simplify button_schema function :esphomepr:`4468` by :ghuser:`jesserockz`
- Simplify binary_sensor_schema function :esphomepr:`4469` by :ghuser:`jesserockz`
- Add configurable color datapoint :esphomepr:`4383` by :ghuser:`irtimaled` (breaking-change)
- Add internal_temperature component :esphomepr:`4330` by :ghuser:`Mat931` (new-integration)
- Move remaining SENSOR_SCHEMA to use sensor_schema() :esphomepr:`4471` by :ghuser:`jesserockz`
- Allow specifying target and current visual steps for climate :esphomepr:`4440` by :ghuser:`jesserockz`
- Bump aioesphomeapi from 13.3.1 to 13.4.0 :esphomepr:`4472` by :ghuser:`dependabot[bot]`
- toshiba: add support for quiet fan mode :esphomepr:`4283` by :ghuser:`MichaelMure`
- Bump esptool from 4.4 to 4.5 :esphomepr:`4428` by :ghuser:`dependabot[bot]`
- Support Mopeka Standard LPG tank bluetooth sensor :esphomepr:`4351` by :ghuser:`Fabian-Schmidt` (new-integration)
- fix library override logic :esphomepr:`4474` by :ghuser:`mzakharo`
- Sprinkler "v2" updates :esphomepr:`4159` by :ghuser:`kbx81` (breaking-change)
- add person sensor (SEN21231) from usefulsensors :esphomepr:`4454` by :ghuser:`shreyaskarnik` (new-integration)
- Initial stab at importing idf components :esphomepr:`4000` by :ghuser:`jesserockz`
- add kuntze component :esphomepr:`4411` by :ghuser:`ssieb` (new-integration)
- Add Haier climate component :esphomepr:`4001` by :ghuser:`Yarikx` (new-integration)
- Bump esp-idf to 4.4.3 via platformio/espressif32 @ 5.3.0 :esphomepr:`4254` by :ghuser:`bdraco`
- Add energy to pzemdc :esphomepr:`3626` by :ghuser:`andreashergert1984`
- Update esp32 esp-idf dev and latest version numbers :esphomepr:`4479` by :ghuser:`jesserockz`
- [ExternalRAMAllocator] Use same `heap_caps_malloc` parameter as `ps_malloc`. :esphomepr:`4484` by :ghuser:`Fabian-Schmidt`
- Lock scheduler items while modifying them :esphomepr:`4410` by :ghuser:`oxan`
- Move Font glyphs to SPI RAM. :esphomepr:`4485` by :ghuser:`Fabian-Schmidt`
- Run CI on merge group :esphomepr:`4489` by :ghuser:`jesserockz`
- Fix parallel invocations of repeat action :esphomepr:`4480` by :ghuser:`oxan`
- Make test3 use huge_app :esphomepr:`4488` by :ghuser:`jesserockz`
- Change variable "skip_updates" and "skip_updates_counter" type from "uint8_t" to "uint16_t" :esphomepr:`4487` by :ghuser:`GitforZhangXL`
- Fix copy-pasta mistake :esphomepr:`4492` by :ghuser:`jesserockz`
- Add int16 to codegen :esphomepr:`4507` by :ghuser:`jesserockz`
- Update ``__init__.py`` :esphomepr:`4514` by :ghuser:`dashkhaneh`
- Remove idf components before checking if any in config :esphomepr:`4506` by :ghuser:`jesserockz`
- substitutions: Don't warn when passwords look like a substitution :esphomepr:`4161` by :ghuser:`tljuniper`
- Fix typo :esphomepr:`4515` by :ghuser:`oxan`
- implement pairing for bluetooth proxy :esphomepr:`4475` by :ghuser:`jagheterfredrik`
- Bump docker dependencies :esphomepr:`4526` by :ghuser:`jesserockz`
- Bump aioesphomeapi from 13.4.0 to 13.5.0 :esphomepr:`4525` by :ghuser:`dependabot[bot]`
- Ensure component is ready before update. :esphomepr:`4523` by :ghuser:`Fabian-Schmidt`
- climate: add on_control callbacks :esphomepr:`4511` by :ghuser:`nwf`
- FS3000 sensor :esphomepr:`4502` by :ghuser:`kahrendt` (new-integration)
- Bump esptool from 4.5 to 4.5.1 :esphomepr:`4497` by :ghuser:`dependabot[bot]`
- Add support for multiple devices in bme680_bsec :esphomepr:`3550` by :ghuser:`bisbastuner`
- Bump pytest from 7.2.1 to 7.2.2 :esphomepr:`4505` by :ghuser:`dependabot[bot]`
- Bump pylint from 2.16.2 to 2.16.4 :esphomepr:`4524` by :ghuser:`dependabot[bot]`
- Add absolute humidity component :esphomepr:`4519` by :ghuser:`DAVe3283` (new-integration)
- Add ability to await safe mode in codegen :esphomepr:`4529` by :ghuser:`oxan`
- sn74hc165 fixes :esphomepr:`4457` by :ghuser:`jesserockz`
- Add AS7341 spectral color sensor :esphomepr:`4331` by :ghuser:`mrgnr` (new-integration)
- Fix ethernet driver setting gpio 5 high when no power pin defined :esphomepr:`4531` by :ghuser:`jesserockz`
- Use PSRam for BLE scan results. :esphomepr:`4486` by :ghuser:`Fabian-Schmidt`
- Bump esp-idf to 4.4.4 :esphomepr:`4528` by :ghuser:`bdraco`
- Added pzemdc reset energy action :esphomepr:`4481` by :ghuser:`KG3RK3N`
Past Changelogs
---------------
- :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.2.0.html
:url: /changelog/2023.3.0.html
.. toctree::
:glob:

View File

@ -0,0 +1,86 @@
Haier Climate
=============
.. seo::
:description: Instructions for setting up a Haier climate devices.
:image: air-conditioner.svg
The `haier` climate platform creates a Haier climate device.
The component can be used as a replacement of a Haier proprietary WiFi modules such as KZW-W001 and KZW-W002.
This component requires a :ref:`uart` to be setup.
.. code-block:: yaml
logger:
baud_rate: 0 #Disable UART logging for ESP8266
uart:
rx_pin: GPIO3
tx_pin: GPIO1
baud_rate: 9600
climate:
platform: haier
name: Haier AC
supported_swing_modes:
- VERTICAL
- HORIZONTAL
- BOTH
Configuration variables:
------------------------
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **name** (**Required**, string): The name of the climate device.
- **update_interval** (*Optional*, :ref:`config-time`): How often device will be polled for status. Defaults to `5s`.
- **supported_swing_modes** (*Optional*, list): List of supported swing modes. Possible values are: ``VERTICAL``, ``HORIZONTAL``, ``BOTH``.
- All other options from :ref:`Climate <config-climate>`.
Hardware setup
--------------
Most units will have a dedicated USB-A port for Haier WiFi module.
The physical USB port is in fact UART and does not "speak" USB protocol.
It uses four USB pins as 5V, GND, RX, TX.
You can use spare male USB cable to connect esphome device directly to the climate appliance.
Other units will not have USB ports, but will still probably have UART exposed somewhere on the main board.
.. list-table:: Haier UART pinout
:header-rows: 1
* - Board
- USB
- Wire color
- ESP8266
* - 5V
- VCC
- red
- 5V
* - GND
- GND
- black
- GND
* - TX
- DATA+
- green
- RX
* - RX
- DATA-
- white
- TX
.. figure:: images/usb_pinout.png
:align: center
:width: 70.0%
USB Pinout
See Also
--------
- `esphaier <https://github.com/MiguelAngelLV/esphaier>`__
- :doc:`/components/climate/index`
- :apiref:`haier/climate/haier.h`
- :ghedit:`Edit`

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -43,7 +43,10 @@ Configuration variables:
- **max_temperature** (*Optional*, float): The maximum temperature the climate device can reach.
Used to set the range of the frontend gauge.
- **temperature_step** (*Optional*, float): The granularity with which the target temperature
can be controlled.
can be controlled. Can be a single number, or split as below:
- **target_temperature** (**Required**, float)
- **current_temperature** (**Required**, float)
Advanced options:
@ -58,6 +61,53 @@ Advanced options:
for a list of available options. Requires Home Assistant 2021.11 or newer.
Set to ``""`` to remove the default entity category.
MQTT options:
- **action_state_topic** (*Optional*, string): The topic to publish
climate device action changes to.
- **current_temperature_state_topic** (*Optional*, string): The topic to publish
current temperature changes to.
- **fan_mode_state_topic** (*Optional*, string): The topic to publish
fan mode changes to.
- **fan_mode_command_topic** (*Optional*, string): The topic to receive
fan mode commands on.
- **mode_state_topic** (*Optional*, string): The topic to publish
climate device mode changes to.
- **mode_command_topic** (*Optional*, string): The topic to receive
climate device mode commands on.
- **preset_state_topic** (*Optional*, string): The topic to publish
preset changes to.
- **preset_command_topic** (*Optional*, string): The topic to receive
preset commands on.
- **swing_mode_state_topic** (*Optional*, string): The topic to publish
swing mode changes to.
- **swing_mode_command_topic** (*Optional*, string): The topic to receive
swing mode commands on.
- **target_temperature_state_topic** (*Optional*, string): The topic to publish
target temperature changes to.
- **target_temperature_command_topic** (*Optional*, string): The topic to receive
target temperature commands on.
- **target_temperature_high_state_topic** (*Optional*, string): The topic to publish
higher target temperature changes to.
- **target_temperature_high_command_topic** (*Optional*, string): The topic to receive
higher target temperature commands on.
- **target_temperature_low_state_topic** (*Optional*, string): The topic to publish
lower target temperature changes to.
- **target_temperature_low_command_topic** (*Optional*, string): The topic to receive
lower target temperature commands on.
- All other options from :ref:`MQTT Component <config-mqtt-component>`.
.. code-block:: yaml
climate:
- platform: ...
visual:
min_temperature: 18
max_temperature: 25
temperature_step:
target_temperature: 0.5
current_temperature: 0.1
Climate Automation
------------------
@ -142,7 +192,7 @@ advanced stuff.
id(my_climate).preset
// Custom Preset, type: string
id(my_climate).custom_preset
- ``.make_call``: Control the climate device
@ -158,7 +208,7 @@ advanced stuff.
``climate.on_state`` Trigger
****************************
This trigger is activated each time the state of the climate device is updated
This trigger is activated each time the state of the climate device is updated
(for example, if the current temperature measurement or the mode set by the users changes).
.. code-block:: yaml
@ -169,42 +219,24 @@ This trigger is activated each time the state of the climate device is updated
on_state:
- logger.log: "State updated!"
MQTT options:
.. _climate-on_control_trigger:
- **action_state_topic** (*Optional*, string): The topic to publish
climate device action changes to.
- **current_temperature_state_topic** (*Optional*, string): The topic to publish
current temperature changes to.
- **fan_mode_state_topic** (*Optional*, string): The topic to publish
fan mode changes to.
- **fan_mode_command_topic** (*Optional*, string): The topic to receive
fan mode commands on.
- **mode_state_topic** (*Optional*, string): The topic to publish
climate device mode changes to.
- **mode_command_topic** (*Optional*, string): The topic to receive
climate device mode commands on.
- **preset_state_topic** (*Optional*, string): The topic to publish
preset changes to.
- **preset_command_topic** (*Optional*, string): The topic to receive
preset commands on.
- **swing_mode_state_topic** (*Optional*, string): The topic to publish
swing mode changes to.
- **swing_mode_command_topic** (*Optional*, string): The topic to receive
swing mode commands on.
- **target_temperature_state_topic** (*Optional*, string): The topic to publish
target temperature changes to.
- **target_temperature_command_topic** (*Optional*, string): The topic to receive
target temperature commands on.
- **target_temperature_high_state_topic** (*Optional*, string): The topic to publish
higher target temperature changes to.
- **target_temperature_high_command_topic** (*Optional*, string): The topic to receive
higher target temperature commands on.
- **target_temperature_low_state_topic** (*Optional*, string): The topic to publish
lower target temperature changes to.
- **target_temperature_low_command_topic** (*Optional*, string): The topic to receive
lower target temperature commands on.
- All other options from :ref:`MQTT Component <config-mqtt-component>`.
``climate.on_control`` Trigger
******************************
This trigger is activated each time a *control* input of the climate device
is updated via a ``ClimateCall`` (which includes changes coming in from Home
Assistant). That is, this trigger is activated for, for example, changes to
the mode, *but not* on temperature measurements. It will be invoked prior to
the ``on_state`` trigger, if both are defined.
.. code-block:: yaml
climate:
- platform: midea # or any other platform
# ...
on_control:
- logger.log: "Control input received; configuration updated!"
See Also
--------

88
components/kuntze.rst Normal file
View File

@ -0,0 +1,88 @@
Kuntze pool monitor
===================
.. seo::
:description: Instructions for setting up Kuntze pool monitor in ESPHome.
:image: kuntze.jpg
The ``kuntze`` component allows you to integrate the Kuntze water measurement
instrument in ESPHome. It uses :ref:`UART <uart>` (ModBUS) for communication.
Once configured you can use sensors as described below for your projects.
.. figure:: ../images/kuntze.jpg
:align: center
Kuntze Neon® Multi instrument
Overview
--------
Kuntze devices have an RS485 (ModBUS RTU) communication port. Please see the
Kuntze papers for the pinout of the RS485 connector on your unit. ModBUS line
has to be terminated properly (with a ``120Ω`` resistor), and since this is likely
your only unit connected to ESPHome, you should activate bus termination in the
Network menu (this component doesn't support multiple Kuntze devices on the same
bus). ModBUS address should remain at factory default value.
The device communicates at ``19200`` baud ``8E1``. To connect to ESPHome, an RS485
transceiver is needed. Choose a type which does not need a trigger to send and
receive data, for example:
.. figure:: ../images/rs485.jpg
The controller connects to the UART of the MCU. For ESP32 GPIO `16` to `TXD` and `17`
to RXD are the default ones but any other pins can be used as well. 3.3V to VCC and GND to GND.
.. warning::
If you are using the :doc:`logger` make sure you are not using the same pins for it or otherwise disable the UART
logging with the ``baud_rate: 0`` option.
Component
---------
A configured modbus component is optional. It will be automatically created.
.. code-block:: yaml
# Example configuration entry
uart:
- id: uart_bus
tx_pin: GPIO16
rx_pin: GPIO17
baud_rate: 19600
parity: EVEN
sensor:
- platform: kuntze
id: my_kuntze
ph:
id: ph
temperature:
id: temperature
Configuration variables:
- **ph**: Measured pH value
- **temperature**: Measured temperature value
- **dis1**: Measured DIS 1 value
- **dis2**: Measured DIS 2 value
- **redox**: Measured Redox value
- **ec**: Measured EC value
- **oci**: Measured OCI value
All sensors are *Optional* and support all other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ref:`uart`
- :doc:`logger`
- :ref:`Sensor <config-sensor>`
- `Kuntze manuals <https://www.kuntze.com/en/downloads-2/>`__
- `Communication protocol <https://www.kuntze.com/wp-content/uploads/2021/05/2019_Manual_Modbus-RTU_ENG.pdf>`__
- :ghedit:`Edit`

View File

@ -52,10 +52,17 @@ Configuration variables:
change the brightness and would have to toggle the light using the physical buttons.
- **color_temperature_datapoint** (*Optional*, int): The datapoint id number of the color
temperature value.
- **rgb_datapoint** (*Optional*, int): The datapoint id number of the RGB (red/green/blue) value.
If this is set then ESPHome will set the color using a 6 digit hex RGB value.
- **hsv_datapoint** (*Optional*, int): The datapoint id number of the HSV (hue/saturation/value) value.
If this is set then ESPHome will set the color using a 12 digit hex HSV value.
- **color_datapoint** (*Optional*, int): The datapoint id number of the color value.
If this is set, along with **color_type**, then ESPHome will set the color value formatted
based on the **color_type**.
- **color_type** (*Optional*, enum): The color type to use when setting the **color_datapoint**.
If this is set, along with **color_datapoint**, then ESPHome will use this value to format
the color sent to **color_datapoint**.
- ``rgb``: Use a 6 digit hex RGB value
- ``hsv``: Use a 12 digit hex HSV value
- ``rgbhsv``: Use a 14 digit hex RGBHSV value
- **min_value** (*Optional*, int): The lowest dimmer value allowed. My dimmer had a
minimum of 25 and wouldn't even accept anything lower, but this option is available if necessary.
Defaults to 0.

View File

@ -0,0 +1,58 @@
Absolute Humidity
=================
.. seo::
:description: Instructions for setting up absolute humidity calculation
:image: water-drop.svg
The ``absolute_humidity`` platform allows you to calculate absolute humidity from air temperature and relative humidity.
See the links at the bottom of the page for details on absolute humidity and the different saturated vapor pressure equations.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: absolute_humidity
name: Absolute Humidity
temperature: air_temperature
humidity: relative_humidity
# Use any temperature and relative humidity source, e.g. a BME280:
- platform: ...
temperature:
name: Temperature
id: air_temperature
humidity:
name: Relative Humidity
id: relative_humidity
Configuration variables:
------------------------
- **name** (**Required**, string): The name for the absolute humidity sensor.
- **temperature** (**Required**, :ref:`config-id`): The sensor that is used to measure the current temperature, in °C.
- **humidity** (**Required**, :ref:`config-id`): The sensor that is used to measure the current relative humidity, in %.
- **equation** (*Optional*): The saturated vapor pressure equation to use (see below).
- All other options from :ref:`Sensor <config-sensor>`.
Saturated vapor pressure equations
----------------------------------
There are several different equations for calculating saturated vapor pressure.
``Wobus`` is used by default, as it is notionally the most accurate, but any of the following can be used:
- ``Buck``: `Arden Buck equation <https://en.wikipedia.org/wiki/Arden_Buck_equation>`__
- ``Tetens``: `Tetens equation <https://en.wikipedia.org/wiki/Tetens_equation>`__
- ``Wobus``: `Wobus equation <https://wahiduddin.net/calc/density_altitude.htm>`__
See Also
--------
- :ref:`sensor-filters`
- :apiref:`absolute_humidity/absolute_humidity.h`
- `NOAA Discussion on Humidity <https://www.weather.gov/lmk/humidity>`__
- `Absolute humidity on Wikipedia <https://en.wikipedia.org/wiki/Humidity#Absolute_humidity>`__
- `How to calculate absolute humidity <https://www.environmentalbiophysics.org/chalk-talk-how-to-calculate-absolute-humidity/>`__
- `How to convert relative humidity to absolute humidity <https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/>`__
- :ghedit:`Edit`

View File

@ -58,6 +58,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :apiref:`aht10/aht10.h`
- `AHT10 Library <https://github.com/Thinary/AHT10>`__ by `Thinary Electronic <https://github.com/Thinary>`__
- `Unofficial Translated AHT10 Datasheet (en) <https://wiki.liutyi.info/download/attachments/30507639/Aosong_AHT10_en_draft_0c.pdf>`__

View File

@ -57,6 +57,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`dht12`
- :doc:`hdc1080`

View File

@ -0,0 +1,96 @@
AS7341 Spectral Color Sensor
============================
.. seo::
:description: Instructions for setting up AS7341 spectral color sensor.
:image: as7341.jpg
:keywords: AS7341
The ``as7341`` sensor platform allows you to use your AS7341 spectral color sensor
(`datasheet <https://ams.com/documents/20143/36005/AS7341_DS000504_3-00.pdf/5eca1f59-46e2-6fc5-daf5-d71ad90c9b2b>`__,
`Adafruit`_) with ESPHome. The :ref:`I²C Bus <i2c>` is required to be set up in
your configuration for this sensor to work.
.. figure:: images/as7341-full.jpg
:align: center
:width: 50.0%
AS7341 Spectral Color Sensor
.. _Adafruit: https://www.adafruit.com/product/4698
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: as7341
f1:
name: "415nm"
f2:
name: "445nm"
f3:
name: "480nm"
f4:
name: "515nm"
f5:
name: "555nm"
f6:
name: "590nm"
f7:
name: "630nm"
f8:
name: "680nm"
clear:
name: "Clear"
nir:
name: "NIR"
Configuration variables
-----------------------
- **f1** (*Optional*): The reading for the 415nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f2** (*Optional*): The reading for the 445nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f3** (*Optional*): The reading for the 480nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f4** (*Optional*): The reading for the 515nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f5** (*Optional*): The reading for the 555nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f6** (*Optional*): The reading for the 590nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f7** (*Optional*): The reading for the 630nm channel. All options from :ref:`Sensor <config-sensor>`.
- **f8** (*Optional*): The reading for the 680nm channel. All options from :ref:`Sensor <config-sensor>`.
- **clear** (*Optional*): The reading for the clear channel. All options from :ref:`Sensor <config-sensor>`.
- **nir** (*Optional*): The reading for the NIR (near-infrared) channel. All options from :ref:`Sensor <config-sensor>`.
- **gain** (*Optional*): The gain used by the device. A higher gain may be more suitable for lower-light environments. Must be one of:
- ``X0.5``
- ``X1``
- ``X2``
- ``X4``
- ``X8`` (*default*)
- ``X16``
- ``X32``
- ``X64``
- ``X128``
- ``X256``
- ``X512``
- **astep** (*Optional*): The number of integration steps. Default is ``599``. Must be between ``0`` and ``65534``.
- **atime** (*Optional*): The integration time per step in increments of 2.78µs. Default is ``29``. Must be between ``0`` and ``255``.
- All other options for I²C devices described at :ref:`I²C Bus <i2c>`.
Integration time
----------------
The integration time determines how long a channel measurement takes and depends on ``ATIME`` and ``ASTEP``. The formula for the total integration time is:
.. math::
\text{t} = \text{(ATIME + 1)} \times \text{(ASTEP + 1)} \times \text{2.78µS}
See Also
--------
- :ref:`sensor-filters`
- `Adafruit_AS7341 <https://github.com/adafruit/Adafruit_AS7341>`__
- `SparkFun_AS7341X_Arduino_Library <https://github.com/sparkfun/SparkFun_AS7341X_Arduino_Library>`__
- :apiref:`as7341/as7341.h`
- :ghedit:`Edit`

View File

@ -66,4 +66,5 @@ See Also
- `b-parasite on GitHub <https://github.com/rbaron/b-parasite>`__
- :doc:`/components/esp32_ble_tracker`
- :doc:`absolute_humidity`
- :ghedit:`Edit`

View File

@ -89,6 +89,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`bme680`
- :doc:`bmp085`
- :apiref:`bme280/bme280.h`

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -107,6 +107,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`bme280`
- :doc:`bmp085`
- :apiref:`bme680/bme680.h`

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -13,8 +13,8 @@ The ``bme680_bsec`` sensor platform allows you to use your BME680
(`datasheet <https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf>`__,
`Adafruit`_) temperature, pressure and humidity and gas sensors with ESPHome via the Bosch Sensortec Environmental Cluster (BSEC)
software library. The use of Bosch's proprietary algorithms provide an Index for Air Quality (IAQ) measurement derived from the
gas resistance sensor's response to specific Volatile Organic Compounds (VOC). The BSEC software also provides estimated values
for CO₂ and Breath Volatile Organic Compounds (b-VOC) using a correlation between VOC and CO₂ in a human's exhaled breath.
gas resistance sensor's response to specific Volatile Organic Compounds (VOC). The BSEC software also provides estimated values
for CO₂ and Breath Volatile Organic Compounds (b-VOC) using a correlation between VOC and CO₂ in a human's exhaled breath.
.. note::
@ -61,7 +61,7 @@ The :ref:`I²C <i2c>` is required to be set up in your configuration for this se
- platform: bme680_bsec
iaq_accuracy:
name: "BME680 IAQ Accuracy"
- platform: template
name: "BME680 IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
@ -93,7 +93,7 @@ The :ref:`I²C <i2c>` is required to be set up in your configuration for this se
Configuration variables:
- **address** (*Optional*, int): Manually specify the I^2C address of the sensor. Defaults to ``0x76``. Another address can be ``0x77``.
- **address** (*Optional*, int): Manually specify the I²C address of the sensor. Defaults to ``0x76``. Another address can be ``0x77``.
- **temperature_offset** (*Optional*, float): Temperature offset if device is in enclosure and reads too high. This value is subtracted
from the reading (e.g. if the sensor reads 5°C higher than expected, set this to ``5``) and also corrects the relative humidity readings. Defaults to ``0``.
@ -109,11 +109,15 @@ Configuration variables:
- **state_save_interval** (*Optional*, :ref:`config-time`): The minimum interval at which to save calibrated BSEC algorithm state to
flash so that calibration doesn't have to start from zero on device restart. Defaults to ``6h``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. Use this ID in the sensor section to refer to the correct BME680 if you have more than one device. This will also be used to refer to the calibrated BSEC algorithm state saved to flash.
Sensor
------
Configuration variables:
- **bme680_bsec_id** (*Optional*, :ref:`config-id`): Sets the ID of the bme680_bsec component to refer to. Useful when working with multiple devices.
- **temperature** (*Optional*): The information for the temperature sensor.
- **name** (**Required**, string): The name for the temperature sensor.
@ -172,6 +176,8 @@ Accuracy can be reported in text format.
Configuration variables:
- **bme680_bsec_id** (*Optional*, :ref:`config-id`): Sets the ID of the bme680_bsec component to refer to. Useful when working with multiple devices.
- **iaq_accuracy** (*Optional*): The information for the IAQ accuracy sensor. Shows: Stabilizing,
Uncertain, Calibrating, Calibrated.
@ -194,6 +200,13 @@ For each sensor, all other options from :ref:`Sensor <config-sensor>` and :ref:`
.. code-block:: yaml
bme680_bsec:
# id
# -----------
# Identifier for this component, useful when working with multiple devices.
# Must be unique, and can be used in the sensor sections to refer to the correct device.
# Default: auto-computed
id: bme680_internal
# i2c address
# -----------
# Common values are:
@ -233,6 +246,10 @@ For each sensor, all other options from :ref:`Sensor <config-sensor>` and :ref:`
sensor:
- platform: bme680_bsec
# ID of the bme680_bsec component to use for the next sensors.
# Useful when working with multiple devices
bme680_bsec_id: bme680_internal
temperature:
# Temperature in °C
name: "BME680 Temperature"
@ -282,11 +299,81 @@ For each sensor, all other options from :ref:`Sensor <config-sensor>` and :ref:`
name: "BME680 IAQ Accuracy"
Multiple sensors
----------------------
The following configuration shows how to set up multiple BME680 devices. They can be configured to use the same I²C bus or to use different busses, but remember that the BME680 can only be set to operate on I²C address ``0x76`` or ``0x77``. There is no limit on the number of BME680 devices that can be connected.
.. code-block:: yaml
# I2C bus for the BME680 devices
i2c:
- id: "i2cbus_bme"
sda: GPIO18
scl: GPIO19
scan: true
# BME680 devices using BSEC library
bme680_bsec:
- id: bme680_internal
i2c_id: "i2cbus_bme"
address: 0x76
- id: bme680_external
i2c_id: "i2cbus_bme"
address: 0x77
sensor:
# Sensors for the internal BME680 device
- platform: bme680_bsec
bme680_bsec_id: bme680_internal
temperature:
name: "IN_Temp"
pressure:
name: "IN_Press"
humidity:
name: "IN_RH"
iaq:
name: "IN_IAQ"
co2_equivalent:
name: "IN_CO2eq"
breath_voc_equivalent:
name: "IN_VOCeq"
# Sensors for the external BME680 device
- platform: bme680_bsec
bme680_bsec_id: bme680_external
temperature:
name: "OUT_Temperatura"
pressure:
name: "OUT_Pressione"
humidity:
name: "OUT_RH"
iaq:
name: "OUT_IAQ"
co2_equivalent:
name: "OUT_CO2eq"
breath_voc_equivalent:
name: "OUT_VOCeq"
text_sensor:
# Text sensor for the internal BME680 device
- platform: bme680_bsec
bme680_bsec_id: bme680_internal
iaq_accuracy:
name: "IN_IAQaccuracy"
# Text sensor for the external BME680 device
- platform: bme680_bsec
bme680_bsec_id: bme680_external
iaq_accuracy:
name: "OUT_IAQaccuracy"
Index for Air Quality (IAQ) Measurement
---------------------------------------
The measurements are expressed with an index scale ranging from 0 to 500. The index itself is deduced
from tests using ethanol gas, as well as important VOC in the exhaled breath of healthy humans.
The measurements are expressed with an index scale ranging from 0 to 500. The index itself is deduced
from tests using ethanol gas, as well as important VOC in the exhaled breath of healthy humans.
The VOC values themselves are derived from several publications on breath analysis studies. The BSEC
software library defines the levels as follows:
@ -307,7 +394,7 @@ software library defines the levels as follows:
+-----------+---------------------+
| > 351 | Extremely polluted |
+-----------+---------------------+
The selected b-VOC gasses are as follows:
+--------------------+----------------+
@ -336,8 +423,8 @@ The selected b-VOC gasses are as follows:
IAQ Accuracy and Calibration
----------------------------
The BSEC software automatically calibrates automatically in the background to provide consistent IAQ performance. The
calibration process considers the recent measurement history so that a value of 50 corresponds to a “typical good”
The BSEC software automatically calibrates automatically in the background to provide consistent IAQ performance. The
calibration process considers the recent measurement history so that a value of 50 corresponds to a “typical good”
level and a value of 200 to a “typical polluted” level. The IAQ Accuracy sensor will give one of the following values:
- ``Stabilizing``: The device has just started, and the sensor is stabilizing (this typically lasts 5 minutes)
@ -353,6 +440,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`bme680`
- :apiref:`bme680_bsec/bme680_bsec.h`
- `BME680 Datasheet <https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf>`__

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -81,6 +81,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht12`
- :doc:`hdc1080`
- :doc:`htu21d`

View File

@ -55,6 +55,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`hdc1080`
- :doc:`htu21d`

View File

@ -52,6 +52,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :apiref:`ENS210/ENS210.h`
- `ENS210 Library <https://github.com/maarten-pennings/ENS210>`__ by `Maarten Pennings <https://github.com/maarten-pennings>`__
- :ghedit:`Edit`

View File

@ -0,0 +1,47 @@
FS3000 Air Velocity Sensor
==========================
.. seo::
:description: Instructions for setting up the FS3000 Air Velocity sensor.
:image: fs3000.jpg
:keywords: FS3000
The FS3000 Air Velocity sensor allows you to use your FS3000
(`datasheet <https://www.renesas.com/kr/en/document/dst/fs3000-datasheet?r=1395551>`__,
`sparkfun <https://www.sparkfun.com/products/18377>`__)
sensors with ESPHome.
.. figure:: images/fs3000.jpg
:align: center
:width: 30.0%
FS3000 Air Velocity Sensor.
(Credit: `Sparkfun <https://www.sparkfun.com/products/18377>`__, image compressed)
.. _Sparkfun: https://www.sparkfun.com/products/15805
The FS3000 is a solid state air velocity sensor that communicates over over I²C. It is based on a MEMS thermopile sensor. There are two subtypes available: the FS3000-1005 measures air velocities between 0 meters/second and 7.23 meters/second, and the FS3000-1015 measures air velocities between 0 meters/second and 15 meters/second.
To use the sensor, first set up an :ref:`I²C Bus <i2c>` and connect the sensor to the specified pins.
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: fs3000
name: "Air Velocity"
model: 1005
update_interval: 60s
Configuration variables:
------------------------
- **model** (**Required**, string): Specify FS3000 model, can be ``1005`` or ``1015``.
- **address** (*Optional*, int): Manually specifiy the I²C address of the sensor. Defaults to ``0x28``.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``.
- All other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ghedit:`Edit`

View File

@ -80,6 +80,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`dht12`
- :doc:`htu21d`

View File

@ -52,6 +52,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`tee501`
- :doc:`ee895`
- :doc:`dht`

View File

@ -58,6 +58,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`dht12`
- :doc:`hdc1080`

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

View File

@ -115,6 +115,7 @@ See Also
- :doc:`/components/esp32_ble_tracker`
- :doc:`/components/sensor/index`
- :doc:`absolute_humidity`
- :apiref:`inkbird_ibsth1_mini/inkbird_ibsth1_mini.h`
- `OpenMQTTGateway <https://github.com/1technophile/OpenMQTTGateway>`__ by `@1technophile <https://github.com/1technophile>`__
- :ghedit:`Edit`

View File

@ -0,0 +1,41 @@
Internal Temperature Sensor
===========================
.. seo::
:description: Instructions for setting up the integrated temperature sensor of the ESP32 and RP2040.
:image: thermometer.svg
:keywords: esp32, rp2040, cpu, internal, temperature
The ``internal_temperature`` sensor platform allows you to use the integrated
temperature sensor of the ESP32 and RP2040 chip.
.. note::
Some ESP32 variants return a large amount of invalid temperature
values. Invalid measurements are ignored by this component.
.. figure:: images/internal_temperature-ui.png
:align: center
:width: 70.0%
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: internal_temperature
name: "Internal Temperature"
Configuration variables:
------------------------
- **name** (**Required**, string): The name of the temperature sensor.
- **update_interval** (*Optional*, :ref:`config-time`): The interval
to check the sensor. Defaults to ``60s``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- All other options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :ref:`sensor-filters`
- :ghedit:`Edit`

View File

@ -19,6 +19,9 @@ sensor sends out a BLE broadcast.
+ Mopeka Pro Check devices
+ Mopeka Pro Plus devices
+ Lippert Propane Tank Sensor, part number 2021130655
See :doc:`/components/sensor/mopeka_std_check` for original Mopeka Check sensors support.
(images/mopeka_pro_check.jpg)
(images/mopeka_pro_check_lippert.jpg)
@ -119,11 +122,12 @@ and the ``mopeka_ble`` component like so:
After uploading, the ESP32 will immediately try to scan for BLE devices. For Mopeka Pro
Check / Pro Plus / Lippert devices you must press and hold the green sync button for it to be identified.
Or alternativly set the configuration flag ``show_sensors_without_sync: true`` to see all devices.
For all sensors found the ``mopeka_ble`` component will print a message like this one:
.. code::
[20:43:26][I][mopeka_ble:040]: SENSOR FOUND: D3:75:F2:DC:16:91
[20:43:26][I][mopeka_ble:074]: MOPEKA PRO (NRF52) SENSOR FOUND: D3:75:F2:DC:16:91
Then just copy the address (``D3:75:F2:DC:16:91``) into a new
``sensor.mopeka_pro_check`` platform entry like in the configuration example at the top.

View File

@ -0,0 +1,150 @@
Mopeka Standard Check BLE Sensor
================================
.. seo::
:description: Instructions for setting up Mopeka Standard Check bluetooth-based sensors in ESPHome.
:image: mopeka_std_check.jpg
:keywords: Mopeka, Mopeka Standard Check, Mopeka Std Check, BLE, Bluetooth
The ``mopeka_std_check`` sensor platform lets you track the output of Mopeka
Standard 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 Standard Check LP BLE
device every time the sensor sends out a BLE broadcast.
.. warning::
This sensor component only supports the Mopeka Standard Check devices.
See :doc:`/components/sensor/mopeka_pro_check` for Mopeka Pro Check sensors support.
.. figure:: images/mopeka_std_check.jpg
:align: center
Mopeka Std Check LP over BLE.
.. code-block:: yaml
esp32_ble_tracker:
sensor:
# Example using 11kg 100% propane tank.
- platform: mopeka_std_check
mac_address: D3:75:F2:DC:16:91
tank_type: Europe_11kg
temperature:
name: "Propane test temp"
level:
name: "Propane test level"
distance:
name: "Propane test distance"
battery_level:
name: "Propane test battery level"
# Custom example - user defined empty / full points and 80% butane and 20% propane.
- platform: mopeka_std_check
mac_address: D3:75:F2:DC:16:91
tank_type: CUSTOM
custom_distance_full: 40cm
custom_distance_empty: 32mm
propane_butane_mix: 20%
temperature:
name: "Propane c test temp"
level:
name: "Propane c test level"
distance:
name: "Propane c test distance"
battery_level:
name: "Propane c test battery level"
Configuration variables:
------------------------
- **mac_address** (**Required**, MAC Address): The MAC address of the Mopeka
device.
- **tank_type** (**Required**): The tank type the sensor is measuring. See below.
- **custom_distance_full** (*Optional*): distance sensor will read when it should be
considered full (100%). This is only used when tank_type = CUSTOM
- **custom_distance_empty** (*Optional*): distance sensor will read when it should be
considered empty (0%). This is only used when tank_type = CUSTOM
- **propane_butane_mix** (*Optional*): Mixture of propane and butane.
- 100% - (*default*) 100% Propane
- 80% - 80% Propane and 20% Butane
- 20% - 20% Propane and 80% Butane
- 0% - 100% Butane
- **level** (*Optional*): The percentage of full for the tank sensor
- All options from :ref:`Sensor <config-sensor>`.
- **distance** (*Optional*): The raw distance/depth of the liquid for the sensor in mm.
- All options from :ref:`Sensor <config-sensor>`.
- **temperature** (*Optional*): The information for the temperature sensor.
This temperature is on the sensor and is not calibrated to ambient temperature.
- All options from :ref:`Sensor <config-sensor>`.
- **battery_level** (*Optional*): The information for the battery percentage
sensor. Sensor uses a standard CR2032 battery.
- All options from :ref:`Sensor <config-sensor>`.
Tank Types
----------
Currently supported Tank types are:
- ``NORTH_AMERICA_20LB_VERTICAL`` - 20 LB vertical tank
- ``NORTH_AMERICA_30LB_VERTICAL`` - 30 LB vertical tank
- ``NORTH_AMERICA_40LB_VERTICAL`` - 40 LB vertical tank
- ``EUROPE_6KG`` - 6kg vertical tank
- ``EUROPE_11KG`` - 11kg vertical tank
- ``EUROPE_14KG`` - 14kg vertical tank
- ``CUSTOM`` - Allows you to define your own full and empty points
Setting Up Devices
------------------
To set up Mopeka Standard Check 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:
.. code-block:: yaml
esp32_ble_tracker:
mopeka_ble:
After uploading, the ESP32 will immediately try to scan for BLE devices. For Mopeka Standard devices you must press and hold the green sync button for it to be identified.
Or alternativly set the configuration flag ``show_sensors_without_sync: true`` to see all devices.
For all sensors found the ``mopeka_ble`` component will print a message like this one:
.. code::
[20:43:26][I][mopeka_ble:056]: MOPEKA STD (CC2540) SENSOR FOUND: D3:75:F2:DC:16:91
Then just copy the address (``D3:75:F2:DC:16:91``) into a new
``sensor.mopeka_std_check`` platform entry like in the configuration example at the top.
.. note::
The ESPHome Mopeka Standard Check BLE integration listens passively to packets the Mopeka device sends by itself.
ESPHome therefore has no impact on the battery life of the device.
See Also
--------
- :doc:`/components/esp32_ble_tracker`
- :doc:`/components/sensor/index`
- :apiref:`mopeka_std_check/mopeka_std_check.h`
- :ghedit:`Edit`

View File

@ -42,6 +42,8 @@ to some pins on your board and the baud rate set to 9600.
name: "PZEM-003 Voltage"
power:
name: "PZEM-003 Power"
energy:
name: "PZEM-003 Energy"
update_interval: 60s
Configuration variables:
@ -53,11 +55,27 @@ Configuration variables:
:ref:`Sensor <config-sensor>`.
- **voltage** (*Optional*): Use the voltage value of the sensor in volts.
All options from :ref:`Sensor <config-sensor>`.
- **energy** (*Optional*): Use the energy value of the sensor in kWh.
All options from :ref:`Sensor <config-sensor>`.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the
sensor. Defaults to ``60s``.
- **address** (*Optional*, int): The address of the sensor if multiple sensors are attached to
the same UART bus. You will need to set the address of each device manually. Defaults to ``1``.
.. _pzemdc-reset_energy_action:
``pzemdc.reset_energy`` Action
******************************
This action resets the total energy value of the pzemdc device with the given ID when executed.
.. code-block:: yaml
on_...:
then:
- pzemdc.reset_energy: pzemdc_1
See Also
--------

View File

@ -184,6 +184,7 @@ See Also
- :doc:`/components/esp32_ble_tracker`
- :doc:`/components/sensor/index`
- :doc:`absolute_humidity`
- :apiref:`ruuvitag/ruuvitag.h`
- `Ruuvi <https://ruuvi.com>`__
- :ghedit:`Edit`

View File

@ -108,6 +108,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`dht12`
- :doc:`hdc1080`

View File

@ -186,6 +186,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`scd30`
- :apiref:`scd4x/scd4x.h`
- :ghedit:`Edit`

View File

@ -0,0 +1,36 @@
SEN21231 Person Sensor from Useful Sensors
==========================================
.. seo::
:description: Instructions for setting up a SEN21231 Person Sensor from Useful Sensors with ESPHome.
:image: description.svg
`Person Sensor (SEN21231) from Useful Sensors <https://usefulsensors.com/person-sensor>`__ has built in facial recognition that can detect how many people are facing the sensor and relative positions of the faces.
.. figure:: images/sen21231.png
:align: center
:width: 70.0%
Person Sensor
This sensor requires an :doc:`/components/i2c`. The I2C address is ``0x62``
.. code-block:: yaml
# Example configuration entry
sensor:
- platform: sen21231
id: person_sensor
Configuration variables:
------------------------
- All options from :ref:`Sensor <config-sensor>`.
See Also
--------
- :doc:`/components/sensor/index`
- :apiref:`sen21231/sen21231.h`
- :ghedit:`Edit`

View File

@ -208,6 +208,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`sds011`
- :doc:`pmsx003`
- :doc:`ccs811`

View File

@ -53,6 +53,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`dht12`
- :doc:`hdc1080`

View File

@ -67,5 +67,6 @@ See Also
- :doc:`/components/sensor/sht3xd`
- :doc:`/components/sensor/shtcx`
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :apiref:`sht4x/sht4x.h`
- :ghedit:`Edit`

View File

@ -56,6 +56,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`dht`
- :doc:`dht12`
- :doc:`hdc1080`

View File

@ -76,6 +76,7 @@ See Also
--------
- :ref:`sensor-filters`
- :doc:`absolute_humidity`
- :doc:`mhz19`
- `CO2mon-esp firmware <https://github.com/Anonym-tsk/co2mon-esp>`__ by `@anonym-tsk <https://github.com/Anonym-tsk>`__
- `Some information about hacking MT8060 <https://habr.com/ru/company/dadget/blog/394333/>`__

View File

@ -51,8 +51,9 @@ It reaches even further, however, offering several more advanced features, as we
:align: center
:width: 60.0%
Example Sprinkler Controller UI -- Note that this example leverages :ref:`number <config-number>` components
for setting run durations, repeat and multiplier values. More details below.
Example Sprinkler Controller UI -- Note that this example leverages :doc:`number </components/number/index>`
components for setting run durations, repeat and multiplier values.
:ref:`More details below. <sprinkler-controller-sprinkler_controller_numbers>`
.. code-block:: yaml
@ -105,29 +106,32 @@ Configuration variables:
the valves in reverse order (last-to-first as they appear in the controller's configuration). When
this switch is turned off or not provided, the controller will iterate through the valves first-to-last.
This switch will not appear in the front end if the controller is configured with only one valve.
- **standby_switch** (*Optional*, *string*): The name for the sprinkler controller's standby switch
as it will appear in the front end. When this switch is turned on, the controller *will not start any valves.*
**This can result in confusing/unexpected behavior if there is no visual indication of this condition!**
- **valve_open_delay** (*Optional*, :ref:`config-time`): The *minimum* delay in seconds that should be
inserted between (distribution) valve switching -- in other words, the amount of time that must elapse
between one valve switching off and the next one switching on. Useful for systems with valves which depend
on sufficient water pressure to close. May not be used with *valve_overlap*.
on sufficient water pressure to close. May not be used with ``valve_overlap``.
- **valve_overlap** (*Optional*, :ref:`config-time`): The amount of time in seconds that the current valve
and the next valve should run simultaneously as the next valve/zone starts up. This may help prevent pipes
from banging as valves close. May not be used with *valve_open_delay*.
from banging as valves close. May not be used with ``valve_open_delay``.
- **pump_switch_off_during_valve_open_delay** (*Optional*, boolean): If set to ``true``, the pump will be
switched off during the ``valve_open_delay`` interval; otherwise, it remains on. This may only be
specified when ``valve_open_delay`` is configured (see above). Defaults to ``false``.
- **pump_start_pump_delay** (*Optional*, :ref:`config-time`): The delay in seconds from when a distribution
valve is opened to when the associated pump is activated. Useful to ensure pressure does not build
up from running the pump when no distribution valves are open. May not be used with *pump_start_valve_delay*.
up from running the pump when no distribution valves are open. May not be used with ``pump_start_valve_delay``.
- **pump_start_valve_delay** (*Optional*, :ref:`config-time`): The delay in seconds from when a pump
is started to when the associated distribution valve is opened. Useful for systems where distribution
valves require sufficient pressure to fully/quickly close. May not be used with *pump_start_pump_delay*.
valves require sufficient pressure to fully/quickly close. May not be used with ``pump_start_pump_delay``.
- **pump_stop_pump_delay** (*Optional*, :ref:`config-time`): The delay in seconds from when a distribution
valve is closed to when the respective pump is deactivated. Useful for systems where distribution valves
require sufficient pressure to fully/quickly close. May not be used with *pump_stop_valve_delay*.
require sufficient pressure to fully/quickly close. May not be used with ``pump_stop_valve_delay``.
- **pump_stop_valve_delay** (*Optional*, :ref:`config-time`): The delay in seconds from when a pump is
deactivated to when the respective distribution valve is closed. Useful to ensure pressure does not build
up from running the pump when no distribution valves are open or to allow the main line out to distribution
valves to drain. May not be used with *pump_stop_pump_delay*.
valves to drain. May not be used with ``pump_stop_pump_delay``.
- **pump_pulse_duration** (*Optional*, :ref:`config-time`): The *minimum* length of the pulse generated to
operate a pump in milliseconds. *Required* when one or more latching pumps is configured. Note that the *exact*
length of the pulse is determined by the frequency of the main application loop (as are other ``delay`` timers
@ -140,7 +144,18 @@ Configuration variables:
used in ESPHome). Typically this is expected to provide a resolution of approximately 16 milliseconds, however
this may vary somewhat depending on your exact configuration. Regardless, it should provide more-than-sufficient
precision to operate any such valve.
- **repeat** (*Optional*, int): The number of times a full cycle should be repeated. Defaults to 0.
- **multiplier_number** (*Optional*, *string*): The name of the :doc:`number </components/number/index>` component that
should be presented to the front end (Home Assistant) to enable control of the sprinkler controller's ``multiplier``
value. See :ref:`sprinkler-controller-sprinkler_controller_numbers` below for more detail.
- **repeat_number** (*Optional*, *string*): The name of the :doc:`number </components/number/index>` component that
should be presented to the front end (Home Assistant) to enable control of the sprinkler controller's ``repeat``
value. May not be used with ``repeat``. See :ref:`sprinkler-controller-sprinkler_controller_numbers` below for more
detail.
- **repeat** (*Optional*, int): The number of times a full cycle should be repeated. Defaults to 0. May not be used
with ``repeat_number``.
- **next_prev_ignore_disabled** (*Optional*, boolean): Set to ``true`` to cause
:ref:`sprinkler-controller-action_next_valve` and :ref:`sprinkler-controller-action_previous_valve` to skip
over valves that are not enabled. Defaults to ``false``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. While optional,
this is necessary to identify the controller instance (particularly in cases where more than one is
defined) when calling controller actions (see below) such as ``start_full_cycle`` or ``shutdown``.
@ -173,10 +188,16 @@ Configuration variables:
would *switch on* the respective pump/valve. *It is not recommended to expose this switch to the front end; please
see* :ref:`sprinkler-controller-an_important_note_about_gpio_switches_and_control` *below for more detail.*
May not be specified with *pump_switch_id*.
- **run_duration** (**Required**, :ref:`config-time`): The duration in seconds this valve should
remain on/open after it is activated. When a given valve is activated, the controller's multiplier value
is multiplied by this value to determine the actual run duration for the valve, thus allowing the run
duration for all valves/zones to be proportionally increased or decreased as desired.
- **run_duration_number** (*Optional*, *string*): The name of the :doc:`number </components/number/index>` component
that should be presented to the front end (Home Assistant) to enable control of the valve's ``run_duration`` value.
May not be used with ``run_duration``. See :ref:`sprinkler-controller-sprinkler_controller_numbers` below for more
detail. **Pro tip:** Want times in minutes? Add ``unit_of_measurement: min`` to the number configuration. See
:ref:`sprinkler-controller-sprinkler_controller_numbers` for more detail.
- **run_duration** (*Optional*, :ref:`config-time`): Required when ``run_duration_number`` is not provided. The
duration in seconds this valve should remain on/open after it is activated. When a given valve is activated, the
controller's multiplier value is multiplied by this value to determine the actual run duration for the valve, thus
allowing the run duration for all valves/zones to be proportionally increased or decreased as desired. May not be
used with ``run_duration_number``.
- **valve_switch_id** (**Required**, :ref:`Switch <config-switch>`): This is the :ref:`switch <config-switch>`
component to be used to control the valve that operates the given section or zone of the sprinkler
system. Typically this would be a :doc:`GPIO switch <switch/gpio>` wired to control a relay
@ -213,7 +234,7 @@ off, **not** the :doc:`GPIO switch <switch/gpio>` the zone is configured with.
Keep in mind that a :doc:`GPIO switch <switch/gpio>` directly controls the state of the GPIO pin it is associated
with. While it's technically feasible to "override" this behavior, it might not always be desirable. For example,
if you *wanted* to control the state of the switch/pin manually during testing of your system/configuration, this
would make that impossible (or at least more difficult than necessary), presenting other complications. Ultimately,
would make doing so impossible (or at least more difficult than necessary), presenting other complications. Ultimately,
flexibility is key, as we've learned from any number of conversations on the ESPHome Discord server.
As mentioned in the introduction, the sprinkler controller automates control of the :doc:`GPIO switches <switch/gpio>`
@ -295,11 +316,11 @@ See :ref:`sprinkler-controller-sprinkler_controller_queue` section below for mor
``sprinkler.start_single_valve`` action
***************************************
Starts a single valve. This disables the controller's "auto-advance" and queue features so that
only this valve/zone will run. The valve will remain on for its configured ``run_duration``
multiplied by the controller's multiplier value. *Note that this action ignores whether the valve
is enabled; that is, when called, the specified valve will always run.* Valves are numbered in the
order they appear in the sprinkler controller's configuration starting at zero (0).
Starts a single valve. This disables the controller's "auto-advance" and queue features so that only this valve/zone
will run. The valve will remain on for the specified duration or (if ``run_duration`` is not specified or is zero) for
its configured ``run_duration`` multiplied by the controller's multiplier value. *Note that this action ignores whether
the valve is enabled; that is, when called, the specified valve will always run.* Valves are numbered in the order they
appear in the sprinkler controller's configuration starting at zero (0).
.. code-block:: yaml
@ -308,14 +329,14 @@ order they appear in the sprinkler controller's configuration starting at zero (
- sprinkler.start_single_valve:
id: sprinkler_ctrlr
valve_number: 0
run_duration: 600s # optional
.. _sprinkler-controller-action_shutdown:
``sprinkler.shutdown`` action
*****************************
Immediately (begins to) turns off all valves, effectively shutting down the system, respecting any
configured pump or valve stop delays.
Initiates a shutdown of all valves/the system, respecting any configured pump or valve stop delays.
.. code-block:: yaml
@ -330,7 +351,8 @@ configured pump or valve stop delays.
Advances to the next valve (numerically). If ``manual_selection_delay`` is configured, the controller
will wait before activating the selected valve. If no valve is active, the first valve (as they appear
in the controller's configuration) will be started.
in the controller's configuration) will be started. Setting ``next_prev_ignore_disabled`` to ``true``
will cause this action to skip valves that are not enabled via their valve enable switch (see above).
.. code-block:: yaml
@ -345,7 +367,8 @@ in the controller's configuration) will be started.
Advances to the previous valve (numerically). If ``manual_selection_delay`` is configured, the controller
will wait before activating the selected valve. If no valve is active, the last valve (as they appear in
the controller's configuration) will be started.
the controller's configuration) will be started. Setting ``next_prev_ignore_disabled`` to ``true`` will
cause this action to skip valves that are not enabled via their valve enable switch (see above).
.. code-block:: yaml
@ -438,8 +461,10 @@ section below for more detail and examples.
***********************************
Sets the multiplier value used to proportionally increase or decrease the run duration for all valves/zones.
When a given valve is activated, this value is multiplied by the valve's run duration (see below) to
determine the valve's actual run duration.
When a given valve is activated, this value is multiplied by the valve's run duration (see below) to determine the
valve's actual run duration. *Note that a multiplier value of zero is allowed; if the multiplier value is zero, the
sprinkler controller will not start any valves.* **This can result in confusing/unexpected behavior if a visual
indication of this condition is not available!**
.. code-block:: yaml
@ -466,6 +491,30 @@ of 1, the initial cycle will run, then the repeat cycle will run, resulting in a
id: sprinkler_ctrlr
repeat: 2 # would run three cycles
.. _sprinkler-controller-action_set_divider:
``sprinkler.set_divider`` action
********************************
The divider value sets both the multiplier and repeat values as follows:
- The multiplier value is set to the value of 1 / ``divider``
- The repeat value is set to ``divider`` - 1
As an example, given a divider value of 4, the multiplier would be set to 0.25 and the repeat value
would be set to 3.
This can be useful for dividing the run duration for each valve into multiple shorter cycles, therefore
avoiding run-off by allowing the ground more time to absorb the water.
.. code-block:: yaml
on_...:
then:
- sprinkler.set_divider:
id: sprinkler_ctrlr
divider: 2
.. _sprinkler-controller-action_set_valve_run_duration:
``sprinkler.set_valve_run_duration`` action
@ -485,8 +534,7 @@ by the multiplier value (see above) to determine the valve's actual run duration
.. note::
- The ``next_valve``, ``previous_valve`` and ``start_single_valve`` actions ignore whether a valve
is enabled via its enable switch.
- The ``start_single_valve`` action ignores whether a valve is enabled via its enable switch.
- The ``next_valve`` and ``previous_valve`` actions may not appear to respond immediately if either
``manual_selection_delay`` or any of the various delay mechanisms described in the
:ref:`sprinkler-controller-pump_and_distribution_valve_coordination` section below are configured.
@ -636,19 +684,21 @@ This example illustrates a complete, simple three-valve system with no pump/upst
main_switch: "Lawn Sprinklers"
auto_advance_switch: "Lawn Sprinklers Auto Advance"
reverse_switch: "Lawn Sprinklers Reverse"
multiplier_number: "Lawn Sprinkler Multiplier"
repeat_number: "Lawn Sprinkler Repeat"
valve_overlap: 5s
valves:
- valve_switch: "Front Lawn"
enable_switch: "Enable Front Lawn"
run_duration: 900s
run_duration_number: "Front Yard Run Duration"
valve_switch_id: lawn_sprinkler_valve_sw0
- valve_switch: "Side Lawn"
enable_switch: "Enable Side Lawn"
run_duration: 900s
run_duration_number: "Front Yard Run Duration"
valve_switch_id: lawn_sprinkler_valve_sw1
- valve_switch: "Back Lawn"
enable_switch: "Enable Back Lawn"
run_duration: 900s
run_duration_number: "Front Yard Run Duration"
valve_switch_id: lawn_sprinkler_valve_sw2
switch:
@ -853,12 +903,20 @@ valves, each of which are shared between the two controllers:
- valve_switch: "Front Garden"
enable_switch: "Enable Front Garden"
pump_switch_id: sprinkler_pump_sw0
run_duration: 900s
run_duration_number:
id: garden_sprinkler_ctrlr_front_run_duration
name: "Front Garden Run Duration"
initial_value: 10
unit_of_measurement: min
valve_switch_id: garden_sprinkler_valve_sw0
- valve_switch: "Back Garden"
enable_switch: "Enable Back Garden"
pump_switch_id: sprinkler_pump_sw1
run_duration: 900s
run_duration_number:
id: garden_sprinkler_ctrlr_back_run_duration
name: "Back Garden Run Duration"
initial_value: 10
unit_of_measurement: min
valve_switch_id: garden_sprinkler_valve_sw1
switch:
@ -891,6 +949,59 @@ valves, each of which are shared between the two controllers:
communicate to ensure any given pump is activated and deactivated only as necessary, even when
the controllers are operating simultaneously.
.. _sprinkler-controller-sprinkler_controller_numbers:
Using the Sprinkler Controller's Numbers
****************************************
The sprinkler controller can leverage ESPHome's/Home Assistant's :doc:`number </components/number/index>` component to
make valve run durations easily adjustable from the front end (Home Assistant).
.. code-block:: yaml
sprinkler:
- id: lawn_sprinkler_ctrlr
multiplier_number: "Lawn Sprinkler Multiplier"
repeat_number: "Lawn Sprinkler Repeat"
...
An added benefit of using :doc:`number </components/number/index>` components is that modified valve run durations,
multiplier and repeat values can persist across resets/reboots of the ESP device. If this is your desired behavior, you
should configure the :doc:`number </components/number/index>` components within your sprinkler controller configuration.
The sprinkler controller's implementation of the :doc:`number </components/number/index>` component is based on
ESPHome's :doc:`/components/number/index`, supporting all of its :ref:`configuration variables <config-number>` in
addition to a subset of the :doc:`Template Number Component's </components/number/template>` configuration variables,
including:
- ``initial_value`` (Defaults to 900 for valves, 1 for multiplier, 0 for repeat)
- ``max_value`` (Defaults to 86400 for valves, 10 for multiplier and repeat)
- ``min_value`` (Defaults to 1 for valves, 0 for multiplier and repeat)
- ``step`` (Defaults to 1 for valves and repeat, 0.1 for multiplier)
- ``restore_value`` (Defaults to ``true``; set to ``false`` to always restore ``initial_value`` at boot)
- ``set_action``
- ``unit_of_measurement`` (For run durations only; defaults to ``s`` for seconds or specify ``min`` for minutes)
Here's a brief example:
.. code-block:: yaml
sprinkler:
- id: lawn_sprinkler_ctrlr
main_switch: "Lawn Sprinklers"
...
multiplier_number:
id: controller_multiplier_number
name: "Lawn Sprinkler Multiplier"
initial_value: 1.5
min_value: 0.1
max_value: 5
set_action:
- lambda: "some_function();"
...
.. _sprinkler-controller-sprinkler_controller_extending_switches:
Extending the Sprinkler Controller's Switches
*********************************************
@ -970,30 +1081,6 @@ queue entry will be picked up *before* the next valve that would run as a part o
behavior cannot be changed. It should also be noted that the queue has a hard-coded limit of 100 entries to limit
memory use.
Additional Tricks
*****************
Beyond what is shown in the configuration examples above, other ESPHome elements may be called into
play to help build out an extensive interface for the controller in the front end (Home Assistant).
For example, the :ref:`number <config-number>` component may be used to set valve run durations or
the controller's multiplier value:
.. code-block:: yaml
# Example configuration to set multiplier via number
number:
- platform: template
id: sprinkler_ctrlr_multiplier
name: "Sprinkler Controller Multiplier"
min_value: 0.1
max_value: 10.0
step: 0.1
lambda: "return id(lawn_sprinkler_ctrlr).multiplier();"
set_action:
- sprinkler.set_multiplier:
id: lawn_sprinkler_ctrlr
multiplier: !lambda 'return x;'
Expose Sprinkler Controller Actions via user-API
************************************************
@ -1032,6 +1119,168 @@ and/or trigger sprinkler controller actions using automations.
then:
- sprinkler.shutdown: lawn_sprinkler_ctrlr
.. _sprinkler-controller-sprinkler_controller_understanding_state:
Understanding the Sprinkler Controller's State
----------------------------------------------
A number of people have asked about how to determine the sprinkler controller's state. This section aims to outline how
to use the sprinkler controller's :apiref:`API <sprinkler/sprinkler.h>` to determine what it is doing, generally with
the goal of indicating this on some form of :doc:`display </components/display/index>` hardware. Note that this
discussion largely revolves around C++ code (as is used in ESPHome lambdas).
Many of the methods used to determine the sprinkler controller's state return a type of value known as an ``optional``.
If you are curious, a general reference for the ``optional`` type may be found
`here <https://en.cppreference.com/w/cpp/utility/optional>`__, but what is important for now is:
- The ``optional`` type *may* or *may not* contain a value
- The method ``has_value()`` is used to determine if a value is present. For example:
``id(lawn_sprinkler_ctrlr).active_valve().has_value()``
- The method ``value()`` is used to determine the value, *if* it is determined that a value is present. For example:
``auto running_valve = id(lawn_sprinkler_ctrlr).active_valve().value()``
- The ``optional`` type can contain a value of any C++ type (``bool``, ``int``, ``float``, etc.) (In C++ terms, it is a
template.)
The examples that follow illustrate use of the the sprinkler controller's methods within a
:doc:`display </components/display/index>` lambda. The examples are intended to illustrate a pattern and (for sake of
brevity) *are not complete*; at very least you'll need to fill out the :doc:`display </components/display/index>`
component's specific configuration details before you can use them.
With these points in mind, let's discuss some of the methods which indicate the state of the sprinkler controller.
We'll approach this from the angle of *"how do I..."*
.. _sprinkler-controller-sprinkler_controller_understanding_state_how_do_i:
How Do I...
***********
- **...determine if the sprinkler controller is running?**
Use the method ``optional<size_t> active_valve()`` to check if there is an active valve. If the ``optional`` returned
``has_value()``, the sprinkler controller is running and you may use the ``value()`` method to check which specific
valve is active.
*Example:*
.. code-block:: c++
display:
- platform: ...
# ...display configuration...
lambda: |-
if (id(lawn_sprinkler_ctrlr).active_valve().has_value()) {
// the controller is running, get the active valve into running_valve and print it
auto running_valve = id(lawn_sprinkler_ctrlr).active_valve().value();
it.printf(0, 0, "Valve %u active", running_valve);
} else {
// the controller is NOT running
it.print(0, 0, "Idle");
}
- **...determine if the sprinkler controller is paused and, if so, which valve is paused?**
Use the method ``optional<size_t> paused_valve()`` to check if there is a paused valve. If the ``optional`` returned
``has_value()``, the sprinkler controller is paused and you may use the ``value()`` method to check which specific
valve is paused. In general, this follows the same pattern as the
:ref:`active_valve() example above <sprinkler-controller-sprinkler_controller_understanding_state_how_do_i>`.
- **...determine the sprinkler controller's current mode?**
If by this you mean, "is auto-advance/the queue/reverse/standby enabled?", you are in the right spot. Methods exist
for just this purpose:
- ``bool auto_advance()``
- ``bool queue_enabled()``
- ``bool reverse()``
- ``bool standby()``
Each will return ``true`` if the respective "mode" is enabled.
*Examples:*
.. code-block:: c++
display:
- platform: ...
# ...display configuration...
lambda: |-
if (id(lawn_sprinkler_ctrlr).auto_advance()) {
// auto-advance is enabled
it.print(0, 0, "Auto-advance enabled");
} else {
// auto-advance is NOT enabled
it.print(0, 0, "Auto-advance disabled");
}
if (id(lawn_sprinkler_ctrlr).queue_enabled()) {
// queue is enabled
it.print(0, 10, "Queue enabled");
} else {
// queue is NOT enabled
it.print(0, 10, "Queue disabled");
}
- **...determine the sprinkler controller's multiplier/repeat values?**
Methods of interest in this case are:
- ``float multiplier()``
- ``optional<uint32_t> repeat()``
- ``optional<uint32_t> repeat_count()``
Note again that each of the ``repeat`` methods returns an ``optional`` type; if the ``optional`` returned
``has_value()``, repeating is enabled and you can get the repeat target (``repeat()``) or current repeat
count (``repeat_count()``) with ``optional``'s ``value()`` method.
The ``multiplier()`` method returns a ``float`` type and, as such, it always has a value.
*Examples:*
.. code-block:: c++
display:
- platform: ...
# ...display configuration...
lambda: |-
it.printf(0, 0, "Multiplier: %f", id(lawn_sprinkler_ctrlr).multiplier());
if (id(lawn_sprinkler_ctrlr).repeat().has_value()) {
// the controller is repeating, print the repeat target value
it.printf(0, 10, "Repeat %u times", id(lawn_sprinkler_ctrlr).repeat().value());
}
- **...determine how much time is left/required?**
Several methods are available for this purpose:
- ``uint32_t total_cycle_time_all_valves()``
- ``uint32_t total_cycle_time_enabled_valves()``
- ``uint32_t total_cycle_time_enabled_incomplete_valves()``
- ``uint32_t total_queue_time()``
- ``optional<uint32_t> time_remaining_active_valve()``
- ``optional<uint32_t> time_remaining_current_operation()``
Note that, as with several of the earlier examples, the ``time_remaining_...`` methods each return an ``optional``
type. If the ``optional`` returned ``has_value()``, a valve is active/running; if it does not ``has_value()``, no
valve is active, meaning the controller is idle.
*Example:*
.. code-block:: c++
display:
- platform: ...
# ...display configuration...
lambda: |-
if (id(lawn_sprinkler_ctrlr).time_remaining_active_valve().has_value()) {
// the controller is running, print the number of seconds remaining
it.printf(0, 0, "Time left: %u sec.", id(lawn_sprinkler_ctrlr).time_remaining_active_valve().value());
} else {
// the controller is NOT running
it.print(0, 0, "Idle");
}
See Also
--------

View File

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

View File

@ -42,18 +42,10 @@ After validating the sensor is working, we can proceed and add some formulas.
update_interval: 15s
icon: 'mdi:signal'
unit_of_measurement: 'm'
- platform: template
- platform: absolute_humidity
name: "Absolute Humidity"
lambda: |-
const float mw = 18.01534; // molar mass of water g/mol
const float r = 8.31447215; // Universal gas constant J/mol/K
return (6.112 * powf(2.718281828, (17.67 * id(bme280_temperature).state) /
(id(bme280_temperature).state + 243.5)) * id(bme280_humidity).state * mw) /
((273.15 + id(bme280_temperature).state) * r); // in grams/m^3
accuracy_decimals: 2
update_interval: 15s
icon: 'mdi:water'
unit_of_measurement: 'g/m³'
temperature: bme280_temperature
humidity: bme280_humidity
- platform: template
name: "Dew Point"
lambda: |-
@ -73,7 +65,7 @@ The variable ``STANDARD_SEA_LEVEL_PRESSURE`` (in hPa), should be filled in for y
The formula derived from `here <https://github.com/finitespace/BME280/blob/master/src/EnvironmentCalculations.cpp>`__,
converts the currently measured pressure to the altitudes in meters including temperature compensation.
The lambda in the second :doc:`/components/sensor/template` defines two physical constants and
The second block uses the :doc:`/components/sensor/absolute_humidity` component which
converts the currently measured temperature and relative humidity to absolute humidity (grams/m^3).
.. note::
@ -120,13 +112,13 @@ Calculating the sea level pressure with a statically mounted sensor can be used
Formula explanation
-------------------
- `Relative humidity calculations <https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/>`__
- `Altitude calculation <https://en.wikipedia.org/wiki/Atmospheric_pressure#Altitude_variation>`__
- `Dew Point calculation <https://carnotcycle.wordpress.com/2017/08/01/compute-dewpoint-temperature-from-rh-t/>`__
See Also
--------
- :doc:`/components/sensor/absolute_humidity`
- :doc:`/components/sensor/template`
- :doc:`/components/sensor/bme280`
- :ghedit:`Edit`

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -379,7 +379,8 @@ All Actions
:ref:`sprinkler.pause <sprinkler-controller-action_pause>` / :ref:`sprinkler.resume <sprinkler-controller-action_resume>` /
:ref:`sprinkler.resume_or_start_full_cycle <sprinkler-controller-action_resume_or_start_full_cycle>` / :ref:`sprinkler.queue_valve <sprinkler-controller-action_queue_valve>` /
:ref:`sprinkler.clear_queued_valves <sprinkler-controller-action_clear_queued_valves>` / :ref:`sprinkler.set_multiplier <sprinkler-controller-action_set_multiplier>` /
:ref:`sprinkler.set_repeat <sprinkler-controller-action_set_repeat>` / :ref:`sprinkler.set_valve_run_duration <sprinkler-controller-action_set_valve_run_duration>`
:ref:`sprinkler.set_repeat <sprinkler-controller-action_set_repeat>` / :ref:`sprinkler.set_divider <sprinkler-controller-action_set_divider>` /
:ref:`sprinkler.set_valve_run_duration <sprinkler-controller-action_set_valve_run_duration>`
- :ref:`globals.set <globals-set_action>`
- :ref:`remote_transmitter.transmit_* <remote_transmitter-transmit_action>`
- :ref:`climate.control <climate-control_action>`

View File

@ -52,6 +52,7 @@ Contributors
- `Alex (@alex-richards) <https://github.com/alex-richards>`__
- `Alexander Leisentritt (@Alex9779) <https://github.com/Alex9779>`__
- `Alex Barcelo (@alexbarcelo) <https://github.com/alexbarcelo>`__
- `AlexCPU (@AlexCPU) <https://github.com/AlexCPU>`__
- `Alexandre Danault (@AlexDanault) <https://github.com/AlexDanault>`__
- `Alex Iribarren (@alexiri) <https://github.com/alexiri>`__
- `Alex Mekkering (@AlexMekkering) <https://github.com/AlexMekkering>`__
@ -74,6 +75,7 @@ Contributors
- `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>`__
- `Antonio Fiol (@antonio-fiol) <https://github.com/antonio-fiol>`__
- `Adriaan Peeters (@apeeters) <https://github.com/apeeters>`__
- `apendley (@apendley) <https://github.com/apendley>`__
@ -90,6 +92,7 @@ Contributors
- `Pavel Pletenev (@ASMfreaK) <https://github.com/ASMfreaK>`__
- `Andreas Soehlke (@asoehlke) <https://github.com/asoehlke>`__
- `Mike Dunston (@atanisoft) <https://github.com/atanisoft>`__
- `Alexander Turlov (@aturlov) <https://github.com/aturlov>`__
- `AustinMorris (@AustinMorris) <https://github.com/AustinMorris>`__
- `Avirsaam (@Avirsaam) <https://github.com/Avirsaam>`__
- `Arsène von Wyss (@avonwyss) <https://github.com/avonwyss>`__
@ -150,7 +153,6 @@ Contributors
- `Carlos Ruiz (@CarlosRDomin) <https://github.com/CarlosRDomin>`__
- `carstenschroeder (@carstenschroeder) <https://github.com/carstenschroeder>`__
- `Valentin Ochs (@Cat-Ion) <https://github.com/Cat-Ion>`__
- `Stroe Andrei Catalin (@catalin2402) <https://github.com/catalin2402>`__
- `cbialobos (@cbialobos) <https://github.com/cbialobos>`__
- `Ciprian Constantinescu (@cciprian5) <https://github.com/cciprian5>`__
- `Cellie (@CelliesProjects) <https://github.com/CelliesProjects>`__
@ -199,6 +201,7 @@ Contributors
- `Daniel Schramm (@danielschramm) <https://github.com/danielschramm>`__
- `Chris (@darthsebulba04) <https://github.com/darthsebulba04>`__
- `Dan Gentry (@dashdrum) <https://github.com/dashdrum>`__
- `Aliasghar Dashkhaneh (@dashkhaneh) <https://github.com/dashkhaneh>`__
- `Anthony Uk (@dataway) <https://github.com/dataway>`__
- `Dav-id (@dav-id-org) <https://github.com/dav-id-org>`__
- `DAVe3283 (@DAVe3283) <https://github.com/DAVe3283>`__
@ -225,7 +228,6 @@ Contributors
- `Davide Depau (@depau) <https://github.com/depau>`__
- `dependabot[bot] (@dependabot[bot]) <https://github.com/dependabot[bot]>`__
- `Joeri Colman (@depuits) <https://github.com/depuits>`__
- `Stephan Martin (@designer2k2) <https://github.com/designer2k2>`__
- `Destix (@Destix) <https://github.com/Destix>`__
- `Deun Lee (@deunlee) <https://github.com/deunlee>`__
- `Develo (@devyte) <https://github.com/devyte>`__
@ -326,7 +328,6 @@ Contributors
- `Franck Nijhof (@frenck) <https://github.com/frenck>`__
- `frippe75 (@frippe75) <https://github.com/frippe75>`__
- `Fritz Mueller (@fritzm) <https://github.com/fritzm>`__
- `Marc Egli (@frog32) <https://github.com/frog32>`__
- `Florian Trück (@ftrueck) <https://github.com/ftrueck>`__
- `functionpointer (@functionpointer) <https://github.com/functionpointer>`__
- `mr G1K (@G1K) <https://github.com/G1K>`__
@ -342,6 +343,7 @@ Contributors
- `Gerard (@gerard33) <https://github.com/gerard33>`__
- `Giampiero Baggiani (@giampiero7) <https://github.com/giampiero7>`__
- `Giovanni (@Gio-dot) <https://github.com/Gio-dot>`__
- `GitforZhangXL (@GitforZhangXL) <https://github.com/GitforZhangXL>`__
- `github-actions[bot] (@github-actions[bot]) <https://github.com/github-actions[bot]>`__
- `gitolicious (@gitolicious) <https://github.com/gitolicious>`__
- `The Gitter Badger (@gitter-badger) <https://github.com/gitter-badger>`__
@ -411,6 +413,7 @@ Contributors
- `Ivan Shvedunov (@ivan4th) <https://github.com/ivan4th>`__
- `Ivan Kravets (@ivankravets) <https://github.com/ivankravets>`__
- `Ivo-tje (@Ivo-tje) <https://github.com/Ivo-tje>`__
- `Fredrik Gustafsson (@jagheterfredrik) <https://github.com/jagheterfredrik>`__
- `Jan Harkes (@jaharkes) <https://github.com/jaharkes>`__
- `Jakob Reiter (@jakommo) <https://github.com/jakommo>`__
- `James Braid (@jamesbraid) <https://github.com/jamesbraid>`__
@ -489,6 +492,7 @@ Contributors
- `Harald Nagel (@k7hpn) <https://github.com/k7hpn>`__
- `kaegi (@kaegi) <https://github.com/kaegi>`__
- `kahrendt (@kahrendt) <https://github.com/kahrendt>`__
- `Kamahat (@kamahat) <https://github.com/kamahat>`__
- `Karol Zlot (@karolzlot) <https://github.com/karolzlot>`__
- `Kattni (@kattni) <https://github.com/kattni>`__
- `Krasimir Nedelchev (@kaykayehnn) <https://github.com/kaykayehnn>`__
@ -498,6 +502,7 @@ Contributors
- `Ken Piper (@Kealper) <https://github.com/Kealper>`__
- `Robert Kiss (@kepten) <https://github.com/kepten>`__
- `Kevin O'Rourke (@kevinior) <https://github.com/kevinior>`__
- `Kai Gerken (@KG3RK3N) <https://github.com/KG3RK3N>`__
- `Khoi Hoang (@khoih-prog) <https://github.com/khoih-prog>`__
- `Ed (@kixtarter) <https://github.com/kixtarter>`__
- `Kurt Kellner (@kkellner) <https://github.com/kkellner>`__
@ -542,7 +547,6 @@ Contributors
- `Lode Vermeiren (@lodev) <https://github.com/lodev>`__
- `Barry Loong (@loongyh) <https://github.com/loongyh>`__
- `LuBeDa (@lubeda) <https://github.com/lubeda>`__
- `Lukáš Maňas (@LucasCZE) <https://github.com/LucasCZE>`__
- `Joakim Sørensen (@ludeeus) <https://github.com/ludeeus>`__
- `ludrao (@ludrao) <https://github.com/ludrao>`__
- `Lukas Klass (@LukasK13) <https://github.com/LukasK13>`__
@ -556,9 +560,7 @@ Contributors
- `Marc-Antoine Courteau (@macourteau) <https://github.com/macourteau>`__
- `Massimiliano Ravelli (@madron) <https://github.com/madron>`__
- `Alexandre-Jacques St-Jacques (@Maelstrom96) <https://github.com/Maelstrom96>`__
- `magnus (@magnusja) <https://github.com/magnusja>`__
- `Magnus Nordlander (@magnusnordlander) <https://github.com/magnusnordlander>`__
- `Magnus Øverli (@magnusoverli) <https://github.com/magnusoverli>`__
- `majbthrd (@majbthrd) <https://github.com/majbthrd>`__
- `Major Péter (@majorpeter) <https://github.com/majorpeter>`__
- `raymonder jin (@mamil) <https://github.com/mamil>`__
@ -566,7 +568,6 @@ Contributors
- `Marcel van der Veldt (@marcelveldt) <https://github.com/marcelveldt>`__
- `Marc (@MarcHagen) <https://github.com/MarcHagen>`__
- `Marcio Granzotto Rodrigues (@marciogranzotto) <https://github.com/marciogranzotto>`__
- `Marc Teale (@marcteale) <https://github.com/marcteale>`__
- `marecabo (@marecabo) <https://github.com/marecabo>`__
- `Ben Marengo (@marengaz) <https://github.com/marengaz>`__
- `Marvin Gaube (@margau) <https://github.com/margau>`__
@ -608,7 +609,6 @@ Contributors
- `André Klitzing (@misery) <https://github.com/misery>`__
- `Tomasz (@Misiu) <https://github.com/Misiu>`__
- `Matthew Garrett (@mjg59) <https://github.com/mjg59>`__
- `Maarten (@mjkl-gh) <https://github.com/mjkl-gh>`__
- `Morton Jonuschat (@mjonuschat) <https://github.com/mjonuschat>`__
- `mjoshd (@mjoshd) <https://github.com/mjoshd>`__
- `mknjc (@mknjc) <https://github.com/mknjc>`__
@ -620,6 +620,7 @@ Contributors
- `Moritz Glöckl (@moritzgloeckl) <https://github.com/moritzgloeckl>`__
- `Chris Laplante (@mostthingsweb) <https://github.com/mostthingsweb>`__
- `Sam Hughes (@MrEditor97) <https://github.com/MrEditor97>`__
- `Morgan Robertson (@mrgnr) <https://github.com/mrgnr>`__
- `Mariusz Kryński (@mrk-its) <https://github.com/mrk-its>`__
- `Michael Davidson (@MrMDavidson) <https://github.com/MrMDavidson>`__
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__
@ -665,6 +666,7 @@ Contributors
- `Nuno Sousa (@nunofgs) <https://github.com/nunofgs>`__
- `Maksym Lunin (@nut-code-monkey) <https://github.com/nut-code-monkey>`__
- `Chris Nussbaum (@nuttytree) <https://github.com/nuttytree>`__
- `Nathaniel Wesley Filardo (@nwf) <https://github.com/nwf>`__
- `obrain17 (@obrain17) <https://github.com/obrain17>`__
- `Ockert Marais (@OckertM) <https://github.com/OckertM>`__
- `Dave Walker (@oddsockmachine) <https://github.com/oddsockmachine>`__
@ -799,7 +801,6 @@ Contributors
- `spacemanspiff2007 (@spacemanspiff2007) <https://github.com/spacemanspiff2007>`__
- `Sean Brogan (@spbrogan) <https://github.com/spbrogan>`__
- `Spegs21 (@Spegs21) <https://github.com/Spegs21>`__
- `Stephan Peijnik-Steinwender (@speijnik) <https://github.com/speijnik>`__
- `Eric Lind (@sperly) <https://github.com/sperly>`__
- `Samuel Sieb (@ssieb) <https://github.com/ssieb>`__
- `Stefan Staub (@sstaub) <https://github.com/sstaub>`__
@ -807,7 +808,6 @@ Contributors
- `Stanislav Habich (@standahabich) <https://github.com/standahabich>`__
- `Stas (@stas-sl) <https://github.com/stas-sl>`__
- `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>`__
- `Stijn Tintel (@stintel) <https://github.com/stintel>`__
@ -909,4 +909,4 @@ Contributors
- `Zack Barett (@zsarnett) <https://github.com/zsarnett>`__
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
*This page was last updated February 23, 2023.*
*This page was last updated March 9, 2023.*

BIN
images/as7341.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
images/fs3000.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

25
images/haier.svg Normal file
View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="824px" height="256px" viewBox="0 0 824 256" enable-background="new 0 0 824 256" xml:space="preserve">
<g>
<g>
<path fill="#005BAA" d="M712.652,171.532c0.348-3.178,0.552-6.388,0.552-9.638c0-49.205-40.776-89.07-91.083-89.07
c-50.293,0-91.063,39.865-91.063,89.07c0,49.189,40.771,89.039,91.063,89.039c38.259,0,70.963-23.021,84.481-55.729l-39.257-6.878
c-8.696,15.914-25.151,26.634-43.96,26.634c-24.967,0-45.642-18.778-49.801-43.429H712.652z M623.386,109.79
c21.319,0,39.528,13.729,46.96,33.163h-93.977C583.781,123.52,602.03,109.79,623.386,109.79z"/>
<rect x="460.066" y="76.555" fill="#005BAA" width="46.512" height="171.18"/>
<path fill="#005BAA" d="M483.339,6.758c-14.358,0-25.95,11.655-25.95,25.953c0,14.276,11.592,25.9,25.95,25.9
c14.3,0,25.917-11.624,25.917-25.9C509.256,18.413,497.639,6.758,483.339,6.758"/>
<polygon fill="#005BAA" points="175.389,21.671 175.389,113.822 75.133,113.822 75.133,21.671 24.291,21.671 24.291,247.582
75.133,247.582 75.133,155.427 175.389,155.427 175.389,247.582 226.273,247.582 226.273,21.671 "/>
<path fill="#005BAA" d="M385.318,76.634v9.185c-13.519-8.191-29.361-12.896-46.336-12.896c-49.308,0-89.3,39.84-89.3,89.006
c0,49.156,39.992,89.006,89.3,89.006c16.534,0,31.981-4.491,45.262-12.27v8.918h45.384V76.634H385.318z M341.25,213.408
c-28.777,0-52.04-23.027-52.04-51.459c0-28.456,23.262-51.5,52.04-51.5c28.77,0,52.071,23.044,52.071,51.5
C393.32,190.381,370.019,213.408,341.25,213.408z"/>
<path fill="#005BAA" d="M809.376,60.657c-42.832,7.472-75.396,44.736-75.896,89.679v97.398h44.535l0.023-99.229
c0-22.716,17.053-41.463,39.032-44.153L809.376,60.657z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
images/kuntze.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
images/mopeka_std_check.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
images/sen21231.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

1
images/thermometer.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path fill="currentColor" d="M15 13V5A3 3 0 0 0 9 5V13A5 5 0 1 0 15 13M12 4A1 1 0 0 1 13 5V8H11V5A1 1 0 0 1 12 4Z"/></svg>

After

Width:  |  Height:  |  Size: 186 B

1
images/water-drop.svg Normal file
View File

@ -0,0 +1 @@
<svg height="26" width="26" xmlns="http://www.w3.org/2000/svg"><path d="M12.953,0c0,0-9,10.906-9,16.906c0,4.971,4.029,9,9,9s9-4.029,9-9C21.953,10.906,12.953,0,12.953,0z M9.026,17.496c0,1.426,0.668,4.25,1.134,5.426c-3.042-1.494-3.846-4.425-3.846-6.463c0-3.173,3.684-7.824,5.777-12.149 C11.861,6.581,9.026,13.177,9.026,17.496z"/></svg>

After

Width:  |  Height:  |  Size: 333 B

View File

@ -214,6 +214,7 @@ Bluetooth Low Energy (BLE)
BLE RSSI, components/sensor/ble_rssi, bluetooth.svg
Inkbird IBS-TH1 Mini, components/sensor/inkbird_ibsth1_mini, inkbird_isbth1_mini.jpg, Temperature & Humidity
Mopeka Pro Check LP, components/sensor/mopeka_pro_check, mopeka_pro_check.jpg, tank level
Mopeka Standard Check LP, components/sensor/mopeka_std_check, mopeka_std_check.jpg, tank level
RuuviTag, components/sensor/ruuvitag, ruuvitag.jpg, Temperature & Humidity & Accelerometer
Xiaomi BLE, components/sensor/xiaomi_ble, xiaomi_mijia_logo.jpg, Various
@ -273,6 +274,7 @@ Environmental
.. imgtable::
Absolute Humidity, components/sensor/absolute_humidity, water-drop.svg
AHT10 / AHT20 / AHT21 / DHT20, components/sensor/aht10, aht10.jpg, Temperature & Humidity
AirThings BLE, components/sensor/airthings_ble, airthings_logo.png, Temperature & Humidity & Pressure
AM2320, components/sensor/am2320, am2320.jpg, Temperature & Humidity
@ -294,6 +296,7 @@ Environmental
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
Internal Temperature, components/sensor/internal_temperature, thermometer.svg, Temperature
MCP9808, components/sensor/mcp9808, mcp9808.jpg, Temperature
MH-Z19, components/sensor/mhz19, mhz19.jpg, CO2 & Temperature
MPL3115A2, components/sensor/mpl3115a2, mpl3115a2.jpg, Temperature & Pressure
@ -321,6 +324,7 @@ Light
AM43, components/sensor/am43, am43.jpg, Lux
APDS9960, components/sensor/apds9960, apds9960.jpg, Colour & Gesture
AS7341, components/sensor/as7341, as7341.jpg, Spectral Color Sensor
BH1750, components/sensor/bh1750, bh1750.jpg, Lux
LTR390, components/sensor/ltr390, ltr390.jpg, Lux & UV
MAX44009, components/sensor/max44009, max44009.svg, Lux
@ -347,6 +351,7 @@ Miscellaneous
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
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
Growatt Solar, components/sensor/growatt_solar, growatt.jpg, Solar rooftop
Kalman Combinator, components/sensor/kalman_combinator, function.svg
@ -359,6 +364,7 @@ Miscellaneous
uFire EC sensor, components/sensor/ufire_ec, ufire_ec.png, EC & Temperature
uFire ISE sensor, components/sensor/ufire_ise, ufire_ise.png, pH & Temperature
Resol VBus, components/vbus, resol_deltasol_bs_plus.jpg
Person Sensor (SEN21231), components/sensor/sen21231, sen21231.png
Motion
@ -621,6 +627,7 @@ Climate Components
Midea, components/climate/midea, midea.svg
Anova Cooker, components/climate/anova, anova.png
BedJet Climate System, components/climate/bedjet, bedjet.png
Haier Climate, components/climate/haier, haier.svg
Number Components
-----------------