From 25152e2f540b76f9662b59c5658423ac391aa282 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 17 Jan 2022 12:32:10 +1300 Subject: [PATCH 01/40] Add number setting to web_server (#1804) --- Makefile | 4 ++-- _static/webserver-v1.js | 9 +++++++++ _static/webserver-v1.min.js | 2 +- web-api/index.rst | 26 ++++++++++++++++++++++++-- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index a3947eab0..e3a081930 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,8 @@ html-strict: sphinx-build -M html . _build -W -j auto -n $(O) minify: - minify -o _static/webserver-v1.min.js _static/webserver-v1.js - minify -o _static/webserver-v1.min.css _static/webserver-v1.css + minify _static/webserver-v1.js > _static/webserver-v1.min.js + minify _static/webserver-v1.css > _static/webserver-v1.min.css cleanhtml: rm -rf "_build/html/*" diff --git a/_static/webserver-v1.js b/_static/webserver-v1.js index 36898d887..1f66a04a9 100644 --- a/_static/webserver-v1.js +++ b/_static/webserver-v1.js @@ -83,6 +83,15 @@ for (; row = states.rows[i]; i++) { }); })(row.id); } + if (row.classList.contains("number")) { + (function(id) { + row.children[2].children[0].addEventListener('change', function () { + const xhr = new XMLHttpRequest(); + xhr.open("POST", '/number/' + id.substr(7) + '/set?value=' + encodeURIComponent(this.value), true); + xhr.send(); + }); + })(row.id); + } if (row.classList.contains("button")) { (function(id) { row.children[2].children[0].addEventListener('click', function () { diff --git a/_static/webserver-v1.min.js b/_static/webserver-v1.min.js index f2dddc114..1b5110716 100644 --- a/_static/webserver-v1.min.js +++ b/_static/webserver-v1.min.js @@ -1 +1 @@ -const source=new EventSource("/events");source.addEventListener("log",(function(t){const n=document.getElementById("log");let e="";t.data.startsWith("")?e="e":t.data.startsWith("")?e="w":t.data.startsWith("")?e="i":t.data.startsWith("")?e="c":t.data.startsWith("")?e="d":t.data.startsWith("")?e="v":n.innerHTML+=t.data+"\n",n.innerHTML+=''+t.data.substr(7,t.data.length-10)+"\n"})),source.addEventListener("state",(function(t){const n=JSON.parse(t.data);document.getElementById(n.id).children[1].innerText=n.state}));const states=document.getElementById("states");let row,i=0;for(;row=states.rows[i];i++)row.children[2].children.length&&(row.classList.contains("switch")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/switch/"+t.substr(7)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("fan")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/fan/"+t.substr(4)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("light")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/light/"+t.substr(6)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("cover")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/cover/"+t.substr(6)+"/open",!0),n.send()})),row.children[2].children[1].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/cover/"+t.substr(6)+"/close",!0),n.send()}))}(row.id),row.classList.contains("select")&&function(t){row.children[2].children[0].addEventListener("change",(function(){const n=new XMLHttpRequest;n.open("POST","/select/"+t.substr(7)+"/set?option="+encodeURIComponent(this.value),!0),n.send()}))}(row.id),row.classList.contains("button")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/button/"+t.substr(7)+"/press",!0),n.send()}))}(row.id)); +const source=new EventSource("/events");source.addEventListener("log",(function(t){const n=document.getElementById("log");let e="";t.data.startsWith("")?e="e":t.data.startsWith("")?e="w":t.data.startsWith("")?e="i":t.data.startsWith("")?e="c":t.data.startsWith("")?e="d":t.data.startsWith("")?e="v":n.innerHTML+=t.data+"\n",n.innerHTML+=''+t.data.substr(7,t.data.length-10)+"\n"})),source.addEventListener("state",(function(t){const n=JSON.parse(t.data);document.getElementById(n.id).children[1].innerText=n.state}));const states=document.getElementById("states");let row,i=0;for(;row=states.rows[i];i++)row.children[2].children.length&&(row.classList.contains("switch")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/switch/"+t.substr(7)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("fan")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/fan/"+t.substr(4)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("light")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/light/"+t.substr(6)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("cover")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/cover/"+t.substr(6)+"/open",!0),n.send()})),row.children[2].children[1].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/cover/"+t.substr(6)+"/close",!0),n.send()}))}(row.id),row.classList.contains("select")&&function(t){row.children[2].children[0].addEventListener("change",(function(){const n=new XMLHttpRequest;n.open("POST","/select/"+t.substr(7)+"/set?option="+encodeURIComponent(this.value),!0),n.send()}))}(row.id),row.classList.contains("number")&&function(t){row.children[2].children[0].addEventListener("change",(function(){const n=new XMLHttpRequest;n.open("POST","/number/"+t.substr(7)+"/set?value="+encodeURIComponent(this.value),!0),n.send()}))}(row.id),row.classList.contains("button")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/button/"+t.substr(7)+"/press",!0),n.send()}))}(row.id)); diff --git a/web-api/index.rst b/web-api/index.rst index 4136fd079..8d23f9b8c 100644 --- a/web-api/index.rst +++ b/web-api/index.rst @@ -63,7 +63,7 @@ There's also a simple REST API available which can be used to get and set the cu calls to this API follow the URL schema ``//[/?=]``. The ``domain`` is the type of the component, for example ``sensor`` or ``light``. ``id`` refers to the id of the component - this ID is created by taking the name of the component, stripping out -all non-alphanumeric characters, making everything lowercase and replacing all spaces by underscores. +all non-alphanumeric characters, making everything lowercase and replacing all spaces by underscores. To confirm the ```` to use, you can set the :ref:`log level ` to ``VERY_VERBOSE`` and check the ``object_id:`` in the logs. @@ -161,7 +161,7 @@ the state of a light, send a GET request to ``/light/``, for example ``light - **effect**: The currently active effect, only if the light supports effects. - **white_value**: The white value of RGBW lights. From 0 to 255. Only if the light supports white value. - **color_temp**: The color temperature of the RGBWW light. Between minimum mireds and maximum mireds of the light. - Only if the light support color temperature. + Only if the light support color temperature. Setting light state can happen through three POST method calls: ``turn_on``, ``turn_off`` and ``toggle``. Turn on and off have additional URL encoded parameters that can be used to set other properties. For example @@ -249,3 +249,25 @@ can be used: Creating a POST request to ``/cover/front_window_blinds/set?position=0.1&tilt=0.3`` will start moving the blinds towards an almost completely closed position and a new tilt angle. + +Number +****** + +Numbers can be set to a value within their minimum and maximum range and will return their current value. For example sending +a GET request to ``/number/desired_delay`` could yield this payload: + +.. code-block:: json + + { + "id": "number-desired_delay", + "state": "20.0000", + "value": 20 + } + +POST requests on the other hand allow setting the number, the available +method is ``set``. The following parameter can be used: + +- **value**: The value you want to set the number to. The value must be within the + minimum and maximum range of the number otherwise it will be ignored. + +For example POST ``/number/desired_delay/set?value=24`` will set the number to 24. From 4a74fddd0fc809a598fe7e8c995eb6f83d36058b Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 19 Jan 2022 09:55:08 +1300 Subject: [PATCH 02/40] A few updates on canbus page (#1813) --- components/canbus.rst | 47 ++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/components/canbus.rst b/components/canbus.rst index 88b748115..4240bb5c2 100644 --- a/components/canbus.rst +++ b/components/canbus.rst @@ -52,7 +52,10 @@ Each canbus platform extends this configuration schema. std::string b(x.begin(), x.end()); ESP_LOGD("can id 500", "%s", &b[0] ); +.. _config-canbus: + Configuration variables: +************************ - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. - **can_id** (**Required**, int): default *can id* used for transmitting frames. @@ -79,6 +82,7 @@ Configuration variables: - 1000KBPS Automations: +------------ - **on_frame** (*Optional*, :ref:`Automation `): An automation to perform when ability CAN Frame is received. See :ref:`canbus-on-frame`. @@ -148,11 +152,24 @@ ESP32 CAN Component The ESP32 has an integrated CAN controller and therefore doesn't need an external controller necessarily. You only need to specify the RX and TX pins. +.. code-block:: yaml + + # Example configuration entry + canbus: + - platform: esp32_can + tx_pin: GPIO1 + rx_pin: GPIO3 + can_id: 4 + bit_rate: 50kbps + on_frame: + ... + Configuration variables: ************************ - **rx_pin** (**Required**, :ref:`Pin `): Receive pin. - **tx_pin** (**Required**, :ref:`Pin `): Transmit pin. +- All other options from :ref:`Canbus `. MCP2515 Component ----------------- @@ -162,20 +179,6 @@ You need to have an :ref:`SPI bus ` in your configuration with both the **m For wiring up the MSP2515 please refer to the section below. -Configuration variables: -************************ - -- **cs_pin** (**Required**, :ref:`Pin Schema `): Is used to tell the receiving SPI device - when it should listen for data on the SPI bus. Each device has an individual ``CS`` line. - Sometimes also called ``SS``. -- **clock** (*Optional*): One of ``8MHZ``, ``16MHZ`` or ``20MHZ``. Clock crystal used on the MCP2515 device. - Defaults to ``8MHZ``. -- **mode** (*Optional*): Operation mode. Default to ``NORMAL`` - - - NORMAL: Normal operation - - LOOPBACK: Loopback mode can be used to just test you spi connections to the device - - LISTENONLY: only receive data - .. code-block:: yaml # Example configuration entry @@ -197,6 +200,22 @@ Configuration variables: id: light_1 brightness: !lambda "return (x.size() > 0) ? (float) x[0]/255 : 0;" +Configuration variables: +************************ + +- **cs_pin** (**Required**, :ref:`Pin Schema `): Is used to tell the receiving SPI device + when it should listen for data on the SPI bus. Each device has an individual ``CS`` line. + Sometimes also called ``SS``. +- **clock** (*Optional*): One of ``8MHZ``, ``16MHZ`` or ``20MHZ``. Clock crystal used on the MCP2515 device. + Defaults to ``8MHZ``. +- **mode** (*Optional*): Operation mode. Default to ``NORMAL`` + + - NORMAL: Normal operation + - LOOPBACK: Loopback mode can be used to just test you spi connections to the device + - LISTENONLY: only receive data + +- All other options from :ref:`Canbus `. + Wiring options --------------- Easiest approach is to just use fully assembled boards and just add one resistor in the MISO line. From 021272ecee20aa85842f2aa2533613642ce395ca Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 21 Jan 2022 11:09:11 +1300 Subject: [PATCH 03/40] Add initial_run to regular lambda effect (#1806) --- components/light/index.rst | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/components/light/index.rst b/components/light/index.rst index 21fd75887..a9f53da61 100644 --- a/components/light/index.rst +++ b/components/light/index.rst @@ -405,10 +405,10 @@ with the behavior of the ``light.is_on`` and ``light.is_off`` condition above. ``light.on_state`` Trigger ************************** -This trigger is activated each time the set light state is changed. It is not triggered +This trigger is activated each time the set light state is changed. It is not triggered based on current state, but rather, it triggers on the set state which can differ from the current state due to transitions. For example, the ``light.on_state`` trigger can -be used for immediate action when the light is set to off; while ``light.on_turn_off`` +be used for immediate action when the light is set to off; while ``light.on_turn_off`` does not trigger until the light actually achieves the off state. .. code-block:: yaml @@ -586,6 +586,10 @@ Lambda Effect This effect allows you to write completely custom light effects yourself using :ref:`lambdas `. +Available variable in the lambda: + +- **initial_run** - A bool which is true on the first execution of the lambda. Useful to reset static variables when restarting an effect. + .. code-block:: yaml light: @@ -622,6 +626,7 @@ Configuration variables: - **lambda** (**Required**, :ref:`lambda `): The code to execute. ``static`` variables are especially useful. + Addressable Rainbow Effect ************************** From 5060264b1b56be10764821db990583f8a7c567bd Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 21 Jan 2022 11:16:34 +1300 Subject: [PATCH 04/40] Add doc for transparent_binary image type (#1796) --- components/display/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/display/index.rst b/components/display/index.rst index 60431b81b..affb1db57 100644 --- a/components/display/index.rst +++ b/components/display/index.rst @@ -507,6 +507,8 @@ Configuration variables: per pixel, 8 pixels per byte. - ``GRAYSCALE``: Full scale grey. Uses 8 bits per pixel, 1 pixel per byte. - ``RGB24``: Full RGB color stored. Uses 3 bytes per pixel. + - ``TRANSPARENT_BINARY``: One color, any pixel that is fully transparent will not be drawn, and any other pixel + will be the on color. Uses 1 bit per pixel, 8 pixels per byte. - **dither** (*Optional*): Specifies which dither method used to process the image, only used in GRAYSCALE and BINARY type image. Defaults to ``NONE``. You can read more about it `here `__ and `here `__. From c1322525edfdd5417c25652bd5c88737ff5f4596 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 21 Jan 2022 15:45:57 +1300 Subject: [PATCH 05/40] Add ektf2232 touchscreen controller (#1793) --- components/binary_sensor/ektf2232.rst | 96 +++++++++++++++++++++++++++ images/ektf2232.svg | 1 + index.rst | 1 + 3 files changed, 98 insertions(+) create mode 100644 components/binary_sensor/ektf2232.rst create mode 100644 images/ektf2232.svg diff --git a/components/binary_sensor/ektf2232.rst b/components/binary_sensor/ektf2232.rst new file mode 100644 index 000000000..c0a99877a --- /dev/null +++ b/components/binary_sensor/ektf2232.rst @@ -0,0 +1,96 @@ +EKTF2232 Touch Screen Controller +================================ + +.. seo:: + :description: Instructions for setting up EKTF2232 touch screen controller with ESPHome + :image: ektf2232.svg + :keywords: EKTF2232 + +.. _ektf2232-component: + +Component/Hub +------------- + +The ``ektf2232`` component allows using the touch screen controller +found in the :doc:`Inkplate 6 Plus ` with ESPHome. +The :ref:`I²C ` is required to be set up in your configuration for this sensor to work. + +.. code-block:: yaml + + # Example configuration entry + ektf2232: + interrupt_pin: GPIO36 + rts_pin: GPIO16 + + binary_sensor: + - platform: ektf2232 + id: touch_key0 + x_min: 80 + x_max: 160 + y_min: 106 + y_max: 212 + + +Configuration variables: +------------------------ + +- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor. + +- **rts_pin** (*Optional*, :ref:`Pin Schema `): The reset pin of the controller. + +- **interupt_pin** (*Optional*, :ref:`Pin Schema `): The touch detection pin. + +- **display_width** (*Optional*, int): The dimension of the display in the horizontal + direction. Defaults to ``1024`` to match the Inkplate 6 Plus. + +- **display_height** (*Optional*, int): The dimension of the display in the vertical + direction. Defaults to ``758`` to match the Inkplate 6 Plus. + +- **on_touch** (*Optional*, :ref:`Automation `): An automation to perform + when the touch screen is pressed. See :ref:`ektf2232-on_touch`. + +.. _ektf2232-on_touch: + +``on_touch`` Trigger +-------------------- + +This automation will be triggered when the EKTF2232 touch screen detects a touch. + +This trigger provides one arguments of type :apistruct:`ektf2232::TouchPoint` which has two integer members: ``x`` and ``y`` which +represent the position of the touch calibrated to the display width and heigh config options given. + +Binary Sensor +------------- + +The ``ektf2232`` binary sensor allows you to setup areas on the touch screen as virtual +buttons. First, setup a :ref:`ektf2232-component` and then use this binary sensor platform +to create individual binary sensors for each virtual button. + +Configuration variables: +------------------------ + +- **name** (*Optional*, string): The name for the binary sensor. + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. + +- **ektf2232_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the component the sensor is part of. + +- **x_min** (**Required**, int): Left coordinate of the screen area to be detected as the virtual button. + +- **x_max** (**Required**, int): Right coordinate of the screen area to be detected as the virtual button. + +- **y_min** (**Required**, int): Top coordinate of the screen area to be detected as the virtual button. + +- **y_max** (**Required**, int): Bottom coordinate of the screen area to be detected as the virtual button. + +- All other options from :ref:`Binary Sensor `. + + +See Also +-------- + +- :ref:`Binary Sensor Filters ` +- :doc:`Inkplate 6 Plus ` +- :apiref:`ektf2232/ektf2232.h` +- :apiref:`ektf2232/binary_sensor/ektf2232_binary_sensor.h` +- :ghedit:`Edit` diff --git a/images/ektf2232.svg b/images/ektf2232.svg new file mode 100644 index 000000000..3058355dc --- /dev/null +++ b/images/ektf2232.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.rst b/index.rst index 32d15af1e..da34670f0 100644 --- a/index.rst +++ b/index.rst @@ -401,6 +401,7 @@ Binary Sensor Components Modbus Binary Sensor, components/binary_sensor/modbus_controller, modbus.png XPT2046, components/binary_sensor/xpt2046, xpt2046.jpg CAP1188 Capacitive Touch Sensor, components/binary_sensor/cap1188, cap1188.jpg + EKTF2232 Touchscreen, components/binary_sensor/ektf2232, ektf2232.svg Custom Binary Sensor, components/binary_sensor/custom, language-cpp.svg Output Components From bb18559af9cf6afa0980e28bc6ab6fdf7c42224c Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Sat, 22 Jan 2022 19:33:20 +1300 Subject: [PATCH 06/40] Update for multiple cd74hc4067 (#1833) --- components/sensor/cd74hc4067.rst | 43 +++++++++++++++++--------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/components/sensor/cd74hc4067.rst b/components/sensor/cd74hc4067.rst index 5925256a4..1be0db126 100644 --- a/components/sensor/cd74hc4067.rst +++ b/components/sensor/cd74hc4067.rst @@ -14,7 +14,7 @@ and there are also some guides around like the one from `Adam Meyer `) and pass it to the cd74hc4067 sensors with the ``sensor`` option. Each cd74hc4067 sensor is configured for one of the 16 input pins of the multiplexer. @@ -22,20 +22,21 @@ Each cd74hc4067 sensor is configured for one of the 16 input pins of the multipl # Example configuration entry cd74hc4067: - pin_s0: D0 - pin_s1: D1 - pin_s2: D2 - pin_s3: D3 + - id: cd74hc4067_1 + pin_s0: D0 + pin_s1: D1 + pin_s2: D2 + pin_s3: D3 sensor: - - platform: adc + - platform: adc id: adc_sensor pin: A0 - - platform: cd74hc4067 + - platform: cd74hc4067 id: adc_0 number: 0 sensor: adc_sensor - - platform: cd74hc4067 + - platform: cd74hc4067 id: adc_1 number: 1 sensor: adc_sensor @@ -56,13 +57,14 @@ Configuration Variables: ************************ - **sensor** (**Required**, :ref:`config-id`): The source sensor to measure voltage values from, e.g. :doc:`ADC sensor `. +- **cd74hc4067_id** (**Required**, :ref:`config-id`): The id of the cd74hc4067 component to use for this sensor. - **number** (*Required*, int): The number of the cd74hc4067 input pin (0-15) - All other options from :ref:`Sensor `. Application Example ------------------- -In this example, the component is used to measure the AC power output of two solar inverters to integrate them +In this example, the component is used to measure the AC power output of two solar inverters to integrate them as energy sources in `Home Assistant `__. For this purpose, :doc:`CT clamp sensors ` are attached on each of the sensors. @@ -72,42 +74,43 @@ The ``adc`` and ``cd74hc4067`` sensors updates are triggered by the ``ct_clamp`` .. code-block:: yaml cd74hc4067: - pin_s0: D0 - pin_s1: D1 - pin_s2: D2 - pin_s3: D3 + - id: cd74hc4067_1 + pin_s0: D0 + pin_s1: D1 + pin_s2: D2 + pin_s3: D3 sensor: - - platform: adc + - platform: adc id: adc_sensor pin: A0 update_interval: 3600s - - platform: cd74hc4067 + - platform: cd74hc4067 id: solar_1_raw number: 0 sensor: adc_sensor update_interval: 3600s - - platform: cd74hc4067 + - platform: cd74hc4067 id: solar_2_raw number: 1 sensor: adc_sensor update_interval: 3600s - - platform: ct_clamp + - platform: ct_clamp name: "SolarPower1" sensor: solar_1_raw update_interval: 5s unit_of_measurement: "W" device_class: "power" filters: - - lambda: "return x > 0.001 ? x * 56221 : 0;" - - platform: ct_clamp + - lambda: "return x > 0.001 ? x * 56221 : 0;" + - platform: ct_clamp name: "SolarPower2" sensor: solar_2_raw update_interval: 5s unit_of_measurement: "W" device_class: "power" filters: - - lambda: "return x > 0.001 ? x * 57519 : 0;" + - lambda: "return x > 0.001 ? x * 57519 : 0;" See Also -------- From a620f19eb6b5e6f640a642ef17e9783a37388a23 Mon Sep 17 00:00:00 2001 From: William Charlton <38622599+willwill2will54@users.noreply.github.com> Date: Sat, 22 Jan 2022 11:14:01 +0000 Subject: [PATCH 07/40] Add Wake-on-LAN docs (#1775) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Co-authored-by: William Charlton --- components/button/wake_on_lan.rst | 32 +++++++++++++++++++++++++++++++ index.rst | 1 + 2 files changed, 33 insertions(+) create mode 100644 components/button/wake_on_lan.rst diff --git a/components/button/wake_on_lan.rst b/components/button/wake_on_lan.rst new file mode 100644 index 000000000..3d702036a --- /dev/null +++ b/components/button/wake_on_lan.rst @@ -0,0 +1,32 @@ +Wake-on-LAN Button +==================== + +.. seo:: + :description: Instructions for setting up buttons that can send wakeup packets to computers on the network. + :image: radio-tower.svg + +The ``wake_on_lan`` button platform allows you to send a Wake-on-LAN magic packet to a computer on the network +by specifying its MAC address. + +.. code-block:: yaml + + # Example configuration entry + button: + - platform: wake_on_lan + name: "Start the Server" + target_mac_address: E9:48:B8:CA:58:A1 + +Configuration variables: +------------------------ + +- **name** (**Required**, string): The name for the button. +- **target_mac_address** (**Required**, MAC Address): The MAC Address of the target computer. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- All other options from :ref:`Button `. + +See Also +-------- + +- :doc:`template` +- :apiref:`wake_on_lan/wake_on_lan.h` +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index da34670f0..8f27c48ff 100644 --- a/index.rst +++ b/index.rst @@ -485,6 +485,7 @@ Button Components Button Core, components/button/index, folder-open.svg Template Button, components/button/template, description.svg Restart Button, components/button/restart, restart.svg + Wake-on-LAN, components/button/wake_on_lan, power_settings.svg Fan Components -------------- From 296cda82cd265de30a414185a96a7ceb2cacb2d1 Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Sun, 23 Jan 2022 06:42:36 +1100 Subject: [PATCH 08/40] Add restore_mode to fan component (#1802) --- components/fan/index.rst | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/components/fan/index.rst b/components/fan/index.rst index 4809f2432..674b45f05 100644 --- a/components/fan/index.rst +++ b/components/fan/index.rst @@ -10,8 +10,6 @@ the Home Assistant frontend. A fan can be switched ON or OFF, optionally has a speed level between 1 and the maximum supported speed level of the fan, and can have an oscillate and direction output. -This component restores its state on reboot/reset. - .. figure:: images/fan-ui.png :align: center @@ -30,6 +28,17 @@ Configuration variables: - **name** (**Required**, string): The name of the fan. - **icon** (*Optional*, icon): Manually set the icon to use for the fan in the frontend. +- **restore_mode** (*Optional*): Control how the fan attempts to restore state on bootup. + For restoring on ESP8266s, also see ``esp8266_restore_from_flash`` in the + :doc:`esphome section `. + + - ``RESTORE_DEFAULT_OFF`` (Default) - Attempt to restore state and default to OFF if not possible to restore. + - ``RESTORE_DEFAULT_ON`` - Attempt to restore state and default to ON. + - ``RESTORE_INVERTED_DEFAULT_OFF`` - Attempt to restore state inverted from the previous state and default to OFF. + - ``RESTORE_INVERTED_DEFAULT_ON`` - Attempt to restore state inverted from the previous state and default to ON. + - ``ALWAYS_OFF`` - Always initialize the fan as OFF on bootup. + - ``ALWAYS_ON`` - Always initialize the fan as ON on bootup. + - **internal** (*Optional*, boolean): Mark this component as internal. Internal components will not be exposed to the frontend (like Home Assistant). Only specifying an ``id`` without a ``name`` will implicitly set this to true. From f2e4778d70e565148e1d5a4f420e3729e6639a27 Mon Sep 17 00:00:00 2001 From: Pavel Skuratovich Date: Sun, 23 Jan 2022 01:09:02 +0300 Subject: [PATCH 09/40] Slow pwm restart cycle on state change (#1774) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/output/slow_pwm.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/output/slow_pwm.rst b/components/output/slow_pwm.rst index c23d5b7d4..ccb3781ca 100644 --- a/components/output/slow_pwm.rst +++ b/components/output/slow_pwm.rst @@ -37,7 +37,9 @@ Configuration variables: - **state_change_action** (*Optional*, :ref:`Automation `): An automation to perform when the load is switched. If a lambda is used the boolean ``state`` parameter holds the new status. - **turn_on_action** (*Optional*, :ref:`Automation `): An automation to perform when the load is turned on. Can be used to control for example a switch or output component. - **turn_off_action** (*Optional*, :ref:`Automation `): An automation to perform when the load is turned off. ``turn_on_action`` and ``turn_off_action`` must be configured together. - +- **restart_cycle_on_state_change** (*Optional*, boolean): Restart a timer of a cycle + when new state is set. Defaults to ``false``. + - All other options from :ref:`Output `. From 9672bca6e5df4661e36f403b889f526e7b40417d Mon Sep 17 00:00:00 2001 From: VitaliyKurokhtin Date: Sun, 23 Jan 2022 00:05:40 -0800 Subject: [PATCH 10/40] Command retain option for MQTT component (#1822) --- components/mqtt.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/mqtt.rst b/components/mqtt.rst index 0b19373c5..4b6dd09c9 100644 --- a/components/mqtt.rst +++ b/components/mqtt.rst @@ -266,6 +266,7 @@ MQTT can have some overrides for specific options. payload_not_available: offline state_topic: livingroom/custom_state_topic command_topic: livingroom/custom_command_topic + command_retain: false Configuration variables: @@ -284,6 +285,8 @@ Configuration variables: - **command_topic** (*Optional*, string): The topic to subscribe to for commands from the remote. Defaults to ``///command``. +- **command_retain** (*Optional*, boolean): Whether MQTT command messages + sent to the device should be retained or not. Default to ``false``. .. warning:: From 7b43258e0699c068d1bfc265f84c8cd6b3067e2a Mon Sep 17 00:00:00 2001 From: Oxan van Leeuwen Date: Sun, 23 Jan 2022 15:28:27 +0100 Subject: [PATCH 11/40] Fan platform refactor (#1837) --- components/fan/hbridge.rst | 2 +- components/fan/index.rst | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/components/fan/hbridge.rst b/components/fan/hbridge.rst index 2aacdb4d5..dc145aee9 100644 --- a/components/fan/hbridge.rst +++ b/components/fan/hbridge.rst @@ -5,7 +5,7 @@ H-bridge Fan :description: Instructions for setting up hbridge controlled fans (or motors). :image: fan.svg -The `'hbridge`' fan platform allows you to use a compatible `h-bridge` (L298N, DRV8871, MX1508, BTS7960, L9110S, DRV8833, TB6612, etc.) to control a fan (or motor/solenoid). +The ``hbridge`` fan platform allows you to use a compatible `h-bridge` (L298N, DRV8871, MX1508, BTS7960, L9110S, DRV8833, TB6612, etc.) to control a fan (or motor/solenoid). .. figure:: images/L298N_module.jpg :align: center diff --git a/components/fan/index.rst b/components/fan/index.rst index 674b45f05..1fe4f2b51 100644 --- a/components/fan/index.rst +++ b/components/fan/index.rst @@ -6,9 +6,9 @@ Fan Component :image: folder-open.svg With the ``fan`` domain you can create components that appear as fans in -the Home Assistant frontend. A fan can be switched ON or OFF, optionally -has a speed level between 1 and the maximum supported speed level of the fan, and can have an -oscillate and direction output. +the Home Assistant frontend. A fan can be switched on or off, optionally +has a speed between 1 and the maximum supported speed of the fan, and can have an +oscillation and direction output. .. figure:: images/fan-ui.png :align: center @@ -28,11 +28,10 @@ Configuration variables: - **name** (**Required**, string): The name of the fan. - **icon** (*Optional*, icon): Manually set the icon to use for the fan in the frontend. -- **restore_mode** (*Optional*): Control how the fan attempts to restore state on bootup. - For restoring on ESP8266s, also see ``esp8266_restore_from_flash`` in the - :doc:`esphome section `. +- **restore_mode** (*Optional*): Control how the fan attempts to restore state on boot. - - ``RESTORE_DEFAULT_OFF`` (Default) - Attempt to restore state and default to OFF if not possible to restore. + - ``NO_RESTORE`` - Don't restore any state. + - ``RESTORE_DEFAULT_OFF`` - Attempt to restore state and default to OFF if not possible to restore (default). - ``RESTORE_DEFAULT_ON`` - Attempt to restore state and default to ON. - ``RESTORE_INVERTED_DEFAULT_OFF`` - Attempt to restore state inverted from the previous state and default to OFF. - ``RESTORE_INVERTED_DEFAULT_ON`` - Attempt to restore state inverted from the previous state and default to ON. @@ -42,7 +41,7 @@ Configuration variables: - **internal** (*Optional*, boolean): Mark this component as internal. Internal components will not be exposed to the frontend (like Home Assistant). Only specifying an ``id`` without a ``name`` will implicitly set this to true. -- **disabled_by_default** (*Optional*, boolean): If true, then this entity should not be added to any client's frontend, +- **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``. - **entity_category** (*Optional*, string): The category of the entity. @@ -125,7 +124,7 @@ Configuration options: - **speed** (*Optional*, int, :ref:`templatable `): Set the speed level of the fan. Can be a number between 1 and the maximum speed level of the fan. - **direction** (*Optional*, string, :ref:`templatable `): - Set the diretion of the fan. Can be either ``forward`` or ``reverse``. Defaults to not changing the direction. + Set the direction of the fan. Can be either ``forward`` or ``reverse``. Defaults to not changing the direction. .. _fan-cycle_speed_action: @@ -147,7 +146,7 @@ Increments through speed levels of the fan with the given ID when executed. If t ``fan.is_on`` / ``fan.is_off`` Condition ---------------------------------------- -This :ref:`condition ` passes if the given fan is on/off. +This :ref:`condition ` passes if the given fan is on or off. .. code-block:: yaml @@ -237,7 +236,7 @@ advanced stuff (see the full API Reference for more info). .. code-block:: yaml // Within lambda, get the fan direction and conditionally do something - if (id(my_fan).direction == FanDirection::FAN_DIRECTION_FORWARD) { + if (id(my_fan).direction == FanDirection::FORWARD) { // Fan direction is forward, do something here } else { // Fan direction is reverse, do something else here @@ -257,7 +256,7 @@ advanced stuff (see the full API Reference for more info). auto call = id(my_fan).turn_on(); call.set_speed(2); call.set_oscillating(true); - call.set_direction(FanDirection::FAN_DIRECTION_REVERSE); + call.set_direction(FanDirection::REVERSE); call.perform(); // Toggle the fan on/off From 86173170659e9c21dc2b81ea9083be8bdcc126d9 Mon Sep 17 00:00:00 2001 From: Oxan van Leeuwen Date: Mon, 24 Jan 2022 21:30:56 +0100 Subject: [PATCH 12/40] Add output button documentation (#1846) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/button/images/generic-ui.png | Bin 0 -> 3411 bytes components/button/output.rst | 49 ++++++++++++++++++++++++ index.rst | 1 + 3 files changed, 50 insertions(+) create mode 100644 components/button/images/generic-ui.png create mode 100644 components/button/output.rst diff --git a/components/button/images/generic-ui.png b/components/button/images/generic-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..c495818d7de4bb73bea44a54ed710620cb374b19 GIT binary patch literal 3411 zcmZ`+XEdB!7k)R9^&07J(=6O<;xaDzmq)P<>;1=(-S2HKh)LxA1X%xWS^ZKK759}CzWo}#bH>LL zB|9 zx*Ic2e~>l2AV>1sg=r3pkdAd>>K|KK^MwAq1-`9yBA|7mKux)bN)C&$cR&ldJ^r2} z$CaW|g#2x-)M6fB;MnmTLlE|IS8-j9?EVlM(x8^`w_Tfyvp9Q_ZPUTR+*sQp5WN8y7-!&aos8E^&8vmz|w>#|Bf)2XSy}#LFB_G%n~PS zV6*YTh0PPbVhgvjhqcL@;4!Ds-4mb!SE2ihVDWHT?To6C+NX4CxnxQvm;ekyI$E{Dq zOgVhb*y`KA)h)tdrgl4>18GOHmtzZNe_36J?t@FAsFE#+_vp%k*OKQRbO3B5G6 z6|ZRlGdP^ei-N3QaR4&sE&oOCcZXS*2A$sDP8kM<39UnF`#N###M{b@I`fb*zjD%2`O5tbw^NdciT*; zO(jti13IvR!|sgBa{NF@MQt;VM{M+C5oQ0#I`p@w-#&5h^yNsQR_2A@QPaM`0OMabxF_dlE%M~S*!#7Lg&w=-E2%SE6i@8xm&D4&Mg;*#-hvz1; zB!gXQ7FmLu=#@@4c-^~l=zJG<)2c6dtL=2QF&_LhSE;azS)IEmR>ns|k*X~!fGR5Z zA|H2GQ}}yoU@_K5NBa!j>@iP3bKj{~>&(3{#XP zC3!vUi|?mKRdo7!Z0N@4#M`~Ga!Do1+om$Xg>nnk*mA^+)olyy8kQHZRRP^ku_!aO z;opm7*E9fQ%Q|;!qWbzstp|dvb09a>Q3IF{?A+jDY53w!Xw4auwJPM%PsaP1U~YVN z-<__QD|Wq>)8y1}O2B(hae;fJyJAOtX5kKS!a2R_EMawOq-4-d)drwa3+-UAlFcM{ zuD%}O$fVj9%aug>p@A0A5O(Y=Q7)npyl5y?=U{Pe1+o{Ym6vVrjFN@kl3US{s9P-x zqd-2)n$vc{0D`LYv%8GaJx!T0#RbgO6Zc+U)uW>ESj6p4Q8qP zb+-Y45XW%0Gr<8h4iOT6`+Z_QWuBi}yAr>i8LGK+i=`-3E`zI5LjC{(1Wnq&Cdgs;|^*7W`fSfv6M*l*4pCUT~TL=W-75|9&&oR!yG z!?ljT!SjP1*V!_W0x;b52Roe~8!)v*HmCDpCxUP-M5E-D0Uf+rvRJcJ@c70<&Of5MzrYKvG^ zdh+V`*Dc<^-(5Pz{hmL;*O5UHbUXxRx;Sx)CtG4PmFD_L&G^p_vxc;*t4>Xl;z9D8 z*`uifO0VDR+<`(@9k19s3y$?q{uQp28aj0}lcCQ3c}05dc(t$Gh6bgUDtFo{A=r9H zu=SCv!?f;;Y`Q};7xdO$U%Q}n$1`)(8@?{VCccx^@omtJB(0O{Aizl`tP7&+>3rUh z{j3IV^YlT6&$t!l3b1g-|2w!jXzwVFS>IKQ^C`obTPaBO=a(45X~z~E%$*CC^<&o` z^wJ^BMJtQ_VwDst*)kY$NU7pe2=Zd>>ih5v<~MA)-NR_Z&X}ye0kv*!hhSd$M7gPG0j=cN|m zx;_t9GqPciuB4wBG4}tJ3YLvk3Jnn09@mab>QsP{8Zr;=&MHxV`l%>tn|7JC_M>6>`. + +.. note:: + + When used with a :doc:`/components/output/gpio`, the pin will be low by default and pulled high when the button is + pressed. To invert this behaviour and have the pin pulled low when the button is pressed, set the `inverted` option + in the :ref:`config-pin_schema`. + +See Also +-------- + +- :doc:`/components/output/index` +- :apiref:`output/button/output_button.h` +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index 8f27c48ff..713b24e0c 100644 --- a/index.rst +++ b/index.rst @@ -484,6 +484,7 @@ Button Components Button Core, components/button/index, folder-open.svg Template Button, components/button/template, description.svg + Generic Output Button, components/button/output, upload.svg Restart Button, components/button/restart, restart.svg Wake-on-LAN, components/button/wake_on_lan, power_settings.svg From 05710020e28cb11a23b8e767871c539d253117bc Mon Sep 17 00:00:00 2001 From: Martin <25747549+martgras@users.noreply.github.com> Date: Mon, 24 Jan 2022 23:42:06 +0100 Subject: [PATCH 13/40] document changes from PR#3037 (#1844) Co-authored-by: Oxan van Leeuwen Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/tcs34725.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/components/sensor/tcs34725.rst b/components/sensor/tcs34725.rst index f3bedde2d..251bfc42d 100644 --- a/components/sensor/tcs34725.rst +++ b/components/sensor/tcs34725.rst @@ -49,18 +49,16 @@ required to be set up in your configuration for this sensor to work. Configuration variables: ------------------------ -- **red_channel** (*Optional*): Get the percentage of how strongly the red color channel is activated. +- **red_channel** (*Optional*): Value of the red color channel relative to the clear channel, as a percentage. All options from :ref:`Sensor `. -- **green_channel** (*Optional*): Get the percentage of how strongly the green color channel is activated. +- **green_channel** (*Optional*): Value of the green color channel relative to the clear channel, as a percentage. All options from :ref:`Sensor `. -- **blue_channel** (*Optional*): Get the percentage of how strongly the blue color channel is activated. +- **blue_channel** (*Optional*): Value of the blue color channel relative to the clear channel, as a percentage. All options from :ref:`Sensor `. -- **clear_channel** (*Optional*): Get the percentage of how strongly the clear (without a color filter) - channel is activated. All options from :ref:`Sensor `. +- **clear_channel** (*Optional*): Value of the clear (without a color filter) channel, relative to the maximum value for + the chosen integration time. All options from :ref:`Sensor `. - **illuminance** (*Optional*): Get the total illuminance of the sensor in lx. - All options from :ref:`Sensor `. - **color_temperature** (*Optional*): Get the calculated color temperature of the light in Kelvin. - All options from :ref:`Sensor `. - **gain** (*Optional*): Set the gain for the internal ADCs to work better in certain low-light conditions. Valid values are ``1x`` (default), ``4x``, ``16x``, ``60x`` (highest gain). - **integration_time** (*Optional*): The amount of time the light sensor is exposed. Valid values are @@ -72,6 +70,7 @@ Configuration variables: - **update_interval** (*Optional*, :ref:`config-time`): The interval to check the sensor. Defaults to ``60s``. + See Also -------- From f2a494d6d0174c74070c3d2c22903fcc0d250bcb Mon Sep 17 00:00:00 2001 From: Dav-id Date: Mon, 24 Jan 2022 23:54:00 +0100 Subject: [PATCH 14/40] Esp32cam full control (#1836) --- components/esp32_camera.rst | 64 +++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/components/esp32_camera.rst b/components/esp32_camera.rst index 6746014db..4f2757bac 100644 --- a/components/esp32_camera.rst +++ b/components/esp32_camera.rst @@ -74,6 +74,9 @@ Frame Settings: Up to 60Hz is possible (with reduced frame sizes), but beware of overheating. Defaults to ``10 fps``. - **idle_framerate** (*Optional*, float): The framerate to capture images at when no client is requesting a full stream. Defaults to ``0.1 fps``. + +Image Settings: + - **resolution** (*Optional*, enum): The resolution the camera will capture images at. Higher resolutions require more memory, if there's not enough memory you will see an error during startup. @@ -90,15 +93,64 @@ Frame Settings: - **jpeg_quality** (*Optional*, int): The JPEG quality that the camera should encode images with. From 10 (best) to 63 (worst). Defaults to ``10``. - +- **vertical_flip** (*Optional*, boolean): Whether to flip the image vertically. Defaults to ``true``. +- **horizontal_mirror** (*Optional*, boolean): Whether to mirror the image horizontally. Defaults to ``true``. - **contrast** (*Optional*, int): The contrast to apply to the picture, from -2 to 2. Defaults to ``0``. - **brightness** (*Optional*, int): The brightness to apply to the picture, from -2 to 2. Defaults to ``0``. - **saturation** (*Optional*, int): The saturation to apply to the picture, from -2 to 2. Defaults to ``0``. -- **vertical_flip** (*Optional*, boolean): Whether to flip the image vertically. Defaults to ``true``. -- **horizontal_mirror** (*Optional*, boolean): Whether to mirror the image horizontally. Defaults to ``true``. -- **aec2** (*Optional*, boolean): Whether to enable Auto Exposure Control 2. Defaults to ``false``. -- **ae_level** (*Optional*, int): The auto exposure level to apply to the picture, from -2 to 2. Defaults to ``0``. -- **aec_value** (*Optional*, int): The Auto Exposure Control 2 value to apply to the picture, from 0 to 1200. Defaults to ``300``. +- **special_effect** (*Optional*, enum): The effect to apply to the picture. Defaults to ``none`` (picture without effect). + + - ``none``: Picture without effect + - ``negative``: Colors of picture are inverted + - ``grayscale``: Only luminance of picture is kept + - ``red_tint``: Picture appear red-tinted + - ``green_tint``: Picture appear green-tinted + - ``blue_tint``: Picture appear blue-tinted + - ``sepia``: Sepia effect is applied to picture + +Exposure Settings: + +- **aec_mode** (*Optional*, enum): The mode of exposure module. Defaults to ``auto`` (leave camera to automatically adjust exposure). + + - ``manual``: Exposure can be manually set, with **aec_value** parameter. **ae_level** has no effect here + - ``auto``: Camera manage exposure automatically. Compensation can be applied, thanks to **ae_level** parameter. **aec_value** has no effect here + +- **aec2** (*Optional*, boolean): Whether to enable Auto Exposure Control 2. Seems to change computation method of automatic exposure. Defaults to ``false``. +- **ae_level** (*Optional*, int): The auto exposure level to apply to the picture (when **aec_mode** is set to ``auto``), from -2 to 2. Defaults to ``0``. +- **aec_value** (*Optional*, int): The Exposure value to apply to the picture (when **aec_mode** is set to ``manual``), from 0 to 1200. Defaults to ``300``. + +Sensor Gain Settings: + +- **agc_mode** (*Optional*, enum): The mode of gain control module. Defaults to ``auto`` (leave camera to automatically adjust sensor gain). + + - ``manual``: Gain can be manually set, with **agc_value** parameter. **agc_gain_ceiling** has no effect here + - ``auto``: Camera manage sensor gain automatically. Maximum gain can be defined, thanks to **agc_gain_ceiling** parameter. **agc_value** has no effect here + +- **agc_value** (*Optional*, int): The gain value to apply to the picture (when **aec_mode** is set to ``manual``), from 0 to 30. Defaults to ``0``. +- **agc_gain_ceiling** (*Optional*, enum): The maximum gain allowed, when **agc_mode** is set to ``auto``. This parameter seems act as "ISO" setting. Defaults to ``2x``. + + - ``2x``: Camera is less sensitive, picture is clean (without visible noise) + - ``4x`` + - ``8x`` + - ``16x`` + - ``32x`` + - ``64x`` + - ``128x``: Camera is more sensitive, but picture contain lot of noise + +White Balance Setting: + +- **wb_mode** (*Optional*, enum): The mode of white balace module. Defaults to ``auto``. + + - ``auto``: Camera choose best white balance setting + - ``sunny``: White balance sunny mode + - ``cloudy``: White balance cloudy mode + - ``office``: White balance office mode + - ``home``: White balance home mode + +Test Setting: + +- **test_pattern** (*Optional*, boolean): For tests purposes, it's possible to replace picture get from sensor by a test color pattern. Defaults to ``false``. + .. note:: From 89c2c47e478bf515647755dd8de50a81d9fc71bf Mon Sep 17 00:00:00 2001 From: guillempages Date: Tue, 25 Jan 2022 09:53:56 +0100 Subject: [PATCH 15/40] Document HTTP redirections follow options (#1839) Co-authored-by: Oxan van Leeuwen --- components/http_request.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/http_request.rst b/components/http_request.rst index ff1813f4e..7dadaf537 100644 --- a/components/http_request.rst +++ b/components/http_request.rst @@ -22,6 +22,8 @@ Configuration variables: - **useragent** (*Optional*, string): User-Agent header for requests. Defaults to ``ESPHome``. - **timeout** (*Optional*, :ref:`config-time`): Timeout for request. Defaults to ``5s``. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **follow_redirects** (*Optional*, boolean): Enable following HTTP redirects. Defaults to ``true``. +- **redirect_limit** (*Optional*, integer): Maximum amount of redirects to follow when enabled. Defaults to ``3``. ESP8266 Options: From 52e52738924bb0180ea9c51105a14297512fbe91 Mon Sep 17 00:00:00 2001 From: Jimmy Hedman Date: Tue, 25 Jan 2022 10:00:09 +0100 Subject: [PATCH 16/40] Add documentation for enable_ipv6 flag. (#1749) Co-authored-by: Oxan van Leeuwen --- components/ethernet.rst | 1 + components/network.rst | 22 ++++++++++++++++++++++ components/wifi.rst | 1 + index.rst | 1 + 4 files changed, 25 insertions(+) create mode 100644 components/network.rst diff --git a/components/ethernet.rst b/components/ethernet.rst index 1a296c886..7ff2b3f34 100644 --- a/components/ethernet.rst +++ b/components/ethernet.rst @@ -150,6 +150,7 @@ Configuration for Wireless Tag WT32-ETH01 See Also -------- +- :doc:`network` - :apiref:`ethernet/ethernet_component.h` - `ESP32 Ethernet PHY connection info `__ - :ghedit:`Edit` diff --git a/components/network.rst b/components/network.rst new file mode 100644 index 000000000..cef73dc24 --- /dev/null +++ b/components/network.rst @@ -0,0 +1,22 @@ +Network component +================= + +.. seo:: + :description: + :image: network-wifi.svg + :keywords: Network, WiFi, WLAN, Ethernet, ESP32 + +The network component is a global configuration for all types of +networks (WiFi, Ethernet). + +.. code-block:: yaml + + # Example configuration + network: + enable_ipv6: true + +Configuration variables: +------------------------ + +- **enable_ipv6** (*Optional*, boolean): Enables IPv6 support. Defaults to ``false``. Only available on ESP32 with ESP-IDF framework. + diff --git a/components/wifi.rst b/components/wifi.rst index c466e2f3c..35029ba35 100644 --- a/components/wifi.rst +++ b/components/wifi.rst @@ -269,5 +269,6 @@ See Also -------- - :doc:`captive_portal` +- :doc:`network` - :apiref:`wifi/wifi_component.h` - :ghedit:`Edit` diff --git a/index.rst b/index.rst index 713b24e0c..58ca15a7b 100644 --- a/index.rst +++ b/index.rst @@ -142,6 +142,7 @@ Core Components Core, components/esphome, cloud-circle.svg WiFi, components/wifi, network-wifi.svg MQTT, components/mqtt, mqtt.png + Network, components/network, network-wifi.svg I²C Bus, components/i2c, i2c.svg SPI Bus, components/spi, spi.svg From b7a3afacceef770371b72f16cd3a3467120830a0 Mon Sep 17 00:00:00 2001 From: Zebble Date: Tue, 25 Jan 2022 11:18:11 -0500 Subject: [PATCH 17/40] Add additional colours for GROW R503-RGB. (#1851) --- components/fingerprint_grow.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/fingerprint_grow.rst b/components/fingerprint_grow.rst index 6edddd3ff..b972c88db 100644 --- a/components/fingerprint_grow.rst +++ b/components/fingerprint_grow.rst @@ -5,7 +5,7 @@ Grow Fingerprint Reader :description: Instructions for setting up Grow Fingerprint Reader integration in ESPHome. :image: fingerprint.svg -The ``fingerprint_grow`` component allows you to use your R307, R503, ZFM-20, ... fingerprint sensors with ESPHome. +The ``fingerprint_grow`` component allows you to use your R307, R503, R503-RGB, ZFM-20, ... fingerprint sensors with ESPHome. .. figure:: images/r307-full.jpg :align: center @@ -25,7 +25,7 @@ Component/Hub The reader can be powered by the 3.3V output of an NodeMCU. As the communication with the reader is done using UART (default baud rate is 57600), you need to have an :ref:`UART bus ` in your configuration with the ``rx_pin`` connected to the reader's ``TX`` and the ``tx_pin`` connected to the reader's ``RX``. -If available on your reader model, it's recommended to connect 3.3VT (touch induction power supply) to 3.3V; WAKEUP (finger detection signal) to a free GPIO pin and define it with the ``sensing_pin`` option to allow the polling function to quickly return when there's no finger on the reader. +If available on your reader model, it's recommended to connect 3.3VT (touch induction power supply) & 3.3V to 3.3V; WAKEUP (finger detection signal) to a free GPIO pin and define it with the ``sensing_pin`` option to allow the polling function to quickly return when there's no finger on the reader. .. code-block:: yaml @@ -353,7 +353,7 @@ Removes all enrolled fingerprints. ``fingerprint_grow.led_control`` Action --------------------------------------- -Turns on or off the LED on the reader. Only available on select models. If you have the R503 use :ref:`fingerprint_grow-aura_led_control` instead. +Turns on or off the LED on the reader. Only available on select models. If you have the R503 or R503-RGB use :ref:`fingerprint_grow-aura_led_control` instead. .. code-block:: yaml @@ -373,7 +373,7 @@ Configuration options: ``fingerprint_grow.aura_led_control`` Action -------------------------------------------- -Controls the Aura LED on the reader. Only available on select models. +Controls the Aura LED on the reader. Only available on select models. NOTE: The R503 has 2 variants with different LED colour options. .. code-block:: yaml @@ -434,7 +434,7 @@ Configuration options: - **state** (**Required**, string, :ref:`templatable `): The state to set the LED. One of ``BREATHING``, ``FLASHING``, ``ALWAYS_ON``, ``ALWAYS_OFF``, ``GRADUAL_ON`` and ``GRADUAL_OFF``. - **speed** (**Required**, int, :ref:`templatable `): The duration each cycle lasts, a factor of 10ms. Only relevant for ``BREATHING``, ``FLASHING``, ``GRADUAL_ON`` and ``GRADUAL_OFF`` states. The total duration is defined by 10ms * speed * count. Range is 0 to 255. -- **color** (**Required**, string, :ref:`templatable `): The LED color to activate. One of ``RED``, ``BLUE`` and ``PURPLE``. +- **color** (**Required**, string, :ref:`templatable `): The LED color to activate. For R503, one of ``RED``, ``BLUE`` and ``PURPLE``. For R503-RGB, one of ``RED``, ``BLUE``, ``PURPLE``, ``GREEN``, ``YELLOW``, ``CYAN`` and ``WHITE``. - **count** (**Required**, int, :ref:`templatable `): How many times to repeat the pattern. Only relevant for ``BREATHING`` and ``FLASHING`` states. 0 for infinite, or 1 to 255. All actions From aed19cdb39c0b476ee95371f9dee48dd35fe8e41 Mon Sep 17 00:00:00 2001 From: micronen Date: Tue, 25 Jan 2022 20:18:57 +0200 Subject: [PATCH 18/40] Add Heap Sensors - free/max block/fragmentation #1578 (#1041) Co-authored-by: Oxan van Leeuwen --- components/debug.rst | 63 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/components/debug.rst b/components/debug.rst index c632ff41a..8245c931e 100644 --- a/components/debug.rst +++ b/components/debug.rst @@ -7,6 +7,8 @@ Debug Component The ``debug`` component can be used to debug problems with ESPHome. At startup, it prints a bunch of useful information like reset reason, free heap size, ESPHome version and so on. +It also allows you get the same information as a text sensor, and to monitor the state of the +ESP heap memory (free space, maximum free block size and fragmentation level) and the main-loop timing. .. figure:: images/debug.png :align: center @@ -17,16 +19,75 @@ a bunch of useful information like reset reason, free heap size, ESPHome version # Example configuration entry debug: + update_interval: 5s + device: + name: Device Info + free: + name: Heap Free + fragmentation: + name: Heap Fragmentation + block: + name: Heap Max Block + loop_time: + name: Loop Time # Logger must be at least debug (default) logger: level: debug -No configuration variables. +Configuration variables: +------------------------ + +- **device** (*Optional*): Reports the following device information: + + - ESPHome Version + - Free heap size at startup + - Flash chip size, speed and mode + - ESP32: + + - Chip model, cores, revision + - Chip features (BLE / BT / WiFi_BGN / EMB_FLASH / ...) + - ESP-IDF version + - EFuse MAC + - Reset reason + - Wakeup reason + - ESP8266: + + - Chip id, frequency + - Flash id + - SDK, Core & Boot versions + - Reset reason & information + + Accepts these options: + + - **name** (**Required**, string): The name of the sensor. + - All other options from :ref:`Text Sensor `. + +- **free** (*Optional*): Reports the free heap size in bytes. + + - **name** (**Required**, string): The name of the sensor. + - All other options from :ref:`Sensor `. + +- **fragmentation** (*Optional*): Reports the fragmentation metric of the heap + (0% is clean, more than ~50% is not harmless). Only available on ESP8266 with Arduino 2.5.2+. + + - **name** (**Required**, string): The name of the sensor. + - All other options from :ref:`Sensor `. + +- **block** (*Optional*): Reports the largest contiguous free RAM block on the heap in bytes. + + - **name** (**Required**, string): The name of the sensor. + - All other options from :ref:`Sensor `. + +- **loop_time** (*Optional*): Reports the longest time between successive iterations of the main loop. + + - **name** (**Required**, string): The name of the sensor. + - All other options from :ref:`Sensor `. See Also -------- +- :ref:`sensor-filters` - :doc:`logger` - :apiref:`debug/debug_component.h` - :ghedit:`Edit` From 596c3e2035658144ad0adb86b2063b0adcdfa25b Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 26 Jan 2022 16:26:48 +1300 Subject: [PATCH 19/40] Reorganize for base touchscreen docs (#1834) --- components/binary_sensor/ektf2232.rst | 96 --------------------------- components/index.rst | 1 + components/touchscreen/ektf2232.rst | 37 +++++++++++ components/touchscreen/index.rst | 90 +++++++++++++++++++++++++ index.rst | 8 +++ 5 files changed, 136 insertions(+), 96 deletions(-) delete mode 100644 components/binary_sensor/ektf2232.rst create mode 100644 components/touchscreen/ektf2232.rst create mode 100644 components/touchscreen/index.rst diff --git a/components/binary_sensor/ektf2232.rst b/components/binary_sensor/ektf2232.rst deleted file mode 100644 index c0a99877a..000000000 --- a/components/binary_sensor/ektf2232.rst +++ /dev/null @@ -1,96 +0,0 @@ -EKTF2232 Touch Screen Controller -================================ - -.. seo:: - :description: Instructions for setting up EKTF2232 touch screen controller with ESPHome - :image: ektf2232.svg - :keywords: EKTF2232 - -.. _ektf2232-component: - -Component/Hub -------------- - -The ``ektf2232`` component allows using the touch screen controller -found in the :doc:`Inkplate 6 Plus ` with ESPHome. -The :ref:`I²C ` is required to be set up in your configuration for this sensor to work. - -.. code-block:: yaml - - # Example configuration entry - ektf2232: - interrupt_pin: GPIO36 - rts_pin: GPIO16 - - binary_sensor: - - platform: ektf2232 - id: touch_key0 - x_min: 80 - x_max: 160 - y_min: 106 - y_max: 212 - - -Configuration variables: ------------------------- - -- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor. - -- **rts_pin** (*Optional*, :ref:`Pin Schema `): The reset pin of the controller. - -- **interupt_pin** (*Optional*, :ref:`Pin Schema `): The touch detection pin. - -- **display_width** (*Optional*, int): The dimension of the display in the horizontal - direction. Defaults to ``1024`` to match the Inkplate 6 Plus. - -- **display_height** (*Optional*, int): The dimension of the display in the vertical - direction. Defaults to ``758`` to match the Inkplate 6 Plus. - -- **on_touch** (*Optional*, :ref:`Automation `): An automation to perform - when the touch screen is pressed. See :ref:`ektf2232-on_touch`. - -.. _ektf2232-on_touch: - -``on_touch`` Trigger --------------------- - -This automation will be triggered when the EKTF2232 touch screen detects a touch. - -This trigger provides one arguments of type :apistruct:`ektf2232::TouchPoint` which has two integer members: ``x`` and ``y`` which -represent the position of the touch calibrated to the display width and heigh config options given. - -Binary Sensor -------------- - -The ``ektf2232`` binary sensor allows you to setup areas on the touch screen as virtual -buttons. First, setup a :ref:`ektf2232-component` and then use this binary sensor platform -to create individual binary sensors for each virtual button. - -Configuration variables: ------------------------- - -- **name** (*Optional*, string): The name for the binary sensor. - -- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. - -- **ektf2232_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the component the sensor is part of. - -- **x_min** (**Required**, int): Left coordinate of the screen area to be detected as the virtual button. - -- **x_max** (**Required**, int): Right coordinate of the screen area to be detected as the virtual button. - -- **y_min** (**Required**, int): Top coordinate of the screen area to be detected as the virtual button. - -- **y_max** (**Required**, int): Bottom coordinate of the screen area to be detected as the virtual button. - -- All other options from :ref:`Binary Sensor `. - - -See Also --------- - -- :ref:`Binary Sensor Filters ` -- :doc:`Inkplate 6 Plus ` -- :apiref:`ektf2232/ektf2232.h` -- :apiref:`ektf2232/binary_sensor/ektf2232_binary_sensor.h` -- :ghedit:`Edit` diff --git a/components/index.rst b/components/index.rst index 3bc1dc371..5a17978d4 100644 --- a/components/index.rst +++ b/components/index.rst @@ -18,4 +18,5 @@ Components display/index text_sensor/index stepper/index + touchscreen/index * diff --git a/components/touchscreen/ektf2232.rst b/components/touchscreen/ektf2232.rst new file mode 100644 index 000000000..29aa7237b --- /dev/null +++ b/components/touchscreen/ektf2232.rst @@ -0,0 +1,37 @@ +EKTF2232 Touchscreen Controller +================================ + +.. seo:: + :description: Instructions for setting up EKTF2232 touchscreen controller with ESPHome + :image: ektf2232.svg + :keywords: EKTF2232 + +The ``ektf2232`` component allows using the touchscreen controller +found in the :doc:`Inkplate 6 Plus ` with ESPHome. +The :ref:`I²C ` is required to be set up in your configuration for this sensor to work. + +.. code-block:: yaml + + # Example configuration entry + touchscreen: + - platform: ektf2232 + interrupt_pin: GPIO36 + rts_pin: GPIO16 + + +Configuration variables: +------------------------ + +- **id** (*Optional*, :ref:`config-id`): Manually set the ID of this touchscreen. +- **rts_pin** (*Optional*, :ref:`Pin Schema `): The reset pin of the controller. +- **interupt_pin** (*Optional*, :ref:`Pin Schema `): The touch detection pin. + +- All other options from :ref:`config-touchscreen`. + +See Also +-------- + +- :doc:`Touchscreen ` +- :doc:`Inkplate 6 Plus ` +- :apiref:`ektf2232/ektf2232.h` +- :ghedit:`Edit` diff --git a/components/touchscreen/index.rst b/components/touchscreen/index.rst new file mode 100644 index 000000000..4f9781c05 --- /dev/null +++ b/components/touchscreen/index.rst @@ -0,0 +1,90 @@ +Touchscreen Components +====================== + +.. seo:: + :description: Instruction for using touchscreen components. + :image: folder-open.svg + +The ``touchscreen`` component holds the base code for most touchscreen components +available in ESPHome and is responsible for passing the touch events to +``binary_sensors`` with the ``touchscreen`` platform. + +.. _config-touchscreen: + +Base Touchscreen Configuration +------------------------------ + +.. code-block:: yaml + + # Example touchscreen + touchscreen: + - platform: ... + on_touch: + then: + ... + +Configuration variables: +************************ + +- **on_touch** (*Optional*, :ref:`Automation `): An automation to perform + when the touchscreen is touched. See :ref:`touchscreen-on_touch`. +- **display** (**Required**, :ref:`config-id`): The display to use. If only one display is + available, this can be omitted. + +.. _touchscreen-on_touch: + +``on_touch`` Trigger +-------------------- + +This automation will be triggered when the touchscreen detects a touch. + +This trigger provides one arguments of type :apistruct:`touchscreen::TouchPoint` which has two integer members: ``x`` and ``y`` which +represent the position of the touch in relation to the display width and height. It also has optional members that will be set +depending on the touchscreen platform. + +Binary Sensor +------------- + +The ``touchscreen`` binary sensor allows you to setup areas on the touch screen as virtual +buttons. + +.. code-block:: yaml + + binary_sensor: + - platform: touchscreen + name: Top Left Touch Button + x_min: 0 + x_max: 100 + y_min: 0 + y_max: 100 + +Configuration Variables: +************************ + +- **name** (*Optional*, string): The name for the binary sensor. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **touchscreen_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the touchscreen. +- **x_min** (**Required**, int): Left coordinate of the screen area to be detected as the virtual button. +- **x_max** (**Required**, int): Right coordinate of the screen area to be detected as the virtual button. +- **y_min** (**Required**, int): Top coordinate of the screen area to be detected as the virtual button. +- **y_max** (**Required**, int): Bottom coordinate of the screen area to be detected as the virtual button. + +- All other options from :ref:`Binary Sensor `. + + +See Also +-------- + +- :ref:`Binary Sensor Filters ` +- :doc:`Inkplate 6 Plus ` +- :doc:`EKTF2232 ` +- :doc:`XPT2046 ` +- :apiref:`touchscreen/touchscreen.h` +- :apiref:`touchscreen/binary_sensor/touchscreen_binary_sensor.h` +- :ghedit:`Edit` + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/index.rst b/index.rst index 58ca15a7b..d8426858c 100644 --- a/index.rst +++ b/index.rst @@ -526,6 +526,14 @@ Display Components Inkplate, components/display/inkplate6, inkplate6.jpg PCD8544 (Nokia 5110/ 3310), components/display/pcd8544, pcd8544.jpg +Touchscreen Components +---------------------- + +.. imgtable:: + + Touchscreen Core, components/touchscreen/index, folder-open.svg + EKTF2232, components/touchscreen/ektf2232, ektf2232.svg, Inkplate 6 Plus + Cover Components ---------------- From 9f07ad671e303c600711519f2bf7a8aae7f43c1e Mon Sep 17 00:00:00 2001 From: Wouter van der Wal <33957974+wjtje@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:20:49 +0100 Subject: [PATCH 20/40] Added documentation for qr code component (#1748) Co-authored-by: Oxan van Leeuwen --- components/display/index.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/components/display/index.rst b/components/display/index.rst index affb1db57..435ccdc80 100644 --- a/components/display/index.rst +++ b/components/display/index.rst @@ -482,6 +482,42 @@ And then later in code: - Axis labels are currently not possible without manually placing them. - The grid and border color is set with it.graph(), while the traces are defined separately. +QR Codes +******** + +Use this component to generate a QR-code containing a string on the device, which can then be drawn on compatible displays. + +.. code-block:: yaml + + qr_code: + - id: homepage_qr + value: esphome.io + +Configuration variables: + +- **id** (**Required**, :ref:`config-id`): The ID with which you will be able to reference the QR-code later + in your display code. +- **value** (**Required**, string): The string which you want to encode in the QR-code. +- **ecc** (*Optional*, string): The error correction code level you want to use. Defaults to ``LOW``. You can use one of the following values: + + - ``LOW`` - The QR Code can tolerate about 7% erroneous codewords + - ``MEDIUM`` - The QR Code can tolerate about 15% erroneous codewords + - ``QUARTILE`` - The QR Code can tolerate about 25% erroneous codewords + - ``HIGH`` - The QR Code can tolerate about 30% erroneous codewords + +To draw the QR-code, call the ``it.qr_code`` function from your render lambda: + +.. code-block:: yaml + + display: + - platform: ... + # ... + pages: + - id: page1 + lambda: |- + // Draw the QR-code at position [x=50,y=0] with white color and a 2x scale + it.qr_code(50, 0, id(homepage_qr), Color(255,255,255), 2); + Images ****** From f37b031f8fcefc23f212600feff11910dcec4bf1 Mon Sep 17 00:00:00 2001 From: Nicholas Peters Date: Wed, 26 Jan 2022 04:48:59 -0500 Subject: [PATCH 21/40] Add auto gain setting to tsl2591 docs (#1843) --- components/sensor/tsl2591.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/sensor/tsl2591.rst b/components/sensor/tsl2591.rst index f03833604..7c3f24a6a 100644 --- a/components/sensor/tsl2591.rst +++ b/components/sensor/tsl2591.rst @@ -30,6 +30,9 @@ The TSL2591 device is available on breakout boards from a few vendors The sensor claims a dynamic range of 600 million to 1 with an effective maximum of 88000 lux. It achieves that large range by having a configurable ``gain`` value. +For many applications, you can use AUTO gain to have the ESP select a suitable gain setting based on +the previous measurement. If light levels change dramatically this may cause the next reading to saturate, +after which the gain will adjust down and subsequent readings will be in range. Use a higher gain value when measuring less intense light sources. On the other hand, if you get ADC readings of 65,535 for either physical sensor, you may be saturating that sensor and need to reduce the gain. @@ -121,9 +124,10 @@ For the TSL2591 device: You cannot specify an arbitrary gain multiplier. It must be one of: - ``low``, ``1x`` - - ``medium``, ``med``, ``25x`` *(default)* + - ``medium``, ``med``, ``25x`` - ``high``, ``400x`` - ``maximum``, ``max``, ``9500x`` + - ``auto`` *(default)* - **update_interval** (*Optional*, :ref:`config-time`): The interval for checking the sensors. Defaults to ``60s``. From ed30567789565910714df03c9e493564b42925c5 Mon Sep 17 00:00:00 2001 From: drug123 Date: Wed, 26 Jan 2022 23:54:47 +0000 Subject: [PATCH 22/40] Documentation for Xiaomi MHO-C303 sensor (#1855) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/images/xiaomi_mhoc303.jpg | Bin 0 -> 35316 bytes components/sensor/xiaomi_ble.rst | 25 ++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 components/sensor/images/xiaomi_mhoc303.jpg diff --git a/components/sensor/images/xiaomi_mhoc303.jpg b/components/sensor/images/xiaomi_mhoc303.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff0db4374a88e6c1af77f98bfeafb2fec0c4c8cd GIT binary patch literal 35316 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 literal 0 HcmV?d00001 diff --git a/components/sensor/xiaomi_ble.rst b/components/sensor/xiaomi_ble.rst index 3cfc5452d..f02a380a1 100644 --- a/components/sensor/xiaomi_ble.rst +++ b/components/sensor/xiaomi_ble.rst @@ -237,6 +237,31 @@ Configuration example for PVVX MiThermometer firmware set to "Custom" advertisem battery_voltage: name: "PVVX Battery-Voltage" +MHO-C303 +******** + +Hygro thermometer clock with alarm, rectangular body, e-ink display, broadcasts temperature, humidity and battery status. Not encrypted. + +.. figure:: images/xiaomi_mhoc303.jpg + :align: center + :width: 30.0% + +Similar to the LYWSD02, with additional clock features (alarm, pomodoro timer). Runs on two AAA batteries. + +Configuration example: + +.. code-block:: yaml + + sensor: + - platform: xiaomi_mhoc303 + mac_address: "E7:50:59:32:A0:1C" + temperature: + name: "MHO-C303 Climate Temperature" + humidity: + name: "MHO-C303 Climate Humidity" + battery_level: + name: "MHO-C303 Climate Battery Level" + MHO-C401 ******** From 5934c83969157447403414a7762af799ec6cdea0 Mon Sep 17 00:00:00 2001 From: Matt Hamilton Date: Fri, 28 Jan 2022 06:37:54 -0500 Subject: [PATCH 23/40] Add support for Waveshare 7.5in-bv2 (#1859) --- components/display/waveshare_epaper.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/components/display/waveshare_epaper.rst b/components/display/waveshare_epaper.rst index cd0a2a599..5eebf2e98 100644 --- a/components/display/waveshare_epaper.rst +++ b/components/display/waveshare_epaper.rst @@ -92,6 +92,7 @@ Configuration variables: - ``4.20in-bV2`` (B/W rendering only) - ``5.83in`` - ``7.50in`` + - ``7.50in-bV2`` (also supports v3, B/W rendering only) - ``7.50in-bc`` (display with version sticker '(C)' on the back, B/W rendering only) - ``7.50inV2`` (Can't use with an ESP8266 as it runs out of RAM) From 7fd533fe178a5411883527d2fdfdc9454855c9cf Mon Sep 17 00:00:00 2001 From: Keilin Bickar Date: Thu, 3 Feb 2022 13:24:35 -0500 Subject: [PATCH 24/40] Add lock component documentation (#1867) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- _static/webserver-v1.js | 127 ++++++++------------ _static/webserver-v1.min.js | 2 +- components/index.rst | 1 + components/lock/images/output-ui.png | Bin 0 -> 2439 bytes components/lock/index.rst | 166 +++++++++++++++++++++++++++ components/lock/output.rst | 39 +++++++ components/lock/template.rst | 115 +++++++++++++++++++ index.rst | 9 ++ 8 files changed, 379 insertions(+), 80 deletions(-) create mode 100644 components/lock/images/output-ui.png create mode 100644 components/lock/index.rst create mode 100644 components/lock/output.rst create mode 100644 components/lock/template.rst diff --git a/_static/webserver-v1.js b/_static/webserver-v1.js index 1f66a04a9..f82011ae5 100644 --- a/_static/webserver-v1.js +++ b/_static/webserver-v1.js @@ -2,25 +2,40 @@ const source = new EventSource("/events"); source.addEventListener('log', function (e) { const log = document.getElementById("log"); + let log_prefs = [ + ["\u001b[1;31m", 'e'], + ["\u001b[0;33m", 'w'], + ["\u001b[0;32m", 'i'], + ["\u001b[0;35m", 'c'], + ["\u001b[0;36m", 'd'], + ["\u001b[0;37m", 'v'], + ]; + let klass = ''; - if (e.data.startsWith("")) { - klass = 'e'; - } else if (e.data.startsWith("")) { - klass = 'w'; - } else if (e.data.startsWith("")) { - klass = 'i'; - } else if (e.data.startsWith("")) { - klass = 'c'; - } else if (e.data.startsWith("")) { - klass = 'd'; - } else if (e.data.startsWith("")) { - klass = 'v'; - } else { + for (const log_pref of log_prefs){ + if (e.data.startsWith(log_pref[0])) { + klass = log_pref[1]; + } + } + if (klass == ''){ log.innerHTML += e.data + '\n'; } - log.innerHTML += '' + e.data.substr(7, e.data.length - 10) + "\n"; + log.innerHTML += '' + e.data.substr(7, e.data.length - 11) + "\n"; }); +actions = [ + ["switch", ["toggle"]], + ["light", ["toggle"]], + ["fan", ["toggle"]], + ["cover", ["open", "close"]], + ["button", ["press"]], + ["lock", ["lock", "unlock", "open"]], + ]; +multi_actions = [ + ["select", "option"], + ["number", "value"], + ]; + source.addEventListener('state', function (e) { const data = JSON.parse(e.data); document.getElementById(data.id).children[1].innerText = data.state; @@ -32,73 +47,27 @@ for (; row = states.rows[i]; i++) { if (!row.children[2].children.length) { continue; } - - if (row.classList.contains("switch")) { - (function(id) { - row.children[2].children[0].addEventListener('click', function () { - const xhr = new XMLHttpRequest(); - xhr.open("POST", '/switch/' + id.substr(7) + '/toggle', true); - xhr.send(); - }); - })(row.id); - } - if (row.classList.contains("fan")) { - (function(id) { - row.children[2].children[0].addEventListener('click', function () { - const xhr = new XMLHttpRequest(); - xhr.open("POST", '/fan/' + id.substr(4) + '/toggle', true); - xhr.send(); - }); - })(row.id); - } - if (row.classList.contains("light")) { - (function(id) { - row.children[2].children[0].addEventListener('click', function () { - const xhr = new XMLHttpRequest(); - xhr.open("POST", '/light/' + id.substr(6) + '/toggle', true); - xhr.send(); - }); - })(row.id); - } - if (row.classList.contains("cover")) { - (function(id) { - row.children[2].children[0].addEventListener('click', function () { - const xhr = new XMLHttpRequest(); - xhr.open("POST", '/cover/' + id.substr(6) + '/open', true); - xhr.send(); - }); - row.children[2].children[1].addEventListener('click', function () { - const xhr = new XMLHttpRequest(); - xhr.open("POST", '/cover/' + id.substr(6) + '/close', true); - xhr.send(); - }); - })(row.id); - } - if (row.classList.contains("select")) { - (function(id) { + + for (const domain of actions){ + if (row.classList.contains(domain[0])) { + let id = row.id.substr(domain[0].length+1); + for (let j=0;j'+t.data.substr(7,t.data.length-10)+"\n"})),source.addEventListener("state",(function(t){const n=JSON.parse(t.data);document.getElementById(n.id).children[1].innerText=n.state}));const states=document.getElementById("states");let row,i=0;for(;row=states.rows[i];i++)row.children[2].children.length&&(row.classList.contains("switch")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/switch/"+t.substr(7)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("fan")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/fan/"+t.substr(4)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("light")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/light/"+t.substr(6)+"/toggle",!0),n.send()}))}(row.id),row.classList.contains("cover")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/cover/"+t.substr(6)+"/open",!0),n.send()})),row.children[2].children[1].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/cover/"+t.substr(6)+"/close",!0),n.send()}))}(row.id),row.classList.contains("select")&&function(t){row.children[2].children[0].addEventListener("change",(function(){const n=new XMLHttpRequest;n.open("POST","/select/"+t.substr(7)+"/set?option="+encodeURIComponent(this.value),!0),n.send()}))}(row.id),row.classList.contains("number")&&function(t){row.children[2].children[0].addEventListener("change",(function(){const n=new XMLHttpRequest;n.open("POST","/number/"+t.substr(7)+"/set?value="+encodeURIComponent(this.value),!0),n.send()}))}(row.id),row.classList.contains("button")&&function(t){row.children[2].children[0].addEventListener("click",(function(){const n=new XMLHttpRequest;n.open("POST","/button/"+t.substr(7)+"/press",!0),n.send()}))}(row.id)); +const source=new EventSource("/events");source.addEventListener("log",function(t){const e=document.getElementById("log");let n=[["","e"],["","w"],["","i"],["","c"],["","d"],["","v"]],o="";for(const e of n)t.data.startsWith(e[0])&&(o=e[1]);""==o&&(e.innerHTML+=t.data+"\n"),e.innerHTML+=''+t.data.substr(7,t.data.length-11)+"\n"}),actions=[["switch",["toggle"]],["light",["toggle"]],["fan",["toggle"]],["cover",["open","close"]],["button",["press"]],["lock",["lock","unlock","open"]]],multi_actions=[["select","option"],["number","value"]],source.addEventListener("state",function(t){const e=JSON.parse(t.data);document.getElementById(e.id).children[1].innerText=e.state});const states=document.getElementById("states");let row,i=0;for(;row=states.rows[i];i++)if(row.children[2].children.length){for(const t of actions)if(row.classList.contains(t[0])){let e=row.id.substr(t[0].length+1);for(let n=0;n`): An automation to perform + when the lock is locked. See :ref:`lock-on_lock_unlock_trigger`. +- **on_unlock** (*Optional*, :ref:`Action `): An automation to perform + when the lock is unlocked. See :ref:`lock-on_lock_unlock_trigger`.. +- **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). + 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. Set to ``""`` to remove the default entity category. +- If MQTT enabled, All other options from :ref:`MQTT Component `. + +.. _lock-lock_action: + +``lock.lock`` Action +************************* + +This action locks a lock with the given ID on when executed. + +.. code-block:: yaml + + on_...: + then: + - lock.lock: deadbolt_1 + +.. _lock-unlock_action: + +``lock.unlock`` Action +************************** + +This action unlocks a lock with the given ID off when executed. + +.. code-block:: yaml + + on_...: + then: + - lock.unlock: deadbolt_1 + +.. _lock-open_action: + +``lock.open`` Action +************************ + +This action opens (e.g. unlatch) a lock with the given ID off when executed. + +.. code-block:: yaml + + on_...: + then: + - lock.open: doorlock_1 + +.. _lock-is_locked_condition: +.. _lock-is_unlocked_condition: + +``lock.is_locked`` / ``lock.is_unlocked`` Condition +*************************************************** + +This :ref:`Condition ` checks if the given lock is LOCKED (or UNLOCKED). + +.. code-block:: yaml + + # In some trigger: + on_...: + if: + condition: + # Same syntax for is_unlocked + lock.is_locked: my_lock + +.. _lock-lambda_calls: + +lambda calls +************ + +From :ref:`lambdas `, you can call several methods on all locks to do some +advanced stuff (see the full API Reference for more info). + +- ``publish_state()``: Manually cause the lock to publish a new state and store it internally. + If it's different from the last internal state, it's additionally published to the frontend. + + .. code-block:: yaml + + // Within lambda, make the lock report a specific state + id(my_lock).publish_state(LOCK_STATE_LOCKED); + id(my_lock).publish_state(LOCK_STATE_UNLOCKED); + +- ``state``: Retrieve the current state of the lock. + + .. code-block:: yaml + + // Within lambda, get the lock state and conditionally do something + if (id(my_lock).state == LOCK_STATE_LOCKED) { + // Lock is LOCKED, do something here + } + +- ``unlock()``/``lock()``/``open()``: Manually lock/unlock/open a lock from code. + Similar to the ``lock.lock``, ``lock.unlock``, and ``lock.open`` actions, + but can be used in complex lambda expressions. + + .. code-block:: yaml + + id(my_lock).unlock(); + id(my_lock).lock(); + id(my_lock).open(); + +.. _lock-on_lock_unlock_trigger: + +``lock.on_lock`` / ``lock.on_unlock`` Trigger +**************************************************************** + +This trigger is activated each time the lock is locked/unlocked. It becomes active +right after the lock component has acknowledged the state (e.g. after it LOCKED/UNLOCKED itself). + +.. code-block:: yaml + + lock: + - platform: template # or any other platform + # ... + on_lock: + - logger.log: "Door Locked!" + on_unlock: + - logger.log: "Door Unlocked!" + +See Also +-------- + +- :apiref:`lock/lock.h` +- :ghedit:`Edit` + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/components/lock/output.rst b/components/lock/output.rst new file mode 100644 index 000000000..282763eb7 --- /dev/null +++ b/components/lock/output.rst @@ -0,0 +1,39 @@ +Generic Output Lock +===================== + +.. seo:: + :description: Instructions for setting up generic output locks in ESPHome that control an output component. + :image: upload.svg + +The ``output`` lock platform allows you to use any output component as a lock. + +.. figure:: images/output-ui.png + :align: center + :width: 80.0% + +.. code-block:: yaml + + # Example configuration entry + output: + - platform: gpio + pin: 25 + id: 'generic_out' + lock: + - platform: output + name: "Generic Output" + output: 'generic_out' + +Configuration variables: +------------------------ + +- **output** (**Required**, :ref:`config-id`): The ID of the output component to use. +- **name** (**Required**, string): The name for the lock. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- All other options from :ref:`Lock `. + +See Also +-------- + +- :doc:`/components/output/index` +- :apiref:`output/lock/output_lock.h` +- :ghedit:`Edit` diff --git a/components/lock/template.rst b/components/lock/template.rst new file mode 100644 index 000000000..da81965c1 --- /dev/null +++ b/components/lock/template.rst @@ -0,0 +1,115 @@ +Template Lock +=============== + +.. seo:: + :description: Instructions for setting up template locks that can execute arbitrary actions when locked, unlocked, or opened + :image: description.svg + +The ``template`` lock platform allows you to create simple locks out of just actions and +an optional value lambda. Once defined, it will automatically appear in Home Assistant +as a lock and can be controlled through the frontend. + +.. code-block:: yaml + + # Example configuration entry + lock: + - platform: template + name: "Template Lock" + lambda: |- + if (id(some_binary_sensor).state) { + return LOCK_STATE_LOCKED; + } else { + return LOCK_STATE_UNLOCKED; + } + lock_action: + - switch.turn_on: switch1 + unlock_action: + - switch.turn_off: switch1 + open_action: + - button.press: button1 + + +Possible return values for the optional lambda: + + - ``return LOCK_STATE_LOCKED;`` if the lock should be reported as LOCKED. + - ``return LOCK_STATE_UNLOCKED;`` if the lock should be reported as UNLOCKED. + - ``return LOCK_STATE_JAMMED;`` if the lock should be reported as JAMMED. + - ``return LOCK_STATE_LOCKING;`` if the lock should be reported as LOCKING. + - ``return LOCK_STATE_UNLOCKING;`` if the lock should be reported as UNLOCKING. + - ``return {};`` if the last state should be repeated. + +.. note:: + + Only ``LOCK_STATE_LOCKED`` and ``LOCK_STATE_UNLOCKED`` are supported by the MQTT component in Home Assistant + +Configuration variables: +------------------------ + +- **name** (**Required**, string): The name of the lock. +- **lambda** (*Optional*, :ref:`lambda `): + Lambda to be evaluated repeatedly to get the current state of the lock. +- **lock_action** (*Optional*, :ref:`Action `): The action that should + be performed when the remote (like Home Assistant's frontend) requests the lock to be locked. +- **unlock_action** (*Optional*, :ref:`Action `): The action that should + be performed when the remote (like Home Assistant's frontend) requests the lock to be unlocked. +- **restore_state** (*Optional*, boolean): Sets whether ESPHome should attempt to restore the + state on boot-up and call the lock/unlock actions with the recovered values. Defaults to ``no``. +- **optimistic** (*Optional*, boolean): Whether to operate in optimistic mode - when in this mode, + any command sent to the template lock will immediately update the reported state. + Defaults to ``false``. +- **assumed_state** (*Optional*, boolean): Whether the true state of the lock is not known. + This will make the Home Assistant frontend show buttons for both LOCK and UNLOCK actions, instead + of hiding one of them when the lock is LOCKED/UNLOCKED. Defaults to ``false``. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- All other options from :ref:`Lock `. + +.. _lock-template-publish_action: + +``lock.template.publish`` Action +---------------------------------- + +You can also publish a state to a template lock from elsewhere in your YAML file +with the ``lock.template.publish`` action. + +.. code-block:: yaml + + # Example configuration entry + lock: + - platform: template + name: "Template Lock" + id: template_lock1 + + # in some trigger + on_...: + - lock.template.publish: + id: template_lock1 + state: LOCK_STATE_LOCKED + + # Templated + - lock.template.publish: + id: template_lock1 + state: !lambda 'return LOCK_STATE_LOCKED;' + +Configuration options: + +- **id** (**Required**, :ref:`config-id`): The ID of the template lock. +- **state** (**Required**, boolean, :ref:`templatable `): + The state to publish. + +.. note:: + + This action can also be written in lambdas, the parameter of the `publish_state` method denotes the state the + lock should become: + + .. code-block:: cpp + + id(template_lock1).publish_state(lock::LOCK_STATE_LOCKED); + +See Also +-------- + +- :doc:`/guides/automations` +- :doc:`/components/lock/index` +- :doc:`/components/binary_sensor/index` +- :apiref:`template/lock/template_lock.h` +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index 2a2848dd3..7d3ced8d9 100644 --- a/index.rst +++ b/index.rst @@ -598,6 +598,15 @@ Select Components Select Core, components/select/index, folder-open.svg Template Select, components/select/template, description.svg +Lock Components +----------------- + +.. imgtable:: + + Lock Core, components/lock/index, folder-open.svg + Generic Output Lock, components/lock/output, upload.svg + Template Lock, components/lock/template, description.svg + Misc Components --------------- From 71244baaf5d2e5add0cdd3c733ca187026ec6a9e Mon Sep 17 00:00:00 2001 From: Oxan van Leeuwen Date: Thu, 3 Feb 2022 21:04:54 +0100 Subject: [PATCH 25/40] Document device class support for Switch (#1853) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/switch/index.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/switch/index.rst b/components/switch/index.rst index 531c57623..4fe558fa6 100644 --- a/components/switch/index.rst +++ b/components/switch/index.rst @@ -42,6 +42,9 @@ Configuration variables: See https://developers.home-assistant.io/docs/core/entity/#generic-properties for a list of available options. Requires Home Assistant 2021.11 or newer. Set to ``""`` to remove the default entity category. +- **device_class** (*Optional*, string): The device class for the switch. + See https://developers.home-assistant.io/docs/core/entity/switch/#available-device-classes + for a list of available options. Requires Home Assistant 2022.3 or newer. - If MQTT enabled, All other options from :ref:`MQTT Component `. .. _switch-toggle_action: From b3bdf475a02f055b736ef03c9b57c017075a3294 Mon Sep 17 00:00:00 2001 From: mknjc Date: Tue, 8 Feb 2022 00:45:31 +0100 Subject: [PATCH 26/40] [debug] Update debug component docs (#1879) --- components/debug.rst | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/components/debug.rst b/components/debug.rst index 8245c931e..4c63451fc 100644 --- a/components/debug.rst +++ b/components/debug.rst @@ -20,23 +20,30 @@ ESP heap memory (free space, maximum free block size and fragmentation level) an # Example configuration entry debug: update_interval: 5s - device: - name: Device Info - free: - name: Heap Free - fragmentation: - name: Heap Fragmentation - block: - name: Heap Max Block - loop_time: - name: Loop Time + + text_sensor: + - platform: debug + device: + name: "Device Info" + + sensor: + - platform: debug + free: + name: "Heap Free" + fragmentation: + name: "Heap Fragmentation" + block: + name: "Heap Max Block" + loop_time: + name: "Loop Time" # Logger must be at least debug (default) logger: level: debug +Text Sensor +------------ Configuration variables: ------------------------- - **device** (*Optional*): Reports the following device information: @@ -57,12 +64,16 @@ Configuration variables: - Flash id - SDK, Core & Boot versions - Reset reason & information - + Accepts these options: - + - **name** (**Required**, string): The name of the sensor. - All other options from :ref:`Text Sensor `. +Sensor +------- +Configuration variables: + - **free** (*Optional*): Reports the free heap size in bytes. - **name** (**Required**, string): The name of the sensor. From 657d15d7ceddc99861478ec6a9668c82a04a812e Mon Sep 17 00:00:00 2001 From: Jeff Eberl Date: Mon, 7 Feb 2022 20:32:42 -0700 Subject: [PATCH 27/40] Added RadonEye RD200 Component (#1857) --- components/sensor/images/radon_eye_rd200.jpg | Bin 0 -> 16389 bytes components/sensor/radon_eye_ble.rst | 102 +++++++++++++++++++ images/radon_eye_logo.png | Bin 0 -> 16611 bytes index.rst | 2 + 4 files changed, 104 insertions(+) create mode 100644 components/sensor/images/radon_eye_rd200.jpg create mode 100644 components/sensor/radon_eye_ble.rst create mode 100644 images/radon_eye_logo.png diff --git a/components/sensor/images/radon_eye_rd200.jpg b/components/sensor/images/radon_eye_rd200.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef39233231dabba996289ec22034a26c478e8322 GIT binary patch literal 16389 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 literal 0 HcmV?d00001 diff --git a/components/sensor/radon_eye_ble.rst b/components/sensor/radon_eye_ble.rst new file mode 100644 index 000000000..f402c387a --- /dev/null +++ b/components/sensor/radon_eye_ble.rst @@ -0,0 +1,102 @@ +Radon Eye BLE Sensors +===================== + +.. seo:: + :description: Instructions for setting up Radon Eye bluetooth-based sensors in ESPHome. + :keywords: Radon, RadonEye, RD200, BLE, Bluetooth, Wave Plus, Wave Mini + +The ``radon_eye_rd200`` sensor platforms lets you track the output of Radon Eye RD200 Bluetooth Low Energy device. + +This component will track radon concentration. + +Device Discovery +----------------- + +RadonEye devices can be found using the ``radon_eye_ble`` ble scanner. + +To find out your device's MAC address, add the following to your ESPHome configuration: + +.. code-block:: yaml + + logger: + level: DEBUG # Required for the tracker to show the device + + esp32_ble_tracker: + radon_eye_ble: + +The device will then listen for nearby devices, and display a message like this one: + +.. code-block:: text + + [D][radon_eye_ble:017]: + Found Radon Eye RD200 device Name: FR:R20:SN1234 (MAC: 01:02:03:04:05:06) + +Once the device is found, remove the ``radon_eye_ble`` device tracker from your configuration and +take note of the device MAC address, and use it when configuring a sensor below. + +Supported Devices +----------------- + +Radon Eye RD200 +*************** + +Radon Eye RD200 tracks radon concentration over short periods (5 min interval) and longer periods +(24h or month). + +The ``radon_long_term`` sensor is populated with the longest available measurement. The RD200 +provides a 24hr measurement and a 1 month measurement. + +If the 1 month isn't available, it will use +the 24hr. If the 24hr isn't available either, it will not publish the value. + +.. figure:: images/radon_eye_rd200.jpg + :align: center + :width: 60.0% + +Configuration example: +********************** + +.. code-block:: yaml + + esp32_ble_tracker: + + ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_ble_id + + sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_ble_id + update_interval: 5min # default + radon: + name: "Radon" + radon_long_term: + name: "Radon Long Term" + +Here is an example to use pCi/L (to match the value on the device display): + +.. code-block:: yaml + + esp32_ble_tracker: + + ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_ble_id + + sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_ble_id + update_interval: 5min # default + radon: + name: "Radon" + unit_of_measurement: "pCi/L" + accuracy_decimals: 2 + filters: + - lambda: return x / 37; + radon_long_term: + name: "Radon Long Term" + unit_of_measurement: "pCi/L" + accuracy_decimals: 2 + filters: + - lambda: return x / 37; + diff --git a/images/radon_eye_logo.png b/images/radon_eye_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8c900eae6ca04aab673fb14519b359140a85da GIT binary patch literal 16611 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 mzrVpbudCgkd-$Ar(*FaB#L~?W=+3490000 Date: Tue, 8 Feb 2022 08:42:16 +0100 Subject: [PATCH 28/40] MLX90393: Add documentation (#1641) --- components/sensor/images/mlx90393-full.jpg | Bin 0 -> 179946 bytes components/sensor/mlx90393.rst | 115 +++++++++++++++++++++ images/mlx90393.jpg | Bin 0 -> 35846 bytes index.rst | 1 + 4 files changed, 116 insertions(+) create mode 100644 components/sensor/images/mlx90393-full.jpg create mode 100644 components/sensor/mlx90393.rst create mode 100644 images/mlx90393.jpg diff --git a/components/sensor/images/mlx90393-full.jpg b/components/sensor/images/mlx90393-full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fcf57ea93169d9c68bffb731b3fb95c386ce01a GIT binary patch literal 179946 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 Yi(){7f{I#Xt{7NTG#H2|dhj#<*>{M`H2?qr literal 0 HcmV?d00001 diff --git a/components/sensor/mlx90393.rst b/components/sensor/mlx90393.rst new file mode 100644 index 000000000..6ffbac5db --- /dev/null +++ b/components/sensor/mlx90393.rst @@ -0,0 +1,115 @@ +MLX90393 Triple-axis Magnetometer +================================= + +.. seo:: + :description: Instructions for setting up MLX90393 Triple-Axis magnetometer sensor. + :image: mlx90393.jpg + :keywords: MLX90393 + +The ``mlx90393`` sensor platform allows you to use your MLX90393 +(`datasheet `__, +`Adafruit`_) three axis magnetometer with ESPHome. The :ref:`I²C ` is required to be set up in +your configuration for this sensor to work. + +.. figure:: images/mlx90393-full.jpg + :align: center + :width: 50.0% + + MLX90393 Triple-axis Magnetometer + +.. _Adafruit: https://www.adafruit.com/product/4022 + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: mlx90393 + id: mlx + x_axis: + name: "x" + y_axis: + name: "y" + z_axis: + name: "z" + +Configuration variables: +------------------------ + +- **x_axis** (*Optional*): The information for the x-axis. + + - **name** (**Required**, string): The name for the x-axis sensor. + - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas. + - **resolution** (*Optional*, int): Set resolution. Defaults to ``19BIT``. Must be one of: + + - ``16BIT`` + - ``17BIT`` + - ``18BIT`` + - ``19BIT`` + + - All other options from :ref:`Sensor `. + +- **y_axis** (*Optional*): The information for the y-axis. + + - **name** (**Required**, string): The name for the y-axis sensor. + - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas. + - **resolution** (*Optional*, int): Set resolution. Defaults to ``19BIT``. Must be one of: + + - ``16BIT`` + - ``17BIT`` + - ``18BIT`` + - ``19BIT`` + + - All other options from :ref:`Sensor `. + +- **z_axis** (*Optional*): The information for the z-axis. + + - **name** (**Required**, string): The name for the z-axis sensor. + - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas. + - **resolution** (*Optional*, int): Set resolution. Defaults to ``16BIT``. Must be one of: + + - ``16BIT`` + - ``17BIT`` + - ``18BIT`` + - ``19BIT`` + + - All other options from :ref:`Sensor `. + +- **temperature** (*Optional*): Built-in temperature sensor. + + - **name** (**Required**, string): The name for the temperature sensor. + - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas. + - **oversampling** (*Optional*, int): On-chip oversampling for the temperature sensor. Defaults to `0`. Must be between `0` and `3`. + - All other options from :ref:`Sensor `. + +- **drdy_pin** (*Optional*, :ref:`Pin Schema `): Data-ready pin. Often labelled ``INT``. Using this pin might lead to slightly quicker read times. + +- **gain** (*Optional*, int): Specify the gain. Defaults to ``2_5X``. Must be one of + + - ``1X`` + - ``1_33X`` + - ``1_67X`` + - ``2X`` + - ``2_5X`` + - ``3X`` + - ``4X`` + - ``5X`` + +- **oversampling** (*Optional*, int): On-chip oversampling. Defaults to ``2``. Must be between ``0`` and ``3``. + +- **filter** (*Optional*, int): On-chip digital filter. Defaults to ``6``. Must be between ``0`` and ``7``. + +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. Defaults to ``60s``. + +- **address** (*Optional*, int): Manually specify the I²C address of + the sensor. Defaults to ``0x0C``. + +- **i2c_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the :ref:`I²C Component ` if you want + to use multiple I²C buses. + +See Also +-------- + +- :ref:`sensor-filters` +- `arduino-MLX90393 `__ +- :ghedit:`Edit` diff --git a/images/mlx90393.jpg b/images/mlx90393.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f40cd5562101fc41e63b99ce927db02d479b566b GIT binary patch literal 35846 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 |X*Wa|ltw4b<8}upYg9$=n6kQA*;1{3bVn znV*7+=&kqABB;X9O9HDZ~)WH_Gsa-qpv3a){6bSUUy#Gn{&_Ijv=Od%!zby7vA zgujJPuW#d2tmBt|j(1C7nGFx2FJ7m`$>L~p;%~N*2b8+n)X00mH~pyOgnWTVgLUv4 z8`BNaQ5)IZ&tvk!9mAbsBfbuZaBx(i_NDty?#`e^73QX>$AzR0P7AZVlQyC9exFwh5p ziByXSX`Ap!P^WSR;#h!s(Ijx=&lrcWAlqoC1->~Ufa&n zHIVGLxgNczF)E{%U8NDN!RZ4>FukDm&1{UeOp78Ha3C3OxbN&V##^Z;UEf3!r!DXB`22LB(!TI8 z^zAvK^5==qm}Q^!RA*GWQ;(A(qg9U zJ@Afa_xms%{k%^{Zv@k@(^C8|t(jzk6`OBI+2#@T`a5CVTz3JnLgXTqtzg2l#YS4U z8L#4>3-9oJGa<*NA=j-q4>rsL^XB3)Pt$VN9cqz#^g7XyhWNkLiKOhG2587$82-r8 zQ-XLMR)WHl+zA=hhO9-EG-q~Sv5vr9Yq@nc{>_?c_PJDbi>dc2j92pgntb+Bt#B8J z0Y|(Y|ISpefBkNT5SkmR+axfa!{risl%!U}$%Hg^+RuUgqu1NFOZdE%fvmT9SIHnxq6%gjOKZKHFv0Bx|JKR>;q*EwZIfIlbl_oJ!D2cQ}0V$NoRiG&7FT9>|r_uzcc)K<263y#xiq5cXb||2NyXG!Swr~B%$m3&^nZ-#zZ`K zzE8-}FRvUI{M)ja@P9FNmO*g@ZM$BU#cf%fAPX$+ELJ+6KSw*!mFTvfEAxt)=-3n#%`-s2|vvClhBXPxFP;LJuMM1 znaA6!y@ZdmLdZ|Pl_3LwiSKM)mKsW((@*PYz@8n6O6*=zru)vzQ8W(DIXN-i!6?n} z9ZY=2QRSO73D}(kn`YE6ZmaKGw?k%HdQ!HxgTJN1lazndRz}%UeLIUX>z|TN6W6A$ z#>VTGY9+dDN7MUT%5f^C$$m%r@)zEzYC18FlWBo7Nsxgyqpa|fI(YR#)djA?91{xB z*Zm6xIsjHm){F}G_}1krln;B6qG|I?gGCGd3ERT|0EqLiRmjhX&?q{heCMVR{^JKv zDS6ny)!iTyqvd=}XL=s-Y5Y|my)CZ6ez$DOWyf1FZpSfG2|b-4e5mg4IX^C?MV%nU z)paqS?Zn)`XA7`hqh9*0FM_jM$>U@c*1zYMWjVGMpgfIkcjnYI+7y$jkrl{`S3#Bj zx}Dx+Y(Ck>j@HBLD49@Uf?cKY<|x^bv*vjf;mQc-7Y%#G9-894Yc)eCjlRY$Yh@f8 z#*h{K4$sXV_9=d=e=3>2MrWX;!tGpfOuwB5kLT5~DM~D*!rmM>FZCVx8-sldv*?iY zWH0WUm;J_ebN;WQ;ZDo*5XwyoLIbl!Wgiy+$qp%6O6Na-2S0cJA^zj9GY);=L$eD* zxNmkH#28)i^}3^ink(ak%_51dmm<;rqj>;OcJ&10@ZCY|HQOreRZ>p-AbU+9+Z{`8 zhbvihy-Kv{i+{!v-2!YF*Ht;~+EIQL1H5}ufA+1%Z4v9;VLvGI-@NG`p0GRE_rnf~ zD8=9-#kgy;4x|Y1s%8B|6q5vo z!!w~HOpPfG`#Lc@DRkkoyTNJODk?I!y+mnpz>0H04$n4r0=I>T*BYdnkWFlSOi+o) z(}%)%-7I*WR|7fVNwBh>jOb;T=rcyK%crlHU+J22{(70&69`3G&av66mEktsY+%T= z>Ynzc#=}Jz?$^8bTQOD+8Vz|>)Oh`(dOTBmU{h{=Pa$taD|QqfgG0M*!{L=6y(+O% z<3AK=hD1huVX$M(WV~u7R!Mt59>Tcosuu9>CN)yyqWqts816vAt4YQZPQG`X@ffHn ziMn$VHn4#gqe0K~4o4s9qSxmbjGv~I-^qW=N`P}ME3E*Pq6iAylWGD!WOWSmyPgW& z#p&%O!O`Zh(zBDmwEBtfsbcqLT-08~y4A)eLV5vsYX1Of_B4iKB^OOQUzw7VNvfsq zkmKe56q}D`hp**yHusKt4G~PZh1QmT%q!AEbpMdbqYk4b+?eqad%rSkKp^C=j3 z_H+Jt2%OLKo?~TbJI+s-Tb())q7NVHx-=Upk)c1W=C3<2(TKd?!Mmj}B>G(zc@orW z4tOiyNqBiIjE^srGLHmQU?KYUZt01nySe{=?)%wgl$5U_ZCY|VqXr)*OY-BulJn>=wJAD zj^4lNQ4~B`%?eP8&P2aAi*fvj=f91r5hT56`e&w_oHu38$3kSfkbj;l)O+*Q0ECrb zv6><)6x~77u!zKkLt9n6KR+h6A48|_Jm%H?!idHR}nQ%gh^oYe~}u zKEIokVhpF^mSG^2W2~+(?WfD98;OF7B%iy4x+7s#8y@03@4za9VeMm#DG3@M79WD~(Hr3TC}-?e z65d`2F#h09iD5jGfsD${FMUL^R0%46xwwYTD+$MU8>W_@%d{eTC zXG8NKr7!_R4ypb%>;f&Pl=@Vt7Sb4-qZ zl-*$oHJ?U3Zgl?zr(wKR`#ezOk6Y`)LsQ5dD&{In7C7cri2CQKdcU%uop^<`p&OpC zS1!~#07AoL8^4Nq^Mzw}a_ET*m8ndL++jND7+u%sB-n6ht62c&7;ObF28J8%BS$ks z=Z9#TEZ?sFST2?N$^B_l_&d|5tuCUZp-q~ZxaUf(MPOOdrTN=1CM{)#n?iyZ8jKH$ zOQe@HG`$qz#)i$9lyl)FAj;FNA3FxgAI_3e^{e%8OB>n4Ti*jwQUKWQ2mb&cy^fY7 zKC=LwsrrT*>mx$W!z*2q6BuH1-~OzyifdkGWg_n@M~msee%YTXaSWZgBKEuZQqdi_ zBx_asZqNSjWg$kC3TEQ%vUI6!Z4qP1rxPSvkND`d zHddgbZQNpQ7E#hD05lKxE4ov z{|DbjmN-LmGr7oS4|q~A$sn4$_jL3NsZod++UI(?Rx+5k8Lgc%6(@5?u(niHwBFId zUZOo;I)bi7yg3Biun8S)JQY=tJtNn7(Vqe#Dc+g}MvCtCrmb7M7(X(0YgFtUyA`F! zNC#vn8h`d)_vyZAjts?$5OcXUHclmq4iW<3Wv#)a8HW~d1Z78EDlYG&sFxMFmU;HY&N$Qn_ab6-(1L&tvfE({R>DtBXe-8%u6s~Fm4@#D zba$m^Vd*wN29eAx3shdYb-V|m=o~VdD9jx0gb?{LDAsGV94_dZhgOl8=q5#F7*Yk8 z<0|BdOXcX<)m-)CNWBz;E_;ViKNk4dvybGaM3}&NSUtwET<8ojY!A0}xLAqVzx@`> zT8WB}PyXGhnwAWYdA!pegoEBlfi08zsTEJ9K($)(olfzlo=4+(uPlfK1I34w{}-F8 z`2&qjet;>LqIi99oEohclG-1hq-2_$<8x@9>KdQf<|Yrx4ofSdwEn}DrAn|ZvEOe~ zFHm-0^ur4AEgjwbStp>F!4BwTZn#x7~IJIEZB{-lF*5c$?RUc~u^qU> zo~sg~8WHVX#_jy$69y#pRR3#L)N3o56a8fl8fcxDDQ}#^M93~4^mI-~mTiO&5CPPB zEsJ3}fAB$V$s7(^QwTo_n0EkOBKH^mrnRK(z!q^s+(jlX;FfV|xQT1_H{qvcxJRHI z#C`l$Kf;%5+*iwASTk9h_EzvH9(H8Wg_Hd=RAqFet_Ni(PN_LdM$1TI8q_BFp%c5j z0RBm3(zhwWP#VZb1AjTiO_Wb4dFuSAoj`i>%%vM;Jb}`V5{~{!o zQX?ldf0&+;$H%YuPxQ4h#TCvT4FZEExY~F9g_WqX#ci$!i$3j&JdX}V(XPZi#k_yG z>PMjXqE`$+q<>vR2mKkk>BdxPmCK(LlNqc%kD^WzYf6P8jfe`-%nEqy~*F1 zCag7sn}YZ~jm)zWE*^QCe~-^uZm<^q+(?go7f@)a_JJ&}GyTouYQWnxwwcmFvc*Yt ziYdbgB=q2)B6HM+Jq`ui4`d7*uWE1N$5njR%tN^v1(ppO={ajI$U8D1dTr*wY?Z~D zp-x?<$%32k;N^EEgL!kiR@oBj6Tia#0VMZvDIzY&Gl#N_}<^;zK(r=66mX%rN=eIWK%A!t&b7 zM&wx*%egnzB`w}*jO2_8w(C*pwKU5R>24e@$6CQNZpqZnt+<=v>V)KhGFQM@LIU{F ziZ{yI-Y^7{u;et6{vO#~_6eQfiU$qdE$yk~TSf*o(ofr(f zPR|6&390X&2FPm_)|Avi@+Fjz5@_|mz0hJPpw|@qOvwHG;wn4b2>N-vPlEoI zveCu6!nFdtrn3JSYZN$mGfopOc@O8s^Y#C3kx5-7EHk_=Dr>ru+8^7r0ir2Eku z<6lc%Uud5I#`F>#a)-`&_#{n3$a>WkT-R3PUr!D7oPOGML$>1hbJ zPy_8w%m%7IE4yxc{VOBkxy7$)B3vO)-7a5lrx z%+(;cU!`Gp?P5@eHpEthdP#YGYVphHNh+6L!pXi1X2Um0v8#Uo*WLRDf9ftDZi~UK z<2qO7!QM9qT|P~ZxUFU%OK+NgDHtFyc0L2RVqXbulnCh4&PS~JHDw09p0GsB2-%i* zUrfi}MQ5`!s9lJiyMKm2C?UCIr0HFY=Y-plPWo5bWiPV@=c!kCh1FKEg*gHRGD;?U{84w_j>{YP3!aCxHK_#GyQ$MmhfUlOp*cOXydqj18x~; zzO(t8l4p#X`hvdcu|teg0B9d1`gD+$hwMU^^mH1+Kt^_c-1xYuM~<;#w?jwtD@u&~ zhfM0PkemLHcKN;0^)DYUk{ue-9yh;5%#X)ZbA6C#BVc#vF3n^WzesD?s!CM)(2ULD zt8#bns62myU95>Bx)_?MqGN)nNA}d)qNYuxB-AGkQ}{_98Sn#a{qW;JH&F> zlD>I&5{)#KF4)tI-&2%g!GEpaNCZYnVYV#Ia;5p6>4Pg6il5a>Hrrt(1BJn6RejIm z_AIz%{OGdGr8M{)?^hzWyJo-vD;fRRvCcmry0?Vl|1 zGqkSanFkIQlV{rN^Xdb@x#j&_HBBsQPBVwBWkbHa&lT!lnzFi#QSjrG>45XRlmhbGq6yrC8ZBR8LB8=U64!+`RLCp`X0Y)=F_#*3%(nuI8P6x`c8iPpvt z6dMzAKO@aU1c%5uWnS%C2goxlE|2Xj4Egwsz03SGr1*CYR0Uwf^;!=;By2PV#Y90s zii@NT`5%$r6?FL_q!zi(`MNS zM=zj@SyCb?>wi+2${I5$3uHkb+rNE_N*!?aEtdV>88agE)||x3ZnGObs;HWHaD0ta zPeY2a1P;&;e>q(IFS+)=>|Zbt2?{_50Tlrd3@8u-1eOE@ zDZs#RSOPi>C<#qK0=y)kBJ?F6g7JD29R|jDxfx2=4FeLv%p}8XBVCbg>1W^o!ib0Y zq;%86EypcJ9!2QQyz|_tGix2C1Fu^UoK_70i}(kKNPve_>Ocbkpa9vBAPgATfQJhJ zO_B>qmxKiYU}0vUBn4QKBw#`j8UP1rp+f-}fFuP$pduPX5*3IJdZ9uro_a;^pQdppfd=A$Y5p^sUQ7wq=48Xvzl`pj9rb5S)QPc+kaaI!)0SOo& zfFeB`90Z2HR0NRl!VZ3UPxSw!1O-q6#!HC+FcJ(b35CExFAWkT2@OJmzT|^3UYZ*O zflIs`7_;I3_rMqk0{t&e;KiYgPs0u7l7zxF%{9yd^POE1>w3;6*G~U07z2Fw2NU|9 z$#-(WrZVh$M*he!gmY?yU7Mp$vf#;IM` zV&wngYxgoY8GupO0LO2rcxcx>CP$~pt!Nz$*n`+2Tlo~>VefhgZr%wPZL`XNe$Ogn z9pPlAM#{WlSgWyJ0kV^0{(uKM9oYs#~19a%8&iD%fOLeHsl*0ZGx0Aqtp~V z^KSW=eDA#oqVl0{A*DFoBUem6QcqNHhA*(n^sW8n8OPX`wY#m(2yq>kXl+6b_+t%y z%&e*I9;ek| z@hw*Dpq;y>^Phw5VLEoC>M%-v;6@1s78=qA$QY=rCK(OcnYFxuE-VKJvC45D{GJ{Q z@!U%0oE;_L20R-W_zEPe5_(asgvZpX26i{lzNY~0d-Ydr%tvHyu)Z=yF4Fv#MDPJC z-PSTnQPuNhOq=|bwpye#T#sWx%ijM>N@S5tX(=Kv6kBOK;?u5@hBF)^^^^%8rFIlC z64Rak6@ej3xHQW;1FIp+`1$4I_0>kZLSRVEr4;Ci?EX`T)Yg~GQ1NM26XkivcU?Aj zaTeO=<%cn_V`)8}vX)eP9n{>1ix_Q06Sf?+e*;#gU)L|VS1MN?#r!h2`QlKOw7~QM zVZ(jyIvPh_3os+99p@d(N$RL*nC`hPui2`$rsHGmvqCBLKGCxF%9&2}6Lzw~kog7G zX%sCNw{dRIe|+^U|I=$&>E*!q;2k=k;CV<5W5DPnb2WrtI8g$WqxVhg1yDC{z6N1$#aN!X%jzqSp) z(>2uvx5+#NKelNXj5NI+)IlPR-SPpcOY1tD39sFHRnp zG}88~`t^Pxb)nz5X;88(ekz)HPV<-e844se)i^!;#oKjM|KQei&#dppP-U}QMbB&e zgjsOmm0I(b>gZ!T#@KV$oMf|yOkt2L{`=lZ2T9fPlfxO3BDpj%8K>x|0w!F7h7}bp z#BT?YSFx(32rmH9OqVAEQ=@Tn`^D1HWr@kzcU6RQ-W$-#2#zs<%_~Ay4#GcZ=3B30 z=#fJ=Qo@|I8cNpRnxh?=l`=Jb!N+bzXn&hz33=X<2s!V19+!X|?mjKi|HVRxCD?IvbuB~=gtT77o6oK1j-8>jlLZjU z_L|TAxZ(IlUGo^ET9CT#Z{_bYoWDq_M^ywtfQ*iwyO#R7Prp1S9=-O%Sc<2sb4Et$ z#ZdgHPz|1Drf4zh1rWNd*aZ-EH*i=QoO?PzP#(!CfU{4c3<(nm$ z={_+>8yN%gYHmILM+5Z2+eQ8_SpG!@^dI&v{{Pbe)%BeI{~92$pSOA#Ibra0Nh~gC zK)ikdz)d8G8(7r2Rhhr@+t*h%Pg<4TS&llsK z&gg{+rTR{;Ind2Bfmv&X4zB4d*rHL7VJY z%iodofG1v^o;G!uK?n~uxIMaHsp#3D-WkAQnQ6#|YbvN3K%3J^P54PiFG$8?YQO;% zd`=`+%S;<5#P~o?Ivs?(m6l0y=(`aW;Gpi>10GJYiSBG62*Lsz^PY?tgip|g1c3fZ zcEObUscFERE+hBW2vQY`ZUT5Ua(>>I?{tCKB_T!DTtlqpl5{w>m-LiW_#(J%8*v*j zc5;$NJ{$&7t(-RY4@)2O4V`pf)s?1|g%K_l-pgKSon63f7L;cOxg3e-HbaLD=G!{VAJ*p5$P zGDjk;q*~E~MJHOWp49#x2*+p4#-@rU=o`Uso#)ajaF2eQ9)^ZHorf;i*6c2%J4&ow z_24w+>oO&&;++A=7CL=Ql&fXp9a?Y)xnicO2$5iH(S6OhgYoHm z4fpvct0O@L)QAIgd=f1qmgPsnmiFc+~ zydG6Lfe-+E9jfWTPO;YxW>QKBk*SL@I#~?5__IoYNNt4UJr^IN-L-})Y9^O0<+>{84=2(rLQXn1A&-u zFHg)0671Io42TdEqVVe+stU$bXz|ZF&+#^UAP4@WWi8fqLdkw+eTwdcGq1fqo*uKv zpeMq_@7zU_1tV#!PYdKcMAZH$js z+cb4k<7#KR^d-l>#{FAeHm*GJ(lc~1{3gVS?& zM(!msE)$U0NmqwwY`UhUM9tsFEX`9wo`}KFi_Z3hRVj2=`lEooGb(;wWK2a27~_tQ z@(j$3&TVpRXEd1K{eey&{obhFlUOS`YYmefode{rltX|`aLKuKC` z+18Mt`wG2G2aq@H0&k;AoK=V+C+XgP_g(O~3^>dB%-Wk@CWQi@FYn@T&8Z*LDVEJ< z(_%pPM%RvokfwdJQODv-n-JoAK^9t@hvw(VMO_BLtqVRw3r!%_?AS$z1=&S_NE&Aax3TJ?k=QVP_p zl~3z%&ym-g#h5eOUx<06KjUz^-#)H?$0Co+mYll?=pglP44=f?S~a--#u@sX;l|H1 zk1HZ9TaOV(%AzE_@VmsBCjn`~yUFih3$<5&$YscDQXaN&112XZSeH&Z)&m4tsl<$J zJTh6!(?;TY6MCa;uo41g!1|S*gbh}HC*mlop0fFutdEaR+g_#N)1sv~=dpglq>Ql{ zg(3F}YIum$hgCZSCf@YMqo*-S8MmhS+j)wztV?!11xMcG>(x4%(#wkLX;p=9cQ^`x)l%!zlFbo(|oD&D5vc_ zxz-~vmmndT{9Vh!^P6y7$4L)#;Sp}OTpz4008l}Z4E1%!1qa1^SH>)zFYnE-opd4C z>y^h{Db0Iv`_LHkn?X>%PF-*AVo&zU4_w*~{0WN&8zs6k0}_{suP3IelD^;wfJtAQ zo7tMzw4e6s)&1tAeyl){Jwd+r38Fx~-bx~Tc(@c;5iroA0F&9fXm_!kc|*(8MUvk$ z6x;G}h)>UM?%HAs4513KEwjs`RQr~gGFY5OR(^H$&>zBgtWhX^j?*ryT{p3guC?+H z(0&BTQj*r^)?ODnF=XSn745k!pK$Gek~v)d(pCNGoIbucEmzcN7Q=*bKHeYuK&V+n zai82Rx+edG9o|8AtXO$Jqi{f@feAVdkn!R_4B#Q88I_$o0S*U{g#cT_Y|3MiQ{gyG zfH+t-gFO9K_9S!AJ@URryEruUyY^K)c03H97tNmZ8f~1AcKMV8WcIVp#W5<6pGc8N zVZN~szxm&$0j$sx&LOU{*2-7K(RgZ{os>UY_Z#8Nh zFJ7H<7Q=l;^XJ4p{osI&{d0Vb#zl2D&=2^0x>%l}xO~of^sDypa+>lQoutu|egx>V!PL5lFlO6H~u6W~%I+(3!i$&QjIPY!WQDA?+#CWX|k zU4Zn#-{Bv<8A;GX|XnicrO-y`E-S|4{Q<>j+b_c8V ztl1|+R7%>d-oW~p-EHyC*frqmptF!&+rPQ?_oJ3lC%GcZ2Lpl;X0lpCD8Hxo#fSf( z+y!1>wNM%VmP4td@k{sz5LQ)y78bdvQdd5pK2J?h+$FBE9aNPass_u?5Qow_;q8xAZ548=@8 z_RfS6%`CSIb^{v(mVJPtwwpnQv0wY)1e?DHQr@Qee+ihMOo7M@QD;z#!iV61af6CN zG~Rqq>wtVrFujJjt}feWvf+2!*z6c*^6$RBbG(*5y7YM#{$psWwE_vZ8PYn#ARnRH z#OscHYk|%|yV;sxZYN&Tj=<5QRiZ%t>n)H)=c4tVQq#63EiPI}^FvA*xbwL6c)b*D zpJu=KYkc2@FkwQg(O1m50Qb~NHm^^Pd|=#ka`00YaY1ciiZtw`?$C}czToOOU~#F9OSuYXRK1e(Zvk9nQ=4)DY&Fa`M_B9lp?-sRfYY1 zW$qsWLCf~+o6dU+PUTN)1$-#ewTy+!82JV0hpZG`Xznh|3xJqawaLKins&mV(_?qO z;6L{{XD<0HIXgQ}f1-t+`Hpn{nwf1`zKB$y3F( z4Q0jd)@vw04+=%z50?`@%h013S-fSWWbXfj&?ORane(~C2+QmFjwGTyWPty!VV<^y zs@28T69z5>_>wRG+y*5QLz7htKRm7Ps_-;~g27>LJ;T8X#8K=RC(D+OJf!P+%pe6n zq4U(ru~;yjjXGo>-kpG!2k<*rJ(09ix#gq}u2y^S(l=N2)o~xAAde}BM_yar4IuI@ z8WUr%=bNQp1iz#>w%0+boAZv|UQskxRMG^!PlW#fffB+5OVfUC)Z%_ZtfDWfM5$iN z+-g{efOh@P*qJIi%Q#j6MjP3g(DeHJg7xlPL1PAN4bFp>rxPuo&dMc-dtcDa>GkCCdteJ5eepMX$TzkLuMNT>j|75## zh~u~~T&ngZYRN1i7CP{rh5BS1#eGv>mYEyiYsw;{GRG(Hl=V6Sz&&U=PFl)D97u!L zHHNLlCo9j-nmR}Ld`Dbn%5Ew39uvEY~@F1Mr{5!2ST1=?*B#~IQ zmOM94=pvW2Uf*@tl3$PtsoJy)uwjN)?LrY}NvPJF&nD}+wQ>}KEf@F%bw#TXHvrwutFaJaN=-oBPV*<^|3t0O4H zS<96-)@EXv3^e{orO6YqHJ4+o%1NmVafE29hfa%b@bUfrGBlpC!~p_^GB!Qm=7?~f zKPGgww~q8OJj(n7c-GrRvSAdvNnyU(j-`;30SpIDaU)aZyux^s{swJ**lk$>7h$f2 zyig-861wgUrpBICO;Wbx=^sq4$h&h_e!6RqTSWpq?ry)tuL+hOLu+YDdvtVJU&dQ{ ztsdvSLYk4hcM{IVhk{j>Ooa~zxjp!QuA&OU&rMnesWWkqS)Rt+DS1=qD;9FNncIhB z$z|geMQkFmYqW#0KSzS_;|)FL45CU}1JFCp70%NmLPpF%HF_qp< z@J&NLJ+|Z1_ArQeSKs25Ve(Ce*R0H;`hC2=JVYX^T^qAY>IY*}|LwvUb*O+ayP;>8 zg?NsxD-u}%l5jX!n~(Q}QTut6993KFcc zn~YXb9+CYm1>(8peD58Xu*Aqm8KnEdN^IAx7z})^iGAoLB~ZMCtdndMyi|d@!Q^bVPmR+SEgy#|JpT2w++Q~bzc9ezvMOvGOLGMCdWN9~FkeJ&N z_?mmK3_%0k4mJu2rIFc(oqPc$x*C`e3;58Ucc$p1xNR1cI#jMPOBryrAj`sV`emZ? zWg}Y+7FCW3!auAMDqZud>6lQKdF|0c0j-1$r3O$)2#(n;D3@0v$~0O zvUitf!CE*@;zS-|*Ow#*@J=`r(3?15>U`I2ie*CTbBmCte?sz*D;Tyz3yNKy-$YgH zQBQCV#i#U~OecLvnIvey6qOoz%_^9$=?F&4AXyKCx%Ek^b0Wv^)uOlNk3H}vkLVBA z<}o$R`U}NL!Sjef5=-I4t?&te;mJ4~(qrkVaEw$+{6E05mLg}>-4+q(p2Yuc7Md!+ zU_azCzvJGp?~qkKOzc3dYLJY@i3W0uJGU~RJkPT06OTw3b`1)YHC;x?|mre{IbeH zg%{KAxk7HsI2UsBDS&RE7{3!XGif(3o8#x?m zX9ztFS z(9B@Y)P_sWK5fwQ<=Y9+(jRa2c_u5!quAnyh;f_=4}8}OdAbF;B0t}9s-!r9b)m{D zYrk@f?jJW2J#j{S(73XYxQZ*toczSj_)DttKQN1^hx2BB_FYwYFRsiQ4jfED|C*0T z?lbHg=r1;_j3o+in!`d0Hc-GtThUL%`5`n_<(vxIz7NO2*)6&(KF=A0YMy-9p!0=xA1(yam90iw#|6NALp7exL2=ece^`5TUSWr7E0I-LG=upd2Hcx3MN=5i>`<+U2 z;}ELI6CQW@!ha=H(D3T=pC}F1$Z;v`66oUQ*y+n!0eHiT5U{u7s{q252^$ANWPmrZA z#~HU~nFpZj8;xh6{SV;9Iw_Jo_~c51AvfiD2Jd_`2;E!YN3bL}DF4n|%|ow|4#co6 zHYH^$OHefH>l^2Gqv+4ZW z=i{<;uQMa?wEeBZl0YM$wfNgzU*wsr(@ zWs8M4aJSDNo2%QZR9?@2oVBuniy57)&1kW^wiE-daNV`JszSqHa!t&1eyU%T#Zpvu za}gjdGq#g^^2(vOVwv)%NEWN^1fGOY5XraQ!|^c!>PjqTti7_ktB(MrB z)?rC$K4z z`KuS_-N;wo&hd-51&T7j#WEdVMC351L6>i?aVw6Fs}D%U3%%aG*W*g&gm5>pMc0OH zxWHjJm(~R3GI4;fft!+5Qc4th*Z)@;*`VJvoMcq!*A&Ki1U|!g#QGHat#Q_Od2TRM z9pSglbZ7IGf zQm3ZeGB4%CKWzkLxo}2O6tK?R$G}Mu8O-|%?=@IGrO1l;ot{JIv!vR#dXho3(HcJ) zz7)ZR-6?vgj(oQ_!~&@s^J%@i(CCFiqNu#As@C6Yd`-H?%h4oSVI6RrkF6@KF|#@oF+xKQMiqxB=yDn2kJA z+H}8CFF{znoNeGO*8@>@87SFxl_U?-DDe1V@eLWW?8Pxz-)^$w6`=ouKxCsEKeqcP zr-77s|C1|+P zBlzj$b0+;yhE;QAkzvKaXMF0wq;1M<0kUqZuDz+3cwyHO%szh{|`d55?otEnl z66Uh^o?w>(mgAjFa_#7uPD_a@zEBBMv z$6ulZu%1nxZ#S)EWu=ztS1V-O4P3Us6F5uaUi&m+qr^V}_|Vi&u~V3HO`6p;2($Xr znXoUa%qyciI?+)8n2we?R{EYX=4xXK`HN+(?ThW&dM?!d9%Za$k$j9DVxQ(L4d6;wP96;DP(RkmAQx0k8l}8-Rh8eF9G2p6|aE z)b9+s4EmU|mK|xWR7<2`<1FhV#_D;IF_SF+j?GUxunaCgrOOhxZ2eVkTQ|_?wduFO zz>8ouy#V*8Zm$&lz?Q$kbAPWq6PR_8=CS^whqt$>(j6T&hW+6&f%X+%Wul6x>i;xY*k9jH0;HW ze+vN8G5^?+?t48@>8J=fN4~H0@Av2wmGbYE9fq1_tcPoDSK+PtTfZOVnjm!=B$!e_klByrkcZU(FGGbEIprnPtg`RLAov@O z69UIQgqv1K+n=jJf7$Q8StRml%<~op{Dos^r|l)?v@AI9{CW?4-LQaxR2iA2xY}xO z>d_UF#T2t>oC7WHJN&cWF$G|T7=Oxo3N{8}El&7!se_-p-gMI#O}B3tkB~yX&kNH! zj)@xz1X0dL|5-5{P^=i?_T|8uC|q1+9FkH;t(Kc`R-h-6L{R#C{zcSA<26ZkmfK!i zAEEyB{Q4h2XG+NRg!j@GJ3>^bISAXGs(0{S^ghCmbe(K7CKTrVMp zIvgrNiZZ~WHz0D4EF(mff&m}BL|)HUa^VDbc-7u{yF>Ut045O<^^mw==eN=si7$b| zd5#1{061?@ZpnaIA6~(y)x$-`I;RyMc2uMg#Ga)7PB$(DC87^I8135_6u-tgnE&M& zaS(Iw<7wCgwOdz1J3={Qko@V-W!!D0rTM^wC> zn5l_Uv4S`u@&E?irsav97Yg0^IbX2f9{?#{u&ZkKpp$2U7)o1P8{g* zaMmrLNi!fF2xlKX)d&N;fjcHK4tw-ql+@KBUFzSqW0R5V$pja~`L66*`#XqPeBT!`CI%!Ok-Ag(vbSMP zZmdh$qq0XK&rV18*Gy@MphQh;kW?q#BqNIQ8(O?HGYvvLR5A9>r93yTg3Dk3u8&kDBN8r?2{aFcDQZblC@Wv!U46F`0>MM#@sGS$Ov2HX%U@9;r|K72s!tJN`i!D zBMpMiFO|X#C61h0_MA779R(-QvwR#I4t)W4?cyaKl!)jlh;&X! z(5zXI`xC&IB4O|m4g=)55g|Cx1Wwlyb`P|VNx;ox#3Br+YCh*1Dh)J@Yg45M-V$?TPo$OaSQUYJjq~z) z!m^*olj&QkwqUaqSvQ18)(=A-;sB}Rod^Nq6{}=STh}j6D!`E-es)ah&Wchc)-gVS z2YeD#HW|IIcizjwZogc@E8zn9uQ(RJg4MqOGM#`+N1g42Szo#<9PNjKlavNRD5j}y zFRO+@LVFwIc7AjX)`?xixe9ip4AuVfyO#jD=wIV96VMKchFau z!OpQ0g{6By(G2NLS@ee)oQgy+W+5L^Uox$EfK937upQ zyaDj4aRLT_r?ihhGwX>j1<>(EA3J;j9W=$#p7ZcL4`>d;gZ}_8*8*bQMPN76`^F4_ zk%+RyJmmvL5e2lCPS%sIV2ujc4Hdw#67=wYm=p}?{{TFsPSXvi7mC=Ps#Sy?@|;6- zp_mj=cF%Rk3M){8rcUSJ?;NG;nouYsKY4j9*2*1B9!eE0M2o@VvN6N*@)l4+DmE&r zF%okM<5pM#3r`(Pcu_9#(4iGg`v$qoDqaGq{)dt>@gZVv{{TPtEXJox`Me@T2T_?xo-`glbFHQ<`m2Xsy?4Nq1#inKU*|p?SY**xSgxS? zg7K9C3bev%`Wz*Wpp`i;F{#|Hh)Xj{Zml{1(CGFUoF}Yyidl=JB#|_>pt)|Kj0c82 zUal%~+#o~{RYeA$0W|x?VjlBG6(Cp=63B?eeZUha8tk};nL}4o+NeO9AeyC?yn?I@ zlWC^@X1#JUW>Op-eusZ}MIx}W#h>fVEGkfXV_yFN?~@ZHXU9Dcj`*sBfQ8PHbBtPE znMW3bI1fj8sl6@!ay4v3SF<9Y`NJa>Kd^iCzr4XnLW3Z)yZO9Ovk)qnU>@Q92fh?Z ziq&Fz{{VS8Q8tkpizq`pc<`ka4nQ1q{{Zua?6OtIb>CmNl-U$S_-kFC?=AMrCKCaj z{{R=7^7M>-9OZz5YBT01cX+%Az(KVGt~XNP=2b0XD;kc;MUtBhrqvb>|r~LE1tB8Cx1Le7u+d zZ4%bNH)A&ZoE?u4p_OQ=CGnu|gUCPBW`Z?}r&2j}D#{4vFmapN=xyp=F~}&JDPNL~ z)=}P;71fBWNC~ZY>}7;z5|c<8Law-kp=2Zk?1FXcQ{iKr!4AqTaZ=Whb9B6ix2g}q zSly&+$FV>r7y_2aXtM!|sD#?=K?pM0HozG-E;_mZV-_28Iwnwx06G!g&3nS}&;eY; zLqHQx+J;HdEI|B5heNJ_gu{y$P#|MU8%$2;+lC8{NDy)C9Vqjz0<;Jn0{~WYqSK3_ zBoJ#gVl@fj?@E>%0aZt=1Ou_srxH>01V%kwJ_A%4z=G3I9fp|w5&2FN_#}6LsCX~f zJL5hCMX?pJq#dB@U07xTJx4(Y6ekaeJFivMB&2r#077=~m{fuiwv?u+@Kd!SuqZ^3 z;3Y8vJz(mEisU4wG#F5{b#UUuZ~`pazC?RS_g7b-Q@scX%j?=$@BvCeGIW422!+TIg9B0PJbkwx|p*NQX^8 zQ?~1A9!mrqyfmhR0>$2|6(8oopsfX0xZ-hM{)v(;prRe1M3Fe?2$icay*CZImx?;% zxda@96-H}axab>6D%w;8D3rK@b70KY5D%~s5G7vR1^PmKm*LQc>oKRgXcd&$OWslW zLQzX*5(-Y>JBxT(ZgL|us-zrS;Z7=9wo+Ics-Op^_rR)f0GR^?CqT&7iNN@vAxa1D z#Etkdi-!R&*dC1@pyV}zjT4s$>O@4nyl-U;1&;>l)|AaO>nk^sh=8`WT@|-Ad@gTw zV6p)^6OWJ+q(}%rSkmJ4oCtwU^nyZ@b}sJlh}9i=c7Txv5nVN8y0iisgkjv3_(O~k z&}2-40N@Kux;U<+APuT20b-VnlC-mY2(Lkog8+1ip!dN;Jdg!?1SJQD0wB$0G>jzJ zRO(7`GODyym8hMG!pt8OBtllz>B=ORg2ijNTmrr7Fsl-e0D~Bs0Ad&bJM4Ps49&G@ zVerE~xKsc`4?t7loKv9gEdb4ry-7Sn;4tX+H`)4l7#P>ol9Z_fbAR!*wd_wS4f z+P95oeIMb#5NtdVHR!8;`H3`=%*Vj|pLz%#>-beTtZb=N`u977}kt%Se! IulJw-+2neylK=n! literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index 9d12968dc..ba24beb12 100644 --- a/index.rst +++ b/index.rst @@ -329,6 +329,7 @@ Magnetic ESP32 Hall Sensor, components/sensor/esp32_hall, magnet.svg, ESP internal HMC5883L, components/sensor/hmc5883l, hmc5883l.jpg, 3-Axis magnetometer + MLX90393, components/sensor/mlx90393, mlx90393.jpg, 3-Axis magnetometer QMC5883L, components/sensor/qmc5883l, qmc5883l.jpg, 3-Axis magnetometer From 7de600069bc60f6e90fe88184b8965ffc025a574 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 8 Feb 2022 21:34:26 +1300 Subject: [PATCH 29/40] Update ble_client.rst (#1885) Co-authored-by: Ashton Kemerling --- components/output/ble_client.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/output/ble_client.rst b/components/output/ble_client.rst index 38ef7111a..bda99d4e9 100644 --- a/components/output/ble_client.rst +++ b/components/output/ble_client.rst @@ -25,6 +25,7 @@ For more information on BLE services and characteristics, see ble_client_id: itag_black service_uuid: "10110000-5354-4F52-5A26-4249434B454C" characteristic_uuid: "10110013-5354-4f52-5a26-4249434b454c" + require_response: false Configuration variables: ------------------------ @@ -33,6 +34,8 @@ Configuration variables: - **service_uuid** (**Required**, UUID): UUID of the service on the device. - **characteristic_uuid** (**Required**, UUID): UUID of the service's characteristic to write to. - **id** (*Optional*, :ref:`config-id`): The ID to use for code generation, and for reference by dependent components. +- **require_response** (*Optional*, boolean): Control whether to require a remote response from the device when writing. + Whether or not this is required will vary by device. Defaults to ``false`` - All other options from :ref:`Output `. See Also From 2cac389efb394906449629c290658b26fa826f53 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 8 Feb 2022 21:50:33 +1300 Subject: [PATCH 30/40] Add lilygo t5 4.7" touchscreen docs (#1886) --- components/touchscreen/lilygo_t5_47.rst | 35 ++++++++++++++++++++++++ images/lilygo_t5_47_touch.png | Bin 0 -> 42619 bytes index.rst | 3 +- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 components/touchscreen/lilygo_t5_47.rst create mode 100644 images/lilygo_t5_47_touch.png diff --git a/components/touchscreen/lilygo_t5_47.rst b/components/touchscreen/lilygo_t5_47.rst new file mode 100644 index 000000000..4e01bf01a --- /dev/null +++ b/components/touchscreen/lilygo_t5_47.rst @@ -0,0 +1,35 @@ +Lilygo T5 4.7" Touchscreen +========================== + +.. seo:: + :description: Instructions for setting up the Lilygo T5 4.7" Touchscreen with ESPHome + :image: lilygo_t5_47_touch.png + :keywords: Lilygo T5 4.7" Touchscreen + +The ``liygo_t5_47`` touchscreen platform allows using the touchscreen controller +for the Lilygo T5 4.7" e-Paper Display with ESPHome. +The :ref:`I²C ` is required to be set up in your configuration for this touchscreen to work. + +.. code-block:: yaml + + # Example configuration entry + touchscreen: + - platform: lilygo_t5_47 + interrupt_pin: GPIO13 + + +Configuration variables: +------------------------ + +- **id** (*Optional*, :ref:`config-id`): Manually set the ID of this touchscreen. +- **interupt_pin** (*Optional*, :ref:`Pin Schema `): The touch detection pin. + Must be ``GPIO13``. + +- All other options from :ref:`config-touchscreen`. + +See Also +-------- + +- :doc:`Touchscreen ` +- :apiref:`lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.h` +- :ghedit:`Edit` diff --git a/images/lilygo_t5_47_touch.png b/images/lilygo_t5_47_touch.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ce05038f10928b94da742268906afcc654f9ee GIT binary patch literal 42619 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 z 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 Date: Tue, 8 Feb 2022 10:27:26 +0100 Subject: [PATCH 31/40] Add documentation for new modbus select (#1827) --- components/select/modbus_controller.rst | 143 ++++++++++++++++++++++++ index.rst | 1 + 2 files changed, 144 insertions(+) create mode 100644 components/select/modbus_controller.rst diff --git a/components/select/modbus_controller.rst b/components/select/modbus_controller.rst new file mode 100644 index 000000000..b34cd8c23 --- /dev/null +++ b/components/select/modbus_controller.rst @@ -0,0 +1,143 @@ +Modbus Controller Select +======================== + +.. seo:: + :description: Instructions for setting up Modbus Controller Select(s) with ESPHome. + +The ``modbus_controller`` Select platform allows you to create a Select from modbus +registers. + +.. code-block:: yaml + + # Example configuration entry + select: + - platform: modbus_controller + name: "Modbus Select Register 1000" + address: 1000 + value_type: U_WORD + optionsmap: + "Zero": 0 + "One": 1 + "Two": 2 + "Three": 3 + + +Configuration variables: +------------------------ + +- **name** (**Required**, string): The name of the Select. +- **address**: (**Required**, int): The start address of the first or only register + of the Select. +- **optionsmap**: (**Required**, Map[str, int]): Provide a mapping from options (str) of + this Select to values (int) of the modbus register and vice versa. All options and + all values have to be unique. +- **value_type**: (*Optional*): The datatype of the modbus data. Defaults to ``U_WORD``. + - ``U_WORD`` (unsigned 16 bit integer from 1 register = 16bit) + - ``S_WORD`` (signed 16 bit integer from 1 register = 16bit) + - ``U_DWORD`` (unsigned 32 bit integer from 2 registers = 32bit) + - ``S_DWORD`` (signed 32 bit integer from 2 registers = 32bit) + - ``U_DWORD_R`` (unsigned 32 bit integer from 2 registers low word first) + - ``S_DWORD_R`` (signed 32 bit integer from 2 registers low word first) + - ``U_QWORD`` (unsigned 64 bit integer from 4 registers = 64bit) + - ``S_QWORD`` (unsigned 64 bit integer from 4 registers = 64bit) + - ``U_QWORD_R`` (unsigned 64 bit integer from 4 registers low word first) + - ``U_QWORD_R`` (signed 64 bit integer from 4 registers low word first) +- **register_count**: (*Optional*): The number of registers which are used for this Select. Only + required for uncommon response encodings or to + :ref:`optimize modbus communications`. Overrides the defaults determined + by ``value_type``. +- **skip_updates**: (*Optional*, int): By default all sensors of of a modbus_controller are + updated together. For data points that don't change very frequently updates can be skipped. A + value of 5 would only update this sensor range in every 5th update cycle. Defaults to ``0``. + Note: The modbus_controller merges several registers into groups which are updated together. For + each group the smallest update cycle is used. +- **force_new_range**: (*Optional*, boolean): If possible sensors with sequential addresses are + grouped together and requested in one range. Setting this to ``true`` enforces the start of a new + range at that address. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **lambda** (*Optional*, :ref:`lambda `): Lambda to be evaluated every update interval + to get the current option of the select. +- **write_lambda** (*Optional*, :ref:`lambda `): Lambda to be evaluated on every update + of the Sensor, before the new value is written to the modbus registers. +- **use_write_multiple**: (*Optional*, boolean): By default the modbus command ``Preset Single Registers`` + (function code 6) is used for setting the holding register if only 1 register is set. If your device only supports *Preset Multiple Registers* (function code 16) set this option to ``true``. Defaults + to ``false``. +- All other options from :ref:`Select `. + + +Parameters passed into ``lambda`` +--------------------------------- + +- **x** (``int64_t``): The parsed integer value of the modbus data. +- **data** (``const std::vector&``): vector containing the complete raw modbus response bytes for this + sensor. Note: because the response contains data for all registers in the same range you have to + use ``data[item->offset]`` to get the first response byte for your sensor. +- **item** (``ModbusSelect*const``): The sensor object itself. + +Possible return values for the lambda: + + - ``return ;`` The new option for this Select. + - ``return {};`` Use default mapping (see ``optionsmap``). + +.. code-block:: yaml + + # example + lambda: |- + ESP_LOGD("Reg1000", "Received value %lld", x); + ESP_LOGD("Reg1000", "Parsed from bytes 0x%x;0x%x", data[item->offset], data[item->offset + 1]); + if (x > 3) { + return std::string("Three"); + } + + +Parameters passed into ``write_lambda`` +--------------------------------------- + +- **x** (``const std::string&``): The option value to set for this Select. +- **value** (``int64_t``): The mapping value of ``x`` using ``optionsmap``. +- **payload** (``std::vector& payload``): Empty vector for the payload. The lamdba can add + 16 bit raw modbus register words which are send to the modbus device. +- **item** (``ModbusSelect*const``): The sensor object itself. + +Possible return values for the lambda: + + - ``return ;`` the value which should be written to the configured modbus registers. If there were data written to ``payload`` this value is ignored. + - ``return {};`` Skip updating the register. + +.. code-block:: yaml + + # example + write_lambda: |- + ESP_LOGD("Reg1000", "Set option to %s (%lld)", x.c_str(), value); + + // re-use default option value from optionsmap + if (value == 0) { + return value; + } + + // return own option value + if (x == "One") { + return 2; + } + + // write payload + if (x == "Two") { + payload.push_back(0x0001); + return 0; // any value will do + } + + // ignore update + return {}; + + +See Also +-------- +- :doc:`/components/modbus_controller` +- :doc:`/components/sensor/modbus_controller` +- :doc:`/components/binary_sensor/modbus_controller` +- :doc:`/components/switch/modbus_controller` +- :doc:`/components/text_sensor/modbus_controller` +- :doc:`/components/output/modbus_controller` +- :ref:`automation` +- https://www.modbustools.com/modbus.html +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index 8c1afb74b..71afdd990 100644 --- a/index.rst +++ b/index.rst @@ -601,6 +601,7 @@ Select Components Select Core, components/select/index, folder-open.svg Template Select, components/select/template, description.svg + Modbus Select, components/select/modbus_controller, modbus.png Lock Components ----------------- From a8338a898fb6b83720dbb9aff4d10d5885f91a5a Mon Sep 17 00:00:00 2001 From: mckaymatthew Date: Tue, 8 Feb 2022 03:56:42 -0600 Subject: [PATCH 32/40] Add Max9611 Docs (#1612) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/sensor/images/max9611.jpg | Bin 0 -> 12743 bytes components/sensor/max9611.rst | 78 +++++++++++++++++++++++++++ images/max9611.jpg | Bin 0 -> 12437 bytes index.rst | 1 + 4 files changed, 79 insertions(+) create mode 100644 components/sensor/images/max9611.jpg create mode 100644 components/sensor/max9611.rst create mode 100644 images/max9611.jpg diff --git a/components/sensor/images/max9611.jpg b/components/sensor/images/max9611.jpg new file mode 100644 index 0000000000000000000000000000000000000000..53d2f88337e0b002c312011c324f7e3969775425 GIT binary patch literal 12743 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 literal 0 HcmV?d00001 diff --git a/components/sensor/max9611.rst b/components/sensor/max9611.rst new file mode 100644 index 000000000..4f3b02428 --- /dev/null +++ b/components/sensor/max9611.rst @@ -0,0 +1,78 @@ +MAX9611/9612 High Side Current+Voltage+Temperature Sensor +========================================================= + +.. seo:: + :description: Instructions for setting up MAX9611 MAX9612 High-Side Current-Sense Amplifier + :image: max9611.jpg + :keywords: MAX9611 MAX9612 + +The ``MAX9611`` sensor platform allows you to use your MAX9611/MAX9612 +(`datasheet `__) +High-side current, voltage and temperature sensors with ESPHome. + +This sensor supports up to +60V DC common mode voltage, has a 1.8V to 3.3V logic range, +a 12-Bit integrated ADC with :ref:`I²C `, and is meant to act as a high-side current sense amplifier. + +The :ref:`I²C ` is +required to be set up in your configuration for this sensor to work. + +.. figure:: images/max9611.jpg + :align: center + :width: 50.0% + + MAX9611 High-Side Current-Sense Amplifier + +.. code-block:: yaml + + # Example configuration entry + sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: '1X' + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temperature + address: 0x70 + update_interval: 60s + +Configuration variables: +------------------------ + +- **shunt_resistance** (*Required*): The value of the High Side Shunt Resistor. + +- **Voltage** (*Optional*): The information for the voltage sensor + + - **name** (**Required**, string): The name for the voltage sensor. + - All other options from :ref:`Sensor `. + +- **Current** (*Optional*): The information for the current sensor, scaled by the gain factor and multiplied by voltage + + - **name** (**Required**, string): The name for the current sensor. + - All other options from :ref:`Sensor `. + +- **Power** (*Optional*): The information for the power sensor + + - **name** (**Required**, string): The name for the power sensor. + - All other options from :ref:`Sensor `. + +- **temperature** (*Optional*): The information for the temperature sensor + + - **name** (**Required**, string): The name for the temperature sensor. + - All other options from :ref:`Sensor `. + + +- **address** (*Optional*, int): Manually specify the I²C address of + the sensor. Defaults to ``0x70``. +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. Defaults to ``60s``. + +See Also +-------- + +- :ref:`sensor-filters` +- :ghedit:`Edit` diff --git a/images/max9611.jpg b/images/max9611.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f824133015921cc11883a21a02b48478afaad1e7 GIT binary patch literal 12437 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 Date: Tue, 8 Feb 2022 22:57:01 +1300 Subject: [PATCH 33/40] Inkplate 6 Plus changes (#1887) --- components/display/inkplate6.rst | 43 ++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/components/display/inkplate6.rst b/components/display/inkplate6.rst index 803a5d268..df467cc86 100644 --- a/components/display/inkplate6.rst +++ b/components/display/inkplate6.rst @@ -1,13 +1,14 @@ -Inkplate 6 and Inkplate 10 -========================== +Inkplate 6, 10 and 6 Plus +========================= .. seo:: :description: Instructions for setting up Inkplate E-Paper displays in ESPHome. :image: inkplate6.jpg -All-in-one e-paper display ``Inkplate 6`` and ``Inkplate 10``. +All-in-one e-paper display ``Inkplate 6``, ``Inkplate 10`` and ``Inkplate 6 Plus``. -The Inkplate 6 and Inkplate 10 are powerful, Wi-Fi enabled ESP32 based six-inch e-paper displays – recycled from a Kindle e-reader. Its main feature is simplicity. +The Inkplate 6, 10 and 6 Plus are powerful, Wi-Fi enabled ESP32 based six-inch e-paper displays - +recycled from a Kindle e-reader. Its main feature is simplicity. Learn more at `Inkplate's website `__ @@ -73,7 +74,11 @@ Configuration variables: ************************ - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. -- **model** (*Optional*, enum): Specify the model ``inkplate_6`` or ``inkplate_10``. Defaults to ``inkplate_6``. +- **model** (*Optional*, enum): Specify the model. Defaults to ``inkplate_6``. + - ``inkplate_6`` + - ``inkplate_10`` + - ``inkplate_6_plus`` + - **greyscale** (*Optional*, boolean): Makes the screen display 3 bit colors. Defaults to ``false`` - **partial_updating** (*Optional*, boolean): Makes the screen update partially, which is faster, but leaves burnin. Defaults to ``false`` - **full_update_every** (*Optional*, int): When partial updating is enabled, forces a full screen update after chosen number of updates. Defaults to ``10`` @@ -113,8 +118,8 @@ Configuration variables: Defaults to GPIO27. -Complete example -**************** +Complete Inkplate 6 example +*************************** The following is a complete example YAML configuration that does a few things beyond the usual Wi-Fi, API, and OTA configuration. @@ -273,9 +278,33 @@ Wi-Fi, API, and OTA configuration. } +Inkplate 6 Plus Touchscreen +*************************** + +The Inkplate 6 Plus has a built in touchscreen supported by ESPHome. +Below is a config example: + +.. code-block:: yaml + + touchscreen: + - platform: ektf2232 + interrupt_pin: GPIO36 + rts_pin: + mcp23xxx: mcp23017_hub + number: 10 + on_touch: + - logger.log: + format: "Touch: {x}, {y}" + args: + - touch.x + - touch.y + + + See Also -------- - :doc:`index` +- :doc:`/components/touchscreen/ektf2232` - `Arduino Inkplate 6 library `__ by `E-radionica.com `__ - :ghedit:`Edit` From 3d56720ef2b92fec428a942f357a17ba70faa1d8 Mon Sep 17 00:00:00 2001 From: Andrej Komelj Date: Tue, 8 Feb 2022 10:58:43 +0100 Subject: [PATCH 34/40] Describe MQTT discovery object_id generator (#1856) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- components/mqtt.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/components/mqtt.rst b/components/mqtt.rst index acb2852df..b7bd12c15 100644 --- a/components/mqtt.rst +++ b/components/mqtt.rst @@ -47,6 +47,9 @@ Configuration variables: to use. Can be one of ``legacy`` or ``mac``. Defaults to ``legacy``, which generates unique_id in format ``ESP``. ``mac`` generator uses format ``--``. +- **discovery_object_id_generator** (*Optional*, string): The object_id generator + to use. Can be one of ``none`` or ``device_name``. Defaults to ``none`` which + does not generate object_id. ``device_name`` generator uses format ``_``. - **use_abbreviations** (*Optional*, boolean): Whether to use `Abbreviations `__ in discovery messages. Defaults to ``true``. @@ -160,6 +163,17 @@ This will remove all retained messages with the topic ``/+/NODE_NAME/#``. If you want to purge on another topic, simply add ``--topic `` to the command. +Home Assistant generates entity names for all discovered devices based on entity type and +entity name (e.g. ``sensor.uptime``). Numeric suffixes are appended to entity names when +multiple devices use the same name for a sensor, making it harder to distinguish between +similar sensors on different devices. Home Assistant 2021.12 allows MQTT devices to change +this behaviour by specifying ``object_id`` discovery attribute which replaces the sensor +name part of the generated entity name. Setting ``discovery_object_id_generator: device_name`` +in ESPHome MQTT integration configuration will cause Home Assistant to include device name +in the generated entity names (e.g. ``sensor.uptime`` becomes ``sensor._uptime``), +making it easier to distinguish the entities in various entity lists. + + .. _mqtt-defaults: Defaults From 4087b4494d2780650e57b9007673356f8a234907 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 9 Feb 2022 11:54:42 +1300 Subject: [PATCH 35/40] Bump version to 2022.1.4 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doxygen b/Doxygen index 24d21982a..dd51bce04 100644 --- a/Doxygen +++ b/Doxygen @@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2022.1.3 +PROJECT_NUMBER = 2022.1.4 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Makefile b/Makefile index 467ee7708..f478ce182 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2022.1.3 +ESPHOME_REF = 2022.1.4 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index 6d55c1a97..3ce70ef3f 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2022.1.3 \ No newline at end of file +2022.1.4 \ No newline at end of file diff --git a/conf.py b/conf.py index 087f0799e..df1812913 100644 --- a/conf.py +++ b/conf.py @@ -69,7 +69,7 @@ author = "Otto Winter" # The short X.Y version. version = "2022.1" # The full version, including alpha/beta/rc tags. -release = "2022.1.3" +release = "2022.1.4" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 50be2e7026aea0a1e6a16b6afdd306b1c5116a92 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 9 Feb 2022 11:54:57 +1300 Subject: [PATCH 36/40] Update changelog for 2022.1.4 --- changelog/2022.1.0.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog/2022.1.0.rst b/changelog/2022.1.0.rst index 3172f5389..ee74aa0a4 100644 --- a/changelog/2022.1.0.rst +++ b/changelog/2022.1.0.rst @@ -83,6 +83,11 @@ Release 2022.1.3 - February 2 - Fix backwards string case helpers :esphomepr:`3126` by :ghuser:`jesserockz` (breaking-change) +Release 2022.1.4 - February 9 +----------------------------- + +- Enable mDNS during OTA safe mode :esphomepr:`3146` by :ghuser:`OttoWinter` +- Try fix canbus config validation :esphomepr:`3173` by :ghuser:`jesserockz` Full list of changes -------------------- From 02493ddf78f31a0b435f8a56834aae77d1993bd7 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 9 Feb 2022 11:55:28 +1300 Subject: [PATCH 37/40] Update supporters for 2022.1.4 --- guides/supporters.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 49bb10a5f..8a2f2a9ab 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -69,6 +69,7 @@ Contributors - `arantius (@arantius) `__ - `arunderwood (@arunderwood) `__ - `Ash McKenzie (@ashmckenzie) `__ +- `Ashton Kemerling (@AshtonKem) `__ - `Pavel Pletenev (@ASMfreaK) `__ - `Andreas Soehlke (@asoehlke) `__ - `Mike Dunston (@atanisoft) `__ @@ -257,6 +258,7 @@ Contributors - `frippe75 (@frippe75) `__ - `Fritz Mueller (@fritzm) `__ - `Marc Egli (@frog32) `__ +- `functionpointer (@functionpointer) `__ - `mr G1K (@G1K) `__ - `Aljaž Srebrnič (@g5pw) `__ - `Gabe Cook (@gabe565) `__ @@ -331,6 +333,7 @@ Contributors - `Jason2866 (@Jason2866) `__ - `Jason Hines (@jasonehines) `__ - `Jas Strong (@jasstrong) `__ +- `Jonas Bergler (@jbergler) `__ - `JbLb (@jblb) `__ - `James Callaghan (@jcallaghan) `__ - `Josh Willox (@jcwillox) `__ @@ -338,6 +341,7 @@ Contributors - `JeeCee1 (@JeeCee1) `__ - `jeff-h (@jeff-h) `__ - `Jeffrey Borg (@jeffborg) `__ +- `Jeff Eberl (@jeffeb3) `__ - `Jeff Rescignano (@JeffResc) `__ - `Jej (@jej) `__ - `Jérôme Laban (@jeromelaban) `__ @@ -459,6 +463,7 @@ Contributors - `Matthew Mazzanti (@matthewmazzanti) `__ - `Maurice Schleußinger (@maurice-schleussinger) `__ - `mbo18 (@mbo18) `__ +- `mckaymatthew (@mckaymatthew) `__ - `Me No Dev (@me-no-dev) `__ - `Alexandr Zarubkin (@me21) `__ - `Joseph Mearman (@Mearman) `__ @@ -785,7 +790,6 @@ Contributors - `Zebble (@Zebble) `__ - `ZJY (@zhangjingye03) `__ - `San (@zhujunsan) `__ -- `ZTX18 (@ZTX18) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated February 2, 2022.* +*This page was last updated February 9, 2022.* From 4918d3d19f0e0173c82fbdfabe7f9aa519b8f323 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 9 Feb 2022 23:47:36 +1300 Subject: [PATCH 38/40] Bump version to 2022.2.0b1 --- Doxygen | 2 +- Makefile | 2 +- _static/version | 2 +- conf.py | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Doxygen b/Doxygen index dd51bce04..0d7fd3113 100644 --- a/Doxygen +++ b/Doxygen @@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2022.1.4 +PROJECT_NUMBER = 2022.2.0b1 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/Makefile b/Makefile index f478ce182..8b4daf24e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ESPHOME_PATH = ../esphome -ESPHOME_REF = 2022.1.4 +ESPHOME_REF = 2022.2.0b1 .PHONY: html html-strict cleanhtml deploy help live-html Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify diff --git a/_static/version b/_static/version index 3ce70ef3f..97a9afacc 100644 --- a/_static/version +++ b/_static/version @@ -1 +1 @@ -2022.1.4 \ No newline at end of file +2022.2.0b1 \ No newline at end of file diff --git a/conf.py b/conf.py index df1812913..9522bc9a4 100644 --- a/conf.py +++ b/conf.py @@ -67,9 +67,9 @@ author = "Otto Winter" # built documents. # # The short X.Y version. -version = "2022.1" +version = "2022.2" # The full version, including alpha/beta/rc tags. -release = "2022.1.4" +release = "2022.2.0b1" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 85f261f8bfdbd90efbbdd14ab8d8ef6071159757 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 10 Feb 2022 00:02:27 +1300 Subject: [PATCH 39/40] Update changelog for 2022.2.0b1 --- changelog/2022.2.0.rst | 212 +++++++++++++++++ changelog/index.rst | 2 +- images/qr-code.svg | 500 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 713 insertions(+), 1 deletion(-) create mode 100644 changelog/2022.2.0.rst create mode 100644 images/qr-code.svg diff --git a/changelog/2022.2.0.rst b/changelog/2022.2.0.rst new file mode 100644 index 000000000..7c0884678 --- /dev/null +++ b/changelog/2022.2.0.rst @@ -0,0 +1,212 @@ +ESPHome 2022.2.0 - 16th February 2022 +===================================== + +.. seo:: + :description: Changelog for ESPHome 2022.2.0. + :image: /_static/changelog-2022.1.0.png + :author: Jesse Hills + :author_twitter: @jesserockz + +.. imgtable:: + :columns: 4 + + Lock Core, components/lock/index, folder-open.svg + Generic Output Lock, components/lock/output, upload.svg + Template Lock, components/lock/template, description.svg + QR Code, components/display/index, qr-code.svg + + Touchscreen Core, components/touchscreen/index, folder-open.svg + EKTF2232, components/touchscreen/ektf2232, ektf2232.svg + Lilygo T5 4.7", components/touchscreen/lilygo_t5_47, lilygo_t5_47_touch.png + MLX90393, components/sensor/mlx90393, mlx90393.jpg + + Wake-on-LAN Button, components/button/wake_on_lan, power_settings.svg + Generic Output Button, components/button/output, upload.svg + Xiaomi MHOC303, components/sensor/xiaomi_ble, xiaomi_mijia_logo.jpg + RadonEye BLE, components/sensor/radon_eye_ble, radon_eye_logo.png + + Modbus Select, components/select/modbus_controller, modbus.png + MAX9611, components/sensor/max9611, max9611.jpg + Inkplate 6 Plus, components/display/inkplate6, inkplate6.jpg + + +Notes to be written + + +ESP8266 recommended framework bump +---------------------------------- + +To be written... + + +Improv serial wifi scan +----------------------- + +To be written... + + +Tuya Multi multi-datapoint +-------------------------- + +To be written... + + +Debug Sensors Breaking change +----------------------------- + +To be written... + + +Full list of changes +-------------------- + +New Features +^^^^^^^^^^^^ + +- Add initial_run to regular lambda light effect :esphomepr:`3059` by :ghuser:`jesserockz` (new-feature) +- Support simple transparent pngs for display :esphomepr:`3035` by :ghuser:`jesserockz` (new-feature) +- Add restore_mode to fan component :esphomepr:`3051` by :ghuser:`joshuaspence` (new-feature) +- slow_pwm: allow to restart a cycle on state change :esphomepr:`3004` by :ghuser:`Chupaka` (new-feature) +- Command retain option for MQTT component :esphomepr:`3078` by :ghuser:`VitaliyKurokhtin` (new-feature) +- Esp32cam full control :esphomepr:`3090` by :ghuser:`dav-id-org` (new-feature) +- Configurable HTTP redirect following :esphomepr:`3100` by :ghuser:`guillempages` (new-feature) +- Add IPv6 for esp-idf framework :esphomepr:`2953` by :ghuser:`HeMan` (new-feature) +- Improv_serial scan and send wifi networks list :esphomepr:`3116` by :ghuser:`jesserockz` (new-feature) +- Inkplate 6 PLUS :esphomepr:`3013` by :ghuser:`jesserockz` (new-feature) + +New Components +^^^^^^^^^^^^^^ + +- Add ektf2232 touchscreen support :esphomepr:`3027` by :ghuser:`jesserockz` (new-integration) +- Wake-on-LAN button :esphomepr:`3030` by :ghuser:`willwill2will54` (new-integration) +- Implement output button :esphomepr:`3109` by :ghuser:`oxan` (new-integration) +- Create base touchscreen component and refactor ektf2232 :esphomepr:`3083` by :ghuser:`jesserockz` (new-integration) +- Add qr code support for displays :esphomepr:`2952` by :ghuser:`wjtje` (new-integration) +- Add Xiaomi MHOC303 sensor e-ink clock :esphomepr:`3115` by :ghuser:`drug123` (new-integration) +- Add new Lock core component :esphomepr:`2958` by :ghuser:`kbickar` (new-integration) +- Added RadonEye RD200 Component :esphomepr:`3119` by :ghuser:`jeffeb3` (new-integration) +- MLX90393 three-axis magnetometer :esphomepr:`2770` by :ghuser:`functionpointer` (new-integration) +- Add Lilygo t5 4.7 Touchscreen :esphomepr:`3084` by :ghuser:`jesserockz` (new-integration) +- Add Select for modbus :esphomepr:`3032` by :ghuser:`stegm` (new-integration) +- Add max9611 High Side Current Shunt ADC :esphomepr:`2705` by :ghuser:`mckaymatthew` (new-integration) + +Breaking Changes +^^^^^^^^^^^^^^^^ + +- [TCS34725] remove duplicated endian conversion :esphomepr:`3037` by :ghuser:`martgras` (breaking-change) +- TSL2591 automatic gain control :esphomepr:`3071` by :ghuser:`Azimath` (breaking-change) +- [debug] Refactor debug sensors to use the normal sensor model. :esphomepr:`3162` by :ghuser:`mknjc` (breaking-change) + +Notable Changes +^^^^^^^^^^^^^^^ + +- ESP8266 Set recommended framework to 3.0.2 :esphomepr:`2606` by :ghuser:`OttoWinter` (notable-change) +- Handle Tuya multi-datapoint messages :esphomepr:`3159` by :ghuser:`ssieb` (notable-change) + +All changes +^^^^^^^^^^^ + +- Bump pytest-asyncio from 0.16.0 to 0.17.0 :esphomepr:`3047` by :ghuser:`dependabot[bot]` +- Fix argument order in gitpod config file :esphomepr:`3058` by :ghuser:`oxan` +- Bump pytest-asyncio from 0.17.0 to 0.17.2 :esphomepr:`3064` by :ghuser:`dependabot[bot]` +- Fix calibration parameter for bme680 humidity calculation :esphomepr:`3069` by :ghuser:`cwitting` +- Bump improv library version :esphomepr:`3072` by :ghuser:`jesserockz` +- API: Expect a name for connections :esphomepr:`2533` by :ghuser:`OttoWinter` +- AM43: autoload "sensor" to avoid compile errors :esphomepr:`3077` by :ghuser:`buxtronix` +- Add initial_run to regular lambda light effect :esphomepr:`3059` by :ghuser:`jesserockz` (new-feature) +- Support simple transparent pngs for display :esphomepr:`3035` by :ghuser:`jesserockz` (new-feature) +- Bump aioesphomeapi from 10.6.0 to 10.8.0 :esphomepr:`3081` by :ghuser:`dependabot[bot]` +- Add ektf2232 touchscreen support :esphomepr:`3027` by :ghuser:`jesserockz` (new-integration) +- Implement IPv6 sockets for lwIP :esphomepr:`3015` by :ghuser:`HeMan` +- Allow multiple configs for cd74hc4067 :esphomepr:`3085` by :ghuser:`jesserockz` +- Wake-on-LAN button :esphomepr:`3030` by :ghuser:`willwill2will54` (new-integration) +- Add restore_mode to fan component :esphomepr:`3051` by :ghuser:`joshuaspence` (new-feature) +- slow_pwm: allow to restart a cycle on state change :esphomepr:`3004` by :ghuser:`Chupaka` (new-feature) +- Enable readability-const-return-type check :esphomepr:`3099` by :ghuser:`oxan` +- Enable readability-qualified-auto check :esphomepr:`3095` by :ghuser:`oxan` +- Enable readability-redundant-member-init check :esphomepr:`3097` by :ghuser:`oxan` +- Enable readability-named-parameter check :esphomepr:`3098` by :ghuser:`oxan` +- Enable readability-redundant-access-specifiers check :esphomepr:`3096` by :ghuser:`oxan` +- Command retain option for MQTT component :esphomepr:`3078` by :ghuser:`VitaliyKurokhtin` (new-feature) +- Refactor fan platform to resemble climate/cover platforms :esphomepr:`2848` by :ghuser:`oxan` +- Rename WEBSERVER_PORT define to USE_WEBSERVER_PORT :esphomepr:`3102` by :ghuser:`oxan` +- Fix path to extra_scripts in platformio.ini :esphomepr:`3093` by :ghuser:`oxan` +- Generate ARDUINO_VERSION_CODE in Python code :esphomepr:`3101` by :ghuser:`oxan` +- Add cv.require_esphome_version helper :esphomepr:`3103` by :ghuser:`oxan` +- Bump aioesphomeapi from 10.8.0 to 10.8.1 :esphomepr:`3110` by :ghuser:`dependabot[bot]` +- Remove unused polling_component_schema from modbus number :esphomepr:`3108` by :ghuser:`martgras` +- Force braces around multi-line statements :esphomepr:`3094` by :ghuser:`oxan` +- Make CallbackManager invocable :esphomepr:`3089` by :ghuser:`oxan` +- Implement output button :esphomepr:`3109` by :ghuser:`oxan` (new-integration) +- Add increment_day function to ESPTime :esphomepr:`2955` by :ghuser:`RebbePod` +- [TCS34725] remove duplicated endian conversion :esphomepr:`3037` by :ghuser:`martgras` (breaking-change) +- Perform merges when substituting dict keys :esphomepr:`3062` by :ghuser:`joshuaspence` +- Esp32cam full control :esphomepr:`3090` by :ghuser:`dav-id-org` (new-feature) +- Fix config merging with null :esphomepr:`3113` by :ghuser:`joshuaspence` +- Configurable HTTP redirect following :esphomepr:`3100` by :ghuser:`guillempages` (new-feature) +- Add IPv6 for esp-idf framework :esphomepr:`2953` by :ghuser:`HeMan` (new-feature) +- Add support for additional colors on GROW R503 :esphomepr:`3087` by :ghuser:`Zebble` +- Add Heap Sensors - free/max block/fragmentation :esphomepr:`1578` by :ghuser:`micronen` +- Create base touchscreen component and refactor ektf2232 :esphomepr:`3083` by :ghuser:`jesserockz` (new-integration) +- Add qr code support for displays :esphomepr:`2952` by :ghuser:`wjtje` (new-integration) +- ESP8266 Set recommended framework to 3.0.2 :esphomepr:`2606` by :ghuser:`OttoWinter` (notable-change) +- TSL2591 automatic gain control :esphomepr:`3071` by :ghuser:`Azimath` (breaking-change) +- set adc width to 13 bits for esp32-s2 :esphomepr:`3117` by :ghuser:`martgras` +- Fix lint for TSL2591 :esphomepr:`3118` by :ghuser:`OttoWinter` +- Add Xiaomi MHOC303 sensor e-ink clock :esphomepr:`3115` by :ghuser:`drug123` (new-integration) +- Logically group and document helper functions :esphomepr:`3112` by :ghuser:`oxan` +- Add support for Waveshare 7.5in-bv2 :esphomepr:`3121` by :ghuser:`Eriner` +- Bump docker dependencies :esphomepr:`3131` by :ghuser:`OttoWinter` +- Bump pytest-mock from 3.6.1 to 3.7.0 :esphomepr:`3128` by :ghuser:`dependabot[bot]` +- Improv_serial scan and send wifi networks list :esphomepr:`3116` by :ghuser:`jesserockz` (new-feature) +- Disable platformio ldf for build :esphomepr:`3130` by :ghuser:`OttoWinter` +- Bump esp-idf framework version from 4.3.0 to 4.3.2 :esphomepr:`3120` by :ghuser:`OttoWinter` +- Bump pre-commit flake8 from 3.8.4 to 4.0.1 :esphomepr:`3149` by :ghuser:`OttoWinter` +- Bump black from 21.12b0 to 22.1.0 :esphomepr:`3147` by :ghuser:`dependabot[bot]` +- Fix ESP32C3 toolchain requires stdarg import in helpers :esphomepr:`3151` by :ghuser:`OttoWinter` +- Add new Lock core component :esphomepr:`2958` by :ghuser:`kbickar` (new-integration) +- Add device class support to Switch :esphomepr:`3012` by :ghuser:`frenck` +- Handle Tuya multi-datapoint messages :esphomepr:`3159` by :ghuser:`ssieb` (notable-change) +- Bump improv library to 1.2.1 :esphomepr:`3160` by :ghuser:`jesserockz` +- Fix copy_file_if_changed src permissions copied too :esphomepr:`3161` by :ghuser:`OttoWinter` +- [debug] Refactor debug sensors to use the normal sensor model. :esphomepr:`3162` by :ghuser:`mknjc` (breaking-change) +- Added RadonEye RD200 Component :esphomepr:`3119` by :ghuser:`jeffeb3` (new-integration) +- Text sensor schema generator similar to sensor :esphomepr:`3172` by :ghuser:`jesserockz` +- wifi_info, reduce polling interval :esphomepr:`3165` by :ghuser:`jbergler` +- MLX90393 three-axis magnetometer :esphomepr:`2770` by :ghuser:`functionpointer` (new-integration) +- Dont warn on nonnull comparisons :esphomepr:`3123` by :ghuser:`jesserockz` +- Add require response option for BLE binary output :esphomepr:`3091` by :ghuser:`AshtonKem` +- Add Lilygo t5 4.7 Touchscreen :esphomepr:`3084` by :ghuser:`jesserockz` (new-integration) +- Add Select for modbus :esphomepr:`3032` by :ghuser:`stegm` (new-integration) +- Add max9611 High Side Current Shunt ADC :esphomepr:`2705` by :ghuser:`mckaymatthew` (new-integration) +- Inkplate 6 PLUS :esphomepr:`3013` by :ghuser:`jesserockz` (new-feature) +- Implement MQTT discovery object_id generator :esphomepr:`3114` by :ghuser:`akomelj` +- Fix files CI after merging :esphomepr:`3175` by :ghuser:`jesserockz` +- Bump pytest from 6.2.5 to 7.0.0 :esphomepr:`3163` by :ghuser:`dependabot[bot]` +- Bump pytest-asyncio from 0.17.2 to 0.18.0 :esphomepr:`3168` by :ghuser:`dependabot[bot]` +- Allow to set manufacturer data for BLEAdvertising :esphomepr:`3179` by :ghuser:`ashald` +- Change most references from hassio to ha-addon :esphomepr:`3178` by :ghuser:`jesserockz` + +Past Changelogs +--------------- + +- :doc:`2022.1.0` +- :doc:`2021.12.0` +- :doc:`2021.11.0` +- :doc:`2021.10.0` +- :doc:`2021.9.0` +- :doc:`2021.8.0` +- :doc:`v1.20.0` +- :doc:`v1.19.0` +- :doc:`v1.18.0` +- :doc:`v1.17.0` +- :doc:`v1.16.0` +- :doc:`v1.15.0` +- :doc:`v1.14.0` +- :doc:`v1.13.0` +- :doc:`v1.12.0` +- :doc:`v1.11.0` +- :doc:`v1.10.0` +- :doc:`v1.9.0` +- :doc:`v1.8.0` +- :doc:`v1.7.0` diff --git a/changelog/index.rst b/changelog/index.rst index 82ef3be9c..d093b975e 100644 --- a/changelog/index.rst +++ b/changelog/index.rst @@ -2,7 +2,7 @@ Changelog ========= .. redirect:: - :url: /changelog/2022.1.0.html + :url: /changelog/2022.2.0.html .. toctree:: :glob: diff --git a/images/qr-code.svg b/images/qr-code.svg new file mode 100644 index 000000000..1dfbae3cd --- /dev/null +++ b/images/qr-code.svg @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b11850638b9a6c5677990d729e9fa2892228c89e Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 10 Feb 2022 00:03:00 +1300 Subject: [PATCH 40/40] Update supporters for 2022.2.0b1 --- guides/supporters.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/guides/supporters.rst b/guides/supporters.rst index 8a2f2a9ab..1b9f581c1 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -326,7 +326,6 @@ Contributors - `Ivo-tje (@Ivo-tje) `__ - `Jan Harkes (@jaharkes) `__ - `Jakob Reiter (@jakommo) `__ -- `James Braid (@jamesbraid) `__ - `James Gao (@jamesgao) `__ - `János Rusiczki (@janosrusiczki) `__ - `Jan Pieper (@janpieper) `__ @@ -504,7 +503,6 @@ Contributors - `Murilo (@murilobaliego) `__ - `Michiel van Turnhout (@mvturnho) `__ - `Martin Weinelt (@mweinelt) `__ -- `myhomeiot (@myhomeiot) `__ - `Igor Scheller (@MyIgel) `__ - `Mynasru (@Mynasru) `__ - `Niels Ulrik Andersen (@myplacedk) `__ @@ -792,4 +790,4 @@ Contributors - `San (@zhujunsan) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated February 9, 2022.* +*This page was last updated February 10, 2022.*