esphome 2025.3.0b5__py3-none-any.whl → 2025.3.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/cst226/touchscreen/cst226_touchscreen.cpp +2 -0
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +18 -15
- esphome/components/font/__init__.py +23 -9
- esphome/components/ft63x6/ft63x6.cpp +4 -2
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +12 -7
- esphome/components/ld2450/ld2450.cpp +3 -2
- esphome/components/lvgl/lvgl_esphome.cpp +2 -4
- esphome/components/media_player/media_player.cpp +2 -1
- esphome/components/speaker/media_player/speaker_media_player.cpp +23 -60
- esphome/components/speaker/media_player/speaker_media_player.h +2 -6
- esphome/const.py +1 -1
- {esphome-2025.3.0b5.dist-info → esphome-2025.3.2.dist-info}/METADATA +1 -1
- {esphome-2025.3.0b5.dist-info → esphome-2025.3.2.dist-info}/RECORD +17 -17
- {esphome-2025.3.0b5.dist-info → esphome-2025.3.2.dist-info}/LICENSE +0 -0
- {esphome-2025.3.0b5.dist-info → esphome-2025.3.2.dist-info}/WHEEL +0 -0
- {esphome-2025.3.0b5.dist-info → esphome-2025.3.2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.3.0b5.dist-info → esphome-2025.3.2.dist-info}/top_level.txt +0 -0
@@ -72,6 +72,8 @@ void CST226Touchscreen::continue_setup_() {
|
|
72
72
|
if (this->read16_(0xD1F8, buffer, 4)) {
|
73
73
|
this->x_raw_max_ = buffer[0] + (buffer[1] << 8);
|
74
74
|
this->y_raw_max_ = buffer[2] + (buffer[3] << 8);
|
75
|
+
if (this->swap_x_y_)
|
76
|
+
std::swap(this->x_raw_max_, this->y_raw_max_);
|
75
77
|
} else {
|
76
78
|
this->x_raw_max_ = this->display_->get_native_width();
|
77
79
|
this->y_raw_max_ = this->display_->get_native_height();
|
@@ -34,26 +34,29 @@ void EKTF2232Touchscreen::setup() {
|
|
34
34
|
|
35
35
|
// Get touch resolution
|
36
36
|
uint8_t received[4];
|
37
|
-
if (this->x_raw_max_ == this->
|
38
|
-
this->write(GET_X_RES, 4);
|
39
|
-
if (
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
if (this->x_raw_max_ == 0 || this->y_raw_max_ == 0) {
|
38
|
+
auto err = this->write(GET_X_RES, 4);
|
39
|
+
if (err == i2c::ERROR_OK) {
|
40
|
+
err = this->read(received, 4);
|
41
|
+
if (err == i2c::ERROR_OK) {
|
42
|
+
this->x_raw_max_ = ((received[2])) | ((received[3] & 0xf0) << 4);
|
43
|
+
err = this->write(GET_Y_RES, 4);
|
44
|
+
if (err == i2c::ERROR_OK) {
|
45
|
+
err = this->read(received, 4);
|
46
|
+
if (err == i2c::ERROR_OK) {
|
47
|
+
this->y_raw_max_ = ((received[2])) | ((received[3] & 0xf0) << 4);
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
44
51
|
}
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
if (this->y_raw_max_ == this->y_raw_min_) {
|
49
|
-
this->write(GET_Y_RES, 4);
|
50
|
-
if (this->read(received, 4)) {
|
51
|
-
ESP_LOGE(TAG, "Failed to read Y resolution!");
|
52
|
+
if (err != i2c::ERROR_OK) {
|
53
|
+
ESP_LOGE(TAG, "Failed to read calibration values!");
|
52
54
|
this->interrupt_pin_->detach_interrupt();
|
53
55
|
this->mark_failed();
|
54
56
|
return;
|
55
57
|
}
|
56
|
-
this->
|
58
|
+
if (this->swap_x_y_)
|
59
|
+
std::swap(this->x_raw_max_, this->y_raw_max_);
|
57
60
|
}
|
58
61
|
this->set_power_state(true);
|
59
62
|
}
|
@@ -7,7 +7,15 @@ from pathlib import Path
|
|
7
7
|
import re
|
8
8
|
|
9
9
|
import esphome_glyphsets as glyphsets
|
10
|
-
|
10
|
+
|
11
|
+
# pylint: disable=no-name-in-module
|
12
|
+
from freetype import (
|
13
|
+
FT_LOAD_NO_BITMAP,
|
14
|
+
FT_LOAD_RENDER,
|
15
|
+
FT_LOAD_TARGET_MONO,
|
16
|
+
Face,
|
17
|
+
ft_pixel_mode_mono,
|
18
|
+
)
|
11
19
|
import requests
|
12
20
|
|
13
21
|
from esphome import external_files
|
@@ -204,7 +212,7 @@ def validate_font_config(config):
|
|
204
212
|
if font.get_char_index(x) != 0
|
205
213
|
]
|
206
214
|
|
207
|
-
if font.
|
215
|
+
if not font.is_scalable:
|
208
216
|
sizes = [pt_to_px(x.size) for x in font.available_sizes]
|
209
217
|
if not sizes:
|
210
218
|
raise cv.Invalid(
|
@@ -501,17 +509,23 @@ async def to_code(config):
|
|
501
509
|
glyph_args = {}
|
502
510
|
data = []
|
503
511
|
bpp = config[CONF_BPP]
|
504
|
-
mode = ft_pixel_mode_grays
|
505
512
|
scale = 256 // (1 << bpp)
|
506
513
|
size = config[CONF_SIZE]
|
507
514
|
# create the data array for all glyphs
|
508
515
|
for codepoint in codepoints:
|
509
516
|
font = point_font_map[codepoint]
|
510
|
-
|
511
|
-
|
517
|
+
if not font.is_scalable:
|
518
|
+
sizes = [pt_to_px(x.size) for x in font.available_sizes]
|
519
|
+
if size in sizes:
|
520
|
+
font.select_size(sizes.index(size))
|
521
|
+
else:
|
512
522
|
font.set_pixel_sizes(size, 0)
|
513
|
-
|
514
|
-
|
523
|
+
flags = FT_LOAD_RENDER
|
524
|
+
if bpp != 1:
|
525
|
+
flags |= FT_LOAD_NO_BITMAP
|
526
|
+
else:
|
527
|
+
flags |= FT_LOAD_TARGET_MONO
|
528
|
+
font.load_char(codepoint, flags)
|
515
529
|
width = font.glyph.bitmap.width
|
516
530
|
height = font.glyph.bitmap.rows
|
517
531
|
buffer = font.glyph.bitmap.buffer
|
@@ -535,7 +549,7 @@ async def to_code(config):
|
|
535
549
|
pos += 1
|
536
550
|
ascender = pt_to_px(font.size.ascender)
|
537
551
|
if ascender == 0:
|
538
|
-
if font.
|
552
|
+
if not font.is_scalable:
|
539
553
|
ascender = size
|
540
554
|
else:
|
541
555
|
_LOGGER.error(
|
@@ -585,7 +599,7 @@ async def to_code(config):
|
|
585
599
|
font_height = pt_to_px(base_font.size.height)
|
586
600
|
ascender = pt_to_px(base_font.size.ascender)
|
587
601
|
if font_height == 0:
|
588
|
-
if base_font.
|
602
|
+
if not base_font.is_scalable:
|
589
603
|
font_height = size
|
590
604
|
ascender = font_height
|
591
605
|
else:
|
@@ -42,10 +42,10 @@ void FT63X6Touchscreen::setup() {
|
|
42
42
|
|
43
43
|
// Get touch resolution
|
44
44
|
if (this->x_raw_max_ == this->x_raw_min_) {
|
45
|
-
this->x_raw_max_ =
|
45
|
+
this->x_raw_max_ = this->display_->get_native_width();
|
46
46
|
}
|
47
47
|
if (this->y_raw_max_ == this->y_raw_min_) {
|
48
|
-
this->y_raw_max_ =
|
48
|
+
this->y_raw_max_ = this->display_->get_native_height();
|
49
49
|
}
|
50
50
|
uint8_t chip_id = this->read_byte_(FT63X6_ADDR_CHIP_ID);
|
51
51
|
if (chip_id != 0) {
|
@@ -71,6 +71,8 @@ void FT63X6Touchscreen::dump_config() {
|
|
71
71
|
LOG_I2C_DEVICE(this);
|
72
72
|
LOG_PIN(" Interrupt Pin: ", this->interrupt_pin_);
|
73
73
|
LOG_PIN(" Reset Pin: ", this->reset_pin_);
|
74
|
+
ESP_LOGCONFIG(TAG, " X Calibration: [%d, %d]", this->x_raw_min_, this->x_raw_max_);
|
75
|
+
ESP_LOGCONFIG(TAG, " Y Calibration: [%d, %d]", this->y_raw_min_, this->y_raw_max_);
|
74
76
|
LOG_UPDATE_INTERVAL(this);
|
75
77
|
}
|
76
78
|
|
@@ -60,20 +60,25 @@ void GT911Touchscreen::setup() {
|
|
60
60
|
}
|
61
61
|
}
|
62
62
|
}
|
63
|
-
if (
|
64
|
-
|
63
|
+
if (this->x_raw_max_ == 0 || this->y_raw_max_ == 0) {
|
64
|
+
// no calibration? Attempt to read the max values from the touchscreen.
|
65
65
|
if (err == i2c::ERROR_OK) {
|
66
|
-
err = this->
|
66
|
+
err = this->write(GET_MAX_VALUES, 2);
|
67
67
|
if (err == i2c::ERROR_OK) {
|
68
|
-
|
68
|
+
err = this->read(data, sizeof(data));
|
69
|
+
if (err == i2c::ERROR_OK) {
|
69
70
|
this->x_raw_max_ = encode_uint16(data[1], data[0]);
|
70
|
-
}
|
71
|
-
if (this->y_raw_max_ == this->y_raw_min_) {
|
72
71
|
this->y_raw_max_ = encode_uint16(data[3], data[2]);
|
72
|
+
if (this->swap_x_y_)
|
73
|
+
std::swap(this->x_raw_max_, this->y_raw_max_);
|
73
74
|
}
|
74
|
-
esph_log_d(TAG, "calibration max_x/max_y %d/%d", this->x_raw_max_, this->y_raw_max_);
|
75
75
|
}
|
76
76
|
}
|
77
|
+
if (err != i2c::ERROR_OK) {
|
78
|
+
ESP_LOGE(TAG, "Failed to read calibration values from touchscreen!");
|
79
|
+
this->mark_failed();
|
80
|
+
return;
|
81
|
+
}
|
77
82
|
}
|
78
83
|
if (err != i2c::ERROR_OK) {
|
79
84
|
ESP_LOGE(TAG, "Failed to communicate!");
|
@@ -15,6 +15,7 @@ namespace esphome {
|
|
15
15
|
namespace ld2450 {
|
16
16
|
|
17
17
|
static const char *const TAG = "ld2450";
|
18
|
+
static const char *const NO_MAC("08:05:04:03:02:01");
|
18
19
|
static const char *const UNKNOWN_MAC("unknown");
|
19
20
|
|
20
21
|
// LD2450 UART Serial Commands
|
@@ -614,12 +615,12 @@ bool LD2450Component::handle_ack_data_(uint8_t *buffer, uint8_t len) {
|
|
614
615
|
ESP_LOGV(TAG, "MAC address: %s", this->mac_.c_str());
|
615
616
|
#ifdef USE_TEXT_SENSOR
|
616
617
|
if (this->mac_text_sensor_ != nullptr) {
|
617
|
-
this->mac_text_sensor_->publish_state(this->mac_);
|
618
|
+
this->mac_text_sensor_->publish_state(this->mac_ == NO_MAC ? UNKNOWN_MAC : this->mac_);
|
618
619
|
}
|
619
620
|
#endif
|
620
621
|
#ifdef USE_SWITCH
|
621
622
|
if (this->bluetooth_switch_ != nullptr) {
|
622
|
-
this->bluetooth_switch_->publish_state(this->mac_ !=
|
623
|
+
this->bluetooth_switch_->publish_state(this->mac_ != NO_MAC);
|
623
624
|
}
|
624
625
|
#endif
|
625
626
|
break;
|
@@ -423,8 +423,6 @@ LvglComponent::LvglComponent(std::vector<display::Display *> displays, float buf
|
|
423
423
|
this->disp_drv_.full_refresh = this->full_refresh_;
|
424
424
|
this->disp_drv_.flush_cb = static_flush_cb;
|
425
425
|
this->disp_drv_.rounder_cb = rounder_cb;
|
426
|
-
this->disp_drv_.hor_res = 0;
|
427
|
-
this->disp_drv_.ver_res = 0;
|
428
426
|
this->disp_ = lv_disp_drv_register(&this->disp_drv_);
|
429
427
|
}
|
430
428
|
|
@@ -441,14 +439,14 @@ void LvglComponent::setup() {
|
|
441
439
|
this->status_set_error("Memory allocation failure");
|
442
440
|
return;
|
443
441
|
}
|
444
|
-
lv_disp_draw_buf_init(&this->draw_buf_, buffer, nullptr,
|
442
|
+
lv_disp_draw_buf_init(&this->draw_buf_, buffer, nullptr, buffer_pixels);
|
445
443
|
this->disp_drv_.hor_res = width;
|
446
444
|
this->disp_drv_.ver_res = height;
|
447
445
|
// this->setup_driver_(display->get_width(), display->get_height());
|
448
446
|
lv_disp_drv_update(this->disp_, &this->disp_drv_);
|
449
447
|
this->rotation = display->get_rotation();
|
450
448
|
if (this->rotation != display::DISPLAY_ROTATION_0_DEGREES) {
|
451
|
-
this->rotate_buf_ = static_cast<lv_color_t *>(lv_custom_mem_alloc(
|
449
|
+
this->rotate_buf_ = static_cast<lv_color_t *>(lv_custom_mem_alloc(buf_bytes)); // NOLINT
|
452
450
|
if (this->rotate_buf_ == nullptr) {
|
453
451
|
this->mark_failed();
|
454
452
|
this->status_set_error("Memory allocation failure");
|
@@ -56,7 +56,8 @@ const char *media_player_command_to_string(MediaPlayerCommand command) {
|
|
56
56
|
|
57
57
|
void MediaPlayerCall::validate_() {
|
58
58
|
if (this->media_url_.has_value()) {
|
59
|
-
if (this->command_.has_value()) {
|
59
|
+
if (this->command_.has_value() && this->command_.value() != MEDIA_PLAYER_COMMAND_ENQUEUE) {
|
60
|
+
// Don't remove an enqueue command
|
60
61
|
ESP_LOGW(TAG, "MediaPlayerCall: Setting both command and media_url is not needed.");
|
61
62
|
this->command_.reset();
|
62
63
|
}
|
@@ -138,77 +138,48 @@ void SpeakerMediaPlayer::watch_media_commands_() {
|
|
138
138
|
}
|
139
139
|
|
140
140
|
MediaCallCommand media_command;
|
141
|
-
esp_err_t err = ESP_OK;
|
142
141
|
|
143
142
|
if (xQueueReceive(this->media_control_command_queue_, &media_command, 0) == pdTRUE) {
|
144
|
-
bool
|
145
|
-
bool new_file = media_command.new_file.has_value() && media_command.new_file.value();
|
143
|
+
bool enqueue = media_command.enqueue.has_value() && media_command.enqueue.value();
|
146
144
|
|
147
|
-
if (
|
148
|
-
|
145
|
+
if (media_command.url.has_value() || media_command.file.has_value()) {
|
146
|
+
PlaylistItem playlist_item;
|
147
|
+
if (media_command.url.has_value()) {
|
148
|
+
playlist_item.url = *media_command.url.value();
|
149
|
+
delete media_command.url.value();
|
150
|
+
}
|
151
|
+
if (media_command.file.has_value()) {
|
152
|
+
playlist_item.file = media_command.file.value();
|
153
|
+
}
|
149
154
|
|
150
155
|
if (this->single_pipeline_() || (media_command.announce.has_value() && media_command.announce.value())) {
|
151
|
-
// Announcement playlist/pipeline
|
152
|
-
|
153
156
|
if (!enqueue) {
|
154
|
-
//
|
157
|
+
// Ensure the loaded next item doesn't start playing, clear the queue, start the file, and unpause
|
155
158
|
this->cancel_timeout("next_ann");
|
156
159
|
this->announcement_playlist_.clear();
|
157
|
-
|
158
|
-
|
159
|
-
PlaylistItem playlist_item;
|
160
|
-
if (new_url) {
|
161
|
-
playlist_item.url = this->announcement_url_;
|
162
|
-
if (!enqueue) {
|
163
|
-
// Not adding to the queue, so directly start playback and internally unpause the pipeline
|
164
|
-
this->announcement_pipeline_->start_url(playlist_item.url.value());
|
165
|
-
this->announcement_pipeline_->set_pause_state(false);
|
166
|
-
}
|
167
|
-
} else {
|
168
|
-
playlist_item.file = this->announcement_file_;
|
169
|
-
if (!enqueue) {
|
170
|
-
// Not adding to the queue, so directly start playback and internally unpause the pipeline
|
160
|
+
if (media_command.file.has_value()) {
|
171
161
|
this->announcement_pipeline_->start_file(playlist_item.file.value());
|
172
|
-
|
162
|
+
} else if (media_command.url.has_value()) {
|
163
|
+
this->announcement_pipeline_->start_url(playlist_item.url.value());
|
173
164
|
}
|
165
|
+
this->announcement_pipeline_->set_pause_state(false);
|
174
166
|
}
|
175
167
|
this->announcement_playlist_.push_back(playlist_item);
|
176
168
|
} else {
|
177
|
-
// Media playlist/pipeline
|
178
|
-
|
179
169
|
if (!enqueue) {
|
180
|
-
//
|
170
|
+
// Ensure the loaded next item doesn't start playing, clear the queue, start the file, and unpause
|
181
171
|
this->cancel_timeout("next_media");
|
182
172
|
this->media_playlist_.clear();
|
183
|
-
|
184
|
-
|
185
|
-
this->is_paused_ = false;
|
186
|
-
PlaylistItem playlist_item;
|
187
|
-
if (new_url) {
|
188
|
-
playlist_item.url = this->media_url_;
|
189
|
-
if (!enqueue) {
|
190
|
-
// Not adding to the queue, so directly start playback and internally unpause the pipeline
|
191
|
-
this->media_pipeline_->start_url(playlist_item.url.value());
|
192
|
-
this->media_pipeline_->set_pause_state(false);
|
193
|
-
}
|
194
|
-
} else {
|
195
|
-
playlist_item.file = this->media_file_;
|
196
|
-
if (!enqueue) {
|
197
|
-
// Not adding to the queue, so directly start playback and internally unpause the pipeline
|
173
|
+
if (media_command.file.has_value()) {
|
198
174
|
this->media_pipeline_->start_file(playlist_item.file.value());
|
199
|
-
|
175
|
+
} else if (media_command.url.has_value()) {
|
176
|
+
this->media_pipeline_->start_url(playlist_item.url.value());
|
200
177
|
}
|
178
|
+
this->media_pipeline_->set_pause_state(false);
|
201
179
|
}
|
202
180
|
this->media_playlist_.push_back(playlist_item);
|
203
181
|
}
|
204
182
|
|
205
|
-
if (err != ESP_OK) {
|
206
|
-
ESP_LOGE(TAG, "Error starting the audio pipeline: %s", esp_err_to_name(err));
|
207
|
-
this->status_set_error();
|
208
|
-
} else {
|
209
|
-
this->status_clear_error();
|
210
|
-
}
|
211
|
-
|
212
183
|
return; // Don't process the new file play command further
|
213
184
|
}
|
214
185
|
|
@@ -429,12 +400,10 @@ void SpeakerMediaPlayer::play_file(audio::AudioFile *media_file, bool announceme
|
|
429
400
|
|
430
401
|
MediaCallCommand media_command;
|
431
402
|
|
432
|
-
media_command.
|
403
|
+
media_command.file = media_file;
|
433
404
|
if (this->single_pipeline_() || announcement) {
|
434
|
-
this->announcement_file_ = media_file;
|
435
405
|
media_command.announce = true;
|
436
406
|
} else {
|
437
|
-
this->media_file_ = media_file;
|
438
407
|
media_command.announce = false;
|
439
408
|
}
|
440
409
|
media_command.enqueue = enqueue;
|
@@ -456,14 +425,8 @@ void SpeakerMediaPlayer::control(const media_player::MediaPlayerCall &call) {
|
|
456
425
|
}
|
457
426
|
|
458
427
|
if (call.get_media_url().has_value()) {
|
459
|
-
std::string
|
460
|
-
|
461
|
-
media_command.new_url = true;
|
462
|
-
if (this->single_pipeline_() || (call.get_announcement().has_value() && call.get_announcement().value())) {
|
463
|
-
this->announcement_url_ = new_uri;
|
464
|
-
} else {
|
465
|
-
this->media_url_ = new_uri;
|
466
|
-
}
|
428
|
+
media_command.url = new std::string(
|
429
|
+
call.get_media_url().value()); // Must be manually deleted after receiving media_command from a queue
|
467
430
|
|
468
431
|
if (call.get_command().has_value()) {
|
469
432
|
if (call.get_command().value() == media_player::MEDIA_PLAYER_COMMAND_ENQUEUE) {
|
@@ -24,8 +24,8 @@ struct MediaCallCommand {
|
|
24
24
|
optional<media_player::MediaPlayerCommand> command;
|
25
25
|
optional<float> volume;
|
26
26
|
optional<bool> announce;
|
27
|
-
optional<
|
28
|
-
optional<
|
27
|
+
optional<std::string *> url; // Must be manually deleted after receiving this struct from a queue
|
28
|
+
optional<audio::AudioFile *> file;
|
29
29
|
optional<bool> enqueue;
|
30
30
|
};
|
31
31
|
|
@@ -109,15 +109,11 @@ class SpeakerMediaPlayer : public Component, public media_player::MediaPlayer {
|
|
109
109
|
|
110
110
|
optional<media_player::MediaPlayerSupportedFormat> media_format_;
|
111
111
|
AudioPipelineState media_pipeline_state_{AudioPipelineState::STOPPED};
|
112
|
-
std::string media_url_{}; // only modified by control function
|
113
|
-
audio::AudioFile *media_file_{}; // only modified by play_file function
|
114
112
|
bool media_repeat_one_{false};
|
115
113
|
uint32_t media_playlist_delay_ms_{0};
|
116
114
|
|
117
115
|
optional<media_player::MediaPlayerSupportedFormat> announcement_format_;
|
118
116
|
AudioPipelineState announcement_pipeline_state_{AudioPipelineState::STOPPED};
|
119
|
-
std::string announcement_url_{}; // only modified by control function
|
120
|
-
audio::AudioFile *announcement_file_{}; // only modified by play_file function
|
121
117
|
bool announcement_repeat_one_{false};
|
122
118
|
uint32_t announcement_playlist_delay_ms_{0};
|
123
119
|
|
esphome/const.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: esphome
|
3
|
-
Version: 2025.3.
|
3
|
+
Version: 2025.3.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@nabucasa.com>
|
6
6
|
License: MIT
|
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
|
|
5
5
|
esphome/config.py,sha256=fFrDYbhWY1xn_onAl_0jwlg9D8NkK_FdKULTlnjZtxs,39832
|
6
6
|
esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
|
7
7
|
esphome/config_validation.py,sha256=9KOhLHQXmDbahg6zHynXfXDfAL2bciu35_SHxHrzZ2M,63705
|
8
|
-
esphome/const.py,sha256=
|
8
|
+
esphome/const.py,sha256=rwHb_1x4HaQyAMW_pj8GoImb98c_P3aQF2G5skP1ND8,40762
|
9
9
|
esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
|
10
10
|
esphome/cpp_generator.py,sha256=1g-y3fxWSrd5Kpbz6DrJXaQajjuwQiTIaTRIz9n7svI,31237
|
11
11
|
esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
|
@@ -568,7 +568,7 @@ esphome/components/cse7766/cse7766.h,sha256=RE_q5Sa2n8PLkQsO3C9Nt11g6PS_5XBIVD1w
|
|
568
568
|
esphome/components/cse7766/sensor.py,sha256=rHZGEUgTD8j6V9u8kTKSfRWQ67HzqIeHa9YaC5j6K70,4082
|
569
569
|
esphome/components/cst226/__init__.py,sha256=Xbt13-GS0lUNexCt3EYip3UvO15P2cdJdepZWoDqBw8,130
|
570
570
|
esphome/components/cst226/touchscreen/__init__.py,sha256=cGkF2fb0drtC0Xnz_quMC-uYSoqnXXMTzzEpjr6aP74,1215
|
571
|
-
esphome/components/cst226/touchscreen/cst226_touchscreen.cpp,sha256=
|
571
|
+
esphome/components/cst226/touchscreen/cst226_touchscreen.cpp,sha256=OsPEVSYsvG6bJmAtkS4muGEQwY31wrg7R0AxctEUohw,2874
|
572
572
|
esphome/components/cst226/touchscreen/cst226_touchscreen.h,sha256=x5q0en-w0ebNgoBznouwrZd1VD_gy9J6accuyQhMcmw,1221
|
573
573
|
esphome/components/cst816/__init__.py,sha256=7XLTtm_EM7-QP8ZfGtLQi1KBroiWOqeRMBTjTbXt-8Q,130
|
574
574
|
esphome/components/cst816/binary_sensor/__init__.py,sha256=xOKwMOe_N3twSMYNb5y2i_tUCQ7umUDA6rUrGg51NAc,190
|
@@ -732,7 +732,7 @@ esphome/components/ee895/ee895.h,sha256=PlW9Q8XFN6_V0SJxD3k-upafHEXvSLbvRb5JINp5
|
|
732
732
|
esphome/components/ee895/sensor.py,sha256=UUaWHFHVHqwubCzEJ4da-SzXezojdFc8_QQh70449w4,2172
|
733
733
|
esphome/components/ektf2232/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
734
734
|
esphome/components/ektf2232/touchscreen/__init__.py,sha256=sJg6n62UTHjwDvsFPtJe4tkNxiWqOXrdMjLj6TUufdE,1271
|
735
|
-
esphome/components/ektf2232/touchscreen/ektf2232.cpp,sha256=
|
735
|
+
esphome/components/ektf2232/touchscreen/ektf2232.cpp,sha256=F7uBZmlEn8T3nfkJ96GOVbvP923PmigyvJC_vS1UOIY,3640
|
736
736
|
esphome/components/ektf2232/touchscreen/ektf2232.h,sha256=7Lr7YYdTWZOUUfMdg1nVw2JVjvhVhn2XvZKbMc1GFlY,827
|
737
737
|
esphome/components/emc2101/__init__.py,sha256=2kE5cXQkG9tkU87DFLKxB0cX5WUqdAvZWzZnJaZ9RjQ,2808
|
738
738
|
esphome/components/emc2101/emc2101.cpp,sha256=SdeT5uVNWEQ77lHbtH0KOyckCr1PfHB67Q6zQXqzJRg,6921
|
@@ -952,7 +952,7 @@ esphome/components/fingerprint_grow/binary_sensor.py,sha256=NeVcqVCpmjGdnfimIIWS
|
|
952
952
|
esphome/components/fingerprint_grow/fingerprint_grow.cpp,sha256=xtHEpnp1Ei_5s5SS5Vfxt8vG_PoPMmeUjbOQHWrn5G0,18675
|
953
953
|
esphome/components/fingerprint_grow/fingerprint_grow.h,sha256=UEkLR4Cqas_XYlTLAwscXCAMRoprWeQZEZ_3vTsI-BM,11206
|
954
954
|
esphome/components/fingerprint_grow/sensor.py,sha256=eazvZvdtt1Rl8o3Aw6eYKn-kb2sNDfZKHegxpFFdQeg,2244
|
955
|
-
esphome/components/font/__init__.py,sha256=
|
955
|
+
esphome/components/font/__init__.py,sha256=dfieu9eop8dl0oGvc19EMQVq6qH8HiyA4FrlFOnUMFY,19199
|
956
956
|
esphome/components/font/font.cpp,sha256=dxZID-p7toxsAe3JZIc6syEdleARl-H3IRWoUIFGUOY,5361
|
957
957
|
esphome/components/font/font.h,sha256=lBUD-bX8qK0Us0tVjq9i38EJVG6p9w4npKnW1L_ILx0,2024
|
958
958
|
esphome/components/fs3000/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -964,7 +964,7 @@ esphome/components/ft5x06/touchscreen/__init__.py,sha256=AmmuZTCHzhibpvwG0NLZN-i
|
|
964
964
|
esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp,sha256=a9wlKitnVOj1XqU-CGQkpbsgtRTXpBAnuMkqjmOBuA4,3021
|
965
965
|
esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h,sha256=Zt6J5AwmFm26bZQT0vM4cI_1QFC8saZi8hq_JxfAFvc,1344
|
966
966
|
esphome/components/ft63x6/__init__.py,sha256=AZTVj3nuR8bEezWlL7fHudnq11QeX_4gfbhFCcdCGxc,29
|
967
|
-
esphome/components/ft63x6/ft63x6.cpp,sha256=
|
967
|
+
esphome/components/ft63x6/ft63x6.cpp,sha256=5oUdMMmg3lN0q7oUKmodYDIOwSmCMUWBAipuqPsvN_4,4896
|
968
968
|
esphome/components/ft63x6/ft63x6.h,sha256=7OeQW8-Qa3LzA3ewowTHjhQpsGoy_OlQK-O6jD0euWU,1469
|
969
969
|
esphome/components/ft63x6/touchscreen.py,sha256=F0CIxxL4Hvfc9RQGm6dlBO8etW0_T0a7cmqWUa6qwik,1450
|
970
970
|
esphome/components/fujitsu_general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1039,7 +1039,7 @@ esphome/components/gt911/binary_sensor/__init__.py,sha256=fx8W9VhBGssxRD21iTQGva
|
|
1039
1039
|
esphome/components/gt911/binary_sensor/gt911_button.cpp,sha256=KACuxHcVbk3TZdSPy-8kO4j0LZZZmdAy4VWMicnaoLY,586
|
1040
1040
|
esphome/components/gt911/binary_sensor/gt911_button.h,sha256=3QCm3g8Ca9VtsKKjWgc_Bre4Dc3RhXgaLt1Mq3iEKd8,714
|
1041
1041
|
esphome/components/gt911/touchscreen/__init__.py,sha256=Hx69_ljCE1F-dP5BzEoQ7vIcOTy9_AsnDBb9FH3pCpU,1155
|
1042
|
-
esphome/components/gt911/touchscreen/gt911_touchscreen.cpp,sha256=
|
1042
|
+
esphome/components/gt911/touchscreen/gt911_touchscreen.cpp,sha256=pxFm2WgskgUy2hK13nAXqp72GpvjH9dbVk-LqYS_ggs,4684
|
1043
1043
|
esphome/components/gt911/touchscreen/gt911_touchscreen.h,sha256=q-ZvP6OEGk8TU9eNfWI5-Bj5lVz-DXkxEGEiSzYr2L0,1026
|
1044
1044
|
esphome/components/haier/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1045
1045
|
esphome/components/haier/automation.h,sha256=xHnMbqHWFwtibKxgqLraPeNlKLWv2_AT7VX0aMVYtr8,3688
|
@@ -1396,7 +1396,7 @@ esphome/components/ld2420/text_sensor/text_sensor.cpp,sha256=T8Hlo3rGbyEpKMlFHTf
|
|
1396
1396
|
esphome/components/ld2420/text_sensor/text_sensor.h,sha256=aK91ri0NvHth3ya0zN1OeX81v1nqveoiJcOfqCpaAJI,672
|
1397
1397
|
esphome/components/ld2450/__init__.py,sha256=5QeRhMvHdL4UVu4Qv80Ly78UOXU28kzWEAPxPKpNVNQ,1280
|
1398
1398
|
esphome/components/ld2450/binary_sensor.py,sha256=SyIw9c-4JqNm8JKuzSKA9rVWaVCGsYAslV0VbhqJnoM,1755
|
1399
|
-
esphome/components/ld2450/ld2450.cpp,sha256=
|
1399
|
+
esphome/components/ld2450/ld2450.cpp,sha256=WMUKdVmBpT6f4RhJTo8Ep0oA4MnwlYfSEYsTbx4MLtc,30079
|
1400
1400
|
esphome/components/ld2450/ld2450.h,sha256=7mTGWij9R__PpeonHR7TbxZkvJVdmIiaAoU7jB5fR2U,7984
|
1401
1401
|
esphome/components/ld2450/sensor.py,sha256=bEowM_OzazFp3kSAnyGtw0W8AsX2K5znbCYU4DObqNQ,6570
|
1402
1402
|
esphome/components/ld2450/text_sensor.py,sha256=msgqwIFvkSrewI7MP_KPKMWdMOEpPFOj0hhsfudUfho,2009
|
@@ -1524,7 +1524,7 @@ esphome/components/lvgl/helpers.py,sha256=XI3C5IHwoSVlgR32kMxeXTZWK6iW112nmWv5wB
|
|
1524
1524
|
esphome/components/lvgl/keypads.py,sha256=jtQjAG4vbTzI5Pr1IBfrEEPzV_0k4wkKfCMfsef6VT4,2124
|
1525
1525
|
esphome/components/lvgl/lv_validation.py,sha256=IynpHUX1ynyEeylQqEDFMaBM6efeSna0Kqd_XCUgebs,13716
|
1526
1526
|
esphome/components/lvgl/lvcode.py,sha256=IkvCq59dR0RYJ-wKeO95zJEX-vNBWUkHEX5tJJfvv-Q,10018
|
1527
|
-
esphome/components/lvgl/lvgl_esphome.cpp,sha256=
|
1527
|
+
esphome/components/lvgl/lvgl_esphome.cpp,sha256=ZxJ-bm7wTxIbNST4uPLlhvGysfqOVqKyg1AOJzQe0aE,19253
|
1528
1528
|
esphome/components/lvgl/lvgl_esphome.h,sha256=0jUIbdD4b5dLP_fd6fl5GWcsPI_p3ulvIVkAS5Hh24A,13270
|
1529
1529
|
esphome/components/lvgl/lvgl_hal.h,sha256=aZqWpSmKKAB-ZfNxxgxjgASTtLpAZjXJKuoTiPB0qqU,431
|
1530
1530
|
esphome/components/lvgl/lvgl_proxy.h,sha256=JPmVBVh5zD5nraJCN7PqXVmQQlc4CPJe_X9tA6IAtXQ,547
|
@@ -1710,7 +1710,7 @@ esphome/components/mdns/mdns_libretiny.cpp,sha256=j3uX11MTYYO1WEN6X-UyuqMt9i6Fz0
|
|
1710
1710
|
esphome/components/mdns/mdns_rp2040.cpp,sha256=AzSFWtVJtq2dA9wJIFkvZvk8r_7oYbdFVtGVRxNBSgg,1306
|
1711
1711
|
esphome/components/media_player/__init__.py,sha256=5JO0c-8j-kOBXCOaN-FiYlQh0vw9DHEnTuj_muZAalc,8337
|
1712
1712
|
esphome/components/media_player/automation.h,sha256=1aQDiCcXCfbwi2WrU8WyaPnW9MfR95-f9MhFNBhQ3kI,3685
|
1713
|
-
esphome/components/media_player/media_player.cpp,sha256=
|
1713
|
+
esphome/components/media_player/media_player.cpp,sha256=VIaMoEUzX7Z95Ng8iCfBWEG3_2469WETuhokRRF2KP4,4453
|
1714
1714
|
esphome/components/media_player/media_player.h,sha256=dXDuZ2apylAj78YccKfoJzX_qscoUN-5KYGKYxiwYv4,3252
|
1715
1715
|
esphome/components/mhz19/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1716
1716
|
esphome/components/mhz19/mhz19.cpp,sha256=CBBVBMqGUsrc-4PMOaBDuKCAFNr43Kukt3a018kQI0k,3924
|
@@ -2690,8 +2690,8 @@ esphome/components/speaker/media_player/__init__.py,sha256=-bV3Fps2AGFUEW8C35py8
|
|
2690
2690
|
esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=CxWJFkt3IUb4o1w6ajh2rnINUqUSOK6RigEeFEGkMus,22365
|
2691
2691
|
esphome/components/speaker/media_player/audio_pipeline.h,sha256=MYt7_kp4IJDSTnXWqLaXIkbbNkGx6F_imSryFo2UUkc,5000
|
2692
2692
|
esphome/components/speaker/media_player/automation.h,sha256=I8psUHnJ8T3fkM05h1yEYDxb0yWe6Vjz7i30OSVA3Is,683
|
2693
|
-
esphome/components/speaker/media_player/speaker_media_player.cpp,sha256=
|
2694
|
-
esphome/components/speaker/media_player/speaker_media_player.h,sha256=
|
2693
|
+
esphome/components/speaker/media_player/speaker_media_player.cpp,sha256=CGytXDR9vWYAcm8Gta-qAfZibGgAa2kLNr6p_419Cpk,21569
|
2694
|
+
esphome/components/speaker/media_player/speaker_media_player.h,sha256=wteJb_rXEK2LUTdehGsAMldDl0KLWpP8aySHsPYIIDc,5533
|
2695
2695
|
esphome/components/speed/__init__.py,sha256=Bfyz1MHHvLHj93TfN53E2uhKXKLYtp0k4st6Xb3760o,74
|
2696
2696
|
esphome/components/speed/fan/__init__.py,sha256=zhurjCYLG9V-soV-LF4mEGxqyrcQuQ_KLdFq0LpyAKA,1798
|
2697
2697
|
esphome/components/speed/fan/speed_fan.cpp,sha256=vjrhZZ4Rto6uEmw8396tF9QrAXZvZSKKiIC-_T2LtYc,1472
|
@@ -3474,9 +3474,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
|
|
3474
3474
|
esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
|
3475
3475
|
esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
|
3476
3476
|
esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
|
3477
|
-
esphome-2025.3.
|
3478
|
-
esphome-2025.3.
|
3479
|
-
esphome-2025.3.
|
3480
|
-
esphome-2025.3.
|
3481
|
-
esphome-2025.3.
|
3482
|
-
esphome-2025.3.
|
3477
|
+
esphome-2025.3.2.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
|
3478
|
+
esphome-2025.3.2.dist-info/METADATA,sha256=v8Q7uCTovNLcVG6epNDDfKd7kGnQCibWu-8HZV0-w98,3689
|
3479
|
+
esphome-2025.3.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
3480
|
+
esphome-2025.3.2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
|
3481
|
+
esphome-2025.3.2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
|
3482
|
+
esphome-2025.3.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|