Controlo los relés del cable piloto de mi calefacción con input_select de Home Assistant

 

Como expliqué en:

Controlo mi calefacción en dos zonas gracias a los cables piloto. Como parte del cambio de Jeedom a Home Assistant, tengo que administrar estos relés con Home Assistant.

filpiloteprincipe

Por ahora, el Sonoff 4CH Pro es conducido por ESP Easy, pronto lo cambiaré a ESP Home, pero por ahora ESP Easy le permite interactuar con Jeedom ET Home Assistant a través de MQTT.

Para la configuración, me refiero a este Retex:

Conduzco relés a través de MQTT

Como se explica en el Retex arriba, es necesario configurar las entidades que permitirán recuperar los relés en Home Assistant, esto se hace en el archivo mqtt.yaml

- nombre: "Relay 1 Calefacción" único _id: comando switch.heating.relais1_topic: «Heating/gpio/12» state_topic (en inglés): "Calefacción/Retransmisión1/Retransmisión1" payload_on: «1» carga útil _off: "0" conserva: dispositivo verdadero_class: dispositivo de salida: nombre: Identificadores de "calefacción": "calentamiento" - nombre: "Relay 2 Calefacción" único _id: comando switch.heating.relais2_topic: "Calefacción/gpio/5" state_topic: Carga útil "Heating/Relay2/Relay2"_on: «1» carga útil _off: "0" conserva: dispositivo verdadero_class: dispositivo de salida: nombre: Identificadores de "calefacción": "calentamiento" - nombre: "Relay 3 Calefacción" único _id: comando switch.heating.relais3_topic: "Calefacción/gpio/4" estado_topic: Carga útil "Heating/Relay3/Relay3"_on: «1» carga útil _off: "0" conserva: dispositivo verdadero_class: dispositivo de salida: nombre: Identificadores de "calefacción": "calentamiento" - nombre: "Relay 4 Calefacción" único _id: comando switch.heating.relais4_topic: «Heating/gpio/15» state_topic (en inglés): "Calefacción/Retransmisión4/Retransmisión4" payload_on: «1» carga útil _off: "0" conserva: dispositivo verdadero_class: dispositivo de salida: nombre: Identificadores de "calefacción": "calentamiento" 

En HA, estas 4 entidades se recuperan fácilmente 

Yo creo _select entrada

Es en el archivo configuration.yaml que declaro las dos entidades de las zonas permitiéndoles tener 4 estados posibles.

input_select: _etage_modo de calefacción: nombre: Calefacción Zona Piso - Opciones de modo: - "Comfort" - "Eco" - "Out of Gel" - icono "Off": mdi:help-circle-outline heating _rdc _mode: nombre: Zona de Calefacción Planta Baja - Opciones de Modo: - "Comfort" - "Eco" - "Out of Gel" - icono "Off": mdi:help-circle-outline

Esto añade las dos entidades:

  • input_select.heating_rdc_mode
  • input_select.heating_etage_mode

Personalizo input_select

Siempre trato de hacer visualmente agradables los azulejos del tablero, para esto, poner color y poner hermosos iconos que correspondan a los estados parece indispensable.

La personalización se logra agregando estas líneas en custom.yaml

input_select.heating_etage_mode: plantillas: icono: > si (estado == 'Confort') devuelve 'mdi:fire'; si (estado == 'Eco') devuelve 'mdi:leaf'; si (estado == 'Hors Gel') devuelve 'mdi:snowflake-termómetro'; si (estado == 'Off') devuelve 'mdi:power'; devolver «mdi:help-circle-outline»; Icono de _color: > si (estado == 'Confort') devuelve 'amarillo'; si (estado == 'Eco') devuelve 'verde'; if (state == 'Outside Gel') return '#2196f3»; if (state == 'Off') return 'red'; input_select.heating_rdc_mode: plantillas: icono: > si (estado == 'Confort') devuelve 'mdi:fire'; si (estado == 'Eco') devuelve 'mdi:leaf'; si (estado == 'Hors Gel') devuelve 'mdi:snowflake-termómetro'; si (estado == 'Off') devuelve 'mdi:power'; devolver «mdi:help-circle-outline»; Icono de _color: > si (estado == 'Confort') devuelve 'amarillo'; si (estado == 'Eco') devuelve 'verde'; if (state == 'Outside Gel') return '#2196f3»; if (state == 'Off') return 'red';    

