esphome 2025.6.0b3__py3-none-any.whl → 2025.6.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.
Files changed (31) hide show
  1. esphome/components/api/api_pb2.cpp +2 -0
  2. esphome/components/api/api_pb2.h +1 -0
  3. esphome/components/audio/audio_reader.cpp +41 -21
  4. esphome/components/esp32/__init__.py +2 -2
  5. esphome/components/esp32_ble/ble.cpp +108 -46
  6. esphome/components/esp32_ble/ble.h +2 -0
  7. esphome/components/esp32_ble/ble_event.h +242 -75
  8. esphome/components/esp32_ble/ble_event_pool.h +72 -0
  9. esphome/components/esp32_ble/queue.h +14 -11
  10. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +1 -0
  11. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +4 -0
  12. esphome/components/i2c/__init__.py +33 -0
  13. esphome/components/lvgl/widgets/qrcode.py +4 -6
  14. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +5 -1
  15. esphome/components/nextion/nextion.cpp +2 -10
  16. esphome/components/openthread/__init__.py +5 -5
  17. esphome/components/openthread/openthread.cpp +3 -3
  18. esphome/components/openthread/tlv.py +7 -0
  19. esphome/components/speaker/media_player/audio_pipeline.cpp +12 -13
  20. esphome/components/voice_assistant/__init__.py +12 -1
  21. esphome/components/voice_assistant/voice_assistant.cpp +36 -2
  22. esphome/components/voice_assistant/voice_assistant.h +4 -0
  23. esphome/config_validation.py +44 -1
  24. esphome/const.py +1 -1
  25. esphome/yaml_util.py +2 -1
  26. {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/METADATA +1 -1
  27. {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/RECORD +31 -30
  28. {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/WHEEL +0 -0
  29. {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/entry_points.txt +0 -0
  30. {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/licenses/LICENSE +0 -0
  31. {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/top_level.txt +0 -0
@@ -33,6 +33,7 @@ bool Nextion::send_command_(const std::string &command) {
33
33
 
34
34
  #ifdef USE_NEXTION_COMMAND_SPACING
35
35
  if (!this->ignore_is_setup_ && !this->command_pacer_.can_send()) {
36
+ ESP_LOGN(TAG, "Command spacing: delaying command '%s'", command.c_str());
36
37
  return false;
37
38
  }
38
39
  #endif // USE_NEXTION_COMMAND_SPACING
@@ -43,10 +44,6 @@ bool Nextion::send_command_(const std::string &command) {
43
44
  const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF};
44
45
  this->write_array(to_send, sizeof(to_send));
45
46
 
46
- #ifdef USE_NEXTION_COMMAND_SPACING
47
- this->command_pacer_.mark_sent();
48
- #endif // USE_NEXTION_COMMAND_SPACING
49
-
50
47
  return true;
51
48
  }
52
49
 
@@ -377,12 +374,6 @@ void Nextion::process_nextion_commands_() {
377
374
  size_t commands_processed = 0;
378
375
  #endif // USE_NEXTION_MAX_COMMANDS_PER_LOOP
379
376
 
380
- #ifdef USE_NEXTION_COMMAND_SPACING
381
- if (!this->command_pacer_.can_send()) {
382
- return; // Will try again in next loop iteration
383
- }
384
- #endif
385
-
386
377
  size_t to_process_length = 0;
387
378
  std::string to_process;
388
379
 
@@ -430,6 +421,7 @@ void Nextion::process_nextion_commands_() {
430
421
  }
431
422
  #ifdef USE_NEXTION_COMMAND_SPACING
432
423
  this->command_pacer_.mark_sent(); // Here is where we should mark the command as sent
424
+ ESP_LOGN(TAG, "Command spacing: marked command sent at %u ms", millis());
433
425
  #endif
434
426
  break;
435
427
  case 0x02: // invalid Component ID or name was used
@@ -46,7 +46,7 @@ def set_sdkconfig_options(config):
46
46
  add_idf_sdkconfig_option("CONFIG_OPENTHREAD_NETWORK_PANID", config[CONF_PAN_ID])
47
47
  add_idf_sdkconfig_option("CONFIG_OPENTHREAD_NETWORK_CHANNEL", config[CONF_CHANNEL])
48
48
  add_idf_sdkconfig_option(
49
- "CONFIG_OPENTHREAD_NETWORK_MASTERKEY", f"{config[CONF_NETWORK_KEY]:X}"
49
+ "CONFIG_OPENTHREAD_NETWORK_MASTERKEY", f"{config[CONF_NETWORK_KEY]:X}".lower()
50
50
  )
51
51
 
52
52
  if network_name := config.get(CONF_NETWORK_NAME):
@@ -54,14 +54,14 @@ def set_sdkconfig_options(config):
54
54
 
55
55
  if (ext_pan_id := config.get(CONF_EXT_PAN_ID)) is not None:
56
56
  add_idf_sdkconfig_option(
57
- "CONFIG_OPENTHREAD_NETWORK_EXTPANID", f"{ext_pan_id:X}"
57
+ "CONFIG_OPENTHREAD_NETWORK_EXTPANID", f"{ext_pan_id:X}".lower()
58
58
  )
59
59
  if (mesh_local_prefix := config.get(CONF_MESH_LOCAL_PREFIX)) is not None:
60
60
  add_idf_sdkconfig_option(
61
- "CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX", f"{mesh_local_prefix:X}"
61
+ "CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX", f"{mesh_local_prefix}".lower()
62
62
  )
63
63
  if (pskc := config.get(CONF_PSKC)) is not None:
64
- add_idf_sdkconfig_option("CONFIG_OPENTHREAD_NETWORK_PSKC", f"{pskc:X}")
64
+ add_idf_sdkconfig_option("CONFIG_OPENTHREAD_NETWORK_PSKC", f"{pskc:X}".lower())
65
65
 
66
66
  if CONF_FORCE_DATASET in config:
67
67
  if config[CONF_FORCE_DATASET]:
@@ -98,7 +98,7 @@ _CONNECTION_SCHEMA = cv.Schema(
98
98
  cv.Optional(CONF_EXT_PAN_ID): cv.hex_int,
99
99
  cv.Optional(CONF_NETWORK_NAME): cv.string_strict,
100
100
  cv.Optional(CONF_PSKC): cv.hex_int,
101
- cv.Optional(CONF_MESH_LOCAL_PREFIX): cv.hex_int,
101
+ cv.Optional(CONF_MESH_LOCAL_PREFIX): cv.ipv6network,
102
102
  }
103
103
  )
104
104
 
@@ -137,7 +137,7 @@ void OpenThreadSrpComponent::setup() {
137
137
  // Copy the mdns services to our local instance so that the c_str pointers remain valid for the lifetime of this
138
138
  // component
139
139
  this->mdns_services_ = this->mdns_->get_services();
140
- ESP_LOGW(TAG, "Setting up SRP services. count = %d\n", this->mdns_services_.size());
140
+ ESP_LOGD(TAG, "Setting up SRP services. count = %d\n", this->mdns_services_.size());
141
141
  for (const auto &service : this->mdns_services_) {
142
142
  otSrpClientBuffersServiceEntry *entry = otSrpClientBuffersAllocateService(instance);
143
143
  if (!entry) {
@@ -185,11 +185,11 @@ void OpenThreadSrpComponent::setup() {
185
185
  if (error != OT_ERROR_NONE) {
186
186
  ESP_LOGW(TAG, "Failed to add service: %s", otThreadErrorToString(error));
187
187
  }
188
- ESP_LOGW(TAG, "Added service: %s", full_service.c_str());
188
+ ESP_LOGD(TAG, "Added service: %s", full_service.c_str());
189
189
  }
190
190
 
191
191
  otSrpClientEnableAutoStartMode(instance, srp_start_callback, nullptr);
192
- ESP_LOGW(TAG, "Finished SRP setup");
192
+ ESP_LOGD(TAG, "Finished SRP setup");
193
193
  }
194
194
 
195
195
  void *OpenThreadSrpComponent::pool_alloc_(size_t size) {
@@ -1,5 +1,6 @@
1
1
  # Sourced from https://gist.github.com/agners/0338576e0003318b63ec1ea75adc90f9
2
2
  import binascii
3
+ import ipaddress
3
4
 
4
5
  from esphome.const import CONF_CHANNEL
5
6
 
@@ -37,6 +38,12 @@ def parse_tlv(tlv) -> dict:
37
38
  if tag in TLV_TYPES:
38
39
  if tag == 3:
39
40
  output[TLV_TYPES[tag]] = val.decode("utf-8")
41
+ elif tag == 7:
42
+ mesh_local_prefix = binascii.hexlify(val).decode("utf-8")
43
+ mesh_local_prefix_str = f"{mesh_local_prefix}0000000000000000"
44
+ ipv6_bytes = bytes.fromhex(mesh_local_prefix_str)
45
+ ipv6_address = ipaddress.IPv6Address(ipv6_bytes)
46
+ output[TLV_TYPES[tag]] = f"{ipv6_address}/64"
40
47
  else:
41
48
  output[TLV_TYPES[tag]] = int.from_bytes(val)
42
49
  return output
@@ -343,13 +343,12 @@ void AudioPipeline::read_task(void *params) {
343
343
  xEventGroupSetBits(this_pipeline->event_group_, EventGroupBits::READER_MESSAGE_FINISHED);
344
344
 
345
345
  // Wait until the pipeline notifies us the source of the media file
346
- EventBits_t event_bits =
347
- xEventGroupWaitBits(this_pipeline->event_group_,
348
- EventGroupBits::READER_COMMAND_INIT_FILE | EventGroupBits::READER_COMMAND_INIT_HTTP |
349
- EventGroupBits::PIPELINE_COMMAND_STOP, // Bit message to read
350
- pdFALSE, // Clear the bit on exit
351
- pdFALSE, // Wait for all the bits,
352
- portMAX_DELAY); // Block indefinitely until bit is set
346
+ EventBits_t event_bits = xEventGroupWaitBits(
347
+ this_pipeline->event_group_,
348
+ EventGroupBits::READER_COMMAND_INIT_FILE | EventGroupBits::READER_COMMAND_INIT_HTTP, // Bit message to read
349
+ pdFALSE, // Clear the bit on exit
350
+ pdFALSE, // Wait for all the bits,
351
+ portMAX_DELAY); // Block indefinitely until bit is set
353
352
 
354
353
  if (!(event_bits & EventGroupBits::PIPELINE_COMMAND_STOP)) {
355
354
  xEventGroupClearBits(this_pipeline->event_group_, EventGroupBits::READER_MESSAGE_FINISHED |
@@ -434,12 +433,12 @@ void AudioPipeline::decode_task(void *params) {
434
433
  xEventGroupSetBits(this_pipeline->event_group_, EventGroupBits::DECODER_MESSAGE_FINISHED);
435
434
 
436
435
  // Wait until the reader notifies us that the media type is available
437
- EventBits_t event_bits = xEventGroupWaitBits(this_pipeline->event_group_,
438
- EventGroupBits::READER_MESSAGE_LOADED_MEDIA_TYPE |
439
- EventGroupBits::PIPELINE_COMMAND_STOP, // Bit message to read
440
- pdFALSE, // Clear the bit on exit
441
- pdFALSE, // Wait for all the bits,
442
- portMAX_DELAY); // Block indefinitely until bit is set
436
+ EventBits_t event_bits =
437
+ xEventGroupWaitBits(this_pipeline->event_group_,
438
+ EventGroupBits::READER_MESSAGE_LOADED_MEDIA_TYPE, // Bit message to read
439
+ pdFALSE, // Clear the bit on exit
440
+ pdFALSE, // Wait for all the bits,
441
+ portMAX_DELAY); // Block indefinitely until bit is set
443
442
 
444
443
  xEventGroupClearBits(this_pipeline->event_group_,
445
444
  EventGroupBits::DECODER_MESSAGE_FINISHED | EventGroupBits::READER_MESSAGE_LOADED_MEDIA_TYPE);
@@ -17,10 +17,11 @@ from esphome.const import (
17
17
  AUTO_LOAD = ["socket"]
18
18
  DEPENDENCIES = ["api", "microphone"]
19
19
 
20
- CODEOWNERS = ["@jesserockz"]
20
+ CODEOWNERS = ["@jesserockz", "@kahrendt"]
21
21
 
22
22
  CONF_ON_END = "on_end"
23
23
  CONF_ON_INTENT_END = "on_intent_end"
24
+ CONF_ON_INTENT_PROGRESS = "on_intent_progress"
24
25
  CONF_ON_INTENT_START = "on_intent_start"
25
26
  CONF_ON_LISTENING = "on_listening"
26
27
  CONF_ON_START = "on_start"
@@ -136,6 +137,9 @@ CONFIG_SCHEMA = cv.All(
136
137
  cv.Optional(CONF_ON_INTENT_START): automation.validate_automation(
137
138
  single=True
138
139
  ),
140
+ cv.Optional(CONF_ON_INTENT_PROGRESS): automation.validate_automation(
141
+ single=True
142
+ ),
139
143
  cv.Optional(CONF_ON_INTENT_END): automation.validate_automation(
140
144
  single=True
141
145
  ),
@@ -282,6 +286,13 @@ async def to_code(config):
282
286
  config[CONF_ON_INTENT_START],
283
287
  )
284
288
 
289
+ if CONF_ON_INTENT_PROGRESS in config:
290
+ await automation.build_automation(
291
+ var.get_intent_progress_trigger(),
292
+ [(cg.std_string, "x")],
293
+ config[CONF_ON_INTENT_PROGRESS],
294
+ )
295
+
285
296
  if CONF_ON_INTENT_END in config:
286
297
  await automation.build_automation(
287
298
  var.get_intent_end_trigger(),
@@ -555,7 +555,7 @@ void VoiceAssistant::request_stop() {
555
555
  break;
556
556
  case State::AWAITING_RESPONSE:
557
557
  this->signal_stop_();
558
- break;
558
+ // Fallthrough intended to stop a streaming TTS announcement that has potentially started
559
559
  case State::STREAMING_RESPONSE:
560
560
  #ifdef USE_MEDIA_PLAYER
561
561
  // Stop any ongoing media player announcement
@@ -599,6 +599,14 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
599
599
  switch (msg.event_type) {
600
600
  case api::enums::VOICE_ASSISTANT_RUN_START:
601
601
  ESP_LOGD(TAG, "Assist Pipeline running");
602
+ #ifdef USE_MEDIA_PLAYER
603
+ this->started_streaming_tts_ = false;
604
+ for (auto arg : msg.data) {
605
+ if (arg.name == "url") {
606
+ this->tts_response_url_ = std::move(arg.value);
607
+ }
608
+ }
609
+ #endif
602
610
  this->defer([this]() { this->start_trigger_->trigger(); });
603
611
  break;
604
612
  case api::enums::VOICE_ASSISTANT_WAKE_WORD_START:
@@ -622,6 +630,8 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
622
630
  if (text.empty()) {
623
631
  ESP_LOGW(TAG, "No text in STT_END event");
624
632
  return;
633
+ } else if (text.length() > 500) {
634
+ text = text.substr(0, 497) + "...";
625
635
  }
626
636
  ESP_LOGD(TAG, "Speech recognised as: \"%s\"", text.c_str());
627
637
  this->defer([this, text]() { this->stt_end_trigger_->trigger(text); });
@@ -631,6 +641,27 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
631
641
  ESP_LOGD(TAG, "Intent started");
632
642
  this->defer([this]() { this->intent_start_trigger_->trigger(); });
633
643
  break;
644
+ case api::enums::VOICE_ASSISTANT_INTENT_PROGRESS: {
645
+ ESP_LOGD(TAG, "Intent progress");
646
+ std::string tts_url_for_trigger = "";
647
+ #ifdef USE_MEDIA_PLAYER
648
+ if (this->media_player_ != nullptr) {
649
+ for (const auto &arg : msg.data) {
650
+ if ((arg.name == "tts_start_streaming") && (arg.value == "1") && !this->tts_response_url_.empty()) {
651
+ this->media_player_->make_call().set_media_url(this->tts_response_url_).set_announcement(true).perform();
652
+
653
+ this->media_player_wait_for_announcement_start_ = true;
654
+ this->media_player_wait_for_announcement_end_ = false;
655
+ this->started_streaming_tts_ = true;
656
+ tts_url_for_trigger = this->tts_response_url_;
657
+ this->tts_response_url_.clear(); // Reset streaming URL
658
+ }
659
+ }
660
+ }
661
+ #endif
662
+ this->defer([this, tts_url_for_trigger]() { this->intent_progress_trigger_->trigger(tts_url_for_trigger); });
663
+ break;
664
+ }
634
665
  case api::enums::VOICE_ASSISTANT_INTENT_END: {
635
666
  for (auto arg : msg.data) {
636
667
  if (arg.name == "conversation_id") {
@@ -653,6 +684,9 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
653
684
  ESP_LOGW(TAG, "No text in TTS_START event");
654
685
  return;
655
686
  }
687
+ if (text.length() > 500) {
688
+ text = text.substr(0, 497) + "...";
689
+ }
656
690
  ESP_LOGD(TAG, "Response: \"%s\"", text.c_str());
657
691
  this->defer([this, text]() {
658
692
  this->tts_start_trigger_->trigger(text);
@@ -678,7 +712,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
678
712
  ESP_LOGD(TAG, "Response URL: \"%s\"", url.c_str());
679
713
  this->defer([this, url]() {
680
714
  #ifdef USE_MEDIA_PLAYER
681
- if (this->media_player_ != nullptr) {
715
+ if ((this->media_player_ != nullptr) && (!this->started_streaming_tts_)) {
682
716
  this->media_player_->make_call().set_media_url(url).set_announcement(true).perform();
683
717
 
684
718
  this->media_player_wait_for_announcement_start_ = true;
@@ -177,6 +177,7 @@ class VoiceAssistant : public Component {
177
177
 
178
178
  Trigger<> *get_intent_end_trigger() const { return this->intent_end_trigger_; }
179
179
  Trigger<> *get_intent_start_trigger() const { return this->intent_start_trigger_; }
180
+ Trigger<std::string> *get_intent_progress_trigger() const { return this->intent_progress_trigger_; }
180
181
  Trigger<> *get_listening_trigger() const { return this->listening_trigger_; }
181
182
  Trigger<> *get_end_trigger() const { return this->end_trigger_; }
182
183
  Trigger<> *get_start_trigger() const { return this->start_trigger_; }
@@ -233,6 +234,7 @@ class VoiceAssistant : public Component {
233
234
  Trigger<> *tts_stream_start_trigger_ = new Trigger<>();
234
235
  Trigger<> *tts_stream_end_trigger_ = new Trigger<>();
235
236
  #endif
237
+ Trigger<std::string> *intent_progress_trigger_ = new Trigger<std::string>();
236
238
  Trigger<> *wake_word_detected_trigger_ = new Trigger<>();
237
239
  Trigger<std::string> *stt_end_trigger_ = new Trigger<std::string>();
238
240
  Trigger<std::string> *tts_end_trigger_ = new Trigger<std::string>();
@@ -268,6 +270,8 @@ class VoiceAssistant : public Component {
268
270
  #endif
269
271
  #ifdef USE_MEDIA_PLAYER
270
272
  media_player::MediaPlayer *media_player_{nullptr};
273
+ std::string tts_response_url_{""};
274
+ bool started_streaming_tts_{false};
271
275
  bool media_player_wait_for_announcement_start_{false};
272
276
  bool media_player_wait_for_announcement_end_{false};
273
277
  #endif
@@ -3,7 +3,15 @@
3
3
  from contextlib import contextmanager
4
4
  from dataclasses import dataclass
5
5
  from datetime import datetime
6
- from ipaddress import AddressValueError, IPv4Address, ip_address
6
+ from ipaddress import (
7
+ AddressValueError,
8
+ IPv4Address,
9
+ IPv4Network,
10
+ IPv6Address,
11
+ IPv6Network,
12
+ ip_address,
13
+ ip_network,
14
+ )
7
15
  import logging
8
16
  import os
9
17
  import re
@@ -1176,6 +1184,14 @@ def ipv4address(value):
1176
1184
  return address
1177
1185
 
1178
1186
 
1187
+ def ipv6address(value):
1188
+ try:
1189
+ address = IPv6Address(value)
1190
+ except AddressValueError as exc:
1191
+ raise Invalid(f"{value} is not a valid IPv6 address") from exc
1192
+ return address
1193
+
1194
+
1179
1195
  def ipv4address_multi_broadcast(value):
1180
1196
  address = ipv4address(value)
1181
1197
  if not (address.is_multicast or (address == IPv4Address("255.255.255.255"))):
@@ -1193,6 +1209,33 @@ def ipaddress(value):
1193
1209
  return address
1194
1210
 
1195
1211
 
1212
+ def ipv4network(value):
1213
+ """Validate that the value is a valid IPv4 network."""
1214
+ try:
1215
+ network = IPv4Network(value, strict=False)
1216
+ except ValueError as exc:
1217
+ raise Invalid(f"{value} is not a valid IPv4 network") from exc
1218
+ return network
1219
+
1220
+
1221
+ def ipv6network(value):
1222
+ """Validate that the value is a valid IPv6 network."""
1223
+ try:
1224
+ network = IPv6Network(value, strict=False)
1225
+ except ValueError as exc:
1226
+ raise Invalid(f"{value} is not a valid IPv6 network") from exc
1227
+ return network
1228
+
1229
+
1230
+ def ipnetwork(value):
1231
+ """Validate that the value is a valid IP network."""
1232
+ try:
1233
+ network = ip_network(value, strict=False)
1234
+ except ValueError as exc:
1235
+ raise Invalid(f"{value} is not a valid IP network") from exc
1236
+ return network
1237
+
1238
+
1196
1239
  def _valid_topic(value):
1197
1240
  """Validate that this is a valid topic name/filter."""
1198
1241
  if value is None: # Used to disable publishing and subscribing
esphome/const.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """Constants used by esphome."""
2
2
 
3
- __version__ = "2025.6.0b3"
3
+ __version__ = "2025.6.2"
4
4
 
5
5
  ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
6
6
  VALID_SUBSTITUTIONS_CHARACTERS = (
esphome/yaml_util.py CHANGED
@@ -5,7 +5,7 @@ import fnmatch
5
5
  import functools
6
6
  import inspect
7
7
  from io import BytesIO, TextIOBase, TextIOWrapper
8
- from ipaddress import _BaseAddress
8
+ from ipaddress import _BaseAddress, _BaseNetwork
9
9
  import logging
10
10
  import math
11
11
  import os
@@ -621,6 +621,7 @@ ESPHomeDumper.add_multi_representer(str, ESPHomeDumper.represent_stringify)
621
621
  ESPHomeDumper.add_multi_representer(int, ESPHomeDumper.represent_int)
622
622
  ESPHomeDumper.add_multi_representer(float, ESPHomeDumper.represent_float)
623
623
  ESPHomeDumper.add_multi_representer(_BaseAddress, ESPHomeDumper.represent_stringify)
624
+ ESPHomeDumper.add_multi_representer(_BaseNetwork, ESPHomeDumper.represent_stringify)
624
625
  ESPHomeDumper.add_multi_representer(MACAddress, ESPHomeDumper.represent_stringify)
625
626
  ESPHomeDumper.add_multi_representer(TimePeriod, ESPHomeDumper.represent_stringify)
626
627
  ESPHomeDumper.add_multi_representer(Lambda, ESPHomeDumper.represent_lambda)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esphome
3
- Version: 2025.6.0b3
3
+ Version: 2025.6.2
4
4
  Summary: ESPHome is a system to configure your microcontrollers by simple yet powerful configuration files and control them remotely through Home Automation systems.
5
5
  Author-email: The ESPHome Authors <esphome@openhomefoundation.org>
6
6
  License: MIT
@@ -4,8 +4,8 @@ esphome/automation.py,sha256=9xmW3AmWDd2oKB7zF-UITYIiSci8ys8qiylK-rcU7Rg,15689
4
4
  esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
5
5
  esphome/config.py,sha256=GsKqzNb4OBxA92eltdGYtP7e9fgtk80QsquhnUesb50,39948
6
6
  esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
7
- esphome/config_validation.py,sha256=N3za01KZnbbj4GqUAB1y0nW9qHRQUazsPzIVv1ZoxBk,62366
8
- esphome/const.py,sha256=v5xXgheq5lPDdWVYJQ2tGTYCMt8JYJklFjTYH1FHoU4,41817
7
+ esphome/config_validation.py,sha256=Nt8rQegT0VRAcWumtI0rJ92kW0milKMv3b443ZUzcfY,63437
8
+ esphome/const.py,sha256=591hDg5BeLmGO3rB4VTv6lc7Ii7_PthanUG1rGI0Vbw,41815
9
9
  esphome/coroutine.py,sha256=HNBqqhaTbpvsOI19bTXltxJCMVtoeqZPe4qTf4CKkAc,9309
10
10
  esphome/cpp_generator.py,sha256=2MbyMVt9hg7cFD0X8885IiJfFNjdqkqjis3P-0oa5L0,31346
11
11
  esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
@@ -28,7 +28,7 @@ esphome/voluptuous_schema.py,sha256=tQUOLvVec6v4pxfWpa8CMgXqBqomuqUUYEJqCJOPhNs,
28
28
  esphome/vscode.py,sha256=pKBx_9jmQlRJB1xiqjWq2-pFhXae8VNSFGYoqxRBMkw,4279
29
29
  esphome/wizard.py,sha256=mru5jCpYTNrgaure7bP6fTkZ-1OfoUmqsowYuFBWRdU,15377
30
30
  esphome/writer.py,sha256=qxT5CJOIXEJlqJy490layWc-47QLPFBWUpKOsy8FQvQ,11040
31
- esphome/yaml_util.py,sha256=PewbmiODTAuJ5pTlawtGi-vdTdOHhzgproUhed5Bbk8,23140
31
+ esphome/yaml_util.py,sha256=k1zp-z1lpjIpRFbnzk6I3mwJouU2_9EtjNpgJdMA2eo,23239
32
32
  esphome/zeroconf.py,sha256=dy3aWh1Lf4Sh5e7Izlq30FkdzAKWA6IGvZkXuxYrxFE,6511
33
33
  esphome/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  esphome/components/a01nyub/__init__.py,sha256=d_xNluCS0T63CxdXJGuw7raK7G9vAEwXNJpnA9GthzA,34
@@ -187,8 +187,8 @@ esphome/components/api/api_connection.h,sha256=oZhcUrl6RByGhtLENp41-5b6CC0NXgbTu
187
187
  esphome/components/api/api_frame_helper.cpp,sha256=KCHNw9HQ_Id3TirJytskB_1AO4tZz5NtZVZ9DCl3zPM,38965
188
188
  esphome/components/api/api_frame_helper.h,sha256=gytvsuTbh4beQ2lGgGy-Crf-gQSCDU2z3plEa6EbgX8,9944
189
189
  esphome/components/api/api_noise_context.h,sha256=y_3hWMKXtKxyCwZ8cKQjn3gQqenaAX5DhcCFQ6kBiPc,606
190
- esphome/components/api/api_pb2.cpp,sha256=nBWCdtEy754ZsoF6uAXwAD28xEdOrOEbpiThyV6Mk1I,319294
191
- esphome/components/api/api_pb2.h,sha256=3QNzjjz7AYbGYcZhOayD7GWEQMLMAQeP_naEx17IK4U,106863
190
+ esphome/components/api/api_pb2.cpp,sha256=Es5qQLWZnKYurq9d9Gxp6eakh4Cne7cV2_lrE1j5sUM,319391
191
+ esphome/components/api/api_pb2.h,sha256=RIJPU96qJ7uT4enMyXJKnA931Scr73vrZKMlACJiiwg,106904
192
192
  esphome/components/api/api_pb2_service.cpp,sha256=6K191Ols2tcmccr0leWTGgyJljPyfzOAJdF4Ep9TIrY,32073
193
193
  esphome/components/api/api_pb2_service.h,sha256=CiUQWqbEIWSTN_Ku8RgA1UoVHUT2EWKjOUw9g28rYDc,16444
194
194
  esphome/components/api/api_pb2_size.h,sha256=i9wFf675YrfJy9Em_vZLPJ9osRHRNkOb7DMd1LpK3YM,13430
@@ -259,7 +259,7 @@ esphome/components/audio/audio.cpp,sha256=McWhPhfL41LchHiFqS_96W_cmL5zgs4KrDN3u5
259
259
  esphome/components/audio/audio.h,sha256=Wmwz_JfJyEZJmeK9SopPZysq10TJGwlcg55EcMcLtRw,8038
260
260
  esphome/components/audio/audio_decoder.cpp,sha256=PtSWlj4zdoDCfMUedHuTTrKMiRESLjhh-C1-LDgjfbo,14921
261
261
  esphome/components/audio/audio_decoder.h,sha256=hpPJjrHsK_N2crCVvsrlu7zivx4oQHQz5hr-mlW6fl0,5351
262
- esphome/components/audio/audio_reader.cpp,sha256=c8bk2EdfNh3TTafGKyWOvEEbrzMFpo7H8uP1P4ia4Kk,8837
262
+ esphome/components/audio/audio_reader.cpp,sha256=gOYuGJaE2snMr7HDWa4STEyrb00-fVyNlD8-4fPTjm8,9734
263
263
  esphome/components/audio/audio_reader.h,sha256=1FwkJAunr3OOy2DGOmlKHfD3cwOrmBVPQvDj7Z0DTuk,3188
264
264
  esphome/components/audio/audio_resampler.cpp,sha256=3lLPf7r360hVQpDh6CTM9ZkadGWpqQDumTCzjLif-_A,6916
265
265
  esphome/components/audio/audio_resampler.h,sha256=9sHV-YhT7PhipYQUQLCVxttI7qIYqnoFhkmKLMqYQKM,4322
@@ -819,7 +819,7 @@ esphome/components/es8388/select/adc_input_mic_select.cpp,sha256=xBlweJHP_BHSvwP
819
819
  esphome/components/es8388/select/adc_input_mic_select.h,sha256=1Wf54OGjnrj9vFe7WuIU10qraRAJX7HM1qEcCTTSlvc,336
820
820
  esphome/components/es8388/select/dac_output_select.cpp,sha256=FDOC7NHBaR34BqzzsPrmzBIzY_4o_YkF3_wSs_A9LC8,302
821
821
  esphome/components/es8388/select/dac_output_select.h,sha256=u00z0jHqKmqsaKht3b3k7aGtYudU0cCJRTOw1Zh-mbw,334
822
- esphome/components/esp32/__init__.py,sha256=bG12yoNWbKS-pM5PRHZAz2yBWyowD8LtM7xy_ZgG0tQ,37264
822
+ esphome/components/esp32/__init__.py,sha256=R1MHqoCZ42cZlhRbiHYQ0vbJQ_VrN6yzZCLy0BUO88g,37262
823
823
  esphome/components/esp32/boards.py,sha256=RHJK4x6dEz4v3CuFHIPp0gvJmCWAl7hH3Xoy8-pq6wY,55161
824
824
  esphome/components/esp32/const.py,sha256=3sPibOKzbGgtSUIn7PfTQJRyob6x1vUtxagKCGS9CyY,1130
825
825
  esphome/components/esp32/core.cpp,sha256=7O7S5bJPNUeX8ge1mxpyZ1WzxTf1fFDCRK3P5UxZvq8,2865
@@ -839,15 +839,16 @@ esphome/components/esp32/post_build.py.script,sha256=ZBsPNunx2BH4ZiRyXnjTP7D7eN2
839
839
  esphome/components/esp32/preferences.cpp,sha256=WpEG6PenHwrAIonuoV_chdDJriJXF5dcpIbuYfmaUCQ,6229
840
840
  esphome/components/esp32/preferences.h,sha256=9HIy-BOgjOXJiEgOizZ_Qb8-l6K4eb3VSPW8Y8ffuWM,165
841
841
  esphome/components/esp32_ble/__init__.py,sha256=aShI9hnF7NU0M8GrIYgOFqF4N2QL96Iuhzrh8SV1pus,9598
842
- esphome/components/esp32_ble/ble.cpp,sha256=UxTFLB0HG6z8ypHN2UcW1fiXt_LYngOtDz5qTkL8NZc,15451
843
- esphome/components/esp32_ble/ble.h,sha256=XiX3hvjhqQRc01xrLVus8q8J4iZo36m5Z8xbYeaDd1I,5798
842
+ esphome/components/esp32_ble/ble.cpp,sha256=Trg51D750u2AsKTCpktiGMF26BHOQSvzxzKW-etuJBU,17932
843
+ esphome/components/esp32_ble/ble.h,sha256=eRr_nTLqWzkKn_Po4i4wuA_AQsiHduUu_8uBQjtRF80,5878
844
844
  esphome/components/esp32_ble/ble_advertising.cpp,sha256=LFrrx7xMjXAf7pt7Q43XzlwwcE1YKKulE3Zbuqow6JU,6104
845
845
  esphome/components/esp32_ble/ble_advertising.h,sha256=tbN2CN1CqlosOvnG0NlMHC_0JPMZ2ugTzIIOSmQl30s,1576
846
- esphome/components/esp32_ble/ble_event.h,sha256=YuYhDR-ELOXWQkzD9xLZ6C9NioVInOraUlROwOnlp4c,9190
846
+ esphome/components/esp32_ble/ble_event.h,sha256=3Zuq6mkPwBLg6AR4Q_7aebxLh7EWAlb4rLDmOL3DWIc,18301
847
+ esphome/components/esp32_ble/ble_event_pool.h,sha256=HWGuDfX34P-CgMtB5yzie2Y53dWtX-Cq-Scp0cXGMlo,1758
847
848
  esphome/components/esp32_ble/ble_scan_result.h,sha256=3hpnLDvy9Fr7sMuophP_db4GcF76qWSZKOn_ZljYoME,546
848
849
  esphome/components/esp32_ble/ble_uuid.cpp,sha256=2go_q78xgFlQRH_ZpM4tdsDJqyqe_3Ssn2PJFkpjlfI,6167
849
850
  esphome/components/esp32_ble/ble_uuid.h,sha256=6OL7GrNP-pxIqANnLlsd4IWCRnVzRD3Zx20pD4uGymA,916
850
- esphome/components/esp32_ble/queue.h,sha256=Tu2gzHSkErzIkGFWDNrkEVaNjHuDb8BiWhfncZJfTD4,2308
851
+ esphome/components/esp32_ble/queue.h,sha256=11OyhJYHxuY5UTuJZawxWCoeHsGkig9uiZ3oVhN1j2M,2625
851
852
  esphome/components/esp32_ble_beacon/__init__.py,sha256=ts8d3ZFLBH_QE6cW748AZUXaK_yCqg3rzlJcObTGkAQ,3190
852
853
  esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp,sha256=Y1xsFMHU306rZ8ZU7Y0UmhU22gXYe_28o7jg1t5e3Ms,4202
853
854
  esphome/components/esp32_ble_beacon/esp32_ble_beacon.h,sha256=tDM9fy5VLIrCp45bqgsqHAm6FTsn7ixoOZkuTugZqqw,1868
@@ -874,8 +875,8 @@ esphome/components/esp32_ble_server/ble_service.cpp,sha256=cLJpq-eEFNXV4tlkSHXQW
874
875
  esphome/components/esp32_ble_server/ble_service.h,sha256=BvKpr2fsUlNnviH9gdokI7IcuTBu0C7bNFT0vvIuN1Y,2306
875
876
  esphome/components/esp32_ble_tracker/__init__.py,sha256=cWHciy2tEUDNBC_bUqE-1hPSSGecbat3-8HUBitjOqQ,15170
876
877
  esphome/components/esp32_ble_tracker/automation.h,sha256=0pDA6EX__f14sT0KJwcnqg7UOsueKjjegHPznQj9biw,3795
877
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp,sha256=-ZbJGP_aANwaqqL9F30zMJHfHmbDn00M6Wi4n3NR3iI,33168
878
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h,sha256=SDSrBSFfdL3owk2lwBcyfG5JvgxBQyOVSx6CqgbIwEQ,10678
878
+ esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp,sha256=VLZ9egEuses6lxLIQJQ43YDg2VYYlQVNYjgQSRrecxk,33205
879
+ esphome/components/esp32_ble_tracker/esp32_ble_tracker.h,sha256=bhbPLtxVvW0rwQWUXBzcby0SwyvER0KLmEucXawfuSQ,10849
879
880
  esphome/components/esp32_camera/__init__.py,sha256=3M3EhzV9jPpWMiAHPaVWbYUW3D_uEM_6Je4Gd2EGhNg,12631
880
881
  esphome/components/esp32_camera/esp32_camera.cpp,sha256=Q7QjA1DBd_dnQkB6xos7STKZPhSDM0C09m1YvO7E1U4,16685
881
882
  esphome/components/esp32_camera/esp32_camera.h,sha256=bCDwl44XrornN6_KHe8htnrUJOoFlE-KMipggt3NWa8,7590
@@ -1249,7 +1250,7 @@ esphome/components/hyt271/__init__.py,sha256=P5EsUvp7gs6CYTt46VpaCuiQhMVvmmC27SU
1249
1250
  esphome/components/hyt271/hyt271.cpp,sha256=fJkV2QowprzkUwhsJDWiIFpEVGDW1HRcQalwR9yM9jo,1610
1250
1251
  esphome/components/hyt271/hyt271.h,sha256=AqCCr54XGNQubwC6RbZTNjNfloS8rNbFLyFo2DpNKxg,717
1251
1252
  esphome/components/hyt271/sensor.py,sha256=MuCcT_FO0WiAaM7Czd53oV0PNzstrwLEc09nKPosu7U,1687
1252
- esphome/components/i2c/__init__.py,sha256=Tybk4NIL1ihJgd6fZGDdOcTQsIl5gMBYFYFvjMpA2Vs,6335
1253
+ esphome/components/i2c/__init__.py,sha256=S9mx_bxaUzLrAYfsinVYGpY9uz9IuyFTQKv8YC_Cj0U,7339
1253
1254
  esphome/components/i2c/i2c.cpp,sha256=7Myvw1pXTmYtlAF6FWuf2CvjPM2lUjm-J5A-syOdEKE,3221
1254
1255
  esphome/components/i2c/i2c.h,sha256=dL6zWtZom38BSj4VitlC8tAMe0YpX1f1NLVzn-9VF00,12235
1255
1256
  esphome/components/i2c/i2c_bus.h,sha256=rse0RqXoP9JBcMk82vrlYNtrc4dsF9U8_9vH74NGImw,5191
@@ -1609,7 +1610,7 @@ esphome/components/lvgl/widgets/meter.py,sha256=I_BSID9CNbHSX1xhQJVtvjHSu3oLn1ft
1609
1610
  esphome/components/lvgl/widgets/msgbox.py,sha256=i98hz6RKJRMWQ4wz9T1qOHzmdmZ6yHDvHDeJ1T9_Gt0,5335
1610
1611
  esphome/components/lvgl/widgets/obj.py,sha256=6lKIfsdKLWIE8u_Lw0X0ChMCKcV8EZYF8WQKQEBCKYU,439
1611
1612
  esphome/components/lvgl/widgets/page.py,sha256=W7kQ1xfJLRMdy6wFKoA6tZxUXNKGBZWrjMw9OZRfLqA,5870
1612
- esphome/components/lvgl/widgets/qrcode.py,sha256=ZA81FZFRAHu2PZ7MrL-QepQoEmEHL6v2ZjBv-m7PWws,1697
1613
+ esphome/components/lvgl/widgets/qrcode.py,sha256=IuSlVDlQ0Y_Bt3lytoNx6fYYFpWrfrPG2bzk9T8z8Nc,1656
1613
1614
  esphome/components/lvgl/widgets/roller.py,sha256=oYoIvTuOL_Tynn4BsFQ25G0M2mEwypxf49KKZXde-o8,2461
1614
1615
  esphome/components/lvgl/widgets/slider.py,sha256=JlRVXxiRdQK1m4Iz7K8O8tlBXMYhzvdLqstBaWLCEdI,1793
1615
1616
  esphome/components/lvgl/widgets/spinbox.py,sha256=Qq44UxpDZ06uh3TDdrYznAEiioemLcl7HS7f0R5R9QY,5080
@@ -1704,7 +1705,7 @@ esphome/components/mcp23x17_base/__init__.py,sha256=QbwBlubiQUzBHGLyksUp0o4AagpH
1704
1705
  esphome/components/mcp23x17_base/mcp23x17_base.cpp,sha256=RVDrXonaV6PM_ziamv_eq6hO-Dv0EXXJYFcVEdMaQgs,2975
1705
1706
  esphome/components/mcp23x17_base/mcp23x17_base.h,sha256=sveF5Wsc3godQeFh-3Y5h1DLAeeAgSgBUNuRnISZdH8,1337
1706
1707
  esphome/components/mcp23xxx_base/__init__.py,sha256=Xh3XRtpaQvwwb6kEEE-kqaTuNGvXVSiM5XcE9u7h8WQ,2607
1707
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp,sha256=ezKlJS-zdxQSz_2iAj7wW6nC0N_u4u4WLSwCYlj6R8I,768
1708
+ esphome/components/mcp23xxx_base/mcp23xxx_base.cpp,sha256=6rmTZO_9snQJ43A-FWUKKKyZq6eIuAwwye2xCVbp2iU,843
1708
1709
  esphome/components/mcp23xxx_base/mcp23xxx_base.h,sha256=1-zERN4VLGDc_Rvx_AMD5Lo9XBbMjX_9zcU-xmbkLU4,1823
1709
1710
  esphome/components/mcp2515/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1710
1711
  esphome/components/mcp2515/canbus.py,sha256=dhmF5h6br1nhegixla8hJ1nyy3P06AxO_aJA1KBlwFw,1547
@@ -2015,7 +2016,7 @@ esphome/components/nextion/__init__.py,sha256=1f1kBHOUMvvwSjeIgY6cWSS_cAuRILmgs7
2015
2016
  esphome/components/nextion/automation.h,sha256=baaMGf6qTWI2OILZvkIkiKiW_pM21YZqTNbeggVXeXw,4555
2016
2017
  esphome/components/nextion/base_component.py,sha256=4O2S8GLPQerIbYlIYX7O3hEkHN7unn7u9pcRCkcBlIo,4290
2017
2018
  esphome/components/nextion/display.py,sha256=GszSWhlTFnGYlw-fj8oH3vxtaTdpMHK1JEltSs1dCO8,7977
2018
- esphome/components/nextion/nextion.cpp,sha256=vvyTE1FsBYBUlIYhJkTcptVWy6EqaN2YnzoUT3mRVOg,42308
2019
+ esphome/components/nextion/nextion.cpp,sha256=814O1mFUe9SozcaVsIxzmxsSLsNKxCvV43JYMbGaW1g,42214
2019
2020
  esphome/components/nextion/nextion.h,sha256=SQvZnSQx1gMH9b76sIOEh-IK5mjAxPffBrQNWi0uA5Y,51539
2020
2021
  esphome/components/nextion/nextion_base.h,sha256=3v9nuHpvpFxMKutV4bzuu1OB_uj26PRDaDc5gTv_2rc,2416
2021
2022
  esphome/components/nextion/nextion_commands.cpp,sha256=XjTHKSw7UHf0fujti5u_keUFGtYIAlrrTKNACSxnE60,17716
@@ -2120,12 +2121,12 @@ esphome/components/opentherm/sensor/__init__.py,sha256=uNb3f8CaWk7HE97GEKb_Jw61j
2120
2121
  esphome/components/opentherm/switch/__init__.py,sha256=rgirLZntBuvFQ_7T0WEfhC6pPE6dXdIXV37-DZq3yIE,1136
2121
2122
  esphome/components/opentherm/switch/switch.cpp,sha256=UurvOy-U1IEmNxWMCCpkPCueR-POh-FBI8fBjWWc64o,820
2122
2123
  esphome/components/opentherm/switch/switch.h,sha256=JhJFaXrJi3orbavFDc4llzmmHwU0yN2v_VuwJx3r7FU,410
2123
- esphome/components/openthread/__init__.py,sha256=nSK4UsZCkhOVRCgtET-BCRES_Quw1J6MVkLTTl_5JTo,5074
2124
+ esphome/components/openthread/__init__.py,sha256=lZ5TETobR61V1-jAEm0gEOnNCzRqci9Ni-4dKy-001w,5108
2124
2125
  esphome/components/openthread/const.py,sha256=jJvW1yrA2naAIuhZ4aGH9WEFm8MNvsbTcUJqrJR8CfM,288
2125
- esphome/components/openthread/openthread.cpp,sha256=5SNdOVTU8qFQ_ypWf7isD_nYJlAf4VgrC8NcIBlVZ1o,7121
2126
+ esphome/components/openthread/openthread.cpp,sha256=SrMt0cNvPMpHk0eZDf9DPE8GGIuDpTfevjItX_87qGQ,7121
2126
2127
  esphome/components/openthread/openthread.h,sha256=0FpY2swy0Dpvk51doFcX1IbKfKPO7CaFWFmS1hTeQD8,1855
2127
2128
  esphome/components/openthread/openthread_esp.cpp,sha256=I8bbPhwJQDfnd8RqhpZJqezJXayZztv1ZnnlLIB_KqU,4714
2128
- esphome/components/openthread/tlv.py,sha256=XFDhzIPzcdgextuZtGTNSDdMZrYCLaSnp13BMMslRgI,1230
2129
+ esphome/components/openthread/tlv.py,sha256=hYi_WM0Ja2Eo2gFR_8xIzcMY6En4g12JpolLBIb12LQ,1620
2129
2130
  esphome/components/openthread_info/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2130
2131
  esphome/components/openthread_info/openthread_info_text_sensor.cpp,sha256=M2kQAgRn2uRsjsJF96lEHtD39HTAhCp5bn2gLDARR34,1113
2131
2132
  esphome/components/openthread_info/openthread_info_text_sensor.h,sha256=nLnWZBLkq3Dvnr1Rg8Lnj7bO3EhqSfYfRiQkYOQSmPg,6932
@@ -2785,7 +2786,7 @@ esphome/components/speaker/__init__.py,sha256=2juDem8QadLMwzFp8Rvl-KeIbE-iIEsCtD
2785
2786
  esphome/components/speaker/automation.h,sha256=tVSTV49GvHk0bCEgLz3rNYFe8B1F0kXLgE-WihuRaV8,2320
2786
2787
  esphome/components/speaker/speaker.h,sha256=Y6EuDzsIx8GDcFeWnYXg4cXiBU-6CkmrRCaMpXQYiWo,4355
2787
2788
  esphome/components/speaker/media_player/__init__.py,sha256=QfJfrfwYuTEWJ_P3mVACjiATFPHSfDK-eJ0YOiSgatE,15441
2788
- esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=UYIc3ntV98vTADPj7CJLerSguhVQGScCOdtCOdMZ0pU,22362
2789
+ esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=VjodnH-hIPRtulk4iPt_oaym3qr_O2-fK3dyufenPnQ,22147
2789
2790
  esphome/components/speaker/media_player/audio_pipeline.h,sha256=MYt7_kp4IJDSTnXWqLaXIkbbNkGx6F_imSryFo2UUkc,5000
2790
2791
  esphome/components/speaker/media_player/automation.h,sha256=I8psUHnJ8T3fkM05h1yEYDxb0yWe6Vjz7i30OSVA3Is,683
2791
2792
  esphome/components/speaker/media_player/speaker_media_player.cpp,sha256=M_eFKuivv__swCA8xhWd4-cfNdrY2h8Vm8VfG8DUDZ8,22610
@@ -3322,9 +3323,9 @@ esphome/components/vl53l0x/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
3322
3323
  esphome/components/vl53l0x/sensor.py,sha256=qQVBjhMl_nGbzuAHY0Fz2GnG5TkNJLuyFRYmQaVeTWI,2851
3323
3324
  esphome/components/vl53l0x/vl53l0x_sensor.cpp,sha256=mBGggbztlCSvjPDA6IY3p1uBnziXdkaMKLCLWcZL0ok,15170
3324
3325
  esphome/components/vl53l0x/vl53l0x_sensor.h,sha256=F29WiWgbLxjZxxy8JWdrpoD4lDGdB9dVUbRqbv-11sA,2670
3325
- esphome/components/voice_assistant/__init__.py,sha256=cPyFuUeucxAwE45_NSUwYjVWVz_5Iouh5fWaqJctacU,14855
3326
- esphome/components/voice_assistant/voice_assistant.cpp,sha256=uVBCV7CwBwIPaPiYPLCoRLKJwq08seyu08MQqIvoS0Q,31740
3327
- esphome/components/voice_assistant/voice_assistant.h,sha256=YXAuH-UFXIczt266jayZd58AqZpKh4qgymYapCbaZig,12124
3326
+ esphome/components/voice_assistant/__init__.py,sha256=cYEmZoI6w05kMF_ZrFHgsvKOLGO1GIT-a3aUWqepNt4,15264
3327
+ esphome/components/voice_assistant/voice_assistant.cpp,sha256=heQWZVPKl5yNpHHpdM7Ae8gcLv4TAGFaE5zFrnfDUKo,33212
3328
+ esphome/components/voice_assistant/voice_assistant.h,sha256=M42wYACkOB90iIeejCXaFnqRZkETsEjjJSi7j_YZxg8,12381
3328
3329
  esphome/components/voltage_sampler/__init__.py,sha256=IU5YrROZSNyuAP1d6M_V3ZGAwNjXCHPcVy5nMjZ953Y,155
3329
3330
  esphome/components/voltage_sampler/voltage_sampler.h,sha256=Y67FLOpOzW29v29BRRyYgEmGZ_B8QnUUaqJMH6FA3jM,337
3330
3331
  esphome/components/wake_on_lan/__init__.py,sha256=-RYpXD02o3dlFnKzOCYk58bUbxfD2v-wj1ECywj-cgI,50
@@ -3595,9 +3596,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
3595
3596
  esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
3596
3597
  esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
3597
3598
  esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
3598
- esphome-2025.6.0b3.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3599
- esphome-2025.6.0b3.dist-info/METADATA,sha256=IJwYU8F4CJZgXzX5hXwV5hzXCS3Lki22NTXL31DllxY,3680
3600
- esphome-2025.6.0b3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3601
- esphome-2025.6.0b3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3602
- esphome-2025.6.0b3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3603
- esphome-2025.6.0b3.dist-info/RECORD,,
3599
+ esphome-2025.6.2.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
3600
+ esphome-2025.6.2.dist-info/METADATA,sha256=iVaivl7IcZGOyoHhVWYTLTPoN818SPv0BO_nInQymVA,3678
3601
+ esphome-2025.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
3602
+ esphome-2025.6.2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
3603
+ esphome-2025.6.2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
3604
+ esphome-2025.6.2.dist-info/RECORD,,