summaryrefslogtreecommitdiffstats
path: root/esphome/config/couchlight.yaml
blob: 4579dc9caafb4f6a9111d82cb5f6086de7eed3ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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: D1 # GPIO5

  - platform: gpio
    id: relay_light2
    pin: D2 # GPIO4

  # UNUSED GPIO
  - platform: gpio
    id: unused_gpio0
    pin:
      number: D3 # GPIO0
      mode: INPUT_PULLUP
  - platform: gpio
    id: unused_gpio1
    pin:
      number: TX # GPIO1
      mode: INPUT_PULLUP
  - platform: gpio
    id: unused_gpio2
    pin:
      number: D4 # GPIO2
      mode: INPUT_PULLUP
  - platform: gpio
    id: unused_gpio3
    pin:
      number: RX # GPIO3
      mode: INPUT_PULLUP
  - platform: gpio
    id: unused_gpio14
    pin:
      number: D5 # GPIO14
      mode: INPUT_PULLUP
  - platform: gpio
    id: unused_gpio15
    pin:
      number: D8 # GPIO15
      mode: INPUT_PULLUP
  - platform: gpio
    id: unused_gpio16
    pin:
      number: D0 # GPIO16
      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: D7 # GPIO13
      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: D6 # GPIO12
      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