esphome 2025.4.0b1__py3-none-any.whl → 2025.4.0b2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/components/api/api_frame_helper.cpp +4 -0
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +7 -3
- esphome/components/lvgl/automation.py +14 -2
- esphome/components/lvgl/encoders.py +3 -2
- esphome/components/lvgl/lvcode.py +2 -1
- esphome/components/lvgl/lvgl_esphome.h +2 -0
- esphome/components/lvgl/number/__init__.py +23 -20
- esphome/components/lvgl/number/lvgl_number.h +27 -14
- esphome/components/lvgl/schemas.py +3 -1
- esphome/components/lvgl/select/__init__.py +11 -13
- esphome/components/lvgl/select/lvgl_select.h +25 -18
- esphome/components/lvgl/widgets/buttonmatrix.py +2 -2
- esphome/components/lvgl/widgets/canvas.py +7 -3
- esphome/components/lvgl/widgets/meter.py +3 -1
- esphome/components/speaker/media_player/audio_pipeline.cpp +3 -2
- esphome/const.py +1 -1
- {esphome-2025.4.0b1.dist-info → esphome-2025.4.0b2.dist-info}/METADATA +4 -4
- {esphome-2025.4.0b1.dist-info → esphome-2025.4.0b2.dist-info}/RECORD +22 -22
- {esphome-2025.4.0b1.dist-info → esphome-2025.4.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.4.0b1.dist-info → esphome-2025.4.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.4.0b1.dist-info → esphome-2025.4.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.4.0b1.dist-info → esphome-2025.4.0b2.dist-info}/top_level.txt +0 -0
@@ -311,6 +311,10 @@ APIError APINoiseFrameHelper::state_action_() {
|
|
311
311
|
const std::string &name = App.get_name();
|
312
312
|
const uint8_t *name_ptr = reinterpret_cast<const uint8_t *>(name.c_str());
|
313
313
|
msg.insert(msg.end(), name_ptr, name_ptr + name.size() + 1);
|
314
|
+
// node mac, terminated by null byte
|
315
|
+
const std::string &mac = get_mac_address();
|
316
|
+
const uint8_t *mac_ptr = reinterpret_cast<const uint8_t *>(mac.c_str());
|
317
|
+
msg.insert(msg.end(), mac_ptr, mac_ptr + mac.size() + 1);
|
314
318
|
|
315
319
|
aerr = write_frame_(msg.data(), msg.size());
|
316
320
|
if (aerr != APIError::OK)
|
@@ -30,8 +30,12 @@ void AXS15231Touchscreen::setup() {
|
|
30
30
|
this->interrupt_pin_->setup();
|
31
31
|
this->attach_interrupt_(this->interrupt_pin_, gpio::INTERRUPT_FALLING_EDGE);
|
32
32
|
}
|
33
|
-
this->x_raw_max_
|
34
|
-
|
33
|
+
if (this->x_raw_max_ == 0) {
|
34
|
+
this->x_raw_max_ = this->display_->get_native_width();
|
35
|
+
}
|
36
|
+
if (this->y_raw_max_ == 0) {
|
37
|
+
this->y_raw_max_ = this->display_->get_native_height();
|
38
|
+
}
|
35
39
|
ESP_LOGCONFIG(TAG, "AXS15231 Touchscreen setup complete");
|
36
40
|
}
|
37
41
|
|
@@ -44,7 +48,7 @@ void AXS15231Touchscreen::update_touches() {
|
|
44
48
|
err = this->read(data, sizeof(data));
|
45
49
|
ERROR_CHECK(err);
|
46
50
|
this->status_clear_warning();
|
47
|
-
if (data[0] != 0) // no touches
|
51
|
+
if (data[0] != 0 || data[1] == 0) // no touches
|
48
52
|
return;
|
49
53
|
uint16_t x = encode_uint16(data[2] & 0xF, data[3]);
|
50
54
|
uint16_t y = encode_uint16(data[4] & 0xF, data[5]);
|
@@ -4,6 +4,7 @@ from esphome import automation
|
|
4
4
|
import esphome.codegen as cg
|
5
5
|
import esphome.config_validation as cv
|
6
6
|
from esphome.const import CONF_ACTION, CONF_GROUP, CONF_ID, CONF_TIMEOUT
|
7
|
+
from esphome.core import Lambda
|
7
8
|
from esphome.cpp_generator import TemplateArguments, get_variable
|
8
9
|
from esphome.cpp_types import nullptr
|
9
10
|
|
@@ -64,7 +65,14 @@ async def action_to_code(
|
|
64
65
|
action_id,
|
65
66
|
template_arg,
|
66
67
|
args,
|
68
|
+
config=None,
|
67
69
|
):
|
70
|
+
# Ensure all required ids have been processed, so our LambdaContext doesn't get context-switched.
|
71
|
+
if config:
|
72
|
+
for lamb in config.values():
|
73
|
+
if isinstance(lamb, Lambda):
|
74
|
+
for id_ in lamb.requires_ids:
|
75
|
+
await get_variable(id_)
|
68
76
|
await wait_for_widgets()
|
69
77
|
async with LambdaContext(parameters=args, where=action_id) as context:
|
70
78
|
for widget in widgets:
|
@@ -84,7 +92,9 @@ async def update_to_code(config, action_id, template_arg, args):
|
|
84
92
|
lv.event_send(widget.obj, UPDATE_EVENT, nullptr)
|
85
93
|
|
86
94
|
widgets = await get_widgets(config[CONF_ID])
|
87
|
-
return await action_to_code(
|
95
|
+
return await action_to_code(
|
96
|
+
widgets, do_update, action_id, template_arg, args, config
|
97
|
+
)
|
88
98
|
|
89
99
|
|
90
100
|
@automation.register_condition(
|
@@ -348,4 +358,6 @@ async def obj_update_to_code(config, action_id, template_arg, args):
|
|
348
358
|
await set_obj_properties(widget, config)
|
349
359
|
|
350
360
|
widgets = await get_widgets(config[CONF_ID])
|
351
|
-
return await action_to_code(
|
361
|
+
return await action_to_code(
|
362
|
+
widgets, do_update, action_id, template_arg, args, config
|
363
|
+
)
|
@@ -18,6 +18,7 @@ from .helpers import lvgl_components_required, requires_component
|
|
18
18
|
from .lvcode import lv, lv_add, lv_assign, lv_expr, lv_Pvariable
|
19
19
|
from .schemas import ENCODER_SCHEMA
|
20
20
|
from .types import lv_group_t, lv_indev_type_t, lv_key_t
|
21
|
+
from .widgets import get_widgets
|
21
22
|
|
22
23
|
ENCODERS_CONFIG = cv.ensure_list(
|
23
24
|
ENCODER_SCHEMA.extend(
|
@@ -76,5 +77,5 @@ async def encoders_to_code(var, config, default_group):
|
|
76
77
|
async def initial_focus_to_code(config):
|
77
78
|
for enc_conf in config[CONF_ENCODERS]:
|
78
79
|
if default_focus := enc_conf.get(CONF_INITIAL_FOCUS):
|
79
|
-
|
80
|
-
lv.group_focus_obj(obj)
|
80
|
+
widget = await get_widgets(default_focus)
|
81
|
+
lv.group_focus_obj(widget[0].obj)
|
@@ -173,7 +173,8 @@ class LambdaContext(CodeContext):
|
|
173
173
|
|
174
174
|
class LvContext(LambdaContext):
|
175
175
|
"""
|
176
|
-
Code generation into the LVGL initialisation code
|
176
|
+
Code generation into the LVGL initialisation code, called before setup() and loop()
|
177
|
+
Basically just does cg.add, so now fairly redundant.
|
177
178
|
"""
|
178
179
|
|
179
180
|
added_lambda_count = 0
|
@@ -63,10 +63,12 @@ inline void lv_disp_set_bg_image(lv_disp_t *disp, esphome::image::Image *image)
|
|
63
63
|
inline void lv_obj_set_style_bg_img_src(lv_obj_t *obj, esphome::image::Image *image, lv_style_selector_t selector) {
|
64
64
|
lv_obj_set_style_bg_img_src(obj, image->get_lv_img_dsc(), selector);
|
65
65
|
}
|
66
|
+
#ifdef USE_LVGL_CANVAS
|
66
67
|
inline void lv_canvas_draw_img(lv_obj_t *canvas, lv_coord_t x, lv_coord_t y, image::Image *image,
|
67
68
|
lv_draw_img_dsc_t *dsc) {
|
68
69
|
lv_canvas_draw_img(canvas, x, y, image->get_lv_img_dsc(), dsc);
|
69
70
|
}
|
71
|
+
#endif
|
70
72
|
|
71
73
|
#ifdef USE_LVGL_METER
|
72
74
|
inline lv_meter_indicator_t *lv_meter_add_needle_img(lv_obj_t *obj, lv_meter_scale_t *scale, esphome::image::Image *src,
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
2
|
from esphome.components import number
|
3
3
|
import esphome.config_validation as cv
|
4
|
+
from esphome.const import CONF_RESTORE_VALUE
|
4
5
|
from esphome.cpp_generator import MockObj
|
5
6
|
|
6
7
|
from ..defines import CONF_ANIMATED, CONF_UPDATE_ON_RELEASE, CONF_WIDGET
|
@@ -10,21 +11,21 @@ from ..lvcode import (
|
|
10
11
|
EVENT_ARG,
|
11
12
|
UPDATE_EVENT,
|
12
13
|
LambdaContext,
|
13
|
-
|
14
|
+
ReturnStatement,
|
14
15
|
lv,
|
15
|
-
lv_add,
|
16
16
|
lvgl_static,
|
17
17
|
)
|
18
18
|
from ..types import LV_EVENT, LvNumber, lvgl_ns
|
19
19
|
from ..widgets import get_widgets, wait_for_widgets
|
20
20
|
|
21
|
-
LVGLNumber = lvgl_ns.class_("LVGLNumber", number.Number)
|
21
|
+
LVGLNumber = lvgl_ns.class_("LVGLNumber", number.Number, cg.Component)
|
22
22
|
|
23
23
|
CONFIG_SCHEMA = number.number_schema(LVGLNumber).extend(
|
24
24
|
{
|
25
25
|
cv.Required(CONF_WIDGET): cv.use_id(LvNumber),
|
26
26
|
cv.Optional(CONF_ANIMATED, default=True): animated,
|
27
27
|
cv.Optional(CONF_UPDATE_ON_RELEASE, default=False): cv.boolean,
|
28
|
+
cv.Optional(CONF_RESTORE_VALUE, default=False): cv.boolean,
|
28
29
|
}
|
29
30
|
)
|
30
31
|
|
@@ -32,32 +33,34 @@ CONFIG_SCHEMA = number.number_schema(LVGLNumber).extend(
|
|
32
33
|
async def to_code(config):
|
33
34
|
widget = await get_widgets(config, CONF_WIDGET)
|
34
35
|
widget = widget[0]
|
35
|
-
var = await number.new_number(
|
36
|
-
config,
|
37
|
-
max_value=widget.get_max(),
|
38
|
-
min_value=widget.get_min(),
|
39
|
-
step=widget.get_step(),
|
40
|
-
)
|
41
|
-
|
42
36
|
await wait_for_widgets()
|
37
|
+
async with LambdaContext([], return_type=cg.float_) as value:
|
38
|
+
value.add(ReturnStatement(widget.get_value()))
|
43
39
|
async with LambdaContext([(cg.float_, "v")]) as control:
|
44
40
|
await widget.set_property(
|
45
41
|
"value", MockObj("v") * MockObj(widget.get_scale()), config[CONF_ANIMATED]
|
46
42
|
)
|
47
43
|
lv.event_send(widget.obj, API_EVENT, cg.nullptr)
|
48
|
-
control.add(var.publish_state(widget.get_value()))
|
49
|
-
async with LambdaContext(EVENT_ARG) as event:
|
50
|
-
event.add(var.publish_state(widget.get_value()))
|
51
44
|
event_code = (
|
52
45
|
LV_EVENT.VALUE_CHANGED
|
53
46
|
if not config[CONF_UPDATE_ON_RELEASE]
|
54
47
|
else LV_EVENT.RELEASED
|
55
48
|
)
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
49
|
+
var = await number.new_number(
|
50
|
+
config,
|
51
|
+
await control.get_lambda(),
|
52
|
+
await value.get_lambda(),
|
53
|
+
event_code,
|
54
|
+
config[CONF_RESTORE_VALUE],
|
55
|
+
max_value=widget.get_max(),
|
56
|
+
min_value=widget.get_min(),
|
57
|
+
step=widget.get_step(),
|
58
|
+
)
|
59
|
+
async with LambdaContext(EVENT_ARG) as event:
|
60
|
+
event.add(var.on_value())
|
61
|
+
await cg.register_component(var, config)
|
62
|
+
cg.add(
|
63
|
+
lvgl_static.add_event_cb(
|
64
|
+
widget.obj, await event.get_lambda(), UPDATE_EVENT, event_code
|
62
65
|
)
|
63
|
-
|
66
|
+
)
|
@@ -3,33 +3,46 @@
|
|
3
3
|
#include <utility>
|
4
4
|
|
5
5
|
#include "esphome/components/number/number.h"
|
6
|
-
#include "esphome/core/automation.h"
|
7
6
|
#include "esphome/core/component.h"
|
8
7
|
#include "esphome/core/preferences.h"
|
9
8
|
|
10
9
|
namespace esphome {
|
11
10
|
namespace lvgl {
|
12
11
|
|
13
|
-
class LVGLNumber : public number::Number {
|
12
|
+
class LVGLNumber : public number::Number, public Component {
|
14
13
|
public:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
LVGLNumber(std::function<void(float)> control_lambda, std::function<float()> value_lambda, lv_event_code_t event,
|
15
|
+
bool restore)
|
16
|
+
: control_lambda_(std::move(control_lambda)),
|
17
|
+
value_lambda_(std::move(value_lambda)),
|
18
|
+
event_(event),
|
19
|
+
restore_(restore) {}
|
20
|
+
|
21
|
+
void setup() override {
|
22
|
+
float value = this->value_lambda_();
|
23
|
+
if (this->restore_) {
|
24
|
+
this->pref_ = global_preferences->make_preference<float>(this->get_object_id_hash());
|
25
|
+
if (this->pref_.load(&value)) {
|
26
|
+
this->control_lambda_(value);
|
27
|
+
}
|
20
28
|
}
|
29
|
+
this->publish_state(value);
|
21
30
|
}
|
22
31
|
|
32
|
+
void on_value() { this->publish_state(this->value_lambda_()); }
|
33
|
+
|
23
34
|
protected:
|
24
35
|
void control(float value) override {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
this->
|
29
|
-
}
|
36
|
+
this->control_lambda_(value);
|
37
|
+
this->publish_state(value);
|
38
|
+
if (this->restore_)
|
39
|
+
this->pref_.save(&value);
|
30
40
|
}
|
31
|
-
std::function<void(float)> control_lambda_
|
32
|
-
|
41
|
+
std::function<void(float)> control_lambda_;
|
42
|
+
std::function<float()> value_lambda_;
|
43
|
+
lv_event_code_t event_;
|
44
|
+
bool restore_;
|
45
|
+
ESPPreferenceObject pref_{};
|
33
46
|
};
|
34
47
|
|
35
48
|
} // namespace lvgl
|
@@ -81,7 +81,9 @@ ENCODER_SCHEMA = cv.Schema(
|
|
81
81
|
cv.declare_id(LVEncoderListener), requires_component("binary_sensor")
|
82
82
|
),
|
83
83
|
cv.Optional(CONF_GROUP): cv.declare_id(lv_group_t),
|
84
|
-
cv.Optional(df.CONF_INITIAL_FOCUS): cv.
|
84
|
+
cv.Optional(df.CONF_INITIAL_FOCUS): cv.All(
|
85
|
+
LIST_ACTION_SCHEMA, cv.Length(min=1, max=1)
|
86
|
+
),
|
85
87
|
cv.Optional(df.CONF_LONG_PRESS_TIME, default="400ms"): PRESS_TIME,
|
86
88
|
cv.Optional(df.CONF_LONG_PRESS_REPEAT_TIME, default="100ms"): PRESS_TIME,
|
87
89
|
}
|
@@ -1,18 +1,19 @@
|
|
1
|
+
import esphome.codegen as cg
|
1
2
|
from esphome.components import select
|
2
3
|
import esphome.config_validation as cv
|
3
|
-
from esphome.const import CONF_OPTIONS
|
4
|
+
from esphome.const import CONF_ID, CONF_OPTIONS, CONF_RESTORE_VALUE
|
4
5
|
|
5
6
|
from ..defines import CONF_ANIMATED, CONF_WIDGET, literal
|
6
|
-
from ..lvcode import LvContext
|
7
7
|
from ..types import LvSelect, lvgl_ns
|
8
|
-
from ..widgets import get_widgets
|
8
|
+
from ..widgets import get_widgets
|
9
9
|
|
10
|
-
LVGLSelect = lvgl_ns.class_("LVGLSelect", select.Select)
|
10
|
+
LVGLSelect = lvgl_ns.class_("LVGLSelect", select.Select, cg.Component)
|
11
11
|
|
12
12
|
CONFIG_SCHEMA = select.select_schema(LVGLSelect).extend(
|
13
13
|
{
|
14
14
|
cv.Required(CONF_WIDGET): cv.use_id(LvSelect),
|
15
15
|
cv.Optional(CONF_ANIMATED, default=False): cv.boolean,
|
16
|
+
cv.Optional(CONF_RESTORE_VALUE, default=False): cv.boolean,
|
16
17
|
}
|
17
18
|
)
|
18
19
|
|
@@ -21,12 +22,9 @@ async def to_code(config):
|
|
21
22
|
widget = await get_widgets(config, CONF_WIDGET)
|
22
23
|
widget = widget[0]
|
23
24
|
options = widget.config.get(CONF_OPTIONS, [])
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
literal("LV_ANIM_ON" if config[CONF_ANIMATED] else "LV_ANIM_OFF"),
|
31
|
-
)
|
32
|
-
)
|
25
|
+
animated = literal("LV_ANIM_ON" if config[CONF_ANIMATED] else "LV_ANIM_OFF")
|
26
|
+
selector = cg.new_Pvariable(
|
27
|
+
config[CONF_ID], widget.var, animated, config[CONF_RESTORE_VALUE]
|
28
|
+
)
|
29
|
+
await select.register_select(selector, config, options=options)
|
30
|
+
await cg.register_component(selector, config)
|
@@ -11,12 +11,20 @@
|
|
11
11
|
namespace esphome {
|
12
12
|
namespace lvgl {
|
13
13
|
|
14
|
-
class LVGLSelect : public select::Select {
|
14
|
+
class LVGLSelect : public select::Select, public Component {
|
15
15
|
public:
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
LVGLSelect(LvSelectable *widget, lv_anim_enable_t anim, bool restore)
|
17
|
+
: widget_(widget), anim_(anim), restore_(restore) {}
|
18
|
+
|
19
|
+
void setup() override {
|
19
20
|
this->set_options_();
|
21
|
+
if (this->restore_) {
|
22
|
+
size_t index;
|
23
|
+
this->pref_ = global_preferences->make_preference<size_t>(this->get_object_id_hash());
|
24
|
+
if (this->pref_.load(&index))
|
25
|
+
this->widget_->set_selected_index(index, LV_ANIM_OFF);
|
26
|
+
}
|
27
|
+
this->publish();
|
20
28
|
lv_obj_add_event_cb(
|
21
29
|
this->widget_->obj,
|
22
30
|
[](lv_event_t *e) {
|
@@ -24,11 +32,6 @@ class LVGLSelect : public select::Select {
|
|
24
32
|
it->set_options_();
|
25
33
|
},
|
26
34
|
LV_EVENT_REFRESH, this);
|
27
|
-
if (this->initial_state_.has_value()) {
|
28
|
-
this->control(this->initial_state_.value());
|
29
|
-
this->initial_state_.reset();
|
30
|
-
}
|
31
|
-
this->publish();
|
32
35
|
auto lamb = [](lv_event_t *e) {
|
33
36
|
auto *self = static_cast<LVGLSelect *>(e->user_data);
|
34
37
|
self->publish();
|
@@ -37,21 +40,25 @@ class LVGLSelect : public select::Select {
|
|
37
40
|
lv_obj_add_event_cb(this->widget_->obj, lamb, lv_update_event, this);
|
38
41
|
}
|
39
42
|
|
40
|
-
void publish() {
|
43
|
+
void publish() {
|
44
|
+
this->publish_state(this->widget_->get_selected_text());
|
45
|
+
if (this->restore_) {
|
46
|
+
auto index = this->widget_->get_selected_index();
|
47
|
+
this->pref_.save(&index);
|
48
|
+
}
|
49
|
+
}
|
41
50
|
|
42
51
|
protected:
|
43
52
|
void control(const std::string &value) override {
|
44
|
-
|
45
|
-
|
46
|
-
} else {
|
47
|
-
this->initial_state_ = value;
|
48
|
-
}
|
53
|
+
this->widget_->set_selected_text(value, this->anim_);
|
54
|
+
this->publish();
|
49
55
|
}
|
50
56
|
void set_options_() { this->traits.set_options(this->widget_->get_options()); }
|
51
57
|
|
52
|
-
LvSelectable *widget_
|
53
|
-
|
54
|
-
|
58
|
+
LvSelectable *widget_;
|
59
|
+
lv_anim_enable_t anim_;
|
60
|
+
bool restore_;
|
61
|
+
ESPPreferenceObject pref_{};
|
55
62
|
};
|
56
63
|
|
57
64
|
} // namespace lvgl
|
@@ -250,7 +250,7 @@ async def button_update_to_code(config, action_id, template_arg, args):
|
|
250
250
|
widgets = await get_widgets(config[CONF_ID])
|
251
251
|
assert all(isinstance(w, MatrixButton) for w in widgets)
|
252
252
|
|
253
|
-
async def do_button_update(w
|
253
|
+
async def do_button_update(w):
|
254
254
|
if (width := config.get(CONF_WIDTH)) is not None:
|
255
255
|
lv.btnmatrix_set_btn_width(w.obj, w.index, width)
|
256
256
|
if config.get(CONF_SELECTED):
|
@@ -275,5 +275,5 @@ async def button_update_to_code(config, action_id, template_arg, args):
|
|
275
275
|
)
|
276
276
|
|
277
277
|
return await action_to_code(
|
278
|
-
widgets, do_button_update, action_id, template_arg, args
|
278
|
+
widgets, do_button_update, action_id, template_arg, args, config
|
279
279
|
)
|
@@ -97,7 +97,7 @@ async def canvas_fill(config, action_id, template_arg, args):
|
|
97
97
|
async def do_fill(w: Widget):
|
98
98
|
lv.canvas_fill_bg(w.obj, color, opa)
|
99
99
|
|
100
|
-
return await action_to_code(widget, do_fill, action_id, template_arg, args)
|
100
|
+
return await action_to_code(widget, do_fill, action_id, template_arg, args, config)
|
101
101
|
|
102
102
|
|
103
103
|
@automation.register_action(
|
@@ -145,7 +145,9 @@ async def canvas_set_pixel(config, action_id, template_arg, args):
|
|
145
145
|
x, y = point
|
146
146
|
lv.canvas_set_px_opa(w.obj, x, y, opa_var)
|
147
147
|
|
148
|
-
return await action_to_code(
|
148
|
+
return await action_to_code(
|
149
|
+
widget, do_set_pixels, action_id, template_arg, args, config
|
150
|
+
)
|
149
151
|
|
150
152
|
|
151
153
|
DRAW_SCHEMA = cv.Schema(
|
@@ -181,7 +183,9 @@ async def draw_to_code(config, dsc_type, props, do_draw, action_id, template_arg
|
|
181
183
|
lv_assign(getattr(dsc, mapped_prop), value)
|
182
184
|
await do_draw(w, x, y, dsc_addr)
|
183
185
|
|
184
|
-
return await action_to_code(
|
186
|
+
return await action_to_code(
|
187
|
+
widget, action_func, action_id, template_arg, args, config
|
188
|
+
)
|
185
189
|
|
186
190
|
|
187
191
|
RECT_PROPS = {
|
@@ -297,7 +297,9 @@ async def indicator_update_to_code(config, action_id, template_arg, args):
|
|
297
297
|
async def set_value(w: Widget):
|
298
298
|
await set_indicator_values(w.var, w.obj, config)
|
299
299
|
|
300
|
-
return await action_to_code(
|
300
|
+
return await action_to_code(
|
301
|
+
widget, set_value, action_id, template_arg, args, config
|
302
|
+
)
|
301
303
|
|
302
304
|
|
303
305
|
async def set_indicator_values(meter, indicator, config):
|
@@ -441,9 +441,10 @@ void AudioPipeline::decode_task(void *params) {
|
|
441
441
|
pdFALSE, // Wait for all the bits,
|
442
442
|
portMAX_DELAY); // Block indefinitely until bit is set
|
443
443
|
|
444
|
+
xEventGroupClearBits(this_pipeline->event_group_,
|
445
|
+
EventGroupBits::DECODER_MESSAGE_FINISHED | EventGroupBits::READER_MESSAGE_LOADED_MEDIA_TYPE);
|
446
|
+
|
444
447
|
if (!(event_bits & EventGroupBits::PIPELINE_COMMAND_STOP)) {
|
445
|
-
xEventGroupClearBits(this_pipeline->event_group_,
|
446
|
-
EventGroupBits::DECODER_MESSAGE_FINISHED | EventGroupBits::READER_MESSAGE_LOADED_MEDIA_TYPE);
|
447
448
|
InfoErrorEvent event;
|
448
449
|
event.source = InfoErrorSource::DECODER;
|
449
450
|
|
esphome/const.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: esphome
|
3
|
-
Version: 2025.4.
|
3
|
+
Version: 2025.4.0b2
|
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
|
@@ -37,9 +37,9 @@ Requires-Dist: pyserial==3.5
|
|
37
37
|
Requires-Dist: platformio==6.1.18
|
38
38
|
Requires-Dist: esptool==4.8.1
|
39
39
|
Requires-Dist: click==8.1.7
|
40
|
-
Requires-Dist: esphome-dashboard==
|
41
|
-
Requires-Dist: aioesphomeapi==29.
|
42
|
-
Requires-Dist: zeroconf==0.146.
|
40
|
+
Requires-Dist: esphome-dashboard==20250415.0
|
41
|
+
Requires-Dist: aioesphomeapi==29.10.0
|
42
|
+
Requires-Dist: zeroconf==0.146.4
|
43
43
|
Requires-Dist: puremagic==1.28
|
44
44
|
Requires-Dist: ruamel.yaml==0.18.10
|
45
45
|
Requires-Dist: esphome-glyphsets==0.2.0
|
@@ -5,7 +5,7 @@ esphome/codegen.py,sha256=GePHUM7xdXb_Pil59SHVsXg2F4VBPgkH-Fz2PDX8Z54,1873
|
|
5
5
|
esphome/config.py,sha256=fFrDYbhWY1xn_onAl_0jwlg9D8NkK_FdKULTlnjZtxs,39832
|
6
6
|
esphome/config_helpers.py,sha256=MKf_wzO35nn41FvigXE0iYKDslPgL2ruf8R-EPtTT2I,3256
|
7
7
|
esphome/config_validation.py,sha256=9KOhLHQXmDbahg6zHynXfXDfAL2bciu35_SHxHrzZ2M,63705
|
8
|
-
esphome/const.py,sha256=
|
8
|
+
esphome/const.py,sha256=U00foWVg7L2J3h7o4-5e48t8gl8y0deYApkPsFP3dFg,40830
|
9
9
|
esphome/coroutine.py,sha256=j_14z8dIIzIBeuNO30D4c1RJvMMt1xZFZ58Evd-EvJA,9344
|
10
10
|
esphome/cpp_generator.py,sha256=1g-y3fxWSrd5Kpbz6DrJXaQajjuwQiTIaTRIz9n7svI,31237
|
11
11
|
esphome/cpp_helpers.py,sha256=6C2vNbOIhZKi43xRVlk5hp9GfshfBn-rc5D_ZFUEYaE,4801
|
@@ -184,7 +184,7 @@ esphome/components/apds9960/sensor.py,sha256=vUPm5H_IFROftGlMJWfgqSzm0IeLpYh5Dvt
|
|
184
184
|
esphome/components/api/__init__.py,sha256=grnorxG9QG00eQwcIsiijno_o_JS6xKzOitqLS1DkXg,9895
|
185
185
|
esphome/components/api/api_connection.cpp,sha256=AAPa8224_oaCWAA6O6PDvIdI_4L9ruQJbLLVcXI6B2Y,75389
|
186
186
|
esphome/components/api/api_connection.h,sha256=32R1sK8nuRgfFY4Epu8mP92D6xYxkaa1JV5jkjjQfmc,16464
|
187
|
-
esphome/components/api/api_frame_helper.cpp,sha256=
|
187
|
+
esphome/components/api/api_frame_helper.cpp,sha256=IekqxKtVIBUYFlzvYKoLQnaPIroJ9Qw_MOsIqMDoHf8,34005
|
188
188
|
esphome/components/api/api_frame_helper.h,sha256=bn6Q2TvN6fulMFGUSm7fsxwlURlQAjl8EmMSPAj5uls,5543
|
189
189
|
esphome/components/api/api_noise_context.h,sha256=0i3J3wchJitnQBTJeQm1380t0duhsz7WxJDrlUBF8mE,405
|
190
190
|
esphome/components/api/api_pb2.cpp,sha256=8o0AeBOfenhR6wwRgRcqZ1pa0Mfnxk8Ur24_b9_K-b4,246814
|
@@ -269,7 +269,7 @@ esphome/components/audio_dac/audio_dac.h,sha256=CXjvs63O8NkTIstxO5ef1gRbDjYCf-tb
|
|
269
269
|
esphome/components/audio_dac/automation.h,sha256=jCOreJMo7jmka07bWsDKhZ1hgaO4aES3KAiQVvF78wk,1050
|
270
270
|
esphome/components/axs15231/__init__.py,sha256=JUxVM4FOixLS9XBPZR1-G3K1vm2F5VGBGg-3bfWsxGY,134
|
271
271
|
esphome/components/axs15231/touchscreen/__init__.py,sha256=M7oqDl9R08jlbmOPGQ2X4Hxwpj2OQRtUY2o19KL26VQ,1159
|
272
|
-
esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp,sha256=
|
272
|
+
esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp,sha256=Cqy9cwgwS33ds-QcpnScLZ3IbrsFvUF8QsoIl828XCE,2055
|
273
273
|
esphome/components/axs15231/touchscreen/axs15231_touchscreen.h,sha256=gTkhwWVd_L8EfUj1iBqfJ2hLG2qJN9tgIZxes1F-KYc,675
|
274
274
|
esphome/components/b_parasite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
275
275
|
esphome/components/b_parasite/b_parasite.cpp,sha256=2jxB2kEyckQKoxUHv1NUSoey4jhn3-_I0bGTPBrl-XY,3352
|
@@ -1514,21 +1514,21 @@ esphome/components/ltr_als_ps/ltr_als_ps.h,sha256=TxgTmv7apRGsxHAxDow6-CpkQsdWID
|
|
1514
1514
|
esphome/components/ltr_als_ps/ltr_definitions.h,sha256=yaIvnLQBIBnPuQBvHDD9Q_16Uoq1vnABwsTm8j77a3w,7255
|
1515
1515
|
esphome/components/ltr_als_ps/sensor.py,sha256=xc5wYosnIplZZAvrINQVaIyn5EjhsINuBTJP49xZSd4,9980
|
1516
1516
|
esphome/components/lvgl/__init__.py,sha256=UKkWDMiQ5hznHk1Lq0p9vBlbGfA-yBMYLJtrYTYis0g,18049
|
1517
|
-
esphome/components/lvgl/automation.py,sha256=
|
1517
|
+
esphome/components/lvgl/automation.py,sha256=PBGuHvOggjJW76kAbjIjGR6XUlucjakdnf91RW1IG0M,11586
|
1518
1518
|
esphome/components/lvgl/defines.py,sha256=7KL9hEpiI45KENeym5DGWqtS7hb5g-Hb8IYiC95p0N4,13893
|
1519
|
-
esphome/components/lvgl/encoders.py,sha256=
|
1519
|
+
esphome/components/lvgl/encoders.py,sha256=IuFcb4AsU9WQrc9rCRudEiIuP0mBPoj2udCqY0mAIgY,3231
|
1520
1520
|
esphome/components/lvgl/font.cpp,sha256=dcGMjvFZsMBxQUyn5sSQX8xc2parLFhkZOR9ew10h-Y,2699
|
1521
1521
|
esphome/components/lvgl/gradient.py,sha256=K60e7b52N8i7aQjkLIsij7OOXmVhBnJnxj4J3zPme4w,1989
|
1522
1522
|
esphome/components/lvgl/hello_world.py,sha256=iwfSWO0TT0CEGN5M_QBY_oKqmYshT69jOBDFTTUyBII,1417
|
1523
1523
|
esphome/components/lvgl/helpers.py,sha256=XI3C5IHwoSVlgR32kMxeXTZWK6iW112nmWv5wByrKLY,1253
|
1524
1524
|
esphome/components/lvgl/keypads.py,sha256=jtQjAG4vbTzI5Pr1IBfrEEPzV_0k4wkKfCMfsef6VT4,2124
|
1525
1525
|
esphome/components/lvgl/lv_validation.py,sha256=8FoODFSzpxWUzRcwk7zOmv6TIpN9yXaHDIJjoCifOiA,13843
|
1526
|
-
esphome/components/lvgl/lvcode.py,sha256=
|
1526
|
+
esphome/components/lvgl/lvcode.py,sha256=pTpwXB0ZehgHVMF1y-fAvaTZPTbWfwA-iZwTbl2W9hI,10118
|
1527
1527
|
esphome/components/lvgl/lvgl_esphome.cpp,sha256=ZxJ-bm7wTxIbNST4uPLlhvGysfqOVqKyg1AOJzQe0aE,19253
|
1528
|
-
esphome/components/lvgl/lvgl_esphome.h,sha256=
|
1528
|
+
esphome/components/lvgl/lvgl_esphome.h,sha256=8a5DaKfK0jWa1dQsA0bC0aw_RoPrLXC5vcBzVi4CCXU,13927
|
1529
1529
|
esphome/components/lvgl/lvgl_hal.h,sha256=aZqWpSmKKAB-ZfNxxgxjgASTtLpAZjXJKuoTiPB0qqU,431
|
1530
1530
|
esphome/components/lvgl/lvgl_proxy.h,sha256=JPmVBVh5zD5nraJCN7PqXVmQQlc4CPJe_X9tA6IAtXQ,547
|
1531
|
-
esphome/components/lvgl/schemas.py,sha256=
|
1531
|
+
esphome/components/lvgl/schemas.py,sha256=MsnVBsMAUB7xrZXZiZPFrpkLrhoOKxjbB94GgRkYUJQ,16213
|
1532
1532
|
esphome/components/lvgl/styles.py,sha256=HTqSzCIy2WUZhhChafVhBeVEemWqFfNyWtXII34XI7k,3010
|
1533
1533
|
esphome/components/lvgl/touchscreens.py,sha256=CntwVa1EUu6iBnxfvuv0rCYd_Njmf451CYdRqQyb9N4,1607
|
1534
1534
|
esphome/components/lvgl/trigger.py,sha256=nk36OgqEQWuSwFsTHprM-bhIjh15bh3NyrsK-ffqGsw,3442
|
@@ -1536,10 +1536,10 @@ esphome/components/lvgl/types.py,sha256=corOqfPfZtK1WtIUvJ8TOFLhjcn5vjTi5dJvwX-g
|
|
1536
1536
|
esphome/components/lvgl/binary_sensor/__init__.py,sha256=UaG5F3trL-S9P807PCbM2hHT4EUxAS0obSd6tlHXEoQ,1174
|
1537
1537
|
esphome/components/lvgl/light/__init__.py,sha256=fyfI3RNQ67fA8yKhIirLg9ZLV4wFNMNvalqwqs04rqM,1006
|
1538
1538
|
esphome/components/lvgl/light/lvgl_light.h,sha256=bNvnIYH7UrvVHgWxIIlP2XAfsmEVDzz2-aIA6DbR1iU,1231
|
1539
|
-
esphome/components/lvgl/number/__init__.py,sha256=
|
1540
|
-
esphome/components/lvgl/number/lvgl_number.h,sha256=
|
1541
|
-
esphome/components/lvgl/select/__init__.py,sha256=
|
1542
|
-
esphome/components/lvgl/select/lvgl_select.h,sha256=
|
1539
|
+
esphome/components/lvgl/number/__init__.py,sha256=87uISe2GUnBNiAXw9Cmd95c2g0vLMopyUvEk3yJ13N4,2131
|
1540
|
+
esphome/components/lvgl/number/lvgl_number.h,sha256=vWlC4QFlK08Ad5zN-XtLxUx5raW7xX6qUbZIgJH8BEw,1324
|
1541
|
+
esphome/components/lvgl/select/__init__.py,sha256=SKvXswVkDh3uGeOCw5sUxkeeia7dQdyDQHbR-cn8aMs,1101
|
1542
|
+
esphome/components/lvgl/select/lvgl_select.h,sha256=NqfsUcOo0QdaUCSQ4_mfYQ4EmyyQyByPRw_nZjWsWEA,1856
|
1543
1543
|
esphome/components/lvgl/sensor/__init__.py,sha256=TCK3N05hAW1OjDYV1S5DUZd5JcmfpzWrcVwuA6PXf1c,1116
|
1544
1544
|
esphome/components/lvgl/switch/__init__.py,sha256=d63-MV2Hbz_fNh_qWTEbe0K_g4eJX0x63TW2XyIrhe0,1909
|
1545
1545
|
esphome/components/lvgl/switch/lvgl_switch.h,sha256=EUG9PQfryUD8EHP_GmYMGElOrBQG0Yd8FHyFFfBEvbw,686
|
@@ -1550,8 +1550,8 @@ esphome/components/lvgl/widgets/__init__.py,sha256=IcHp4fcwJsT-fglO2UngisZCkcsWd
|
|
1550
1550
|
esphome/components/lvgl/widgets/animimg.py,sha256=RWPVVkMRhpnJPN_OLeuZq0eBHbW3TG-42G0HROM07BU,3120
|
1551
1551
|
esphome/components/lvgl/widgets/arc.py,sha256=Gmqxe2AyROyU-7C9XKfzBY3g5CowV0ZJVsDzJAfUvCY,2522
|
1552
1552
|
esphome/components/lvgl/widgets/button.py,sha256=lR_8dHZK3P9AY6WbjfL3Sj9oyTOf-i9qbvkGzcPpzgk,423
|
1553
|
-
esphome/components/lvgl/widgets/buttonmatrix.py,sha256=
|
1554
|
-
esphome/components/lvgl/widgets/canvas.py,sha256=
|
1553
|
+
esphome/components/lvgl/widgets/buttonmatrix.py,sha256=6t3EsaoiCscj0kbilAbbc3XRO-PuPGTYX9TFVppP6xY,8642
|
1554
|
+
esphome/components/lvgl/widgets/canvas.py,sha256=2d28uDfpRUZtN9pjEE2nAXWuQFUCywsPFj8rox0fvdQ,12329
|
1555
1555
|
esphome/components/lvgl/widgets/checkbox.py,sha256=5MiANLeX3o1uDAlCorw1aOfAkNx1SMnGm6rcXsSgq_c,891
|
1556
1556
|
esphome/components/lvgl/widgets/dropdown.py,sha256=po7WxHBEU53HiB7srKPgI-cOe3dKcoG8RgpSvmB0gMY,3048
|
1557
1557
|
esphome/components/lvgl/widgets/img.py,sha256=bWCMc7KO8Mzyvs8cGX1CVGL7qPi3rMH8v8fwX95wzqM,2374
|
@@ -1560,7 +1560,7 @@ esphome/components/lvgl/widgets/label.py,sha256=5xl1a6apdJgGKmkpL8m7RDASjaeKzjKT
|
|
1560
1560
|
esphome/components/lvgl/widgets/led.py,sha256=qoe_kvZpoRkwbxz25Z66KQ__KLC2tfhAukChp1jdlDc,888
|
1561
1561
|
esphome/components/lvgl/widgets/line.py,sha256=M5rTKIPG2MgpV1XOGTNCdrfuiAfSPLHEcTM6FmsgcjU,1330
|
1562
1562
|
esphome/components/lvgl/widgets/lv_bar.py,sha256=DbiUvhKdh9bsRMTU-rJYYA5KCjBUxDsW-7tvx8-CIRM,1670
|
1563
|
-
esphome/components/lvgl/widgets/meter.py,sha256=
|
1563
|
+
esphome/components/lvgl/widgets/meter.py,sha256=I_BSID9CNbHSX1xhQJVtvjHSu3oLn1ftyESJ0rKhfwY,11082
|
1564
1564
|
esphome/components/lvgl/widgets/msgbox.py,sha256=i98hz6RKJRMWQ4wz9T1qOHzmdmZ6yHDvHDeJ1T9_Gt0,5335
|
1565
1565
|
esphome/components/lvgl/widgets/obj.py,sha256=6lKIfsdKLWIE8u_Lw0X0ChMCKcV8EZYF8WQKQEBCKYU,439
|
1566
1566
|
esphome/components/lvgl/widgets/page.py,sha256=W7kQ1xfJLRMdy6wFKoA6tZxUXNKGBZWrjMw9OZRfLqA,5870
|
@@ -2694,7 +2694,7 @@ esphome/components/speaker/__init__.py,sha256=2juDem8QadLMwzFp8Rvl-KeIbE-iIEsCtD
|
|
2694
2694
|
esphome/components/speaker/automation.h,sha256=tVSTV49GvHk0bCEgLz3rNYFe8B1F0kXLgE-WihuRaV8,2320
|
2695
2695
|
esphome/components/speaker/speaker.h,sha256=WHAQzuNxkaUxCfPySHUONoun0Uudw917KVlnI71_Mjo,4712
|
2696
2696
|
esphome/components/speaker/media_player/__init__.py,sha256=-bV3Fps2AGFUEW8C35py8ATO6bZhrWDGzW2YLM7kpnc,15436
|
2697
|
-
esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=
|
2697
|
+
esphome/components/speaker/media_player/audio_pipeline.cpp,sha256=KCo7Ujy9IZsViBQ4WotYJ3OrjwaNx7iXH1j6A9NRcww,22362
|
2698
2698
|
esphome/components/speaker/media_player/audio_pipeline.h,sha256=MYt7_kp4IJDSTnXWqLaXIkbbNkGx6F_imSryFo2UUkc,5000
|
2699
2699
|
esphome/components/speaker/media_player/automation.h,sha256=I8psUHnJ8T3fkM05h1yEYDxb0yWe6Vjz7i30OSVA3Is,683
|
2700
2700
|
esphome/components/speaker/media_player/speaker_media_player.cpp,sha256=4qbWSTcEBXKeqxqBF10K_M6C7ONjMev4OAdMyG-HrFo,23489
|
@@ -3481,9 +3481,9 @@ esphome/dashboard/util/itertools.py,sha256=8eLrWEWmICLtXNxkKdYPQV0c_N4GEz8m9Npnb
|
|
3481
3481
|
esphome/dashboard/util/password.py,sha256=cQz3b9B-ijTe7zS6BeCW0hc3pWv6JjC78jmnycYYAh8,321
|
3482
3482
|
esphome/dashboard/util/subprocess.py,sha256=T8EW6dbU4LPd2DG1dRrdh8li71tt6J1isn411poMhkk,1022
|
3483
3483
|
esphome/dashboard/util/text.py,sha256=ENDnfN4O0NdA3CKVJjQYabFbwbrsIhVKrAMQe53qYu4,534
|
3484
|
-
esphome-2025.4.
|
3485
|
-
esphome-2025.4.
|
3486
|
-
esphome-2025.4.
|
3487
|
-
esphome-2025.4.
|
3488
|
-
esphome-2025.4.
|
3489
|
-
esphome-2025.4.
|
3484
|
+
esphome-2025.4.0b2.dist-info/licenses/LICENSE,sha256=HzEjkBInJe44L4WvAOPfhPJJDNj6YbnqFyvGWRzArGM,36664
|
3485
|
+
esphome-2025.4.0b2.dist-info/METADATA,sha256=QDzQqlrluTWB6o0YzPZysWvsFSvlhigg7_zgG0ifL34,3673
|
3486
|
+
esphome-2025.4.0b2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
3487
|
+
esphome-2025.4.0b2.dist-info/entry_points.txt,sha256=mIxVNuWtbYzeEcaWCl-AQ-97aBOWbnYBAK8nbF6P4M0,50
|
3488
|
+
esphome-2025.4.0b2.dist-info/top_level.txt,sha256=0GSXEW3cnITpgG3qnsSMz0qoqJHAFyfw7Y8MVtEf1Yk,8
|
3489
|
+
esphome-2025.4.0b2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|