async def async_handle(self, intent_obj: intent.Intent) -> intent.IntentResponse: """Handle the hass intent.""" hass = intent_obj.hass slots = self.async_validate_slots(intent_obj.slots) state = hass.helpers.intent.async_match_state( slots["name"]["value"], [ state for state in hass.states.async_all() if state.domain == DOMAIN ], ) service_data = {ATTR_ENTITY_ID: state.entity_id} speech_parts = [] if "color" in slots: intent.async_test_feature(state, SUPPORT_COLOR, "changing colors") service_data[ATTR_RGB_COLOR] = slots["color"]["value"] # Use original passed in value of the color because we don't have # human readable names for that internally. speech_parts.append("the color {}".format( intent_obj.slots["color"]["value"])) if "brightness" in slots: intent.async_test_feature(state, SUPPORT_BRIGHTNESS, "changing brightness") service_data[ATTR_BRIGHTNESS_PCT] = slots["brightness"]["value"] speech_parts.append("{}% brightness".format( slots["brightness"]["value"])) await hass.services.async_call(DOMAIN, SERVICE_TURN_ON, service_data, context=intent_obj.context) response = intent_obj.create_response() if not speech_parts: # No attributes changed speech = f"Turned on {state.name}" else: parts = [f"Changed {state.name} to"] for index, part in enumerate(speech_parts): if index == 0: parts.append(f" {part}") elif index != len(speech_parts) - 1: parts.append(f", {part}") else: parts.append(f" and {part}") speech = "".join(parts) response.async_set_speech(speech) return response
async def async_handle(self, intent_obj): """Handle the hass intent.""" hass = intent_obj.hass slots = self.async_validate_slots(intent_obj.slots) state = hass.helpers.intent.async_match_state( slots['name']['value'], [state for state in hass.states.async_all() if state.domain == DOMAIN]) service_data = { ATTR_ENTITY_ID: state.entity_id, } speech_parts = [] if 'color' in slots: intent.async_test_feature( state, SUPPORT_COLOR, 'changing colors') service_data[ATTR_RGB_COLOR] = slots['color']['value'] # Use original passed in value of the color because we don't have # human readable names for that internally. speech_parts.append('the color {}'.format( intent_obj.slots['color']['value'])) if 'brightness' in slots: intent.async_test_feature( state, SUPPORT_BRIGHTNESS, 'changing brightness') service_data[ATTR_BRIGHTNESS_PCT] = slots['brightness']['value'] speech_parts.append('{}% brightness'.format( slots['brightness']['value'])) await hass.services.async_call(DOMAIN, SERVICE_TURN_ON, service_data) response = intent_obj.create_response() if not speech_parts: # No attributes changed speech = 'Turned on {}'.format(state.name) else: parts = ['Changed {} to'.format(state.name)] for index, part in enumerate(speech_parts): if index == 0: parts.append(' {}'.format(part)) elif index != len(speech_parts) - 1: parts.append(', {}'.format(part)) else: parts.append(' and {}'.format(part)) speech = ''.join(parts) response.async_set_speech(speech) return response
async def async_handle(self, intent_obj: intent.Intent) -> intent.IntentResponse: """Handle the hass intent.""" hass = intent_obj.hass slots = self.async_validate_slots(intent_obj.slots) state = intent.async_match_state( hass, slots["name"]["value"], hass.states.async_all(DOMAIN), ) service_data = {ATTR_ENTITY_ID: state.entity_id} intent.async_test_feature(state, HumidifierEntityFeature.MODES, "modes") mode = slots["mode"]["value"] if mode not in state.attributes.get(ATTR_AVAILABLE_MODES, []): raise intent.IntentHandleError( f"Entity {state.name} does not support {mode} mode") if state.state == STATE_OFF: await hass.services.async_call( DOMAIN, SERVICE_TURN_ON, service_data, context=intent_obj.context, blocking=True, ) speech = f"Turned {state.name} on and set {mode} mode" else: speech = f"The mode for {state.name} is set to {mode}" service_data[ATTR_MODE] = mode await hass.services.async_call( DOMAIN, SERVICE_SET_MODE, service_data, context=intent_obj.context, blocking=True, ) response = intent_obj.create_response() response.async_set_speech(speech) return response