Conduzco relés desde input_select

La correspondencia entre las zonas (Etage y Ground Floor) debe hacerse en Home Assistant, la elección de los relés para controlar el modo de zona debe ser transparente para el usuario.

Para ello, se activará una automatización por un cambio de estado de entrada_select.heating_rdc_mode y otra por input_select.heating_etage_mode.

Esta automatización cambiará el estado de los relés para enviar el orden que corresponde a la codificación del cable piloto. Esto se explica aquí.

Automatización Pilotaje Calefacción Planta Baja

alias: Descripción de Pilotage Heating Ground Floor: Activador "": - plataforma: _id, entidad estatal: - input_select.heating_rdc_mode condición: [] acción: - si: - condición: _id, entidad estatal: input_select.heating_rdc_mode estado: Confort entonces: - servicio: datos de switch.turn _off: {} entidad _id: - switch.heating_relais_3_heating - switch.heating_relais_4_heating - stop: "" - si: - condición: _id, entidad estatal: input_select.heating_rdc_mode estado: Eco entonces: - servicio: switch.turn_on datos: {} entidad _id: - switch.heating_relais_3_heating - switch.heating_relais_4_heating - stop: "" - si: - condición: _id, entidad estatal: input_select.heating_rdc_mode estado: Excluyendo Gel entonces: - servicio: datos de switch.turn _off: {} entidad _id: - switch.heating_relais_4_heating - servicio: switch.turn_on datos: {} entidad _id: - switch.heating_relais_3_heating - stop: "" - si: - condición: _id, entidad estatal: input_select.heating_rdc_mode estado: "Fuera" entonces: - servicio: datos de switch.turn _off: {} entidad _id: - switch.heating_relais_3_heating - servicio: switch.turn_on datos: {} entidad _id: - switch.heating_relais_4_heating - stop: Modo "": soltero

Automatización Pilotaje Calefacción suelo

alias: Descripción del suelo de calefacción de pilotaje: Activador "": - plataforma: _id, entidad estatal: - input_select.heating_etage_mode condition: [] acción: - si: - condición: _id, entidad estatal: input_select.heating_etage _mode estado: Confort entonces: - servicio: datos de switch.turn _off: {} entidad _id: - switch.heating_relais_2_heating - switch.heating_relais_1_heating - stop: "" - si: - condición: _id, entidad estatal: input_select.heating_etage _mode estado: Eco entonces: - servicio: switch.turn_on datos: {} entidad _id: - switch.heating_relais_2_heating - switch.heating_relais_1_heating - stop: "" - si: - condición: _id, entidad estatal: input_select.heating_etage _mode estado: Excluyendo Gel entonces: - servicio: datos de switch.turn _off: {} entidad _id: - switch.heating_relais_2_heating - servicio: switch.turn_on datos: {} entidad _id: - switch.heating_relais_1_heating - stop: "" - si: - condición: _id, entidad estatal: input_select.heating_etage _mode estado: "Fuera" entonces: - servicio: datos de switch.turn _off: {} entidad _id: - switch.heating_relais_1_heating - servicio: switch.turn_on datos: {} entidad _id: - switch.heating_relais_2_heating - stop: Modo "": soltero

Hago un buen mapa para el tablero

Aquí está el resultado de lo que quiero como tarjeta:

En este punto, no sé si voy a mantener la lista desplegable o los botones / selectores, ambos funcionan.

Código de mapa para el área de la planta baja 

