def test_async_match_state(): """Test async_match_state helper.""" state1 = State('light.kitchen', 'on') state2 = State('switch.kitchen', 'on') state = intent.async_match_state(None, 'kitch', [state1, state2]) assert state is state1
def test_async_match_state(): """Test async_match_state helper.""" state1 = State("light.kitchen", "on") state2 = State("switch.kitchen", "on") state = intent.async_match_state(None, "kitch", [state1, state2]) assert state is state1
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} humidity = slots["humidity"]["value"] if state.state == STATE_OFF: await hass.services.async_call(DOMAIN, SERVICE_TURN_ON, service_data, context=intent_obj.context) speech = f"Turned {state.name} on and set humidity to {humidity}%" else: speech = f"The {state.name} is set to {humidity}%" service_data[ATTR_HUMIDITY] = humidity await hass.services.async_call( DOMAIN, SERVICE_SET_HUMIDITY, service_data, context=intent_obj.context, blocking=True, ) response = intent_obj.create_response() 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
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} speech_parts = [] if "color" in slots: _test_supports_color(state) 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( f"the color {intent_obj.slots['color']['value']}") if "brightness" in slots: _test_supports_brightness(state) service_data[ATTR_BRIGHTNESS_PCT] = slots["brightness"]["value"] speech_parts.append(f"{slots['brightness']['value']}% brightness") 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