Ich steuere die Pilotkabelrelais meiner Heizung mit input_select von Home Assistant

 

Wie ich erläutert habe in:

Ich steuere meine Heizung über zwei Zonen mit Pilotdrähten. Im Rahmen der Umstellung von Jeedom auf Home Assistant muss ich diese Relais daher mit Home Assistant steuern können.

filpiloteprincipe

Derzeit wird der Sonoff 4CH Pro von ESP Easy gesteuert, ich werde ihn bald auf ESP Home umstellen, aber derzeit ermöglicht ESP Easy die Schnittstelle mit Jeedom UND Home Assistant über MQTT.

Für die Konfiguration beziehe ich mich auf diesen Retex:

Ich steuere Relais über MQTT

Wie in der Retex oben, Es ist notwendig, die Entitäten zu konfigurieren, die es ermöglichen, Relais in Home Assistant wiederherzustellen, dies geschieht in der Datei mqtt.yaml

- name: "Relais 1 Heizung" einzigartig_id: switch.heizung.relais1 command_topic: "Heizung/gpio/12" state_topic: "Heizung/Relais1/Relais1" payload_on: "1" payload_off: "0" retain: true device_class: outlet device: name: "Heizung" Identifikatoren: "Heizung" - name: "Relais 2 Heizung" einzigartig_id: switch.heizung.relais2 command_topic: "Heizung/gpio/5" state_topic: "Heizung/Relais2/Relais2" payload_on: "1" payload_off: "0" retain: true device_class: outlet device: name: "Heizung" Identifikatoren: "Heizung" - name: "Relais 3 Heizung" einzigartig_id: switch.heizung.relais3 command_topic: "Heizung/gpio/4" state_topic: "Heizung/Relais3/Relais3" payload_on: "1" payload_off: "0" retain: true device_class: outlet device: name: "Heizung" Identifikatoren: "Heizung" - name: "Relais 4 Heizung" einzigartig_id: switch.heizung.relais4 command_topic: "Heizung/gpio/15" state_topic: "Heizung/Relais4/Relais4" payload_on: "1" payload_off: "0" retain: true device_class: outlet device: name: "Heizung" Identifikatoren: "Heizung" 

In HA werden diese 4 Entitäten leicht wiederhergestellt 

Ich erstelle input_select

In der Datei configuration.yaml deklariere ich die beiden Entitäten der Zonen und erlaube ihnen, vier mögliche Zustände zu haben.

input_select: Heizung_etage_mode: name: Heizung Bereich Etage - Optionsmodus: - "Komfort" - "Eco" - "Ohne Gel" - "Off" Icon: mdi:help-circle-outline Heizung_rdc_mode: name: Heizung Bereich Erdgeschoss - Optionsmodus: - "Komfort" - "Eco" - "Ohne Gel" - "Off" Icon: mdi:help-circle-outline

Dies fügt mir die beiden Einheiten hinzu:

  • input_select.Heizung_rdc_mode
  • input_select.Heizung_etage_mode

Ich personalisiere input_select

Ich versuche immer, die Dasboard-Fliesen optisch ansprechend zu gestalten, dafür scheint es unerlässlich, Farbe und schöne Icons zu setzen, die den Zuständen entsprechen.

Die Personalisierung erfolgt durch Hinzufügen dieser Zeilen in customize.yaml

input_select.Heizung_etage_mode: Templates: Icon: > if (state == 'Komfort') return 'mdi:fire'; if (state == 'Eco') return 'mdi:leaf'; if (state == 'Ohne Gel') return 'mdi:snowflake-thermometer'; if (state == 'Off') return 'mdi:power'; return 'mdi:help-circle-outline'; icon_color: > if (state == 'Komfort') return 'yellow'; if (state == 'Eco') return 'green'; if (state == 'Ohne Gel') return '#2196f3'; if (state == 'Off') return 'red'; input_select.Heizung_rdc_mode: Templates: Icon: > if (state == 'Komfort') return 'mdi:fire'; if (state == 'Eco') return 'mdi:leaf'; if (state == 'Ohne Gel') return 'mdi:snowflake-thermometer'; if (state == 'Off') return 'mdi:power'; return 'mdi:help-circle-outline'; icon_color: > if (state == 'Komfort') return 'yellow'; if (state == 'Eco') return 'green'; if (state == 'Ohne Gel') return '#2196f3'; if (state == 'Off') return 'red';    

