substitutions: device_name: couchlight friendly_name: "Couch Light" esphome: name: ${device_name} friendly_name: ${friendly_name} on_boot: then: - lock.template.publish: id: child_lock state: UNLOCKED esp8266: board: d1_mini # Enable logging logger: # Enable Home Assistant API api: encryption: key: !secret api_encryption_key # OTA ota: - platform: esphome password: !secret ota_password # WiFi Credentials wifi: domain: .lan ssid: !secret wifi_ssid password: !secret wifi_password # see https://github.com/esphome/issues/issues/1532 power_save_mode: HIGH # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "${device_name} Fallback Hotspot" password: !secret wifi_ap_password captive_portal: light: - platform: binary id: light1 name: "Spot 1" output: relay_light1 - platform: binary id: light2 name: "Spot 2" output: relay_light2 output: - platform: gpio id: relay_light1 pin: GPIO5 # D1 - platform: gpio id: relay_light2 pin: GPIO4 # D2 # UNUSED GPIO - platform: gpio id: unused_gpio0 pin: number: GPIO0 # D3 mode: INPUT_PULLUP - platform: gpio id: unused_gpio1 pin: number: TX # GPIO1 mode: INPUT_PULLUP - platform: gpio id: unused_gpio2 pin: number: GPIO2 # D4 mode: INPUT_PULLUP - platform: gpio id: unused_gpio3 pin: number: RX # GPIO3 mode: INPUT_PULLUP - platform: gpio id: unused_gpio14 pin: number: GPIO14 # D5 mode: INPUT_PULLUP - platform: gpio id: unused_gpio15 pin: number: GPIO15 # D8 mode: INPUT_PULLUP - platform: gpio id: unused_gpio16 pin: number: GPIO16 # D0 mode: INPUT_PULLDOWN script: - id: reset_child_lock mode: restart then: - delay: 30min - lock.template.publish: id: child_lock state: UNLOCKED binary_sensor: - platform: gpio id: button_light1 name: "Spot 1 PushButton" pin: number: GPIO13 # D7 mode: INPUT_PULLUP filters: - invert - delayed_on: 50ms on_press: then: - if: condition: lock.is_unlocked: child_lock then: - light.toggle: light1 internal: true # hide from UI - platform: gpio id: button_light2 name: "Spot 2 PushButton" pin: number: GPIO12 # D6 mode: INPUT_PULLUP filters: - invert - delayed_on: 50ms on_press: then: - if: condition: lock.is_unlocked: child_lock then: - light.toggle: light2 internal: true # hide from UI lock: - platform: template id: child_lock name: "Child Lock" optimistic: true on_lock: - script.execute: reset_child_lock on_unlock: - script.stop: reset_child_lock