@madpilot makes

Hacking a Cheap Wifi Outlet

DISCLAIMER: This project plugs in to the mains, which has dangerous voltages and can kill you. Never plug in the device working on this project – you can re-program using an external 5V supply wired up to the same pads that the red and black wires connect to (CONN1).

I have a Rancilio Silvia coffee machine, that needs time to warm up correctly in the morning – 30 minutes gets everything up to temperature, allowing me to draw excellent coffee shots.

For the past couple of years, I run a simple mechanical timer that turns on at 6am, and goes off at 8am which is fine for the days I go to work, but if I work from home, or it’s the weekend, I’m left with a cold coffee machine unless I turn it to manual mode – which often results in me forgetting to turn it off!

To get around this, I’d been planning on getting a smart switch which would integrate with my Home Assistant setup. I looked at the Belkin Wemo, but it seems a little expensive at $80 a pop.

I thought about designing and building my own one, but the prospect of messing around with mains power didn’t excite me, nor did 3D-printing a case – 3D printing plastic, by definition isn’t very fire resistant.

Browsing Hackaday.io, I stumbled across this project, and it got me wondering if I could find an ESP8266-based Australian WiFi outlet. After a bit of googling, I found something that at least looked the same for $AU20 delivered. Even if it wasn’t ESP8266, I could probably gut it and insert a custom board, so I ordered one.

It arrived pretty quickly.

I promptly pulled it apart. There was a daughter board that looked suspiciously like a ESP8266 although the footprint wasn’t the same as any reference design I could find.

So, I pulled the little metal shield off, and low-and-behold! An ESP8266! Now that I knew we were in business, I installed the iPhone application that comes with it, to try and work out how it was wired up.

The device

This particular switch has an obnoxious blue LED that is used to indicate power, and network connection (it flashes when not connected). It also has a red LED that is on when the relay is turned on. Finally, there is a button that allows you to turn the relay on and off manually.


A quick google, and I found the pin out of the ESP8266 chip – now it was just a matter of tracing the wiring back to each LED and the switch. I also needed to find where the TX, RX, Reset and GPIO0 were so I could program it.

Here is what I found:

  • GPIO 4 is the Blue LED
  • GPIO 5 is both the Red LED and the Relay
  • GPIO 13 is the button

I’ve marked the TX, RX, Reset and GPIO0 pins on the above image. By wiring these pins up to a FTDI cable, I was able to reprogram the switch, thus freeing me from the shackles of the crappy iOS app, and allowing my home-assistant.io server to talk to the switch.

Now, thanks to a Home Assistant and a NodeRed flow, the coffee machine will turn on between 6:30am and 1pm everyday UNLESS it detects that I’m not home. Nice!

You can see the code that I use (It’s based heavily on my garage door opener project).

If that code is too complicated, I’ve uploaded some example code that will turn the switch into a simple web server.

  1. Create a new Arduino project
  2. Insert the code
  3. Compile and upload
  4. Point your browser at http://esp8266.local/on to switch on and http://eso8266.local/off to switch off


  1. Nice work! Good write up, too. Much appreciated.
  2. Most of these cheap devices from China are lacking certification, for a good reason. They generally have the relay on the neutral, not the hot (easily checked with an outlet tester or a voltmeter when "off"). This is an obvious safety issue, since the hot to whatever is plugged in is always live.

    For about the same price or less, you can build your own, and make it safe.
  3. Look at the ITead Studio range of esp8266 switches: Sonoff, Slampher, and friends.
  4. Mace: I checked my device, and you were correct, the relay was on the neutral line. Looking closer at the board, they actually wired it backwards according to their own silk screen - my guess is because the wire they used was too short.

    Thankfully, it was an easy fix to remove the pins and swap them over so it was wired correctly. Great pick up though! I'll do a follow up post after I take some photos of the fix.
  5. Nelis: These devices look great! Unfortunately, they don't do a wall switch like this with an Australian plug (yet). Hopefully they will soon, as that will be an even better solution.
  6. Hey man,

    Any chance of a wiring diagram for connecting the FTDI to the ESP8266? I'm a bit lost!

  7. Hey Geoff,
    Yep! It depends on which FTDI cable you have, but if you are using the common ones from Sparkfun (https://www.sparkfun.com/datasheets/DevTools/FTDI%203.3V%20IO%205V%20Vcc%20Cable.pdf):

    Black (GND): Goes to the pad that the black wire goes to
    Red (Power): Goes to the pad that the red wire goes to
    Orange (TX): Goes to the pin marked RX on the above photo
    Yellow (RX): Goes to the pin marked TX on the above Photo
    This post has more details: https://myles.eftos.id.au/blog/2016/07/01/programming-the-esp8266

Leave a comment