Control casero con Alexa


Se puede utilizar Fauxmo de Makermusings y una placa de retransmisión para «engañar» a Alexa para que piense que Raspberry Pi es un dispositivo Wemo , y activar y desactivar las cosas. Sin embargo, eso limita uno a configurar todos los dispositivos deseados alrededor de un área única que está cerca de la Raspberry Pi.

Nos gustaria a hacer lo siguiente:

  1. Dar el comando: «Alexa, enciende la lámpara»
  2. Alexa envía un comando a Raspberry Pi a través de Fauxmo
  3. Raspberry Pi enciende un interruptor lejano que puede estar en la cocina, pero usaría algún tipo de interruptor inalámbrico

También puede usar algo como Node-RED (viene preinstalado en raspbian) y node-red-contrib-alexa-home-skill (escribí este nodo) para enviar los mensajes y tener más control que solo las acciones que admite Wemo .

Introducción (skill propia de Alexa y servidor Flas-Ask)

Mediante un dispositivo con Alexa (amazon echo, fire tv cube, etc) podemos controlar y ejecutar acciones (scripts o programas) en una Raspberry Pi (o cualquier otro equipo). Existen numerosas formas de hacer esto, aunque después de probar muchas de ellas (que hacen que la Raspberry Pi se comporte como un dispositivo IOT que Alexa puede encontrar, tales como fauxmo, ha-bridge, etc) y que no me han funcionado, algo muy sencillo y que realmente funciona es crear una custom Skill en la web de developers de Amazon, y ejecutar en la Raspberry Pi (puede ser otro equipo) un servidor web preparado para las Skills de Alexa, en concreto Flask-Ask, (extensión del servidor Flask de python) el cual ya puede ejecutar cualquier tarea en la Raspberry Pi mediante instrucciones en python, o bien llamando directamente a ejecución de scripts, lo que abre un mundo de posibilidades. En mi caso, lo usaré para encender/apagar el aire acondicionado con la Raspberry Pi, que tiene un módulo de Infrarrojos (emisor/receptor) acoplado en los pines GPIO.

https://github.com/johnwheeler/flask-ask

https://pythonprogramming.net/intro-alexa-skill-flask-ask-python-tutorial/

Para que todo funcione correctamente, es necesaria una salida a internet real del servidor Flask-Ask. Una opción es usar ngrok en la Raspberry Pi, para probar, y finalmente, usar un dominio propio (o un ddns) que apunte a nuestro router, en el cual será necesaria una redirección de puertos (abrir puertos) del https (puerto 443 requerido por los Skills de Alexa) hacia el servidor Flask-Ask que se ejecuta en la Raspberry Pi (bajo el puerto 5000 por defecto). Es decir, en el router, tendremos que añadir una regla (servidor virtual, redirección de puertos, abrir puerto) del tipo:

puerto 443 -> Ip Raspberry pi puerto 5000.

(Nota: el ngrok hay que ejecutarlo en la Raspberry Pi especificando exactamente lo mismo, redirigiendo hacia el puerto 5000, ngrok ofrece dos direcciones, una http y otra https, siendo esta última la obligada por Amazon para las skills)

También puede hacerse, y es como lo he hecho yo y voy a mostrar, mediante un proxy inverso con nginx que se ejecuta (en mi caso en otro ordenador, y así no exponemos la Raspberry Pi a internet, sino el ordenador donde se ejecuta el nginx, algo más fortificado, el nginx también podría ponerse en la Raspberry Pi), tal como se muestra en el esquema siguiente:

Esquema de los dispositivos

El proceso es el siguiente (siguiendo los números del esquema):

  1. Se indica al dispositivo Alexa que invoque nuestra skill y lo que queremos que dicha skill haga (conocido como intent). En este tipo de skills, que no están publicadas en Amazon, y que son de uso particular, hay que decir algo del tipo «Alexa dile a XXX que YYY», donde XXX es el nombre de la Skill e YYY es el nombre de la acción que va a realizar (Intent), otras formas pueden ser: «Alexa di a XXX YYY», «Alexa pide a XXX que YYY»… etc, lo que he comprobado es que cuanto más sencilla sea la orden, mejor (cuantos menos artículos o determinantes se usen, mejor)
  2. El dispositivo Alexa se va a los servicios en la nube de Amazon, busca nuestra skill (imprescindible que la cuenta de inicio de sesión en Amazon Developers y el dispositivo Alexa sea la misma, si no es así. la skill no la encontrará)
  3. La Skill se comunica con un «endpoint» o servidor, que puede estar en la nube de Amazon, o en otro sitio, y tiene que ser obligatoriamente una dirección https. En nuestro caso, está en un equipo nuestro, en nuestra red local. Hay múltiples posibilidades para esto, en particular consideramos dos, una para pruebas, y otra ya definitiva. En ambos casos, exponemos el servicio de Flask Ask a internet mediante una dirección (url) https.
    • ngrok (camino de color rojo en la figura anterior): lo que hace es ofrecer temporalmente una dirección de internet para el equipo donde se ejecuta (http y https), y evidentemente hay que redirigirla a un servicio de ese equipo, para ofrecer dicho servicio por internet (en nuestro caso Flask-Ask) (nota: ngrok ofrece permanencia de sus servicios mediante suscripción)
    • Servidor web y reverse proxy con nginx (camino de color naranja): este caso es cuando queremos todo definitivo, y para ello exponemos a internet mediante redirección de puertos de nuestro router (abrir puerto 443 https) a otro equipo, con un servidor web y reverse proxy a la Raspberry Pi y el Flask Ask.
  4. La petición que hace la Skill a nuestro Flask-Ask se procesa con dicho Flask Ask, y ejecuta las acciones que hayamos programado, sean comandos directamente, la ejecución de un script, etc.
  5. En mi caso, Flask Ask va a ejecutar el script encender.sh o apagar.sh en función de lo que le hayamos dicho a Alexa. Estos scripts están en el post de este blog de controlar el aire acondicionado con la RPi (más abajo, en el punto siguiente). Estos scripts envían una secuencia de códigos mediante el emisor infrarrojo, que activan el receptor del aire acondicionado.
  6. En nuestras acciones de Flask Ask, podemos hacer que nuestro dispositivo Alexa responda con frases o pregunte otras cosas (que pueden lanzar nuevas acciones, y abriendo un mundo de posibilidades)

