Finde den Fehler im Template nicht

Hallo,

ich bin noch relativ neu und bin aktuell viel am probieren, um HA zu verstehen.
Zum Test habe ich zwei ZWave Rolläden eingebunden. Diese haben die Angewohnheit, dass sie nicht immer “open” oder “closed” im state_attr stehen haben. Manchmal steht auch 98% oder 99% oder 2% usw. drin.

Also dachte ich mir, mache ich ein Template.
Das sieht dann so aus:

cover:
  - platform: template
    covers:
      cover_hwr:
        device_class: window
        friendly_name: "HWR"
        value_template: >
         {% if state_attr('cover.hwr', 'current_position')|int <= 10 %}
           closed
         {% else state_attr('cover.hwr', 'current_position')|int >= 11 %}
           open
         {% endif %}

Aber leider bekomme ich da immer einen Fehler.
Kann mir jemand sagen, was ich falsch mache?

Danke euch

Guten Abend,

versuchs mal so:

cover:
  - platform: template
    covers:
      cover_hwr:
        device_class: window
        friendly_name: "HWR"
        value_template: >
         {% if state_attr('cover.hwr', 'current_position')|int <= 10 %}
           closed
         {% elif state_attr('cover.hwr', 'current_position')|int >= 11 %}
           open
         {% endif %}

“else” durch “elif” ersetzen

Leider nein, ich bekomme folgenden Fehler:

Invalid config for 'template' from integration 'cover' at configuration.yaml, line 174: must contain at least one of open_cover, set_cover_position. for dictionary value 'covers->cover_hwr', got {'device_class': 'window', 'friendly_name': 'HWR', 'value_template': "{% if state_attr('cover.hwr', 'current_position')|int <= 10 %}\n  closed\n{% elif state_attr('cover.hwr', 'current_position')|int >= 11 %}\n  open\n{% endif %}"}

In der Beschreibung zu cover template steht aber doch, dass die Angaben optional sind!?

In der Dokumentation steht, dass entweder open_cover oder set_cover_position definiert werden muss. Wenn open_cover definiert wird, muss auch close_cover definiert werden.

Ich bin auch noch relativ neu, aber kann es sein, dass sich Dein Problem per customize in der configuration.yaml lösen lässt?

Edit: Okay, habe mich geirrt. Wenn ich das richtig sehe, ist das per customize nicht möglich

Also so geht es jetzt.

cover:
  - platform: template
    covers:
      cover_hwr:
        device_class: window
        friendly_name: "HWR"
        value_template: >
         {% if state_attr('cover.hwr', 'current_position')|int <= 10 %}
           closed
         {% elif state_attr('cover.hwr', 'current_position')|int >= 11 %}
           open
         {% endif %}
        set_cover_position:
          service: script.cover_group_position
          data:
            position: "{{position}}"

Aber, es wird mir trotzdem beim Schalter 99% angezeigt statt “open”. :thinking:

Wie kann ich denn ein logisches UND hinzufügen?
Wenn meine Schleife quasi >= 11 AND <= 99 sein soll?

1 „Gefällt mir“

Also ich bin noch Anfänger, aber das dürfte denke ich in etwa wie folgt gehen:

{% set pos = state_attr('cover.hwr', 'current_position') %}
{% if pos| int >= 11 and pos| int <= 99 %}
   open
[...]

Neu kalibriert hast Du diese aber schon mal?

Falls die Kalibrierung nicht funktioniert, was ich mir aber nicht vorstellen kann,
hier mal Dein Template Cover.
Wenn Position >95% → dann wird 100% ausgegeben, also offen
Wenn Position < 5% → dann wird 0% ausgegeben, also geschlossen

cover:
  - platform: template
    covers:
      rollladen_terrasse_wz:
        friendly_name: "HWR"
        position_template: |
          {% set level = state_attr('cover.hwr', 'current_position') | int(100) %}
          {% if level < 5 %}
          0
          {% elif level > 95 %}
          100
          {% else %}
          {{ level }}
          {% endif %}
        open_cover:
          service: cover.open_cover
          data: {}
          target:
            entity_id: cover.hwr
        close_cover:
          service: cover.close_cover
          data: {}
          target:
            entity_id: cover.hwr
        stop_cover:
          service: cover.stop_cover
          data: {}
          target:
            entity_id: cover.hwr
        set_cover_position:
          service: cover.set_cover_position
          data:
            position: "{{position}}"
            entity_id: cover.hwr
        unique_id: 28e7d8cc-7198-49bb-8598-1ac6054ac669

Gruß
Osorkon

ok, das hat geklappt.
Vielen Dank schonmal dafür. Jetzt habe ich noch zwei Frage:
1: wie setze ich denn zusätzlich die 100 bzw. die 0 in “current_position”?
2: wenn ich mehrere Rolläden habe, kann ich da eine Art Wildcard in HA setzen?
Damit man das nicht für jeden Rolladen machen muss? Die fangen ja alle mit “cover.” an.

Dennis

Diese Frage verstehe ich nicht?!
Du steuerst mit dem Template Cover 1:1 die position des echten Covers.
100% Template Cover → 100% Orginal Cover → beleibt der Original Cover bei 96% stehen /da nicht richtig kalibriert) zeigt der Template Cover 100%
Umgekehrt für das Schließen.

Entweder jeden Rollladen ordentlich Kalibrieren, oder halt für jeden Rollladen ein Templae Sensor erstellen.

cover:
  - platform: template
    covers:
      rollladen_xyz1:
      ...
  - platform: template
    covers:
      rollladen_xyz2:
      ...
  - platform: template
    covers:
      rollladen_xyz3:
      ...

Gruß
Osorkon

Sorry für mein spätes Feedback.
Zu 1: Ich habe dir mal ein Screenshot angehängt. Das Problem ist, dass in dem Attribut bei current_position 99 steht. Der Zustand ist wie er sein soll → offen.
Daher die Frage, ob ich das Attribut auch entsprechend setzen kann.

Kalibrierung ist mehrfach gelaufen, aber irgendwie bleibt es bei den 99%

Vielleicht nochmal zur Verdeutlichung, wieso ich das machen will.
Ich nutze den vertical stack. Dieser zeigt mir neben dem Zustand auch die current_position an.
So sieht das aktuell bei mir aus. Mich stört die Anzeige mit den 99%

Bildschirmfoto 2024-04-15 um 07.19.06

Und dafür hast Du doch das Template Cover erstellt! Das nutzt Du jetzt anstelle des Orginal Covers in Deinen Karten.

Gruß
Osorkon

Es tut mir leid, wenn ich mich da doof anstelle, aber bin ja noch neu.
Wie verweise ich denn auf das erstellte Template?
Stehe gerade auf dem Schlauch, sorry.

Ich habe das Template in der confuguration.yaml definiert.

In der Karte auf dem Dashboard wählst du anstelle des Original-Covers das Template-Cover, dieses ist eine eigene Entität

Habe es hinbekommen.
Vielen lieben Dank für eure Geduld.