Tipo: custom:modo de pila en tarjeta: tarjetas verticales: - tipo: custom:auto-entidades muestran _empty: Tarjeta falsa: Tipo: custom:mushroom-chips-card view_layout: zona de la red: alineación de chips: tarjeta central_param: Filtro de chips: plantilla: > {% set ns = namespace(select=[],entity="input_select.heating_rdc_mode") %} {% para optar en el estado_attr(ns.entity, 'options') %} {% icono de conjunto = iif(opt== 'Confort', 'mdi:fire', icono) %} {% set icon_color _select = iif(opt== 'Comfort', 'yellow', icon_color _select) %} {% icono de conjunto = iif(opt== 'Off', 'mdi:power', icono) %} {% set icon_color _select = iif(opt== 'Off', 'red', icon_color _select) %} {% icono de conjunto = iif(opt== 'Eco', 'mdi:leaf', icono) %} {% set icon_color _select = iif(opt== 'Eco', 'green', icon_color _select) %} {% icono de conjunto = iif(opt== 'Out of Gel', 'mdi:snowflake-thermometer', icono) %} {% set icon_color _select = iif(opt== 'Out of Gel', 'blue', icon_color _select) %} {% set ns.select = ns.select + [ { "type": "plantilla", "icono": icono, "entidad": ns.entity, "icono _color": '{{ iif(is _state("' ~ ns.entity ~ '", "' ~ opt ~ '"), "' ~ icon_color _select ~ '", "disabled") }', "tap _action": { "acción": "servicio de llamada", "servicio": «input_select.select _option», «_data service»: { "entidad _id": ns.entidad, "opción": opt } }, "tarjeta _mod": { "estilo": 'ha-card { {% si es _state( "' ~ ns.entity ~ '" , "' ~ opt ~ '" ) %} --chip-fondo: rgba(var(--rgb-gris), 0,1); {% de lo contrario %} --chip-fondo: rgba(var(--mush-rgb-state-entity), 0,3); {% endif %} }' } } ] %} {% endfor %} {{ ns.select }} - tipo: entidades entidades: - entidad: input_select.heating_rdc_mode

Código de mapa para el área del piso

Tipo: custom:modo de pila en tarjeta: tarjetas verticales: - tipo: custom:auto-entidades muestran _empty: Tarjeta falsa: Tipo: custom:mushroom-chips-card view_layout: zona de la red: alineación de chips: tarjeta central_param: Filtro de chips: plantilla: > {% set ns = namespace(select=[],entity="input_select.heating_etage _mode") %} {% para optar en el estado_attr(ns.entity, 'options') %} {% icono de conjunto = iif(opt== 'Confort', 'mdi:fire', icono) %} {% set icon_color _select = iif(opt== 'Comfort', 'yellow', icon_color _select) %} {% icono de conjunto = iif(opt== 'Off', 'mdi:power', icono) %} {% set icon_color _select = iif(opt== 'Off', 'red', icon_color _select) %} {% icono de conjunto = iif(opt== 'Eco', 'mdi:leaf', icono) %} {% set icon_color _select = iif(opt== 'Eco', 'green', icon_color _select) %} {% icono de conjunto = iif(opt== 'Out of Gel', 'mdi:snowflake-thermometer', icono) %} {% set icon_color _select = iif(opt== 'Out of Gel', 'blue', icon_color _select) %} {% set ns.select = ns.select + [ { "type": "plantilla", "icono": icono, "entidad": ns.entity, "icono _color": '{{ iif(is _state("' ~ ns.entity ~ '", "' ~ opt ~ '"), "' ~ icon_color _select ~ '", "disabled") }', "tap _action": { "acción": "servicio de llamada", "servicio": «input_select.select _option», «_data service»: { "entidad _id": ns.entidad, "opción": opt } }, "tarjeta _mod": { "estilo": 'ha-card { {% si es _state( "' ~ ns.entity ~ '" , "' ~ opt ~ '" ) %} --chip-fondo: rgba(var(--rgb-gris), 0,1); {% de lo contrario %} --chip-fondo: rgba(var(--mush-rgb-state-entity), 0,3); {% endif %} }' } } ] %} {% endfor %} {{ ns.select }} - tipo: entidades entidades: - entidad: input_select.heating_etage_mode

Conclusión

Estoy terminando aquí un paso importante en la integración de mi calefacción con Home Assistant. Abordaré ahora el control de esta calefacción en función de quién esté presente o no, horas, días y periodos de ausencia (… holidays)