dem helper input_number in template einen Wert zuweisen

Garnicht.

Aber was genau hast Du denn vor? Wenn Du schon Helfer vom Typ input_datetime hast, weshalb möchtest Du die dann noch über einen weiteren Helfer leiten anstatt sie direkt auszuwerten? Im Fall von Delaware macht das Sinn weil es um eine Zeitverschiebung geht, aber davon sehe ich bei Dir nichts.
Du hast Recht, eigentlich brauche ich gar keinen zusätzlichen Helfer, ich wollte nur mal testen, wie das funktioniert.
Ich möchte die Zeit bestimmen, zu der das Auto geladen wird. Derzeit werden die Start- und Stoppzeiten im Fahrzeug eingestellt, dies hat verschiedene Nachteile. Die Batterie im Auto ist nicht besonders groß, wenn ich nicht sparsam fahre, wird die Batterie nicht ausreichen, um eine Woche lang damit zu Arbeit zu fahren. Die Tage werden kürzer, bald wird es nicht mehr möglich sein, abends mit Überschuss das Auto zu laden. Wenn ich weiß, dass der Tag sonnig wird, lade ich das Auto morgens aus der Hausbatterie. Im Fahrzeug stelle ich die Startzeit auf z.B. 4:30 Uhr, in der HA gebe ich den gewünschten Ladestrom ein. Ich möchte die Start- und Stoppzeiten in HA festlegen. Alle Ladestromberechnungen laufen ohnehin im Template, daher habe ich eine neue Variable im Template definiert.
YAML:
- binary_sensor:
  - name: "Timer EV Laden"
    unique_id: "timer_ev_laden"
    state: >
      {% set target_time = ( as_timestamp (now() ) | timestamp_custom('%H:%M')) %}
      {% if states('input_datetime.ev_laden_ein') <= target_time < states('input_datetime.ev_laden_aus') %}
        true
      {% else %}
        false
      {% endif %}

Wie gesagt, es ist nur ein Test, um zu sehen, wie es funktioniert. In diesem Fall wird der Sensor jedoch auch eine Minute später als definiert eingeschaltet. Auf eine Minute kommt es nicht an, ich wollte es nur verstehen wieso.

Das funktioniert bei mir auch nicht, ich vermute die gleiche Uhrsache. Hängt wahrscheinlich mit der Aktualisierungszeit zusammen.

YAML:
- trigger:
    - platform: template             
      value_template: "{{ (now().second % states('input_number.verschiebungszeit_schleife') | int) == 0 }}"
  sensor:
    - name: strom_gegl_delayed
      device_class: "current"
      state_class: "measurement"
      unit_of_measurement: "A"   
      state: '{{ states("sensor.strom_geglaettert") }}'
 
Hallo, seit einiger Zeit zeigt der Studio Code Server Fehler in den Automations, Scripts und Template.yaml an. Die Funktion ist gegeben. Die Automations.yaml habe ich angepasst, so dass keine Fehler mehr angezeigt werden. Bei Template und Scripts habe ich noch ein Problem. Wie soll ich jetzt nach den neuen Regeln Trigger in das Template schreiben?

fehler_Template.png
YAML:
#triggers:
- trigger:
    - platform: template
      value_template: "{{ (now().minute % states('input_number.aktualisierungszeit_min') | int) == 0 }}"
  sensor:
    - name: max_strom_wallbox_delayed
      device_class: "current"
      state_class: "measurement"
      unit_of_measurement: "A"
      state: '{{ states("sensor.max_strom_wallbox") }}'
 
Danke, es wird kein Fehler mehr angezeigt. Muss ich die Funktion noch prüfen?

YAML:
#triggers:
- trigger:
    - trigger: template
      value_template: "{{ (now().minute % states('input_number.aktualisierungszeit_min') | int) == 0 }}"
  sensor:
    - name: max_strom_wallbox_delayed
      device_class: "current"
      state_class: "measurement"
      unit_of_measurement: "A"
      state: '{{ states("sensor.max_strom_wallbox") }}'
 
Hallo, ich habe eine Frage zum Trigger und der anschließenden Bedienung. Muss die Bedienung zum Zeitpunkt des Triggers erfüllt sein, um die Aktion auszulösen oder wird der Trigger sozusagen gespeichert und wenn die Bedienung zu einem späteren Zeitpunkt erfüllt wird, wird die Aktion ausgeführt.

Hier als Beispiel, wenn binary_sensor.low_batt bei Sonnenuntergang off ist und erst später auf on wechselt, wird die Aktion ausgeführt oder nicht.

