Aus Schaltern Uhrzeit erstellen und vergleichen mit aktueller Uhrzeit ?

HaUsr23

Member
Hallo zusammen,

ich habe mir im Dashboard Schalter (Helfer) mit den Zahlen 8 - 17 und 0,15,30,45 erstellt um damit eine Uhrzeit festzulegen.
Hat jemand eine Idee wie ich nun aus z.B. der Schalterkombination 9 und 30 eine mit der Uhrzeit vergleichbaren Wert (Uhrzeit ?) erzeuge und in einer Automation abfragen kann ?

Vielen Dank für Eure Vorschläge
 
Kopier Dir mal das hier unter Entwicklerwerkzeuge => Template:
YAML:
{% set h = 9 %}
{% set m = 30 %}
{{ now() > now().replace(hour=h, minute=m) }}
- ersetze h und m eben durch Deine Helfer, das sollte es dann schon sein (hier einfach nur die Ausgabe True oder False).
 
Hallo Nival,
danke für die schnelle Antwort !
Ich habe mein Problem wahrscheinlich nicht päzise genug beschrieben.
Es gibt Stunden Helfer 8,9,10,11,12,13,14,15,16,17 und Minuten Helfer 0,15,30,45, von denen ist immer jeweils nur einer aktiv, also Beispiel H 9 und M 30.
Leider bin ich in YAML und beim Home Assistant noch eher Neuling.
Ich denke ich müsste ein Template anlegen was prüft welche Stunde und Minute selektiert ist und dann den h und m setzen wie in deinem Beispiel. Aber da fängt das Problem an :) wie mach ich ein Template was das alles prüft ?
Und dann noch das Verständnisproblem von HA, wann wird dieses Template ausgeführt, immer wenn sich an den Helfern was ändert ?

Sorry für die ganze Verwirrung und die Unwissenheit !
 
Vielleicht beschreibst Du erstmal, was Du eigentlich genau erreichen willst, dann tun wir uns deutlich leichter mit helfen. :) Also nicht die Uhrzeit-Schalter, sondern wofür willst Du das benutzen?

Mein Verdacht wäre nämlich, dass Du evtl. gar keine so komplizierte Lösung brauchst, aber dazu bräuchte man ein bisschen mehr an Info!

Ob und wann dann ein Template nötig ist, sehen wir dann ja, und da findet sich dann auch bestimmt jemand, der da hilft! ;) Wie sagt man im englischen so schön: "Paint me a picture!" (Mal mir ein Bild) :ROFLMAO:
 
Okay,
ich möchte auf simple Weise eine Startzeit im Raster von 15 Minuten ab 8 Uhr bis 17 Uhr 45 einstellen.
Ich möchte aber nicht die vorhandene Uhrzeit Auswahl nutzen, da die nur sehr klein auf dem Tablet erscheint.
Damit ergab sich für mich die, sicherlich komplizierte Lösung, Schalter 8-17 und 0-45 anzulegen wie oben beschreiebn und mit Automation gegeneinander zu verriegeln.
Soweit so gut, das funktioniert auch und entspricht meiner Vorstellung. (Okay nicht ganz, schön wäre es wenn man in HA Schalter mit einer bestimmten Größe anlegen könnte und deren Icon auch noch etwas anders gestallten könnte, aber das ist ein anderes Problem... Ich denke das kann ich mit Bildern und Markdown hinbekommen)
Ich komme halt von den vielen Schaltern nicht auf eine mit der aktuellen Uhrzeit vergleichbaren "Wert" um den geplanten Vorgang dann zu starten.
Mit der vorhandenen HA Lösung der Uhrzeitauswahl kein Problem, aber wenn man die größer skalieren könnte gings natürlich auch damit, nur im Standard ist mir die zu klein. Und ich brauch wie gesagt nur 15 Minuten Raster und im Bereich von 8-17.

Hoffe das Bild is nun etwas besser "gemalt" ;-)
 
Es gibt Stunden Helfer 8,9,10,11,12,13,14,15,16,17 und Minuten Helfer 0,15,30,45, von denen ist immer jeweils nur einer aktiv, also Beispiel H 9 und M 30.
Moment, hast Du mehrere Helfer für die Stunden und mehrere für die Minuten? Oder meinst Du, ein Helfer für Stunde, einen für Minuten?

Letzteres klingt für mich auf Anhieb sinniger und ließe sich bei einer Automatisierung auch mit dem Auslöser "Template" bedienen:
YAML:
{{ now() > now().replace(hour = states('input_number.h') | int, minute = states('input_number.m') | int) }}
- müsstest natürlich die Namen der Helfer anpassen. Das sollte einmalig auslösen, sobald die Uhrzeit die von den Helfern eingestellten Werte überschreitet - hier aber keine Garantie von mir, da ich HA nicht selber nutze, müsstest im Zweifel testen.
 
