esphome 2024.11.1__py3-none-any.whl → 2024.11.3__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/binary_sensor/binary_sensor.h +1 -1
- esphome/components/datetime/datetime_entity.cpp +1 -3
- esphome/components/esp32/__init__.py +6 -10
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +6 -5
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/defines.py +1 -1
- esphome/components/lvgl/lv_validation.py +2 -1
- esphome/components/lvgl/lvgl_esphome.h +3 -0
- esphome/components/lvgl/schemas.py +1 -0
- esphome/components/lvgl/widgets/line.py +10 -1
- esphome/components/lvgl/widgets/msgbox.py +2 -1
- esphome/components/matrix_keypad/binary_sensor/matrix_keypad_binary_sensor.h +1 -1
- esphome/components/modbus/modbus.cpp +2 -1
- esphome/components/modbus_controller/__init__.py +1 -1
- esphome/components/modbus_controller/modbus_controller.cpp +54 -18
- esphome/components/online_image/png_image.cpp +4 -0
- esphome/components/opentherm/hub.cpp +6 -7
- esphome/components/opentherm/opentherm.cpp +15 -31
- esphome/components/opentherm/opentherm.h +3 -4
- esphome/components/qspi_dbi/models.py +2 -0
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -1
- esphome/components/st7920/st7920.cpp +2 -3
- esphome/components/status/binary_sensor.py +2 -0
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +20 -4
- esphome/components/wifi/wifi_component_esp8266.cpp +20 -4
- esphome/components/wifi/wifi_component_esp_idf.cpp +20 -4
- esphome/const.py +1 -1
- esphome/core/helpers.cpp +12 -0
- esphome/core/helpers.h +8 -0
- esphome/core/time.cpp +19 -15
- esphome/core/time.h +1 -3
- {esphome-2024.11.1.dist-info → esphome-2024.11.3.dist-info}/METADATA +1 -1
- {esphome-2024.11.1.dist-info → esphome-2024.11.3.dist-info}/RECORD +38 -38
- {esphome-2024.11.1.dist-info → esphome-2024.11.3.dist-info}/LICENSE +0 -0
- {esphome-2024.11.1.dist-info → esphome-2024.11.3.dist-info}/WHEEL +0 -0
- {esphome-2024.11.1.dist-info → esphome-2024.11.3.dist-info}/entry_points.txt +0 -0
- {esphome-2024.11.1.dist-info → esphome-2024.11.3.dist-info}/top_level.txt +0 -0
esphome/__main__.py
CHANGED
@@ -58,7 +58,7 @@ class BinarySensor : public EntityBase, public EntityBase_DeviceClass {
|
|
58
58
|
void publish_initial_state(bool state);
|
59
59
|
|
60
60
|
/// The current reported state of the binary sensor.
|
61
|
-
bool state;
|
61
|
+
bool state{false};
|
62
62
|
|
63
63
|
void add_filter(Filter *filter);
|
64
64
|
void add_filters(const std::vector<Filter *> &filters);
|
@@ -60,9 +60,7 @@ ESPTime DateTimeEntity::state_as_esptime() const {
|
|
60
60
|
obj.hour = this->hour_;
|
61
61
|
obj.minute = this->minute_;
|
62
62
|
obj.second = this->second_;
|
63
|
-
obj.
|
64
|
-
obj.day_of_year = 1; // Required to be valid for recalc_timestamp_local but not used.
|
65
|
-
obj.recalc_timestamp_local(false);
|
63
|
+
obj.recalc_timestamp_local();
|
66
64
|
return obj;
|
67
65
|
}
|
68
66
|
|
@@ -355,24 +355,20 @@ def _detect_variant(value):
|
|
355
355
|
|
356
356
|
|
357
357
|
def final_validate(config):
|
358
|
-
if
|
358
|
+
if not (
|
359
|
+
pio_options := fv.full_config.get()[CONF_ESPHOME].get(CONF_PLATFORMIO_OPTIONS)
|
360
|
+
):
|
361
|
+
# Not specified or empty
|
359
362
|
return config
|
360
363
|
|
361
364
|
pio_flash_size_key = "board_upload.flash_size"
|
362
365
|
pio_partitions_key = "board_build.partitions"
|
363
|
-
if
|
364
|
-
CONF_PARTITIONS in config
|
365
|
-
and pio_partitions_key
|
366
|
-
in fv.full_config.get()[CONF_ESPHOME][CONF_PLATFORMIO_OPTIONS]
|
367
|
-
):
|
366
|
+
if CONF_PARTITIONS in config and pio_partitions_key in pio_options:
|
368
367
|
raise cv.Invalid(
|
369
368
|
f"Do not specify '{pio_partitions_key}' in '{CONF_PLATFORMIO_OPTIONS}' with '{CONF_PARTITIONS}' in esp32"
|
370
369
|
)
|
371
370
|
|
372
|
-
if
|
373
|
-
pio_flash_size_key
|
374
|
-
in fv.full_config.get()[CONF_ESPHOME][CONF_PLATFORMIO_OPTIONS]
|
375
|
-
):
|
371
|
+
if pio_flash_size_key in pio_options:
|
376
372
|
raise cv.Invalid(
|
377
373
|
f"Please specify {CONF_FLASH_SIZE} within esp32 configuration only"
|
378
374
|
)
|
@@ -15,7 +15,7 @@ static const char *const TAG = "honeywellabp2";
|
|
15
15
|
void HONEYWELLABP2Sensor::read_sensor_data() {
|
16
16
|
if (this->read(raw_data_, 7) != i2c::ERROR_OK) {
|
17
17
|
ESP_LOGE(TAG, "Communication with ABP2 failed!");
|
18
|
-
this->
|
18
|
+
this->status_set_warning("couldn't read sensor data");
|
19
19
|
return;
|
20
20
|
}
|
21
21
|
float press_counts = encode_uint24(raw_data_[1], raw_data_[2], raw_data_[3]); // calculate digital pressure counts
|
@@ -25,12 +25,13 @@ void HONEYWELLABP2Sensor::read_sensor_data() {
|
|
25
25
|
(this->max_pressure_ - this->min_pressure_)) +
|
26
26
|
this->min_pressure_;
|
27
27
|
this->last_temperature_ = (temp_counts * 200 / 16777215) - 50;
|
28
|
+
this->status_clear_warning();
|
28
29
|
}
|
29
30
|
|
30
31
|
void HONEYWELLABP2Sensor::start_measurement() {
|
31
32
|
if (this->write(i2c_cmd_, 3) != i2c::ERROR_OK) {
|
32
33
|
ESP_LOGE(TAG, "Communication with ABP2 failed!");
|
33
|
-
this->
|
34
|
+
this->status_set_warning("couldn't start measurement");
|
34
35
|
return;
|
35
36
|
}
|
36
37
|
this->measurement_running_ = true;
|
@@ -39,7 +40,7 @@ void HONEYWELLABP2Sensor::start_measurement() {
|
|
39
40
|
bool HONEYWELLABP2Sensor::is_measurement_ready() {
|
40
41
|
if (this->read(raw_data_, 1) != i2c::ERROR_OK) {
|
41
42
|
ESP_LOGE(TAG, "Communication with ABP2 failed!");
|
42
|
-
this->
|
43
|
+
this->status_set_warning("couldn't check measurement");
|
43
44
|
return false;
|
44
45
|
}
|
45
46
|
if ((raw_data_[0] & (0x1 << STATUS_BIT_BUSY)) > 0) {
|
@@ -52,7 +53,7 @@ bool HONEYWELLABP2Sensor::is_measurement_ready() {
|
|
52
53
|
void HONEYWELLABP2Sensor::measurement_timeout() {
|
53
54
|
ESP_LOGE(TAG, "Timeout!");
|
54
55
|
this->measurement_running_ = false;
|
55
|
-
this->
|
56
|
+
this->status_set_warning("measurement timed out");
|
56
57
|
}
|
57
58
|
|
58
59
|
float HONEYWELLABP2Sensor::get_pressure() { return this->last_pressure_; }
|
@@ -79,7 +80,7 @@ void HONEYWELLABP2Sensor::update() {
|
|
79
80
|
ESP_LOGV(TAG, "Update Honeywell ABP2 Sensor");
|
80
81
|
|
81
82
|
this->start_measurement();
|
82
|
-
this->set_timeout("meas_timeout",
|
83
|
+
this->set_timeout("meas_timeout", 100, [this] { this->measurement_timeout(); });
|
83
84
|
}
|
84
85
|
|
85
86
|
void HONEYWELLABP2Sensor::dump_config() {
|
@@ -322,8 +322,8 @@ async def to_code(configs):
|
|
322
322
|
await encoders_to_code(lv_component, config, default_group)
|
323
323
|
await keypads_to_code(lv_component, config, default_group)
|
324
324
|
await theme_to_code(config)
|
325
|
-
await styles_to_code(config)
|
326
325
|
await gradients_to_code(config)
|
326
|
+
await styles_to_code(config)
|
327
327
|
await set_obj_properties(lv_scr_act, config)
|
328
328
|
await add_widgets(lv_scr_act, config)
|
329
329
|
await add_pages(lv_component, config)
|
@@ -30,7 +30,7 @@ from .defines import (
|
|
30
30
|
call_lambda,
|
31
31
|
literal,
|
32
32
|
)
|
33
|
-
from .helpers import esphome_fonts_used, lv_fonts_used, requires_component
|
33
|
+
from .helpers import add_lv_use, esphome_fonts_used, lv_fonts_used, requires_component
|
34
34
|
from .types import lv_font_t, lv_gradient_t, lv_img_t
|
35
35
|
|
36
36
|
opacity_consts = LvConstant("LV_OPA_", "TRANSP", "COVER")
|
@@ -326,6 +326,7 @@ def image_validator(value):
|
|
326
326
|
value = requires_component("image")(value)
|
327
327
|
value = cv.use_id(Image_)(value)
|
328
328
|
lv_images_used.add(value)
|
329
|
+
add_lv_use("img", "label")
|
329
330
|
return value
|
330
331
|
|
331
332
|
|
@@ -56,6 +56,9 @@ static const display::ColorBitness LV_BITNESS = display::ColorBitness::COLOR_BIT
|
|
56
56
|
inline void lv_img_set_src(lv_obj_t *obj, esphome::image::Image *image) {
|
57
57
|
lv_img_set_src(obj, image->get_lv_img_dsc());
|
58
58
|
}
|
59
|
+
inline void lv_disp_set_bg_image(lv_disp_t *disp, esphome::image::Image *image) {
|
60
|
+
lv_disp_set_bg_image(disp, image->get_lv_img_dsc());
|
61
|
+
}
|
59
62
|
#endif // USE_LVGL_IMAGE
|
60
63
|
|
61
64
|
// Parent class for things that wrap an LVGL object
|
@@ -35,11 +35,20 @@ LINE_SCHEMA = {
|
|
35
35
|
cv.GenerateID(CONF_POINT_LIST_ID): cv.declare_id(lv_point_t),
|
36
36
|
}
|
37
37
|
|
38
|
+
LINE_MODIFY_SCHEMA = {
|
39
|
+
cv.Optional(CONF_POINTS): cv_point_list,
|
40
|
+
cv.GenerateID(CONF_POINT_LIST_ID): cv.declare_id(lv_point_t),
|
41
|
+
}
|
42
|
+
|
38
43
|
|
39
44
|
class LineType(WidgetType):
|
40
45
|
def __init__(self):
|
41
46
|
super().__init__(
|
42
|
-
CONF_LINE,
|
47
|
+
CONF_LINE,
|
48
|
+
LvType("lv_line_t"),
|
49
|
+
(CONF_MAIN,),
|
50
|
+
LINE_SCHEMA,
|
51
|
+
modify_schema=LINE_MODIFY_SCHEMA,
|
43
52
|
)
|
44
53
|
|
45
54
|
async def to_code(self, w: Widget, config):
|
@@ -29,7 +29,7 @@ from ..lvcode import (
|
|
29
29
|
)
|
30
30
|
from ..schemas import STYLE_SCHEMA, STYLED_TEXT_SCHEMA, container_schema, part_schema
|
31
31
|
from ..types import LV_EVENT, char_ptr, lv_obj_t
|
32
|
-
from . import Widget, set_obj_properties
|
32
|
+
from . import Widget, add_widgets, set_obj_properties
|
33
33
|
from .button import button_spec
|
34
34
|
from .buttonmatrix import (
|
35
35
|
BUTTONMATRIX_BUTTON_SCHEMA,
|
@@ -119,6 +119,7 @@ async def msgbox_to_code(top_layer, conf):
|
|
119
119
|
button_style = {CONF_ITEMS: button_style}
|
120
120
|
await set_obj_properties(buttonmatrix_widget, button_style)
|
121
121
|
await set_obj_properties(msgbox_widget, conf)
|
122
|
+
await add_widgets(msgbox_widget, conf)
|
122
123
|
async with LambdaContext(EVENT_ARG, where=messagebox_id) as close_action:
|
123
124
|
outer_widget.add_flag("LV_OBJ_FLAG_HIDDEN")
|
124
125
|
if close_button:
|
@@ -6,7 +6,7 @@
|
|
6
6
|
namespace esphome {
|
7
7
|
namespace matrix_keypad {
|
8
8
|
|
9
|
-
class MatrixKeypadBinarySensor : public MatrixKeypadListener, public binary_sensor::
|
9
|
+
class MatrixKeypadBinarySensor : public MatrixKeypadListener, public binary_sensor::BinarySensorInitiallyOff {
|
10
10
|
public:
|
11
11
|
MatrixKeypadBinarySensor(uint8_t key) : has_key_(true), key_(key){};
|
12
12
|
MatrixKeypadBinarySensor(const char *key) : has_key_(true), key_((uint8_t) key[0]){};
|
@@ -38,8 +38,9 @@ void Modbus::loop() {
|
|
38
38
|
|
39
39
|
// stop blocking new send commands after sent_wait_time_ ms after response received
|
40
40
|
if (now - this->last_send_ > send_wait_time_) {
|
41
|
-
if (waiting_for_response > 0)
|
41
|
+
if (waiting_for_response > 0) {
|
42
42
|
ESP_LOGV(TAG, "Stop waiting for response from %d", waiting_for_response);
|
43
|
+
}
|
43
44
|
waiting_for_response = 0;
|
44
45
|
}
|
45
46
|
}
|
@@ -163,7 +163,7 @@ CONFIG_SCHEMA = cv.All(
|
|
163
163
|
),
|
164
164
|
cv.Optional(CONF_ON_OFFLINE): automation.validate_automation(
|
165
165
|
{
|
166
|
-
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
166
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ModbusOfflineTrigger),
|
167
167
|
}
|
168
168
|
),
|
169
169
|
}
|
@@ -622,51 +622,87 @@ int64_t payload_to_number(const std::vector<uint8_t> &data, SensorValueType sens
|
|
622
622
|
uint32_t bitmask) {
|
623
623
|
int64_t value = 0; // int64_t because it can hold signed and unsigned 32 bits
|
624
624
|
|
625
|
+
size_t size = data.size() - offset;
|
626
|
+
bool error = false;
|
625
627
|
switch (sensor_value_type) {
|
626
628
|
case SensorValueType::U_WORD:
|
627
|
-
|
629
|
+
if (size >= 2) {
|
630
|
+
value = mask_and_shift_by_rightbit(get_data<uint16_t>(data, offset), bitmask); // default is 0xFFFF ;
|
631
|
+
} else {
|
632
|
+
error = true;
|
633
|
+
}
|
628
634
|
break;
|
629
635
|
case SensorValueType::U_DWORD:
|
630
636
|
case SensorValueType::FP32:
|
631
|
-
|
632
|
-
|
637
|
+
if (size >= 4) {
|
638
|
+
value = get_data<uint32_t>(data, offset);
|
639
|
+
value = mask_and_shift_by_rightbit((uint32_t) value, bitmask);
|
640
|
+
} else {
|
641
|
+
error = true;
|
642
|
+
}
|
633
643
|
break;
|
634
644
|
case SensorValueType::U_DWORD_R:
|
635
645
|
case SensorValueType::FP32_R:
|
636
|
-
|
637
|
-
|
638
|
-
|
646
|
+
if (size >= 4) {
|
647
|
+
value = get_data<uint32_t>(data, offset);
|
648
|
+
value = static_cast<uint32_t>(value & 0xFFFF) << 16 | (value & 0xFFFF0000) >> 16;
|
649
|
+
value = mask_and_shift_by_rightbit((uint32_t) value, bitmask);
|
650
|
+
} else {
|
651
|
+
error = true;
|
652
|
+
}
|
639
653
|
break;
|
640
654
|
case SensorValueType::S_WORD:
|
641
|
-
|
642
|
-
|
655
|
+
if (size >= 2) {
|
656
|
+
value = mask_and_shift_by_rightbit(get_data<int16_t>(data, offset),
|
657
|
+
bitmask); // default is 0xFFFF ;
|
658
|
+
} else {
|
659
|
+
error = true;
|
660
|
+
}
|
643
661
|
break;
|
644
662
|
case SensorValueType::S_DWORD:
|
645
|
-
|
663
|
+
if (size >= 4) {
|
664
|
+
value = mask_and_shift_by_rightbit(get_data<int32_t>(data, offset), bitmask);
|
665
|
+
} else {
|
666
|
+
error = true;
|
667
|
+
}
|
646
668
|
break;
|
647
669
|
case SensorValueType::S_DWORD_R: {
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
670
|
+
if (size >= 4) {
|
671
|
+
value = get_data<uint32_t>(data, offset);
|
672
|
+
// Currently the high word is at the low position
|
673
|
+
// the sign bit is therefore at low before the switch
|
674
|
+
uint32_t sign_bit = (value & 0x8000) << 16;
|
675
|
+
value = mask_and_shift_by_rightbit(
|
676
|
+
static_cast<int32_t>(((value & 0x7FFF) << 16 | (value & 0xFFFF0000) >> 16) | sign_bit), bitmask);
|
677
|
+
} else {
|
678
|
+
error = true;
|
679
|
+
}
|
654
680
|
} break;
|
655
681
|
case SensorValueType::U_QWORD:
|
656
682
|
case SensorValueType::S_QWORD:
|
657
683
|
// Ignore bitmask for QWORD
|
658
|
-
|
684
|
+
if (size >= 8) {
|
685
|
+
value = get_data<uint64_t>(data, offset);
|
686
|
+
} else {
|
687
|
+
error = true;
|
688
|
+
}
|
659
689
|
break;
|
660
690
|
case SensorValueType::U_QWORD_R:
|
661
691
|
case SensorValueType::S_QWORD_R: {
|
662
692
|
// Ignore bitmask for QWORD
|
663
|
-
|
664
|
-
|
693
|
+
if (size >= 8) {
|
694
|
+
uint64_t tmp = get_data<uint64_t>(data, offset);
|
695
|
+
value = (tmp << 48) | (tmp >> 48) | ((tmp & 0xFFFF0000) << 16) | ((tmp >> 16) & 0xFFFF0000);
|
696
|
+
} else {
|
697
|
+
error = true;
|
698
|
+
}
|
665
699
|
} break;
|
666
700
|
case SensorValueType::RAW:
|
667
701
|
default:
|
668
702
|
break;
|
669
703
|
}
|
704
|
+
if (error)
|
705
|
+
ESP_LOGE(TAG, "not enough data for value");
|
670
706
|
return value;
|
671
707
|
}
|
672
708
|
|
@@ -49,6 +49,10 @@ void PngDecoder::prepare(uint32_t download_size) {
|
|
49
49
|
}
|
50
50
|
|
51
51
|
int HOT PngDecoder::decode(uint8_t *buffer, size_t size) {
|
52
|
+
if (!this->pngle_) {
|
53
|
+
ESP_LOGE(TAG, "PNG decoder engine not initialized!");
|
54
|
+
return -1;
|
55
|
+
}
|
52
56
|
if (size < 256 && size < this->download_size_ - this->decoded_bytes_) {
|
53
57
|
ESP_LOGD(TAG, "Waiting for data");
|
54
58
|
return 0;
|
@@ -138,7 +138,7 @@ OpenthermHub::OpenthermHub() : Component(), in_pin_{}, out_pin_{} {}
|
|
138
138
|
void OpenthermHub::process_response(OpenthermData &data) {
|
139
139
|
ESP_LOGD(TAG, "Received OpenTherm response with id %d (%s)", data.id,
|
140
140
|
this->opentherm_->message_id_to_str((MessageId) data.id));
|
141
|
-
|
141
|
+
this->opentherm_->debug_data(data);
|
142
142
|
|
143
143
|
switch (data.id) {
|
144
144
|
OPENTHERM_SENSOR_MESSAGE_HANDLERS(OPENTHERM_MESSAGE_RESPONSE_MESSAGE, OPENTHERM_MESSAGE_RESPONSE_ENTITY, ,
|
@@ -315,7 +315,7 @@ void OpenthermHub::start_conversation_() {
|
|
315
315
|
|
316
316
|
ESP_LOGD(TAG, "Sending request with id %d (%s)", request.id,
|
317
317
|
this->opentherm_->message_id_to_str((MessageId) request.id));
|
318
|
-
|
318
|
+
this->opentherm_->debug_data(request);
|
319
319
|
// Send the request
|
320
320
|
this->last_conversation_start_ = millis();
|
321
321
|
this->opentherm_->send(request);
|
@@ -340,19 +340,18 @@ void OpenthermHub::stop_opentherm_() {
|
|
340
340
|
this->opentherm_->stop();
|
341
341
|
this->last_conversation_end_ = millis();
|
342
342
|
}
|
343
|
-
|
344
343
|
void OpenthermHub::handle_protocol_write_error_() {
|
345
344
|
ESP_LOGW(TAG, "Error while sending request: %s",
|
346
345
|
this->opentherm_->operation_mode_to_str(this->opentherm_->get_mode()));
|
347
|
-
|
346
|
+
this->opentherm_->debug_data(this->last_request_);
|
348
347
|
}
|
349
|
-
|
350
348
|
void OpenthermHub::handle_protocol_read_error_() {
|
351
349
|
OpenThermError error;
|
352
350
|
this->opentherm_->get_protocol_error(error);
|
353
|
-
ESP_LOGW(TAG, "Protocol error occured while receiving response: %s",
|
351
|
+
ESP_LOGW(TAG, "Protocol error occured while receiving response: %s",
|
352
|
+
this->opentherm_->protocol_error_to_to_str(error.error_type));
|
353
|
+
this->opentherm_->debug_error(error);
|
354
354
|
}
|
355
|
-
|
356
355
|
void OpenthermHub::handle_timeout_error_() {
|
357
356
|
ESP_LOGW(TAG, "Receive response timed out at a protocol level");
|
358
357
|
this->stop_opentherm_();
|
@@ -15,15 +15,11 @@
|
|
15
15
|
#include "Arduino.h"
|
16
16
|
#endif
|
17
17
|
#include <string>
|
18
|
-
#include <sstream>
|
19
|
-
#include <bitset>
|
20
18
|
|
21
19
|
namespace esphome {
|
22
20
|
namespace opentherm {
|
23
21
|
|
24
22
|
using std::string;
|
25
|
-
using std::bitset;
|
26
|
-
using std::stringstream;
|
27
23
|
using std::to_string;
|
28
24
|
|
29
25
|
static const char *const TAG = "opentherm";
|
@@ -224,7 +220,7 @@ void IRAM_ATTR OpenTherm::bit_read_(uint8_t value) {
|
|
224
220
|
this->bit_pos_++;
|
225
221
|
}
|
226
222
|
|
227
|
-
ProtocolErrorType OpenTherm::verify_stop_bit_(uint8_t value) {
|
223
|
+
ProtocolErrorType IRAM_ATTR OpenTherm::verify_stop_bit_(uint8_t value) {
|
228
224
|
if (value) { // stop bit detected
|
229
225
|
return check_parity_(this->data_) ? ProtocolErrorType::NO_ERROR : ProtocolErrorType::PARITY_ERROR;
|
230
226
|
} else { // no stop bit detected, error
|
@@ -369,7 +365,7 @@ void IRAM_ATTR OpenTherm::stop_timer_() {
|
|
369
365
|
|
370
366
|
#ifdef ESP8266
|
371
367
|
// 5 kHz timer_
|
372
|
-
void OpenTherm::start_read_timer_() {
|
368
|
+
void IRAM_ATTR OpenTherm::start_read_timer_() {
|
373
369
|
InterruptLock const lock;
|
374
370
|
timer1_attachInterrupt(OpenTherm::esp8266_timer_isr);
|
375
371
|
timer1_enable(TIM_DIV16, TIM_EDGE, TIM_LOOP); // 5MHz (5 ticks/us - 1677721.4 us max)
|
@@ -377,14 +373,14 @@ void OpenTherm::start_read_timer_() {
|
|
377
373
|
}
|
378
374
|
|
379
375
|
// 2 kHz timer_
|
380
|
-
void OpenTherm::start_write_timer_() {
|
376
|
+
void IRAM_ATTR OpenTherm::start_write_timer_() {
|
381
377
|
InterruptLock const lock;
|
382
378
|
timer1_attachInterrupt(OpenTherm::esp8266_timer_isr);
|
383
379
|
timer1_enable(TIM_DIV16, TIM_EDGE, TIM_LOOP); // 5MHz (5 ticks/us - 1677721.4 us max)
|
384
380
|
timer1_write(2500); // 2kHz
|
385
381
|
}
|
386
382
|
|
387
|
-
void OpenTherm::stop_timer_() {
|
383
|
+
void IRAM_ATTR OpenTherm::stop_timer_() {
|
388
384
|
InterruptLock const lock;
|
389
385
|
timer1_disable();
|
390
386
|
timer1_detachInterrupt();
|
@@ -393,7 +389,7 @@ void OpenTherm::stop_timer_() {
|
|
393
389
|
#endif // END ESP8266
|
394
390
|
|
395
391
|
// https://stackoverflow.com/questions/21617970/how-to-check-if-value-has-even-parity-of-bits-or-odd
|
396
|
-
bool OpenTherm::check_parity_(uint32_t val) {
|
392
|
+
bool IRAM_ATTR OpenTherm::check_parity_(uint32_t val) {
|
397
393
|
val ^= val >> 16;
|
398
394
|
val ^= val >> 8;
|
399
395
|
val ^= val >> 4;
|
@@ -545,29 +541,17 @@ const char *OpenTherm::message_id_to_str(MessageId id) {
|
|
545
541
|
}
|
546
542
|
}
|
547
543
|
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
result << "LB: " << to_string(data.valueLB) << "; ";
|
556
|
-
result << "uint_16: " << to_string(data.u16()) << "; ";
|
557
|
-
result << "float: " << to_string(data.f88());
|
558
|
-
|
559
|
-
return result.str();
|
544
|
+
void OpenTherm::debug_data(OpenthermData &data) {
|
545
|
+
ESP_LOGD(TAG, "%s %s %s %s", format_bin(data.type).c_str(), format_bin(data.id).c_str(),
|
546
|
+
format_bin(data.valueHB).c_str(), format_bin(data.valueLB).c_str());
|
547
|
+
ESP_LOGD(TAG, "type: %s; id: %s; HB: %s; LB: %s; uint_16: %s; float: %s",
|
548
|
+
this->message_type_to_str((MessageType) data.type), to_string(data.id).c_str(),
|
549
|
+
to_string(data.valueHB).c_str(), to_string(data.valueLB).c_str(), to_string(data.u16()).c_str(),
|
550
|
+
to_string(data.f88()).c_str());
|
560
551
|
}
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
result << "data: ";
|
565
|
-
result << format_hex(error.data);
|
566
|
-
result << "; clock: " << to_string(clock_);
|
567
|
-
result << "; capture: " << bitset<32>(error.capture);
|
568
|
-
result << "; bit_pos: " << to_string(error.bit_pos);
|
569
|
-
|
570
|
-
return result.str();
|
552
|
+
void OpenTherm::debug_error(OpenThermError &error) const {
|
553
|
+
ESP_LOGD(TAG, "data: %s; clock: %s; capture: %s; bit_pos: %s", format_hex(error.data).c_str(),
|
554
|
+
to_string(clock_).c_str(), format_bin(error.capture).c_str(), to_string(error.bit_pos).c_str());
|
571
555
|
}
|
572
556
|
|
573
557
|
float OpenthermData::f88() { return ((float) this->s16()) / 256.0; }
|
@@ -8,10 +8,9 @@
|
|
8
8
|
#pragma once
|
9
9
|
|
10
10
|
#include <string>
|
11
|
-
#include <sstream>
|
12
|
-
#include <iomanip>
|
13
11
|
#include "esphome/core/hal.h"
|
14
12
|
#include "esphome/core/log.h"
|
13
|
+
#include "esphome/core/helpers.h"
|
15
14
|
|
16
15
|
#if defined(ESP32) || defined(USE_ESP_IDF)
|
17
16
|
#include "driver/timer.h"
|
@@ -318,8 +317,8 @@ class OpenTherm {
|
|
318
317
|
|
319
318
|
OperationMode get_mode() { return mode_; }
|
320
319
|
|
321
|
-
|
322
|
-
|
320
|
+
void debug_data(OpenthermData &data);
|
321
|
+
void debug_error(OpenThermError &error) const;
|
323
322
|
|
324
323
|
const char *protocol_error_to_to_str(ProtocolErrorType error_type);
|
325
324
|
const char *message_type_to_str(MessageType message_type);
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# Commands
|
2
2
|
SW_RESET_CMD = 0x01
|
3
3
|
SLEEP_OUT = 0x11
|
4
|
+
NORON = 0x13
|
4
5
|
INVERT_OFF = 0x20
|
5
6
|
INVERT_ON = 0x21
|
6
7
|
ALL_ON = 0x23
|
@@ -56,6 +57,7 @@ chip.cmd(0xC2, 0x00)
|
|
56
57
|
chip.delay(10)
|
57
58
|
chip.cmd(TEON, 0x00)
|
58
59
|
chip.cmd(PIXFMT, 0x55)
|
60
|
+
chip.cmd(NORON)
|
59
61
|
|
60
62
|
chip = DriverChip("AXS15231")
|
61
63
|
chip.cmd(0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA5)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#include "st7920.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
|
-
#include "esphome/core/application.h"
|
4
2
|
#include "esphome/components/display/display_buffer.h"
|
3
|
+
#include "esphome/core/application.h"
|
4
|
+
#include "esphome/core/log.h"
|
5
5
|
|
6
6
|
namespace esphome {
|
7
7
|
namespace st7920 {
|
@@ -118,7 +118,6 @@ size_t ST7920::get_buffer_length_() {
|
|
118
118
|
|
119
119
|
void HOT ST7920::draw_absolute_pixel_internal(int x, int y, Color color) {
|
120
120
|
if (x >= this->get_width_internal() || x < 0 || y >= this->get_height_internal() || y < 0) {
|
121
|
-
ESP_LOGW(TAG, "Position out of area: %dx%d", x, y);
|
122
121
|
return;
|
123
122
|
}
|
124
123
|
int width = this->get_width_internal() / 8u;
|
@@ -137,8 +137,16 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|
137
137
|
// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv417wifi_sta_config_t
|
138
138
|
wifi_config_t conf;
|
139
139
|
memset(&conf, 0, sizeof(conf));
|
140
|
-
|
141
|
-
|
140
|
+
if (ap.get_ssid().size() > sizeof(conf.sta.ssid)) {
|
141
|
+
ESP_LOGE(TAG, "SSID is too long");
|
142
|
+
return false;
|
143
|
+
}
|
144
|
+
if (ap.get_password().size() > sizeof(conf.sta.password)) {
|
145
|
+
ESP_LOGE(TAG, "password is too long");
|
146
|
+
return false;
|
147
|
+
}
|
148
|
+
memcpy(reinterpret_cast<char *>(conf.sta.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
149
|
+
memcpy(reinterpret_cast<char *>(conf.sta.password), ap.get_password().c_str(), ap.get_password().size());
|
142
150
|
|
143
151
|
// The weakest authmode to accept in the fast scan mode
|
144
152
|
if (ap.get_password().empty()) {
|
@@ -746,7 +754,11 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
746
754
|
|
747
755
|
wifi_config_t conf;
|
748
756
|
memset(&conf, 0, sizeof(conf));
|
749
|
-
|
757
|
+
if (ap.get_ssid().size() > sizeof(conf.ap.ssid)) {
|
758
|
+
ESP_LOGE(TAG, "AP SSID is too long");
|
759
|
+
return false;
|
760
|
+
}
|
761
|
+
memcpy(reinterpret_cast<char *>(conf.ap.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
750
762
|
conf.ap.channel = ap.get_channel().value_or(1);
|
751
763
|
conf.ap.ssid_hidden = ap.get_ssid().size();
|
752
764
|
conf.ap.max_connection = 5;
|
@@ -757,7 +769,11 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
757
769
|
*conf.ap.password = 0;
|
758
770
|
} else {
|
759
771
|
conf.ap.authmode = WIFI_AUTH_WPA2_PSK;
|
760
|
-
|
772
|
+
if (ap.get_password().size() > sizeof(conf.ap.password)) {
|
773
|
+
ESP_LOGE(TAG, "AP password is too long");
|
774
|
+
return false;
|
775
|
+
}
|
776
|
+
memcpy(reinterpret_cast<char *>(conf.ap.password), ap.get_password().c_str(), ap.get_password().size());
|
761
777
|
}
|
762
778
|
|
763
779
|
// pairwise cipher of SoftAP, group cipher will be derived using this.
|
@@ -236,8 +236,16 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|
236
236
|
|
237
237
|
struct station_config conf {};
|
238
238
|
memset(&conf, 0, sizeof(conf));
|
239
|
-
|
240
|
-
|
239
|
+
if (ap.get_ssid().size() > sizeof(conf.ssid)) {
|
240
|
+
ESP_LOGE(TAG, "SSID is too long");
|
241
|
+
return false;
|
242
|
+
}
|
243
|
+
if (ap.get_password().size() > sizeof(conf.password)) {
|
244
|
+
ESP_LOGE(TAG, "password is too long");
|
245
|
+
return false;
|
246
|
+
}
|
247
|
+
memcpy(reinterpret_cast<char *>(conf.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
248
|
+
memcpy(reinterpret_cast<char *>(conf.password), ap.get_password().c_str(), ap.get_password().size());
|
241
249
|
|
242
250
|
if (ap.get_bssid().has_value()) {
|
243
251
|
conf.bssid_set = 1;
|
@@ -775,7 +783,11 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
775
783
|
return false;
|
776
784
|
|
777
785
|
struct softap_config conf {};
|
778
|
-
|
786
|
+
if (ap.get_ssid().size() > sizeof(conf.ssid)) {
|
787
|
+
ESP_LOGE(TAG, "AP SSID is too long");
|
788
|
+
return false;
|
789
|
+
}
|
790
|
+
memcpy(reinterpret_cast<char *>(conf.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
779
791
|
conf.ssid_len = static_cast<uint8>(ap.get_ssid().size());
|
780
792
|
conf.channel = ap.get_channel().value_or(1);
|
781
793
|
conf.ssid_hidden = ap.get_hidden();
|
@@ -787,7 +799,11 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
787
799
|
*conf.password = 0;
|
788
800
|
} else {
|
789
801
|
conf.authmode = AUTH_WPA2_PSK;
|
790
|
-
|
802
|
+
if (ap.get_password().size() > sizeof(conf.password)) {
|
803
|
+
ESP_LOGE(TAG, "AP password is too long");
|
804
|
+
return false;
|
805
|
+
}
|
806
|
+
memcpy(reinterpret_cast<char *>(conf.password), ap.get_password().c_str(), ap.get_password().size());
|
791
807
|
}
|
792
808
|
|
793
809
|
ETS_UART_INTR_DISABLE();
|
@@ -289,8 +289,16 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|
289
289
|
// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv417wifi_sta_config_t
|
290
290
|
wifi_config_t conf;
|
291
291
|
memset(&conf, 0, sizeof(conf));
|
292
|
-
|
293
|
-
|
292
|
+
if (ap.get_ssid().size() > sizeof(conf.sta.ssid)) {
|
293
|
+
ESP_LOGE(TAG, "SSID is too long");
|
294
|
+
return false;
|
295
|
+
}
|
296
|
+
if (ap.get_password().size() > sizeof(conf.sta.password)) {
|
297
|
+
ESP_LOGE(TAG, "password is too long");
|
298
|
+
return false;
|
299
|
+
}
|
300
|
+
memcpy(reinterpret_cast<char *>(conf.sta.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
301
|
+
memcpy(reinterpret_cast<char *>(conf.sta.password), ap.get_password().c_str(), ap.get_password().size());
|
294
302
|
|
295
303
|
// The weakest authmode to accept in the fast scan mode
|
296
304
|
if (ap.get_password().empty()) {
|
@@ -902,7 +910,11 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
902
910
|
|
903
911
|
wifi_config_t conf;
|
904
912
|
memset(&conf, 0, sizeof(conf));
|
905
|
-
|
913
|
+
if (ap.get_ssid().size() > sizeof(conf.ap.ssid)) {
|
914
|
+
ESP_LOGE(TAG, "AP SSID is too long");
|
915
|
+
return false;
|
916
|
+
}
|
917
|
+
memcpy(reinterpret_cast<char *>(conf.ap.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
906
918
|
conf.ap.channel = ap.get_channel().value_or(1);
|
907
919
|
conf.ap.ssid_hidden = ap.get_ssid().size();
|
908
920
|
conf.ap.max_connection = 5;
|
@@ -913,7 +925,11 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
913
925
|
*conf.ap.password = 0;
|
914
926
|
} else {
|
915
927
|
conf.ap.authmode = WIFI_AUTH_WPA2_PSK;
|
916
|
-
|
928
|
+
if (ap.get_password().size() > sizeof(conf.ap.password)) {
|
929
|
+
ESP_LOGE(TAG, "AP password is too long");
|
930
|
+
return false;
|
931
|
+
}
|
932
|
+
memcpy(reinterpret_cast<char *>(conf.ap.password), ap.get_password().c_str(), ap.get_password().size());
|
917
933
|
}
|
918
934
|
|
919
935
|
// pairwise cipher of SoftAP, group cipher will be derived using this.
|
esphome/const.py
CHANGED
esphome/core/helpers.cpp
CHANGED
@@ -397,6 +397,18 @@ std::string format_hex_pretty(const uint16_t *data, size_t length) {
|
|
397
397
|
}
|
398
398
|
std::string format_hex_pretty(const std::vector<uint16_t> &data) { return format_hex_pretty(data.data(), data.size()); }
|
399
399
|
|
400
|
+
std::string format_bin(const uint8_t *data, size_t length) {
|
401
|
+
std::string result;
|
402
|
+
result.resize(length * 8);
|
403
|
+
for (size_t byte_idx = 0; byte_idx < length; byte_idx++) {
|
404
|
+
for (size_t bit_idx = 0; bit_idx < 8; bit_idx++) {
|
405
|
+
result[byte_idx * 8 + bit_idx] = ((data[byte_idx] >> (7 - bit_idx)) & 1) + '0';
|
406
|
+
}
|
407
|
+
}
|
408
|
+
|
409
|
+
return result;
|
410
|
+
}
|
411
|
+
|
400
412
|
ParseOnOffState parse_on_off(const char *str, const char *on, const char *off) {
|
401
413
|
if (on == nullptr && strcasecmp(str, "on") == 0)
|
402
414
|
return PARSE_ON;
|
esphome/core/helpers.h
CHANGED
@@ -420,6 +420,14 @@ template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0> std::stri
|
|
420
420
|
return format_hex_pretty(reinterpret_cast<uint8_t *>(&val), sizeof(T));
|
421
421
|
}
|
422
422
|
|
423
|
+
/// Format the byte array \p data of length \p len in binary.
|
424
|
+
std::string format_bin(const uint8_t *data, size_t length);
|
425
|
+
/// Format an unsigned integer in binary, starting with the most significant byte.
|
426
|
+
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0> std::string format_bin(T val) {
|
427
|
+
val = convert_big_endian(val);
|
428
|
+
return format_bin(reinterpret_cast<uint8_t *>(&val), sizeof(T));
|
429
|
+
}
|
430
|
+
|
423
431
|
/// Return values for parse_on_off().
|
424
432
|
enum ParseOnOffState {
|
425
433
|
PARSE_NONE = 0,
|
esphome/core/time.cpp
CHANGED
@@ -5,20 +5,18 @@
|
|
5
5
|
|
6
6
|
namespace esphome {
|
7
7
|
|
8
|
-
bool is_leap_year(uint32_t year) { return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0); }
|
9
|
-
|
10
8
|
uint8_t days_in_month(uint8_t month, uint16_t year) {
|
11
9
|
static const uint8_t DAYS_IN_MONTH[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
12
|
-
|
13
|
-
if (month == 2 && is_leap_year(year))
|
10
|
+
if (month == 2 && (year % 4 == 0))
|
14
11
|
return 29;
|
15
|
-
return
|
12
|
+
return DAYS_IN_MONTH[month];
|
16
13
|
}
|
17
14
|
|
18
15
|
size_t ESPTime::strftime(char *buffer, size_t buffer_len, const char *format) {
|
19
16
|
struct tm c_tm = this->to_c_tm();
|
20
17
|
return ::strftime(buffer, buffer_len, format, &c_tm);
|
21
18
|
}
|
19
|
+
|
22
20
|
ESPTime ESPTime::from_c_tm(struct tm *c_tm, time_t c_time) {
|
23
21
|
ESPTime res{};
|
24
22
|
res.second = uint8_t(c_tm->tm_sec);
|
@@ -33,6 +31,7 @@ ESPTime ESPTime::from_c_tm(struct tm *c_tm, time_t c_time) {
|
|
33
31
|
res.timestamp = c_time;
|
34
32
|
return res;
|
35
33
|
}
|
34
|
+
|
36
35
|
struct tm ESPTime::to_c_tm() {
|
37
36
|
struct tm c_tm {};
|
38
37
|
c_tm.tm_sec = this->second;
|
@@ -46,6 +45,7 @@ struct tm ESPTime::to_c_tm() {
|
|
46
45
|
c_tm.tm_isdst = this->is_dst;
|
47
46
|
return c_tm;
|
48
47
|
}
|
48
|
+
|
49
49
|
std::string ESPTime::strftime(const std::string &format) {
|
50
50
|
std::string timestr;
|
51
51
|
timestr.resize(format.size() * 4);
|
@@ -142,6 +142,7 @@ void ESPTime::increment_second() {
|
|
142
142
|
this->year++;
|
143
143
|
}
|
144
144
|
}
|
145
|
+
|
145
146
|
void ESPTime::increment_day() {
|
146
147
|
this->timestamp += 86400;
|
147
148
|
|
@@ -159,23 +160,22 @@ void ESPTime::increment_day() {
|
|
159
160
|
this->year++;
|
160
161
|
}
|
161
162
|
}
|
163
|
+
|
162
164
|
void ESPTime::recalc_timestamp_utc(bool use_day_of_year) {
|
163
165
|
time_t res = 0;
|
164
|
-
|
165
166
|
if (!this->fields_in_range()) {
|
166
167
|
this->timestamp = -1;
|
167
168
|
return;
|
168
169
|
}
|
169
170
|
|
170
171
|
for (int i = 1970; i < this->year; i++)
|
171
|
-
res +=
|
172
|
+
res += (i % 4 == 0) ? 366 : 365;
|
172
173
|
|
173
174
|
if (use_day_of_year) {
|
174
175
|
res += this->day_of_year - 1;
|
175
176
|
} else {
|
176
177
|
for (int i = 1; i < this->month; i++)
|
177
178
|
res += days_in_month(i, this->year);
|
178
|
-
|
179
179
|
res += this->day_of_month - 1;
|
180
180
|
}
|
181
181
|
|
@@ -188,13 +188,17 @@ void ESPTime::recalc_timestamp_utc(bool use_day_of_year) {
|
|
188
188
|
this->timestamp = res;
|
189
189
|
}
|
190
190
|
|
191
|
-
void ESPTime::recalc_timestamp_local(
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
191
|
+
void ESPTime::recalc_timestamp_local() {
|
192
|
+
struct tm tm;
|
193
|
+
|
194
|
+
tm.tm_year = this->year - 1900;
|
195
|
+
tm.tm_mon = this->month - 1;
|
196
|
+
tm.tm_mday = this->day_of_month;
|
197
|
+
tm.tm_hour = this->hour;
|
198
|
+
tm.tm_min = this->minute;
|
199
|
+
tm.tm_sec = this->second;
|
200
|
+
|
201
|
+
this->timestamp = mktime(&tm);
|
198
202
|
}
|
199
203
|
|
200
204
|
int32_t ESPTime::timezone_offset() {
|
esphome/core/time.h
CHANGED
@@ -9,8 +9,6 @@ namespace esphome {
|
|
9
9
|
|
10
10
|
template<typename T> bool increment_time_value(T ¤t, uint16_t begin, uint16_t end);
|
11
11
|
|
12
|
-
bool is_leap_year(uint32_t year);
|
13
|
-
|
14
12
|
uint8_t days_in_month(uint8_t month, uint16_t year);
|
15
13
|
|
16
14
|
/// A more user-friendly version of struct tm from time.h
|
@@ -100,7 +98,7 @@ struct ESPTime {
|
|
100
98
|
void recalc_timestamp_utc(bool use_day_of_year = true);
|
101
99
|
|
102
100
|
/// Recalculate the timestamp field from the other fields of this ESPTime instance assuming local fields.
|
103
|
-
void recalc_timestamp_local(
|
101
|
+
void recalc_timestamp_local();
|
104
102
|
|
105
103
|
/// Convert this ESPTime instance back to a tm struct.
|
106
104
|
struct tm to_c_tm();
|
@@ -1,11 +1,11 @@
|
|
1
1
|
esphome/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
esphome/__main__.py,sha256=
|
2
|
+
esphome/__main__.py,sha256=3Z8bUb-vZ-UD2mr88yLxMD4PSboeqMPtGcxq58xTCUw,31133
|
3
3
|
esphome/automation.py,sha256=9xmW3AmWDd2oKB7zF-UITYIiSci8ys8qiylK-rcU7Rg,15689
|
4
4
|
esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
|
5
5
|
esphome/config.py,sha256=nOiXPZv8wHtmytkNlGcewp0uuJd9G5rRjkqevYXtjzo,39618
|
6
6
|
esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
|
7
7
|
esphome/config_validation.py,sha256=RaF7hC9-VwtWA8C6vYaKVzyz4XqeoOOajr3EJDnaBaI,66311
|
8
|
-
esphome/const.py,sha256=
|
8
|
+
esphome/const.py,sha256=6lL20ACCfaDhvLkJ5Pd2nLGL_x7xh5s2pLlf631e5go,40259
|
9
9
|
esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
|
10
10
|
esphome/cpp_generator.py,sha256=lXPXHYUsFIvBSAoZ93mXYlGcXYg5L18nTtYGHE4_rr8,31203
|
11
11
|
esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
|
@@ -301,7 +301,7 @@ esphome/components/binary_sensor/__init__.py,sha256=B9P32IzsFQIAKZrsWJi4hd28PVNV
|
|
301
301
|
esphome/components/binary_sensor/automation.cpp,sha256=oTQ2zjqYwNhJiY6IQ7qBQgJ3XUz2TNZqfn6TqEZ-_l0,4201
|
302
302
|
esphome/components/binary_sensor/automation.h,sha256=5W8ExbRo-zbiwrjPXmYJdDmpi39x76XP8ae_Vjmxprg,4611
|
303
303
|
esphome/components/binary_sensor/binary_sensor.cpp,sha256=6H8ycTYJO8Wpr_T8-3a5LUK4FuFFtmR_1awMAkp9lWY,1924
|
304
|
-
esphome/components/binary_sensor/binary_sensor.h,sha256=
|
304
|
+
esphome/components/binary_sensor/binary_sensor.h,sha256=u9tZYhlp-27ZT480Uq2yJBoNC6gTLepFmMfD0JLTM-0,2727
|
305
305
|
esphome/components/binary_sensor/filter.cpp,sha256=Gc45eMmI-TS7gzCF_PhtPwJJjb7NBckWSfY_H1DK-xI,4240
|
306
306
|
esphome/components/binary_sensor/filter.h,sha256=ko00IiyMD5g2lRpPNZb36czAHRy_iK5YcBW6UQPZHz0,2968
|
307
307
|
esphome/components/binary_sensor_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -625,7 +625,7 @@ esphome/components/datetime/__init__.py,sha256=H0BIMfaUhbNlh6HglQf9w5noYQBBX_ZAv
|
|
625
625
|
esphome/components/datetime/date_entity.cpp,sha256=UieYXahuBlffSwaMz2n1ce_bZvrXi14dIjhmsxkRcrY,3690
|
626
626
|
esphome/components/datetime/date_entity.h,sha256=72vM34Ap7iUPoOtGMpudEQ_4489zY13UHhX3tzZopiY,2584
|
627
627
|
esphome/components/datetime/datetime_base.h,sha256=TnyfE4Av_Tz0O_H2MHc_TCIqlRJ1YYyleBJbeTIkrxg,1197
|
628
|
-
esphome/components/datetime/datetime_entity.cpp,sha256=
|
628
|
+
esphome/components/datetime/datetime_entity.cpp,sha256=LBwEFGBgnxaHcr87sBuW0Edt6ABvEE3SKtN5eGHGzXU,7742
|
629
629
|
esphome/components/datetime/datetime_entity.h,sha256=qN4CuohdTVq5g0VKrl8whUE1FjFFvIqlxTCOzzDNfws,3742
|
630
630
|
esphome/components/datetime/time_entity.cpp,sha256=k9ZEtOs4SIO3GCwc-SmKExwYiiyDDqra5Lxw6b7fW2M,4403
|
631
631
|
esphome/components/datetime/time_entity.h,sha256=rNN9V8UH4ervs03lsuvR233dD13LYceAy597vXbURcY,2915
|
@@ -767,7 +767,7 @@ esphome/components/es8311/audio_dac.py,sha256=aGpvvL4ftBaYMACjvL9RbGXi9iwEvuv97e
|
|
767
767
|
esphome/components/es8311/es8311.cpp,sha256=ueFDZsNbpY9w9us6MBa7nldqRFXc969wzGpjFIk7NyY,7029
|
768
768
|
esphome/components/es8311/es8311.h,sha256=XM3joN7HWuFu7Q1EGl7abfknRCyjpIs_KffM_oRM6eY,4680
|
769
769
|
esphome/components/es8311/es8311_const.h,sha256=bUBF4DJ28DcLPHznvh30Guewi65mSqQbqNPK0NiM8fI,12566
|
770
|
-
esphome/components/esp32/__init__.py,sha256=
|
770
|
+
esphome/components/esp32/__init__.py,sha256=qe85wyWtu0Ho0GXUkZ3_kOk3QpeHTmMRsukdWl3dC8s,27569
|
771
771
|
esphome/components/esp32/boards.py,sha256=hfVvFE8LwjrzJlQX9b0yZ53xv9XaF24wctAOE6SYDXY,46903
|
772
772
|
esphome/components/esp32/const.py,sha256=2yxLQg3p2-S3nRL6-zsF_dICrP_6waUfY5k8EFsoyVM,966
|
773
773
|
esphome/components/esp32/core.cpp,sha256=GfidaExP8kU7ODM1S_VI9c3tQtmG2TaKwLJ-zzeSqd4,2413
|
@@ -1127,7 +1127,7 @@ esphome/components/honeywellabp/honeywellabp.cpp,sha256=ZL8OUA2VyjcuFga9Rxw1c0ko
|
|
1127
1127
|
esphome/components/honeywellabp/honeywellabp.h,sha256=yy0ATFdIV4YI_EaCSXKgeRaOPjyzxzch35RrCLthM2Q,1809
|
1128
1128
|
esphome/components/honeywellabp/sensor.py,sha256=FXe0LjBwUElNKSrsob1Jfx1LJEXtfniqztA34tpZ62Q,2233
|
1129
1129
|
esphome/components/honeywellabp2_i2c/__init__.py,sha256=q4EX44dXWVPn_6bcR0pbzsGWt3AGvtFshH-O_T8YfOs,59
|
1130
|
-
esphome/components/honeywellabp2_i2c/honeywellabp2.cpp,sha256=
|
1130
|
+
esphome/components/honeywellabp2_i2c/honeywellabp2.cpp,sha256=Dn8vtVDQxJ4RI0sd6e3xBKZlf7pa0ZqTdM2sDAWJwnA,3602
|
1131
1131
|
esphome/components/honeywellabp2_i2c/honeywellabp2.h,sha256=oKx_nWi07fYioDxWPcNKtzDVKiyqBTvDIdREJoaHfMY,2140
|
1132
1132
|
esphome/components/honeywellabp2_i2c/sensor.py,sha256=RepjqSYlTrq-IgTMhB-y1oBkjAPdEm2uRiCH_zWDMeU,2574
|
1133
1133
|
esphome/components/host/__init__.py,sha256=GXt0D2oYrLC10UJKXle3oZtoEc4HRYDKHVO-pmWXFZA,1190
|
@@ -1457,22 +1457,22 @@ esphome/components/ltr_als_ps/ltr_als_ps.cpp,sha256=a5NBwe7wtJHwLgIDFoollhz1VSDI
|
|
1457
1457
|
esphome/components/ltr_als_ps/ltr_als_ps.h,sha256=TxgTmv7apRGsxHAxDow6-CpkQsdWID2KLk-lSDi7KtQ,6466
|
1458
1458
|
esphome/components/ltr_als_ps/ltr_definitions.h,sha256=yaIvnLQBIBnPuQBvHDD9Q_16Uoq1vnABwsTm8j77a3w,7255
|
1459
1459
|
esphome/components/ltr_als_ps/sensor.py,sha256=0HSnG34wHnaj9s-qRO7tYn5p0rSBlGmVXaVDSG520sg,9980
|
1460
|
-
esphome/components/lvgl/__init__.py,sha256=
|
1460
|
+
esphome/components/lvgl/__init__.py,sha256=6MAh-NMXgsoYxKaURc3KMrk0WQxwa14njGY1Ni24yZM,17415
|
1461
1461
|
esphome/components/lvgl/automation.py,sha256=xFlt6T-qL1WYEFMQ5loHqCjtm2wC_Ml4VPDa1GAxikg,10204
|
1462
|
-
esphome/components/lvgl/defines.py,sha256=
|
1462
|
+
esphome/components/lvgl/defines.py,sha256=lZd-GHPf3-BPm0CIAXqsgbQXplVzdRP588unlshk-I8,13422
|
1463
1463
|
esphome/components/lvgl/encoders.py,sha256=l296tfKdDzhRNPmU1chvAosNRrmBhITlB43OtNVBrRw,3189
|
1464
1464
|
esphome/components/lvgl/font.cpp,sha256=l9dPIw7LdOdtg_3QZErTLLevMc6A66Wfm-1s-6qcBmM,2712
|
1465
1465
|
esphome/components/lvgl/gradient.py,sha256=K60e7b52N8i7aQjkLIsij7OOXmVhBnJnxj4J3zPme4w,1989
|
1466
1466
|
esphome/components/lvgl/hello_world.py,sha256=iwfSWO0TT0CEGN5M_QBY_oKqmYshT69jOBDFTTUyBII,1417
|
1467
1467
|
esphome/components/lvgl/helpers.py,sha256=XI3C5IHwoSVlgR32kMxeXTZWK6iW112nmWv5wByrKLY,1253
|
1468
1468
|
esphome/components/lvgl/keypads.py,sha256=jtQjAG4vbTzI5Pr1IBfrEEPzV_0k4wkKfCMfsef6VT4,2124
|
1469
|
-
esphome/components/lvgl/lv_validation.py,sha256=
|
1469
|
+
esphome/components/lvgl/lv_validation.py,sha256=fss9CHNO4JsWf3VYk9bxPYz0Z2ulx8kzilF4XjNv0bk,13581
|
1470
1470
|
esphome/components/lvgl/lvcode.py,sha256=IkvCq59dR0RYJ-wKeO95zJEX-vNBWUkHEX5tJJfvv-Q,10018
|
1471
1471
|
esphome/components/lvgl/lvgl_esphome.cpp,sha256=6-qhT-eqKkJt1R_xfZUWaVN2Ko5h5zuxB7ewcb3r9_0,19102
|
1472
|
-
esphome/components/lvgl/lvgl_esphome.h,sha256=
|
1472
|
+
esphome/components/lvgl/lvgl_esphome.h,sha256=wl_4lghlBPbbCm8IMC-ujn9gBEMjKrq49XQoWx1gg8s,12055
|
1473
1473
|
esphome/components/lvgl/lvgl_hal.h,sha256=aZqWpSmKKAB-ZfNxxgxjgASTtLpAZjXJKuoTiPB0qqU,431
|
1474
1474
|
esphome/components/lvgl/lvgl_proxy.h,sha256=JPmVBVh5zD5nraJCN7PqXVmQQlc4CPJe_X9tA6IAtXQ,547
|
1475
|
-
esphome/components/lvgl/schemas.py,sha256=
|
1475
|
+
esphome/components/lvgl/schemas.py,sha256=t_tWtSSPwJWnPS8xNVDupo3HOLfkL8PihDatdJWIQOE,14271
|
1476
1476
|
esphome/components/lvgl/styles.py,sha256=oTrJp-Y8lr0fUuVRvYMAFLNJzlW8Y4f9VT3pUq7NYX0,2254
|
1477
1477
|
esphome/components/lvgl/touchscreens.py,sha256=CntwVa1EUu6iBnxfvuv0rCYd_Njmf451CYdRqQyb9N4,1607
|
1478
1478
|
esphome/components/lvgl/trigger.py,sha256=igqFoYZqjgF-XQbGyuEQhFqYsXGq1BadS8CK_M2XTLs,2221
|
@@ -1501,10 +1501,10 @@ esphome/components/lvgl/widgets/img.py,sha256=UE8X_RQhirIgJploL1VNHNuzdhlnhpZz41
|
|
1501
1501
|
esphome/components/lvgl/widgets/keyboard.py,sha256=1WBm_nfeFpWvzYts68FN_arqovOwMFs47TQAPCKour8,1543
|
1502
1502
|
esphome/components/lvgl/widgets/label.py,sha256=5xl1a6apdJgGKmkpL8m7RDASjaeKzjKTllhY26Gbfag,1139
|
1503
1503
|
esphome/components/lvgl/widgets/led.py,sha256=qoe_kvZpoRkwbxz25Z66KQ__KLC2tfhAukChp1jdlDc,888
|
1504
|
-
esphome/components/lvgl/widgets/line.py,sha256=
|
1504
|
+
esphome/components/lvgl/widgets/line.py,sha256=DmW8IL7PRC_aXqFgHigQ_w-7vZ2eNemP4d1z-TmnTsA,1594
|
1505
1505
|
esphome/components/lvgl/widgets/lv_bar.py,sha256=DbiUvhKdh9bsRMTU-rJYYA5KCjBUxDsW-7tvx8-CIRM,1670
|
1506
1506
|
esphome/components/lvgl/widgets/meter.py,sha256=pqSwtQWoyluLKmTSUR1gnsueUDi3lPm4lat8jV3Pi8Q,10985
|
1507
|
-
esphome/components/lvgl/widgets/msgbox.py,sha256=
|
1507
|
+
esphome/components/lvgl/widgets/msgbox.py,sha256=sTU5RreSucFoow1hMojuf2qAWL_IAlAl57I4FfDbAds,5329
|
1508
1508
|
esphome/components/lvgl/widgets/obj.py,sha256=1axn8eUzZFHlDrwmgZyeE5tBChHI9JymfNjBAiFmig0,818
|
1509
1509
|
esphome/components/lvgl/widgets/page.py,sha256=nV9LaXtHPdno2nfOvI6i2yPR5COsJdh7azqg8U5tElA,4957
|
1510
1510
|
esphome/components/lvgl/widgets/qrcode.py,sha256=ZA81FZFRAHu2PZ7MrL-QepQoEmEHL6v2ZjBv-m7PWws,1697
|
@@ -1532,7 +1532,7 @@ esphome/components/matrix_keypad/__init__.py,sha256=CRTWzuhJdPMb-xY5wj26OaQf0RLD
|
|
1532
1532
|
esphome/components/matrix_keypad/matrix_keypad.cpp,sha256=BenTjvW_skypNg6VIS2ysUdvYJNEQ1iUS23sm36EkNA,2984
|
1533
1533
|
esphome/components/matrix_keypad/matrix_keypad.h,sha256=RktGC4bHUNkBS_5svvfJCOVPHn1B8e_mU9RcONMrVdk,1483
|
1534
1534
|
esphome/components/matrix_keypad/binary_sensor/__init__.py,sha256=GyuSn0SbvIjeWAY8VL2h1ZBu_F_6IieB8kHzi3lA96c,1638
|
1535
|
-
esphome/components/matrix_keypad/binary_sensor/matrix_keypad_binary_sensor.h,sha256=
|
1535
|
+
esphome/components/matrix_keypad/binary_sensor/matrix_keypad_binary_sensor.h,sha256=3fxEP2Oz7a7VT3AT6Y60IfOWKbN4p2byrwZGCuHob2Y,1333
|
1536
1536
|
esphome/components/max17043/__init__.py,sha256=b0G6mAuSTWpAdOVf7rn3zBVRHoJZeZ8i6mkNLqOQfDI,28
|
1537
1537
|
esphome/components/max17043/automation.h,sha256=rw2HnS8IuniX5673CzvfbIpjyO-Jtay2Q_S1MSEOoi4,434
|
1538
1538
|
esphome/components/max17043/max17043.cpp,sha256=rl6WPIT4dzrCQSWe21zvMt7f-lp6DFnxH6-mL3HpcXM,3189
|
@@ -1728,12 +1728,12 @@ esphome/components/mmc5983/mmc5983.cpp,sha256=6tH7TsB2jSTYDR3-SQ90JgKNMQtFvG1OJH
|
|
1728
1728
|
esphome/components/mmc5983/mmc5983.h,sha256=djHDHSC4UAimrWpqnKB-g1wycM5ym7vOLHU7BDRfwA8,784
|
1729
1729
|
esphome/components/mmc5983/sensor.py,sha256=_eAPEfWzxYWsp5kPji_Rb99X6j9RxlReC4boxYWUtWY,1670
|
1730
1730
|
esphome/components/modbus/__init__.py,sha256=pe9aU_PBNR9h9TqqezEE8zyvp7PLOtsa01Zaf08DMfk,3111
|
1731
|
-
esphome/components/modbus/modbus.cpp,sha256=
|
1731
|
+
esphome/components/modbus/modbus.cpp,sha256=aNZF9Qc2AhrV9hGvfMVkRMqjxQllHdi5D_5MPE1ReuI,8526
|
1732
1732
|
esphome/components/modbus/modbus.h,sha256=lDXklIqGZsyXnvf4oFslaGtD7yd9YwRkUYSpYsQRcAg,2477
|
1733
|
-
esphome/components/modbus_controller/__init__.py,sha256=
|
1733
|
+
esphome/components/modbus_controller/__init__.py,sha256=2qkvQDczAkOFHGBOszDRhCtR9kl3XeddSa8PCHspKW0,11987
|
1734
1734
|
esphome/components/modbus_controller/automation.h,sha256=YzVMgVu37jvwsvCz3tSheYDJeZwi3IMx6NuMo1xgw7g,1106
|
1735
1735
|
esphome/components/modbus_controller/const.py,sha256=dw_zuK27lFuR5aDtlOs_nVaFB9Snx3l48dgwc9_OAMg,825
|
1736
|
-
esphome/components/modbus_controller/modbus_controller.cpp,sha256=
|
1736
|
+
esphome/components/modbus_controller/modbus_controller.cpp,sha256=X02K_sdHi13Y_31HbKkv7k1Qpm7qwkqEGiKO6kU6CMI,28520
|
1737
1737
|
esphome/components/modbus_controller/modbus_controller.h,sha256=R80yn8_lFDQo6pQ-8tQxl0V9IuKKqAQnkhh4IuymYJw,23454
|
1738
1738
|
esphome/components/modbus_controller/binary_sensor/__init__.py,sha256=sFeTUMZlQwtIHKtX8kUDT5wvIk25SCiZG0Wdl6EYdFU,1634
|
1739
1739
|
esphome/components/modbus_controller/binary_sensor/modbus_binarysensor.cpp,sha256=wsRl8P37mxr24CQJ4gCrFsUTlgVVKOVsY8HJTN1sUA8,1197
|
@@ -1952,17 +1952,17 @@ esphome/components/online_image/image_decoder.cpp,sha256=dStR78DZj-Hq8qwB1iQj1Qn
|
|
1952
1952
|
esphome/components/online_image/image_decoder.h,sha256=lMuliobeyV4svC-1i97WR8x1nyjPWZxqIdIxDXW1DcA,3601
|
1953
1953
|
esphome/components/online_image/online_image.cpp,sha256=CXoVZaVPI0cH7vIeA_LU5GVHfldM41tcjuQOQDdpRrA,8246
|
1954
1954
|
esphome/components/online_image/online_image.h,sha256=R4zz_LDYSDvPv8nyli0tv4kdKzPjsz2UfDO57cf8oPI,6146
|
1955
|
-
esphome/components/online_image/png_image.cpp,sha256=
|
1955
|
+
esphome/components/online_image/png_image.cpp,sha256=1UbsB3NSmTBCSQW1isA6GvY-o-ZSJovDoQgmqeiXwS4,2313
|
1956
1956
|
esphome/components/online_image/png_image.h,sha256=7xHJ3y0oPr9Vn9lswq1HDf1ymZhNGUXFRWSph1evN4w,752
|
1957
1957
|
esphome/components/opentherm/__init__.py,sha256=Y-yowfGAC-GTqThaO6w-LlEcUap8xKGoOuNSSadGJWc,2942
|
1958
1958
|
esphome/components/opentherm/const.py,sha256=Ycg4vJVqUBwSrd0xl9rsl7eDHhNsYzMiuC9b2YO9Yn0,224
|
1959
1959
|
esphome/components/opentherm/generate.py,sha256=6qFmOHNbqhWjefP5gS3osZZ2Ms1QmMqCpicqqONMuHk,5185
|
1960
|
-
esphome/components/opentherm/hub.cpp,sha256=
|
1960
|
+
esphome/components/opentherm/hub.cpp,sha256=pvPTOzE4ha3JcpJwSerDupaXd2IAbqOKsfvetnheGB4,16573
|
1961
1961
|
esphome/components/opentherm/hub.h,sha256=AO0ibAIvh9f1AzFkPfgLqng7lH6QeQDLAyg2LQAkDbc,5642
|
1962
1962
|
esphome/components/opentherm/input.h,sha256=Ln8Sx1mMonhk64RrYTzAeLEJxEgIYtBTRpHgK7pNm1U,482
|
1963
1963
|
esphome/components/opentherm/input.py,sha256=VhzCj5IX2UBpLmmCXxNIRmB6tXdA10tjHfqInydTZ_o,1758
|
1964
|
-
esphome/components/opentherm/opentherm.cpp,sha256=
|
1965
|
-
esphome/components/opentherm/opentherm.h,sha256=
|
1964
|
+
esphome/components/opentherm/opentherm.cpp,sha256=ha6EGKelFMrz4RGHwn9n1b66oi7Kh9eNdFf5wBBf1zk,18425
|
1965
|
+
esphome/components/opentherm/opentherm.h,sha256=NNYwkSuV_FQLmtQC8zBt1a-d42JEqR1uhtAvwu-VwhI,11015
|
1966
1966
|
esphome/components/opentherm/opentherm_macros.h,sha256=krT4qqOKnPeuELRadTjxiKrOaIpXFBG0e2ifNukSbP4,5914
|
1967
1967
|
esphome/components/opentherm/schema.py,sha256=Wb_kvZPcLNSeT2FGU3ntA8skdOLJV-NRSZnS_4qXYNY,26580
|
1968
1968
|
esphome/components/opentherm/validate.py,sha256=UWXgoEzGVTt0dHIOiwSWFsM92ZeEtRLWAsnAwIjLzhk,908
|
@@ -2176,8 +2176,8 @@ esphome/components/qr_code/qr_code.h,sha256=av3KfyeLMVzuXarboSTGBIeWsZww5k1aQXcX
|
|
2176
2176
|
esphome/components/qspi_amoled/display.py,sha256=RKxYuiRRDxMz2JkpCZuc0Mc4KEsfFXG1lnAdE96j-6o,125
|
2177
2177
|
esphome/components/qspi_dbi/__init__.py,sha256=4Nn7UhpMJ9oSbuLdyVEW7G9PlIey2v33SWRNVizt9Oc,30
|
2178
2178
|
esphome/components/qspi_dbi/display.py,sha256=FSAqnA_rpdhYDX1wKzYvKQekPKVZms5r5xkxLbID29A,6470
|
2179
|
-
esphome/components/qspi_dbi/models.py,sha256=
|
2180
|
-
esphome/components/qspi_dbi/qspi_dbi.cpp,sha256=
|
2179
|
+
esphome/components/qspi_dbi/models.py,sha256=SteqD6BaCNLuuPpZWR6qfH7V-EDQ4La53Yv2PV9o9Cg,1378
|
2180
|
+
esphome/components/qspi_dbi/qspi_dbi.cpp,sha256=8aihsspfl44eXLkdXj6TppBoO46K7bnTi8lpqwRG2YE,7422
|
2181
2181
|
esphome/components/qspi_dbi/qspi_dbi.h,sha256=Vnsliv6CNN_h-ZCvLraQYb9461qdvIh8jhFwhx1-ffk,6150
|
2182
2182
|
esphome/components/qwiic_pir/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2183
2183
|
esphome/components/qwiic_pir/binary_sensor.py,sha256=JnaxTc_TLDq77ju6bnbR2KP8QOzasX0_3QoQwvmgVXE,2001
|
@@ -2688,13 +2688,13 @@ esphome/components/st7789v/st7789v.cpp,sha256=fr_ZnpTHbj_Dje78kKCQ4e3WZax3hUB1JV
|
|
2688
2688
|
esphome/components/st7789v/st7789v.h,sha256=cYoLFeohRe-PoISfffZyXS7IcZ7JhAzjlx4QHEQbVXo,9059
|
2689
2689
|
esphome/components/st7920/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2690
2690
|
esphome/components/st7920/display.py,sha256=3rFVK-Oyx-XJ4G4t4LP9qKIFZwE6Skpl6Skbg_-3qj0,1222
|
2691
|
-
esphome/components/st7920/st7920.cpp,sha256=
|
2691
|
+
esphome/components/st7920/st7920.cpp,sha256=cgY6hA6NePx-5MrtUmkO36kp2ICKA9XpUArfj8N34zI,4287
|
2692
2692
|
esphome/components/st7920/st7920.h,sha256=kB1JFbO1zhBazPF-pGKfD3FeKeiwl_OaOw1oEM6ffyw,1630
|
2693
2693
|
esphome/components/statsd/__init__.py,sha256=l8GtFsbqmF4uWjc8bQ6JugaP4XomCB1SqCXQmdG-Zww,1936
|
2694
2694
|
esphome/components/statsd/statsd.cpp,sha256=L4BgLvEvU_esYz6M1lLUr012D2E-QXsNV9wRJLepZZU,4016
|
2695
2695
|
esphome/components/statsd/statsd.h,sha256=5IJl84anEly8as3ONh4s9KjIYmfhuAez-mHkdzWqIDY,1805
|
2696
2696
|
esphome/components/status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2697
|
-
esphome/components/status/binary_sensor.py,sha256=
|
2697
|
+
esphome/components/status/binary_sensor.py,sha256=NPwpCVJ6KBoKVkF1zcQwMVoqtYHJVTCMnWEQImdpyjA,718
|
2698
2698
|
esphome/components/status/status_binary_sensor.cpp,sha256=VaLg8eURQHNXOB-JC-SpR5wzVclpIYGS2lXdpTAwDfg,963
|
2699
2699
|
esphome/components/status/status_binary_sensor.h,sha256=z84fHtyQuDzrdvadDUXlnBZhSopkVIDx3L1spOkfrjg,518
|
2700
2700
|
esphome/components/status_led/__init__.py,sha256=ch8SQ_0fAHxPqWydVtfl0XUDVy7v0D-hc2-gN4nVvrM,782
|
@@ -3144,9 +3144,9 @@ esphome/components/wiegand/wiegand.h,sha256=gyg5szEK0okoeLBQR284k84xy-ln19kNIkeO
|
|
3144
3144
|
esphome/components/wifi/__init__.py,sha256=6FJ70aZwjp6tqMecz3bfesxvHn8QLcWZKZqGrzhUTxc,16419
|
3145
3145
|
esphome/components/wifi/wifi_component.cpp,sha256=55x9pFgJm12ZcLsGoRzT6-2I3UXGblVIpxJYMZZQgfo,28991
|
3146
3146
|
esphome/components/wifi/wifi_component.h,sha256=VQWxTtMOL2Xc_9fZLklYT0cenyFlIzUuWZ3xzlhvoEY,12394
|
3147
|
-
esphome/components/wifi/wifi_component_esp32_arduino.cpp,sha256=
|
3148
|
-
esphome/components/wifi/wifi_component_esp8266.cpp,sha256=
|
3149
|
-
esphome/components/wifi/wifi_component_esp_idf.cpp,sha256=
|
3147
|
+
esphome/components/wifi/wifi_component_esp32_arduino.cpp,sha256=RnqQCAqEGGE3bmIboozw0leO7fgIsXkT8APfmMy6AHw,27583
|
3148
|
+
esphome/components/wifi/wifi_component_esp8266.cpp,sha256=NZhivdJTTWfamh_WLgRjpdrEBwNSbrBJifceNi4OX94,27621
|
3149
|
+
esphome/components/wifi/wifi_component_esp_idf.cpp,sha256=ZaL8sNHeifl6eSw3Fz_KC23kNhgAhuA-ORwA4mYpzPE,35994
|
3150
3150
|
esphome/components/wifi/wifi_component_libretiny.cpp,sha256=ASeaZMVG2WJi321sfp1OuELAvvEh8W2Ooy2aG1MVUYE,16275
|
3151
3151
|
esphome/components/wifi/wifi_component_pico_w.cpp,sha256=eDRB45mojDBWAFYMxuVPLb0mhFVCjRi5nrhpcxDusGQ,6392
|
3152
3152
|
esphome/components/wifi/wpa2_eap.py,sha256=484kRwbjD-KGb1VqtER7V-3_3Bt7QDS4CCmpdZNOFNk,4859
|
@@ -3318,8 +3318,8 @@ esphome/core/entity_base.h,sha256=y9pPjHUxtiadpSzUroBp8-YomztwZnzPVS6GF33YI3U,28
|
|
3318
3318
|
esphome/core/entity_helpers.py,sha256=s5lYCG5hu_1SROtSWgzI0T6802l5-I8udGy1_6HNSdc,2337
|
3319
3319
|
esphome/core/gpio.h,sha256=hy9jEWuCG6Q_AU74viToIab-p5ZnGik4pM4E3AieK8k,2407
|
3320
3320
|
esphome/core/hal.h,sha256=e3qFkax3jfncEusf3kwXCts0Ai7D4XspJgh-VqVDcK4,844
|
3321
|
-
esphome/core/helpers.cpp,sha256=
|
3322
|
-
esphome/core/helpers.h,sha256
|
3321
|
+
esphome/core/helpers.cpp,sha256=2bE18LUT1oXnYvVqYcM21KmboK03Rulg1IiOjVOfhXE,24659
|
3322
|
+
esphome/core/helpers.h,sha256=Mfjc0D5Qkx7D0H2YoOZKTb1JSjJdXYqiD102NcuQCJY,28009
|
3323
3323
|
esphome/core/log.cpp,sha256=MDCx87ytW6Fz6basxYUpagkubFzUKO1ysvU5RXbXoII,1581
|
3324
3324
|
esphome/core/log.h,sha256=sMwmrs64vOG0G9jIibKJWv_C-COl175T8JymmBVRHWI,6369
|
3325
3325
|
esphome/core/macros.h,sha256=YRip3XYzXw2pg3AFpBFA0Js-Y5GMtPkuCp2km2g5uhc,196
|
@@ -3331,8 +3331,8 @@ esphome/core/scheduler.cpp,sha256=fH2E-e0jQ0nd90lojK5voee1lBY7rYzLWWjWZj6rbHA,12
|
|
3331
3331
|
esphome/core/scheduler.h,sha256=OZaBsLlo2R2nJvYcq7LyUGPXLzLAJdMEmtBewWF_9Ps,2455
|
3332
3332
|
esphome/core/string_ref.cpp,sha256=of1TYMY6t3t4HjjPLSiItuPSa62AMG0lK_CU2HS1RvM,242
|
3333
3333
|
esphome/core/string_ref.h,sha256=uPLS1v13VMOltkXO3bL3owdX9P3s9CMnhVtkaphTdDQ,5208
|
3334
|
-
esphome/core/time.cpp,sha256=
|
3335
|
-
esphome/core/time.h,sha256=
|
3334
|
+
esphome/core/time.cpp,sha256=dlJ1rXxBESGehrcxlHLA_il9hWdPBD-sTga_PS1eBOQ,7582
|
3335
|
+
esphome/core/time.h,sha256=aQd7M_tO2X5ErvjTxpB6LmvdwJQjGlEfaqYe8rMkYWY,4347
|
3336
3336
|
esphome/core/util.cpp,sha256=gbTBqOdLxWIxv9h8HFrLPZ96HZI6PBY-WBB_gdiqEts,774
|
3337
3337
|
esphome/core/util.h,sha256=UeGZvUEvEaOMxLqJOA7GE178z5U37681RtFk6Ho1KCw,407
|
3338
3338
|
esphome/core/version.h,sha256=HkOTdiyOMRgIuYAAXpsN_8_IKye3rMK0LbtpcjZVXqY,431
|
@@ -3355,9 +3355,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
|
|
3355
3355
|
esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
|
3356
3356
|
esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
|
3357
3357
|
esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
|
3358
|
-
esphome-2024.11.
|
3359
|
-
esphome-2024.11.
|
3360
|
-
esphome-2024.11.
|
3361
|
-
esphome-2024.11.
|
3362
|
-
esphome-2024.11.
|
3363
|
-
esphome-2024.11.
|
3358
|
+
esphome-2024.11.3.dist-info/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
|
3359
|
+
esphome-2024.11.3.dist-info/METADATA,sha256=tbyLM_ZenDrRkub95xIGYX_JfL1vMTCv1Oy-kH1g__0,3453
|
3360
|
+
esphome-2024.11.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
3361
|
+
esphome-2024.11.3.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
|
3362
|
+
esphome-2024.11.3.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
|
3363
|
+
esphome-2024.11.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|