{"id":1305,"date":"2026-07-19T18:11:33","date_gmt":"2026-07-19T16:11:33","guid":{"rendered":"https:\/\/www.coremind.ch\/wordpress\/?p=1305"},"modified":"2026-07-19T18:11:33","modified_gmt":"2026-07-19T16:11:33","slug":"time-entitaeten-in-ha-zeiten-ohne-yaml-aendern","status":"publish","type":"post","link":"https:\/\/www.coremind.ch\/wordpress\/time-entitaeten-in-ha-zeiten-ohne-yaml-aendern\/","title":{"rendered":"Time-Entit\u00e4ten in HA: Zeiten ohne YAML \u00e4ndern"},"content":{"rendered":"<p>Der Saugroboter soll im Sommer fr\u00fcher starten als im Winter. Die Ruhezeit des Roborock endet um acht Uhr \u2013 aber am Wochenende bitte um zehn. Wer solche Zeiten bisher \u00e4ndern wollte, \u00f6ffnete entweder die Hersteller-App oder schrieb einen <code>input_datetime<\/code>-Helfer, der die eigentliche Ger\u00e4teeinstellung nur abbildete, nicht steuerte. Seit Home Assistant die <code>time<\/code>-Dom\u00e4ne kennt, ist das vorbei: Ger\u00e4te exponieren ihre Zeiteinstellungen direkt als Entit\u00e4t \u2013 schreib- und automatisierbar.<\/p>\n<h2>Das Problem mit gespiegelten Zeiten<\/h2>\n<p>Ein Blick in meine Entit\u00e4tenliste zeigt zwei unscheinbare Kandidaten:<\/p>\n<pre><code>\ntime.roborock_s6_maxv_bitte_nicht_storen_beginn  \u2192 22:00:00\ntime.roborock_s6_maxv_bitte_nicht_storen_ende    \u2192 08:00:00\n<\/code><\/pre>\n<p>Das sind keine Helfer. Das sind echte Ger\u00e4teeinstellungen, die \u00fcber die Cloud-API des Roborock gesetzt werden. \u00c4ndert man den Wert in Home Assistant, \u00e4ndert sich die Einstellung im Ger\u00e4t \u2013 und umgekehrt.<\/p>\n<p>Der Unterschied zu einem <code>input_datetime<\/code> ist fundamental. Ein Helfer speichert eine Zahl in Home Assistant und braucht immer eine zus\u00e4tzliche Automation, die diese Zahl irgendwohin \u00fcbertr\u00e4gt. Eine <code>time<\/code>-Entit\u00e4t <em>ist<\/em> die Einstellung. Kein Spiegel, kein Synchronisierungsproblem, kein Auseinanderdriften nach einem Neustart.<\/p>\n<h2>Schritt 1: Den Zustand sichtbar machen<\/h2>\n<p>Bevor automatisiert wird, geh\u00f6rt die Entit\u00e4t aufs Dashboard. Die schlichte Entit\u00e4tenkarte gen\u00fcgt und bietet direkt einen Zeitw\u00e4hler:<\/p>\n<pre><code>\ntype: entities\ntitle: Roborock Ruhezeit\nentities:\n  - entity: time.roborock_s6_maxv_bitte_nicht_storen_beginn\n    name: Ruhe ab\n  - entity: time.roborock_s6_maxv_bitte_nicht_storen_ende\n    name: Ruhe bis\n<\/code><\/pre>\n<p>Ein Tipp auf das Feld \u00f6ffnet den Zeitw\u00e4hler. Der Wert wandert unmittelbar ins Ger\u00e4t. F\u00fcr Mitbewohnende, die keine Automationen anfassen sollen, ist das der eleganteste Zugang.<\/p>\n<h2>Schritt 2: Zeiten automatisch verschieben<\/h2>\n<p>Interessant wird es, wenn Home Assistant die Zeiten selbst setzt. Die Aktion heisst <code>time.set_value<\/code> und erwartet einen String im Format <code>HH:MM:SS<\/code>.<\/p>\n<pre><code>\nalias: Ruhezeit Wochenende\ntriggers:\n  - trigger: time\n    at: \"03:00:00\"\nconditions:\n  - condition: time\n    weekday:\n      - sat\n      - sun\nactions:\n  - action: time.set_value\n    target:\n      entity_id: time.roborock_s6_maxv_bitte_nicht_storen_ende\n    data:\n      time: \"10:00:00\"\nmode: single\n<\/code><\/pre>\n<p>Das Gegenst\u00fcck am Montagmorgen setzt den Wert zur\u00fcck auf <code>08:00:00<\/code>. Wer keine zwei Automationen mag, nutzt eine einzige mit einem Template:<\/p>\n<pre><code>\nactions:\n  - action: time.set_value\n    target:\n      entity_id: time.roborock_s6_maxv_bitte_nicht_storen_ende\n    data:\n      time: >-\n        {{ '10:00:00' if now().weekday() >= 5 else '08:00:00' }}\n<\/code><\/pre>\n<h2>Schritt 3: Zeiten an die Sonne koppeln<\/h2>\n<p>Der wirklich befriedigende Anwendungsfall: Die Ruhezeit beginnt nicht starr um 22 Uhr, sondern eine Stunde nach Sonnenuntergang. Im Hochsommer heisst das 22:30 Uhr, im Dezember bereits 17:45 Uhr.<\/p>\n<pre><code>\nalias: Ruhezeit folgt der Sonne\ntriggers:\n  - trigger: time\n    at: \"12:00:00\"\nactions:\n  - action: time.set_value\n    target:\n      entity_id: time.roborock_s6_maxv_bitte_nicht_storen_beginn\n    data:\n      time: >-\n        {{ (state_attr('sun.sun','next_setting') | as_datetime\n            | as_local + timedelta(hours=1)).strftime('%H:%M:%S') }}\nmode: single\n<\/code><\/pre>\n<p>Wichtig ist <code>as_local<\/code>: <code>next_setting<\/code> liefert UTC. Ohne Konvertierung landet die Ruhezeit im Sommer zwei Stunden zu fr\u00fch \u2013 ein Fehler, der erstaunlich lange unentdeckt bleibt, weil das Ergebnis plausibel aussieht.<\/p>\n<p>Der Zeitwert wird dabei als reiner Zeitpunkt ohne Datum gespeichert, der Zustand der Entit\u00e4t lautet schlicht <code>22:00:00<\/code>. F\u00fcr Templates heisst das: Ein direkter Vergleich mit <code>now()<\/code> funktioniert nicht, weil dort ein vollst\u00e4ndiger Zeitstempel steht. Wer pr\u00fcfen will, ob die Ruhezeit gerade aktiv ist, greift auf <code>states('time.\u2026')<\/code> als String zu und vergleicht mit <code>now().strftime('%H:%M:%S')<\/code> \u2013 solange keine Mitternachtsgrenze \u00fcberschritten wird, gen\u00fcgt das. Andernfalls lohnt sich ein Template-Bin\u00e4rsensor, der beide Enden sauber ber\u00fccksichtigt.<\/p>\n<p>Ein zweiter Vorteil zeigt sich beim Backup. Weil <code>time<\/code>-Entit\u00e4ten ihren Wert im Ger\u00e4t halten, \u00fcberlebt die Konfiguration auch eine Neuinstallation von Home Assistant. Helfer hingegen liegen im Storage-Verzeichnis und sind nach einem missgl\u00fcckten Restore schlicht weg \u2013 mit ihnen die sorgf\u00e4ltig eingestellten Zeiten.<\/p>\n<h2>Fallstricke<\/h2>\n<p>Nicht jede <code>time<\/code>-Entit\u00e4t ist schreibbar. Manche Integrationen liefern sie schreibgesch\u00fctzt; erkennbar daran, dass <code>time.set_value<\/code> mit einer Fehlermeldung quittiert. Ein Blick in die Entwicklerwerkzeuge unter \u00abZust\u00e4nde\u00bb hilft: Fehlt das Attribut <code>editable<\/code> oder reagiert die Entit\u00e4t nicht, ist es eine reine Anzeige.<\/p>\n<p>Zweitens: Cloud-gebundene Ger\u00e4te wie der Roborock quittieren <code>time.set_value<\/code> erst nach einem Roundtrip zum Server. Bei Verbindungsproblemen wird der Wert nicht gesetzt, ohne dass die Automation scheitert. Wer sich darauf verl\u00e4sst, baut eine <code>state<\/code>-Bedingung ein, die den tats\u00e4chlichen Wert nach dreissig Sekunden pr\u00fcft.<\/p>\n<p>Und drittens: <code>time<\/code> ersetzt keine Zeitpl\u00e4ne. F\u00fcr wiederkehrende Wochenpl\u00e4ne bleibt der Schedule-Helfer das bessere Werkzeug, wie im Beitrag zu <a href=\"https:\/\/www.coremind.ch\/wordpress\/schedule-helfer-in-ha-wochenplan-ohne-yaml\/\">Schedule-Helfern in HA<\/a> gezeigt. Die <code>time<\/code>-Dom\u00e4ne ist f\u00fcr einzelne, ger\u00e4tegebundene Zeitpunkte gedacht.<\/p>\n<h2>Fazit<\/h2>\n<p>Die <code>time<\/code>-Dom\u00e4ne ist eine dieser stillen Verbesserungen, die keine Release-Schlagzeile bekommen und trotzdem YAML einsparen. Statt Ger\u00e4teeinstellungen in Helfern nachzubauen, steuert man sie direkt. Pr\u00fcfen Sie Ihre Entit\u00e4tenliste mit dem Filter <code>time.<\/code> \u2013 die Chancen stehen gut, dass dort seit Monaten Einstellungen liegen, die nur darauf warten, endlich automatisiert zu werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Saugroboter soll im Sommer fr\u00fcher starten als im Winter. Die Ruhezeit des Roborock endet um acht Uhr \u2013 aber am Wochenende bitte um zehn. Wer solche Zeiten bisher \u00e4ndern wollte, \u00f6ffnete entweder die Hersteller-App oder schrieb einen input_datetime-Helfer, der die eigentliche Ger\u00e4teeinstellung nur abbildete, nicht steuerte. Seit Home Assistant die time-Dom\u00e4ne kennt, ist das &#8230; <a title=\"Time-Entit\u00e4ten in HA: Zeiten ohne YAML \u00e4ndern\" class=\"read-more\" href=\"https:\/\/www.coremind.ch\/wordpress\/time-entitaeten-in-ha-zeiten-ohne-yaml-aendern\/\" aria-label=\"Mehr Informationen \u00fcber Time-Entit\u00e4ten in HA: Zeiten ohne YAML \u00e4ndern\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1305","post","type-post","status-publish","format-standard","hentry","category-ha"],"_links":{"self":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=1305"}],"version-history":[{"count":1,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1305\/revisions"}],"predecessor-version":[{"id":1403,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1305\/revisions\/1403"}],"wp:attachment":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=1305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=1305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=1305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}