Cómo vigilar el tiempo de uso de dispositivos con Home Assistant.

Hoy veremos cómo podemos crear y sobre todo usar uno de las integraciones más útiles que tiene Home Assistant. Veremos cómo monitorizar el tiempo de uso de nuestros dispositivos de una manera muy fácil.

Ese es el cometido principal del sensor History Stats, que como su nombre indica nos va a permitir usar los datos históricos que almacena Home Assistant para ofrecernos no solo el tiempo que una entidad está en un estado concreto, sino también porcentajes de tiempos, o conteo de eventos.

Especial interés va a tener para nosotros el medir tiempos de grandes consumidores, para lo que podremos usar cualquiera de los siguientes packs. Los hemos sacado directamente de entre los más comprados por nuestros usuarios, por lo que son fruto de muchas horas de búsqueda e información previa:

Midiendo el tiempo de uso de nuestros dispositivos

Home Assistant ha ido evolucionando mucho, y lo sigue haciendo mes a mes. En nuestra opinión uno de los mayores aciertos de esta plataforma es lo bien pensadas que están ciertas integraciones, como es el caso de History Stats.

Usaremos por tanto la integración History Stats, que nos permite hacer algunos cálculos con los datos de nuestro histórico de Home Assistant donde se guardan, entre otras cosas, todos los cambios de estado de nuestros sensores.

En este caso, para poder usar datos historicos, solo nos harán falta dos cosas: Definir qué queremos medir y el intervalo de tiempo en el que queremos medirlo.

Parámetros que podemos medir

En general podemos medir 3 cosas respecto a cualquier medida que tengamos en el histórico de Home Assistant:

  • El tiempo de uso en un intervalo de tiempo. Será el tipo «time«
  • El porcentaje de uso con respecto a un intervalo de tiempo. Tipo «rate«
  • El número de veces que cambia a un estado (por ejemplo encendido) en un intervalo de tiempo. Tipo «count«

Intervalo en el que podemos medir

Y por otro lado tenemos la definición del intervalo de tiempo: Podemos escoger SOLO 2 de entre estos 3 parametros:

  • Comienzo del intervalo
  • Final del intervalo
  • Duracion del intervalo

Ejemplos de uso del sensor History Stats

Veamos algunos ejemplos de combinaciones de parámetros e intervalos, para que nos hagamos una idea de lo flexible que puede ser:

  • Tiempo de uso de un TV en el dia de ayer.
  • Número de veces que un calentador se ha encendido en el mes en curso.
  • % de tiempo que una luz ha estado encendida respecto al total del dia.
  • Número de veces que se abre una ventana al día.
  • Horas acumuladas de cielo soleado hoy segun la AEMET.

Como vemos, ya de por si este tipo de mediciones nos va a facilitar muchísimo el conocer cómo usamos nuestra casa inteligente, pero si le damos una vuelta más de tuerca, podremos integrar todas estas medidas en nuestras automatizaciones y notificaciones. Lo veremos al final con algun ejemplo concreto.

Configuración del fichero YAML para monitorizar

Para usar un sensor del tipo History Stats, tendremos que modificar el fichero configuration.yaml de Home Assistant (cuidado con respetar los espacios).

Hay que definir un nombre (name), una entidad que queramos vigilar (entity_id), el estado que nos interese de esa entidad (state), el tipo de medida: time, rate o count (type), y lo necesario para medir el intervalo.

A la hora de definir los valores para medir el intervalo, ya os habreis dado cuenta que no podemos poner valores fijos. No podemos decir que el intervalo va desde el dia 1-enero hasta el 2-enero porque ya no nos serviría para dias posteriores.

Tendremos que decirle al sistema valores dinámicos (dependiendo del dia y la hora), usando templates con el formato Jinja. No os preocupéis, es muy sencillo ver algún ejemplo y usarlo directamente o modificarlo a nuestro gusto.

Si por ejemplo queremos que el intervalo sea desde el comienzo del día hasta ahora mismo usaremos:

start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
end: "{{ now() }}"

Si por el contrario queremos como intervalo el día de ayer completo pondremos:

end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
duration: "24:00:00"

Tenéis mas ejemplos en la propia documentación.

Este un ejemplo concreto para tener las horas totales de funcionamiento de un televisor en el día de ayer. Solo tenéis que copiar y pegar cambiando el nombre de la entidad y el estado:

# Tiempo acumulado TV ayer
sensor:
  - platform: history_stats
    name: Tiempo TV LG ayer
    entity_id: media_player.tv_salon
    state: "on"
    type: time  
    end: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
    duration: "24:00:00"

Si no estais seguros de cómo se nombra el estado de una entidad en concreto (en este ejemplo era «on»), lo más directo es visitar la sección Herramientas para Desarrolladores > ESTADOS.

Una vez hemos modificado el fichero de configuración, no nos hara falta hacer reset a Home Assistant en esta ocasión, pues tenemos la opción de carga esas entidades directamente desde el menu Herramientas para Desarrolladores > YAML > ENTIDADES DE ESTADISTICAS DEL HISTORIAL:

Y eso es todo, ya podemos usar esas entidades para mostrar por ejemplo directamente en el panel:

Usando el tiempo de uso en nuestras automatizaciones

Esta es la parte imaginativa, y con la que podremos presumir cuando alguien nos diga que tiene la casa domotizada con un kit…. y le expliques que tú tienes Home Assitant, que no te ha costado un duro porque es gratis y que además puedes hacer cosas como estas

Ejemplos hay muchos, y estoy deseando ver en comentarios vuestras propias ideas para copiarlas.

Nosotros pondremos dos ejemplos ilustrativos para que os sirvan como aperitivo e inspiración:

Notificación del tiempo de uso de la TV el día anterior

Vamos a crear una automatización que nos envie una notificación cada dia a las 19:00 por ejemplo, indicando las horas en las que una TV ha estado encendida el día anterior.

Como vimos, en el fichero configuration.yaml ya hemos creado nuestra nueva entidad «Tiempo TV LG ayer» que nos dará el dato que queremos.

Ahora crearemos la automatización que se ejecutará cada día a las 19:00 y nos envía la notificacion por un canal de Telegram (visitad la página si no tenéis habilitado Telegram con Home Assistant)

Lo haremos desde Ajustes>Automatizaciones y escenas:

Vamos a llamar a la automatización «Tiempo de uso TV«:

alias: Tiempo de uso TV
description: Tiempo acumulado de uso de TV dia anterior
trigger:
  - platform: time
    at: "19:00:00"
condition: []
action:
  - service: notify.telegramnormal
    data:
      title: Tiempo de uso TV LG ayer
      message: "{{states('sensor.tiempo_tv_lg_ayer')}} horas"
mode: parallel

Y este sera el resultado si lo ejecutamos para pruebas y lo que obtendremos cada dia a las 19:00:

Como véis, la TV en mi casa se pone mucho… Siempre puedo modificar la automatización y apagar la TV cuando llegue a 4h de funcionamiento. Jejeje

Tiempo acumulado de sol en el día de hoy

Este segundo ejemplo nos podría servir para comparar la produccion de nuetras placas solares respecto al tiempo de irradiación (cielo soleado) durante el dia de hoy, para detectar posibles problemas, sin necesidad de tener un sensor de radiación, haciendo uso de la integración de estaciones AEMET.

De nuevo, si no lo tenéis ya, os recomiendo el post donde explicamos como integrar esta útil información.

La configuracion en yaml no puede ser más sencilla, como siempre dentro de nuestro configuration.yaml:

  - platform: history_stats
    name: AEMET Soleado hoy
    entity_id: weather.aemet_daily
    state: "sunny"
    type: time  
    start: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"

Tras realizar la carga de las entidades, el resultado lo podemos mostrar en el panel, o usarlo en otras automatizaciones:

Si todavía hay ganas de más, te invitamos a visitar estos otros posts publicados: