Saltar al contenido

Cree una interfaz de Alexa para OurWeather (estación meteorológica basada en ESP8266)

julio 10, 2021
FC5YLMWJC0UCKTK

En este Instructable, le mostraremos cómo conectar los sistemas Alexa en su casa a su kit de estación OurWeather (basado en ESP8266). Incorporaremos este conjunto de funciones realmente genial en nuestras otras ofertas principales de kits, que incluyen:

Este es un tutorial instructivo de cuatro pasos principales para que su interfaz de OurWeather a Amazon Alexa funcione. ¡Se proporciona todo el código fuente!

Si bien nos enfocamos en OurWeather en este Instructable, las técnicas que desarrollamos son buenas para muchos proyectos.

¿Qué es OurWeather?

0070G

Nuestro tiempo es una estación meteorológica conectada basada en ESP8266 que contiene 7 sensores diferentes que enseñarán sobre electrónica, software y copia no especificada-8 tiempo. Contiene todos los sensores y cables para hacer una estación meteorológica WiFi completamente funcional. No se requiere programación de software, funciona nada más sacarlo de la caja. Sin embargo, si desea cambiar la forma en que funciona OurWeather, agregar su propio software o hacer algo completamente diferente, tenemos el software de código abierto disponible. ¿Y cuál es una de las características más interesantes de OurWeather? La construcción del kit NO REQUIERE SOLDADURA. Utiliza conectores Grove. Todo es un edificio plug and play, con un completo manual de instrucciones paso a paso basado en fotografías. Es una forma segura y educativa de aprender sobre temas relacionados con el clima, la electrónica y la ciencia. Puedes ver nuestro exitoso video de kickstarter aquí: https://youtu.be/pw6hSNSQnsM

Vea el tutorial de Grove Connector aquí.

¿Cómo funciona la interfaz de OurWeather a Alexa?

A continuación se muestra un diagrama de bloques de cómo funciona el sistema para que la información de OurWeather llegue a Alexa y cómo responder a los comandos de voz con información real.

IMG 1277

El proyecto Alexa Voice to OurWeather

Este proyecto consta de cuatro partes principales.

  • PubNub – Broker MQTT entre OurWeather y la función AWS Lambda
  • La habilidad de Alexa – Controla Alexa en Echos en tu casa
  • La función sin servidor de AWS Lambda para la intermediación de información de PubNub a Alexa Skill
  • Nuestro tiempo – Información meteorológica del editor MQTT en PubNub

¿Qué es MQTT?

Dado que el protocolo de transporte principal utilizado en este proyecto es MQTT, conviene una explicación.

MQTT es un protocolo de mensajería “ligero” basado en publicación-suscripción que se utiliza además del protocolo TCP / IP, como los paquetes WiFi que estamos utilizando en este proyecto. Está diseñado para conexiones con ubicaciones remotas donde se requiere una “huella de código pequeña” o el ancho de banda de la red es limitado. El patrón de mensajería de publicación-suscripción requiere un intermediario de mensajes. El corredor (PubNub en este caso) es responsable de distribuir mensajes a los clientes interesados ​​en función del tema de un mensaje.

mqttorg-resplandor Publicar-suscribirse es un patrón en el que los remitentes de mensajes, llamados editores (en este caso, nuestro ESP8266 es el editor), no programan los mensajes para que se envíen directamente a los suscriptores, sino que caracterizan las cargas útiles de los mensajes en clases sin el conocimiento específico de cuáles suscriptores a los que se envían los mensajes. Del mismo modo, los suscriptores solo recibirán mensajes que sean de su interés sin un conocimiento específico de qué editoriales existen. Mosquitto opera como intermediario en este sistema y enruta los datos publicados a los suscriptores apropiados.

Puede pensar en MQTT como escribir historias para un periódico en el que no sabe quién se suscribirá al artículo.

¿Qué es JSON?

JSON es un formato estándar abierto que utiliza texto legible por humanos para transmitir objetos de datos que constan de pares atributo-valor. Es el formato de datos principal logo-json Se utiliza para la comunicación asincrónica entre navegador y servidor, reemplazando en gran medida a XML. XML es un protocolo “más pesado” que también es de naturaleza jerárquica, pero con mucha más redundancia que JSON. Sí, hay guerras de clases para las personas que abogan por JSON sobre XML, pero en el mundo actual de comunicaciones de alta velocidad, rara vez importa. Puede argumentar que la mayor densidad de datos de JSON es una mejor opción para las aplicaciones IOT.

