2
Doxygen
@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = 2022.6.3
|
||||
PROJECT_NUMBER = 2022.8.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
|
||||
|
2
Makefile
@ -1,5 +1,5 @@
|
||||
ESPHOME_PATH = ../esphome
|
||||
ESPHOME_REF = 2022.6.3
|
||||
ESPHOME_REF = 2022.8.0b1
|
||||
|
||||
.PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify
|
||||
|
||||
|
BIN
_static/changelog-2022.8.0.png
Normal file
After Width: | Height: | Size: 39 KiB |
@ -1 +1 @@
|
||||
2022.6.3
|
||||
2022.8.0b1
|
137
changelog/2022.8.0.rst
Normal file
@ -0,0 +1,137 @@
|
||||
ESPHome 2022.8.0 - 17th August 2022
|
||||
===================================
|
||||
|
||||
.. seo::
|
||||
:description: Changelog for ESPHome 2022.8.0.
|
||||
:image: /_static/changelog-2022.8.0.png
|
||||
:author: Jesse Hills
|
||||
:author_twitter: @jesserockz
|
||||
|
||||
.. imgtable::
|
||||
:columns: 3
|
||||
|
||||
DAC7678, components/output/dac7678, dac7678.svg
|
||||
Sprinkler, components/sprinkler, sprinkler-variant.svg
|
||||
Feedback Cover, components/cover/feedback, feedback_cover.svg
|
||||
SMT100, components/sensor/smt100, smt100.jpg, Moisture & Temperature
|
||||
Whynter IR Climate, components/climate/climate_ir, air-conditioner-ir.svg
|
||||
|
||||
|
||||
Full list of changes
|
||||
--------------------
|
||||
|
||||
New Components
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
- DAC7678 support :esphomepr:`3441` by :ghuser:`NickB1` (new-integration)
|
||||
- Add support for SMT100 Soil Moisture Sensor :esphomepr:`3654` by :ghuser:`piechade` (new-integration)
|
||||
- Adding support for Whynter ARC-14S/SH Air Conditioners :esphomepr:`3641` by :ghuser:`aeonsablaze` (new-integration)
|
||||
- Sprinkler controller component :esphomepr:`2249` by :ghuser:`kbx81` (new-integration)
|
||||
- Create feedback cover component :esphomepr:`3253` by :ghuser:`ianchi` (new-integration)
|
||||
|
||||
Breaking Changes
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
- Remove min_save_interval from intergration and total_daily_energy :esphomepr:`3498` by :ghuser:`jesserockz` (breaking-change)
|
||||
- Rework NaN handling in sensor filters :esphomepr:`3610` by :ghuser:`DAVe3283` (breaking-change)
|
||||
- Extend ST7789V component to support additional displays :esphomepr:`3651` by :ghuser:`kbx81` (breaking-change)
|
||||
- Refactor BedJet climate into Hub component :esphomepr:`3522` by :ghuser:`jhansche` (breaking-change)
|
||||
|
||||
All changes
|
||||
^^^^^^^^^^^
|
||||
|
||||
- Refactor vl53l0x to remove code from header. :esphomepr:`3536` by :ghuser:`RoboMagus`
|
||||
- Fix modbus user-defined function handling :esphomepr:`3527` by :ghuser:`gazoodle`
|
||||
- Language schema 202204 :esphomepr:`3492` by :ghuser:`glmnet`
|
||||
- Fix / Reverse order shutdown :esphomepr:`3585` by :ghuser:`RoboMagus`
|
||||
- RestoringGlobalsComponent: Store value on shutdown :esphomepr:`3586` by :ghuser:`RoboMagus`
|
||||
- Map LOLIN C3 mini board pins :esphomepr:`3587` by :ghuser:`mateusdemboski`
|
||||
- Bump platformio to 6.0.2 :esphomepr:`3566` by :ghuser:`jesserockz`
|
||||
- Bump pylint from 2.13.9 to 2.14.3 :esphomepr:`3589` by :ghuser:`dependabot[bot]`
|
||||
- DAC7678 support :esphomepr:`3441` by :ghuser:`NickB1` (new-integration)
|
||||
- Correcting ESP32 flash save/load key calculation algorithm :esphomepr:`3416` by :ghuser:`cinadr`
|
||||
- Bump aioesphomeapi from 10.8.2 to 10.10.0 :esphomepr:`3590` by :ghuser:`dependabot[bot]`
|
||||
- Do two substitutions passes to allow substitutions inside substitutions :esphomepr:`3583` by :ghuser:`jesserockz`
|
||||
- Update actions :esphomepr:`3592` by :ghuser:`wrt54g`
|
||||
- Add github-actions to dependabot :esphomepr:`3595` by :ghuser:`jesserockz`
|
||||
- Fix some typos found by codespell :esphomepr:`3598` by :ghuser:`misery`
|
||||
- #3358 Correct temperature validity detection issue in some conditions of pu… :esphomepr:`3545` by :ghuser:`Benoit3`
|
||||
- Remove min_save_interval from intergration and total_daily_energy :esphomepr:`3498` by :ghuser:`jesserockz` (breaking-change)
|
||||
- Bump zeroconf from 0.38.4 to 0.38.7 :esphomepr:`3562` by :ghuser:`dependabot[bot]`
|
||||
- fix EDict to dict mapping in helpers.py :esphomepr:`3599` by :ghuser:`jpeletier`
|
||||
- Fix slow_pwm output glitch :esphomepr:`3601` by :ghuser:`marshn`
|
||||
- Bump pyupgrade from 2.32.1 to 2.34.0 :esphomepr:`3591` by :ghuser:`dependabot[bot]`
|
||||
- Bump black from 22.3.0 to 22.6.0 :esphomepr:`3613` by :ghuser:`dependabot[bot]`
|
||||
- Bump colorama from 0.4.4 to 0.4.5 :esphomepr:`3614` by :ghuser:`dependabot[bot]`
|
||||
- Bump pylint from 2.14.3 to 2.14.4 :esphomepr:`3617` by :ghuser:`dependabot[bot]`
|
||||
- Bump pytest-mock from 3.7.0 to 3.8.1 :esphomepr:`3616` by :ghuser:`dependabot[bot]`
|
||||
- Update dfplayer condition function name :esphomepr:`3619` by :ghuser:`dab0g`
|
||||
- Added more sensor device classes :esphomepr:`3624` by :ghuser:`lal12`
|
||||
- Improvement pipsolar crc :esphomepr:`3316` by :ghuser:`andreashergert1984`
|
||||
- Fix configuration constants in core. :esphomepr:`3652` by :ghuser:`RoboMagus`
|
||||
- FIX: NVS preferences being written even if unchanged :esphomepr:`3647` by :ghuser:`jpeletier`
|
||||
- Add 'set_total_pulses' action to 'pulse_counter' sensor. :esphomepr:`3640` by :ghuser:`RoboMagus`
|
||||
- add option to publish initial state of binary sensors :esphomepr:`3636` by :ghuser:`ssieb`
|
||||
- update packages: nginx-light-1.18.0-6.1+deb11u2 nano-5.4-2+deb11u1 :esphomepr:`3631` by :ghuser:`peterg79`
|
||||
- Add support for SMT100 Soil Moisture Sensor :esphomepr:`3654` by :ghuser:`piechade` (new-integration)
|
||||
- Rework NaN handling in sensor filters :esphomepr:`3610` by :ghuser:`DAVe3283` (breaking-change)
|
||||
- Remove deprecated adc init call. :esphomepr:`3667` by :ghuser:`ssieb`
|
||||
- List webserver service on MDNS if enabled. :esphomepr:`3662` by :ghuser:`RoboMagus`
|
||||
- Show changes from python linting :esphomepr:`3677` by :ghuser:`jesserockz`
|
||||
- dalybms: support changing the address :esphomepr:`3676` by :ghuser:`ssieb`
|
||||
- Upgrade rweather/Crypto from 0.2.0 to 0.4.0 :esphomepr:`3593` by :ghuser:`sybrenstuvel`
|
||||
- Allow GPIO20 for ESP32 :esphomepr:`3680` by :ghuser:`ashald`
|
||||
- Remove old unused code in mcp23xxx_base :esphomepr:`3685` by :ghuser:`jesserockz`
|
||||
- Adding option to report signal strength on pvvx_mithermometer :esphomepr:`3688` by :ghuser:`doolbneerg`
|
||||
- Pass optional args to 'new_Pvariable' when creating new entities :esphomepr:`3690` by :ghuser:`RoboMagus`
|
||||
- fix sx1509 use of pullup and pulldown :esphomepr:`3689` by :ghuser:`ssieb`
|
||||
- Add a soft reset in setup() for bme280. :esphomepr:`3615` by :ghuser:`dbaarda`
|
||||
- Add get_ap() method to WiFi :esphomepr:`3684` by :ghuser:`anatoly-savchenkov`
|
||||
- Extend ST7789V component to support additional displays :esphomepr:`3651` by :ghuser:`kbx81` (breaking-change)
|
||||
- Fix panic abort when BLEClient reconnects :esphomepr:`3594` by :ghuser:`dentra`
|
||||
- Introduces ble_client.ble_write Action :esphomepr:`3398` by :ghuser:`rbaron`
|
||||
- Add helpers to switch python for schema and codegen :esphomepr:`3693` by :ghuser:`jesserockz`
|
||||
- Refactor BedJet climate into Hub component :esphomepr:`3522` by :ghuser:`jhansche` (breaking-change)
|
||||
- Added support for setting the current animation frame :esphomepr:`3681` by :ghuser:`davestubbs`
|
||||
- Adding support for Whynter ARC-14S/SH Air Conditioners :esphomepr:`3641` by :ghuser:`aeonsablaze` (new-integration)
|
||||
- Sprinkler controller component :esphomepr:`2249` by :ghuser:`kbx81` (new-integration)
|
||||
- add gradient color :esphomepr:`3687` by :ghuser:`nielsnl68`
|
||||
- [Nextion] Add on_page trigger :esphomepr:`3673` by :ghuser:`anatoly-savchenkov`
|
||||
- Bump pyupgrade from 2.34.0 to 2.37.3 :esphomepr:`3670` by :ghuser:`dependabot[bot]`
|
||||
- Bump aioesphomeapi from 10.10.0 to 10.11.0 :esphomepr:`3669` by :ghuser:`dependabot[bot]`
|
||||
- Create feedback cover component :esphomepr:`3253` by :ghuser:`ianchi` (new-integration)
|
||||
- Bump pytest-asyncio from 0.18.3 to 0.19.0 :esphomepr:`3695` by :ghuser:`dependabot[bot]`
|
||||
- Bump zeroconf from 0.38.7 to 0.39.0 :esphomepr:`3694` by :ghuser:`dependabot[bot]`
|
||||
- Bump pytest-mock from 3.8.1 to 3.8.2 :esphomepr:`3622` by :ghuser:`dependabot[bot]`
|
||||
- Bump flake8 from 4.0.1 to 5.0.4 :esphomepr:`3703` by :ghuser:`dependabot[bot]`
|
||||
- Bump pylint from 2.14.4 to 2.14.5 :esphomepr:`3697` by :ghuser:`dependabot[bot]`
|
||||
- Add priority to on_shutdown trigger :esphomepr:`3644` by :ghuser:`RoboMagus`
|
||||
|
||||
Past Changelogs
|
||||
---------------
|
||||
|
||||
- :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`
|
@ -2,7 +2,7 @@ Changelog
|
||||
=========
|
||||
|
||||
.. redirect::
|
||||
:url: /changelog/2022.6.0.html
|
||||
:url: /changelog/2022.8.0.html
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
|
@ -60,6 +60,8 @@ Advanced options:
|
||||
- **disabled_by_default** (*Optional*, boolean): If true, then this entity should not be added to any client's frontend,
|
||||
(usually Home Assistant) without the user manually enabling it (via the Home Assistant UI).
|
||||
Requires Home Assistant 2021.9 or newer. Defaults to ``false``.
|
||||
- **publish_initial_state** (*Optional*, boolean): If true, then the sensor will publish its initial state at boot or when
|
||||
HA first connects, depending on the platform. This means that any applicable triggers will be run. Defaults to ``false``.
|
||||
- **entity_category** (*Optional*, string): The category of the entity.
|
||||
See https://developers.home-assistant.io/docs/core/entity/#generic-properties
|
||||
for a list of available options. Requires Home Assistant 2021.11 or newer.
|
||||
|
@ -91,6 +91,34 @@ This automation is triggered when the client disconnects from a BLE device.
|
||||
- lambda: |-
|
||||
ESP_LOGD("ble_client_lambda", "Disconnected from BLE device");
|
||||
|
||||
.. _ble_client-ble_write_action:
|
||||
|
||||
``ble_client.ble_write`` Action
|
||||
-------------------------------
|
||||
|
||||
This action triggers a write to a specified BLE characteristic. The write is attempted in
|
||||
a best-effort fashion and will only succeed if the `ble_client`'s connection has been
|
||||
established and the peripheral exposes the expected BLE service and characteristic.
|
||||
|
||||
Example usage:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
ble_client:
|
||||
- mac_address: 11:22:33:44:55:66
|
||||
id: my_ble_client
|
||||
|
||||
switch:
|
||||
- platform: template
|
||||
name: "My Switch"
|
||||
turn_on_action:
|
||||
- ble_client.ble_write:
|
||||
id: my_ble_client
|
||||
service_uuid: F61E3BE9-2826-A81B-970A-4D4DECFABBAE
|
||||
characteristic_uuid: 6490FAFE-0734-732C-8705-91B653A081FC
|
||||
# List of bytes to write.
|
||||
value: [0x01, 0xab, 0xff]
|
||||
|
||||
BLE Overview
|
||||
------------
|
||||
This section gives a brief overview of the Bluetooth LE architecture
|
||||
|
@ -5,8 +5,8 @@ BedJet
|
||||
:description: Instructions for setting up a BedJet climate device.
|
||||
:image: bedjet.png
|
||||
|
||||
The ``bedjet`` climate platform creates a climate device which can be used to control
|
||||
a BedJet V3 Climate Comfort Sleep System.
|
||||
The ``bedjet`` component allows you to communicate with a BedJet V3 Climate Comfort
|
||||
Sleep System.
|
||||
|
||||
This component supports the following functionality:
|
||||
|
||||
@ -16,36 +16,40 @@ This component supports the following functionality:
|
||||
- Start one of the saved memory presets, including "Biorhythm" programs
|
||||
- Show the current status of the BedJet
|
||||
|
||||
This platform uses the BLE peripheral on an ESP32, so you also need to enable
|
||||
This component uses the BLE peripheral on an ESP32, so you also need to enable
|
||||
this component. Please see the :doc:`/components/ble_client` docs for how to discover the MAC
|
||||
address of your BedJet device, or you can find the list of paired MAC addresses in
|
||||
the "DEVICE LIST" section of the BedJet mobile application.
|
||||
|
||||
Component/Hub
|
||||
-------------
|
||||
|
||||
This component is a global hub that maintains the connection to the BedJet device
|
||||
and delegates status updates to individual platform components.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
ble_client:
|
||||
- mac_address: 11:22:33:aa:bb:cc
|
||||
id: ble_bedjet
|
||||
esp32_ble_tracker:
|
||||
|
||||
climate:
|
||||
- platform: bedjet
|
||||
id: my_bedjet_fan
|
||||
name: "My BedJet Fan"
|
||||
ble_client_id: ble_bedjet
|
||||
ble_client:
|
||||
- mac_address: C4:4F:33:00:00:01
|
||||
id: bedjet_ble_id1
|
||||
|
||||
bedjet:
|
||||
- id: bedjet_1
|
||||
ble_client_id: bedjet_ble_id1
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
************************
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **name** (**Required**, string): The name of the climate device.
|
||||
- **ble_client_id** (**Required**, :ref:`config-id`): The ID of the BLE Client.
|
||||
- **time_id** (*Optional*, :ref:`config-id`): The ID of a :ref:`Time Component <time>` which
|
||||
can be used to set the time on the BedJet device.
|
||||
- **heat_mode** (*Optional*, string): The primary heating mode to use for `HVACMode.HEAT`:
|
||||
- ``"heat"`` (Default) - Setting ``hvac_mode=heat`` uses the BedJet "HEAT" mode.
|
||||
- ``"extended"`` - Setting ``hvac_mode=heat`` uses BedJet "EXT HEAT" mode.
|
||||
- Whichever is not selected will be made available as a custom preset.
|
||||
- All other options from :ref:`Climate <config-climate>`.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to dispatch status
|
||||
changes to child components. Defaults to ``5s``. Each child component can decide whether to
|
||||
publish its own updated state on this interval, or use another (longer) update interval to
|
||||
throttle its own updates.
|
||||
|
||||
lambda calls
|
||||
************
|
||||
@ -58,11 +62,37 @@ From :ref:`lambdas <config-lambda>`, you can call methods to do some advanced st
|
||||
|
||||
button:
|
||||
- platform: template
|
||||
name: "Check Bedjet Firmware"
|
||||
name: "Check Bedjet(1) Firmware"
|
||||
on_press:
|
||||
then:
|
||||
- lambda: |-
|
||||
id(my_bedjet_fan).upgrade_firmware();
|
||||
id(bedjet_1).upgrade_firmware();
|
||||
|
||||
``bedjet`` Climate Platform
|
||||
---------------------------
|
||||
|
||||
The `climate` platform exposes the BedJet's climate-related functionality, including
|
||||
setting the mode and target temperature.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
climate:
|
||||
- platform: bedjet
|
||||
id: my_bedjet_climate_entity
|
||||
name: "My BedJet"
|
||||
bedjet_id: bedjet_1
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **name** (**Required**, string): The name of the climate device.
|
||||
- **bedjet_id** (**Required**, :ref:`config-id`): The ID of the Bedjet component.
|
||||
- **heat_mode** (*Optional*, string): The primary heating mode to use for ``HVACMode.HEAT``:
|
||||
- ``"heat"`` (Default) - Setting ``hvac_mode=heat`` uses the BedJet "HEAT" mode.
|
||||
- ``"extended"`` - Setting ``hvac_mode=heat`` uses BedJet "EXT HEAT" mode.
|
||||
- Whichever is not selected will be made available as a custom preset.
|
||||
- All other options from :ref:`Climate <config-climate>`.
|
||||
|
||||
- ``.send_local_time``: If `time_id` is set, attempt to sync the clock now.
|
||||
|
||||
|
@ -48,6 +48,8 @@ submit a feature request (see FAQ).
|
||||
+---------------------------------------+---------------------+----------------------+
|
||||
| Yashima | ``yashima`` | |
|
||||
+---------------------------------------+---------------------+----------------------+
|
||||
| :ref:`Whynter<whynter>` | ``whynter`` | yes |
|
||||
+---------------------------------------+---------------------+----------------------+
|
||||
|
||||
This component requires that you have configured a :doc:`/components/remote_transmitter`.
|
||||
|
||||
@ -270,6 +272,29 @@ Configuration variables:
|
||||
- ``DG11J1-3A``: Temperature range is from 18 to 32 (default)
|
||||
- ``DG11J1-91``: Temperature range is from 16 to 30
|
||||
|
||||
.. _whynter:
|
||||
|
||||
``whynter`` Climate
|
||||
-------------------------
|
||||
|
||||
Additional configuration is available for this platform
|
||||
|
||||
|
||||
Configuration variables:
|
||||
|
||||
- **use_fahrenheit** (*Optional*, boolean): Allows you to transfer the temperature to the air conditioner in degrees Fahrenheit. The air conditioner display also shows the temperature in Fahrenheit. Defaults to ``false``.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
climate:
|
||||
- platform: whynter
|
||||
name: "AC"
|
||||
sensor: room_temperature
|
||||
use_fahrenheit: true
|
||||
supports_heat: true
|
||||
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
267
components/cover/feedback.rst
Normal file
@ -0,0 +1,267 @@
|
||||
Feedback Cover
|
||||
==============
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up feedback covers in ESPHome.
|
||||
|
||||
The ``feedback`` cover platform allows you to create covers with position control that
|
||||
can optionally have feedback from sensors to detect the fully-open and fully-closed states (endstops),
|
||||
and from sensors to detect actual movement (opening/closing). In all the cases the current
|
||||
position is approximated with the time the cover has been moving in a direction.
|
||||
|
||||
It supports *open*, *close*, *stop* and *toggle* actions. Tilt control is not supported.
|
||||
|
||||
.. figure:: images/more-info-ui.png
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
cover:
|
||||
- platform: feedback
|
||||
name: "Gate"
|
||||
|
||||
open_action:
|
||||
- switch.turn_on: open_cover_switch
|
||||
open_duration: 2.1min
|
||||
open_endstop: open_endstop_binary_sensor
|
||||
open_sensor: open_movement_binary_sensor
|
||||
|
||||
close_action:
|
||||
- switch.turn_on: close_cover_switch
|
||||
close_duration: 2min
|
||||
close_endstop: close_endstop_binary_sensor
|
||||
close_sensor: close_movement_binary_sensor
|
||||
|
||||
stop_action:
|
||||
- switch.turn_off: open_cover_switch
|
||||
- switch.turn_off: close_cover_switch
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
|
||||
It is a versatile cover that can accommodate for a number of DIY setups, or monitoring an externally controlled cover:
|
||||
|
||||
Time-Based
|
||||
**********
|
||||
|
||||
Simplest case, when no sensors are available. The state is thus assumed.
|
||||
|
||||
It is a drop-in replacement of :doc:`/components/cover/time_based`
|
||||
|
||||
Endstop Sensors
|
||||
***************
|
||||
|
||||
For cases where there are endstops at one or both ends of the cover to detect the fully-open and fully-closed states.
|
||||
When any of these endstops are reached, an actual state is read and updated and the cover optionally
|
||||
stopped (via ``stop_action``). The state is not assumed.
|
||||
|
||||
The extension also handles the case where the cover has builtin endstops, which stops the movement, independently to
|
||||
the component's logic. In this case, when the cover is fully closed (either if timed based or sensor based) the
|
||||
``stop_action`` is not triggered.
|
||||
|
||||
It is a drop-in replacement of :doc:`/components/cover/endstop`.
|
||||
|
||||
Movement Sensors
|
||||
****************
|
||||
|
||||
If movement feedback is available, the cover no longer operates in *optimistic mode* (assuming that movement starts
|
||||
as soon as an action is triggered) and can also react to commands issued to cover from an external control and still
|
||||
keep states in sync (useful for "smartization" of and existing cover).
|
||||
|
||||
When there are no specific endstop sensors, and if the cover has builtin endstops and no external control logic,
|
||||
these movement sensors can optionally be use to infer the endstop state.
|
||||
When the movement stops (with no stop action being requested) it is assumed that it was caused by
|
||||
the builtin endstops, and so the close/open state (according to current direction) was reached.
|
||||
This function is activated setting ``infer_endstop`` to True.
|
||||
|
||||
It can be used to replace a :doc:`/components/cover/current_based`, with some modifications in the yaml. See :ref:`migrating_current_based`
|
||||
|
||||
Safety Features
|
||||
---------------
|
||||
|
||||
To protect the cover hardware from damage, some safety options are available:
|
||||
|
||||
- *Max duration*, to protect from faulty endstops
|
||||
- *Direction change wait time*, like an interlock wait time, to protect motors from sudden direction changes
|
||||
- *Obstacle sensors* and *rollback*, possibility to stop and optionally rollback the cover when some external sensors detects an obstacle
|
||||
(it might be a sensor for high current consumption or an infrared light detecting an obstruction in the path).
|
||||
|
||||
|
||||
Configuration variables
|
||||
-----------------------
|
||||
|
||||
- **name** (**Required**, string): The name of the cover.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
- **stop_action** (**Required**, :ref:`Action <config-action>`): The action that should
|
||||
be performed when the remote requests the cover to be closed or an endstop is reached.
|
||||
|
||||
Open options:
|
||||
|
||||
- **open_action** (**Required**, :ref:`Action <config-action>`): The action that should
|
||||
be performed when the remote requests the cover to be opened.
|
||||
- **open_duration** (**Required**, :ref:`config-time`): The amount of time it takes the cover
|
||||
to open up from the fully-closed state.
|
||||
- **open_endstop** (**Optional**, :ref:`config-id`): The ID of the
|
||||
:ref:`Binary Sensor <config-binary_sensor>` that turns on when the open position is reached.
|
||||
- **open_sensor** (**Optional**, :ref:`config-id`): The ID of the
|
||||
:ref:`Binary Sensor <config-binary_sensor>` that turns on when the cover is moving in the open direction.
|
||||
- **open_obstacle_sensor** (**Optional**, :ref:`config-id`): The ID of the
|
||||
:ref:`Binary Sensor <config-binary_sensor>` that turns on when an obstacle that blocks the
|
||||
open direction is detected.
|
||||
|
||||
Close options:
|
||||
|
||||
- **close_action** (**Required**, :ref:`Action <config-action>`): The action that should
|
||||
be performed when the remote requests the cover to be closed.
|
||||
- **close_duration** (**Required**, :ref:`config-time`): The amount of time it takes the cover
|
||||
to close from the fully-open state.
|
||||
- **close_endstop** (**Optional**, :ref:`config-id`): The ID of the
|
||||
:ref:`Binary Sensor <config-binary_sensor>` that turns on when the closed position is reached.
|
||||
- **close_sensor** (**Optional**, :ref:`config-id`): The ID of the
|
||||
:ref:`Binary Sensor <config-binary_sensor>` that turns on when the cover is moving in the close direction.
|
||||
- **close_obstacle_sensor** (**Optional**, :ref:`config-id`): The ID of the
|
||||
:ref:`Binary Sensor <config-binary_sensor>` that turns on when an obstacle that blocks the
|
||||
close direction is detected.
|
||||
|
||||
Additional options:
|
||||
|
||||
- **has_built_in_endstop** (*Optional*, boolean): Indicates that the cover has built in end stop
|
||||
detectors. In this configuration the ``stop_action`` is not performed when the open or close
|
||||
time is completed and if the cover is commanded to open or close the corresponding actions
|
||||
will be performed without checking current state. Defaults to ``false``.
|
||||
- **infer_endstop_from_movement** (*Optional*, boolean): Whether to infer endstop state from the movement sensor.
|
||||
Requires movement sensors to be set, no endstop sensors and to have builtin endstops. Defaults to ``false``.
|
||||
- **assumed_state** (*Optional*, boolean): Whether the true state of the cover is not known.
|
||||
This will make the Home Assistant frontend show buttons for both OPEN and CLOSE actions, instead
|
||||
of hiding or disabling one of them. Defaults to ``true`` if no sensor is available to known
|
||||
the actual state of the cover.
|
||||
- **max_duration** (*Optional*, :ref:`config-time`): The maximum duration the cover should be opening
|
||||
or closing. Useful for protecting from dysfunctional endstops.
|
||||
Requires internal, builtin or inferred endstops.
|
||||
- **direction_change_wait_time** (*Optional*, :ref:`config-time`): Stops cover and forces a wait time between changes in direction,
|
||||
and takes it into account when computing cover position (useful to protect motors).
|
||||
When this option is set (even at 0s) if an open/close action is invoked while the cover is moving in the opposite direction,
|
||||
then and intermediate stop action will be invoked to generate the delay.
|
||||
- **acceleration_wait_time** (*Optional*, :ref:`config-time`): Considers a wait time needed by the cover to actually
|
||||
start moving after command is issued and takes it into account when computing cover position
|
||||
(useful for heavy covers with large inertia).
|
||||
Intended to not accumulate error when doing multiple partial open/close actions).
|
||||
The open/close duration includes one instance of this delay, as it is the total amount of time from
|
||||
issuing a command to reaching endstop.
|
||||
Defaults to ``0s``.
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval
|
||||
to publish updated position information to the UI while the cover is moving.
|
||||
Defaults to ``1s``.
|
||||
- **obstacle_rollback** (*Optional*, percentage): The percentage of rollback the cover will perform in case of
|
||||
obstacle detection while moving. Defaults to ``10%``.
|
||||
- All other options from :ref:`Cover <config-cover>`.
|
||||
|
||||
Example Configurations
|
||||
----------------------
|
||||
|
||||
.. _migrating_current_based:
|
||||
|
||||
Migrating Current-Based Cover
|
||||
*****************************
|
||||
|
||||
Most options can be left untouched, but some modifications are needed:
|
||||
|
||||
|
||||
1. All current sensing related options must be moved to auxiliary :doc:`/components/binary_sensor/analog_threshold`,
|
||||
to convert current readings to binary sensors, using the corresponding thresholds and delays.
|
||||
|
||||
If there where any open/close obstacle current threshold defined, a separate binary sensor with that threshold should be defined.
|
||||
The option ``start_sensing_delay`` should be directly replaced by a ``delayed_off`` filter in the movement sensors, or alternatively
|
||||
hysteresis options could be used to reduce the noise.
|
||||
2. To have the very same behavior implicit in current based cover, you must always set ``has_built_in_endstop`` and ``infer_endstop_from_movement``
|
||||
to True.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example original sensor configuration
|
||||
cover:
|
||||
- platform: current_based
|
||||
name: "Current Based Cover"
|
||||
|
||||
open_sensor: open_current_sensor
|
||||
open_moving_current_threshold: 0.5
|
||||
open_obstacle_current_threshold: 0.8
|
||||
start_sensing_delay: 0.8s
|
||||
# ...rest of options
|
||||
|
||||
# Example converted sensor configuration
|
||||
binary_sensor:
|
||||
- platform: analog_threshold
|
||||
id: open_binary_sensor
|
||||
sensor_id: open_current_sensor
|
||||
threshold: 0.5
|
||||
filter:
|
||||
- delayed_off: 0.8s
|
||||
- platform: analog_threshold
|
||||
id: open_obstacle_binary_sensor
|
||||
sensor_id: open_current_sensor
|
||||
threshold: 0.8
|
||||
# ... repeat for close sensors
|
||||
|
||||
cover:
|
||||
- platform: feedback
|
||||
name: "Feedback Based Cover"
|
||||
has_built_in_endstop: true
|
||||
infer_endstop_from_movement: true
|
||||
|
||||
open_sensor: open_binary_sensor
|
||||
open_obstacle_sensor: open_obstacle_binary_sensor
|
||||
#... rest of options
|
||||
|
||||
3. Malfunction detection is not directly supported by Feedback Cover, as the malfunction was very narrowly defined to a specif use case
|
||||
(while in other hardware configurations, the same situation is perfectly valid).
|
||||
|
||||
The malfunction alerted specifically when there was current in the opposite direction of the requested operation (possibly due to a relay welded).
|
||||
This detection can still be achieved by putting the logic directly in the switch, (or whatever needed according to your specific use case).
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example original malfunction configuration
|
||||
cover:
|
||||
- platform: current_based
|
||||
close_sensor: close_current
|
||||
close_action:
|
||||
- switch.turn_on: open_relay
|
||||
open_sensor: open_current
|
||||
open_action:
|
||||
- switch.turn_on: open_relay
|
||||
|
||||
malfunction_detection: true
|
||||
malfunction_action:
|
||||
- logger.log: "Malfunction detected. Relay welded."
|
||||
#... rest of options
|
||||
|
||||
# Example converted malfunction configuration
|
||||
switch:
|
||||
- platform: gpio
|
||||
id: open_relay
|
||||
#... rest of options
|
||||
on_turn_off:
|
||||
- delay: 200ms #allow for switching time and any discharge
|
||||
- if:
|
||||
condition:
|
||||
binary_sensor.is_on: open_binary_sensor
|
||||
# alternative can check directly
|
||||
# on sensor.in_range open_current
|
||||
then:
|
||||
- logger.log: "Malfunction detected. Relay welded."
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`index`
|
||||
- :ref:`automation`
|
||||
- :apiref:`feedback/feedback_cover.h`
|
||||
- :ghedit:`Edit`
|
@ -625,7 +625,7 @@ Animation
|
||||
*********
|
||||
|
||||
Allows to use animated images on displays. Animation inherits all options from the image component.
|
||||
It adds additional lambda methods: ``next_frame()`` and ``prev_frame()`` to change the shown picture of a gif.
|
||||
It adds additional lambda methods: ``next_frame()``, ``prev_frame()`` and ``set_frame()`` to change the shown picture of a gif.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -636,7 +636,7 @@ It adds additional lambda methods: ``next_frame()`` and ``prev_frame()`` to chan
|
||||
|
||||
The animation can be rendered just like the image component with the ``image()`` function of the display component.
|
||||
|
||||
To show the next frame of the animation call ``id(my_animation).next_frame()``, to show the previous picture use ``id(my_animation).prev_frame()``.
|
||||
To show the next frame of the animation call ``id(my_animation).next_frame()``, to show the previous picture use ``id(my_animation).prev_frame()``. To show a specific picture use ``id(my_animation).set_frame(int frame)``.
|
||||
This can be combined with all Lambdas:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
@ -63,13 +63,14 @@ Configuration variables:
|
||||
Defaults to ``5s``.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **tft_url** (*Optional*, string): The URL to download the TFT file from for updates. See :ref:`Nextion Upload <nextion_upload_tft>`.
|
||||
- **on_sleep** (*Optional*, :ref:`Action <config-action>`): An automation to perform when the Nextion goes to sleep.
|
||||
- **on_wake** (*Optional*, :ref:`Action <config-action>`): An automation to perform when the Nextion wakes up.
|
||||
- **touch_sleep_timeout** (*Optional*, int): Sets internal No-touch-then-sleep timer in seconds.
|
||||
- **wake_up_page** (*Optional*, int): Sets the page to display after waking up
|
||||
- **auto_wake_on_touch** (*Optional*, boolean): Sets if Nextion should auto-wake from sleep when touch press occurs.
|
||||
- **on_setup** (*Optional*, :ref:`Action <config-action>`): An action to be performed after ESPHome connects to the Nextion. See :ref:`Nextion Automation <nextion-on_setup>`.
|
||||
- **on_sleep** (*Optional*, :ref:`Action <config-action>`): An action to be performed when the Nextion goes to sleep. See :ref:`Nextion Automation <nextion-on_sleep>`.
|
||||
- **on_wake** (*Optional*, :ref:`Action <config-action>`): An action to be performed when the Nextion wakes up. See :ref:`Nextion Automation <nextion-on_sleep>`.
|
||||
- **on_page** (*Optional*, :ref:`Action <config-action>`): An action to be performed after a page change. See :ref:`Nextion Automation <nextion-on_page>`.
|
||||
|
||||
|
||||
.. _display-nextion_lambda:
|
||||
|
||||
Rendering Lambda
|
||||
@ -108,7 +109,7 @@ Please see :ref:`display-printf` for a quick introduction into the ``printf`` fo
|
||||
Lambda Calls
|
||||
************
|
||||
|
||||
Several methods are available for use within :ref:`lambdas <config-lambda>` ; these permit advanced functionality beyond simple
|
||||
Several methods are available for use within :ref:`lambdas <config-lambda>`; these permit advanced functionality beyond simple
|
||||
display updates. See the full :apiref:`nextion/nextion.h` for more info.
|
||||
|
||||
.. _nextion_upload_tft:
|
||||
@ -182,6 +183,80 @@ The developer tools in Home Assistant can be used to trigger the update. The bel
|
||||
- WAVEFORM_SENSOR 4
|
||||
- NO_RESULT 5
|
||||
|
||||
.. _display-nextion_automation:
|
||||
|
||||
Nextion Automation
|
||||
------------------
|
||||
|
||||
With Nextion displays, it's possible to define several automation actions. Depending on your setup, you may or may not need to use some of them.
|
||||
|
||||
.. _nextion-on_setup:
|
||||
|
||||
``on_setup``
|
||||
************
|
||||
|
||||
This automation will be triggered once ESP establishes a connection with Nextion. This happens after a boot up and may take some
|
||||
noticeable time (e.g. hundreds of milliseconds) to establish a connection over UART. Typical use scenario for this automation is choosing of the initial
|
||||
page to display depending on some runtime conditions or simply showing a page with a non-zero index (Nextion shows page 0 by default).
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
wifi:
|
||||
ap: {} # This spawns an AP with the device name and mac address with no password.
|
||||
|
||||
captive_portal:
|
||||
|
||||
display:
|
||||
- platform: nextion
|
||||
id: disp
|
||||
on_setup:
|
||||
then:
|
||||
lambda: |-
|
||||
// Check if WiFi hot-spot is configured
|
||||
if (wifi::global_wifi_component->has_sta()) {
|
||||
// Show the main page
|
||||
id(disp).goto_page("main_page");
|
||||
} else {
|
||||
// Show WiFi Access Point QR code for captive portal, see https://qifi.org/
|
||||
id(disp).goto_page("wifi_qr_page");
|
||||
}
|
||||
|
||||
.. _nextion-on_sleep:
|
||||
|
||||
``on_sleep / on_wake``
|
||||
**********************
|
||||
|
||||
The action is called before and after Nextion goes to sleep mode. Nextion is not responsive while in sleep mode. Use these triggers to prepare your code
|
||||
for that and :ref:`force-update <nextion_update_all_components>` the on-screen content once it's back.
|
||||
|
||||
.. _nextion-on_page:
|
||||
|
||||
``on_page``
|
||||
***********
|
||||
|
||||
This automation is triggered when a page is changed on the Nextion display. This includes both ESP and Nextion initiated page changes.
|
||||
ESP initiates a page change by calling ``goto_page("page_name")`` function. Nextion can change pages as a reaction to user's activity (e.g. clicks) or using a timer.
|
||||
In either case, this automation can be helpful to update on-screen controls for the newly displayed page.
|
||||
|
||||
If you fully own your Nextoin HMI design and follow the best practice of setting the components' vscope to global in the Nextion Editor, you'll probably never need this trigger.
|
||||
However, if this is not the case and all / some of your UI components have local visibility scope, ``on_page`` will be your remedy. Here you can initiate updates of the relevant components.
|
||||
|
||||
Before actually updating components, you need to understand which page Nextion was switched to. ``x`` argument will contain a page id integer.
|
||||
Once you know the page id, it's time to update the components. Two strategies would be possible. The first one is to use :ref:`Nextion Sensors <nextion_sensor>` for every UI field and use one of the
|
||||
:ref:`update functions <nextion_update_all_components>`. The second is to manually set component text or value for each field:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
on_page:
|
||||
then:
|
||||
lambda: |-
|
||||
switch (x) {
|
||||
case 0x02: // wifi_qr_page
|
||||
// Manually trigger update for controls on page 0x02 here
|
||||
id(disp).set_component_text_printf("qr_wifi", "WIFI:T:nopass;S:%s;P:;;", wifi::global_wifi_component->get_ap().get_ssid().c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
.. _nextion_upload_tft_file:
|
||||
|
||||
Uploading A TFT File
|
||||
|
@ -13,12 +13,7 @@ Usage
|
||||
The ``st7789v`` display platform allows you to use
|
||||
ST7789V (`datasheet <https://github.com/Xinyuan-LilyGO/TTGO-T-Display>`__,
|
||||
`Tindie <https://www.tindie.com/products/ttgo/lilygor-ttgo-t-display/>`__)
|
||||
displays with ESPHome. Note that this component utilizes the 4-Wire :ref:`SPI bus <spi>`; the physical
|
||||
connection is already in place on the TTGO T-Display module as shown below.
|
||||
|
||||
.. note::
|
||||
|
||||
Currently this only supports 135x240 pixel ST7789V displays. Other sizes (e.g. 240x320, 240x240) are not supported.
|
||||
displays with ESPHome. Note that this component utilizes the 4-Wire :ref:`SPI bus <spi>`.
|
||||
|
||||
.. figure:: images/st7789v-full.jpg
|
||||
:align: center
|
||||
@ -26,12 +21,15 @@ connection is already in place on the TTGO T-Display module as shown below.
|
||||
|
||||
ST7789V TFT LCD on TTGO T-Display module
|
||||
|
||||
This module has a USB-C connector with an on-board serial adapter for programming. Simply connect to a
|
||||
USB-C port to get started! (Depending on your operating system of choice, you might need to install an
|
||||
appropriate driver.) It is also possible to power the module via the 5V and G (ground) pins along
|
||||
the edges of the module, or via a battery attached to the connector on the bottom of the board. The
|
||||
ESP32's UART pins are not brought out to the headers, so the on-board serial adapter must be used for
|
||||
hardwired programming. (OTA updates are of course possible after ESPHome is initially installed.)
|
||||
The TTGO T-Display module shown has the display attached to the module's board and its connections to the ESP32
|
||||
cannot be changed. Other display modules have pin headers or other connectors which must be connected appropriately
|
||||
to an ESP module.
|
||||
|
||||
.. note::
|
||||
|
||||
Displays larger than the 135x240 pixel display on the TTGO T-Display shown require a significant amount of RAM
|
||||
to operate correctly. Some ESP devices, such as the ESP8266, do not have sufficient memory to support this display.
|
||||
If you attempt to use this component and experience repeated crashes, this is likely the cause of the issue.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -42,6 +40,7 @@ hardwired programming. (OTA updates are of course possible after ESPHome is init
|
||||
|
||||
display:
|
||||
- platform: st7789v
|
||||
model: TTGO TDisplay 135x240
|
||||
backlight_pin: GPIO4
|
||||
cs_pin: GPIO5
|
||||
dc_pin: GPIO16
|
||||
@ -57,9 +56,26 @@ hardwired programming. (OTA updates are of course possible after ESPHome is init
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **model** (**Required**, string): The display model to use. One of the following options:
|
||||
|
||||
- ``TTGO TDisplay 135x240``
|
||||
- ``Adafruit Funhouse 240x240``
|
||||
- ``Adafruit RR 280x240`` (round-rectangular display -- some pixels are "deleted" from corners to form rounded shape)
|
||||
- ``Custom`` (see details below)
|
||||
|
||||
- **cs_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The CS pin.
|
||||
- **dc_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The DC pin.
|
||||
- **reset_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): The RESET pin.
|
||||
- **height** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the ``height`` of the display
|
||||
in pixels. This option may not be specified when the ``model`` is not set to "Custom".
|
||||
- **width** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the ``width`` of the display
|
||||
in pixels. This option may not be specified when the ``model`` is not set to "Custom".
|
||||
- **offset_height** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the display's vertical
|
||||
offset in pixels. This option may not be specified when the ``model`` is not set to "Custom".
|
||||
- **offset_width** (*Optional*, int): When ``model`` is set to "Custom", use this to specify the display's horizontal
|
||||
offset in pixels. This option may not be specified when the ``model`` is not set to "Custom".
|
||||
- **eightbitcolor** (*Optional*, boolean): Limits the supported color depth to eight bits. May be useful on
|
||||
memory-constrained devices.
|
||||
- **backlight_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The display's backlight pin.
|
||||
- **lambda** (*Optional*, :ref:`lambda <config-lambda>`): The lambda to use for rendering the content on the display.
|
||||
See :ref:`display-engine` for more information.
|
||||
@ -67,13 +83,15 @@ Configuration variables:
|
||||
- **pages** (*Optional*, list): Show pages instead of a single lambda. See :ref:`display-pages`.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
|
||||
.. note::
|
||||
|
||||
On memory-constrained devices, it may be possible to use *part* of the display area by setting the model to "custom"
|
||||
and specifying a smaller ``height`` and/or ``width`` than that of the actual display.
|
||||
|
||||
|
||||
Configuration examples
|
||||
**********************
|
||||
|
||||
As of version 1.15, ESPHome supports color displays. To utilize the color capabilities of this display
|
||||
module, you'll likely want to add a ``color:`` section to your YAML configuration; please see
|
||||
:ref:`color <config-color>` for more detail on this configuration section.
|
||||
|
||||
To use colors in your lambda:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
@ -115,17 +115,26 @@ too many WiFi/MQTT connection attempts, Over-The-Air updates being applied or th
|
||||
.. note::
|
||||
|
||||
It's not guaranteed that all components are in a connected state when this automation is triggered. For
|
||||
example, the MQTT client may have already disconnected.
|
||||
example, the MQTT client may have already disconnected. For use-cases that require specific shutdown ordering, look at the ``priority`` parameter.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
esphome:
|
||||
# ...
|
||||
on_shutdown:
|
||||
priority: 700
|
||||
then:
|
||||
- switch.turn_off: switch_1
|
||||
|
||||
Configuration variables: See :ref:`Automation <automation>`.
|
||||
Configuration variables:
|
||||
|
||||
- **priority** (*Optional*, float): The priority to execute your custom shutdown code. A higher value
|
||||
means a high priority and in case of shutdown triggers that the code is executed **later**.
|
||||
Priority is used primarily for the initialization order of components. Shutdowns for these components are handled in *reverse* order, such that e.g. sensors (600) are shutdown before the hardware components (800) they depend on.
|
||||
Please note this is an ESPHome-internal value and any change will not be marked as a breaking change.
|
||||
Defaults to ``600``. For priority values refer to the list in the :ref:`esphome-on_boot` section.
|
||||
|
||||
- See :ref:`Automation <automation>`.
|
||||
|
||||
.. _esphome-on_loop:
|
||||
|
||||
|
BIN
components/images/sprinkler-ui.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
components/images/sprinkler.png
Normal file
After Width: | Height: | Size: 368 KiB |
@ -146,7 +146,7 @@ Configuration variables:
|
||||
``media_player.on_state`` Trigger
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This trigger is activated each time the state of the media player is updated
|
||||
This trigger is activated each time the state of the media player is updated
|
||||
(for example, if the player is stop playing audio or received some command).
|
||||
|
||||
.. code-block:: yaml
|
||||
|
114
components/output/dac7678.rst
Normal file
@ -0,0 +1,114 @@
|
||||
DAC7678
|
||||
=======
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up the DAC7678.
|
||||
:image: dac7678.svg
|
||||
:keywords: DAC7678
|
||||
|
||||
.. _dac7678-component:
|
||||
|
||||
Component/Hub
|
||||
-------------
|
||||
|
||||
The DAC7678 component represents a DAC7678 12-bit 8 channel DAC with internal reference
|
||||
(`datasheet <https://www.ti.com/lit/ds/symlink/dac7678.pdf>`__) in ESPHome. It
|
||||
uses the :ref:`I²C Bus <i2c>` for communication.
|
||||
|
||||
To use the channels of this components, you first need to setup the
|
||||
global ``dac7678`` hub and give it an id, and then define the
|
||||
:ref:`individual output channels <dac7678-output>`.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
dac7678:
|
||||
address: 0x4A
|
||||
id: dac7678_hub1
|
||||
internal_reference: true
|
||||
|
||||
# Individual outputs
|
||||
output:
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 0
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **address** (*Optional*, int): The I²C address of the driver.
|
||||
Defaults to ``0x48``.
|
||||
- **id** (*Optional*, :ref:`config-id`): The id to use for
|
||||
this dac7678 component. Use this if you have multiple DAC7678s connected at the same time
|
||||
- **internal_reference** (*Optional*, bool): State of the internal reference.
|
||||
Defaults to ``false``.
|
||||
|
||||
.. _dac7678-output:
|
||||
|
||||
DAC Output
|
||||
----------
|
||||
|
||||
The DAC7678 output component exposes a DAC7678 DAC channel of a global
|
||||
:ref:`DAC7678 hub <dac7678-component>` as a float
|
||||
output.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
dac7678:
|
||||
address: 0x4A
|
||||
id: dac7678_hub1
|
||||
internal_reference: true
|
||||
|
||||
# Individual outputs
|
||||
output:
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 0
|
||||
id: 'dac7678_1_ch0'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 1
|
||||
id: 'dac7678_1_ch1'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 2
|
||||
id: 'dac7678_1_ch2'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 3
|
||||
id: 'dac7678_1_ch3'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 4
|
||||
id: 'dac7678_1_ch4'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 5
|
||||
id: 'dac7678_1_ch5'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 6
|
||||
id: 'dac7678_1_ch6'
|
||||
- platform: dac7678
|
||||
dac7678_id: 'dac7678_hub1'
|
||||
channel: 7
|
||||
id: 'dac7678_1_ch7'
|
||||
|
||||
|
||||
Configuration variables:
|
||||
************************
|
||||
|
||||
- **id** (**Required**, :ref:`config-id`): The id to use for this output component.
|
||||
- **channel** (**Required**, int): Chose the channel of the DAC7678 of
|
||||
this output component. Must be in range from 0 to 7.
|
||||
- **dac7678_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the
|
||||
:ref:`DAC7678 hub <dac7678-component>`.
|
||||
Use this if you have multiple DAC7678 devices.
|
||||
- All other options from :ref:`Output <config-output>`.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`/components/output/index`
|
||||
- :ghedit:`Edit`
|
@ -88,6 +88,7 @@ Configuration variables:
|
||||
************************
|
||||
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): Delay between data requests.
|
||||
- **address** (*Optional*, int): Address to use, defaults to ``0x80``.
|
||||
|
||||
Sensor
|
||||
------
|
||||
|
BIN
components/sensor/images/smt100.jpg
Normal file
After Width: | Height: | Size: 377 KiB |
@ -38,7 +38,6 @@ Configuration variables:
|
||||
that the value can be restored upon power cycle or reboot.
|
||||
Warning: this option can wear out your flash. Defaults to ``false``.
|
||||
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
|
||||
- **min_save_interval** (*Optional*, :ref:`config-time`): The minimum time span between saving updated values to storage. This is to keep wearout of memory low. Defaults to ``0s``.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
.. _sensor-integration-reset_action:
|
||||
|
@ -101,10 +101,37 @@ measure the total consumed energy in kWh.
|
||||
filters:
|
||||
- multiply: 0.001 # (1/1000 pulses per kWh)
|
||||
|
||||
(Re)Setting the total pulse count
|
||||
---------------------------------
|
||||
|
||||
Using this action, you are able to reset/set the total pulse count. This can be useful
|
||||
if you would like the ``total`` sensor to match what you see on your meter you are
|
||||
trying to match.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Set pulse counter total from home assistant using this service call:
|
||||
api:
|
||||
services:
|
||||
- service: set_pulse_total
|
||||
variables:
|
||||
new_pulse_total: int
|
||||
then:
|
||||
- pulse_counter.set_total_pulses:
|
||||
id: pulse_counter_id
|
||||
value: !lambda 'return new_pulse_total;'
|
||||
|
||||
.. note::
|
||||
|
||||
This value is the raw count of pulses, and not the value you see after the filters
|
||||
are applied.
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :ref:`sensor-filters`
|
||||
- :doc:`/components/sensor/pulse_meter`
|
||||
- :doc:`rotary_encoder`
|
||||
- `esp-idf Pulse Counter API <https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/pcnt.html>`__.
|
||||
- :apiref:`pulse_counter/pulse_counter_sensor.h`
|
||||
|
81
components/sensor/smt100.rst
Normal file
@ -0,0 +1,81 @@
|
||||
SMT100 Soil Moisture Sensor
|
||||
================================
|
||||
|
||||
.. seo::
|
||||
:description: Instructions for setting up SMT100 soil moisture and temperature sensor
|
||||
:image: smt100.jpg
|
||||
:keywords: smt100
|
||||
|
||||
|
||||
The SMT100 sensor platform allows you to use the SMT100 soil moisture and temperature with ESPHome.
|
||||
|
||||
.. figure:: images/smt100.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
|
||||
The communication with this integration is done over a UART bus using a simple ASCII protocol. You must therefore have a ``uart:`` entry in your configuration with both the TX and RX pins set to some pins on your board and the baud rate set to 9600.
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
uart:
|
||||
tx_pin: TX
|
||||
rx_pin: RX
|
||||
baud_rate: 9600
|
||||
|
||||
sensor:
|
||||
- platform: smt100
|
||||
counts:
|
||||
name: "Counts"
|
||||
permittivity:
|
||||
name: "Permittivity"
|
||||
temperature:
|
||||
name: "Temperature"
|
||||
moisture:
|
||||
name: "Moisture"
|
||||
voltage:
|
||||
name: "Voltage"
|
||||
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
|
||||
- **counts** (*Optional*): Raw measurement data from the sensor electronics (dimensionless quantity). Higher counts mean less moisture. May be used for material specific calibrations.
|
||||
|
||||
- **name** (**Required**): Sensor name.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **Permittivity** (*Optional*): Permittivity or dielectric coefficient of the material to be measured (dimensionless quantity. Higher permittivity means higher water content. May be used for material specific calibration.
|
||||
|
||||
- **name** (**Required**): Sensor name.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **temperature** (*Optional*): Soil temperature in degrees Celsius. Please note that the temperature sensor is inside the black sensor enclosure and requires some time to equilibrate with the soil temperature.
|
||||
|
||||
- **name** (**Required**): Sensor name.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **moisture** (*Optional*): Soil moisture (volumetric water content in %).
|
||||
|
||||
- **name** (**Required**): Sensor name.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **voltage** (*Optional*): Supply voltage of the sensor in Volt.
|
||||
|
||||
- **name** (**Required**): Sensor name.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
||||
- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`UART Component <uart>` if you want
|
||||
to use multiple UART buses.
|
||||
|
||||
- **update_interval** (*Optional*, :ref:`config-time`): The interval to pull the sensor. Defaults is 60s.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`/components/sensor/smt100`
|
||||
- :ref:`sensor-filters`
|
||||
- :apiref:`smt100/smt100.h`
|
||||
- :ghedit:`Edit`
|
@ -41,7 +41,6 @@ Configuration variables:
|
||||
- **restore** (*Optional*, boolean): Whether to store the intermediate result on the device so
|
||||
that the value can be restored upon power cycle or reboot.
|
||||
Defaults to ``true``.
|
||||
- **min_save_interval** (*Optional*, :ref:`config-time`): The minimum time span between saving updated values to storage. This is to keep wearout of memory low. Defaults to ``0s``.
|
||||
- **method** (*Optional*, string): The method to use for calculating the total daily energy. One of
|
||||
``trapezoid``, ``left`` or ``right``. Defaults to ``right``.
|
||||
- All other options from :ref:`Sensor <config-sensor>`.
|
||||
|
@ -218,6 +218,8 @@ Configuration example for PVVX MiThermometer firmware set to "Custom" advertisem
|
||||
name: "PVVX Battery-Level"
|
||||
battery_voltage:
|
||||
name: "PVVX Battery-Voltage"
|
||||
signal_strength:
|
||||
name: "PVVX Signal"
|
||||
|
||||
Configuration example for ATC MiThermometer firmware set to "Custom" advertisement:
|
||||
|
||||
@ -622,7 +624,7 @@ To maximize the chances of catching advertisements of the sensors, you can set `
|
||||
.. code-block:: yaml
|
||||
|
||||
esp32_ble_tracker:
|
||||
scan_parameters:
|
||||
scan_parameters:
|
||||
interval: 5s # try with 300ms if you don't have LAN module
|
||||
window: 5s # try with 300ms if you don't have LAN module
|
||||
active: false
|
||||
|
1041
components/sprinkler.rst
Normal file
4
conf.py
@ -66,9 +66,9 @@ author = "ESPHome"
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = "2022.6"
|
||||
version = "2022.8"
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = "2022.6.3"
|
||||
release = "2022.8.0b1"
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@ -374,6 +374,13 @@ All Actions
|
||||
- :ref:`stepper.set_target <stepper-set_target_action>` / :ref:`stepper.report_position <stepper-report_position_action>`
|
||||
/ :ref:`stepper.set_speed <stepper-set_speed_action>`
|
||||
- :ref:`servo.write <servo-write_action>` / :ref:`servo.detach <servo-detach_action>`
|
||||
- :ref:`sprinkler.start_full_cycle <sprinkler-controller-action_start_full_cycle>` / :ref:`sprinkler.start_from_queue <sprinkler-controller-action_start_from_queue>` /
|
||||
:ref:`sprinkler.start_single_valve <sprinkler-controller-action_start_single_valve>` / :ref:`sprinkler.shutdown <sprinkler-controller-action_shutdown>` /
|
||||
:ref:`sprinkler.next_valve <sprinkler-controller-action_next_valve>` / :ref:`sprinkler.previous_valve <sprinkler-controller-action_previous_valve>` /
|
||||
: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:`globals.set <globals-set_action>`
|
||||
- :ref:`remote_transmitter.transmit_* <remote_transmitter-transmit_action>`
|
||||
- :ref:`climate.control <climate-control_action>`
|
||||
@ -394,6 +401,7 @@ All Actions
|
||||
- :ref:`select.set <select-set_action>` / :ref:`select.set_index <select-set_index_action>` / :ref:`select.first <select-first_action>` / :ref:`select.last <select-last_action>` / :ref:`select.previous <select-previous_action>` / :ref:`select.next <select-next_action>` / :ref:`select.operation <select-operation_action>`
|
||||
- :ref:`media_player.play <media_player-play>` / :ref:`media_player.pause <media_player-pause>` / :ref:`media_player.stop <media_player-stop>` / :ref:`media_player.toggle <media_player-toggle>`
|
||||
/ :ref:`media_player.volume_up <media_player-volume_up>` / :ref:`media_player.volume_down <media_player-volume_down>` / :ref:`media_player.volume_set <media_player-volume_set>`
|
||||
- :ref:`ble_client.ble_write <ble_client-ble_write_action>`
|
||||
|
||||
.. _config-condition:
|
||||
|
||||
|
@ -35,6 +35,7 @@ Contributors
|
||||
- `ADeadPixel (@ADeadPixel) <https://github.com/ADeadPixel>`__
|
||||
- `Andrea Donno (@adonno) <https://github.com/adonno>`__
|
||||
- `Adrien Brault (@adrienbrault) <https://github.com/adrienbrault>`__
|
||||
- `Ian Blais (@aeonsablaze) <https://github.com/aeonsablaze>`__
|
||||
- `Johan Bloemberg (@aequitas) <https://github.com/aequitas>`__
|
||||
- `Stefan Agner (@agners) <https://github.com/agners>`__
|
||||
- `Anders (@ahd71) <https://github.com/ahd71>`__
|
||||
@ -188,6 +189,7 @@ Contributors
|
||||
- `Dav-id (@dav-id-org) <https://github.com/dav-id-org>`__
|
||||
- `DAVe3283 (@DAVe3283) <https://github.com/DAVe3283>`__
|
||||
- `Dave Richer (@davericher) <https://github.com/davericher>`__
|
||||
- `davestubbs (@davestubbs) <https://github.com/davestubbs>`__
|
||||
- `Dave T (@davet2001) <https://github.com/davet2001>`__
|
||||
- `Dave Wongillies (@davewongillies) <https://github.com/davewongillies>`__
|
||||
- `David De Sloovere (@DavidDeSloovere) <https://github.com/DavidDeSloovere>`__
|
||||
@ -196,6 +198,7 @@ Contributors
|
||||
- `David Zovko (@davidzovko) <https://github.com/davidzovko>`__
|
||||
- `Davy Landman (@DavyLandman) <https://github.com/DavyLandman>`__
|
||||
- `Darren Tucker (@daztucker) <https://github.com/daztucker>`__
|
||||
- `Donovan Baarda (@dbaarda) <https://github.com/dbaarda>`__
|
||||
- `David Buezas (@dbuezas) <https://github.com/dbuezas>`__
|
||||
- `dckiller51 (@dckiller51) <https://github.com/dckiller51>`__
|
||||
- `Debashish Sahu (@debsahu) <https://github.com/debsahu>`__
|
||||
@ -410,6 +413,7 @@ Contributors
|
||||
- `Jens-Christian Skibakk (@jenscski) <https://github.com/jenscski>`__
|
||||
- `Jérôme Laban (@jeromelaban) <https://github.com/jeromelaban>`__
|
||||
- `Jesse Hills (@jesserockz) <https://github.com/jesserockz>`__
|
||||
- `Yuval Brik (@jhamhader) <https://github.com/jhamhader>`__
|
||||
- `Joe (@jhansche) <https://github.com/jhansche>`__
|
||||
- `Jim Bauwens (@jimbauwens) <https://github.com/jimbauwens>`__
|
||||
- `jimtng (@jimtng) <https://github.com/jimtng>`__
|
||||
@ -476,6 +480,7 @@ Contributors
|
||||
- `kroimon (@kroimon) <https://github.com/kroimon>`__
|
||||
- `krunkel (@krunkel) <https://github.com/krunkel>`__
|
||||
- `Kendell R (@KTibow) <https://github.com/KTibow>`__
|
||||
- `Kuba Szczodrzyński (@kuba2k2) <https://github.com/kuba2k2>`__
|
||||
- `Jakub Šimo (@kubik369) <https://github.com/kubik369>`__
|
||||
- `Ken Davidson (@kwdavidson) <https://github.com/kwdavidson>`__
|
||||
- `Kyle Hendricks (@kylehendricks) <https://github.com/kylehendricks>`__
|
||||
@ -618,6 +623,7 @@ Contributors
|
||||
- `nickrout (@nickrout) <https://github.com/nickrout>`__
|
||||
- `Nick Whyte (@nickw444) <https://github.com/nickw444>`__
|
||||
- `nicuh (@nicuh) <https://github.com/nicuh>`__
|
||||
- `NP v/d Spek (@nielsnl68) <https://github.com/nielsnl68>`__
|
||||
- `Joakim Vindgard (@nigobo) <https://github.com/nigobo>`__
|
||||
- `nikito7 (@nikito7) <https://github.com/nikito7>`__
|
||||
- `niklasweber (@niklasweber) <https://github.com/niklasweber>`__
|
||||
@ -645,7 +651,6 @@ Contributors
|
||||
- `Omar Ghader (@omarghader) <https://github.com/omarghader>`__
|
||||
- `Ömer Şiar Baysal (@omersiar) <https://github.com/omersiar>`__
|
||||
- `Oncleben31 (@oncleben31) <https://github.com/oncleben31>`__
|
||||
- `onde2rock (@onde2rock) <https://github.com/onde2rock>`__
|
||||
- `Oscar Bolmsten (@oscar-b) <https://github.com/oscar-b>`__
|
||||
- `Trammell Hudson (@osresearch) <https://github.com/osresearch>`__
|
||||
- `Otamay (@Otamay) <https://github.com/Otamay>`__
|
||||
@ -656,7 +661,6 @@ Contributors
|
||||
- `Pablo Clemente Maseda (@paclema) <https://github.com/paclema>`__
|
||||
- `Derrick Lyndon Pallas (@pallas) <https://github.com/pallas>`__
|
||||
- `Panuruj Khambanonda (PK) (@panuruj) <https://github.com/panuruj>`__
|
||||
- `parats15 (@parats15) <https://github.com/parats15>`__
|
||||
- `Pasi Suominen (@pasiz) <https://github.com/pasiz>`__
|
||||
- `Patrick Felstead (@patfelst) <https://github.com/patfelst>`__
|
||||
- `Patrick van der Leer (@patvdleer) <https://github.com/patvdleer>`__
|
||||
@ -665,7 +669,6 @@ Contributors
|
||||
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__
|
||||
- `Bartłomiej Biernacki (@pax0r) <https://github.com/pax0r>`__
|
||||
- `Paul Doidge (@pdoidge) <https://github.com/pdoidge>`__
|
||||
- `peq123 (@peq123) <https://github.com/peq123>`__
|
||||
- `per1234 (@per1234) <https://github.com/per1234>`__
|
||||
- `Peter Valkov (@peter-valkov) <https://github.com/peter-valkov>`__
|
||||
- `Peter Foreman (@peterforeman) <https://github.com/peterforeman>`__
|
||||
@ -896,4 +899,4 @@ Contributors
|
||||
- `Zack Barett (@zsarnett) <https://github.com/zsarnett>`__
|
||||
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
|
||||
|
||||
*This page was last updated August 8, 2022.*
|
||||
*This page was last updated August 10, 2022.*
|
||||
|
1
images/dac7678.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="475.15" height="25mm" viewBox="0 0 125.717 25" xmlns="http://www.w3.org/2000/svg"><path style="fill:#000;fill-opacity:1;stroke-width:.133497;stroke-miterlimit:4;stroke-dasharray:none" d="M5 0h115.717c2.77 0 5 2.23 5 5v15c0 2.77-2.23 5-5 5H5c-2.77 0-5-2.23-5-5V5c0-2.77 2.23-5 5-5Z"/><g aria-label="DAC7678" style="font-size:10.5833px;line-height:1.25;letter-spacing:1.08479px;fill:#fffffc;stroke-width:.264583"><path d="M6.48 20.666V4.86h7.18q2.574 0 4.538.994 1.987.97 3.07 2.754 1.107 1.784 1.107 4.154 0 2.371-1.106 4.155-1.084 1.783-3.07 2.777-1.965.97-4.539.97zm7-3.003q2.37 0 3.77-1.31 1.422-1.332 1.422-3.59 0-2.257-1.422-3.567-1.4-1.332-3.77-1.332h-3.342v9.799zM41.635 20.666h-3.838l-1.4-3.387H29.06l-1.4 3.387h-3.747L30.956 4.86h3.612zM32.74 8.45l-2.506 6.051h5.013zM51.706 20.937q-2.416 0-4.38-1.039-1.942-1.061-3.07-2.912-1.107-1.874-1.107-4.223 0-2.348 1.106-4.199 1.13-1.874 3.07-2.913 1.965-1.06 4.403-1.06 2.055 0 3.703.722 1.671.722 2.8 2.077l-2.348 2.167q-1.603-1.851-3.974-1.851-1.467 0-2.619.655-1.151.632-1.806 1.783-.632 1.152-.632 2.62 0 1.467.632 2.618.655 1.152 1.806 1.807 1.152.632 2.62.632 2.37 0 3.973-1.874l2.348 2.167q-1.129 1.378-2.8 2.1-1.67.723-3.725.723zM60.49 10.415V4.861h12.666v2.37l-5.87 13.435h-3.974l5.667-12.824h-5.238v2.573zM83.023 10.754q1.513 0 2.755.61t1.964 1.738q.723 1.106.723 2.574 0 1.58-.79 2.777t-2.168 1.851q-1.355.633-3.025.633-3.32 0-5.193-2.032-1.874-2.032-1.874-5.803 0-2.687 1.016-4.606t2.822-2.912q1.829-.994 4.222-.994 1.264 0 2.416.294 1.174.27 1.987.79l-1.355 2.687q-1.174-.79-2.958-.79-2.01 0-3.183 1.174-1.174 1.174-1.265 3.409 1.4-1.4 3.906-1.4zm-.745 7.45q1.174 0 1.897-.631.745-.633.745-1.716 0-1.084-.745-1.716-.723-.655-1.942-.655-1.196 0-1.964.677-.768.655-.768 1.694 0 1.038.745 1.693t2.032.655zM90.498 10.415V4.861h12.666v2.37l-5.87 13.435H93.32l5.667-12.824h-5.238v2.573zM116.305 12.357q1.174.587 1.784 1.535.632.949.632 2.19 0 1.468-.835 2.574-.836 1.084-2.348 1.694-1.513.587-3.5.587t-3.5-.587q-1.49-.61-2.325-1.694-.813-1.106-.813-2.574 0-1.241.61-2.19.632-.948 1.783-1.535-.88-.542-1.354-1.355-.474-.835-.474-1.896 0-1.377.767-2.393.768-1.016 2.145-1.558 1.377-.565 3.161-.565 1.806 0 3.183.565 1.4.542 2.168 1.558.768 1.016.768 2.393 0 1.061-.475 1.896-.474.813-1.377 1.355zm-4.267-5.08q-1.106 0-1.784.542-.654.52-.654 1.445 0 .903.654 1.422.655.52 1.784.52t1.806-.52q.678-.519.678-1.422 0-.926-.678-1.445-.677-.542-1.806-.542zm0 10.973q1.377 0 2.167-.61.813-.632.813-1.67 0-1.04-.813-1.649-.79-.61-2.167-.61-1.355 0-2.145.61t-.79 1.649q0 1.06.79 1.67.79.61 2.145.61z" style="font-weight:700;font-size:22.5778px;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Bold'"/></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
20
images/feedback_cover.svg
Normal file
@ -0,0 +1,20 @@
|
||||
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<g class="layer">
|
||||
<title>Layer 1</title>
|
||||
<path d="m3.859691,11l4,0l0,-2l4,0l0,2l4,0l0,-7l-12,0l0,7m12,2l-12,0l0,7l12,0l0,-7m-12,-11l12,0a2,2 0 0 1 2,2l0,16a2,2 0 0 1 -2,2l-12,0a2,2 0 0 1 -2,-2l0,-16a2,2 0 0 1 2,-2z" id="svg_1" transform="matrix(1 0 0 1 0 0)"/>
|
||||
<ellipse cx="19.177173" cy="20.221166" fill="#ffffff" id="svg_6" rx="2.437574" ry="2.437574" stroke="#000000" stroke-opacity="0"/>
|
||||
<use fill="#000000" id="svg_3" stroke="#000000" stroke-opacity="0" transform="matrix(0.333333 0 0 0.333333 0 0)" x="45.303208" xlink:href="#svg_2" y="47.800236"/>
|
||||
<use fill="#4c4c4c" id="svg_7" transform="matrix(0.232786 0 0 0.232786 62.8523 13.3204)" x="-194.266223" xlink:href="#svg_4" y="-13.118657"/>
|
||||
<use fill="#4c4c4c" id="svg_8" transform="matrix(0.232786 0 0 0.232786 104.588 20.2169)" x="-373.555514" xlink:href="#svg_4" y="-74.414128"/>
|
||||
<use fill="#4c4c4c" id="svg_9" transform="matrix(0.232786 0 0 0.232786 146.443 25.5677)" x="-553.866324" xlink:href="#svg_4" y="-76.45732"/>
|
||||
<use fill="#4c4c4c" id="svg_10" transform="matrix(0.232786 0 0 0.232786 146.205 28.2869)" x="-552.333963" xlink:href="#svg_4" y="-98.421519"/>
|
||||
</g>
|
||||
<defs>
|
||||
<symbol height="24" id="svg_2" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<path d="m12,20a7,7 0 0 1 -7,-7a7,7 0 0 1 7,-7a7,7 0 0 1 7,7a7,7 0 0 1 -7,7m7.03,-12.61l1.42,-1.42c-0.45,-0.51 -0.9,-0.97 -1.41,-1.41l-1.42,1.44c-1.55,-1.26 -3.5,-2 -5.62,-2a9,9 0 0 0 -9,9a9,9 0 0 0 9,9c5,0 9,-4.03 9,-9c0,-2.12 -0.74,-4.07 -1.97,-5.61m-8.03,6.61l2,0l0,-6l-2,0m4,-7l-6,0l0,2l6,0l0,-2z"/>
|
||||
</symbol>
|
||||
<symbol height="24" id="svg_4" version="1.1" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<path d="m1,11l2.17,0c0.41,-1.17 1.52,-2 2.83,-2c0.65,0 1.25,0.21 1.74,0.56l6.7,-4.69l1.14,1.63l-6.69,4.7c0.07,0.25 0.11,0.52 0.11,0.8a3,3 0 0 1 -3,3c-1.31,0 -2.42,-0.83 -2.83,-2l-2.17,0l0,-2m22,0l0,2l-2.17,0c-0.41,1.17 -1.52,2 -2.83,2a3,3 0 0 1 -3,-3a3,3 0 0 1 3,-3c1.31,0 2.42,0.83 2.83,2l2.17,0m-17,0a1,1 0 0 0 -1,1a1,1 0 0 0 1,1a1,1 0 0 0 1,-1a1,1 0 0 0 -1,-1m12,0a1,1 0 0 0 -1,1a1,1 0 0 0 1,1a1,1 0 0 0 1,-1a1,1 0 0 0 -1,-1z"/>
|
||||
</symbol>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
BIN
images/smt100.jpg
Normal file
After Width: | Height: | Size: 3.3 KiB |
1
images/sprinkler-variant.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M10 10H14V22H10V10M7 9H9V7H7V9M4 8H6V6H4V8M4 11H6V9H4V11M1 13H3V11H1V13M1 7H3V5H1V7M1 10H3V8H1V10M18 11H20V9H18V11M21 10H23V8H21V10M21 5V7H23V5H21M21 13H23V11H21V13M15 9H17V7H15V9M18 8H20V6H18V8M10 7H10.33L11 9H13L13.67 7H14V6H10V7Z" /></svg>
|
After Width: | Height: | Size: 527 B |
@ -313,6 +313,7 @@ Environmental
|
||||
SHT3X-D, components/sensor/sht3xd, sht3xd.jpg, Temperature & Humidity
|
||||
SHT4X, components/sensor/sht4x, sht4x.jpg, Temperature & Humidity
|
||||
SHTCx, components/sensor/shtcx, shtc3.jpg, Temperature & Humidity
|
||||
SMT100, components/sensor/smt100, smt100.jpg, Moisture & Temperature
|
||||
STS3X, components/sensor/sts3x, sts3x.jpg, Temperature
|
||||
TMP102, components/sensor/tmp102, tmp102.jpg, Temperature
|
||||
TMP117, components/sensor/tmp117, tmp117.jpg, Temperature
|
||||
@ -356,6 +357,7 @@ Miscellaneous
|
||||
Modbus Sensor, components/sensor/modbus_controller, modbus.png
|
||||
Nextion, components/sensor/nextion, nextion.jpg, Sensors from display
|
||||
Rotary Encoder, components/sensor/rotary_encoder, rotary_encoder.jpg
|
||||
SMT100, components/sensor/smt100, smt100.jpg, Moisture & Temperature
|
||||
Tuya Sensor, components/sensor/tuya, tuya.png
|
||||
TX20, components/sensor/tx20, tx20.jpg, Wind speed & Wind direction
|
||||
|
||||
@ -441,6 +443,7 @@ Output Components
|
||||
MCP4725, components/output/mcp4725, mcp4725.jpg
|
||||
MCP4728, components/output/mcp4728, mcp4728.jpg
|
||||
MCP47A1, components/output/mcp47a1, mcp47a1.svg
|
||||
DAC7678, components/output/dac7678, dac7678.svg
|
||||
BLE Binary Output, components/output/ble_client, bluetooth.svg
|
||||
Modbus Output, components/output/modbus_controller, modbus.png
|
||||
Custom Output, components/output/custom, language-cpp.svg
|
||||
@ -562,6 +565,7 @@ Cover Components
|
||||
|
||||
Cover Core, components/cover/index, folder-open.svg
|
||||
Template Cover, components/cover/template, description.svg
|
||||
Feedback Cover, components/cover/feedback, feedback_cover.svg
|
||||
Endstop Cover, components/cover/endstop, electric-switch.svg
|
||||
Current-Based Cover, components/cover/current_based, flash.svg
|
||||
Time-Based Cover, components/cover/time_based, timer.svg
|
||||
@ -666,6 +670,7 @@ Misc Components
|
||||
ESP32 Camera Web Server, components/esp32_camera_web_server, camera.svg
|
||||
Stepper, components/stepper/index, stepper.svg
|
||||
Servo, components/servo, servo.svg
|
||||
Sprinkler, components/sprinkler, sprinkler-variant.svg
|
||||
|
||||
PCF8574 I/O Expander, components/pcf8574, pcf8574.jpg
|
||||
MCP230XX I/O Expander - I²C Bus, components/mcp230xx, mcp230xx.svg
|
||||
|