From b3d811d5a31809f634f06b08624004bbdaa7e7e7 Mon Sep 17 00:00:00 2001 From: Ben Suffolk Date: Fri, 29 Nov 2019 17:27:26 +0000 Subject: [PATCH] Cookbook for Sonoff Light Switches (#407) * Cookbook for Sonoff Light Switches Cookbook for various Sonoff Light Switch options including Basic, Dual and T1-3 * Removed references to myself All references to I have been removed and re worded into a more generic text * Fixed Formatting issues to Pass Travis Checks * Update cookbook/sonoff-basic-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * Update cookbook/sonoff-dual-light-switch.rst Co-Authored-By: Otto Winter * YAML updates Removed fast_connect, UART swotches from Dual R1, and reference to an issue that no longer exists --- cookbook/sonoff-basic-light-switch.rst | 170 +++++++++++++++++ cookbook/sonoff-dual-light-switch.rst | 251 +++++++++++++++++++++++++ cookbook/sonoff-light-switch.rst | 24 +++ cookbook/sonoff-t1-3.rst | 244 ++++++++++++++++++++++++ images/light_switch.png | Bin 0 -> 10052 bytes images/sonoff_1t_t3.png | Bin 0 -> 15305 bytes index.rst | 1 + 7 files changed, 690 insertions(+) create mode 100644 cookbook/sonoff-basic-light-switch.rst create mode 100644 cookbook/sonoff-dual-light-switch.rst create mode 100644 cookbook/sonoff-light-switch.rst create mode 100644 cookbook/sonoff-t1-3.rst create mode 100644 images/light_switch.png create mode 100644 images/sonoff_1t_t3.png diff --git a/cookbook/sonoff-basic-light-switch.rst b/cookbook/sonoff-basic-light-switch.rst new file mode 100644 index 000000000..b9b0bdb19 --- /dev/null +++ b/cookbook/sonoff-basic-light-switch.rst @@ -0,0 +1,170 @@ +DIY Light switch using a Sonoff Basic +===================================== + +.. seo:: + :description: An example of how to integrate a light switch into Home Assistant using ESPHome + :image: sonoff_light_switch.png + :keywords: Relay, Sonoff Basic, Sonoff Dual Dual R1, Light, HASS, Home Assistant, ESPHome + +.. note:: + + This is a DIY solution, and you will need to have some knowledge of electrical wiring and enough + capabilities to do this work safely. + + The author, and the ESPHome team, take no responsibility for any actions, injuries or outcomes + from following this guide. + + In some countries you may need specific qualifications before you can carry out such work in + a residentaial property. + +Background +---------- + +Moving your entire house to smart lighting can end up being very expense, for instance if you have a +light fitting with 5 lamps in it thats 5 expensive smart bulbs to buy just for one room! Smart bulbs +clearly have some great advantages, dimmable, colour temperature or even full colour changing. What +if all you're after is a cost effective way to turn them on and off? + +The ideal solution would be to reaplce the light switch with one that can be controlled by home +assistant, whilst retaining the ease of use of a standard light that would also continue to work if +the network went down, or home assistant failed etc. + +It turns out Sonoff do exactly this product, it called a T1-UK (other country options available), +however you soon found the touch aspect of them might not 'feel right' and certainly might not get the +approval of other members of your household. However if this solution apeals to you, check out the +:doc:`Cookbook guide for T1/T2/T3` + +The other option to consider is a standard '2 way' light switch (like you might have on an upstairs +/ downstairs control in your house) but using relays for the second switch. For many this will have +the disadvantage that if you remotely changed the light status the switch is then 'upside down'. + +The Solution +------------ + +Use a 'retractive' style light switch. That is one that is spring loaded and so always returns to the +'off' position. It's effectively a push button, that looks like a light switch. Combining this with a +Sonoff Basic gives you the ideal solution for somewhere around £5. Thats much cheaper than buying lots +of expensive smart bulbs, but of course you only get on / off control. + +You will have several potential hurdles to overcome: + +1. The first is that you do need to have a neutral at the location of the Sonoff. Many houses will not have + this as standard at the light switch. + +2. You need enough space to accomodate your Sonoff Basic at your chosen location. + +If you're lucky most of the locations will have plasterboard walls, and you will be able to simply drop a neutral +wire down the inside of the wall to the lights switch (where you locate the Sonoff). + +Also, if you have plasterboard walls, most of the light switch back boxes are the plastic dry lining style boxes. +This can come in useful because if you remove the PCB from the plastic case it actually fits in the back box nicely. + +.. warning:: + + If you plan to take the pcb out of the plastic case you need to make sure its properly insulated, and that the back + box is deep enough to hold the PCB as well as the switch. You should also insulate the PCB, for instance by dropping it + in a heavy duty glue lined heat shrink sleeve. + + **The PCB has mains electricity flowing through it, if you are in any doubt about your capabilities do not attempt to do + this.** + +If you have a light switch in a brick wall, an option might be to place the Sonoff Basic above the light in the ceiling void, +and use the cable that ran from the light to the switch as a low voltage cable to connect the Sonoff GPIO. + +.. warning:: + + If you are going to reuse existing wiring to connect to the GPIO, you must make sure its connected directly to the switch + and does not have mains voltage on it from another circuit. + +Implementation +-------------- + +So having established the pitfalls that you need to overcome lets crack on with making this work. + +Please make sure you have read up about :doc:`the Sonoff Basic and how to flash it with ESPHome `. +As that won't be covered here.Also make sure you know your way around a soldering iron and can find the relevant information +about the location of the GPIO pins on the Sonoff Basic if you need to. + +If you have a Sonoff Basic V1 devices GPOI14 is alredy presented on a pin header on the PCB next to the programing pins. +On the V2 and V3 PCBs, there is a solder pad underneath the PCB that will let you get at this GPIO. + +You have 2 choices when it comes to picking which GPIO to use. GPIO0 or GPIO14. GPIO0 is used by the push button switch on the +the PCB so you will need to locate the right pin on the switch and solder a wire onto it if you're going to use that one. Whichever +one you pick, you will also need to use the ground or 0v pin for the other side of the switch. Once you have soldered your wires +into palce, a handy tip is to add a drop of glue over the wire, a little way away from the solder joint, so give some strain relief +to the joint. + +Now you have a pair of wires from the GPIO and 0v to your retractive switch lets look at the code. + +.. code-block:: yaml + + esphome: + name: my_ls + platform: ESP8266 + board: esp01_1m + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + logger: + + api: + + ota: + + binary_sensor: + - platform: gpio + pin: + number: GPIO14 + mode: INPUT_PULLUP + inverted: True + id: button_1 + on_press: + then: + - light.toggle: light_1 + + - platform: status + name: "My LS Status" + + output: + - platform: gpio + pin: GPIO12 + id: relay_1 + + light: + - platform: binary + name: "My Light" + id: light_1 + output: relay_1 + + status_led: + pin: + number: GPIO13 + inverted: yes + +In the above code block, there is a *secrets.yaml* file so that you have just one place to change wifi +details for all your devices. + +Although not visible day to day, there is also the status LED configured so that it can be used when setting +up / debugging. Also a configured binary sensor to give status incase you want to perform an action / alert +if the light switch disconnects for any reason. + +.. note:: + + If you wante to use a pull cord switch (in a bathroom for instance) that works like a standard switch and + changes state each pull (as opposed to a retractive switch that you press and let go) then you can change + a single line *on_press:* to *on_state:* which will trigger the light toggle everytime the state of the + switch changes. + + If you do this its important that you do not use GPIO0, otherwise if the device reboots and the switch happens + to be in the closed state the Sonoff will boot into flash mode and not work. + + + +See Also +-------- + +- :doc:`/cookbook/sonoff-light-switch` +- :doc:`/guides/automations` +- :doc:`/devices/sonoff_basic` diff --git a/cookbook/sonoff-dual-light-switch.rst b/cookbook/sonoff-dual-light-switch.rst new file mode 100644 index 000000000..37c79a30e --- /dev/null +++ b/cookbook/sonoff-dual-light-switch.rst @@ -0,0 +1,251 @@ +DIY Light switch using a Sonoff Dual +==================================== + +.. seo:: + :description: An example of how to integrate a dual light switch into Home Assistant using ESPHome + :image: sonoff_light_switch.png + :keywords: Relay, Sonoff Dual Dual R1, Light, HASS, Home Assistant, ESPHome + +.. note:: + + This is a DIY solution, and you will need to have some knowledge of electrical wiring and enough + capabilities to do this work safely. + + The author, and the ESPHome team, take no responsibility for any actions, injuries or outcomes + from following this guide. + + In some countries you may need specific qualifications before you can carry out such work in + a residentaial property. + +Please read up on :doc:`/cookbook/sonoff-basic-light-switch` to get the background and principals of +the this project. Its all basically the same, but with a double switch. + +So we will be using GPIO4 and GPIO14 for the two retractive switches, again they will both short to 0v +when the switch is clicked. + +R1 +-- + +The R1 version of the Dual controls the relays via the UART, so the code gets a bit complex here. + +.. code-block:: yaml + + esphome: + name: dual_ls + platform: ESP8266 + board: esp01_1m + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + logger: + baud_rate: 0 + + # Enable Home Assistant API + api: + + ota: + + uart: + tx_pin: GPIO01 + rx_pin: GPIO03 + baud_rate: 19200 + + switch: + - platform: template + id: relay_1 + turn_on_action: + if: + condition: + switch.is_off: relay_2 + then: + - uart.write: [0xA0, 0x04, 0x01, 0xA1] + else: + - uart.write: [0xA0, 0x04, 0x03, 0xA1] + turn_off_action: + if: + condition: + switch.is_off: relay_2 + then: + - uart.write: [0xA0, 0x04, 0x00, 0xA1] + else: + - uart.write: [0xA0, 0x04, 0x02, 0xA1] + optimistic: true + + - platform: template + id: relay_2 + turn_on_action: + if: + condition: + switch.is_off: relay_1 + then: + - uart.write: [0xA0, 0x04, 0x02, 0xA1] + else: + - uart.write: [0xA0, 0x04, 0x03, 0xA1] + turn_off_action: + if: + condition: + switch.is_off: relay_1 + then: + - uart.write: [0xA0, 0x04, 0x00, 0xA1] + else: + - uart.write: [0xA0, 0x04, 0x01, 0xA1] + optimistic: true + + binary_sensor: + - platform: gpio + pin: + number: GPIO4 + mode: INPUT_PULLUP + inverted: True + id: button_1 + on_press: + then: + - light.toggle: light_1 + + - platform: gpio + pin: + number: GPIO14 + mode: INPUT_PULLUP + inverted: True + id: button_2 + on_press: + then: + - light.toggle: light_2 + + - platform: status + name: "Dual LS Status" + + status_led: + pin: + number: GPIO13 + inverted: yes + + output: + - platform: template + type: binary + id: out_1 + write_action: + if: + condition: + light.is_on: light_1 + then: + - switch.turn_on: relay_1 + else: + - switch.turn_off: relay_1 + + - platform: template + type: binary + id: out_2 + write_action: + if: + condition: + light.is_on: light_2 + then: + - switch.turn_on: relay_2 + else: + - switch.turn_off: relay_2 + + light: + - platform: binary + name: "Dual L1" + id: light_1 + output: out_1 + + - platform: binary + name: "Dual L2" + id: light_2 + output: out_2 + + +In the above code block, there is a *secrets.yaml* file so that you have just one place to change wifi +details for all your devices. + +The logger baud_rate: 0 is required to make sure the logged does not send any data over the UART or it would +mess with the relays. + +Although not visible day to day, there is also the status LED configured so that it can be used when setting +up / debugging. Also a configured binary sensor to give status incase you want to perform an action / alert +if the light switch disconnects for any reason. + +R2 +-- + +This one is a lot simpler as it uses real GPIO for its relays. Please note this is untested, but should work! +Its basically the same as the :doc:`T2 ` + +.. code-block:: yaml + + esphome: + name: dual_ls + platform: ESP8266 + board: esp01_1m + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + + logger: + + api: + + ota: + + binary_sensor: + - platform: gpio + pin: + number: GPIO0 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_1 + + - platform: gpio + pin: + number: GPIO14 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_2 + + - platform: status + name: "Dual LS Status" + + output: + - platform: gpio + pin: GPIO12 + id: relay_1 + + - platform: gpio + pin: GPIO5 + id: relay_2 + + light: + - platform: binary + name: "Dual L1" + id: light_1 + output: relay_1 + + - platform: binary + name: "Dual L2" + id: light_2 + output: relay_2 + + status_led: + pin: + number: GPIO13 + inverted: yes + + + +See Also +-------- + +- :doc:`/cookbook/sonoff-light-switch` +- :doc:`/guides/automations` +- :doc:`/devices/sonoff_basic` diff --git a/cookbook/sonoff-light-switch.rst b/cookbook/sonoff-light-switch.rst new file mode 100644 index 000000000..c5e72a171 --- /dev/null +++ b/cookbook/sonoff-light-switch.rst @@ -0,0 +1,24 @@ +Sonoff Light switch options +=========================== + +.. seo:: + :description: A series of options on using Sonoff devices as a light switch within ESPHome + :image: sonoff_light_switch.jpg + :keywords: Relay, Sonoff Basic, Sonoff Dual Dual R1, Light, HASS, Home Assistant, ESPHome + +There are a number of options for using Sonoff Devices as light switches, including purpose built ones +like the T1/2/3 Series + +.. imgtable:: + + Sonoff T1/T2/T3, cookbook/sonoff-T1-3, sonoff_1t_t3.png + Sonoff Basic, cookbook/sonoff-basic-light-switch, sonoff_basic.jpg + Sonoff Dual, cookbook/sonoff-dual-light-switch, sonoff_dual_r2.jpg + +See Also +-------- + +- :doc:`/guides/automations` +- :doc:`/devices/sonoff_basic` + + diff --git a/cookbook/sonoff-t1-3.rst b/cookbook/sonoff-t1-3.rst new file mode 100644 index 000000000..bc2f2d72b --- /dev/null +++ b/cookbook/sonoff-t1-3.rst @@ -0,0 +1,244 @@ +Sonoff T1/T2/T3 UK +================== + +.. seo:: + :description: An example of how to integrate a T1 T2 or T3 Sonoff light switch into Home Assistant + using ESPHome + :image: sonoff_1t_t3.png + :keywords: Relay, Sonoff Basic, Sonoff Dual Dual R1, Light, HASS, Home Assistant, ESPHome + +Please make sure you have read up about :doc:`the Sonoff T1 / T2 / T3 and how to flash it with ESPHome `. + +So lets get straight on with the code + +T1 +-- + +.. code-block:: yaml + + esphome: + name: my_t1 + platform: ESP8266 + board: esp01_1m + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + use_address: xxx.xxx.xxx.xxx + + logger: + + api: + + ota: + + binary_sensor: + - platform: gpio + pin: + number: GPIO0 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_1 + + - platform: status + name: "T1 Status" + + output: + - platform: gpio + pin: GPIO12 + id: relay_1 + + light: + - platform: binary + name: "T1" + id: light_1 + output: relay_1 + + status_led: + pin: + number: GPIO13 + inverted: yes + + +In the above code block, there is a *secrets.yaml* file so that you have just one place to change wifi +details for all your devices. + +The use_address is required because the sonoff T series don't work with mDNS properly. This means that it will +show as off line in the dashboard, and you will need to use the ip address to view the logs or upload new versions +of the firmware. You will also need to manually add the device in integrations by IP address. You will need to +assign a fixed IP in the above configuratino, or use a fixed IP assigned fro your DHCP server. + +See `issue #810 `__ for further details. + + +T2 +-- + +.. code-block:: yaml + + esphome: + name: my_t2 + platform: ESP8266 + board: esp01_1m + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + use_address: xxx.xxx.xxx.xxx + + logger: + + api: + + ota: + + binary_sensor: + - platform: gpio + pin: + number: GPIO0 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_1 + + - platform: gpio + pin: + number: GPIO9 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_2 + + - platform: status + name: "T2 Status" + + output: + - platform: gpio + pin: GPIO12 + id: relay_1 + + - platform: gpio + pin: GPIO5 + id: relay_2 + + light: + - platform: binary + name: "T2 L1" + id: light_1 + output: relay_1 + + - platform: binary + name: "T2 L2" + id: light_2 + output: relay_2 + + status_led: + pin: + number: GPIO13 + inverted: yes + + +T3 +-- + +.. code-block:: yaml + + esphome: + name: my_t3 + platform: ESP8266 + board: esp01_1m + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + use_address: xxx.xxx.xxx.xxx + + logger: + + api: + + ota: + + binary_sensor: + - platform: gpio + pin: + number: GPIO0 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_1 + + - platform: gpio + pin: + number: GPIO9 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_2 + + - platform: gpio + pin: + number: GPIO10 + mode: INPUT_PULLUP + inverted: True + id: button + on_press: + then: + - light.toggle: light_3 + + - platform: status + name: "T3 Status" + + output: + - platform: gpio + pin: GPIO12 + id: relay_1 + + - platform: gpio + pin: GPIO5 + id: relay_2 + + - platform: gpio + pin: GPIO4 + id: relay_3 + + light: + - platform: binary + name: "T3 L1" + id: light_1 + output: relay_1 + + - platform: binary + name: "T3 L2" + id: light_2 + output: relay_2 + + - platform: binary + name: "T3 L3" + id: light_3 + output: relay_3 + + status_led: + pin: + number: GPIO13 + inverted: yes + + +See Also +-------- + +- :doc:`/cookbook/sonoff-light-switch` +- :doc:`/guides/automations` +- :doc:`/devices/sonoff_t1_uk_3gang_v1.1` + diff --git a/images/light_switch.png b/images/light_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..e46bf82acc575c8d961781aae7b886ac1fbc0f8c GIT binary patch literal 10052 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 Sjy(D&n88(3{lY8vBK{93zCl(1 literal 0 HcmV?d00001 diff --git a/images/sonoff_1t_t3.png b/images/sonoff_1t_t3.png new file mode 100644 index 0000000000000000000000000000000000000000..112c2129b2a16b2a57ddbdf3d8eb028a5e772402 GIT binary patch literal 15305 zcmdUWgEQ%!8N$M zLvddE-21!t`Q7)vf53Z^Jv(Q1zOys4JLlw+vm5kI8AO0biHC-UMxdx5r*>br-Iqih z?E7 zQ)s5>RR5wsptJr{2IIbw7w!Ix_V~U)(fR(ON$%;70oG^_?(09;xcl_VLAI~2`P#6sjGZp>c_M~F`OJ`du=D+B~ zKgw+(eqZh@Tn7amCp5H&#D5Ap+V@2Adyko|-)qCPmEMY(*+aNY%A+zj-8iNI_m7_^n%(aYLH!SsS$0$e-{l6ds= z^gyV&g_xS0{6FFMR}u_XFqnfFH@Az63zrK&mp#;yn^#m+l$(c-n~#t4UV_uf%?@Vb z%4z4s_zxxjqel+xWCpc%fLYty(f`qFVrmbENiZ<{>F8g_KkPI&`&T~>aH#EHy_lPE zgKfbOupP{ao0p51`@iAtz5N%^&gq}gxQ`3BtBJ!si08k8z^>N+cI$tk{KO>)BP|? z@`?%qx&Ld+e?{v24Jjz}cjVt%{u3!{Z)*=#cQ7#nOY;5`@;BDsr2m9nOx7Oa00le! zWgQQY`~Twor@Xcr*vZ}&{%2B33iJIF@OS2a0{$(pVP_4K{2$1Fu>TXK0=2%MxF&yf zbMM7pX8oP_pYl5Y*7t9-{?7a-0Lc9(lm3=j|47@vxc7N0iFZGy|8ozJ#5*>Z8%0AC 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.