Tarjetas de habitación 2.0

Tarjetas de habitación 2.0

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:

Consideraciones previas

Si quieres construir esta tarjeta, considera lo siguiente:

  • Para crear la tarjeta necesitas instalar a través de HACS las tarjetas Mushroom CardsCard-modStack 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.

-69%
Sensor inteligente de temperatura y humedad Tuya Zigbee, Monitor de termómetro interior para el trabajo en casa con asistente de Google Home Alexa
Aliexpress
6,08€ 19,63€
Sensor inteligente de temperatura y humedad Tuya Zigbee, Monitor de termómetro interior para el trabajo en casa con asistente de Google Home Alexa
-50%
MOES Tuya Smart ZigBee Sensor de temperatura y humedad, higrómetro interior con pantalla LCD
Aliexpress
11,30€ 22,60€
MOES Tuya Smart ZigBee Sensor de temperatura y humedad, higrómetro interior con pantalla LCD
Zigbee-Sensor de temperatura y humedad para el hogar, termómetro inteligente con Wifi, higrómetro, Detector con Alexa y Google Smart Life, 3,0, 1/10 unidades
Aliexpress
7,36€
Zigbee-Sensor de temperatura y humedad para el hogar, termómetro inteligente con Wifi, higrómetro, Detector con Alexa y Google Smart Life, 3,0, 1/10 unidades
-67%
Tuya Zigbee-Sensor de temperatura y humedad para Smart Home, pantalla LCD, funciona con Alexa, Google Home APP, Smart Life, Tuya Smart Yandex
Aliexpress
6,71€ 20,96€
Tuya Zigbee-Sensor de temperatura y humedad para Smart Home, pantalla LCD, funciona con Alexa, Google Home APP, Smart Life, Tuya Smart Yandex
*Algún precio puede haber cambiado desde la última revisión

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

  1. Si la humedad iguala o supera el 60%, aparece el icono de una gota con el fondo azul.
  2. Si la temperatura iguala o supera los 26º, aparece el icono de una llama con el fondo rojo.
  3. 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.


¿Dudas?¿necesitas ayuda? entra aquí
Y si te ha gustado, compártelo! 🙂
Contenido exclusivo de Aguacatec
Send this to a friend