Verschattungsschteuerung Rolläden

Hallo,

ich würde gerne eine Verschattungsteuerung für meine Rolläden erstellen. Einen Code habe ich soweit zusammen.

Ich weiß nur nicht, wie ich das am besten mit dem Azimuth-Trigger machen soll. Der Azimuth wird bei Home-Assistant ca. alle 5 Minuten aktualisiert. Habe jetzt erstmal zum testen eingetragen, dass bei jeder Änderung die Automatisierung getriggert werden soll. Das heißt natürlich auch, selbst wenn es nicht notwendig ist, läuft die Automatisierung alle 5 Minuten und schaut, ob etwas ausgelöst werden muss.

Hat jemand vielleicht eine Idee, wie man das schlauer lösen könnte? Hatte schon gedacht, jeweils einen Trigger für die Unter- und Oberwerte der einzelnen Rolläden zu machen. Macht es natürlich ziemlich unübersichtlich.

alias: Rolladensteuerung nach Azimut, Helligkeit und Temperatur neu
description: Steuerung der Rolläden basierend auf Azimut, Helligkeit und Temperatur
triggers:
  - entity_id:
      - sensor.sonneneinstrahlung_köln
    above: 400
    for:
      hours: 0
      minutes: 11
      seconds: 0
    trigger: numeric_state
  - entity_id:
      - sensor.sonneneinstrahlung_köln
    below: 200
    for:
      hours: 0
      minutes: 11
      seconds: 0
    trigger: numeric_state
  - entity_id: sensor.temperatur_garten_temperature
    above: 20
    trigger: numeric_state
  - entity_id: sensor.temperatur_garten_temperature
    below: 17
    trigger: numeric_state
  - entity_id:
      - sensor.sun_solar_azimuth
    for:
      hours: 0
      minutes: 5
      seconds: 0
    trigger: state
conditions:
  - condition: sun
    after: sunrise
    before: sunset