Ich steuere die Relais von den input_select

Die Zuordnung der Zonen (Etage und Chaussee) muss im Home Assistant erfolgen, die Auswahl der Relais zur Steuerung des Zonenmodus muss für den Nutzer transparent sein.

Zu diesem Zweck wird eine Automatisierung durch eine Statusänderung von input_select.chauffage_rdc_mode und eine weitere durch input_select.chauffage_etage_mode ausgelöst.

Durch diese Automatisierung wird der Status der Relais geändert, um die Reihenfolge zu senden, die der Kodierung des Pilotfadens entspricht. Dies wird erklärt hier.

Automatisierung Steuerung Heizung Fahrwerk

alias: Steuerung Heizung Fahrwerk Beschreibung: "" Trigger: - platform: state entity_id: - input_select.Heizung_rdc_mode Bedingung: [] Maßnahme: - if: - Bedingung: state entity_id: input_select.heizung_rdc_mode state: Komfort Then: - Dienststelle: switch.turn_off data: {} entity_id: - switch.heizung_relais_3_heizung - switch.heizung_relais_4_heizung - stop: "" - if: - Bedingung: state entity_id: input_select.heizung_rdc_mode state: Eco then: - Dienststelle: switch.turn_on data: {} entity_id: - switch.heizung_relais_3_heizung - switch.heizung_relais_4_heizung - stop: "" - if: - Bedingung: state entity_id: input_select.heizung_rdc_mode state: Außer Gel then: - Dienststelle: switch.turn_off data: {} entity_id: - switch.heizung_relais_4_heizung - service: switch.turn_on data: {} entity_id: - switch.heizung_relais_3_heizung - stop: "" - if: - Bedingung: state entity_id: input_select.heizung_rdc_mode state: "Off" then: - Dienststelle: switch.turn_off data: {} entity_id: - switch.heizung_relais_3_heizung - service: switch.turn_on data: {} entity_id: - switch.heizung_relais_4_heizung - stop: "" Modus: Single

Automatisierung Steuerung Heizung Etage

alias: Steuerung Heizung Etage Beschreibung: "" Trigger: - platform: state entity_id: - input_select.Heizung_etage_mode Bedingung: [] Maßnahme: - if: - Bedingung: state entity_id: input_select.heizung_etage_mode state: Komfort Then: - Dienststelle: switch.turn_off data: {} entity_id: - switch.heizung_relais_2_heizung - switch.heizung_relais_1_heizung - stop: "" - if: - Bedingung: state entity_id: input_select.heizung_etage_mode state: Eco then: - Dienststelle: switch.turn_on data: {} entity_id: - switch.heizung_relais_2_heizung - switch.heizung_relais_1_heizung - stop: "" - if: - Bedingung: state entity_id: input_select.heizung_etage_mode state: Außer Gel then: - Dienststelle: switch.turn_off data: {} entity_id: - switch.heizung_relais_2_heizung - service: switch.turn_on data: {} entity_id: - switch.heizung_relais_1_heizung - stop: "" - if: - Bedingung: state entity_id: input_select.heizung_etage_mode state: "Off" then: - Dienststelle: switch.turn_off data: {} entity_id: - switch.heizung_relais_1_heizung - service: switch.turn_on data: {} entity_id: - switch.heizung_relais_2_heizung - stop: "" Modus: Single

Ich mache eine schöne Karte für das Dashboard

Hier ist das Ergebnis dessen, was ich mir als Karte wünsche:

An diesem Punkt weiß ich nicht, ob ich die Dropdown-Liste oder die Schaltflächen / Selektoren halten werde, beide funktionieren.

Kartencode für den Bereich Erdgeschoss 