YAML:
  triggers:
  - trigger: sun
    event: sunset
  conditions:
  - condition: state
    entity_id: binary_sensor.low_batt
    state: 'on'
  actions:
 
wenn Trigger auslöst, wird geprüft. Trigger sind immer Momente, da wird nix respeichert. -> Alle Sachen als Trigger anlegen (= oder) und bei Bedingung alle testen (= und).
 
Moin,
ich habe eine Verständnisfrage zu meiner Automation und dem dazugehörigen Trace. Bis heute hat die Automatisierung so funktioniert wie sie sollte, heute aber wurde die Automatisierung ausgelöst obwohl die zweite Bedienung nicht erfüllt war. Ich habe zwei Trigger und zwei Bedienungen. Bei Sonnenuntergang und wenn Batterie SOC kleiner oder gleich dem eingestellten Grenzwert ist, soll der WR ausgeschaltet werden.

YAML:
- id: '1730758172825'
  alias: Inverter ausschalten
  description: ''
  triggers:
  - trigger: sun
    event: sunset
  - trigger: template
    value_template: '{% if states(''sensor.inverter_battery'') <= states(''number.inverter_program_5_soc'')  %}
      true {% else %} false {% endif %} '
  conditions:
  - condition: sun
    before: sunrise
    after: sunset
  - condition: template
    value_template: '{{ states(''sensor.inverter_battery'') <= states(''number.inverter_program_5_soc'')
      }}'
  actions:
  - if:
    - condition: state
      entity_id: input_boolean.inverter_off_no_batt
      state: 'on'
    then:
    - action: select.select_option
      metadata: {}
      data:
        option: No Battery
      target:
        entity_id: select.inverter_battery_operation_mode
    - action: select.select_option
      metadata: {}
      data:
        option: Lead-Battery, four-stage charging method
      target:
        entity_id: select.inverter_battery_control_mode
    else:
    - action: switch.turn_off
      metadata: {}
      data: {}
      target:
        entity_id: switch.inverter
  mode: single

TraceInvAus.png

Wieso ist Result true? Die Batterie war voll aufgeladen also sensor.inverter_battery war bei 100%
Die Grenze number.inverter_program_5_soc ist auf 70% eingestellt.
 
Zuletzt bearbeitet:
Da deine Automatisierung um 16:13 ausgelöst wurde, wage ich mal zu behaupten, das es NICHT sunset war, sondern deine hmmm, Formel, die sowieso schon was komisch ausschaut.
Code:
value_template: '{% if states(''sensor.inverter_battery'') <= states(''number.inverter_program_5_soc'')  %}
      true {% else %} false {% endif %} '
Doppelte Apostroph bei den Sensoren ????
Vermutlich war also einer der Sensoren mit Husten unterwegs. Schau doch mal nach, welchen Wert die beiden Sensoren um exakt 16:13:21 hatten.
 
Auslöser war der Sonnenuntergang gestern um 16:13 Uhr. Hier ist die Formel, wenn ich sie in einem Helfer verwende.

YAML:
{% if  states('sensor.inverter_battery') <= states('number.inverter_program_5_soc') %}
  true
{% else %}
  false
{% endif %}

Ich habe die Werte auch überprüft, Grenzwert ist ein statischer Wert, Batterie SOC war bei 100%. Auf dem Screenshot ist zu sehen, dass die zweite Bedienung true ist, obwohl sie nicht true sein sollte.
 
Bei mir ist Sonnenuntergang erst im 16:34 :)
Aber gut, so kann man sich irren.
Wenn Sonnenuntergang der Auslöser war, dann dürfte es also nicht deine Formel gewesen sein und ja, dann sollte die Bedingung auch nicht TRUE sein, wenn die Formeln beide exakt gleich sind.
Ich gehe da gerne her, kopiere die raus in einen Texteditor und setzte die beiden direkt untereinander, da sieht man am besten, ob irgendwo Unterschiede sind.
 
Wieso ist Result true? Die Batterie war voll aufgeladen also sensor.inverter_battery war bei 100%
Die Grenze number.inverter_program_5_soc ist auf 70% eingestellt.
Hast Du % nur zum Verständnis dabeigeschrieben oder ist das wirklich die Angabe? Denn 100 ist natürlich größer als 70, aber "100%" ist kleiner als "70%".
Kopier mal diese Zeilen unter Entwicklerwerkzeuge => Template:
YAML:
{{ "99%" <= "70%" }}
{{ "100%" <= "70%" }}
{{ 99 <= 70 }}
{{ 100 <= 70 }}
- ist halt ein anderer Vergleich, String gegen Zahlen.
 
