Link

Treatlife esp01_1m 2/3-Way Wall-Switch

Notes

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:
  password: !secret esphome_api_password

ota:
  password: !secret esphome_ota_password

status_led:
  pin:
    number: GPIO5   # Red LED
    inverted: True

binary_sensor:
- platform: gpio
  pin:
    number: GPIO4
    inverted: True
  id: sensor
  internal: True

- platform: gpio
  pin:
    number: GPIO13
    inverted: True
  id: button
  name: ${friendly_name} Button
  on_press:
    - switch.toggle: ${device_name}
  internal: True

light:
- platform: binary
  id: white_led
  output: led_1
  restore_mode: RESTORE_DEFAULT_ON
  internal: True

output:
- platform: gpio
  id: led_1
  pin:
    number: GPIO4
    inverted: True

switch:
- platform: gpio
  id: relay
  pin:
    number: GPIO12
  restore_mode: RESTORE_DEFAULT_OFF
  internal: True

- platform: restart
  name: ${friendly_name} REBOOT

- platform: template
  name: ${friendly_name}
  id: ${device_name}
  icon: ${icon}
  lambda: |-
    if (id(sensor).state) {
      return false;
    } else {
      return true;
    }
  turn_on_action:
  - if:
      condition:
      - binary_sensor.is_on: sensor
      then:
      - switch.turn_on: relay
      - light.turn_off: white_led
  turn_off_action:
  - if:
      condition:
      - binary_sensor.is_off: sensor
      then:
      - switch.turn_off: relay
      - light.turn_on: white_led

Basic 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_1m
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true

  ap:
    ssid: ${device_name}
    password: !secret esphome_ap_password

captive_portal:
logger:
api:
  password: !secret esphome_api_password

ota:
  password: !secret esphome_ota_password
status_led:
  pin:
    number: GPIO5   # Red LED
    inverted: True
binary_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: True
light:
  - platform: binary
    id: white_led
    output: led_1
    restore_mode: RESTORE_DEFAULT_ON
    internal: True
output:
  - platform: gpio
    id: led_1
    pin:
      number: GPIO4
      inverted: True
switch:
  - 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: relay

Button 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: True

Home Assistant light entity (Converts it from a switch to a Light Entity)

light:
  - platform: switch
    name: Light Switch
    entity_id: switch.light_switch

Home Assistant example automation that uses the event triggers stated above

automation:
- alias: long_press_on
  trigger:
  - event_data:
      title: long_press
    event_type: esphome.light_switch
    platform: event
  condition: []
  action:
  - entity_id: group.all_lights
    service: light.turn_on
  mode: single
- alias: double_click_off
  trigger:
  - event_data:
      title: double_click
    event_type: esphome.light_switch
    platform: event
  condition: []
  action:
  - entity_id: group.all_lights
    service: light.turn_off
  mode: single