Hoy vamos a crear una tarjeta de monitorización de sueño en Home Assistant, para observar nuestro nivel de descanso y mejorarlo.
Índice
Descripción de la tarjeta
La tarjeta de monitorización de sueño se compone de dos partes diferenciadas. La primera, este pequeño ‘widget’ que te muestra la siguiente información:
- Tiempo total de sueño de la última noche
- Distribución de las distintas fases del sueño de la última noche (gráfico y porcentaje)
- Calidad del sueño (de 1 a 4 estrellas)

Si pulsas sobre alguno de los datos de este ‘widget’ se despliega un pop-up con la siguiente información detallada:
- Tiempo en horas y minutos en cada fase del sueño, y descripción de la misma
- Gráfico con la evolución de la última semana de los distintos valores

Requisitos previos
Para poder crear esta tarjeta de monitorización de sueño necesitas tener sensores que indiquen el tiempo de sueño y de cada fase del mismo.
Lo ideal es que tengas algún reloj inteligente o pulsera de actividad para medirlo con mayor precisión. Dependiendo del modelo que tengas puede que tenga integración directa con HA, o que tengas que utilizar alguna otra (como Google Fit) a modo de «pasarela».
Además hay aplicaciones como Sleep as Android que permiten medirlo directamente con tu dispositivo móvil o a través de relojes y pulseras de muchas marcas. Además tiene integración con Home Assistant y envía mucha información relacionada con el sueño que puedes utilizar en tus automatizaciones (por ejemplo, apagar la tele cuando te quedes dormido).
También necesitas instalar a través de HACS las tarjetas de Stack in Card, Card Mod, Bar Card, Mushroom Cards, Bubble Card y Mini Graph Card.
Homogeneización de sensores
Ya hemos visto que hay muchas formas de conseguir la información relativa a tu descanso, pero para poder crear la tarjeta necesitamos que esta sea homogénea. En particular necesitamos contar con la siguiente información:
- Porcentaje y tiempo de sueño REM. El cerebro está más activo y se centra en recuerdos y problemas complejos. En esta fase es cuando se sueña. La respiración puede volverse más irregular.
- Porcentaje y tiempo de sueño ligero. El cuerpo se va preparando para el sueño profundo y el cerebro almacena hechos simples en la memoria. Es habitual que una persona se pase más de la mitad del tiempo de sueño en esta fase.
- Porcentaje y tiempo de sueño profundo. El cuerpo empieza a reparar músculos, depurar el cerebro y reforzar el sistema inmunitario.
- Tiempo de sueño total
Construcción de los sensores
En mi caso la información procede de Google Fit, que me proporciona los siguientes sensores:
- ‘sensor.sleep’ = tiempo total de sueño (en segundos)
- ‘sensor.deep_sleep’ = tiempo de sueño profundo (en segundos)
- ‘sensor.rem_sleep’ = tiempo de sueño REM (en segundos)
- ‘sensor.light_sleep’ = tiempo de sueño ligero (en segundos)
A partir de ellos voy a crear los tres sensores que necesitamos, mencionados en el apartado anterior, pegando el siguiente código en el fichero ‘sensors.yaml’:
- platform: template
sensors:
deep_sleep_USUARIO:
friendly_name: "Tiempo de sueño profundo (USUARIO)"
icon_template: mdi:power-sleep
unit_of_measurement: "%"
value_template: >
{{ ((states('sensor.deep_sleep') | int) / (states('sensor.sleep') | int)) | round (2) * 100 }}
attribute_templates:
time: >
{% set sueno = states('sensor.deep_sleep') | int / 60%}
{% if (sueno | int // 60) > 0 %}{{ sueno | int // 60}} h{% endif %}
{{ sueno | int % 60}} min
graph: >
{{ ((states('sensor.deep_sleep') | int) / (states('sensor.sleep') | int)) | round (2) * 100 }}
- platform: template
sensors:
light_sleep_USUARIO:
friendly_name: "Tiempo de sueño ligero (USUARIO)"
icon_template: mdi:power-sleep
unit_of_measurement: "%"
value_template: >
{{ ((states('sensor.light_sleep') | int) / (states('sensor.sleep') | int)) | round (2) * 100 }}
attribute_templates:
time: >
{% set sueno = states('sensor.light_sleep') | int / 60%}
{% if (sueno | int // 60) > 0 %}{{ sueno | int // 60}} h{% endif %}
{{ sueno | int % 60}} min
graph: >
{{ ((states('sensor.light_sleep') | int) / (states('sensor.sleep') | int)) | round (2) * 100 + ((states('sensor.deep_sleep') | int) / (states('sensor.sleep') | int)) | round (2) * 100 }}
- platform: template
sensors:
rem_sleep_USUARIO:
friendly_name: "Tiempo de sueño REM (USUARIO)"
icon_template: mdi:power-sleep
unit_of_measurement: "%"
value_template: >
{{ ((states('sensor.rem_sleep') | int) / (states('sensor.sleep') | int)) | round (2) * 100 }}
attribute_templates:
time: >
{% set sueno = states('sensor.rem_sleep') | int / 60%}
{% if (sueno | int // 60) > 0 %}{{ sueno | int // 60}} h{% endif %}
{{ sueno | int % 60}} min
Si analizas el código observarás que cada uno de los sensores tiene como valor el porcentaje que la fase correspondiente representa sobre el tiempo total de sueño. Además tiene como atributo el tiempo que ha durado cada fase (en horas y minutos), y un atributo adicional que sirve para construir el gráfico de la tarjeta.
Construcción de la tarjeta
Una vez que ya tenemos los sensores mostrando la información que queremos sólo tienes que crear una nueva tarjeta en tu panel de control y pegar el siguiente código, reemplazando tu nombre. También tendrás que ajustar la ruta de la imagen de fondo (que puedes cambiar o descargar la mía desde mi colección de “Personal Trainer”).
type: vertical-stack
cards:
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: linear-gradient(150deg,rgba(42, 66, 105, 0.8), rgba(6, 14, 56, 0.8) ), url('/local/images/night.jpg');
background-position: center;
background-size: cover;
}
cards:
- type: custom:bar-card
card_mod:
style: |-
ha-card {
border: 0px;
}
bar-card-currentbar {
border-radius: 50px !important;
}
bar-card-backgroundbar {
background: #08f570;
border-radius: 50px !important;
opacity: 1
}
entities:
- entity: sensor.light_sleep_USUARIO
attribute: graph
color: dodgerblue
height: 40px
positions:
icon: 'off'
value: 'off'
name: 'off'
- type: custom:bar-card
card_mod:
style: |-
ha-card {
margin-top: -72px;
margin-left: -1px;
border: 0px;
}
bar-card-currentbar {
border-radius: 50px !important;
}
bar-card-backgroundbar {
opacity: 0
}
entities:
- entity: sensor.deep_sleep_USUARIO
attribute: graph
color: rebeccapurple
height: 40px
positions:
icon: 'off'
value: 'off'
name: 'off'
- type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -54px;
margin-left: 16px;
--primary-text-color: white;
}
chips:
- type: template
icon: mdi:power-sleep
icon_color: white
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
content: >
{% set sueno = states('sensor.sleep') | int / 60%} {% if sueno ==
0 %} Sin información {% else %}
{% if (sueno | int // 60) > 0 %}
{{ sueno | int // 60}} horas y
{% endif %}
{{ sueno | int % 60}} minutos {% endif %}
card_mod:
style: |
ha-card {
border: 0px;
background: transparent!important;
box-shadow: none!important;
}
- type: custom:mushroom-chips-card ## AQUI COMIENZAN LAS REGLAS PARA MEDIR LA CALIDAD DEL SUEÑO
alignment: end
card_mod:
style: |
ha-card {
margin-top: -55px;
margin-right: 20px;
--chip-box-shadow: 0px;
--chip-spacing: 0px !important;
--chip-padding: 0px !important;
}
chips:
- type: template
icon: mdi:star
icon_color: yellow
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
card_mod:
style: |
ha-card {
border: 0px;
{% set sueno = states('sensor.sleep') | int / 60%}
{% if (sueno | int // 60) < 7 %}
display: none !important;
{% endif %}
background-color: transparent !important;
}
- type: template
icon: mdi:star
icon_color: yellow
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
card_mod:
style: |
ha-card {
border: 0px;
{% set sueno = states('sensor.sleep') | int / 60%}
{% if (sueno | int // 60) < 8 %}
display: none !important;
{% endif %}
background-color: transparent !important;
}
- type: template
icon: mdi:star
icon_color: yellow
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
card_mod:
style: |
ha-card {
border: 0px;
{% set sueno = states('sensor.deep_sleep') | int / 60%}
{% if (sueno | int // 60) < 1 %}
display: none !important;
{% endif %}
background-color: transparent !important;
}
- type: template
icon: mdi:star
icon_color: yellow
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
card_mod:
style: |
ha-card {
border: 0px;
{% set sueno = states('sensor.deep_sleep') | int / 60%}
{% if (sueno | int // 60) < 2 %}
display: none !important;
{% endif %}
background-color: transparent !important;
} ## AQUÍ ACABAN LAS REGLAS PARA MEDIR LA CALIDAD DEL SUEÑO
- type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -15px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
--chip-padding: 5px;
--primary-text-color: white;
}
chips:
- type: template
content: |
🟣 S. Profundo ({{ states('sensor.deep_sleep_USUARIO') | int }}%)
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
- type: template
content: |
🔵 S. Ligero ({{ states('sensor.light_sleep_USUARIO') | int }}%)
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
- type: template
content: |
🟢 Fase REM ({{ states('sensor.rem_sleep_USUARIO') | int }}%)
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
tap_action:
action: navigate
navigation_path: '#sleep_USUARIO'
alignment: center
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
hash: '#sleep_USUARIO'
name: Descanso
icon: mdi:sleep
- type: custom:bubble-card
card_type: separator
icon: mdi:power-sleep
name: Esta noche
- type: entities
card_mod:
style: |
ha-card {
background: transparent;
box-shadow: none;
margin-top: -30px;
margin-bottom: -20px;
margin-left: -16px;
border: 0px;
}
entities:
- type: attribute
entity: sensor.rem_sleep_USUARIO
attribute: time
name: Sueño REM
icon: mdi:chat-sleep
card_mod:
style: |
:host {
--paper-item-icon-color: #08f570;
}
- type: custom:mushroom-template-card
primary: ''
secondary: >-
El cerebro está más activo y se centra en recuerdos y problemas
complejos. En esta fase es cuando se sueña.
icon: ''
multiline_secondary: true
tap_action:
action: none
card_mod:
style: |
ha-card {
box-shadow: none;
background: transparent;
border: 0px;
margin-top: -20px;
--card-secondary-font-size: 11px;
}
- type: entities
card_mod:
style: |
ha-card {
background: transparent;
box-shadow: none;
margin-top: -30px;
margin-bottom: -20px;
margin-left: -16px;
border: 0px;
}
entities:
- type: attribute
entity: sensor.light_sleep_USUARIO
attribute: time
name: Sueño ligero
icon: mdi:bed
card_mod:
style: |
:host {
--paper-item-icon-color: dodgerblue;
}
- type: custom:mushroom-template-card
primary: ''
secondary: >-
El cuerpo se va preparando para el sueño profundo y el cerebro
almacena hechos simples en la memoria.
icon: ''
multiline_secondary: true
tap_action:
action: none
card_mod:
style: |
ha-card {
box-shadow: none;
background: transparent;
border: 0px;
margin-top: -20px;
--card-secondary-font-size: 11px;
}
- type: entities
card_mod:
style: |
ha-card {
background: transparent;
box-shadow: none;
margin-top: -30px;
margin-bottom: -20px;
margin-left: -16px;
border: 0px;
}
entities:
- type: attribute
entity: sensor.deep_sleep_USUARIO
attribute: time
name: Sueño profundo
icon: mdi:restore
card_mod:
style: |
:host {
--paper-item-icon-color: #ae54d0;
}
- type: custom:mushroom-template-card
primary: ''
secondary: >-
El cuerpo empieza a reparar músculos, depurar el cerebro y reforzar el
sistema inmunitario.
icon: ''
multiline_secondary: true
tap_action:
action: none
card_mod:
style: |
ha-card {
box-shadow: none;
background: transparent;
border: 0px;
margin-top: -20px;
--card-secondary-font-size: 11px;
}
- type: custom:bubble-card
card_type: separator
icon: mdi:calendar-week
name: Última semana
card_mod:
style: |
ha-card {
margin-top: 0px;
}
- type: custom:mini-graph-card
hours_to_show: 168
height: 200
show:
name: false
icon: false
state: false
points: false
labels: false
legend: false
entities:
- entity: sensor.sleep
color: orange
- entity: sensor.light_sleep
color: dodgerblue
- entity: sensor.rem_sleep
color: '#08f570'
- entity: sensor.deep_sleep
color: rebeccapurple
card_mod:
style: |
ha-card {
background: transparent;
box-shadow: none;
margin-top: -30px;
border: 0px;
}
- type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -15px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 5px;
--chip-padding: 5px;
}
alignment: center
chips:
- type: template
tap_action:
action: none
icon: ''
content: 🟨 Total
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
- type: template
tap_action:
action: none
icon: ''
content: 🟪 Sueño profundo
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
- type: template
tap_action:
action: none
icon: ''
content: 🟦 Sueño ligero
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
- type: template
tap_action:
action: none
icon: ''
content: 🟩 Fase REM
card_mod:
style: |
ha-card {
background: transparent!important;
box-shadow: none!important;
border: 0px;
}
Por cierto! La medición de la calidad del sueño por defecto aplica las siguientes reglas (aunque las puedes personalizar como quieras en la parte del código que te he indicado).
- 1 estrella si el tiempo total de sueño es > 7 horas
- 1 estrella si el tiempo total de sueño es > 8 horas
- 1 estrella si el tiempo de sueño profundo es > 1 hora
- 1 estrella si el tiempo de sueño profundo es > 2 horas
Ideas de automatización
Aunque puedes utilizar la tarjeta como una mera fuente de consulta, se me ocurren varias ideas que puedes aprovechar para mejorar la calidad de tu sueño. Por ejemplo:
- Si a través de tu reloj o pulsera de actividad, o de Sleep as Android, puedes detectar cuando te quedas dormido puedes desencadenar automatizaciones como apagar las luces o la televisión, o emitir una notificación a la Smart TV encendida para que bajen el volumen.
- Si una noche has dormido poco, programa una notificación para que Home Assistant te recomiende una siesta recuperadora después de comer.
- Si tomas mucho café y te cuesta dormir, pon un enchufe inteligente con medición de consumo en la cafetera para que te recuerde que tomarte un descafeinado cuando hayas dormido poco.
- También puedes programar una serie de automatizaciones para comprobar que el ambiente es perfecto para irte a dormir (bajar las persianas, reducir la temperatura de la habitación, comprobar que las ventanas están cerradas para evitar ruidos…).