actions:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ 70 < states('sensor.sun_solar_azimuth') | float(0) < 170 }}"
          - condition: template
            value_template: >-
              {{ state_attr('cover.kuechelinks_cover_0', 'current_position') !=
              63 }}
        sequence:
          - data:
              position: 63
            action: cover.set_cover_position
            target:
              entity_id: cover.kuechelinks_cover_0
      - conditions:
          - condition: template
            value_template: "{{ 60 < states('sensor.sun_solar_azimuth') | float(0) < 160 }}"
          - condition: template
            value_template: >-
              {{ state_attr('cover.kueche_rechts_cover_0', 'current_position')
              != 63 }}
        sequence:
          - data:
              position: 63
            action: cover.set_cover_position
            target:
              entity_id: cover.kueche_rechts_cover_0
      - conditions:
          - condition: template
            value_template: "{{ 80 < states('sensor.sun_solar_azimuth') | float(0) < 210 }}"
          - condition: template
            value_template: "{{ state_attr('cover.wohnzimmer_1', 'current_position') != 63 }}"
        sequence:
          - data:
              position: 63
            action: cover.set_cover_position
            target:
              entity_id: cover.wohnzimmer_1
      - conditions:
          - condition: template
            value_template: "{{ 110 < states('sensor.sun_solar_azimuth') | float(0) < 250 }}"
          - condition: template
            value_template: "{{ state_attr('cover.wohnzimmer_2', 'current_position') != 60 }}"
        sequence:
          - data:
              position: 60
            action: cover.set_cover_position
            target:
              entity_id: cover.wohnzimmer_2
      - conditions:
          - condition: template
            value_template: "{{ 155 < states('sensor.sun_solar_azimuth') | float(0) < 275 }}"
          - condition: template
            value_template: >-
              {{ state_attr('cover.wohnzimmer_3_cover_0', 'current_position') !=
              60 }}
        sequence:
          - data:
              position: 60
            action: cover.set_cover_position
            target:
              entity_id: cover.wohnzimmer_3_cover_0
      - conditions:
          - condition: template
            value_template: "{{ 170 < states('sensor.sun_solar_azimuth') | float(0) < 290 }}"
          - condition: template
            value_template: >-
              {{ state_attr('cover.wohnzimmer_4_pm_cover_0', 'current_position')
              != 60 }}
        sequence:
          - data:
              position: 60
            action: cover.set_cover_position
            target:
              entity_id: cover.wohnzimmer_4_pm_cover_0
      - conditions:
          - condition: template
            value_template: "{{ 200 < states('sensor.sun_solar_azimuth') | float(0) < 330 }}"
          - condition: template
            value_template: "{{ state_attr('cover.buro', 'current_position') != 60 }}"
        sequence:
          - data:
              position: 60
            action: cover.set_cover_position
            target:
              entity_id: cover.buro
      - conditions:
          - condition: template
            value_template: "{{ 100 < states('sensor.sun_solar_azimuth') | float(0) < 290 }}"
          - condition: template
            value_template: "{{ state_attr('cover.markise', 'current_position') != 0 }}"
        sequence:
          - data:
              position: 0
            action: cover.set_cover_position
            target:
              entity_id: cover.markise
      - conditions:
          - condition: or
            conditions:
              - condition: numeric_state
                entity_id: sensor.sonneneinstrahlung_köln
                below: 200
                value_template: >
                  {% set last =
                  states.sensor.sonneneinstrahlung_köln.last_changed %}

                  {{ (now() - last).total_seconds() < 660 }}
              - condition: numeric_state
                entity_id: sensor.temperatur_garten_temperature
                below: 17
        sequence:
          - target:
              entity_id:
                - cover.wohnzimmer_1
                - cover.wohnzimmer_2
                - cover.markise
                - cover.wohnzimmer_3_cover_0
                - cover.wohnzimmer_4_pm_cover_0
                - cover.kuechelinks_cover_0
                - cover.kueche_rechts_cover_0
                - cover.buro
            action: cover.open_cover
            data: {}
      - conditions:
          - condition: template
            value_template: >-
              {{ states('sensor.sun_solar_azimuth') | float(0) <= 70 or
              states('sensor.sun_solar_azimuth') | float(0) >= 170 }}
          - condition: template
            value_template: >-
              {{ state_attr('cover.kuechelinks_cover_0', 'current_position') <
              100 }}
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.kuechelinks_cover_0
      - conditions:
          - condition: template
            value_template: >-
              {{ not (60 < states('sensor.sun_solar_azimuth') | float(0) < 160)
              }}
          - condition: template
            value_template: >-
              {{ state_attr('cover.kueche_rechts_cover_0', 'current_position') <
              100 }}
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.kueche_rechts_cover_0
      - conditions:
          - condition: template
            value_template: >-
              {{ not (80 < states('sensor.sun_solar_azimuth') | float(0) < 210)
              }}
          - condition: template
            value_template: "{{ state_attr('cover.wohnzimmer_1', 'current_position') < 100 }}"
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.wohnzimmer_1
      - conditions:
          - condition: template
            value_template: >-
              {{ not (110 < states('sensor.sun_solar_azimuth') | float(0) < 250)
              }}
          - condition: template
            value_template: "{{ state_attr('cover.wohnzimmer_2', 'current_position') < 100 }}"
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.wohnzimmer_2
      - conditions:
          - condition: template
            value_template: >-
              {{ not (155 < states('sensor.sun_solar_azimuth') | float(0) < 275)
              }}
          - condition: template
            value_template: >-
              {{ state_attr('cover.wohnzimmer_3_cover_0', 'current_position') <
              100 }}
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.wohnzimmer_3_cover_0
      - conditions:
          - condition: template
            value_template: >-
              {{ not (170 < states('sensor.sun_solar_azimuth') | float(0) < 290)
              }}
          - condition: template
            value_template: >-
              {{ state_attr('cover.wohnzimmer_4_pm_cover_0', 'current_position')
              < 100 }}
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.wohnzimmer_4_pm_cover_0
      - conditions:
          - condition: template
            value_template: >-
              {{ not (200 < states('sensor.sun_solar_azimuth') | float(0) < 330)
              }}
          - condition: template
            value_template: "{{ state_attr('cover.buro', 'current_position') < 100 }}"
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.buro
      - conditions:
          - condition: template
            value_template: >-
              {{ not (100 < states('sensor.sun_solar_azimuth') | float(0) < 290)
              }}
          - condition: template
            value_template: "{{ state_attr('cover.markise', 'current_position') < 100 }}"
        sequence:
          - action: cover.open_cover
            data: {}
            target:
              entity_id: cover.markise
mode: single

Hi, hast Du es schon mal mit node-red versucht? Ich stell Dir hier mal einen Flow rein der nur mit den entsprechenden Entitäten und Server umgeändert werden muss, ansonsten kannst Du den direkt so verwenden.

