esphome 2024.8.0b4__py3-none-any.whl → 2024.8.2__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.
@@ -179,6 +179,7 @@ void APIConnection::loop() {
179
179
  SubscribeHomeAssistantStateResponse resp;
180
180
  resp.entity_id = it.entity_id;
181
181
  resp.attribute = it.attribute.value();
182
+ resp.once = it.once;
182
183
  if (this->send_subscribe_home_assistant_state_response(resp)) {
183
184
  state_subs_at_++;
184
185
  }
@@ -186,7 +186,7 @@ async def datetime_date_set_to_code(config, action_id, template_arg, args):
186
186
 
187
187
  date_config = config[CONF_DATE]
188
188
  if cg.is_template(date_config):
189
- template_ = await cg.templatable(date_config, [], cg.ESPTime)
189
+ template_ = await cg.templatable(date_config, args, cg.ESPTime)
190
190
  cg.add(action_var.set_date(template_))
191
191
  else:
192
192
  date_struct = cg.StructInitializer(
@@ -217,7 +217,7 @@ async def datetime_time_set_to_code(config, action_id, template_arg, args):
217
217
 
218
218
  time_config = config[CONF_TIME]
219
219
  if cg.is_template(time_config):
220
- template_ = await cg.templatable(time_config, [], cg.ESPTime)
220
+ template_ = await cg.templatable(time_config, args, cg.ESPTime)
221
221
  cg.add(action_var.set_time(template_))
222
222
  else:
223
223
  time_struct = cg.StructInitializer(
@@ -248,7 +248,7 @@ async def datetime_datetime_set_to_code(config, action_id, template_arg, args):
248
248
 
249
249
  datetime_config = config[CONF_DATETIME]
250
250
  if cg.is_template(datetime_config):
251
- template_ = await cg.templatable(datetime_config, [], cg.ESPTime)
251
+ template_ = await cg.templatable(datetime_config, args, cg.ESPTime)
252
252
  cg.add(action_var.set_datetime(template_))
253
253
  else:
254
254
  datetime_struct = cg.StructInitializer(
@@ -472,13 +472,13 @@ void EthernetComponent::start_connect_() {
472
472
  if (err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED) {
473
473
  ESPHL_ERROR_CHECK(err, "DHCPC start error");
474
474
  }
475
+ }
475
476
  #if USE_NETWORK_IPV6
476
- err = esp_netif_create_ip6_linklocal(this->eth_netif_);
477
- if (err != ESP_OK) {
478
- ESPHL_ERROR_CHECK(err, "Enable IPv6 link local failed");
479
- }
480
- #endif /* USE_NETWORK_IPV6 */
477
+ err = esp_netif_create_ip6_linklocal(this->eth_netif_);
478
+ if (err != ESP_OK) {
479
+ ESPHL_ERROR_CHECK(err, "Enable IPv6 link local failed");
481
480
  }
481
+ #endif /* USE_NETWORK_IPV6 */
482
482
 
483
483
  this->connect_begin_ = millis();
484
484
  this->status_set_warning();
@@ -266,7 +266,10 @@ async def to_code(config):
266
266
  await add_top_layer(config)
267
267
  await msgboxes_to_code(config)
268
268
  await disp_update(f"{lv_component}->get_disp()", config)
269
- Widget.set_completed()
269
+ # At this point only the setup code should be generated
270
+ assert LvContext.added_lambda_count == 1
271
+ Widget.set_completed()
272
+ async with LvContext(lv_component):
270
273
  await generate_triggers(lv_component)
271
274
  for conf in config.get(CONF_ON_IDLE, ()):
272
275
  templ = await cg.templatable(conf[CONF_TIMEOUT], [], cg.uint32)
@@ -5,6 +5,7 @@ from esphome import automation
5
5
  import esphome.codegen as cg
6
6
  import esphome.config_validation as cv
7
7
  from esphome.const import CONF_ID, CONF_TIMEOUT
8
+ from esphome.cpp_generator import RawExpression
8
9
  from esphome.cpp_types import nullptr
9
10
 
10
11
  from .defines import (
@@ -26,6 +27,7 @@ from .lvcode import (
26
27
  add_line_marks,
27
28
  lv,
28
29
  lv_add,
30
+ lv_expr,
29
31
  lv_obj,
30
32
  lvgl_comp,
31
33
  )
@@ -38,7 +40,13 @@ from .types import (
38
40
  lv_disp_t,
39
41
  lv_obj_t,
40
42
  )
41
- from .widgets import Widget, get_widgets, lv_scr_act, set_obj_properties
43
+ from .widgets import (
44
+ Widget,
45
+ get_widgets,
46
+ lv_scr_act,
47
+ set_obj_properties,
48
+ wait_for_widgets,
49
+ )
42
50
 
43
51
 
44
52
  async def action_to_code(
@@ -48,10 +56,12 @@ async def action_to_code(
48
56
  template_arg,
49
57
  args,
50
58
  ):
59
+ await wait_for_widgets()
51
60
  async with LambdaContext(parameters=args, where=action_id) as context:
61
+ with LvConditional(lv_expr.is_pre_initialise()):
62
+ context.add(RawExpression("return"))
52
63
  for widget in widgets:
53
- with LvConditional(widget.obj != nullptr):
54
- await action(widget)
64
+ await action(widget)
55
65
  var = cg.new_Pvariable(action_id, template_arg, await context.get_lambda())
56
66
  return var
57
67
 
@@ -10,7 +10,7 @@ from ..defines import CONF_LVGL_ID, CONF_WIDGET
10
10
  from ..lvcode import EVENT_ARG, LambdaContext, LvContext
11
11
  from ..schemas import LVGL_SCHEMA
12
12
  from ..types import LV_EVENT, lv_pseudo_button_t
13
- from ..widgets import Widget, get_widgets
13
+ from ..widgets import Widget, get_widgets, wait_for_widgets
14
14
 
15
15
  CONFIG_SCHEMA = (
16
16
  binary_sensor_schema(BinarySensor)
@@ -29,6 +29,7 @@ async def to_code(config):
29
29
  widget = await get_widgets(config, CONF_WIDGET)
30
30
  widget = widget[0]
31
31
  assert isinstance(widget, Widget)
32
+ await wait_for_widgets()
32
33
  async with LambdaContext(EVENT_ARG) as pressed_ctx:
33
34
  pressed_ctx.add(sensor.publish_state(widget.is_pressed()))
34
35
  async with LvContext(paren) as ctx:
@@ -8,7 +8,7 @@ from ..defines import CONF_LVGL_ID
8
8
  from ..lvcode import LvContext
9
9
  from ..schemas import LVGL_SCHEMA
10
10
  from ..types import LvType, lvgl_ns
11
- from ..widgets import get_widgets
11
+ from ..widgets import get_widgets, wait_for_widgets
12
12
 
13
13
  lv_led_t = LvType("lv_led_t")
14
14
  LVLight = lvgl_ns.class_("LVLight", LightOutput)
@@ -28,5 +28,6 @@ async def to_code(config):
28
28
  paren = await cg.get_variable(config[CONF_LVGL_ID])
29
29
  widget = await get_widgets(config, CONF_LED)
30
30
  widget = widget[0]
31
+ await wait_for_widgets()
31
32
  async with LvContext(paren) as ctx:
32
33
  ctx.add(var.set_obj(widget.obj))
@@ -176,6 +176,8 @@ class LvContext(LambdaContext):
176
176
  Code generation into the LVGL initialisation code (called in `setup()`)
177
177
  """
178
178
 
179
+ added_lambda_count = 0
180
+
179
181
  def __init__(self, lv_component, args=None):
180
182
  self.args = args or LVGL_COMP_ARG
181
183
  super().__init__(parameters=self.args)
@@ -183,6 +185,7 @@ class LvContext(LambdaContext):
183
185
 
184
186
  async def add_init_lambda(self):
185
187
  cg.add(self.lv_component.add_init_lambda(await self.get_lambda()))
188
+ LvContext.added_lambda_count += 1
186
189
 
187
190
  async def __aexit__(self, exc_type, exc_val, exc_tb):
188
191
  await super().__aexit__(exc_type, exc_val, exc_tb)
@@ -294,6 +294,13 @@ void LvglComponent::loop() {
294
294
  }
295
295
  lv_timer_handler_run_in_period(5);
296
296
  }
297
+ bool lv_is_pre_initialise() {
298
+ if (!lv_is_initialized()) {
299
+ ESP_LOGE(TAG, "LVGL call before component is initialised");
300
+ return true;
301
+ }
302
+ return false;
303
+ }
297
304
 
298
305
  #ifdef USE_LVGL_IMAGE
299
306
  lv_img_dsc_t *lv_img_from(image::Image *src, lv_img_dsc_t *img_dsc) {
@@ -40,6 +40,7 @@ namespace lvgl {
40
40
 
41
41
  extern lv_event_code_t lv_api_event; // NOLINT
42
42
  extern lv_event_code_t lv_update_event; // NOLINT
43
+ extern bool lv_is_pre_initialise();
43
44
  #ifdef USE_LVGL_COLOR
44
45
  inline lv_color_t lv_color_from(Color color) { return lv_color_make(color.red, color.green, color.blue); }
45
46
  #endif // USE_LVGL_COLOR
@@ -16,7 +16,7 @@ from ..lvcode import (
16
16
  )
17
17
  from ..schemas import LVGL_SCHEMA
18
18
  from ..types import LV_EVENT, LvNumber, lvgl_ns
19
- from ..widgets import get_widgets
19
+ from ..widgets import get_widgets, wait_for_widgets
20
20
 
21
21
  LVGLNumber = lvgl_ns.class_("LVGLNumber", number.Number)
22
22
 
@@ -44,6 +44,7 @@ async def to_code(config):
44
44
  step=widget.get_step(),
45
45
  )
46
46
 
47
+ await wait_for_widgets()
47
48
  async with LambdaContext([(cg.float_, "v")]) as control:
48
49
  await widget.set_property(
49
50
  "value", MockObj("v") * MockObj(widget.get_scale()), config[CONF_ANIMATED]
@@ -15,7 +15,7 @@ from ..lvcode import (
15
15
  )
16
16
  from ..schemas import LVGL_SCHEMA
17
17
  from ..types import LV_EVENT, LvSelect, lvgl_ns
18
- from ..widgets import get_widgets
18
+ from ..widgets import get_widgets, wait_for_widgets
19
19
 
20
20
  LVGLSelect = lvgl_ns.class_("LVGLSelect", select.Select)
21
21
 
@@ -37,6 +37,7 @@ async def to_code(config):
37
37
  options = widget.config.get(CONF_OPTIONS, [])
38
38
  selector = await select.new_select(config, options=options)
39
39
  paren = await cg.get_variable(config[CONF_LVGL_ID])
40
+ await wait_for_widgets()
40
41
  async with LambdaContext(EVENT_ARG) as pub_ctx:
41
42
  pub_ctx.add(selector.publish_index(widget.get_value()))
42
43
  async with LambdaContext([(cg.uint16, "v")]) as control:
@@ -14,7 +14,7 @@ from ..lvcode import (
14
14
  )
15
15
  from ..schemas import LVGL_SCHEMA
16
16
  from ..types import LV_EVENT, LvNumber
17
- from ..widgets import Widget, get_widgets
17
+ from ..widgets import Widget, get_widgets, wait_for_widgets
18
18
 
19
19
  CONFIG_SCHEMA = (
20
20
  sensor_schema(Sensor)
@@ -33,6 +33,7 @@ async def to_code(config):
33
33
  widget = await get_widgets(config, CONF_WIDGET)
34
34
  widget = widget[0]
35
35
  assert isinstance(widget, Widget)
36
+ await wait_for_widgets()
36
37
  async with LambdaContext(EVENT_ARG) as lamb:
37
38
  lv_add(sensor.publish_state(widget.get_value()))
38
39
  async with LvContext(paren, LVGL_COMP_ARG):
@@ -16,7 +16,7 @@ from ..lvcode import (
16
16
  )
17
17
  from ..schemas import LVGL_SCHEMA
18
18
  from ..types import LV_EVENT, LV_STATE, lv_pseudo_button_t, lvgl_ns
19
- from ..widgets import get_widgets
19
+ from ..widgets import get_widgets, wait_for_widgets
20
20
 
21
21
  LVGLSwitch = lvgl_ns.class_("LVGLSwitch", Switch)
22
22
  CONFIG_SCHEMA = (
@@ -35,6 +35,7 @@ async def to_code(config):
35
35
  paren = await cg.get_variable(config[CONF_LVGL_ID])
36
36
  widget = await get_widgets(config, CONF_WIDGET)
37
37
  widget = widget[0]
38
+ await wait_for_widgets()
38
39
  async with LambdaContext(EVENT_ARG) as checked_ctx:
39
40
  checked_ctx.add(switch.publish_state(widget.get_value()))
40
41
  async with LambdaContext([(cg.bool_, "v")]) as control:
@@ -15,7 +15,7 @@ from ..lvcode import (
15
15
  )
16
16
  from ..schemas import LVGL_SCHEMA
17
17
  from ..types import LV_EVENT, LvText, lvgl_ns
18
- from ..widgets import get_widgets
18
+ from ..widgets import get_widgets, wait_for_widgets
19
19
 
20
20
  LVGLText = lvgl_ns.class_("LVGLText", text.Text)
21
21
 
@@ -32,6 +32,7 @@ async def to_code(config):
32
32
  paren = await cg.get_variable(config[CONF_LVGL_ID])
33
33
  widget = await get_widgets(config, CONF_WIDGET)
34
34
  widget = widget[0]
35
+ await wait_for_widgets()
35
36
  async with LambdaContext([(cg.std_string, "text_value")]) as control:
36
37
  await widget.set_property("text", "text_value.c_str())")
37
38
  lv.event_send(widget.obj, API_EVENT, None)
@@ -10,7 +10,7 @@ from ..defines import CONF_LVGL_ID, CONF_WIDGET
10
10
  from ..lvcode import API_EVENT, EVENT_ARG, UPDATE_EVENT, LambdaContext, LvContext
11
11
  from ..schemas import LVGL_SCHEMA
12
12
  from ..types import LV_EVENT, LvText
13
- from ..widgets import get_widgets
13
+ from ..widgets import get_widgets, wait_for_widgets
14
14
 
15
15
  CONFIG_SCHEMA = (
16
16
  text_sensor_schema(TextSensor)
@@ -28,6 +28,7 @@ async def to_code(config):
28
28
  paren = await cg.get_variable(config[CONF_LVGL_ID])
29
29
  widget = await get_widgets(config, CONF_WIDGET)
30
30
  widget = widget[0]
31
+ await wait_for_widgets()
31
32
  async with LambdaContext(EVENT_ARG) as pressed_ctx:
32
33
  pressed_ctx.add(sensor.publish_state(widget.get_value()))
33
34
  async with LvContext(paren) as ctx:
@@ -223,6 +223,19 @@ async def get_widget_(wid: Widget):
223
223
  return await FakeAwaitable(get_widget_generator(wid))
224
224
 
225
225
 
226
+ def widgets_wait_generator():
227
+ while True:
228
+ if Widget.widgets_completed:
229
+ return
230
+ yield
231
+
232
+
233
+ async def wait_for_widgets():
234
+ if Widget.widgets_completed:
235
+ return
236
+ await FakeAwaitable(widgets_wait_generator())
237
+
238
+
226
239
  async def get_widgets(config: Union[dict, list], id: str = CONF_ID) -> list[Widget]:
227
240
  if not config:
228
241
  return []
@@ -3,7 +3,7 @@ import functools
3
3
  import esphome.codegen as cg
4
4
  import esphome.config_validation as cv
5
5
 
6
- from ..defines import CONF_MAIN, literal
6
+ from ..defines import CONF_MAIN
7
7
  from ..lvcode import lv
8
8
  from ..types import LvType
9
9
  from . import Widget, WidgetType
@@ -38,13 +38,15 @@ LINE_SCHEMA = {
38
38
 
39
39
  class LineType(WidgetType):
40
40
  def __init__(self):
41
- super().__init__(CONF_LINE, LvType("lv_line_t"), (CONF_MAIN,), LINE_SCHEMA)
41
+ super().__init__(
42
+ CONF_LINE, LvType("lv_line_t"), (CONF_MAIN,), LINE_SCHEMA, modify_schema={}
43
+ )
42
44
 
43
45
  async def to_code(self, w: Widget, config):
44
46
  """For a line object, create and add the points"""
45
- data = literal(config[CONF_POINTS])
46
- points = cg.static_const_array(config[CONF_POINT_LIST_ID], data)
47
- lv.line_set_points(w.obj, points, len(data))
47
+ if data := config.get(CONF_POINTS):
48
+ points = cg.static_const_array(config[CONF_POINT_LIST_ID], data)
49
+ lv.line_set_points(w.obj, points, len(data))
48
50
 
49
51
 
50
52
  line_spec = LineType()
@@ -13,7 +13,7 @@ from ..defines import (
13
13
  TYPE_FLEX,
14
14
  literal,
15
15
  )
16
- from ..helpers import add_lv_use
16
+ from ..helpers import add_lv_use, lvgl_components_required
17
17
  from ..lv_validation import lv_bool, lv_pct, lv_text
18
18
  from ..lvcode import (
19
19
  EVENT_ARG,
@@ -72,6 +72,7 @@ async def msgbox_to_code(conf):
72
72
  *buttonmatrix_spec.get_uses(),
73
73
  *button_spec.get_uses(),
74
74
  )
75
+ lvgl_components_required.add("BUTTONMATRIX")
75
76
  messagebox_id = conf[CONF_ID]
76
77
  outer = lv_Pvariable(lv_obj_t, messagebox_id.id)
77
78
  buttonmatrix = new_Pvariable(
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2024.8.0b4"
3
+ __version__ = "2024.8.2"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
esphome/storage_json.py CHANGED
@@ -48,6 +48,8 @@ class StorageJSON:
48
48
  firmware_bin_path: str,
49
49
  loaded_integrations: set[str],
50
50
  no_mdns: bool,
51
+ framework: str | None = None,
52
+ core_platform: str | None = None,
51
53
  ) -> None:
52
54
  # Version of the storage JSON schema
53
55
  assert storage_version is None or isinstance(storage_version, int)
@@ -78,6 +80,10 @@ class StorageJSON:
78
80
  self.loaded_integrations = loaded_integrations
79
81
  # Is mDNS disabled
80
82
  self.no_mdns = no_mdns
83
+ # The framework used to compile the firmware
84
+ self.framework = framework
85
+ # The core platform of this firmware. Like "esp32", "rp2040", "host" etc.
86
+ self.core_platform = core_platform
81
87
 
82
88
  def as_dict(self):
83
89
  return {
@@ -94,6 +100,8 @@ class StorageJSON:
94
100
  "firmware_bin_path": self.firmware_bin_path,
95
101
  "loaded_integrations": sorted(self.loaded_integrations),
96
102
  "no_mdns": self.no_mdns,
103
+ "framework": self.framework,
104
+ "core_platform": self.core_platform,
97
105
  }
98
106
 
99
107
  def to_json(self):
@@ -127,6 +135,8 @@ class StorageJSON:
127
135
  and CONF_DISABLED in esph.config[CONF_MDNS]
128
136
  and esph.config[CONF_MDNS][CONF_DISABLED] is True
129
137
  ),
138
+ framework=esph.target_framework,
139
+ core_platform=esph.target_platform,
130
140
  )
131
141
 
132
142
  @staticmethod
@@ -147,6 +157,8 @@ class StorageJSON:
147
157
  firmware_bin_path=None,
148
158
  loaded_integrations=set(),
149
159
  no_mdns=False,
160
+ framework=None,
161
+ core_platform=platform.lower(),
150
162
  )
151
163
 
152
164
  @staticmethod
@@ -168,6 +180,8 @@ class StorageJSON:
168
180
  firmware_bin_path = storage.get("firmware_bin_path")
169
181
  loaded_integrations = set(storage.get("loaded_integrations", []))
170
182
  no_mdns = storage.get("no_mdns", False)
183
+ framework = storage.get("framework")
184
+ core_platform = storage.get("core_platform")
171
185
  return StorageJSON(
172
186
  storage_version,
173
187
  name,
@@ -182,6 +196,8 @@ class StorageJSON:
182
196
  firmware_bin_path,
183
197
  loaded_integrations,
184
198
  no_mdns,
199
+ framework,
200
+ core_platform,
185
201
  )
186
202
 
187
203
  @staticmethod
esphome/writer.py CHANGED
@@ -9,6 +9,7 @@ from esphome.config import iter_component_configs, iter_components
9
9
  from esphome.const import (
10
10
  ENV_NOGITIGNORE,
11
11
  HEADER_FILE_EXTENSIONS,
12
+ PLATFORM_ESP32,
12
13
  SOURCE_FILE_EXTENSIONS,
13
14
  __version__,
14
15
  )
@@ -106,6 +107,11 @@ def storage_should_clean(old: StorageJSON, new: StorageJSON) -> bool:
106
107
  return True
107
108
  if old.build_path != new.build_path:
108
109
  return True
110
+ if old.loaded_integrations != new.loaded_integrations:
111
+ if new.core_platform == PLATFORM_ESP32:
112
+ from esphome.components.esp32 import FRAMEWORK_ESP_IDF
113
+
114
+ return new.framework == FRAMEWORK_ESP_IDF
109
115
  return False
110
116
 
111
117
 
@@ -117,7 +123,9 @@ def update_storage_json():
117
123
  return
118
124
 
119
125
  if storage_should_clean(old, new):
120
- _LOGGER.info("Core config or version changed, cleaning build files...")
126
+ _LOGGER.info(
127
+ "Core config, version or integrations changed, cleaning build files..."
128
+ )
121
129
  clean_build()
122
130
 
123
131
  new.save(path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esphome
3
- Version: 2024.8.0b4
3
+ Version: 2024.8.2
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
@@ -5,7 +5,7 @@ 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
7
  esphome/config_validation.py,sha256=Uck0GvA97sJ6sW25y0nqvOT2nsYIb6uZ_1sI-YBl4vc,65844
8
- esphome/const.py,sha256=_2ZuTcwBtxsMIuT9O7fzUEp3ptnaZLMvclhu9bCHoHw,39410
8
+ esphome/const.py,sha256=jTr4s8HR8zKRAzdi_HCenMW9ZxWZGnYwGFy0VFEk1oU,39408
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
@@ -21,13 +21,13 @@ esphome/mqtt.py,sha256=8VA7W1sVIzfRrzYCAzfabG4TPT_ACo_Q3nMkltXZ0JA,8721
21
21
  esphome/pins.py,sha256=wO0d-2qn0fhT6WEN0H0AmYRSH90jW154hZT7RewMGYI,10713
22
22
  esphome/platformio_api.py,sha256=OEWhPZ2NQnTrZ3Vtm0IqW0E-xE7EyVhs5w3OtT2xfDY,11905
23
23
  esphome/schema_extractors.py,sha256=wQMtWFp2q4ZZ97Xv3xVhFUU6Ol3qjcyDtjowG4Shllo,2108
24
- esphome/storage_json.py,sha256=_zJW4qmugSpQzEMRPRA08PSdZDxdd1usn6WLUWUr4wM,9235
24
+ esphome/storage_json.py,sha256=dUvXwQx7Jmgpq0qgXmIEIIgTWhXIJm3dTZnOwK08Xck,9931
25
25
  esphome/types.py,sha256=xJaCRRyYuJiRo32mns9v-YeYB6w12NAT8vMSk9ZmJl8,430
26
26
  esphome/util.py,sha256=sKW1kNMRle3bOGrw9Rga32ZfSDXYMbQeQeVKxFEumJs,9329
27
27
  esphome/voluptuous_schema.py,sha256=rawKKTYh2kjXSGPaQnLS4qxpgoI9KwXPBQpgIxzPUzo,9316
28
28
  esphome/vscode.py,sha256=612-o7AVyoh1Fmg-ZXYxKVWUc5fcoumsnunpMv7MQuo,3251
29
29
  esphome/wizard.py,sha256=UyH7vRdfJIjQeN8EIgkpUsBReM0nD1mJ8mz0X-Ge9eE,15596
30
- esphome/writer.py,sha256=WDDE-U9zxC1oNilhfscEk_clsvw9s3HHF-L2qT5d-Vs,10995
30
+ esphome/writer.py,sha256=f42mUzN6aOjpDGIzJJaKl3SJgga_iShL392LASvd_Ic,11280
31
31
  esphome/yaml_util.py,sha256=Yao1o29ftfEH-hdnc5zr-74-uhh0dfMPXj-J7xRCdtY,21659
32
32
  esphome/zeroconf.py,sha256=MF4_FderxU0mrtgMfnyA5SjYpGp72D36gYuRDYjXiAI,6804
33
33
  esphome/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -173,7 +173,7 @@ esphome/components/apds9960/apds9960.h,sha256=oFrXPQrPDS16gNSVdN1n6SKuvjwc9LdvpK
173
173
  esphome/components/apds9960/binary_sensor.py,sha256=DcfxkwZFvgmOU3C_gVSfZOpJ-EZlZXMd0gHnAUnxxCs,786
174
174
  esphome/components/apds9960/sensor.py,sha256=HoGfwl7WqJkpKI7BjeM1alXPcppdWVRrWwFzrZ0ISAo,871
175
175
  esphome/components/api/__init__.py,sha256=grnorxG9QG00eQwcIsiijno_o_JS6xKzOitqLS1DkXg,9895
176
- esphome/components/api/api_connection.cpp,sha256=bZ9AD5XLA3HwO8-faAGEvbiLSS89rKpUXdBJ9oYQeyw,56690
176
+ esphome/components/api/api_connection.cpp,sha256=ng51imTdORrflO7BZwPuZeO3Dt88GzG3cSU2Dgr_GgA,56717
177
177
  esphome/components/api/api_connection.h,sha256=5BPFRslCG0l-RwPjtt9xiwA0E7-3uT-US3_69xZiVFI,10323
178
178
  esphome/components/api/api_frame_helper.cpp,sha256=-K3JLxUJ3gKpxVzJwOAwlCvlwl7C7VTgQWhpHlhzgd0,32998
179
179
  esphome/components/api/api_frame_helper.h,sha256=c1ET5DyoWNtdEkxLCVmyfyA8ZASBv9iAA24I5mtmnzA,5522
@@ -587,7 +587,7 @@ esphome/components/daly_bms/text_sensor.py,sha256=Dx-jMTI5BOpnmuAvQFrkVhx-kCwwLi
587
587
  esphome/components/dashboard_import/__init__.py,sha256=mVnz9bCrbAtnJssZ_2jJkzVutp6OXyajDEDIaVtUavI,5296
588
588
  esphome/components/dashboard_import/dashboard_import.cpp,sha256=G5aiH2f1mS_NZ0sgIMIVHFtw2rZMnEe84TT-Cn3kbR8,350
589
589
  esphome/components/dashboard_import/dashboard_import.h,sha256=rEtCkCQHpV7Wf240qqMREfQXE90s4zOdwQEYLG6xdCI,225
590
- esphome/components/datetime/__init__.py,sha256=NBlkoA0TpWM6-x4xFg1Zch50MOzGVqUCCnJFkjaQt5c,8551
590
+ esphome/components/datetime/__init__.py,sha256=UiZ1vmTtFvXZceaHnfIO2SKE66j7zNwH_7tKK4u9q7o,8557
591
591
  esphome/components/datetime/date_entity.cpp,sha256=UieYXahuBlffSwaMz2n1ce_bZvrXi14dIjhmsxkRcrY,3690
592
592
  esphome/components/datetime/date_entity.h,sha256=72vM34Ap7iUPoOtGMpudEQ_4489zY13UHhX3tzZopiY,2584
593
593
  esphome/components/datetime/datetime_base.h,sha256=ex7shrwo3gBS5Dc2s-t1rUe41HbVt1sYJJP6FAWIcJ0,1106
@@ -833,7 +833,7 @@ esphome/components/esphome/ota/ota_esphome.cpp,sha256=k2mo3SWZvQXLCZIeEIb_d6IV8D
833
833
  esphome/components/esphome/ota/ota_esphome.h,sha256=8j_EDYbc7UiALElGt6NN834RDfCxD8oLHkJbhyaXtV4,1118
834
834
  esphome/components/ethernet/__init__.py,sha256=XYUuJufukjh3isx8N6JY7EUwR56GBmyudhcd7bfWTzk,8821
835
835
  esphome/components/ethernet/esp_eth_phy_jl1101.c,sha256=vcT2EJ2S2i6q_vzmRyJY1pod5C05oMW3EpjFHF008L4,12572
836
- esphome/components/ethernet/ethernet_component.cpp,sha256=Ct5J1DnFYoY12YrPh57TjDHl3W3Cn5hU4oprXRU6hlA,22589
836
+ esphome/components/ethernet/ethernet_component.cpp,sha256=F4RCQOMWkYcKdjpMk2LFQU99eoIUycwtPkJzRaFGAqM,22581
837
837
  esphome/components/ethernet/ethernet_component.h,sha256=qOv56iV1EiPlKy7jsaAXT20gNOPaYyHGnrorgGXzvAo,4232
838
838
  esphome/components/ethernet_info/__init__.py,sha256=LoiZr_nRyJfR5w1ZWOFppOVTQRwlgmHU-boDala2fLA,33
839
839
  esphome/components/ethernet_info/ethernet_info_text_sensor.cpp,sha256=nfP7xeusvbzee1KHfuipELWvF1vmuk_2e4G_NlLeJ3M,564
@@ -1387,36 +1387,36 @@ esphome/components/ltr_als_ps/ltr_als_ps.cpp,sha256=a5NBwe7wtJHwLgIDFoollhz1VSDI
1387
1387
  esphome/components/ltr_als_ps/ltr_als_ps.h,sha256=TxgTmv7apRGsxHAxDow6-CpkQsdWID2KLk-lSDi7KtQ,6466
1388
1388
  esphome/components/ltr_als_ps/ltr_definitions.h,sha256=yaIvnLQBIBnPuQBvHDD9Q_16Uoq1vnABwsTm8j77a3w,7255
1389
1389
  esphome/components/ltr_als_ps/sensor.py,sha256=e5KnfruXbVI0s1S0bLJihTnIM5UOmiQT2dMRHxFReAM,10023
1390
- esphome/components/lvgl/__init__.py,sha256=CxVEe3eNnpPlIGc4rl8wiNPI4GXKrQxn1i5lt7L7OsM,12430
1391
- esphome/components/lvgl/automation.py,sha256=5BDOa0alZsraUcWgoh-QHsZDBtuzPrdU4VgiQIuL1oQ,7261
1390
+ esphome/components/lvgl/__init__.py,sha256=vRZwy30I0mZ5wGxx3RIUEfZ-s8D0zgRnLYJt5qdZn-w,12571
1391
+ esphome/components/lvgl/automation.py,sha256=ecURec0lW8iFLICKJF3xzeZJ8fjL3OlD1h8IXiYBXgY,7441
1392
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
1396
  esphome/components/lvgl/lv_validation.py,sha256=aGWc0YBZCZjYIgwYwE83vnROFiaMJf6Fo9db1Sas6Jc,8995
1397
- esphome/components/lvgl/lvcode.py,sha256=uUxJ-tGqo-fZdLaumXbAI4ElQh6P_IS8dD6eLtvwogo,10103
1398
- esphome/components/lvgl/lvgl_esphome.cpp,sha256=yqEZdGmaUP6p5QRfQ7mq3_V3Mk7y431eK9EzlivmJnY,14150
1399
- esphome/components/lvgl/lvgl_esphome.h,sha256=hsJml28BdPNyTaxdmf-EspzSzSFiLXTZB7Jgd-v00ws,9134
1397
+ esphome/components/lvgl/lvcode.py,sha256=4M4itIJHsscJvyt5YZGZ5y216vjsyVExXvRHmEfZhLI,10173
1398
+ esphome/components/lvgl/lvgl_esphome.cpp,sha256=U7vZq-Sct0Tr5mRCikqKM5t9F9_SQFNJtS9b9y3pD7I,14313
1399
+ esphome/components/lvgl/lvgl_esphome.h,sha256=rHU4ISZwSQNoVjKjOomhaOD-WiMBdKmjPwopR1cto8Y,9170
1400
1400
  esphome/components/lvgl/lvgl_hal.h,sha256=aZqWpSmKKAB-ZfNxxgxjgASTtLpAZjXJKuoTiPB0qqU,431
1401
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
1405
1405
  esphome/components/lvgl/types.py,sha256=rkWA2TP_x-iVnQAKFOkCQEq8Dxni66CNzUIC9Py5Vpw,5791
1406
- esphome/components/lvgl/binary_sensor/__init__.py,sha256=KgcDHSe8TgZNPvA7sPWtannAWMpOAVath9hjRajDels,1300
1407
- esphome/components/lvgl/light/__init__.py,sha256=6pdio3EW_K7BTYSBg0kZVl591ICcRdZAoKRRMWUmgsg,1079
1406
+ esphome/components/lvgl/binary_sensor/__init__.py,sha256=msfXX5zJA7CDWR2fk7UB7OKTWA978WdNhjGHm9Tz6FI,1347
1407
+ esphome/components/lvgl/light/__init__.py,sha256=_6xwTJKz5yByZxxE1Emn0KY9O-WiCPxfe_LfGgVhIhw,1126
1408
1408
  esphome/components/lvgl/light/lvgl_light.h,sha256=bNvnIYH7UrvVHgWxIIlP2XAfsmEVDzz2-aIA6DbR1iU,1231
1409
- esphome/components/lvgl/number/__init__.py,sha256=hcDDeZK9E4Dv_9XPy9we1AokGlsHOK01hjNTLHQm7yc,2012
1409
+ esphome/components/lvgl/number/__init__.py,sha256=pgZrZ0Y61oiBuqfMbPxtU652_VNTYORaKu4ZZyK62co,2059
1410
1410
  esphome/components/lvgl/number/lvgl_number.h,sha256=C52MOTc8XSF3a76U6J0GjRUsYbvMftcgvhHenFKzzZk,850
1411
- esphome/components/lvgl/select/__init__.py,sha256=F7X2RnmuTwDM9564T3Bp0XFDw0GAoL4RO_7D7ZZVS4c,1735
1411
+ esphome/components/lvgl/select/__init__.py,sha256=qHOWAW6DpAJIOqPC01TIJu2fbTHlDUy4DU-ix1-R-W8,1782
1412
1412
  esphome/components/lvgl/select/lvgl_select.h,sha256=Qz6fo_R63rSUsO0uzLAjKYsZPZufsxV-YshHkntZ_NI,1639
1413
- esphome/components/lvgl/sensor/__init__.py,sha256=KDJgR4cIldsik4U5C7prdAPMjTC9Z_Kwd_6oRRbsaqs,1240
1414
- esphome/components/lvgl/switch/__init__.py,sha256=wHCJXNThvmmVLKNBLsdtJ-oM02GrPAuWKsSRedK5Uwk,1741
1413
+ esphome/components/lvgl/sensor/__init__.py,sha256=cdEsOnVUadMXKaW9RRrKdiR3RsZfgiVrCjCAsLOrtvg,1287
1414
+ esphome/components/lvgl/switch/__init__.py,sha256=zWEm1JR3mqWQxaAZRYHDLkKFJoawb9jstoyCudcOnTM,1788
1415
1415
  esphome/components/lvgl/switch/lvgl_switch.h,sha256=w8SqlodBYRdVzlhBwkBERRP-X-IrWAmtS-01AC3zhXs,837
1416
- esphome/components/lvgl/text/__init__.py,sha256=SfNxKSwBrV_HYjZjLWKvOU3aum8t4hBuHh-erfypy58,1530
1416
+ esphome/components/lvgl/text/__init__.py,sha256=I1dgyifKyoBP7tOfZ_wcNVN17r6rs6VBWwsKVRE1pHI,1577
1417
1417
  esphome/components/lvgl/text/lvgl_text.h,sha256=KZrcwh3G0wADH9hg4byTpF1pk67x5cn9zHWOwv_G5YY,883
1418
- esphome/components/lvgl/text_sensor/__init__.py,sha256=Xz4hfnrRdaxkIjyF2B3w2eX1Py3VcH7Mk1Jy6za5FBY,1200
1419
- esphome/components/lvgl/widgets/__init__.py,sha256=N2fLNSexPZuJkqPIKR_4IXJXMxJlAWHcmoV7L5S2qlA,13065
1418
+ esphome/components/lvgl/text_sensor/__init__.py,sha256=NXdR4qq4T9i293n-yDb5uZlzSNI2nOWsJ3DlKtMjqrA,1247
1419
+ esphome/components/lvgl/widgets/__init__.py,sha256=IluN1JMViHSL33fv5e3v94nQXaeM9wDiplg3zwyJvNM,13313
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
@@ -1427,10 +1427,10 @@ esphome/components/lvgl/widgets/img.py,sha256=g0YosuPAspZ9sCWeXZ0zwOL2Wjy8BXaW1W
1427
1427
  esphome/components/lvgl/widgets/keyboard.py,sha256=1WBm_nfeFpWvzYts68FN_arqovOwMFs47TQAPCKour8,1543
1428
1428
  esphome/components/lvgl/widgets/label.py,sha256=5xl1a6apdJgGKmkpL8m7RDASjaeKzjKTllhY26Gbfag,1139
1429
1429
  esphome/components/lvgl/widgets/led.py,sha256=qoe_kvZpoRkwbxz25Z66KQ__KLC2tfhAukChp1jdlDc,888
1430
- esphome/components/lvgl/widgets/line.py,sha256=VDmPqYHPJRtufFR-fTUJo2qnh-eYpuk826k1w_iUplY,1353
1430
+ esphome/components/lvgl/widgets/line.py,sha256=bIlKIEnVYPENG5cqupakoqCMj-Oddgun-X5nmTpOMig,1392
1431
1431
  esphome/components/lvgl/widgets/lv_bar.py,sha256=DbiUvhKdh9bsRMTU-rJYYA5KCjBUxDsW-7tvx8-CIRM,1670
1432
1432
  esphome/components/lvgl/widgets/meter.py,sha256=cZx1FkosNEFL7jAuIWlT3I_YR8k4BgI8xji5pmJa7G0,10710
1433
- esphome/components/lvgl/widgets/msgbox.py,sha256=NH-dT06EjHkiPmyQWTip652-nbcJeMeHl_qN_8e55BA,4560
1433
+ esphome/components/lvgl/widgets/msgbox.py,sha256=20VWlK6AQ9gCQe6WXSKLSQ0bHjyrhsJQ7QCbAsOcZ4c,4635
1434
1434
  esphome/components/lvgl/widgets/obj.py,sha256=rtqGHq4vcAr6ABNTzjGWnSdhEm8St0ScQ-qqEgImqdU,765
1435
1435
  esphome/components/lvgl/widgets/page.py,sha256=Q3tdC9d3r9c-afiTzrvf_83kZ0DuoFAxnuUoM2GK8gU,3566
1436
1436
  esphome/components/lvgl/widgets/roller.py,sha256=bBlKJJTMBlxJwdYK326QsPK2MB8uOW-vQPpeeZxOH_Y,2073
@@ -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.0b4.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3229
- esphome-2024.8.0b4.dist-info/METADATA,sha256=NkAgnS5odA3qDwNZMj2tm7mGD1mxKBimQ90uFphaItM,3265
3230
- esphome-2024.8.0b4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3231
- esphome-2024.8.0b4.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3232
- esphome-2024.8.0b4.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3233
- esphome-2024.8.0b4.dist-info/RECORD,,
3228
+ esphome-2024.8.2.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3229
+ esphome-2024.8.2.dist-info/METADATA,sha256=R2-NBp8QHgbKNboG2QesHoPhLVaeK_k5UyWi3DH-0CQ,3263
3230
+ esphome-2024.8.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
3231
+ esphome-2024.8.2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3232
+ esphome-2024.8.2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3233
+ esphome-2024.8.2.dist-info/RECORD,,