46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| """ Service to set covers half open"""
 | |
| import logging
 | |
| import voluptuous as vol
 | |
| 
 | |
| from homeassistant.components.cover import DOMAIN as COVER_DOMAIN, ATTR_POSITION
 | |
| from homeassistant.const import SERVICE_SET_COVER_POSITION, ATTR_ENTITY_ID
 | |
| 
 | |
| # The domain of your component. Should be equal to the name of your component.
 | |
| from homeassistant.helpers.service import async_extract_entity_ids
 | |
| 
 | |
| DOMAIN = "cover_half"
 | |
| 
 | |
| # List of component names (string) your component depends upon.
 | |
| # We depend on group because group will be loaded after all the components that
 | |
| # initialize devices have been setup.
 | |
| DEPENDENCIES = ['group', 'cover']
 | |
| 
 | |
| # Name of the service that we expose.
 | |
| SERVICE_SET_HALF = 'set_half'
 | |
| 
 | |
| ATTR_HALF_POSITION = 'half_position'
 | |
| 
 | |
| # Shortcut for the logger
 | |
| _LOGGER = logging.getLogger(__name__)
 | |
| 
 | |
| # Validate that all required config options are given.
 | |
| CONFIG_SCHEMA = vol.Schema({
 | |
|     DOMAIN: vol.Schema({})
 | |
| }, extra=vol.ALLOW_EXTRA)
 | |
| 
 | |
| 
 | |
| async def async_setup(hass, config):
 | |
|     """Setup example component."""
 | |
| 
 | |
|     async def async_set_half_service(service):
 | |
|         entity_ids = await async_extract_entity_ids(hass, service, expand_group=True)
 | |
|         for entity_id in entity_ids:
 | |
|             data = {
 | |
|                 ATTR_ENTITY_ID: entity_id,
 | |
|                 ATTR_POSITION: hass.states.get(entity_id).attributes.get(ATTR_HALF_POSITION, 20)
 | |
|             }
 | |
|             await hass.services.async_call(COVER_DOMAIN, SERVICE_SET_COVER_POSITION, data)
 | |
| 
 | |
|     hass.services.async_register(DOMAIN, SERVICE_SET_HALF, async_set_half_service)
 | |
|     return True
 |