Los cuatro bloques de la voz de Alexa para el proyecto OurWeather

PubNub

PubNub es un bróker MQTT en el mismo sentido que Mosquitto MQTT Broker está en una plataforma Raspberry Pi. cloud red

PubNub es una empresa global de Data Stream Network (DSN) y de infraestructura como servicio (IaaS) en tiempo real con sede en San Francisco, California. La empresa fabrica productos para desarrolladores de software y hardware para crear aplicaciones web, móviles y de Internet de las cosas (IoT) en tiempo real.

El producto principal de PubNub es una publicación / suscripción de MQTT en tiempo real[2] API de mensajería construida sobre su red de flujo de datos global que se compone de una red replicada de al menos 14 centros de datos ubicados en América del Norte, América del Sur, Europa y Asia. La red actualmente sirve a más de 300 millones de dispositivos y transmite más de 750 mil millones de mensajes por mes.

La base de PubNub le brinda la capacidad de integrar flujos de datos escalables y en tiempo real en sus aplicaciones. Usando el paradigma de publicación / suscripción, los suscriptores de un canal en particular recibirán todos y cada uno de los mensajes que se publiquen en ese canal. No importa si hay un suscriptor, 10 suscriptores, 1000 suscriptores o millones de suscriptores, se entregará un mensaje publicado a todos esos suscriptores en ese canal en menos de ¼ de segundo.

PubNub también admite microservicios BLOCKS que pueden actuar como funciones AWS Lambda Severless. Más sobre BLOQUES en futuras publicaciones en blogs.

Como en el diagrama de bloques anterior, los datos de OurWeather se envían a través de MQTT a PubNub. PubNub almacena un breve historial de mensajes (el último será capturado por la función AWS Lambda a continuación) como tema (OWIOT1 es el canal en este caso).

El nivel básico de PubNub (que estamos usando) es gratuito.

La habilidad de Alexa

Alexa es el servicio de voz de Amazon y el cerebro detrás de decenas de millones de dispositivos como Amazon Echo, Echo Dot y Echo Show. Alexa 51zBEycBy5L. SL500 AA300 .png proporciona capacidades o habilidades que permiten a los clientes crear una experiencia más personalizada. Ahora hay decenas de miles de habilidades de compañías como Starbucks, Uber y Capital One, así como de otros diseñadores y desarrolladores innovadores.

Estamos construyendo una habilidad de Alexa que se conectará con el kit meteorológico completo OurWeather de Switchdoc Labs. Proporciona la interfaz de su eco de Amazon al sistema OurWeather. La habilidad de Alexa gestiona la parte de voz del proyecto. Se necesitan comandos verbales (“Alexa, pregunte el estado de OurWeather” que proporciona el tiempo actual en YOUR OURWEATHER). Es importante tener en cuenta que nunca publicará su habilidad en el mercado general. Esto es para todos sus Amazon Echos, etc. en su casa conectados a su cuenta de Amazon. En la casa de nuestro CTO, tiene alrededor de 10 dispositivos Alexa, todos conectados a su cuenta de Amazon y conectados a sus diversos proyectos SwitchDoc, como OurWeather, GroveWeatherPi y el famoso SmartPlantPi.

Una habilidad de Amazon Alexa toma la entrada de voz de un Amazon Echo u otro dispositivo, la traduce a texto, la compara con lo que espera la habilidad (“expresiones”) y luego envía una respuesta JSON a una aplicación o servidor específico (hemos usado Apache servidores en el pasado para recibir esta entrada, pero esto requiere que haga un agujero en el firewall de su hogar y era realmente demasiado complejo para que el usuario normal lo implementara). Esto llevó a nuestro uso de la función AWS Lambda “impulsada por eventos”. Sin servidor. Sin problemas de firewall. No hay servidor de software en su sitio. Mucho más simple.

