Eigentlich versuche ich immer, auf Fragen von Lesern meines Blogs bestmöglich einzugehen. So auch mit diesem Beitrag, nach welchem der Leser Volkert „nett gefragt“ hat 😉 Konkret möchte Volkert wissen, wie man mit Home Assistant Z-Wave Thermostate so steuern und kontrollieren kann, dass unterschiedliche Temperaturen als Ziel-Temperaturen je nach Szenario gesetzt werden können.
Da ich so etwas selbst bei mir nutze, gebe ich gerne einen weiteren kleinen Einblick in meinen YAML-Code!
Inhaltsverzeichnis
Smarte Thermostate mit Home Assistant
Bevor wir zum eigentlichen Code kommen, möchte ich vorab erst noch einmal beschreiben, was man mit den nachfolgenden Code-Schnipseln erreichen kann:
- Über das Lovelace-Frontend lassen sich mehrere Ziel-Temperaturen per sogenanntem Input-Select (Home Assistant Input Select) auswählen und festlegen. Ich komme derzeit mit 3 unterschiedlichen Temperaturen zurecht: Nacht-Temperatur, Heiz-Temperatur und Tages-Temperatur. (wie so ein Input-Select in Lovelace aussieht, siehst du in einem Screenshot nach dieser Aufzählung!)
- In unserem Alltag gibt es gewisse Regelmäßigkeiten, so dass ich anhand dieser die unterschiedlichen Temperaturen „abfeuern“ kann. Als Beispiel stehen wir (dank kleiner Kinder im Haus) eigentlich nie nach 7 Uhr auf. Ebenso gehen wir eigentlich immer gegen 22 Uhr ins Bett.
- Alle Handys im Haus sind Home Assistant bekannt, so dass Home Assistant weiß, ob jemand mit Handy zu Hause ist.
Hier ein Screenshot von einem Home Assistant Input-Select – konkret sogar so, wie ich bei uns die Temperaturen bei uns im Frontend steuern kann: Tagsüber soll es 19 Grad, nachts nur 18 Grad und wenn aktiv geheizt wird 21 Grad warm sein!
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Input Select für Temperatur-Auswahl anlegen
Wie in dem vorherigen Screenshot zu sehen, nutze ich 3 Input-Selects um bei uns im Haus die Z-Wave Thermostate für uns passend zu steuern.
Diese Input-Selects müssen einmalig in der configuration.yaml definiert werden, wie das geht sieht man im beispielhaft im folgenden Code:
#configuration.yaml
input_select:
day_temp:
name: Tagestemperatur
options:
- 18
- 19
- 20
- 21
initial: 18
icon: mdi:home-thermometer
heat_temp:
name: Heiz-Temperatur
options:
- 18
- 19
- 20
- 21
- 22
initial: 20
icon: mdi:thermometer-high
night_temp:
name: Nacht-Temperatur
options:
- 16
- 17
- 18
- 19
- 20
initial: 18
icon: mdi:thermometer-chevron-down
Als Ergebnis stehen dir nun 3 neue Input-Selects zur Verfügung, welche du in Lovelace einbinden kannst.
cards:
- entities:
- entity: input_select.day_temp
- entity: input_select.heat_temp
- entity: input_select.night_temp
Wenn du diese in Lovelace einbindest, solltest du ein vergleichbares Ergebnis erzielen, wie in diesem Screenshot:
Über diese neuen Auswahl-Boxen kannst du nun im Frontend aus den definierten Bereichen die gewünschte Temperatur auswählen. Als Ergebnis können wir nun in unseren Automations etc. auf den gewählten Wert des jeweiligen Input-Selects zugreifen:
Mittels
{{ states('input_select.heat_temp') }}
kann mit dem gewählten Wert so gearbeitet werden, als wäre es eine fix im Code geschriebene Zahl. Wie das im konkreten dann aussieht, schauen wir uns als nächstes an:
Automation-Beispiele für Temperatur mit Input-Select
Letztlich nehmen wir nun unsere (hoffentlich) bestehenden Automations und passen diese an. Damit du die nun per Input-Select definierten Temperaturen nutzen kannst, musst du dir eine Grundlogik deiner Automations „zurechgelegt“ haben. Was meine ich damit?
Wie im Anfang dieses Beitrages beschrieben, musst du natürlich deine Gewohnheiten beziehungsweise Regelmäßigkeiten erkennen und für diese Automations erstellen. Wie das bei mir aussieht, zeige ich im folgenden und nutze dabei direkt die Temperaturen aus den Input-Selects!
- alias: Temperatur hoch
trigger:
- platform: time
at: '06:00'
- platform: time
at: '17:00'
action:
- service: climate.set_temperature
data_template:
temperature: "{{ states('input_select.heat_temp') }}"
hvac_mode: heat
entity_id: climate.danfoss_devolo_home_control_radiator_thermostat_heating_1_7
Hierzu eine kurze Erklärung: Um 8 Uhr und um 17 Uhr stelle ich die Temperatur auf die per Input-Select gewählte Heiz-Temperatur.
Wenn eine Temperatur hochgeht, muss sie natürlich auch wieder runtergehen. Das ist inhaltlich jetzt wenig überraschend und spannend, aber das soll hier ja ein brauchbares Beispiel sein:
- alias: Tagestemperatur
trigger:
- at: '08:00'
platform: time
action:
- data_template:
entity_id: climate.danfoss_devolo_home_control_radiator_thermostat_heating_1_7
hvac_mode: heat
temperature: "{{ states('input_select.day_temp') }}"
service: climate.set_temperature
Um 8 Uhr stellen wir die Temperatur auf die Tages-Temperatur, welche wir per Input-Select definiert haben. Ab 8 Uhr sind in der Regel „alle aus dem Haus“, so dass wir nicht unnötig heizen müssen.
Sobald wir nun wieder nach Hause kommen, soll es natürlich wärmer sein. Als Konsequenz möchten wir die Heat-Temperatur wieder abfeuern. Hierfür müssen wir aber nichts weiter tun, weil bereits mit „Temperatur hoch“ auch um 17 Uhr die Temperatur angehoben wird.
Ab 17 Uhr ist es nun also wieder etwas wärmer und als nächstes brauchen wir nun noch eine Automation, welche die Nacht-Temperatur aktiviert:
- alias: Temperatur runter
trigger:
- at: '18:00'
platform: time
action:
- service: climate.set_temperature
data_template:
entity_id: climate.danfoss_devolo_home_control_radiator_thermostat_heating_1_7
hvac_mode: heat
temperature: "{{ states('input_select.night_temp') }}"
Um 18 Uhr schon wieder aktivieren wir die Nacht-Temperatur (welche ja auch per Input-Select ausgewählt und definiert ist).
Über Nacht haben wir nun die leicht abgesenkte Temperatur und werden als nächstes erst wieder die Temperatur um 6 Uhr wieder anheben (erstes Code-Beispiel).
Steuerung Temperaturen im Tagesverlauf
Als Ergebnis erhält man dann einen Tagesverlauf, welcher wie folgt aussieht:
Zu welchen Uhrzeiten du die 3 unterschiedlichen Temperaturen auslöst, und welche Werte diese haben, kannst du natürlich ganz deinen Bedürfnissen entsprechend selbst definieren!
Darüber hinaus noch ein praktischer Hinweis: Anders, als hier in den Code-Beispielen dargestellt, wechsle ich morgens nicht zu einer festen Uhrzeit auf die Tages-Temperatur, sondern mache dies von einer konkreten Aktion im Haus abhängig. Da wir nach dem morgendlichen Bad-Besuch im Badezimmer lüften, kann ich diese Aktion als Auslöser für das Aktivieren der Tagestemperatur nutzen. Wie das konkret geht, habe ich in dem Beitrag Automation beim Fenster öffnen/lüften beschrieben!
Produktempfehlungen
Mega starke Idee!!! Ich hab mir das gleich nachgebaut. Ich würde gerne noch eine Einstellung der Wochenprogramme aus der Raspberrymatic integrieren. Leider funktioniert das aber nicht… irgendweclhe Ideen?
alias: Wochenprogramm
trigger:
– platform: time
at: ’14:36′
– platform: time
at: ’17:00′
action:
– device_id: c90bc3g5708274e34f93c55c0356400e
domain: climate
entity_id: climate.buro_schreibtisch_heizung
type: set_preset_mode
preset_mode: ‚{{ states(“input_select.wp_selection“) }}‘
und in der configurtion.yaml
wp_selection:
name: Heizprogramm
options:
– week_program_1
– week_program_2
– week_program_3
initial: week_program_1
icon: mdi:thermometer-chevron-down
Ich kenne mich mit Raspberrymatic nicht aus! Aber in deinem Code irritiert mich das , beim preset_mode. Wenn überhaupt sollte es vermutlich ein ‚ sein, wobei ich denke, dass es sogar ganz ohne “ passen sollte?
Moin Olli,
Jo … Super genau das habe ich gesucht.
Vielen Vielen Danke..
LG aus HH