Automation Warmwassererzeugung (Wärmepumpe) bei PV-Überschuss

mdkeil

New member
Hallo,

meine Wärmepumpe ist Smart-Grid ready, sprich in Abhängikeit von z.B. PV-Überschuss kann diese Energie beispielsweise in Warmwasser gespeichert werden. Da ich alle benötigten Werte in HA vorliegen habe, kann ich direkt mit dem angeschlossenen Shelly die Energiespeicherung automatisch triggern. Das funktioniert soweit auch aber der Umsetzunggrad ist noch nicht perfekt.

Code:
- id: '1646682824869'
  alias: WP SG1 Warmwasser (ON)
  description: ''
  trigger:
  - platform: state
    entity_id: sensor.pveinspeisung
  condition:
  - condition: time
    after: '13:30'
  - condition: device
    type: is_off
    device_id: d6b0a0665609212231a13f5c7edb72b7
    entity_id: switch.shelly1_wpsg1
    domain: switch
    for:
      hours: 0
      minutes: 10
      seconds: 0
  - condition: numeric_state
    entity_id: sensor.espaltherma_dhw
    below: '50'
  - condition: numeric_state
    entity_id: sensor.pveinspeisung
    above: '2500'
  action:
  - type: turn_on
    device_id: d6b0a0665609212231a13f5c7edb72b7
    entity_id: switch.shelly1_wpsg1
    domain: switch
  mode: single

getriggert wird die Automation über den "sensor.pveinspeisung" (aktueller PV-Überschuss).. anschließend folgen noch Bedingungen, die soweit auch funktionieren. Da teilweise aber Peaks dazu führen den Shellyausgang zu schalten, möchte ich gerne "for" mit reinbringen, was aber nur beim Auslöser möglich ist. Wenn ich z.B. einen numerischen Wert als Auslöser habe (z.b. sensor.pveinspeisung above 2500 for 5min) wird die Automation zwar getriggert, aber die zusätzlichen Bedingungen verhindern die Ausführung (was so auch korrekt ist).. wenn nun wie aktuell im März der Wert nicht mehr unter 2500 fällt, wird die gesamte Automation nicht mehr getriggert.. Vielleicht benötige ich nur noch einen kleinen Denkanstoß..
 
Moinsen und willkommen im Forum!
Wirklich interessantes Projekt.
Respektzollend muss ich allerdings leider mitteilen, dass ich dir da nicht weiterhelfen kann... :(

Bin aber gespannt, ob die HA-Pros hier im Forum (und es gibt ja durchaus einige hier) dir da noch helfen können...
Viel Erfolg! (y)
 
Du könntest dir einen Statisitksensor bauen, der als Basis den PV Überschuss hat. Den Statisitksensor konfigurierst du so, dass er den Mittelwert aus den letzten 10min bildet und dann nutzt du diesen Sensor als Trigger.
Sollte dann ungefähr so aussehen:

YAML:
sensor:
  - platform: statistics
    name: "PV Überschuss gemittelt"
    entity_id: sensor.pveinspeisung
    state_characteristic: mean
    max_age:
      minutes: 10

Wobei beim erneuten lesen deiner Automatisierung wundert es mich, dass die überhaupt funktioniert. In meinen Augen hast du keinen eindeutigen Trigger definiert und die Conditions einfach lose aneinander gehängt. Da eine deiner Conditions eine feste Uhrzeit ist würde ich diese als Trigger verwenden und die Conditions mit einem UND verknüpfen:

YAML:
alias: Neue Automatisierung
description: ''
mode: single
trigger:
  - platform: time
    at: '13:30:00'
condition:
  - condition: and
    conditions:
      - type: is_off
        condition: device
        device_id: d6b0a0665609212231a13f5c7edb72b7
        entity_id: switch.shelly1_wpsg1
        domain: switch
      - condition: numeric_state
        entity_id: sensor.espaltherma_dhw
        below: '50'
      - condition: numeric_state
        entity_id: sensor.pveinspeisung
        above: '2500'
action:
  - service: homeassistant.turn_on
    data: {}
    target:
      entity_id: switch.shelly1_wpsg1

Hat jetzt halt den Nachteil, dass das nur zu dieser einen festen Uhrzeit erfolgt, aber da könnte man ja mehrere hinzufügen ;) Ich vermute mal, dass der Sensor "espaltherma_dhw" die Wassertemperatur darstellt. Mir persönlich wäre es ja egal wie warm das Wasser ist und würde es immer auf einen max. Wert aufheizen. Könnte dann so aussehen:

