mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	cover
This commit is contained in:
		| @@ -210,6 +210,15 @@ sensor: | ||||
|     name: "Test Sensor 50" | ||||
|     lambda: return 50.0; | ||||
|     update_interval: 0.1s | ||||
|   # Temperature sensor for the thermostat | ||||
|   - platform: template | ||||
|     name: "Temperature Sensor" | ||||
|     id: temp_sensor | ||||
|     lambda: return 22.5; | ||||
|     unit_of_measurement: "°C" | ||||
|     device_class: temperature | ||||
|     state_class: measurement | ||||
|     update_interval: 5s | ||||
|  | ||||
| # Mixed entity types for comprehensive batching test | ||||
| binary_sensor: | ||||
| @@ -285,6 +294,50 @@ valve: | ||||
|     stop_action: | ||||
|       - logger.log: "Valve stopping" | ||||
|  | ||||
| output: | ||||
|   - platform: template | ||||
|     id: heater_output | ||||
|     type: binary | ||||
|     write_action: | ||||
|       - logger.log: "Heater output changed" | ||||
|   - platform: template | ||||
|     id: cooler_output | ||||
|     type: binary | ||||
|     write_action: | ||||
|       - logger.log: "Cooler output changed" | ||||
|  | ||||
| climate: | ||||
|   - platform: thermostat | ||||
|     name: "Test Thermostat" | ||||
|     sensor: temp_sensor | ||||
|     default_preset: Home | ||||
|     on_boot_restore_from: default_preset | ||||
|     min_heating_off_time: 1s | ||||
|     min_heating_run_time: 1s | ||||
|     min_cooling_off_time: 1s | ||||
|     min_cooling_run_time: 1s | ||||
|     min_idle_time: 1s | ||||
|     heat_action: | ||||
|       - output.turn_on: heater_output | ||||
|     cool_action: | ||||
|       - output.turn_on: cooler_output | ||||
|     idle_action: | ||||
|       - output.turn_off: heater_output | ||||
|       - output.turn_off: cooler_output | ||||
|     preset: | ||||
|       - name: Home | ||||
|         default_target_temperature_low: 20 | ||||
|         default_target_temperature_high: 24 | ||||
|         mode: heat_cool | ||||
|       - name: Away | ||||
|         default_target_temperature_low: 16 | ||||
|         default_target_temperature_high: 26 | ||||
|         mode: heat_cool | ||||
|       - name: Sleep | ||||
|         default_target_temperature_low: 18 | ||||
|         default_target_temperature_high: 22 | ||||
|         mode: heat_cool | ||||
|  | ||||
| alarm_control_panel: | ||||
|   - platform: template | ||||
|     name: "Test Alarm" | ||||
|   | ||||
| @@ -4,7 +4,7 @@ from __future__ import annotations | ||||
|  | ||||
| import asyncio | ||||
|  | ||||
| from aioesphomeapi import EntityState, SensorState | ||||
| from aioesphomeapi import ClimateInfo, ClimateState, EntityState, SensorState | ||||
| import pytest | ||||
|  | ||||
| from .types import APIClientConnectedFactory, RunCompiledFunction | ||||
| @@ -70,3 +70,28 @@ async def test_host_mode_many_entities( | ||||
|         assert len(sensor_states) >= 50, ( | ||||
|             f"Expected at least 50 sensor states, got {len(sensor_states)}" | ||||
|         ) | ||||
|  | ||||
|         # Verify we received the climate entity | ||||
|         climate_states = [s for s in states.values() if isinstance(s, ClimateState)] | ||||
|         assert len(climate_states) >= 1, ( | ||||
|             f"Expected at least 1 climate state, got {len(climate_states)}" | ||||
|         ) | ||||
|  | ||||
|         # Get entity info to verify climate entity details | ||||
|         entities = await client.list_entities_services() | ||||
|         climate_infos = [e for e in entities[0] if isinstance(e, ClimateInfo)] | ||||
|         assert len(climate_infos) >= 1, "Expected at least 1 climate entity" | ||||
|  | ||||
|         climate_info = climate_infos[0] | ||||
|         # Verify the thermostat has presets | ||||
|         assert len(climate_info.supported_presets) > 0, ( | ||||
|             "Expected climate to have presets" | ||||
|         ) | ||||
|         # The thermostat platform uses standard presets (Home, Away, Sleep) | ||||
|         # which should be transmitted properly without string copies | ||||
|  | ||||
|         # Verify specific presets exist | ||||
|         preset_names = [p.name for p in climate_info.supported_presets] | ||||
|         assert "HOME" in preset_names, f"Expected 'HOME' preset, got {preset_names}" | ||||
|         assert "AWAY" in preset_names, f"Expected 'AWAY' preset, got {preset_names}" | ||||
|         assert "SLEEP" in preset_names, f"Expected 'SLEEP' preset, got {preset_names}" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user