OpenHAB-Widgets mit oh-repeater

Aus Debacher-Wiki
Zur Navigation springenZur Suche springen

Das Element oh-repeater in OpenHAB gibt eine Vielzahl von Möglichkeiten, die aber nicht immer ganz leicht nachzuvollziehen sind. Hier eine Sammlung meiner widget, die mit diesem Element arbeiten, jeweils mit einer Beschreibung.

Fensterzustände

uid: ud_window_state
tags: []
props:
  parameters: []
  parameterGroups: []
timestamp: Mar 24, 2024, 4:35:49 PM
component: oh-list-card
config:
  title: Fensterzustand
slots:
  default:
    - component: oh-repeater
      config:
        for: witem
        sourceType: itemsWithTags
        itemTags: Window
        fetchMetadata: semantics
        fragment: true
      slots:
        default:
          - component: oh-list-item
            config:
              icon: =(items[loop.witem.name + "_State"].state === "CLOSED")?"oh:window-closed":"oh:window-open"
              title: = loop.witem.metadata.semantics.config.hasLocation
              item: =loop.witem
              badge: =items[loop.witem.name + "_State"].displayState
              badgeColor: =(items[loop.witem.name + "_State"].state === "CLOSED")?"green":"red"
              footer: =loop.witem.name
              action: group
              actionGroupPopupItem: =loop.witem.metadata.semantics.config.hasLocation

2024-03-24 16.49.54 5d7497e50965.png

Das Widget setzt voraus, dass bei allen Fenstern in den Eigenschaften des Fensters die semantic class auf Window gesetzt ist.

2024-03-24 16.55.02 848f9122b0be.png

Der Repeater durchläuft dann alle Elemente, bei denen dieser Tag gesetzt ist. Da es sich um ein Feld aus den Metadaten handelt muss man noch angeben, dass auch diese Felder berücksichtigt werden.

  fetchMetadata: semantics

Das Widget erwartet weiterhin, dass das Fenster einem Raum zugeordnet ist, dann kann es den Namen dieses Raumes mit ausgeben.

  title: = loop.witem.metadata.semantics.config.hasLocation

Das Element oh-list-item besitzt auch Action Möglichkeiten. Mit den letzten beiden Zeilen wird jedes Item ancklickbar gemacht, in dem jeweiligen Popup erscheinen dann alle Elemente, die dem jeweiligen Raum zugeordnet sind.

2024-03-24 17.08.14 fdab3385c2b3.png

Icons tauchen in diesem Popup nur auf, wenn Sie bei den Eigenschaften des zugehörigen Items unter Category definiert wurden

Batteriestatus

Im Prinzip könnte man das obige Listing auch für den Batteriezustand nutzen, man müsste dann nur die list-items entsprechend anpassen und vor allem als SemanticClass den Wert LowBattery setzen.

Eine andere Möglichkeit ist aber die Nutzung einer Gruppe. Der Vorteil einer Gruppe besteht darin, dass sie auch über einen Gesamtzustand (ON/OFF) verfügt. Für das folgende Beispiel habe ich mir eine Gruppe

 GruppeBatterieZustand 

angelegt:

2024-03-24 17.59.19 0f22efed3609.png

Über den Punkt Change unten im Fenster kann man Batterien hinzufügen bzw. entfernen. Klick man auf Edit, so kann man Eigenschaften der Gruppe festlegen:

2024-03-24 18.07.04 e5d1aed361a2.png

Wichtig ist hier eigentlich nur die Aggregation Function

One ON then ON else OFF

Mit einer derartigen Gruppe arbeitet das folgende Listung:

uid: ud_batterie_status
tags: []
props:
  parameters:
    - context: item
      description: Group Das Item das alles Batterie-Level aggregiert
      label: Batterie Zustands Item
      name: batLevel
      required: true
      type: TEXT
      filterCriteria:
        - value: Group
          name: type
  parameterGroups: []
timestamp: Jan 3, 2022, 3:08:28 PM
component: oh-list-card
config:
  title: '="Eine Batterie Leer: " + ((items[props.batLevel].state === "OFF") ? "Nein" : "Ja")'
slots:
  default:
    - component: oh-repeater
      config:
        fragment: true
        for: item
        sourceType: itemsInGroup
        groupItem: =props.batLevel
        fetchMetadata: widgetOrder,semantics
      slots:
        default:
          - component: oh-list-item
            config:
              icon: =(loop.item.state === "OFF")?"oh:battery-90":"oh:battery-10"
              title: = loop.item.metadata.semantics.config.isPointOf
              item: =loop.item.name
              badge: =(loop.item.state === "OFF")?"Ok":"Wechseln"
              badgeColor: =(loop.item.state === "OFF")?"green":"red"
              footer: =items[loop.item.metadata.semantics.config.isPointOf+"_BatteryState"].state
              action: group
              actionGroupPopupItem: =loop.item.metadata.semantics.config.isPointOf

2024-03-24 17.42.37 6a20d33457bb.png

Bei manchen Geräten ist zusätzlich noch die Spannung der Batterie zugänglich. Im Footer des list-items wird dann dieser Wert angezeigt. Auch hier ist wieder ein Action Element genutzt, welche dann alle zugehörigen Items des Gerätes mit der Batterie anzeigt.