- automation heating_pump_helpers: - id: heating_pump_activate_partymode_with_solar_power alias: Wärmepumpe Partymodus aktivieren bei Stromüberschuss description: Wenn genügend Strom von der PV kommt und die Heizung aktiv ist, Partymodus (erhöhte Raumtemperatur) aktivieren triggers: - trigger: numeric_state entity_id: - sensor.rct_power_storage_grid_power below: -4000 for: hours: 0 minutes: 5 seconds: 0 conditions: - condition: numeric_state entity_id: sensor.energy_production_today_remaining_total above: 30 - condition: state entity_id: binary_sensor.heating_pump_heating_mode state: 'on' actions: - action: select.select_option metadata: {} data: option: Heizen+WW+Party target: entity_id: select.mosquitto_broker_betriebsart mode: single - id: heating_pump_deactivate_partymode_without_solar_power alias: Wärmepumpe Partymodus deaktivieren bei Stromknappheit description: Den aktivierten Partymodus der Wärmepumpe deaktivieren, wenn am restlichen Tag weniger als 20 kWh Produktion erwartet werden triggers: - trigger: numeric_state entity_id: - sensor.energy_production_today_remaining_total below: 20 conditions: - condition: state entity_id: binary_sensor.heating_pump_party_mode state: 'on' actions: - action: select.select_option metadata: {} data: option: Heizen+WW target: entity_id: select.mosquitto_broker_betriebsart mode: single - id: heating_pump_deactivate_hot_water alias: Einmal Warmwasseraufbereitung beenden, wenn Zieltemperatur erreicht description: Sobald die eingestellte Zieltemperatur erreicht wurde, Aufbereitung stoppen triggers: - trigger: numeric_state entity_id: - sensor.mosquitto_broker_warmwassertemperatur_oben above: number.mosquitto_broker_warmwassersolltemperatur_2 conditions: - condition: state entity_id: switch.mosquitto_broker_einmal_ww_bereitung state: 'on' actions: - action: switch.turn_off metadata: {} data: {} target: entity_id: switch.mosquitto_broker_einmal_ww_bereitung mode: single - id: heating_pump_activate_hot_water alias: Wärmepumpe einmal Warmwasseraufbereitung im Party Modus aktivieren description: Um 13:30 Uhr Warmwasseraufbereitung starten, wenn der Tank unter 40 Grad warm ist triggers: - trigger: time at: '13:30:00' conditions: - condition: numeric_state entity_id: sensor.mosquitto_broker_warmwassertemperatur_oben below: 40 - condition: state entity_id: binary_sensor.heating_pump_party_mode state: 'on' - condition: state entity_id: binary_sensor.mosquitto_broker_status_warmwasserventil state: 'off' actions: - action: switch.turn_on metadata: {} data: {} target: entity_id: switch.mosquitto_broker_einmal_ww_bereitung mode: single - template: - binary_sensor: - unique_id: waschmaschine name: Waschmaschine state: '' device_class: running icon: mdi:washing-machine - unique_id: geschirrspulmaschine name: Geschirrspülmaschine state: '' device_class: running icon: mdi:dishwasher automation power_plug_helpers: - id: waschmaschine_statusbenachrichtigung alias: Waschmaschine Statusbenachrichtigung description: '' use_blueprint: path: sbyx/notify-or-do-something-when-an-appliance-like-a-dishwasher-or-washing-machine-finishes.yaml input: power_sensor: sensor.steckdose_ug_waschmaschine_power starting_threshold: 20 starting_hysteresis: 3 finishing_threshold: 50 finishing_hysteresis: 4 actions: - action: notify.kodi_t470 data: title: Waschmaschine ist fertig message: Die Waschmaschine kann geleert werden data: displaytime: 20000 icon: info - action: notify.kodi_libreelec_eg2 data: title: Waschmaschine ist fertig message: Die Waschmaschine kann geleert werden data: displaytime: 20000 icon: info - action: python_script.set_state data: entity_id: binary_sensor.waschmaschine state: 'off' pre_actions: - action: python_script.set_state data: entity_id: binary_sensor.waschmaschine state: 'on' - id: geschirrspulmaschine_statusbenachrichtigung alias: Geschirrspülmaschine Statusbenachrichtigung description: '' use_blueprint: path: sbyx/notify-or-do-something-when-an-appliance-like-a-dishwasher-or-washing-machine-finishes.yaml input: power_sensor: sensor.steckdose_eg_geschirrspuhler_power starting_threshold: 10 starting_hysteresis: 3 finishing_threshold: 2 finishing_hysteresis: 2 actions: - action: notify.kodi_t470 data: title: Geschirrspüler ist fertig message: Die Geschirrspülmaschine kann geleert werden data: displaytime: 20000 icon: info - action: notify.kodi_libreelec_eg2 data: title: Geschirrspüler ist fertig message: Die Geschirrspülmaschine kann geleert werden data: displaytime: 20000 icon: info - action: python_script.set_state data: entity_id: binary_sensor.geschirrspulmaschine state: 'off' pre_actions: - action: python_script.set_state data: entity_id: binary_sensor.geschirrspulmaschine state: 'on' - id: wasser_im_keller_technikraum alias: Wasser im Keller Technikraum description: Der Wassersensor meldet Wasser im Technikraum triggers: - trigger: state entity_id: - binary_sensor.wassersensor_ug_technikraum_water_leak to: 'on' actions: - action: switch.turn_off target: entity_id: switch.steckdose_ug_waschmaschine - action: notify.kodi_t470 data: title: Wasser im Keller message: Der Wassersensor im Technikraum meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelecmanfred data: title: Wasser im Keller message: Der Wassersensor im Technikraum meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelec_eg2 data: title: Wasser im Keller message: Der Wassersensor im Technikraum meldet Wasser! data: displaytime: 50000 icon: error - action: button.press target: entity_id: button.anrufhawasserugtechnik - id: wasser_im_keller_kellerraum alias: Wasser im Keller Kellerraum description: Der Wassersensor meldet Wasser im Kellerraum triggers: - trigger: state entity_id: - binary_sensor.wassersensor_ug_kellerraum_water_leak to: 'on' actions: - action: notify.kodi_t470 data: title: Wasser im Keller message: Der Wassersensor im Kellerraum meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelecmanfred data: title: Wasser im Keller message: Der Wassersensor im Kellerraum meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelec_eg2 data: title: Wasser im Keller message: Der Wassersensor im Kellerraum meldet Wasser! data: displaytime: 50000 icon: error - action: button.press target: entity_id: button.anrufhawasserugkeller - id: wasser_im_keller_fittnesraum alias: Wasser im Keller Fittnesraum description: Der Wassersensor meldet Wasser im Fittnesraum triggers: - trigger: state entity_id: - binary_sensor.wassersensor_ug_fittnesraum_water_leak to: 'on' actions: - action: switch.turn_off target: entity_id: switch.steckdose_ug_hauswasserwerk - action: notify.kodi_t470 data: title: Wasser im Keller message: Der Wassersensor im Fittnesraum meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelecmanfred data: title: Wasser im Keller message: Der Wassersensor im Fittnesraum meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelec_eg2 data: title: Wasser im Keller message: Der Wassersensor im Fittnesraum meldet Wasser! data: displaytime: 50000 icon: error - action: button.press target: entity_id: button.anrufhawasserugfitness - id: wasser_im_keller_werkstatt alias: Wasser im Keller Werkstatt description: Der Wassersensor meldet Wasser im Werkstatt triggers: - trigger: state entity_id: - binary_sensor.wassersensor_ug_werkstatt_water_leak to: 'on' actions: - action: notify.kodi_t470 data: title: Wasser im Keller message: Der Wassersensor im Werkstatt meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelecmanfred data: title: Wasser im Keller message: Der Wassersensor im Werkstatt meldet Wasser! data: displaytime: 50000 icon: error - action: notify.kodi_libreelec_eg2 data: title: Wasser im Keller message: Der Wassersensor im Werkstatt meldet Wasser! data: displaytime: 50000 icon: error - action: button.press target: entity_id: button.anrufhawasserugwerkstatt - id: rauch_im_keller_fittnesraum alias: Rauch im Keller Fittnesraum description: Der Rauchmelder meldet Rauch im Fittnesraum triggers: - trigger: state entity_id: - binary_sensor.rauchmelder_ug_fittnesraum_smoke to: 'on' actions: - action: notify.kodi_t470 data: title: Rauch im Keller message: Der Rauchmelder meldet Rauch im Fittnesraum! data: displaytime: 50000 icon: error - action: notify.kodi_libreelecmanfred data: title: Rauch im Keller message: Der Rauchmelder meldet Rauch im Fittnesraum! data: displaytime: 50000 icon: error - action: notify.kodi_libreelec_eg2 data: title: Rauch im Keller message: Der Rauchmelder meldet Rauch im Fittnesraum! data: displaytime: 50000 icon: error - action: button.press target: entity_id: button.anrufharauchugfitness - template: - sensor: - unique_id: calculated_maximum_battery_soc name: Calculated maximum battery soc icon: mdi:battery state_class: measurement unit_of_measurement: '%' state: "{% if is_state(\"sun.sun\", \"above_horizon\") -%}\n {% set epr_today\ \ = (states('sensor.energy_production_today_remaining_total')|float(0.0))\ \ %}\n {% set ep_tomorrow = (states('sensor.energy_production_tomorrow_total')|float(0.0))\ \ %}\n {% set heating_on = states(\"binary_sensor.heating_pump_heating_mode\"\ ) | bool %}\n {% set before_noon_minus_one = ((states('sensor.sun_next_noon')\ \ | as_datetime() | as_local()).day == now().day) and (now() + timedelta(\ \ hours = 1 )) < (states('sensor.sun_next_noon') | as_datetime() | as_local())\ \ %}\n {% set after_sunrise = (((states('sensor.sun_next_rising') | as_datetime()\ \ | as_local()).day == now().day) and (now() < (states('sensor.sun_next_rising'))\ \ | as_datetime() | as_local()) | bool) == false %}\n {% set hold_phase =\ \ after_sunrise and before_noon_minus_one %}\n {% set temperature = (states('sensor.mosquitto_broker_aussentemperatur')|float(0.0))\ \ %}\n {% if ((epr_today > 40 and heating_on) or (epr_today > 20 and heating_on\ \ == false)) and hold_phase -%}\n 27\n {%- elif ((epr_today > 30 and\ \ heating_on) or (epr_today > 15 and heating_on == false)) and hold_phase\ \ -%}\n 37\n {%- elif ((epr_today > 20 and heating_on) or (epr_today\ \ > 10 and heating_on == false)) and hold_phase -%}\n 47\n {%- elif\ \ ((epr_today > 15 and heating_on) or (epr_today > 7 and heating_on == false))\ \ and hold_phase -%}\n 57\n {%- elif ((epr_today > 10 and heating_on)\ \ or (epr_today > 5 and heating_on == false)) and hold_phase -%}\n 67\n\ \ {%- elif ep_tomorrow > 40 and (heating_on == false or temperature > 15)\ \ -%}\n 77\n {%- elif ep_tomorrow > 20 and (heating_on == false or temperature\ \ > 10) -%}\n 87\n {%- else -%}\n 97\n {%- endif %}\n{%- else\ \ -%}\n {{ states('sensor.calculated_maximum_battery_soc') }}\n{%- endif\ \ %}" availability: '{{ has_value(''sensor.energy_production_today_remaining_total'') and has_value(''sensor.energy_production_tomorrow_total'') and has_value(''binary_sensor.heating_pump_heating_mode'') and has_value(''sensor.sun_next_noon'') and has_value(''sensor.sun_next_rising'') and has_value(''sensor.mosquitto_broker_aussentemperatur'') }}' input_number: rct_power_storage_battery_maximum_state_of_charge: name: Input RCT Power Storage Battery Maximum SOC icon: mdi:battery-charging-wireless-90 unit_of_measurement: '%' mode: slider initial: 97 min: 7 max: 97 step: 1 rct_power_storage_battery_minimum_state_of_charge: name: Input RCT Power Storage Battery Minimum SOC icon: mdi:battery-charging-wireless-10 unit_of_measurement: '%' mode: slider initial: 7 min: 7 max: 97 step: 1 automation rct_soc_min_max: - id: pv_battery_calculated_soc_max_to_input alias: RCT Power SOC Errechnet Max in Input-Feld description: Netzdienliches und Akku schonendes Laden des Akkus, errechneten Wert in entsprechendes Eingabefeld übernehmen triggers: - trigger: state entity_id: - sensor.calculated_maximum_battery_soc not_from: - unknown - unavailable not_to: - unknown - unavailable conditions: [] actions: - action: input_number.set_value metadata: {} data: value: '{{ states(''sensor.calculated_maximum_battery_soc'')|float(97.0) }}' target: entity_id: input_number.rct_power_storage_battery_maximum_state_of_charge mode: single - id: pv_battery_soc_max_to_input alias: RCT Power SOC Max vom Wechselrichter in Input-Feld description: Eingabefeld mit SOC Max Vorgabewert befüllen, wenn dieser sich ändert triggers: - trigger: state entity_id: - sensor.rct_power_storage_battery_maximum_state_of_charge not_from: - unknown - unavailable not_to: - unknown - unavailable conditions: [] actions: - action: input_number.set_value metadata: {} data: value: '{{ states(''sensor.rct_power_storage_battery_maximum_state_of_charge'')|float(97.0) }}' target: entity_id: input_number.rct_power_storage_battery_maximum_state_of_charge mode: single - id: pv_battery_soc_max_input_to_inverter alias: Eingabe an RCT Power SOC Max des Wechselrichters senden description: Den maximalen Ladestand der PV-Batterie anpassen triggers: - trigger: state entity_id: - input_number.rct_power_storage_battery_maximum_state_of_charge for: hours: 0 minutes: 0 seconds: 3 conditions: [] actions: - action: pyscript.rct_ha_call data: parameter: power_mng.soc_max value: '{{ states(''input_number.rct_power_storage_battery_maximum_state_of_charge'')|float(97.0)|multiply(0.01)|round(2) }}' mode: single - id: pv_battery_soc_min_to_input alias: RCT Power SOC Min vom Wechselrichter in Input-Feld description: Eingabefeld mit SOC Min Vorgabewert befüllen, wenn dieser sich ändert triggers: - trigger: state entity_id: - sensor.rct_power_storage_battery_minimum_state_of_charge_2 not_from: - unknown - unavailable not_to: - unknown - unavailable conditions: [] actions: - action: input_number.set_value metadata: {} data: value: '{{ states(''sensor.rct_power_storage_battery_minimum_state_of_charge_2'')|float(7.0) }}' target: entity_id: input_number.rct_power_storage_battery_minimum_state_of_charge mode: single - id: pv_battery_soc_min_input_to_inverter alias: Eingabe an RCT Power SOC Min des Wechselrichters senden description: Den minimalen Ladestand der PV-Batterie anpassen triggers: - trigger: state entity_id: - input_number.rct_power_storage_battery_minimum_state_of_charge for: hours: 0 minutes: 0 seconds: 3 conditions: [] actions: - action: pyscript.rct_ha_call data: action: set parameter: power_mng.soc_min value: '{{ states(''input_number.rct_power_storage_battery_minimum_state_of_charge'')|float(7.0)|multiply(0.01)|round(2) }}' mode: single - id: pv_battery_grid_power_enable alias: Batterie laden mit Energie vom SMA Wechselrichter erlauben description: Wenn der RCT Wechselrichter zu wenig produziert, um die Battierie zu laden, SMA dazu schalten triggers: - trigger: sun event: sunrise conditions: [] actions: - action: pyscript.rct_ha_call data: action: set parameter: power_mng.use_grid_power_enable value: '{% if (states(''sensor.energy_production_today_remaining'')|float(0.0)) < 15 -%}true{%- else -%}false{%- endif %}' mode: single - id: pv_batery_start_unload_to_grid_on_calibration alias: RCT Batterie Kalibrierung, Entladen ins Netz starten description: RCT Batterie Kalibrierung, vor Sonnenaufgang Entladen ins Netz starten um die Batterie leer zu bekommen triggers: - trigger: sun event: sunrise offset: -00:30:00 conditions: - condition: state entity_id: sensor.rct_power_storage_battery_status state: discharging actions: - action: pyscript.rct_ha_call data: action: set parameter: p_rec_lim[1] value: '{{ min(4000, ((states(''sensor.rct_battery_capacity_unload_calibration'')|float(0.0)) * (states(''sensor.rct_power_storage_battery_state_of_charge'')|float(0.0)))|multiply(10)|round(0)) }}' mode: single - id: pv_batery_stop_unload_to_grid_on_calibration alias: RCT Batterie Kalibrierungsende, Entladen ins Netz stoppen description: RCT Batterie Kalibrierung, zum Ende der Entladung bei Kalibrierung, Entladen ins Netz stoppen triggers: - trigger: state entity_id: - sensor.rct_power_storage_battery_status from: discharging to: normal conditions: [] actions: - action: pyscript.rct_ha_call data: action: set parameter: p_rec_lim[1] value: 0 mode: single - template: - sensor: - unique_id: power_consumption name: Power Consumption icon: mdi:home-lightning-bolt state_class: measurement unit_of_measurement: kW state: '{{ ((states(''sensor.rct_power_storage_external_generator_s0_power'')|float(0.0)) + (states(''sensor.rct_power_storage_grid_power'')|float(0.0)) + (states(''sensor.rct_power_storage_inverter_ac_power'')|float(0.0)))|multiply(0.001)|round(3) }}' availability: '{{ has_value(''sensor.rct_power_storage_external_generator_s0_power'') and has_value(''sensor.rct_power_storage_grid_power'') and has_value(''sensor.rct_power_storage_inverter_ac_power'') }}' - unique_id: installed_pv_wr_sum name: Installed PV WR Sum icon: mdi:solar-power state_class: measurement unit_of_measurement: kW state: '{{ ((states(''sensor.installed_pv_wr1'')|float(6.0)) + (states(''sensor.installed_pv_wr2'')|float(20.0)))|round(3) }}' availability: '{{ has_value(''sensor.installed_pv_wr1'') and has_value(''sensor.installed_pv_wr2'') }}' - unique_id: solar_power_generators_sum name: Solar Power Generators Sum icon: mdi:solar-power state_class: measurement unit_of_measurement: W state: '{{ ((states(''sensor.rct_power_storage_all_generators_power'')|float(0.0)) + (states(''sensor.stp_20_50_pv_power_a'')|float(0.0)) + (states(''sensor.stp_20_50_pv_power_b'')|float(0.0)) + (states(''sensor.stp_20_50_pv_power_c'')|float(0.0)))|round(0) }}' availability: '{{ has_value(''sensor.rct_power_storage_all_generators_power'') and has_value(''sensor.stp_20_50_pv_power_a'') and has_value(''sensor.stp_20_50_pv_power_b'') and has_value(''sensor.stp_20_50_pv_power_c'') }}' - unique_id: solar_power_grid_limit_soft name: Solar Power Grid Limit Soft icon: mdi:solar-power state_class: measurement unit_of_measurement: kW state: "{% set solar_grid_limit = states('input_number.solar_grid_limit')|float(100.0)\ \ %} {% set calc_limit = (((states('sensor.installed_pv_size')|float(29.645))\ \ * solar_grid_limit / 100) + (((states('sensor.power_consumption')|float(0.0))\ \ -0.05)|round(1))) %} {% set wr_limit = states('sensor.installed_pv_wr_sum')|float(26.0)\ \ %} {% if solar_grid_limit == 100 -%}\n {{ wr_limit | round(3) }}\n{%- else\ \ -%}\n {{ max(0, min(wr_limit, calc_limit)) | round(3) }}\n{%- endif %}" availability: '{{ has_value(''sensor.installed_pv_size'') and has_value(''sensor.power_consumption'') and has_value(''sensor.installed_pv_wr_sum'') }}' - unique_id: solar_power_grid_limit_soft_sma name: Solar Power Grid Limit Soft SMA icon: mdi:solar-power state_class: measurement unit_of_measurement: kW state: '{{ max(0, min((states(''sensor.solar_power_grid_limit_soft'')|float(26.0)), (states(''sensor.installed_pv_wr2'')|float(20.0)))) | round(3) }}' availability: '{{ has_value(''sensor.solar_power_grid_limit_soft'') and has_value(''sensor.installed_pv_wr2'') }}' input_number: solar_grid_limit: name: Einspeisebegrenzung icon: mdi:transmission-tower-import unit_of_measurement: '%' mode: slider initial: 100 min: 0 max: 100 step: 1 automation grid_power_limitation: - id: rct_converter_set_grid_power_limit alias: RCT Wechselrichter Limit setzen description: Setze das prozentuale Einspeiselimit des RCT Wechselrichters triggers: - trigger: state entity_id: - input_number.solar_grid_limit not_from: - unknown - unavailable not_to: - unknown - unavailable for: hours: 0 minutes: 0 seconds: 3 conditions: [] actions: - action: pyscript.rct_ha_call data: action: set parameter: buf_v_control.power_reduction value: '{{ states(''input_number.solar_grid_limit'')|float(100.0)|multiply(0.01)|round(2) }}' mode: single - id: sma_converter_set_grid_power_limit alias: SMA Wechselrichter Limit setzen description: Setze das absoluten Einspeiselimits des SMA Wechselrichters in Watt triggers: - trigger: state entity_id: - sensor.solar_power_grid_limit_soft_sma not_from: - unknown - unavailable not_to: - unknown - unavailable conditions: [] actions: - action: pysmaplus.set_value metadata: {} data: entity_id: sensor.stp_20_50_inverter_power_limit value: '{{ states(''sensor.solar_power_grid_limit_soft_sma'')|float(20.0)|multiply(1000)|round(0) }}' mode: single