Veremos cómo escribir en Google Sheets usando IFTTT con Home Assistant a través de webhook.
En concreto vamos a configurar un canal de comunicación desde Home Assistant hasta una hoja de cálculo de Google Sheets con el servicio IFTTT para almacenar información capturada en tiempo real. Posteriormente usaremos dichos datos para extraer algún significado de los mismos… con Paciencia
El servicio fundamental que usaremos para enlazar una plataforma (Home Assistant) con otra distinta (Google Sheets) será IFTTT.
Esta vez veremos qué hacer con IFTTT en Home Assistant, pues vamos a enseñaros cómo mandar datos desde nuestro sistema domótico hasta una hoja de cálculo de Google en Drive, a través de este servicio gratuito (If This, Then That).
Como siempre, ilustramos con un ejemplo en el que usaremos los datos de nuestra localización a través de la aplicación Home Assistant instalada previamente en nuestro móvil y que nos permitirá tener disponibles todos y cada uno de los sensores de nuestro propio móvil, incluida la localización.
Con dicha localización, le diremos a nuestro sistema que nos registre de forma automática en una hoja de Google Sheets la hora de entrada al trabajo y la hora de salida. Este es solo un ejemplo para ilustrar, pero podéis usarlo con cualquier dato que se encuentre a disposición en nuestro sistema (datos de temperaturas, entradas y salidas de casa, etc).
Por último haremos un análisis estadístico básico con los datos obtenidos y así vemos algún conceptos fáciles sobre distribuciones. Aprovecharemos para ver cómo podemos usar Google Colabs para analizar.
La idea, aparte de disfrutar montando la arquitectura, es conocer algo más con esos datos… , lo que viene siendo extraer algo de información.
Vamos a presuponer que tenemos una cuenta en Google y que tenemos instalada la aplicación de Home Assistant en nuestro móvil., y que nuestro sistema Home Assistant es accesible desde el exterior.
Podéis adaptar esta solución para almacenar datos de sensores, como el siguiente que por muy poco dinero nos dará información de la temperatura y humedad:
Bien, vamos manos a la obra como siempre paso a paso:
Tabla de contenidos
- Paso 1. Creamos una cuenta en IFTTT y configuramos nuestro Applet
- Paso 2. Obtener la clave API para llamada a servicio IFTTT
- Paso 3. Configuración de la zona de trabajo y la persona en Home Assistant
- Paso 4. Instalación de integración IFTTT con Home Assistant
- Paso 5. Creamos la automatización en Home Assistant
- Paso 6. Pruebas
- Paso 7. Análisis de los datos
Paso 1. Creamos una cuenta en IFTTT y configuramos nuestro Applet
A estas alturas, si no lo conocéis ya, os estaréis preguntando qué es IFTTT. La respuesta corta (es un servicio) no es suficiente, pero tampoco quiero que este post trate sonre IFTTT, así que por ahora suficiente con deciros que este servicio relacionará en la nube la conexión entre plataformas diferentes.
IFTTT permite crear hasta 3 applets (reglas) de forma gratuita. Más que suficiente para nuestros propósitos. Un truco si necesitamos más es usar algún campo identifcativo al escribir desde Home Assistant y luego filtrar cuando queramos usar los datos en la propia hoja de cálculo, por ejemplo para guardar datos de sensores.
Tendréis que crearos una cuenta en IFTTT si no tenéis una, e instalaros la aplicación de Home Assistant en el móvil para que podamos capturar los datos del mismo (entre otras cosas)
Una vez que nos logemos en la página de IFTTT, vamos a ver lo fácil que es configurar y particularizar un applet cuando IFTTT recibe una llamada al servicio Webhook, que es el que usaremos y ya veréis que es muy intuitivo:
Elegimos la opción CREATE en IFTTT, y en la parte del iniciador (If This) buscamos Webhooks:

Simplemente pondremos un nombre identificativo que nos sirva para diferenciar en nuestros applets. En nuestro caso hemos usado Evento_trabajo, y a continuación creamos el iniciador (trigger)

Ahora viene la parte de la acción (Then That), y buscamos Google Sheets y la acción de añadir filas a la hoja de cálculo:

