Bestimmte Entität aus einer Gruppe nach Attribut filtern

Hallo zusammen,

ich habe eine, so wie ich glaube einfache Herausforderung, für die ich einfach keine Lösung finde.

Zunächst mein Status. Bin Anfänger und habe ca 8 Wochen HA Erfahrung.

Ich habe einen Gruppen Helfer erstellt “Alle Jalousien”. Darin finden sich alle meine Rollos. Die Rollos steuere ich mit Shellys.

Nun habe ich unterschiedliche Automationen zum öffnen und schließen dieser Jalousien, was insgesamt auch gut funktioniert, wofür ich den Helfer aber bislang nicht benötigt habe.

Nun bleibt man aber nicht auf der Stelle stehen, sondern möchte sich ja weiterentwickeln ;-). Und da in den Automationen ja am Ende immer dasselbe passiert, nämlich entweder Rollos Schließen oder öffnen, dachte ich das man das auch vereinfachen könnte.
Eine dieser Automationen öffnet mir “auf Knopfdruck” alle Jalousien der Helfer Gruppe (Alle Jalousien), die im Status “closed” sind. Das mache ich so in der Automation:

action: cover.open_cover
data:
  entity_id: >-
    {{ expand('cover.alle_jalousien') | selectattr("state", "eq", "closed") |
    map(attribute="entity_id") | list }}

Das klappt soweit gut, ist aber nur die halbe Miete, denn alle Jalousien, die nicht im Status “closed” stehen werden nicht geöffnet. Alle Rollos, die das Attribut current_position < 100 haben, stehen im Status “open” und werden nicht geöffnet. Das soll aber passieren.

Also würde ich gerne aus der Helfergruppe “Alle Jalousien” lieber nicht diejenigen herausfiltern, die im Status “Closed” stehen, sondern die die im Status “open” stehen aber wo das Attribut current_position kleiner ist als 100 ist (damit wären das die Rollos die nicht vollständig geschlossen, und auch nicht vollständig geöffnet sind).

Das bekommt ich nicht hin. [image] und ich finde auch kein vernünftiges Anwendungsbeispiel. Alles Beispeile beziehen sich immer nur auf den Zustand.

{{ state_attr('cover.alle_jalousien', 'current_position') }}

bekomme ich current_position der Helfergruppe. Diese rechnet aber anscheinend alle current_positions aller Rollos zusammen und gibt den Wert aus.

{{ expand('cover.alle_jalousien') | selectattr("current_position", "lt", "100") | map(attribute="entity_id") | list }}

wirft einen Error: homeassistant.helpers.template.TemplateState object’ has no attribute ‘current_position’

Und damit bitte ich euch um Hilfe …

Das wäre eine bespielhafte Automation, die aber nur die Jalousien die wirklich im Status closed sind öffnet. Halb heruntergelassene eben nicht.

alias: Aufstehen
description: >-
  Diese Automation dient zur Manuellen Auslösung von Aufstehen.

  - Alle geschlossenen Jalousien werden geöffnet

  - Das Licht im Bad wird eingeschaltet

  - Das Radio im Bad wird eingeschaltet


  Die geschlossenen Rollos werden aus dem Gruppenhelfer "Alle Jalousien"
  ausgelesen.
triggers:
  - trigger: state
    entity_id:
      - input_button.aufstehen
    to: null
conditions: []
actions:
  - action: cover.open_cover
    data:
      entity_id: >-
        {{ expand('cover.alle_jalousien') | selectattr("state", "eq", "closed")
        | map(attribute="entity_id") | list }}
  - action: media_player.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: media_player.soundtouch_bad
  - action: light.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: light.licht_bad_switch_0
mode: single

Willkommen im Forum!

current_position ist eins von mehreren Attributen und damit Teil des gesamten state objects, siehe hier. Attribute müssen mit dem Präfix attributes. angesprochen werden.

Die aktuelle Position deiner Cover ist ein float-Object. Wenn du die Zahl in Anführungszeichen packst, machst du daraus einen String, das kann nicht verglichen werden, deshalb die Fehlermeldung.

Mach es so:


{{ expand('cover.alle_jalousien') |selectattr('attributes.current_position', '<', 100) |map(attribute='entity_id') |list }}

Natürlich könntest du auch einfach alle Jalousien öffnen, ungeachtet ihrer Position.

1 „Gefällt mir“

Hi. Voll cool. Funktioniert auf Anhieb und habs auch verstande! Vielen Dank!!!

Ja, einfach alle Rollos hochfahren, geht natürlich auch, aber alle Shellys werden dabei ganz kurz angefahren und “klacken” auch hörbar im Schalter. Ich war der Meinung dass das vielleicht nicht so gut ist für die Geräte.
So finde ich es auch wesentlich sauberer.