Hast Du % nur zum Verständnis dabeigeschrieben oder ist das wirklich die Angabe?
Ja, ich habe zum Verständnis geschrieben. Ich möchte zwei Zahlen vergleichen und denke, dass ich das mit der Anweisung richtig gemacht habe.

YAML:
  - condition: template
    value_template: '{{ states(''sensor.inverter_battery'') <= states(''number.inverter_program_5_soc'') }}'
 
Ich möchte zwei Zahlen vergleichen
...die aber hier potentiell als String vorliegen (auch unabhängig vom Prozentzeichen) und dann ergibt sich das gleiche Problem.

Ich würde beide Sensoren für den Vergleich nochmal zu int oder float konvertieren, damit dieser Vergleich sicher richtig ist.
 
Ich würde beide Sensoren für den Vergleich nochmal zu int oder float konvertieren, damit dieser Vergleich sicher richtig ist.
danke dir, So muss es jetzt richtig sein

YAML:
  - condition: template
    value_template: '{{ states(''sensor.inverter_battery'') | int )  <= states(''number.inverter_program_5_soc'') | int ) }}'
 
Wieso ist 100% kleiner als 70% ?
Die Prozentzeichen waren für mich nur der Hinweis, dass hier definitiv ein String vorliegt und kein Number (in jedem anderen Fall nur wahrscheinlich), da werden ganz andere Vergleichsmethoden herangezogen. Wenn Du {{ 100% <= 70% }} eingibst wirft es einen Fehler, denn mit % ist es keine gültige Zahl mehr, da müssen Anführungsstriche her, dann kann man es vergleichen, also, Strings. Ist aber generell nicht unüblich, dass Sensorenwerte erstmal als String behandelt werden.

Bei Number wird, sinnvollerweise, der komplette Wert verglichen. Bei Strings wird zeichenweise verglichen. Vergleichst Du Apfel mit Birne ist klar, A < B, weiter müssen wir garnicht gehen. Bei Birne und Banane ist B = B, aber a < i - Vergleich beendet.

Bei 100 und 70 ist 1 < 7 - das Spiel kannst Du sogar bis zur 699 spielen, auch 6 < 7. Erst bei 700 wechselt das wieder, denn 7 = 7, 0 = 0, 0 > null.

Das ist jetzt eigentlich etwas kurz gegriffen - manches wird in verschiedenen Sprachen verschieden behandelt, unter Umständen gibt es Flags um zu definieren als was Werte interpretiert werden sollen - aber für diesen Fall ist das die Erklärung weshalb "100" kleiner ist als "70" und erst das konvertieren zu Number dann das gewünschte Ergebnis bringt. Das gleiche hätte schon bei "10" <= "9" auffallen können, denn natürlich ist 1 < 9.
 
So muss es jetzt richtig sein
Auf den ersten Blick wollte ich der Aussage zustimmen, auf den zweiten fehlen da zwei öffnende Klammern :) so sollte es passen:
YAML:
value_template: "{{ ( states('sensor.inverter_battery') | int )  <= ( states('number.inverter_program_5_soc') | int ) }}"

Hier wären die zusätzlichen Klammern nichtmal nötig (schon Deine hinter dem |int nicht), aber es dient auf jeden Fall der Übersicht und künftiger Fehlervermeidung.
 
denn mit % ist es keine gültige Zahl mehr, da müssen Anführungsstriche her, dann kann man es vergleichen, also, Strings. Ist aber generell nicht unüblich, dass Sensorenwerte erstmal als String behandelt werden.
Ich sag mal so. Ich kenne aktuell keine Programmiersprache, in der ich STRINGS auf kleiner oder größer prüfen kann, eben weil es sinnlos wäre.
Aber ja, HA macht das tatsächlich. Krass.
Bei Number wird, sinnvollerweise, der komplette Wert verglichen. Bei Strings wird zeichenweise verglichen.
Und das Ergebnis bezieht sich dann auf WELCHEN Vergleich ? den vom ersten Zeichen, vom letzten oder ????
Bei 100 und 70 ist 1 < 7 - das Spiel kannst Du sogar bis zur 699 spielen, auch 6 < 7. Erst bei 700 wechselt das wieder, denn 7 = 7, 0 = 0, 0 > null.
Also vergleicht er nur das erste Zeichen. Dann wäre 68903254320 auch kleiner 7, aber GLEICH 6 und größer 5.

Alles klar. Danke für die Aufklärung.
 

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
5.797
Beiträge
56.606
Mitglieder
5.714
Neuestes Mitglied
schueler-f.de
Zurück
Oben