mirror of
https://github.com/esphome/esphome-docs.git
synced 2025-01-23 21:51:53 +01:00
Merge branch 'current' into next
This commit is contained in:
commit
d2f1c23ebf
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -8,3 +8,4 @@
|
||||
## Checklist:
|
||||
|
||||
- [ ] Branch: `next` is for changes and new documentation that will go public with the next ESPHome release. Fixes, changes and adjustments for the current release should be created against `current`.
|
||||
- [ ] Link added in `/index.rst` when creating new documents for new components or cookbook.
|
||||
|
@ -7,17 +7,17 @@ Native API Component
|
||||
:keywords: Native API, ESPHome, Home Assistant
|
||||
|
||||
The ESPHome native API is used to communicate with clients directly, with a highly-optimized
|
||||
network protocol. Currently, only the esphome tool and Home Assistant use this native API.
|
||||
network protocol. Currently, only the ESPHome tool and Home Assistant use this native API.
|
||||
|
||||
After adding an ``api:`` line to your esphome configuration you can go to the Home Assistant
|
||||
webinterface and navigate to the "Integrations" screen in the "Configuration" panel. Then wait
|
||||
After adding an ``api:`` line to your ESPHome configuration you can go to the Home Assistant
|
||||
web interface and navigate to the "Integrations" screen in the "Configuration" panel. Then wait
|
||||
for the ESPHome device to show up under the discovered section (can take up to 5 minutes) or add
|
||||
the device manually by clicking "CONFIGURE" on the ESPHome integration and entering
|
||||
"<NODE_NAME>.local" as the address.
|
||||
the device manually by choosing "ESPHome" from the integration overview and entering
|
||||
"<NODE_NAME>.local" or the IP address of the unit in the "Host" field.
|
||||
|
||||
The ESPHome native API is based on a custom TCP protocol using protocol buffers. You can find
|
||||
the protocol data structure definitions here: https://github.com/esphome/esphome/blob/dev/src/esphome/components/api/api.proto
|
||||
A python library that implements this protocol can be found `here <https://github.com/esphome/aioesphomeapi>`__.
|
||||
the protocol data structure definitions here: https://github.com/esphome/esphome/blob/dev/esphome/components/api/api.proto
|
||||
A Python library that implements this protocol is `aioesphomeapi <https://github.com/esphome/aioesphomeapi>`__.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
|
@ -50,6 +50,10 @@ Advanced features:
|
||||
- **mode** (*Optional*): The mode to use for the wakeup source. Must be one of ``ALL_LOW`` (wake up when
|
||||
all pins go LOW) or ``ANY_HIGH`` (wake up when any pin goes HIGH).
|
||||
|
||||
.. note::
|
||||
|
||||
Only one deep sleep component may be configured.
|
||||
|
||||
.. _deep_sleep-esp32_wakeup_pin_mode:
|
||||
|
||||
ESP32 Wakeup Pin Mode
|
||||
@ -103,11 +107,11 @@ Useful for
|
||||
|
||||
You can use this automation to automatically prevent deep sleep when a MQTT message on the topic
|
||||
``livingroom/ota_mode`` is received. Then, to do the OTA update, just
|
||||
use a MQTT client to publish a retained MQTT message described above. When the node wakes up again
|
||||
use a MQTT client to publish a retained MQTT message described below. When the node wakes up again
|
||||
it will no longer enter deep sleep mode and you can upload your OTA update.
|
||||
|
||||
Remember to turn "OTA mode" off again after the OTA update by sending a MQTT message with the payload
|
||||
``OFF``.
|
||||
``OFF``. Note that the device won't enter deep sleep again until the next reboot.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -118,6 +122,7 @@ Useful for
|
||||
# ...
|
||||
on_message:
|
||||
topic: livingroom/ota_mode
|
||||
payload: 'ON'
|
||||
then:
|
||||
- deep_sleep.prevent: deep_sleep_1
|
||||
|
||||
|
@ -315,7 +315,7 @@ Displaying Time
|
||||
With ESPHome you can also display the current time using the NTP protocol. Please see the example :ref:`here <strftime>`.
|
||||
|
||||
Images
|
||||
^^^^^^
|
||||
******
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
|
@ -75,8 +75,8 @@ Configuration variables:
|
||||
- ``2.13in-ttgo`` (T5_V2.3 tested)
|
||||
- ``2.70in`` (not tested)
|
||||
- ``2.90in``
|
||||
- ``4.20in`` (not tested)
|
||||
- ``7.50in`` (not tested)
|
||||
- ``4.20in``
|
||||
- ``7.50in``
|
||||
|
||||
- **busy_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The BUSY pin. Defaults to not connected.
|
||||
- **reset_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): The RESET pin. Defaults to not connected.
|
||||
|
@ -79,7 +79,7 @@ Frame Settings:
|
||||
- ``1600x1200`` (UXGA)
|
||||
|
||||
- **jpeg_quality** (*Optional*, int): The JPEG quality that the camera should encode images with.
|
||||
From 10 to 63. Defaults to ``10``.
|
||||
From 10 (best) to 63 (worst). Defaults to ``10``.
|
||||
|
||||
- **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``.
|
||||
@ -170,8 +170,8 @@ Configuration for Wrover Kit Boards
|
||||
name: My Camera
|
||||
# ...
|
||||
|
||||
Configuration for TTGO T-Camera
|
||||
-------------------------------
|
||||
Configuration for TTGO T-Camera V05
|
||||
-----------------------------------
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -194,6 +194,54 @@ Configuration for TTGO T-Camera
|
||||
# ...
|
||||
|
||||
|
||||
Configuration for TTGO T-Camera V17
|
||||
-----------------------------------
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
esp32_camera:
|
||||
external_clock:
|
||||
pin: GPIO32
|
||||
frequency: 20MHz
|
||||
i2c_pins:
|
||||
sda: GPIO13
|
||||
scl: GPIO12
|
||||
data_pins: [GPIO5, GPIO14, GPIO4, GPIO15, GPIO18, GPIO23, GPIO36, GPIO39]
|
||||
vsync_pin: GPIO27
|
||||
href_pin: GPIO25
|
||||
pixel_clock_pin: GPIO19
|
||||
# power_down_pin: GPIO26
|
||||
vertical_flip: true
|
||||
horizontal_mirror: true
|
||||
|
||||
# Image settings
|
||||
name: My Camera
|
||||
# ...
|
||||
|
||||
Configuration for TTGO T-Journal
|
||||
--------------------------------
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
esp32_camera:
|
||||
external_clock:
|
||||
pin: GPIO27
|
||||
frequency: 20MHz
|
||||
i2c_pins:
|
||||
sda: GPIO25
|
||||
scl: GPIO23
|
||||
data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
|
||||
vsync_pin: GPIO22
|
||||
href_pin: GPIO26
|
||||
pixel_clock_pin: GPIO21
|
||||
|
||||
|
||||
# Image settings
|
||||
name: My Camera
|
||||
# ...
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
|
@ -249,7 +249,7 @@ This option behaves differently depending on what the included file is pointing
|
||||
to the src/ folder.
|
||||
- If the include string is point at a header file (.h, .hpp, .tcc) - it is copied in the src/ folder
|
||||
AND included in the main.cpp. This way the lambda code can access it.
|
||||
- If the include str
|
||||
|
||||
|
||||
.. _esphome-changing_node_name:
|
||||
|
||||
|
@ -20,6 +20,7 @@ put on external ones.
|
||||
sda: 21
|
||||
scl: 22
|
||||
scan: True
|
||||
id: bus_a
|
||||
|
||||
Configuration variables:
|
||||
------------------------
|
||||
@ -33,6 +34,29 @@ Configuration variables:
|
||||
Defaults to ``True``.
|
||||
- **frequency** (*Optional*, float): Set the frequency the I²C bus should operate on.
|
||||
Defaults to ``50kHz``. Values are ``50kHz``, ``100kHz``, ``200kHz``, ... ``800kHz``
|
||||
- **id** (*Optional*, :ref:`config-id`) Manually specify the ID for this I²C bus if you need multiple I²C buses.
|
||||
|
||||
.. note::
|
||||
|
||||
If the device can support multiple I²C buses (ESP32 has 2) these buses need to be defined as below and sensors need to be setup specifying the correct bus:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# Example configuration entry
|
||||
i2c:
|
||||
- id: bus_a
|
||||
sda: 13
|
||||
scl: 16
|
||||
scan: True
|
||||
- id: bus_b
|
||||
sda: 14
|
||||
scl: 15
|
||||
scan: True
|
||||
# Sensors should be specified as follows
|
||||
- platform: bme680
|
||||
i2c_id: bus_b
|
||||
address: 0x76
|
||||
# ...
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
@ -54,8 +54,8 @@ Possible Hardware UART configurations:
|
||||
- ``UART0`` - TX: GPIO1, RX: GPIO3
|
||||
- ``UART0_SWAP`` - TX: GPIO15, RX: GPIO13 (Only on ESP8266)
|
||||
- ``UART1`` - TX: GPIO2, RX: None (Only on ESP8266)
|
||||
- ``UART1`` - TX: GPIO9, RX: GPIO10 (Only on ESP832)
|
||||
- ``UART2`` - TX: GPIO16, RX: GPIO17 (Only on ESP832)
|
||||
- ``UART1`` - TX: GPIO9, RX: GPIO10 (Only on ESP32)
|
||||
- ``UART2`` - TX: GPIO16, RX: GPIO17 (Only on ESP32)
|
||||
|
||||
.. _logger-log_levels:
|
||||
|
||||
|
@ -34,6 +34,14 @@ Configuration variables:
|
||||
have more visual artifacts, but can represent much more colors. Defaults to ``1000 Hz``.
|
||||
- All other options from :ref:`Output <config-output>`.
|
||||
|
||||
.. note::
|
||||
|
||||
If you previously had Tasmota installed on your device and have just flashed ESPHome onto it,
|
||||
you may encounter an issue where the PWM output is only fully on or off.
|
||||
|
||||
A hard reset fixes the problem - if you have this issue please power cycle the device, that
|
||||
should fix it.
|
||||
|
||||
.. _output-esp8266_pwm-set_frequency_action:
|
||||
|
||||
``output.esp8266_pwm.set_frequency`` Action
|
||||
|
@ -121,24 +121,6 @@ complete configuration for a Sonoff B1 looks like:
|
||||
cold_white_color_temperature: 6500 K
|
||||
warm_white_color_temperature: 2800 K
|
||||
|
||||
.. note::
|
||||
|
||||
One of the features of the MY9231/MY9291 driver is that the chips
|
||||
remember their state after a power cycling. Unfortunately, the
|
||||
state of the driver can not be read. Therefore, if ESPHome can
|
||||
not restore the previous state, it will result in a mismatch of
|
||||
the driver output and the internal state (= MQTT state). So you
|
||||
can configure the behaviour on boot time:
|
||||
|
||||
``update_on_boot: True``
|
||||
On device power up/boot, the light may flash shortly, to the
|
||||
state before powering off.
|
||||
|
||||
``update_on_boot: False``
|
||||
On device power up/boot, the light show the last state, but the
|
||||
internal data will not reflect this state. Thus, the first fade
|
||||
is wrong, as well as the MQTT state.
|
||||
|
||||
.. _my9231-output:
|
||||
|
||||
Driver Output
|
||||
|
@ -162,7 +162,7 @@ This :ref:`action <config-action>` a Sony infrared remote code to a remote trans
|
||||
.. code-block:: yaml
|
||||
|
||||
on_...:
|
||||
- remote_transmitter.transmitsony:
|
||||
- remote_transmitter.transmit_sony:
|
||||
data: 0x123
|
||||
nbits: 12
|
||||
|
||||
|
@ -33,7 +33,7 @@ required to be set up in your configuration for this sensor to work.
|
||||
temperature:
|
||||
name: "Living Room Temperature"
|
||||
humidity:
|
||||
name: "Living Room Pressure"
|
||||
name: "Living Room Humidity"
|
||||
update_interval: 60s
|
||||
|
||||
Configuration variables:
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 62 KiB |
@ -8,7 +8,7 @@ TCS34725 RGB Color Sensor
|
||||
|
||||
The ``tcs34725`` sensor platform allows you to use your TCS34725 RGB color sensors
|
||||
(`datasheet <https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf>`__,
|
||||
`Adafruit`_) temperature and pressure sensors with ESPHome. The :ref:`I²C <i2c>` is
|
||||
`Adafruit`_), color temperature and illuminance sensors with ESPHome. The :ref:`I²C <i2c>` is
|
||||
required to be set up in your configuration for this sensor to work.
|
||||
|
||||
.. figure:: images/tcs34725-full.jpg
|
||||
|
BIN
cookbook/images/teckin_sb50.jpg
Normal file
BIN
cookbook/images/teckin_sb50.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
@ -172,7 +172,7 @@ variable ``output_component1``.
|
||||
output:
|
||||
- platform: esp8266_pwm
|
||||
id: output_warm_white
|
||||
pin: GPIO14
|
||||
pin: GPIO13
|
||||
- platform: esp8266_pwm
|
||||
id: output_daylight
|
||||
pin: GPIO5
|
||||
|
83
cookbook/teckin_sb50.rst
Normal file
83
cookbook/teckin_sb50.rst
Normal file
@ -0,0 +1,83 @@
|
||||
TECKIN SB50 LED Bulb
|
||||
====================
|
||||
|
||||
.. seo::
|
||||
:description: ESPHome configuration for Teckin SB50 LED Bulb.
|
||||
:image: images/teckin_sb50.jpg
|
||||
:keywords: Teckin SB50
|
||||
|
||||
.. figure:: images/teckin_sb50.jpg
|
||||
:align: center
|
||||
:width: 50.0%
|
||||
|
||||
The Teckin SB50 Bulb's are a great option for lighting that can be flashed with tuya-convert. More details can be found at tuya-convert `github page <https://github.com/ct-Open-Source/tuya-convert>`__.
|
||||
Below is the esphome configuration file that will get you up and running. This assumes you have a secret.yaml with ssid,password, api_password and ota_password keys.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
substitutions:
|
||||
devicename: <Enter a name for your light here>
|
||||
|
||||
esphome:
|
||||
name: $devicename
|
||||
platform: ESP8266
|
||||
board: esp01_1m
|
||||
|
||||
wifi:
|
||||
ssid: !secret wifi_ssid
|
||||
password: !secret wifi_password
|
||||
|
||||
# Enable logging to ESPHome
|
||||
logger:
|
||||
# Disable logging to serial
|
||||
baud_rate: 0
|
||||
|
||||
# Enable Home Assistant API
|
||||
api:
|
||||
password: !secret api_password
|
||||
|
||||
# Setup OTA password
|
||||
ota:
|
||||
password: !secret ota_password
|
||||
|
||||
# Define output pins
|
||||
output:
|
||||
- platform: esp8266_pwm
|
||||
id: output_red
|
||||
pin: GPIO4
|
||||
- platform: esp8266_pwm
|
||||
id: output_green
|
||||
pin: GPIO12
|
||||
- platform: esp8266_pwm
|
||||
id: output_blue
|
||||
pin: GPIO14
|
||||
- platform: esp8266_pwm
|
||||
id: output_warm_white
|
||||
pin: GPIO13
|
||||
- platform: esp8266_pwm
|
||||
id: output_cold_white
|
||||
pin: GPIO5
|
||||
|
||||
# Define a light entity
|
||||
light:
|
||||
- platform: rgbww
|
||||
name: $devicename
|
||||
id: $devicename
|
||||
red: output_red
|
||||
green: output_green
|
||||
blue: output_blue
|
||||
warm_white: output_warm_white
|
||||
cold_white: output_cold_white
|
||||
cold_white_color_temperature: 6200 K
|
||||
warm_white_color_temperature: 2800 K
|
||||
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
- :doc:`/devices/nodemcu_esp8266`
|
||||
- :doc:`/cookbook/mirabella-genio-bulb`
|
||||
- :doc:`/components/light/rgb`
|
||||
- :doc:`/components/output/esp8266_pwm`
|
||||
- :doc:`/components/binary_sensor/gpio`
|
||||
- :ghedit:`Edit`
|
@ -26,10 +26,10 @@ Some notes about the pins on the ESP32:
|
||||
- ``GPIO0`` is used to determine the boot mode on startup. It should therefore not be pulled LOW
|
||||
on startup to avoid booting into flash mode. You can, however, still use this as an output pin.
|
||||
- ``GPIO34``-``GPIO39`` can not be used as outputs (even though GPIO stands for "general purpose input
|
||||
**output**"...)
|
||||
**output**"...).
|
||||
- ``GPIO32``-``GPIO39``: These pins can be used with the :doc:`/components/sensor/adc` to measure
|
||||
voltages.
|
||||
- ``GPIO2``: This pin is connected to the blue LED on the board as seen in above picture. It also supports
|
||||
- ``GPIO2``: This pin is connected to the blue LED on the board. It also supports
|
||||
the :doc:`touch pad binary sensor </components/binary_sensor/esp32_touch>` like some other
|
||||
pins.
|
||||
|
||||
|
@ -31,7 +31,7 @@ Some notes on the pins:
|
||||
- ``GPIO6`` - ``GPIO11``, ``GPIO0``, ``GPIO2`` and ``GPIO15`` are often already used by the internal
|
||||
flash interface and boot mode detection. So it's best to avoid using these pins.
|
||||
- ``GPIO17`` additionally has an ADC connected to it. See the :doc:`/components/sensor/adc`
|
||||
to read out voltages (in the range from 0 to 1.0V) on this pin.
|
||||
to read voltages (in the range from 0 to 1.0V) on this pin.
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -139,7 +139,7 @@ in the ``boot mode:`` line tells you what mode was selected
|
||||
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
|
||||
|
||||
The first lines when viewing the UART logs might have unrecognized characters. This is
|
||||
because the ESP8266 bootloader uses a baudrate of 76800, whereas the use program uses 115200.
|
||||
because the ESP8266 bootloader uses a baudrate of 76800, whereas the program uses 115200.
|
||||
|
||||
Reset Causes
|
||||
------------
|
||||
|
@ -28,17 +28,17 @@ you don't have to worry about other kinds of pin numberings, yay!
|
||||
|
||||
Pins on the NodeMCU ESP32 development board.
|
||||
|
||||
Note that in certain conditions you *can* use the pins marked as ``INTERNAL`` in above image.
|
||||
Note that in certain conditions you *can* use the pins marked as ``INTERNAL`` in the above image.
|
||||
|
||||
- ``GPIO0`` is used to determine the boot mode on startup. It should therefore not be pulled LOW
|
||||
on startup to avoid booting into flash mode. You can, however, still use this as an output pin.
|
||||
- ``GPIO34``-``GPIO39`` can not be used as outputs (even though GPIO stands for "general purpose input
|
||||
**output**"...)
|
||||
**output**"...).
|
||||
- ``GPIO32``-``GPIO39``: These pins can be used with the :doc:`/components/sensor/adc` to measure
|
||||
voltages.
|
||||
- ``GPIO2``: This pin is connected to the blue LED on the board as seen in above picture. It also supports
|
||||
the :doc:`touch pad binary sensor </components/binary_sensor/esp32_touch>` like some other
|
||||
pins.
|
||||
- ``GPIO2``: This pin is connected to the blue LED on the board as seen in the picture above. It also supports
|
||||
the :doc:`touch pad binary sensor </components/binary_sensor/esp32_touch>` as do the other
|
||||
pins marked ``touch`` in the above image.
|
||||
- ``5V`` is connected to the 5V rail from the USB bus and can be used to power the board. Note that
|
||||
the UART chip is directly connected to this rail and you therefore **cannot** supply other voltages
|
||||
into this pin.
|
||||
|
@ -11,7 +11,7 @@ the ESPHome wizard asks you for your platform and |nodemcuv2|_ as the board type
|
||||
|
||||
.. note::
|
||||
|
||||
Most NodeMCU that can be purchased now are version 2 or upwards, if you're using an
|
||||
Most NodeMCU that can be purchased now are version 2 or upwards. If you're using an
|
||||
original v1 board, set the board type to |nodemcu|_.
|
||||
|
||||
.. |nodemcuv2| replace:: ``nodemcuv2``
|
||||
@ -30,8 +30,8 @@ the ESPHome wizard asks you for your platform and |nodemcuv2|_ as the board type
|
||||
The NodeMCU's pin numbering as seen on the board (the ``D0`` etc pins) is different from
|
||||
the internal pin numbering. For example, the ``D8`` pin number maps to the internal
|
||||
``GPIO0`` pin. Fortunately ESPHome knows the mapping from the on-board pin numbers
|
||||
to the internal pin numbering, but you need to prefix the pin numbers with ``D`` as in below
|
||||
image in order for this automatic mapping to occur.
|
||||
to the internal pin numbering, but you need to prefix the pin numbers with ``D`` as in
|
||||
the image below in order for this automatic mapping to occur.
|
||||
|
||||
In general, it is best to just use the ``D0``, ``D1``, ... pin numbering to avoid confusion
|
||||
|
||||
@ -52,7 +52,7 @@ Note that in certain conditions you *can* use the pins marked as ``INTERNAL`` in
|
||||
- ``VIN``: This pin can be used to use an external power supply with the board. Supply a voltage from
|
||||
3.3V to 12V to this pin and the linear voltage regulator on the board will power the board.
|
||||
- ``ENABLE``/``RESET``: When these pins are triggered, the board resets. The difference between the pins
|
||||
is how they can handle voltages above 3.3V
|
||||
is how they can handle voltages above 3.3V.
|
||||
|
||||
|
||||
.. code-block:: yaml
|
||||
|
@ -33,7 +33,6 @@ Sonoff RF
|
||||
GPIO4, Optional sensor
|
||||
GPIO14, Optional sensor
|
||||
|
||||
|
||||
Sonoff SV
|
||||
---------
|
||||
|
||||
@ -292,6 +291,18 @@ Sonoff S31
|
||||
|
||||
See :doc:`/components/sensor/cse7766` for measuring power
|
||||
|
||||
Sonoff Mini
|
||||
-----------
|
||||
|
||||
.. pintable::
|
||||
|
||||
GPIO0, Button (inverted),
|
||||
GPIO4, SW Input,
|
||||
GPIO12, Relay and Red LED,
|
||||
GPIO13, Blue LED (inverted),
|
||||
GPIO16, Optional sensor
|
||||
|
||||
|
||||
Shelly 1
|
||||
--------
|
||||
|
||||
|
@ -21,7 +21,7 @@ Over-The-Air update process.
|
||||
|
||||
.. note::
|
||||
|
||||
If you've previously installed Sonoff-Tasmota on your Sonoff 4CH, you're in luck 😀
|
||||
If you've previously installed Sonoff-Tasmota on your Sonoff 4CH, you're in luck 😀.
|
||||
ESPHome can generate a firmware binary which you can then upload via the
|
||||
Tasmota web interface. To see how to create this binary, skip to :ref:`sonoff_4ch-creating_firmware`.
|
||||
|
||||
@ -33,9 +33,9 @@ interface.
|
||||
.. warning::
|
||||
|
||||
Opening up this device can be very dangerous if not done correctly. While the device is open,
|
||||
you will be a single touch away from being electrocuted if the device is plugged in.
|
||||
you will be a single touch away from being electrocuted if the device is plugged in or connected to a high voltage 'mains' power supply.
|
||||
|
||||
So, during this *entire* guide **never ever** plug the device in. Also, you should only do this
|
||||
So, during this *entire* guide **never ever** plug the device in or have it connected to mains power. Also, you should only do this
|
||||
if you know what you're doing. If you, at any step, feel something is wrong or are uncomfortable
|
||||
with continuing, it's best to just stop for your own safety.
|
||||
|
||||
@ -43,12 +43,12 @@ interface.
|
||||
|
||||
For this guide you will need:
|
||||
|
||||
- Sonoff 4CH 😉
|
||||
- An USB to UART Bridge for flashing the device. These can be bought on Amazon for less than 5 dollars.
|
||||
- Sonoff 4CH 😉.
|
||||
- A USB to UART Bridge for flashing the device. These can be bought on Amazon (or other online stores) for less than 5 dollars.
|
||||
Note that the bridge *must* be 3.3V compatible. Otherwise you will destroy your Sonoff.
|
||||
- Jumper wires to connect the UART bridge to the header pins.
|
||||
- Computer running ESPHome or Hass.io add-on.
|
||||
- Screwdriver to open up the Sonoff 4CH.
|
||||
- A computer running Home Assistant with the ESPHome Hass.io add-on.
|
||||
- A screwdriver to open up the Sonoff 4CH.
|
||||
|
||||
Have everything? Great! Then you can start.
|
||||
|
||||
@ -62,7 +62,7 @@ supplied with the Sonoff 4CH before doing this step.
|
||||
.. warning::
|
||||
|
||||
Just to repeat this: Make **absolutely sure** the device is not connected to any appliance or
|
||||
plugged in before doing this step.
|
||||
connected to mains power before doing this step.
|
||||
|
||||
While the device is not plugged in, turn the device so you are viewing it from the top,
|
||||
then unscrew the long screws in the four corners of the top cover.
|
||||
@ -92,7 +92,7 @@ have to connect the four wires on the UART to USB bridge to the UART pins of the
|
||||
Fortunately for us, exactly these pins come pre-populated with a few header pins. You can identify
|
||||
these by the ``VCC33``, ``RX``, ``TX`` and ``GND`` markings on the silk-screen.
|
||||
|
||||
Now go ahead and connect these pins to your UART to USB bridge as seen in below image. Make sure
|
||||
Now go ahead and connect these pins to your UART to USB bridge as seen in the below image. Make sure
|
||||
that you connect these correctly, especially the ``VCC33`` and ``GND`` parts as you can otherwise
|
||||
destroy the chip.
|
||||
|
||||
@ -151,10 +151,10 @@ Step 4: Uploading Firmware
|
||||
--------------------------
|
||||
|
||||
In order to upload the firmware, you're first going to need to get the chip into a flash mode, otherwise
|
||||
the device will start up without accepting any firmware flash attempts. To do this, while the device is UART
|
||||
bridge is not connected to your USB port, start pressing the bottom-left push button labeled ``FW/IO0``
|
||||
the device will start up without accepting any firmware flash attempts. To do this, while the UART
|
||||
bridge is not connected to your USB port, press and hold the bottom-left push button labeled ``FW/IO0``
|
||||
and continue to do so while plugging in the UART bridge into your computer. Keep holding the button for
|
||||
another 2-4 seconds. The 4CH should now be in a flash mode and should not blink with any LED.
|
||||
another 2-4 seconds. The 4CH should now be in a flash mode and should not blink any LED.
|
||||
|
||||
.. figure:: images/sonoff_4ch_buttons.jpg
|
||||
:align: center
|
||||
@ -175,12 +175,12 @@ If successful, you should see something like this:
|
||||
Hooray 🎉! You've now successfully uploaded the first ESPHome firmware to your Sonoff 4CH. And in a moment,
|
||||
you will be able to use all of ESPHome's great features with your Sonoff 4CH.
|
||||
|
||||
If above step does, however, not work, here are some steps that can help:
|
||||
If above step don't work, however, here are some steps that can help:
|
||||
|
||||
- Sometimes the UART bridge cannot supply enough current to the chip to operate, in this
|
||||
case use a 3.3V supply you have lying around. A nice hack is to use the power supply of
|
||||
NodeMCU boards. Simply connect the NodeMCU's 3.3V to VCC and GND to GND. **Do not attempt
|
||||
to plug the device into a socket to overcome this problem while troubleshooting.**
|
||||
NodeMCU boards. Simply connect the NodeMCU's 3.3V to VCC and GND to GND. **Do not connect mains
|
||||
power to the device in an attempt to overcome this problem while troubleshooting.**
|
||||
- In other cases the ``TX`` and ``RX`` pin are reversed. Simple disconnect the device, swap
|
||||
the two pins and put it into flash mode again.
|
||||
|
||||
@ -214,6 +214,8 @@ of the basic functions.
|
||||
``GPIO1`` ``RX`` pin (for external sensors)
|
||||
---------------------------------------- -----------------------------------------
|
||||
``GPIO3`` ``TX`` pin (for external sensors)
|
||||
---------------------------------------- -----------------------------------------
|
||||
``GPIO2`` ``IO2`` pin (for external sensors)
|
||||
======================================== =========================================
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -305,7 +307,7 @@ Step 6: Finishing Up
|
||||
--------------------
|
||||
|
||||
If you're sure everything is done with the 4CH and have double checked there's nothing that could cause a short
|
||||
in the case, you can put the front cover with the button on the base again and screw everything together.
|
||||
in the case, you can put the front cover back on and screw everything together.
|
||||
|
||||
Now triple or even quadruple check the UART bridge is not connected to the 4CH, then comes the time when you can
|
||||
connect it.
|
||||
|
@ -16,12 +16,12 @@ front and a blue and green LED light.
|
||||
Sonoff S20 Smart Socket.
|
||||
|
||||
This guide will step you through setting up your Sonoff S20 and flashing the first ESPHome firmware
|
||||
with the serial interface. After that, you will be able to upload all future firmwares with the remote
|
||||
with the serial interface. After that, you will be able to upload all future firmware with the remote
|
||||
Over-The-Air update process.
|
||||
|
||||
.. note::
|
||||
|
||||
If you've previously installed Sonoff-Tasmota on your Sonoff S20, you're in luck 😀
|
||||
If you've previously installed Sonoff-Tasmota on your Sonoff S20, you're in luck 😀.
|
||||
ESPHome can generate a firmware binary which you can then upload via the
|
||||
Tasmota web interface. To see how to create this binary, skip to :ref:`sonoff_s20-creating-firmware`.
|
||||
|
||||
@ -43,12 +43,12 @@ interface.
|
||||
|
||||
For this guide you will need:
|
||||
|
||||
- Sonoff S20 😉
|
||||
- An USB to UART Bridge for flashing the device. These can be bought on Amazon for less than 5 dollars.
|
||||
- Sonoff S20 😉.
|
||||
- A USB to UART Bridge for flashing the device. These can be bought on Amazon (or other online stores) for less than 5 dollars.
|
||||
Note that the bridge *must* be 3.3V compatible. Otherwise you will destroy your S20.
|
||||
- Computer running ESPHome Hass.io add-on.
|
||||
- Screwdriver to open up the S20.
|
||||
- Soldering iron and a few header pins to connect the UART interface.
|
||||
- A computer running Home Assistant with the ESPHome Hass.io add-on.
|
||||
- A screwdriver to open up the S20.
|
||||
- A soldering iron and a few header pins to connect the UART interface.
|
||||
|
||||
Have everything? Great! Then you can start.
|
||||
|
||||
@ -65,7 +65,7 @@ supplied with the Sonoff S20 before doing this step.
|
||||
plugged in before doing this step.
|
||||
|
||||
While the device is not plugged in, turn the back side so it's facing you and unscrew the three
|
||||
black screws holding the back of the case together with the front.
|
||||
black screws that hold the case together.
|
||||
|
||||
.. figure:: images/sonoff_s20_screws.jpg
|
||||
:align: center
|
||||
@ -83,7 +83,7 @@ Step 2: Connecting UART
|
||||
-----------------------
|
||||
|
||||
We're interested in the main part of the S20 with the green PCB. On the bottom of the PCB, you will
|
||||
find four unpopulated holes. These pins have the UART interface used to flash firmwares onto the device
|
||||
find four unpopulated holes. These pins expose the UART interface used to flash firmware onto the device
|
||||
and debug issues.
|
||||
|
||||
.. figure:: images/sonoff_s20_pcb.jpg
|
||||
@ -94,8 +94,8 @@ and debug issues.
|
||||
So, in order to flash our own custom firmware, we're going to need to somehow connect the UART to USB
|
||||
bridge to these pins. The only way to make a good connection here is by using a soldering iron and soldering
|
||||
on some pin headers. On older models of the Sonoff S20, you were able to get the whole PCB out. Newer versions,
|
||||
however, glue the PCB onto the case to avoid people flashing custom firmwares. If the latter is the case,
|
||||
you will need to just solder the pin headers from above - it's a bit difficult, but possible.
|
||||
however, glue the PCB onto the case to avoid people flashing custom firmware. If the latter is the case,
|
||||
you will just need to solder the pin headers from above - it's a bit difficult, but possible.
|
||||
|
||||
When you're done, it should look something like this:
|
||||
|
||||
@ -153,10 +153,10 @@ Step 4: Uploading Firmware
|
||||
--------------------------
|
||||
|
||||
In order to upload the firmware, you're first going to need to get the chip into a flash mode, otherwise
|
||||
the device will start up without accepting any firmware flash attempts. To do this, while the device is UART
|
||||
bridge is not connected to your USB port, start pressing the small push button in the middle of the PCB.
|
||||
Then plug in the UART bridge into your computer and just keep holding the button pressed for 2-4 seconds.
|
||||
The S20 should now be in a flash mode and should not blink with any LED.
|
||||
the device will start up without accepting any firmware flash attempts. To do this, while the UART
|
||||
bridge is not connected to your USB port, press and hold the small push button in the middle of the PCB.
|
||||
Then plug the UART bridge into your computer and keep holding the button for 2-4 seconds.
|
||||
The S20 should now be in a flash mode and should not blink any LED.
|
||||
|
||||
Now you can finally run the upload command:
|
||||
|
||||
@ -169,12 +169,12 @@ If successful, you should see something like this:
|
||||
.. figure:: images/sonoff_s20_upload.png
|
||||
:align: center
|
||||
|
||||
Hooray 🎉! You've now successfully uploaded the first ESPHome firmware to your Sonoff S20. And in a moment,
|
||||
Hooray 🎉! You've now successfully uploaded the first ESPHome firmware to your Sonoff S20. And, in a moment,
|
||||
you will be able to use all of ESPHome's great features with your Sonoff S20.
|
||||
|
||||
If above step does, however, not work, here are some steps that can help:
|
||||
If above step don't work, however, here are some steps that can help:
|
||||
|
||||
- Sometimes the UART bridge cannot supply enough current to the chip to operate, in this
|
||||
- Sometimes the UART bridge cannot supply enough current to the chip to operate. In this
|
||||
case use a 3.3V supply you have lying around. A nice hack is to use the power supply of
|
||||
NodeMCU boards. Simply connect 3.3V to VCC and GND to GND on the pins. **Do not attempt
|
||||
to plug the device into a socket to overcome this problem while troubleshooting.**
|
||||
@ -249,7 +249,7 @@ of the basic functions.
|
||||
output: s20_green_led
|
||||
|
||||
|
||||
Above example also showcases an important concept of esphome: IDs and linking. In order
|
||||
The above example also showcases an important concept of esphome: IDs and linking. In order
|
||||
to make all components in ESPHome as much "plug and play" as possible, you can use IDs to define
|
||||
them in one area, and simply pass that ID later on. For example, above you can see an PWM (dimmer)
|
||||
output being created with the ID ``s20_green_led`` for the green LED. Later on it is then transformed
|
||||
@ -294,7 +294,7 @@ Step 6: Finishing Up
|
||||
--------------------
|
||||
|
||||
Now you're pretty much done with setting up the Sonoff S20. The only steps left are to
|
||||
remove any cables within the housing and make sure everything in there is clean. If, for
|
||||
remove any cables that you added within the housing and make sure everything in there is clean. If, for
|
||||
example, you used wires to connect the UART console, you should definitely remove them to avoid
|
||||
a short with mains.
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
.. _automation:
|
||||
|
||||
Automations And Templates
|
||||
Automations and Templates
|
||||
=========================
|
||||
|
||||
.. seo::
|
||||
:description: Getting started guide for automations in ESPHome.
|
||||
:image: auto-fix.png
|
||||
|
||||
Automations and templates are two very powerful concepts of ESPHome. Automations
|
||||
Automations and templates are two very powerful aspects of ESPHome. Automations
|
||||
allow you to perform actions under certain conditions and templates are a way to easily
|
||||
customize everything about your node without having to dive into the full ESPHome C++
|
||||
API.
|
||||
@ -130,8 +130,8 @@ cycle back to its original state. Similarly you can have a single trigger with m
|
||||
- light.toggle: dehumidifier_indicator_light
|
||||
|
||||
|
||||
As a last example, let's make our dehumidifier smart: Let's make it turn on automatically when the humidity a sensor
|
||||
reports is above 65% and make it turn off again when it reaches 50%
|
||||
As a last example, let's make our dehumidifier smart: Let's make it turn on automatically when the humidity reported by a sensor
|
||||
is above 65%, and make it turn off again when it falls below 50%:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -149,11 +149,11 @@ reports is above 65% and make it turn off again when it reaches 50%
|
||||
temperature:
|
||||
name: "Living Room Temperature"
|
||||
|
||||
That's a lot of indentation 😉 ``on_value_range`` is a special trigger for sensors that triggers when the value output
|
||||
That's a lot of indentation 😉 ``on_value_range`` is a special trigger for sensors that trigger when the value output
|
||||
of the sensor is within a certain range. In the first example, this range is defined as "any value above or including
|
||||
65.0", and the second one refers to once the humidity reaches 50% or below.
|
||||
|
||||
Now that concludes the introduction into automations in ESPHome. They're a powerful tool to automate almost
|
||||
Now that concludes the introduction to automations in ESPHome. They're a powerful tool to automate almost
|
||||
everything on your device with an easy-to-use syntax. For the cases where the "pure" YAML automations don't work,
|
||||
ESPHome has another extremely powerful tool to offer: Templates.
|
||||
|
||||
@ -183,7 +183,8 @@ first:
|
||||
}
|
||||
|
||||
What's happening here? First, we define a binary sensor (with the id ``top_end_stop``) and then a
|
||||
:doc:`template cover </components/cover/template>`. The *state* of the template cover is
|
||||
:doc:`template cover </components/cover/template>`. (If you're new to Home Assistant, a 'cover' is
|
||||
something like a window blind, a roller shutter, or a garage door.) The *state* of the template cover is
|
||||
controlled by a template, or "lambda". In lambdas you're effectively writing C++ code and therefore the
|
||||
name lambda is used instead of Home Assistant's "template" lingo to avoid confusion. But before you go
|
||||
shy away from using lambdas because you just hear C++ and think oh noes, I'm not going down *that* road:
|
||||
@ -382,7 +383,7 @@ All Conditions
|
||||
- :ref:`script.is_running <script-is_running_condition>`
|
||||
- :ref:`sun.is_above_horizon / sun.is_below_horizon <sun-is_above_below_horizon-condition>`
|
||||
- :ref:`text_sensor.state <text_sensor-state_condition>`
|
||||
- :ref:`light.is_on <binary_sensor-is_on_condition>` / :ref:`light.is_off <light-is_off_condition>`
|
||||
- :ref:`light.is_on <light-is_on_condition>` / :ref:`light.is_off <light-is_off_condition>`
|
||||
|
||||
All Lambda Calls
|
||||
----------------
|
||||
@ -545,7 +546,7 @@ Configuration options:
|
||||
---------------------
|
||||
|
||||
This action allows your automations to wait until a condition evaluates to true. (So this is just
|
||||
a shorthand way of writing a while action with empty then block)
|
||||
a shorthand way of writing a ``while`` action with an empty ``then`` block.)
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
@ -631,7 +632,7 @@ execute the script with a single call.
|
||||
----------------------
|
||||
|
||||
This action allows you to stop a given script during execution. If the
|
||||
script is not running, does nothing.
|
||||
script is not running, it does nothing.
|
||||
Please note this is only useful right now if your script contains a ``delay`` action.
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -681,7 +682,7 @@ are running, this will block until all of them have terminated.
|
||||
-------------------------------
|
||||
|
||||
This :ref:`condition <config-condition>` allows you to check if a given script is running.
|
||||
Please note that multiple scripts can be running concurrently, this condition only tells
|
||||
Please note that multiple scripts can be running concurrently. This condition only tells
|
||||
you if at least one script of the given type is running, not how many.
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -725,10 +726,10 @@ Configuration variables:
|
||||
``interval``
|
||||
------------
|
||||
|
||||
This component allows you to run actions periodically with a fixed interval.
|
||||
This component allows you to run actions at fixed time intervals.
|
||||
For example if you want to toggle a switch every minute, you can use this component.
|
||||
Please note that this certain cases are also possible with the :ref:`time.on_time <time-on_time>`
|
||||
trigger, but this one is more light-weight and user-friendly.
|
||||
Please note that it's possible to achieve the same thing with the :ref:`time.on_time <time-on_time>`
|
||||
trigger, but this technique is more light-weight and user-friendly.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
|
@ -22,7 +22,7 @@ Contributing to ESPHome-Docs
|
||||
:width: 60.0%
|
||||
|
||||
One of the areas of ESPHome that can always be improved is the documentation.
|
||||
If you see an issue somewhere, or spelling mistakes or if you want to share your awesome
|
||||
If you see an issue somewhere, a spelling mistakes or if you want to share your awesome
|
||||
setup, please feel free to submit a pull request.
|
||||
|
||||
The ESPHome documentation is built using `sphinx <http://www.sphinx-doc.org/>`__ and uses
|
||||
@ -31,7 +31,7 @@ The ESPHome documentation is built using `sphinx <http://www.sphinx-doc.org/>`__
|
||||
Syntax
|
||||
******
|
||||
|
||||
In my opinion, markdown would have been the much better choice in hindsight, but at the time
|
||||
In my opinion, Markdown would have been the much better choice in hindsight, but at the time
|
||||
I was setting up the documentation good doxygen integration was key to me. Anyway, here's a quick
|
||||
RST primer:
|
||||
|
||||
@ -138,7 +138,7 @@ RST primer:
|
||||
|
||||
All images in the documentation need to be as small as possible to ensure
|
||||
fast page load times. For normal figures the maximum size should be at most
|
||||
about 1000x800px or so. Additionally, please use online tools like
|
||||
about 1000x800 px or so. Additionally, please use online tools like
|
||||
https://tinypng.com/ or https://tinyjpg.com/ to further compress images.
|
||||
|
||||
- **Notes and warnings**: You can create simple notes and warnings using the ``note`` and ``warning``
|
||||
@ -173,29 +173,29 @@ RST primer:
|
||||
*This is italicized.* (A weird word...)
|
||||
**This is very important.**
|
||||
|
||||
- **Ordered and unordered list**: The syntax for lists in RST is more or less the same as in markdown:
|
||||
- **Ordered and unordered list**: The syntax for lists in RST is more or less the same as in Markdown:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
- Unordered Item
|
||||
- Unordered item
|
||||
|
||||
- Unordered Sub-Item
|
||||
- Unordered sub-item
|
||||
|
||||
- Item with a very long text so that it does not fully fit in a single line and
|
||||
must be split up into multiple lines.
|
||||
|
||||
1. Ordered Item #1
|
||||
2. Ordered Item #2
|
||||
1. Ordered item #1
|
||||
2. Ordered item #2
|
||||
|
||||
- Unordered Item
|
||||
- Unordered item
|
||||
|
||||
- Unordered Sub-Item
|
||||
- Unordered sub-item
|
||||
|
||||
- Item with a very long text so that it does not fully fit in a single line and
|
||||
must be split up into multiple lines.
|
||||
|
||||
1. Ordered Item #1
|
||||
2. Ordered Item #2
|
||||
1. Ordered item #1
|
||||
2. Ordered item #2
|
||||
|
||||
- **imgtable**: ESPHome uses a custom RST directive to show the table on the front page (see
|
||||
`index.rst <https://github.com/esphome/esphome-docs/blob/current/index.rst>`__).
|
||||
@ -218,7 +218,7 @@ Build
|
||||
|
||||
.. note::
|
||||
|
||||
The easiest way is to use the `esphome-docs docker image <https://hub.docker.com/r/esphome/esphome-docs/>`__:
|
||||
The easiest way is to use the `esphome-docs Docker image <https://hub.docker.com/r/esphome/esphome-docs/>`__:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -228,7 +228,7 @@ Build
|
||||
|
||||
This way, you don't have to install the dependencies to build the documentation.
|
||||
|
||||
To check your documentation changes locally, you first need install sphinx (with **Python 3**).
|
||||
To check your documentation changes locally, you first need install Sphinx (with **Python 3**).
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -284,7 +284,7 @@ Now you can open esphome in your IDE of choice (mine is CLion) with the platform
|
||||
addons (see platformio docs for more info). Then develop the new feature with the
|
||||
guidelines below.
|
||||
|
||||
All PRs are automatically checked for some basic formatting/code mistakes with travis.
|
||||
All PRs are automatically checked for some basic formatting/code mistakes with Travis.
|
||||
These checks *must* pass for your PR to be mergable.
|
||||
|
||||
Setting Up Git Environment
|
||||
@ -355,10 +355,10 @@ This is a guide to contributing to the ESPHome codebase. ESPHome uses two langua
|
||||
Python and C++.
|
||||
|
||||
The user configuration is read, validated and transformed into a custom firmware
|
||||
with the python side of the firmware.
|
||||
with the Python side of the firmware.
|
||||
|
||||
The C++ codebase is what's actually running on the ESP and called the "runtime". This part of
|
||||
the codebase should first set up the communication interface to a sensor/component/etc and
|
||||
the codebase should first set up the communication interface to a sensor/component/etc. and
|
||||
communicate with the ESPHome core via the defined interfaces (like Sensor, BinarySensor, Switch).
|
||||
|
||||
1. Directory Structure
|
||||
@ -389,7 +389,7 @@ like this:
|
||||
│ ...
|
||||
|
||||
As you can see, all components are in the "components" folder. Each component is in its own
|
||||
subfolder which contains the python code (.py) and the C++ code (.h and .cpp).
|
||||
subfolder which contains the Python code (.py) and the C++ code (.h and .cpp).
|
||||
|
||||
Suppose the user types in the following:
|
||||
|
||||
@ -425,7 +425,7 @@ The first thing ESPHome does is read and validate the user config. For this ESPH
|
||||
"config validation" mechanism. Each component defines a config schema that is validated against
|
||||
the user config.
|
||||
|
||||
To do this, all ESPHome python modules that can be configured by the user have a special field
|
||||
To do this, all ESPHome Python modules that can be configured by the user have a special field
|
||||
called ``CONFIG_SCHEMA``. An example of such a schema is shown below:
|
||||
|
||||
.. code-block:: python
|
||||
@ -456,7 +456,7 @@ A few point on validation:
|
||||
3. Code Generation
|
||||
******************
|
||||
|
||||
After the user input has been successfully validated, the last step of the python codebase
|
||||
After the user input has been successfully validated, the last step of the Python codebase
|
||||
is called: Code generation.
|
||||
|
||||
As you may know, ESPHome converts the user's configuration into C++ code (you can see the generated
|
||||
@ -497,7 +497,7 @@ If you do not call "add" a piece of code explicitly, it will not be added to the
|
||||
4. Runtime
|
||||
**********
|
||||
|
||||
Okay, the python part of the codebase is now complete - now let's talk about the C++ part of
|
||||
Okay, the Python part of the codebase is now complete - now let's talk about the C++ part of
|
||||
creating a new integration.
|
||||
|
||||
The two major parts of any integration roughly are:
|
||||
@ -507,7 +507,7 @@ The two major parts of any integration roughly are:
|
||||
|
||||
When you create a new integration, your new component will inherit from :apiclass:`Component`.
|
||||
That class has a special ``setup()`` method that will be called once to set up the component -
|
||||
at the time the ``setup()`` method is called, all the setters generated by the python codebase
|
||||
at the time the ``setup()`` method is called, all the setters generated by the Python codebase
|
||||
have already run and the all fields are set for your class.
|
||||
|
||||
The ``setup()`` method should set up the communication interface for the component and check
|
||||
@ -533,7 +533,7 @@ Finally, your component should have a ``dump_config`` method that prints the use
|
||||
This serves as documentation for some of ESPHome's internals and is not necessarily part of the
|
||||
development guide.
|
||||
|
||||
All python modules have some magic symbols that will automatically be loaded by the ESPHome
|
||||
All Python modules have some magic symbols that will automatically be loaded by the ESPHome
|
||||
loader. These are:
|
||||
|
||||
- ``CONFIG_SCHEMA``: The configuration schema to validate the user config against.
|
||||
|
@ -10,7 +10,7 @@ Tips for using ESPHome
|
||||
|
||||
1. ESPHome supports (most of) `Home Assistant's YAML configuration directives
|
||||
<https://www.home-assistant.io/docs/configuration/splitting_configuration/>`__ like
|
||||
``!include``, ``!secret``. So you can store all your secret WiFi passwords and so on
|
||||
``!include`` and ``!secret``. So you can store all your secret WiFi passwords and so on
|
||||
in a file called ``secrets.yaml`` within the directory where the configuration file is.
|
||||
|
||||
For even more configuration templating, take a look at :ref:`config-substitutions`.
|
||||
@ -31,7 +31,7 @@ Tips for using ESPHome
|
||||
possible to edit anything outside of the ``AUTO GENERATED CODE BEGIN/END`` lines for creating
|
||||
:doc:`custom sensors </components/sensor/custom>`.
|
||||
|
||||
5. You can view the full command line interface options here: :doc:`/guides/cli`
|
||||
5. You can view the full list of command line interface options here: :doc:`/guides/cli`
|
||||
|
||||
6. Use :ref:`substitutions <config-substitutions>` to reduce repetition in your configuration files.
|
||||
|
||||
@ -83,8 +83,8 @@ Select the firmware binary and finally press "Flash ESP".
|
||||
are connected correctly if flashing using a USB to UART bridge. For some devices you need to
|
||||
keep pressing the BOOT button until flashing has begun (ie. Geekcreit DOIT ESP32 DEVKIT V1).
|
||||
|
||||
Help! Something's not working!1!
|
||||
--------------------------------
|
||||
Help! Something's not working!!
|
||||
-------------------------------
|
||||
|
||||
That's no good. Here are some steps that resolve some problems:
|
||||
|
||||
@ -103,7 +103,7 @@ I can using my own hardware, I don't own every single device type and mostly onl
|
||||
system. When doing some changes in the core, it can quickly happen that something somewhere breaks. Issue reports are a
|
||||
great way for me to track and (hopefully) fix issues, so thank you!
|
||||
|
||||
For me to fix the issue the quickest, there are some things that would be really helpful:
|
||||
For me to fix the issue quickly, there are some things that would be really helpful:
|
||||
|
||||
1. **Just writing "X doesn't work" or "X gives bug" is not helpful!!!** Seriously, how do you expect
|
||||
help given just that information?
|
||||
@ -180,7 +180,7 @@ The latest dev docs are here: `next.esphome.io <https://next.esphome.io/>`__
|
||||
Does ESPHome support [this device/feature]?
|
||||
-------------------------------------------
|
||||
|
||||
If it's not in :doc:`the docs </index>`, it's probably sadly not
|
||||
If it's not in :doc:`the docs </index>`, it's probably not
|
||||
supported. However, I'm always trying to add support for new features, so feel free to create a feature
|
||||
request in the `ESPHome feature request tracker <https://github.com/esphome/feature-requests>`__. Thanks!
|
||||
|
||||
@ -211,9 +211,9 @@ Some steps that can help with the issue:
|
||||
configuration (also sometimes helps with non-hidden networks)
|
||||
- Give your ESP a :ref:`static IP <wifi-manual_ip>`.
|
||||
- Set the ``power_save_mode`` to ``light`` in the ``wifi:`` config (only helps in some cases,
|
||||
in other it can make things works). See :ref:`wifi-power_save_mode`.
|
||||
- The issue seems to be happen with cheap boards more frequently. Especially the "cheap" NodeMCU
|
||||
boards from eBay sometimes have quite bad antennas.
|
||||
in other it can make things worse). See :ref:`wifi-power_save_mode`.
|
||||
- The issue seems to happen with cheap boards more frequently. Especially the "cheap" NodeMCU
|
||||
boards from eBay which sometimes have quite bad antennas.
|
||||
|
||||
Docker Reference
|
||||
----------------
|
||||
@ -280,6 +280,10 @@ And a docker compose file looks like this:
|
||||
1. Enable Avahi on both subnets.
|
||||
2. Enable UDP traffic from ESPHome node's subnet to 224.0.0.251/32 on port 5353.
|
||||
|
||||
Alternatively, you can make esphome use ICMP pings to check the status of the device
|
||||
with the Hass.io Addon ``"status_use_ping": true,`` option or with docker ``-e ESPHOME_DASHBOARD_USE_PING=true``
|
||||
See also https://github.com/esphome/issues/issues/641#issuecomment-534156628.
|
||||
|
||||
Can Configuration Files Be Recovered From The Device?
|
||||
-----------------------------------------------------
|
||||
|
||||
|
@ -5,7 +5,7 @@ Getting Started with ESPHome
|
||||
:description: Getting Started guide for installing ESPHome using the command line and creating a basic configuration.
|
||||
:image: console.png
|
||||
|
||||
ESPHome is the perfect solution for creating custom firmwares for
|
||||
ESPHome is the perfect solution for creating custom firmware for
|
||||
your ESP8266/ESP32 boards. In this guide we’ll go through how to setup a
|
||||
basic “node” in a few simple steps.
|
||||
|
||||
@ -29,7 +29,7 @@ an RPi, please install ESPHome through ``pip`` or use :doc:`the Hass.io add-on <
|
||||
|
||||
docker pull esphome/esphome
|
||||
|
||||
Creating A Project
|
||||
Creating a Project
|
||||
------------------
|
||||
|
||||
Now let’s setup a configuration file. Fortunately, ESPHome has a
|
||||
@ -71,7 +71,7 @@ to translate pin numbers for you based on the board. For example in the
|
||||
above configuration, if using a NodeMCU board, you could have just as
|
||||
well set ``D1`` as the ``pin:`` option.
|
||||
|
||||
First Uploading
|
||||
First uploading
|
||||
---------------
|
||||
|
||||
Now you can go ahead and add some more components. Once you feel like
|
||||
@ -97,7 +97,7 @@ to your docker command to map a local USB device.
|
||||
docker run --rm -v "${PWD}":/config --device=/dev/ttyUSB0 -it esphome/esphome livingroom.yaml run
|
||||
|
||||
Now when you go to the Home Assistant "Integrations" screen (under "Configuration" panel), you
|
||||
should see the ESPHome device show up in the discovered section (can take up to 5 minutes).
|
||||
should see the ESPHome device show up in the discovered section (although this can take up to 5 minutes).
|
||||
Alternatively, you can manually add the device by clicking "CONFIGURE" on the ESPHome integration
|
||||
and entering "<NODE_NAME>.local" as the host.
|
||||
|
||||
@ -112,7 +112,7 @@ Adding A Binary Sensor
|
||||
----------------------
|
||||
|
||||
Next, we’re going to add a very simple binary sensor that periodically
|
||||
checks a GPIO pin whether it’s pulled high or low - the :doc:`GPIO Binary
|
||||
checks if a particular GPIO pin is pulled high or low - the :doc:`GPIO Binary
|
||||
Sensor </components/binary_sensor/gpio>`.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
@ -5,14 +5,14 @@ Getting Started with ESPHome through Hass.io
|
||||
:description: Getting Started guide for installing ESPHome as a Hass.io Add-on and creating a basic configuration.
|
||||
:image: home-assistant.png
|
||||
|
||||
ESPHome is the perfect solution for creating custom firmwares for
|
||||
ESPHome is the perfect solution for creating custom firmware for
|
||||
your ESP8266/ESP32 boards. In this guide we’ll go through how to setup a
|
||||
basic "node" by use of the Hass.io add-on.
|
||||
|
||||
But first, here's a very quick introduction of how ESPHome works:
|
||||
ESPHome is a *tool* which reads in YAML configuration files (just like Home Assistant)
|
||||
and creates custom firmwares. The tool also has many helpers that simplify flashing devices
|
||||
and aims to make managing your ESP boards as simple as possible. Once you have added devices
|
||||
But first, here's a very quick introduction to how ESPHome works:
|
||||
ESPHome is a *tool* which reads in a YAML configuration file (just like Home Assistant)
|
||||
and creates a custom firmware binary. The tool also has many helpers that simplify flashing devices (uploading the new binary file)
|
||||
and aim to make managing your ESP boards as simple as possible. Once you have added devices
|
||||
or sensors in ESPHome's configuration, they will even automatically show up in Home
|
||||
Assistant's UI.
|
||||
|
||||
@ -85,7 +85,7 @@ Adding some (basic) features
|
||||
----------------------------
|
||||
|
||||
So now you should have a file called ``/config/esphome/livingroom.yaml`` (or similar).
|
||||
Go open that file in and add a :doc:`simple GPIO switch </components/switch/gpio>`
|
||||
Go open that file (in any text editor) and add a :doc:`simple GPIO switch </components/switch/gpio>`
|
||||
to the configuration like this:
|
||||
|
||||
.. code-block:: yaml
|
||||
@ -99,7 +99,7 @@ In above example, we're simply adding a switch that's called "Living Room Dehumi
|
||||
anything really, for example lights) and is connected to the pin ``GPIO5``.
|
||||
|
||||
Now when you go to the Home Assistant "Integrations" screen (under "Configuration" panel), you
|
||||
should see the ESPHome device show up in the discovered section (can take up to 5 minutes).
|
||||
should see the ESPHome device show up in the discovered section (although this can take up to 5 minutes).
|
||||
Alternatively, you can manually add the device by clicking "CONFIGURE" on the ESPHome integration
|
||||
and entering "<NODE_NAME>.local" as the host.
|
||||
|
||||
@ -115,7 +115,7 @@ Adding A Binary Sensor
|
||||
----------------------
|
||||
|
||||
Next, we’re going to add a very simple binary sensor that periodically
|
||||
checks a GPIO pin whether it’s pulled high or low - the :doc:`GPIO Binary
|
||||
checks a GPIO pin to see whether it’s pulled high or low - the :doc:`GPIO Binary
|
||||
Sensor </components/binary_sensor/gpio>`.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
@ -8,8 +8,8 @@ Migrating from Sonoff Tasmota
|
||||
Migrating from previous Sonoff Tasmota setups is very easy. You just need to have
|
||||
ESPHome create a binary for you and then upload that in the Tasmota web interface.
|
||||
|
||||
Getting Binary
|
||||
--------------
|
||||
Getting the Binary
|
||||
------------------
|
||||
|
||||
First follow the guides for the :ref:`different supported devices <devices>` and create a configuration
|
||||
file. Then, generate and download the binary:
|
||||
@ -21,13 +21,13 @@ file. Then, generate and download the binary:
|
||||
|
||||
- **Using the command line**: run ``esphome livingroom.yaml compile`` (replacing
|
||||
``livingroom.yaml`` with your configuration file of course) and navigate to the
|
||||
``<NODE_NAME>/.pioenvs/<NODE_NAME>/`` folder. There you will find a ``firmware.bin`` file,
|
||||
this is the binary you will upload.
|
||||
``<NODE_NAME>/.pioenvs/<NODE_NAME>/`` folder. There you will find a ``firmware.bin`` file.
|
||||
This is the binary that you will upload.
|
||||
|
||||
Uploading Binary
|
||||
----------------
|
||||
Uploading the Binary
|
||||
--------------------
|
||||
|
||||
To upload the binary, navigate to the tasmota web interface and enter the
|
||||
To upload the binary, navigate to the Tasmota web interface and enter the
|
||||
"Firmware Upgrade" section.
|
||||
|
||||
.. figure:: images/tasmota_main.png
|
||||
@ -41,7 +41,7 @@ In the "Upgrade by file upload" section, choose the binary you previously downlo
|
||||
:width: 60.0%
|
||||
|
||||
If everything succeeds, you will see an "Upload Successful" message and ESPHome
|
||||
will connect to the configured WiFi network 🎉
|
||||
will connect to the WiFi network configured in your .yaml file. 🎉
|
||||
|
||||
.. figure:: images/tasmota_upload.png
|
||||
:align: center
|
||||
|
@ -40,6 +40,7 @@ You guys are awesome!
|
||||
|
||||
- Anders
|
||||
- Andrea Donno
|
||||
- Andrew Tierney
|
||||
- Book of the Future
|
||||
- Christer Frostmo
|
||||
- Clayton
|
||||
@ -47,25 +48,30 @@ You guys are awesome!
|
||||
- Dattas Moonchaser
|
||||
- David Padbury
|
||||
- Dennis Münchgesang
|
||||
- Dmitriy Khazansky
|
||||
- DrZzs
|
||||
- fabi
|
||||
- Franck Nijhof
|
||||
- Intermittent Technology
|
||||
- Jung Ervin
|
||||
- Kenvase
|
||||
- Lazar Obradovic
|
||||
- Magnus Overli
|
||||
- Nick Rout
|
||||
- Niklas Fondberg
|
||||
- Nigel Michki
|
||||
- Paul Krischer
|
||||
- Paul Morley
|
||||
- Philippe Penochet
|
||||
- Radu Tizu
|
||||
- Roman Priesol
|
||||
- Ryan
|
||||
- LMR
|
||||
- Ryan Bahm
|
||||
- Ryan Nazaretian
|
||||
- Sam Absalom
|
||||
- Saulo Onze
|
||||
- Starwolf73
|
||||
- Vincèn
|
||||
- Thomas Hermine
|
||||
- Vincèn PUJOL
|
||||
- Wojciech Bederski
|
||||
- Yonatan Adest
|
||||
- Zoltán Jáki
|
||||
@ -81,7 +87,7 @@ that have made it into the `ESPHome organization's <https://github.com/esphome>`
|
||||
Author & Main Developer
|
||||
***********************
|
||||
|
||||
- `Otto Winter (@OttoWinter) <https://github.com/OttoWinter>`__ - 1836 contributions
|
||||
- `Otto Winter (@OttoWinter) <https://github.com/OttoWinter>`__ - 1886 contributions
|
||||
|
||||
Contributors
|
||||
************
|
||||
@ -92,6 +98,8 @@ Contributors
|
||||
- `Pavel Pletenev (@ASMfreaK) <https://github.com/ASMfreaK>`__ - 1 contribution
|
||||
- `Aalian Khan (@AalianKhan) <https://github.com/AalianKhan>`__ - 4 contributions
|
||||
- `Alexandre Danault (@AlexDanault) <https://github.com/AlexDanault>`__ - 1 contribution
|
||||
- `Alex Mekkering (@AlexMekkering) <https://github.com/AlexMekkering>`__ - 1 contribution
|
||||
- `Nikolay Vasilchuk (@Anonym-tsk) <https://github.com/Anonym-tsk>`__ - 4 contributions
|
||||
- `Rutger Nijhuis (@BananaPukeh) <https://github.com/BananaPukeh>`__ - 1 contribution
|
||||
- `Bierchermuesli (@Bierchermuesli) <https://github.com/Bierchermuesli>`__ - 1 contribution
|
||||
- `David De Sloovere (@DavidDeSloovere) <https://github.com/DavidDeSloovere>`__ - 3 contributions
|
||||
@ -99,6 +107,7 @@ Contributors
|
||||
- `EmmanuelLM (@EmmanuelLM) <https://github.com/EmmanuelLM>`__ - 1 contribution
|
||||
- `FrengerH (@FrengerH) <https://github.com/FrengerH>`__ - 2 contributions
|
||||
- `Jimmy Hedman (@HeMan) <https://github.com/HeMan>`__ - 5 contributions
|
||||
- `Lorenzo Ortiz (@Infinitte) <https://github.com/Infinitte>`__ - 1 contribution
|
||||
- `Johboh (@Johboh) <https://github.com/Johboh>`__ - 2 contributions
|
||||
- `Fredrik Lindqvist (@Landrash) <https://github.com/Landrash>`__ - 1 contribution
|
||||
- `Marco (@Melkor82) <https://github.com/Melkor82>`__ - 2 contributions
|
||||
@ -107,6 +116,7 @@ Contributors
|
||||
- `Jérôme W. (@RomRider) <https://github.com/RomRider>`__ - 1 contribution
|
||||
- `Teemu Mikkonen (@T3m3z) <https://github.com/T3m3z>`__ - 2 contributions
|
||||
- `Taigar2015 (@Taigar2015) <https://github.com/Taigar2015>`__ - 1 contribution
|
||||
- `Thomas Eckerstorfer (@TheEggi) <https://github.com/TheEggi>`__ - 1 contribution
|
||||
- `Spencer Hachmeister (@TheHackmeister) <https://github.com/TheHackmeister>`__ - 1 contribution
|
||||
- `TheJulianJES (@TheJulianJES) <https://github.com/TheJulianJES>`__ - 2 contributions
|
||||
- `Florian Gareis (@TheZoker) <https://github.com/TheZoker>`__ - 7 contributions
|
||||
@ -119,13 +129,14 @@ Contributors
|
||||
- `balk77 (@balk77) <https://github.com/balk77>`__ - 2 contributions
|
||||
- `Paulus Schoutsen (@balloob) <https://github.com/balloob>`__ - 1 contribution
|
||||
- `Patrik Hermansson (@bphermansson) <https://github.com/bphermansson>`__ - 1 contribution
|
||||
- `Brandon Davidson (@brandond) <https://github.com/brandond>`__ - 13 contributions
|
||||
- `Brandon Davidson (@brandond) <https://github.com/brandond>`__ - 14 contributions
|
||||
- `brianrjones69 (@brianrjones69) <https://github.com/brianrjones69>`__ - 1 contribution
|
||||
- `bwente (@bwente) <https://github.com/bwente>`__ - 1 contribution
|
||||
- `chris-jennings (@chris-jennings) <https://github.com/chris-jennings>`__ - 1 contribution
|
||||
- `James Crook (@cooljimy84) <https://github.com/cooljimy84>`__ - 1 contribution
|
||||
- `Corban Mailloux (@corbanmailloux) <https://github.com/corbanmailloux>`__ - 5 contributions
|
||||
- `cryptelli (@cryptelli) <https://github.com/cryptelli>`__ - 2 contributions
|
||||
- `Dave Richer (@davericher) <https://github.com/davericher>`__ - 2 contributions
|
||||
- `Dave Richer (@davericher) <https://github.com/davericher>`__ - 3 contributions
|
||||
- `Mario Di Raimondo (@diraimondo) <https://github.com/diraimondo>`__ - 1 contribution
|
||||
- `Dirk Jahnke (@dirkj) <https://github.com/dirkj>`__ - 1 contribution
|
||||
- `Jiang Sheng (@doskoi) <https://github.com/doskoi>`__ - 1 contribution
|
||||
@ -133,14 +144,20 @@ Contributors
|
||||
- `Drew Perttula (@drewp) <https://github.com/drewp>`__ - 1 contribution
|
||||
- `Anders Persson (@emwap) <https://github.com/emwap>`__ - 4 contributions
|
||||
- `Nico Weichbrodt (@envy) <https://github.com/envy>`__ - 1 contribution
|
||||
- `Evan Petousis (@epetousis) <https://github.com/epetousis>`__ - 1 contribution
|
||||
- `erazor666 (@erazor666) <https://github.com/erazor666>`__ - 1 contribution
|
||||
- `Eric Hiller (@erichiller) <https://github.com/erichiller>`__ - 1 contribution
|
||||
- `escoand (@escoand) <https://github.com/escoand>`__ - 6 contributions
|
||||
- `Malte Franken (@exxamalte) <https://github.com/exxamalte>`__ - 2 contributions
|
||||
- `Fabian Affolter (@fabaff) <https://github.com/fabaff>`__ - 10 contributions
|
||||
- `Fabian Affolter (@fabaff) <https://github.com/fabaff>`__ - 13 contributions
|
||||
- `C W (@fake-name) <https://github.com/fake-name>`__ - 1 contribution
|
||||
- `Fritz Mueller (@fritzm) <https://github.com/fritzm>`__ - 1 contribution
|
||||
- `gitolicious (@gitolicious) <https://github.com/gitolicious>`__ - 11 contributions
|
||||
- `The Gitter Badger (@gitter-badger) <https://github.com/gitter-badger>`__ - 1 contribution
|
||||
- `Guillermo Ruffino (@glmnet) <https://github.com/glmnet>`__ - 6 contributions
|
||||
- `Guillermo Ruffino (@glmnet) <https://github.com/glmnet>`__ - 13 contributions
|
||||
- `Giorgos Logiotatidis (@glogiotatidis) <https://github.com/glogiotatidis>`__ - 1 contribution
|
||||
- `Antoine GRÉA (@grea09) <https://github.com/grea09>`__ - 3 contributions
|
||||
- `guptamp (@guptamp) <https://github.com/guptamp>`__ - 1 contribution
|
||||
- `Boris Hajduk (@hajdbo) <https://github.com/hajdbo>`__ - 4 contributions
|
||||
- `Ivan Kravets (@ivankravets) <https://github.com/ivankravets>`__ - 1 contribution
|
||||
- `Jan Pieper (@janpieper) <https://github.com/janpieper>`__ - 2 contributions
|
||||
@ -149,8 +166,13 @@ Contributors
|
||||
- `Joshua Dadswell (@jdads1) <https://github.com/jdads1>`__ - 1 contribution
|
||||
- `jeff-h (@jeff-h) <https://github.com/jeff-h>`__ - 1 contribution
|
||||
- `Jesse Hills (@jesserockz) <https://github.com/jesserockz>`__ - 7 contributions
|
||||
- `Jonathan Jefferies (@jjok) <https://github.com/jjok>`__ - 1 contribution
|
||||
- `John Erik Halse (@johnerikhalse) <https://github.com/johnerikhalse>`__ - 1 contribution
|
||||
- `JonnyaiR (@jonnyair) <https://github.com/jonnyair>`__ - 2 contributions
|
||||
- `junnikokuki (@junnikokuki) <https://github.com/junnikokuki>`__ - 1 contribution
|
||||
- `Jasper van der Neut - Stulen (@jvanderneutstulen) <https://github.com/jvanderneutstulen>`__ - 1 contribution
|
||||
- `Jack Wozny (@jwozny) <https://github.com/jwozny>`__ - 1 contribution
|
||||
- `Robert Kiss (@kepten) <https://github.com/kepten>`__ - 1 contribution
|
||||
- `Kevin O'Rourke (@kevinior) <https://github.com/kevinior>`__ - 1 contribution
|
||||
- `kimonm (@kimonm) <https://github.com/kimonm>`__ - 1 contribution
|
||||
- `Ken Davidson (@kwdavidson) <https://github.com/kwdavidson>`__ - 1 contribution
|
||||
@ -158,19 +180,23 @@ Contributors
|
||||
- `Lazar Obradovic (@lobradov) <https://github.com/lobradov>`__ - 3 contributions
|
||||
- `Lewis Juggins (@lwis) <https://github.com/lwis>`__ - 1 contribution
|
||||
- `Marc-Antoine Courteau (@macourteau) <https://github.com/macourteau>`__ - 1 contribution
|
||||
- `Magnus (@magnusja) <https://github.com/magnusja>`__ - 1 contribution
|
||||
- `Magnus Øverli (@magnusoverli) <https://github.com/magnusoverli>`__ - 1 contribution
|
||||
- `Major Péter (@majorpeter) <https://github.com/majorpeter>`__ - 1 contribution
|
||||
- `MeIchthys (@meichthys) <https://github.com/meichthys>`__ - 1 contribution
|
||||
- `meijerwynand (@meijerwynand) <https://github.com/meijerwynand>`__ - 2 contributions
|
||||
- `Pauline Middelink (@middelink) <https://github.com/middelink>`__ - 2 contributions
|
||||
- `mjoshd (@mjoshd) <https://github.com/mjoshd>`__ - 2 contributions
|
||||
- `Matt N. (@mnoorenberghe) <https://github.com/mnoorenberghe>`__ - 1 contribution
|
||||
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__ - 5 contributions
|
||||
- `mtl010957 (@mtl010957) <https://github.com/mtl010957>`__ - 7 contributions
|
||||
- `Michiel van Turnhout (@mvturnho) <https://github.com/mvturnho>`__ - 10 contributions
|
||||
- `Niels Ulrik Andersen (@myplacedk) <https://github.com/myplacedk>`__ - 1 contribution
|
||||
- `Kevin Uhlir (@n0bel) <https://github.com/n0bel>`__ - 1 contribution
|
||||
- `Alex (@nnmalex) <https://github.com/nnmalex>`__ - 1 contribution
|
||||
- `ffabi (@norges) <https://github.com/norges>`__ - 2 contributions
|
||||
- `Greg Johnson (@notgwj) <https://github.com/notgwj>`__ - 1 contribution
|
||||
- `Nuno Sousa (@nunofgs) <https://github.com/nunofgs>`__ - 1 contribution
|
||||
- `Olivér Falvai (@ofalvai) <https://github.com/ofalvai>`__ - 1 contribution
|
||||
- `Oscar Bolmsten (@oscar-b) <https://github.com/oscar-b>`__ - 4 contributions
|
||||
- `Paul Nicholls (@pauln) <https://github.com/pauln>`__ - 1 contribution
|
||||
- `per1234 (@per1234) <https://github.com/per1234>`__ - 2 contributions
|
||||
@ -179,12 +205,14 @@ Contributors
|
||||
- `Marcus Kempe (@plopp) <https://github.com/plopp>`__ - 1 contribution
|
||||
- `DK (@poldim) <https://github.com/poldim>`__ - 1 contribution
|
||||
- `Iván Povedano (@pove) <https://github.com/pove>`__ - 1 contribution
|
||||
- `Peter Stuifzand (@pstuifzand) <https://github.com/pstuifzand>`__ - 1 contribution
|
||||
- `Peter Tatrai (@ptatrai) <https://github.com/ptatrai>`__ - 1 contribution
|
||||
- `Leandro Puerari (@puerari) <https://github.com/puerari>`__ - 1 contribution
|
||||
- `puuu (@puuu) <https://github.com/puuu>`__ - 14 contributions
|
||||
- `Tommy Jonsson (@quazzie) <https://github.com/quazzie>`__ - 1 contribution
|
||||
- `r-jordan (@r-jordan) <https://github.com/r-jordan>`__ - 1 contribution
|
||||
- `Pär Stålberg (@rabbadab) <https://github.com/rabbadab>`__ - 1 contribution
|
||||
- `Florian Ragwitz (@rafl) <https://github.com/rafl>`__ - 1 contribution
|
||||
- `Richard Lewis (@richrd) <https://github.com/richrd>`__ - 2 contributions
|
||||
- `rnauber (@rnauber) <https://github.com/rnauber>`__ - 2 contributions
|
||||
- `Robbie Page (@rorpage) <https://github.com/rorpage>`__ - 1 contribution
|
||||
@ -192,11 +220,16 @@ Contributors
|
||||
- `sethcohn (@sethcohn) <https://github.com/sethcohn>`__ - 1 contribution
|
||||
- `Emanuele Tessore (@setola) <https://github.com/setola>`__ - 1 contribution
|
||||
- `Abdelkader Boudih (@seuros) <https://github.com/seuros>`__ - 1 contribution
|
||||
- `shbatm (@shbatm) <https://github.com/shbatm>`__ - 1 contribution
|
||||
- `sherbang (@sherbang) <https://github.com/sherbang>`__ - 4 contributions
|
||||
- `srg74 (@srg74) <https://github.com/srg74>`__ - 1 contribution
|
||||
- `Andrew Thompson (@thompsa) <https://github.com/thompsa>`__ - 1 contribution
|
||||
- `thubot (@thubot) <https://github.com/thubot>`__ - 1 contribution
|
||||
- `tiagofreire-pt (@tiagofreire-pt) <https://github.com/tiagofreire-pt>`__ - 1 contribution
|
||||
- `tomlut (@tomlut) <https://github.com/tomlut>`__ - 1 contribution
|
||||
- `Felix Eckhofer (@tribut) <https://github.com/tribut>`__ - 1 contribution
|
||||
- `tubalainen (@tubalainen) <https://github.com/tubalainen>`__ - 2 contributions
|
||||
- `Nad (@valordk) <https://github.com/valordk>`__ - 1 contribution
|
||||
- `Xuming Feng (@voicevon) <https://github.com/voicevon>`__ - 2 contributions
|
||||
- `Ian Wells (@wellsi) <https://github.com/wellsi>`__ - 1 contribution
|
||||
- `wutr (@wutr) <https://github.com/wutr>`__ - 1 contribution
|
||||
@ -204,4 +237,4 @@ Contributors
|
||||
- `Vladimir Eremin (@yottatsa) <https://github.com/yottatsa>`__ - 1 contribution
|
||||
- `YuanL.Lee (@yuanl) <https://github.com/yuanl>`__ - 1 contribution
|
||||
|
||||
*This page was last updated Mon Jun 24 20:42:10 2019 UTC.*
|
||||
*This page was last updated Sat Oct 12 12:03:02 2019 UTC.*
|
||||
|
BIN
images/teckin_sb50.jpg
Normal file
BIN
images/teckin_sb50.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
@ -340,6 +340,7 @@ Cookbook
|
||||
Mirabella Genio Bulb, cookbook/mirabella-genio-bulb, cookbook-mirabella-genio-b22-rgbw.jpg
|
||||
Garage Door, cookbook/garage-door, window-open.svg
|
||||
Brilliant / Mirabella Genio Smart Plugs, cookbook/brilliant-mirabella-genio-smart-plugs, cookbook-brilliant-mirabella-genio-smart-plugs.jpg
|
||||
Teckin SB50, cookbook/teckin_sb50, teckin_sb50.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 </guides/contributing>`.
|
||||
|
Loading…
Reference in New Issue
Block a user