3 Heizstufen steuern if-then-else?

Hallo, brauche mal eure Hilfe. Ich würde gerne 3 Heizschlangen abhängig vom Einspeisestrom schalten. Die 3 Stufen sollen durch ein shelly (2pmplus) gesteuert werden. Stufe 1 S0, Stufe 2 S1, Stufe 3 S0+S1 … Die Abfrage des Leistungsüberschusses habe ich hin bekommen. Nur bin ich mit den Schleifen if,then,else überfordert. Es soll folgende Steuerung funktionieren:

P < 400W keine Funktion
P > 400 W Stufe1
p > 800 W < 1200 W Stufe2
p > 1200W Stufe 3
Hab keine Ahnung wie ich das machen kann, das zwischen den Stufen Hoch und Runter bzw. Ausgeschaltet wird.
Hier mal das Yaml was ich bisher habe:

alias: Warmwasser
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 400
    id: Stufe1
    below: 799.9
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 800
    id: Stufe2
    below: 1199.9
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 1200
    id: Stufe 3
condition: []
action:
  - if:
      - condition: trigger
        id: Stufe1
    then:
      - service: input_booleam.turn_on
      - type: turn_on
        device_id: 99c001e5a0cd6c43782fe1d3e3e15f5c
        entity_id: switch.wasser_heizung_switch_0
        domain: switch
mode: single

Danke für eure Hilfe

Hi,
also 3 Auslöser hast du ja bereits gut hinbekommen:

  • Trigger 1: Der Wert des Sensors muss zwischen 400 und 799.9 liegen.
  • Trigger 2: Der Wert des Sensors muss zwischen 800 und 1199.9 liegen.
  • Trigger 3: Der Wert des Sensors muss über 1200 liegen.

Bisher lässt du jedoch nur bei Stufe 1 den Schalter betätigen.

Was soll denn auf den einzelnen Stufen passieren?

Das ist die Stelle in der ich immer zu Node Red mit einem Switch-Node wechsel.
Bin mal gespannt wie das mit HA-Bordmitteln geht…

Ich habe mich noch immer nicht mit NodeRed auseinander gesetzt. Muss ich unbedingt mal machen. Daher habe ich zum Glück bisher alles mit “HA Boardmitteln” oder der Hilfe aus diesem Forum lösen können :smile:

Wie @Flens geschrieben hat fehlt die die weitere Auswahl

ELIF

Was soll passieren, wenn Trigger 2 bzw. 3 ausgelöst werden?

steht oben drin.
Stufe 1 S0,
Stufe 2 S1,
Stufe 3 S0+S1
von Shelly schalten

Bin ja beruhigt, das es wohl doch nicht so easy ist :wink:

Wie gesagt, du hast zwar 3 Auslöser erstellt aber nur einen Schalter zur Verfügung gestellt:
entity_id: switch.wasser_heizung_switch_0
Wir müssten wissen ob dieser Schalter den von dir gewünschten Zustand schaltet und wie die anderen Schalter dafür lauten.
Überprüfe bitte vorher ob diese auch bereits existieren und ob diese den gewünschten Zustand auch schalten.
Danach ist es nicht schwierig diese in einer Automation nach deinen Wünschen zu nutzen.

Sorry dachte das wäre klar
Stufe 1 switch.wasser_heizung_switch_0
Stufe 2 switch.wasser_heizung_switch_1
Stufe 3 switch.wasser_heizung_switch_0 + switch.wasser_heizung_switch_1

Ungetestet aber das wäre zb. eine Möglichkeit:

alias: Warmwasser
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 400
    id: Stufe1
    below: 799.9
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 800
    id: Stufe2
    below: 1199.9
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 1200
    id: Stufe3
action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: trigger.id
            state: 'Stufe1'
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_0
      - conditions:
          - condition: numeric_state
            entity_id: trigger.id
            state: 'Stufe2'
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_1
      - conditions:
          - condition: numeric_state
            entity_id: trigger.id
            state: 'Stufe3'
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_0
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_1

Diese Automation basiert auf den von dir bereitgestellten Auslösern und schaltet die Schalter entsprechend der ausgelösten Stufe ein. Wenn die Stufe 1 ausgelöst wird, wird der Schalter switch.wasser_heizung_switch_0 eingeschaltet, wenn die Stufe 2 ausgelöst wird, wird der Schalter switch.wasser_heizung_switch_1 eingeschaltet und wenn die Stufe 3 ausgelöst wird, werden beide Schalter eingeschaltet.