Os muestro la configuración necesaria para la acción (en este caso, añadir una fila a un documento). Nos pedirá permisos para acceder.
Indicamos el nombre del fichero a rellenar en Google Drive (no os preocupéis que si no está creado lo crea IFTTT la primera vez), en el formato de la fila tendrá 3 valores (luego veremos porqué en nuestro caso nos vale con la opción por defecto), y por último la ruta desde la unidad (en el ejemplo una carpeta que hemos llamado Home_Assistant en un alarde de originalidad).

Creamos la acción y seleccionamos continuar y finalizar,… y ya está. Como véis una vez terminada la configuración ya tendremos nuestro applet preparado para ser llamado desde nuestro sistema:


Paso 2. Obtener la clave API para llamada a servicio IFTTT
Necesitaremos una clave API única para nosotros, para configurar en el lado de Home Assistant. Este valor podemos ver dentro de la plataforma IFTTT, entrando en el iniciador de nuestro Applet (Webhook) y con la opción de Settings:

Apuntad la API key. Es la última parte (la que viene después de /use/ ), pues la necesitaremos luego.
Paso 3. Configuración de la zona de trabajo y la persona en Home Assistant
ahora tendremos que definir el área física alrededor de nuestro trabajo en el mapa. Aquí os aconsejo que no merece la pena poner un radio muy pequeño (tampoco enorme), pues las imprecisiones en la localización harían que nuestro sistema piense que estamos constantemente entrando y saliendo del trabajo constantemente.
En el menu Configuration de Home Assistant escogeremos la opción Zones y creamos una nueva:

Ahora creamos la pesona a trackear y le asociamos el dispositivo que nos ofrece desde la aplicación Home Assistant. En nuestro caso un móvil Oneplus:

Paso 4. Instalación de integración IFTTT con Home Assistant
Desde el menú Configuration > Integrations buscaremos IFTTT:

En nuestro fichero configuration.yaml pondremos las siguientes líneas (cuidado con los espacios):
ifttt:
key: eWteWteWteWteWteWteWtinventadoeWt
Vamos ahora a decirle a Home Assistant qué hacer cuando entramos y salimos del trabajo. Lo vemos en el siguiente paso
Paso 5. Creamos la automatización en Home Assistant
Nos toca crear ahora dos automatizaciones: Una para cuando entremos en la zona de trabajo, y otra para cuando salgamos:
Como siempre, para crear una automatización iremos al menú Configuration > Automations, y crearemos uno desde cero (START FROM AN EMPTY AUTOMATION)
En la parte del inciador indicaremos que se active cuando la persona en cuestión entre en la zona definida

Para la parte de la acción a ejecutar, iremos directamente al editor de texto en formato yaml:

Y pondremos la siguiente configuración que nos permite dar formato a la fecha y la hora y ponerlos en campos diferentes. Aquí podéis ver cada campo de datos definido en el formato que espera IFTTT:

Importante, para poder filtrar en la hoja de cálculo el value1, pues esa será la única diferencia en nuestra segunda automatización que tendremos que crear:

Al final tendremos configuradas las 2 automatizaciones necesarias:

Con esto ya lo tenemos configurado todo.
El flujo de datos será el siguiente, por ejemplo para la llegada al trabajo:
- Desde nuestro móvil, la aplicación de Home Assistant tendrá acceso a nuestra localización y mandará a nuestro sistema de casa cuándo entramos en la zona definida de trabajo.
- Nuestro equipo de Home Assistant en casa, hará una llamada a IFTTT usando nuestra API y con los datos necesarios para la hoja de cálculo
- IFTTT iniciará el applet al recibir la llamada al webhook, y enlazará con nuestro documento en Google Drive para añadir una fila con los datos.
Parece obvio, pero lo diré: Nada de esto funcionará si nos dejamos el móvil en casa, o si nos quedmos sin batería o no tenemos datos.
Vamos ahora con las pruebas y análisis de los datos
Paso 6. Pruebas
Las pruebas son fáciles. Simplemente, pasados unos días visitad vuestro Google Drive, y en la carpeta que le hemos dicho a IFTTT deberíamos tener una hoja de cálculo con las entradas y salidas del trabajo:

Paso 7. Análisis de los datos
Aunque montar todos estos sistemas es muy adictivo de por sí, no estaría de más que podamos sacar conclusiones y hechos de los mismos. Quizás para el ejemplo buscado pueda tener sentido o no, pero pensad en otros tipos de sensores a analizar: Temperaturas, horarios de opcupación, etc…
Todos estos datos son analizables, y aunque pensemos que hay que tener una formación matemática fuerte, lo cierto es que no. Solo necesitamos entender unos pocos conceptos y usar alguna herramienta.
Sitios en Internet donde se explican en profundidad y en rigor los fundamentos de la estadística y en concreto sobre distribuciones hay muchos…. muchísimos, pero hoy seremos un poco más prácticos y veremos una pincelada concreta para activar las ganas de saber más….
Vamos a ver primero la herramienta que usaremos: Google Colab.
Google Colab nos va a permitir usar Jupyter Notebooks en línea desde el navegador, sin tener que instalar nada en nuestro ordenador y con toda la potencia de Python y sus paquetes.
Aquí tenéis cómo empezar, pero mejor dejadlo para el final y meteros de lleno, pues os mostraré nuestro ejemplo paso a paso.
Jupyter Notebooks, es una interface gráfica donde podremos insertar texto y código en un mismo entorno, a la vez que podemos ejecutarlo. De esta manera es una herramienta ideal para mostraros cómo analizar cualquier tipo de datos, en este caso extraídos con nuestro sistema Home Assistant.
Una vez tengamos acceso a Google Colab, veréis que os crea una carpeta en vuestro Google Drive para guardar todo:

El funcionamiento es muy parecido a los otros documentos de Google: intuitivo y se va guardando todo automáticamente.
Hemos creado para analizar un fichero csv con las horas totales trabajadas de cada día (lo hemos hecho aparte en excel, efectivamente) en un período de 100 días laborales. Quedaría así:

Vemos que lógicamente unos días trabajamos más horas y otros menos. La idea para empezar es poder demostrar si sigue una distribución Normal y deducir cierta información si es así.
De la distribución Normal, deciros simplemente que os la váis a encontrar al analizar muchos fenómenos. No es de extrañar que le pusieran ese nombre (Normal) porque se pensaba que era la que prefería la naturaleza. Luego vinieron otras distribuciones de datos que eran igualmente normales…. pero ya se le quedó el nombre.
La distribución normal tiene ciertas propiedades que nos serán muy útiles, y por tanto nuestros datos seguirán esas propiedades siempre y cuando podamos demostrar que la muestra que tenemos (el conjunto de datos que ha recogido Home Assistant por nosotros) sigue esa distribución.
Para ello primero vamos a crear un nuevo Notebook en Google Colab En nuestro caso le hemos llamado «jornada laboral v0».
En el menú de la parte izquierda, subiremos el fichero Log_Trabajo.csv con los datos de horas diarias trabajadas para trabajar con él:

Tened en cuenta que ese fichero que hemos subido, desaparecerá cuando la sesión se cierre. Tendremos que subirlo de nuevo si lo necesitamos, o mapear con nuestro Google Drive directamente. Nosotros hemos optado por subirlo porque es una análisis temporal y siempre podremos volver a subir cuando queramos.
Aclarar que lo que tenemos es una muestra, representativa de una población. Lo que haremos es averiguar si la muestra pertenece a una población con distribución normal, y estimaremos los parámetros que definen esa distribución, que ya os adelanto que son la media y la desviación típica. No os preocupéis ahora si no os suenan todos los conceptos. Simplemente quedaros con la idea de que se necesitan esos dos parámetros para definir plenamente una distribución normal.
La primera celda de nuestro notebook será para importar los paquetes que vamos a necesitar. Escribir sobre cada uno de ellos sería un mundo, pero la documentación es muy buena y hay muchos recursos por internet:
#Paquetes necesarios
import pandas as pd
from scipy import stats
import seaborn as sns
Vamos a leer los datos y a descontar el tiempo de la comida (1h15min = 1.25h):
#Lectura datos
df=pd.read_csv("Log_Trabajo.csv")
df=df-1.25 # No contamos el tiempo destinado a comida (1h 15min)
Normalmente se usa la variable df por darle un nombre identificativo al dataframe, pero se puede usar cualquiera.
Al realizar operaciones sobre el dataframe lo que hacemos es aplicarlo a todos y cada uno de sus elementos. Vamos a usar la función describe() para hacernos una primera idea de los datos que tenemos:
df.describe()

