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.

Antes de comenzar debes tener en cuenta que HomeWare es una REST API que se despliega en una Raspberry Pi, 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.

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.

Raspberry Pi – Deploy it!

Para poder trabajar con el código de la API para Google Home y desplegarlo necesitamos contar con una Raspberry Pi.


1 Abrir un terminal y ejecutar:

cd /home/pi
git clone https://github.com/kikeelectronico/Homeware-LAN.git
cd Homeware-LAN

2 Instalar con:

sudo sh bash/install.sh

3 Iniciar el servicio con:

sudo systemctl start homeware

4 Accede a la ip de la Raspberry Pi desde el navegador web y al puerto 5001. Por ejemplo 192.168.1.150:5001

5 Sigue las instrucciones del asistente de instalación que aparecen en pantalla.

Puedes parar la ejecución de Homeware en cualquier momento usando:

sudo systemctl stop homeware

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 Prebuilt Actions en el menú de la izquierda.

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

https://tu.dominio.loquesea/smarthome/

Atent@!

Este dominio se obtiene al seguir los pasos del asistente de instalación («Raspberry Pi – Deploy it!» paso 5) .

4 Clic en Save.

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

6 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: [id] y [region], ambas las hemos obtenido con anterioridad

ParámetroValor
Client ID123
Client Secret
456
Authorization URL
https://tu.dominio.loquesea/auth/
Token URL
https://tu.dominio.loquesea/token/

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

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

9 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.

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. Para acceder al CMS escribe tu nombre dominio en el navegador web..
  2. Preparar el ESP8266 y programarlo con alguno de los códigos de ejemplo.
  3. ¡A volar!

¿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

111
Leave a Reply

avatar
32 Hilos de comentarios
79 Respuestas a los hilos
7 Followers
 
Más recientes
Hilos más activos
32 Comentarios de autores
Jose Jaime Padilla SanzEnrique GómezFernandoSantiagoAlejandro Galfrascoli Comentarios recientes de autores
  Suscribete  
Nuevos Antiguos Más votados
Notificame
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/

Jose Jaime Padilla Sanz
Invitado
Jose Jaime Padilla Sanz

Hola Enrique. Ante todo, enhorabuena por tus videos. Me encantan.
Ya tengo instalado y funcionando Homeware en raspberrypi.
Pero no doy con la tecla para programar correctamente mi esp8266. No consigo hacerlo funcionar, a pesar de que se crean correctamente los dispositivos y los puedo visualizar en el google home.

Fernando
Invitado

Hola, estoy trasteando con la api y en cuanto al código para el esp8266 te sugiero que hagas algún cambio. Es complicado, tal y como lo tienes hecho, abrir varias instancias para cada gpio. Hay que manejar tokens por cada dispositivo, por ejemplo. Si Google permitiera descargarse varios dispositivos a la vez sería más sencillo, supongo que lo podrá hacer pues hay fabricantes que tienen gateways para sus dispositivos y supongo que lo harán así. Se bajarán una casa entera con todos sus dispositivos……
Gracias

Santiago
Invitado
Santiago

Buen dia Enrique,
Increíble tu tutorial, tengo 2 consultas, por un lado ¿donde puedo conseguir la librería del esp8266 para homware? ya que en github ya no se encuentra, y por otro lado, Al crear mas dispositivos en firebaseapp desaparecen los los que ya estaban, en si no desaparecen por que funcionan pero no los puedo visualizar en pantalla, todo lo hice con la ultima versión (v0.6.3)
saludos dese Argentina

fran
Invitado
fran

hey eres un crack! me costó un poco por el lío del us-central1 pero ya esta todo ready. Tengo 3 preguntas para ti:
1- ¿no es mas facil poner todos los nombres de fabricante en default y solo configurar los importantes?
2- ¿Sería posible hacer el cms en angular?
3- Si cambio el estado del device en la base de datos, ¿se cambia el estado fisico del device?

daniel madrid
Invitado
daniel madrid

Perdon , intente agregar otro dispositivo y se borro el que ya tenia, ¿ como arreglo ese problema? gracias y 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

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

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.

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!

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

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?

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.

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

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

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.

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

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.

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

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!!!!

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?

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.

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

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 »

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.

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

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

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

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»

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

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

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 🙁

Cerrar menú