mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	[lvgl] Fix nested lambdas in automations unable to access parameters (#11583)
Co-authored-by: clydebarrow <2366188+clydebarrow@users.noreply.github.com>
This commit is contained in:
		| @@ -52,6 +52,19 @@ number: | ||||
|     widget: spinbox_id | ||||
|     id: lvgl_spinbox_number | ||||
|     name: LVGL Spinbox Number | ||||
|   - platform: template | ||||
|     id: test_brightness | ||||
|     name: "Test Brightness" | ||||
|     min_value: 0 | ||||
|     max_value: 255 | ||||
|     step: 1 | ||||
|     optimistic: true | ||||
|     # Test lambda in automation accessing x parameter directly | ||||
|     # This is a real-world pattern from user configs | ||||
|     on_value: | ||||
|       - lambda: !lambda |- | ||||
|           // Direct use of x parameter in automation | ||||
|           ESP_LOGD("test", "Brightness: %.0f", x); | ||||
|  | ||||
| light: | ||||
|   - platform: lvgl | ||||
| @@ -110,3 +123,21 @@ text: | ||||
|     platform: lvgl | ||||
|     widget: hello_label | ||||
|     mode: text | ||||
|  | ||||
| text_sensor: | ||||
|   - platform: template | ||||
|     id: test_text_sensor | ||||
|     name: "Test Text Sensor" | ||||
|     # Test nested lambdas in LVGL actions can access automation parameters | ||||
|     on_value: | ||||
|       - lvgl.label.update: | ||||
|           id: hello_label | ||||
|           text: !lambda return x.c_str(); | ||||
|       - lvgl.label.update: | ||||
|           id: hello_label | ||||
|           text: !lambda |- | ||||
|             // Test complex lambda with conditionals accessing x parameter | ||||
|             if (x == "*") { | ||||
|               return "WILDCARD"; | ||||
|             } | ||||
|             return x.c_str(); | ||||
|   | ||||
| @@ -257,7 +257,30 @@ lvgl: | ||||
|             text: "Hello shiny day" | ||||
|             text_color: 0xFFFFFF | ||||
|             align: bottom_mid | ||||
|         - label: | ||||
|             id: setup_lambda_label | ||||
|             # Test lambda in widget property during setup (LvContext) | ||||
|             # Should NOT receive lv_component parameter | ||||
|             text: !lambda |- | ||||
|               char buf[32]; | ||||
|               snprintf(buf, sizeof(buf), "Setup: %d", 42); | ||||
|               return std::string(buf); | ||||
|             align: top_mid | ||||
|             text_font: space16 | ||||
|         - label: | ||||
|             id: chip_info_label | ||||
|             # Test complex setup lambda (real-world pattern) | ||||
|             # Should NOT receive lv_component parameter | ||||
|             text: !lambda |- | ||||
|               // Test conditional compilation and string formatting | ||||
|               char buf[64]; | ||||
|               #ifdef USE_ESP_IDF | ||||
|               snprintf(buf, sizeof(buf), "IDF: v%d.%d", ESP_IDF_VERSION_MAJOR, ESP_IDF_VERSION_MINOR); | ||||
|               #else | ||||
|               snprintf(buf, sizeof(buf), "Arduino"); | ||||
|               #endif | ||||
|               return std::string(buf); | ||||
|             align: top_left | ||||
|         - obj: | ||||
|             align: center | ||||
|             arc_opa: COVER | ||||
|   | ||||
		Reference in New Issue
	
	Block a user