devices.esphome.io

Generic Chinese Brand WiFi Smart Power Strip

Generic Chinese Brand WiFi Smart Power Strip

Device Type: plug
Electrical Standard: us
Board: esp8266

image

The generic cheap Chinese brand smart power strips of various unheard brands among various platforms, including Amazon, gearbest, banggood, and ebay, all with the product form factor as shown in the picture.

This type of device typically has four individually controllable AC outlets (each bonded with a (red) status LED), and four combined USB ports (not individually controllable but bonded with a (red) status LED). Also, there is a pushbutton(power button), and two individually controllable LEDs behind the button (in my specific model blue and white).

GPIO Pinout

For reference only if you want to develop something more than the basic functions.

PinFunction
GPIO0Led1 (Inverted: true)
GPIO3Led2 (Inverted: true)
GPIO4Socket 1 (Inverted: true)
GPIO5Push Button (Inverted:true)
GPIO12Socket 3 (Inverted: true)
GPIO13Socket 2 (Inverted: true)
GPIO14Socket 4 (Inverted: true)
GPIO164 USB Ports

Firmware Setup

I flashed this device with tuya-convert OTA, which worked straight off. I flashed it directly with ESPHome with no problem.

Code

The settings are straight forward to hand over all the hardwares to Home Assistant, with the only local automation to be the power(push) button, which toggles all relays. (The automation is set to turn on all relays in case any relay is already on to prevent unwanted loss of power to connected device(s).)

substitutions:
device_name: "***"
esphome:
name: "${device_name}"
platform: ESP8266
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
password: "***"
wifi:
ssid: "***"
password: "***"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "***"
password: "***"
captive_portal:
switch:
# Relay - Socket 1
- platform: gpio
name: "${device_name} socket 1"
pin:
number: 4
inverted: true
id: relay_socket_1
# Relay - Socket 2
- platform: gpio
name: "${device_name} socket 2"
pin:
number: 13
inverted: true
id: relay_socket_2
# Relay - Socket 3
- platform: gpio
name: "${device_name} socket 3"
pin:
number: 12
inverted: true
id: relay_socket_3
# Relay - Socket 4
- platform: gpio
name: "${device_name} socket 4"
pin:
number: 14
inverted: true
id: relay_socket_4
# Relay - USB
- platform: gpio
name: "${device_name} USB"
pin:
number: 16
inverted: false
id: relay_usb
binary_sensor:
- platform: gpio
pin:
number: 5
inverted: true
name: "${device_name} Button"
on_click:
if:
condition:
and:
- switch.is_on: relay_socket_1
- switch.is_on: relay_socket_2
- switch.is_on: relay_socket_3
- switch.is_on: relay_socket_4
- switch.is_on: relay_usb
then:
- switch.turn_off: relay_socket_1
- switch.turn_off: relay_socket_2
- switch.turn_off: relay_socket_3
- switch.turn_off: relay_socket_4
- switch.turn_off: relay_usb
else:
- switch.turn_on: relay_socket_1
- switch.turn_on: relay_socket_2
- switch.turn_on: relay_socket_3
- switch.turn_on: relay_socket_4
- switch.turn_on: relay_usb
sensor:
# WiFi Signal Sensor
- platform: wifi_signal
name: "${device_name} WiFi Signal Strength"
update_interval: 60s
light:
- platform: binary
name: "${device_name} LED 1"
output: light_1_output
- platform: binary
name: "${device_name} LED 2"
output: light_2_output
output:
- id: light_1_output
platform: gpio
pin:
number: 0
inverted: true
- id: light_2_output
platform: gpio
pin:
number: 3
inverted: true
Edit this page on GitHub