diff --git a/_templates/contact.html b/_templates/contact.html index d65d9f3f5..88e692e55 100644 --- a/_templates/contact.html +++ b/_templates/contact.html @@ -3,8 +3,5 @@
  • Join the community
  • Follow us on Twitter
  • Source Code
  • +
  • This site is powered by Netlify
  • - - - Deploys by Netlify - diff --git a/changelog/2021.12.0.rst b/changelog/2021.12.0.rst index 4c97de257..3a3a03f8b 100644 --- a/changelog/2021.12.0.rst +++ b/changelog/2021.12.0.rst @@ -89,6 +89,20 @@ Release 2021.12.1 - December 15 - Set text sensor state property to filter output :esphomepr:`2893` by :ghuser:`oxan` - Allow button POST on press from web server :esphomepr:`2913` by :ghuser:`wilberforce` +Release 2021.12.2 - December 21 +------------------------------- + +- Don't disable idle task WDT when it's not enabled :esphomepr:`2856` by :ghuser:`oxan` +- Fix MQTT button press action :esphomepr:`2917` by :ghuser:`oxan` + +Release 2021.12.3 - December 30 +------------------------------- + +- Require arduino in webserver for better validation :esphomepr:`2941` by :ghuser:`jesserockz` +- Only allow internal pins for dht sensor :esphomepr:`2940` by :ghuser:`jesserockz` +- Workaround installing as editable package not working :esphomepr:`2936` by :ghuser:`jesserockz` +- Remove -e for hassio images :esphomepr:`2964` by :ghuser:`jesserockz` + Full list of changes -------------------- diff --git a/components/display/index.rst b/components/display/index.rst index 4c836c9ca..60431b81b 100644 --- a/components/display/index.rst +++ b/components/display/index.rst @@ -452,7 +452,7 @@ And then later in code: - id: page1 lambda: |- // Draw the graph at position [x=10,y=20] - it.graph(10, 20, id(simple_temperature_graph)); + it.graph(10, 20, id(single_temperature_graph)); - id: page2 lambda: |- // Draw the graph at position [x=10,y=20] @@ -600,10 +600,10 @@ Configuration variables: - ``BINARY``: Two colors, suitable for 1 color displays or 2 color image in color displays. Uses 1 bit per pixel, 8 pixels per byte. - - ``GREYSCALE``: Full scale grey. Uses 8 bits per pixel, 1 pixel 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. -- **dither** (*Optional*): Specifies which dither method used to process each frame, only used in GREYSCALE and BINARY type image. +- **dither** (*Optional*): Specifies which dither method used to process each frame, only used in GRAYSCALE and BINARY type image. Defaults to ``NONE``. You can read more about it `here `__ and `here `__. diff --git a/components/esp32.rst b/components/esp32.rst index 6479c4e25..755e907cb 100644 --- a/components/esp32.rst +++ b/components/esp32.rst @@ -18,13 +18,14 @@ Configuration variables: - **board** (**Required**, string): The PlatformIO board ID that should be used. Choose the appropriate board from - `this list `__. - *This only affects pin aliases, flash size and some internal settings*, if unsure choose a generic board. + `this list `__ (the icon next to the name + can be used to copy the board ID). *This only affects pin aliases, flash size and some internal settings*, if unsure + choose a generic board from Espressif such as ``esp32dev``. - **framework** (*Optional*): Options for the underlying framework used by ESPHome. See :ref:`esp32-arduino_framework` and :ref:`esp32-espidf_framework`. - -- **variant** (*Optional*, boolean): Defaults to the variant detected from the board. If the board is not known this option becomes mandatory. - One of ``esp32``, ``esp32s2``, ``esp32s3``, ``esp32c3`` and ``esp32h2``. +- **variant** (*Optional*, boolean): The variant of the ESP32 that is used on this board. One of ``esp32``, + ``esp32s2``, ``esp32s3``, ``esp32c3`` and ``esp32h2``. Defaults to the variant that is detected from the board, if + a board that's unknown to ESPHome is used, this option is mandatory. .. _esp32-arduino_framework: diff --git a/components/esp32_camera.rst b/components/esp32_camera.rst index 36b7cb291..6746014db 100644 --- a/components/esp32_camera.rst +++ b/components/esp32_camera.rst @@ -160,6 +160,28 @@ Configuration for M5Stack Camera name: My Camera # ... +Configuration for M5Stack Timer Camera X/F +------------------------------------------ + +.. code-block:: yaml + + # Example configuration entry + esp32_camera: + external_clock: + pin: GPIO27 + frequency: 20MHz + i2c_pins: + sda: GPIO25 + scl: GPIO23 + data_pins: [GPIO32, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19] + vsync_pin: GPIO22 + href_pin: GPIO26 + pixel_clock_pin: GPIO21 + reset_pin: GPIO15 + + # Image settings + name: My Camera + # ... Configuration for Wrover Kit Boards ----------------------------------- diff --git a/components/esp8266.rst b/components/esp8266.rst index 2e0f7f936..c4086337b 100644 --- a/components/esp8266.rst +++ b/components/esp8266.rst @@ -20,8 +20,9 @@ Configuration variables: - **board** (**Required**, string): The PlatformIO board ID that should be used. Choose the appropriate board from - `this list `__. - *This only affects pin aliases, flash size and some internal settings*, if unsure choose a generic board. + `this list `__ (the icon next to the + name can be used to copy the board ID). *This only affects pin aliases, flash size and some internal settings*, if unsure + choose a generic board from Espressif such as ``esp01_1m``. - **framework** (*Optional*): Options for the underlying framework used by ESPHome. - **version** (*Optional*, string): The base framework version number to use, from diff --git a/components/esphome.rst b/components/esphome.rst index ff32da635..6e4f622e2 100644 --- a/components/esphome.rst +++ b/components/esphome.rst @@ -7,8 +7,7 @@ ESPHome Core Configuration Here you specify some core information that ESPHome needs to create firmwares. Most importantly, this is the section of the configuration -where you specify the **name** of the node, the **platform** and -**board** you’re using. +where you specify the **name** of the node. .. code-block:: yaml @@ -39,34 +38,29 @@ Advanced options: platformio.ini file. See :ref:`esphome-platformio_options`. - **includes** (*Optional*, list of files): A list of C/C++ files to include in the main (auto-generated) sketch file for custom components. The paths in this list are relative to the directory where the YAML configuration file - is in. See :ref:`esphome-includes` for more info. + is in. See :ref:`esphome-includes`. - **libraries** (*Optional*, list of libraries): A list of libraries to include in the project. See - :ref:`esphome-libraries` for more information. + :ref:`esphome-libraries`. - **comment** (*Optional*, string): Additional text information about this node. Only for display in UI. - **name_add_mac_suffix** (*Optional*, boolean): Appends the last 3 bytes of the mac address of the device to the name in the form ``-aabbcc``. Defaults to ``false``. See :ref:`esphome-mac_suffix`. - - **project** (*Optional*): ESPHome Creator's Project information. See :ref:`esphome-creators_project`. - **name** (**Required**, string): Name of the project - **version** (**Required**, string): Version of the project -Platform options that have been moved (now in platform-specific sections :doc:`esp32 ` and :doc:`esp8266 `): +Old-style platform options, which have been moved to the platform-specific :doc:`esp32 ` and +:doc:`esp8266 ` sections but are still accepted here for compatibility reasons (usage not +recommended for new projects): -- **platform** (**Required**, string): The type of platform. One of ``esp8266`` or ``esp32``. -- **board** (**Required**, string): The board that should be used. See +- **platform** (**Required**, string): The platform used, either ``esp8266`` or ``esp32``. +- **board** (**Required**, string): The board used, see :doc:`esp32 ` and :doc:`esp8266 ` for more information. -- **arduino_version** (*Optional*): The version of the Arduino framework to compile the project against. +- **arduino_version** (*Optional*, string): The version of the Arduino framework to compile the project against. - **esp8266_restore_from_flash** (*Optional*, boolean): For ESP8266s, whether to store some persistent preferences in flash memory. -Choose the appropriate board from - `this list `__ for the ESP8266, and - `this list `__ for the ESP32 (the icon - next to the name can be used to copy the board ID). *This only affects pin aliases and some internal settings*, - if unsure choose a generic board from Espressif. - Automations: - **on_boot** (*Optional*, :ref:`Automation `): An automation to perform @@ -154,7 +148,7 @@ This automation will be triggered on every ``loop()`` iteration (usually around PlatformIO supports a number of options in its ``platformio.ini`` file. With the ``platformio_options`` parameter you can tell ESPHome what options to pass into the ``env`` section of the PlatformIO file -(Note you can also do this by editing the ``platformio.ini`` file manually). +(note you can also do this by editing the ``platformio.ini`` file manually). You can view a full list of PlatformIO options here: https://docs.platformio.org/en/latest/projectconf/section_env.html diff --git a/components/fan/hbridge.rst b/components/fan/hbridge.rst index cf04d1f7c..2aacdb4d5 100644 --- a/components/fan/hbridge.rst +++ b/components/fan/hbridge.rst @@ -23,6 +23,14 @@ The `'hbridge`' fan platform allows you to use a compatible `h-bridge` (L298N, D .. code-block:: yaml # Example configuration entry + output: + - platform: ... + id: motor_forward_pin + pin: GPIO5 + - platform: ... + id: motor_reverse_pin + pin: GPIO4 + fan: - platform: hbridge id: my_fan @@ -43,12 +51,10 @@ Configuration variables: :ref:`float output ` connected to the Enable pin of the h-bridge (if h-bridge uses enable). - **decay_mode** (*Optional*, string): The decay mode you want to use with the h-bridge. Either ``slow`` (braking) or ``fast`` (coasting). Defaults to ``slow``. -- **name** (**Required**, string): The name for this fan. -- **oscillation_output** (*Optional*, :ref:`config-id`): The id of the - :ref:`output ` to use for the oscillation state of this fan. Default is empty. - **speed_count** (*Optional*, int): Set the number of supported discrete speed levels. The value is used to calculate the percentages for each speed. E.g. ``2`` means that you have 50% and 100% while ``100`` will allow 1% increments in the output. Defaults to ``100``. +- **name** (**Required**, string): The name for this fan. - **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. - All other options from :ref:`Fan Component `. diff --git a/components/light/index.rst b/components/light/index.rst index 1ce0d12a2..21fd75887 100644 --- a/components/light/index.rst +++ b/components/light/index.rst @@ -41,8 +41,8 @@ Configuration variables: - ``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_OFF`` - Attempt to restore state inverted from the previous state and default to OFF. - - ``RESTORE_INVERTED_ON`` - Attempt to restore state inverted from the previous 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 light as OFF on bootup. - ``ALWAYS_ON`` - Always initialize the light as ON on bootup. diff --git a/components/mcp23Sxx.rst b/components/mcp23Sxx.rst index b4863ecf9..ec579a573 100644 --- a/components/mcp23Sxx.rst +++ b/components/mcp23Sxx.rst @@ -2,7 +2,7 @@ MCP23Sxx I/O Expander ===================== .. seo:: - :description: Instructions for setting up MCP23S08, MCP23S16 or MCP23S17 digital port expander in ESPHome. This is exactly the same API as the MCP23SXX I/O Expander except talks on the SPI bus + :description: Instructions for setting up MCP23S08, MCP23S16 or MCP23S17 digital port expander in ESPHome. This is exactly the same API as the MCP230XX I/O Expander except talks on the SPI bus :image: mcp230xx.svg The Microchip MCP23Sxx series of general purpose, parallel I/O expansion for SPI bus applications. diff --git a/components/mqtt.rst b/components/mqtt.rst index a25bc5512..0b19373c5 100644 --- a/components/mqtt.rst +++ b/components/mqtt.rst @@ -347,7 +347,7 @@ Configuration variables: .. code-block:: cpp - id(mqtt_client).subscribe("the/topic", [=](const std::string &payload) { + id(mqtt_client).subscribe("the/topic", [=](const std::string &topic, const std::string &payload) { // do something with payload }); diff --git a/components/remote_transmitter.rst b/components/remote_transmitter.rst index 9374ed6b8..cf75e10b5 100644 --- a/components/remote_transmitter.rst +++ b/components/remote_transmitter.rst @@ -74,7 +74,7 @@ Configuration variables: - **transmitter_id** (*Optional*, :ref:`config-id`): The remote transmitter to send the remote code with. Defaults to the first one defined in the configuration. - + If you're looking for the same functionality as is default in the ``rpi_rf`` integration in Home Assistant, you'll want to set the **times** to 10 and the **wait_time** to 0s. @@ -521,7 +521,7 @@ It transmits the ``address`` and ``command`` in two packets separated by a "spac on_...: - remote_transmitter.transmit_samsung36: address: 0x0400 - command: 0x000E00FF + command: 0x000E00FF Configuration variables: @@ -571,6 +571,26 @@ Configuration variables: - **Note:** this action transmits codes using the new(er) Toshiba AC protocol and likely will not work with older units. - All other options from :ref:`remote_transmitter-transmit_action`. + +Lambda calls +************ + +Actions may also be called from :ref:`lambdas `. The ``.transmit()`` call can be populated with +encoded data for a specific protocol by following the example below. +See the full API Reference for more info. + +- ``.transmit()``: Transmit an IR code using the remote transmitter. + + .. code-block:: cpp + + // Example - transmit using the Pioneer protocol + auto call = id(my_transmitter).transmit(); + esphome::remote_base::PioneerData data = { rc_code_1, rc_code_2 }; + esphome::remote_base::PioneerProtocol().encode(call.get_data(), data); + call.set_send_times(2); + call.perform(); + + .. _remote-setting-up-infrared: Setting up Infrared Devices diff --git a/components/sensor/ltr390.rst b/components/sensor/ltr390.rst index 7933ed997..592f36725 100644 --- a/components/sensor/ltr390.rst +++ b/components/sensor/ltr390.rst @@ -21,7 +21,7 @@ The :ref:`I²C Bus ` is required to be set up in your configuration for thi sensor: - platform: ltr390 - uvi: + uv: name: "UV Index" light: name: "Light" diff --git a/components/sensor/mhz19.rst b/components/sensor/mhz19.rst index 5245f151d..2d4a3e7e8 100644 --- a/components/sensor/mhz19.rst +++ b/components/sensor/mhz19.rst @@ -27,8 +27,8 @@ TX/RX labels are from the perspective of the MH-Z19). Additionally, you need to # Example configuration entry uart: - rx_pin: D0 - tx_pin: D1 + rx_pin: GPIO3 + tx_pin: GPIO1 baud_rate: 9600 sensor: diff --git a/components/sensor/modbus_controller.rst b/components/sensor/modbus_controller.rst index 6e384fb01..90c3fa40d 100644 --- a/components/sensor/modbus_controller.rst +++ b/components/sensor/modbus_controller.rst @@ -27,9 +27,9 @@ Configuration variables: - 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) + - S_QWORD (signed 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) + - S_QWORD_R (signed 64 bit integer from 4 registers low word first) - FP32 (32 bit IEEE 754 floating point from 2 registers) - FP32_R (32 bit IEEE 754 floating point - same as FP32 but low word first)s diff --git a/components/sensor/xiaomi_ble.rst b/components/sensor/xiaomi_ble.rst index 0b07b4ca1..37fd01e31 100644 --- a/components/sensor/xiaomi_ble.rst +++ b/components/sensor/xiaomi_ble.rst @@ -238,7 +238,7 @@ Configuration example for PVVX MiThermometer firmware set to "Custom" advertisem name: "PVVX Battery-Voltage" MHO-C401 -********** +******** Hygro thermometer, square body, e-ink display, encrypted, broadcasts temperature, humidity and battery status. Requires a bindkey in order to decrypt the received data (see :ref:`obtaining_the_bindkey`). @@ -248,7 +248,15 @@ Hygro thermometer, square body, e-ink display, encrypted, broadcasts temperature ( MHO-C201 doesn't have BT ) -Configuration example: +Similar to the LYWSD03MMC, there is custom firmware available for this device, so there are the following possibilities to operate this sensor: + +1. Xiaomi stock firmware (requires a bindkey in order to decrypt the received data, see :ref:`obtaining_the_bindkey`) +2. Device flashed with `PVVX MiThermometer `__ custom firmware + + - "Mi Like" advertisement (dummy bindkey required) + - "pvvx" custom advertisement (no bindkey required, only PVVX firmware) + +Configuration example for Xiaomi stock firmware: .. code-block:: yaml @@ -263,6 +271,23 @@ Configuration example: battery_level: name: "MHOC401 Battery Level" +Configuration example for PVVX MiThermometer firmware set to "Custom" advertisement: + +.. code-block:: yaml + + sensor: + - platform: pvvx_mithermometer + mac_address: "A4:C1:38:B1:CD:7F" + temperature: + name: "PVVX Temperature" + humidity: + name: "PVVX Humidity" + battery_level: + name: "PVVX Battery-Level" + battery_voltage: + name: "PVVX Battery-Voltage" + + CGD1 **** @@ -479,10 +504,10 @@ Obtaining The Bindkey To set up an encrypted device such as the LYWSD03MMC (with Xiaomi stock firmware) and CGD1, you first need to obtain the bind key. The ``xiaomi_ble`` sensor component is not able to automatically generate a bind key so other workarounds are necessary. -LYWSD03MMC -********** +LYWSD03MMC/MHO-C401 +******************* -If the LYWSD03MMC sensor is operated with the Xiaomi stock firmware, you can use the `TeLink flasher application `__ to easily generate a new bind key and upload the key to the device without the need to flash a new firmware (see figure). For this, you load the flasher `webpage `__ with a `supported browser `__ and connect the device by pressing "Connect". After the connection is established, you press the "Do Activation" button and the new key will be shown in the "Mi Bind Key" field. The key can be copied directly into the sensor YAML configuration. +If the LYWSD03MMC or MHO-C401 sensor is operated with the Xiaomi stock firmware, you can use the `TeLink flasher application `__ to easily generate a new bind key and upload the key to the device without the need to flash a new firmware (see figure). For this, you load the flasher `webpage `__ with a `supported browser `__ and connect the device by pressing "Connect". After the connection is established, you press the "Do Activation" button and the new key will be shown in the "Mi Bind Key" field. The key can be copied directly into the sensor YAML configuration. .. figure:: images/telink_flasher.jpg :align: center diff --git a/components/switch/gpio.rst b/components/switch/gpio.rst index 56361bb74..445d4df13 100644 --- a/components/switch/gpio.rst +++ b/components/switch/gpio.rst @@ -34,8 +34,8 @@ Configuration variables: - ``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_OFF`` - Attempt to restore state inverted from the previous state and default to OFF. - - ``RESTORE_INVERTED_ON`` - Attempt to restore state inverted from the previous 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 pin as OFF on bootup. - ``ALWAYS_ON`` - Always initialize the pin as ON on bootup. diff --git a/components/switch/restart.rst b/components/switch/restart.rst index 15dcabb65..49aef556c 100644 --- a/components/switch/restart.rst +++ b/components/switch/restart.rst @@ -29,6 +29,7 @@ Configuration variables: See Also -------- +- :doc:`/components/button/restart` - :doc:`shutdown` - :doc:`safe_mode` - :doc:`template` diff --git a/cookbook/air_gradient_diy_air_quality_sensor.rst b/cookbook/air_gradient_diy_air_quality_sensor.rst new file mode 100644 index 000000000..2fc067c8a --- /dev/null +++ b/cookbook/air_gradient_diy_air_quality_sensor.rst @@ -0,0 +1,63 @@ +.. seo:: + :description: AirGradient DIY Air Quality Sensor + :image: air_gradient_diy_air_quality_sensor.jpg + :keywords: Air Quality Sensor DIY + +AirGradient DIY Air Quality Sensor +================================== + +.. figure:: images/air_gradient_diy_air_quality_sensor.jpg + :align: center + :width: 100.0% + +AirGradient has created a DIY Air Quality sensor. +They offer a PCB, PCB + components kit, etc. +A pretty neat package. +To use this you have to run their software but you can use the kit with ESPHome as well! + +Here is what it can measure: + +- **Temperature** +- **Humidity** +- **Air particles PM2.5** +- **Carbon Dioxide** + +Additionally: + +- There is a display so show off your data or whatever you desire from Home Assistant +- You can download a 3D printable case including a wall mount bracket + + +ESPHome Configuration +--------------------- +Documentation: + +- `Blog Article: Measuring Air Quality in your Home Office `__ +- `ESPHome code with a setup guide for Home Assistant `__ +- `AirGradient Shop for the PCB or PCB plus components `__ +- `AirGradient Setup Guide (3D printeable case, setup guide, etc.) `__ + +`YAML configuration `__ + +Soldering and setup video: + +.. raw:: html + + + +See Also +-------- + +- :doc:`/devices/nodemcu_esp8266` +- :doc:`/components/display/ssd1306` +- :doc:`/components/i2c` +- :doc:`/components/uart` +- :doc:`/components/sensor/sht3xd` +- :doc:`/components/sensor/pmsx003` +- :doc:`/components/sensor/senseair` +- :doc:`/components/wifi` +- :doc:`/components/api` +- :doc:`/components/logger` +- :doc:`/components/ota` +- :doc:`/components/switch/safe_mode` +- :ghedit:`Edit` diff --git a/cookbook/images/air_gradient_diy_air_quality_sensor.jpg b/cookbook/images/air_gradient_diy_air_quality_sensor.jpg new file mode 100644 index 000000000..17edf47fc Binary files /dev/null and b/cookbook/images/air_gradient_diy_air_quality_sensor.jpg differ diff --git a/cookbook/leak-detector-m5stickC.rst b/cookbook/leak-detector-m5stickC.rst index 378cbe518..1a1d9afe3 100644 --- a/cookbook/leak-detector-m5stickC.rst +++ b/cookbook/leak-detector-m5stickC.rst @@ -251,16 +251,15 @@ ESPHome configuration id: font1 size: 66 - # wonky color fix, in lieu of finding a way to invert the display color: - id: color_wet red: 100% - green: 100% + green: 0% blue: 0% - id: color_dry - red: 100% - green: 0% - blue: 100% + red: 0% + green: 100% + blue: 0% # built-in 80x160 TFT display: @@ -274,14 +273,16 @@ ESPHome configuration cs_pin: GPIO5 dc_pin: GPIO23 reset_pin: GPIO18 + invert_colors: true + use_bgr: true lambda: |- if (id(leak).state) { - it.fill(COLOR_ON); + it.fill(COLOR_OFF); it.print(42, -24, id(font1), id(color_wet), TextAlign::TOP_CENTER, "W"); it.print(42, 32, id(font1), id(color_wet), TextAlign::TOP_CENTER, "E"); it.print(42, 85, id(font1), id(color_wet), TextAlign::TOP_CENTER, "T"); } else { - it.fill(COLOR_ON); + it.fill(COLOR_OFF); it.print(42, -24, id(font1), id(color_dry), TextAlign::TOP_CENTER, "D"); it.print(42, 32, id(font1), id(color_dry), TextAlign::TOP_CENTER, "R"); it.print(42, 85, id(font1), id(color_dry), TextAlign::TOP_CENTER, "Y"); diff --git a/guides/contributing.rst b/guides/contributing.rst index 336cae91f..728ba4544 100644 --- a/guides/contributing.rst +++ b/guides/contributing.rst @@ -607,6 +607,20 @@ Standard for the esphome-core codebase: # Run lint only over changed files docker run --rm -v "${PWD}/":/esphome -it esphome/esphome-lint script/quicklint + + + If you are using Windows and have docker installed the syntax is slightly different. + If you have cloned esphome to ``c:\edev\esphome`` the volume format is ``c/edev/esphome`` + + .. code-block:: bash + + # convert the volume format + $current_dir=(Get-Location).Path.ToLower().Replace(':','').Replace('\','/') + # Run lint only over changed files from powershell + docker run --rm -v "$($current_dir):/esphome" -it esphome/esphome-lint script/quicklint + + + ESPHome via Gitpod ****************** diff --git a/guides/faq.rst b/guides/faq.rst index 574fc56d7..4bf7e6bf7 100644 --- a/guides/faq.rst +++ b/guides/faq.rst @@ -196,7 +196,7 @@ I have a question... How can I contact you? Sure! We are happy to help :) You can contact us here: - `Discord `__ -- `Home Assistant Community Forums `__ +- `Home Assistant Community Forums `__ - ESPHome `issue `__ and `feature request `__ issue trackers. Preferably only for issues and feature requests. diff --git a/guides/supporters.rst b/guides/supporters.rst index 48ac102a5..d899badb6 100644 --- a/guides/supporters.rst +++ b/guides/supporters.rst @@ -85,6 +85,7 @@ Contributors - `Paulus Schoutsen (@balloob) `__ - `Andrew Zaborowski (@balrog-kun) `__ - `Rutger Nijhuis (@BananaPukeh) `__ +- `BarryMar (@BarryMar) `__ - `bazuchan (@bazuchan) `__ - `Viktr (@BbIKTOP) `__ - `J. Nick Koston (@bdraco) `__ @@ -246,6 +247,7 @@ Contributors - `Francis-labo (@Francis-labo) `__ - `Francisk0 (@Francisk0) `__ - `Frank Bakker (@FrankBakkerNl) `__ +- `Frank Langtind (@frankiboy1) `__ - `Frankster-NL (@Frankster-NL) `__ - `Fredrik Erlandsson (@fredrike) `__ - `Evgeny (@freekode) `__ @@ -279,6 +281,7 @@ Contributors - `gordon-zhao (@gordon-zhao) `__ - `Gustavo Ambrozio (@gpambrozio) `__ - `Antoine GRÉA (@grea09) `__ +- `George (@grob6000) `__ - `Andrea (@Guglio95) `__ - `Guillaume DELVIT (@guiguid) `__ - `guptamp (@guptamp) `__ @@ -296,6 +299,7 @@ Contributors - `Jimmy Hedman (@HeMan) `__ - `HepoH3 (@HepoH3) `__ - `Hermann Kraus (@herm) `__ +- `Tom Cassady (@heytcass) `__ - `Hamish Moffatt (@hmoffatt) `__ - `MoA (@honomoa) `__ - `Hopperpop (@Hopperpop) `__ @@ -325,6 +329,7 @@ Contributors - `János Rusiczki (@janosrusiczki) `__ - `Jan Pieper (@janpieper) `__ - `Jason-nz (@Jason-nz) `__ +- `Jason2866 (@Jason2866) `__ - `Jason Hines (@jasonehines) `__ - `Jas Strong (@jasstrong) `__ - `JbLb (@jblb) `__ @@ -344,6 +349,7 @@ Contributors - `John K. Luebs (@jkl1337) `__ - `Justin Maxwell (@jkmaxwell) `__ - `Jeppe Ladefoged (@jladefoged) `__ +- `Jonas De Kegel (@jlsjonas) `__ - `Jonathan Martens (@jmartens) `__ - `Johan van der Kuijl (@johanvanderkuijl) `__ - `Johboh (@Johboh) `__ @@ -353,6 +359,7 @@ Contributors - `Jonathan Treffler (@JonathanTreffler) `__ - `JonnyaiR (@jonnyair) `__ - `Joppy (@JoppyFurr) `__ +- `Joscha Wagner (@jowgn) `__ - `jsuanet (@jsuanet) `__ - `junnikokuki (@junnikokuki) `__ - `Justahobby01 (@Justahobby01) `__ @@ -389,13 +396,11 @@ Contributors - `Karl Q. (@kquinsland) `__ - `krahabb (@krahabb) `__ - `Kodey Converse (@krconv) `__ -- `krikk (@krikk) `__ - `KristopherMackowiak (@KristopherMackowiak) `__ - `kroimon (@kroimon) `__ - `krunkel (@krunkel) `__ - `Kendell R (@KTibow) `__ - `Jakub Šimo (@kubik369) `__ -- `kvvoff (@kvvoff) `__ - `Ken Davidson (@kwdavidson) `__ - `Kyle Hendricks (@kylehendricks) `__ - `Kyle Manna (@kylemanna) `__ @@ -403,11 +408,11 @@ Contributors - `Stefan Lässer (@Laess3r) `__ - `Steffen Weinreich (@lairsdragon) `__ - `Fredrik Lindqvist (@Landrash) `__ -- `larsonmpdx (@larsonmpdx) `__ - `Laszlo Gazdag (@lazlyhu) `__ - `lcavalli (@lcavalli) `__ -- `lein1013 (@lein1013) `__ +- `Benny de Leeuw (@leeuwte) `__ - `Riku Lindblad (@lepinkainen) `__ +- `Lerosen (@Lerosen) `__ - `Leon Loopik (@Lewn) `__ - `Luca Gugelmann (@lgugelmann) `__ - `Juraj Liso (@LiJu09) `__ @@ -461,6 +466,7 @@ Contributors - `meijerwynand (@meijerwynand) `__ - `Marco (@Melkor82) `__ - `Merlin Schumacher (@merlinschumacher) `__ +- `Marco Lusini (@met67) `__ - `Michael Gorven (@mgorven) `__ - `mhentschke (@mhentschke) `__ - `Michaël Arnauts (@michaelarnauts) `__ @@ -616,7 +622,6 @@ Contributors - `Rubén G. (@rubengargar) `__ - `@RubenKelevra (@RubenKelevra) `__ - `RubyBailey (@RubyBailey) `__ -- `Roberto Wagner (@rwagnervm) `__ - `rweather (@rweather) `__ - `ryanalden (@ryanalden) `__ - `Ryan Nazaretian (@ryannazaretian) `__ @@ -661,6 +666,7 @@ Contributors - `sticilface (@sticilface) `__ - `StijnVdd (@StijnVdd) `__ - `Stijn Tintel (@stintel) `__ +- `Strixx76 (@Strixx76) `__ - `stubs12 (@stubs12) `__ - `Jordan Vohwinkel (@sublime93) `__ - `sveip (@sveip) `__ @@ -762,4 +768,4 @@ Contributors - `ZTX18 (@ZTX18) `__ - `Christian Zufferey (@zuzu59) `__ -*This page was last updated December 15, 2021.* +*This page was last updated December 30, 2021.* diff --git a/images/air_gradient_diy_air_quality_sensor.jpg b/images/air_gradient_diy_air_quality_sensor.jpg new file mode 100644 index 000000000..17edf47fc Binary files /dev/null and b/images/air_gradient_diy_air_quality_sensor.jpg differ diff --git a/index.rst b/index.rst index 80a6afc77..4f65460d1 100644 --- a/index.rst +++ b/index.rst @@ -671,6 +671,7 @@ Cookbook IWOOLE Table Lamp, cookbook/iwoole_rgbw_table_lamp, iwoole_rgbw_table_lamp.png EPEVER Tracer, cookbook/tracer-an, tracer-an.jpg Ilonda Wifi Smart Fish Feeder, cookbook/ilonda-wifi-smart-fish-feeder, ilonda-wifi-smart-fish-feeder-cookbook.jpg + AirGradient DIY Air Quality Sensor, cookbook/air_gradient_diy_air_quality_sensor, air_gradient_diy_air_quality_sensor.jpg Do you have other awesome automations or cool setups? Please feel free to add them to the documentation for others to copy. See :doc:`Contributing `. diff --git a/requirements.txt b/requirements.txt index a20f2ded5..c2bc27aa2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -sphinx==4.0.3 +sphinx==4.3.2