mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	[nextion] Brightness control tweaks (#8027)
This commit is contained in:
		| @@ -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) {} | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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) { | ||||||
|   | |||||||
| @@ -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_; | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user