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.
¿Dudas?¿necesitas ayuda? entra aquí
Y si te ha gustado, compártelo! 🙂