Beispiel #1
0
    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
Beispiel #2
0
    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):
        """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
Beispiel #4
0
    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