-
Notifications
You must be signed in to change notification settings - Fork 0
/
battery-status-display.yaml
257 lines (237 loc) · 5.79 KB
/
battery-status-display.yaml
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
substitutions:
device_name: battery-status-display
device_name_underscore: battery_status_display
globals:
- id: voltage
type: float
initial_value: '0.0'
- id: current
type: float
initial_value: '0.0'
- id: soc
type: float
initial_value: '0.0'
- id: power
type: float
initial_value: '0.0'
- id: min_cell_voltage
type: float
initial_value: '0.0'
- id: max_cell_voltage
type: float
initial_value: '0.0'
- id: cell_temp
type: float
initial_value: '0.0'
- id: mos_temp
type: float
initial_value: '0.0'
esphome:
name: ${device_name}
platformio_options:
board_build.flash_mode: dio
esp32:
framework:
type: esp-idf
version: recommended
board: esp32-c3-devkitm-1
external_components:
- source: github://syssi/esphome-jk-bms@main
components: [jk_bms_display]
refresh: 1s
packages:
device_common: !include .ext_device_common.yaml
jkbms_disp_port: !include
file: battery-status-display/jkbms-display-port.yaml
vars:
rx_pin: GPIO20
lvgl-ui: !include battery-status-display/lvgl-ui.yaml
wifi:
on_connect:
- script.execute:
id: lvgl_update_status_icon
name: wifi_icon
is_on: true
on_disconnect:
- script.execute:
id: lvgl_update_status_icon
name: wifi_icon
is_on: false
http_request:
captive_portal:
ota:
- platform: http_request
id: http_ota
on_error:
- lvgl.label.update:
id: update_label
text: "Failed to update. Please try again."
- delay: 10s
- lvgl.label.update:
id: update_label
text: "Long press here to start the update."
- platform: esphome
id: esphome_ota
password: !secret ota_password
mqtt:
broker: !secret ext_mqtt_broker_addr
port: !secret ext_mqtt_broker_port
username: !secret ext_mqtt_broker_username
password: !secret ext_mqtt_broker_password
certificate_authority: !secret ext_mqtt_broker_cert
skip_cert_cn_check: false
idf_send_async: true
will_message:
on_connect:
- script.execute:
id: lvgl_update_status_icon
name: mqtt_icon
is_on: true
on_disconnect:
- script.execute:
id: lvgl_update_status_icon
name: mqtt_icon
is_on: false
logger:
baud_rate: 115200
level: WARN
hardware_uart: USB_SERIAL_JTAG
spi:
mosi_pin: GPIO7
clk_pin: GPIO6
i2c:
sda: GPIO4
scl: GPIO5
output:
- platform: ledc
pin: GPIO3
id: gpio_3_backlight_pwm
light:
- platform: monochromatic
output: gpio_3_backlight_pwm
name: "Display Backlight"
id: backlight
internal: true
restore_mode: ALWAYS_ON
display:
- platform: ili9xxx
id: watchface
model: GC9A01A
cs_pin: GPIO10
dc_pin: GPIO2
data_rate: 80MHz
pixel_mode: 16bit
dimensions:
width: 240
height: 240
update_interval: never
invert_colors: true
auto_clear_enabled: false
touchscreen:
id: touch
platform: cst816
interrupt_pin: GPIO0
reset_pin: GPIO1
on_release:
- script.execute: lvgl_resume
interval:
- interval: 1s
id: update_labels_interval
then:
- script.execute: lvgl_update_values
- script.execute: lvgl_show_alarms
script:
- id: lvgl_update_values
mode: single
then:
- lvgl.label.update:
id: soc_label
text:
format: "%.0f%%"
args: ['id(soc)']
- lvgl.label.update:
id: power_label
text:
format: "%c%.0fW"
args:
- '(id(power) > 0 ? ''+'' : (id(power) < 0 ? ''-'' : 0))'
- 'std::abs(id(power))'
- lvgl.label.update:
id: voltage_label
text:
format: "%.1fV"
args: ['id(voltage)']
- lvgl.label.update:
id: current_label
text:
format: "%c%.1fA"
args:
- '(id(current) > 0 ? ''+'' : (id(current) < 0 ? ''-'' : 0))'
- 'std::abs(id(current))'
- lvgl.label.update:
id: min_cell_v_label
text:
format: "%.3fV"
args: ['id(min_cell_voltage)']
- lvgl.label.update:
id: max_cell_v_label
text:
format: "%.3fV"
args: ['id(max_cell_voltage)']
- lvgl.label.update:
id: cell_temp_label
text:
format: "%.1fC"
args: ['id(cell_temp)']
- lvgl.label.update:
id: mos_temp_label
text:
format: "%.1fC"
args: ['id(mos_temp)']
- id: lvgl_show_alarms
mode: single
then:
if:
condition:
lambda: "return id(jkbms_has_alarms)->state;"
then:
- lvgl.label.update:
id: alarms_label
text: !lambda return id(jkbms_alarms)->state;
text_color: warning_color
- script.execute:
id: lvgl_update_status_icon
name: alarm_icon
is_on: false
else:
- lvgl.label.update:
id: alarms_label
text: "No alarms!"
text_color: success_color
- script.execute:
id: lvgl_update_status_icon
name: alarm_icon
is_on: true
- id: update_firmware
mode: single
then:
- lvgl.label.update:
id: update_label
text: "Updating"
- delay: 500ms
- ota.http_request.flash:
md5_url: !secret battery_status_display_ota_md5_url
url: !secret battery_status_display_ota_url
button:
- id: turn_on_screen
name: ${device_name} turn on screen
platform: template
on_press:
- script.execute:
id: lvgl_resume
- id: start_http_ota
name: ${device_name} start http ota
platform: template
on_press:
- script.execute:
id: update_firmware