En esta entrada vamos a crear tarjetas de habitación para controlar de un simple vistazo el estado de los dispositivos de las mismas.
🥑 Esta guía es una reedición de la versión original de las tarjetas de habitación.
Anteriormente ya hemos utilizado ejemplos específicos como las tarjetas de ocupación o la tarjeta para Smart TV, pero en este caso el objetivo es concentrar en una pequeña tarjeta toda la información. En mi caso es ideal para habitaciones como el dormitorio o el salón, en las que pasamos mucho tiempo pero cuentan con dispositivos limitados (que no merecen un apartado específico en el panel de control).
Al final te quedarán unas tarjetas con el siguiente estilo:

Índice
Consideraciones previas
Si quieres construir esta tarjeta, considera lo siguiente:
- Para crear la tarjeta necesitas instalar a través de HACS las tarjetas Mushroom Cards, Card-mod, Stack in card y ApexCharts Card.
- Si vas a controlar bombillas zigbee que frecuentemente enciendes y apagas con interruptores de pared, te recomiendo que eches un vistazo a este truco para mostrar el estado real de tus bombillas zigbee, para evitar que sigan apareciendo como encendidas cuando las apagas con el interruptor.
- Puedes copiar y pegar el código al final de la entrada, pero también puedes modificarlo libremente como quieras. Para ayudarte, te recomiendo que veas los talleres de la academia sobre cómo crear tarjetas personalizadas y templates, son gratis!


