esphome 2024.8.0b2__py3-none-any.whl → 2024.8.0b3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,8 +6,8 @@ Constants already defined in esphome.const are not duplicated here and must be i
6
6
 
7
7
  from esphome import codegen as cg, config_validation as cv
8
8
  from esphome.const import CONF_ITEMS
9
- from esphome.core import ID, Lambda
10
- from esphome.cpp_generator import MockObj
9
+ from esphome.core import Lambda
10
+ from esphome.cpp_generator import LambdaExpression, MockObj
11
11
  from esphome.cpp_types import uint32
12
12
  from esphome.schema_extractors import SCHEMA_EXTRACT, schema_extractor
13
13
 
@@ -22,19 +22,22 @@ def literal(arg):
22
22
  return arg
23
23
 
24
24
 
25
+ def call_lambda(lamb: LambdaExpression):
26
+ expr = lamb.content.strip()
27
+ if expr.startswith("return") and expr.endswith(";"):
28
+ return expr[7:][:-1]
29
+ return f"{lamb}()"
30
+
31
+
25
32
  class LValidator:
26
33
  """
27
34
  A validator for a particular type used in LVGL. Usable in configs as a validator, also
28
35
  has `process()` to convert a value during code generation
29
36
  """
30
37
 
31
- def __init__(
32
- self, validator, rtype, idtype=None, idexpr=None, retmapper=None, requires=None
33
- ):
38
+ def __init__(self, validator, rtype, retmapper=None, requires=None):
34
39
  self.validator = validator
35
40
  self.rtype = rtype
36
- self.idtype = idtype
37
- self.idexpr = idexpr
38
41
  self.retmapper = retmapper
39
42
  self.requires = requires
40
43
 
@@ -43,8 +46,6 @@ class LValidator:
43
46
  value = requires_component(self.requires)(value)
44
47
  if isinstance(value, cv.Lambda):
45
48
  return cv.returning_lambda(value)
46
- if self.idtype is not None and isinstance(value, ID):
47
- return cv.use_id(self.idtype)(value)
48
49
  return self.validator(value)
49
50
 
50
51
  async def process(self, value, args=()):
@@ -52,10 +53,10 @@ class LValidator:
52
53
  return None
53
54
  if isinstance(value, Lambda):
54
55
  return cg.RawExpression(
55
- f"{await cg.process_lambda(value, args, return_type=self.rtype)}()"
56
+ call_lambda(
57
+ await cg.process_lambda(value, args, return_type=self.rtype)
58
+ )
56
59
  )
57
- if self.idtype is not None and isinstance(value, ID):
58
- return cg.RawExpression(f"{value}->{self.idexpr}")
59
60
  if self.retmapper is not None:
60
61
  return self.retmapper(value)
61
62
  return cg.safe_exp(value)
@@ -89,7 +90,7 @@ class LvConstant(LValidator):
89
90
  cv.ensure_list(self.one_of), uint32, retmapper=self.mapper
90
91
  )
91
92
 
92
- def mapper(self, value, args=()):
93
+ def mapper(self, value):
93
94
  if not isinstance(value, list):
94
95
  value = [value]