Lista de requerimientos necesarios

No voy a explicar en detalle cómo efectuar los siguientes pasos, ya que las referencias y tutoriales proporcionados al principio lo hacen perfectamente y con todo detalle.

  • Cuenta en Amazon Developers: la misma que la que tenemos en el dispositivo Alexa (echo, fire Tv, fire Cube…) ya que es la única manera de que nuestro dispositivo Alexa «vea» el Skill que vamos a crear (https://developer.amazon.com/)
  • Raspberry Pi con Flask-Ask instalado, donde vamos a ejecutar el servicio (programa) que contendrá las acciones a realizar por la Raspberry Pi cuando interprete una orden correcta dada por Alexa (y adicionalmente con el módulo de infrarrojos y toda la condfiguración necesaria para que todo funcione previamente)
  • Salida a Internet del servidor Flask-Ask, para las pruebas, con ngrok. Para el uso definitivo, bien una redirección de puertos en el Router, o bien un web proxy intermediario (nginx en otro PC, o en la propia Raspberry Pi)

La configuración para usar la Raspberry Pi para controlar el Aire Acondicionado con el módulo de infrarrojos está detallada en esta entrada:

Componentes necesarios

  • Skill de Alexa en amazon developers: cosas a tener en cuenta con los intents (creados por defecto)
  • Aplicación Flask-Ask, que es la que va a ejecutar acciones en función de las peticiones de AWS
  • Pruebas con ngrok (instalado directamente en la Raspberry Pi), con el simulador de Amazon Developers

Skill de Alexa

Existe multitud de maneras de definir un Skill de Alexa, pero básicamente consiste en tener un conjunto de acciones (Intents) que se corresponden con ciertas órdenes o palabras por voz. Esto es, al decir una palabra o frase al dispositivo Alexa, que habremos definido en la skill, se asociará al Intent correspondiente (con los valores correspondientes). Es importante tenerlos bien definidos y tmar nota de los nmbres, que se tendrán que corresponder exactamente con lo que implementemos en la aplicación de Flask-Ask.

Desde la consola de Amazon Developers creamos una nueva Skill

Tenemos que seleccionar un nombre (da igual, es simplemente para identificarla), el idioma, el tipo (por defecto aparece «Custom» y es la que usaré, y dónde van a estar alojados los recursos, que seleccionaremos nuestros propios recursos (endpoint), que aparece por defecto seleccionada.

Pulsamos el botón «crear Skill», justo arriba de la página

Ahora nos preguntará una plantilla y seleccionamos la vacía (por defecto)

Ya tenemos la Skill creada, y si accedemos a la aplicación de Alexa en nuestro dispositivo móvil, o bien a través d ela Web, ya vemos allí que tenemos la Skill de desarrollador recién creada:

La Skill «Mi primera Skill« ha sido simplemente como ejemplo, a partir de ahora, veremos la Skill RPi control, que es la que usaremos y programaremos para ejecutar cosas en la Raspberry Pi.

Una de las primeras cosas a hacer en la Skill recién creada es observar los Intents creados por defecto:

Como vemos, nos crea unos Intents requeridos que no podemos borrar, y uno por defecto llamado «HelloWorld», que tenemos que borrar, salvo que lo implementemos en nuestra aplicación Flask Ask.

Esto fue uno de mis primeros errores, como se ve en el log de la apliación Flask-Ask en la RPi:

raise NotImplementedError('Intent "{}" not found and no default intent specified.'.format(intent.name))
NotImplementedError: Intent "HelloWorldIntent" not found and no default intent specified.

Sin embargo, los Intents requeridos no los podemos eliminar, y en mi caso particular, el intent AMAZON.StopIntent me dio mucho la lata dado que, al decir «apaga», «apagar», parece ser que los servicios de Amazon lo asocian a este intent y no al mío personalizado, por lo que tenía un error similar al anterior:

Por tanto, para evitar este problema, simplemente basta con implementar en la aplicación Flask-Ask este intent requerido de Amazon para que ejecute exactamente lo mismo que el nuestro propio al escuchar «apagar» o similares.

Skill RPi control

Primero, necesitamos al menos dos palabras para invocar al Skill , yo he elegido «raspberry pi»

Muy importante y a tener en cuenta, es que, en este tipo de Skills personales, cuando hablamos al dispositivo Alexa, hay que hacerlo de la siguiente manera:

Alexa, di a XX XX que YYY, Alexa dile a XX XXX YYY, Alexa pide a XX XXX que YYY

dado que al no estar publicado, no puede hacerse de otra forma (XX XX son las dos palabras de invocación,e YYY es la frase o utterance que hemos indicado para el Intent o Acción. Amazon así lo advierte:

Más sobre esto en https://developer.amazon.com/en-US/docs/alexa/custom-skills/understanding-how-users-invoke-custom-skills.html seleccionando las pestañas «Spanish»

No obstante, desde el simulador de la web de Amazon Developers, al testear el Skill, sí que se permiten las frases de activación usuales para skills publicados (pero que no van a funcionar al hablarle a nuestro dispositivo, p.ej. en mi caso: Alexa activa Raspberry pi, Alexa pon raspberry pi funcionará en el simulador, pero no en el dispositivo real)

Vistas las consideraciones anteriores, el Skill es extremadamente sencillo, sólo tiene una acción o Intent llamada «Aire«

con dos posibles palabras de activación (utterances), que son encender y apagar (podrían haberse hecho dos intents diferentes, etc)

Para definir este tipo de intent, primero hay que definir un «slot», que se asociará al intent. El slot simplemente contiene los valores que luego vamos a interpretar con la aplicación Flask-Ask y las frases para activarlo, así como los sinónimos:

En este caso he seguido al pie de la letra los tutoriales indicados al inicio, y tengo un slot llamado status

Tiene dos valores definidos, y ciertos sinónimos que interpretará también el Intent asignándoles el valor correspondiente (es decir, para que se interprete el valor «apagar», se pueden decir las palabras «apagar»,»quite»,»apague»,»quita»,»apaga»

Ahora puede crearse el Intent Aire y asociarlo a este slot (es sencillo, está todo guiado). Además pueden escribirse la frases (utterances) de activación de este intent añadiendo el nombre del slot (entre llaves) que se interpretarán según lo que acabamos de ver (unas palabras se asociarán a encender y otras a apagar)

Y ya está, ya tenemos nuestra Skill creada y definida. A la hora del paso siguiente, la programación de la aplicación Flask-Ask, tenemos que quedarnos con que tenemos que implementar el intent «Aire», el «AMAZON.StopIntent» y que para el intent «Aire» tendremos que implementar acciones según sea el valor de ese intent (encender o apagar)

La vista en JSON permite ver todo más claro:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "raspberry pi",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "Aire",
                    "slots": [
                        {
                            "name": "status",
                            "type": "status"
                        }
                    ],
                    "samples": [
                        "que {status} el aire",
                        " {status} el aire"
                    ]
                }
            ],
            "types": [
                {
                    "name": "status",
                    "values": [
                        {
                            "name": {
                                "value": "apagar",
                                "synonyms": [
                                    "quite",
                                    "apague",
                                    "quita",
                                    "apaga"
                                ]
                            }
                        },
                        {
                            "name": {
                                "value": "encender",
                                "synonyms": [
                                    "ponga",
                                    "encienda",
                                    "pon",
                                    "enciende"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Aplicación Flask-Ask

Ahora le toca el turno a instalar en la Raspberry Pi el servidor Flask Ask y programar (python) el programa que interpretará las órdenes que le envíen los Servicios de Amazon al traducir nuestras órdenes de voz a peticiones al servidor endpoint (nuestro Flask Ask)

NOTA: en los tutoriales para instalar Flask-Ask se indica que se use una versión previa del módulo cryptography de python, porque si no se dan problemas con el SSL (ver p.ej. https://stackoverflow.com/questions/49375054/alexa-skill-development-using-flask-ask-and-ngrok). En mi caso, uso una versión de Raspbian Buster con Kernel 4.9.X porque es la única manera de que funcione el módulo de infrarrojos. La versión cryptography de este Raspbian es antigua y no da problemas.

De nuevo, siguiendo los tutoriales y adaptándolo a nuestro uso, es algo muy sencillo. Como vimos en el post d ela Raspberry Pi y el Aire acondicionado con el emisor de infrarrojos, simplemente se trata de ejecutar los scripts «encender.sh» y «apagar.sh» según corresponda.

El código es el siguiente y es trivial. Simplemente hay que tener en cuenta los valores sinónimos para tener en cuenta todos los valores posibles que ejecuten las sentencias de nuestro programa. Para cada intent (el nombre tiene que ser el mismo que hemos puesto en la Skill) se tiene que definir una etiqueta @ask.intent y a continuación una función (de nombre el que sea) que incluye lo que se va a hacer (como parámetro puede admitir los valores del slot (mismos nombres) (en mi caso el mapping es redundante y podría eliminarse, se usa cuando el nombre del slot y el tipo son distintos).

La función launch sirve para cuando se activa simplemente el Skill, y funciona desde la web de amazon developers (al decir «Alexa activa raspberry Pi» o similares, se implementa una acción de respuesta que nos pregunta qué hacer, pero esto sólo funciona en el simulador). El intent Ayuda (que era requerido) podemos indicar que haga algo, en este caso decirnos una frase (para invocarlo: «Alexa dile a Raspberry Pi ayuda«)

import logging
import os

from flask import Flask
from flask_ask import Ask, request, session, question, statement

app = Flask(__name__)
ask = Ask(app, "/")
logging.getLogger('flask_ask').setLevel(logging.DEBUG)

STATUSON = ["encender", "enciende", "pon","encienda","ponga"] # all values that are defined as synonyms in type
STATUSOFF = ["apagar", "apaga", "quita","apague","quite"]

@ask.launch
def launch():
    speech_text = '¿qué quieres hacer?, ¿encender o apagar el aire?'
    return question(speech_text).reprompt(speech_text).simple_card('Poner Aire Skill','Se ha  iniciado')

@ask.intent('Aire', mapping = {'status':'status'})
def Aire_Intent(status):
    if status in STATUSON:
        os.system('./encender.sh')
        return statement('El aire se va a encender')
    elif status in STATUSOFF:
        os.system('./apagar.sh')
        return statement('El aire se va a apagar')
    else:
        return statement('Lo siento, no puedo hacer eso con el aire.')


@ask.intent('AMAZON.StopIntent')
def apagar():
        os.system('./apagar.sh')
        return statement('El aire se va a  apagar')

@ask.intent('AMAZON.HelpIntent')
def help():
    speech_text = 'Control Aire con la Raspberry pi!'
#    return question(speech_text).reprompt(speech_text).simple_card('HelloWorld', speech_text)
    return statement(speech_text)


@ask.session_ended
def session_ended():
    return "{}", 200


if __name__ == '__main__':
    if 'ASK_VERIFY_REQUESTS' in os.environ:
        verify = str(os.environ.get('ASK_VERIFY_REQUESTS', '')).lower()
        if verify == 'false':
            app.config['ASK_VERIFY_REQUESTS'] = False
    app.run(host='0.0.0.0',debug=True)

Evidentemente, se puede mejorar y diseñar la skill de otra manera, pero es totalmente funcional.

En muchos tutoriales, la ejecución de Flask se hace en el interfaz localhost (127.0.0.1), es decir, el servicio sólo es visible en la raspberry Pi, y esto no es problema si usamos ngrok, pero si queremos exponer el servicio a intenet ya sea mediante redirección de puertos en el router, o con el reverse proxy nginx, entonces tendremos que ejecutar la aplicación para que escuche en todos los interfaces o bien en la ip de la raspberry pi, indicando la ip ‘0.0.0.0’

app.run(host='0.0.0.0',debug=True)

Ejecutamos la aplicación en la raspbery pi y ya tenemos el servidor Flask-Ask esperando peticiones desde internet.

Para dejarlo ejecutándose en segund plano y poder cerrar la terminal (sesión ssh) basta el comando siguiente (redirigiendo la salida a un archivo de texto, para ver los logs)

nohup python3 aire.py > flask-ask.log &

Los archivos que hay en mi Raspberry Pi son los siguientes, los scripts y archivos necesarios para encender/apagar el aire acondicoinado con el módulo ir (utilidad irr.py y asociados), ngrok y la aplicación aire.py

Podemos comprobar que está funcionando correctamente accediendo desde un navegador web a la ip de la Rasperry Pi y el puerto 5000. El resultado con el error 405 es correcto:

Pruebas con ngrok

En la definición del Skill en la web de Amazon Developers, nos faltaba algo muy importante, y es indicar el «endpoint» de nuestro Skill, que en este caso es el servicio Flask-Ask (la aplicación aire.py) que se está ejecutando en la Raspberry Pi

Instalar ngrok es trivial, simplemente se descarga de su web, se descomprime y se ejecuta, redirigiendo http al puerto 5000 que es donde se está ejecutándose la aplicación de Flask-Ask aire.py.

ngrok http 5000

Con ambas aplicaciones ejecutándose, vamos a la web de Developer de Amazon y le indicamos a nuestra skill que el endpoint es la dirección http que nos proporciona ngrok, y que el certificado es el de un subdominio (tenemos que poner la dirección que nos da ngrok, en la imagen siguiente se pone una de ejemplo):

Una vez guardado todo, llega el momento de compilar la Skill, dando al menú Build en la consola de Amazon Developer. Cuando nos avise de que ya está, podemos ir a la pestaña de test y empezar a comprobar si funciona o tenemos errores (hay que ver los logs en la consola de developer y los de Flask-Ask y ngrok en la Raspberry Pi)

Usar la consola de test es muy sencillo. POdemos usar el micrófono del PC o bien escribirlo, el PC nos responderá como si fuera el dispositivo Alexa. Una vez solucionados los posibles errores, ya puede uno dirigirse directamente al dispositivo Alexa con la voz.

Voy a mostrar algunas capturas del proceso y las comprobaciones de cómo funcionan las cosas (algún error también se muestra de mis pruebas)

Enviar una instrucción al skill (vemos la respuesta satisfactoria)

Test en la consola de Amazon Developers

El log muestra que se ha capturado ese texto (comando por voz), que se envía a nuestro endpoint, y cómo se interpreta y trduce en parámetros de la skill (intent, slot y valor):

endpoint
Mensaje recibido por Amazon

A continuación, se muestra el log de cómo se ha interpretado correctamente la orden, y traducido a parámetros de ls¡a Skill, que el programa Flas-Ask va a usar.

Un ejemplo de cómo en la consola de Developer de Amazon funciona invocar el Skill directamente (que lanza la función @launch de la aplicación Flask-Ask). Pero esto no funciona en el dispositivo real (Alexa nos contestará que no encuentra a Raspberry PI, o bien, en mi caso que es un Fire Cube, conectado a la TV, me hace una búsqueda en la TV)

NGINX y Reverse Proxy (dominio particular)

Ahora se trata de sustituir la funcionalidad de ngrok por nuestro propio dominio, certificado SSL (en mi caso uno autofirmado) y nginx como reverse proxy para redirigir el tráfico https al puerto 5000 donde está ejecutándose Flask-Ask.

El proceso es muy sencillo, el habitual para usar nginx como reverse proxy.

Necesario:

  • Dominio propio (o bien un DDNS) que resuelve a nuestra ip pública
  • Redirección del puerto https (443) en nuestro router a la ip de la Raspberry Pi en el puerto 5000 (abrir puerto 443 en el router)
  • certificado SSL autofirmado (o bien uno tipo Let’s Encrypt, que será aceptado por Amazon).
  • Configurar el Skill para que use como endpoint nuestro dominio, y como certificado SSL, subirle el nuestro autofirmado.

La configuración de nginx es simple (hay muchos tutoriales en internet), en mi caso, nginx configura los distintos «sitios» en los archivos en «sites-enabled» (en particular el default)

Tan sólo hay que tener en cuenta el nombre de nuestro dominio, la ip local de la Raspberry Pi (192.168.1.99 en mi caso), y dónde hemos guardado los archivos con las claves pública y privada del certificado SSL (ver notas SSL a continuación)# Default server configuration # server { listen 443 ssl; server_name XXXXXXXXXXXXXXXXX.es; ssl_certificate /XXX/XXX/certificate.pem; ssl_certificate_key /XXX/XXX/private-key.pem; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; location / { proxy_pass http://192.168.1.99:5000/; # Flask-Ask en RPi proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_read_timeout 120s; } }

Notas sobre SSL

The SSL handshake to endpoint Resource [https://XXXXXXX.es], Type [HTTP], Region [DEFAULT] failed. Please check that your java keystore is correctly configured"

En el caso de certificado autofirmado es necesario seguir lo indicado en la propia web de AMazon Developers: https://developer.amazon.com/en-US/docs/alexa/custom-skills/configure-web-service-self-signed-certificate.html. Yo tuve que cambiar el certificado que tenía por un problema en el mismo, que hacía que el Skill no funcionara. Obtenía el siguiente error:

Una comprobación que realicé fue con el servicio que proporciona qualys ssl labs (https://www.ssllabs.com/ssltest/) y me daba el siguiente error con el certificado SSL autofirmado que tenía previamente:

Error del certificado autofirmado previo

Una vez seguidos los pasos que indica Amazon (ver enlace anterior), el mismo test ya no da error, y el Skill funciona. La clave estaba en el parámetro «Alternative names»

Configurar el Skill

Simlemente volvemos a la consola de Developers de Amazon y cambiamos el Endpoint, seleccionamos certificado autofirmado. Guardamos, y una vez guardado , nos pide subir el certificado autofirmado. Todo explicado en el enlace anterior de SSL.

Ahora se vuleve a compilar la Skill (Build) y ya podemos probar que las cosas van bien (nuevo endpoint a nuestro dominio)

Mas información en https://abrazalaweb.net/2021/07/controlar-raspberry-pi-con-alexa/

Alexa en su PC


Si no quiere o no lo ve necesario comprar el altavoz inteligente con tecnología de Alexa, ¡no hay necesidad de estar triste! Es posible usar Alexa en su PC con Windows 11. Puede controlar sus dispositivos inteligentes, establecer recordatorios y hacer mucho más con Alexa ejecutándose en Windows 11.

En el mundo moderno como el actual, Alexa no necesita presentación. En caso de que vivieras bajo la roca, Alexa de Amazon es el asistente digital más inteligente que puedas tener para ayudarte a hacer las cosas. ¡Este asistente virtual basado en la nube viene con un altavoz inteligente y te permite hacer mucho! Puede reproducir música, recordarle las tareas, controlar de manera eficiente los dispositivos inteligentes en su hogar y ese no es el final.

La esencia de las aplicaciones de Alexa son las tareas que pueden realizar. Para pedirle a Alexa que realice estas tareas, debe tener su aplicación oficial. Alexa es capaz de realizar decenas de miles de tareas como pedir comida, jugar juegos, escuchar podcasts y más. Pero este asistente digital no siempre necesita un altavoz inteligente para funcionar. Con Windows 11 oficialmente compatible con las aplicaciones de Android, ahora también es posible operar la aplicación Alexa en su PC.

Alexa en PC con Windows 11

Cuando opere la aplicación Alexa desde su PC con Windows 11, puede encender o apagar las luces, encender los dispositivos inteligentes e incluso cambiar la iluminación de las bombillas inteligentes según su elección.

Si cree que descargar y configurar la aplicación Alexa en su PC con Windows 11 es una tarea complicada, está equivocado. Usar la aplicación Alexa en tu PC es pan comido. Entonces, sin mucho preámbulo, ¡veamos cómo hacer las cosas!

Cómo descargar y configurar Alexa en su PC con Windows 11

Debe descargar la aplicación Alexa de la tienda oficial de Microsoft en su PC con Windows 11. Luego tendrás que configurarlo usando tu cuenta de Amazon. Veamos cómo hacer estas tareas fácilmente:

En primer lugar, deberá iniciar el menú Inicio en su PC con Windows 11 y escribir ‘Microsoft Store’. Haga clic en la aplicación Microsoft Store en el resultado de búsqueda para abrirla.

Cuando esté en Microsoft Store, busque el cuadro de búsqueda. Ahora escriba Alexa aquí y presione la tecla Intro para iniciar la búsqueda.

Ahora verá la aplicación Alexa en el resultado de búsqueda. Verá un botón Obtener en el mosaico de Alexa. Presione el botón para comenzar a descargar la aplicación en su PC con Windows 11.

Espere a que se complete la descarga; puede tardar unos minutos dependiendo de su conexión a Internet. Cuando la aplicación Alexa se haya descargado e instalado, cierre Microsoft Store.

Ahora vuelve al menú Inicio y escribe Alexa en la barra de búsqueda. Haga clic en la aplicación Alexa en el resultado de búsqueda para iniciarla.

Presione el botón Comenzar y comience a configurar la aplicación Alexa.

Ahora verá la pantalla de inicio de sesión en la aplicación Alexa. Si tiene una cuenta de Amazon existente, ingrese su identificación de usuario y contraseña en el cuadro de texto. Si no tiene una cuenta, presione el botón ‘Crear una nueva cuenta’ y regístrese en Amazon.

Después de iniciar sesión con éxito en su cuenta, presione el botón ‘Aceptar y continuar’ que verá en la página ‘Términos y condiciones’.

Alexa en PC con Windows 11

Después de esto, se abrirá una nueva página. Aquí debe activar el interruptor de ‘Wake Word’ si desea utilizar la función ‘Alexa manos libres’. Cuando decide utilizar la función de manos libres de Alexa, puede convocar a Alexa diciendo una palabra de llamada.

Después de habilitar Alexa manos libres, presione el botón ‘Permitir’ a continuación para llegar al siguiente paso del proceso.

En el siguiente paso, obtendrá una opción para anclar la aplicación Alexa en la barra de tareas. Si desea hacerlo, marque la casilla de verificación ‘Pin aplicación en la barra de tareas’.

Finalmente, haga clic en el botón ‘Finalizar configuración’ para finalizar el proceso de configuración de Alexa.

Use la aplicación Alexa en su PC con Windows 11

Ahora que la aplicación Alexa está configurada en su PC con Windows 11, es hora de aprovecharla al máximo.

Cuando inicie la aplicación Alexa después de configurarla, verá que aparece una nota de bienvenida en la pantalla. Presione el botón ‘Comenzar’ debajo de él para ir a la siguiente pantalla.

A continuación, aparecerá una ventana emergente en su PC sobre las ‘Comunicaciones de Alexa’. Presione el botón Aceptar para pasar a la nueva página.

Presione el botón ‘Siguiente’ en la aplicación Alexa para habilitar el modo Mostrar. Esta característica convertirá su PC en una pantalla inteligente de pantalla completa. Si no desea habilitar el modo Mostrar, presione el ícono X que está presente en la esquina derecha.

Ahora, si ha habilitado el ‘Modo Mostrar’ en la pantalla anterior, verá la ‘Configuración del Modo Mostrar’ en la siguiente pantalla.

Presiona ‘Habilitar modo Show’ para acceder a la pantalla de inicio de la aplicación Alexa.

Si ha activado el modo de asistente virtual de manos libres de Alexa, debe decir la palabra ‘Alexa’ seguida del comando que ha especificado en la opción ‘Palabra de activación’.

En caso de que no haya configurado Alexa como modo de asistente virtual manos libres, haga clic en el icono de Alexa en la esquina izquierda y comience a hablar.

Si desea configurar una alarma o un recordatorio en su PC, diga algo como «Alexa, configura una alarma para mañana a las 10 AM». Del mismo modo, para configurar el recordatorio, diga «Alexa, recuérdame que compre comestibles hoy a las 10 p.m.». Cuando digas estas frases, Alexa configurará la alarma para dicha hora y te recordará a la hora exacta que has mencionado.

Para confirmar la acción, vaya a la pestaña de alarmas y recordatorios de la aplicación Alexa y verá las alarmas y recordatorios en la lista

Cómo modificar la configuración de Alexa en una PC con Windows 11

También es posible modificar la configuración en la aplicación Alexa según sus requisitos.

Si no está satisfecho con la configuración actual, vaya a la pestaña Configuración en el panel izquierdo de la aplicación Alexa.

Alexa en PC con Windows 11

Si quieres que Alexa funcione incluso sin desbloquear tu PC, ve a la sección ‘Alexa en PC’.

Sigue desplazándote y busca la categoría ‘Wake Word’. Ahora active el interruptor para la opción ‘Responder mientras está bloqueado’ presente en la esquina derecha.

También es posible habilitar/deshabilitar los sonidos en la aplicación Alexa. Para hacerlo, vaya a la pestaña Alexa en PC y luego vaya a la sección ‘Sonidos de aplicaciones’.

Ahora mueva el interruptor al lado a la posición de apagado. Si desea deshabilitar ambos sonidos, el anterior y el posterior a la solicitud de Alexa, marque la casilla de verificación de ambas opciones que ve aquí.

Si desea activar la función ‘Drop In’ en su PC con Windows 11, vaya a la categoría de comunicación en la pestaña Configuración. Ahora encienda la palanca para el futuro de Drop-In.

Finalmente, si desea cerrar sesión en la aplicación Alexa o desea usar la aplicación con cualquier otra cuenta de Amazon, siga desplazándose hacia abajo hasta llegar a la pestaña ‘Cuenta de Amazon’.

Ahora haga clic en el botón ‘Cerrar sesión’ presente aquí para cerrar la sesión de la cuenta actual.

Conclusión

¡Eso es practicamente todo! Así es como puede usar la aplicación Alexa en su PC con Windows 11. Como puede ver, instalar y configurar la aplicación Alexa en su PC es bastante sencillo. Con esto, despidiéndose.

Construccion de un altavoz casero con Alexa


Con Alexa Voice Service puede disfrutar de las funciones de Alexa sin necesidad de tener un dispositivo Amazon, integrando el asistente de voz en su propio dispositivo. La popular Raspberry Pi y Alexa han demostrado ser especialmente compatibles, ya que la Raspberry Pi no solo podría ser más económica en comparación con Amazon Echo y otros dispositivos similares, sino que también se puede adaptar y personalizar a gusto del usuario por ejemplo usando potentes altavoces HIFI , un display personalizado o cualquier cosa que se nos ocurra.

Configurar Alexa en la Raspberry Pi: requisitos para AlexaPi

No todas las versiones de la Raspberry cumplen con los requisitos para incorporar Alexa sobre todo si hablamos de versiones antiguas. En caso de la Raspberry Pi 2 (modelo B) es una de las recomendadas para poder utilizar el asistente de control de voz de manera óptima pues es algo antigua y de este modo le podemos dar una segunda vida .Si optamos por una Raspberry Pi 3 o 4, nos ahorraremos complicaciones, porque estos modelos ya vienen con adaptadores WLAN de serie, pero lógicamente no tiene demasiado sentido comprar una RPi4 cuando podemos adquirir un altavoz Amazon echo por unos 50€

Por cierto no olvide que excepto que use un hub de puertos USB el modelo económico la Raspberry Pi 3 de un puerto USB no nos servirá , ya que necesitaremos al menos dos puertos USB ( para el micrófono y la salida de audio), como mas adelante explicaremos.

Además, necesitaremos los siguientes accesorios para utilizar Alexa en la Raspberry Pi:

  • Tarjeta microSD de al menos 8 GB (idealmente 16 GB o más)
  • Cargador USB de al menos 2000 mAh
  • Microfono y altavoz(*)

Convertir la Raspberry Pi en altavoz de Alexa

Antes de configurar el asistente de control de voz, primero, en caso de no tenerlo ya instalado debe instalar un sistema operativo en la Raspberry en la tarjeta SD que vayas a utilizar. Se recomienda Raspbian, que cuenta con el respaldo oficial de Raspberry Pi Foundation y que puede descargarse como un archivo de imagen . Realmente no es demasiado difícil , pues solo necesitamos descargar la imagen correspondiente a nuestro modelo de Raspberry Pi directamente desde la página web de la fundación ,descomprimir el archivo en la tarjeta SD y abrirlo para iniciar la instalación de raspbian en la sd

Después de instalar Raspbian en la SD, ya puede colocarla en la RPi y poner Alexa en marcha siguiendo unos sencillos pasos.

0- Conexiones del micrófono y la salida de audio

Aunque incluya una tarjeta de sonido la RPi , esta es de una calidad muy pobre ,por lo ante todo es imprescindible contar con los siguientes elementos:

Para mejorar el sonido, también tiene la opción de conectar una tarjeta de sonido USB a la Raspberry. Además, si no desea realizar la instalación y la configuración del sistema operativo y de Alexa de forma totalmente remota desde el ordenador (con el llamado modo headless), es importante conectar la pantalla, el teclado y el ratón al miniordenador.

1- Crear una cuenta de desarrollador de Amazon

Para acceder a Amazon Voice Service, necesita una cuenta de desarrollador de Amazon, que puede crear accediendo a la página Amazon Developer. Haga clic en “Identificarseˮ y, luego, seleccione “Crea tu cuenta deˮ. También puede iniciar sesión con su cuenta normal de Amazon si ya tiene una.

Servicios para desarrolladores de Amazon: página de inicio
Con una cuenta de Amazon Developer puedes utilizar los diversos servicios para desarrolladores de Amazon.

Introduzca sus datos de registro (nombre, dirección de correo electrónico y contraseña) y vuelva a hacer clic en “Crea tu cuenta deˮ.

Amazon Developer: creación de cuenta
Si ya tiene una cuenta normal de Amazon, le servirá para utilizar las herramientas para desarrolladores.

Después, iniciee sesión automáticamente en la zona de desarrolladores. Sin embargo, antes de poder utilizar las herramientas, como Alexa Voice Server, necesitará añadir más datos personales. Para ello, haz clic en “Finalizar registroˮ en la barra de menú superior.

2-Registrar la Raspberry Pi en Alexa Voice Service

Una vez haya proporcionado los datos requeridos y aceptado los términos y condiciones de uso, podrá acceder al panel de desarrolladores, que le permitirá ver y administrar tus diversos proyectos de Amazon. Bajo la categoría amazon alexa se encuentra el botón “Alexa Voice Serviceˮ, donde puede iniciar la activación de la Raspberry para utilizar el asistente de control de voz:

Dashboard de Amazon Developer
En el panel de control puede consultar informes del estado de tus proyectos de Amazon Developer y anuncios sobre nuevas funciones, entre otros datos.

En el siguiente menú, haga clic en el botón “GET STARTEDˮ. Amazon le solicitará algunos datos sobre el proyecto planificado.

Amazon Developer: datos sobre el producto
A diferencia del nombre del producto, la ID del producto no puede contener espacios.

En los campos de “Product nameˮ y “Product IDˮ, por ejemplo, puede introducir “AlexaPiˮ o «RaspberryPiAlexa».

Como tipo de producto, seleccione la opción “Device with Alexa built-inˮ (dispositivo con Alexa incorporado). Responda que no a la pregunta de “Will your device use a companion app?ˮ.

En la lista desplegable de “Product categoryˮ, seleccione la opción de “Wireless Speakersˮ. En la descripción del producto, no es necesario extenderse mucho: basta con una breve descripción como “Raspberry Pi Alexa Speakerˮ.

Como nuestra intención es configurar la Raspberry Pi para Alexa como altavoz clásico, exclusivamente por control de voz, marca las opciones de “Hands-freeˮ (control de voz desde cerca) y “Far-fieldˮ (control de voz desde lejos) como tipos de interacción deseada.

Marque la casilla de “noˮ en las preguntas finales sobre el uso comercial, “Alexa for Businessˮ y “Alexa Mobile Accessory Protocolˮ, así como en la pregunta de si el proyecto está específicamente diseñado para niños.

3- Crear un perfil de seguridad LWA

En el siguiente paso, debe crear un perfil de seguridad LWA (Login with Amazon, o iniciar sesión con Amazon) para la Raspberry Pi, con el fin de que Amazon pueda verificarlo. Para ello, haga clic en “CREATE NEW PROFILEˮ y, a continuación, escriba un nombre adecuado y una breve descripción del perfil:

Menú de Amazon Developer: LWA Security Profile
El perfil de seguridad obligatorio LWA vincule los datos de usuario y las credenciales de seguridad a uno o más productos.

Después de hacer clic en “NEXTˮ, aparecera otro menú en el que tiene que especificar las direcciones URL para la autenticación LWS. Introduzca aquí las siguientes direcciones (y guárdalas pulsando en “ADDˮ):

  • Allowed origins: localhost
  • Allowed return URLs: localhost/authresponse

Después, revise las condiciones de Amazon y Alexa Voice Service, marque la casilla de consentimiento y finalize el proceso de creación del perfil pulsando el botón “FINISHˮ:

Especificación de las URL de autenticación LWA durante el proceso de registro
Tiene la opción de añadir varias URL, así como de eliminarlas en cualquier momento pulsando el icono de equis.

Si la configuración se llevó a cabo correctamente, verá una notificación de Amazon en una ventana emergente que lo confirmará.

4- Registrar la información del producto y del cliente

A partir de ahora, el perfil que acaba de crear para tu AlexaPi estará siempre disponible en “Productsˮ. Sin embargo, en este punto, antes de pasar a instalar Alexa, debe echar un vistazo a los datos del producto y del cliente necesarios para configurar el asistente de control de voz.

Para ello, haga clic en el perfil de la Raspberry en la descripción general del producto y tome nota de los datos que figuran bajo “Client IDˮ y “Client secretˮ. La información más importante en relación con el producto es el “Product IDˮ, que equivale al nombre asignado al producto (en este tutorial, “AlexaPiˮ).

LWA: Lista de identificadores y claves de verificación
En el perfil del producto no solo puede consultar los datos de verificación, sino también habilitar funciones como las de Bluetooth o recordatorio.

5- Instalar la app Alexa en la Raspberry Pi

La forma más fácil de instalar Alexa en la Raspberry Pi es a través de la plataforma de desarrollo GitHub. Allí encontrará, entre otras cosas, la aplicación de ejemplo Alexa AVS Sample App, que permite instalar el software de control de voz en el miniordenador.

El requisito previo es disponer de un cliente Git, que se puede descargar inmediatamente después de efectuar una actualización rápida del sistema, si no está ya instalado de forma predeterminada. Para actualizar el software del sistema, introduzca, en primer lugar, los siguientes comandos en la terminal de Raspbian:

sudo apt-get update
sudo apt-get upgrade -y

A continuación, es el turno del cliente git:

sudo apt-get install git

Con ayuda del cliente, descargue la aplicación de ejemplo AVS Sample App o clona el repositorio GitHub:

sudo git clone https://github.com/alexa/alexa-avs-sample-app.git

Después de transferir el repositorio de GitHub a la Raspberry Pi, transfiera los datos guardados durante el cuarto paso al archivo de instalación automatic_install.sh. Puede abrirlo con el editor de texto que prefieras como, por ejemplo, GNU nano.

Fragmento del archivo AVS-Sample-App “automatic_install.shˮ
Sustituya los marcadores de posición con tus datos individuales justo después del signo de igual (en la línea correspondiente).

Guarde los cambios e inicia la instalación de Alexa en la Raspberry Pi con el siguiente comando:

. automated_install.sh

6- Configuración durante la instalación

Ya durante la instalación del software de control de voz, debe realizar las primeras configuraciones y responder a algunas preguntas. Por ejemplo, al principio tiene que aceptar los términos y condiciones y el uso de aplicaciones de terceros (si procede).

En la siguiente pregunta, declara que ya tiene una cuenta de desarrollador de Amazon, mientras que en la tercera confirma los datos sobre el “Product IDˮ, el “Client IDˮ y el “Client secretˮ. En los tres casos, escriba «y» y, después, pulsa la tecla [Enter].

A continuación, aparece una de las opciones de configuración más importantes: la elección de la salida de voz deseada. Elija la opción es-ES para establecer el español como el idioma en el que se comunicará con Alexa.

Además, durante la instalación, debe determinar si la salida de sonido del altavoz Raspberry Pi de Alexa debe ser a través de un conector de clavija (3,5 mm) o del conector HDMI. Finalmente, debe especificar si deseas mantener la palabra de activación predeterminada (Alexa) o utilizar otro comando de voz para iniciar el asistente.

7-Autenticar el altavoz Raspberry-Pi de Alexa

Para autenticar la Raspberry, ahora necesita el Alexa Companion Service, una especie de interfaz o puerta de enlace para establecer la conexión entre el miniordenador y los servidores de AVS. Para utilizar este servicio, cambie al directorio adecuado mediante la terminal y, después, inicie la aplicación con el servicio de paquetes npm. Para ello, introduzca los siguientes comandos uno tras otro:

cd ~/alexa-avs-sample-app/samples/companionService
npm start

Si se ha iniciado correctamente, la terminal muestra el mensaje “Listening on Port 3000ˮ. Minimize la ventana de la terminal y abre una nueva instancia del símbolo del sistema. 

Es importante minimizar y no cerrar la ventana de la terminal en la que se ha iniciado Alexa Companion Service. El servicio debe ejecutarse en segundo plano para que la Raspberry Pi pueda comunicarse con los servidores de Alexa Voice.

El siguiente paso es abrir el directorio del cliente de Companion. Como está programado en Java, puedes utilizar Maven, la herramienta de gestión de proyectos Java (mvn):

cd ~/alexa-avs-sample-app/samples/javaclient
mvn exec:exec

Unos segundos después de introducir el comando, se abre una ventana de diálogo emergente que le pide que acceda a una URL específica con un navegador para registrar la Raspberry. Acepte la solicitud haciendo clic en “Aceptarˮ. El enlace se abrirá automáticamente en el navegador predeterminado

Después de hacer clic en “Aceptar, se abre otra ventana de diálogo en el cliente Java, a la que no debe prestar atención en este momento.

En el navegador, verá la página de inicio de sesión de Amazon o, en algunos casos, el mensaje de que el sitio web no está disponible. Esto último, sin embargo, no supone ningún problema: no tiene más que hacer clic en “Advancedˮ (avanzado) en la esquina inferior izquierda y, después, en “Proceed to localhostˮ (continuar a localhost) para acceder a la ventana de inicio de sesión. Inicie sesión con tu cuenta de desarrollador de Amazon y confirme que su altavoz Raspberry Pi de Alexa puede obtener acceso a la cuenta de Amazon.

Si la autenticación se lleva a cabo con éxito, el navegador genera el mensaje de “device tokens readyˮ. Ahora pueds pulsar “OKˮ en la ventana del cliente Java que ignoraste previamente para finalizar la autenticación.

8-Activar la detección de la palabra de activación

Alexa ya está lista para usar, por lo que puede interactuar con el software de voz en cualquier momento a través del cliente AVS: para ello, haga clic en el icono del micrófono y formula la pregunta que desees. Sin embargo, para que Alexa también se active cuando diga la palabra de activación, como Alexa, necesitas iniciar el llamado Wake Word Agent. Para ello, en una nueva ventana de la terminal, accede al directorio del agente (KITT AI) y, luego, inícialo:

cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src
./wakeWordAgent -e kitt_ai

Si la terminal muestre el mensaje “Connected to AVS clientˮ, puede utilizar Alexa con normalidad mediante el control por voz.

9- Ultimo paso :crear un script de inicio automático para Alexa en la Raspberry Pi

Para evitar tener que iniciar Alexa manualmente cada vez que encienda la Raspberry Pi, también deberá crear un script de inicio que se ejecute automáticamente cada vez que se encienda la RPi.

Para hacerlo, en primer lugar, cree el archivo de script con el siguiente comando de terminal:

sudo nano alexa.sh

En el script, introduzca las siguientes líneas de código:

#!/bin/bash
lxterminal -l -e "cd ~/alexa-avs-sample-app/samples/companionService && npm start;" &

sleep 10s

lxterminal -l -e "cd ~/alexa-avs-sample-app/samples/javaclient && mvn exec:exec;" &

sleep 30s

lxterminal -l -e "cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e kitt_ai;" &

Esta secuencia de comandos automatiza el proceso de autenticación descrito en el séptimo paso, iniciando primero el Alexa Companion Service y, después, el cliente Java. Posteriormente, inicia el Wake Word Agent descrito en el octavo paso.

Guarde el script y conceda al sistema los derechos de acceso necesarios mediante chmod:

sudo chmod +x alexa.sh

Para el script, cree un archivo de inicio automático:

sudo nano /home/pi/.config/autostart

Complete este archivo con el siguiente contenido, de modo que el script generado se ejecute automáticamente cada vez que inicies la Raspberry Pi como altavoz de Alexa:

[Desktop Entry]
Comment=Comment
Exec=/home/pi/alexa.sh
Name=alexa.sh
Path=/home/pi/alexa.sh
Type=Shell

Po