Sí, has leído bien, con esta guía puedes integrar CUALQUIER ventilador o aire acondicionado en Home Assistant por 30€ o menos.
Evidentemente, esta guía va dirigida a aquellos aparatos que no son inteligentes por si mismos, ni tienen una integración directa con Home Assistant.
Índice
Requisitos previos
Para poder integrar cualquier ventilador o aire acondicionado en Home Assistant sólo necesitas cumplir uno de los siguientes requisitos, dependiendo de cuál sea tu caso:
- Si tu aire acondicionado o ventilador tiene un mando a distancia. En este caso lo vamos a integrar a través de un controlador de infrarrojos (en mi caso utilizo BroadLink). Esta es la mejor situación, ya que con un único dispositivo vamos a poder enviar tantas órdenes como botones tenga el mando a distancia. Además podremos controlar varios aparatos con el mismo dispositivo. En mi caso lo utilizo para controlar varios ventiladores de techo.
- Si tu aire acondicionado o ventilador NO tiene un mando a distancia. Aquí nos encontramos con instalaciones más antiguas que se controlan oprimiendo botones en el propio aparato o un controlador de sala. En este caso vamos a utilizar un SwitchBot Bot, que es un pequeño dispositivo que sirve para pulsar físicamente cualquier tipo de botón. La desventaja es que solo nos va a permitir pulsar un único botón (por dispositivo), pero la ventaja es que nos va a permitir automatizar las instalaciones más antiguas.
Sea cual sea tu caso, vamos a estar realizando acciones físicas (encender, apagar, cambiar de temperatura…) que no tienen, a priori, reflejo en HA. Para compensar esta situación vamos a crear una serie de entidades virtuales que nos den información sobre el aparato.
Ten en cuenta que los códigos facilitados siguen la nomenclatura de los ejemplos, por lo que si cambias el nombre de las entidades creadas, también tendrás que adaptarlo en los códigos de creación de scripts y automatizaciones.
¿Necesitas ayuda? No te estreses, desde nuestro canal de Telegram te echamos una mano.
Control de encendido y apagado
Lo más importante que vamos a querer conocer es si el aparato está encendido o apagado.

Para ello vamos a crear un Ayudante que pueda tener estos dos valores (encendido / apagado). Ve a Ajustes > Dispositivos y servicios > Ayudantes y crea uno nuevo del tipo ‘Alternar’ (‘boolean’). Dale el nombre del aparato (por ejemplo, «Aire acondicionado») y guárdalo. Esto crea la entidad ‘input_boolean.aire_acondicionado‘.
Ahora necesitamos que HA sea capaz de actualizar esta información en función de los eventos que sucedan. Como lo más habitual es que tengamos un mismo botón (‘power’) tanto para encender como para apagar el aparato, vamos a crear una automatización para que cuando se pulse dicho botón, HA alterne la situación de estado (es decir, si está apagado pasará a «encendido» y viceversa).
Crea una automatización y pega el código correspondiente a tu caso, sustituyendo en el mismo tus entidades, dispositivos y comandos:
- Integración con controlador de infrarrojos. Aquí vamos a alternar el estado del aparato, cuando se llame al servicio correspondiente al comando «Power».
alias: Ventilador - Actualizar estado
description: >-
Si se llama al servicio Power, se alterna el estado de la entidad booleana del
ventilador
trigger:
- platform: event
event_type: call_service
event_data:
domain: remote
service: send_command
service_data:
device: Ventilador #Indica aquí el nombre de tu dispositivo
command: Power #Indica aquí el nombre de tu comando de encendido/apagado
condition: []
action:
- service: input_boolean.toggle
data: {}
target:
entity_id: input_boolean.ventilador
mode: single
- Integración con SwitchBot Bot. En este caso vamos a vincular el cambio de estado del SwitchBot Bot con el cambio de estado del aparato.
alias: Aire acondicionado - Actualizar estado
description: >-
Si cambia el estado del SwitchBot Bot, se alterna el estado de la entidad
booleana del aire acondicionado
trigger:
- platform: state
entity_id:
- switch.bot #Selecciona aquí la entidad de tu dispositivo SwitchBot Bot
condition: []
action:
- service: input_boolean.toggle
data: {}
target:
entity_id: input_boolean.aire_acondicionado
mode: single
Función de temporizador
Una de las funciones más interesantes que vamos a poder incorporar en nuestros aparatos al integrar cualquier ventilador o aire acondicionado en Home Assistant es la de un temporizador, que apague el aparato transcurrido el periodo que nosotros indiquemos.