YAML:
alias: Neue Automatisierung
description: ''
mode: single
trigger:
  - platform: time
    at: '13:30:00'
condition:
  - condition: and
    conditions:
      - type: is_motion
        condition: device
        device_id: d6b0a0665609212231a13f5c7edb72b7
        entity_id: switch.shelly1_wpsg1
        domain: switch
      - condition: numeric_state
        entity_id: sensor.pveinspeisung
        above: '2500'
action:
  - service: homeassistant.turn_on
    data: {}
    target:
      entity_id: switch.shelly1_wpsg1
  - wait_for_trigger:
      - platform: numeric_state
        entity_id: sensor.espaltherma_dhw
        above: '60'
  - service: homeassistant.turn_off
    target:
      entity_id: switch.shelly1_wpsg1
    data: {}

Und noch ein kleiner Hinweis: zum Ein- und Ausschalten von Geräten nutze ich eigentlich immer einen Dienst - entweder den generischen "homeassistant.turn_on / off / toggle" oder den Domain spezifischen - "light / switch / automation.turn ...". Das funktioniert immer problemlos bei mir. Bei den Sachen mit den Geräten ist es mir schon vorgekommen, dass es mal nicht funktioniert hat. Aber das ist auch schon länger her, kann sein, dass sich das in der Zwischenzeit gebessert hat.
Ich hoffe jedenfalls, dass ich dir ein paar Denkanstöße geben konnte. Wenn noch Frage sind, immer her damit :)

Btw: Mein Wärmepumpe macht das auch. Gesteuert wird das allerdings vom Smart Manager der PV Anlage und dadurch kann ich weder mit der Wärmepumpe noch mit der PV per Modbus reden. Ziemlich doof das ganze ... Aber missen möchte ich das Feature nicht mehr. ;)
 
Vielen Dank für die Begrüßung @the other

Ich glaube, dass ich eine Lösung gefunden habe.. sollte diese zufriedenstellend sein, werde ich das Ergebnis natürlich hier veröffentlichen.
 
Du könntest dir einen Statisitksensor bauen, der als Basis den PV Überschuss hat. Den Statisitksensor konfigurierst du so, dass er den Mittelwert aus den letzten 10min bildet und dann nutzt du diesen Sensor als Trigger.
So ähnlich habe ich es nun auch umgesetzt.. näheres poste ich morgen, wenn es funktioniert hat..

Wobei beim erneuten lesen deiner Automatisierung wundert es mich, dass die überhaupt funktioniert. In meinen Augen hast du keinen eindeutigen Trigger definiert und die Conditions einfach lose aneinander gehängt. Da eine deiner Conditions eine feste Uhrzeit ist würde ich diese als Trigger verwenden und die Conditions mit einem UND verknüpfen:
Die Automatisierung ist schnell über den visuellen Editor zusammengeklickt.. wenn ich mir den Trace anschaue, sind aber die Conditions "Und"-verknüft.. ohne, dass es explizit angegeben wurde.. Getriggert wird aufgrund der minütlichen Änderung von sensor.pveinspeisung (aktueller PV-Überschuss)


btw. vielen Dank für die Denkanstöße und Erklärungen ;)

PS: Das mit der Wassertemp. ist korrekt gedacht.. zum Hintergrund: Ich habe es so optimiert, dass ich immer nur einmal am Tag WW machen lasse.. normal waren es 48°C, was aber öfter dazu führte dass morgens nochmal nachgeladen werden musste (auf 42 °C) Nun nutze ich PV-Überschuss und Lade direkt auf 55°C auf.. passiert dies ab ca. 1330 komme ich locker über 24h.
 
Zuletzt bearbeitet:
So.. anbei meine aktuelle Automation, die nun wie gewünscht funktioniert

Hilfssensor angelegt:
Code:
 pv_ueberschuss_state:
      friendly_name: "PV-Überschuss"
      value_template: "{% if (states('sensor.pveinspeisung')) | float > 2500 %} 1
        {% elif (states('sensor.pv_ueberschuss_state')) | float == 1 and (states('sensor.pveinspeisung')) >= 1500 %} 1 {% else %} 0 {% endif %}"
      unique_id: pv_ueberschuss_state