Typ: custom:stack-in-card mode: vertikale Karten: - Typ: custom:auto-entities show_empty: false card: Typ: custom:mushroom-chips-card view_layout: grid-area: Chips Alignment: center card_param: chips filter: Template: > {% set ns = namespace(select=[],entity="input_select.chauffage_rdc_mode") %} {% for opt in state_attr(ns.entity, 'options') %} {% set icon = iif(opt== 'Komfort', 'mdi:fire', icon) %} {% set icon_color_select = iif(opt== 'Komfort', 'yellow', icon_color_select) %} {% set icon = iif(opt== 'Off', 'mdi:power', icon) %} {% set icon_color_select = iif(opt== 'Off', 'red', icon_color_select) %} {% set icon = iif(opt== 'Eco', 'mdi:leaf', icon) %} {% set icon_color_select = iif(opt== 'Eco', 'green', icon_color_select) %} {% set icon = iif(opt== 'Ohne Gel', 'mdi:snowflake-thermometer', icon) %} {% set icon_color_select = iif(opt== 'Ohne Gel', 'blue', icon_color_select) %} {% set ns.select = ns.select + [ { "Typ": "template", "icon": icon, "entity": ns.entity, "icon_color": '{{ iif(is_state("' ~ ns.entity ~ '", "' ~ opt ~ '"), "' ~ icon_color_select ~ '", "disabled") }}', "tap_action": { "Aktion": "Call-Service", "Service": "input_select.select_option", "service_data": { "entity_id": ns.entity, "Option": opt } }, "card_mod": { "Stil": 'ha-card { {% if is_state( "' ~ ns.entity ~ '" , "' ~ opt ~ '" ) %} --chip-background: rgba(var(--rgb-grey), 0.1); {% else %} --chip-background: rgba(var(--mush-rgb-state-entity), 0.3); {% endif %} }' } } ] %} {% endfor %} {{ ns.select }} - Typ: entities entities: - entity: input_select.Heizung_rdc_mode

Kartencode für die Zone „Etage“

Typ: custom:stack-in-card mode: vertikale Karten: - Typ: custom:auto-entities show_empty: false card: Typ: custom:mushroom-chips-card view_layout: grid-area: Chips Alignment: center card_param: chips filter: Template: > {% set ns = namespace(select=[],entity="input_select.chauffage_etage_mode") %} {% for opt in state_attr(ns.entity, 'options') %} {% set icon = iif(opt== 'Komfort', 'mdi:fire', icon) %} {% set icon_color_select = iif(opt== 'Komfort', 'yellow', icon_color_select) %} {% set icon = iif(opt== 'Off', 'mdi:power', icon) %} {% set icon_color_select = iif(opt== 'Off', 'red', icon_color_select) %} {% set icon = iif(opt== 'Eco', 'mdi:leaf', icon) %} {% set icon_color_select = iif(opt== 'Eco', 'green', icon_color_select) %} {% set icon = iif(opt== 'Ohne Gel', 'mdi:snowflake-thermometer', icon) %} {% set icon_color_select = iif(opt== 'Ohne Gel', 'blue', icon_color_select) %} {% set ns.select = ns.select + [ { "Typ": "template", "icon": icon, "entity": ns.entity, "icon_color": '{{ iif(is_state("' ~ ns.entity ~ '", "' ~ opt ~ '"), "' ~ icon_color_select ~ '", "disabled") }}', "tap_action": { "Aktion": "Call-Service", "Service": "input_select.select_option", "service_data": { "entity_id": ns.entity, "Option": opt } }, "card_mod": { "Stil": 'ha-card { {% if is_state( "' ~ ns.entity ~ '" , "' ~ opt ~ '" ) %} --chip-background: rgba(var(--rgb-grey), 0.1); {% else %} --chip-background: rgba(var(--mush-rgb-state-entity), 0.3); {% endif %} }' } } ] %} {% endfor %} {{ ns.select }} - Typ: entities entities: - entity: input_select.Heizung_etage_mode

Schlussfolgerung

Hier schließe ich einen wichtigen Schritt bei der Integration meiner Heizung in den Home Assistant ab. Ich werde mich nun mit der Steuerung dieser Heizung auf der Grundlage der anwesenden oder nicht anwesenden Personen, der Stunden, Tage und Abwesenheitszeiten (…-Ferien) befassen.