Construcción de la tarjeta
Para crear las tarjetas de habitación vamos a considerar las distintas partes.
Encabezado de la tarjeta
En primer lugar, podemos configurar la imagen de fondo. Para ello puedes utilizar como fondo una imagen real de tus habitaciones, o incluso generarlas con inteligencia artificial. Luego solo tienes que subirlas a tu instancia de Home Assistant e indicar la ruta en el código.
💡Te recomiendo subir las imagénes desde tu explorador de archivos utilizando el complemento Samba Share a la ruta '/config/www/', que en el código corresponde a '/local/'. Por ejemplo, podrás usar en tus tarjetas la imagen situada en '/config/www/imagen.jpg' desde la ruta '/local/imagen.jpg'
En el encabezado mostraremos información importante de la habitación. En mi caso me interesa visualizar la temperatura y el porcentaje de humedad de la habitación (pero tú puedes incluir el dato que prefieras). Para ello lógicamente vas a necesitar disponer de algún sensor que te proporcione esta información. En mi caso utilizo este tipo de sensores integrados a través de zigbee2mqtt.
Puedes modificar el encabezado de la tarjeta en la siguiente parte del código:
## ENCABEZADO DE LA TARJETA
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url('/local/habitaciones/dormitorio.jpg'); ## IMAGEN DE FONDO
background-position: center;
background-size: cover;
--primary-text-color: #ffffff;
min-height: 133px;
}
cards:
- type: custom:mushroom-template-card
primary: Dormitorio ## NOMBRE DE LA HABITACIÓN
secondary: >- ## SENSORES DE LA HABITACIÓN
{{ states('sensor.sensor_temperatura_dormitorio_temperature') | int
}}ºC | {{ states('sensor.sensor_temperatura_dormitorio_humidity') |
int }}%
icon: ''
card_mod:
style: |
ha-card {
border: 0px;
}
tap_action:
action: none
Icono de la tarjeta
Lógicamente, el icono representa la estancia de la tarjeta y puedes personalizar el color que más te guste. Habrás observado que este tiene un anillo alrededor de longitud variable para darte información en un vistazo. Puedes asociar la entidad que tú quieras (por ejemplo, la temperatura de la habitación o el número de objetos en la lista de la compra) y hacer que este anillo varíe en función de su valor.
Pero además, sobre este aparece un distintivo cuando se cumplen ciertas condiciones (que puedes personalizar como quieras).
- Si la humedad iguala o supera el 60%, aparece el icono de una gota con el fondo azul.
- Si la temperatura iguala o supera los 26º, aparece el icono de una llama con el fondo rojo.
- Si la temperatura iguala o baja de los 18º, aparece el icono de un copo de nieve con el fondo azul.
Puedes modificar el icono, el anillo y los distintivos de la tarjeta en la siguiente parte del código:
## ANILLO DEL ICONO
- type: custom:apexcharts-card
card_mod:
style: |
ha-card {
margin-top: -26px;
margin-bottom: -75px;
margin-left: -110px;
border: 0px;
}
header:
show: false
chart_type: radialBar
apex_config:
legend:
show: false
chart:
height: 180px
plotOptions:
radialBar:
hollow:
size: 70%
dataLabels:
name:
show: false
value:
show: false
startAngle: -45
endAngle: 125
series:
- entity: sensor.sensor_temperatura_dormitorio_temperature ## INDICA LA ENTIDAD DEL ANILLO
color: aquamarine
min: 10 ## INDICA EL VALOR MÍNIMO DE LA ENTIDAD
max: 30 ## INDICA EL VALOR MÁXIMO DE LA ENTIDAD
- type: custom:mushroom-template-card
layout: horizontal
primary: ''
secondary: ''
icon: mdi:bed ## ICONO
icon_color: teal ## COLOR DEL ICONO
tap_action:
action: none
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 100px;
margin-left: -25px;
margin-bottom: -55px;
margin-top: -32px;
}
mushroom-badge-icon {
margin-right: 10px;
margin-top: 10px;
--badge-icon-size: 10px;
--badge-size: 20px;
}
## MODIFICA AQUÍ LAS REGLAS DE LOS DISTINTIVOS
badge_icon: >
{% if (states('sensor.sensor_temperatura_dormitorio_humidity') | int)
>= 60 %} mdi:water {% elif
(states('sensor.sensor_temperatura_dormitorio_temperature') | int) >=
26 %} mdi:fire {% elif
(states('sensor.sensor_temperatura_dormitorio_temperature') | int) <=
18 %} mdi:snowflake {% endif %}
badge_color: >
{% if (states('sensor.sensor_temperatura_dormitorio_humidity') | int)
>= 60 %} blue
{% elif (states('sensor.sensor_temperatura_dormitorio_temperature') |
int)
>= 26 %} red
{% elif (states('sensor.sensor_temperatura_dormitorio_temperature') |
int)
<= 18 %} blue
{% endif %}
Iconos laterales
Los iconos laterales van a servir para infomar del estado de los dispositivos de la estancia, así como para controlarlos (por ejemplo, las distintas bombillas y lámparas de la estancia, o la televisión). No obstante, puedes usarlo para cualquier cosa que se te ocurra (controlar ventiladores, consultar cámaras de vigilancia, etc).
La tarjeta está optimizada para que incluyas de 1 a 6 iconos, repartidos en 1 o 2 columnas. Mientras te muevas en este rango de iconos, la tarjeta se adaptará perfectamente al diseño. Además, puedes usar estilos condicionales para cambiar el color de los iconos en función del estado de las entidades, o incluso animarlos (si no sabes por donde empezar, de nuevo, te recomiendo que veas los talleres de la academia).
Puedes configurar los iconos en esta parte del código:
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: transparent!important;
margin-top: -110px;
margin-left: auto;
margin-right: 5px;
width: 44%;
border: 0px;
}
cards:
- type: grid
square: false
columns: 1 ## Nº DE COLUMNAS (1 O 2)
cards:
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:ceiling-light ## ICONO DE DISPOSITIVO
entity: light.bombilla_dormitorio
icon_color: > ## COLOR CONDICIONAL
{% if (states('light.bombilla_dormitorio')) == 'on' %} teal {%
endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
Código de la tarjeta
La forma más rápida de crear tus propias tarjetas de habitación es copiar el código que te voy a proporcionar, crear una nueva tarjeta manual en tu panel de control, y pegarlo con el editor de código. Ten en cuenta que tendrás que modificar el nombre de tus habitaciones, sensores y entidades, así como personalizar los colores tal y como te he explicado en los apartados anteriores.
A continuación puedes copiar el código completo de las tarjetas de la imagen de ejemplo:
square: false
type: grid
columns: 2
cards:
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url('/local/habitaciones/dormitorio.jpg');
background-position: center;
background-size: cover;
--primary-text-color: #ffffff;
min-height: 133px;
}
cards:
- type: custom:mushroom-template-card
primary: Dormitorio
secondary: >-
{{ states('sensor.sensor_temperatura_dormitorio_temperature') | int
}}ºC | {{ states('sensor.sensor_temperatura_dormitorio_humidity') |
int }}%
icon: ''
card_mod:
style: |
ha-card {
border: 0px;
}
tap_action:
action: none
- type: custom:apexcharts-card
card_mod:
style: |
ha-card {
margin-top: -26px;
margin-bottom: -75px;
margin-left: -110px;
border: 0px;
}
header:
show: false
chart_type: radialBar
apex_config:
legend:
show: false
chart:
height: 180px
plotOptions:
radialBar:
hollow:
size: 70%
dataLabels:
name:
show: false
value:
show: false
startAngle: -45
endAngle: 125
series:
- entity: sensor.sensor_temperatura_dormitorio_temperature
color: aquamarine
min: 10
max: 30
- type: custom:mushroom-template-card
layout: horizontal
primary: ''
secondary: ''
icon: mdi:bed
icon_color: teal
tap_action:
action: none
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 100px;
margin-left: -25px;
margin-bottom: -55px;
margin-top: -32px;
}
mushroom-badge-icon {
margin-right: 10px;
margin-top: 10px;
--badge-icon-size: 10px;
--badge-size: 20px;
}
badge_icon: >
{% if (states('sensor.sensor_temperatura_dormitorio_humidity') | int)
>= 60 %} mdi:water {% elif
(states('sensor.sensor_temperatura_dormitorio_temperature') | int) >=
26 %} mdi:fire {% elif
(states('sensor.sensor_temperatura_dormitorio_temperature') | int) <=
18 %} mdi:snowflake {% endif %}
badge_color: >
{% if (states('sensor.sensor_temperatura_dormitorio_humidity') | int)
>= 60 %} blue
{% elif (states('sensor.sensor_temperatura_dormitorio_temperature') |
int)
>= 26 %} red
{% elif (states('sensor.sensor_temperatura_dormitorio_temperature') |
int)
<= 18 %} blue
{% endif %}
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: transparent!important;
margin-top: -110px;
margin-left: auto;
margin-right: 5px;
width: 44%;
border: 0px;
}
cards:
- type: grid
square: false
columns: 1
cards:
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:ceiling-light
entity: light.bombilla_dormitorio
icon_color: >
{% if (states('light.bombilla_dormitorio')) == 'on' %} teal {%
endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:lightbulb-variant-outline
entity: light.bombilla_dormitorio_filamento
icon_color: >
{% if (states('light.bombilla_dormitorio_filamento')) == 'on'
%} teal {% endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:television
entity: media_player.tv_dormitorio
tap_action:
action: more-info
icon_color: >
{% if (states('media_player.tv_dormitorio')) == 'off' %} {%
else %} teal {% endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url('/local/habitaciones/salon.jpg');
background-position: center;
background-size: cover;
--primary-text-color: #ffffff;
min-height: 133px;
}
cards:
- type: custom:mushroom-template-card
primary: Salón
secondary: >-
{{ states('sensor.salon_temperatura') | int }}ºC | {{
states('sensor.salon_humedad') | int }}%
icon: ''
card_mod:
style: |
ha-card {
border: 0px;
}
tap_action:
action: none
- type: custom:apexcharts-card
card_mod:
style: |
ha-card {
margin-top: -26px;
margin-bottom: -75px;
margin-left: -110px;
}
header:
show: false
chart_type: radialBar
apex_config:
legend:
show: false
chart:
height: 180px
plotOptions:
radialBar:
hollow:
size: 70%
dataLabels:
name:
show: false
value:
show: false
startAngle: -45
endAngle: 125
series:
- entity: sensor.salon_temperatura
color: lightgreen
min: 10
max: 30
- type: custom:mushroom-template-card
layout: horizontal
primary: ''
secondary: ''
icon: mdi:sofa
icon_color: lime
tap_action:
action: none
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 100px;
margin-left: -25px;
margin-bottom: -55px;
margin-top: -32px;
}
mushroom-badge-icon {
margin-right: 10px;
margin-top: 10px;
--badge-icon-size: 10px;
--badge-size: 20px;
}
badge_icon: >
{% if (states('sensor.sensor_temperatura_dormitorio_humidity') | int)
>= 60 %} mdi:water {% elif
(states('sensor.sensor_temperatura_dormitorio_temperature') | int) >=
26 %} mdi:fire {% elif
(states('sensor.sensor_temperatura_dormitorio_temperature') | int) <=
18 %} mdi:snowflake {% endif %}
badge_color: >
{% if (states('sensor.sensor_temperatura_dormitorio_humidity') | int)
>= 60 %} blue
{% elif (states('sensor.sensor_temperatura_dormitorio_temperature') |
int)
>= 26 %} red
{% elif (states('sensor.sensor_temperatura_dormitorio_temperature') |
int)
<= 18 %} blue
{% endif %}
- type: custom:stack-in-card
card_mod:
style: |
ha-card {
background: transparent!important;
margin-top: -110px;
margin-left: auto;
margin-right: 5px;
width: 44%;
}
cards:
- type: grid
square: false
columns: 2
cards:
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:floor-lamp
entity: light.bombilla_salon
icon_color: >
{% if (states('light.bombilla_salon')) == 'on' %} lime {%
endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:television
entity: media_player.tv_salon
tap_action:
action: more-info
icon_color: >
{% if (states('media_player.tv_salon')) == 'off' %} {% else %}
lime {% endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:sprout
tap_action:
action: navigate
navigation_path: '#plantas'
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:led-strip-variant
entity: light.bombilla_salon
icon_color: >
{% if (states('light.bombilla_salon')) == 'on' %} lime {%
endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:fan
entity: media_player.tv_salon
tap_action:
action: more-info
icon_color: >
{% if (states('media_player.tv_salon')) == 'off' %} {% else %}
lime {% endif %}
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
- type: custom:mushroom-template-card
primary: ''
secondary: ''
layout: vertical
icon: mdi:lamp
tap_action:
action: navigate
navigation_path: '#plantas'
card_mod:
style: |
ha-card {
border: 0px;
--icon-size: 35px;
margin: -10px!important;
}
Bonus! Tarjetas de habitación en HACS!
No puedo perder la ocasión para compartir con vosotros esta versión que ha creado nuestro amigo Muyayo, inspirada en nuestras tarjetas de habitación y alojada en HACS. Si eres de los que tienen alergia al YAML te va a encantar, ya que es fácil de instalar y muy personalizable! 😊
En la documentación del repositorio puedes encontrar los distintos métodos de instalación, así como las opciones de configuración.




Ofertas & Descuentos
Diseños 3D
Academia





























