mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 14:43:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| esphome:
 | |
|   name: loop-test
 | |
| 
 | |
| host:
 | |
| api:
 | |
| logger:
 | |
|   level: DEBUG
 | |
| 
 | |
| external_components:
 | |
|   - source:
 | |
|       type: local
 | |
|       path: EXTERNAL_COMPONENT_PATH
 | |
| 
 | |
| loop_test_component:
 | |
|   components:
 | |
|     # Component that disables itself after 10 loops
 | |
|     - id: self_disable_10
 | |
|       name: "self_disable_10"
 | |
|       disable_after: 10
 | |
| 
 | |
|     # Component that never disables itself (for re-enable test)
 | |
|     - id: normal_component
 | |
|       name: "normal_component"
 | |
|       disable_after: 0
 | |
| 
 | |
|     # Component that tests enable when already enabled
 | |
|     - id: redundant_enable
 | |
|       name: "redundant_enable"
 | |
|       test_redundant_operations: true
 | |
|       disable_after: 0
 | |
| 
 | |
|     # Component that tests disable when already disabled
 | |
|     - id: redundant_disable
 | |
|       name: "redundant_disable"
 | |
|       test_redundant_operations: true
 | |
|       disable_after: 10
 | |
| 
 | |
|   # ISR test component that uses enable_loop_soon_any_context
 | |
|   isr_components:
 | |
|     - id: isr_test
 | |
|       name: "isr_test"
 | |
| 
 | |
|   # Update test component to test component.update when loop is disabled
 | |
|   update_components:
 | |
|     - id: update_test_component
 | |
|       name: "update_test"
 | |
|       disable_loop_after: 3  # Disable loop after 3 iterations
 | |
|       update_interval: 0.1s  # Fast update interval for testing
 | |
| 
 | |
| # Interval to re-enable the self_disable_10 component after some time
 | |
| interval:
 | |
|   - interval: 0.5s
 | |
|     then:
 | |
|       - if:
 | |
|           condition:
 | |
|             lambda: 'return id(self_disable_10).get_loop_count() == 10;'
 | |
|           then:
 | |
|             - logger.log: "Re-enabling self_disable_10 via service"
 | |
|             - loop_test_component.enable:
 | |
|                 id: self_disable_10
 | |
| 
 | |
|   # Test component.update on a component with disabled loop
 | |
|   - interval: 0.1s
 | |
|     then:
 | |
|       - lambda: |-
 | |
|           static bool manual_update_done = false;
 | |
|           if (!manual_update_done &&
 | |
|               id(update_test_component).get_loop_count() == 3 &&
 | |
|               id(update_test_component).get_update_count() >= 3) {
 | |
|             ESP_LOGI("main", "Manually calling component.update on update_test_component with disabled loop");
 | |
|             manual_update_done = true;
 | |
|           }
 | |
|       - if:
 | |
|           condition:
 | |
|             lambda: |-
 | |
|               static bool manual_update_triggered = false;
 | |
|               if (!manual_update_triggered &&
 | |
|                   id(update_test_component).get_loop_count() == 3 &&
 | |
|                   id(update_test_component).get_update_count() >= 3) {
 | |
|                 manual_update_triggered = true;
 | |
|                 return true;
 | |
|               }
 | |
|               return false;
 | |
|           then:
 | |
|             - component.update: update_test_component
 |