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.
- esphome/components/api/api_pb2.cpp +2 -0
- esphome/components/api/api_pb2.h +1 -0
- esphome/components/audio/audio_reader.cpp +41 -21
- esphome/components/esp32/__init__.py +2 -2
- esphome/components/esp32_ble/ble.cpp +108 -46
- esphome/components/esp32_ble/ble.h +2 -0
- esphome/components/esp32_ble/ble_event.h +242 -75
- esphome/components/esp32_ble/ble_event_pool.h +72 -0
- esphome/components/esp32_ble/queue.h +14 -11
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +1 -0
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +4 -0
- esphome/components/i2c/__init__.py +33 -0
- esphome/components/lvgl/widgets/qrcode.py +4 -6
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +5 -1
- esphome/components/nextion/nextion.cpp +2 -10
- esphome/components/openthread/__init__.py +5 -5
- esphome/components/openthread/openthread.cpp +3 -3
- esphome/components/openthread/tlv.py +7 -0
- esphome/components/speaker/media_player/audio_pipeline.cpp +12 -13
- esphome/components/voice_assistant/__init__.py +12 -1
- esphome/components/voice_assistant/voice_assistant.cpp +36 -2
- esphome/components/voice_assistant/voice_assistant.h +4 -0
- esphome/config_validation.py +44 -1
- esphome/const.py +1 -1
- esphome/yaml_util.py +2 -1
- {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/METADATA +1 -1
- {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/RECORD +31 -30
- {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/WHEEL +0 -0
- {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.0b3.dist-info → esphome-2025.6.2.dist-info}/licenses/LICENSE +0 -0
- {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
|
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.
|
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
|
-
|
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
|
-
|
188
|
+
ESP_LOGD(TAG, "Added service: %s", full_service.c_str());
|
189
189
|
}
|
190
190
|
|
191
191
|
otSrpClientEnableAutoStartMode(instance, srp_start_callback, nullptr);
|
192
|
-
|
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
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
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 =
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
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
|
-
|
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
|
esphome/config_validation.py
CHANGED
@@ -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
|
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
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.
|
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=
|
8
|
-
esphome/const.py,sha256=
|
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=
|
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=
|
191
|
-
esphome/components/api/api_pb2.h,sha256=
|
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=
|
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=
|
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=
|
843
|
-
esphome/components/esp32_ble/ble.h,sha256=
|
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=
|
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=
|
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
|
878
|
-
esphome/components/esp32_ble_tracker/esp32_ble_tracker.h,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
3326
|
-
esphome/components/voice_assistant/voice_assistant.cpp,sha256=
|
3327
|
-
esphome/components/voice_assistant/voice_assistant.h,sha256=
|
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.
|
3599
|
-
esphome-2025.6.
|
3600
|
-
esphome-2025.6.
|
3601
|
-
esphome-2025.6.
|
3602
|
-
esphome-2025.6.
|
3603
|
-
esphome-2025.6.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|