Para ello sigue estos pasos:
- Ve a Ajustes > Dispositivos y servicios > Ayudantes y crea uno nuevo del tipo ‘Temporizador’ (‘timer’). Dale el nombre del aparato (por ejemplo, «Aire acondicionado») y guárdalo. Esto creará el ayudante ‘timer.aire_acondicionado’ que funcionará como temporizador.
- Ahora crea otro ayudante del tipo ‘Número’ y dale el nombre del aparato seguido de timer (por ejemplo, «Aire acondicionado timer»). En este caso indica como valor mínimo y tamaño del paso 30 (máximo el que quieras), y minutos como unidad de medida. Esto creará el ayudante ‘input_number.aire_acondicionado_timer’ que indicará al temporizador cuánto tiempo tiene que durar.
- Crea un script que alterne el estado del temporizador. Es decir, que inicie el temporizador con el valor guardado en el segundo ayudante creado, si el timer está inactivo (si ya está activo, servirá para finalizarlo). Esto nos va a permitir tener un valor «favorito» guardado. Para ello crea un nuevo script y pega el siguiente código:
alias: Aire acondicionado - Temporizador
sequence:
- if:
- condition: state
entity_id: timer.aire_acondicionado
state: active
then:
- service: timer.finish
data: {}
target:
entity_id: timer.aire_acondicionado
else:
- service: timer.start
data:
duration: "{{states('input_number.aire_acondicionado_timer') | int *60}}"
target:
entity_id: timer.aire_acondicionado
mode: single
icon: mdi:air-conditioner
- Crea una automatización que, cuando haya un temporizador en curso y se modifique el tiempo que tiene que durar, se reinicie con el nuevo valor. Esto nos va a permitir modificar la duración del temporizador fácilmente. Para ello crea una automatización y pega el siguiente código:
alias: Aire acondicionado - Actualización timer
description: "Actualiza el timer cuando se indica un nuevo valor, mientras está en funcionamiento"
trigger:
- platform: state
entity_id:
- input_number.aire_acondicionado_timer
condition:
- condition: state
entity_id: timer.aire_acondicionado
state: active
action:
- service: timer.start
data:
duration: "{{states('input_number.aire_acondicionado_timer') | int *60}}"
target:
entity_id: timer.aire_acondicionado #Selecciona aquí la entidad del temporizador creado
mode: single
- Por último vamos a crear una automatización que encienda el aparato cuando se active el temporizador (si es que está apagado), configurándola de la siguiente manera:
- Desencadenantes. Selecciona «Estado», escoge el timer creado en el paso 1 (‘timer.aire_acondicionaro’) e indica, únicamente, en el apartado «A» el valor «Activo».
- Condiciones. Selecciona «Estado», busca la entidad de estado de tu aparato (‘input_boolean.aire_acondicionado’) creada en el apartado «Control de encendido y apagado», y en estado selecciona «Apagado».
- Acciones. Aqui tienes que indicar la acción que encienda el aparato. En caso de la integración con controlador de infrarrojos será llamar al servicio que lanza comando «Power», y en el caso de la integración con SwitchBot Bot tendrás que seleccionar el dispositivo correspondiente e indicar como acción «Encender».
- De forma inversa, vamos a crear otra automatización que apague el aparato y finalice el temporizador cuando acabe el tiempo o desactivemos el temporizador manualmente (o que simplemente finalice el temporizador cuando apaguemos el aparato manualmente). Adicionalmente vamos a añadir como condición que la función del «modo temperatura» esté apagada (ver apartado siguiente), para que no entren en conflicto. Crea una automatización y configúrala de la siguiente manera:
- Desencadenantes. Selecciona «Estado», escoge el timer creado en el paso 1 (‘timer.aire_acondicionado’) e indica, únicamente, en el apartado «A» = «Inactivo». Añade un segundo desencadenante seleccionando «Estado», busca la entidad de estado de tu aparato (‘input_boolean.aire_acondicionado’) creada en el apartado «Control de encendido y apagado», y en el campo «A» selecciona «Apagado».
- Condiciones. Selecciona «Estado», busca la entidad de estado del modo temperatura de tu aparato (‘input_boolean.aire_acondicionado_modo_temperatura’) que vas a crear en el apartado siguiente, y en el campo «Estado» selecciona «Apagado». Si no creas un modo temperatura, no es necesario que añadas esta condición.
- Acciones. Aqui tienes que indicar la acción que apague el aparato. En caso de la integración con controlador de infrarrojos será llamar al servicio que lanza comando «Power», y en el caso de la integración con SwitchBot Bot tendrás que seleccionar el dispositivo correspondiente e indicar como acción «Apagar». Añade una segunda acción, selecciona «Llamar servicio», y busca ‘timer.finish». Elige como entidad el temporizador de tu aparato (‘timer.aire_acondicionado’).
Función de temperatura objetivo
En este caso vamos a buscar que el aparato esté encendido hasta que la temperatura de la estancia alcance unos grados determinados, bien sea porque el aparato ha conseguido rebajar la temperatura, o porque ha bajado la temperatura ambiental (por ejemplo, por la noche).

