OpenHAB-Widgets mit oh-repeater
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
Das Widget setzt voraus, dass bei allen Fenstern in den Eigenschaften des Fensters die semantic class auf Window gesetzt ist.
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.
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:
Ü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:
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
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.