Homeware es una API para Google Home diseñada para que de una vez por todas puedas conectar tus dispositivos y circuitos a Google Home y Google Assitant de la forma correcta, sin usar IFTTT.

Vídeo en el que se revisan los conceptos básicos sobre HomeWare, una API para Google Home.

Homeware es una API y para hacerla funcionar debemos desplegarla.

El despliegue es el proceso por el cual ponemos en funcionamiento nuestra propia copia de Homeware y la configuramos para funcionar con nuestros datos.

Desplegar HomeWare

El proceso para desplegar HomeWare es tedioso, pero, para que no te pierdas, lo vamos a realizar juntos.

Vídeo con el paso a paso del despliegue de Homeware

Antes de comenzar debes tener en cuenta que HomeWare es una REST API que se despliega como un proyecto de Firebase, una plataforma de Google, y que para llevarlo a cabo necesitas una cuenta de Google. Debes usar siempre la misma cuenta, con independencia de en que dispositivo, plataforma o sitio web te encuentres durante el proceso de despliegue.

Control de la Actividad – Dando permisos

El control de actividad de Google nos permite controlar que tareas puede realizar Google con nuestra cuenta y que datos tiene permitido almacenar. Para poder usar HomeWare tenemos que asegurarnos de que están activos varios permisos con estos pasos:


1 Abrir la página de Control de la actividad de la cuenta de Google

2 Activar el apartado Actividad en la web y en aplicaciones

3 Activar el apartado Información de tus dispositivos

4 Activar el apartado Actividad de Voz y Audio

Actions on Google – Creando un proyecto

Todo el proceso de control de Google Home se basa en un proyecto que debemos crear en Actions on Google. Este proyecto sirve para configurar cómo y por donde se debe comunicar Google con la API de HomeWare. Sigue los siguientes pasos para que todo vaya como la seda.


1 Abrir la consola de Actions on Google.

2 SeleccionarNew project.

3 Elegir un nombre para el proyecto.

Para evitar problemas, es preferible que el proyecto se llame Home.

4 Seleccionar la categoría Home control.

5 Seleccionar Smart home.

6 Seleccionar Develop del menú superior y posteriormente Invocation del menú izquierdo.

7 Escribir Home como nombre de Display y hacer clic en el botón Save.

¡Ya hemos creado el proyecto de Actions on Google! Los proyectos en Google Cloud se identifican con un ‘ID de proyecto’. Este sirve para identificarlo en todas las plataformas y conocer la URL del proyecto. Debemos seguir los siguiente pasos para averiguar cual es el ID de proyecto.

8 Ir a la Consola de Firebase.

9 Seleccionar el proyecto Home.

10 Hacer clic en el engranaje que aparece en la parte superior del menú lateral.

11 Apuntar el ID de proyecto que aparece en pantalla para usarlo más adelante.

Habilitar HomeGraph – La API de Google

1 Abrir la consola de Google Cloud y seleccionar el nombre del proyecto con el desplegable que aparece en la barra superior de la página.

2 Ve a la sección de Credenciales en el menú APIs & Services del menú lateral izquierdo.

3 Hacer clic en Crear credenciales.

4 Selecciona API key.

Apunta la API key que ha generado Google ya que la necesitaremos más adelante.

Firebase CLI – Run it locally

Para poder trabajar con el código de la API para Google Home y desplegarlo a Firebase necesitamos disponer de las herramientas adecuadas instaladas en el ordenador. Las siguientes instrucciones son para sistemas operativos basados en Linux. Si usas otro, no olvides que puedes recurrir a la documentación de Firebase para ver la forma correcta de hacerlo.


1 Abrir un terminal y ejecutar:

npm -g install firebase-tools

2 Verificar la instalación con:

firebase --version

3 Iniciar sesión con la cuenta de Google:

firebase login

4 Descargar o clonar el repositorio de HomeWare.

5 Entrar en el directorio API y ejecuta:

firebase use --add

6 Seleccionar el ID de proyecto y seguir las instrucciones.

7 Ir a la carpeta Functions e instalar las dependencias.

npm install

8 Crear las siguientes variables de entorno ejecutando:

firebase functions:config:set system.api-key="[API_key]" 
firebase functions:config:set system.api-uri="https://us-central1-[id].cloudfunctions.net"

Asegúrate de configurar las variables con los parámetros de tu proyecto.

  • [API_key] es el API key que nos proporcionó Google desde su consola
  • [id] es el ID de proyecto que obtuvimos del proyecto de Google Actions

9 Vuelve al directorio API y despliega la API

firebase deploy

