Last active 1 month ago

petr revised this gist 1 month ago. Go to revision

1 file changed, 281 insertions

epaper.yaml(file created)

@@ -0,0 +1,281 @@
1 + esphome:
2 + name: reterminal-e1002
3 + friendly_name: ColorEinkDisplay
4 + on_boot:
5 + - priority: 600
6 + then:
7 + - output.turn_on: bsp_sd_enable
8 + - output.turn_on: bsp_battery_enable
9 + - delay: 200ms
10 + - component.update: battery_voltage
11 + - component.update: battery_level
12 + - priority: -100
13 + then:
14 + - logger.log: "*** Device woke up from deep sleep ***"
15 + - light.turn_on: onboard_led
16 + - delay: 1s
17 + - logger.log: "*** Starting application ***"
18 +
19 + esp32:
20 + board: esp32-s3-devkitc-1
21 + framework:
22 + # type: arduino
23 + type: esp-idf
24 +
25 + # Enable logging
26 + logger:
27 + hardware_uart: UART0
28 +
29 + # Enable Home Assistant API
30 + api:
31 + encryption:
32 + key: "<Your API Key>"
33 + on_client_connected:
34 + - logger.log:
35 + format: "*** Client %s connected to API with IP %s ***"
36 + args: ["client_info.c_str()", "client_address.c_str()"]
37 +
38 + ota:
39 + - platform: esphome
40 + password: "<Your OTA PW>"
41 +
42 + wifi:
43 + ssid: !secret wifi_ssid
44 + password: !secret wifi_password
45 + min_auth_mode: WPA2
46 + on_connect:
47 + then:
48 + - lambda: |-
49 + id(wifi_status) = 1;
50 + - logger.log: "*** WiFi Connected Successfully! ***"
51 + - delay: 1s
52 + - component.update: dashboard_image
53 + on_disconnect:
54 + then:
55 + - lambda: |-
56 + id(wifi_status) = 0;
57 + - logger.log: "*** WiFi Disconnected ***"
58 + ap:
59 + ssid: "ColoreInkFallbackHotspot"
60 + password: "<Your Fallback Hotspot PW>"
61 +
62 + psram:
63 + mode: octal
64 + speed: 80MHz
65 +
66 +
67 + captive_portal:
68 +
69 + globals:
70 + - id: sleep_counter
71 + type: int
72 + restore_value: yes # Use RTC storage to maintain counter during sleep
73 + initial_value: '0'
74 + - id: battery_glyph
75 + type: std::string
76 + restore_value: no
77 + initial_value: "\"\\U000F0079\"" # default full battery
78 + - id: wifi_status
79 + type: int
80 + restore_value: no
81 + initial_value: "0"
82 + - id: recorded_display_refresh
83 + type: int
84 + restore_value: yes
85 + initial_value: '0'
86 +
87 + # Deep-sleep, wake by GPIO3
88 + deep_sleep:
89 + id: deep_sleep_1
90 + run_duration: 120s # Device wake up and run 120s. This should not run for 120s because of other code
91 + sleep_duration: 30min # deep sleep for 30m
92 + wakeup_pin: GPIO3 # Green button
93 + wakeup_pin_mode: INVERT_WAKEUP
94 +
95 + # SPI bus for display
96 + spi:
97 + clk_pin: GPIO7
98 + mosi_pin: GPIO9
99 + # I2C bus for temperature and humidity sensor
100 + i2c:
101 + scl: GPIO20
102 + sda: GPIO19
103 +
104 + http_request:
105 + verify_ssl: false
106 + timeout: 20s
107 + watchdog_timeout: 25s
108 +
109 + online_image:
110 + - id: dashboard_image
111 + format: PNG
112 + type: RGB565
113 + buffer_size: 65536
114 + url: http://192.168.1.101:10000/dashboard-robin/display-color?viewport=800x480&lang=en
115 + # update_interval: 20s. # Not needed now
116 + on_download_finished:
117 + - component.update: epaper_display
118 + - delay: 45s # Time to allow display to refresh
119 + - deep_sleep.enter: deep_sleep_1
120 + on_error:
121 + - delay: 30s
122 + - deep_sleep.enter: deep_sleep_1
123 +
124 + display:
125 + - platform: epaper_spi
126 + id: epaper_display
127 + model: Seeed-reTerminal-E1002
128 + update_interval: never
129 + lambda: |-
130 + it.image(0, 0, id(dashboard_image));
131 +
132 + # Home Assistant time
133 + time:
134 + - platform: homeassistant
135 + id: ha_time
136 +
137 + sensor:
138 + - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
139 + update_interval: 60s
140 + name: "WiFi Signal dB"
141 + id: wifi_signal_db
142 + entity_category: "diagnostic"
143 + - platform: copy # Reports the WiFi signal strength in %
144 + source_id: wifi_signal_db
145 + name: "WiFi Signal Percent"
146 + id: wifi_signal_percent
147 + filters:
148 + - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
149 + unit_of_measurement: "%"
150 + entity_category: "diagnostic"
151 + - platform: uptime
152 + update_interval: 60s
153 + name: Uptime
154 + - platform: internal_temperature
155 + update_interval: 60s
156 + name: "Internal Temperature"
157 + - platform: template
158 + update_interval: 60s
159 + name: "Display Last Update"
160 + device_class: timestamp
161 + entity_category: "diagnostic"
162 + id: display_last_update
163 + lambda: 'return id(ha_time).now().timestamp;'
164 + - platform: template
165 + name: "Display Refresh Count"
166 + accuracy_decimals: 0
167 + unit_of_measurement: "Refreshes"
168 + state_class: "total_increasing"
169 + entity_category: "diagnostic"
170 + lambda: 'return id(recorded_display_refresh) += 1;'
171 + - platform: sht4x
172 + update_interval: 60s
173 + temperature:
174 + name: "Temperature"
175 + id: temp_sensor
176 + humidity:
177 + name: "Relative Humidity"
178 + id: hum_sensor
179 + - platform: adc
180 + update_interval: 60s
181 + pin: GPIO1
182 + name: "Battery Voltage"
183 + id: battery_voltage
184 + attenuation: 12db
185 + filters:
186 + - multiply: 2.0
187 + - platform: template
188 + update_interval: 60s
189 + name: "Battery Level"
190 + id: battery_level
191 + unit_of_measurement: "%"
192 + icon: "mdi:battery"
193 + device_class: battery
194 + state_class: measurement
195 + lambda: 'return id(battery_voltage).state;'
196 + on_value:
197 + then:
198 + - lambda: |-
199 + int pct = int(x);
200 + if (pct <= 10) id(battery_glyph) = "\U000F007A";
201 + else if (pct <= 20) id(battery_glyph) = "\U000F007B";
202 + else if (pct <= 30) id(battery_glyph) = "\U000F007C";
203 + else if (pct <= 40) id(battery_glyph) = "\U000F007D";
204 + else if (pct <= 50) id(battery_glyph) = "\U000F007E";
205 + else if (pct <= 60) id(battery_glyph) = "\U000F007F";
206 + else if (pct <= 70) id(battery_glyph) = "\U000F0080";
207 + else if (pct <= 80) id(battery_glyph) = "\U000F0081";
208 + else if (pct <= 90) id(battery_glyph) = "\U000F0082";
209 + else id(battery_glyph) = "\U000F0079";
210 + filters:
211 + - calibrate_linear:
212 + - 4.15 -> 100.0
213 + - 3.96 -> 90.0
214 + - 3.91 -> 80.0
215 + - 3.85 -> 70.0
216 + - 3.80 -> 60.0
217 + - 3.75 -> 50.0
218 + - 3.68 -> 40.0
219 + - 3.58 -> 30.0
220 + - 3.49 -> 20.0
221 + - 3.41 -> 10.0
222 + - 3.30 -> 5.0
223 + - 3.27 -> 0.0
224 + - clamp:
225 + min_value: 0
226 + max_value: 100
227 +
228 + # Button configuration
229 + binary_sensor:
230 +
231 + # - platform: gpio
232 + # pin:
233 + # number: GPIO3 # Green button, commented out because I'm using it for wakeup
234 + # mode: INPUT_PULLUP
235 + # inverted: true
236 + # id: button_1
237 + # name: "Green Button"
238 + # on_press:
239 + # then:
240 + # - logger.log: "*** Green Button (GPIO3) Pressed ***"
241 +
242 + - platform: gpio
243 + pin:
244 + number: GPIO4 # Right white button
245 + mode: INPUT_PULLUP
246 + inverted: true
247 + id: button_2
248 + name: "Right Button"
249 + on_press:
250 + then:
251 + - logger.log: "*** Right Button (GPIO4) Pressed ***"
252 +
253 + - platform: gpio
254 + pin:
255 + number: GPIO5 # Left white button
256 + mode: INPUT_PULLUP
257 + inverted: true
258 + id: button_3
259 + name: "Left Button"
260 + on_press:
261 + then:
262 + - logger.log: "*** Left Button (GPIO5) Pressed ***"
263 +
264 + output:
265 + - platform: gpio
266 + pin: GPIO6
267 + id: bsp_led
268 + inverted: true
269 + - platform: gpio
270 + pin: GPIO16
271 + id: bsp_sd_enable
272 + - platform: gpio
273 + pin: GPIO21
274 + id: bsp_battery_enable
275 +
276 + # Onboard LED
277 + light:
278 + - platform: binary
279 + name: "Onboard LED"
280 + output: bsp_led
281 + id: onboard_led
Newer Older