Automation, die durch den sensor.pveinspeisung bei jeder Änderung (minütlich) getriggert wird; der Hilfssensor wird dafür benötigt, um den PV-Überschuss von mind. 2500W (seit mind. 5min) zu gewährleisten.

Code:
 alias: WP SG1 Warmwasser (ON)
  description: ''
  trigger:
  - platform: state
    entity_id: sensor.pveinspeisung
  condition:
  - condition: time
    after: '13:30'
  - condition: state
    entity_id: sensor.pv_ueberschuss_state
    state: '1'
    for:
      hours: 0
      minutes: 5
      seconds: 0
  - condition: device
    type: is_off
    device_id: d6b0a0665609212231a13f5c7edb72b7
    entity_id: switch.shelly1_wpsg1
    domain: switch
    for:
      hours: 0
      minutes: 10
      seconds: 0
  - condition: numeric_state
    entity_id: sensor.espaltherma_dhw
    below: '50'
  action:
  - type: turn_on
    device_id: d6b0a0665609212231a13f5c7edb72b7
    entity_id: switch.shelly1_wpsg1
    domain: switch
  mode: single
 
pv_ueberschuss_state: friendly_name: "PV-Überschuss" value_template: "{% if (states('sensor.pveinspeisung')) | float > 2500 %} 1 {% elif (states('sensor.pv_ueberschuss_state')) | float == 1 and (states('sensor.pveinspeisung')) >= 1500 %} 1 {% else %} 0 {% endif %}" unique_id: pv_ueberschuss_state
Danke für die beschriebene Lösung!
Kann man für die Werte 2500 und 1500 auch einen "Helfer" (Nummer) bzw. einen einstellbaren Parameter verwenden?
Wie würde das Script dann aussehen?
Sorry ich bin ganz neu unterwegs mit Home Assistant....

Mein Script funktioniert so nicht:
template: - sensor: - name: "pv_ueberschuss_state" unique_id: "pv_ueberschuss_state" state: >- {% set p_heater_on = states('input_number.p_heater_on') | float(0) %} {% set p_heater_off = states('input_number.p_heater_off') | float(0) %} {% set einspeisung_netz = states('sensor.einspeisung_netz') | float(0) %} {% if einspeisung_netz > p_heater_on %} 1 %} {% elif (states('sensor.pv_ueberschuss_state')) | float == 1 and einspeisung_netz >= p_heater_off %} 1 {% else %} 0 {% endif %}
 
Zuletzt bearbeitet:
ich habe es hinbekommen, hier meine Lösung:

configuration.yaml
- name: "pv_ueberschuss_state" unique_id: "pv_ueberschuss_state" state: >- {% set p_heater_on = states('input_number.p_heater_on')|float(0) %} {% set p_heater_off = states('input_number.p_heater_off')|float(0) %} {% set einspeisung_netz = states('input_number.p_simulation_active_power')|float(0) %} {% if einspeisung_netz > p_heater_on %} 1 {% elif (states('sensor.pv_ueberschuss_state')) == 1 and einspeisung_netz >= p_heater_off %} 1 {% else %} 0 {% endif %}

Automatisierung zum Einschalten der Heizung:
alias: heater_on description: "" trigger: - platform: state entity_id: - input_number.p_simulation_active_power condition: - condition: state entity_id: sensor.pv_ueberschuss_state state: "1" for: minutes: 0 seconds: "{{ states('input_number.p_heater_ton_time')|int }}" - condition: device type: is_off device_id: c557badbda409c3f96d4f209ba570593 entity_id: switch.shelly1 domain: switch - condition: state entity_id: input_boolean.p_heater_man_switch state: "off" action: - type: turn_on device_id: c557badbda409c3f96d4f209ba570593 entity_id: switch.shelly1 domain: switch mode: single

Automatisierung zum Ausschalten der Heizung:
alias: heater_off_manual description: "" trigger: - platform: state entity_id: - input_boolean.p_heater_man_value from: "on" to: "off" condition: - condition: state entity_id: input_boolean.p_heater_man_switch state: "on" - condition: device type: is_on device_id: c557badbda409c3f96d4f209ba570593 entity_id: switch.shelly1 domain: switch action: - type: turn_off device_id: c557badbda409c3f96d4f209ba570593 entity_id: switch.shelly1 domain: switch mode: single
 

Zurzeit aktive Besucher

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
5.438
Beiträge
53.747
Mitglieder
5.235
Neuestes Mitglied
MichaelS
Zurück
Oben