Puedes entrar en https://[id].firebaseapp.com para verificar que el despliegue se ha realizado con éxito. Al entrar deberías ver un mensaje de bienvenida.

Base de datos de la API

1 Entrar en la consola de Firebase.

2 Seleccionar Database desde la sección Develop del menú lateral izquierdo.

3 Crear una nueva base de datos.

4 Habilitar tanto la configuración lectura como la de escritura.

5 Seleccionar Importar JSON desde el menú con 3 puntos verticales de la parte superior derecha.

6 Subir el archivo JSON que se encuentra en la carpeta Database del repositorio.

Configurar el proyecto en Google Actions

Llegados a este punto solo nos queda configurar el proyecto de Google Actions que creamos al principio. Gracias al proceso de configuración le indicaremos a Google donde está nuestra API y como tiene que comunicarse con ella.


1 Ir a la consola de Actions on Google y seleccionar el proyecto adecuado.

2 Ir a la sección Develop del menú superior y seleccionar Actions en el menú de la izquierda.

3 Indicar la URL de fullfilment usando el ID de tu proyecto.

https://us-central1-[id].cloudfunctions.net/smarthome

Atent@!

Asegúrate que la zona de tu despliegue de Firebase es «us-central1». Si no fuera así debes cambiar «us-central1» por lo que corresponda en todas las URL que configuramos en el despliegue.

Puedes ver la zona en cualquier URL de la sección Desarrollo > Functions de la consola de Firebase.

4 Clic en Save.

5 Ir a la sección Account linking del menú de la izquierda.

6 Marcar No, I only want to allow account creation on my website y clic en Save

7 Seleccionar OAuth y Authorization code y a a continuación hacer clic en Next.

8 Configurar la información de cliente como en la siguiente tabla y hacer clic en Next. Asegúrate de usar los datos de tu proyecto.

ParámetroValor
Client ID123
Client Secret
456
Authorization URL
https://us-central1-[id].cloudfunctions.net/auth
Token URL
https://us-central1-[id].cloudfunctions.net/token

9 Habilitar Google to transmit clientID and secret via HTTP basic auth header en Configure your Client y clic en Next.

10 Escribir lo siguiente en el cuadro Testing instrucions y hacer clic en Save.

No authentication needed

11 Ir al simulador en la sección Test del menú superior.

12 Seleccionar START TESTING.

Llegados a este punto lo tenemos todo desplegado y preparado para funcionar.

Enlazar la API para Google Home en la aplicación Google Home

Aún nos queda por realizar un último paso crucial para el funcionamiento y consiste en conectar la aplicación de Google Home que debes instalar en tu Smartphone con el proyecto.

1 Abrir la aplicación Google Home en el Smartphone.

2 Seleccionar Añadir.

3 Clic en Nuevo dispositivo.

4 Seleccionar Funciona con Google.

5 Marca la opción similar a [Test] Home.

¡Lo tenemos! Ya está todo configurado. Si todo ha ido bien al volver a la página principal de la aplicación Google Home debe aparecer una bombilla inteligente (ficticia por ahora) llamada Bulb.

Desplegar el CMS

Ya tenemos nuestra API para Google Home despliegada, sin embargo, necesitamos alguna forma de crear dispositivos. Esto se hace con el CMS.

El CMS o Content Managment System es una aplicación web que nos permite crear dispositivos y modificar sus propiedades. Todo esto sin necesidad de manipular la base de datos de manera manual. ¡Con colores todo es más bonito!


1 Dirigirse a la Consola de Firebase

2 Hacer clic en el engranaje que aparece en la parte superior del menú lateral.

3 Apuntar la API Key que aparece en pantalla.

4 En la carpeta public que se encuentra en la carpeta API del proyecto, modificar todos los archivos JS para incluir el ID de proyecto y la API Key.

5 Volver a la carpeta API y ejecuta en el terminal:

firebase deploy --only hosting

Cambia [id] por el ID de tu proyecto en https://[id].firebaseapp.com/cms/  y dirígete a esa dirección para acceder al CMS. Debe aparecer una página de login en la cual introducir un usuario y una contraseña. Estas credenciales aún no están creadas, así que: ¡vamos allá!

6 Volver a la Consola de Firebase

7 Seleccionar la opción Authentication que se encuentra en el menú izquierdo.

8 En la pestaña SIGN-IN METHOD habilitar la opción Email/Password usando el icono del lápiz.

9 Volver a la pestaña USERS y crear un nuevo usuario.

Crear un dispositivo