Para ello necesitas un sensor de temperatura en la estancia donde tengas el aparato, para poder medir la temperatura ambiente. Hay dispositivos como termostatos, altavoces inteligentes o controladores de infrarrojos, entre muchos otros, que cuentan con un sensor de temperatura incorporado, por lo que puedes revisar si puedes aprovechar alguno de los que ya tienes. En mi caso tengo este tipo de sensores de temperatura / humedad de Tuya integrados con zigbee2mqtt, además del sensor de temperatura del termostato tadoº.
Para crear la función sigue estos pasos:
- Ve a Ajustes > Dispositivos y servicios > Ayudantes y crea un Ayudante del tipo ‘Alternar’ (‘boolean’). Dale el nombre del aparato seguido de «modo temperatura» (por ejemplo, «Aire acondicionado modo temperatura») y guárdalo. Esto creará el ayudante ‘input_boolean.aire_acondicionado_modo_temperatura’ que nos va a informar de si el «modo temperatura» está activo o no.
- Crea otro Ayudante del tipo ‘Número’ y dale el nombre del aparato seguido de target (por ejemplo, «Aire acondicionado target»). En este caso indica como valor mínimo y máximo indica el rango entre las que estaría tu temperatura objetivo (por ejemplo, entre 20 y 28). Como tamaño del paso indica ‘1’, y «grados» como unidad de medida. Esto creará el ayudante ‘input_number.aire_acondicionado_target’ que nos va a servir para marcar cuál es la temperatura objetivo que queremos conseguir.
- Pega el siguiente código en tu fichero ‘sensors.yaml, para crear un sensor (‘sensor.diferencia_temperatura_target‘) que calcule la diferencia entre la temperatura real de la estancia y la temperatura objetivo. No olvides sustituir en el código tu sensor de temperatura.
- platform: template
sensors:
diferencia_temperatura_target:
friendly_name: "Diferencia temperatura (target)"
value_template: >
{{ (states('sensor.TU-SENSOR-DE-TEMPERATURA') | int) - (states('input_number.aire_acondicionado_target') | int) }} # Indica aquí tu sensor de temperatura
icon_template: mdi:thermometer-alert
unit_of_measurement: "grados"
- A continuación vamos a crear un script que alterne el estado del primer ayudante creado (‘input_boolean.aire_acondicionado_modo_temperatura’). Es decir, lo cambiará a encendido si su estado actual es apagado (y si por lo contrario el estado actual es encendido, apagará el modo temperatura). Para ello crea un nuevo script y pega el siguiente código:
alias: Aire acondicionado - Modo temperatura
sequence:
- if:
- condition: state
entity_id: input_boolean.aire_acondicionado_modo_temperatura
state: "on"
then:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.aire_acondicionado_modo_temperatura
else:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.aire_acondicionado_modo_temperatura
mode: single
icon: mdi:air-conditioner
- Ahora, vamos a crear una automatización que encienda el aparato cuando se active el modo temperatura (tras comprobar que el aparato está apagado), configurándola de la siguiente manera:
- Desencadenantes. Selecciona «Estado», escoge el ayudante creado en el paso 1 (‘input_boolean.aire_acondicionado_modo_temperatura’) e indica, únicamente, en el apartado «A» = «Encendido».
- Condiciones. Selecciona “Estado”, busca la entidad de estado de tu aparato (‘input_boolean.aire_acondicionado’) creada en el apartado “Control de encendido y apagado”, y en estado selecciona “Apagado”.
- Acciones. Aqui tienes que indicar la acción que encienda el aparato. En caso de la integración con controlador de infrarrojos será llamar al servicio que lanza comando «Power», y en el caso de la integración con SwitchBot Bot tendrás que seleccionar el dispositivo correspondiente e indicar como acción «Encender».
- De forma inversa, vamos a crear otra automatización que apague el aparato y desactive el modo temperatura cuando se alcance la temperatura objetivo (tras comprobar que ambos están encendidos), configurándola de la siguiente manera:
- Desencadenantes. Selecciona «Estado numérico», escoge el sensor creado en el paso 3 (‘sensor.diferencia_temperatura_target’) y selecciona en el apartado «Modo por debajo de» la opción de «Número fijo», e introduce ‘1’ en el campo «Por debajo de».
- Condiciones. Selecciona «Estado», busca la entidad de estado de tu aparato (‘input_boolean.aire_acondicionado’) creada en el apartado «Control de encendido y apagado», y en estado selecciona «Encendido». Añade una segunda condición y selecciona «Estado», escoge el ayudante creado en el paso 1 (‘input_boolean.aire_acondicionado_modo_temperatura’) y en el campo «Estado» selecciona «Encendido».
- Acciones. Aqui tienes que indicar la acción que apague el aparato. En caso de la integración con controlador de infrarrojos será llamar al servicio que lanza comando «Power», y en el caso de la integración con SwitchBot Bot tendrás que seleccionar el dispositivo correspondiente e indicar como acción «Apagar». Añade como acción adicional «Llamar servicio», indica «Entrada booleana: Apagar» y selecciona como entidad el ayudante creado en el paso 1 (‘input_boolean.aire_acondicionado_modo_temperatura’).
- Tenemos que crear tra automatización que apague el aparato si desactivamos manualmente el modo temperatura (tras comprobar que el aparato está encendido). Adicionalmente vamos a añadir como condición que el temporizador esté inactivo (ver apartado anterior), para que no entren en conflicto. Crea una automatización y configúrala de la siguiente manera:
- Desencadenantes. Selecciona «Estado», escoge el ayudante creado en el paso 1 (‘input_boolean.aire_acondicionado_modo_temperatura’) y en el campo «A» selecciona «Apagado».
- Condiciones. Selecciona «Estado», busca la entidad de estado de tu aparato (‘input_boolean.aire_acondicionado’) creada en el apartado «Control de encendido y apagado», y en estado selecciona «Encendido». Añade una segunda condición y selecciona «Estado», escoge el temporizador creado en el apartado anterior (‘timer.aire_acondicionado’) y en el campo «Estado» selecciona «Inactivo».
- Acciones. Aqui tienes que indicar la acción que apague el aparato. En caso de la integración con controlador de infrarrojos será llamar al servicio que lanza comando «Power», y en el caso de la integración con SwitchBot Bot tendrás que seleccionar el dispositivo correspondiente e indicar como acción «Apagar».
- Muy parecida a las anteriores, vamos a crear otra automatización que desactive el modo temperatura si apagamos manualmente el aparato (tras comprobar que el modo temperatura está activo), configurándola de la siguiente manera:
- Desencadenantes. Selecciona “Estado”, busca la entidad de estado de tu aparato (por ejemplo, “input_boolean.aire_acondicionado”) creada en el apartado “Control de encendido y apagado”, y en el campo «A» selecciona “Apagado”.
- Condiciones. Selecciona «Estado», busca la entidad creada en el paso 1 (‘input_boolean.aire_acondicionado_modo_temperatura’), y en estado selecciona «Encendido».
- Acciones. Selecciona «Llamar servicio», indica «Entrada booleana: Apagar» y selecciona como entidad el ayudante creado en el paso 1 («Aire acondicionado modo temperatura»).
- Para prevenir conflictos, vamos a crear dos últimas automatizaciones. La primera hará que, si está activo el modo temperatura y se activa el temporizador, desactive el modo temperatura. La segunda hará que, si el temporizador está activo y se activa el modo temperatura, finalice el temporizador. Crea dos automatizaciones y copia estos códigos:
alias: Aire acondicionado - Modo temperatura + Temporizador (on)
description: >-
Si está activo el modo temperatura y se activa el temporizador, desactiva el
modo temperatura
trigger:
- platform: state
entity_id:
- timer.aire_acondicionado
to: active
condition:
- condition: state
entity_id: input_boolean.aire_acondicionado_modo_temperatura
state: "on"
action:
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.aire_acondicionado_modo_temperatura
mode: single
alias: Aire acondicionado - Temporizador + Modo temperatura (on)
description: >-
Si el temporizador está activo y se activa el modo temperatura, finaliza el
temporizador
trigger:
- platform: state
entity_id:
- input_boolean.aire_acondicionado_modo_temperatura
to: "on"
condition:
- condition: state
entity_id: timer.aire_acondicionado
state: active
action:
- service: timer.finish
data: {}
target:
entity_id: timer.aire_acondicionado
mode: single
Funciones de ahorro de energía
Conocer la temperatura ambiental es de utilidad para valorar la temperatura relativa en nuestra casa, y para el ahorro energético. Si la temperatura exterior es inferior a la interior, a lo mejor basta con abrir la ventana en lugar de encender el aire acondicionado. Esto lo podemos conseguir fácilmente integrando la información de algún servicio meteorológico como OpenWeather.

