1
0
mirror of https://github.com/esphome/esphome.git synced 2025-01-18 12:05:41 +00:00

[nextion] Brightness control tweaks (#8027)

This commit is contained in:
Keith Burzinski 2025-01-12 21:12:54 -06:00 committed by GitHub
parent 92a8ebe1f8
commit aa87c60717
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 61 additions and 15 deletions

View File

@ -49,6 +49,23 @@ class TouchTrigger : public Trigger<uint8_t, uint8_t, bool> {
} }
}; };
template<typename... Ts> class NextionSetBrightnessAction : public Action<Ts...> {
public:
explicit NextionSetBrightnessAction(Nextion *component) : component_(component) {}
TEMPLATABLE_VALUE(float, brightness)
void play(Ts... x) override {
this->component_->set_brightness(this->brightness_.value(x...));
this->component_->set_backlight_brightness(this->brightness_.value(x...));
}
void set_brightness(std::function<void(Ts..., float)> brightness) { this->brightness_ = brightness; }
protected:
Nextion *component_;
};
template<typename... Ts> class NextionPublishFloatAction : public Action<Ts...> { template<typename... Ts> class NextionPublishFloatAction : public Action<Ts...> {
public: public:
explicit NextionPublishFloatAction(NextionComponent *component) : component_(component) {} explicit NextionPublishFloatAction(NextionComponent *component) : component_(component) {}

View File

@ -1,30 +1,30 @@
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome import automation from esphome import automation
from esphome.components import display, uart import esphome.codegen as cg
from esphome.components import esp32 from esphome.components import display, esp32, uart
import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_BRIGHTNESS,
CONF_ID, CONF_ID,
CONF_LAMBDA, CONF_LAMBDA,
CONF_BRIGHTNESS,
CONF_TRIGGER_ID,
CONF_ON_TOUCH, CONF_ON_TOUCH,
CONF_TRIGGER_ID,
) )
from esphome.core import CORE from esphome.core import CORE
from . import Nextion, nextion_ns, nextion_ref from . import Nextion, nextion_ns, nextion_ref
from .base_component import ( from .base_component import (
CONF_AUTO_WAKE_ON_TOUCH,
CONF_EXIT_REPARSE_ON_START,
CONF_ON_BUFFER_OVERFLOW, CONF_ON_BUFFER_OVERFLOW,
CONF_ON_PAGE,
CONF_ON_SETUP,
CONF_ON_SLEEP, CONF_ON_SLEEP,
CONF_ON_WAKE, CONF_ON_WAKE,
CONF_ON_SETUP, CONF_SKIP_CONNECTION_HANDSHAKE,
CONF_ON_PAGE, CONF_START_UP_PAGE,
CONF_TFT_URL, CONF_TFT_URL,
CONF_TOUCH_SLEEP_TIMEOUT, CONF_TOUCH_SLEEP_TIMEOUT,
CONF_WAKE_UP_PAGE, CONF_WAKE_UP_PAGE,
CONF_START_UP_PAGE,
CONF_AUTO_WAKE_ON_TOUCH,
CONF_EXIT_REPARSE_ON_START,
CONF_SKIP_CONNECTION_HANDSHAKE,
) )
CODEOWNERS = ["@senexcrenshaw", "@edwardtfn"] CODEOWNERS = ["@senexcrenshaw", "@edwardtfn"]
@ -32,6 +32,9 @@ CODEOWNERS = ["@senexcrenshaw", "@edwardtfn"]
DEPENDENCIES = ["uart"] DEPENDENCIES = ["uart"]
AUTO_LOAD = ["binary_sensor", "switch", "sensor", "text_sensor"] AUTO_LOAD = ["binary_sensor", "switch", "sensor", "text_sensor"]
NextionSetBrightnessAction = nextion_ns.class_(
"NextionSetBrightnessAction", automation.Action
)
SetupTrigger = nextion_ns.class_("SetupTrigger", automation.Trigger.template()) SetupTrigger = nextion_ns.class_("SetupTrigger", automation.Trigger.template())
SleepTrigger = nextion_ns.class_("SleepTrigger", automation.Trigger.template()) SleepTrigger = nextion_ns.class_("SleepTrigger", automation.Trigger.template())
WakeTrigger = nextion_ns.class_("WakeTrigger", automation.Trigger.template()) WakeTrigger = nextion_ns.class_("WakeTrigger", automation.Trigger.template())
@ -46,7 +49,7 @@ CONFIG_SCHEMA = (
{ {
cv.GenerateID(): cv.declare_id(Nextion), cv.GenerateID(): cv.declare_id(Nextion),
cv.Optional(CONF_TFT_URL): cv.url, cv.Optional(CONF_TFT_URL): cv.url,
cv.Optional(CONF_BRIGHTNESS, default=1.0): cv.percentage, cv.Optional(CONF_BRIGHTNESS): cv.percentage,
cv.Optional(CONF_ON_SETUP): automation.validate_automation( cv.Optional(CONF_ON_SETUP): automation.validate_automation(
{ {
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SetupTrigger), cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SetupTrigger),
@ -92,12 +95,34 @@ CONFIG_SCHEMA = (
) )
@automation.register_action(
"display.nextion.set_brightness",
NextionSetBrightnessAction,
cv.maybe_simple_value(
{
cv.GenerateID(): cv.use_id(Nextion),
cv.Required(CONF_BRIGHTNESS): cv.templatable(cv.percentage),
},
key=CONF_BRIGHTNESS,
),
)
async def nextion_set_brightness_to_code(config, action_id, template_arg, args):
paren = await cg.get_variable(config[CONF_ID])
var = cg.new_Pvariable(action_id, template_arg, paren)
template_ = await cg.templatable(config[CONF_BRIGHTNESS], args, float)
cg.add(var.set_brightness(template_))
return var
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = cg.new_Pvariable(config[CONF_ID])
await uart.register_uart_device(var, config) await uart.register_uart_device(var, config)
if CONF_BRIGHTNESS in config: if CONF_BRIGHTNESS in config:
cg.add(var.set_brightness(config[CONF_BRIGHTNESS])) cg.add(var.set_brightness(config[CONF_BRIGHTNESS]))
if CONF_LAMBDA in config: if CONF_LAMBDA in config:
lambda_ = await cg.process_lambda( lambda_ = await cg.process_lambda(
config[CONF_LAMBDA], [(nextion_ref, "it")], return_type=cg.void config[CONF_LAMBDA], [(nextion_ref, "it")], return_type=cg.void

View File

@ -273,7 +273,9 @@ void Nextion::loop() {
this->sent_setup_commands_ = true; this->sent_setup_commands_ = true;
this->send_command_("bkcmd=3"); // Always, returns 0x00 to 0x23 result of serial command. this->send_command_("bkcmd=3"); // Always, returns 0x00 to 0x23 result of serial command.
this->set_backlight_brightness(this->brightness_); if (this->brightness_.has_value()) {
this->set_backlight_brightness(this->brightness_.value());
}
// Check if a startup page has been set and send the command // Check if a startup page has been set and send the command
if (this->start_up_page_ != -1) { if (this->start_up_page_ != -1) {

View File

@ -1339,7 +1339,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
CallbackManager<void()> buffer_overflow_callback_{}; CallbackManager<void()> buffer_overflow_callback_{};
optional<nextion_writer_t> writer_; optional<nextion_writer_t> writer_;
float brightness_{1.0}; optional<float> brightness_;
std::string device_model_; std::string device_model_;
std::string firmware_version_; std::string firmware_version_;

View File

@ -2,6 +2,8 @@ esphome:
on_boot: on_boot:
- lambda: 'ESP_LOGD("display","is_connected(): %s", YESNO(id(main_lcd).is_connected()));' - lambda: 'ESP_LOGD("display","is_connected(): %s", YESNO(id(main_lcd).is_connected()));'
- display.nextion.set_brightness: 80%
# Binary sensor publish action tests # Binary sensor publish action tests
- binary_sensor.nextion.publish: - binary_sensor.nextion.publish:
id: r0_sensor id: r0_sensor