Llegados a este punto, lo tenemos todo desplegado y solo nos queda crear nuestros propios dispositivos. ¡El límite está en cómo controles los electrones que te rodean!

  1. Crear el dispositivo desde el CMS.
  2. Preparar el ESP8266 y programarlo con alguno de los códigos de ejemplo.
  3. ¡A volar!

En este vídeo repasamos cómo realizar los pasos anteriores convirtiendo un ESP8266 en una bombilla inteligente, ya que controlamos desde Google Home tanto su brillo como su estado de activación.

Cómo crear un dispositivo en Homeware

¿Alguna duda?¿Alguna idea? Compártela en los comentarios.

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en enrique.rinconingenieril.es

92
Leave a Reply

avatar
28 Hilos de comentarios
64 Respuestas a los hilos
4 Followers
 
Más recientes
Hilos más activos
26 Comentarios de autores
JuanArturodaniel madridEnrique GómezEnrique Lescano Comentarios recientes de autores
  Suscribete  
Nuevos Antiguos Más votados
Notificame
Carlos Sánchez Payá
Invitado
Carlos Sánchez Payá

Bien he llegado bastante lejos, estoy en la parte final de «Configurar el proyecto en Google Actions» paso 11 y 12.
Creo que han cambiado la web de google y están en otro sitio los botones porque ahora Test parece que es una sección de arriba y lo de Start Testing no lo encuentro 🙁

Alejandro Garcia
Invitado
Alejandro Garcia

Hola, en la seccion «Configurar el proyecto en Google Actions» punto 8 «Configurar la información de cliente», los parametros Client ID y CLient Secret, donde los puedo conseguir?
Client ID 123
Client Secret 456

Alejandro Garcia
Invitado
Alejandro Garcia

