· 4 months ago · Jun 09, 2025, 09:40 PM
1esphome:
2 name: pergola
3 friendly_name: pergola
4
5esp8266:
6 board: nodemcuv2
7
8logger:
9
10ota:
11 platform: esphome
12
13
14api:
15 encryption:
16 key: "**********"
17 services:
18 - service: control_blind
19 variables:
20 target: int
21 then:
22 - stepper.set_target:
23 id: ${device_id}_stepper
24 target: !lambda 'return target;'
25 - sensor.template.publish:
26 id: ${device_id}_position
27 state: !lambda 'return target;'
28
29captive_portal:
30
31web_server:
32 port: 80
33 version: 3
34 auth:
35 password: "Password"
36 username: "Username"
37
38
39cover:
40 - platform: template
41 name: "${friendly_name}"
42 id: ${device_id}_cover_component
43 device_class: blind
44
45 open_action:
46 - delay: .05s
47 - stepper.set_target:
48 id: ${device_id}_stepper
49 target: 1234 ## Change this number to total steps yours uses to fully Open from Closed
50 - sensor.template.publish:
51 id: ${device_id}_position
52 state: !lambda return id(${device_id}_stepper).target_position;
53 - delay: 60s
54
55 close_action:
56 - delay: .05s
57 - stepper.set_target:
58 id: ${device_id}_stepper
59 target: 0
60 - delay: 60s
61 - sensor.template.publish:
62 id: ${device_id}_position
63 state: !lambda return id(${device_id}_stepper).target_position;
64
65 stop_action:
66 - stepper.set_target:
67 id: ${device_id}_stepper
68 target: !lambda return id(${device_id}_stepper).current_position;
69 - sensor.template.publish:
70 id: ${device_id}_position
71 state: !lambda return id(${device_id}_stepper).current_position;
72 optimistic: true
73 assumed_state: true
74
75sensor:
76 - platform: template
77 name: ${friendly_name} Position
78 id: ${device_id}_position
79
80 - platform: wifi_signal
81 name: ${friendly_name} WiFi Signal
82 id: wifi_signal_db
83 update_interval: 60s
84 entity_category: "diagnostic"
85
86 - platform: copy
87 source_id: wifi_signal_db
88 name: ${friendly_name} WiFi Signal Percent
89 filters:
90 - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
91 unit_of_measurement: "Signal %"
92 entity_category: "diagnostic"
93
94 - platform: uptime
95 name: ${friendly_name} Uptime
96
97text_sensor:
98 - platform: wifi_info
99 ip_address:
100 name: ${friendly_name} IP Address
101 ssid:
102 name: ${friendly_name} SSID
103 bssid:
104 name: ${friendly_name} BSSID
105 mac_address:
106 name: ${friendly_name} Mac Address
107
108stepper:
109 - platform: a4988
110 id: my_stepper
111 step_pin: D2
112 dir_pin: D1
113 sleep_pin: D3
114 max_speed: 250 steps/s
115 acceleration: inf
116 deceleration: inf
117
118binary_sensor:
119
120 - platform: status
121 name: ${friendly_name} Status
122
123 - platform: gpio
124 pin:
125 number: D3 ## Change to GPIO you're using for OPEN button
126 inverted: TRUE
127 mode:
128 input: TRUE
129 pullup: TRUE
130 name: ${friendly_name} Open Button
131 filters:
132 - delayed_on: 10ms
133 on_multi_click:
134#SINGLE CLICK
135 - timing:
136 - ON for at most 0.5s
137 - OFF for at least 0.5s
138 then:
139 - delay: .05s
140 - stepper.set_target:
141 id: ${device_id}_stepper
142 target: 0
143 - delay: 60s
144 - sensor.template.publish:
145 id: ${device_id}_position
146 state: !lambda return id(${device_id}_stepper).target_position;
147
148
149 - platform: gpio
150 pin:
151 number: D4 ## Change to GPIO you're using for CLOSE button
152 inverted: TRUE
153 mode:
154 input: TRUE
155 pullup: TRUE
156 name: ${friendly_name} Close Button
157 filters:
158 - delayed_on: 10ms
159 on_multi_click:
160#SINGLE CLICK
161 - timing:
162 - ON for at most 0.5s
163 - OFF for at least 0.5s
164 then:
165 - delay: .05s
166 - stepper.set_target:
167 id: ${device_id}_stepper
168 target: 1234 ## Change this number to total steps yours uses to fully Open from Closed
169 - sensor.template.publish:
170 id: ${device_id}_position
171 state: !lambda return id(${device_id}_stepper).target_position;