Tenemos 101 filas correspondientes a 1 de la cabecera («Horas») y los 100 datos. Tambien nos presenta los cuartiles (si ordenamos la cuarta parte de los datos están por debajo del 7.781478 por ejemplo)
Hay varios métodos para comprobar si una muestra es representativa de una población normal. Nosotros usaremos el método de Shapiro-Wilk. Simplemente es una función del paquete scipy que hemos importado al principio y le pasamos como parámetro nuestro dataframe con los datos:
from scipy.stats import shapiro
stat,p=shapiro(df)
print (p)
El dato de salida en concreto que nos interesa es el llamado p-value, o p-valor en español.
En este caso, si corremos el Notebook nos da un valor de p-value de 0.921
Por ahora creedme si os digo que como el p-value>0.05 podemos afirmar que la muestra pertenece a una distribución normal. En algún otro post más enfocado a la estadística pondremos más ejemplos y explicaciones del p-valor. Pero creedme que esto separa a los buenos analistas de los malos.
Vamos a graficar con el paquete seaborn (hay otros en python, pero este es suficientemente potente)
sns.displot(df, x="Horas", kde=True)
Le hemos dicho en la celda anterior que nos refresente nuestro dataframe, superponiendo la curva de la distribución normal (kde=True):

Pues vemos que efectivamente incluso de forma visual se aproxima bastante a una campana de Gauss como también se denomina a la forma de esta distribución.
Ahora que vamos con confianza y sabemos que la población es normal, vamos a estimar los dos parámetros que la definen (media y desviación típica) con el siguiente código:
#Estimamos los parámetros de la distribución normal:
# Los parámetros a estimar de la población serán la media y la desviación típica:
parametros = stats.norm.fit(data=df)
print(parametros)
Y el resultado es:
(8.259839038257425, 0.7190318799189348)
Redondeando, tenemos una media de 8.26 y una desviación típica de 0.72. La representamos como N( 8.26 , 0.72 )
Por último, ya podemos responder a este tipo de preguntas sin problemas y bien fundamentado:
- Probabilidad de trabajar un día 9 horas exactamente es de 32.67%:
x.pdf(9)
# 0.32673754452683273
- Probabilidad de trabajar un día como máximo 10 horas es de 99.2%
x.cdf(10)
# 0.9921683231785512
Nosotros hemos usado Google Colab y Python junto con sus paquetes por su comodidad y no tener que instalar nada, pero perfectamente podemos realizar este análisis con R, o directamente en Excel o en las propias Google Sheets. La idea es sacar un resultado.
Hemos visto Como escribir en Google Sheets desde Home Assistant de manera fácil y bastante robusta. Esta misma configuración lleva meses recopilando datos sin problema.
También hemos visto cómo con el mismo método podéis guardar información en la nube sobre vuestros sensores. Si os animáis con los sensores de temperatura y humedad, una lectura cada 5 minutos es más que suficiente:
Si os interesa conocer más sobre uno de los padres de la teoría de la información, muy relacionado con el desarrollo matemático y casi filosófico de los datos, os aconsejo este inspirador resumen sobre la biografía de Claude Shannon.
Hasta otro post.
Esta fenomenal la parte de estadistica
Gracias Jaime
increible, pero tengo un problema, no me crea nada en mi google drive, que pasa como se le puede dar solucion a ello
Hola Shampi, lo primero sería verificar que se activa la regla creada en IFTTT. Verifica también que te ha pedido permisos desde IFTTT para acceder a Drive, y que la carpeta que se ha definido existe exactamente en Drive colgando de «Mi unidad». Espero que salga funcionando. Un saludo.