51CzSBKn2L. SL210 QL95 BG0000 FMpng El Alexa Skills Kit (ASK) es una colección de API de autoservicio, herramientas, documentación y ejemplos de código que hace que agregar habilidades a Alexa sea rápido y fácil. ASK permite a los diseñadores, desarrolladores y marcas desarrollar habilidades atractivas y llegar a los clientes a través de decenas de millones de dispositivos habilitados para Alexa. Con ASK, puede aprovechar el conocimiento y el trabajo pionero de Amazon en el campo del diseño de voz. En la Parte 2, le mostraremos cómo configurar su habilidad de Alexa para interactuar con OurWeather. No bromeamos. Este es un conjunto genial de herramientas y un proceso interesante.

Esta es otra cuenta gratuita con Amazon.

La función sin servidor de AWS Lambda

La función Lambda es la parte más difícil de entender de este proyecto. ¿Porqué necesitamos esto? Una habilidad de Amazon Alexa es lambda preocupado por “enunciados” y cómo interpretarlos. Cuando habla con Alexa, Alexa traduce su voz a texto y envía una solicitud a la función Lambda. La función Lambda interpreta esta solicitud JSON de Alexa, recopila los datos meteorológicos a través de una solicitud de historial MQTT de PubNub (que vino de OurWeather a través de MQTT) y envía una respuesta de texto (JSON nuevamente) a Alexa con los datos meteorológicos requeridos incrustados, y Alexa habla el resultado.

AWS Lambda es una plataforma informática sin servidor impulsada por eventos proporcionada por Amazon como parte de los servicios web de Amazon. Es un servicio de computación que ejecuta código en respuesta a eventos y administra automáticamente los recursos de computación requeridos por ese código. Fue introducido en 2014.

node.js Estamos usando node.js para escribir nuestra función Lambda. Las partes fueron muy desafiantes (lidiar con devoluciones de llamada asincrónicas en un entorno que terminará cuando termine de ejecutar el código), pero logramos que funcione perfectamente. Encontrará el código fuente abierto en la Parte 3.

El propósito de Lambda, en comparación con AWS EC2 (servidores basados ​​en la nube), es simplificar la creación de aplicaciones más pequeñas y bajo demanda que respondan a eventos e información nueva. Los objetivos de AWS inician una instancia de Lambda en milisegundos de un evento. Node.js, Python, Java y C # a través de .NET Core se admiten oficialmente a partir de 2016, y se pueden admitir otros lenguajes a través de llamadas. Sin embargo, algunos tiempos de ejecución, como Java Virtual Machine, pueden ser más lentos que otros para iniciarse.

A continuación se muestra una solicitud JSON de Alexa Skill a la función Lambda. Tenga en cuenta que la función Lambda está impulsada por eventos, por lo que se activa con esta solicitud, obtiene los datos meteorológicos a través de MQTT de PunNub, crea la respuesta y la envía de regreso a Alexa (con información confidencial redactada):

{
  "session": {
    "new": true,
    "sessionId": "SessionId.f02ae7fb-5045-4c86-8937-b44a74e63f6e",
    "application": {
      "applicationId": "amzn1.ask.skill.1XXXXX"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.XXXXXXXX"
    }
  },
  "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.3560fc59-308d-41a4-8396-2e56d4781ce3",
    "intent": {
      "name": "temperature",
      "slots": {}
    },
    "locale": "en-US",
    "timestamp": "2017-12-30T00:45:17Z"
  },
  "context": {
    "AudioPlayer": {
      "playerActivity": "IDLE"
    },
    "System": {
      "application": {
        "applicationId": "amzn1.ask.skill.111c1582-8cc3-43af-afb9-984fb01f805a"
      },
      "user": {
        "userId": "amzn1.ask.account.XXXX"
      },
      "device": {
        "supportedInterfaces": {}
      }
    }
  },
  "version": "1.0"
}

Y la respuesta JSON a la habilidad de Alexa desde la función Lambda:

{
  "version": "1.0",
  "response": {
    "outputSpeech": {
      "type": "PlainText",
      "text": "Outside Temperature is 25.9 degrees F"
    },
    "shouldEndSession": true
  },
  "sessionAttributes": {}
}

Una pregunta válida en este punto, es por eso que la función Lambda no solo se suscribe (a través de MQTT) al canal de datos meteorológicos (OWIOT1) en PubNub? La razón es que no queremos que la función Lambda se esté ejecutando todo el tiempo (que debe ejecutar para ser un suscriptor), queremos que Lambda …

close