Del mismo modo, si la temperatura ambiental es superior nos interesa cerrar todas las ventanas mientras esté funcionando nuestro aparato para no perder eficiencia energética. Por lo que si dispones de algún sensor de este tipo utilízalos para que Home Assistant te avise cuando haya ventanas abiertas.
Función de control remoto
Una de las mayores ventajas de integrar cualquier ventilador o aire acondicionado en Home Assistant es poder encenderlo desde fuera de casa para que este «fresquita» cuando llegues. Esto lo puedes hacer fácilmente desde tu teléfono, pero primero necesitas habilitar el acceso a Home Assistant desde el exterior.
Tarjeta Lovelace
Si has seguido la guía para integrar cualquier ventilador o aire acondicionado en Home Assistant, puedes usar la tarjeta mostrada en los ejemplos para controlar tu nueva instalación. Antes necesitas disponer de las tarjetas Stack in card, Mushroom Cards, Card Mod, Timer Bar Card y Bar Card, que puedes instalar a través de HACS. Hecho esto crea una nueva tarjeta y copia el código que corresponde a tu caso, revisando que has adaptado en el código tus sensores, dispositivos, entidades y comandos (especialmente si no has seguido la nomenclatura de ejemplo).
- Integración con SwitchBot Bot
type: custom:stack-in-card
cards:
- square: false
type: grid
columns: 2
cards:
- type: custom:mushroom-template-card
primary: Climatizador
secondary: |
Interior {{ states('sensor.TU-SENSOR-DE-TEMPERATURA') | int }}ºC # Indica aquí tu sensor de temperatura
icon: mdi:fan
icon_color: |
{% if states('input_boolean.aire_acondicionado') == 'on' %}teal
{% endif %}
badge_icon: >
{% if states('sensor.openweathermap_temperature')| int <=
states('sensor.TU-SENSOR-DE-TEMPERATURA') | int %} # Indica aquí tu sensor de temperatura
mdi:snowflake
{% endif %}
badge_color: >
{% if states('sensor.openweathermap_temperature')| int <=
states('sensor.TU-SENSOR-DE-TEMPERATURA') | int %} # Indica aquí tu sensor de temperatura
blue
{% endif %}
entity: switch.bot # Selecciona aquí tu dispositivo
tap_action:
action: toggle
card_mod:
style: |-
ha-card {
border: 0px;
}
{% if states('input_boolean.aire_acondicionado') == 'on' %}
ha-state-icon {
animation: spin 1.4s linear infinite;
}
{% endif %}
- type: custom:mushroom-chips-card
alignment: end
card_mod:
style: |
ha-card {
margin-top: 15px;
margin-right: 10px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
}
chips:
- type: template
icon: mdi:clock
icon_color: |
{% if states('timer.aire_acondicionado') == 'active' %}
white
{% endif %}
content: ''
tap_action:
action: call-service
service: script.aire_acondicionado_temporizador
card_mod:
style: |
ha-card {
border: 0px;
{% if states('timer.aire_acondicionado') == 'active' %}
background-color: teal !important;
{% endif %}
}
- type: template
icon: mdi:thermometer-alert
icon_color: >
{% if states('input_boolean.aire_acondicionado_modo_temperatura')
== 'on' %}
white
{% endif %}
content: ''
tap_action:
action: call-service
service: script.aire_acondicionado_modo_temperatura
card_mod:
style: >
ha-card { border: 0px; {% if
states('input_boolean.aire_acondicionado_modo_temperatura') ==
'on' %}
background-color: teal !important;
{% endif %} }
- type: conditional
conditions:
- entity: timer.aire_acondicionado
state: active
card:
type: custom:timer-bar-card
entity: timer.aire_acondicionado
layout: full_row
bar_background: '#1e4343'
bar_foreground: '#008080'
bar_height: 38px
text_width: 0px
sync_issues: ignore
- type: conditional
conditions:
- entity: timer.aire_acondicionado
state: active
card:
type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-left: 15px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
--primary-text-color: white;
}
chips:
- type: template
content: >
Encendido hasta las
{{ (as_datetime(state_attr('timer.aire_acondicionado',
'finishes_at')) | as_local).strftime("%H:%M") }}
{% set time = states('input_number.aire_acondicionado_timer') | int
%} {% set horas = (time | int /60) | int %} {% set minutos = time -
(horas*60) %}
{% if horas > 0 %}({{ horas }}h{% if minutos > 0 %} y {{ minutos
}}'){% else %}){% endif %} {% else %}{% if minutos > 0 %}({{ minutos
}}'{% endif %}) {% endif %}
card_mod:
style: |
ha-card {
border:0px;
background-color: transparent !important;
}
- type: conditional
conditions:
- entity: timer.aire_acondicionado
state: active
card:
type: custom:mushroom-chips-card
alignment: end
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-right: 10px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
}
chips:
- type: template
icon: mdi:clock-minus
icon_color: white
card_mod:
style: |
ha-card {
border:0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.decrement
target:
entity_id: input_number.aire_acondicionado_timer
data: {}
- type: template
icon: mdi:clock-plus
icon_color: white
card_mod:
style: |
ha-card {
border:0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.increment
target:
entity_id: input_number.aire_acondicionado_timer
data: {}
- type: conditional
conditions:
- entity: input_boolean.aire_acondicionado_modo_temperatura
state: 'on'
card:
type: custom:bar-card
card_mod:
style: |-
ha-card {
border: 0px;
margin-top: -10px;
margin-bottom: -16px;
margin-left: -16px;
margin-right: -16px;
}
bar-card-currentbar {
border-radius: 0px !important;
}
bar-card-backgroundbar {
background-color: #378b8b !important;
border-radius: 0px !important;
opacity: 0.9
}
entities:
- entity: sensor.diferencia_temperatura_target_aire_acondicionado
direction: left-reverse
color: teal
height: 38px
max: 5
positions:
icon: 'off'
name: 'off'
value: 'off'
- type: conditional
conditions:
- entity: input_boolean.aire_acondicionado_modo_temperatura
state: 'on'
card:
type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-left: 15px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
--primary-text-color: white;
}
chips:
- type: template
content: >
Encendido hasta los {{
states('input_number.aire_acondicionado_target') | int }}ºC
card_mod:
style: |
ha-card {
border: 0px;
background-color: transparent !important;
}
- type: conditional
conditions:
- entity: input_boolean.aire_acondicionado_modo_temperatura
state: 'on'
card:
type: custom:mushroom-chips-card
alignment: end
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-right: 10px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
}
chips:
- type: template
icon: mdi:thermometer-minus
icon_color: white
card_mod:
style: |
ha-card {
border: 0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.decrement
target:
entity_id: input_number.aire_acondicionado_target
data: {}
- type: template
icon: mdi:thermometer-plus
icon_color: white
card_mod:
style: |
ha-card {
border: 0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.increment
target:
entity_id: input_number.aire_acondicionado_target
data: {}
- Integración con controlador de infrarrojos. Esta versión de la tarjeta incorpora además dos iconos para aumentar o disminuir la potencia en una instancia.

type: custom:stack-in-card
cards:
- square: false
type: grid
columns: 2
cards:
- type: custom:mushroom-template-card
primary: Dormitorio
secondary: >
Temp {{ states('sensor.TU-SENSOR-DE-TEMPERATURA') |
int }}ºC # Indica aquí tu sensor de temperatura
icon: mdi:fan
icon_color: |
{% if states('input_boolean.ventilador') == 'on' %}teal
{% endif %}
badge_icon: >
{% if states('sensor.openweathermap_temperature')| int <=
states('sensor.TU-SENSOR-DE-TEMPERATURA') | int %} # Indica aquí tu sensor de temperatura
mdi:snowflake
{% endif %}
badge_color: >
{% if states('sensor.openweathermap_temperature')| int <=
states('sensor.TU-SENSOR-DE-TEMPERATURA') | int %} # Indica aquí tu sensor de temperatura
blue
{% endif %}
tap_action:
action: call-service
service: remote.send_command
target:
entity_id: remote.broadlink # Selecciona aquí tu dispositivo de infrarrojo
data:
device: Ventilador # Indica aquí tu dispositivo
command: Power # Indica aquí tu comando de encendido/apagado
entity: input_boolean.ventilador
card_mod:
style: |-
ha-card {
border: 0px;
}
{% if states('input_boolean.ventilador') == 'on' %}
ha-state-icon {
animation: spin 1.4s linear infinite;
}
{% endif %}
- type: custom:mushroom-chips-card
alignment: end
card_mod:
style: |
ha-card {
margin-top: 15px;
margin-right: 10px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
}
chips:
- type: template
icon: mdi:fan-minus
content: ''
tap_action:
action: call-service
service: remote.send_command
target:
entity_id: remote.broadlink # Selecciona aquí tu dispositivo de infrarrojo
data:
device: Ventilador # Indica aquí tu dispositivo
command: Viento_menos # Indica aquí tu comando de disminuir intensidad
card_mod:
style: |
ha-card {
border: 0px;
}
- type: template
icon: mdi:fan-plus
content: ''
tap_action:
action: call-service
service: remote.send_command
target:
entity_id: remote.broadlink # Selecciona aquí tu dispositivo de infrarrojo
data:
device: Ventilador # Indica aquí tu dispositivo
command: Viento_mas # Indica aquí tu comando de aumentar intensidad
card_mod:
style: |
ha-card {
border: 0px;
}
- type: template
icon: mdi:clock
icon_color: |
{% if states('timer.ventilador') == 'active' %}
white
{% endif %}
content: ''
tap_action:
action: call-service
service: script.ventilador_temporizador
card_mod:
style: |
ha-card {
border: 0px;
{% if states('timer.ventilador') == 'active' %}
background-color: teal !important;
{% endif %}
}
- type: template
icon: mdi:thermometer-alert
icon_color: >
{% if states('input_boolean.ventilador_modo_temperatura') == 'on'
%}
white
{% endif %}
content: ''
tap_action:
action: call-service
service: script.ventilador_modo_temperatura
card_mod:
style: >
ha-card { border: 0px; {% if
states('input_boolean.ventilador_modo_temperatura') == 'on' %}
background-color: teal !important;
{% endif %} }
- type: conditional
conditions:
- entity: timer.ventilador
state: active
card:
type: custom:timer-bar-card
entity: timer.ventilador
layout: full_row
bar_background: '#1e4343'
bar_foreground: '#008080'
bar_height: 38px
text_width: 0px
sync_issues: ignore
- type: conditional
conditions:
- entity: timer.ventilador
state: active
card:
type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-left: 15px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
--primary-text-color: white;
}
chips:
- type: template
content: >
Encendido hasta las
{{ (as_datetime(state_attr('timer.ventilador', 'finishes_at')) |
as_local).strftime("%H:%M") }}
{% set time = states('input_number.ventilador_timer') | int %} {%
set horas = (time | int /60) | int %} {% set minutos = time -
(horas*60) %}
{% if horas > 0 %}({{ horas }}h{% if minutos > 0 %} y {{ minutos
}}'){% else %}){% endif %} {% else %}{% if minutos > 0 %}({{ minutos
}}'{% endif %}) {% endif %}
card_mod:
style: |
ha-card {
border:0px;
background-color: transparent !important;
}
- type: conditional
conditions:
- entity: timer.ventilador
state: active
card:
type: custom:mushroom-chips-card
alignment: end
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-right: 10px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
}
chips:
- type: template
icon: mdi:clock-minus
icon_color: white
card_mod:
style: |
ha-card {
border:0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.decrement
target:
entity_id: input_number.ventilador_timer
data: {}
- type: template
icon: mdi:clock-plus
icon_color: white
card_mod:
style: |
ha-card {
border:0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.increment
target:
entity_id: input_number.ventilador_timer
data: {}
- type: conditional
conditions:
- entity: input_boolean.ventilador_modo_temperatura
state: 'on'
card:
type: custom:bar-card
card_mod:
style: |-
ha-card {
border: 0px;
margin-top: -10px;
margin-bottom: -16px;
margin-left: -16px;
margin-right: -16px;
}
bar-card-currentbar {
border-radius: 0px !important;
}
bar-card-backgroundbar {
background-color: #378b8b !important;
border-radius: 0px !important;
opacity: 0.9
}
entities:
- entity: sensor.diferencia_temperatura_target_ventilador
direction: left-reverse
color: teal
height: 38px
max: 5
positions:
icon: 'off'
name: 'off'
value: 'off'
- type: conditional
conditions:
- entity: input_boolean.ventilador_modo_temperatura
state: 'on'
card:
type: custom:mushroom-chips-card
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-left: 15px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
--primary-text-color: white;
}
chips:
- type: template
content: >
Encendido hasta los {{ states('input_number.ventilador_target') |
int }}ºC
card_mod:
style: |
ha-card {
border: 0px;
background-color: transparent !important;
}
- type: conditional
conditions:
- entity: input_boolean.ventilador_modo_temperatura
state: 'on'
card:
type: custom:mushroom-chips-card
alignment: end
card_mod:
style: |
ha-card {
margin-top: -36px;
margin-right: 10px;
border: 0px !important;
--chip-box-shadow: 0px;
--chip-spacing: 0px;
}
chips:
- type: template
icon: mdi:thermometer-minus
icon_color: white
card_mod:
style: |
ha-card {
border: 0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.decrement
target:
entity_id: input_number.ventilador_target
data: {}
- type: template
icon: mdi:thermometer-plus
icon_color: white
card_mod:
style: |
ha-card {
border: 0px;
background-color: transparent !important;
}
tap_action:
action: call-service
service: input_number.increment
target:
entity_id: input_number.ventilador_target
data: {}
Notificaciones de Home Assistant
Para dar soporte a las funciones creadas, podemos pedirle a HA que nos envíe notificaciones a través de Telegram. Aquí algunas ideas:
- Batería baja del controlador. Tanto si tenemos un SwitchBot Bot como un controlador por infrarrojos a batería, nos va a interesar que HA nos avise antes de que nos quedemos sin pilas y se nos venga a bajo la instalación.
- Fin del temporizador. Podemos pedir a HA que nos avise unos minutos antes de que finalice el temporizador, y nos permita enviar un comando para alargar el tiempo de funcionamiento, o ignorarlo para que se apague.
- Fin del modo temperatura. Igual que en el caso anterior, podemos pedir a HA que nos avise cuando se alcance la temperatura objetivo, y nos permita enviar un comando para disminuir la temperatura objetivo, o ignorarlo para que se apague.
- Temperatura ambiente inferior. Pídele a HA que te avise cuando enciendas tu aparato si la temperatura exterior es inferior, de forma que puedas decidir si prefieres mantener el aparato encendido o apagarlo y abrir las ventanas.
- Ventanas abiertas. Haz que HA esté pendiente de las ventanas, de forma que te avise cuando enciendas un aparato y haya alguna ventana abierta, para incrementar la eficiencia energética.

