esphome 2025.7.1__py3-none-any.whl → 2025.7.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.
Potentially problematic release.
This version of esphome might be problematic. Click here for more details.
- esphome/components/api/homeassistant_service.h +3 -0
- esphome/components/esp32_camera/__init__.py +22 -0
- esphome/components/gpio/binary_sensor/__init__.py +15 -1
- esphome/components/logger/__init__.py +2 -2
- esphome/components/lvgl/types.py +2 -2
- esphome/components/lvgl/widgets/meter.py +3 -0
- esphome/components/speaker/media_player/audio_pipeline.cpp +14 -2
- esphome/components/speaker/media_player/audio_pipeline.h +1 -0
- esphome/components/voice_assistant/voice_assistant.cpp +52 -20
- esphome/components/voice_assistant/voice_assistant.h +11 -2
- esphome/components/web_server/web_server.cpp +3 -1
- esphome/components/wireguard/wireguard.cpp +13 -3
- esphome/const.py +1 -1
- esphome/core/base_automation.h +2 -2
- esphome/core/component.cpp +2 -2
- esphome/core/event_pool.h +2 -2
- esphome/core/lock_free_queue.h +2 -7
- esphome/core/scheduler.cpp +1 -1
- esphome/core/scheduler.h +4 -3
- {esphome-2025.7.1.dist-info → esphome-2025.7.2.dist-info}/METADATA +1 -1
- {esphome-2025.7.1.dist-info → esphome-2025.7.2.dist-info}/RECORD +25 -25
- {esphome-2025.7.1.dist-info → esphome-2025.7.2.dist-info}/WHEEL +0 -0
- {esphome-2025.7.1.dist-info → esphome-2025.7.2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.1.dist-info → esphome-2025.7.2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.1.dist-info → esphome-2025.7.2.dist-info}/top_level.txt +0 -0
|
@@ -16,6 +16,9 @@ template<typename... X> class TemplatableStringValue : public TemplatableValue<s
|
|
|
16
16
|
template<typename T> static std::string value_to_string(T &&val) { return to_string(std::forward<T>(val)); }
|
|
17
17
|
|
|
18
18
|
// Overloads for string types - needed because std::to_string doesn't support them
|
|
19
|
+
static std::string value_to_string(char *val) {
|
|
20
|
+
return val ? std::string(val) : std::string();
|
|
21
|
+
} // For lambdas returning char* (e.g., itoa)
|
|
19
22
|
static std::string value_to_string(const char *val) { return std::string(val); } // For lambdas returning .c_str()
|
|
20
23
|
static std::string value_to_string(const std::string &val) { return val; }
|
|
21
24
|
static std::string value_to_string(std::string &&val) { return std::move(val); }
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
1
3
|
from esphome import automation, pins
|
|
2
4
|
import esphome.codegen as cg
|
|
3
5
|
from esphome.components import i2c
|
|
@@ -8,6 +10,7 @@ from esphome.const import (
|
|
|
8
10
|
CONF_CONTRAST,
|
|
9
11
|
CONF_DATA_PINS,
|
|
10
12
|
CONF_FREQUENCY,
|
|
13
|
+
CONF_I2C,
|
|
11
14
|
CONF_I2C_ID,
|
|
12
15
|
CONF_ID,
|
|
13
16
|
CONF_PIN,
|
|
@@ -20,6 +23,9 @@ from esphome.const import (
|
|
|
20
23
|
)
|
|
21
24
|
from esphome.core import CORE
|
|
22
25
|
from esphome.core.entity_helpers import setup_entity
|
|
26
|
+
import esphome.final_validate as fv
|
|
27
|
+
|
|
28
|
+
_LOGGER = logging.getLogger(__name__)
|
|
23
29
|
|
|
24
30
|
DEPENDENCIES = ["esp32"]
|
|
25
31
|
|
|
@@ -250,6 +256,22 @@ CONFIG_SCHEMA = cv.All(
|
|
|
250
256
|
cv.has_exactly_one_key(CONF_I2C_PINS, CONF_I2C_ID),
|
|
251
257
|
)
|
|
252
258
|
|
|
259
|
+
|
|
260
|
+
def _final_validate(config):
|
|
261
|
+
if CONF_I2C_PINS not in config:
|
|
262
|
+
return
|
|
263
|
+
fconf = fv.full_config.get()
|
|
264
|
+
if fconf.get(CONF_I2C):
|
|
265
|
+
raise cv.Invalid(
|
|
266
|
+
"The `i2c_pins:` config option is incompatible with an dedicated `i2c:` block, use `i2c_id` instead"
|
|
267
|
+
)
|
|
268
|
+
_LOGGER.warning(
|
|
269
|
+
"The `i2c_pins:` config option is deprecated. Use `i2c_id:` with a dedicated `i2c:` definition instead."
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
FINAL_VALIDATE_SCHEMA = _final_validate
|
|
274
|
+
|
|
253
275
|
SETTERS = {
|
|
254
276
|
# pin assignment
|
|
255
277
|
CONF_DATA_PINS: "set_data_pins",
|
|
@@ -29,7 +29,21 @@ CONFIG_SCHEMA = (
|
|
|
29
29
|
.extend(
|
|
30
30
|
{
|
|
31
31
|
cv.Required(CONF_PIN): pins.gpio_input_pin_schema,
|
|
32
|
-
|
|
32
|
+
# Interrupts are disabled by default for bk72xx, ln882x, and rtl87xx platforms
|
|
33
|
+
# due to hardware limitations or lack of reliable interrupt support. This ensures
|
|
34
|
+
# stable operation on these platforms. Future maintainers should verify platform
|
|
35
|
+
# capabilities before changing this default behavior.
|
|
36
|
+
cv.SplitDefault(
|
|
37
|
+
CONF_USE_INTERRUPT,
|
|
38
|
+
bk72xx=False,
|
|
39
|
+
esp32=True,
|
|
40
|
+
esp8266=True,
|
|
41
|
+
host=True,
|
|
42
|
+
ln882x=False,
|
|
43
|
+
nrf52=True,
|
|
44
|
+
rp2040=True,
|
|
45
|
+
rtl87xx=False,
|
|
46
|
+
): cv.boolean,
|
|
33
47
|
cv.Optional(CONF_INTERRUPT_TYPE, default="ANY"): cv.enum(
|
|
34
48
|
INTERRUPT_TYPES, upper=True
|
|
35
49
|
),
|
|
@@ -183,7 +183,7 @@ def validate_local_no_higher_than_global(value):
|
|
|
183
183
|
Logger = logger_ns.class_("Logger", cg.Component)
|
|
184
184
|
LoggerMessageTrigger = logger_ns.class_(
|
|
185
185
|
"LoggerMessageTrigger",
|
|
186
|
-
automation.Trigger.template(cg.
|
|
186
|
+
automation.Trigger.template(cg.uint8, cg.const_char_ptr, cg.const_char_ptr),
|
|
187
187
|
)
|
|
188
188
|
|
|
189
189
|
CONF_ESP8266_STORE_LOG_STRINGS_IN_FLASH = "esp8266_store_log_strings_in_flash"
|
|
@@ -368,7 +368,7 @@ async def to_code(config):
|
|
|
368
368
|
await automation.build_automation(
|
|
369
369
|
trigger,
|
|
370
370
|
[
|
|
371
|
-
(cg.
|
|
371
|
+
(cg.uint8, "level"),
|
|
372
372
|
(cg.const_char_ptr, "tag"),
|
|
373
373
|
(cg.const_char_ptr, "message"),
|
|
374
374
|
],
|
esphome/components/lvgl/types.py
CHANGED
|
@@ -192,7 +192,7 @@ class WidgetType:
|
|
|
192
192
|
|
|
193
193
|
class NumberType(WidgetType):
|
|
194
194
|
def get_max(self, config: dict):
|
|
195
|
-
return int(config
|
|
195
|
+
return int(config.get(CONF_MAX_VALUE, 100))
|
|
196
196
|
|
|
197
197
|
def get_min(self, config: dict):
|
|
198
|
-
return int(config
|
|
198
|
+
return int(config.get(CONF_MIN_VALUE, 0))
|
|
@@ -14,6 +14,7 @@ from esphome.const import (
|
|
|
14
14
|
CONF_VALUE,
|
|
15
15
|
CONF_WIDTH,
|
|
16
16
|
)
|
|
17
|
+
from esphome.cpp_generator import IntLiteral
|
|
17
18
|
|
|
18
19
|
from ..automation import action_to_code
|
|
19
20
|
from ..defines import (
|
|
@@ -188,6 +189,8 @@ class MeterType(WidgetType):
|
|
|
188
189
|
rotation = 90 + (360 - scale_conf[CONF_ANGLE_RANGE]) / 2
|
|
189
190
|
if CONF_ROTATION in scale_conf:
|
|
190
191
|
rotation = await lv_angle.process(scale_conf[CONF_ROTATION])
|
|
192
|
+
if isinstance(rotation, IntLiteral):
|
|
193
|
+
rotation = int(str(rotation)) // 10
|
|
191
194
|
with LocalVariable(
|
|
192
195
|
"meter_var", "lv_meter_scale_t", lv_expr.meter_add_scale(var)
|
|
193
196
|
) as meter_var:
|
|
@@ -200,7 +200,7 @@ AudioPipelineState AudioPipeline::process_state() {
|
|
|
200
200
|
if ((this->read_task_handle_ != nullptr) || (this->decode_task_handle_ != nullptr)) {
|
|
201
201
|
this->delete_tasks_();
|
|
202
202
|
if (this->hard_stop_) {
|
|
203
|
-
// Stop command was sent, so immediately end
|
|
203
|
+
// Stop command was sent, so immediately end the playback
|
|
204
204
|
this->speaker_->stop();
|
|
205
205
|
this->hard_stop_ = false;
|
|
206
206
|
} else {
|
|
@@ -210,13 +210,25 @@ AudioPipelineState AudioPipeline::process_state() {
|
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
this->is_playing_ = false;
|
|
213
|
-
|
|
213
|
+
if (!this->speaker_->is_running()) {
|
|
214
|
+
return AudioPipelineState::STOPPED;
|
|
215
|
+
} else {
|
|
216
|
+
this->is_finishing_ = true;
|
|
217
|
+
}
|
|
214
218
|
}
|
|
215
219
|
|
|
216
220
|
if (this->pause_state_) {
|
|
217
221
|
return AudioPipelineState::PAUSED;
|
|
218
222
|
}
|
|
219
223
|
|
|
224
|
+
if (this->is_finishing_) {
|
|
225
|
+
if (!this->speaker_->is_running()) {
|
|
226
|
+
this->is_finishing_ = false;
|
|
227
|
+
} else {
|
|
228
|
+
return AudioPipelineState::PLAYING;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
220
232
|
if ((this->read_task_handle_ == nullptr) && (this->decode_task_handle_ == nullptr)) {
|
|
221
233
|
// No tasks are running, so the pipeline is stopped.
|
|
222
234
|
xEventGroupClearBits(this->event_group_, EventGroupBits::PIPELINE_COMMAND_STOP);
|
|
@@ -35,6 +35,27 @@ void VoiceAssistant::setup() {
|
|
|
35
35
|
temp_ring_buffer->write((void *) data.data(), data.size());
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
|
+
|
|
39
|
+
#ifdef USE_MEDIA_PLAYER
|
|
40
|
+
if (this->media_player_ != nullptr) {
|
|
41
|
+
this->media_player_->add_on_state_callback([this]() {
|
|
42
|
+
switch (this->media_player_->state) {
|
|
43
|
+
case media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING:
|
|
44
|
+
if (this->media_player_response_state_ == MediaPlayerResponseState::URL_SENT) {
|
|
45
|
+
// State changed to announcing after receiving the url
|
|
46
|
+
this->media_player_response_state_ = MediaPlayerResponseState::PLAYING;
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
if (this->media_player_response_state_ == MediaPlayerResponseState::PLAYING) {
|
|
51
|
+
// No longer announcing the TTS response
|
|
52
|
+
this->media_player_response_state_ = MediaPlayerResponseState::FINISHED;
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
#endif
|
|
38
59
|
}
|
|
39
60
|
|
|
40
61
|
float VoiceAssistant::get_setup_priority() const { return setup_priority::AFTER_CONNECTION; }
|
|
@@ -223,6 +244,13 @@ void VoiceAssistant::loop() {
|
|
|
223
244
|
msg.wake_word_phrase = this->wake_word_;
|
|
224
245
|
this->wake_word_ = "";
|
|
225
246
|
|
|
247
|
+
// Reset media player state tracking
|
|
248
|
+
#ifdef USE_MEDIA_PLAYER
|
|
249
|
+
if (this->media_player_ != nullptr) {
|
|
250
|
+
this->media_player_response_state_ = MediaPlayerResponseState::IDLE;
|
|
251
|
+
}
|
|
252
|
+
#endif
|
|
253
|
+
|
|
226
254
|
if (this->api_client_ == nullptr || !this->api_client_->send_message(msg)) {
|
|
227
255
|
ESP_LOGW(TAG, "Could not request start");
|
|
228
256
|
this->error_trigger_->trigger("not-connected", "Could not request start");
|
|
@@ -314,17 +342,10 @@ void VoiceAssistant::loop() {
|
|
|
314
342
|
#endif
|
|
315
343
|
#ifdef USE_MEDIA_PLAYER
|
|
316
344
|
if (this->media_player_ != nullptr) {
|
|
317
|
-
playing = (this->
|
|
318
|
-
|
|
319
|
-
if (playing && this->media_player_wait_for_announcement_start_) {
|
|
320
|
-
// Announcement has started playing, wait for it to finish
|
|
321
|
-
this->media_player_wait_for_announcement_start_ = false;
|
|
322
|
-
this->media_player_wait_for_announcement_end_ = true;
|
|
323
|
-
}
|
|
345
|
+
playing = (this->media_player_response_state_ == MediaPlayerResponseState::PLAYING);
|
|
324
346
|
|
|
325
|
-
if (
|
|
326
|
-
|
|
327
|
-
this->media_player_wait_for_announcement_end_ = false;
|
|
347
|
+
if (this->media_player_response_state_ == MediaPlayerResponseState::FINISHED) {
|
|
348
|
+
this->media_player_response_state_ = MediaPlayerResponseState::IDLE;
|
|
328
349
|
this->cancel_timeout("playing");
|
|
329
350
|
ESP_LOGD(TAG, "Announcement finished playing");
|
|
330
351
|
this->set_state_(State::RESPONSE_FINISHED, State::RESPONSE_FINISHED);
|
|
@@ -555,7 +576,7 @@ void VoiceAssistant::request_stop() {
|
|
|
555
576
|
break;
|
|
556
577
|
case State::AWAITING_RESPONSE:
|
|
557
578
|
this->signal_stop_();
|
|
558
|
-
|
|
579
|
+
break;
|
|
559
580
|
case State::STREAMING_RESPONSE:
|
|
560
581
|
#ifdef USE_MEDIA_PLAYER
|
|
561
582
|
// Stop any ongoing media player announcement
|
|
@@ -565,6 +586,10 @@ void VoiceAssistant::request_stop() {
|
|
|
565
586
|
.set_announcement(true)
|
|
566
587
|
.perform();
|
|
567
588
|
}
|
|
589
|
+
if (this->started_streaming_tts_) {
|
|
590
|
+
// Haven't reached the TTS_END stage, so send the stop signal to HA.
|
|
591
|
+
this->signal_stop_();
|
|
592
|
+
}
|
|
568
593
|
#endif
|
|
569
594
|
break;
|
|
570
595
|
case State::RESPONSE_FINISHED:
|
|
@@ -648,13 +673,16 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
|
|
|
648
673
|
if (this->media_player_ != nullptr) {
|
|
649
674
|
for (const auto &arg : msg.data) {
|
|
650
675
|
if ((arg.name == "tts_start_streaming") && (arg.value == "1") && !this->tts_response_url_.empty()) {
|
|
676
|
+
this->media_player_response_state_ = MediaPlayerResponseState::URL_SENT;
|
|
677
|
+
|
|
651
678
|
this->media_player_->make_call().set_media_url(this->tts_response_url_).set_announcement(true).perform();
|
|
652
679
|
|
|
653
|
-
this->media_player_wait_for_announcement_start_ = true;
|
|
654
|
-
this->media_player_wait_for_announcement_end_ = false;
|
|
655
680
|
this->started_streaming_tts_ = true;
|
|
681
|
+
this->start_playback_timeout_();
|
|
682
|
+
|
|
656
683
|
tts_url_for_trigger = this->tts_response_url_;
|
|
657
684
|
this->tts_response_url_.clear(); // Reset streaming URL
|
|
685
|
+
this->set_state_(State::STREAMING_RESPONSE, State::STREAMING_RESPONSE);
|
|
658
686
|
}
|
|
659
687
|
}
|
|
660
688
|
}
|
|
@@ -713,18 +741,22 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
|
|
|
713
741
|
this->defer([this, url]() {
|
|
714
742
|
#ifdef USE_MEDIA_PLAYER
|
|
715
743
|
if ((this->media_player_ != nullptr) && (!this->started_streaming_tts_)) {
|
|
744
|
+
this->media_player_response_state_ = MediaPlayerResponseState::URL_SENT;
|
|
745
|
+
|
|
716
746
|
this->media_player_->make_call().set_media_url(url).set_announcement(true).perform();
|
|
717
747
|
|
|
718
|
-
this->media_player_wait_for_announcement_start_ = true;
|
|
719
|
-
this->media_player_wait_for_announcement_end_ = false;
|
|
720
|
-
// Start the playback timeout, as the media player state isn't immediately updated
|
|
721
748
|
this->start_playback_timeout_();
|
|
722
749
|
}
|
|
750
|
+
this->started_streaming_tts_ = false; // Helps indicate reaching the TTS_END stage
|
|
723
751
|
#endif
|
|
724
752
|
this->tts_end_trigger_->trigger(url);
|
|
725
753
|
});
|
|
726
754
|
State new_state = this->local_output_ ? State::STREAMING_RESPONSE : State::IDLE;
|
|
727
|
-
|
|
755
|
+
if (new_state != this->state_) {
|
|
756
|
+
// Don't needlessly change the state. The intent progress stage may have already changed the state to streaming
|
|
757
|
+
// response.
|
|
758
|
+
this->set_state_(new_state, new_state);
|
|
759
|
+
}
|
|
728
760
|
break;
|
|
729
761
|
}
|
|
730
762
|
case api::enums::VOICE_ASSISTANT_RUN_END: {
|
|
@@ -875,6 +907,9 @@ void VoiceAssistant::on_announce(const api::VoiceAssistantAnnounceRequest &msg)
|
|
|
875
907
|
#ifdef USE_MEDIA_PLAYER
|
|
876
908
|
if (this->media_player_ != nullptr) {
|
|
877
909
|
this->tts_start_trigger_->trigger(msg.text);
|
|
910
|
+
|
|
911
|
+
this->media_player_response_state_ = MediaPlayerResponseState::URL_SENT;
|
|
912
|
+
|
|
878
913
|
if (!msg.preannounce_media_id.empty()) {
|
|
879
914
|
this->media_player_->make_call().set_media_url(msg.preannounce_media_id).set_announcement(true).perform();
|
|
880
915
|
}
|
|
@@ -886,9 +921,6 @@ void VoiceAssistant::on_announce(const api::VoiceAssistantAnnounceRequest &msg)
|
|
|
886
921
|
.perform();
|
|
887
922
|
this->continue_conversation_ = msg.start_conversation;
|
|
888
923
|
|
|
889
|
-
this->media_player_wait_for_announcement_start_ = true;
|
|
890
|
-
this->media_player_wait_for_announcement_end_ = false;
|
|
891
|
-
// Start the playback timeout, as the media player state isn't immediately updated
|
|
892
924
|
this->start_playback_timeout_();
|
|
893
925
|
|
|
894
926
|
if (this->continuous_) {
|
|
@@ -90,6 +90,15 @@ struct Configuration {
|
|
|
90
90
|
uint32_t max_active_wake_words;
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
+
#ifdef USE_MEDIA_PLAYER
|
|
94
|
+
enum class MediaPlayerResponseState {
|
|
95
|
+
IDLE,
|
|
96
|
+
URL_SENT,
|
|
97
|
+
PLAYING,
|
|
98
|
+
FINISHED,
|
|
99
|
+
};
|
|
100
|
+
#endif
|
|
101
|
+
|
|
93
102
|
class VoiceAssistant : public Component {
|
|
94
103
|
public:
|
|
95
104
|
VoiceAssistant();
|
|
@@ -272,8 +281,8 @@ class VoiceAssistant : public Component {
|
|
|
272
281
|
media_player::MediaPlayer *media_player_{nullptr};
|
|
273
282
|
std::string tts_response_url_{""};
|
|
274
283
|
bool started_streaming_tts_{false};
|
|
275
|
-
|
|
276
|
-
|
|
284
|
+
|
|
285
|
+
MediaPlayerResponseState media_player_response_state_{MediaPlayerResponseState::IDLE};
|
|
277
286
|
#endif
|
|
278
287
|
|
|
279
288
|
bool local_output_{false};
|
|
@@ -1620,7 +1620,9 @@ void WebServer::handle_event_request(AsyncWebServerRequest *request, const UrlMa
|
|
|
1620
1620
|
request->send(404);
|
|
1621
1621
|
}
|
|
1622
1622
|
|
|
1623
|
-
static std::string get_event_type(event::Event *event) {
|
|
1623
|
+
static std::string get_event_type(event::Event *event) {
|
|
1624
|
+
return (event && event->last_event_type) ? *event->last_event_type : "";
|
|
1625
|
+
}
|
|
1624
1626
|
|
|
1625
1627
|
std::string WebServer::event_state_json_generator(WebServer *web_server, void *source) {
|
|
1626
1628
|
auto *event = static_cast<event::Event *>(source);
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#include "esphome/core/log.h"
|
|
9
9
|
#include "esphome/core/time.h"
|
|
10
10
|
#include "esphome/components/network/util.h"
|
|
11
|
+
#include "esphome/core/helpers.h"
|
|
11
12
|
|
|
12
13
|
#include <esp_wireguard.h>
|
|
13
14
|
#include <esp_wireguard_err.h>
|
|
@@ -42,7 +43,10 @@ void Wireguard::setup() {
|
|
|
42
43
|
|
|
43
44
|
this->publish_enabled_state();
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
{
|
|
47
|
+
LwIPLock lock;
|
|
48
|
+
this->wg_initialized_ = esp_wireguard_init(&(this->wg_config_), &(this->wg_ctx_));
|
|
49
|
+
}
|
|
46
50
|
|
|
47
51
|
if (this->wg_initialized_ == ESP_OK) {
|
|
48
52
|
ESP_LOGI(TAG, "Initialized");
|
|
@@ -249,7 +253,10 @@ void Wireguard::start_connection_() {
|
|
|
249
253
|
}
|
|
250
254
|
|
|
251
255
|
ESP_LOGD(TAG, "Starting connection");
|
|
252
|
-
|
|
256
|
+
{
|
|
257
|
+
LwIPLock lock;
|
|
258
|
+
this->wg_connected_ = esp_wireguard_connect(&(this->wg_ctx_));
|
|
259
|
+
}
|
|
253
260
|
|
|
254
261
|
if (this->wg_connected_ == ESP_OK) {
|
|
255
262
|
ESP_LOGI(TAG, "Connection started");
|
|
@@ -280,7 +287,10 @@ void Wireguard::start_connection_() {
|
|
|
280
287
|
void Wireguard::stop_connection_() {
|
|
281
288
|
if (this->wg_initialized_ == ESP_OK && this->wg_connected_ == ESP_OK) {
|
|
282
289
|
ESP_LOGD(TAG, "Stopping connection");
|
|
283
|
-
|
|
290
|
+
{
|
|
291
|
+
LwIPLock lock;
|
|
292
|
+
esp_wireguard_disconnect(&(this->wg_ctx_));
|
|
293
|
+
}
|
|
284
294
|
this->wg_connected_ = ESP_FAIL;
|
|
285
295
|
}
|
|
286
296
|
}
|
esphome/const.py
CHANGED
esphome/core/base_automation.h
CHANGED
|
@@ -158,14 +158,14 @@ template<typename... Ts> class DelayAction : public Action<Ts...>, public Compon
|
|
|
158
158
|
void play_complex(Ts... x) override {
|
|
159
159
|
auto f = std::bind(&DelayAction<Ts...>::play_next_, this, x...);
|
|
160
160
|
this->num_running_++;
|
|
161
|
-
this->set_timeout(this->delay_.value(x...), f);
|
|
161
|
+
this->set_timeout("delay", this->delay_.value(x...), f);
|
|
162
162
|
}
|
|
163
163
|
float get_setup_priority() const override { return setup_priority::HARDWARE; }
|
|
164
164
|
|
|
165
165
|
void play(Ts... x) override { /* ignore - see play_complex */
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
void stop() override { this->cancel_timeout(""); }
|
|
168
|
+
void stop() override { this->cancel_timeout("delay"); }
|
|
169
169
|
};
|
|
170
170
|
|
|
171
171
|
template<typename... Ts> class LambdaAction : public Action<Ts...> {
|
esphome/core/component.cpp
CHANGED
|
@@ -252,10 +252,10 @@ void Component::defer(const char *name, std::function<void()> &&f) { // NOLINT
|
|
|
252
252
|
App.scheduler.set_timeout(this, name, 0, std::move(f));
|
|
253
253
|
}
|
|
254
254
|
void Component::set_timeout(uint32_t timeout, std::function<void()> &&f) { // NOLINT
|
|
255
|
-
App.scheduler.set_timeout(this,
|
|
255
|
+
App.scheduler.set_timeout(this, static_cast<const char *>(nullptr), timeout, std::move(f));
|
|
256
256
|
}
|
|
257
257
|
void Component::set_interval(uint32_t interval, std::function<void()> &&f) { // NOLINT
|
|
258
|
-
App.scheduler.set_interval(this,
|
|
258
|
+
App.scheduler.set_interval(this, static_cast<const char *>(nullptr), interval, std::move(f));
|
|
259
259
|
}
|
|
260
260
|
void Component::set_retry(uint32_t initial_wait_time, uint8_t max_attempts, std::function<RetryResult(uint8_t)> &&f,
|
|
261
261
|
float backoff_increase_factor) { // NOLINT
|
esphome/core/event_pool.h
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#if defined(USE_ESP32)
|
|
3
|
+
#if defined(USE_ESP32)
|
|
4
4
|
|
|
5
5
|
#include <atomic>
|
|
6
6
|
#include <cstddef>
|
|
@@ -78,4 +78,4 @@ template<class T, uint8_t SIZE> class EventPool {
|
|
|
78
78
|
|
|
79
79
|
} // namespace esphome
|
|
80
80
|
|
|
81
|
-
#endif // defined(USE_ESP32)
|
|
81
|
+
#endif // defined(USE_ESP32)
|
esphome/core/lock_free_queue.h
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#if defined(USE_ESP32)
|
|
3
|
+
#if defined(USE_ESP32)
|
|
4
4
|
|
|
5
5
|
#include <atomic>
|
|
6
6
|
#include <cstddef>
|
|
7
7
|
|
|
8
|
-
#if defined(USE_ESP32)
|
|
9
8
|
#include <freertos/FreeRTOS.h>
|
|
10
9
|
#include <freertos/task.h>
|
|
11
|
-
#elif defined(USE_LIBRETINY)
|
|
12
|
-
#include <FreeRTOS.h>
|
|
13
|
-
#include <task.h>
|
|
14
|
-
#endif
|
|
15
10
|
|
|
16
11
|
/*
|
|
17
12
|
* Lock-free queue for single-producer single-consumer scenarios.
|
|
@@ -148,4 +143,4 @@ template<class T, uint8_t SIZE> class NotifyingLockFreeQueue : public LockFreeQu
|
|
|
148
143
|
|
|
149
144
|
} // namespace esphome
|
|
150
145
|
|
|
151
|
-
#endif // defined(USE_ESP32)
|
|
146
|
+
#endif // defined(USE_ESP32)
|
esphome/core/scheduler.cpp
CHANGED
|
@@ -446,7 +446,7 @@ bool HOT Scheduler::cancel_item_(Component *component, bool is_static_string, co
|
|
|
446
446
|
// Helper to cancel items by name - must be called with lock held
|
|
447
447
|
bool HOT Scheduler::cancel_item_locked_(Component *component, const char *name_cstr, SchedulerItem::Type type) {
|
|
448
448
|
// Early return if name is invalid - no items to cancel
|
|
449
|
-
if (name_cstr == nullptr
|
|
449
|
+
if (name_cstr == nullptr) {
|
|
450
450
|
return false;
|
|
451
451
|
}
|
|
452
452
|
|
esphome/core/scheduler.h
CHANGED
|
@@ -114,16 +114,17 @@ class Scheduler {
|
|
|
114
114
|
name_is_dynamic = false;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
if (!name
|
|
117
|
+
if (!name) {
|
|
118
|
+
// nullptr case - no name provided
|
|
118
119
|
name_.static_name = nullptr;
|
|
119
120
|
} else if (make_copy) {
|
|
120
|
-
// Make a copy for dynamic strings
|
|
121
|
+
// Make a copy for dynamic strings (including empty strings)
|
|
121
122
|
size_t len = strlen(name);
|
|
122
123
|
name_.dynamic_name = new char[len + 1];
|
|
123
124
|
memcpy(name_.dynamic_name, name, len + 1);
|
|
124
125
|
name_is_dynamic = true;
|
|
125
126
|
} else {
|
|
126
|
-
// Use static string directly
|
|
127
|
+
// Use static string directly (including empty strings)
|
|
127
128
|
name_.static_name = name;
|
|
128
129
|
}
|
|
129
130
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: esphome
|
|
3
|
-
Version: 2025.7.
|
|
3
|
+
Version: 2025.7.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
|
|
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=H_WB4rj0uEowvlhEb31EjJQwutLQ5CQkJIsNgDK-wx8,1917
|
|
|
5
5
|
esphome/config.py,sha256=b-Gh-DEx_pax0ZKqHTKb5gmMIvaQA71bJvE-15AI0JI,42211
|
|
6
6
|
esphome/config_helpers.py,sha256=BpyuWRxj5edJGIW7VP4S59i4I8g8baSlWpNyu6nB_uM,5413
|
|
7
7
|
esphome/config_validation.py,sha256=_SMAcS_AhMh0kaLki86hjPZp5b95culJZtQePqoL_fU,63712
|
|
8
|
-
esphome/const.py,sha256=
|
|
8
|
+
esphome/const.py,sha256=KwAeVg3hE8JEHR5Yp_X1tHFZCxXbepoWToDGgrgEhJE,43367
|
|
9
9
|
esphome/coroutine.py,sha256=HNBqqhaTbpvsOI19bTXltxJCMVtoeqZPe4qTf4CKkAc,9309
|
|
10
10
|
esphome/cpp_generator.py,sha256=khmyuRIOc-ST9zIZjX7uOWLy9sSJhk4C2KexoBv51uk,31946
|
|
11
11
|
esphome/cpp_helpers.py,sha256=P9FVGpid75_UcKxIf-sj7GbhWGQNRcBm_2XVF3r7NtU,3998
|
|
@@ -197,7 +197,7 @@ esphome/components/api/api_server.cpp,sha256=UeLT60naPcxqmvJlMR6MClnPl1gT1cggyeO
|
|
|
197
197
|
esphome/components/api/api_server.h,sha256=fRTT9rZEIFzD3iI89Z9P7Dniw7lnuOCPk_exYqCsOoI,6513
|
|
198
198
|
esphome/components/api/client.py,sha256=47VYbSUN7SO3vjRHA4tzLw3Zwr8yhkbfLg9K7ELRDf8,2188
|
|
199
199
|
esphome/components/api/custom_api_device.h,sha256=HIOBfs2zP5lRIC9ur-Ae9zHkCa5ekV023uIa0oklpdo,7599
|
|
200
|
-
esphome/components/api/homeassistant_service.h,sha256=
|
|
200
|
+
esphome/components/api/homeassistant_service.h,sha256=DjziMNx7yMF_IbKqczm2j9tjIedLMTotPfnjdzF4ILM,3546
|
|
201
201
|
esphome/components/api/list_entities.cpp,sha256=EMysqDt2yeMDwaiorf0taqF8pXCA0QAcnvviedNbFzI,3112
|
|
202
202
|
esphome/components/api/list_entities.h,sha256=91kBP47ISJS7MQ9tg2kOmaYtLx-pPyquROzzBGkE66s,2898
|
|
203
203
|
esphome/components/api/proto.cpp,sha256=vrXe3Hd1XWjzWi6osqMICAEEKNNx6A4GAo_KHQ7hRZA,2696
|
|
@@ -884,7 +884,7 @@ esphome/components/esp32_ble_tracker/__init__.py,sha256=ccak0vxtH0cvun10HRGFJJHo
|
|
|
884
884
|
esphome/components/esp32_ble_tracker/automation.h,sha256=0pDA6EX__f14sT0KJwcnqg7UOsueKjjegHPznQj9biw,3795
|
|
885
885
|
esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp,sha256=HYiT04Lc7UUf6R8bU4dzXjukHIYXxpUENDF3pbWsyEw,33210
|
|
886
886
|
esphome/components/esp32_ble_tracker/esp32_ble_tracker.h,sha256=XBjgf-yrkXGxoaQqTeAw70A59y8Th2c-57ctmhiuH18,11028
|
|
887
|
-
esphome/components/esp32_camera/__init__.py,sha256=
|
|
887
|
+
esphome/components/esp32_camera/__init__.py,sha256=oTS6Kr0_1ErZCAUKTm-S5yUCbxOZo4UhtSDef0gNX00,14036
|
|
888
888
|
esphome/components/esp32_camera/esp32_camera.cpp,sha256=LLGw2p5RsbO-lCFBqkZsuzitMex1N3y3bEoZhnMV7k4,17110
|
|
889
889
|
esphome/components/esp32_camera/esp32_camera.h,sha256=ojiwjGpzUhYQepifWD2PyjByQklFRtQRTJrXFbZfSNM,7903
|
|
890
890
|
esphome/components/esp32_camera_web_server/__init__.py,sha256=ViM-dcI4ld95yL1a3LuOO4H-eW_1GmcN7fHDlsyu3f8,938
|
|
@@ -1044,7 +1044,7 @@ esphome/components/gp8403/output/__init__.py,sha256=3VX9AD0N0SRXdOfKJcMMgjCwA1-R
|
|
|
1044
1044
|
esphome/components/gp8403/output/gp8403_output.cpp,sha256=FQPUa_ZMgLz7LNHy6N8sNUpnI2hwOIZTRrwWtjXrbGs,714
|
|
1045
1045
|
esphome/components/gp8403/output/gp8403_output.h,sha256=wJd_-CtUSxw5ujhR21E1zCiB9hvpl3Ktt665D3iQLf4,598
|
|
1046
1046
|
esphome/components/gpio/__init__.py,sha256=afIFpPG_fsom-8vYV1yRyvhSCFyASlAdraUCuztWQZ4,103
|
|
1047
|
-
esphome/components/gpio/binary_sensor/__init__.py,sha256=
|
|
1047
|
+
esphome/components/gpio/binary_sensor/__init__.py,sha256=Q0P2-6zpxSYg3MFW1vx5SeZju27C-kOc4G5nEtE8ugg,2893
|
|
1048
1048
|
esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp,sha256=wVa5pNQMnUOO9RUovnf6G8MYQtKQoRSojA3MItHLnbg,3131
|
|
1049
1049
|
esphome/components/gpio/binary_sensor/gpio_binary_sensor.h,sha256=ukwmyxJhiYXMczcT16zwdliTX5Brf8fdgDzid6l13wE,2000
|
|
1050
1050
|
esphome/components/gpio/one_wire/__init__.py,sha256=oH6-6zy18pG_7iqzLegjh4AbjnbZHqBRZKHdHBI-828,714
|
|
@@ -1550,7 +1550,7 @@ esphome/components/lock/__init__.py,sha256=z2ykcnNNmzRbri8sqwqQmbX0WtEkBV_Tazr1R
|
|
|
1550
1550
|
esphome/components/lock/automation.h,sha256=7MU5AuJizydt7mKTr_uFsNleFI2jeBf7B_dNp3e8Fks,1771
|
|
1551
1551
|
esphome/components/lock/lock.cpp,sha256=IyEt5xShAxMpmcn_GAPFv2lRCS-kr4MjjfExxfXuK-Q,3212
|
|
1552
1552
|
esphome/components/lock/lock.h,sha256=p_t5cG-75MNGVM8zEyfKJlziSjeUiIbpYan3tlZG6W8,6042
|
|
1553
|
-
esphome/components/logger/__init__.py,sha256=
|
|
1553
|
+
esphome/components/logger/__init__.py,sha256=6nw19OHeHlqIoSGqqxgeg5FzWkbyFILQh_Il1PqUQTs,16203
|
|
1554
1554
|
esphome/components/logger/logger.cpp,sha256=aIra5ZZ5OEAPuqDgxZd3zkyAf46Jchht6mx-mcv380U,11704
|
|
1555
1555
|
esphome/components/logger/logger.h,sha256=Tkdz9qoSTiyx6Ebp9jBUnGMXyxG1iH6LTJoJfguTOaA,14460
|
|
1556
1556
|
esphome/components/logger/logger_esp32.cpp,sha256=NJddudDpsMP1fdV0mel8zXd7VNgMxqRIfarLp3uJPe0,6220
|
|
@@ -1600,7 +1600,7 @@ esphome/components/lvgl/schemas.py,sha256=fxD_8okg0EtPKHjdDl2x2buvjg0syEZPVudTk2
|
|
|
1600
1600
|
esphome/components/lvgl/styles.py,sha256=692QwPARqDICFFSkgmBVS-M1mDyOxNg2AftYgU4ZrMY,3144
|
|
1601
1601
|
esphome/components/lvgl/touchscreens.py,sha256=CntwVa1EUu6iBnxfvuv0rCYd_Njmf451CYdRqQyb9N4,1607
|
|
1602
1602
|
esphome/components/lvgl/trigger.py,sha256=brfRjSE7-LXKBttQP7pG6W5A2KPzmFiNzQzeQiyW250,3463
|
|
1603
|
-
esphome/components/lvgl/types.py,sha256=
|
|
1603
|
+
esphome/components/lvgl/types.py,sha256=M-DJvNheEj7AVZgzfdFfcReXO5rk0TIKWntAQl97LZw,6134
|
|
1604
1604
|
esphome/components/lvgl/binary_sensor/__init__.py,sha256=UaG5F3trL-S9P807PCbM2hHT4EUxAS0obSd6tlHXEoQ,1174
|
|
1605
1605
|
esphome/components/lvgl/light/__init__.py,sha256=fyfI3RNQ67fA8yKhIirLg9ZLV4wFNMNvalqwqs04rqM,1006
|
|
1606
1606
|
esphome/components/lvgl/light/lvgl_light.h,sha256=bNvnIYH7UrvVHgWxIIlP2XAfsmEVDzz2-aIA6DbR1iU,1231
|
|
@@ -1628,7 +1628,7 @@ esphome/components/lvgl/widgets/label.py,sha256=5xl1a6apdJgGKmkpL8m7RDASjaeKzjKT
|
|
|
1628
1628
|
esphome/components/lvgl/widgets/led.py,sha256=qoe_kvZpoRkwbxz25Z66KQ__KLC2tfhAukChp1jdlDc,888
|
|
1629
1629
|
esphome/components/lvgl/widgets/line.py,sha256=XwTZxoLeWb5_Bx4cRBjBxLd83DLGqFXSE8t9jNYasXk,1355
|
|
1630
1630
|
esphome/components/lvgl/widgets/lv_bar.py,sha256=FbDNEL9huqeKGiE_nqyoB6BVPOCEsQd3YgO5m07SI3M,2274
|
|
1631
|
-
esphome/components/lvgl/widgets/meter.py,sha256=
|
|
1631
|
+
esphome/components/lvgl/widgets/meter.py,sha256=PKanq-3YDwuFto25OVpgYQm61bWXMLMUo-7UPifGFOY,11680
|
|
1632
1632
|
esphome/components/lvgl/widgets/msgbox.py,sha256=i98hz6RKJRMWQ4wz9T1qOHzmdmZ6yHDvHDeJ1T9_Gt0,5335
|
|
1633
1633
|
esphome/components/lvgl/widgets/obj.py,sha256=6lKIfsdKLWIE8u_Lw0X0ChMCKcV8EZYF8WQKQEBCKYU,439
|
|
1634
1634
|
esphome/components/lvgl/widgets/page.py,sha256=W7kQ1xfJLRMdy6wFKoA6tZxUXNKGBZWrjMw9OZRfLqA,5870
|
|
@@ -2816,8 +2816,8 @@ esphome/components/speaker/__init__.py,sha256=2juDem8QadLMwzFp8Rvl-KeIbE-iIEsCtD
|
|
|
2816
2816
|
esphome/components/speaker/automation.h,sha256=tVSTV49GvHk0bCEgLz3rNYFe8B1F0kXLgE-WihuRaV8,2320
|
|
2817
2817
|
esphome/components/speaker/speaker.h,sha256=Y6EuDzsIx8GDcFeWnYXg4cXiBU-6CkmrRCaMpXQYiWo,4355
|
|
2818
2818
|
esphome/components/speaker/media_player/__init__.py,sha256=QfJfrfwYuTEWJ_P3mVACjiATFPHSfDK-eJ0YOiSgatE,15441
|
|
2819
|
-
esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=
|
|
2820
|
-
esphome/components/speaker/media_player/audio_pipeline.h,sha256=
|
|
2819
|
+
esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=YspF1nK940wWOodZVtOMW7_E-rt2DzyCfz7iQuY9rhs,22411
|
|
2820
|
+
esphome/components/speaker/media_player/audio_pipeline.h,sha256=QAQGzGUnBjx7_WaZYGIuLKtrKrs7-f3YV329h2wahQM,5029
|
|
2821
2821
|
esphome/components/speaker/media_player/automation.h,sha256=I8psUHnJ8T3fkM05h1yEYDxb0yWe6Vjz7i30OSVA3Is,683
|
|
2822
2822
|
esphome/components/speaker/media_player/speaker_media_player.cpp,sha256=M_eFKuivv__swCA8xhWd4-cfNdrY2h8Vm8VfG8DUDZ8,22610
|
|
2823
2823
|
esphome/components/speaker/media_player/speaker_media_player.h,sha256=qg7oX4bKiWWmVfiT5ZD4DdafLBGXmvXFuU5932m1nIo,5399
|
|
@@ -3371,8 +3371,8 @@ esphome/components/vl53l0x/sensor.py,sha256=qQVBjhMl_nGbzuAHY0Fz2GnG5TkNJLuyFRYm
|
|
|
3371
3371
|
esphome/components/vl53l0x/vl53l0x_sensor.cpp,sha256=mBGggbztlCSvjPDA6IY3p1uBnziXdkaMKLCLWcZL0ok,15170
|
|
3372
3372
|
esphome/components/vl53l0x/vl53l0x_sensor.h,sha256=_GZqT0tHSoYbqrHiC0_PAttk3cuHH9sy1lirQaIYfQU,2593
|
|
3373
3373
|
esphome/components/voice_assistant/__init__.py,sha256=cYEmZoI6w05kMF_ZrFHgsvKOLGO1GIT-a3aUWqepNt4,15264
|
|
3374
|
-
esphome/components/voice_assistant/voice_assistant.cpp,sha256=
|
|
3375
|
-
esphome/components/voice_assistant/voice_assistant.h,sha256=
|
|
3374
|
+
esphome/components/voice_assistant/voice_assistant.cpp,sha256=wxUOQJ91fgcRw0GuvTCHKp_DO07f6A3KJyN7zwVcGnA,33860
|
|
3375
|
+
esphome/components/voice_assistant/voice_assistant.h,sha256=dNPJHpjnu-kDlHD861cDmwxw0yYbCBOU4VM2J2opSN0,12475
|
|
3376
3376
|
esphome/components/voltage_sampler/__init__.py,sha256=IU5YrROZSNyuAP1d6M_V3ZGAwNjXCHPcVy5nMjZ953Y,155
|
|
3377
3377
|
esphome/components/voltage_sampler/voltage_sampler.h,sha256=Y67FLOpOzW29v29BRRyYgEmGZ_B8QnUUaqJMH6FA3jM,337
|
|
3378
3378
|
esphome/components/wake_on_lan/__init__.py,sha256=-RYpXD02o3dlFnKzOCYk58bUbxfD2v-wj1ECywj-cgI,50
|
|
@@ -3392,7 +3392,7 @@ esphome/components/web_server/list_entities.cpp,sha256=yQ3skDSDFnnKsEpLdkyjzySmX
|
|
|
3392
3392
|
esphome/components/web_server/list_entities.h,sha256=afeebykHFeV1rLpywOSZqaPqfL-K-MkLByfJWrkrb-M,2561
|
|
3393
3393
|
esphome/components/web_server/server_index_v2.h,sha256=cVFZzhvmwcUzN815XwYnx2L9zf5lH-MAZjolRearXdw,74968
|
|
3394
3394
|
esphome/components/web_server/server_index_v3.h,sha256=5SZfSHDG4xAyXNBxUqs8-jSVwocgfRbNbTSMwzVl1io,476640
|
|
3395
|
-
esphome/components/web_server/web_server.cpp,sha256=
|
|
3395
|
+
esphome/components/web_server/web_server.cpp,sha256=bwc2jb7b4-7mtrztGpW9SMWseuh38vHihViuUp5qsho,73613
|
|
3396
3396
|
esphome/components/web_server/web_server.h,sha256=AGCOdOaZe7Xe5nCL4rHhqWNg-uo5cc6nu84vQr4GdrQ,21558
|
|
3397
3397
|
esphome/components/web_server/web_server_v1.cpp,sha256=ZnFV1J2YAzAT2mtR-eeVgG1TSVpy953EF1yVKYdTcTg,7409
|
|
3398
3398
|
esphome/components/web_server/ota/__init__.py,sha256=w4Ufe8mN-5r0913AODCjl9LlCKMpWRTFMSCEmLgRzxE,1018
|
|
@@ -3450,7 +3450,7 @@ esphome/components/wireguard/__init__.py,sha256=EFer9fT28hNCmf4x36e1m5icdIMueynA
|
|
|
3450
3450
|
esphome/components/wireguard/binary_sensor.py,sha256=ufCoEUae0jzZoSjao1_L9zGe_fS6irjTaw5OEKJHQuE,1076
|
|
3451
3451
|
esphome/components/wireguard/sensor.py,sha256=JUHo1XEl81N5hn2BYemaToa4t7aLKqjx_J36cLUj71I,823
|
|
3452
3452
|
esphome/components/wireguard/text_sensor.py,sha256=WuCrOiKHRgljObCWDVZ2hfk7PYQUaiQ1X7E9lnoUODs,711
|
|
3453
|
-
esphome/components/wireguard/wireguard.cpp,sha256=
|
|
3453
|
+
esphome/components/wireguard/wireguard.cpp,sha256=8XahOW_eGPgY4fL1vDwcpEkfel7NB5TiZ7-AyAbrwYc,10455
|
|
3454
3454
|
esphome/components/wireguard/wireguard.h,sha256=BaaRAyqK0gP59f96D8w4gVBW43a4bMvAdYzmPTK4olc,4969
|
|
3455
3455
|
esphome/components/wk2132_i2c/__init__.py,sha256=Vd-c0QRYTqxADFhwuTPjA_wnyqD5cZcHReN9vGTA1Nc,848
|
|
3456
3456
|
esphome/components/wk2132_i2c/wk2132_i2c.cpp,sha256=u2T0Rtrasgnxxslaau20-fPA0Zo6NxysL54x3Mdqc9s,146
|
|
@@ -3597,10 +3597,10 @@ esphome/core/application.cpp,sha256=Tsl2sCS3awRjrJL5A9g2syW7s8tRwl1RtoCUhZUrQsI,
|
|
|
3597
3597
|
esphome/core/application.h,sha256=upjEdRfEZWrH27s3PFYqmORG7Kd4SlbtexipPdYKwUk,21848
|
|
3598
3598
|
esphome/core/area.h,sha256=mtFxmuv8fC2hArcey3cZ0F6hMXSO2QpFZ9Xv49z4rvk,393
|
|
3599
3599
|
esphome/core/automation.h,sha256=UgoI-ebaL5YJ_cyRB-3ijHQxzt4cTbTaWw4eRGoOwBI,8627
|
|
3600
|
-
esphome/core/base_automation.h,sha256=
|
|
3600
|
+
esphome/core/base_automation.h,sha256=C-6op63m-ghuaUy-q515XAx7iKjoxBFbQeRLmRtQGSM,11230
|
|
3601
3601
|
esphome/core/color.cpp,sha256=gcFk-FTJzvrePzqgA5gvsXv8iWct0ykdVGx_ivrilR0,254
|
|
3602
3602
|
esphome/core/color.h,sha256=K2iTTKgOgXcCm61S1f2P_k7YheKP654gUubWq5X0FhE,6647
|
|
3603
|
-
esphome/core/component.cpp,sha256=
|
|
3603
|
+
esphome/core/component.cpp,sha256=ctFoir-YMeK3WQ_Tjg9QxizA0cjSYX1UaIp9mdE01Zc,16875
|
|
3604
3604
|
esphome/core/component.h,sha256=Z1TYaQDGkoddm75zaPTQc_C0STpCCl200oDZsoc6yAk,17985
|
|
3605
3605
|
esphome/core/component_iterator.cpp,sha256=VD_bSv474jQlKctKIzYSPUK8zpm01PJ1Fymix1c92Jg,11121
|
|
3606
3606
|
esphome/core/component_iterator.h,sha256=-j9hGIY8mCmgq2nLuoG_IFY0lSoHkImXMEVtUKYpngA,3791
|
|
@@ -3614,12 +3614,12 @@ esphome/core/doxygen.h,sha256=9fAJ2T-1z96-NYnj63vQhsnKthHBrh3EqBnY0h3ZN-A,439
|
|
|
3614
3614
|
esphome/core/entity_base.cpp,sha256=4JMAGN8w3bMW-kTchQxlbA-zS43NOdYhT1Fo0Celx78,2453
|
|
3615
3615
|
esphome/core/entity_base.h,sha256=bzNEdGDbJsO0ijowJHmLMLeCN3mY1hqzWK4dF39bpik,6429
|
|
3616
3616
|
esphome/core/entity_helpers.py,sha256=03-t7OcXa8L-_634OAEU9s-opgjoIKqC9acXHoXR6lA,8169
|
|
3617
|
-
esphome/core/event_pool.h,sha256=
|
|
3617
|
+
esphome/core/event_pool.h,sha256=X8_-72rODgpG9P_dSjezkJjFaaFvXy0cV42o6X-Vv1Q,2405
|
|
3618
3618
|
esphome/core/gpio.h,sha256=kLkCnPxu4_1CsLR4BI_Baj1lDGoRIh8uubbwsIkJPIA,2575
|
|
3619
3619
|
esphome/core/hal.h,sha256=Le0-vtdDylYCaE9i4yvrv5-Y5PB5xoL3PM2FfMJsIeA,970
|
|
3620
3620
|
esphome/core/helpers.cpp,sha256=eyOYJWmMEcdX8dJ3RoIcl6MeOmc0C3cTPafZDTzQ4OM,20961
|
|
3621
3621
|
esphome/core/helpers.h,sha256=213N4rXgWCcuBB-aZDV9TW5UIYRzzGhU44YXWJz2Ys4,33961
|
|
3622
|
-
esphome/core/lock_free_queue.h,sha256=
|
|
3622
|
+
esphome/core/lock_free_queue.h,sha256=j3wSEyxqkjBDnCwEQd4ARHDubjSrLPxMAzZvqdNN2co,4953
|
|
3623
3623
|
esphome/core/log.cpp,sha256=cc6JIMRlIEk7lCQa6JFrL6bTBZ89xWNLwf26AFNzKC0,1625
|
|
3624
3624
|
esphome/core/log.h,sha256=Fb0_ORK0q-WV0i49gzb8i9_C38RUe8VILIdbu1Bel5M,6627
|
|
3625
3625
|
esphome/core/log_const_en.h,sha256=zrLwl0tQmh1pkNB1bq8lqLdJKbo7_dFmppRI7hVKAf8,133
|
|
@@ -3628,8 +3628,8 @@ esphome/core/optional.h,sha256=uKMzglliXSA5eC3ujwrADmyt8m7X4WkBQcOL6p3ET7E,7144
|
|
|
3628
3628
|
esphome/core/preferences.h,sha256=RxgWuAi-uo6SZiK8UKX4KTwVfIMnaaLvrZP2rqTn_mE,1959
|
|
3629
3629
|
esphome/core/ring_buffer.cpp,sha256=6vOoKNjO4dSLYfqJYM8AXclpKgQOH6C79CqocwTSv-k,3526
|
|
3630
3630
|
esphome/core/ring_buffer.h,sha256=4SeN2DYZLCHrLIjSPDsiAynIjwOoItiRUDO-u1wjq-o,2997
|
|
3631
|
-
esphome/core/scheduler.cpp,sha256=
|
|
3632
|
-
esphome/core/scheduler.h,sha256=
|
|
3631
|
+
esphome/core/scheduler.cpp,sha256=RsVXsvfljDcLytZ4sLQam4lLL2tNHSPrhg3LGS9YMcA,19944
|
|
3632
|
+
esphome/core/scheduler.h,sha256=BhP31NgW5qzoUdAs-jITMw-pv3OIGJk_ZVyFvqqANuU,8276
|
|
3633
3633
|
esphome/core/string_ref.cpp,sha256=of1TYMY6t3t4HjjPLSiItuPSa62AMG0lK_CU2HS1RvM,242
|
|
3634
3634
|
esphome/core/string_ref.h,sha256=Rd8HVBiUZrPA3TkPCwuAxGw91VX-e3Fky812OCNhNvA,5227
|
|
3635
3635
|
esphome/core/time.cpp,sha256=ML3sAvlSgDaUkhbPmBkUkSFhGM78j0d7cL8CHAIgfow,7667
|
|
@@ -3655,9 +3655,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
|
|
|
3655
3655
|
esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
|
|
3656
3656
|
esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
|
|
3657
3657
|
esphome/dashboard/util/text.py,sha256=wwFtORlvHjsYkqb68IT-772LHAhWxT4OtnkIcPICQB0,317
|
|
3658
|
-
esphome-2025.7.
|
|
3659
|
-
esphome-2025.7.
|
|
3660
|
-
esphome-2025.7.
|
|
3661
|
-
esphome-2025.7.
|
|
3662
|
-
esphome-2025.7.
|
|
3663
|
-
esphome-2025.7.
|
|
3658
|
+
esphome-2025.7.2.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
|
|
3659
|
+
esphome-2025.7.2.dist-info/METADATA,sha256=DPtrT8cCskiqvQyqD7C-Mb3Ahj9UEjYZciLgbs5ciuo,3705
|
|
3660
|
+
esphome-2025.7.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
3661
|
+
esphome-2025.7.2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
|
|
3662
|
+
esphome-2025.7.2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
|
|
3663
|
+
esphome-2025.7.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|