DIY Light switch using a Sonoff Basic

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 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 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.

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.