Anker E1600 Automationen komplett

Hallo zusammen,

ich möchte hier gerne meine Automationen als Blueprint für die Anker E1600 in Verbindung mit einem Smartmeter vorstellen und ich bin offen für jede Verbesserung.
Die Blueprints habe ich grundsätzlich erst mal mit ChatGPT erstellt, dann weiter verfeinert, und so wie ich das sehe fast schon perfektioniert :-).

Die Automationen bestehen aus 2 Blueprints.

Leistungsabgabe Automation (Blueprint):
Schaltet die Leistungsabgabe abhängig von der Solarleistung ein/aus.
Nutzt separate Schwellwerte und Zeiten für EIN und AUS.

Minimal Einspeisung Automation (Blueprint)
Regelung der Einspeisung mit zwei konfigurierbaren Zeitfenstern (mitternachtsicher)
(Start/Ende, Zielwert, Min/Max-Leistung, einstellbare Schrittweite und Hysterese

Mindestladung Automation (noch eine Automation)
Überwacht die Mindestladung und schaltet die Leistungsabgabe nach Unterschreitung der Mindestladung ab, bzw nach Überschreitung wieder ein (Für die Wintermonate ganz praktisch)

Meine Hardware: Anker E1600 1gen, Anker MI80 BLE, Shelly Pro 3EM, Shelly PM Mini Gen 3.

Besteht Interesse an den Blueprints, so stelle ich sie hier sehr gerne zur freien Verwendung ein.

Nachtrag: Ich habe jetzt ein paar Screenshots eingefügt, die die Blueprints sowie das Dashboard für die Automationen anzeigen

1 „Gefällt mir“

Kurze Frage… wie umgehst Du das Delay der Daten vom EM3 zur Anker? Was passiert bei Netzwerkabbrüchen? Ich habe meine Anker aus diesen Gründen extra mit dem SM von Ankergekoppelt, da die direkt kommunizieren und innerhalb von Millisekunden nachregelt.

Hi, ich habe bisher die obligatorische 1 Minute in kauf genommen. Die Nachregelung erfolgt damit immer erst 1 Minute zeitverzögert.

Soweit mir bekannt ist, kann die E1600 auch garnicht schneller reagieren. Kann sie etwa doch?

Die tatsächliche eingespeiste Leistung nehme ich auch nicht vom WR, ich messe das direkt mit dem zwischengeschalteten PM Mini gen3.

wie regelst du nach? Wie sieht das bei dir aus?

Vielen Dank für die Antwort.
Ich messe auch mit einem PM1 um die Wechslerverluste zu berechnen (aktuell ca. 8-10%)
Ich habe tatsächlich kein Delay beim Nachregeln, vermutlich durch das SM von Anker.

Welche Solarbank hast du? SM von Anker arbeitet mit der einfachen E1600 nicht soweit ich weiß.

Was macht HA konkret bei dir?

habe genau das gleiche setup wäre daran interessiert, die alte kann ja so nicht mit dem shelly kommunizieren

Hier habe ich noch die Automation zur automatischen Leistungsabgabe als Blueprint

blueprint:
  name: Anker E1600 Leistungsabgabe Automatik mit Hysterese & Zeitsteuerung v5
  description:
    Schaltet die Leistungsabgabe der Solarbank abhängig von der Solarleistung ein/aus.<br>
    Nutzt separate Schwellwerte und Zeiten für EIN und AUS, um Flattern zu vermeiden.
  domain: automation
  input:
    solar_sensor:
      name: Solarleistung Sensor
      selector:
        entity:
          filter:
            domain: sensor
    switch_device:
      name: Schalter für Leistungsabgabe
      selector:
        entity:
          filter:
            domain: switch
    number_device:
      name: Ladeprioritätslimit
      selector:
        entity:
          filter:
            domain: number
    low_threshold:
      name: Unterer Schwellwert (AUS)
      default: 50
      selector:
        number:
          min: 0
          max: 800
          step: 50
          unit_of_measurement: W
    high_threshold:
      name: Oberer Schwellwert (EIN)
      default: 150
      selector:
        number:
          min: 0
          max: 800
          step: 50
          unit_of_measurement: W
    off_duration:
      name: Dauer für AUS
      description: Zeit (in Minuten), die die Solarleistung UNTER dem unteren Schwellwert liegen muss, bevor ausgeschaltet wird
      default: 3
      selector:
        number:
          min: 1
          max: 10
          unit_of_measurement: min
    on_duration:
      name: Dauer für EIN
      description: Zeit (in Minuten), die die Solarleistung ÜBER dem oberen Schwellwert liegen muss, bevor eingeschaltet wird
      default: 3
      selector:
        number:
          min: 1
          max: 10
          unit_of_measurement: min
    value_to_set:
      name: Ladeprioritätswert
      description: Wert in Prozent für das Ladeprioritätslimit
      default: 50
      selector:
        number:
          min: 10
          max: 100
          unit_of_measurement: "%"
    start_time:
      name: Startzeit
      default: "08:00:00"
      selector:
        time:
    end_time:
      name: Endzeit
      default: "19:00:00"
      selector:
        time:


triggers:
  - trigger: numeric_state
    entity_id: !input solar_sensor
    below: !input low_threshold
    for:
      minutes: !input off_duration
  - trigger: numeric_state
    entity_id: !input solar_sensor
    above: !input high_threshold
    for:
      minutes: !input on_duration

  - trigger: time_pattern
    minutes: "/2"

condition:
  - condition: time
    after: !input start_time
    before: !input end_time

action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: !input solar_sensor
            below: !input low_threshold
          - condition: state
            entity_id: !input switch_device
            state: 'on'
        sequence:
          - action: switch.turn_off
            target:
              entity_id: !input switch_device
      - conditions:
          - condition: numeric_state
            entity_id: !input solar_sensor
            above: !input high_threshold
          - condition: state
            entity_id: !input switch_device
            state: 'off'
        sequence:
          - action: switch.turn_on
            target:
              entity_id: !input switch_device
  - action: number.set_value
    target:
      entity_id: !input number_device
    data:
      value: !input value_to_set
trace:
  stored_traces: 20
mode: restart

Ich arbeite mit Studio Code Server. Die Blueprints habe ich hier abgelegt: /blueprints/automation/anker.

Minimaleinspeisung:

blueprint:
  name: "Anker E1600 Minimal-Einspeisung + Smartmeter (Shelly 3EM) mit 2 Zeitfenstern v4"
  description: >
    Regelung der Einspeisung mit zwei konfigurierbaren Zeitfenstern (mitternachtsicher)
    <br>(Start/Ende, Zielwert, Min/Max-Leistung, einstellbare Schrittweite und Hysterese
  domain: automation
  input:
    shelly_power_sensor:
      name: Shelly Leistung (W)
      selector:
        entity:
          filter:
            domain: sensor
            device_class: power

    anker_number_entity:
      name: Anker Einspeisevorgabe
      selector:
        entity:
          filter:
            domain: number

    # Fenster 1
    zielwert_input_1:
      name: Zielwert Netzbezug Fenster 1
      selector:
        entity:
          filter:
            domain: input_number
    min_power_input_1:
      name: Minimalleistung Fenster 1
      selector:
        entity:
          filter:
            domain: input_number
    max_power_input_1:
      name: Maximalleistung Fenster 1
      selector:
        entity:
          filter:
            domain: input_number
    start_time_input_1:
      name: Startzeit Fenster 1
      selector:
        entity:
          filter:
            domain: input_datetime
    end_time_input_1:
      name: Endzeit Fenster 1
      selector:
        entity:
          filter:
            domain: input_datetime

    # Fenster 2
    zielwert_input_2:
      name: Zielwert Netzbezug Fenster 2
      selector:
        entity:
          filter:
            domain: input_number
    min_power_input_2:
      name: Minimalleistung Fenster 2
      selector:
        entity:
          filter:
            domain: input_number
    max_power_input_2:
      name: Maximalleistung Fenster 2
      selector:
        entity:
          filter:
            domain: input_number
    start_time_input_2:
      name: Startzeit Fenster 2
      selector:
        entity:
          filter:
            domain: input_datetime
    end_time_input_2:
      name: Endzeit Fenster 2
      selector:
        entity:
          filter:
            domain: input_datetime

    step_size:
      name: Schrittweite (W)
      default: 50
      selector:
        number:
          min: 10
          max: 200
          step: 10

    hysteresis:
      name: Hysterese (W)
      default: 20
      selector:
        number:
          min: 5
          max: 100
          step: 5

mode: single

triggers:
  - trigger: time_pattern
    minutes: "/1"

action:
  - variables:
      shelly_entity: !input shelly_power_sensor
      anker_entity: !input anker_number_entity
      step: !input step_size
      hysteresis: !input hysteresis

      zielwert_entity_1: !input zielwert_input_1
      min_power_entity_1: !input min_power_input_1
      max_power_entity_1: !input max_power_input_1
      start_time_entity_1: !input start_time_input_1
      end_time_entity_1: !input end_time_input_1

      zielwert_entity_2: !input zielwert_input_2
      min_power_entity_2: !input min_power_input_2
      max_power_entity_2: !input max_power_input_2
      start_time_entity_2: !input start_time_input_2
      end_time_entity_2: !input end_time_input_2

      grid_power: "{{ states(shelly_entity) | float(0) }}"
      current_set: "{{ states(anker_entity) | float(0) }}"
      nowm: "{{ now().hour * 60 + now().minute }}"

      target_1: "{{ states(zielwert_entity_1) | float(30) }}"
      sb_min_1: "{{ states(min_power_entity_1) | float(100) }}"
      sb_max_1: "{{ states(max_power_entity_1) | float(800) }}"
      start_1: "{{ states(start_time_entity_1) | default('00:00') }}"
      end_1: "{{ states(end_time_entity_1) | default('00:00') }}"

      target_2: "{{ states(zielwert_entity_2) | float(30) }}"
      sb_min_2: "{{ states(min_power_entity_2) | float(100) }}"
      sb_max_2: "{{ states(max_power_entity_2) | float(800) }}"
      start_2: "{{ states(start_time_entity_2) | default('00:00') }}"
      end_2: "{{ states(end_time_entity_2) | default('00:00') }}"

      # Funktion, um zu prüfen, ob aktueller Zeitpunkt in einem Fenster liegt
      in_window_1: >
        {% set s = start_1.split(':') %}
        {% set e = end_1.split(':') %}
        {% set start = (s[0]|int) * 60 + (s[1]|int) %}
        {% set end = (e[0]|int) * 60 + (e[1]|int) %}
        {% if start <= end %} {{ start <= nowm <= end }} {% else %} {{ nowm >= start or nowm <= end }} {% endif %}

      in_window_2: >
        {% set s = start_2.split(':') %}
        {% set e = end_2.split(':') %}
        {% set start = (s[0]|int) * 60 + (s[1]|int) %}
        {% set end = (e[0]|int) * 60 + (e[1]|int) %}
        {% if start <= end %} {{ start <= nowm <= end }} {% else %} {{ nowm >= start or nowm <= end }} {% endif %}

  - choose:
      # Fenster 1 aktiv
      - conditions:
          - condition: template
            value_template: "{{ in_window_1 }}"
        sequence:
          - variables:
              delta: "{{ (target_1 - grid_power) | round(0) }}"
          - choose:
              - conditions: "{{ delta < -hysteresis }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: "{{ anker_entity }}"
                    data:
                      value: "{{ [sb_min_1, [sb_max_1, current_set + step] | min] | max }}"
              - conditions: "{{ delta > hysteresis }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: "{{ anker_entity }}"
                    data:
                      value: "{{ [sb_min_1, current_set - step] | max }}"

      # Fenster 2 aktiv
      - conditions:
          - condition: template
            value_template: "{{ in_window_2 }}"
        sequence:
          - variables:
              delta: "{{ (target_2 - grid_power) | round(0) }}"
          - choose:
              - conditions: "{{ delta < -hysteresis }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: "{{ anker_entity }}"
                    data:
                      value: "{{ [sb_min_2, [sb_max_2, current_set + step] | min] | max }}"
              - conditions: "{{ delta > hysteresis }}"
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: "{{ anker_entity }}"
                    data:
                      value: "{{ [sb_min_2, current_set - step] | max }}"

      # außerhalb aller Fenster → Minimalleistung Fenster 1
      - conditions: []
        sequence:
          - action: number.set_value
            target:
              entity_id: "{{ anker_entity }}"
            data:
              value: "{{ sb_min_1 }}"

trace:
  stored_traces: 20

Einträge für input_number habe ich aus der configuration.yaml ausgelagert in input_number.yaml

# Anker E1600 Minimaleinspeisung
# Fenster 1
  zielwert_1:
    name: Zielwert Netzbezug Fenster 1
    min: 0
    max: 800
    step: 50
    unit_of_measurement: W
    icon: mdi:target

  min_power_1:
    name: Minimalleistung Fenster 1
    min: 100
    max: 800
    step: 50
    unit_of_measurement: W
    icon: mdi:power-sleep

  max_power_1:
    name: Maximalleistung Fenster 1
    min: 100
    max: 800
    step: 50
    unit_of_measurement: W
    icon: mdi:solar-power

  # Fenster 2
  zielwert_2:
    name: Zielwert Netzbezug Fenster 2
    min: 0
    max: 800
    step: 50
    unit_of_measurement: W
    icon: mdi:target

  min_power_2:
    name: Minimalleistung Fenster 2
    min: 100
    max: 800
    step: 50
    unit_of_measurement: W
    icon: mdi:power-sleep

  max_power_2:
    name: Maximalleistung Fenster 2
    min: 100
    max: 800
    step: 50
    unit_of_measurement: W
    icon: mdi:solar-power

input_datetime ebenfalls ausgelagert in input_datetime.yaml

# Anker E1600 Minimaleinspeisung Zeitangaben
  # Fenster 1
  start_time_1:
    name: Startzeit Fenster 1
    has_date: false
    has_time: true

  end_time_1:
    name: Endzeit Fenster 1
    has_date: false
    has_time: true

  # Fenster 2
  start_time_2:
    name: Startzeit Fenster 2
    has_date: false
    has_time: true

  end_time_2:
    name: Endzeit Fenster 2
    has_date: false
    has_time: true

Zum Schluss noch die Netzleistung Delta, ausgelagert in templates.yaml

  - sensor:
    - name: "Netzleistung Delta"
      unit_of_measurement: "W"
      state_class: "measurement"
      state: >
          {% set grid = states('sensor.shellypro3em_total_active_power') | float(0) %}
          {% set target = states('input_number.netzbezug_zielwert') | float(30) %}
          {{ (grid - target) | round(0) }}

Damit die ausgelagerten yaml´s von HA geladen werden, trägst du in die configuration.yaml diese Zeilen ein:

template: !include templates.yaml
input_number: !include input_number.yaml
input_datetime: !include input_datetime.yaml

Nach einem schnellen Neuladen von HA sollten die Blueprints sichtbar sein und du kannst sie einfach konfigurieren.

Fast vergessen, hier das Dashboard, aufgeteilt in Tag / Nacht, Übersicht und Verlauf :slight_smile:

type: vertical-stack
cards:
  - type: entities
    title: Minimaleinspeisung Tag
    show_header_toggle: false
    entities:
      - entity: input_number.zielwert_1
        name: Ziel-Netzbezug
      - entity: input_number.min_power_1
        name: Minimalleistung
      - entity: input_number.max_power_1
        name: Maximalleistung
      - entity: input_datetime.start_time_1
        name: Startzeit
      - entity: input_datetime.end_time_1
        name: Endzeit
    state_color: false

type: vertical-stack
cards:
  - type: entities
    title: Minimaleinspeisung Nacht
    show_header_toggle: false
    entities:
      - entity: input_number.zielwert_2
        name: Ziel-Netzbezug
      - entity: input_number.min_power_2
        name: Minimalleistung
      - entity: input_number.max_power_2
        name: Maximalleistung
      - entity: input_datetime.start_time_2
        name: Startzeit
      - entity: input_datetime.end_time_2
        name: Endzeit
    state_color: false

type: vertical-stack
cards:
  - type: entities
    title: Übersicht Minimal-Einspeisung
    entities:
      - entity: sensor.shellypro3em_total_active_power
        name: Netzleistung (W)
      - entity: sensor.netzleistung_delta
      - entity: sensor.netzstatus_richtung
    state_color: false
  - type: custom:mini-graph-card
    name: Verlauf Einspeisung / Netz
    entities:
      - entity: sensor.shellypro3em_total_active_power
        name: Netzleistung
        color: "#1f77b4"
      - entity: number.e1600_system_einspeisevorgabe
        name: E1600 Vorgabe
        color: "#ff7f0e"
      - entity: sensor.netzleistung_delta
        color: "#2ca02c"
    hours_to_show: 12
    points_per_hour: 6
    show:
      extrema: true
      labels: true
      state: true

1 „Gefällt mir“

In der Automatisierung für die automatische Leistungsabgabe habe ich gerade einen Fehler entdeckt. Im Script war ein Trigger, der alle 2 Minuten überprüft, ob die Solarleistung über dem eingestellten Wert liegt. Hier das neue Script, das die eingestellte Zeit überprüft, nicht die im Script hinterlegte Zeit. - War mein Fehler

blueprint:
  name: Anker E1600 Leistungsabgabe Automatik mit Hysterese & Zeitsteuerung v5
  description:
    Schaltet die Leistungsabgabe der Solarbank abhängig von der Solarleistung ein/aus.<br>
    Nutzt separate Schwellwerte und Zeiten für EIN und AUS, um Flattern zu vermeiden.
  domain: automation
  input:
    solar_sensor:
      name: Solarleistung Sensor
      selector:
        entity:
          filter:
            domain: sensor
    switch_device:
      name: Schalter für Leistungsabgabe
      selector:
        entity:
          filter:
            domain: switch
    number_device:
      name: Ladeprioritätslimit
      selector:
        entity:
          filter:
            domain: number
    low_threshold:
      name: Unterer Schwellwert (AUS)
      default: 50
      selector:
        number:
          min: 0
          max: 800
          step: 50
          unit_of_measurement: W
    high_threshold:
      name: Oberer Schwellwert (EIN)
      default: 150
      selector:
        number:
          min: 0
          max: 800
          step: 50
          unit_of_measurement: W
    off_duration:
      name: Dauer für AUS
      description: Zeit (in Minuten), die die Solarleistung UNTER dem unteren Schwellwert liegen muss, bevor ausgeschaltet wird
      default: 3
      selector:
        number:
          min: 1
          max: 10
          unit_of_measurement: min
    on_duration:
      name: Dauer für EIN
      description: Zeit (in Minuten), die die Solarleistung ÜBER dem oberen Schwellwert liegen muss, bevor eingeschaltet wird
      default: 3
      selector:
        number:
          min: 1
          max: 10
          unit_of_measurement: min
    value_to_set:
      name: Ladeprioritätswert
      description: Wert in Prozent für das Ladeprioritätslimit
      default: 50
      selector:
        number:
          min: 10
          max: 100
          unit_of_measurement: "%"
    start_time:
      name: Startzeit
      default: "08:00:00"
      selector:
        time:
    end_time:
      name: Endzeit
      default: "19:00:00"
      selector:
        time:


triggers:
  - trigger: numeric_state
    entity_id: !input solar_sensor
    below: !input low_threshold
    for:
      minutes: !input off_duration
  - trigger: numeric_state
    entity_id: !input solar_sensor
    above: !input high_threshold
    for:
      minutes: !input on_duration

condition:
  - condition: time
    after: !input start_time
    before: !input end_time

action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: !input solar_sensor
            below: !input low_threshold
          - condition: state
            entity_id: !input switch_device
            state: 'on'
        sequence:
          - action: switch.turn_off
            target:
              entity_id: !input switch_device
      - conditions:
          - condition: numeric_state
            entity_id: !input solar_sensor
            above: !input high_threshold
          - condition: state
            entity_id: !input switch_device
            state: 'off'
        sequence:
          - action: switch.turn_on
            target:
              entity_id: !input switch_device
  - action: number.set_value
    target:
      entity_id: !input number_device
    data:
      value: !input value_to_set
trace:
  stored_traces: 20
mode: restart

Hallo zusammen, habe jetzt aus der Automation für die Überwachung der Mindestladung ebenfalls ein Blueprint gebastelt. Hintergrund für diese Automation ist, die Batterie in den Wintermonaten nicht unter einen bestimmten Level zu entladen.

Zur Erklärung: Die Automation schaltet die Leistungsabgabe der Anker E1600 automatisch aus, wenn der Batteriestand unter einen definierten Mindestwert fällt, und wieder ein, wenn er darüber liegt. Zeitfenster und Schwelle sind konfigurierbar.

blueprint:
  name: "Anker E1600 – Mindestladung Automatik v3"
  description: >
    Schaltet die Leistungsabgabe der Anker E1600 automatisch aus, 
    wenn der Batteriestand unter einen definierten Mindestwert fällt, 
    und wieder ein, wenn er darüber liegt. 
    Zeitfenster und Schwelle sind konfigurierbar.
  domain: automation
  author: "ChatGPT :-)"
  source_url: "https://community.home-assistant.io/"
  input:
    battery_sensor:
      name: Batteriesensor
      description: Sensor, der den Ladezustand der Anker E1600 in % angibt.
      selector:
        entity:
          filter:
            domain: sensor
    power_switch:
      name: Leistungs-Schalter
      description: Schalter der Leistungsabgabe (z. B. AC-Ausgang oder DC-Port).
      selector:
        entity:
          filter:
            domain: switch
    min_level:
      name: Mindest-Ladestand (%)
      description: Unterhalb dieses Werts wird die Leistungsabgabe deaktiviert.
      default: 10
      selector:
        number:
          min: 10
          max: 100
          unit_of_measurement: "%"
          mode: slider
    time_start:
      name: Startzeit
      description: Beginn des Überwachungszeitraums.
      default: "20:00:00"
      selector:
        time:
    time_end:
      name: Endzeit
      description: Ende des Überwachungszeitraums.
      default: "09:00:00"
      selector:
        time:

triggers:
  - trigger: time_pattern
    minutes: "/1"

condition:
  - condition: time
    after: !input time_start
    before: !input time_end

action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: !input battery_sensor
            below: !input min_level
          - condition: state
            entity_id: !input power_switch
            state: "on"
        sequence:
          - action: switch.turn_off
            target:
              entity_id: !input power_switch

      - conditions:
          - condition: numeric_state
            entity_id: !input battery_sensor
            above: !input min_level
          - condition: state
            entity_id: !input power_switch
            state: "off"
        sequence:
          - action: switch.turn_on
            target:
              entity_id: !input power_switch

mode: single

Vielen dank ich muss mir das mal genauer ansehen :slight_smile:

Hallo zusammen,

nach ein paar Monaten im Betrieb und ein paar kleineren Feinabstimmungen in den Blueprints gibts jetzt noch ein grösseres Update für die Automationen.Die Leistungsabgabe habe ich um einen “Wintermodus” erweitert. Hier passiert folgendes:Ist die Batterietemperatur zu niedrig, bzw. zu kalt (einstellbarer Wert), wird die Leistungsabgabe ab Solarleistung >0W aktiviert, ab “Normaltemperatur” (ebenfalls einstellbar) wird die Leistungsabgabe erst dann aktiviert, wenn ein Solarleistungs-Schwellwet erreicht wird.

blueprint:
  name: Anker E1600 Leistungsabgabe mit Temperatur, Hysterese & Zeitsteuerung v7
  description: >
    Schaltet die Leistungsabgabe abhängig von Solarleistung und Temperatur.
    Bei zu niedriger Temperatur wird die Leistungsabgabe priorisiert aktiviert.
    Enthält Temperatur-Hysterese, Mindestlaufzeit bei Kälte und Failsafe.
  domain: automation

  input:
    solar_sensor:
      name: Solarleistung Sensor
      selector:
        entity:
          filter:
            domain: sensor

    temperature_sensor:
      name: Temperatur Sensor
      selector:
        entity:
          filter:
            domain: sensor

    min_temperature:
      name: Mindesttemperatur (zu kalt unterhalb)
      default: 5
      selector:
        number:
          min: -20
          max: 20
          step: 1
          unit_of_measurement: "°C"

    temperature_hysteresis:
      name: Temperatur-Hysterese
      description: Rückschaltabstand für Normalbetrieb
      default: 2
      selector:
        number:
          min: 0
          max: 10
          step: 1
          unit_of_measurement: "°C"

    cold_min_on_time:
      name: Mindest-Einschaltdauer bei Kälte
      default: 10
      selector:
        number:
          min: 0
          max: 60
          step: 1
          unit_of_measurement: min

    switch_device:
      name: Schalter für Leistungsabgabe
      selector:
        entity:
          filter:
            domain: switch

    number_device:
      name: Ladeprioritätslimit
      selector:
        entity:
          filter:
            domain: number

    low_threshold:
      name: Unterer Schwellwert (AUS)
      default: 50
      selector:
        number:
          min: 0
          max: 800
          step: 10
          unit_of_measurement: W

    high_threshold:
      name: Oberer Schwellwert (EIN)
      default: 150
      selector:
        number:
          min: 0
          max: 800
          step: 10
          unit_of_measurement: W

    off_duration:
      name: Dauer für AUS
      default: 3
      selector:
        number:
          min: 1
          max: 10
          unit_of_measurement: min

    on_duration:
      name: Dauer für EIN
      default: 3
      selector:
        number:
          min: 1
          max: 10
          unit_of_measurement: min

    value_to_set:
      name: Ladeprioritätswert
      default: 50
      selector:
        number:
          min: 10
          max: 100
          step: 5
          unit_of_measurement: "%"

    start_time:
      name: Startzeit
      default: "08:00:00"
      selector:
        time:

    end_time:
      name: Endzeit
      default: "19:00:00"
      selector:
        time:

triggers:
  - trigger: numeric_state
    entity_id: !input solar_sensor
    below: !input low_threshold
    for:
      minutes: !input off_duration

  - trigger: numeric_state
    entity_id: !input solar_sensor
    above: !input high_threshold
    for:
      minutes: !input on_duration

  - trigger: numeric_state
    entity_id: !input solar_sensor
    above: 0

  - trigger: state
    entity_id: !input temperature_sensor

  - trigger: time_pattern
    minutes: "/5"

condition:
  - condition: time
    after: !input start_time
    before: !input end_time

action:
  - choose:

      # 🔥 ZU KALT → EIN erzwingen (mit Failsafe)
      - conditions:
          - condition: template
            value_template: >
              {{ states(temperature_sensor) not in ['unknown','unavailable'] }}
          - condition: numeric_state
            entity_id: !input temperature_sensor
            below: !input min_temperature
          - condition: numeric_state
            entity_id: !input solar_sensor
            above: 0
          - condition: state
            entity_id: !input switch_device
            state: "off"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: !input switch_device
          - delay:
              minutes: !input cold_min_on_time

      # ❄️ NORMALBETRIEB → AUS
      - conditions:
          - condition: template
            value_template: >
              {{ states(temperature_sensor) | float
              > (min_temperature + temperature_hysteresis) }}
          - condition: numeric_state
            entity_id: !input solar_sensor
            below: !input low_threshold
          - condition: state
            entity_id: !input switch_device
            state: "on"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: !input switch_device

      # ☀️ NORMALBETRIEB → EIN
      - conditions:
          - condition: template
            value_template: >
                {{ states(temperature_sensor) | float
                > (min_temperature + temperature_hysteresis) }}
          - condition: numeric_state
            entity_id: !input solar_sensor
            above: !input high_threshold
          - condition: state
            entity_id: !input switch_device
            state: "off"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: !input switch_device

  - service: number.set_value
    target:
      entity_id: !input number_device
    data:
      value: !input value_to_set

trace:
  stored_traces: 50