Liebe Community, ich habe eine (dachte ich) simple Automatisierung. Leider klappt sie nicht.
Ziel: Boilerschalter einschalten, wenn
PV Leistung > 3000 W
oder
Stromtarif < 16 ct/kWh
und
Solarbatterie > 90 %.
Mein Code:
alias: "Boiler EIN bei PV > 3000 und Tarif <16 und Batterie >90% "
description: Boiler EIN bei PV > 3000 und Tarif <16 und Batterie >90%
triggers:
- trigger: numeric_state
entity_id:
- sensor.solarnet_pv_leistung
enabled: true
above: 3000
- trigger: numeric_state
entity_id:
- sensor.epex_spot_data_net_price
below: 16
enabled: true
conditions:
- condition: numeric_state
entity_id: sensor.byd_battery_box_premium_hv_ladezustand
above: 89.5
enabled: true
actions:
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.warmwasser_boiler_schalter
mode: single
Leider ist das Ergebnis IMMER „on“, auch wenn die aktuellen Werte z.B: PV = 1000 W und/oder Tarif 30 ct und Batterie = 30 % sind
oder ich die Sollwerte auf <> IST hinauf- resp. hinunter setze.
Was ist da falsch ?
PV > 3000 oder Tarif < 16 bedeutet aber, dass die Trigger erst auslösen, wenn die Werte der PV von <3000 auf >3000 kommen oder der Tarif von >16 auf <16 fällt.
Wenn die Werte schon >3000 oder <16 sind, muss erst die Schwelle wieder „durchbrochen“ werden.
War die PV denn zwischenzeitlich schon mal wieder <3000 oder der Tarif >16 ?
nunja, ich habe probeweise die Werte verändert. Z.B: PV auf Soll 6000 geändert (derzeit sind es aktuell aber nur 5000W), gespeichert und aktualisert, aber Zuszand blieb ON
Wie schon geschrieben, die Trigger sind Schwellenwert-Auslöser. Es muss die Schwelle erst über-/unterschritten werden und anschließend bei wieder Erhöhung/Verringerung wird ausgelöst.
Schalte den Switch aus und warte dann ab, ob bei Über-/Unterschreitung richtig ausgeführt wird.
ich dachte, wenn eine der Bedingungen nicht (mehr) zutrifft, dann schaltet die Automation ohnehin auf OFF. Da liege ich wohl falsch. Muss ich daher eine 2. Automation erstellen, die den OFF Zustand definiert? Also wenn
PV < 3000 W
UND (als Condition)
Tarif > 16 ct
UND
Batterie < 50 %
dann Schalter auf OFF
?
Einfacher nicht aber in einer Automation. Dann musst du allerdings den Triggern jeweils eine ID geben und in den Aktionen dann die Bedingungen abfragen.
alias: "Boiler EIN bei PV > 3000 und Tarif <16 und Batterie >90%"
description: ""
triggers:
- trigger: state
entity_id:
- sensor.solarnet_pv_leistung
id: Leistung
- trigger: state
entity_id:
- sensor.epex_spot_data_net_price
id: Preis
conditions: []
actions:
- if:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.byd_battery_box_premium_hv_ladezustand
above: 89.5
- condition: or
conditions:
- condition: template
value_template: >
{{ trigger.id == "Leistung" and trigger.to_state.state | float
> 3000 }}
- condition: template
value_template: >
{{ trigger.id == "Preis" and trigger.to_state.state | float <
16 }}
then:
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.warmwasser_boiler_schalter
else:
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.warmwasser_boiler_schalter
mode: single
Hier ist eine Version, wo bei jeder Wertänderung deiner Trigger reagiert wird und dann direkt geprüft wird ob diese Bedingung zutrifft. Und je nachdem ob diese Zuftriff oder nicht wird er Schalter ein bzw. ausgeschaltet.
Probiere es gern mal aus und lass mich wissen ob es so für dich funktioniert oder nicht.
Hi UncleSam, vielen Dank. Bin seit gestern leider auf Seminar, kann erst morgen testen. Code schaut sehr verständlich aus. Melde mich auf jeden Fall wieder. Schönen Samstag.
Funktioniert prima UncleSam. Danke.
Als Steigerung möchte ich nun nicht einen fixen Mindest-Tarif eingeben, sondern ein Zeitfenster von 1 Stunde mit dem „lowest price per day“ automatisch abfragen und als SOLL Vorgabe verwenden. Den lowest price habe ich schon ( sensor.epex_spot_data_lowest_price), nur bei der Eingabe des Zeitfensters stehe ich an. Kannst du mir bitte auch dabei helfen?
ahja, kompliziert gedacht und geschrieben, sorry.
Also ich möchte einfach in der Zeit den Boiler einschalten, in dem der Tagestarif am günstigsten ist. (Zusätzlich zu den anderen Bedingungen)
Eigentlich müsste ich hier ja nur statt der Vorgabe von 16 ct/kWh den „sensor.epex_spot_data_lowest_price“ nehmen:
Ok, damit ich das ganze optimal umsetzen kann. Bräuchte ich dann doch noch einige Informationen, da ich nicht mit deinem System arbeite.
Diese 2 Sensoren sind mir bekannt aus deinem System:
sensor.epex_spot_data_net_price - Zeigt den Preis an der jetzt gerade gültig ist an
sensor.epex_spot_data_lowest_price - Zeit dieser Sensor den günstigesten Preis für den Tag bzw. einen bestimmten Zeitraum an?
Zumindest verstehe ich deine beiden Sensoren so.
Sollte das so sein, müsste man meiner Meinung einen Vergleich dieser beiden Sensoren durchführen und sobald der aktuelle Preis = der günstigste Preis ist dann den Boiler einschalten.
Im Prinzip ja, aber…
der sensor.epex_spot_data_net_price inkludiert die Aufschläge (Netzkosten, MwSt, …), während der …lowest_price nur den Nettobetrag aufweist. D.h. entweder den Nettobetrag hochrechnen ((Netto*1,03)+1,5)*1,2)) = (3% Aufschlag + 1,5 ct/kWh Fixgebühr + 20% MwSt)
oder den … data_net_price zum Vergleichen entsprechend reduzieren.
Aber sonst hast du vollkommen recht.
hat leider nicht geklappt. Es gab zwar keine Fehlermeldung, aber der Boiler wurde nicht eingeschaltet.
Aber jetzt werde ich noch herausfordernder - wenn das mit dem billigsten Tarif klappt:
mit der 1 Stunde (wenn keine PV Leistung vorhanden) erreicht der Boiler leider nicht seine max Temperatur. D.h. ich brauche doch eine Art Zeitfenster der günstigsten Stunden. Solange z.B.
11:00 5 ct/kWh
12:00 6 ct/kWh
13:00 7 ct/kWh
könnte man das vielleicht über einen „wait“ Kommand machen. "schalte um 11:00 ein, warte 2 Stunden - schalte wieder aus.
aber wenn z.B
11:00 5 ct/kWh
12:00 4 ct/kWh
13:00 6 ct/kWh
müsste der Boiler bereits 1 Stunde VOR dem Tiefstpreis einschalten. Wie geht denn sowas???