95
96
  return literal(
@@ -103,7 +104,7 @@ class LvConstant(LValidator):
103
104
 
104
105
  def extend(self, *choices):
105
106
  """
106
- Extend an LVCconstant with additional choices.
107
+ Extend an LVconstant with additional choices.
107
108
  :param choices: The extra choices
108
109
  :return: A new LVConstant instance
109
110
  """
@@ -431,6 +432,8 @@ CONF_ONE_LINE = "one_line"
431
432
  CONF_ON_SELECT = "on_select"
432
433
  CONF_ONE_CHECKED = "one_checked"
433
434
  CONF_NEXT = "next"
435
+ CONF_PAD_ROW = "pad_row"
436
+ CONF_PAD_COLUMN = "pad_column"
434
437
  CONF_PAGE = "page"
435
438
  CONF_PAGE_WRAP = "page_wrap"
436
439
  CONF_PASSWORD_MODE = "password_mode"
@@ -462,6 +465,7 @@ CONF_SKIP = "skip"
462
465
  CONF_SYMBOL = "symbol"
463
466
  CONF_TAB_ID = "tab_id"
464
467
  CONF_TABS = "tabs"
468
+ CONF_TIME_FORMAT = "time_format"
465
469
  CONF_TILE = "tile"
466
470
  CONF_TILE_ID = "tile_id"
467
471
  CONF_TILES = "tiles"
@@ -1,17 +1,14 @@
1
1
  from typing import Union
2
2
 
3
3
  import esphome.codegen as cg
4
- from esphome.components.binary_sensor import BinarySensor
5
4
  from esphome.components.color import ColorStruct
6
5
  from esphome.components.font import Font
7
6
  from esphome.components.image import Image_
8
- from esphome.components.sensor import Sensor
9
- from esphome.components.text_sensor import TextSensor
10
7
  import esphome.config_validation as cv
11
- from esphome.const import CONF_ARGS, CONF_COLOR, CONF_FORMAT, CONF_VALUE
12
- from esphome.core import HexInt
8
+ from esphome.const import CONF_ARGS, CONF_COLOR, CONF_FORMAT, CONF_TIME, CONF_VALUE
9
+ from esphome.core import HexInt, Lambda
13
10
  from esphome.cpp_generator import MockObj
14
- from esphome.cpp_types import uint32
11
+ from esphome.cpp_types import ESPTime, uint32
15
12
  from esphome.helpers import cpp_string_escape
16
13
  from esphome.schema_extractors import SCHEMA_EXTRACT, schema_extractor
17
14
 
@@ -19,9 +16,11 @@ from . import types as ty
19
16
  from .defines import (
20
17
  CONF_END_VALUE,
21
18
  CONF_START_VALUE,
19
+ CONF_TIME_FORMAT,
22
20
  LV_FONTS,
23
21
  LValidator,
24
22
  LvConstant,
23
+ call_lambda,
25
24
  literal,
26
25
  )
27
26
  from .helpers import (
@@ -110,13 +109,13 @@ def angle(value):
110
109
  def size_validator(value):
111
110
  """A size in one axis - one of "size_content", a number (pixels) or a percentage"""
112
111
  if value == SCHEMA_EXTRACT:
113
- return ["size_content", "pixels", "..%"]
112
+ return ["SIZE_CONTENT", "number of pixels", "percentage"]
114
113
  if isinstance(value, str) and value.lower().endswith("px"):
115
114
  value = cv.int_(value[:-2])
116
115
  if isinstance(value, str) and not value.endswith("%"):
117
116
  if value.upper() == "SIZE_CONTENT":
118
117
  return "LV_SIZE_CONTENT"
119
- raise cv.Invalid("must be 'size_content', a pixel position or a percentage")
118
+ raise cv.Invalid("must be 'size_content', a percentage or an integer (pixels)")
120
119
  if isinstance(value, int):
121
120
  return cv.int_(value)
122
121
  # Will throw an exception if not a percentage.
@@ -125,6 +124,15 @@ def size_validator(value):
125
124
 
126
125
  size = LValidator(size_validator, uint32, retmapper=literal)
127
126
 
127
+
128
+ def pixels_validator(value):
129
+ if isinstance(value, str) and value.lower().endswith("px"):
130
+ return cv.int_(value[:-2])
131
+ return cv.int_(value)
132
+
133
+
134
+ pixels = LValidator(pixels_validator, uint32, retmapper=literal)
135
+
128
136
  radius_consts = LvConstant("LV_RADIUS_", "CIRCLE")
129
137
 
130
138
 
@@ -167,9 +175,7 @@ lv_image = LValidator(
167
175
  retmapper=lambda x: lv_expr.img_from(MockObj(x)),
168
176
  requires="image",
169
177
  )
170
- lv_bool = LValidator(
171
- cv.boolean, cg.bool_, BinarySensor, "get_state()", retmapper=literal
172
- )
178
+ lv_bool = LValidator(cv.boolean, cg.bool_, retmapper=literal)
173
179
 
174
180
 
175
181
  def lv_pct(value: Union[int, float]):
@@ -185,42 +191,60 @@ def lvms_validator_(value):
185
191
 
186
192
 
187
193
  lv_milliseconds = LValidator(
188
- lvms_validator_,
189
- cg.int32,
190
- retmapper=lambda x: x.total_milliseconds,
194
+ lvms_validator_, cg.int32, retmapper=lambda x: x.total_milliseconds
191
195
  )
192
196
 
193
197
 
194
198
  class TextValidator(LValidator):
195
199
  def __init__(self):
196
- super().__init__(
197
- cv.string,
198
- cg.const_char_ptr,
199
- TextSensor,
200
- "get_state().c_str()",
201
- lambda s: cg.safe_exp(f"{s}"),
202
- )
200
+ super().__init__(cv.string, cg.std_string, lambda s: cg.safe_exp(f"{s}"))
203
201
 
204
202
  def __call__(self, value):
205
- if isinstance(value, dict):
203
+ if isinstance(value, dict) and CONF_FORMAT in value:
206
204
  return value
207
205
  return super().__call__(value)
208
206
 
209
207
  async def process(self, value, args=()):
210
208
  if isinstance(value, dict):
211
- args = [str(x) for x in value[CONF_ARGS]]
212
- arg_expr = cg.RawExpression(",".join(args))
213
- format_str = cpp_string_escape(value[CONF_FORMAT])
214
- return literal(f"str_sprintf({format_str}, {arg_expr}).c_str()")
209
+ if format_str := value.get(CONF_FORMAT):
210
+ args = [str(x) for x in value[CONF_ARGS]]
211
+ arg_expr = cg.RawExpression(",".join(args))
212
+ format_str = cpp_string_escape(format_str)
213
+ return literal(f"str_sprintf({format_str}, {arg_expr}).c_str()")
214
+ if time_format := value.get(CONF_TIME_FORMAT):
215
+ source = value[CONF_TIME]
216
+ if isinstance(source, Lambda):
217
+ time_format = cpp_string_escape(time_format)
218
+ return cg.RawExpression(
219
+ call_lambda(
220
+ await cg.process_lambda(source, args, return_type=ESPTime)
221
+ )
222
+ + f".strftime({time_format}).c_str()"
223
+ )
224
+ # must be an ID
225
+ source = await cg.get_variable(source)
226
+ return source.now().strftime(time_format).c_str()
227
+ if isinstance(value, Lambda):
228
+ value = call_lambda(
229
+ await cg.process_lambda(value, args, return_type=self.rtype)
230
+ )
231
+
232
+ # Was the lambda call reduced to a string?
233
+ if value.endswith("c_str()") or (
234
+ value.endswith('"') and value.startswith('"')
235
+ ):
236
+ pass
237
+ else:
238
+ # Either a std::string or a lambda call returning that. We need const char*
239
+ value = f"({value}).c_str()"
240
+ return cg.RawExpression(value)
215
241
  return await super().process(value, args)
216
242
 
217
243
 
218
244
  lv_text = TextValidator()
219
- lv_float = LValidator(cv.float_, cg.float_, Sensor, "get_state()")
220
- lv_int = LValidator(cv.int_, cg.int_, Sensor, "get_state()")
221
- lv_brightness = LValidator(
222
- cv.percentage, cg.float_, Sensor, "get_state()", retmapper=lambda x: int(x * 255)
223
- )
245
+ lv_float = LValidator(cv.float_, cg.float_)
246
+ lv_int = LValidator(cv.int_, cg.int_)
247
+ lv_brightness = LValidator(cv.percentage, cg.float_, retmapper=lambda x: int(x * 255))
224
248
 
225
249
 
226
250
  def is_lv_font(font):
@@ -1,5 +1,6 @@
1
1
  from esphome import config_validation as cv
2
2
  from esphome.automation import Trigger, validate_automation
3
+ from esphome.components.time import RealTimeClock
3
4
  from esphome.const import (
4
5
  CONF_ARGS,
5
6
  CONF_FORMAT,
@@ -8,6 +9,7 @@ from esphome.const import (
8
9
  CONF_ON_VALUE,
9
10
  CONF_STATE,
10
11
  CONF_TEXT,
12
+ CONF_TIME,
11
13
  CONF_TRIGGER_ID,
12
14
  CONF_TYPE,
13
15
  )
@@ -15,6 +17,7 @@ from esphome.core import TimePeriod
15
17
  from esphome.schema_extractors import SCHEMA_EXTRACT
16
18
 
17
19
  from . import defines as df, lv_validation as lvalid
20
+ from .defines import CONF_TIME_FORMAT
18
21
  from .helpers import add_lv_use, requires_component, validate_printf
19
22
  from .lv_validation import lv_color, lv_font, lv_image
20
23
  from .lvcode import LvglComponent
@@ -46,7 +49,13 @@ TEXT_SCHEMA = cv.Schema(
46
49
  ),
47
50
  validate_printf,
48
51
  ),
49
- lvalid.lv_text,
52
+ cv.Schema(
53
+ {
54
+ cv.Required(CONF_TIME_FORMAT): cv.string,
55
+ cv.GenerateID(CONF_TIME): cv.templatable(cv.use_id(RealTimeClock)),
56
+ }
57
+ ),
58
+ cv.templatable(cv.string),
50
59
  )
51
60
  }
