devices.esphome.io
Treatlife esp01_1m 2/3-Way Wall-Switch
Treatlife esp01_1m 2/3-Way Wall-Switch
Device Type: switchElectrical Standard: globalBoard: esp8266
Notes
- push button wall switch
 - 2 way bought here: https://amzn.to/3stsGDw
 - 3 way bought here: https://amzn.to/3cs4R9u
 - this dude shows how to flash it: https://www.digiblur.com/2020/01/tuya-convert-23-update-flash-tuya.html
 - unlike the 3 way switch, the 2 way switch does not have a power sense pin. To solve this issue, and allow the smart switch to be smart, this code turns the White LED on when the light is off and, led off when the light is on. This allows the LEDs pin state to be used as a power sense, to determine whether to turn the relay on or off.
 
GPIO Pinout
2-Way Version
| Pin | Function | 
|---|---|
| GPIO04 | White LED (Power Sensor) | 
| GPIO5 | Status LED | 
| GPIO12 | Relay 1 | 
| GPIO13 | Button 1 | 
3-Way Version
| Pin | Function | 
|---|---|
| GPIO04 | White LED | 
| GPIO5 | Status LED | 
| GPIO12 | Relay 1 | 
| GPIO13 | Button 1 | 
| GPIO14 | Power Sensor | 
Basic Configuration (2-Way)
substitutions:  device_name: light_switch #change  friendly_name: Light Switch #change  icon: "mdi:light-switch"
esphome:  name: ${device_name}  platform: ESP8266  board: esp01_1m
wifi:  ssid: !secret wifi_ssid  password: !secret wifi_password  fast_connect: true  ap:    ssid: ${device_name}    password: !secret esphome_ap_password
logger:
api:  encryption:    key: !secret api_encryption_key
ota:  password: !secret esphome_ota_password
output:  - platform: gpio    pin: GPIO12    id: switch_output
  - platform: gpio    pin:      number: GPIO4    id: white_led_output
light:  - platform: binary    name: ${friendly_name}    id: ${device_name}    output: switch_output    on_turn_on:      - light.turn_on: white_led    on_turn_off:      - light.turn_off: white_led
  - platform: binary    id: white_led    output: white_led_output
binary_sensor:  - platform: gpio    pin:      number: GPIO13    id: ${device_name}_button    name: ${friendly_name} Button    on_press:      - light.toggle: ${device_name}
status_led:  # Red LED  pin:    number: GPIO5    inverted: yesBasic Configuration (3-Way)
substitutions:  device_name: 3_way_light_switch #change  friendly_name: 3 Way Light Switch #change  icon: "mdi:light-switch"
esphome:  name: ${device_name}  platform: ESP8266  board: esp01_1mwifi:  ssid: !secret wifi_ssid  password: !secret wifi_password  fast_connect: true
  ap:    ssid: ${device_name}    password: !secret esphome_ap_password
captive_portal:logger:api:  encryption:    key: !secret api_encryption_key
ota:  password: !secret esphome_ota_passwordstatus_led:  pin:    number: GPIO5   # Red LED    inverted: Truebinary_sensor:  - platform: gpio    id: power_sensor    pin:      number: GPIO14      inverted: True    filters:      - delayed_off: 50ms    on_press:      - light.turn_off: white_led    on_release:      - light.turn_on: white_led    internal: True  - platform: gpio    pin:      number: GPIO13      inverted: True    id: button    on_press:      then:      - switch.toggle: ${device_name}    internal: Truelight:  - platform: binary    id: white_led    output: led_1    restore_mode: RESTORE_DEFAULT_ON    internal: Trueoutput:  - platform: gpio    id: led_1    pin:      number: GPIO4      inverted: Trueswitch:  - platform: gpio    id: red_led    pin:      number: GPIO5      inverted: True    internal: True
  - platform: gpio    pin: GPIO12    id: relay    restore_mode: RESTORE_DEFAULT_OFF    internal: True
  - platform: template    name: ${friendly_name}    id: ${device_name}    icon: ${icon}    lambda: |-      if (id(power_sensor).state) {        return true;      } else {        return false;      }    turn_on_action:    - if:        condition:          - binary_sensor.is_off: power_sensor        then:          - switch.toggle: relay    turn_off_action:    - if:        condition:          - binary_sensor.is_on: power_sensor        then:          - switch.toggle: relayButton manipulation (Adds Double Click and Long Press event triggers)
- platform: gpio    pin:      number: GPIO13      inverted: True    id: button    name: ${friendly_name} Button    on_multi_click:   # Single Click:    - timing:      - ON for at most 1s      - OFF for at least 0.3s      then:        - switch.toggle: ${device_name}        - logger.log: "Single Click"        - homeassistant.event:            event: esphome.${device_name}            data:              title: single_click   # Double Click:    - timing:      - ON for at most 1s      - OFF for at most 1s      - ON for at most 1s      - OFF for at least 0.2s      then:        - logger.log: "Double Clicked"        - homeassistant.event:            event: esphome.${device_name}            data:              title: double_click    # Long Press:    - timing:      - ON for 1s to 2s      - OFF for at least 0.3s      then:        - logger.log: "Single Long Press"        - homeassistant.event:            event: esphome.${device_name}            data:              title: long_press    - timing:      - ON for at least 2.2s      then:        - logger.log: "Press and Hold"        - homeassistant.event:            event: esphome.${device_name}            data:              title: hold    internal: TrueHome Assistant light entity (Converts it from a switch to a Light Entity)
light:  - platform: switch    name: Light Switch    entity_id: switch.light_switchHome Assistant example automation that uses the event triggers stated above
This assumes that you have defined all_lights using platform: group.
automation:- alias: long_press_on  trigger:  - platform: event    event_data:      title: long_press    event_type: esphome.light_switch  condition: []  action:  - service: light.turn_on    target:      entity_id: light.all_lights  mode: single  - alias: double_click_off  trigger:  - platform: event    event_data:      title: double_click    event_type: esphome.light_switch  condition: []  action:  - service: light.turn_off    target:      entity_id: light.all_lights  mode: single