mirror of
https://github.com/esphome/esphome.git
synced 2026-09-11 23:37:34 +00:00
Merge remote-tracking branch 'upstream/dev' into integration
This commit is contained in:
@@ -331,6 +331,7 @@ esphome/components/mipi_dsi/* @clydebarrow
|
||||
esphome/components/mipi_rgb/* @clydebarrow
|
||||
esphome/components/mipi_spi/* @clydebarrow
|
||||
esphome/components/mitsubishi/* @RubyBailey
|
||||
esphome/components/mitsubishi_cn105/* @crnjan
|
||||
esphome/components/mixer/speaker/* @kahrendt
|
||||
esphome/components/mlx90393/* @functionpointer
|
||||
esphome/components/mlx90614/* @jesserockz
|
||||
|
||||
@@ -380,8 +380,10 @@ async def to_code(configs):
|
||||
# This must be done after all widgets are created
|
||||
for comp in helpers.lvgl_components_required:
|
||||
cg.add_define(f"USE_LVGL_{comp.upper()}")
|
||||
# Currently always need RGB565 for the display buffer, and ARGB8888 is used for layer blending
|
||||
lv_image_formats = {"RGB565", "ARGB8888"}
|
||||
for use in helpers.lv_uses:
|
||||
df.add_define(f"LV_USE_{use.upper()}")
|
||||
cg.add_define(f"USE_LVGL_{use.upper()}")
|
||||
|
||||
if {
|
||||
"transform_rotation",
|
||||
"transform_scale",
|
||||
@@ -389,9 +391,18 @@ async def to_code(configs):
|
||||
"transform_scale_y",
|
||||
} & styles_used:
|
||||
df.add_define("LV_COLOR_SCREEN_TRANSP", "1")
|
||||
for use in helpers.lv_uses:
|
||||
df.add_define(f"LV_USE_{use.upper()}")
|
||||
cg.add_define(f"USE_LVGL_{use.upper()}")
|
||||
|
||||
# Currently always need RGB565 for the display buffer, and ARGB8888 is used for layer blending
|
||||
lv_image_formats = {"RGB565", "ARGB8888"}
|
||||
if {
|
||||
"drop_shadow_color",
|
||||
"drop_shadow_offset_x",
|
||||
"drop_shadow_offset_y",
|
||||
"drop_shadow_opa",
|
||||
"drop_shadow_quality",
|
||||
"drop_shadow_radius",
|
||||
} & styles_used:
|
||||
lv_image_formats.add("A8")
|
||||
|
||||
for image_id in lv_images_used:
|
||||
await cg.get_variable(image_id)
|
||||
@@ -410,6 +421,7 @@ async def to_code(configs):
|
||||
lv_image_formats.add("RGB888")
|
||||
for fmt in lv_image_formats:
|
||||
df.add_define(f"LV_DRAW_SW_SUPPORT_{fmt}", "1")
|
||||
|
||||
lv_conf_h_file = CORE.relative_src_path(LV_CONF_FILENAME)
|
||||
write_file_if_changed(lv_conf_h_file, generate_lv_conf_h())
|
||||
cg.add_build_flag("-DLV_CONF_H=1")
|
||||
|
||||
@@ -251,22 +251,75 @@ LV_FONTS = list(f"montserrat_{s}" for s in range(8, 50, 2)) + [
|
||||
]
|
||||
|
||||
LV_EVENT_MAP = {
|
||||
"PRESS": "PRESSED",
|
||||
"SHORT_CLICK": "SHORT_CLICKED",
|
||||
"ALL_EVENTS": "ALL",
|
||||
"CANCEL": "CANCEL",
|
||||
"CHANGE": "VALUE_CHANGED",
|
||||
"CHILD_CHANGE": "CHILD_CHANGED",
|
||||
"CHILD_CREATE": "CHILD_CREATED",
|
||||
"CHILD_DELETE": "CHILD_DELETED",
|
||||
"CLICK": "CLICKED",
|
||||
"COLOR_FORMAT_CHANGE": "COLOR_FORMAT_CHANGED",
|
||||
"COVER_CHECK": "COVER_CHECK",
|
||||
"CREATE": "CREATE",
|
||||
"DEFOCUS": "DEFOCUSED",
|
||||
"DELETE": "DELETE",
|
||||
"DOUBLE_CLICK": "DOUBLE_CLICKED",
|
||||
"DRAW_MAIN": "DRAW_MAIN",
|
||||
"DRAW_MAIN_BEGIN": "DRAW_MAIN_BEGIN",
|
||||
"DRAW_MAIN_END": "DRAW_MAIN_END",
|
||||
"DRAW_POST": "DRAW_POST",
|
||||
"DRAW_POST_BEGIN": "DRAW_POST_BEGIN",
|
||||
"DRAW_POST_END": "DRAW_POST_END",
|
||||
"DRAW_TASK_ADD": "DRAW_TASK_ADDED",
|
||||
"FLUSH_FINISH": "FLUSH_FINISH",
|
||||
"FLUSH_START": "FLUSH_START",
|
||||
"FLUSH_WAIT_FINISH": "FLUSH_WAIT_FINISH",
|
||||
"FLUSH_WAIT_START": "FLUSH_WAIT_START",
|
||||
"FOCUS": "FOCUSED",
|
||||
"GESTURE": "GESTURE",
|
||||
"GET_SELF_SIZE": "GET_SELF_SIZE",
|
||||
"HIT_TEST": "HIT_TEST",
|
||||
"HOVER_LEAVE": "HOVER_LEAVE",
|
||||
"HOVER_OVER": "HOVER_OVER",
|
||||
"INDEV_RESET": "INDEV_RESET",
|
||||
"INSERT": "INSERT",
|
||||
"INVALIDATE_AREA": "INVALIDATE_AREA",
|
||||
"KEY": "KEY",
|
||||
"LAYOUT_CHANGE": "LAYOUT_CHANGED",
|
||||
"LEAVE": "LEAVE",
|
||||
"LONG_PRESS": "LONG_PRESSED",
|
||||
"LONG_PRESS_REPEAT": "LONG_PRESSED_REPEAT",
|
||||
"CLICK": "CLICKED",
|
||||
"PRESS": "PRESSED",
|
||||
"PRESS_LOST": "PRESS_LOST",
|
||||
"PRESSING": "PRESSING",
|
||||
"READY": "READY",
|
||||
"REFRESH": "REFRESH",
|
||||
"REFR_EXT_DRAW_SIZE": "REFR_EXT_DRAW_SIZE",
|
||||
"REFR_READY": "REFR_READY",
|
||||
"REFR_REQUEST": "REFR_REQUEST",
|
||||
"REFR_START": "REFR_START",
|
||||
"RELEASE": "RELEASED",
|
||||
"RENDER_READY": "RENDER_READY",
|
||||
"RENDER_START": "RENDER_START",
|
||||
"RESOLUTION_CHANGE": "RESOLUTION_CHANGED",
|
||||
"ROTARY": "ROTARY",
|
||||
"SCREEN_LOAD": "SCREEN_LOADED",
|
||||
"SCREEN_LOAD_START": "SCREEN_LOAD_START",
|
||||
"SCREEN_UNLOAD": "SCREEN_UNLOADED",
|
||||
"SCREEN_UNLOAD_START": "SCREEN_UNLOAD_START",
|
||||
"SCROLL": "SCROLL",
|
||||
"SCROLL_BEGIN": "SCROLL_BEGIN",
|
||||
"SCROLL_END": "SCROLL_END",
|
||||
"SCROLL": "SCROLL",
|
||||
"FOCUS": "FOCUSED",
|
||||
"DEFOCUS": "DEFOCUSED",
|
||||
"READY": "READY",
|
||||
"CANCEL": "CANCEL",
|
||||
"ALL_EVENTS": "ALL",
|
||||
"CHANGE": "VALUE_CHANGED",
|
||||
"GESTURE": "GESTURE",
|
||||
"SCROLL_THROW_BEGIN": "SCROLL_THROW_BEGIN",
|
||||
"SHORT_CLICK": "SHORT_CLICKED",
|
||||
"SINGLE_CLICK": "SINGLE_CLICKED",
|
||||
"SIZE_CHANGE": "SIZE_CHANGED",
|
||||
"STATE_CHANGE": "STATE_CHANGED",
|
||||
"STYLE_CHANGE": "STYLE_CHANGED",
|
||||
"TRIPLE_CLICK": "TRIPLE_CLICKED",
|
||||
"UPDATE_LAYOUT_COMPLETE": "UPDATE_LAYOUT_COMPLETED",
|
||||
"VSYNC": "VSYNC",
|
||||
"VSYNC_REQUEST": "VSYNC_REQUEST",
|
||||
}
|
||||
|
||||
LV_EVENT_TRIGGERS = tuple(f"on_{x.lower()}" for x in LV_EVENT_MAP)
|
||||
|
||||
@@ -74,11 +74,13 @@ inline void lv_style_set_text_font(lv_style_t *style, const font::Font *font) {
|
||||
#if defined(USE_LVGL_IMAGE) && defined(USE_IMAGE)
|
||||
// Shortcut / overload, so that the source of an image can easily be updated
|
||||
// from within a lambda.
|
||||
inline void lv_image_set_src(lv_obj_t *obj, esphome::image::Image *image) {
|
||||
lv_image_set_src(obj, image->get_lv_image_dsc());
|
||||
inline void lv_image_set_src(lv_obj_t *obj, image::Image *image) { lv_image_set_src(obj, image->get_lv_image_dsc()); }
|
||||
|
||||
inline void lv_obj_set_style_bitmap_mask_src(lv_obj_t *obj, image::Image *image, lv_style_selector_t selector) {
|
||||
lv_obj_set_style_bitmap_mask_src(obj, image->get_lv_image_dsc(), selector);
|
||||
}
|
||||
|
||||
inline void lv_obj_set_style_bg_image_src(lv_obj_t *obj, esphome::image::Image *image, lv_style_selector_t selector) {
|
||||
inline void lv_obj_set_style_bg_image_src(lv_obj_t *obj, image::Image *image, lv_style_selector_t selector) {
|
||||
lv_obj_set_style_bg_image_src(obj, image->get_lv_image_dsc(), selector);
|
||||
}
|
||||
#endif // USE_LVGL_IMAGE
|
||||
|
||||
@@ -168,6 +168,7 @@ BASE_PROPS = {
|
||||
"bg_main_opa": lvalid.opacity,
|
||||
"bg_main_stop": lvalid.stop_value,
|
||||
"bg_opa": lvalid.opacity,
|
||||
"bitmap_mask_src": lvalid.lv_image,
|
||||
"blend_mode": df.LvConstant(
|
||||
"LV_BLEND_MODE_",
|
||||
"NORMAL",
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import esphome.codegen as cg
|
||||
from esphome.components import climate, uart
|
||||
import esphome.config_validation as cv
|
||||
from esphome.const import CONF_UPDATE_INTERVAL
|
||||
from esphome.types import ConfigType
|
||||
|
||||
DEPENDENCIES = ["uart"]
|
||||
AUTO_LOAD = ["climate"]
|
||||
CODEOWNERS = ["@crnjan"]
|
||||
|
||||
mitsubishi_ns = cg.esphome_ns.namespace("mitsubishi_cn105")
|
||||
|
||||
MitsubishiCN105Climate = mitsubishi_ns.class_(
|
||||
"MitsubishiCN105Climate",
|
||||
climate.Climate,
|
||||
cg.Component,
|
||||
uart.UARTDevice,
|
||||
)
|
||||
|
||||
CONFIG_SCHEMA = (
|
||||
climate.climate_schema(MitsubishiCN105Climate)
|
||||
.extend(uart.UART_DEVICE_SCHEMA)
|
||||
.extend({cv.Optional(CONF_UPDATE_INTERVAL, default="1s"): cv.update_interval})
|
||||
)
|
||||
|
||||
FINAL_VALIDATE_SCHEMA = cv.All(
|
||||
uart.final_validate_device_schema(
|
||||
"mitsubishi_cn105",
|
||||
require_rx=True,
|
||||
require_tx=True,
|
||||
data_bits=8,
|
||||
parity="EVEN",
|
||||
stop_bits=1,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
async def to_code(config: ConfigType) -> None:
|
||||
var = await climate.new_climate(config)
|
||||
await cg.register_component(var, config)
|
||||
await uart.register_uart_device(var, config)
|
||||
@@ -0,0 +1,7 @@
|
||||
#include "mitsubishi_cn105.h"
|
||||
|
||||
namespace esphome::mitsubishi_cn105 {
|
||||
|
||||
static const char *const TAG = "mitsubishi_cn105.driver";
|
||||
|
||||
} // namespace esphome::mitsubishi_cn105
|
||||
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/components/uart/uart.h"
|
||||
|
||||
namespace esphome::mitsubishi_cn105 {
|
||||
|
||||
class MitsubishiCN105 {
|
||||
public:
|
||||
explicit MitsubishiCN105(uart::UARTDevice &device) : device_(device) {}
|
||||
|
||||
uint32_t get_update_interval() const { return this->update_interval_ms_; }
|
||||
void set_update_interval(uint32_t interval_ms) { this->update_interval_ms_ = interval_ms; }
|
||||
|
||||
protected:
|
||||
uart::UARTDevice &device_;
|
||||
uint32_t update_interval_ms_{1000};
|
||||
};
|
||||
|
||||
} // namespace esphome::mitsubishi_cn105
|
||||
@@ -0,0 +1,28 @@
|
||||
#include "mitsubishi_cn105_climate.h"
|
||||
#include "esphome/core/log.h"
|
||||
|
||||
namespace esphome::mitsubishi_cn105 {
|
||||
|
||||
static const char *const TAG = "mitsubishi_cn105.climate";
|
||||
|
||||
void MitsubishiCN105Climate::dump_config() {
|
||||
LOG_CLIMATE("", "Mitsubishi CN105 Climate", this);
|
||||
ESP_LOGCONFIG(TAG,
|
||||
" Update interval: %" PRIu32 " ms\n"
|
||||
" UART: baud_rate=%" PRIu32 " data_bits=%u parity=%s stop_bits=%u",
|
||||
this->hp_.get_update_interval(), this->parent_->get_baud_rate(), this->parent_->get_data_bits(),
|
||||
LOG_STR_ARG(parity_to_str(this->parent_->get_parity())), this->parent_->get_stop_bits());
|
||||
}
|
||||
|
||||
void MitsubishiCN105Climate::setup() {}
|
||||
|
||||
void MitsubishiCN105Climate::loop() {}
|
||||
|
||||
climate::ClimateTraits MitsubishiCN105Climate::traits() {
|
||||
climate::ClimateTraits traits;
|
||||
return traits;
|
||||
}
|
||||
|
||||
void MitsubishiCN105Climate::control(const climate::ClimateCall &call) {}
|
||||
|
||||
} // namespace esphome::mitsubishi_cn105
|
||||
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include "esphome/core/component.h"
|
||||
#include "esphome/components/climate/climate.h"
|
||||
#include "esphome/components/uart/uart.h"
|
||||
#include "mitsubishi_cn105.h"
|
||||
|
||||
namespace esphome::mitsubishi_cn105 {
|
||||
|
||||
class MitsubishiCN105Climate : public climate::Climate, public Component, public uart::UARTDevice {
|
||||
public:
|
||||
explicit MitsubishiCN105Climate() : hp_(*this) {}
|
||||
|
||||
void setup() override;
|
||||
void loop() override;
|
||||
void dump_config() override;
|
||||
|
||||
climate::ClimateTraits traits() override;
|
||||
void control(const climate::ClimateCall &call) override;
|
||||
|
||||
void set_update_interval(uint32_t ms) { hp_.set_update_interval(ms); }
|
||||
|
||||
protected:
|
||||
MitsubishiCN105 hp_;
|
||||
};
|
||||
|
||||
} // namespace esphome::mitsubishi_cn105
|
||||
+1
-1
@@ -18,7 +18,7 @@ puremagic==1.30
|
||||
ruamel.yaml==0.19.1 # dashboard_import
|
||||
ruamel.yaml.clib==0.2.15 # dashboard_import
|
||||
esphome-glyphsets==0.2.0
|
||||
pillow==12.1.1
|
||||
pillow==12.2.0
|
||||
resvg-py==0.2.6
|
||||
freetype-py==2.5.1
|
||||
jinja2==3.1.6
|
||||
|
||||
@@ -511,6 +511,7 @@ lvgl:
|
||||
image:
|
||||
src: cat_image
|
||||
align: top_left
|
||||
bitmap_mask_src: alert
|
||||
on_click:
|
||||
- lvgl.widget.focus: spin_up
|
||||
- lvgl.widget.focus: next
|
||||
@@ -589,6 +590,114 @@ lvgl:
|
||||
logger.log: Button clicked
|
||||
on_long_press_repeat:
|
||||
logger.log: Button clicked
|
||||
on_pressing:
|
||||
logger.log: Button pressing
|
||||
on_press_lost:
|
||||
logger.log: Button press lost
|
||||
on_single_click:
|
||||
logger.log: Button single clicked
|
||||
on_double_click:
|
||||
logger.log: Button double clicked
|
||||
on_triple_click:
|
||||
logger.log: Button triple clicked
|
||||
on_scroll_throw_begin:
|
||||
logger.log: Scroll throw begin
|
||||
on_gesture:
|
||||
logger.log: Gesture detected
|
||||
on_key:
|
||||
logger.log: Key event
|
||||
on_rotary:
|
||||
logger.log: Rotary event
|
||||
on_leave:
|
||||
logger.log: Leave event
|
||||
on_hit_test:
|
||||
logger.log: Hit test
|
||||
on_indev_reset:
|
||||
logger.log: Indev reset
|
||||
on_hover_over:
|
||||
logger.log: Hover over
|
||||
on_hover_leave:
|
||||
logger.log: Hover leave
|
||||
on_cover_check:
|
||||
logger.log: Cover check
|
||||
on_refr_ext_draw_size:
|
||||
logger.log: Refr ext draw size
|
||||
on_draw_main_begin:
|
||||
logger.log: Draw main begin
|
||||
on_draw_main:
|
||||
logger.log: Draw main
|
||||
on_draw_main_end:
|
||||
logger.log: Draw main end
|
||||
on_draw_post_begin:
|
||||
logger.log: Draw post begin
|
||||
on_draw_post:
|
||||
logger.log: Draw post
|
||||
on_draw_post_end:
|
||||
logger.log: Draw post end
|
||||
on_draw_task_add:
|
||||
logger.log: Draw task add
|
||||
on_insert:
|
||||
logger.log: Insert event
|
||||
on_refresh:
|
||||
logger.log: Refresh event
|
||||
on_state_change:
|
||||
logger.log: State changed
|
||||
on_create:
|
||||
logger.log: Create event
|
||||
on_delete:
|
||||
logger.log: Delete event
|
||||
on_child_change:
|
||||
logger.log: Child changed
|
||||
on_child_create:
|
||||
logger.log: Child created
|
||||
on_child_delete:
|
||||
logger.log: Child deleted
|
||||
on_screen_unload_start:
|
||||
logger.log: Screen unload start
|
||||
on_screen_load_start:
|
||||
logger.log: Screen load start
|
||||
on_screen_load:
|
||||
logger.log: Screen loaded
|
||||
on_screen_unload:
|
||||
logger.log: Screen unloaded
|
||||
on_size_change:
|
||||
logger.log: Size changed
|
||||
on_style_change:
|
||||
logger.log: Style changed
|
||||
on_layout_change:
|
||||
logger.log: Layout changed
|
||||
on_get_self_size:
|
||||
logger.log: Get self size
|
||||
on_invalidate_area:
|
||||
logger.log: Invalidate area
|
||||
on_resolution_change:
|
||||
logger.log: Resolution changed
|
||||
on_color_format_change:
|
||||
logger.log: Color format changed
|
||||
on_refr_request:
|
||||
logger.log: Refresh request
|
||||
on_refr_start:
|
||||
logger.log: Refresh start
|
||||
on_refr_ready:
|
||||
logger.log: Refresh ready
|
||||
on_render_start:
|
||||
logger.log: Render start
|
||||
on_render_ready:
|
||||
logger.log: Render ready
|
||||
on_flush_start:
|
||||
logger.log: Flush start
|
||||
on_flush_finish:
|
||||
logger.log: Flush finish
|
||||
on_flush_wait_start:
|
||||
logger.log: Flush wait start
|
||||
on_flush_wait_finish:
|
||||
logger.log: Flush wait finish
|
||||
on_update_layout_complete:
|
||||
logger.log: Update layout complete
|
||||
on_vsync:
|
||||
logger.log: Vsync
|
||||
on_vsync_request:
|
||||
logger.log: Vsync request
|
||||
- led:
|
||||
id: lv_led
|
||||
color: 0x00FF00
|
||||
@@ -1189,6 +1298,13 @@ image:
|
||||
type: BINARY
|
||||
transparency: chroma_key
|
||||
|
||||
- id: alert
|
||||
file: $component_dir/logo-text.svg
|
||||
type: grayscale
|
||||
resize: 100x100
|
||||
invert_alpha: true
|
||||
transparency: alpha_channel
|
||||
|
||||
color:
|
||||
- id: light_blue
|
||||
hex: "3340FF"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
climate:
|
||||
- platform: mitsubishi_cn105
|
||||
name: "AC Test"
|
||||
uart_id: uart_bus
|
||||
@@ -0,0 +1,4 @@
|
||||
packages:
|
||||
uart: !include ../../test_build_components/common/uart_9600_even/esp32-idf.yaml
|
||||
|
||||
<<: !include common.yaml
|
||||
@@ -0,0 +1,4 @@
|
||||
packages:
|
||||
uart: !include ../../test_build_components/common/uart_9600_even/esp8266-ard.yaml
|
||||
|
||||
<<: !include common.yaml
|
||||
@@ -0,0 +1,4 @@
|
||||
packages:
|
||||
uart: !include ../../test_build_components/common/uart_9600_even/rp2040-ard.yaml
|
||||
|
||||
<<: !include common.yaml
|
||||
Reference in New Issue
Block a user