52
61
  )
@@ -116,15 +125,13 @@ STYLE_PROPS = {
116
125
  "opa_layered": lvalid.opacity,
117
126
  "outline_color": lvalid.lv_color,
118
127
  "outline_opa": lvalid.opacity,
119
- "outline_pad": lvalid.size,
120
- "outline_width": lvalid.size,
121
- "pad_all": lvalid.size,
122
- "pad_bottom": lvalid.size,
123
- "pad_column": lvalid.size,
124
- "pad_left": lvalid.size,
125
- "pad_right": lvalid.size,
126
- "pad_row": lvalid.size,
127
- "pad_top": lvalid.size,
128
+ "outline_pad": lvalid.pixels,
129
+ "outline_width": lvalid.pixels,
130
+ "pad_all": lvalid.pixels,
131
+ "pad_bottom": lvalid.pixels,
132
+ "pad_left": lvalid.pixels,
133
+ "pad_right": lvalid.pixels,
134
+ "pad_top": lvalid.pixels,
128
135
  "shadow_color": lvalid.lv_color,
129
136
  "shadow_ofs_x": cv.int_,
130
137
  "shadow_ofs_y": cv.int_,
@@ -304,6 +311,8 @@ LAYOUT_SCHEMA = {
304
311
  cv.Required(df.CONF_GRID_COLUMNS): [grid_spec],
305
312
  cv.Optional(df.CONF_GRID_COLUMN_ALIGN): grid_alignments,
306
313
  cv.Optional(df.CONF_GRID_ROW_ALIGN): grid_alignments,
314
+ cv.Optional(df.CONF_PAD_ROW): lvalid.pixels,
315
+ cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels,
307
316
  },
308
317
  df.TYPE_FLEX: {
309
318
  cv.Optional(
@@ -312,6 +321,8 @@ LAYOUT_SCHEMA = {
312
321
  cv.Optional(df.CONF_FLEX_ALIGN_MAIN, default="start"): flex_alignments,
313
322
  cv.Optional(df.CONF_FLEX_ALIGN_CROSS, default="start"): flex_alignments,
314
323
  cv.Optional(df.CONF_FLEX_ALIGN_TRACK, default="start"): flex_alignments,
324
+ cv.Optional(df.CONF_PAD_ROW): lvalid.pixels,
325
+ cv.Optional(df.CONF_PAD_COLUMN): lvalid.pixels,
315
326
  },
316
327
  },
317
328
  lower=True,
@@ -338,7 +349,6 @@ DISP_BG_SCHEMA = cv.Schema(
338
349
  }
339
350
  )
340
351
 
341
-
342
352
  # A style schema that can include text
343
353
  STYLED_TEXT_SCHEMA = cv.maybe_simple_value(
344
354
  STYLE_SCHEMA.extend(TEXT_SCHEMA), key=CONF_TEXT
@@ -20,6 +20,8 @@ from ..defines import (
20
20
  CONF_GRID_ROWS,
21
21
  CONF_LAYOUT,
22
22
  CONF_MAIN,
23
+ CONF_PAD_COLUMN,
24
+ CONF_PAD_ROW,
23
25
  CONF_SCROLLBAR_MODE,
24
26
  CONF_STYLES,
25
27
  CONF_WIDGETS,
@@ -29,6 +31,7 @@ from ..defines import (
29
31
  TYPE_FLEX,
30
32
  TYPE_GRID,
31
33
  LValidator,
34
+ call_lambda,
32
35
  join_enums,
33
36
  literal,
34
37
  )
@@ -273,6 +276,10 @@ async def set_obj_properties(w: Widget, config):
273
276
  layout_type: str = layout[CONF_TYPE]
274
277
  add_lv_use(layout_type)
275
278
  lv_obj.set_layout(w.obj, literal(f"LV_LAYOUT_{layout_type.upper()}"))
279
+ if (pad_row := layout.get(CONF_PAD_ROW)) is not None:
280
+ w.set_style(CONF_PAD_ROW, pad_row, 0)
281
+ if (pad_column := layout.get(CONF_PAD_COLUMN)) is not None:
282
+ w.set_style(CONF_PAD_COLUMN, pad_column, 0)
276
283
  if layout_type == TYPE_GRID:
277
284
  wid = config[CONF_ID]
278
285
  rows = [str(x) for x in layout[CONF_GRID_ROWS]]
@@ -316,8 +323,13 @@ async def set_obj_properties(w: Widget, config):
316
323
  flag_clr = set()
317
324
  flag_set = set()
318
325
  props = parts[CONF_MAIN][CONF_DEFAULT]
326
+ lambs = {}
327
+ flag_set = set()
328
+ flag_clr = set()
319
329
  for prop, value in {k: v for k, v in props.items() if k in OBJ_FLAGS}.items():
320
- if value:
330
+ if isinstance(value, cv.Lambda):
331
+ lambs[prop] = value
332
+ elif value:
321
333
  flag_set.add(prop)
322
334
  else:
323
335
  flag_clr.add(prop)
@@ -327,6 +339,13 @@ async def set_obj_properties(w: Widget, config):
327
339
  if flag_clr:
328
340
  clrs = join_enums(flag_clr, "LV_OBJ_FLAG_")
329
341
  w.clear_flag(clrs)
342
+ for key, value in lambs.items():
343
+ lamb = await cg.process_lambda(value, [], return_type=cg.bool_)
344
+ flag = f"LV_OBJ_FLAG_{key.upper()}"
345
+ with LvConditional(call_lambda(lamb)) as cond:
346
+ w.add_flag(flag)
347
+ cond.else_()
348
+ w.clear_flag(flag)
330
349
 
331
350
  if states := config.get(CONF_STATE):
332
351
  adds = set()
@@ -348,7 +367,7 @@ async def set_obj_properties(w: Widget, config):
348
367
  for key, value in lambs.items():
349
368
  lamb = await cg.process_lambda(value, [], return_type=cg.bool_)
350
369
  state = f"LV_STATE_{key.upper()}"
351
- with LvConditional(f"{lamb}()") as cond:
370
+ with LvConditional(call_lambda(lamb)) as cond:
352
371
  w.add_state(state)
353
372
  cond.else_()
354
373
  w.clear_state(state)
@@ -1,6 +1,9 @@
1
1
  #pragma once
2
2
 
3
- #include "esphome/core/entity_base.h"
3
+ #include <stddef.h>
4
+ #include <cstdint>
5
+ #include <functional>
6
+ #include <vector>
4
7
  #include "esphome/core/helpers.h"
5
8
 
6
9
  namespace esphome {
@@ -1,5 +1,9 @@
1
1
  #pragma once
2
2
 
3
+ #include <stddef.h>
4
+ #include <cstdint>
5
+ #include <vector>
6
+
3
7
  namespace esphome {
4
8
  namespace speaker {
5
9
 
@@ -1864,7 +1864,7 @@ def maybe_simple_value(*validators, **kwargs):
1864
1864
  if value == SCHEMA_EXTRACT:
1865
1865
  return (validator, key)
1866
1866
 
1867
- if isinstance(value, dict):
1867
+ if isinstance(value, dict) and key in value:
1868
1868
  return validator(value)
1869
1869
  return validator({key: value})
1870
1870
 
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2024.8.0b2"
3
+ __version__ = "2024.8.0b3"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esphome
3
- Version: 2024.8.0b2
3
+ Version: 2024.8.0b3
4
4
  Summary: Make creating custom firmwares for ESP32/ESP8266 super easy.
5
5
  Author-email: The ESPHome Authors <esphome@nabucasa.com>
6
6
  License: MIT
@@ -4,8 +4,8 @@ esphome/automation.py,sha256=5Ctd9-x3snlo582SHBy5WQISH5e6-8Mt9b7emxJyWiM,14507
4
4
  esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
5
5
  esphome/config.py,sha256=ArMupdqCpKqQm-vFWb85HueI88DAfYTjuhR6mA691DI,39614
6
6
  esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
7
- esphome/config_validation.py,sha256=mMpuN14yszcnKweuJjvG1f2IibZPXwfAommZoliNpyg,65827
8
- esphome/const.py,sha256=OnMxq49qcVWv6uYfNYxbT3ak0pzDxh7s-RzH2nZ9pIA,39410
7
+ esphome/config_validation.py,sha256=Uck0GvA97sJ6sW25y0nqvOT2nsYIb6uZ_1sI-YBl4vc,65844
8
+ esphome/const.py,sha256=gW_Ylnoo9hnOGQZRCz_BaYDmMBkA6n__s7u02jKqmE4,39410
9
9
  esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
10
10
  esphome/cpp_generator.py,sha256=lXPXHYUsFIvBSAoZ93mXYlGcXYg5L18nTtYGHE4_rr8,31203
11
11
  esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
@@ -1389,16 +1389,16 @@ esphome/components/ltr_als_ps/ltr_definitions.h,sha256=yaIvnLQBIBnPuQBvHDD9Q_16U
1389
1389
  esphome/components/ltr_als_ps/sensor.py,sha256=e5KnfruXbVI0s1S0bLJihTnIM5UOmiQT2dMRHxFReAM,10023
1390
1390
  esphome/components/lvgl/__init__.py,sha256=CxVEe3eNnpPlIGc4rl8wiNPI4GXKrQxn1i5lt7L7OsM,12430
1391
1391
  esphome/components/lvgl/automation.py,sha256=5BDOa0alZsraUcWgoh-QHsZDBtuzPrdU4VgiQIuL1oQ,7261
1392
- esphome/components/lvgl/defines.py,sha256=dlAnClIO2QDnrKPMJdwtVVgLq712CFg-7pnAB1UlwuA,12196
1392
+ esphome/components/lvgl/defines.py,sha256=DxFTnt42o9eLRExvIUqzkmcVN-4nMBF6YSewxynfo_s,12183
1393
1393
  esphome/components/lvgl/encoders.py,sha256=b8E__Bu4OJj8_svtgiHE8hfL78WSJIAuGo_JpmlVf5I,3088
1394
1394
  esphome/components/lvgl/font.cpp,sha256=l9dPIw7LdOdtg_3QZErTLLevMc6A66Wfm-1s-6qcBmM,2712
1395
1395
  esphome/components/lvgl/helpers.py,sha256=XI3C5IHwoSVlgR32kMxeXTZWK6iW112nmWv5wByrKLY,1253
1396
- esphome/components/lvgl/lv_validation.py,sha256=cXlzMVhA_O4ANGDeIKqTBdICcPMQalhkVgG3pKZu6V0,7780
1396
+ esphome/components/lvgl/lv_validation.py,sha256=aGWc0YBZCZjYIgwYwE83vnROFiaMJf6Fo9db1Sas6Jc,8995
1397
1397
  esphome/components/lvgl/lvcode.py,sha256=uUxJ-tGqo-fZdLaumXbAI4ElQh6P_IS8dD6eLtvwogo,10103
1398
1398
  esphome/components/lvgl/lvgl_esphome.cpp,sha256=yqEZdGmaUP6p5QRfQ7mq3_V3Mk7y431eK9EzlivmJnY,14150
1399
1399
  esphome/components/lvgl/lvgl_esphome.h,sha256=hsJml28BdPNyTaxdmf-EspzSzSFiLXTZB7Jgd-v00ws,9134
1400
1400
  esphome/components/lvgl/lvgl_hal.h,sha256=aZqWpSmKKAB-ZfNxxgxjgASTtLpAZjXJKuoTiPB0qqU,431
1401
- esphome/components/lvgl/schemas.py,sha256=hMFIjfgHpgVA5BS5on7F2VPP59KP9AdlomibmaBhRxU,13503
1401
+ esphome/components/lvgl/schemas.py,sha256=CmENCi8w-gO7bvJB0mw5LAhk_dxSNchjOvqwUu7v4TE,14045
1402
1402
  esphome/components/lvgl/styles.py,sha256=DauT2qibb5vJMbejaUnhQ6OHEmDJkcjY9yctl4GrcCw,2167
1403
1403
  esphome/components/lvgl/touchscreens.py,sha256=R2tkfse86qzWDU6Ot_tARApWfn1jeFaJObDUX5gITL8,1634
1404
1404
  esphome/components/lvgl/trigger.py,sha256=bUdmvSH-mEPCzdcJQuyedq0oIIYvMOzzGit_5zdjCmA,2269
@@ -1416,7 +1416,7 @@ esphome/components/lvgl/switch/lvgl_switch.h,sha256=w8SqlodBYRdVzlhBwkBERRP-X-Ir
1416
1416
  esphome/components/lvgl/text/__init__.py,sha256=SfNxKSwBrV_HYjZjLWKvOU3aum8t4hBuHh-erfypy58,1530
1417
1417
  esphome/components/lvgl/text/lvgl_text.h,sha256=KZrcwh3G0wADH9hg4byTpF1pk67x5cn9zHWOwv_G5YY,883
1418
1418
  esphome/components/lvgl/text_sensor/__init__.py,sha256=Xz4hfnrRdaxkIjyF2B3w2eX1Py3VcH7Mk1Jy6za5FBY,1200
1419
- esphome/components/lvgl/widgets/__init__.py,sha256=NIw3cDHk3CZij_S58Tq4UHHvheYWN-k83eHGVAc6uDQ,12342
1419
+ esphome/components/lvgl/widgets/__init__.py,sha256=N2fLNSexPZuJkqPIKR_4IXJXMxJlAWHcmoV7L5S2qlA,13065
1420
1420
  esphome/components/lvgl/widgets/animimg.py,sha256=-dsL4TJ5k3defNUiLIE6xads3pH1I1T5Bmnn7uKcQZ8,3395
1421
1421
  esphome/components/lvgl/widgets/arc.py,sha256=M7T1iU_dhjnHJSSm-DW0u7RSZAgAQwycBxifODPbTyw,2305
1422
1422
  esphome/components/lvgl/widgets/button.py,sha256=lR_8dHZK3P9AY6WbjfL3Sj9oyTOf-i9qbvkGzcPpzgk,423
@@ -1606,7 +1606,7 @@ esphome/components/micronova/text_sensor/micronova_text_sensor.cpp,sha256=-ycHe4
1606
1606
  esphome/components/micronova/text_sensor/micronova_text_sensor.h,sha256=6_tjKN6nxn8_Mf6VOW-TAyDtZci602ljxqnifsOaD8I,681
1607
1607
  esphome/components/microphone/__init__.py,sha256=YKpTAy9uvPbHkb4faSk9EA0ltuEATseZFdjh3N2nWQM,2491
1608
1608
  esphome/components/microphone/automation.h,sha256=MSdGq7kqFJlWC-bMn97SG7DItrXOrJ-kRiDr6QsRkes,929
1609
- esphome/components/microphone/microphone.h,sha256=wdiIL0brbxHp2HqXRnKFUISVWfwgsPTs10Y6O_jr4xI,833
1609
+ esphome/components/microphone/microphone.h,sha256=j_ILMqRG29PXcr5Q5IxdBAghRvuajix2eXkUhIwahNs,874
1610
1610
  esphome/components/mics_4514/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1611
1611
  esphome/components/mics_4514/mics_4514.cpp,sha256=jm7s2NSDVOW3_Gy0X77GkgoDgPhAT1__7f3U2zaAMWk,4335
1612
1612
  esphome/components/mics_4514/mics_4514.h,sha256=w3vtAl_ErB-j_-fl6Lk4U7cShwwlRgfbKQrb3liekNs,746
@@ -2474,7 +2474,7 @@ esphome/components/sonoff_d1/sonoff_d1.cpp,sha256=9xT42oxeLJ5CGrZ7wqIH5KVTkwW3XY
2474
2474
  esphome/components/sonoff_d1/sonoff_d1.h,sha256=FNHcaqGktpV3S19A1LD2wtpRpEqA0h6g9GFb36pMy_E,3457
2475
2475
  esphome/components/speaker/__init__.py,sha256=NE8RYnynPb2TAQ9dW5k-jMbDliJoRCqotJxIMawGdQg,2732
2476
2476
  esphome/components/speaker/automation.h,sha256=bpp8rraMm1A0C4r0PfELw4fI9TySyrg4GPQgoBzF9SE,1584
2477
- esphome/components/speaker/speaker.h,sha256=5LL4_IrQ9NQZ1mmrZEHHnB34QeSNWHooUdZnntTLmLM,960
2477
+ esphome/components/speaker/speaker.h,sha256=cLRt67zz0KOSuPSdpJOOioQIHWu6bUneZQSiyj4WuM4,1018
2478
2478
  esphome/components/speed/__init__.py,sha256=Bfyz1MHHvLHj93TfN53E2uhKXKLYtp0k4st6Xb3760o,74
2479
2479
  esphome/components/speed/fan/__init__.py,sha256=zhurjCYLG9V-soV-LF4mEGxqyrcQuQ_KLdFq0LpyAKA,1798
2480
2480
  esphome/components/speed/fan/speed_fan.cpp,sha256=vjrhZZ4Rto6uEmw8396tF9QrAXZvZSKKiIC-_T2LtYc,1472
@@ -3225,9 +3225,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3225
3225
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3226
3226
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3227
3227
  esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
3228
- esphome-2024.8.0b2.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3229
- esphome-2024.8.0b2.dist-info/METADATA,sha256=JACkKX-kcjNpHwsw05HK7NX06baqhoQcYjqLv1y4oY8,3265
3230
- esphome-2024.8.0b2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3231
- esphome-2024.8.0b2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3232
- esphome-2024.8.0b2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3233
- esphome-2024.8.0b2.dist-info/RECORD,,
3228
+ esphome-2024.8.0b3.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3229
+ esphome-2024.8.0b3.dist-info/METADATA,sha256=9BUeGDF4rU-BwxY-hpEJKgOrtSmV_N5jsGqTc8BsRdw,3265
3230
+ esphome-2024.8.0b3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3231
+ esphome-2024.8.0b3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3232
+ esphome-2024.8.0b3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3233
+ esphome-2024.8.0b3.dist-info/RECORD,,