esphome 2025.9.0b4__py3-none-any.whl → 2025.9.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/__main__.py +1 -1
- esphome/components/captive_portal/__init__.py +3 -2
- esphome/components/esp32_improv/esp32_improv_component.cpp +61 -18
- esphome/components/esp32_improv/esp32_improv_component.h +9 -6
- esphome/components/esphome/ota/__init__.py +3 -2
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +2 -0
- esphome/components/heatpumpir/climate.py +1 -1
- esphome/components/http_request/ota/__init__.py +3 -2
- esphome/components/mdns/__init__.py +3 -2
- esphome/components/mipi/__init__.py +9 -1
- esphome/components/mipi_rgb/models/waveshare.py +1 -0
- esphome/components/mipi_spi/models/amoled.py +3 -1
- esphome/components/ota/__init__.py +3 -2
- esphome/components/packet_transport/__init__.py +3 -6
- esphome/components/sx126x/sx126x.cpp +6 -3
- esphome/components/usb_uart/ch34x.cpp +1 -0
- esphome/components/web_server/ota/__init__.py +3 -2
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/const.py +1 -1
- esphome/core/config.py +1 -1
- esphome/coroutine.py +21 -2
- {esphome-2025.9.0b4.dist-info → esphome-2025.9.2.dist-info}/METADATA +1 -1
- {esphome-2025.9.0b4.dist-info → esphome-2025.9.2.dist-info}/RECORD +27 -27
- {esphome-2025.9.0b4.dist-info → esphome-2025.9.2.dist-info}/WHEEL +0 -0
- {esphome-2025.9.0b4.dist-info → esphome-2025.9.2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.9.0b4.dist-info → esphome-2025.9.2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.9.0b4.dist-info → esphome-2025.9.2.dist-info}/top_level.txt +0 -0
esphome/__main__.py
CHANGED
@@ -10,7 +10,8 @@ from esphome.const import (
|
|
10
10
|
PLATFORM_LN882X,
|
11
11
|
PLATFORM_RTL87XX,
|
12
12
|
)
|
13
|
-
from esphome.core import CORE,
|
13
|
+
from esphome.core import CORE, coroutine_with_priority
|
14
|
+
from esphome.coroutine import CoroPriority
|
14
15
|
|
15
16
|
AUTO_LOAD = ["web_server_base", "ota.web_server"]
|
16
17
|
DEPENDENCIES = ["wifi"]
|
@@ -40,7 +41,7 @@ CONFIG_SCHEMA = cv.All(
|
|
40
41
|
)
|
41
42
|
|
42
43
|
|
43
|
-
@coroutine_with_priority(CoroPriority.
|
44
|
+
@coroutine_with_priority(CoroPriority.CAPTIVE_PORTAL)
|
44
45
|
async def to_code(config):
|
45
46
|
paren = await cg.get_variable(config[CONF_WEB_SERVER_BASE_ID])
|
46
47
|
|
@@ -15,6 +15,8 @@ using namespace bytebuffer;
|
|
15
15
|
|
16
16
|
static const char *const TAG = "esp32_improv.component";
|
17
17
|
static const char *const ESPHOME_MY_LINK = "https://my.home-assistant.io/redirect/config_flow_start?domain=esphome";
|
18
|
+
static constexpr uint16_t STOP_ADVERTISING_DELAY =
|
19
|
+
10000; // Delay (ms) before stopping service to allow BLE clients to read the final state
|
18
20
|
|
19
21
|
ESP32ImprovComponent::ESP32ImprovComponent() { global_improv_component = this; }
|
20
22
|
|
@@ -31,6 +33,9 @@ void ESP32ImprovComponent::setup() {
|
|
31
33
|
#endif
|
32
34
|
global_ble_server->on(BLEServerEvt::EmptyEvt::ON_DISCONNECT,
|
33
35
|
[this](uint16_t conn_id) { this->set_error_(improv::ERROR_NONE); });
|
36
|
+
|
37
|
+
// Start with loop disabled - will be enabled by start() when needed
|
38
|
+
this->disable_loop();
|
34
39
|
}
|
35
40
|
|
36
41
|
void ESP32ImprovComponent::setup_characteristics() {
|
@@ -190,6 +195,25 @@ void ESP32ImprovComponent::set_status_indicator_state_(bool state) {
|
|
190
195
|
#endif
|
191
196
|
}
|
192
197
|
|
198
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
|
199
|
+
const char *ESP32ImprovComponent::state_to_string_(improv::State state) {
|
200
|
+
switch (state) {
|
201
|
+
case improv::STATE_STOPPED:
|
202
|
+
return "STOPPED";
|
203
|
+
case improv::STATE_AWAITING_AUTHORIZATION:
|
204
|
+
return "AWAITING_AUTHORIZATION";
|
205
|
+
case improv::STATE_AUTHORIZED:
|
206
|
+
return "AUTHORIZED";
|
207
|
+
case improv::STATE_PROVISIONING:
|
208
|
+
return "PROVISIONING";
|
209
|
+
case improv::STATE_PROVISIONED:
|
210
|
+
return "PROVISIONED";
|
211
|
+
default:
|
212
|
+
return "UNKNOWN";
|
213
|
+
}
|
214
|
+
}
|
215
|
+
#endif
|
216
|
+
|
193
217
|
bool ESP32ImprovComponent::check_identify_() {
|
194
218
|
uint32_t now = millis();
|
195
219
|
|
@@ -203,31 +227,42 @@ bool ESP32ImprovComponent::check_identify_() {
|
|
203
227
|
}
|
204
228
|
|
205
229
|
void ESP32ImprovComponent::set_state_(improv::State state) {
|
206
|
-
|
230
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
|
231
|
+
if (this->state_ != state) {
|
232
|
+
ESP_LOGD(TAG, "State transition: %s (0x%02X) -> %s (0x%02X)", this->state_to_string_(this->state_), this->state_,
|
233
|
+
this->state_to_string_(state), state);
|
234
|
+
}
|
235
|
+
#endif
|
207
236
|
this->state_ = state;
|
208
|
-
if (this->status_->get_value().empty() || this->status_->get_value()[0] != state) {
|
237
|
+
if (this->status_ != nullptr && (this->status_->get_value().empty() || this->status_->get_value()[0] != state)) {
|
209
238
|
this->status_->set_value(ByteBuffer::wrap(static_cast<uint8_t>(state)));
|
210
239
|
if (state != improv::STATE_STOPPED)
|
211
240
|
this->status_->notify();
|
212
241
|
}
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
242
|
+
// Only advertise valid Improv states (0x01-0x04).
|
243
|
+
// STATE_STOPPED (0x00) is internal only and not part of the Improv spec.
|
244
|
+
// Advertising 0x00 causes undefined behavior in some clients and makes them
|
245
|
+
// repeatedly connect trying to determine the actual state.
|
246
|
+
if (state != improv::STATE_STOPPED) {
|
247
|
+
std::vector<uint8_t> service_data(8, 0);
|
248
|
+
service_data[0] = 0x77; // PR
|
249
|
+
service_data[1] = 0x46; // IM
|
250
|
+
service_data[2] = static_cast<uint8_t>(state);
|
251
|
+
|
252
|
+
uint8_t capabilities = 0x00;
|
219
253
|
#ifdef USE_OUTPUT
|
220
|
-
|
221
|
-
|
254
|
+
if (this->status_indicator_ != nullptr)
|
255
|
+
capabilities |= improv::CAPABILITY_IDENTIFY;
|
222
256
|
#endif
|
223
257
|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
258
|
+
service_data[3] = capabilities;
|
259
|
+
service_data[4] = 0x00; // Reserved
|
260
|
+
service_data[5] = 0x00; // Reserved
|
261
|
+
service_data[6] = 0x00; // Reserved
|
262
|
+
service_data[7] = 0x00; // Reserved
|
229
263
|
|
230
|
-
|
264
|
+
esp32_ble::global_ble->advertising_set_service_data(service_data);
|
265
|
+
}
|
231
266
|
#ifdef USE_ESP32_IMPROV_STATE_CALLBACK
|
232
267
|
this->state_callback_.call(this->state_, this->error_state_);
|
233
268
|
#endif
|
@@ -237,7 +272,12 @@ void ESP32ImprovComponent::set_error_(improv::Error error) {
|
|
237
272
|
if (error != improv::ERROR_NONE) {
|
238
273
|
ESP_LOGE(TAG, "Error: %d", error);
|
239
274
|
}
|
240
|
-
|
275
|
+
// The error_ characteristic is initialized in setup_characteristics() which is called
|
276
|
+
// from the loop, while the BLE disconnect callback is registered in setup().
|
277
|
+
// error_ can be nullptr if:
|
278
|
+
// 1. A client connects/disconnects before setup_characteristics() is called
|
279
|
+
// 2. The device is already provisioned so the service never starts (should_start_ is false)
|
280
|
+
if (this->error_ != nullptr && (this->error_->get_value().empty() || this->error_->get_value()[0] != error)) {
|
241
281
|
this->error_->set_value(ByteBuffer::wrap(static_cast<uint8_t>(error)));
|
242
282
|
if (this->state_ != improv::STATE_STOPPED)
|
243
283
|
this->error_->notify();
|
@@ -261,7 +301,10 @@ void ESP32ImprovComponent::start() {
|
|
261
301
|
|
262
302
|
void ESP32ImprovComponent::stop() {
|
263
303
|
this->should_start_ = false;
|
264
|
-
|
304
|
+
// Wait before stopping the service to ensure all BLE clients see the state change.
|
305
|
+
// This prevents clients from repeatedly reconnecting and wasting resources by allowing
|
306
|
+
// them to observe that the device is provisioned before the service disappears.
|
307
|
+
this->set_timeout("end-service", STOP_ADVERTISING_DELAY, [this] {
|
265
308
|
if (this->state_ == improv::STATE_STOPPED || this->service_ == nullptr)
|
266
309
|
return;
|
267
310
|
this->service_->stop();
|
@@ -79,12 +79,12 @@ class ESP32ImprovComponent : public Component {
|
|
79
79
|
std::vector<uint8_t> incoming_data_;
|
80
80
|
wifi::WiFiAP connecting_sta_;
|
81
81
|
|
82
|
-
BLEService *service_
|
83
|
-
BLECharacteristic *status_;
|
84
|
-
BLECharacteristic *error_;
|
85
|
-
BLECharacteristic *rpc_;
|
86
|
-
BLECharacteristic *rpc_response_;
|
87
|
-
BLECharacteristic *capabilities_;
|
82
|
+
BLEService *service_{nullptr};
|
83
|
+
BLECharacteristic *status_{nullptr};
|
84
|
+
BLECharacteristic *error_{nullptr};
|
85
|
+
BLECharacteristic *rpc_{nullptr};
|
86
|
+
BLECharacteristic *rpc_response_{nullptr};
|
87
|
+
BLECharacteristic *capabilities_{nullptr};
|
88
88
|
|
89
89
|
#ifdef USE_BINARY_SENSOR
|
90
90
|
binary_sensor::BinarySensor *authorizer_{nullptr};
|
@@ -108,6 +108,9 @@ class ESP32ImprovComponent : public Component {
|
|
108
108
|
void process_incoming_data_();
|
109
109
|
void on_wifi_connect_timeout_();
|
110
110
|
bool check_identify_();
|
111
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
|
112
|
+
const char *state_to_string_(improv::State state);
|
113
|
+
#endif
|
111
114
|
};
|
112
115
|
|
113
116
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
@@ -16,7 +16,8 @@ from esphome.const import (
|
|
16
16
|
CONF_SAFE_MODE,
|
17
17
|
CONF_VERSION,
|
18
18
|
)
|
19
|
-
from esphome.core import
|
19
|
+
from esphome.core import coroutine_with_priority
|
20
|
+
from esphome.coroutine import CoroPriority
|
20
21
|
import esphome.final_validate as fv
|
21
22
|
|
22
23
|
_LOGGER = logging.getLogger(__name__)
|
@@ -121,7 +122,7 @@ CONFIG_SCHEMA = (
|
|
121
122
|
FINAL_VALIDATE_SCHEMA = ota_esphome_final_validate
|
122
123
|
|
123
124
|
|
124
|
-
@coroutine_with_priority(CoroPriority.
|
125
|
+
@coroutine_with_priority(CoroPriority.OTA_UPDATES)
|
125
126
|
async def to_code(config):
|
126
127
|
var = cg.new_Pvariable(config[CONF_ID])
|
127
128
|
cg.add(var.set_port(config[CONF_PORT]))
|
@@ -6,6 +6,7 @@ namespace gpio {
|
|
6
6
|
|
7
7
|
static const char *const TAG = "gpio.binary_sensor";
|
8
8
|
|
9
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
|
9
10
|
static const LogString *interrupt_type_to_string(gpio::InterruptType type) {
|
10
11
|
switch (type) {
|
11
12
|
case gpio::INTERRUPT_RISING_EDGE:
|
@@ -22,6 +23,7 @@ static const LogString *interrupt_type_to_string(gpio::InterruptType type) {
|
|
22
23
|
static const LogString *gpio_mode_to_string(bool use_interrupt) {
|
23
24
|
return use_interrupt ? LOG_STR("interrupt") : LOG_STR("polling");
|
24
25
|
}
|
26
|
+
#endif
|
25
27
|
|
26
28
|
void IRAM_ATTR GPIOBinarySensorStore::gpio_intr(GPIOBinarySensorStore *arg) {
|
27
29
|
bool new_state = arg->isr_pin_.digital_read();
|
@@ -3,7 +3,8 @@ import esphome.codegen as cg
|
|
3
3
|
from esphome.components.ota import BASE_OTA_SCHEMA, OTAComponent, ota_to_code
|
4
4
|
import esphome.config_validation as cv
|
5
5
|
from esphome.const import CONF_ID, CONF_PASSWORD, CONF_URL, CONF_USERNAME
|
6
|
-
from esphome.core import
|
6
|
+
from esphome.core import coroutine_with_priority
|
7
|
+
from esphome.coroutine import CoroPriority
|
7
8
|
|
8
9
|
from .. import CONF_HTTP_REQUEST_ID, HttpRequestComponent, http_request_ns
|
9
10
|
|
@@ -40,7 +41,7 @@ CONFIG_SCHEMA = cv.All(
|
|
40
41
|
)
|
41
42
|
|
42
43
|
|
43
|
-
@coroutine_with_priority(CoroPriority.
|
44
|
+
@coroutine_with_priority(CoroPriority.OTA_UPDATES)
|
44
45
|
async def to_code(config):
|
45
46
|
var = cg.new_Pvariable(config[CONF_ID])
|
46
47
|
await ota_to_code(var, config)
|
@@ -11,7 +11,8 @@ from esphome.const import (
|
|
11
11
|
CONF_SERVICES,
|
12
12
|
PlatformFramework,
|
13
13
|
)
|
14
|
-
from esphome.core import CORE,
|
14
|
+
from esphome.core import CORE, coroutine_with_priority
|
15
|
+
from esphome.coroutine import CoroPriority
|
15
16
|
|
16
17
|
CODEOWNERS = ["@esphome/core"]
|
17
18
|
DEPENDENCIES = ["network"]
|
@@ -72,7 +73,7 @@ def mdns_service(
|
|
72
73
|
)
|
73
74
|
|
74
75
|
|
75
|
-
@coroutine_with_priority(CoroPriority.
|
76
|
+
@coroutine_with_priority(CoroPriority.NETWORK_SERVICES)
|
76
77
|
async def to_code(config):
|
77
78
|
if config[CONF_DISABLED] is True:
|
78
79
|
return
|
@@ -401,6 +401,12 @@ class DriverChip:
|
|
401
401
|
sequence.append((MADCTL, madctl))
|
402
402
|
return madctl
|
403
403
|
|
404
|
+
def skip_command(self, command: str):
|
405
|
+
"""
|
406
|
+
Allow suppressing a standard command in the init sequence.
|
407
|
+
"""
|
408
|
+
return self.get_default(f"no_{command.lower()}", False)
|
409
|
+
|
404
410
|
def get_sequence(self, config) -> tuple[tuple[int, ...], int]:
|
405
411
|
"""
|
406
412
|
Create the init sequence for the display.
|
@@ -432,7 +438,9 @@ class DriverChip:
|
|
432
438
|
sequence.append((INVOFF,))
|
433
439
|
if brightness := config.get(CONF_BRIGHTNESS, self.get_default(CONF_BRIGHTNESS)):
|
434
440
|
sequence.append((BRIGHTNESS, brightness))
|
435
|
-
|
441
|
+
# Add a SLPOUT command if required.
|
442
|
+
if not self.skip_command("SLPOUT"):
|
443
|
+
sequence.append((SLPOUT,))
|
436
444
|
sequence.append((DISPON,))
|
437
445
|
|
438
446
|
# Flatten the sequence into a list of bytes, with the length of each command
|
@@ -27,7 +27,8 @@ DriverChip(
|
|
27
27
|
bus_mode=TYPE_QUAD,
|
28
28
|
brightness=0xD0,
|
29
29
|
color_order=MODE_RGB,
|
30
|
-
|
30
|
+
no_slpout=True, # SLPOUT is in the init sequence, early
|
31
|
+
initsequence=(SLPOUT,),
|
31
32
|
)
|
32
33
|
|
33
34
|
DriverChip(
|
@@ -95,6 +96,7 @@ CO5300 = DriverChip(
|
|
95
96
|
brightness=0xD0,
|
96
97
|
color_order=MODE_RGB,
|
97
98
|
bus_mode=TYPE_QUAD,
|
99
|
+
no_slpout=True,
|
98
100
|
initsequence=(
|
99
101
|
(SLPOUT,), # Requires early SLPOUT
|
100
102
|
(PAGESEL, 0x00),
|
@@ -10,7 +10,8 @@ from esphome.const import (
|
|
10
10
|
CONF_TRIGGER_ID,
|
11
11
|
PlatformFramework,
|
12
12
|
)
|
13
|
-
from esphome.core import CORE,
|
13
|
+
from esphome.core import CORE, coroutine_with_priority
|
14
|
+
from esphome.coroutine import CoroPriority
|
14
15
|
|
15
16
|
CODEOWNERS = ["@esphome/core"]
|
16
17
|
AUTO_LOAD = ["md5", "safe_mode"]
|
@@ -82,7 +83,7 @@ BASE_OTA_SCHEMA = cv.Schema(
|
|
82
83
|
)
|
83
84
|
|
84
85
|
|
85
|
-
@coroutine_with_priority(CoroPriority.
|
86
|
+
@coroutine_with_priority(CoroPriority.OTA_UPDATES)
|
86
87
|
async def to_code(config):
|
87
88
|
cg.add_define("USE_OTA")
|
88
89
|
|
@@ -121,15 +121,11 @@ def transport_schema(cls):
|
|
121
121
|
return TRANSPORT_SCHEMA.extend({cv.GenerateID(): cv.declare_id(cls)})
|
122
122
|
|
123
123
|
|
124
|
-
# Build a list of sensors for this platform
|
125
|
-
CORE.data[DOMAIN] = {CONF_SENSORS: []}
|
126
|
-
|
127
|
-
|
128
124
|
def get_sensors(transport_id):
|
129
125
|
"""Return the list of sensors for this platform."""
|
130
126
|
return (
|
131
127
|
sensor
|
132
|
-
for sensor in CORE.data
|
128
|
+
for sensor in CORE.data.setdefault(DOMAIN, {}).setdefault(CONF_SENSORS, [])
|
133
129
|
if sensor[CONF_TRANSPORT_ID] == transport_id
|
134
130
|
)
|
135
131
|
|
@@ -137,7 +133,8 @@ def get_sensors(transport_id):
|
|
137
133
|
def validate_packet_transport_sensor(config):
|
138
134
|
if CONF_NAME in config and CONF_INTERNAL not in config:
|
139
135
|
raise cv.Invalid("Must provide internal: config when using name:")
|
140
|
-
CORE.data
|
136
|
+
conf_sensors = CORE.data.setdefault(DOMAIN, {}).setdefault(CONF_SENSORS, [])
|
137
|
+
conf_sensors.append(config)
|
141
138
|
return config
|
142
139
|
|
143
140
|
|
@@ -217,7 +217,7 @@ void SX126x::configure() {
|
|
217
217
|
this->write_opcode_(RADIO_SET_MODULATIONPARAMS, buf, 4);
|
218
218
|
|
219
219
|
// set packet params and sync word
|
220
|
-
this->set_packet_params_(this->
|
220
|
+
this->set_packet_params_(this->get_max_packet_size());
|
221
221
|
if (this->sync_value_.size() == 2) {
|
222
222
|
this->write_register_(REG_LORA_SYNCWORD, this->sync_value_.data(), this->sync_value_.size());
|
223
223
|
}
|
@@ -236,7 +236,7 @@ void SX126x::configure() {
|
|
236
236
|
this->write_opcode_(RADIO_SET_MODULATIONPARAMS, buf, 8);
|
237
237
|
|
238
238
|
// set packet params and sync word
|
239
|
-
this->set_packet_params_(this->
|
239
|
+
this->set_packet_params_(this->get_max_packet_size());
|
240
240
|
if (!this->sync_value_.empty()) {
|
241
241
|
this->write_register_(REG_GFSK_SYNCWORD, this->sync_value_.data(), this->sync_value_.size());
|
242
242
|
}
|
@@ -274,7 +274,7 @@ void SX126x::set_packet_params_(uint8_t payload_length) {
|
|
274
274
|
buf[2] = (this->preamble_detect_ > 0) ? ((this->preamble_detect_ - 1) | 0x04) : 0x00;
|
275
275
|
buf[3] = this->sync_value_.size() * 8;
|
276
276
|
buf[4] = 0x00;
|
277
|
-
buf[5] = 0x00;
|
277
|
+
buf[5] = (this->payload_length_ > 0) ? 0x00 : 0x01;
|
278
278
|
buf[6] = payload_length;
|
279
279
|
buf[7] = this->crc_enable_ ? 0x06 : 0x01;
|
280
280
|
buf[8] = 0x00;
|
@@ -314,6 +314,9 @@ SX126xError SX126x::transmit_packet(const std::vector<uint8_t> &packet) {
|
|
314
314
|
buf[0] = 0xFF;
|
315
315
|
buf[1] = 0xFF;
|
316
316
|
this->write_opcode_(RADIO_CLR_IRQSTATUS, buf, 2);
|
317
|
+
if (this->payload_length_ == 0) {
|
318
|
+
this->set_packet_params_(this->get_max_packet_size());
|
319
|
+
}
|
317
320
|
if (this->rx_start_) {
|
318
321
|
this->set_mode_rx();
|
319
322
|
} else {
|
@@ -72,6 +72,7 @@ void USBUartTypeCH34X::enable_channels() {
|
|
72
72
|
if (channel->index_ >= 2)
|
73
73
|
cmd += 0xE;
|
74
74
|
this->control_transfer(USB_VENDOR_DEV | usb_host::USB_DIR_OUT, cmd, value, (factor << 8) | divisor, callback);
|
75
|
+
this->control_transfer(USB_VENDOR_DEV | usb_host::USB_DIR_OUT, cmd + 3, 0x80, 0, callback);
|
75
76
|
}
|
76
77
|
USBUartTypeCdcAcm::enable_channels();
|
77
78
|
}
|
@@ -3,7 +3,8 @@ from esphome.components.esp32 import add_idf_component
|
|
3
3
|
from esphome.components.ota import BASE_OTA_SCHEMA, OTAComponent, ota_to_code
|
4
4
|
import esphome.config_validation as cv
|
5
5
|
from esphome.const import CONF_ID
|
6
|
-
from esphome.core import CORE,
|
6
|
+
from esphome.core import CORE, coroutine_with_priority
|
7
|
+
from esphome.coroutine import CoroPriority
|
7
8
|
|
8
9
|
CODEOWNERS = ["@esphome/core"]
|
9
10
|
DEPENDENCIES = ["network", "web_server_base"]
|
@@ -22,7 +23,7 @@ CONFIG_SCHEMA = (
|
|
22
23
|
)
|
23
24
|
|
24
25
|
|
25
|
-
@coroutine_with_priority(CoroPriority.
|
26
|
+
@coroutine_with_priority(CoroPriority.WEB_SERVER_OTA)
|
26
27
|
async def to_code(config):
|
27
28
|
var = cg.new_Pvariable(config[CONF_ID])
|
28
29
|
await ota_to_code(var, config)
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
2
|
import esphome.config_validation as cv
|
3
3
|
from esphome.const import CONF_ID
|
4
|
-
from esphome.core import CORE,
|
4
|
+
from esphome.core import CORE, coroutine_with_priority
|
5
|
+
from esphome.coroutine import CoroPriority
|
5
6
|
|
6
7
|
CODEOWNERS = ["@esphome/core"]
|
7
8
|
DEPENDENCIES = ["network"]
|
@@ -26,7 +27,7 @@ CONFIG_SCHEMA = cv.Schema(
|
|
26
27
|
)
|
27
28
|
|
28
29
|
|
29
|
-
@coroutine_with_priority(CoroPriority.
|
30
|
+
@coroutine_with_priority(CoroPriority.WEB_SERVER_BASE)
|
30
31
|
async def to_code(config):
|
31
32
|
var = cg.new_Pvariable(config[CONF_ID])
|
32
33
|
await cg.register_component(var, config)
|
@@ -39,5 +40,7 @@ async def to_code(config):
|
|
39
40
|
cg.add_library("Update", None)
|
40
41
|
if CORE.is_esp8266:
|
41
42
|
cg.add_library("ESP8266WiFi", None)
|
43
|
+
if CORE.is_libretiny:
|
44
|
+
CORE.add_platformio_option("lib_ignore", ["ESPAsyncTCP", "RPAsyncTCP"])
|
42
45
|
# https://github.com/ESP32Async/ESPAsyncWebServer/blob/main/library.json
|
43
46
|
cg.add_library("ESP32Async/ESPAsyncWebServer", "3.7.10")
|
esphome/const.py
CHANGED
esphome/core/config.py
CHANGED
@@ -396,7 +396,7 @@ async def add_includes(includes):
|
|
396
396
|
async def _add_platformio_options(pio_options):
|
397
397
|
# Add includes at the very end, so that they override everything
|
398
398
|
for key, val in pio_options.items():
|
399
|
-
if key
|
399
|
+
if key in ["build_flags", "lib_ignore"] and not isinstance(val, list):
|
400
400
|
val = [val]
|
401
401
|
cg.add_platformio_option(key, val)
|
402
402
|
|
esphome/coroutine.py
CHANGED
@@ -90,11 +90,30 @@ class CoroPriority(enum.IntEnum):
|
|
90
90
|
# Examples: status_led (80)
|
91
91
|
STATUS = 80
|
92
92
|
|
93
|
+
# Web server infrastructure
|
94
|
+
# Examples: web_server_base (65)
|
95
|
+
WEB_SERVER_BASE = 65
|
96
|
+
|
97
|
+
# Network portal services
|
98
|
+
# Examples: captive_portal (64)
|
99
|
+
CAPTIVE_PORTAL = 64
|
100
|
+
|
93
101
|
# Communication protocols and services
|
94
|
-
# Examples:
|
95
|
-
# mdns (55), ota_updates (54), web_server_ota (52)
|
102
|
+
# Examples: wifi (60), ethernet (60)
|
96
103
|
COMMUNICATION = 60
|
97
104
|
|
105
|
+
# Network discovery and management services
|
106
|
+
# Examples: mdns (55)
|
107
|
+
NETWORK_SERVICES = 55
|
108
|
+
|
109
|
+
# OTA update services
|
110
|
+
# Examples: ota_updates (54)
|
111
|
+
OTA_UPDATES = 54
|
112
|
+
|
113
|
+
# Web-based OTA services
|
114
|
+
# Examples: web_server_ota (52)
|
115
|
+
WEB_SERVER_OTA = 52
|
116
|
+
|
98
117
|
# Application-level services
|
99
118
|
# Examples: safe_mode (50)
|
100
119
|
APPLICATION = 50
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: esphome
|
3
|
-
Version: 2025.9.
|
3
|
+
Version: 2025.9.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
|
@@ -1,12 +1,12 @@
|
|
1
1
|
esphome/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
esphome/__main__.py,sha256=
|
2
|
+
esphome/__main__.py,sha256=8hrrEXR1nGng7wvABi5Tcyd_GpMDWc2_8b8n9WfovA0,39533
|
3
3
|
esphome/automation.py,sha256=gK_oTzOSb3X-0O82bZNYk4XjAzSecpSdvHQGcY79Rcc,15661
|
4
4
|
esphome/codegen.py,sha256=H_WB4rj0uEowvlhEb31EjJQwutLQ5CQkJIsNgDK-wx8,1917
|
5
5
|
esphome/config.py,sha256=74-Y3XKtlB9h__fsu-Zvj6PanDWufVGo1-W4jlG-8cg,43172
|
6
6
|
esphome/config_helpers.py,sha256=E0UO0khX9JW-br_NSsDlLH3VuE-YwMQ99_pzEQVupDc,5391
|
7
7
|
esphome/config_validation.py,sha256=WB_2g9itbOi2z8bo25t8AG1rKHzLZdfa_DiTYQMuxrQ,64839
|
8
|
-
esphome/const.py,sha256=
|
9
|
-
esphome/coroutine.py,sha256=
|
8
|
+
esphome/const.py,sha256=dni6notKlV9xFGceQNndBq1IS0SBG8ZrDkPirTxLXGA,44216
|
9
|
+
esphome/coroutine.py,sha256=JFBDo8ngY46zhxvjk5aQ5MO_-qrqKDfKQTglEIqHrYY,11946
|
10
10
|
esphome/cpp_generator.py,sha256=C9O-H6ekHHdIEsfLGiqo-Sv6LZCmS0OL4A5ZGYHyh6U,32209
|
11
11
|
esphome/cpp_helpers.py,sha256=r-hrUp7luke-ByuK2Z0TCzIvn4tTswMUkAzlVoKntiI,4039
|
12
12
|
esphome/cpp_types.py,sha256=UkmRmwPDShPw9HauiaFuNb6eZ6RsIy2YNQXUy4_UzQ8,1960
|
@@ -501,7 +501,7 @@ esphome/components/cap1188/__init__.py,sha256=coel8Li86MFnLQuuHregeri04GGDVR_qqh
|
|
501
501
|
esphome/components/cap1188/binary_sensor.py,sha256=Ar35IMka2lFJxLRfVaZm0qIeTCJmnoHHXcgidxmAOQ8,775
|
502
502
|
esphome/components/cap1188/cap1188.cpp,sha256=Cm2NVNtHVzKOBKccmav87gJhRXlv_j-_mfFCTA1iSI4,2470
|
503
503
|
esphome/components/cap1188/cap1188.h,sha256=7zsuov-u6FaC-iAR3NZOMAdi_IovL0nSVjHCJRfx9c0,1934
|
504
|
-
esphome/components/captive_portal/__init__.py,sha256=
|
504
|
+
esphome/components/captive_portal/__init__.py,sha256=tt5_GNT1CePuYgxv0DL12KTOWBRusq0nDe6TVU0w9tE,1773
|
505
505
|
esphome/components/captive_portal/captive_index.h,sha256=QmSw30k_2BR8QUXjDSV5kot8SSoXJB4IyHi4rYukxiE,9330
|
506
506
|
esphome/components/captive_portal/captive_portal.cpp,sha256=z_m4PR9GyttMlJgwXp0p1dAoWqI4QrxyF4IIrGlNnT4,4254
|
507
507
|
esphome/components/captive_portal/captive_portal.h,sha256=_xHgoqPq6nuz58ktiSoaxRIHFq4WlFjy2YdFvD-zEzU,1912
|
@@ -929,8 +929,8 @@ esphome/components/esp32_hosted/__init__.py,sha256=crOi6AdUnpreAdJZb-OktoyyZxeU7
|
|
929
929
|
esphome/components/esp32_hosted/esp32_hosted.py.script,sha256=L3YjW8b3-7I_Cy4V95y_UGFfdKh3UqhMarwCxoVJMKw,375
|
930
930
|
esphome/components/esp32_improv/__init__.py,sha256=qzIyscmQ6VVKCGR9B7UE7hf4IsKltQ3PrsQcL-slrrU,5490
|
931
931
|
esphome/components/esp32_improv/automation.h,sha256=S2_sD9RlE1B6lWaH_l_6n5ObBB1zhQ4EDxrzOcQuvRw,2042
|
932
|
-
esphome/components/esp32_improv/esp32_improv_component.cpp,sha256=
|
933
|
-
esphome/components/esp32_improv/esp32_improv_component.h,sha256=
|
932
|
+
esphome/components/esp32_improv/esp32_improv_component.cpp,sha256=PzAURhc6XPZ11a5_k68NmcBrMw92JdPZRTiqaXkkhYw,14383
|
933
|
+
esphome/components/esp32_improv/esp32_improv_component.h,sha256=ye1i5rcjC_H7qcVkPQ_a_nAsQ8H_sppVOZSs09Qw10k,3608
|
934
934
|
esphome/components/esp32_rmt/__init__.py,sha256=S_2Wjyp9R8RZ5i_BiJToXVJHAduDHPplP-rTODgvKw0,674
|
935
935
|
esphome/components/esp32_rmt_led_strip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
936
936
|
esphome/components/esp32_rmt_led_strip/led_strip.cpp,sha256=uDBStKKGj4b66PzzHiwH1a7KZIK17RdV0UQ94KabtsA,8789
|
@@ -961,7 +961,7 @@ esphome/components/esp8266_pwm/output.py,sha256=s5sMTbATthPAJCJyTwvIBYQAoEcffAGx
|
|
961
961
|
esphome/components/esp_ldo/__init__.py,sha256=bBEaDXgqzFtcRSOcUttuA8VGJnayYjLU-zhvzGw8UiU,2892
|
962
962
|
esphome/components/esp_ldo/esp_ldo.cpp,sha256=cAnIUUnO9EGLEx2y0cZ7eT5eVeollwTxFLGQUdZ9sP8,1506
|
963
963
|
esphome/components/esp_ldo/esp_ldo.h,sha256=M5pLF6Wv1_CasrOHDG9e6UIYD-7KNVbZtXk0uAt61Bc,1130
|
964
|
-
esphome/components/esphome/ota/__init__.py,sha256=
|
964
|
+
esphome/components/esphome/ota/__init__.py,sha256=opem51qNyCwBjMbYlpfM0I-JpwS6qtkBJ6VPO6x-UsI,4907
|
965
965
|
esphome/components/esphome/ota/ota_esphome.cpp,sha256=fjZiMSzypM0mI5JhROObX3h6XILbAeJbe7HdCzmXuT4,15980
|
966
966
|
esphome/components/esphome/ota/ota_esphome.h,sha256=bZPXLSRRFEePIXlRhfSoCAXOoh4EEK1U5Ue9VZUdeaY,1496
|
967
967
|
esphome/components/espnow/__init__.py,sha256=ZMz0wyAmx4VW8dewtRhvSu3-TiCMbjVswF8_PvgxcvA,9780
|
@@ -1078,7 +1078,7 @@ esphome/components/gp8403/output/gp8403_output.cpp,sha256=FQPUa_ZMgLz7LNHy6N8sNU
|
|
1078
1078
|
esphome/components/gp8403/output/gp8403_output.h,sha256=wJd_-CtUSxw5ujhR21E1zCiB9hvpl3Ktt665D3iQLf4,598
|
1079
1079
|
esphome/components/gpio/__init__.py,sha256=afIFpPG_fsom-8vYV1yRyvhSCFyASlAdraUCuztWQZ4,103
|
1080
1080
|
esphome/components/gpio/binary_sensor/__init__.py,sha256=1rCKRDCrbINcJN6m0gRYgyGTouuVpK-s_IV6cGgivUE,3594
|
1081
|
-
esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp,sha256=
|
1081
|
+
esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp,sha256=Zoh2hzMQfkyQKOx1BonO0KmR5qZA199d0Ab8Rrc9V7E,3298
|
1082
1082
|
esphome/components/gpio/binary_sensor/gpio_binary_sensor.h,sha256=ukwmyxJhiYXMczcT16zwdliTX5Brf8fdgDzid6l13wE,2000
|
1083
1083
|
esphome/components/gpio/one_wire/__init__.py,sha256=oH6-6zy18pG_7iqzLegjh4AbjnbZHqBRZKHdHBI-828,714
|
1084
1084
|
esphome/components/gpio/one_wire/gpio_one_wire.cpp,sha256=jTzIEfdY08duQCnA4NgoEY6jkZWj0ozFL5i1sk6ixlg,5092
|
@@ -1178,7 +1178,7 @@ esphome/components/he60r/cover.py,sha256=83aWhKtJEOLFQLxufXEmBrfDPEP-M-I4Pf_sqh1
|
|
1178
1178
|
esphome/components/he60r/he60r.cpp,sha256=W2jb-ga2gTS5xfHsxNnFUDr6qawTvzywonh6VTW1k88,8737
|
1179
1179
|
esphome/components/he60r/he60r.h,sha256=ACMuRuz-0RAh7kp6ndkV-9qcq1XOyF_4UIXyaPXC8uQ,1371
|
1180
1180
|
esphome/components/heatpumpir/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1181
|
-
esphome/components/heatpumpir/climate.py,sha256
|
1181
|
+
esphome/components/heatpumpir/climate.py,sha256=QtLWwKuoh1L0qctB8y513FOBA5BAMgNEC5K3o7le7AQ,5584
|
1182
1182
|
esphome/components/heatpumpir/heatpumpir.cpp,sha256=GXnwvflFDXl9dPnkFEXIenT1WbjV-DrcLjV3jWON4FU,10062
|
1183
1183
|
esphome/components/heatpumpir/heatpumpir.h,sha256=2jmYpGvxTlGs_hfEmB05oAsl3OfwLY4joRDSKQShNy0,3807
|
1184
1184
|
esphome/components/heatpumpir/ir_sender_esphome.cpp,sha256=MOAYkculr1fFhFIa3_12yLZFblDcWBlvFyr5cQtMYIQ,734
|
@@ -1270,7 +1270,7 @@ esphome/components/http_request/http_request_host.h,sha256=QOy297CGwGs7xPRos3QOl
|
|
1270
1270
|
esphome/components/http_request/http_request_idf.cpp,sha256=-kZGq23MRXZabnLyiv-iTUCMu-tkN_knkoI5UbuUxVw,7629
|
1271
1271
|
esphome/components/http_request/http_request_idf.h,sha256=mSwxYFbkN1pg8bba_VfZPOpj6mGzxggmxWYTSbaJjec,1611
|
1272
1272
|
esphome/components/http_request/httplib.h,sha256=VoILM8ZYZ2B-IV6Z6eb3BPvGOfig-Ccm7e9UVGNY10Q,330380
|
1273
|
-
esphome/components/http_request/ota/__init__.py,sha256=
|
1273
|
+
esphome/components/http_request/ota/__init__.py,sha256=QpeQ5KW63A7R6Zj3ITsSBUOOLo__ifbahwZT4WTwNt4,3245
|
1274
1274
|
esphome/components/http_request/ota/automation.h,sha256=yQo6nJis0S56r5F-tIPbRPqPZMcu0Lpcawr2cX92Ap4,1209
|
1275
1275
|
esphome/components/http_request/ota/ota_http_request.cpp,sha256=PyandFqtBgBm_wUTcZExvCqDiIDyyP2NFopzsyBACRg,8731
|
1276
1276
|
esphome/components/http_request/ota/ota_http_request.h,sha256=X0SFnzhpCY_S7QLJKRiEb7pTTtrj0qWfTSXC_jMLS2E,1787
|
@@ -1852,7 +1852,7 @@ esphome/components/mcp9808/sensor.py,sha256=8dSMS73S0pbANOyfJDpeQu8YV1x8YayyEGp-
|
|
1852
1852
|
esphome/components/md5/__init__.py,sha256=UMOzKlaVJtzYULytE5P3aZOdVPKrdJAQb-NLxUQ4UUE,119
|
1853
1853
|
esphome/components/md5/md5.cpp,sha256=bMBkIoYH9rQt1_jALhJFMHztqtTUuEMznTFeRQbLcsw,1796
|
1854
1854
|
esphome/components/md5/md5.h,sha256=Q_qTnrjgWuyE-5j2366KgZdzL2253n0sCafU7ZozXN8,1476
|
1855
|
-
esphome/components/mdns/__init__.py,sha256=
|
1855
|
+
esphome/components/mdns/__init__.py,sha256=7_J0-06SlGHkHWWUrf_7xkqWfXk8vB1L-yjnHzBaS2c,3705
|
1856
1856
|
esphome/components/mdns/mdns_component.cpp,sha256=hSbIXyRaatXUwr2ByMFTYC_sCGoilinfIXGdle9nR2I,8366
|
1857
1857
|
esphome/components/mdns/mdns_component.h,sha256=hCM2noT922YAEt87sMK6pS8X4YtRR3n9BqSaBGpVrJQ,1438
|
1858
1858
|
esphome/components/mdns/mdns_esp32.cpp,sha256=dt6O4bgq1dDfXIaH7LBZUkcXFAMpOE-2RKY3VkkvTrE,1829
|
@@ -1919,7 +1919,7 @@ esphome/components/midea_ir/climate.py,sha256=SIGjpEuW2nJbXh_SjKz1Tt5zkqqC65bsZp
|
|
1919
1919
|
esphome/components/midea_ir/midea_data.h,sha256=XOHDD0CzimykTCRGWqgQGIhDgmd0bXL1AjWscswO5OE,2783
|
1920
1920
|
esphome/components/midea_ir/midea_ir.cpp,sha256=5RJ1Igf_SCFOj2OwrS3n-_aAVfQPVNjiVFqi7cHwyJE,6666
|
1921
1921
|
esphome/components/midea_ir/midea_ir.h,sha256=BNVdX5xjpFy-q0OTgBubUpFA_GQgUeK3Vx7rahOT-nM,1518
|
1922
|
-
esphome/components/mipi/__init__.py,sha256=
|
1922
|
+
esphome/components/mipi/__init__.py,sha256=SLZnWHYHE-Nzp2imYn-FhuGGHPWhA9vRE56bK3mWVTw,15742
|
1923
1923
|
esphome/components/mipi_dsi/__init__.py,sha256=0xobDY4ImBcQod3BD1spYTLRg5gBGGJiuPx8R4KYApY,111
|
1924
1924
|
esphome/components/mipi_dsi/display.py,sha256=5atj0wGqzBTuM9CvbLjHB9mCcyGiYe3xhMVSJC5fxog,8060
|
1925
1925
|
esphome/components/mipi_dsi/mipi_dsi.cpp,sha256=WrZxI9snPhBfM2S2E53vmUltnW5uLWUwkT5fkuEMvhM,14254
|
@@ -1936,14 +1936,14 @@ esphome/components/mipi_rgb/models/guition.py,sha256=WnkzED6GAYg5PA0_mapH-s4oeM7
|
|
1936
1936
|
esphome/components/mipi_rgb/models/lilygo.py,sha256=RRQYMCPZUcXUPfCPxWKnXQ7wErHRGc8whWYrV3sF5WQ,6564
|
1937
1937
|
esphome/components/mipi_rgb/models/rpi.py,sha256=TsfdCw1R34KkuWjdcpr86QVlAWKcnE3cGO7Xv6Kjokc,248
|
1938
1938
|
esphome/components/mipi_rgb/models/st7701s.py,sha256=AOOwVcOb7kOc7L_sb59-7edyIuEbW-z4x6c5o_tW_Q8,8395
|
1939
|
-
esphome/components/mipi_rgb/models/waveshare.py,sha256=
|
1939
|
+
esphome/components/mipi_rgb/models/waveshare.py,sha256=iEYTdtiuGCgL4zdsdljSVrwUZZgmS8vpHwX8UzbyERE,1618
|
1940
1940
|
esphome/components/mipi_spi/__init__.py,sha256=XJwpaWKr4Ldgbuja4FdSVVpj-0q1Ef67Qmdg-SkTR7o,102
|
1941
1941
|
esphome/components/mipi_spi/display.py,sha256=TYnbrJczX_cnpG-mw0Hj6IwBVWvfIFMcBwRxdb6Xpqc,15318
|
1942
1942
|
esphome/components/mipi_spi/mipi_spi.cpp,sha256=atqJGYm2bPQOfMrgzjfCgjxrryanTXOieAqANXj4bgU,142
|
1943
1943
|
esphome/components/mipi_spi/mipi_spi.h,sha256=HKzar37uF9edHepg7J4yXIV7-a1OqiSqE7uHyLnN1M4,23289
|
1944
1944
|
esphome/components/mipi_spi/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1945
1945
|
esphome/components/mipi_spi/models/adafruit.py,sha256=Izz_5WeYuxbDQv-5Ixtm_hrdggT1drVLbTafV4TsJbM,482
|
1946
|
-
esphome/components/mipi_spi/models/amoled.py,sha256=
|
1946
|
+
esphome/components/mipi_spi/models/amoled.py,sha256=Ac1L4Bf-ZZLTdgGYcqyj3XnQer04RcBXP7UjHi_ZsKM,1978
|
1947
1947
|
esphome/components/mipi_spi/models/cyd.py,sha256=4kAD8U4h1HNpgT-3lum7Zt-DkldHoG2_50PbSPeTYLw,131
|
1948
1948
|
esphome/components/mipi_spi/models/ili.py,sha256=cM0_-S116aHZLjenHcPXZ1jrNROWfbNHm9HOWsZ6URk,15036
|
1949
1949
|
esphome/components/mipi_spi/models/jc.py,sha256=3tBxkMWL6vvEBHj16ivGRp9qZmuQk5tAP-kTlRCBxOk,10319
|
@@ -2256,7 +2256,7 @@ esphome/components/opt3001/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
|
|
2256
2256
|
esphome/components/opt3001/opt3001.cpp,sha256=ZM1SQwXupDHYpslMx26QSl7qb3KNDc6DUPnpgy-QtIs,4221
|
2257
2257
|
esphome/components/opt3001/opt3001.h,sha256=kV1FgTvHWk56QL7M7cIIOmupF59FRBk7t9EuNvMcIBY,782
|
2258
2258
|
esphome/components/opt3001/sensor.py,sha256=3EdGmBCpfPzTMaosAjYbZQPqQb7AEAKRR6Mc4bJyHvs,892
|
2259
|
-
esphome/components/ota/__init__.py,sha256=
|
2259
|
+
esphome/components/ota/__init__.py,sha256=zUOT-_DVW9VHz1JNnsE9TzR4PMjimEv-L46WouVZiDU,5078
|
2260
2260
|
esphome/components/ota/automation.h,sha256=0GhgDicYedDmMTX-yomlw-Ssl-B_2RbE0FDcTJTM0Ns,2037
|
2261
2261
|
esphome/components/ota/ota_backend.cpp,sha256=IfpR0mvzSs9ugJa2LRi4AtYHT4Ht6PoS9BY5Ydjs_eE,587
|
2262
2262
|
esphome/components/ota/ota_backend.h,sha256=GLTNB5ynFx8MmV5RePtdAxdB-7o8ubz5RLN91kiln1Y,3830
|
@@ -2286,7 +2286,7 @@ esphome/components/output/switch/__init__.py,sha256=yWYf5A46HDvaAHDyUhisP_SQeRwj
|
|
2286
2286
|
esphome/components/output/switch/output_switch.cpp,sha256=_NpPnnJyuVVClOxMVcAij9UVdiap3oLQJgsG6sTKyxI,636
|
2287
2287
|
esphome/components/output/switch/output_switch.h,sha256=irORSQtpjDivfCCaBQCHMek1AO5MPxH-ZfiTBitJajc,609
|
2288
2288
|
esphome/components/packages/__init__.py,sha256=ybF-I7HrXhAe1wbFwjPWWtfS0UbjOOBkbxCCsM1HkZc,6395
|
2289
|
-
esphome/components/packet_transport/__init__.py,sha256=
|
2289
|
+
esphome/components/packet_transport/__init__.py,sha256=Xrpf78g7xk3DZCAETFghQx6Nbmy5hp240o9zpxCRua8,6368
|
2290
2290
|
esphome/components/packet_transport/binary_sensor.py,sha256=vysjJ9KDTzDssdNOlOT_tNVLT3jv5a_GRw1H5czPBLY,2329
|
2291
2291
|
esphome/components/packet_transport/packet_transport.cpp,sha256=orygb4kg5L15h6p3i5mLQXCyKje19yDTBb3BMdML61Q,17360
|
2292
2292
|
esphome/components/packet_transport/packet_transport.h,sha256=8REDLYgpT3tjQyvpfz3eb_WKUJN9MXqN3x9Rdt7ndOk,5029
|
@@ -3073,7 +3073,7 @@ esphome/components/switch/binary_sensor/switch_binary_sensor.cpp,sha256=ZPwaqXQT
|
|
3073
3073
|
esphome/components/switch/binary_sensor/switch_binary_sensor.h,sha256=xTqZLNBeZl6oah0rzOiuBfeeLTUnl-hSMzLALWhuOog,462
|
3074
3074
|
esphome/components/sx126x/__init__.py,sha256=ESYxzsog9kId6zUOE6AVohHp2UzQNM8gCB-ZnOwlDYA,11941
|
3075
3075
|
esphome/components/sx126x/automation.h,sha256=fgt45VPE4CbumQ7Cj8fsd5oKZSxDazoZROo4_sij-x0,1824
|
3076
|
-
esphome/components/sx126x/sx126x.cpp,sha256=
|
3076
|
+
esphome/components/sx126x/sx126x.cpp,sha256=IrhWIBH7dG8_teDeOQ5G65iaPM9_hDEtlZSKrLw0YvM,16828
|
3077
3077
|
esphome/components/sx126x/sx126x.h,sha256=-jHgmn1dNUwwGf1eGrU19Z3BxwpFX49JxoVxSUlMQjM,5312
|
3078
3078
|
esphome/components/sx126x/sx126x_reg.h,sha256=GSWkorZRYDeqMO8oTIozvfL2WLYAz66y3o7QeE9LlfY,3742
|
3079
3079
|
esphome/components/sx126x/packet_transport/__init__.py,sha256=pQohjHA2lZTqq3ziua_W1_DVkIY6ldh1WVzh80c8zvA,716
|
@@ -3438,7 +3438,7 @@ esphome/components/usb_host/usb_host.h,sha256=Bi1Y0ZQd_ecbEhIXdnfgO7fPEoWXxjN-hZ
|
|
3438
3438
|
esphome/components/usb_host/usb_host_client.cpp,sha256=janrFosfaoDlNz5tZn7k7v3LSVN6mzr-AK41VAyT13g,14598
|
3439
3439
|
esphome/components/usb_host/usb_host_component.cpp,sha256=wY11HpSN4Ql4puDl6qN1wKk6FW1IfnAVwxHRC4AFq5Y,916
|
3440
3440
|
esphome/components/usb_uart/__init__.py,sha256=hj_dUGWhiwrlhZaiMrY4j8IX_Kn3EIk3JfCCrths7so,4951
|
3441
|
-
esphome/components/usb_uart/ch34x.cpp,sha256=
|
3441
|
+
esphome/components/usb_uart/ch34x.cpp,sha256=7l1NrFJMN7LbXKQ6bdOHtsmCuxcMGqyTGAmj_sIJtkA,2417
|
3442
3442
|
esphome/components/usb_uart/cp210x.cpp,sha256=8h_-Rr0Hy7BBisGhbOulTaJUYO8_HlMZBVUj35UPqk8,6006
|
3443
3443
|
esphome/components/usb_uart/usb_uart.cpp,sha256=oWsXwuZhvbFd9IHtrTPr_P7ezyDynllVP5nMNc17Nlw,12872
|
3444
3444
|
esphome/components/usb_uart/usb_uart.h,sha256=z6I-t409XJcVSsvWgGk_HvscM8nsmZM6593XP-qYyUE,4977
|
@@ -3498,10 +3498,10 @@ esphome/components/web_server/server_index_v3.h,sha256=5SZfSHDG4xAyXNBxUqs8-jSVw
|
|
3498
3498
|
esphome/components/web_server/web_server.cpp,sha256=lOdalJ1wTpkAOLnBvanxFqKXVV4lDcHzWBN4Qhe4SuI,69812
|
3499
3499
|
esphome/components/web_server/web_server.h,sha256=ZxpyQSeUB3Kj65CTW2MJDeAUl5Kv0PN6FFRRTE4hOBA,23987
|
3500
3500
|
esphome/components/web_server/web_server_v1.cpp,sha256=ZnFV1J2YAzAT2mtR-eeVgG1TSVpy953EF1yVKYdTcTg,7409
|
3501
|
-
esphome/components/web_server/ota/__init__.py,sha256=
|
3501
|
+
esphome/components/web_server/ota/__init__.py,sha256=VrKoEguXiiFcZ3sxV_i1WpA6MKtDM2gqgdoNV_HkfhY,1084
|
3502
3502
|
esphome/components/web_server/ota/ota_web_server.cpp,sha256=1HRC-pcl-fEVnv5hXQ5UXUSRgSfr5mdCUQWC4G-dWCU,8676
|
3503
3503
|
esphome/components/web_server/ota/ota_web_server.h,sha256=ZZQHTxb21gqukibGei-om00MxpBD4Qyy031PXBMmjT8,604
|
3504
|
-
esphome/components/web_server_base/__init__.py,sha256=
|
3504
|
+
esphome/components/web_server_base/__init__.py,sha256=dcBEt4dQahZVrK-3FsMG1C-1qzsc08OM4QQECLuq-F8,1464
|
3505
3505
|
esphome/components/web_server_base/web_server_base.cpp,sha256=VlAnKn1jhHVca2LUL32CJRKTIvNKpxXTs4KLHw9he-E,909
|
3506
3506
|
esphome/components/web_server_base/web_server_base.h,sha256=xKlrCAtThydv7SxJohZJ1cLirtZgSQ34Qk1Ldnn0WPM,4150
|
3507
3507
|
esphome/components/web_server_idf/__init__.py,sha256=suQYP-zxgx9bk7qmUVQ0P8FkwXqajUKDoEwenxD20Hg,409
|
@@ -3715,7 +3715,7 @@ esphome/core/component.cpp,sha256=VBNDcx54BPCRkPkFjDqH3o0TLY1pehZoEEvZkwHAmiY,18
|
|
3715
3715
|
esphome/core/component.h,sha256=5GuAD5chzeqP3lcgyeFrTB66IItADmvZ4025Gw8yBKE,18089
|
3716
3716
|
esphome/core/component_iterator.cpp,sha256=6EO7M9iL3wjtC84_EeJ9EOCQi7QNKWyqK-56G3Ze9Uo,5341
|
3717
3717
|
esphome/core/component_iterator.h,sha256=Opa1AmbsPR1S4b6aWwqRksajo7G5V2FLiSQA1p-z6n4,4279
|
3718
|
-
esphome/core/config.py,sha256=
|
3718
|
+
esphome/core/config.py,sha256=F3Rt2qoXEEaonikHPm1fsGaIex34d_zKl0WG6fgUzmc,20293
|
3719
3719
|
esphome/core/controller.cpp,sha256=nRJZK4B5WWad98tGGEESSGcKWcpWhExaUOIXO3Iu_xQ,4602
|
3720
3720
|
esphome/core/controller.h,sha256=UCvtMbw21KvAQHaO_fgDRr1OjcXEYzEC8JupPmHrNic,3708
|
3721
3721
|
esphome/core/datatypes.h,sha256=TNuXjWQIK7KjDwMAccMFws2SimaUlsgim96SI0cCdCY,2110
|
@@ -3766,9 +3766,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
|
|
3766
3766
|
esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
|
3767
3767
|
esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
|
3768
3768
|
esphome/dashboard/util/text.py,sha256=wwFtORlvHjsYkqb68IT-772LHAhWxT4OtnkIcPICQB0,317
|
3769
|
-
esphome-2025.9.
|
3770
|
-
esphome-2025.9.
|
3771
|
-
esphome-2025.9.
|
3772
|
-
esphome-2025.9.
|
3773
|
-
esphome-2025.9.
|
3774
|
-
esphome-2025.9.
|
3769
|
+
esphome-2025.9.2.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
|
3770
|
+
esphome-2025.9.2.dist-info/METADATA,sha256=cz24zWMTn8EgyiBvfQ5Fgi9GAIQGKIO0gvyxAEwx5T4,3632
|
3771
|
+
esphome-2025.9.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
3772
|
+
esphome-2025.9.2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
|
3773
|
+
esphome-2025.9.2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
|
3774
|
+
esphome-2025.9.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|