[{"id":"db027307a1e58580","type":"tab","label":"Verschattung EZ","disabled":false,"info":"","env":[]},{"id":"63e2269e63a2565a","type":"comment","z":"db027307a1e58580","name":"Verschattung Esszimmer","info":"","x":130,"y":200,"wires":[]},{"id":"189a5fdf2e139389","type":"server-state-changed","z":"db027307a1e58580","name":"Azimuth > 265 Grad","server":"49761872cda20bfb","version":6,"outputs":2,"exposeAsEntityConfig":"","entities":{"entity":["sensor.sun_azimuth"],"substring":[],"regex":[]},"outputInitially":false,"stateType":"num","ifState":"265","ifStateType":"num","ifStateOperator":"gte","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":110,"y":460,"wires":[["08d791f2b8116a18"],[]]},{"id":"c310977ac7c72a29","type":"api-call-service","z":"db027307a1e58580","name":"Rollo EZ auf","server":"49761872cda20bfb","version":7,"debugenabled":false,"action":"cover.open_cover","floorId":[],"areaId":[],"deviceId":[],"entityId":["cover.plus2pm"],"labelId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"cover","service":"open_cover","x":650,"y":460,"wires":[[]]},{"id":"f6823f387128dc4e","type":"function","z":"db027307a1e58580","name":"Verschattung aktiv setzen","func":"var speicher = flow.get('verschattung_aktiv_ez') || \"Nein\";\nif (speicher===\"Nein\")\n{\n    flow.set('verschattung_aktiv_ez',\"Ja\");\n    msg.payload=\"Ja\";\n    return msg;\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":870,"y":280,"wires":[["87e727a2f7346d17"]]},{"id":"02e071d75d2b9beb","type":"trigger-state","z":"db027307a1e58580","name":"Azimuth zw. 185-265","server":"49761872cda20bfb","version":5,"inputs":0,"outputs":2,"exposeAsEntityConfig":"","entities":{"entity":["sensor.sun_azimuth"],"substring":[],"regex":[]},"debugEnabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":">=","comparatorValueDatatype":"num","comparatorValue":"185"},{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"<=","comparatorValueDatatype":"str","comparatorValue":"265"}],"customOutputs":[],"outputInitially":false,"stateType":"num","enableInput":false,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"x":110,"y":280,"wires":[["90e77b89f51c6b92"],[]]},{"id":"90e77b89f51c6b92","type":"api-current-state","z":"db027307a1e58580","name":"Erw. Temperatur über 10","server":"49761872cda20bfb","version":3,"outputs":2,"halt_if":"10","halt_if_type":"num","halt_if_compare":"gte","entity_id":"sensor.gruenberg_temperatur","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":350,"y":280,"wires":[["a25dbdad75ed50e8","229bed4491bc1949"],[]]},{"id":"a25dbdad75ed50e8","type":"api-current-state","z":"db027307a1e58580","name":"Wird es Sonnig?","server":"49761872cda20bfb","version":3,"outputs":2,"halt_if":"sunny","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.gruenberg_wetterzustand","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":590,"y":260,"wires":[["f6823f387128dc4e"],[]]},{"id":"229bed4491bc1949","type":"api-current-state","z":"db027307a1e58580","name":"Wird es teilweise bedeckt?","server":"49761872cda20bfb","version":3,"outputs":2,"halt_if":"partlycloudy","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.gruenberg_wetterzustand","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","x":620,"y":320,"wires":[["f6823f387128dc4e"],[]]},{"id":"08d791f2b8116a18","type":"function","z":"db027307a1e58580","name":"Verschattung deaktiv setzen","func":"var speicher = flow.get('verschattung_aktiv_ez') || \"Nein\";\nif (speicher===\"Ja\")\n{\n    flow.set('verschattung_aktiv_ez',\"Nein\");\n    msg.payload=\"Nein\";\n    return msg;\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":460,"wires":[["c310977ac7c72a29"]]},{"id":"87e727a2f7346d17","type":"api-call-service","z":"db027307a1e58580","name":"Rollo EZ 75%","server":"49761872cda20bfb","version":7,"debugenabled":false,"action":"cover.set_cover_position","floorId":[],"areaId":[],"deviceId":[],"entityId":["cover.plus2pm"],"labelId":[],"data":"{\t\"position\":25\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","blockInputOverrides":false,"domain":"cover","service":"set_cover_position","x":1240,"y":280,"wires":[[]]},{"id":"49761872cda20bfb","type":"server","name":"Hometomanik","version":5,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"id","deviceSelector":"id","entitySelector":"id","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Viel Spass.
Gelich werden wieder einige schreien es geht auch mit HA Komponenten, aber warum sich das leben so schwer machen wenn alles schon existiert.

Ja und? Und wenn du 100 Automatisationen pro Minute laufen lässt. Sollte kein Problem sein.

triggers:
  - value_template: >
      {{ state_attr('sun.sun', 'elevation') > -3 and now() >= today_at("06:20")
      }}
    id: öffnenNachSonnenstand
    trigger: template
  - at: "07:00:00"
    id: öffnenFallback
    trigger: time
  - at: "08:00:00"
    id: öffnenWochenende
    trigger: time
  - entity_id:
      - sun.sun
    attribute: elevation
    below: -3
    id: schliessen
    trigger: numeric_state
  - at: "22:30:00"
    id: schliessen
    trigger: time

So habe ich es das gemacht. Der erste ist am ende auch ein 3 Grad auslöser. Jedoch nur, wenn es nach 6:20 ist.