1 | substitutions: |
2 | name: "dummy" |
3 | friendly_name: Dummy |
4 | |
5 | esphome: |
6 | name: ${name} |
7 | friendly_name: ${friendly_name} |
8 | min_version: 2024.6.0 |
9 | name_add_mac_suffix: false |
10 | project: |
11 | name: esphome.web |
12 | version: dev |
13 | |
14 | esp32: |
15 | board: esp32dev |
16 | framework: |
17 | type: arduino |
18 | |
19 | # Enable logging |
20 | logger: |
21 | |
22 | # Enable Home Assistant API |
23 | api: |
24 | |
25 | # Allow Over-The-Air updates |
26 | ota: |
27 | - platform: esphome |
28 | password: !secret ota_password |
29 | |
30 | # Allow provisioning Wi-Fi via serial |
31 | improv_serial: |
32 | |
33 | wifi: |
34 | ssid: !secret wifi_ssid |
35 | password: !secret wifi_password |
36 | ap: |
37 | ssid: ${name} |
38 | password: !secret ap_password |
39 | |
40 | # In combination with the `ap` this allows the user |
41 | # to provision wifi credentials to the device via WiFi AP. |
42 | captive_portal: |
43 | |
44 | #dashboard_import: |
45 | # package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main |
46 | # import_full_config: true |
47 | |
48 | # To have a "next url" for improv serial |
49 | web_server: |
50 | port: 80 |
51 | |
52 | i2c: |
53 | sda: GPIO21 |
54 | scl: GPIO22 |
55 | scan: false |
56 | |
57 | font: |
58 | - file: 'slkscr.ttf' |
59 | id: font1 |
60 | size: 8 |
61 | - file: 'BebasNeue-Regular.ttf' |
62 | id: font2 |
63 | size: 48 |
64 | - file: 'arial.ttf' |
65 | id: font3 |
66 | size: 12 |
67 | - file: 'BebasNeue-Regular.ttf' |
68 | id: font4 |
69 | size: 44 |
70 | - file: "materialdesignicons-webfont.ttf" |
71 | id: font5 |
72 | size: 42 |
73 | glyphs: [ |
74 | "\U000F081C", # mdi-door-open |
75 | "\U000F1846", # mdi-curtains |
76 | "\U000F1A4E", # mdi-lightbulb-on-10 |
77 | "\U000F05B1", # mdi-window-open |
78 | "\U000F111E", # mdi-window-shutte-open |
79 | "\U000F08B2", # mdi-lock-smart |
80 | "\U000F050F", # mdi-thermometer |
81 | "\U000F1126", # diabetes |
82 | ] |
83 | |
84 | sensor: |
85 | - platform: homeassistant |
86 | entity_id: sensor.escritorio_patrick_temperatura |
87 | name: "Temperatura" |
88 | id: temperatura |
89 | - platform: homeassistant |
90 | entity_id: sensor.patrick_duarte_glucose_level |
91 | name: "Glicose" |
92 | id: glicose |
93 | - platform: homeassistant |
94 | entity_id: sensor.patrick_th_humidity |
95 | name: "Umidade" |
96 | id: umidade |
97 | - platform: homeassistant |
98 | entity_id: sensor.luzes_acesas |
99 | name: "Luzes Acesas" |
100 | id: luzes_acesas |
101 | internal: true |
102 | - platform: homeassistant |
103 | entity_id: sensor.cortinas_abertas |
104 | name: "Cortinas Abertas" |
105 | id: cortinas_abertas |
106 | internal: true |
107 | - platform: homeassistant |
108 | entity_id: sensor.janelas_abertas |
109 | name: "Janelas Abertas" |
110 | id: janelas_abertas |
111 | internal: true |
112 | - platform: homeassistant |
113 | entity_id: sensor.persianas_abertas |
114 | name: "Persianas Abertas" |
115 | id: persianas_abertas |
116 | internal: true |
117 | - platform: homeassistant |
118 | entity_id: sensor.portas_abertas |
119 | name: "Portas Abertas" |
120 | id: portas_abertas |
121 | internal: true |
122 | - platform: homeassistant |
123 | entity_id: sensor.fechaduras_destrancadas |
124 | name: "Fechaduras" |
125 | id: fechaduras_destrancadas |
126 | internal: true |
127 | |
128 | animation: |
129 | - file: "olhos.gif" |
130 | id: olhos |
131 | resize: 128x64 |
132 | |
133 | display: |
134 | - platform: ssd1306_i2c |
135 | model: "SH1106 128x64" |
136 | #reset_pin: GPIOXX |
137 | address: 0x3C |
138 | id: lcd |
139 | pages: |
140 | - id: pag1 |
141 | lambda: |- |
142 | id(olhos).next_frame(); |
143 | it.image(13, 0, id(olhos)); |
144 | - id: pag2 |
145 | lambda: |- |
146 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "TEMPERATURA"); |
147 | it.printf(5*(it.get_width() / 6), 15, id(font2), TextAlign::TOP_CENTER, "%.1f°", id(temperatura).state); |
148 | it.printf(it.get_width() / 6, 20, id(font5), TextAlign::TOP_CENTER, "\U000F050F"); |
149 | - id: pag3 |
150 | lambda: |- |
151 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "UMIDADE"); |
152 | it.printf(it.get_width() / 2, 15, id(font2), TextAlign::TOP_CENTER, "%.1f%%", id(umidade).state); |
153 | - id: pag4 |
154 | lambda: |- |
155 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "LUZES ACESAS"); |
156 | it.printf(2*(it.get_width() / 3), 15, id(font2), TextAlign::TOP_CENTER, "%.0f", id(luzes_acesas).state); |
157 | it.printf(it.get_width() / 3, 20, id(font5), TextAlign::TOP_CENTER, "\U000F1A4E"); |
158 | - id: pag5 |
159 | lambda: |- |
160 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "CORTINAS ABERTAS"); |
161 | it.printf(2*(it.get_width() / 3), 15, id(font2), TextAlign::TOP_CENTER, "%.0f", id(cortinas_abertas).state); |
162 | it.printf(it.get_width() / 3, 20, id(font5), TextAlign::TOP_CENTER, "\U000F1846"); |
163 | - id: pag6 |
164 | lambda: |- |
165 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "JANELAS ABERTAS"); |
166 | it.printf(2*(it.get_width() / 3), 15, id(font2), TextAlign::TOP_CENTER, "%.0f", id(janelas_abertas).state); |
167 | it.printf(it.get_width() / 3, 20, id(font5), TextAlign::TOP_CENTER, "\U000F05B1"); |
168 | - id: pag7 |
169 | lambda: |- |
170 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "PERSIANAS ABERTAS"); |
171 | it.printf(2*(it.get_width() / 3), 15, id(font2), TextAlign::TOP_CENTER, "%.0f", id(persianas_abertas).state); |
172 | it.printf(it.get_width() / 3, 20, id(font5), TextAlign::TOP_CENTER, "\U000F111E"); |
173 | - id: pag8 |
174 | lambda: |- |
175 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "FECHADURAS"); |
176 | it.printf(2*(it.get_width() / 3), 15, id(font2), TextAlign::TOP_CENTER, "%.0f", id(fechaduras_destrancadas).state); |
177 | it.printf(it.get_width() / 3, 20, id(font5), TextAlign::TOP_CENTER, "\U000F08B2"); |
178 | - id: pag9 |
179 | lambda: |- |
180 | it.printf(it.get_width() / 2, 0, id(font3), TextAlign::TOP_CENTER, "GLICOSE PATRICK"); |
181 | it.printf(3*(it.get_width() / 4), 15, id(font2), TextAlign::TOP_CENTER, "%.0f", id(glicose).state); |
182 | it.printf(it.get_width() / 4, 20, id(font5), TextAlign::TOP_CENTER, "\U000F1126"); |
183 | |
184 | interval: |
185 | - interval: 4s |
186 | then: |
187 | - display.page.show_next: lcd |
188 | - component.update: lcd |
189 | |