2 „Gefällt mir“

Öhm, das selektive Ausschalten sollte nicht vergessen werden… :wink:

1 „Gefällt mir“

@Flens Danke … sah für mich schon gut aus. nur Leider noch ein Fehler :smiley:

Message malformed: extra keys not allowed @ data['action'][0]['choose'][0]['conditions'][0]['state']

@Giesser wie meinst du das ?

Mal ein anderer Ansatz:

Eigentlich wird ja folgendes gesucht wenn ich es richtig verstanden habe:
(einfach mal die 2 Zeilen bei Entwicklerwerkzeuge>Template reinpasten und mit dem Wert “956” spielen.

{% set x = ((956 | float) // 400) | int %}
{{ x }}

x wäre dann der sensor.einspeisung
Kann man ja mal mit 300, 420, 810 und 1230 probieren was passiert aber eigentlich sollte man das aus dem YAML auch so rauslesen können.

damit bekommt man auf einfache Weise 4 Stati, 0,1,2 & 3

PS: die 2 slashes sind kein Kommentar auch wenn das der Code Abschnitt farblich so suggeriert :slight_smile:

1 „Gefällt mir“

Ich habe auch nochmal etwas versucht. Beides sollte damit hoffentlich behoben sein:


alias: Warmwasser
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 400
    id: Stufe1
    below: 799.9
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 800
    id: Stufe2
    below: 1199.9
  - platform: numeric_state
    entity_id: sensor.einspeisung
    for:
      hours: 0
      minutes: 0
      seconds: 10
    above: 1200
    id: Stufe3
condition:
  - condition: template
    value_template: >-
      {% if trigger.id == 'Stufe1' %}
        {{ is_state('switch.wasser_heizung_switch_0', 'off') }}
      {% elif trigger.id == 'Stufe2' %}
        {{ is_state('switch.wasser_heizung_switch_1', 'off') }}
      {% elif trigger.id == 'Stufe3' %}
        {{ is_state('switch.wasser_heizung_switch_0', 'off') and is_state('switch.wasser_heizung_switch_1', 'off') }}
      {% endif %}
action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: trigger.id
            state: 'Stufe1'
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_0
          - service: switch.turn_off
            target:
              entity_id: switch.wasser_heizung_switch_1
      - conditions:
          - condition: numeric_state
            entity_id: trigger.id
            state: 'Stufe2'
        sequence:
          - service: switch.turn_off
            target:
              entity_id: switch.wasser_heizung_switch_0
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_1
      - conditions:
          - condition: numeric_state
            entity_id: trigger.id
            state: 'Stufe3'
        sequence:
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_0
          - service: switch.turn_on
            target:
              entity_id: switch.wasser_heizung_switch_1

Bin mir aber nicht sicher wieso es zu der Fehlermeldung kam, wenn es also nicht funktioniert, sollte man evtl. besser dem Vorschlag von @justone nachkommen

1 „Gefällt mir“

danke …

gleiches Problem

Message malformed: extra keys not allowed @ data[‘action’][0][‘choose’][0][‘conditions’][0][‘state’]
diese Fehlermeldung macht mich wahnsinnig !

@justone Danke !

{% set x = ((956 | float) // 400) | int %}
{{ x }}

funktioniert wohl einwandfrei … X Liefert die Schaltsufe

jetzt frage ich mich nur wie ich das in die Steuerung bekomme…

Halt mein Vorschlag ist keine Komplettlösung sondern nur eine Abkürzung wie man zu den unterschiedlichen Stati kommt, also den Stufen1-3 oder den IDs.
Der Rest muss schon so mit CHOOSE und den Options bewerkstelligt werden wie @Flens das vorgeschlagen hat.

Zum Fehler. Ja da ist HA etwas gruselig.
Da steht das in der ersten Action (erste ist 0) in der 1. Auswahl (choose[0]) bei der ersten Condition beim state etwas nicht funktioniert.

Wenn ich mir das in den Automatisierungseditor lade (den YAML code) und dann im visuellen Editor anzeigen lassen zeigt sich das Dilemma. eine condition numeric_state kann nicht ‘Stufe1’ haben denn das ist kein numerischer Wert. Deshalb zeigt der visuelle Editor dann auch das dort geprüft wird das trigger.id sozusagen nix ist. Hätte ich jetzt vermutet.
Wenn man den numeric_state durch eine state Bedingung ersetzt springt die Fehlermeldung dann zu (choose[1]) weil man choose[0] behoben hat.

1 „Gefällt mir“

Ich habe jetzt auch mal etwas rumprobiert, aber mit der richtigen Verschachtelung der Bedingungen scheitere ich bisher noch.

dachte schon, bin vollkommen blöd … aber nachdem sich die Gurus hier auch etwas schwer tun, bin ich deswegen schon mal beruhigt :wink:

Ich habe noch eine andere Alternative, die mir einfacher umsetzbar erscheint und den Vorteil hat, dass über eine Hysterese nicht die Gefahr besteht, dass dauernd hin- und hergeschaltet wird.
Mit drei Schwellwertsensor-Helfern für Stufe1 bis 3, die automatisch die Hysterese bereitstellen, die dann direkt als Trigger in einer Automation genutzt werden können.
Dort kann man dann die Aktionen je nach Auslöser definieren.
Erste Testumsetzung hat ca. 45 Minuten gedauert. :slight_smile:

Edit: Die Abstimmung der Hysteresewerte (hab mal mit 5 Watt begonnen) muss ich natürlich demnächst austesten.

@Innovator Verrätst du uns auch was du gebastelt hast ?

Oh sorry, ich dachte der Ansatz war so verständlich. Hier jetzt die Automatisierung auf Basis von 4 Schwellwertsensoren. Habe zum Test nur irgendwelche Schaltsteckdosen genommen:

alias: Solar Überschussnutzung
description: Nutzen der PV-Überschussleistung durch selektives Schalten von Verbrauchern
trigger:
  - platform: state
    entity_id:
      - binary_sensor.solar_uberschuss_stufe_0
    attribute: sensor_value
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 15
    id: "0"
  - platform: state
    entity_id:
      - binary_sensor.solar_uberschuss_stufe_1
    attribute: sensor_value
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 5
    id: "1"
  - platform: state
    entity_id:
      - binary_sensor.solar_uberschuss_stufe_2
    attribute: sensor_value
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 5
    id: "2"
  - platform: state
    entity_id:
      - binary_sensor.solar_uberschuss_stufe_3
    attribute: sensor_value
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 5
    id: "3"
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: "1"
        sequence:
          - type: turn_on
            device_id: 8a35efe10ae9a0b2135ae08a967fbb52
            entity_id: switch.nachtschrank_michael_schalter
            domain: switch
          - type: turn_off
            device_id: 089aea2ee4070e18755dd02a1d644958
            entity_id: switch.home_office_schalter
            domain: switch
      - conditions:
          - condition: trigger
            id: "2"
        sequence:
          - type: turn_off
            device_id: 8a35efe10ae9a0b2135ae08a967fbb52
            entity_id: switch.nachtschrank_michael_schalter
            domain: switch
          - type: turn_on
            device_id: 089aea2ee4070e18755dd02a1d644958
            entity_id: switch.home_office_schalter
            domain: switch
      - conditions:
          - condition: trigger
            id: "3"
        sequence:
          - type: turn_on
            device_id: 8a35efe10ae9a0b2135ae08a967fbb52
            entity_id: switch.nachtschrank_michael_schalter
            domain: switch
          - type: turn_on
            device_id: 089aea2ee4070e18755dd02a1d644958
            entity_id: switch.home_office_schalter
            domain: switch
      - conditions:
          - condition: trigger
            id: "0"
        sequence:
          - type: turn_off
            device_id: 8a35efe10ae9a0b2135ae08a967fbb52
            entity_id: switch.nachtschrank_michael_schalter
            domain: switch
          - type: turn_off
            device_id: 089aea2ee4070e18755dd02a1d644958
            entity_id: switch.home_office_schalter
            domain: switch
mode: single

Ein Schwellwertsensor sieht dann so aus:

entity_id: sensor.aktueller_solar_ueberschuss
hysteresis: 5
lower: 40
position: unknown
sensor_value: null
type: range
upper: 80
device_class: power
friendly_name: Solar Überschuss - Stufe 2

Die entity_id ist diejenige die ich abfrage, um den Schwellwertsensor “Solar Überschuss - Stufe 2” (binary_sensor.solar_uberschuss_stufe_2) zu setzen.

Habe beim rumspielen natürlich gelernt/verstanden, dass die Hysterese nicht für alle Schwellwertschalter gleich sein sollte. eventuell muss man in der Automation noch die jeweils anderen Schwellwertschalter auf off setzen. Aber das sind Feinheiten. So funktioniert es hier bei meinen Minitests zumindest ersteinmal. :slight_smile: