ich habe eine Automatisierung gebastelt für Tibber.
Diese wird gestartet, wenn ich einen Schalter betätige und der aktuelle Strompreis unter den täglichen Durchschnittspreis fällt. Das funktioniert auch soweit denke ich.
Nun ist es in den letzten Nächten passiert, dass der aktuelle Strompreis nicht unter unter den Strompreis fällt. Natürlich möchte ich aber früh trotzdem sauberes Geschirr haben. Aber so richtig funktioniert es nicht.
Mein Gedanke :
Der Geschirrspüler soll starten, wenn ich den Schalter aktiviere und der Strompreis unter den Durchschnittspreis fällt.
Sollte das zwischen 02.01 und 02.05 Uhr nicht passieren, dann soll der Geschirrspüler trotzdem gestartet werden. Als Bedingung dafür habe ich dann noch den Status vom Geschirrspüler drin. Dieser muss “Ready” sein.
Ich denke mein Problem liegt darin, dass ich den Schalter um 19.00 Uhr einschalte, er dann die Rutine startet und die Uhrzeit abfragt. Aber nur ein mal. Ist es halt nicht 02.02 Uhr wenn ich den Schalter betätige, wird die Automatisierung nicht gestartet.
Kann das sein?
alias: Tibber Geschirrspüler
description: Programm Auto mit Tibber Laden
trigger:
- platform: state
entity_id:
- input_boolean.tibber_geschirrspuler
to: "on"
condition:
- condition: or
conditions:
- condition: numeric_state
entity_id: sensor.electricity_price_home
attribute: avg_price
above: sensor.electricity_price_home
enabled: true
- condition: and
conditions:
- condition: time
after: "02:01:00"
before: "02:05:00"
- condition: state
entity_id: sensor.geschirrspuler_operation_state
state: Ready
action:
- type: turn_on .........
Damit fragst du ab ob die Automation das letzte mal vor 12 Stunden oder länger gelaufen sein muss, sonst startet die nicht. Die Sekunden (43200) kannst du natürlich anpassen, wenn das nicht passen sollte. Den Namen der Automation musst du ggf. auch noch anpassen.
@sirector die Überlegung hatte ich auch. Aber ich habe es so verstanden, dass der Geschirrspüler “smart” ist und ein “ready” zurückgibt, sollte er befüllt und mit Reiniger usw. vorbereitet sein.
Ihr seid echt klasse. Ich habe jetzt alles kombiniert. So schaut es jetzt aus.
Als bedingung habe ich “Tür Geschlossen” + Status Geschirrspüler darf nicht “an” sein + Zeit seit letztem Ausführung der Automation über 10h.
alias: Geschirrspüler Zeit
description: ""
trigger:
- platform: time
at: "02:01:00"
condition:
- condition: state
entity_id: input_boolean.tibber_geschirrspuler
state: "on"
- type: is_not_open
condition: device
device_id: ec9b9d7
entity_id: d95
domain: binary_sensor
- condition: state
entity_id: sensor.geschirrspuler_operation_state
state: Ready
- condition: not
conditions:
- condition: state
state: "on"
entity_id: switch.geschirrspuler_power
- condition: template
value_template: >-
{{
(as_timestamp(state_attr('automation.tibber_geschirrspuler','last_triggered'))
| int) + 43200 <= now().timestamp() | int }}
action:
- service: automation.trigger
metadata: {}
data:
skip_condition: true
target:
entity_id: automation.tibber_geschirrspuler
mode: single
So wie ich das sehe, löst er so aber nur genau um 02:01 Uhr aus und startet den Geschirrspüler nur dann, wenn zu dem Zeitpunkt alle deine Bedingungen erfüllt sind und nicht, wenn der Strompreis niedrig ist.
Dafür bräuchtest du zusätzlich einen zweiten Trigger, wie du oben geschrieben hast.
Den Code habe ich jetzt angepasst auf 4h. Das sollte mir reichen.
Ich habe jetzt die Trigger von der Automation getrennt.
1x Trigger für den Preis und 1x Trigger über die Uhrzeit. Beides getrennt vom starten des Geschirrspülers.
Für den Preis Trigger habe ich jetzt noch einen Helfer(Schalter) erstellt, der eingeschaltet wird wenn der aktuelle Preis unter den Durchschnittspreis fällt.
Leider funktioniert die Umschaltung nicht(möchte ich auch für andere Automationen nutzen). Könntet ihr mir da noch einmal helfen?
Ich habe zwei Automationen erstellt. Ein mal zum Einschalten des Helfers und ein mal zum Ausschalten des Helfers,
Einschalten :
alias: Sensor Schalter einschalten Tibber Preis unter Durchschnitzpreis
description: Schaltet den Helfer Tibber Preis unter Durchschnittspreis ein
trigger:
- platform: numeric_state
entity_id:
- sensor.electricity_price_home
attribute: avg_price
above: sensor.electricity_price_home
condition: []
action:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.tibber_preis_unter_durchschnittspreis
mode: single
Der Trigger löst erst aus, wenn eine der beiden Grenzen über-/unterschritten wird. Ist der Wert bereits drüber oder drunter, löst nichts aus. Warte einfach ein bisschen ab.
Nein, die Automation wurde nicht ausgelöst.
Woran könnte das liegen? Wenn ich mir die Werte in den Zuständen anschaue, sind sie aber Plausibel. Oder kann er Kommawerte nicht vergleichen. Also z.B. 0,36 zu 0,298.
Er ist gestiegen. Also über den Durchschnittspreis. Die Automation hat aber auch nicht ausgelöst.
Ich habe jetzt HA mal neu gestartet und den Preis in den Entwicklerwerkzeugen manuell geändert. Und es hat funktioniert. Ich beobachte es mal, ob es alleine auch funktioniert. Vielen Dank
Ich hab was ähnliches Gebaut. Meine Spühlmaschine startet jetzt automatisch verzögert zum günstigsten Preis sobald ich diese manuell anschalte (nicht starte).
Das einzige was ich bisher nicht geschafft habe ist das manuelle auswählen an der Spühlmaschine des Porgramms, das er das übernimmt. Deswegen mache ich es wie Simon und starte immer das Auto-Programm.
Hilft dir das oder geht das nicht in die Richtung die du erreichen möchtest?
Die Spühlmaschine läuft halt in jedem Fall und immer zum günstigsten zukünftigen Preis.
Hier das auslesen des Günstigsten Preis mit Datum.
{% set aktuelles_datum = now() %}
{% set today_prices = state_attr('sensor.tibber_prices', 'today') %}
{% set tomorrow_prices = state_attr('sensor.tibber_prices', 'tomorrow') %}
{% set all_prices = today_prices + tomorrow_prices %}
{% set kleinste_total = namespace(wert=None, datum=None) %}
{% for eintrag in all_prices %}
{% if as_timestamp(eintrag.startsAt) > aktuelles_datum.timestamp() %}
{% if kleinste_total.wert is none or eintrag.total < kleinste_total.wert %}
{% set kleinste_total.wert = eintrag.total %}
{% set kleinste_total.datum = eintrag.startsAt %}
{% endif %}
{% endif %}
{% endfor %}
{{ (kleinste_total.datum, kleinste_total.wert) }}
Ich habe das ganze als Sensor eingetragen. So funktioniert es aber leider nicht.
Fehler: Error rendering data template: ValueError: Template error: as_timestamp got invalid input ‘unknown’ when rendering template ‘{{ as_timestamp(states(‘sensor.niedrigster_strompreiszeitpunkt’)) }}’ but no default was specified
Es werden keine Preise geliefert. Mir ist es aber sowieso ein Rätsel wie ich an die zukünftigen Preise von Tibber komme. Diese werden mir bei meiner Tibber Integration nicht angezeigt. Keine Ahnung was ich falsch mache.
Ich habe in die Yaml Configuration folgendes geschrieben:
sensor:
- platform: template
sensors:
niedrigster_strompreis:
friendly_name: "Niedrigster Strompreis"
value_template: >
{% set aktuelles_datum = now() %}
{% set today_prices = state_attr( 'sensor sonnenhaus_strompreis', 'today') %}
{% set tomorrow_prices = state_attr('sensor.sonnenhaus_strompreis', 'tomorrow') %}
{% set all_prices = today_prices + tomorrow_prices %}
{% set kleinste_total = namespace(wert=None, datum=None) %}
{% for eintrag in all_prices %}
{% if as_timestamp(eintrag.startsAt) > aktuelles_datum. timestamp() %3
{% if kleinste_total.wert is none or eintrag.total < kleinste_total.wert %}
{% set kleinste_total.wert = eintrag. total %}
{% set kleinste_total datum = eintrag.startsAt %}
{% endif %}
{% endif %}
{% endfor %}
{{ kleinste_total.datum }}