ich möchte auf simple Weise eine Startzeit im Raster von 15 Minuten ab 8 Uhr bis 17 Uhr 45 einstellen.
Das erklärt leider noch nicht, _was_ Du damit machen willst. Mir geht es hier eher darum, was Du damit auslösen willst, denn es gibt ja für alle möglichen Sachen unterschiedliche Herangehensweisen.
Soweit so gut, das funktioniert auch und entspricht meiner Vorstellung. (Okay nicht ganz, schön wäre es wenn man in HA Schalter mit einer bestimmten Größe anlegen könnte und deren Icon auch noch etwas anders gestallten könnte, aber das ist ein anderes Problem... Ich denke das kann ich mit Bildern und Markdown hinbekommen)
Das wäre aber ein durchaus sinnvoller Ansatz, denn am Design kann man sehr einfach arbeiten. Im Gegensatz zu Deiner Annahme leider nicht per Bild und Markdown, sondern mit YAML und ein bisschen Zeit, aber das ist so bei diesem Hobby. :ROFLMAO: Mir würde da z.B. die sehr gute Button-card einfallen, die noch sehr viel mehr kann, als nur schön auszusehen. Wenn es etwas "geführter" sein soll, dann wären z.B. Mushroom-cards eine elegante Lösung.

Du hast ja auf jeden Fall eine gute Lösung mit dem code snippet von @Nival, und wenn Du mir noch genauer erklären kannst, was Du damit machst, dann kann ich evtl. noch was dazu beisteuern (vielleicht auch nicht :unsure:).
 
Ich möchte auf einfache und intuitive Weise ein Uhrzeit angeben ( im Bereich von 8h bis 17:45), in meinem Fall durch tippen auf zwei Helfer, einen aus den Stunden und einen aus den Minuten. Diese ist dann die Uhrzeit zu der ich eine Maschine einschalten möchte.
 
So ganz klar ist mir das noch immer nicht, aber wenn ich das richtig verstehe und Du wirklich mehrere Helfe für die Stunden und mehrere für die Minuten hast... weshalb? Und welcher Art?
 
Ich versuche mal 2 Bilder einzufügen...

So sieht die Zeiteingabe aus:

Zeit.jpg

SO ein Helfer

Helfer08.jpg

Und aus der Kombi oben, aus H und M brauch ich dann Dein h und m aus Deinem Beispiel um diese mit der aktuellen Uhrzeit zu vergleichen.
 
Oha, kreativ!

Gut, also wenn wir jetzt davon ausgehen, dass Du diese Benennung so durchgezogen und für die Minuten m statt h, ebenfalls zweistellig, verwendet hast...

YAML:
{% set h = namespace(value = 0) %}
{% set m = namespace(value = 0) %}

{% for i in range (8, 18) %}
  {% if (states('input_boolean.' + 'automatik_zeit_h' +  '%02d' % i) == 'on') %}
    {% set h.value = i %}
  {% endif %}
{% endfor %}

{% for i in ['00', '15', '30', '45'] %}
  {% if (states('input_boolean.' + 'automatik_zeit_m' + i) == 'on') %}
    {% set m.value = i | int %}
  {% endif %}
{% endfor %}

{{ now().replace(hour = h.value, minute = m.value) }}

Die Sache mit dem Namespace, weil sich die Variablen sonst innerhalb von Schleife und Bedingungen nicht setzen lassen möchten.

Dann range (8, 18), damit die Zahlen von 8 bis 17 aufgerufen werden - hier muss ggf. noch eine führende Null ergänzt werden, deshalb '%02d' % i.

Die Viertelstunden gehen flotter, wenn wir sie direkt ausschreiben (unnötige Durchgänge sparen), dann als String statt als Zahl, so geht auch 00 direkt durch (beim setzen dann wieder zu int konvertieren).

Wenn einer der Schalter auf on steht wird der Wert stimmen, also damit schließlich weiterarbeiten. Das ist so erstmal die Ausgabe, die kannst Du dann wie gehabt zum Vergleich hernehmen.
 
Oha, wenn Du meine Schalter schon als kreativ empfindest, fehlt mir gerade das Adjektiv um Deinen Code zu beschreiben :)

Leider bin ich in yaml noch nicht so fit.

Das mit den Schleifen ist soweit verstanden.
Was bedeutet die namespace Anweisung ?

Was genau mach die Anweisung ? (für mich sieht das so aus als ob eine "Zeit" now den Wert der gewählten Stunde h und Minute m bekommt, richtig ?)
{{ now().replace(hour = h.value, minute = m.value) }}

Und zu guter Letzt, wo würde ich den Code platzieren und muss ich da noch was drum herum bauen ?
Ich habe mir eine template.yaml angelegt, dort habe ich mir wie folgt ein paar Berechnungen angelegt

YAML:
- sensor:
    - name: "Verbrauch"
      unit_of_measurement: "W"
      state: >
        {% set a = states('sensor.verbraucha') | float %}
        {% set b = states('sensor.verbrauchb') | float %}
        {% set c = states('sensor.verbrauchc') | float %}
        {{ (a + b + c) | round(0) }}

Würde ich dort dann Deinen Code eintragen ?

Tut mir Leid, dass ich noch so viele Fragen habe.
 
Zuletzt bearbeitet von einem Moderator:
Was bedeutet die namespace Anweisung ?
Sagen wir der Einfachheit halber, es "globalisiert" die Variablen. Home Assistant bzw. Jinja2 ist andernfalls nicht gewillt, die Variablen ausserhalb der Schleife und innerhalb der Schleife als eine Sache zu sehen, sprich, ohne Namespace würden diese Variablen bei 0 bleiben, egal was ihnen während der Überprüfung zugewiesen wurde.
Was genau mach die Anweisung ? (für mich sieht das so aus als ob eine "Zeit" now den Wert der gewählten Stunde h und Minute m bekommt, richtig ?)
Richtig, now() - immer das "jetzt" in den Templates - wird in Sachen Stunden und Minuten auf diese Schalter angepasst.
Und zu guter Letzt, wo würde ich den Code platzieren und muss ich da noch was drum herum bauen ?
Du könntest es in der Tat als Sensor in der configuration.yaml anlegen, das würde aber nur Sinn machen, wenn Du es auch an anderer Stelle noch verwenden möchtest. Ist es nur für die eine Automatisierung gedacht kannst Du es direkt dort verwenden, als Auslöser "Template" verwenden und dort den Code hineinkopieren bzw. eben um den Vergleich zwischen "original now()" und "manipuliertes now()" ergänzen:
YAML:
{{ now() >= now().replace(hour = h.value, minute = m.value) }}
Das feuert in dem Moment, in dem "jetzt" als "größer oder gleich" dem manipulierten now() gewertet wird.
 
Nival, vielen lieben Dank für die Anregungen und Erläuterungen !

Ich werde mich mal ran setzen und schauen ob ich das hin bekomme und Rückmeldung geben.
 
Leider scheine ich da noch irgendwas falsch zu machen... und es ist leider doch noch was unklar.

Ich lege in der GUI eine Automation an:
Als Auslöser: Zeit jede 0. Sekunde
Als Bedingung: Deinen Code
und nen Auslöser

In Deinem Code wird die Variable now auf die Einstellung meiner Helfer gesetzt, aber wie vergleiche ich dann die aktuelle Zeit (bzw. wo bekomme ich die auch noch her) mit dieser Variablen now und zwar so, dass die Bedingung dann auch triggert ?
 
"now()" ist keine Variable, das ist eine Funktion, die Dir den aktuellen Wert Datum und Zeit ausgibt. Eine HA interne Funktion, da das eben oft gebraucht wird.

Ich kann es nur nochmal sagen, ich halte das für keinen guten Weg, das so einzubinden. Wenn Du schon mit einer Zeitspanne von 0 Sekunden anfängst, ist das eine Garantie für eine überlastete State-machine. Das wird sich sicherlich nicht gleich auswirken, aber ich kann definitiv sagen, auf Dauer wird diese Nummer Deine Automationen und Schaltungen verzögern. Irgendwann bist Du soweit, dass Du eine merkliche Verzögerung feststellen wirst wenn Du ein Licht schalten willst. Du wurdest gewarnt! ;)

Meine Empfehlung lautet nach wie vor, löse das mit einem "input_datetime" und passe das Design entsprechend an. Es hat seinen Grund, warum es in HA solche Helfer gibt. Wie oben erwähnt, es wäre wichtig zu wissen, was Du damit machst, aber da das ein Geheimnis zu sein scheint, kann ich für meinen Teil keine andere Empfehlung geben. :)
 
Wie @paddy0174 schon schrieb, der Vergleich findet zwischen der Funktion now() und selbiger in manipulierter Form statt, links von >= der eine Wert, rechts davon der andere.

Das jede Sekunde auszulösen ist aber garnicht notwendig, Du kannst den Code einfach direkt als Auslöser eintragen und so ~ einmal pro Minute (man korrigiere mich wenn ich mich irre, das ist nur meine Beobachtung) prüft HA die Automatisierungen ohnehin durch. Dann noch unten bei Aktionen das, was Du anstoßen möchtest, wenn die Prüfung "wahr" ergibt, fertig.

---

Wie oben erwähnt, es wäre wichtig zu wissen, was Du damit machst
=>
Diese ist dann die Uhrzeit zu der ich eine Maschine einschalten möchte.
:)

Sekündlich prüfen würde ich wie gesagt auch von absehen, aber ansonsten... großartig Last sollten die zwei Schleifen wirklich nicht erzeugen, kann man also schon so machen. Ich finds nen interessanten Ansatz, das Problem zu lösen :D
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.609
Beiträge
47.210
Mitglieder
4.258
Neuestes Mitglied
fumdock
Zurück
Oben