Enrique, gracias por el tutorial y las respuestas. Te pido disculpas por mi español Funciona todo excepto en la app Google Home en mi mobile, cuando creo el new device puedo ver [Test]MyProject pero al seleccionar obtengo mensaje: Algo ha ido mal con la autorización. Creo esta relacionado con el error cuando ejecuta firebase deploy ( missing file .key.json ) Con la última versión del repo todavía hay error missing key.json cuando deploy. Si lo creo manualmente finaliza el deploy pero no estoy seguro si el formato del objeto es correcto, se ve asi: { «project-ID»: { «key»:»xxx», «id»:»xxxxx» }… Leer más »

CHRIS
Invitado
CHRIS

Hola disculpa donde esta el ( missing file .key.json) y que es lo que creas manualmente…si me podrias ayudar gracias

Carlos Sánchez Payá
Invitado
Carlos Sánchez Payá

Una chorrada, en configurar el proyecto en google actions paso 3 la dirección debe acabar con / al final
https://us-central1-[id].cloudfunctions.net/smarthome/

Carlos Sánchez Payá
Invitado
Carlos Sánchez Payá

Me he atascado otra vez jejeje. He visto que ha habido gente que ha podido avanzar algo mas. Yo he completado los pasos del despliegue del CMS pero me sigue apareciendo lo mismo:

«Hello World!

This is my first Smart Home provider cloud service for Google Home»

abel tkachuk
Invitado
abel tkachuk

Hola Enrique un Gusto.
Exelente tu explicación, me funciono, me llevo 3 noches pero lo logre. Lo único es que cuando quiero loguearme al CMS siempre me deja la misma pantalla, y no hace nada.

Saludos,

Abel
BsAs, Argentina

Jesus Luna
Invitado
Jesus Luna

Enrique un gusto conocerte y agradecer el compartir tus conocimientos, estoy tratando de seguir tus instrucciones pero tengo problemas para cargar el Json no aparecen los tres puntos no se exactamente donde esta, gracias

Yair Hernandez
Invitado
Yair Hernandez

Hola Enrique, muchas gracias por compartir tus conocimientos, estoy siguiendo tus instrucciones al pide de la letra pero en el paso 8 de «configurar google Actions» en la sección de «client information» no me habilita el botón «next» por alguna razón, ya revise que el Client-ID y el Client Secret sean los mismos en la base de datos, te dejo una captura para ayudar en la explicacióncomment image

Espero puedas ayudarme ya que llevo varios días sin poder lograrlo, Saludos desde México

CHRIS
Invitado
CHRIS

Hola alguien me puede ayudar…. hice todo lo del tutorial pero cuando le doy a [test] home en la app de google home, me redirige a una pagina web (https://us-central1-[id].cloudfunctions.net) (el id si que se lo cambie), carga esta pagina y luego vuelve a la app de Google home la rueda azul que sale en el centro de la pantalla se pone roja y vuelve a la pantalla de gestionar cuentas.

CHRIS
Invitado
CHRIS

Hola lo siento por tanta molestias…pero lo he intentado varias veces con diferentes cuentas y móviles y siempre da el mismo error y no se a que se debe, el error en cuestión es el siguiente. 1:42:45.761 p. m. auth Function execution took 1459 ms, finished with status code: 302 1:42:44.302 p. m. auth Function execution started Lo veo en el registro de funciones de firebase. te adjunto una foto de las funciones que obtengo en firebase. Si necesitas mas información para descubrir el error no dudes en pedírmelo. ademas por lo que he leído en todos los comentarios es… Leer más »

Francisco
Invitado
Francisco

Hola, tengo un problema con mi ESP8266, lo que pasa es que no me detecta ninguna red, como podría solucionar esto?

Gracias

Jose Maria Blanco
Invitado
Jose Maria Blanco

Buenas tardes primero muchas gracias por la explicación es muy bueno pero todo lo tengo OK asta que intento que salga el dispositivo en Google Home, que no sale.

Carlos Sánchez Payá
Invitado
Carlos Sánchez Payá

Sigo atascado con lo de «Function execution took 1316 ms, finished with status code: 200» ¿Le pasa a alguno mas?

guillermo
Invitado
guillermo

Buenas noches desde México, es muy interesante y mil gracias por compartir tus conocimientos. Ahora mismo tengo un problema con arduino. Me marca demasiados errores de compilación. ¿De casualidad tendrás alguna referencia para hacer esto?

undefined reference to `Homeware::getToken()

Y de nuevo felicidades!!!!

tayson1984
Invitado
tayson1984

Buenas, he conseguido que todo funcione hasta el flasheo del ejemplo «light». Revisando el puerto COM4 en Arduino IDE aparece continuamente el mensaje «0» y «deserializeJson() failed: InvalidInput». No se si puede ser un problema con ArduinoJson.h o otra. A que puede deberse? Seria posible disponer del proyecto con las librerías. Por otro lado observo que en la base de datos status > light, el valor online no se actualiza. Una vez se ha puesto en «true» si desconecto el ESP8266 no pasa a «offline». Si observo en alive se actualiza periodicamente el timestamp por lo que parece que si… Leer más »

guillermo
Invitado
guillermo

Hola Tayso, tengo el mismo problema. Pudiste resolverlo?

Jairo Abraham Bernal
Invitado
Jairo Abraham Bernal

Le ha pasado a varias personas y no parece haber respuesta, el chico de la página responde otros comentarios pero no este

Ramon
Invitado
Ramon

Buenas tardes muchas gracias por tu gran trabajo;
he llagado a el punto Base de datos de la API el punto 5 y no encuentro
«Seleccionar Importar JSON desde el menú con 3 puntos verticales de la parte superior derecha.»
me puedes ayudar??
como continuo desde este punto tengo que repetir todo ??
mucha sgracias.

Leonardo Martínez
Invitado
Leonardo Martínez

Por favor, necesito tu ayuda!!.. he seguido todos los pasos pero a la hora de darle en [Test]Home no ocurre nada! no aparece el nuevo dispositivo. revisé los links de Auth y Token y están bien..y ya configuré la cuenta de facturación. En la sección de registros de Firebase me da el siguiente mensaje: Function Execution finished with Status code 302. ayudame por favor

carlos
Invitado
carlos

perdonen por mi ignorancia pero quería saber como puedo montar el código de la API en windows descargue node.js pero no se como empezar montar

Enrique Lescano
Invitado
Enrique Lescano

Yo también no sabia por donde comenzar, pero googleando(https://www.guru99.com/download-install-node-js.html) encontré como instalarlo vía windows y funciono si sigues todos los pasos, me quede instalando en la librería en el ide de arduino, pero me salio un error compilando la tarjeta esp32(cambie la librería ESP8266WiFi.h por wifi.h) este error salio:’class WiFiClientSecure’ has no member named ‘setInsecure’ _client->setInsecure(); un tema menor que seguro buscando podre solucionar, muchas gracias por compartir tus conocimientos yo solo quería prender un led por google asistant y llegue por acá.
saludos desde Peru.

mathias
Invitado
mathias

hola muy buen trabajo tengo un problema necesito ayuda urgente quiero programar mi node mcu con el código que esta de ejemplo pero no puedo me salta error
error: ‘class WiFiClientSecure’ has no member named ‘setInsecure’

_client->setInsecure();
espero que me puedan ayudar muchas gracias

Maximo Huykman
Invitado
Maximo Huykman

Buenos días, primero quiero agradecerte por el excelente trabajo que hiciste, pusiste a los creadores de dispositivos a la altura de las grandes empresas
Tengo una consulta, si es que entendí bien el código es posible que el ejemplo de Arduino ejecute la función read una vez por segundo? No es posible para reducir las invocaciones que firebase le mandé una alerta de cambio de estado de la base de datos y ahí recién pedir el json?
Saludos y gracias
Maximo

Juan
Invitado
Juan

Una pregunta, se podrían controlar varias luces, por ejemplo tres, con sus correspondientes pulsadores con éste método? yo lo tengo programado pero como cliente web y me funciona bien, pero claro, google no me lo reconoce y tengo que usar IFTTT, gracias.

Jairo Abraham Bernal
Invitado
Jairo Abraham Bernal

Excelente, me llevó un rato porque el proyecto lo crea en us-east1 y entonces yo ponía eso en todas las cadenas de conexión y no funcionaba, finalmente los puse con us-central1 y funcionó perfecto. Me queda la duda de por qué si en el firebase dice que el proyecto está en us-east1 hay que dejar las cadenas con us-central1 pero luego lo averiguaré.
Una pregunta: ¿Cómo puedo enviar el estado que cambio de una bombilla a través de un pulsador en el ESP8266?

vladimir
Invitado
vladimir

buen dia, en primer lugar agradecer y felicitarte por tus tutoriales son muy buenos !!! queria hacerte una consulta con respecto al esp2866 para que funcione con google home tenemos que creas el homeware cierto?.( el cual es algo tedioso) pero luego de eso todo se simplifica, comparandolo con alexa vi por ahi que es mas sencillo implementarlo ya que su propia aplicacion hace la conexion al menos para un foco o bombilla, lo que queria consultarte es si el asistente de google ofrece alguna ventaja frente a esto? gracias. espero me deje entender xD

Arturo
Invitado
Arturo

Muchisimas gracias por el trabajazo!

Llevaba tiempo buscando soluciones para incluir un modulo ESP8266 directamente en google.

PD: Si al llegar al final de los pasos, todavía no se ha completado una cuenta de facturación para Firebase no funcionaría, pero no dá errores. Se debe ver en la pantalla de registros del panel de control de Firebase.

Saludos!

Luis Portillo
Invitado
Luis Portillo

Hola Enrique excelente tutorial. Tengo una duda en la cual quizás puedas ayudarme. Tengo una placa con chip esp32 traté de ejecutar tu programa modificando el #include del archivo homeware.h por #include que es el de la librería del esp32 pero al compilar me genera el siguiente error:» homeware.cpp:23:12: error: ‘class WiFiClientSecure’ has no member named ‘setInsecure’ _client->setInsecure();». Agradecería tu ayuda con la migración. Un saludo.

Enrique Lescano
Invitado
Enrique Lescano

Buenas tardes por consulta ya me funciono todo con el esp32, pero no muestra online el dispositivo por que no hay una cuenta de facturación en firebase pero en google cloud platform tambien me muestra el error(TypeError: Object(…).forEach is not a function) mis preguntas son:
1:El error de google cloud es por la cuenta de facturación de firebase?.
2:Existe la prueba de un año de google cloud usándola se activa la cuenta facturación en firebase o son dos temas muy distintos?.
3:Si fuera temas distintos, debería activar solo la facturación de firebase o también activar la prueba de google cloud?.
UN gran trabajo saludos

Luis Portillo
Invitado
Luis Portillo

Buenos días, Enrique. Me podrías decir como solucionaste el error:’class WiFiClientSecure’ has no member named ‘setInsecure’ _client->setInsecure(); Con el esp32. Un saludo.

Enrique Lescano
Invitado
Enrique Lescano

claro aunque no sé si después cause algún problema o inestabilidad en el programa.
Comente esa opción en la librería, es decir busque el archivo homeware.cpp; dentro de este busque «_client->setInsecure();» y lo deje asi «//_client->setInsecure();» .Saludos

daniel madrid
Invitado
daniel madrid

me podrías ayudar para poder usar un ESP32, igual tengo planeado usarlo, saludos

daniel madrid
Invitado
daniel madrid

excelente tutorial, me ha salido a la perfección lo de la bombilla, como puedo poner diferentes dispositivos en un solo ESP82 al utilizar varios de sus pines

daniel madrid
Invitado
daniel madrid

Perdon , intente agregar otro dispositivo y se borro el que ya tenia, ¿ como arreglo ese problema? gracias y saludos

Cerrar menú